canvu-react 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chatbot.d.cts +2 -1
- package/dist/chatbot.d.ts +2 -1
- package/dist/react.cjs +15 -2
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +9 -220
- package/dist/react.d.ts +9 -220
- package/dist/react.js +15 -2
- package/dist/react.js.map +1 -1
- package/dist/realtime.cjs.map +1 -1
- package/dist/realtime.d.cts +3 -2
- package/dist/realtime.d.ts +3 -2
- package/dist/realtime.js.map +1 -1
- package/dist/{types--ALu1mF-.d.ts → types-BCtWx3zP.d.ts} +225 -6
- package/dist/{types-D1ftVsOQ.d.cts → types-B_rv7p8b.d.cts} +225 -6
- package/package.json +1 -1
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/freehand-path.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/react/chrome-context.ts","../src/math/item-transform.ts","../src/react/NavMenu.tsx","../src/react/VectorSelectionInspector.tsx","../src/react/VectorCanvasLayout.tsx","../src/image/indexed-db-image-store.ts","../src/react/persistence/indexed-db-adapter.ts","../src/react/persistence/local-storage-adapter.ts","../src/react/persistence/use-vector-canvas-document.ts","../src/react/plugins/types.ts","../src/react/plugins/tool-plugin.tsx","../src/react/ShapeContextMenu.tsx","../src/react/tools/icons.tsx","../src/react/tools/default-tools.tsx","../src/react/VectorToolbar.tsx","../src/camera/camera.ts","../src/image/pdf-loader.ts","../src/input/apple-pencil-navigation.ts","../src/input/attach-viewport-input.ts","../src/interaction/arrow-bindings.ts","../src/interaction/resize-handles.ts","../src/interaction/hit-test.ts","../src/interaction/mutations.ts","../src/react/VectorViewport.tsx","../src/renderer/svg-vector-renderer.ts","../src/scene/cull.ts","../src/scene/spatial-cull.ts","../src/scene/clone-item.ts","../src/scene/scene.ts","../src/react/InteractionOverlay.tsx","../src/react/presence/PresenceRemoteLayer.tsx","../src/react/presence/peer-color.ts","../src/react/TextEditOverlay.tsx","../src/react/vector-viewport-support.ts","../src/react/vector-tool-cursors.ts","../src/react/ViewportZoomControls.tsx"],"names":["d","base","op","b","s","stroke","strokeWidth","hex","showMarkerOpacity","opacityPct","jsx","labelStyle","jsxs","useState","useRef","useCallback","createContext","useContext","useMemo","useLayoutEffect","useEffect","Image","Fragment","canvasToBlob","g","MousePointer2","VectorViewport","items","useId","buildRasterImageChildrenSvg","worldX","worldY","id","pen","rootStyle","btnStyle"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * Axis-aligned rectangle in 2D (world or screen space).\n */\nexport type Rect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\n/**\n * Returns whether two axis-aligned rectangles intersect (edges touching count).\n */\nexport function rectsIntersect(a: Rect, b: Rect): boolean {\n\treturn (\n\t\ta.x < b.x + b.width &&\n\t\ta.x + a.width > b.x &&\n\t\ta.y < b.y + b.height &&\n\t\ta.y + a.height > b.y\n\t);\n}\n\n/**\n * Normalizes a rect so width and height are non-negative.\n */\nexport function normalizeRect(r: Rect): Rect {\n\tconst x0 = r.width >= 0 ? r.x : r.x + r.width;\n\tconst y0 = r.height >= 0 ? r.y : r.y + r.height;\n\treturn {\n\t\tx: x0,\n\t\ty: y0,\n\t\twidth: Math.abs(r.width),\n\t\theight: Math.abs(r.height),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Width/height of the shape’s local drawing box (same as `bounds` at creation). */\nexport type CustomShapeSize = { width: number; height: number };\n\n/**\n * How to build the inner SVG (inside the item’s bounding box).\n *\n * - **`svg`**: paste-friendly markup. Use `{{w}}`, `{{h}}`, `{{width}}`, or `{{height}}` where the size should go.\n * - **`render`**: a small function when you prefer code over a string template.\n */\nexport type CreateCustomShapeContent =\n\t| {\n\t\t\t/**\n\t\t\t * SVG fragment for `<g>` contents (no outer `<svg>`). Placeholders are replaced with numeric sizes:\n\t\t\t * `{{w}}`, `{{h}}`, `{{width}}`, `{{height}}`.\n\t\t\t */\n\t\t\tsvg: string;\n\t }\n\t| {\n\t\t\t/** Returns inner SVG for the given box size (same coordinate range as `bounds`). */\n\t\t\trender: (size: CustomShapeSize) => string;\n\t };\n\n/**\n * Replaces `{{w}}`, `{{h}}`, `{{width}}`, and `{{height}}` in a string with the given dimensions.\n * Use this if you build SVG strings yourself and want the same rules as {@link createCustomShapeItem}.\n */\nexport function expandCustomShapeTemplate(\n\ttemplate: string,\n\twidth: number,\n\theight: number,\n): string {\n\treturn template\n\t\t.replace(/\\{\\{w\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{h\\}\\}/g, String(height))\n\t\t.replace(/\\{\\{width\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{height\\}\\}/g, String(height));\n}\n\nfunction resolveCustomInner(\n\tcontent: CreateCustomShapeContent,\n\tsize: CustomShapeSize,\n): string {\n\tif (\"render\" in content) {\n\t\treturn content.render(size);\n\t}\n\treturn expandCustomShapeTemplate(content.svg, size.width, size.height);\n}\n\n/**\n * Builds the scaled `<g>` wrapper used for `childrenSvg` on custom shapes that support resize.\n */\nexport function buildCustomShapeChildrenSvg(\n\tinner: string,\n\tintrinsic: CustomShapeSize,\n\tbounds: Rect,\n): string {\n\tconst b = normalizeRect(bounds);\n\tconst sx = b.width / intrinsic.width;\n\tconst sy = b.height / intrinsic.height;\n\treturn `<g transform=\"scale(${sx},${sy})\">${inner}</g>`;\n}\n\n/**\n * Creates a user-defined shape from SVG markup or a `render` callback.\n *\n * Coordinates are **local**: draw from `(0,0)` to `(width, height)` of `bounds`. The library stores an\n * intrinsic copy so resize handles (when interactive) scale the drawing uniformly.\n *\n * @example\n * ```ts\n * const star = createCustomShapeItem(createShapeId(), rect, {\n * svg: `<polygon points=\"...\" fill=\"gold\" stroke=\"#b45309\" stroke-width=\"2\" />`,\n * });\n * ```\n *\n * @example Template (good for copy-paste from design tools)\n * ```ts\n * createCustomShapeItem(id, rect, {\n * svg: `<rect width=\"{{w}}\" height=\"{{h}}\" rx=\"8\" fill=\"#e0e7ff\" stroke=\"#6366f1\" />`,\n * });\n * ```\n */\nexport function createCustomShapeItem(\n\tid: string,\n\tbounds: Rect,\n\tcontent: CreateCustomShapeContent,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst intrinsic: CustomShapeSize = { width: r.width, height: r.height };\n\tconst inner = resolveCustomInner(content, intrinsic);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"custom\",\n\t\tcustomIntrinsicSize: intrinsic,\n\t\tcustomInnerSvg: inner,\n\t\tchildrenSvg: buildCustomShapeChildrenSvg(inner, intrinsic, r),\n\t};\n}\n","/**\n * Freehand stroke helpers: dedupe noisy samples and build smooth SVG path `d` values\n * (quadratic Béziers) so strokes don't look jagged / \"pixelated\" from many short L segments.\n */\n\n/** Drop intermediate samples closer than `minDist` (local/world units) to reduce jitter. */\nexport function dedupeFreehandPoints<T extends { x: number; y: number }>(\n\tpoints: readonly T[],\n\tminDist: number,\n): T[] {\n\tif (points.length <= 2) {\n\t\treturn points.map((p) => ({ ...p }));\n\t}\n\tconst minSq = minDist * minDist;\n\tconst first = points[0];\n\tif (!first) return [];\n\tconst out: T[] = [{ ...first }];\n\tfor (let i = 1; i < points.length - 1; i++) {\n\t\tconst p = points[i];\n\t\tconst last = out[out.length - 1];\n\t\tif (!p || !last) continue;\n\t\tconst dx = p.x - last.x;\n\t\tconst dy = p.y - last.y;\n\t\tif (dx * dx + dy * dy >= minSq) {\n\t\t\tout.push({ ...p });\n\t\t}\n\t}\n\tconst end = points[points.length - 1];\n\tconst lastKept = out[out.length - 1];\n\tif (!end || !lastKept) return out;\n\tif ((end.x - lastKept.x) ** 2 + (end.y - lastKept.y) ** 2 > 1e-12) {\n\t\tout.push({ ...end });\n\t}\n\treturn out;\n}\n\n/**\n * Smooth polyline → SVG path `d` using quadratic curves (canvas quadraticCurveTo midpoint pattern).\n * Avoids faceted \"broken\" lines from chaining many `L` commands.\n */\nexport function smoothFreehandPointsToPathD(\n\tpoints: readonly { x: number; y: number }[],\n): string {\n\tconst n = points.length;\n\tif (n === 0) return \"\";\n\tif (n === 1) {\n\t\tconst p = points[0];\n\t\tif (!p) return \"\";\n\t\treturn `M ${p.x} ${p.y}`;\n\t}\n\tif (n === 2) {\n\t\tconst a = points[0];\n\t\tconst b = points[1];\n\t\tif (!a || !b) return \"\";\n\t\treturn `M ${a.x} ${a.y} L ${b.x} ${b.y}`;\n\t}\n\tconst p0 = points[0];\n\tif (!p0) return \"\";\n\tlet d = `M ${p0.x} ${p0.y}`;\n\tlet i = 1;\n\tfor (; i < n - 2; i++) {\n\t\tconst pi = points[i];\n\t\tconst pi1 = points[i + 1];\n\t\tif (!pi || !pi1) continue;\n\t\tconst xc = (pi.x + pi1.x) / 2;\n\t\tconst yc = (pi.y + pi1.y) / 2;\n\t\td += ` Q ${pi.x} ${pi.y} ${xc} ${yc}`;\n\t}\n\tconst pLast = points[i];\n\tconst pEnd = points[i + 1];\n\tif (!pLast || !pEnd) return d;\n\td += ` Q ${pLast.x} ${pLast.y} ${pEnd.x} ${pEnd.y}`;\n\treturn d;\n}\n\n/**\n * Closed path from `perfect-freehand` outline → SVG `d` for fill.\n *\n * Uses the algorithm from the perfect-freehand README (`getSvgPathFromStroke`):\n * each outline point is a quadratic control point and the midpoint between\n * consecutive outline points is the curve endpoint. This produces\n * C1-continuous curves without the kinks that chained `T` or short `L` segments cause.\n */\nexport function outlineStrokeToClosedPathD(\n\toutline: readonly [number, number][],\n): string {\n\tconst len = outline.length;\n\tif (len === 0) return \"\";\n\tconst first = outline[0];\n\tif (!first) return \"\";\n\tif (len < 3) {\n\t\tlet d = `M ${first[0]} ${first[1]}`;\n\t\tfor (let i = 1; i < len; i++) {\n\t\t\tconst pt = outline[i];\n\t\t\tif (!pt) continue;\n\t\t\td += ` L ${pt[0]} ${pt[1]}`;\n\t\t}\n\t\treturn `${d} Z`;\n\t}\n\n\tlet d = `M ${first[0]} ${first[1]} Q`;\n\tfor (let i = 0; i < len; i++) {\n\t\tconst p0 = outline[i];\n\t\tconst p1 = outline[(i + 1) % len];\n\t\tif (!p0 || !p1) continue;\n\t\td += ` ${p0[0]} ${p0[1]} ${(p0[0] + p1[0]) / 2} ${(p0[1] + p1[1]) / 2}`;\n\t}\n\treturn `${d} Z`;\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, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\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\tdedupeFreehandPoints,\n\toutlineStrokeToClosedPathD,\n\tsmoothFreehandPointsToPathD,\n} from \"./freehand-path\";\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: 3 },\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.56,\n\t\t\t\tstreamline: 0.18,\n\t\t\t\tsimulatePressure: false,\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.72,\n\t\t\tstreamline: 0.42,\n\t\t\tsimulatePressure: false,\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: false,\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\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\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\tconst r = Math.max(0.5, style.strokeWidth / 2);\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr,\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\t// Keep dense samples so circles/arcs don't become faceted.\n\tconst minDist = Math.min(0.25, Math.max(0.02, style.strokeWidth * 0.02));\n\tconst pts = dedupeFreehandPoints(pathPointsLocal, minDist);\n\tif (pts.length === 0) return null;\n\tif (pts.length === 1) {\n\t\tconst p = pts[0];\n\t\tif (!p) return null;\n\t\tconst r = Math.max(0.5, style.strokeWidth / 2);\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr,\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tconst hasPressure =\n\t\ttoolKind === \"draw\" &&\n\t\tpts.some((p) => p.pressure != null && Number.isFinite(p.pressure));\n\tif (toolKind === \"draw\" && !hasPressure) {\n\t\tconst d = smoothFreehandPointsToPathD(pts);\n\t\treturn {\n\t\t\tkind: \"strokePath\",\n\t\t\td,\n\t\t\tstroke: style.stroke,\n\t\t\tstrokeWidth: style.strokeWidth,\n\t\t\tstrokeOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tconst input = hasPressure\n\t\t? pts.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: pts.map((p) => [p.x, p.y] as [number, number]);\n\tconst opts = perfectFreehandOptions(toolKind, style, strokeComplete, hasPressure);\n\tlet outline: [number, number][] = [];\n\ttry {\n\t\tconst raw = getStroke(input, opts);\n\t\toutline = raw.map(([x, y]) => [x, y] as [number, number]);\n\t} catch {\n\t\toutline = [];\n\t}\n\tif (outline.length >= 3) {\n\t\tconst d = outlineStrokeToClosedPathD(outline);\n\t\treturn {\n\t\t\tkind: \"fillPath\",\n\t\t\td,\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tconst d = smoothFreehandPointsToPathD(pts);\n\treturn {\n\t\tkind: \"strokePath\",\n\t\td,\n\t\tstroke: style.stroke,\n\t\tstrokeWidth: style.strokeWidth,\n\t\tstrokeOpacity: 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 === \"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/** 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, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type CanvuChromeActiveToolStyle = StrokeStyle & {\n\ttoolKind: \"draw\" | \"marker\";\n\tlabel?: string;\n};\n\nexport type CanvuChromeSelectionStyleChange = (patch: {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n}) => void;\n\n/**\n * Runtime data and handlers shared with floating board chrome (e.g. {@link NavMenu},\n * {@link VectorSelectionInspector}). Populated by `VectorViewport` and consumed via\n * {@link useCanvuChromeContext}.\n */\nexport type CanvuChromeContextValue = {\n\tcamera: Camera2D | null;\n\tviewportWidth: number;\n\tviewportHeight: number;\n\titems: readonly VectorSceneItem[];\n\tselectedItems: readonly VectorSceneItem[];\n\tinteractive: boolean;\n\tcanEditSelection: boolean;\n\tactiveToolStyle: CanvuChromeActiveToolStyle | null;\n\tonSelectionStyleChange: CanvuChromeSelectionStyleChange | null;\n\tzoomPercent: number;\n\tonZoomIn: () => void;\n\tonZoomOut: () => void;\n\tonUndo: () => void;\n\tonRedo: () => void;\n\tcanUndo: boolean;\n\tcanRedo: boolean;\n\tonRequestRender: () => void;\n};\n\nexport const CanvuChromeContext = createContext<CanvuChromeContextValue | null>(\n\tnull,\n);\n\n/** Returns the current chrome context or `null` when used outside `VectorViewport`. */\nexport function useCanvuChromeContext(): CanvuChromeContextValue | null {\n\treturn useContext(CanvuChromeContext);\n}\n","import type { VectorSceneItem } from \"../scene/types\";\nimport type { Rect } from \"./rect\";\nimport { normalizeRect } from \"./rect\";\n\n/** Rotation in radians; `undefined` / `0` means no rotation. */\nexport function getItemRotationRad(item: VectorSceneItem): number {\n\treturn item.rotation ?? 0;\n}\n\n/**\n * Converts a point in item **local** space (origin top-left, 0…w × 0…h) to world,\n * with rotation around the box center.\n */\nexport function itemLocalToWorld(\n\tlx: number,\n\tly: number,\n\titemX: number,\n\titemY: number,\n\tw: number,\n\th: number,\n\trotationRad: number,\n): { x: number; y: number } {\n\tconst c = { x: w / 2, y: h / 2 };\n\tconst dlx = lx - c.x;\n\tconst dly = ly - c.y;\n\tconst cos = Math.cos(rotationRad);\n\tconst sin = Math.sin(rotationRad);\n\treturn {\n\t\tx: itemX + c.x + cos * dlx - sin * dly,\n\t\ty: itemY + c.y + sin * dlx + cos * dly,\n\t};\n}\n\n/**\n * Inverse of {@link itemLocalToWorld}.\n */\nexport function worldToItemLocal(\n\twx: number,\n\twy: number,\n\titemX: number,\n\titemY: number,\n\tw: number,\n\th: number,\n\trotationRad: number,\n): { x: number; y: number } {\n\tconst c = { x: w / 2, y: h / 2 };\n\tconst vx = wx - itemX;\n\tconst vy = wy - itemY;\n\tconst dx = vx - c.x;\n\tconst dy = vy - c.y;\n\tconst cos = Math.cos(-rotationRad);\n\tconst sin = Math.sin(-rotationRad);\n\tconst lx = cos * dx - sin * dy;\n\tconst ly = sin * dx + cos * dy;\n\treturn { x: c.x + lx, y: c.y + ly };\n}\n\n/** World-space center of the item’s unrotated bounds (rotation pivot). */\nexport function itemPivotWorld(item: VectorSceneItem): { x: number; y: number } {\n\tconst r = normalizeRect(item.bounds);\n\treturn { x: r.x + r.width / 2, y: r.y + r.height / 2 };\n}\n\n/** Axis-aligned bounding box in world space that contains the rotated rectangle. */\nexport function boundsAabbForRotatedItem(item: VectorSceneItem): Rect {\n\tconst rot = getItemRotationRad(item);\n\tif (Math.abs(rot) < 1e-12 && item.bounds.width >= 0 && item.bounds.height >= 0) {\n\t\treturn item.bounds;\n\t}\n\tconst r = normalizeRect(item.bounds);\n\tif (Math.abs(rot) < 1e-12) {\n\t\treturn r;\n\t}\n\tconst corners: [number, number][] = [\n\t\t[0, 0],\n\t\t[r.width, 0],\n\t\t[r.width, r.height],\n\t\t[0, r.height],\n\t];\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\tfor (const [lx, ly] of corners) {\n\t\tconst p = itemLocalToWorld(lx, ly, item.x, item.y, r.width, r.height, rot);\n\t\tminX = Math.min(minX, p.x);\n\t\tminY = Math.min(minY, p.y);\n\t\tmaxX = Math.max(maxX, p.x);\n\t\tmaxY = Math.max(maxY, p.y);\n\t}\n\treturn { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n","\"use client\";\n\nimport { Redo2, Undo2 } from \"lucide-react\";\nimport { type CSSProperties, useCallback, useRef, useState } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { useCanvuChromeContext } from \"./chrome-context\";\nimport {\n\ttype BoardComponentPosition,\n\tgetBoardPositionStyle,\n} from \"./VectorCanvasLayout\";\n\n/**\n * Floating bottom-bar combining zoom controls, undo/redo, and an expandable minimap.\n * When rendered inside `VectorViewport` (e.g. via the `navMenu` slot), data props default\n * to values from {@link CanvuChromeContext}; pass any prop to override.\n */\nexport type NavMenuProps = {\n\tcamera?: Camera2D;\n\tviewportWidth?: number;\n\tviewportHeight?: number;\n\titems?: readonly VectorSceneItem[];\n\tzoomPercent?: number;\n\tonZoomIn?: () => void;\n\tonZoomOut?: () => void;\n\tonUndo?: () => void;\n\tonRedo?: () => void;\n\tcanUndo?: boolean;\n\tcanRedo?: boolean;\n\tonRequestRender?: () => void;\n\t/** Anchor preset. Defaults to bottom-left. */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from anchored edges. @default 12 */\n\tinset?: number;\n\t/** @default 23 */\n\tzIndex?: number;\n\tclassName?: string;\n\t/** Merged on top of position-derived styles for custom tweaks. */\n\tstyle?: CSSProperties;\n};\n\nconst MINIMAP_W = 180;\nconst MINIMAP_H = 120;\nconst PADDING = 12;\nconst BORDER_RADIUS = 8;\nconst BG = \"#ffffff\";\nconst BORDER_COLOR = \"rgba(0,0,0,0.12)\";\nconst ITEM_FILL = \"rgba(0,0,0,0.08)\";\nconst ITEM_STROKE = \"rgba(0,0,0,0.15)\";\nconst VIEWPORT_FILL = \"rgba(59,130,246,0.08)\";\nconst VIEWPORT_STROKE = \"#3b82f6\";\n\nconst btnStyle: React.CSSProperties = {\n\tpointerEvents: \"auto\",\n\twidth: 36,\n\theight: 36,\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tcursor: \"pointer\",\n\tfontSize: 18,\n\tlineHeight: 1,\n\tcolor: \"#18181b\",\n\tpadding: 0,\n\tborder: \"none\",\n\toutline: \"none\",\n\tbackground: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nconst chevronBtnStyle: React.CSSProperties = {\n\tpointerEvents: \"auto\",\n\twidth: 24,\n\theight: 36,\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tcursor: \"pointer\",\n\tfontSize: 12,\n\tlineHeight: 1,\n\tcolor: \"#52525b\",\n\tpadding: 0,\n\tborder: \"none\",\n\toutline: \"none\",\n\tbackground: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nconst undoBtnStyle: React.CSSProperties = {\n\t...chevronBtnStyle,\n\twidth: 30,\n\topacity: 1,\n\tcolor: \"#18181b\",\n};\n\nconst labelStyle: React.CSSProperties = {\n\tfontSize: 10,\n\tfontWeight: 600,\n\tcolor: \"#52525b\",\n\ttextAlign: \"center\",\n\tuserSelect: \"none\",\n\tpadding: \"2px 0\",\n};\n\nconst panelLayoutStyle: React.CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\talignItems: \"flex-start\",\n\tgap: 4,\n\ttouchAction: \"none\",\n\tpointerEvents: \"none\",\n\tuserSelect: \"none\",\n};\n\nconst innerStyle: React.CSSProperties = {\n\tpointerEvents: \"auto\",\n\tdisplay: \"flex\",\n\tflexDirection: \"row\",\n\talignItems: \"center\",\n\tgap: 4,\n\tbackground: BG,\n\tborderRadius: BORDER_RADIUS,\n\tborder: `1px solid ${BORDER_COLOR}`,\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tpadding: 4,\n};\n\nexport function NavMenu({\n\tcamera: cameraProp,\n\tviewportWidth: viewportWidthProp,\n\tviewportHeight: viewportHeightProp,\n\titems: itemsProp,\n\tzoomPercent: zoomPercentProp,\n\tonZoomIn: onZoomInProp,\n\tonZoomOut: onZoomOutProp,\n\tonUndo: onUndoProp,\n\tonRedo: onRedoProp,\n\tcanUndo: canUndoProp,\n\tcanRedo: canRedoProp,\n\tonRequestRender: onRequestRenderProp,\n\tposition = \"bottom-left\",\n\tinset = 12,\n\tzIndex = 23,\n\tclassName,\n\tstyle,\n}: NavMenuProps) {\n\tconst ctx = useCanvuChromeContext();\n\tconst camera = cameraProp ?? ctx?.camera ?? null;\n\tconst viewportWidth = viewportWidthProp ?? ctx?.viewportWidth ?? 0;\n\tconst viewportHeight = viewportHeightProp ?? ctx?.viewportHeight ?? 0;\n\tconst items = itemsProp ?? ctx?.items ?? [];\n\tconst zoomPercent = zoomPercentProp ?? ctx?.zoomPercent ?? 100;\n\tconst onZoomIn = onZoomInProp ?? ctx?.onZoomIn ?? noop;\n\tconst onZoomOut = onZoomOutProp ?? ctx?.onZoomOut ?? noop;\n\tconst onUndo = onUndoProp ?? ctx?.onUndo ?? noop;\n\tconst onRedo = onRedoProp ?? ctx?.onRedo ?? noop;\n\tconst canUndo = canUndoProp ?? ctx?.canUndo ?? false;\n\tconst canRedo = canRedoProp ?? ctx?.canRedo ?? false;\n\tconst onRequestRender = onRequestRenderProp ?? ctx?.onRequestRender ?? noop;\n\n\tconst [expanded, setExpanded] = useState(false);\n\tconst svgRef = useRef<SVGSVGElement>(null);\n\tconst [dragging, setDragging] = useState(false);\n\tconst [mouseDown, setMouseDown] = useState(false);\n\n\tconst worldBounds = computeWorldBounds(items);\n\tconst isEmpty = worldBounds.width <= 0 || worldBounds.height <= 0;\n\n\tconst scale = Math.min(\n\t\t(MINIMAP_W - PADDING * 2) / Math.max(worldBounds.width, 1),\n\t\t(MINIMAP_H - PADDING * 2) / Math.max(worldBounds.height, 1),\n\t);\n\tconst originX = worldBounds.x;\n\tconst originY = worldBounds.y;\n\n\tconst toMinimapX = (wx: number) => (wx - originX) * scale + PADDING;\n\tconst toMinimapY = (wy: number) => (wy - originY) * scale + PADDING;\n\tconst toMinimapW = (ww: number) => ww * scale;\n\tconst toMinimapH = (wh: number) => wh * scale;\n\n\tconst viewportWorld = camera\n\t\t? camera.getVisibleWorldRect(viewportWidth, viewportHeight)\n\t\t: { x: 0, y: 0, width: 0, height: 0 };\n\tconst vpMinimap = {\n\t\tx: toMinimapX(viewportWorld.x),\n\t\ty: toMinimapY(viewportWorld.y),\n\t\twidth: toMinimapW(viewportWorld.width),\n\t\theight: toMinimapH(viewportWorld.height),\n\t};\n\n\tconst worldFromMinimap = useCallback(\n\t\t(mx: number, my: number) => ({\n\t\t\tworldX: (mx - PADDING) / scale + originX,\n\t\t\tworldY: (my - PADDING) / scale + originY,\n\t\t}),\n\t\t[scale, originX, originY],\n\t);\n\n\tconst panTo = useCallback(\n\t\t(mx: number, my: number) => {\n\t\t\tif (!camera) return;\n\t\t\tconst { worldX, worldY } = worldFromMinimap(mx, my);\n\t\t\tcamera.x = viewportWidth / 2 - worldX * camera.zoom;\n\t\t\tcamera.y = viewportHeight / 2 - worldY * camera.zoom;\n\t\t\tonRequestRender();\n\t\t},\n\t\t[worldFromMinimap, camera, viewportWidth, viewportHeight, onRequestRender],\n\t);\n\n\tconst handlePointerDown = useCallback(\n\t\t(e: React.PointerEvent) => {\n\t\t\tif (isEmpty) return;\n\t\t\tsetDragging(true);\n\t\t\tsetMouseDown(true);\n\t\t\tconst rect = svgRef.current?.getBoundingClientRect();\n\t\t\tif (!rect) return;\n\t\t\tpanTo(e.clientX - rect.left, e.clientY - rect.top);\n\t\t\tsvgRef.current?.setPointerCapture(e.pointerId);\n\t\t},\n\t\t[isEmpty, panTo],\n\t);\n\n\tconst handlePointerMove = useCallback(\n\t\t(e: React.PointerEvent) => {\n\t\t\tif (!mouseDown || isEmpty) return;\n\t\t\tconst rect = svgRef.current?.getBoundingClientRect();\n\t\t\tif (!rect) return;\n\t\t\tpanTo(e.clientX - rect.left, e.clientY - rect.top);\n\t\t},\n\t\t[mouseDown, isEmpty, panTo],\n\t);\n\n\tconst handlePointerUp = useCallback(() => {\n\t\tsetDragging(false);\n\t\tsetMouseDown(false);\n\t}, []);\n\n\tconst toggleExpanded = useCallback(() => {\n\t\tsetExpanded((v) => !v);\n\t}, []);\n\n\tconst anchorStyle = getBoardPositionStyle(position, inset, zIndex);\n\treturn (\n\t\t<fieldset\n\t\t\tdata-slot=\"canvu-nav-menu\"\n\t\t\tdata-position={position}\n\t\t\tclassName={className}\n\t\t\tstyle={{\n\t\t\t\t...anchorStyle,\n\t\t\t\t...panelLayoutStyle,\n\t\t\t\tborder: \"none\",\n\t\t\t\tmargin: 0,\n\t\t\t\tpadding: 0,\n\t\t\t\tminWidth: 0,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t\taria-label=\"Zoom and minimap controls\"\n\t\t>\n\t\t\t<div style={innerStyle}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={btnStyle}\n\t\t\t\t\taria-label=\"Zoom out\"\n\t\t\t\t\ttitle=\"Zoom out\"\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onZoomOut}\n\t\t\t\t>\n\t\t\t\t\t−\n\t\t\t\t</button>\n\t\t\t\t<span style={labelStyle} aria-hidden>\n\t\t\t\t\t{zoomPercent}%\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={btnStyle}\n\t\t\t\t\taria-label=\"Zoom in\"\n\t\t\t\t\ttitle=\"Zoom in\"\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onZoomIn}\n\t\t\t\t>\n\t\t\t\t\t+\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={undoBtnStyle}\n\t\t\t\t\taria-label=\"Undo\"\n\t\t\t\t\ttitle=\"Undo\"\n\t\t\t\t\tdisabled={!canUndo}\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onUndo}\n\t\t\t\t>\n\t\t\t\t\t<Undo2 size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={undoBtnStyle}\n\t\t\t\t\taria-label=\"Redo\"\n\t\t\t\t\ttitle=\"Redo\"\n\t\t\t\t\tdisabled={!canRedo}\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onRedo}\n\t\t\t\t>\n\t\t\t\t\t<Redo2 size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={chevronBtnStyle}\n\t\t\t\t\taria-label={expanded ? \"Hide minimap\" : \"Show minimap\"}\n\t\t\t\t\ttitle={expanded ? \"Hide minimap\" : \"Show minimap\"}\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={toggleExpanded}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\theight=\"12\"\n\t\t\t\t\t\tviewBox=\"0 0 12 12\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransform: expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n\t\t\t\t\t\t\ttransition: \"transform 0.15s ease\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M2 4 L6 8 L10 4\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t{expanded && (\n\t\t\t\t<nav aria-label=\"Minimap\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\tref={svgRef}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: MINIMAP_W,\n\t\t\t\t\t\t\theight: MINIMAP_H,\n\t\t\t\t\t\t\tborderRadius: BORDER_RADIUS,\n\t\t\t\t\t\t\tborder: `1px solid ${BORDER_COLOR}`,\n\t\t\t\t\t\t\tbackground: BG,\n\t\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\t\t\t\t\t\t\tcursor: isEmpty ? \"default\" : dragging ? \"grabbing\" : \"grab\",\n\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\tpointerEvents: \"auto\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerMove={handlePointerMove}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerCancel={handlePointerUp}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isEmpty ? null : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{items.map((it) => {\n\t\t\t\t\t\t\t\t\tconst b = normalizeRect(boundsAabbForRotatedItem(it));\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\t\t\t\t\t\tx={toMinimapX(b.x)}\n\t\t\t\t\t\t\t\t\t\t\ty={toMinimapY(b.y)}\n\t\t\t\t\t\t\t\t\t\t\twidth={toMinimapW(b.width)}\n\t\t\t\t\t\t\t\t\t\t\theight={toMinimapH(b.height)}\n\t\t\t\t\t\t\t\t\t\t\tfill={ITEM_FILL}\n\t\t\t\t\t\t\t\t\t\t\tstroke={ITEM_STROKE}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={0.5}\n\t\t\t\t\t\t\t\t\t\t\trx={1}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={vpMinimap.x}\n\t\t\t\t\t\t\t\t\ty={vpMinimap.y}\n\t\t\t\t\t\t\t\t\twidth={vpMinimap.width}\n\t\t\t\t\t\t\t\t\theight={vpMinimap.height}\n\t\t\t\t\t\t\t\t\tfill={VIEWPORT_FILL}\n\t\t\t\t\t\t\t\t\tstroke={VIEWPORT_STROKE}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\trx={2}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</svg>\n\t\t\t\t</nav>\n\t\t\t)}\n\t\t</fieldset>\n\t);\n}\n\nfunction noop() {}\n\nfunction computeWorldBounds(items: readonly VectorSceneItem[]): Rect {\n\tif (items.length === 0) {\n\t\treturn { x: 0, y: 0, width: 0, height: 0 };\n\t}\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\tfor (const it of items) {\n\t\tconst b = boundsAabbForRotatedItem(it);\n\t\tminX = Math.min(minX, b.x);\n\t\tminY = Math.min(minY, b.y);\n\t\tmaxX = Math.max(maxX, b.x + b.width);\n\t\tmaxY = Math.max(maxY, b.y + b.height);\n\t}\n\tconst pad = Math.max((maxX - minX) * 0.1, (maxY - minY) * 0.1, 40);\n\treturn {\n\t\tx: minX - pad,\n\t\ty: minY - pad,\n\t\twidth: maxX - minX + pad * 2,\n\t\theight: maxY - minY + pad * 2,\n\t};\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport {\n\ttype CanvuChromeSelectionStyleChange,\n\tuseCanvuChromeContext,\n} from \"./chrome-context\";\nimport {\n\ttype BoardComponentPosition,\n\tgetBoardPositionStyle,\n} from \"./VectorCanvasLayout\";\n\ntype ActiveToolStyle = StrokeStyle & {\n\ttoolKind: \"draw\" | \"marker\";\n\tlabel?: string;\n};\n\n/**\n * Color + stroke-width inspector for the current selection (or active drawing tool style).\n * When rendered inside `VectorViewport` (e.g. via the `selectionInspector` slot), `items`,\n * `activeToolStyle`, and `onChange` default to values from {@link CanvuChromeContext};\n * pass any prop to override.\n */\nexport type VectorSelectionInspectorProps = {\n\t/** Selected items that support stroke/fill styling (caller may filter). */\n\titems?: readonly VectorSceneItem[];\n\t/** Optional active tool style shown even without a selection. */\n\tactiveToolStyle?: ActiveToolStyle | null;\n\t/** Apply stroke / width / opacity to every item in `items`. */\n\tonChange?: CanvuChromeSelectionStyleChange;\n\t/** Anchor preset. Defaults to top-left. */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from anchored edges. @default 12 */\n\tinset?: number;\n\t/** @default 24 */\n\tzIndex?: number;\n\tclassName?: string;\n\t/** Merged on top of position-derived styles for custom tweaks. */\n\tstyle?: CSSProperties;\n};\n\nconst shellLook: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: 8,\n\tminWidth: 160,\n\tpadding: \"10px 12px\",\n\tborderRadius: 8,\n\tborder: \"1px solid rgba(0,0,0,0.12)\",\n\tbackground: \"rgba(255,255,255,0.96)\",\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tpointerEvents: \"auto\",\n};\n\nconst labelStyle: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: 4,\n\tfontSize: 11,\n\tfontWeight: 600,\n\tcolor: \"#52525b\",\n};\n\nfunction normalizeHex(stroke: string): string {\n\tif (/^#[0-9A-Fa-f]{6}$/.test(stroke)) return stroke;\n\treturn \"#2563eb\";\n}\n\nfunction isStylableKind(\n\ttk: VectorSceneItem[\"toolKind\"],\n): tk is NonNullable<VectorSceneItem[\"toolKind\"]> {\n\treturn (\n\t\ttk === \"rect\" ||\n\t\ttk === \"ellipse\" ||\n\t\ttk === \"line\" ||\n\t\ttk === \"arrow\" ||\n\t\ttk === \"draw\" ||\n\t\ttk === \"pencil\" ||\n\t\ttk === \"brush\" ||\n\t\ttk === \"marker\" ||\n\t\ttk === \"text\"\n\t);\n}\n\n/**\n * Color + stroke width for the current selection. Supports multiple selected shapes: one change applies to all.\n */\nexport function VectorSelectionInspector({\n\titems: itemsProp,\n\tactiveToolStyle: activeToolStyleProp,\n\tonChange: onChangeProp,\n\tposition = \"top-left\",\n\tinset = 12,\n\tzIndex = 24,\n\tclassName,\n\tstyle,\n}: VectorSelectionInspectorProps) {\n\tconst ctx = useCanvuChromeContext();\n\tconst items = itemsProp ?? ctx?.selectedItems ?? [];\n\tconst activeToolStyle =\n\t\tactiveToolStyleProp === undefined\n\t\t\t? (ctx?.activeToolStyle ?? null)\n\t\t\t: activeToolStyleProp;\n\tconst onChange = onChangeProp ?? ctx?.onSelectionStyleChange ?? null;\n\tif (!onChange) return null;\n\tconst shell: CSSProperties = {\n\t\t...getBoardPositionStyle(position, inset, zIndex),\n\t\t...shellLook,\n\t\t...style,\n\t};\n\tif (activeToolStyle) {\n\t\tconst stroke = activeToolStyle.stroke;\n\t\tconst strokeWidth = activeToolStyle.strokeWidth;\n\t\tconst hex = normalizeHex(stroke);\n\t\tconst showMarkerOpacity = activeToolStyle.toolKind === \"marker\";\n\t\tconst opacityPct = Math.round((activeToolStyle.strokeOpacity ?? 1) * 100);\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tdata-slot=\"vector-selection-inspector\"\n\t\t\t\tdata-position={position}\n\t\t\t\tclassName={className}\n\t\t\t\taria-label={activeToolStyle.label ?? \"Estilo da ferramenta\"}\n\t\t\t\tstyle={shell}\n\t\t\t>\n\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\tCor\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\tvalue={hex}\n\t\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\tstroke: e.target.value,\n\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\t...(activeToolStyle.strokeOpacity != null\n\t\t\t\t\t\t\t\t\t? { strokeOpacity: activeToolStyle.strokeOpacity }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</label>\n\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\tGrossura\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\tmax={48}\n\t\t\t\t\t\tvalue={strokeWidth}\n\t\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\t\tstrokeWidth: Number(e.target.value),\n\t\t\t\t\t\t\t\t...(activeToolStyle.strokeOpacity != null\n\t\t\t\t\t\t\t\t\t? { strokeOpacity: activeToolStyle.strokeOpacity }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{strokeWidth}px</span>\n\t\t\t\t</label>\n\t\t\t\t{showMarkerOpacity && (\n\t\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\t\tOpacidade (marcador)\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\t\tmin={10}\n\t\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\t\tvalue={opacityPct}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst v = Number(e.target.value) / 100;\n\t\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\t\tstrokeOpacity: v,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{opacityPct}%</span>\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t</section>\n\t\t);\n\t}\n\n\tconst stylable = items.filter(\n\t\t(it) => !it.locked && it.toolKind && isStylableKind(it.toolKind),\n\t);\n\tif (stylable.length === 0) return null;\n\n\tconst first = stylable[0];\n\tif (!first) return null;\n\tconst allSameStroke = stylable.every(\n\t\t(it) => (it.stroke ?? \"#2563eb\") === (first.stroke ?? \"#2563eb\"),\n\t);\n\tconst allSameWidth = stylable.every(\n\t\t(it) => (it.strokeWidth ?? 2) === (first.strokeWidth ?? 2),\n\t);\n\tconst stroke = first.stroke ?? \"#2563eb\";\n\tconst strokeWidth = first.strokeWidth ?? 2;\n\tconst hex = normalizeHex(stroke);\n\n\tconst markers = stylable.filter((it) => it.toolKind === \"marker\");\n\tconst showMarkerOpacity = markers.length > 0;\n\tconst firstMarker = markers[0];\n\tconst allSameMarkerOpacity =\n\t\tmarkers.length > 0 &&\n\t\tmarkers.every(\n\t\t\t(it) => (it.strokeOpacity ?? 1) === (firstMarker?.strokeOpacity ?? 1),\n\t\t);\n\tconst opacityPct = firstMarker\n\t\t? Math.round((firstMarker.strokeOpacity ?? 1) * 100)\n\t\t: 100;\n\n\treturn (\n\t\t<section\n\t\t\tdata-slot=\"vector-selection-inspector\"\n\t\t\tdata-position={position}\n\t\t\tclassName={className}\n\t\t\taria-label=\"Estilo da seleção\"\n\t\t\tstyle={shell}\n\t\t>\n\t\t\t{stylable.length > 1 && (\n\t\t\t\t<p style={{ margin: 0, fontSize: 11, color: \"#71717a\" }}>\n\t\t\t\t\t{stylable.length} objetos selecionados\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t<label style={labelStyle}>\n\t\t\t\tCor\n\t\t\t\t{!allSameStroke && (\n\t\t\t\t\t<span style={{ fontWeight: 400, color: \"#a1a1aa\" }}>\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t(valores misturados — novo valor aplica a todos)\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<input\n\t\t\t\t\ttype=\"color\"\n\t\t\t\t\tvalue={hex}\n\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\tstroke: e.target.value,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</label>\n\t\t\t<label style={labelStyle}>\n\t\t\t\tGrossura\n\t\t\t\t{!allSameWidth && (\n\t\t\t\t\t<span style={{ fontWeight: 400, color: \"#a1a1aa\" }}> (misturado)</span>\n\t\t\t\t)}\n\t\t\t\t<input\n\t\t\t\t\ttype=\"range\"\n\t\t\t\t\tmin={1}\n\t\t\t\t\tmax={48}\n\t\t\t\t\tvalue={strokeWidth}\n\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\tstrokeWidth: Number(e.target.value),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{strokeWidth}px</span>\n\t\t\t</label>\n\t\t\t{showMarkerOpacity && firstMarker && (\n\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\tOpacidade (marcador)\n\t\t\t\t\t{!allSameMarkerOpacity && markers.length > 1 && (\n\t\t\t\t\t\t<span style={{ fontWeight: 400, color: \"#a1a1aa\" }}> (misturado)</span>\n\t\t\t\t\t)}\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\tmin={10}\n\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\tvalue={opacityPct}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tconst v = Number(e.target.value) / 100;\n\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\tstrokeOpacity: v,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{opacityPct}%</span>\n\t\t\t\t</label>\n\t\t\t)}\n\t\t</section>\n\t);\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { NavMenu } from \"./NavMenu\";\nimport { VectorSelectionInspector } from \"./VectorSelectionInspector\";\n\nexport type VectorCanvasSlotProps = {\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n};\n\n/**\n * Anchor presets for floating board components.\n *\n * Names are `<edge>-<position-along-edge>`:\n * - `top-*` / `bottom-*` anchor to the top or bottom edge.\n * - `left-*` / `right-*` anchor to the left or right edge.\n *\n * Corner aliases are equivalent (e.g. `top-left` and `left-top` resolve to the same anchor),\n * but kept distinct so callers can pick whichever reads best in their layout (a vertical\n * strip might prefer `left-top`; a horizontal strip prefers `top-left`).\n */\nexport type BoardComponentPosition =\n\t| \"top-left\"\n\t| \"top-center\"\n\t| \"top-right\"\n\t| \"bottom-left\"\n\t| \"bottom-center\"\n\t| \"bottom-right\"\n\t| \"left-top\"\n\t| \"left-center\"\n\t| \"left-bottom\"\n\t| \"right-top\"\n\t| \"right-center\"\n\t| \"right-bottom\"\n\t| \"center\"\n\t| \"fill\";\n\n/** @deprecated Use {@link BoardComponentPosition}. */\nexport type VectorCanvasSpacePosition = BoardComponentPosition;\n\n/**\n * Compute absolute-position CSS for a board component anchor preset.\n * Returns `position`, `zIndex`, and the relevant edge offsets / transforms.\n * Callers merge the result with their own style/className overrides.\n */\nexport function getBoardPositionStyle(\n\tposition: BoardComponentPosition,\n\tinset = 12,\n\tzIndex = 40,\n): CSSProperties {\n\tconst base: CSSProperties = { position: \"absolute\", zIndex };\n\tswitch (position) {\n\t\tcase \"fill\":\n\t\t\treturn { ...base, inset };\n\t\tcase \"top-left\":\n\t\tcase \"left-top\":\n\t\t\treturn { ...base, top: inset, left: inset };\n\t\tcase \"top-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttop: inset,\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t};\n\t\tcase \"top-right\":\n\t\tcase \"right-top\":\n\t\t\treturn { ...base, top: inset, right: inset };\n\t\tcase \"bottom-left\":\n\t\tcase \"left-bottom\":\n\t\t\treturn { ...base, bottom: inset, left: inset };\n\t\tcase \"bottom-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tbottom: inset,\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t};\n\t\tcase \"bottom-right\":\n\t\tcase \"right-bottom\":\n\t\t\treturn { ...base, bottom: inset, right: inset };\n\t\tcase \"left-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tleft: inset,\n\t\t\t\ttop: \"50%\",\n\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t};\n\t\tcase \"right-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tright: inset,\n\t\t\t\ttop: \"50%\",\n\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t};\n\t\tcase \"center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttop: \"50%\",\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translate(-50%, -50%)\",\n\t\t\t};\n\t\tdefault:\n\t\t\treturn base;\n\t}\n}\n\nexport type VectorCanvasSpaceProps = VectorCanvasSlotProps & {\n\tposition?: BoardComponentPosition;\n\t/** @default 12 */\n\tinset?: number;\n\t/** @default 40 */\n\tzIndex?: number;\n\t/** Pointer events value on the content wrapper. @default \"auto\" */\n\tcontentPointerEvents?: CSSProperties[\"pointerEvents\"];\n};\n\nconst rootStyle: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\theight: \"100%\",\n\tminHeight: 0,\n\twidth: \"100%\",\n};\n\nconst headerStyle: CSSProperties = {\n\tflexShrink: 0,\n\tdisplay: \"flex\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n\tgap: \"0.75rem\",\n\tpadding: \"0.75rem 1rem\",\n\tborderBottom: \"1px solid #e4e4e7\",\n\tbackground: \"#fff\",\n\tfontSize: \"0.875rem\",\n};\n\nconst bodyStyle: CSSProperties = {\n\tflex: 1,\n\tminHeight: 0,\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n};\n\nconst mainStyle: CSSProperties = {\n\tflex: 1,\n\tminHeight: 0,\n\tposition: \"relative\",\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n};\n\nconst viewportSurfaceStyle: CSSProperties = {\n\tflex: 1,\n\tminHeight: 0,\n\tposition: \"relative\",\n\twidth: \"100%\",\n\talignSelf: \"stretch\",\n\tbackground: \"#fff\",\n\ttouchAction: \"none\",\n};\n\nfunction mergeStyle(\n\tbase: CSSProperties,\n\tstyle: CSSProperties | undefined,\n): CSSProperties {\n\treturn style ? { ...base, ...style } : base;\n}\n\nfunction vectorCanvasSpaceStyle(\n\tposition: BoardComponentPosition,\n\tinset: number,\n\tzIndex: number,\n): CSSProperties {\n\treturn {\n\t\t...getBoardPositionStyle(position, inset, zIndex),\n\t\tpointerEvents: \"none\",\n\t};\n}\n\n/**\n * Full-viewport column shell for a vector canvas (header + body with stage).\n * Use with {@link VectorCanvasBody}, {@link VectorCanvasMain}. Pass `toolbar` on {@link VectorViewport};\n * Compose the floating tool strip with {@link VectorCanvasToolbar} around {@link VectorToolbar} (see example below).\n */\nexport function VectorCanvasRoot({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-root\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(rootStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n/** Optional top chrome (title, hints, toggles). */\nexport function VectorCanvasHeader({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<header\n\t\t\tdata-slot=\"vector-canvas-header\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(headerStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</header>\n\t);\n}\n\n/** Fills remaining space below the header (typically one {@link VectorCanvasMain}). */\nexport function VectorCanvasBody({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-body\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(bodyStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n/**\n * Stretch area for {@link VectorViewport} (or any child that should fill the stage).\n */\nexport function VectorCanvasMain({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-main\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(mainStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n/**\n * Flex child that fills {@link VectorCanvasMain} and gives {@link VectorViewport} a bounded height\n * (white surface by default). Omit if you set the background on `Main` or the viewport yourself.\n */\nexport function VectorCanvasViewportSurface({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-viewport-surface\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(viewportSurfaceStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nexport type VectorCanvasToolbarProps = {\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\t/** Anchor preset. @default \"bottom-center\" */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from the anchored edge(s). @default 12 */\n\tinset?: number;\n\t/** @default 30 */\n\tzIndex?: number;\n};\n\n/**\n * Floating strip anchor for {@link VectorToolbar} or custom controls. Defaults to bottom-center.\n * Renders `pointer-events: none` on the shell and `auto` on children so the canvas keeps receiving hits outside the bar.\n * Pass as the `toolbar` prop of `VectorViewport`; pick a different `position` for top / side anchoring.\n * Z-index defaults to 30 so the strip stays above zoom controls.\n */\nexport function VectorCanvasToolbar({\n\tchildren,\n\tclassName,\n\tstyle,\n\tposition = \"bottom-center\",\n\tinset = 12,\n\tzIndex = 30,\n}: VectorCanvasToolbarProps) {\n\tconst base: CSSProperties = {\n\t\t...getBoardPositionStyle(position, inset, zIndex),\n\t\tdisplay: \"flex\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tmaxWidth: \"calc(100% - 24px)\",\n\t\tpointerEvents: \"none\",\n\t};\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-toolbar\"\n\t\t\tdata-position={position}\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(base, style)}\n\t\t>\n\t\t\t<div style={{ pointerEvents: \"auto\" }}>{children}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Absolute canvas-aligned space for floating UI such as chats, rosters, inspectors, and overlays.\n * Use this instead of ad-hoc wrapper divs or plugin hosts when a feature can be expressed as React nodes.\n */\nexport function VectorCanvasSpace({\n\tchildren,\n\tclassName,\n\tstyle,\n\tposition = \"top-right\",\n\tinset = 12,\n\tzIndex = 40,\n\tcontentPointerEvents = \"auto\",\n}: VectorCanvasSpaceProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot={`vector-canvas-space-${position}`}\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(vectorCanvasSpaceStyle(position, inset, zIndex), style)}\n\t\t>\n\t\t\t<div style={{ pointerEvents: contentPointerEvents }}>{children}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Namespaced layout primitives for composing a vector canvas shell without ad-hoc wrapper divs.\n *\n * @example\n * ```tsx\n * <VectorCanvas.Root>\n * <VectorCanvas.Header>…</VectorCanvas.Header>\n * <VectorCanvas.Body>\n * <VectorCanvas.Main>\n * <VectorCanvas.ViewportSurface>\n * <VectorViewport\n * toolbar={\n * <VectorCanvas.Toolbar>\n * <VectorToolbar … />\n * </VectorCanvas.Toolbar>\n * }\n * …\n * />\n * </VectorCanvas.ViewportSurface>\n * </VectorCanvas.Main>\n * </VectorCanvas.Body>\n * </VectorCanvas.Root>\n * ```\n */\nexport const VectorCanvas = {\n\tRoot: VectorCanvasRoot,\n\tHeader: VectorCanvasHeader,\n\tBody: VectorCanvasBody,\n\tMain: VectorCanvasMain,\n\tViewportSurface: VectorCanvasViewportSurface,\n\tToolbar: VectorCanvasToolbar,\n\tSpace: VectorCanvasSpace,\n\tNavMenu,\n\tSelectionInspector: VectorSelectionInspector,\n} as const;\n","const DB_NAME = \"canvu-image-store\";\nconst DB_VERSION = 1;\n\nfunction openDb(): Promise<IDBDatabase> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst req = indexedDB.open(DB_NAME, DB_VERSION);\n\t\treq.onupgradeneeded = () => {\n\t\t\tconst db = req.result;\n\t\t\tif (!db.objectStoreNames.contains(\"images\")) {\n\t\t\t\tdb.createObjectStore(\"images\");\n\t\t\t}\n\t\t\tif (!db.objectStoreNames.contains(\"thumbnails\")) {\n\t\t\t\tdb.createObjectStore(\"thumbnails\");\n\t\t\t}\n\t\t};\n\t\treq.onsuccess = () => resolve(req.result);\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction getFromStore(\n\tdb: IDBDatabase,\n\tstoreName: string,\n\tid: string,\n): Promise<Blob | undefined> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(storeName, \"readonly\");\n\t\tconst req = tx.objectStore(storeName).get(id);\n\t\treq.onsuccess = () => resolve(req.result ?? undefined);\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction putInStore(\n\tdb: IDBDatabase,\n\tstoreName: string,\n\tid: string,\n\tblob: Blob,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(storeName, \"readwrite\");\n\t\tconst req = tx.objectStore(storeName).put(blob, id);\n\t\treq.onsuccess = () => resolve();\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction deleteFromStore(\n\tdb: IDBDatabase,\n\tstoreName: string,\n\tid: string,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(storeName, \"readwrite\");\n\t\tconst req = tx.objectStore(storeName).delete(id);\n\t\treq.onsuccess = () => resolve();\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction generateBlobId(): string {\n\treturn crypto.randomUUID();\n}\n\nexport class IndexedDbImageStore {\n\tprivate dbPromise: Promise<IDBDatabase> | null = null;\n\n\tprivate getDb(): Promise<IDBDatabase> {\n\t\tif (!this.dbPromise) {\n\t\t\tthis.dbPromise = openDb();\n\t\t}\n\t\treturn this.dbPromise;\n\t}\n\n\tasync storeOriginal(blob: Blob): Promise<string> {\n\t\tconst id = generateBlobId();\n\t\tconst db = await this.getDb();\n\t\tawait putInStore(db, \"images\", id, blob);\n\t\treturn id;\n\t}\n\n\tasync getOriginal(id: string): Promise<Blob | undefined> {\n\t\tconst db = await this.getDb();\n\t\treturn getFromStore(db, \"images\", id);\n\t}\n\n\tasync deleteOriginal(id: string): Promise<void> {\n\t\tconst db = await this.getDb();\n\t\tawait deleteFromStore(db, \"images\", id);\n\t}\n\n\tasync storeThumbnail(blob: Blob): Promise<string> {\n\t\tconst id = generateBlobId();\n\t\tconst db = await this.getDb();\n\t\tawait putInStore(db, \"thumbnails\", id, blob);\n\t\treturn id;\n\t}\n\n\tasync getThumbnail(id: string): Promise<Blob | undefined> {\n\t\tconst db = await this.getDb();\n\t\treturn getFromStore(db, \"thumbnails\", id);\n\t}\n\n\tasync deleteThumbnail(id: string): Promise<void> {\n\t\tconst db = await this.getDb();\n\t\tawait deleteFromStore(db, \"thumbnails\", id);\n\t}\n}\n\nfunction decodeImageToCanvas(\n\tblob: Blob,\n\tmaxDimension?: number,\n): Promise<{ canvas: HTMLCanvasElement; width: number; height: number }> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\timg.onload = () => {\n\t\t\tconst w0 = img.naturalWidth;\n\t\t\tconst h0 = img.naturalHeight;\n\t\t\tif (w0 < 1 || h0 < 1) {\n\t\t\t\treject(new Error(\"Image has no dimensions\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst scale = maxDimension ? Math.min(1, maxDimension / Math.max(w0, h0)) : 1;\n\t\t\tconst cw = Math.max(1, Math.round(w0 * scale));\n\t\t\tconst ch = Math.max(1, Math.round(h0 * scale));\n\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\tcanvas.width = cw;\n\t\t\tcanvas.height = ch;\n\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\tif (!ctx) {\n\t\t\t\treject(new Error(\"Canvas 2D context unavailable\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx.imageSmoothingEnabled = true;\n\t\t\tctx.imageSmoothingQuality = \"high\";\n\t\t\tctx.drawImage(img, 0, 0, cw, ch);\n\t\t\tURL.revokeObjectURL(img.src);\n\t\t\tresolve({ canvas, width: cw, height: ch });\n\t\t};\n\t\timg.onerror = () => {\n\t\t\tURL.revokeObjectURL(img.src);\n\t\t\treject(new Error(\"Could not decode image\"));\n\t\t};\n\t\timg.src = URL.createObjectURL(blob);\n\t});\n}\n\nfunction canvasToBlob(\n\tcanvas: HTMLCanvasElement,\n\tmime: string,\n\tquality?: number,\n): Promise<Blob> {\n\treturn new Promise((resolve, reject) => {\n\t\tcanvas.toBlob(\n\t\t\t(blob) => {\n\t\t\t\tif (!blob) {\n\t\t\t\t\treject(new Error(\"Could not encode blob\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve(blob);\n\t\t\t},\n\t\t\tmime,\n\t\t\tquality,\n\t\t);\n\t});\n}\n\nexport type StoredImageResult = {\n\tblobId: string;\n\tthumbnailBlobId: string;\n\twidth: number;\n\theight: number;\n};\n\n/**\n * Stores an image file in IndexedDB at original resolution and generates a 256px thumbnail.\n * Returns blob IDs that can be referenced from `VectorSceneItem.imageBlobId`.\n */\nexport async function loadImageToStore(\n\tfile: File,\n\tstore: IndexedDbImageStore,\n): Promise<StoredImageResult> {\n\tconst originalBlob = file;\n\tconst blobId = await store.storeOriginal(originalBlob);\n\n\tconst { canvas, width, height } = await decodeImageToCanvas(originalBlob);\n\n\tconst thumbScale = Math.min(1, 256 / Math.max(width, height));\n\tconst tw = Math.max(1, Math.round(width * thumbScale));\n\tconst th = Math.max(1, Math.round(height * thumbScale));\n\tconst thumbCanvas = document.createElement(\"canvas\");\n\tthumbCanvas.width = tw;\n\tthumbCanvas.height = th;\n\tconst tCtx = thumbCanvas.getContext(\"2d\");\n\tif (tCtx) {\n\t\ttCtx.imageSmoothingEnabled = true;\n\t\ttCtx.imageSmoothingQuality = \"high\";\n\t\ttCtx.drawImage(canvas, 0, 0, tw, th);\n\t}\n\tconst thumbBlob = await canvasToBlob(\n\t\tthumbCanvas,\n\t\tfile.type === \"image/jpeg\" || file.type === \"image/jpg\"\n\t\t\t? \"image/jpeg\"\n\t\t\t: \"image/png\",\n\t\tfile.type.startsWith(\"image/jpeg\") ? 0.85 : undefined,\n\t);\n\tconst thumbnailBlobId = await store.storeThumbnail(thumbBlob);\n\n\treturn { blobId, thumbnailBlobId, width, height };\n}\n\n/**\n * Fetches a blob from IndexedDB and creates a session-scoped `blob:` URL.\n * Caller must revoke via `URL.revokeObjectURL` when done.\n */\nexport async function createBlobUrlFromStore(\n\tstore: IndexedDbImageStore,\n\tblobId: string,\n): Promise<string | null> {\n\tconst blob = await store.getOriginal(blobId);\n\tif (!blob) return null;\n\treturn URL.createObjectURL(blob);\n}\n\n/**\n * Creates a `blob:` URL for the thumbnail from IndexedDB.\n */\nexport async function createThumbnailBlobUrlFromStore(\n\tstore: IndexedDbImageStore,\n\tthumbnailBlobId: string,\n): Promise<string | null> {\n\tconst blob = await store.getThumbnail(thumbnailBlobId);\n\tif (!blob) return null;\n\treturn URL.createObjectURL(blob);\n}\n\nexport async function deleteImageFromStore(\n\tstore: IndexedDbImageStore,\n\tblobId: string,\n\tthumbnailBlobId?: string,\n): Promise<void> {\n\tawait store.deleteOriginal(blobId);\n\tif (thumbnailBlobId) {\n\t\tawait store.deleteThumbnail(thumbnailBlobId);\n\t}\n}\n","import {\n\tcreateBlobUrlFromStore,\n\tcreateThumbnailBlobUrlFromStore,\n\tIndexedDbImageStore,\n} from \"../../image/indexed-db-image-store\";\nimport { rebuildItemSvg } from \"../../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport type { VectorCanvasPersistenceAdapter, VectorCanvasSnapshot } from \"./types\";\n\nconst DOCUMENT_STORE = \"document\";\nconst DOCUMENT_KEY = \"main\";\n\nfunction openDocumentDb(dbName: string): Promise<IDBDatabase> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst req = indexedDB.open(dbName, 1);\n\t\treq.onupgradeneeded = () => {\n\t\t\tconst db = req.result;\n\t\t\tif (!db.objectStoreNames.contains(DOCUMENT_STORE)) {\n\t\t\t\tdb.createObjectStore(DOCUMENT_STORE);\n\t\t\t}\n\t\t};\n\t\treq.onsuccess = () => resolve(req.result);\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\n/**\n * Persistence adapter that stores the document JSON in IndexedDB and manages\n * image blobs separately. Images are stored at original resolution in a dedicated\n * `images` object store via {@link IndexedDbImageStore}, keeping the document JSON\n * lightweight and enabling full-resolution zoom without blur.\n *\n * On load, blob URLs are created from the stored blobs and `childrenSvg` is\n * rebuilt for each image item. Blob URLs are session-scoped and revoked on\n * subsequent saves / cleanup.\n */\nexport function createIndexedDbPersistenceAdapter(\n\toptions: { dbName?: string } = {},\n): VectorCanvasPersistenceAdapter {\n\tconst dbName = options.dbName ?? \"canvu-document\";\n\tconst imageStore = new IndexedDbImageStore();\n\tlet documentDbPromise: Promise<IDBDatabase> | null = null;\n\n\tfunction getDocDb(): Promise<IDBDatabase> {\n\t\tif (!documentDbPromise) {\n\t\t\tdocumentDbPromise = openDocumentDb(dbName);\n\t\t}\n\t\treturn documentDbPromise;\n\t}\n\n\tasync function getFromDocDb<T>(key: string): Promise<T | undefined> {\n\t\tconst db = await getDocDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction(DOCUMENT_STORE, \"readonly\");\n\t\t\tconst req = tx.objectStore(DOCUMENT_STORE).get(key);\n\t\t\treq.onsuccess = () => resolve(req.result as T | undefined);\n\t\t\treq.onerror = () => reject(req.error);\n\t\t});\n\t}\n\n\tasync function putInDocDb(key: string, value: unknown): Promise<void> {\n\t\tconst db = await getDocDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction(DOCUMENT_STORE, \"readwrite\");\n\t\t\tconst req = tx.objectStore(DOCUMENT_STORE).put(value, key);\n\t\t\treq.onsuccess = () => resolve();\n\t\t\treq.onerror = () => reject(req.error);\n\t\t});\n\t}\n\n\t/** Revoke all blob URLs on items and optionally clean stale blobs. */\n\tconst revokedHrefs = new Set<string>();\n\n\tfunction revokeItemBlob(item: VectorSceneItem): VectorSceneItem {\n\t\tif (item.imageRasterHref?.startsWith(\"blob:\")) {\n\t\t\trevokedHrefs.add(item.imageRasterHref);\n\t\t}\n\t\tif (item.imageThumbnailHref?.startsWith(\"blob:\")) {\n\t\t\trevokedHrefs.add(item.imageThumbnailHref);\n\t\t}\n\t\tconst out = { ...item };\n\t\tdelete out.imageRasterHref;\n\t\tdelete out.imageThumbnailHref;\n\t\t// Remove the stale childrenSvg since it contains the blob URL\n\t\tif (item.toolKind === \"image\") {\n\t\t\tout.childrenSvg = \"\";\n\t\t}\n\t\treturn out;\n\t}\n\n\treturn {\n\t\tasync load(): Promise<VectorCanvasSnapshot | null> {\n\t\t\tconst raw = await getFromDocDb<{\n\t\t\t\titems: VectorSceneItem[];\n\t\t\t\tversion?: number;\n\t\t\t}>(DOCUMENT_KEY);\n\t\t\tif (!raw?.items) return null;\n\n\t\t\tconst resolved: VectorSceneItem[] = [];\n\t\t\tfor (const item of raw.items) {\n\t\t\t\tif (item.toolKind === \"image\" && item.imageBlobId) {\n\t\t\t\t\tconst itemWithBlob = { ...item } as VectorSceneItem & {\n\t\t\t\t\t\timageRasterHref?: string;\n\t\t\t\t\t\timageThumbnailHref?: string;\n\t\t\t\t\t};\n\t\t\t\t\t// Create thumbnail blob URL first for progressive loading\n\t\t\t\t\tif (item.imageThumbnailBlobId) {\n\t\t\t\t\t\tconst thumbUrl = await createThumbnailBlobUrlFromStore(\n\t\t\t\t\t\t\timageStore,\n\t\t\t\t\t\t\titem.imageThumbnailBlobId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (thumbUrl) {\n\t\t\t\t\t\t\titemWithBlob.imageThumbnailHref = thumbUrl;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Create full-res blob URL\n\t\t\t\t\tconst fullUrl = await createBlobUrlFromStore(imageStore, item.imageBlobId);\n\t\t\t\t\tif (fullUrl) {\n\t\t\t\t\t\titemWithBlob.imageRasterHref = fullUrl;\n\t\t\t\t\t}\n\t\t\t\t\t// Rebuild childrenSvg with the blob URL\n\t\t\t\t\tconst rebuilt = rebuildItemSvg(itemWithBlob as VectorSceneItem);\n\t\t\t\t\tresolved.push(rebuilt);\n\t\t\t\t} else {\n\t\t\t\t\tresolved.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { items: resolved, version: raw.version ?? 1 };\n\t\t},\n\n\t\tasync save(snapshot: VectorCanvasSnapshot): Promise<void> {\n\t\t\t// Revoke previous blob URLs\n\t\t\tfor (const href of revokedHrefs) {\n\t\t\t\tURL.revokeObjectURL(href);\n\t\t\t}\n\t\t\trevokedHrefs.clear();\n\n\t\t\t// Strip blob URLs from items before persisting\n\t\t\tconst cleanItems = snapshot.items.map(revokeItemBlob);\n\t\t\tawait putInDocDb(DOCUMENT_KEY, {\n\t\t\t\titems: cleanItems,\n\t\t\t\tversion: snapshot.version ?? 1,\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createNoopPersistenceAdapter(): VectorCanvasPersistenceAdapter {\n\treturn {\n\t\tload: () => Promise.resolve(null),\n\t\tsave: () => Promise.resolve(),\n\t};\n}\n","import type { VectorCanvasPersistenceAdapter, VectorCanvasSnapshot } from \"./types\";\n\nexport const DEFAULT_VECTOR_CANVAS_STORAGE_KEY = \"trazo.vector-canvas.v1\";\n\nconst SNAPSHOT_VERSION = 1;\n\nexport type CreateLocalStoragePersistenceAdapterOptions = {\n\t/** Defaults to {@link DEFAULT_VECTOR_CANVAS_STORAGE_KEY} */\n\tkey?: string;\n\t/** Defaults to `window.localStorage` when `typeof window !== \"undefined\"` */\n\tstorage?: Storage | null;\n};\n\n/**\n * Default persistence: `JSON.stringify` snapshot under a single localStorage key.\n * Pass the same `key` in every session to restore the board.\n */\nexport function createLocalStoragePersistenceAdapter(\n\toptions: CreateLocalStoragePersistenceAdapterOptions = {},\n): VectorCanvasPersistenceAdapter {\n\tconst key = options.key ?? DEFAULT_VECTOR_CANVAS_STORAGE_KEY;\n\tconst storage =\n\t\toptions.storage ??\n\t\t(typeof globalThis !== \"undefined\" &&\n\t\t\"localStorage\" in globalThis &&\n\t\tglobalThis.localStorage\n\t\t\t? globalThis.localStorage\n\t\t\t: null);\n\n\treturn {\n\t\tload(): Promise<VectorCanvasSnapshot | null> {\n\t\t\tif (!storage) return Promise.resolve(null);\n\t\t\ttry {\n\t\t\t\tconst raw = storage.getItem(key);\n\t\t\t\tif (!raw) return Promise.resolve(null);\n\t\t\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\t\t\tif (\n\t\t\t\t\t!parsed ||\n\t\t\t\t\ttypeof parsed !== \"object\" ||\n\t\t\t\t\t!(\"items\" in parsed) ||\n\t\t\t\t\t!Array.isArray((parsed as VectorCanvasSnapshot).items)\n\t\t\t\t) {\n\t\t\t\t\treturn Promise.resolve(null);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve(parsed as VectorCanvasSnapshot);\n\t\t\t} catch {\n\t\t\t\treturn Promise.resolve(null);\n\t\t\t}\n\t\t},\n\t\tsave(snapshot: VectorCanvasSnapshot): Promise<void> {\n\t\t\tif (!storage) return Promise.resolve();\n\t\t\ttry {\n\t\t\t\tstorage.setItem(\n\t\t\t\t\tkey,\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t...snapshot,\n\t\t\t\t\t\tversion: snapshot.version ?? SNAPSHOT_VERSION,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t/* quota / private mode */\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t},\n\t};\n}\n\nfunction createNoopPersistenceAdapter(): VectorCanvasPersistenceAdapter {\n\treturn {\n\t\tload: () => Promise.resolve(null),\n\t\tsave: () => Promise.resolve(),\n\t};\n}\n\nexport { createNoopPersistenceAdapter };\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport {\n\tcreateLocalStoragePersistenceAdapter,\n\tcreateNoopPersistenceAdapter,\n\tDEFAULT_VECTOR_CANVAS_STORAGE_KEY,\n} from \"./local-storage-adapter\";\nimport type {\n\tVectorCanvasPersistenceAdapter,\n\tVectorCanvasRemoteAdapter,\n} from \"./types\";\n\nexport type UseVectorCanvasDocumentOptions = {\n\t/**\n\t * Storage key for the built-in localStorage adapter (ignored if `persistence` is set).\n\t * @default {@link DEFAULT_VECTOR_CANVAS_STORAGE_KEY}\n\t */\n\tpersistenceKey?: string;\n\t/**\n\t * Custom persistence (Postgres via API, IndexedDB, …).\n\t * - `undefined` → default **localStorage** adapter with `persistenceKey`\n\t * - `false` → no persistence (memory only)\n\t */\n\tpersistence?: VectorCanvasPersistenceAdapter | false;\n\t/** Debounce before writing to storage after edits. @default 400 */\n\tdebounceMs?: number;\n\t/**\n\t * Optional: WebSocket / server sync — `subscribe` receives remote `items`;\n\t * `send` is called after local edits (after debounce) so you can push upstream.\n\t */\n\tremote?: VectorCanvasRemoteAdapter;\n};\n\nexport type UseVectorCanvasDocumentResult = {\n\titems: VectorSceneItem[];\n\t/** Pass to `VectorViewport` `onItemsChange` */\n\tonItemsChange: (next: VectorSceneItem[]) => void;\n\t/** Same as `onItemsChange`; included for flexibility */\n\tsetItems: (next: VectorSceneItem[]) => void;\n\t/** `false` until the first `load()` finished (avoid SSR flash / empty overwrite) */\n\tisHydrated: boolean;\n\t/** Clear persisted snapshot (and reset state to `[]`) */\n\tclearPersistedDocument: () => void;\n};\n\n/**\n * Default **localStorage** persistence + optional **remote** sync hook.\n *\n * @example\n * ```tsx\n * const doc = useVectorCanvasDocument();\n * return (\n * <VectorViewport\n * items={doc.items}\n * onItemsChange={doc.onItemsChange}\n * interactive\n * ariaLabel=\"Board\"\n * />\n * );\n * ```\n *\n * @example Custom API\n * ```ts\n * const persistence = useMemo(() => ({\n * load: () => fetch(\"/api/board\").then((r) => r.json()),\n * save: (snap) => fetch(\"/api/board\", { method: \"PUT\", body: JSON.stringify(snap) }),\n * }), []);\n * useVectorCanvasDocument({ persistence });\n * ```\n */\nexport function useVectorCanvasDocument(\n\toptions: UseVectorCanvasDocumentOptions = {},\n): UseVectorCanvasDocumentResult {\n\tconst {\n\t\tpersistenceKey = DEFAULT_VECTOR_CANVAS_STORAGE_KEY,\n\t\tpersistence,\n\t\tdebounceMs = 400,\n\t\tremote,\n\t} = options;\n\n\tconst adapter = useMemo((): VectorCanvasPersistenceAdapter => {\n\t\tif (persistence === false) return createNoopPersistenceAdapter();\n\t\tif (persistence) return persistence;\n\t\treturn createLocalStoragePersistenceAdapter({ key: persistenceKey });\n\t}, [persistence, persistenceKey]);\n\n\tconst [items, setItems] = useState<VectorSceneItem[]>([]);\n\tconst [isHydrated, setIsHydrated] = useState(false);\n\tconst saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst adapterRef = useRef(adapter);\n\tadapterRef.current = adapter;\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tadapter.load().then((snap) => {\n\t\t\tif (cancelled) return;\n\t\t\tif (snap?.items && snap.items.length > 0) {\n\t\t\t\tsetItems(snap.items);\n\t\t\t}\n\t\t\tsetIsHydrated(true);\n\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [adapter]);\n\n\tconst persist = useCallback((next: VectorSceneItem[]) => {\n\t\tvoid adapterRef.current.save({ items: next, version: 1 });\n\t}, []);\n\n\tconst onItemsChange = useCallback(\n\t\t(next: VectorSceneItem[]) => {\n\t\t\tsetItems(next);\n\t\t\tremote?.send?.(next);\n\t\t\tif (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n\t\t\tsaveTimerRef.current = setTimeout(() => {\n\t\t\t\tpersist(next);\n\t\t\t\tsaveTimerRef.current = null;\n\t\t\t}, debounceMs);\n\t\t},\n\t\t[debounceMs, persist, remote],\n\t);\n\n\t/** After local load, wire server so a fast WS message does not get overwritten by stale LS. */\n\tuseEffect(() => {\n\t\tif (!remote || !isHydrated) return;\n\t\treturn remote.subscribe((serverItems) => {\n\t\t\tsetItems(serverItems);\n\t\t\tpersist(serverItems);\n\t\t});\n\t}, [remote, isHydrated, persist]);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n\t\t},\n\t\t[],\n\t);\n\n\tconst clearPersistedDocument = useCallback(() => {\n\t\tsetItems([]);\n\t\tvoid adapterRef.current.save({ items: [], version: 1 });\n\t}, []);\n\n\treturn {\n\t\titems,\n\t\tonItemsChange,\n\t\tsetItems: onItemsChange,\n\t\tisHydrated,\n\t\tclearPersistedDocument,\n\t};\n}\n","\"use client\";\n\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseLayoutEffect,\n} from \"react\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport type { VectorToolDefinition } from \"../tools/types\";\nimport type {\n\tCustomShapePlacementOptions,\n\tVectorViewportHandle,\n\tVectorViewportProps,\n} from \"../VectorViewport\";\n\nexport type CanvasPluginRenderContext = {\n\t/** Live viewport handle when the plugin needs camera or viewport size. */\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n};\n\nexport type CanvasPluginItemsChangeMiddlewareContext = {\n\t/** Current board items before the pending change is applied. */\n\tcurrentItems: readonly VectorSceneItem[];\n\t/** Continue the item change pipeline. */\n\tnext: NonNullable<VectorViewportProps[\"onItemsChange\"]>;\n\t/** Original consumer callback passed to `VectorViewport`. */\n\tconsumerOnItemsChange?: VectorViewportProps[\"onItemsChange\"];\n\t/** Live viewport handle for advanced integrations. */\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n};\n\nexport type CanvasPluginContribution = {\n\t/** Additional tools injected into the board toolbar/runtime. */\n\ttools?: readonly VectorToolDefinition[];\n\t/** Transform the resolved tool list (reorder, replace, or filter existing tools). */\n\ttoolTransform?: (tools: VectorToolDefinition[]) => VectorToolDefinition[];\n\t/** Multiple custom placements contributed by plugins; the active one is resolved by `toolId`. */\n\tcustomPlacements?: readonly CustomShapePlacementOptions[];\n\t/** Simple viewport prop overrides owned by the plugin runtime. */\n\tviewportProps?: Partial<\n\t\tPick<VectorViewportProps, \"remotePresence\" | \"presenceOverlay\">\n\t>;\n\t/** Event callbacks chained into the viewport without manual wiring in app code. */\n\tcallbacks?: Partial<\n\t\tPick<\n\t\t\tVectorViewportProps,\n\t\t\t| \"onWorldPointerMove\"\n\t\t\t| \"onWorldPointerLeave\"\n\t\t\t| \"onPlacementPreviewChange\"\n\t\t\t| \"onCameraChange\"\n\t\t>\n\t>;\n\t/** Middleware around `onItemsChange` for collaboration, comments, persistence, etc. */\n\twrapOnItemsChange?: (\n\t\tnextItems: VectorSceneItem[],\n\t\tctx: CanvasPluginItemsChangeMiddlewareContext,\n\t) => void;\n};\n\nexport type CanvasPluginComponentProps = {\n\t/** Stable plugin id so the component can register contributions. */\n\tpluginId: string;\n};\n\nexport type CanvasPlugin = {\n\t/** Stable id, e.g. `canvu.plugin.chatbot`. */\n\tid: string;\n\t/**\n\t * Legacy/simple rendering path for purely visual plugins.\n\t *\n\t * Prefer `Component` for plugins that need hooks, document integration, tools, or runtime contributions.\n\t */\n\trender?: (ctx: CanvasPluginRenderContext) => ReactNode;\n\t/**\n\t * Preferred plugin entrypoint for first-party and advanced plugins.\n\t *\n\t * The component can use hooks and register contributions through `useCanvuPluginContribution`.\n\t */\n\tComponent?: (props: CanvasPluginComponentProps) => ReactNode;\n};\n\nexport type CanvuPluginViewportSnapshot = Pick<\n\tVectorViewportProps,\n\t| \"items\"\n\t| \"onItemsChange\"\n\t| \"toolId\"\n\t| \"interactive\"\n\t| \"toolLocked\"\n\t| \"onToolChangeRequest\"\n>;\n\nexport type CanvuPluginContextValue = {\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n\tviewport: CanvuPluginViewportSnapshot;\n\tresolvedTools: VectorToolDefinition[];\n\tregisterContribution: (\n\t\tpluginId: string,\n\t\tcontribution: CanvasPluginContribution,\n\t) => void;\n\tunregisterContribution: (pluginId: string) => void;\n};\n\nexport const CanvuPluginContext = createContext<CanvuPluginContextValue | null>(\n\tnull,\n);\n\n/**\n * Creates a typed canvu plugin descriptor.\n *\n * Use this helper when authoring custom plugins so your editor can infer the plugin shape\n * and surface better hover documentation for the returned object.\n */\nexport function createCanvuPlugin(plugin: CanvasPlugin): CanvasPlugin {\n\treturn plugin;\n}\n\n/**\n * Returns the low-level canvu plugin runtime context.\n *\n * This is an advanced API for custom plugin authors. Prefer first-party plugin factories such as\n * `chatbotPlugin(...)` and `realtimeCollaborationPlugin(...)` for the common path.\n */\nexport function useCanvuPluginContext(): CanvuPluginContextValue {\n\tconst ctx = useContext(CanvuPluginContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t\"useCanvuPluginContext must be used inside a VectorViewport plugin runtime.\",\n\t\t);\n\t}\n\treturn ctx;\n}\n\n/**\n * Returns the current viewport-facing board state exposed to plugins.\n *\n * Use this when a custom plugin needs access to items, the active tool, or the consumer's\n * `onToolChangeRequest` callback.\n */\nexport function useCanvuViewportContext(): {\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n\tviewport: CanvuPluginViewportSnapshot;\n} {\n\tconst { viewportRef, viewport } = useCanvuPluginContext();\n\treturn { viewportRef, viewport };\n}\n\n/**\n * Returns the board document context exposed to plugins.\n *\n * This hook is intended for advanced plugins that need to read items or integrate with the board's\n * `onItemsChange` lifecycle.\n */\nexport function useCanvuDocumentContext(): {\n\titems: readonly VectorSceneItem[];\n\tonItemsChange?: VectorViewportProps[\"onItemsChange\"];\n} {\n\tconst { viewport } = useCanvuPluginContext();\n\treturn {\n\t\titems: viewport.items,\n\t\tonItemsChange: viewport.onItemsChange,\n\t};\n}\n\n/**\n * Returns the tool list already resolved by the plugin runtime.\n *\n * `VectorToolbar` consumes this automatically when you omit its `tools` prop, so most apps do not\n * need this hook directly.\n */\nexport function useCanvuResolvedTools(): VectorToolDefinition[] {\n\treturn useCanvuPluginContext().resolvedTools;\n}\n\n/**\n * Registers non-visual plugin contributions with the current `VectorViewport` runtime.\n *\n * Use this inside `plugin.Component` when you want to inject tools, viewport behavior, or document\n * middleware without requiring the consumer to wire hooks manually.\n */\nexport function useCanvuPluginContribution(\n\tpluginId: string,\n\tcontribution: CanvasPluginContribution,\n): void {\n\tconst { registerContribution, unregisterContribution } = useCanvuPluginContext();\n\tuseLayoutEffect(() => {\n\t\tregisterContribution(pluginId, contribution);\n\t\treturn () => unregisterContribution(pluginId);\n\t}, [contribution, pluginId, registerContribution, unregisterContribution]);\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport type { VectorToolDefinition } from \"../tools/types\";\nimport type { CustomShapePlacementOptions } from \"../VectorViewport\";\nimport {\n\ttype CanvasPlugin,\n\tcreateCanvuPlugin,\n\tuseCanvuPluginContribution,\n} from \"./types\";\n\nexport type CreateToolPluginOptions = VectorToolDefinition & {\n\t/**\n\t * Optional custom placement factory for tools that create scene items directly.\n\t *\n\t * When provided, the resulting plugin contributes a `customPlacement` entry for this tool id.\n\t */\n\tcreateItem?: (args: {\n\t\tid: string;\n\t\tbounds: { x: number; y: number; width: number; height: number };\n\t}) => VectorSceneItem;\n\t/**\n\t * Optional tool list transform applied after this tool is merged.\n\t *\n\t * Use this when you need custom ordering or to replace an existing tool position.\n\t */\n\ttoolTransform?: (tools: VectorToolDefinition[]) => VectorToolDefinition[];\n};\n\nfunction ToolPluginComponent({\n\tpluginId,\n\ttool,\n\ttoolTransform,\n\tcreateItem,\n}: {\n\tpluginId: string;\n\ttool: VectorToolDefinition;\n\ttoolTransform?: (tools: VectorToolDefinition[]) => VectorToolDefinition[];\n\tcreateItem?: CustomShapePlacementOptions[\"createItem\"];\n}) {\n\tconst contribution = useMemo(\n\t\t() => ({\n\t\t\ttools: [tool],\n\t\t\ttoolTransform,\n\t\t\tcustomPlacements: createItem\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttoolId: tool.id,\n\t\t\t\t\t\t\tcreateItem,\n\t\t\t\t\t\t},\n\t\t\t\t\t]\n\t\t\t\t: undefined,\n\t\t}),\n\t\t[createItem, tool, toolTransform],\n\t);\n\tuseCanvuPluginContribution(pluginId, contribution);\n\treturn null;\n}\n\n/**\n * Creates a lightweight plugin that contributes a single tool to `VectorViewport`.\n *\n * Use this for isolated tools such as custom shapes, review pins, or lightweight creation flows.\n * For larger features that also need presence, panels, or network integration, prefer a dedicated\n * feature plugin such as `realtimeCollaborationPlugin(...)`.\n */\nexport function createToolPlugin(options: CreateToolPluginOptions): CanvasPlugin {\n\tconst { createItem, toolTransform, ...tool } = options;\n\tconst pluginId = `canvu.plugin.tool:${tool.id}`;\n\treturn createCanvuPlugin({\n\t\tid: pluginId,\n\t\tComponent() {\n\t\t\treturn (\n\t\t\t\t<ToolPluginComponent\n\t\t\t\t\tpluginId={pluginId}\n\t\t\t\t\ttool={tool}\n\t\t\t\t\ttoolTransform={toolTransform}\n\t\t\t\t\tcreateItem={createItem}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t});\n}\n","\"use client\";\n\nimport { type CSSProperties, useEffect, useLayoutEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nconst menuStyle: CSSProperties = {\n\tposition: \"fixed\",\n\tzIndex: 10000,\n\tminWidth: 200,\n\tpadding: 4,\n\tbackgroundColor: \"#ffffff\",\n\tborder: \"1px solid #e2e8f0\",\n\tborderRadius: 8,\n\tboxShadow: \"0 10px 40px rgba(15, 23, 42, 0.12)\",\n\tfontSize: 13,\n\tfontFamily: \"system-ui, sans-serif\",\n\tcolor: \"#0f172a\",\n};\n\nconst itemStyle: CSSProperties = {\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\ttextAlign: \"left\",\n\tpadding: \"8px 12px\",\n\tmargin: 0,\n\tborder: \"none\",\n\tborderRadius: 4,\n\tbackground: \"transparent\",\n\tcursor: \"pointer\",\n};\n\nconst dividerStyle: CSSProperties = {\n\theight: 1,\n\tmargin: \"4px 8px\",\n\tbackground: \"#e2e8f0\",\n};\n\nexport type ShapeContextMenuProps = {\n\t/** Viewport client coordinates (from `clientX` / `clientY`). */\n\tx: number;\n\ty: number;\n\t/** When true, all selected items are locked — action is “unlock”. */\n\tallSelectedLocked: boolean;\n\tonClose: () => void;\n\tonToggleLock: () => void;\n\tonCut: () => void;\n\tonCopy: () => void;\n\tonBringToFront: () => void;\n\tonBringForward: () => void;\n\tonSendBackward: () => void;\n\tonSendToBack: () => void;\n\tonDuplicate: () => void;\n\tonDelete: () => void;\n};\n\n/**\n * Floating menu for shape actions (reorder, clipboard, lock, delete).\n * Renders in a portal and closes on Escape or outside click.\n */\nexport function ShapeContextMenu({\n\tx,\n\ty,\n\tallSelectedLocked,\n\tonClose,\n\tonToggleLock,\n\tonCut,\n\tonCopy,\n\tonBringToFront,\n\tonBringForward,\n\tonSendBackward,\n\tonSendToBack,\n\tonDuplicate,\n\tonDelete,\n}: ShapeContextMenuProps) {\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\n\tuseLayoutEffect(() => {\n\t\tconst el = rootRef.current;\n\t\tif (!el) return;\n\t\tconst pad = 8;\n\t\tconst w = el.offsetWidth || 200;\n\t\tconst h = el.offsetHeight || 160;\n\t\tlet left = x;\n\t\tlet top = y;\n\t\tif (left + w + pad > window.innerWidth) {\n\t\t\tleft = Math.max(pad, window.innerWidth - w - pad);\n\t\t}\n\t\tif (top + h + pad > window.innerHeight) {\n\t\t\ttop = Math.max(pad, window.innerHeight - h - pad);\n\t\t}\n\t\tel.style.left = `${left}px`;\n\t\tel.style.top = `${top}px`;\n\t}, [x, y]);\n\n\tuseEffect(() => {\n\t\tconst onKey = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\t\tconst onPointerDown = (e: PointerEvent) => {\n\t\t\tconst t = e.target as Node | null;\n\t\t\tif (t && rootRef.current?.contains(t)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClose();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\tdocument.addEventListener(\"pointerdown\", onPointerDown, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", onKey);\n\t\t\tdocument.removeEventListener(\"pointerdown\", onPointerDown, true);\n\t\t};\n\t}, [onClose]);\n\n\tconst run = (fn: () => void) => () => {\n\t\tfn();\n\t\tonClose();\n\t};\n\n\tconst renderAction = (\n\t\tlabel: string,\n\t\tonClick: () => void,\n\t\toptions?: { danger?: boolean },\n\t) => (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\tstyle={{\n\t\t\t\t...itemStyle,\n\t\t\t\t...(options?.danger ? { color: \"#b91c1c\" } : {}),\n\t\t\t}}\n\t\t\tonMouseEnter={(e) => {\n\t\t\t\te.currentTarget.style.background = options?.danger ? \"#fef2f2\" : \"#f1f5f9\";\n\t\t\t}}\n\t\t\tonMouseLeave={(e) => {\n\t\t\t\te.currentTarget.style.background = \"transparent\";\n\t\t\t}}\n\t\t\tonClick={run(onClick)}\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n\n\tconst menu = (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tdata-slot=\"shape-context-menu\"\n\t\t\tstyle={{ ...menuStyle, left: x, top: y }}\n\t\t\trole=\"menu\"\n\t\t>\n\t\t\t{renderAction(\"Recortar\", onCut)}\n\t\t\t{renderAction(\"Copiar\", onCopy)}\n\t\t\t{renderAction(\"Duplicar\", onDuplicate)}\n\t\t\t<div aria-hidden style={dividerStyle} />\n\t\t\t{renderAction(\"Trazer para frente\", onBringToFront)}\n\t\t\t{renderAction(\"Avancar uma camada\", onBringForward)}\n\t\t\t{renderAction(\"Recuar uma camada\", onSendBackward)}\n\t\t\t{renderAction(\"Enviar para tras\", onSendToBack)}\n\t\t\t<div aria-hidden style={dividerStyle} />\n\t\t\t{renderAction(allSelectedLocked ? \"Desbloquear\" : \"Bloquear\", onToggleLock)}\n\t\t\t{renderAction(\"Apagar\", onDelete, { danger: true })}\n\t\t</div>\n\t);\n\n\tif (typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\treturn createPortal(menu, document.body);\n}\n","import type { SVGProps } from \"react\";\n\ntype IconProps = SVGProps<SVGSVGElement>;\n\nconst base = {\n\twidth: 20,\n\theight: 20,\n\tviewBox: \"0 0 24 24\",\n\tfill: \"none\",\n\tstroke: \"currentColor\",\n\tstrokeWidth: 2,\n\tstrokeLinecap: \"round\" as const,\n\tstrokeLinejoin: \"round\" as const,\n};\n\nexport function IconHand(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M18 11V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0\" />\n\t\t\t<path d=\"M14 10V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2\" />\n\t\t\t<path d=\"M10 10.5V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v8\" />\n\t\t\t<path d=\"M18 8a2 2 0 1 1 4 0v5a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconSelect(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\" />\n\t\t\t<path d=\"M13 13l6 6\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconRect(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconEllipse(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<ellipse cx=\"12\" cy=\"12\" rx=\"9\" ry=\"6\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconLine(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<line x1=\"5\" y1=\"19\" x2=\"19\" y2=\"5\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconArrow(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<line x1=\"5\" y1=\"19\" x2=\"19\" y2=\"5\" />\n\t\t\t<polyline points=\"12 5 19 5 19 12\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconDraw(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M12 19l7-7 3 3-7 7-3-3z\" />\n\t\t\t<path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\" />\n\t\t\t<path d=\"M2 2l7.586 7.586\" />\n\t\t\t<circle cx=\"11\" cy=\"11\" r=\"2\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconText(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2\" />\n\t\t\t<path d=\"M9 21h6\" />\n\t\t\t<path d=\"M12 3v18\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconImage(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n\t\t\t<circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n\t\t\t<polyline points=\"21 15 16 10 5 21\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconPencil(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M12 19l7-7 3 3-7 7-3-3z\" />\n\t\t\t<path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\" />\n\t\t\t<path d=\"M2 2l7.586 7.586\" />\n\t\t\t<path d=\"M11 4h4v4\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconBrush(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M9.06 11.9l8.07-8.06a2.85 2.85 0 0 1 4.03 4.03l-8.06 8.07\" />\n\t\t\t<path d=\"M7.5 15.5L3 21l5.5-4.5\" />\n\t\t\t<path d=\"M2 22l4-1\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconMarker(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M4 20h16\" />\n\t\t\t<path d=\"M6 16l6-12 6 12\" fill=\"currentColor\" fillOpacity={0.35} />\n\t\t\t<path d=\"M8 14h8\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconLaser(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<circle cx=\"12\" cy=\"12\" r=\"2.5\" />\n\t\t\t<path d=\"M12 4v4\" />\n\t\t\t<path d=\"M12 16v4\" />\n\t\t\t<path d=\"M4 12h4\" />\n\t\t\t<path d=\"M16 12h4\" />\n\t\t</svg>\n\t);\n}\n","import {\n\tArrowUpRight,\n\tCircle,\n\tEraser,\n\tHand,\n\tHighlighter,\n\tImage,\n\tMinus,\n\tMousePointer2,\n\tPenLine,\n\tSquare,\n\tType,\n} from \"lucide-react\";\nimport { IconLaser } from \"./icons\";\nimport type { VectorToolDefinition } from \"./types\";\n\n/** Match previous 20×20 toolbar glyphs; Lucide scales with `currentColor`. */\nconst ic = { size: 20, strokeWidth: 2 } as const;\n\n/**\n * Tool ids shown in the overflow menu at the end of the default toolbar (horizontal layout).\n * Order: shapes, marker, laser, image.\n */\nexport const DEFAULT_OVERFLOW_TOOL_IDS = [\n\t\"rect\",\n\t\"ellipse\",\n\t\"line\",\n\t\"marker\",\n\t\"laser\",\n\t\"image\",\n] as const;\n\n/**\n * Opinionated default tool strip using [Lucide](https://lucide.dev) icons.\n * Pass a subset or your own list via {@link VectorToolbarProps.tools}.\n */\nexport const DEFAULT_VECTOR_TOOLS: VectorToolDefinition[] = [\n\t{\n\t\tid: \"hand\",\n\t\tlabel: \"Hand\",\n\t\ticon: <Hand {...ic} aria-hidden />,\n\t\tshortcutHint: \"H\",\n\t},\n\t{\n\t\tid: \"select\",\n\t\tlabel: \"Select\",\n\t\ticon: <MousePointer2 {...ic} aria-hidden />,\n\t\tshortcutHint: \"V\",\n\t},\n\t{\n\t\tid: \"rect\",\n\t\tlabel: \"Rectangle\",\n\t\ticon: <Square {...ic} aria-hidden />,\n\t\tshortcutHint: \"R\",\n\t},\n\t{\n\t\tid: \"ellipse\",\n\t\tlabel: \"Ellipse\",\n\t\ticon: <Circle {...ic} aria-hidden />,\n\t\tshortcutHint: \"O\",\n\t},\n\t{\n\t\tid: \"line\",\n\t\tlabel: \"Line\",\n\t\ticon: <Minus {...ic} aria-hidden />,\n\t\tshortcutHint: \"L\",\n\t},\n\t{\n\t\tid: \"arrow\",\n\t\tlabel: \"Arrow\",\n\t\ticon: <ArrowUpRight {...ic} aria-hidden />,\n\t\tshortcutHint: \"A\",\n\t},\n\t{\n\t\tid: \"draw\",\n\t\tlabel: \"Desenhar\",\n\t\ttooltipLabel: \"Draw\",\n\t\ticon: <PenLine {...ic} aria-hidden />,\n\t\tshortcutHint: \"D\",\n\t},\n\t{\n\t\tid: \"marker\",\n\t\tlabel: \"Realce\",\n\t\ttooltipLabel: \"Highlighter\",\n\t\ticon: <Highlighter {...ic} aria-hidden />,\n\t\tshortcutHint: \"M\",\n\t},\n\t{\n\t\tid: \"laser\",\n\t\tlabel: \"Laser\",\n\t\ticon: <IconLaser aria-hidden />,\n\t\tshortcutHint: \"K\",\n\t},\n\t{\n\t\tid: \"eraser\",\n\t\tlabel: \"Borracha\",\n\t\ttooltipLabel: \"Eraser\",\n\t\ticon: <Eraser {...ic} aria-hidden />,\n\t\tshortcutHint: \"E\",\n\t},\n\t{\n\t\tid: \"text\",\n\t\tlabel: \"Text\",\n\t\ticon: <Type {...ic} aria-hidden />,\n\t\tshortcutHint: \"T\",\n\t},\n\t{\n\t\tid: \"image\",\n\t\tlabel: \"File\",\n\t\ticon: <Image {...ic} aria-hidden />,\n\t\tshortcutHint: \"I\",\n\t},\n];\n","\"use client\";\n\nimport { ChevronDown, Lock, LockOpen, Shapes } from \"lucide-react\";\nimport {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseId,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { CanvuPluginContext } from \"./plugins\";\nimport {\n\tDEFAULT_OVERFLOW_TOOL_IDS,\n\tDEFAULT_VECTOR_TOOLS,\n} from \"./tools/default-tools\";\nimport type { VectorToolDefinition } from \"./tools/types\";\n\nexport type VectorToolbarRenderContext = {\n\ttools: VectorToolDefinition[];\n\tselectedId: string;\n\tselectTool: (id: string) => void;\n\ttoolLocked: boolean;\n\tsetToolLocked: (locked: boolean) => void;\n};\n\nexport type VectorToolbarProps = {\n\t/** Controlled selection. */\n\tvalue: string;\n\tonChange: (toolId: string) => void;\n\t/** Defaults to {@link DEFAULT_VECTOR_TOOLS}. */\n\ttools?: VectorToolDefinition[];\n\t/**\n\t * Tool ids placed in the overflow menu at the end of the toolbar (horizontal) or bottom (vertical).\n\t * Defaults to {@link DEFAULT_OVERFLOW_TOOL_IDS}. Pass an empty array to show every tool in the main strip.\n\t */\n\toverflowToolIds?: readonly string[];\n\t/** Accessible name for the overflow trigger (menu button). Default: `\"More tools\"`. */\n\toverflowMenuAriaLabel?: string;\n\t/** Accessible name for the toolbar landmark. */\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\t/** Layout direction. */\n\torientation?: \"horizontal\" | \"vertical\";\n\t/** Optional style for the outer `role=\"toolbar\"` element. */\n\tstyle?: CSSProperties;\n\t/** Class names applied to every tool button. */\n\tbuttonClassName?: string;\n\t/** Extra class names when that tool is selected. */\n\tactiveButtonClassName?: string;\n\t/** Shows a lock toggle that keeps current tool active after use. */\n\tshowToolLockToggle?: boolean;\n\t/** Controlled lock state for tool persistence. */\n\ttoolLocked?: boolean;\n\t/** Called when lock state changes. */\n\tonToolLockedChange?: (locked: boolean) => void;\n\t/** `compact` = icon + tooltip only; `comfortable` = small caption under the icon. */\n\tdensity?: \"compact\" | \"comfortable\";\n\t/**\n\t * Full control: render your own toolbar using the same tool list and selection API.\n\t * When set, default buttons are not rendered.\n\t */\n\tchildren?: (ctx: VectorToolbarRenderContext) => ReactNode;\n\t/**\n\t * Partial customization: render the content of each tool button (icon + label layout).\n\t * Default: icon with optional label below on narrow toolbars, or icon-only if `icon` is set.\n\t */\n\trenderToolButton?: (props: {\n\t\ttool: VectorToolDefinition;\n\t\tselected: boolean;\n\t\tonSelect: () => void;\n\t}) => ReactNode;\n};\n\nconst toolbarStyles: CSSProperties = {\n\tdisplay: \"flex\",\n\tgap: \"4px\",\n\talignItems: \"center\",\n\tflexWrap: \"wrap\",\n\tpadding: \"6px 8px\",\n\tborderRadius: \"8px\",\n\tborder: \"1px solid rgba(0,0,0,0.12)\",\n\tbackground: \"rgba(255,255,255,0.95)\",\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tuserSelect: \"none\",\n\tWebkitUserSelect: \"none\",\n\tWebkitTouchCallout: \"none\",\n};\n\n/** Injected once; tooltips show on hover / keyboard focus within the tool wrap. */\nconst TOOLBAR_TOOLTIP_CSS = `\n.vector-toolbar-tool-wrap {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n}\n.vector-toolbar-tip {\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: calc(100% + 8px);\n\ttransform: translateX(-50%);\n\tpadding: 5px 10px;\n\tfont-size: 11px;\n\tfont-weight: 600;\n\tline-height: 1.25;\n\twhite-space: nowrap;\n\tbackground: #18181b;\n\tcolor: #fafafa;\n\tborder-radius: 6px;\n\tbox-shadow: 0 4px 14px rgba(0,0,0,0.18);\n\tpointer-events: none;\n\tz-index: 100;\n\topacity: 0;\n\tvisibility: hidden;\n\ttransition: opacity 0.12s ease, visibility 0.12s ease;\n\tmax-width: min(240px, 70vw);\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.vector-toolbar-tool-wrap:has(button:hover) .vector-toolbar-tip,\n.vector-toolbar-tool-wrap:has(button:focus-visible) .vector-toolbar-tip {\n\topacity: 1;\n\tvisibility: visible;\n}\n`;\n\nconst OVERFLOW_MENU_CSS = `\n.vector-toolbar-overflow-panel {\n\tposition: absolute;\n\tbottom: calc(100% + 6px);\n\ttop: auto;\n\tright: 0;\n\tdisplay: grid;\n\tgrid-template-columns: repeat(3, 40px);\n\tgap: 6px;\n\tpadding: 10px;\n\tborder-radius: 10px;\n\tborder: 1px solid rgba(0,0,0,0.1);\n\tbackground: rgba(255,255,255,0.98);\n\tbox-shadow:\n\t\t0 -4px 24px rgba(0,0,0,0.08),\n\t\t0 0 0 1px rgba(255,255,255,0.6) inset;\n\tz-index: 200;\n\toverflow: visible;\n}\n.vector-toolbar-overflow-anchor {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n}\n.vector-toolbar-overflow-anchor .vector-toolbar-tip {\n\tleft: auto;\n\tright: 0;\n\ttransform: none;\n}\n.vector-toolbar-overflow-cell {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 40px;\n\theight: 40px;\n}\n.vector-toolbar-overflow-cell > button {\n\twidth: 100%;\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n}\n.vector-toolbar-overflow-tip {\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: calc(100% + 8px);\n\ttop: auto;\n\ttransform: translateX(-50%);\n\tpadding: 6px 10px;\n\tfont-size: 11px;\n\tfont-weight: 600;\n\tline-height: 1.35;\n\ttext-align: center;\n\twhite-space: normal;\n\tbackground: #18181b;\n\tcolor: #fafafa;\n\tborder-radius: 6px;\n\tbox-shadow: 0 4px 14px rgba(0,0,0,0.2);\n\tpointer-events: none;\n\tz-index: 210;\n\topacity: 0;\n\tvisibility: hidden;\n\ttransition: opacity 0.12s ease, visibility 0.12s ease;\n\tmax-width: min(220px, 70vw);\n}\n.vector-toolbar-overflow-tip-shortcut {\n\tdisplay: block;\n\tmargin-top: 2px;\n\tfont-size: 10px;\n\tfont-weight: 600;\n\tfont-variant-numeric: tabular-nums;\n\tletter-spacing: 0.04em;\n\topacity: 0.85;\n\tcolor: #a1a1aa;\n}\n.vector-toolbar-overflow-cell:has(button:hover) .vector-toolbar-overflow-tip,\n.vector-toolbar-overflow-cell:has(button:focus-visible) .vector-toolbar-overflow-tip {\n\topacity: 1;\n\tvisibility: visible;\n}\n.vector-toolbar-overflow-cell > button {\n\tbackground: rgba(24,24,27,0.05);\n}\n.vector-toolbar-overflow-cell > button:hover {\n\tbackground: rgba(24,24,27,0.1);\n}\n.vector-toolbar-overflow-cell > button[aria-checked=\"true\"] {\n\tbackground: rgba(24,24,27,0.14);\n\tborder-color: rgba(24,24,27,0.22);\n\tbox-shadow: inset 0 0 0 1px rgba(24,24,27,0.08);\n}\n.vector-toolbar-overflow-cell > button[aria-checked=\"true\"]:hover {\n\tbackground: rgba(24,24,27,0.18);\n}\n.vector-toolbar-overflow-cell > button:focus-visible {\n\toutline: 2px solid rgba(24,24,27,0.35);\n\toutline-offset: 1px;\n}\n`;\n\n/** Narrow viewports: single-row scroll strip, tighter chrome, safe overflow palette width. */\nconst TOOLBAR_MOBILE_CSS = `\n@media (max-width: 639px) {\n\t.vector-toolbar[data-orientation=\"horizontal\"] {\n\t\tflex-wrap: nowrap;\n\t\talign-items: center;\n\t\tgap: 2px;\n\t\tpadding: 4px 4px;\n\t\tmax-width: 100%;\n\t\toverflow-x: auto;\n\t\toverflow-y: hidden;\n\t\t-webkit-overflow-scrolling: touch;\n\t\toverscroll-behavior-x: contain;\n\t\ttouch-action: pan-x;\n\t\tscrollbar-width: none;\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"]::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"] .vector-toolbar-spacer {\n\t\tflex: 1 1 4px;\n\t\tmin-width: 2px;\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"] .vector-toolbar-tool-wrap button {\n\t\tmin-width: 38px;\n\t\tmin-height: 38px;\n\t\tpadding: 4px 5px;\n\t}\n\t.vector-toolbar-overflow-panel {\n\t\tmax-width: min(calc(100vw - 16px), 260px);\n\t\tright: 0;\n\t\tleft: auto;\n\t\tgrid-template-columns: repeat(3, 36px);\n\t\tgap: 5px;\n\t\tpadding: 8px;\n\t}\n\t.vector-toolbar-overflow-cell {\n\t\twidth: 36px;\n\t\theight: 36px;\n\t}\n\t.vector-toolbar-overflow-tip {\n\t\tfont-size: 10px;\n\t\tpadding: 5px 8px;\n\t\tmax-width: min(200px, 85vw);\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"] button.vector-toolbar-overflow-trigger {\n\t\tmin-width: 40px !important;\n\t\tmin-height: 38px !important;\n\t\tpadding: 4px 6px !important;\n\t}\n}\n`;\n\nconst defaultButtonStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\tflexDirection: \"column\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tgap: \"2px\",\n\tminWidth: \"44px\",\n\tminHeight: \"44px\",\n\tpadding: \"4px 6px\",\n\tborderWidth: \"1px\",\n\tborderStyle: \"solid\",\n\tborderColor: \"transparent\",\n\tborderRadius: \"6px\",\n\tbackground: \"transparent\",\n\tcursor: \"pointer\",\n\tfontSize: \"10px\",\n\tcolor: \"#18181b\",\n\toutline: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n\tuserSelect: \"none\",\n\tWebkitUserSelect: \"none\",\n\tWebkitTouchCallout: \"none\",\n};\n\nconst toolLockDividerStyle: CSSProperties = {\n\twidth: 1,\n\talignSelf: \"stretch\",\n\tbackground: \"rgba(24,24,27,0.14)\",\n\tmargin: \"4px 6px\",\n};\n\nconst overflowSpacerStyle: CSSProperties = {\n\tflex: \"1 1 0\",\n\tminWidth: \"8px\",\n\tminHeight: \"8px\",\n};\n\n/** Icon-only grid tile inside the overflow palette (surface + border from CSS). */\nconst overflowGridCellButtonStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tpadding: 0,\n\tborderWidth: \"1px\",\n\tborderStyle: \"solid\",\n\tborderColor: \"transparent\",\n\tborderRadius: \"8px\",\n\tcursor: \"pointer\",\n\tcolor: \"#18181b\",\n\toutline: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nfunction ToolLockGlyph({ locked }: { locked: boolean }) {\n\tconst Icon = locked ? Lock : LockOpen;\n\treturn <Icon size={18} strokeWidth={2} aria-hidden />;\n}\n\nfunction splitToolbarTools(\n\ttools: VectorToolDefinition[],\n\toverflowIds: readonly string[],\n): { primary: VectorToolDefinition[]; overflow: VectorToolDefinition[] } {\n\tif (overflowIds.length === 0) {\n\t\treturn { primary: tools, overflow: [] };\n\t}\n\tconst overflowSet = new Set<string>(overflowIds);\n\tconst primary = tools.filter((t) => !overflowSet.has(t.id));\n\tconst overflow = overflowIds\n\t\t.map((id) => tools.find((t) => t.id === id))\n\t\t.filter((t): t is VectorToolDefinition => Boolean(t));\n\treturn { primary, overflow };\n}\n\nconst icOverflow = { size: 18, strokeWidth: 2 } as const;\n\ntype OverflowMenuProps = {\n\ttools: VectorToolDefinition[];\n\tselectedId: string;\n\tonSelect: (id: string) => void;\n\tdensity: \"compact\" | \"comfortable\";\n\tbuttonClassName: string;\n\tactiveButtonClassName: string;\n\trenderToolButton?: VectorToolbarProps[\"renderToolButton\"];\n\tmenuAriaLabel: string;\n};\n\nfunction ToolbarOverflowMenu({\n\ttools,\n\tselectedId,\n\tonSelect,\n\tdensity,\n\tbuttonClassName,\n\tactiveButtonClassName,\n\trenderToolButton,\n\tmenuAriaLabel,\n}: OverflowMenuProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst wrapRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\tconst menuId = useId();\n\n\tconst activeInOverflow = tools.some((t) => t.id === selectedId);\n\tconst activeTool = tools.find((t) => t.id === selectedId);\n\n\tconst close = useCallback(() => {\n\t\tsetOpen(false);\n\t}, []);\n\n\tconst prevOpenRef = useRef(open);\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst onDocPointerDown = (e: PointerEvent) => {\n\t\t\tif (wrapRef.current?.contains(e.target as Node)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclose();\n\t\t};\n\t\tconst onKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.stopPropagation();\n\t\t\t\tclose();\n\t\t\t\ttriggerRef.current?.focus();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"pointerdown\", onDocPointerDown, true);\n\t\tdocument.addEventListener(\"keydown\", onKeyDown, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"pointerdown\", onDocPointerDown, true);\n\t\t\tdocument.removeEventListener(\"keydown\", onKeyDown, true);\n\t\t};\n\t}, [open, close]);\n\n\tuseEffect(() => {\n\t\tif (prevOpenRef.current && !open) {\n\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t}\n\t\tprevOpenRef.current = open;\n\t}, [open]);\n\n\tconst triggerHighlighted = open || activeInOverflow;\n\n\treturn (\n\t\t<div ref={wrapRef} className=\"vector-toolbar-overflow-anchor\">\n\t\t\t<span className=\"vector-toolbar-tool-wrap\">\n\t\t\t\t<button\n\t\t\t\t\tref={triggerRef}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tid={`${menuId}-trigger`}\n\t\t\t\t\taria-haspopup={renderToolButton ? \"true\" : \"menu\"}\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\taria-controls={open ? `${menuId}-menu` : undefined}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tactiveTool\n\t\t\t\t\t\t\t? `${menuAriaLabel}: ${activeTool.ariaLabel ?? activeTool.label}`\n\t\t\t\t\t\t\t: menuAriaLabel\n\t\t\t\t\t}\n\t\t\t\t\tclassName={`vector-toolbar-overflow-trigger ${buttonClassName} ${triggerHighlighted ? activeButtonClassName : \"\"}`.trim()}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...defaultButtonStyle,\n\t\t\t\t\t\tflexDirection: \"row\",\n\t\t\t\t\t\tminWidth: \"48px\",\n\t\t\t\t\t\tminHeight: density === \"compact\" ? \"40px\" : \"44px\",\n\t\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\t\tgap: \"4px\",\n\t\t\t\t\t\t...(triggerHighlighted\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tbackground: \"rgba(24,24,27,0.1)\",\n\t\t\t\t\t\t\t\t\tborderColor: \"rgba(24,24,27,0.28)\",\n\t\t\t\t\t\t\t\t\tboxShadow: \"inset 0 0 0 1px rgba(24,24,27,0.08)\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tborderColor: \"transparent\",\n\t\t\t\t\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t}}\n\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={() => setOpen((o) => !o)}\n\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\tif (e.key === \"ArrowDown\" && !open) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{activeTool?.icon ?? (\n\t\t\t\t\t\t\t<Shapes {...icOverflow} aria-hidden strokeWidth={2} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\topacity: 0.75,\n\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\ttransform: open ? \"rotate(180deg)\" : undefined,\n\t\t\t\t\t\t\ttransition: \"transform 0.15s ease\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t\t<span className=\"vector-toolbar-tip\" aria-hidden=\"true\">\n\t\t\t\t\t{menuAriaLabel}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t\t{open && renderToolButton ? (\n\t\t\t\t<section\n\t\t\t\t\tid={`${menuId}-menu`}\n\t\t\t\t\taria-label={menuAriaLabel}\n\t\t\t\t\tclassName=\"vector-toolbar-overflow-panel\"\n\t\t\t\t>\n\t\t\t\t\t{tools.map((tool) => {\n\t\t\t\t\t\tconst selected = tool.id === selectedId;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={tool.id}\n\t\t\t\t\t\t\t\tclassName=\"vector-toolbar-overflow-cell\"\n\t\t\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{renderToolButton({\n\t\t\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\t\t\tselected,\n\t\t\t\t\t\t\t\t\tonSelect: () => {\n\t\t\t\t\t\t\t\t\t\tonSelect(tool.id);\n\t\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</section>\n\t\t\t) : null}\n\t\t\t{open && !renderToolButton ? (\n\t\t\t\t<div\n\t\t\t\t\tid={`${menuId}-menu`}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\taria-label={menuAriaLabel}\n\t\t\t\t\tclassName=\"vector-toolbar-overflow-panel\"\n\t\t\t\t>\n\t\t\t\t\t{tools.map((tool, index) => {\n\t\t\t\t\t\tconst selected = tool.id === selectedId;\n\t\t\t\t\t\tconst label = tool.ariaLabel ?? tool.label;\n\t\t\t\t\t\tconst tooltipName = tool.tooltipLabel ?? tool.label;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={tool.id} className=\"vector-toolbar-overflow-cell\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\taria-checked={selected}\n\t\t\t\t\t\t\t\t\ttabIndex={index === 0 ? 0 : -1}\n\t\t\t\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\t\t\t\t{...(tool.shortcutHint !== undefined\n\t\t\t\t\t\t\t\t\t\t? { \"aria-keyshortcuts\": tool.shortcutHint }\n\t\t\t\t\t\t\t\t\t\t: {})}\n\t\t\t\t\t\t\t\t\tstyle={overflowGridCellButtonStyle}\n\t\t\t\t\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tonSelect(tool.id);\n\t\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t\t\tlineHeight: 0,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{tool.icon ?? (\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"34px\",\n\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{tool.label.slice(0, 3)}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<span className=\"vector-toolbar-overflow-tip\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<span>{tooltipName}</span>\n\t\t\t\t\t\t\t\t\t{tool.shortcutHint !== undefined ? (\n\t\t\t\t\t\t\t\t\t\t<span className=\"vector-toolbar-overflow-tip-shortcut\">\n\t\t\t\t\t\t\t\t\t\t\t{tool.shortcutHint}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\n/**\n * Default floating-style toolbar for choosing vector tools (hand, shapes, draw, marker, text, …).\n * Supply your own `tools` array or `children` render prop for full customization.\n *\n * @example\n * ```tsx\n * const [tool, setTool] = useState(\"hand\");\n * <VectorToolbar value={tool} onChange={setTool} aria-label=\"Canvas tools\" />\n * ```\n */\nexport function VectorToolbar({\n\tvalue,\n\tonChange,\n\ttools,\n\toverflowToolIds = DEFAULT_OVERFLOW_TOOL_IDS,\n\toverflowMenuAriaLabel = \"More tools\",\n\t\"aria-label\": ariaLabel = \"Canvas tools\",\n\tclassName = \"\",\n\torientation = \"horizontal\",\n\tstyle,\n\tbuttonClassName = \"\",\n\tactiveButtonClassName = \"\",\n\tshowToolLockToggle = true,\n\ttoolLocked = false,\n\tonToolLockedChange,\n\tdensity = \"compact\",\n\tchildren,\n\trenderToolButton,\n}: VectorToolbarProps) {\n\tconst pluginContext = useContext(CanvuPluginContext);\n\tconst runtimeTools = pluginContext?.resolvedTools;\n\tconst resolvedTools = tools ?? runtimeTools ?? DEFAULT_VECTOR_TOOLS;\n\tconst ctx: VectorToolbarRenderContext = {\n\t\ttools: resolvedTools,\n\t\tselectedId: value,\n\t\tselectTool: onChange,\n\t\ttoolLocked,\n\t\tsetToolLocked: (locked: boolean) => onToolLockedChange?.(locked),\n\t};\n\n\tif (children) {\n\t\treturn (\n\t\t\t<div className={className} style={style}>\n\t\t\t\t{children(ctx)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst { primary: primaryTools, overflow: overflowTools } = splitToolbarTools(\n\t\tresolvedTools,\n\t\toverflowToolIds,\n\t);\n\n\tconst flexDir = orientation === \"vertical\" ? \"column\" : \"row\";\n\tconst showOverflowMenu = overflowTools.length > 0;\n\n\tconst toolbarClass =\n\t\tclassName.trim() === \"\"\n\t\t\t? \"vector-toolbar\"\n\t\t\t: `vector-toolbar ${className.trim()}`;\n\n\treturn (\n\t\t<>\n\t\t\t<style>{TOOLBAR_TOOLTIP_CSS}</style>\n\t\t\t<style>{OVERFLOW_MENU_CSS}</style>\n\t\t\t<style>{TOOLBAR_MOBILE_CSS}</style>\n\t\t\t<div\n\t\t\t\trole=\"toolbar\"\n\t\t\t\tdata-orientation={orientation}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-orientation={orientation === \"vertical\" ? \"vertical\" : \"horizontal\"}\n\t\t\t\tclassName={toolbarClass}\n\t\t\t\tstyle={{ ...toolbarStyles, flexDirection: flexDir, ...style }}\n\t\t\t>\n\t\t\t\t{showToolLockToggle ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"vector-toolbar-tool-wrap\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={toolLocked}\n\t\t\t\t\t\t\t\taria-label={toolLocked ? \"Unlock tool\" : \"Lock tool\"}\n\t\t\t\t\t\t\t\tclassName={`${buttonClassName} ${toolLocked ? activeButtonClassName : \"\"}`.trim()}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...defaultButtonStyle,\n\t\t\t\t\t\t\t\t\t...(density === \"compact\"\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t...(toolLocked\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(24,24,27,0.1)\",\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"rgba(24,24,27,0.28)\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"inset 0 0 0 1px rgba(24,24,27,0.08)\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={() => onToolLockedChange?.(!toolLocked)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ToolLockGlyph locked={toolLocked} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<span className=\"vector-toolbar-tip\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{toolLocked ? \"Tool lock on\" : \"Tool lock off\"}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span aria-hidden style={toolLockDividerStyle} />\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{primaryTools.map((tool) => {\n\t\t\t\t\tconst selected = tool.id === value;\n\t\t\t\t\tconst label = tool.ariaLabel ?? tool.label;\n\n\t\t\t\t\tif (renderToolButton) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={tool.id}>\n\t\t\t\t\t\t\t\t{renderToolButton({\n\t\t\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\t\t\tselected,\n\t\t\t\t\t\t\t\t\tonSelect: () => onChange(tool.id),\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tooltipName = tool.tooltipLabel ?? tool.label;\n\t\t\t\t\tconst tooltipText =\n\t\t\t\t\t\ttool.shortcutHint !== undefined\n\t\t\t\t\t\t\t? `${tooltipName} · ${tool.shortcutHint}`\n\t\t\t\t\t\t\t: tooltipName;\n\n\t\t\t\t\tconst labelOnly = tool.icon == null;\n\t\t\t\t\tconst labelTextStyle: CSSProperties = labelOnly\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tfontSize: \"12px\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\n\t\t\t\t\t\t\t\tlineHeight: 1.2,\n\t\t\t\t\t\t\t\tWebkitFontSmoothing: \"antialiased\",\n\t\t\t\t\t\t\t\tMozOsxFontSmoothing: \"grayscale\",\n\t\t\t\t\t\t\t\ttextRendering: \"geometricPrecision\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<span key={tool.id} className=\"vector-toolbar-tool-wrap\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={selected}\n\t\t\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\t\t\t{...(tool.shortcutHint !== undefined\n\t\t\t\t\t\t\t\t\t? { \"aria-keyshortcuts\": tool.shortcutHint }\n\t\t\t\t\t\t\t\t\t: {})}\n\t\t\t\t\t\t\t\tclassName={`${buttonClassName} ${selected ? activeButtonClassName : \"\"}`.trim()}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...defaultButtonStyle,\n\t\t\t\t\t\t\t\t\t...(density === \"compact\"\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: labelOnly ? \"52px\" : \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t...(selected\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(24,24,27,0.1)\",\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"rgba(24,24,27,0.28)\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"inset 0 0 0 1px rgba(24,24,27,0.08)\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={() => onChange(tool.id)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{tool.icon ?? <span style={labelTextStyle}>{tool.label}</span>}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{density === \"comfortable\" && tool.icon ? (\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"56px\",\n\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{tool.label}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<span className=\"vector-toolbar-tip\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{tooltipText}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{showOverflowMenu && orientation === \"horizontal\" ? (\n\t\t\t\t\t<span\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\tclassName=\"vector-toolbar-spacer\"\n\t\t\t\t\t\tstyle={overflowSpacerStyle}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t{showOverflowMenu ? (\n\t\t\t\t\t<ToolbarOverflowMenu\n\t\t\t\t\t\ttools={overflowTools}\n\t\t\t\t\t\tselectedId={value}\n\t\t\t\t\t\tonSelect={onChange}\n\t\t\t\t\t\tdensity={density}\n\t\t\t\t\t\tbuttonClassName={buttonClassName}\n\t\t\t\t\t\tactiveButtonClassName={activeButtonClassName}\n\t\t\t\t\t\trenderToolButton={renderToolButton}\n\t\t\t\t\t\tmenuAriaLabel={overflowMenuAriaLabel}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\n\nexport type Camera2DOptions = {\n\t/** Minimum zoom scale (world units per CSS pixel). */\n\tminZoom?: number;\n\t/** Maximum zoom scale. */\n\tmaxZoom?: number;\n};\n\n/**\n * 2D camera: pan (`x`, `y`) in **screen space** (CSS pixels) and uniform zoom `zoom`.\n *\n * Screen mapping: `screen = world * zoom + cameraOffset`\n * (world origin maps to `(x, y)` on screen).\n */\nexport class Camera2D {\n\tx = 0;\n\ty = 0;\n\t/** Scale: world units per CSS pixel (larger = more zoomed in). */\n\tzoom = 1;\n\n\treadonly minZoom: number;\n\treadonly maxZoom: number;\n\n\tconstructor(options: Camera2DOptions = {}) {\n\t\tthis.minZoom = options.minZoom ?? 0.05;\n\t\tthis.maxZoom = options.maxZoom ?? 32;\n\t}\n\n\t/**\n\t * Converts a point from world coordinates to CSS pixel coordinates relative to the viewport top-left.\n\t */\n\tworldToScreen(\n\t\tworldX: number,\n\t\tworldY: number,\n\t): { screenX: number; screenY: number } {\n\t\treturn {\n\t\t\tscreenX: worldX * this.zoom + this.x,\n\t\t\tscreenY: worldY * this.zoom + this.y,\n\t\t};\n\t}\n\n\t/**\n\t * Converts a point from CSS pixel coordinates (viewport-relative) to world coordinates.\n\t */\n\tscreenToWorld(\n\t\tscreenX: number,\n\t\tscreenY: number,\n\t): { worldX: number; worldY: number } {\n\t\tconst z = this.zoom;\n\t\tif (z === 0) {\n\t\t\treturn { worldX: 0, worldY: 0 };\n\t\t}\n\t\treturn {\n\t\t\tworldX: (screenX - this.x) / z,\n\t\t\tworldY: (screenY - this.y) / z,\n\t\t};\n\t}\n\n\t/**\n\t * Sets zoom, clamped to `[minZoom, maxZoom]`, optionally anchoring a screen point so it stays under the cursor.\n\t */\n\tsetZoom(nextZoom: number, anchorScreen?: { x: number; y: number }): void {\n\t\tconst clamped = Math.min(this.maxZoom, Math.max(this.minZoom, nextZoom));\n\t\tif (!anchorScreen) {\n\t\t\tthis.zoom = clamped;\n\t\t\treturn;\n\t\t}\n\t\t// World point under the anchor before changing zoom (using current pan + zoom).\n\t\tconst anchorWorld = this.screenToWorld(anchorScreen.x, anchorScreen.y);\n\t\tthis.zoom = clamped;\n\t\t// screen = world * zoom + offset → offset = screen - world * zoom\n\t\tthis.x = anchorScreen.x - anchorWorld.worldX * this.zoom;\n\t\tthis.y = anchorScreen.y - anchorWorld.worldY * this.zoom;\n\t}\n\n\t/**\n\t * Returns the world-space rectangle visible in a viewport of `viewportWidth` x `viewportHeight` CSS pixels.\n\t */\n\tgetVisibleWorldRect(viewportWidth: number, viewportHeight: number): Rect {\n\t\tconst topLeft = this.screenToWorld(0, 0);\n\t\tconst bottomRight = this.screenToWorld(viewportWidth, viewportHeight);\n\t\treturn normalizeRect({\n\t\t\tx: topLeft.worldX,\n\t\t\ty: topLeft.worldY,\n\t\t\twidth: bottomRight.worldX - topLeft.worldX,\n\t\t\theight: bottomRight.worldY - topLeft.worldY,\n\t\t});\n\t}\n}\n","import type {\n\tIndexedDbImageStore,\n\tStoredImageResult,\n} from \"./indexed-db-image-store\";\n\ntype PdfJsLib = typeof import(\"pdfjs-dist\");\n\nlet pdfjsPromise: Promise<PdfJsLib> | null = null;\n\nfunction getPdfJs(): Promise<PdfJsLib> {\n\tif (!pdfjsPromise) {\n\t\tpdfjsPromise = import(\"pdfjs-dist\").then((mod) => {\n\t\t\tconst workerSrc = new URL(\n\t\t\t\t\"pdfjs-dist/build/pdf.worker.min.mjs\",\n\t\t\t\timport.meta.url,\n\t\t\t).toString();\n\t\t\tmod.GlobalWorkerOptions.workerSrc = workerSrc;\n\t\t\treturn mod;\n\t\t});\n\t}\n\treturn pdfjsPromise;\n}\n\nasync function renderPageToCanvas(\n\tpage: import(\"pdfjs-dist\").PDFPageProxy,\n\tscale: number,\n): Promise<{ canvas: HTMLCanvasElement; width: number; height: number }> {\n\tconst raw = page.getViewport({ scale: 1 });\n\tconst adjustedScale = Math.round(raw.width * scale) / raw.width;\n\tconst viewport = page.getViewport({ scale: adjustedScale });\n\tconst w = Math.round(viewport.width);\n\tconst h = Math.round(viewport.height);\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = w;\n\tcanvas.height = h;\n\tconst ctx = canvas.getContext(\"2d\");\n\tif (!ctx) throw new Error(\"Canvas 2D context unavailable\");\n\tctx.imageSmoothingEnabled = true;\n\tctx.imageSmoothingQuality = \"high\";\n\tawait page.render({ canvas, viewport }).promise;\n\treturn { canvas, width: w, height: h };\n}\n\nfunction canvasToBlob(\n\tcanvas: HTMLCanvasElement,\n\tmime: string,\n\tquality?: number,\n): Promise<Blob> {\n\treturn new Promise((resolve, reject) => {\n\t\tcanvas.toBlob(\n\t\t\t(blob) => {\n\t\t\t\tif (!blob) {\n\t\t\t\t\treject(new Error(\"Could not encode blob\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve(blob);\n\t\t\t},\n\t\t\tmime,\n\t\t\tquality,\n\t\t);\n\t});\n}\n\ntype PdfPageResult = StoredImageResult & { pageNumber: number };\n\n/**\n * Renders each page of a PDF to a bitmap blob, stores original + thumbnail in IndexedDB,\n * and returns the results for creating `VectorSceneItem` entries.\n *\n * Pages are rendered at 1.5× screen DPI by default for crisp zoom.\n */\nexport async function loadPdfToStore(\n\tfile: File,\n\tstore: IndexedDbImageStore,\n\toptions?: { scale?: number },\n): Promise<PdfPageResult[]> {\n\tconst scale = options?.scale ?? 1.5;\n\tconst pdfjs = await getPdfJs();\n\tconst arrayBuffer = await file.arrayBuffer();\n\tconst pdf = await pdfjs.getDocument({ data: arrayBuffer }).promise;\n\tconst results: PdfPageResult[] = [];\n\n\tfor (let i = 1; i <= pdf.numPages; i++) {\n\t\tconst page = await pdf.getPage(i);\n\t\tconst { canvas, width, height } = await renderPageToCanvas(page, scale);\n\t\tconst mime = \"image/png\";\n\t\tconst pageBlob = await canvasToBlob(canvas, mime);\n\t\tconst blobId = await store.storeOriginal(pageBlob);\n\n\t\tconst thumbScale = Math.min(1, 256 / Math.max(width, height));\n\t\tconst tw = Math.max(1, Math.round(width * thumbScale));\n\t\tconst th = Math.max(1, Math.round(height * thumbScale));\n\t\tconst thumbCanvas = document.createElement(\"canvas\");\n\t\tthumbCanvas.width = tw;\n\t\tthumbCanvas.height = th;\n\t\tconst tCtx = thumbCanvas.getContext(\"2d\");\n\t\tif (tCtx) {\n\t\t\ttCtx.imageSmoothingEnabled = true;\n\t\t\ttCtx.imageSmoothingQuality = \"high\";\n\t\t\ttCtx.drawImage(canvas, 0, 0, tw, th);\n\t\t}\n\t\tconst thumbBlob = await canvasToBlob(thumbCanvas, mime);\n\t\tconst thumbnailBlobId = await store.storeThumbnail(thumbBlob);\n\n\t\tresults.push({ blobId, thumbnailBlobId, width, height, pageNumber: i });\n\t}\n\n\treturn results;\n}\n","import type { Camera2D } from \"../camera/camera\";\n\nconst DRAWING_LIKE_TOOLS = new Set([\n\t\"draw\",\n\t\"marker\",\n\t\"annotate\",\n\t\"pen\",\n\t\"highlight\",\n\t\"rect\",\n\t\"ellipse\",\n\t\"line\",\n\t\"arrow\",\n\t\"text\",\n\t\"image\",\n]);\n\nexport type ApplePencilNavOptions = {\n\telement: HTMLElement;\n\tcamera: Camera2D;\n\t/** Current tool id from your app (e.g. `\"hand\"` vs `\"draw\"`). */\n\tgetCurrentToolId: () => string;\n\tonUpdate: () => void;\n\ttouchPanSensitivity?: number;\n};\n\n/**\n * After a **stylus** (`pointerType === \"pen\"`) has been used, finger touches on the canvas\n * pan/pinch the camera instead of passing through to drawing tools — similar to iPad behavior\n * in many design apps. No-op until the first pen contact.\n *\n * Compose with {@link attachViewportInput} by calling this **after** it so capture handlers run first,\n * or use only one of them depending on product needs.\n */\nexport function attachApplePencilNavigation(\n\toptions: ApplePencilNavOptions,\n): () => void {\n\tconst {\n\t\telement,\n\t\tcamera,\n\t\tgetCurrentToolId,\n\t\tonUpdate,\n\t\ttouchPanSensitivity = 1.25,\n\t} = options;\n\n\tlet penDetected = false;\n\tconst activePenPointerIds = new Set<number>();\n\tconst blockedTouchPointerIds = new Set<number>();\n\tconst pointers = new Map<number, { x: number; y: number }>();\n\tlet mode: \"idle\" | \"pan\" | \"pinch\" = \"idle\";\n\tlet pinchStartDist = 0;\n\tlet pinchStartZoom = 1;\n\tlet panLast: { x: number; y: number } | null = null;\n\n\tconst shouldIntercept = (e: PointerEvent): boolean => {\n\t\tif (e.pointerType !== \"touch\") return false;\n\t\tconst tool = getCurrentToolId();\n\t\tif (tool === \"hand\") return true;\n\t\treturn penDetected && DRAWING_LIKE_TOOLS.has(tool);\n\t};\n\n\tconst dist = (a: { x: number; y: number }, b: { x: number; y: number }) =>\n\t\tMath.hypot(b.x - a.x, b.y - a.y);\n\n\tconst mid = (a: { x: number; y: number }, b: { x: number; y: number }) => ({\n\t\tx: (a.x + b.x) / 2,\n\t\ty: (a.y + b.y) / 2,\n\t});\n\n\tconst onPointerDown = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") {\n\t\t\tpenDetected = true;\n\t\t\tactivePenPointerIds.add(e.pointerId);\n\t\t\tpointers.clear();\n\t\t\tmode = \"idle\";\n\t\t\tpanLast = null;\n\t\t\treturn;\n\t\t}\n\t\tif (e.pointerType === \"touch\" && activePenPointerIds.size > 0) {\n\t\t\tblockedTouchPointerIds.add(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\t\tif (!shouldIntercept(e)) return;\n\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\t\tif (pointers.size === 1) {\n\t\t\tmode = \"pan\";\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t} else if (pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tmode = \"pinch\";\n\t\t\tpinchStartDist = dist(a, b);\n\t\t\tpinchStartZoom = camera.zoom;\n\t\t\tpanLast = mid(a, b);\n\t\t}\n\t\te.preventDefault();\n\t\te.stopImmediatePropagation();\n\t};\n\n\tconst onPointerMove = (e: PointerEvent) => {\n\t\tif (blockedTouchPointerIds.has(e.pointerId)) {\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"idle\" || !pointers.has(e.pointerId)) return;\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\n\t\tif (mode === \"pan\" && pointers.size === 1 && panLast) {\n\t\t\tconst dx = e.clientX - panLast.x;\n\t\t\tconst dy = e.clientY - panLast.y;\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\tcamera.x += dx * touchPanSensitivity;\n\t\t\tcamera.y += dy * touchPanSensitivity;\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\n\t\tif (mode === \"pinch\" && pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tconst d = dist(a, b);\n\t\t\tconst m = mid(a, b);\n\t\t\tconst scale = d / Math.max(pinchStartDist, 1e-6);\n\t\t\tconst nextZoom = Math.min(\n\t\t\t\tcamera.maxZoom,\n\t\t\t\tMath.max(camera.minZoom, pinchStartZoom * scale),\n\t\t\t);\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tcamera.setZoom(nextZoom, {\n\t\t\t\tx: m.x - rect.left,\n\t\t\t\ty: m.y - rect.top,\n\t\t\t});\n\t\t\tif (panLast) {\n\t\t\t\tcamera.x += m.x - panLast.x;\n\t\t\t\tcamera.y += m.y - panLast.y;\n\t\t\t\tpanLast = m;\n\t\t\t}\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t};\n\n\tconst onPointerUp = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") {\n\t\t\tactivePenPointerIds.delete(e.pointerId);\n\t\t\treturn;\n\t\t}\n\t\tif (blockedTouchPointerIds.has(e.pointerId)) {\n\t\t\tblockedTouchPointerIds.delete(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\t\tif (!pointers.has(e.pointerId)) return;\n\t\tpointers.delete(e.pointerId);\n\t\tif (pointers.size === 0) {\n\t\t\tmode = \"idle\";\n\t\t\tpanLast = null;\n\t\t} else if (pointers.size === 1 && mode === \"pinch\") {\n\t\t\tmode = \"pan\";\n\t\t\tconst r = Array.from(pointers.values())[0];\n\t\t\tpanLast = r ?? null;\n\t\t}\n\t\te.preventDefault();\n\t\te.stopImmediatePropagation();\n\t};\n\n\telement.addEventListener(\"pointerdown\", onPointerDown, { capture: true });\n\telement.addEventListener(\"pointermove\", onPointerMove, { capture: true });\n\telement.addEventListener(\"pointerup\", onPointerUp, { capture: true });\n\telement.addEventListener(\"pointercancel\", onPointerUp, { capture: true });\n\n\treturn () => {\n\t\telement.removeEventListener(\"pointerdown\", onPointerDown, { capture: true });\n\t\telement.removeEventListener(\"pointermove\", onPointerMove, { capture: true });\n\t\telement.removeEventListener(\"pointerup\", onPointerUp, { capture: true });\n\t\telement.removeEventListener(\"pointercancel\", onPointerUp, { capture: true });\n\t};\n}\n","import type { Camera2D } from \"../camera/camera\";\n\nexport type ViewportInputOptions = {\n\telement: HTMLElement;\n\tcamera: Camera2D;\n\t/** Called after any camera mutation so the renderer can redraw. */\n\tonUpdate: () => void;\n\t/**\n\t * Element to attach the wheel listener to. Defaults to `element`.\n\t * Useful when an overlay with `pointer-events: auto` sits above `element` and\n\t * would otherwise intercept wheel events before they reach the scene container.\n\t */\n\twheelElement?: HTMLElement;\n\twheelPanSensitivity?: number;\n\t/** Multiplier applied to wheel delta for zoom (with Ctrl/Meta). */\n\twheelZoomSensitivity?: number;\n\ttouchPanSensitivity?: number;\n\t/**\n\t * When `true`, pointer events with `pointerType === \"touch\"` are ignored so another layer\n\t * (e.g. `attachApplePencilNavigation`) can handle them without double panning.\n\t */\n\ttouchHandledElsewhere?: boolean;\n\t/**\n\t * When `false`, one-finger / primary-button drag does **not** pan the camera (e.g. shape tools).\n\t * Wheel zoom and two-finger pinch still work.\n\t */\n\tallowPrimaryPointerPan?: () => boolean;\n};\n\ntype PointerRecord = { x: number; y: number };\n\nfunction distanceBetween(a: PointerRecord, b: PointerRecord): number {\n\tconst dx = b.x - a.x;\n\tconst dy = b.y - a.y;\n\treturn Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction midpoint(a: PointerRecord, b: PointerRecord): PointerRecord {\n\treturn { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n}\n\n/** Normalize wheel delta so zoom speed is similar across mice (lines) and trackpads (pixels). */\nfunction wheelDeltaYPixels(e: WheelEvent): number {\n\tswitch (e.deltaMode) {\n\t\tcase WheelEvent.DOM_DELTA_LINE:\n\t\t\treturn e.deltaY * 16;\n\t\tcase WheelEvent.DOM_DELTA_PAGE:\n\t\t\treturn e.deltaY * 400;\n\t\tdefault:\n\t\t\treturn e.deltaY;\n\t}\n}\n\n/**\n * Attaches wheel (pan / Ctrl+zoom), pointer drag pan, and two-finger pinch zoom.\n * Uses `touch-action: none` on `element` — set that in CSS on the same node.\n *\n * @returns A dispose function that removes all listeners.\n */\nexport function attachViewportInput(options: ViewportInputOptions): () => void {\n\tconst {\n\t\telement,\n\t\tcamera,\n\t\tonUpdate,\n\t\twheelElement,\n\t\twheelPanSensitivity = 0.5,\n\t\twheelZoomSensitivity = 0.0015,\n\t\ttouchPanSensitivity = 1.25,\n\t\ttouchHandledElsewhere = false,\n\t\tallowPrimaryPointerPan = () => true,\n\t} = options;\n\n\tconst wheelTarget = wheelElement ?? element;\n\n\tconst pointers = new Map<number, PointerRecord>();\n\tlet mode: \"idle\" | \"pan\" | \"pinch\" | \"mousePan\" = \"idle\";\n\tlet pinchStartDist = 0;\n\tlet pinchStartZoom = 1;\n\tlet panLast: PointerRecord | null = null;\n\tlet mousePanButton: number | null = null;\n\n\tconst onWheel = (e: WheelEvent) => {\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\te.preventDefault();\n\t\t\tconst dy = wheelDeltaYPixels(e);\n\t\t\t// Trackpad generates very small deltas (1-5px) vs mouse (100-200px).\n\t\t\t// Normalize so both feel responsive: amplify small deltas (trackpad).\n\t\t\tconst normDy = dy < 20 ? dy * 12 : dy;\n\t\t\tconst factor = Math.exp(-normDy * wheelZoomSensitivity);\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tcamera.setZoom(camera.zoom * factor, {\n\t\t\t\tx: e.clientX - rect.left,\n\t\t\t\ty: e.clientY - rect.top,\n\t\t\t});\n\t\t\tonUpdate();\n\t\t\treturn;\n\t\t}\n\t\te.preventDefault();\n\t\tcamera.x -= (e.deltaX * wheelPanSensitivity) / camera.zoom;\n\t\tcamera.y -= (e.deltaY * wheelPanSensitivity) / camera.zoom;\n\t\tonUpdate();\n\t};\n\n\tconst onPointerDown = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") return;\n\t\tif (touchHandledElsewhere && e.pointerType === \"touch\") {\n\t\t\treturn;\n\t\t}\n\t\tconst panOk = allowPrimaryPointerPan();\n\t\tif (e.pointerType === \"mouse\" && e.button === 0) {\n\t\t\tif (!panOk) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmousePanButton = 0;\n\t\t\tmode = \"mousePan\";\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\telement.setPointerCapture(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.pointerType === \"mouse\" && e.button === 1) {\n\t\t\tmousePanButton = 1;\n\t\t\tmode = \"mousePan\";\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\telement.setPointerCapture(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\n\t\tif (pointers.size === 1 && e.pointerType === \"touch\") {\n\t\t\tif (panOk) {\n\t\t\t\tmode = \"pan\";\n\t\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t} else if (pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tmode = \"pinch\";\n\t\t\tpinchStartDist = distanceBetween(a, b);\n\t\t\tpinchStartZoom = camera.zoom;\n\t\t\tpanLast = midpoint(a, b);\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\tconst onPointerMove = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") return;\n\t\tif (touchHandledElsewhere && e.pointerType === \"touch\") {\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"mousePan\" && panLast && mousePanButton !== null) {\n\t\t\tconst dx = e.clientX - panLast.x;\n\t\t\tconst dy = e.clientY - panLast.y;\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\tcamera.x += dx;\n\t\t\tcamera.y += dy;\n\t\t\tonUpdate();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pointers.has(e.pointerId)) return;\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\n\t\tif (mode === \"pan\" && pointers.size === 1 && panLast) {\n\t\t\tconst dx = e.clientX - panLast.x;\n\t\t\tconst dy = e.clientY - panLast.y;\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\tcamera.x += dx * touchPanSensitivity;\n\t\t\tcamera.y += dy * touchPanSensitivity;\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (mode === \"pinch\" && pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tconst dist = distanceBetween(a, b);\n\t\t\tconst mid = midpoint(a, b);\n\t\t\tconst scale = dist / Math.max(pinchStartDist, 1e-6);\n\t\t\tconst nextZoom = Math.min(\n\t\t\t\tcamera.maxZoom,\n\t\t\t\tMath.max(camera.minZoom, pinchStartZoom * scale),\n\t\t\t);\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tcamera.setZoom(nextZoom, {\n\t\t\t\tx: mid.x - rect.left,\n\t\t\t\ty: mid.y - rect.top,\n\t\t\t});\n\t\t\tif (panLast) {\n\t\t\t\tconst dx = mid.x - panLast.x;\n\t\t\t\tconst dy = mid.y - panLast.y;\n\t\t\t\tcamera.x += dx;\n\t\t\t\tcamera.y += dy;\n\t\t\t\tpanLast = mid;\n\t\t\t}\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\tconst onPointerUp = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") return;\n\t\tif (touchHandledElsewhere && e.pointerType === \"touch\") {\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"mousePan\") {\n\t\t\tif (e.pointerType === \"mouse\" && e.button === mousePanButton) {\n\t\t\t\tmode = \"idle\";\n\t\t\t\tpanLast = null;\n\t\t\t\tmousePanButton = null;\n\t\t\t\ttry {\n\t\t\t\t\telement.releasePointerCapture(e.pointerId);\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore */\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tpointers.delete(e.pointerId);\n\t\tif (pointers.size === 0) {\n\t\t\tmode = \"idle\";\n\t\t\tpanLast = null;\n\t\t} else if (pointers.size === 1 && mode === \"pinch\") {\n\t\t\tmode = \"pan\";\n\t\t\tconst remaining = Array.from(pointers.values())[0];\n\t\t\tpanLast = remaining ?? null;\n\t\t}\n\t};\n\n\tconst onPointerCancel = (e: PointerEvent) => {\n\t\tonPointerUp(e);\n\t};\n\n\twheelTarget.addEventListener(\"wheel\", onWheel, { passive: false });\n\telement.addEventListener(\"pointerdown\", onPointerDown);\n\telement.addEventListener(\"pointermove\", onPointerMove);\n\telement.addEventListener(\"pointerup\", onPointerUp);\n\telement.addEventListener(\"pointercancel\", onPointerCancel);\n\n\treturn () => {\n\t\twheelTarget.removeEventListener(\"wheel\", onWheel);\n\t\telement.removeEventListener(\"pointerdown\", onPointerDown);\n\t\telement.removeEventListener(\"pointermove\", onPointerMove);\n\t\telement.removeEventListener(\"pointerup\", onPointerUp);\n\t\telement.removeEventListener(\"pointercancel\", onPointerCancel);\n\t};\n}\n","import {\n\tgetItemRotationRad,\n\titemLocalToWorld,\n\tworldToItemLocal,\n} from \"../math/item-transform\";\nimport { normalizeRect } from \"../math/rect\";\nimport { lineEndpointsToLocal, rebuildItemSvg } from \"../scene/shape-builders\";\nimport type { ArrowEndpointBinding, VectorSceneItem } from \"../scene/types\";\nimport { rectFromCorners } from \"./resize-handles\";\n\n/** Default screen px — converted to world with `/ camera.zoom` when snapping. */\nexport const ARROW_BIND_SNAP_PX = 16;\n\nfunction closestPointOnSegment(\n\tpx: number,\n\tpy: number,\n\tax: number,\n\tay: number,\n\tbx: number,\n\tby: number,\n): { x: number; y: number } {\n\tconst abx = bx - ax;\n\tconst aby = by - ay;\n\tconst apx = px - ax;\n\tconst apy = py - ay;\n\tconst abLenSq = abx * abx + aby * aby;\n\tif (abLenSq < 1e-12) {\n\t\treturn { x: ax, y: ay };\n\t}\n\tlet t = (apx * abx + apy * aby) / abLenSq;\n\tt = Math.max(0, Math.min(1, t));\n\treturn { x: ax + t * abx, y: ay + t * aby };\n}\n\n/** Closest point on the boundary of axis-aligned rect [0,w]×[0,h] to (px,py). */\nfunction closestPointOnRectBoundaryLocal(\n\tpx: number,\n\tpy: number,\n\tw: number,\n\th: number,\n): { x: number; y: number } {\n\tconst edges: [number, number, number, number][] = [\n\t\t[0, 0, w, 0],\n\t\t[w, 0, w, h],\n\t\t[w, h, 0, h],\n\t\t[0, h, 0, 0],\n\t];\n\tlet best = { x: 0, y: 0, d: Infinity };\n\tfor (const [ax, ay, bx, by] of edges) {\n\t\tconst p = closestPointOnSegment(px, py, ax, ay, bx, by);\n\t\tconst d = Math.hypot(px - p.x, py - p.y);\n\t\tif (d < best.d) {\n\t\t\tbest = { x: p.x, y: p.y, d };\n\t\t}\n\t}\n\treturn { x: best.x, y: best.y };\n}\n\nfunction closestPointOnEllipseBoundaryLocal(\n\tpx: number,\n\tpy: number,\n\tw: number,\n\th: number,\n): { x: number; y: number } {\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst rx = w / 2;\n\tconst ry = h / 2;\n\tif (rx < 1e-9 || ry < 1e-9) {\n\t\treturn { x: cx, y: cy };\n\t}\n\tconst dx = px - cx;\n\tconst dy = py - cy;\n\tif (dx === 0 && dy === 0) {\n\t\treturn { x: cx + rx, y: cy };\n\t}\n\tconst t = Math.atan2(dy / ry, dx / rx);\n\treturn {\n\t\tx: cx + rx * Math.cos(t),\n\t\ty: cy + ry * Math.sin(t),\n\t};\n}\n\nexport function isArrowBindTarget(item: VectorSceneItem): boolean {\n\tif (item.locked) return false;\n\tconst k = item.toolKind;\n\tif (!k) return false;\n\treturn (\n\t\tk === \"rect\" ||\n\t\tk === \"ellipse\" ||\n\t\tk === \"text\" ||\n\t\tk === \"image\" ||\n\t\tk === \"custom\"\n\t);\n}\n\nfunction closestPointOnShapeBoundaryLocal(\n\titem: VectorSceneItem,\n\tlx: number,\n\tly: number,\n\tw: number,\n\th: number,\n): { x: number; y: number } {\n\tif (item.toolKind === \"ellipse\") {\n\t\treturn closestPointOnEllipseBoundaryLocal(lx, ly, w, h);\n\t}\n\treturn closestPointOnRectBoundaryLocal(lx, ly, w, h);\n}\n\nfunction anchorNormalizedToWorld(\n\ttarget: VectorSceneItem,\n\tanchor: { x: number; y: number },\n): { x: number; y: number } {\n\tconst b = normalizeRect(target.bounds);\n\tconst w = b.width;\n\tconst h = b.height;\n\tconst lx = anchor.x * w;\n\tconst ly = anchor.y * h;\n\tconst rot = getItemRotationRad(target);\n\treturn itemLocalToWorld(lx, ly, target.x, target.y, w, h, rot);\n}\n\n/**\n * If `worldX/worldY` is within `maxDistWorld` of a bindable shape’s boundary,\n * returns the snapped point on that boundary plus binding metadata.\n */\nexport function snapArrowEndpointToShape(\n\tworldX: number,\n\tworldY: number,\n\titems: readonly VectorSceneItem[],\n\texcludeIds: ReadonlySet<string>,\n\tmaxDistWorld: number,\n): { world: { x: number; y: number }; binding: ArrowEndpointBinding } | null {\n\tlet best: {\n\t\tworld: { x: number; y: number };\n\t\tbinding: ArrowEndpointBinding;\n\t\td: number;\n\t} | null = null;\n\n\tfor (const item of items) {\n\t\tif (excludeIds.has(item.id)) continue;\n\t\tif (!isArrowBindTarget(item)) continue;\n\n\t\tconst b = normalizeRect(item.bounds);\n\t\tconst w = b.width;\n\t\tconst h = b.height;\n\t\tconst rot = getItemRotationRad(item);\n\t\tconst pl = worldToItemLocal(worldX, worldY, item.x, item.y, w, h, rot);\n\n\t\tconst localClosest = closestPointOnShapeBoundaryLocal(item, pl.x, pl.y, w, h);\n\t\tconst worldClosest = itemLocalToWorld(\n\t\t\tlocalClosest.x,\n\t\t\tlocalClosest.y,\n\t\t\titem.x,\n\t\t\titem.y,\n\t\t\tw,\n\t\t\th,\n\t\t\trot,\n\t\t);\n\t\tconst d = Math.hypot(worldX - worldClosest.x, worldY - worldClosest.y);\n\t\tif (d > maxDistWorld) continue;\n\t\tif (!best || d < best.d) {\n\t\t\tbest = {\n\t\t\t\td,\n\t\t\t\tworld: worldClosest,\n\t\t\t\tbinding: {\n\t\t\t\t\ttargetId: item.id,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\tx: localClosest.x / Math.max(1e-9, w),\n\t\t\t\t\t\ty: localClosest.y / Math.max(1e-9, h),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\treturn best ? { world: best.world, binding: best.binding } : null;\n}\n\nfunction resolveOneArrowItem(\n\titem: VectorSceneItem,\n\tmap: Map<string, VectorSceneItem>,\n): VectorSceneItem {\n\tconst bind = item.arrowBind;\n\tif (!bind || item.toolKind !== \"arrow\") return item;\n\tconst ln = item.line;\n\tif (!ln) return item;\n\n\tconst b0 = normalizeRect(item.bounds);\n\tconst rot = getItemRotationRad(item);\n\tconst w0 = b0.width;\n\tconst h0 = b0.height;\n\tconst startFallback = itemLocalToWorld(ln.x1, ln.y1, item.x, item.y, w0, h0, rot);\n\tconst endFallback = itemLocalToWorld(ln.x2, ln.y2, item.x, item.y, w0, h0, rot);\n\n\tconst startW = bind.start\n\t\t? (() => {\n\t\t\t\tconst t = map.get(bind.start.targetId);\n\t\t\t\treturn t ? anchorNormalizedToWorld(t, bind.start.anchor) : startFallback;\n\t\t\t})()\n\t\t: startFallback;\n\tconst endW = bind.end\n\t\t? (() => {\n\t\t\t\tconst t = map.get(bind.end.targetId);\n\t\t\t\treturn t ? anchorNormalizedToWorld(t, bind.end.anchor) : endFallback;\n\t\t\t})()\n\t\t: endFallback;\n\n\tconst raw = rectFromCorners(startW, endW);\n\tconst br = normalizeRect(raw);\n\tconst newLine = lineEndpointsToLocal(br, startW, endW);\n\tconst next: VectorSceneItem = {\n\t\t...item,\n\t\tx: br.x,\n\t\ty: br.y,\n\t\tbounds: br,\n\t\tline: newLine,\n\t\trotation: 0,\n\t};\n\treturn rebuildItemSvg(next);\n}\n\n/**\n * Recomputes every arrow item that has {@link VectorSceneItem.arrowBind} so endpoints\n * follow bound shapes (move/resize).\n */\nexport function resolveArrowBindingsInScene(\n\titems: readonly VectorSceneItem[],\n): readonly VectorSceneItem[] {\n\tlet hasBoundArrow = false;\n\tfor (const item of items) {\n\t\tif (item.toolKind === \"arrow\" && item.arrowBind) {\n\t\t\thasBoundArrow = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!hasBoundArrow) {\n\t\treturn items;\n\t}\n\n\tconst map = new Map(items.map((i) => [i.id, i]));\n\treturn items.map((item) => {\n\t\tif (item.toolKind !== \"arrow\" || !item.arrowBind) return item;\n\t\treturn resolveOneArrowItem(item, map);\n\t});\n}\n\n/**\n * Converts a bound arrow to a plain arrow (drops bindings) using the current resolved\n * geometry so move/resize gestures don’t fight binding resolution.\n */\nexport function bakeArrowItemToAbsolute(\n\titem: VectorSceneItem,\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem {\n\tif (item.toolKind !== \"arrow\" || !item.arrowBind) return item;\n\tconst map = new Map(items.map((i) => [i.id, i]));\n\tconst resolved = resolveOneArrowItem(item, map);\n\tconst { arrowBind: _a, ...rest } = resolved;\n\treturn { ...rest };\n}\n","import { itemLocalToWorld, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\n\nexport type ResizeHandleId = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\n\nconst HANDLE_IDS: ResizeHandleId[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\n\nexport function getHandleWorldPosition(\n\tbounds: Rect,\n\tid: ResizeHandleId,\n): { x: number; y: number } {\n\tconst r = normalizeRect(bounds);\n\tconst cx = r.x + r.width / 2;\n\tconst cy = r.y + r.height / 2;\n\tswitch (id) {\n\t\tcase \"nw\":\n\t\t\treturn { x: r.x, y: r.y };\n\t\tcase \"n\":\n\t\t\treturn { x: cx, y: r.y };\n\t\tcase \"ne\":\n\t\t\treturn { x: r.x + r.width, y: r.y };\n\t\tcase \"e\":\n\t\t\treturn { x: r.x + r.width, y: cy };\n\t\tcase \"se\":\n\t\t\treturn { x: r.x + r.width, y: r.y + r.height };\n\t\tcase \"s\":\n\t\t\treturn { x: cx, y: r.y + r.height };\n\t\tcase \"sw\":\n\t\t\treturn { x: r.x, y: r.y + r.height };\n\t\tcase \"w\":\n\t\t\treturn { x: r.x, y: cy };\n\t}\n}\n\n/**\n * Hit-tests resize handles in **local** item space (handles rotation).\n */\nexport function hitTestResizeHandle(\n\tbounds: Rect,\n\tworldX: number,\n\tworldY: number,\n\tradiusWorld: number,\n\trotationRad: number = 0,\n): ResizeHandleId | null {\n\tconst r = normalizeRect(bounds);\n\tconst pl = worldToItemLocal(\n\t\tworldX,\n\t\tworldY,\n\t\tr.x,\n\t\tr.y,\n\t\tr.width,\n\t\tr.height,\n\t\trotationRad,\n\t);\n\tconst localBounds = { x: 0, y: 0, width: r.width, height: r.height };\n\tlet best: ResizeHandleId | null = null;\n\tlet bestD = radiusWorld;\n\tfor (const id of HANDLE_IDS) {\n\t\tconst p = getHandleWorldPosition(localBounds, id);\n\t\tconst d = Math.hypot(pl.x - p.x, pl.y - p.y);\n\t\tif (d <= bestD) {\n\t\t\tbestD = d;\n\t\t\tbest = id;\n\t\t}\n\t}\n\treturn best;\n}\n\n/** World position of a resize handle when the item is rotated around its center. */\nexport function getHandleWorldPositionRotated(\n\tbounds: Rect,\n\thandle: ResizeHandleId,\n\trotationRad: number,\n): { x: number; y: number } {\n\tconst r = normalizeRect(bounds);\n\tconst p = getHandleWorldPosition(\n\t\t{ x: 0, y: 0, width: r.width, height: r.height },\n\t\thandle,\n\t);\n\treturn itemLocalToWorld(p.x, p.y, r.x, r.y, r.width, r.height, rotationRad);\n}\n\n/** World position of the rotation handle (above the top edge of the bounds). */\nexport function getRotationHandleWorldPosition(\n\tbounds: Rect,\n\trotationRad: number,\n\thandleOffsetWorld: number,\n): { x: number; y: number } {\n\tconst r = normalizeRect(bounds);\n\treturn itemLocalToWorld(\n\t\tr.width / 2,\n\t\t-handleOffsetWorld,\n\t\tr.x,\n\t\tr.y,\n\t\tr.width,\n\t\tr.height,\n\t\trotationRad,\n\t);\n}\n\nexport function hitTestRotateHandle(\n\tbounds: Rect,\n\trotationRad: number,\n\tworldX: number,\n\tworldY: number,\n\tradiusWorld: number,\n\thandleOffsetWorld: number,\n): boolean {\n\tconst p = getRotationHandleWorldPosition(bounds, rotationRad, handleOffsetWorld);\n\treturn Math.hypot(worldX - p.x, worldY - p.y) <= radiusWorld;\n}\n\nexport function rectFromCorners(\n\ta: { x: number; y: number },\n\tb: { x: number; y: number },\n): Rect {\n\tconst minX = Math.min(a.x, b.x);\n\tconst maxX = Math.max(a.x, b.x);\n\tconst minY = Math.min(a.y, b.y);\n\tconst maxY = Math.max(a.y, b.y);\n\treturn { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\nfunction clampMinSize(r: Rect, min: number): Rect {\n\tconst n = normalizeRect(r);\n\treturn {\n\t\tx: n.x,\n\t\ty: n.y,\n\t\twidth: Math.max(min, n.width),\n\t\theight: Math.max(min, n.height),\n\t};\n}\n\n/**\n * Computes new axis-aligned bounds when dragging a resize handle to `currentWorld`.\n */\nexport function computeResizeBounds(\n\tbounds: Rect,\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n): Rect {\n\tconst r = normalizeRect(bounds);\n\tconst x0 = r.x;\n\tconst y0 = r.y;\n\tconst x1 = r.x + r.width;\n\tconst y1 = r.y + r.height;\n\tconst minSize = 8;\n\n\tswitch (handle) {\n\t\tcase \"nw\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x1, y: y1 }), minSize);\n\t\tcase \"ne\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x0, y: y1 }), minSize);\n\t\tcase \"se\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x0, y: y0 }), minSize);\n\t\tcase \"sw\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x1, y: y0 }), minSize);\n\t\tcase \"n\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: x0, y: currentWorld.y }, { x: x1, y: y1 }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tcase \"s\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: x0, y: y0 }, { x: x1, y: currentWorld.y }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tcase \"e\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: x0, y: y0 }, { x: currentWorld.x, y: y1 }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tcase \"w\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: currentWorld.x, y: y0 }, { x: x1, y: y1 }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tdefault:\n\t\t\treturn r;\n\t}\n}\n\n/**\n * Resize bounds with fixed width/height ratio (`aspect` = width ÷ height), similar to tldraw\n * image resize: corners follow the cursor by adjusting the other dimension to preserve aspect;\n * edges resize from the opposite edge with the box centered on the orthogonal axis.\n */\nexport function computeResizeBoundsFixedAspect(\n\tbounds: Rect,\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n\taspect: number,\n): Rect {\n\tconst r = normalizeRect(bounds);\n\tconst x0 = r.x;\n\tconst y0 = r.y;\n\tconst x1 = r.x + r.width;\n\tconst y1 = r.y + r.height;\n\tconst w = r.width;\n\tconst h = r.height;\n\tconst minSize = 8;\n\tconst a = Math.max(1e-9, aspect);\n\n\tfunction cornerAspectRect(\n\t\tanchor: { x: number; y: number },\n\t\tcursor: { x: number; y: number },\n\t): Rect {\n\t\tconst dx = cursor.x - anchor.x;\n\t\tconst dy = cursor.y - anchor.y;\n\t\tconst aw = Math.abs(dx);\n\t\tconst ah = Math.abs(dy);\n\t\tlet W: number;\n\t\tlet H: number;\n\t\tif (aw < 1e-12 && ah < 1e-12) {\n\t\t\tW = minSize;\n\t\t\tH = minSize / a;\n\t\t} else if (ah < 1e-12) {\n\t\t\tW = Math.max(minSize, aw);\n\t\t\tH = W / a;\n\t\t} else if (aw < 1e-12) {\n\t\t\tH = Math.max(minSize, ah);\n\t\t\tW = H * a;\n\t\t} else if (aw / ah > a) {\n\t\t\tW = aw;\n\t\t\tH = aw / a;\n\t\t} else {\n\t\t\tH = ah;\n\t\t\tW = ah * a;\n\t\t}\n\t\tif (W < minSize || H < minSize) {\n\t\t\tconst scale = Math.max(minSize / W, minSize / H);\n\t\t\tW *= scale;\n\t\t\tH *= scale;\n\t\t}\n\t\tconst sx = Math.sign(dx) || 1;\n\t\tconst sy = Math.sign(dy) || 1;\n\t\treturn rectFromCorners(anchor, {\n\t\t\tx: anchor.x + sx * W,\n\t\t\ty: anchor.y + sy * H,\n\t\t});\n\t}\n\n\tswitch (handle) {\n\t\tcase \"se\":\n\t\t\treturn cornerAspectRect({ x: x0, y: y0 }, currentWorld);\n\t\tcase \"nw\":\n\t\t\treturn cornerAspectRect({ x: x1, y: y1 }, currentWorld);\n\t\tcase \"ne\":\n\t\t\treturn cornerAspectRect({ x: x0, y: y1 }, currentWorld);\n\t\tcase \"sw\":\n\t\t\treturn cornerAspectRect({ x: x1, y: y0 }, currentWorld);\n\t\tcase \"e\": {\n\t\t\tconst rawW = currentWorld.x - x0;\n\t\t\tconst aw = Math.max(minSize, Math.abs(rawW));\n\t\t\tconst H = aw / a;\n\t\t\tconst newY = y0 + h / 2 - H / 2;\n\t\t\tconst sign = Math.sign(rawW) || 1;\n\t\t\treturn normalizeRect({ x: x0, y: newY, width: sign * aw, height: H });\n\t\t}\n\t\tcase \"w\": {\n\t\t\tconst rawW = x1 - currentWorld.x;\n\t\t\tconst aw = Math.max(minSize, Math.abs(rawW));\n\t\t\tconst H = aw / a;\n\t\t\tconst newY = y0 + h / 2 - H / 2;\n\t\t\tconst sign = Math.sign(rawW) || 1;\n\t\t\treturn normalizeRect({\n\t\t\t\tx: x1 - sign * aw,\n\t\t\t\ty: newY,\n\t\t\t\twidth: sign * aw,\n\t\t\t\theight: H,\n\t\t\t});\n\t\t}\n\t\tcase \"n\": {\n\t\t\tconst rawH = y1 - currentWorld.y;\n\t\t\tconst ah = Math.max(minSize, Math.abs(rawH));\n\t\t\tconst W = ah * a;\n\t\t\tconst newX = x0 + w / 2 - W / 2;\n\t\t\tconst sign = Math.sign(rawH) || 1;\n\t\t\treturn normalizeRect({\n\t\t\t\tx: newX,\n\t\t\t\ty: y1 - sign * ah,\n\t\t\t\twidth: W,\n\t\t\t\theight: sign * ah,\n\t\t\t});\n\t\t}\n\t\tcase \"s\": {\n\t\t\tconst rawH = currentWorld.y - y0;\n\t\t\tconst ah = Math.max(minSize, Math.abs(rawH));\n\t\t\tconst W = ah * a;\n\t\t\tconst newX = x0 + w / 2 - W / 2;\n\t\t\tconst sign = Math.sign(rawH) || 1;\n\t\t\treturn normalizeRect({ x: newX, y: y0, width: W, height: sign * ah });\n\t\t}\n\t\tdefault:\n\t\t\treturn r;\n\t}\n}\n","import {\n\tgetItemRotationRad,\n\titemLocalToWorld,\n\tworldToItemLocal,\n} from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\n/**\n * Returns whether a world point lies inside an axis-aligned rectangle.\n */\nexport function pointInWorldRect(px: number, py: number, rect: Rect): boolean {\n\tconst r = normalizeRect(rect);\n\treturn px >= r.x && px <= r.x + r.width && py >= r.y && py <= r.y + r.height;\n}\n\nfunction pointInLocalRect(lx: number, ly: number, w: number, h: number): boolean {\n\treturn lx >= 0 && lx <= w && ly >= 0 && ly <= h;\n}\n\nfunction pointInLocalEllipse(lx: number, ly: number, w: number, h: number): boolean {\n\tconst rx = w / 2;\n\tconst ry = h / 2;\n\tif (rx < 1e-9 || ry < 1e-9) {\n\t\treturn false;\n\t}\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst nx = (lx - cx) / rx;\n\tconst ny = (ly - cy) / ry;\n\treturn nx * nx + ny * ny <= 1;\n}\n\n/**\n * Distance from point `p` to segment `a`–`b` in 2D.\n */\nexport function distancePointToSegment(\n\tpx: number,\n\tpy: number,\n\tax: number,\n\tay: number,\n\tbx: number,\n\tby: number,\n): number {\n\tconst abx = bx - ax;\n\tconst aby = by - ay;\n\tconst apx = px - ax;\n\tconst apy = py - ay;\n\tconst abLenSq = abx * abx + aby * aby;\n\tif (abLenSq < 1e-12) {\n\t\treturn Math.hypot(px - ax, py - ay);\n\t}\n\tlet t = (apx * abx + apy * aby) / abLenSq;\n\tt = Math.max(0, Math.min(1, t));\n\tconst qx = ax + t * abx;\n\tconst qy = ay + t * aby;\n\treturn Math.hypot(px - qx, py - qy);\n}\n\nexport type HitTestWorldPointOptions = {\n\t/** Max distance to a line segment in **world** units (e.g. ~10 / camera.zoom for ~10px on screen). */\n\tlineHitWorld?: number;\n\t/** When true, locked items are ignored as interaction targets. */\n\tignoreLocked?: boolean;\n};\n\nfunction hitTestFilledShape(\n\titem: VectorSceneItem,\n\tworldX: number,\n\tworldY: number,\n): boolean {\n\tconst b = normalizeRect(item.bounds);\n\tconst w = b.width;\n\tconst h = b.height;\n\tconst rot = getItemRotationRad(item);\n\tconst pl = worldToItemLocal(worldX, worldY, item.x, item.y, w, h, rot);\n\n\tif (item.toolKind === \"ellipse\") {\n\t\treturn pointInLocalEllipse(pl.x, pl.y, w, h);\n\t}\n\treturn pointInLocalRect(pl.x, pl.y, w, h);\n}\n\n/**\n * Whether `worldX/worldY` hits this item’s visible geometry (stroke/area).\n */\nexport function itemHitTestWorldPoint(\n\titem: VectorSceneItem,\n\tworldX: number,\n\tworldY: number,\n\toptions?: HitTestWorldPointOptions,\n): boolean {\n\tconst lineHit = options?.lineHitWorld ?? 8;\n\tconst lineHitSq = lineHit * lineHit;\n\n\tconst b = normalizeRect(item.bounds);\n\tconst w = b.width;\n\tconst h = b.height;\n\tconst rot = getItemRotationRad(item);\n\n\tif (item.toolKind === \"line\" || item.toolKind === \"arrow\") {\n\t\tconst ln = item.line;\n\t\tif (ln) {\n\t\t\tconst a = itemLocalToWorld(ln.x1, ln.y1, item.x, item.y, w, h, rot);\n\t\t\tconst p2 = itemLocalToWorld(ln.x2, ln.y2, item.x, item.y, w, h, rot);\n\t\t\tconst d = distancePointToSegment(worldX, worldY, a.x, a.y, p2.x, p2.y);\n\t\t\tif (d * d <= lineHitSq) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (hitTestFilledShape(item, worldX, worldY)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tif (\n\t\titem.toolKind === \"draw\" ||\n\t\titem.toolKind === \"pencil\" ||\n\t\titem.toolKind === \"brush\" ||\n\t\titem.toolKind === \"marker\"\n\t) {\n\t\tconst pts = item.pathPointsLocal;\n\t\tconst halfW = Math.max((item.strokeWidth ?? 2) / 2, lineHit * 0.5);\n\t\tconst tol = Math.max(lineHit, halfW);\n\t\tconst tolSq = tol * tol;\n\t\tif (pts && pts.length >= 2) {\n\t\t\tfor (let j = 0; j < pts.length - 1; j++) {\n\t\t\t\tconst a = pts[j];\n\t\t\t\tconst p2 = pts[j + 1];\n\t\t\t\tif (!a || !p2) continue;\n\t\t\t\tconst aw = itemLocalToWorld(a.x, a.y, item.x, item.y, w, h, rot);\n\t\t\t\tconst bw = itemLocalToWorld(p2.x, p2.y, item.x, item.y, w, h, rot);\n\t\t\t\tconst d = distancePointToSegment(worldX, worldY, aw.x, aw.y, bw.x, bw.y);\n\t\t\t\tif (d * d <= tolSq) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pts?.length === 1) {\n\t\t\tconst p = pts[0];\n\t\t\tif (p) {\n\t\t\t\tconst cw = itemLocalToWorld(p.x, p.y, item.x, item.y, w, h, rot);\n\t\t\t\tconst dsq = (worldX - cw.x) ** 2 + (worldY - cw.y) ** 2;\n\t\t\t\tif (dsq <= tolSq) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn hitTestFilledShape(item, worldX, worldY);\n\t}\n\treturn hitTestFilledShape(item, worldX, worldY);\n}\n\n/**\n * Hit-tests a scene item in world coordinates (top-most = last in array wins if overlapping).\n */\nexport function hitTestWorldPoint(\n\titems: readonly VectorSceneItem[],\n\tworldX: number,\n\tworldY: number,\n\toptions?: HitTestWorldPointOptions,\n): VectorSceneItem | null {\n\tfor (let i = items.length - 1; i >= 0; i--) {\n\t\tconst item = items[i];\n\t\tif (item === undefined) continue;\n\t\tif (options?.ignoreLocked && item.locked) continue;\n\t\tif (itemHitTestWorldPoint(item, worldX, worldY, options)) {\n\t\t\treturn item;\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Eraser: IDs of every **unlocked** item hit at this point.\n * Locked items are ignored so protected background layers do not block erasing editable shapes above them.\n */\nexport function collectEraserTargetsAtWorldPoint(\n\titems: readonly VectorSceneItem[],\n\tworldX: number,\n\tworldY: number,\n\toptions?: HitTestWorldPointOptions,\n): string[] {\n\tconst topHit = hitTestWorldPoint(items, worldX, worldY, {\n\t\t...options,\n\t\tignoreLocked: true,\n\t});\n\tif (!topHit) return [];\n\n\tconst ids: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst item = items[i];\n\t\tif (item === undefined || item.locked) continue;\n\t\tif (!itemHitTestWorldPoint(item, worldX, worldY, options)) continue;\n\t\tif (!seen.has(item.id)) {\n\t\t\tseen.add(item.id);\n\t\t\tids.push(item.id);\n\t\t}\n\t}\n\treturn ids;\n}\n","import { getItemRotationRad, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tbuildArrowSvg,\n\tbuildEllipseSvg,\n\tbuildLineSvg,\n\tbuildRasterImageChildrenSvg,\n\tbuildRectSvg,\n\trebuildItemSvg,\n\tresolveStrokeStyle,\n} from \"../scene/shape-builders\";\nimport { DEFAULT_TEXT_FONT_SIZE } from \"../scene/text-svg\";\nimport type { LineEndpointsLocal, VectorSceneItem } from \"../scene/types\";\nimport {\n\tcomputeResizeBounds,\n\tcomputeResizeBoundsFixedAspect,\n\ttype ResizeHandleId,\n} from \"./resize-handles\";\n\nfunction computeNewBoundsForResize(\n\titem: VectorSceneItem,\n\tsb: Rect,\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n): Rect {\n\tconst rot = getItemRotationRad(item);\n\tif (Math.abs(rot) < 1e-12) {\n\t\tif (item.toolKind === \"image\") {\n\t\t\tlet aspect: number | undefined;\n\t\t\tif (item.imageIntrinsicSize) {\n\t\t\t\tconst iw = Math.max(1e-9, item.imageIntrinsicSize.width);\n\t\t\t\tconst ih = Math.max(1e-9, item.imageIntrinsicSize.height);\n\t\t\t\taspect = iw / ih;\n\t\t\t} else if (item.imageVectorLocalSize) {\n\t\t\t\tconst lw = Math.max(1e-9, item.imageVectorLocalSize.width);\n\t\t\t\tconst lh = Math.max(1e-9, item.imageVectorLocalSize.height);\n\t\t\t\taspect = lw / lh;\n\t\t\t}\n\t\t\treturn aspect !== undefined\n\t\t\t\t? computeResizeBoundsFixedAspect(sb, handle, currentWorld, aspect)\n\t\t\t\t: computeResizeBounds(sb, handle, currentWorld);\n\t\t}\n\t\treturn computeResizeBounds(sb, handle, currentWorld);\n\t}\n\n\tconst local = worldToItemLocal(\n\t\tcurrentWorld.x,\n\t\tcurrentWorld.y,\n\t\tsb.x,\n\t\tsb.y,\n\t\tsb.width,\n\t\tsb.height,\n\t\trot,\n\t);\n\tconst localBounds = { x: 0, y: 0, width: sb.width, height: sb.height };\n\tlet nbLocal: Rect;\n\tif (item.toolKind === \"image\") {\n\t\tlet aspect: number | undefined;\n\t\tif (item.imageIntrinsicSize) {\n\t\t\tconst iw = Math.max(1e-9, item.imageIntrinsicSize.width);\n\t\t\tconst ih = Math.max(1e-9, item.imageIntrinsicSize.height);\n\t\t\taspect = iw / ih;\n\t\t} else if (item.imageVectorLocalSize) {\n\t\t\tconst lw = Math.max(1e-9, item.imageVectorLocalSize.width);\n\t\t\tconst lh = Math.max(1e-9, item.imageVectorLocalSize.height);\n\t\t\taspect = lw / lh;\n\t\t}\n\t\tnbLocal =\n\t\t\taspect !== undefined\n\t\t\t\t? computeResizeBoundsFixedAspect(localBounds, handle, local, aspect)\n\t\t\t\t: computeResizeBounds(localBounds, handle, local);\n\t} else {\n\t\tnbLocal = computeResizeBounds(localBounds, handle, local);\n\t}\n\treturn {\n\t\tx: sb.x + nbLocal.x,\n\t\ty: sb.y + nbLocal.y,\n\t\twidth: nbLocal.width,\n\t\theight: nbLocal.height,\n\t};\n}\n\n/** Unwraps pointer angle delta so rotation stays continuous across ±π. */\nexport function applyRotationFromPointer(\n\titem: VectorSceneItem,\n\tstartRotation: number,\n\tstartPointerAngleRad: number,\n\tpointerAngleRad: number,\n): VectorSceneItem {\n\tlet delta = pointerAngleRad - startPointerAngleRad;\n\twhile (delta > Math.PI) {\n\t\tdelta -= 2 * Math.PI;\n\t}\n\twhile (delta < -Math.PI) {\n\t\tdelta += 2 * Math.PI;\n\t}\n\treturn { ...item, rotation: startRotation + delta };\n}\n\nexport function moveItemByDelta(\n\titem: VectorSceneItem,\n\tdx: number,\n\tdy: number,\n): VectorSceneItem {\n\treturn {\n\t\t...item,\n\t\tx: item.x + dx,\n\t\ty: item.y + dy,\n\t\tbounds: {\n\t\t\t...item.bounds,\n\t\t\tx: item.bounds.x + dx,\n\t\t\ty: item.bounds.y + dy,\n\t\t},\n\t};\n}\n\n/**\n * Resizes an item by dragging a corner/edge handle. Line/arrow endpoints scale\n * proportionally within the resize start bounds.\n */\nexport function resizeItemByHandle(\n\titem: VectorSceneItem,\n\tstart: { bounds: Rect; line?: LineEndpointsLocal },\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n): VectorSceneItem {\n\tconst sb = normalizeRect(start.bounds);\n\tconst newBoundsRaw = computeNewBoundsForResize(item, sb, handle, currentWorld);\n\tconst nb = normalizeRect(newBoundsRaw);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst style = resolveStrokeStyle(item);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tchildrenSvg: buildRectSvg(nb.width, nb.height, style),\n\t\t};\n\t}\n\tif (k === \"ellipse\") {\n\t\tconst style = resolveStrokeStyle(item);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tchildrenSvg: buildEllipseSvg(nb.width, nb.height, style),\n\t\t};\n\t}\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst sfw = Math.max(sb.width, 1e-6);\n\t\tconst sfh = Math.max(sb.height, 1e-6);\n\t\tconst baseFs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\t\tconst areaRatio = (nb.width * nb.height) / (sfw * sfh);\n\t\tconst scale = Math.sqrt(Math.max(areaRatio, 1e-12));\n\t\tconst nextFs = Math.min(256, Math.max(6, baseFs * scale));\n\t\treturn rebuildItemSvg({\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\ttextFixedBounds: true,\n\t\t\ttextFontSize: nextFs,\n\t\t});\n\t}\n\tif (k === \"image\") {\n\t\tif (item.imageRasterHref && item.imageIntrinsicSize) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: nb.x,\n\t\t\t\ty: nb.y,\n\t\t\t\tbounds: nb,\n\t\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\t\titem.imageRasterHref,\n\t\t\t\t\titem.imageIntrinsicSize,\n\t\t\t\t\tnb,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tif (item.imageVectorInnerSvg && item.imageVectorLocalSize) {\n\t\t\tconst lw = Math.max(1e-6, item.imageVectorLocalSize.width);\n\t\t\tconst lh = Math.max(1e-6, item.imageVectorLocalSize.height);\n\t\t\tconst arB = nb.width / Math.max(1e-9, nb.height);\n\t\t\tconst arI = lw / lh;\n\t\t\tlet childrenSvg: string;\n\t\t\tif (Math.abs(arB - arI) < 1e-3) {\n\t\t\t\tconst s = nb.width / lw;\n\t\t\t\tchildrenSvg = `<g transform=\"scale(${s})\">${item.imageVectorInnerSvg}</g>`;\n\t\t\t} else {\n\t\t\t\tconst s = Math.min(nb.width / lw, nb.height / lh);\n\t\t\t\tconst tx = (nb.width - lw * s) / 2;\n\t\t\t\tconst ty = (nb.height - lh * s) / 2;\n\t\t\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${item.imageVectorInnerSvg}</g>`;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: nb.x,\n\t\t\t\ty: nb.y,\n\t\t\t\tbounds: nb,\n\t\t\t\tchildrenSvg,\n\t\t\t};\n\t\t}\n\t}\n\tif ((k === \"line\" || k === \"arrow\") && start.line) {\n\t\tconst sfw = Math.max(sb.width, 1e-6);\n\t\tconst sfh = Math.max(sb.height, 1e-6);\n\t\tconst f = start.line;\n\t\tconst u1 = f.x1 / sfw;\n\t\tconst v1 = f.y1 / sfh;\n\t\tconst u2 = f.x2 / sfw;\n\t\tconst v2 = f.y2 / sfh;\n\t\tconst newLine: LineEndpointsLocal = {\n\t\t\tx1: u1 * nb.width,\n\t\t\ty1: v1 * nb.height,\n\t\t\tx2: u2 * nb.width,\n\t\t\ty2: v2 * nb.height,\n\t\t};\n\t\tconst style = resolveStrokeStyle(item);\n\t\tconst childrenSvg =\n\t\t\tk === \"arrow\"\n\t\t\t\t? buildArrowSvg(item.id, newLine, style)\n\t\t\t\t: buildLineSvg(newLine, style);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tline: newLine,\n\t\t\tchildrenSvg,\n\t\t};\n\t}\n\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\tconst sfw = Math.max(sb.width, 1e-6);\n\t\tconst sfh = Math.max(sb.height, 1e-6);\n\t\tconst sx = nb.width / sfw;\n\t\tconst sy = nb.height / sfh;\n\t\tconst scaledPoints = item.pathPointsLocal.map((p) => ({\n\t\t\tx: p.x * sx,\n\t\t\ty: p.y * sy,\n\t\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t\t}));\n\t\treturn rebuildItemSvg({\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tpathPointsLocal: scaledPoints,\n\t\t});\n\t}\n\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\treturn rebuildItemSvg({\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t});\n\t}\n\n\treturn { ...item, x: nb.x, y: nb.y, bounds: nb };\n}\n","\"use client\";\n\nimport {\n\ttype ChangeEvent,\n\ttype CSSProperties,\n\ttype DragEvent,\n\tforwardRef,\n\ttype KeyboardEvent,\n\ttype MouseEvent,\n\ttype ReactNode,\n\ttype PointerEvent as ReactPointerEvent,\n\tuseCallback,\n\tuseEffect,\n\tuseId,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { Camera2D } from \"../camera/camera\";\nimport {\n\tcreateBlobUrlFromStore,\n\tIndexedDbImageStore,\n\tloadImageToStore,\n} from \"../image/indexed-db-image-store\";\nimport { loadPdfToStore } from \"../image/pdf-loader\";\nimport { attachApplePencilNavigation } from \"../input/apple-pencil-navigation\";\nimport { attachViewportInput } from \"../input/attach-viewport-input\";\nimport {\n\tARROW_BIND_SNAP_PX,\n\tbakeArrowItemToAbsolute,\n\tresolveArrowBindingsInScene,\n\tsnapArrowEndpointToShape,\n} from \"../interaction/arrow-bindings\";\nimport {\n\tcollectEraserTargetsAtWorldPoint,\n\thitTestWorldPoint,\n} from \"../interaction/hit-test\";\nimport {\n\tapplyRotationFromPointer,\n\tmoveItemByDelta,\n\tresizeItemByHandle,\n} from \"../interaction/mutations\";\nimport {\n\thitTestResizeHandle,\n\thitTestRotateHandle,\n\trectFromCorners,\n} from \"../interaction/resize-handles\";\nimport { itemPivotWorld, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tformatCameraTransform,\n\tSvgVectorRenderer,\n} from \"../renderer/svg-vector-renderer\";\nimport { cloneVectorSceneItemsWithNewIds } from \"../scene/clone-item\";\nimport { VectorScene } from \"../scene/scene\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\nimport {\n\tapplyStrokeToItem,\n\tapplyTextDraftWhileEditing,\n\tcreateEllipseItem,\n\tcreateFreehandStrokeItem,\n\tcreateLineItem,\n\tcreateRectangleItem,\n\tcreateShapeId,\n\tcreateTextItem,\n\tDEFAULT_STROKE_STYLE,\n\tlineEndpointsToLocal,\n\trebuildItemSvg,\n} from \"../scene/shape-builders\";\nimport type {\n\tArrowBindings,\n\tVectorPathPoint,\n\tVectorSceneItem,\n} from \"../scene/types\";\nimport { CanvuChromeContext, type CanvuChromeContextValue } from \"./chrome-context\";\nimport { InteractionOverlay, type PlacementPreview } from \"./InteractionOverlay\";\nimport { NavMenu } from \"./NavMenu\";\nimport {\n\ttype CanvasPlugin,\n\ttype CanvasPluginContribution,\n\ttype CanvasPluginItemsChangeMiddlewareContext,\n\ttype CanvasPluginRenderContext,\n\tCanvuPluginContext,\n} from \"./plugins\";\nimport { PresenceRemoteLayer } from \"./presence/PresenceRemoteLayer\";\nimport type {\n\tPresenceOverlayRenderContext,\n\tRemotePresencePeer,\n} from \"./presence/types\";\nimport { ShapeContextMenu } from \"./ShapeContextMenu\";\nimport { TextEditOverlay } from \"./TextEditOverlay\";\nimport { DEFAULT_VECTOR_TOOLS } from \"./tools/default-tools\";\nimport type { VectorToolDefinition } from \"./tools/types\";\nimport { VectorSelectionInspector } from \"./VectorSelectionInspector\";\nimport {\n\tcollectItemIdsInRect,\n\tcursorForVectorToolId,\n\ttype DragState,\n\tdefaultPlacementWorld,\n\tfitCameraToWorldRect,\n\tMIN_ARROW_DRAG_PX,\n\tMIN_MARQUEE_WORLD,\n\tMIN_PLACE_SIZE,\n\treplaceItem,\n\tsupportsResizeHandles,\n\tTAP_PX,\n\ttryPointerCaptureOnTarget,\n\tusePrefersReducedMotion,\n\tVIEWPORT_ZOOM_STEP,\n\tvisuallyHidden,\n} from \"./vector-viewport-support\";\n\nexport type WorldPointerDownDetail = {\n\tworldX: number;\n\tworldY: number;\n\ttoolId: string;\n\tpointerType: string;\n};\n\nfunction pointInSelectedItemBounds(\n\titem: VectorSceneItem,\n\tworldX: number,\n\tworldY: number,\n): boolean {\n\tconst bounds = normalizeRect(item.bounds);\n\tconst local = worldToItemLocal(\n\t\tworldX,\n\t\tworldY,\n\t\titem.x,\n\t\titem.y,\n\t\tbounds.width,\n\t\tbounds.height,\n\t\titem.rotation ?? 0,\n\t);\n\treturn (\n\t\tlocal.x >= 0 &&\n\t\tlocal.x <= bounds.width &&\n\t\tlocal.y >= 0 &&\n\t\tlocal.y <= bounds.height\n\t);\n}\n\nfunction pointerEventSamples(ev: PointerEvent): readonly PointerEvent[] {\n\tif (ev.pointerType !== \"pen\" || typeof ev.getCoalescedEvents !== \"function\") {\n\t\treturn [ev];\n\t}\n\tconst samples = ev.getCoalescedEvents();\n\treturn samples.length > 0 ? samples : [ev];\n}\n\nconst CANVU_PEN_ACTIVE_UI_BLOCK_CSS = `\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-canvas-toolbar\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-canvas-toolbar\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"canvu-plugin-layer\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"canvu-plugin-layer\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-selection-inspector\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-selection-inspector\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"zoom-minimap-panel\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"zoom-minimap-panel\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"text-edit-overlay\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"text-edit-overlay\"] *,\n[data-canvu-pen-active=\"true\"] .vector-toolbar-overflow-panel,\n[data-canvu-pen-active=\"true\"] .vector-toolbar-overflow-panel *,\nbody[data-canvu-pen-active=\"true\"] [data-slot=\"shape-context-menu\"],\nbody[data-canvu-pen-active=\"true\"] [data-slot=\"shape-context-menu\"] * {\n\tpointer-events: none !important;\n\tuser-select: none !important;\n\t-webkit-user-select: none !important;\n\t-webkit-touch-callout: none !important;\n}\n`;\n\nconst DEBUG_APPLE_PENCIL_POINTERS = true;\n\nfunction debugApplePencilPointer(\n\tphase: string,\n\tdetail: Record<string, unknown>,\n): void {\n\tif (!DEBUG_APPLE_PENCIL_POINTERS) return;\n\tconsole.debug(`[canvu][apple-pencil] ${phase}`, detail);\n}\n\nconst MARKER_TOOL_STYLE: StrokeStyle = {\n\tstroke: \"#fde047\",\n\tstrokeWidth: 16,\n\tstrokeOpacity: 0.5,\n};\n\ntype ReorderDirection = \"front\" | \"forward\" | \"backward\" | \"back\";\n\nfunction reorderItemsByIds(\n\titems: readonly VectorSceneItem[],\n\tids: readonly string[],\n\tdirection: ReorderDirection,\n): VectorSceneItem[] {\n\tif (ids.length === 0 || items.length <= 1) {\n\t\treturn [...items];\n\t}\n\tconst idSet = new Set(ids);\n\tif (direction === \"front\") {\n\t\tconst rest = items.filter((item) => !idSet.has(item.id));\n\t\tconst selected = items.filter((item) => idSet.has(item.id));\n\t\treturn [...rest, ...selected];\n\t}\n\tif (direction === \"back\") {\n\t\tconst selected = items.filter((item) => idSet.has(item.id));\n\t\tconst rest = items.filter((item) => !idSet.has(item.id));\n\t\treturn [...selected, ...rest];\n\t}\n\tconst next = [...items];\n\tif (direction === \"forward\") {\n\t\tfor (let index = next.length - 2; index >= 0; index--) {\n\t\t\tconst current = next[index];\n\t\t\tconst after = next[index + 1];\n\t\t\tif (!current || !after) continue;\n\t\t\tif (idSet.has(current.id) && !idSet.has(after.id)) {\n\t\t\t\tnext[index] = after;\n\t\t\t\tnext[index + 1] = current;\n\t\t\t}\n\t\t}\n\t\treturn next;\n\t}\n\tfor (let index = 1; index < next.length; index++) {\n\t\tconst before = next[index - 1];\n\t\tconst current = next[index];\n\t\tif (!before || !current) continue;\n\t\tif (idSet.has(current.id) && !idSet.has(before.id)) {\n\t\t\tnext[index - 1] = current;\n\t\t\tnext[index] = before;\n\t\t}\n\t}\n\treturn next;\n}\n\nfunction isDefaultMarkerToolStyle(style: StrokeStyle): boolean {\n\treturn (\n\t\tstyle.stroke === MARKER_TOOL_STYLE.stroke &&\n\t\tstyle.strokeWidth === MARKER_TOOL_STYLE.strokeWidth &&\n\t\tstyle.strokeOpacity === MARKER_TOOL_STYLE.strokeOpacity\n\t);\n}\n\n/**\n * Imperative API for pan/zoom and integrations (e.g. AI agents following a region).\n * Call {@link requestRender} after mutating the {@link Camera2D} from {@link getCamera}.\n */\nexport type VectorViewportHandle = {\n\t/** The live camera instance, or `null` before mount / after unmount. */\n\tgetCamera: () => Camera2D | null;\n\t/**\n\t * Re-run SVG + overlay after changing `x`, `y`, or `zoom` on the camera from {@link getCamera}.\n\t */\n\trequestRender: () => void;\n\t/** CSS pixel size of the scene surface (`clientWidth` / `clientHeight`). */\n\tgetViewportSize: () => { width: number; height: number };\n\t/**\n\t * Sets pan/zoom so `worldRect` fits in the viewport with optional margin (fraction of rect size per side, default `0.08`).\n\t */\n\tfitWorldRect: (worldRect: Rect, options?: { padding?: number }) => void;\n};\n\n/** Drag-to-place a custom shape (same interaction as rectangle). Use with `createCustomShapeItem` from `canvu`. */\nexport type CustomShapePlacementOptions = {\n\ttoolId: string;\n\tcreateItem: (args: { id: string; bounds: Rect }) => VectorSceneItem;\n};\n\nexport type VectorViewportProps = {\n\t/** Vector items to draw (SVG fragments). */\n\titems: readonly VectorSceneItem[];\n\tclassName?: string;\n\t/** Accessible name for the application region. */\n\tariaLabel: string;\n\t/**\n\t * When `applePencilNav` is true, used with `attachApplePencilNavigation` to decide\n\t * when finger touches navigate (e.g. `\"hand\"` vs `\"draw\"`).\n\t */\n\ttoolId?: string;\n\t/** Enable Apple Pencil vs finger split (optional). */\n\tapplePencilNav?: boolean;\n\t/**\n\t * When true, selection, drag-to-move, resize handles, and drag-to-create shapes are enabled.\n\t * Requires `onItemsChange` to persist mutations.\n\t */\n\tinteractive?: boolean;\n\t/** Selected item ids (order preserved). Empty = none. */\n\tselectedIds?: readonly string[];\n\tonSelectionChange?: (ids: string[]) => void;\n\tonItemsChange?: (items: VectorSceneItem[]) => void;\n\t/**\n\t * Fires on primary pointer down on the viewport in **world** coordinates.\n\t * Not called when `toolId` is `\"hand\"` (use that tool for panning).\n\t * Ignored when `interactive` is true (placement uses drag-to-define).\n\t */\n\tonWorldPointerDown?: (detail: WorldPointerDownDetail) => void;\n\t/**\n\t * Floating UI above the scene. Compose with `VectorCanvas.Toolbar` + {@link VectorToolbar}\n\t * so the strip anchors at the bottom center (`data-slot=\"vector-canvas-toolbar\"`).\n\t */\n\ttoolbar?: ReactNode;\n\t/**\n\t * Floating bottom-left zoom / undo / minimap bar. Omit to render the default `NavMenu`.\n\t * Pass `<VectorCanvas.NavMenu position=\"...\" />` to relocate or style it. Pass `null` to hide it.\n\t */\n\tnavMenu?: ReactNode | null;\n\t/**\n\t * Floating selection / active-tool style inspector. Omit to render the default `VectorSelectionInspector`.\n\t * Pass `<VectorCanvas.SelectionInspector position=\"...\" />` to relocate or style it. Pass `null` to hide it.\n\t */\n\tselectionInspector?: ReactNode | null;\n\t/**\n\t * Plug and play board extensions.\n\t *\n\t * First-party plugins such as `chatbotPlugin(...)` and `realtimeCollaborationPlugin(...)`\n\t * should be passed here. Advanced authors can create their own plugins with `createCanvuPlugin(...)`.\n\t */\n\tplugins?: readonly CanvasPlugin[];\n\t/**\n\t * Called after the scene/camera redraw (pan, zoom, items update, or {@link VectorViewportHandle.requestRender}).\n\t * Can fire often during gestures — throttle/debounce if needed.\n\t */\n\tonCameraChange?: () => void;\n\t/**\n\t * When `interactive` is true, enables drag (or tap) placement for `toolId`, like built-in shapes.\n\t * Implement `createItem` with `createCustomShapeItem` from `canvu`.\n\t */\n\tcustomPlacement?: CustomShapePlacementOptions;\n\t/**\n\t * Multiple custom placements contributed by plugins or app code.\n\t *\n\t * When both `customPlacement` and `customPlacements` are provided, they are combined and the active\n\t * placement is resolved by the current `toolId`.\n\t */\n\tcustomPlacements?: readonly CustomShapePlacementOptions[];\n\t/**\n\t * When false (default), finishing a draw/place/erase gesture requests switching back to `autoResetToolTo`.\n\t * Use with controlled tool state (`onToolChangeRequest`) to keep \"select-after-use\" behavior.\n\t */\n\ttoolLocked?: boolean;\n\t/** Tool id requested after one-shot actions complete. Default `\"select\"`. */\n\tautoResetToolTo?: string;\n\t/** Called when viewport requests a tool change (e.g. auto reset to select). */\n\tonToolChangeRequest?: (toolId: string) => void;\n\t/**\n\t * Remote participants (cursors + optional in-progress strokes). Renders a world-space overlay\n\t * below the local interaction layer. Transport is your app (WebSocket, party server, …).\n\t */\n\tremotePresence?: readonly RemotePresencePeer[];\n\t/**\n\t * Replace the default presence layer (e.g. custom cursors). When set, `remotePresence` is not\n\t * rendered unless you read it from the parent closure inside this callback.\n\t */\n\tpresenceOverlay?: (ctx: PresenceOverlayRenderContext) => ReactNode;\n\t/**\n\t * Throttled pointer position in **world** space while the cursor moves over the viewport\n\t * (for broadcasting your cursor). Pair with `onWorldPointerLeave`.\n\t */\n\tonWorldPointerMove?: (world: { x: number; y: number }) => void;\n\t/** Fires when the pointer leaves the viewport (clear your broadcast cursor). */\n\tonWorldPointerLeave?: () => void;\n\t/**\n\t * Fires when drag placement preview updates (rect, line, freehand stroke, …). Use it to broadcast\n\t * {@link RemotePresencePeer.markupStroke} for other participants while drawing.\n\t */\n\tonPlacementPreviewChange?: (preview: PlacementPreview | null) => void;\n};\n\nfunction mergeToolListById(\n\tbaseTools: VectorToolDefinition[],\n\tpluginTools: readonly VectorToolDefinition[],\n): VectorToolDefinition[] {\n\tconst next = [...baseTools];\n\tfor (const tool of pluginTools) {\n\t\tconst index = next.findIndex((candidate) => candidate.id === tool.id);\n\t\tif (index >= 0) {\n\t\t\tnext[index] = tool;\n\t\t\tcontinue;\n\t\t}\n\t\tnext.push(tool);\n\t}\n\treturn next;\n}\n\nfunction composePluginEvent<TArgs extends readonly unknown[]>(\n\tconsumerHandler: ((...args: TArgs) => void) | undefined,\n\tpluginHandlers: readonly (((...args: TArgs) => void) | undefined)[],\n): ((...args: TArgs) => void) | undefined {\n\tconst activePluginHandlers = pluginHandlers.filter(\n\t\t(handler): handler is (...args: TArgs) => void => handler != null,\n\t);\n\tif (!consumerHandler && activePluginHandlers.length === 0) return undefined;\n\treturn (...args: TArgs) => {\n\t\tconsumerHandler?.(...args);\n\t\tfor (const handler of activePluginHandlers) {\n\t\t\thandler(...args);\n\t\t}\n\t};\n}\n\nfunction VectorViewportPluginInstances({\n\tplugins,\n\trenderContext,\n}: {\n\tplugins: readonly CanvasPlugin[];\n\trenderContext: CanvasPluginRenderContext;\n}) {\n\tif (plugins.length === 0) return null;\n\treturn (\n\t\t<>\n\t\t\t{plugins.map((plugin) => {\n\t\t\t\tconst Component = plugin.Component;\n\t\t\t\treturn (\n\t\t\t\t\t<div key={plugin.id} style={{ pointerEvents: \"none\", height: \"100%\" }}>\n\t\t\t\t\t\t{plugin.render?.(renderContext)}\n\t\t\t\t\t\t{Component ? <Component pluginId={plugin.id} /> : null}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nfunction appendInterpolatedPoints(\n\tpoints: VectorPathPoint[],\n\tnext: VectorPathPoint,\n\tmaxStepWorld: number,\n): VectorPathPoint[] {\n\tif (points.length === 0) return [next];\n\tconst last = points[points.length - 1];\n\tif (!last) return [...points, next];\n\tconst dx = next.x - last.x;\n\tconst dy = next.y - last.y;\n\tconst dist = Math.hypot(dx, dy);\n\tif (dist < 1e-6) return points;\n\tconst safeStep = Math.max(maxStepWorld, 1e-4);\n\tconst steps = Math.max(1, Math.ceil(dist / safeStep));\n\tif (steps === 1) return [...points, next];\n\tconst out = [...points];\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = i / steps;\n\t\tconst pressure =\n\t\t\tlast.pressure != null || next.pressure != null\n\t\t\t\t? (last.pressure ?? next.pressure ?? 0.5) +\n\t\t\t\t\t((next.pressure ?? last.pressure ?? 0.5) -\n\t\t\t\t\t\t(last.pressure ?? next.pressure ?? 0.5)) *\n\t\t\t\t\t\tt\n\t\t\t\t: undefined;\n\t\tout.push({\n\t\t\tx: last.x + dx * t,\n\t\t\ty: last.y + dy * t,\n\t\t\t...(pressure != null ? { pressure } : {}),\n\t\t});\n\t}\n\treturn out;\n}\n\nfunction pointerSampleToWorldPoint(\n\tscreenToWorldFn: (\n\t\tclientX: number,\n\t\tclientY: number,\n\t) => {\n\t\tworldX: number;\n\t\tworldY: number;\n\t},\n\tclientX: number,\n\tclientY: number,\n\tpressure?: number,\n): VectorPathPoint {\n\tconst { worldX, worldY } = screenToWorldFn(clientX, clientY);\n\tconst safePressure =\n\t\tpressure != null && Number.isFinite(pressure)\n\t\t\t? Math.min(1, Math.max(0, pressure))\n\t\t\t: undefined;\n\treturn {\n\t\tx: worldX,\n\t\ty: worldY,\n\t\t...(safePressure != null ? { pressure: safePressure } : {}),\n\t};\n}\n\ntype SafariTouch = Touch & {\n\tforce?: number;\n\tradiusX?: number;\n\tradiusY?: number;\n\ttouchType?: string;\n};\n\nfunction touchPressure(touch: Touch): number | undefined {\n\tconst force = (touch as SafariTouch).force;\n\tif (force == null || !Number.isFinite(force) || force <= 0) return undefined;\n\treturn Math.min(1, Math.max(0, force));\n}\n\nfunction touchKind(touch: Touch): string | undefined {\n\tconst kind = (touch as SafariTouch).touchType;\n\treturn typeof kind === \"string\" ? kind.toLowerCase() : undefined;\n}\n\nfunction isLikelyStylusTouch(touch: Touch): boolean {\n\tconst kind = touchKind(touch);\n\tif (kind === \"stylus\" || kind === \"pen\" || kind === \"pencil\") return true;\n\tif (kind === \"direct\") return false;\n\n\tconst force = touchPressure(touch);\n\tconst radiusX = (touch as SafariTouch).radiusX;\n\tconst radiusY = (touch as SafariTouch).radiusY;\n\tconst hasSmallRadius =\n\t\t(radiusX == null || radiusX <= 12) && (radiusY == null || radiusY <= 12);\n\treturn force != null && hasSmallRadius;\n}\n\nfunction appendPointerEventSamplesToStrokePoints(\n\tpoints: VectorPathPoint[],\n\tev: PointerEvent,\n\tzoom: number,\n\tscreenToWorldFn: (\n\t\tclientX: number,\n\t\tclientY: number,\n\t) => {\n\t\tworldX: number;\n\t\tworldY: number;\n\t},\n): VectorPathPoint[] {\n\tlet interpolated = points;\n\tconst maxStepWorld = ev.pointerType === \"pen\" ? 0.35 / zoom : 1.0 / zoom;\n\tfor (const sample of pointerEventSamples(ev)) {\n\t\tconst nextPoint = pointerSampleToWorldPoint(\n\t\t\tscreenToWorldFn,\n\t\t\tsample.clientX,\n\t\t\tsample.clientY,\n\t\t\tsample.pointerType === \"pen\" ? sample.pressure : undefined,\n\t\t);\n\t\tinterpolated = appendInterpolatedPoints(interpolated, nextPoint, maxStepWorld);\n\t}\n\treturn interpolated;\n}\n\nfunction appendTouchToStrokePoints(\n\tpoints: VectorPathPoint[],\n\ttouch: Touch,\n\tzoom: number,\n\tscreenToWorldFn: (\n\t\tclientX: number,\n\t\tclientY: number,\n\t) => {\n\t\tworldX: number;\n\t\tworldY: number;\n\t},\n): VectorPathPoint[] {\n\tconst nextPoint = pointerSampleToWorldPoint(\n\t\tscreenToWorldFn,\n\t\ttouch.clientX,\n\t\ttouch.clientY,\n\t\ttouchPressure(touch),\n\t);\n\treturn appendInterpolatedPoints(points, nextPoint, 0.35 / zoom);\n}\n\n/**\n * Full-viewport vector canvas: SVG rendering + pan/zoom/pinch + optional Apple Pencil navigation.\n * Pass a `className` that includes `touch-action: none` (e.g. Tailwind `touch-none`) on the viewport.\n */\nexport const VectorViewport = forwardRef<VectorViewportHandle, VectorViewportProps>(\n\tfunction VectorViewport(\n\t\t{\n\t\t\titems,\n\t\t\tclassName = \"\",\n\t\t\tariaLabel,\n\t\t\ttoolId = \"hand\",\n\t\t\tapplePencilNav = false,\n\t\t\tinteractive = false,\n\t\t\tselectedIds: selectedIdsProp,\n\t\t\tonSelectionChange,\n\t\t\tonItemsChange: consumerOnItemsChange,\n\t\t\tonWorldPointerDown,\n\t\t\ttoolbar,\n\t\t\tnavMenu,\n\t\t\tselectionInspector,\n\t\t\tplugins = [],\n\t\t\tonCameraChange: consumerOnCameraChange,\n\t\t\tcustomPlacement: consumerCustomPlacement,\n\t\t\tcustomPlacements: consumerCustomPlacements,\n\t\t\ttoolLocked = false,\n\t\t\tautoResetToolTo = \"select\",\n\t\t\tonToolChangeRequest,\n\t\t\tremotePresence: consumerRemotePresence,\n\t\t\tpresenceOverlay: consumerPresenceOverlay,\n\t\t\tonWorldPointerMove: consumerOnWorldPointerMove,\n\t\t\tonWorldPointerLeave: consumerOnWorldPointerLeave,\n\t\t\tonPlacementPreviewChange: consumerOnPlacementPreviewChange,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst wrapperRef = useRef<HTMLDivElement>(null);\n\t\tconst interactionRootRef = useRef<HTMLDivElement>(null);\n\t\tconst sceneContainerRef = useRef<HTMLDivElement>(null);\n\t\tconst activeInteractionPointerIdRef = useRef<number | null>(null);\n\t\tconst activeInteractionPointerTargetRef = useRef<HTMLDivElement | null>(null);\n\t\tconst activeInteractionTouchIdRef = useRef<number | null>(null);\n\t\tconst penDetectedRef = useRef(false);\n\t\tconst lastPenPointerDownAtRef = useRef(0);\n\t\tconst cameraRef = useRef<Camera2D | null>(null);\n\t\tconst viewportSizeRef = useRef({ width: 0, height: 0 });\n\t\tconst [cameraForOverlay, setCameraForOverlay] = useState<Camera2D | null>(null);\n\t\tconst sceneRef = useRef<VectorScene | null>(null);\n\t\tconst rendererRef = useRef<SvgVectorRenderer | null>(null);\n\t\tconst pluginViewportRef = useRef<VectorViewportHandle | null>(null);\n\t\tconst [pluginContributions, setPluginContributions] = useState<\n\t\t\tRecord<string, CanvasPluginContribution>\n\t\t>({});\n\n\t\tconst registerContribution = useCallback(\n\t\t\t(pluginId: string, contribution: CanvasPluginContribution) => {\n\t\t\t\tsetPluginContributions((current) => {\n\t\t\t\t\tif (current[pluginId] === contribution) return current;\n\t\t\t\t\treturn { ...current, [pluginId]: contribution };\n\t\t\t\t});\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst unregisterContribution = useCallback((pluginId: string) => {\n\t\t\tsetPluginContributions((current) => {\n\t\t\t\tif (!(pluginId in current)) return current;\n\t\t\t\tconst next = { ...current };\n\t\t\t\tdelete next[pluginId];\n\t\t\t\treturn next;\n\t\t\t});\n\t\t}, []);\n\n\t\tconst orderedPluginContributions = useMemo(\n\t\t\t() =>\n\t\t\t\tplugins\n\t\t\t\t\t.map((plugin) => pluginContributions[plugin.id])\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(contribution): contribution is CanvasPluginContribution =>\n\t\t\t\t\t\t\tcontribution != null,\n\t\t\t\t\t),\n\t\t\t[pluginContributions, plugins],\n\t\t);\n\n\t\tconst resolvedTools = useMemo(() => {\n\t\t\tlet nextTools = [...DEFAULT_VECTOR_TOOLS];\n\t\t\tfor (const contribution of orderedPluginContributions) {\n\t\t\t\tif (contribution.tools?.length) {\n\t\t\t\t\tnextTools = mergeToolListById(nextTools, contribution.tools);\n\t\t\t\t}\n\t\t\t\tif (contribution.toolTransform) {\n\t\t\t\t\tnextTools = contribution.toolTransform(nextTools);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nextTools;\n\t\t}, [orderedPluginContributions]);\n\n\t\tconst allCustomPlacements = useMemo(() => {\n\t\t\tconst placements: CustomShapePlacementOptions[] = [];\n\t\t\tif (consumerCustomPlacement) placements.push(consumerCustomPlacement);\n\t\t\tif (consumerCustomPlacements?.length) {\n\t\t\t\tplacements.push(...consumerCustomPlacements);\n\t\t\t}\n\t\t\tfor (const contribution of orderedPluginContributions) {\n\t\t\t\tif (contribution.customPlacements?.length) {\n\t\t\t\t\tplacements.push(...contribution.customPlacements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placements;\n\t\t}, [\n\t\t\tconsumerCustomPlacement,\n\t\t\tconsumerCustomPlacements,\n\t\t\torderedPluginContributions,\n\t\t]);\n\n\t\tconst customPlacement = useMemo(\n\t\t\t() =>\n\t\t\t\t[...allCustomPlacements]\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.find((placement) => placement.toolId === toolId),\n\t\t\t[allCustomPlacements, toolId],\n\t\t);\n\n\t\tconst remotePresence =\n\t\t\t[...orderedPluginContributions]\n\t\t\t\t.reverse()\n\t\t\t\t.map((contribution) => contribution.viewportProps?.remotePresence)\n\t\t\t\t.find((value) => value !== undefined) ?? consumerRemotePresence;\n\n\t\tconst presenceOverlay =\n\t\t\t[...orderedPluginContributions]\n\t\t\t\t.reverse()\n\t\t\t\t.map((contribution) => contribution.viewportProps?.presenceOverlay)\n\t\t\t\t.find((value) => value !== undefined) ?? consumerPresenceOverlay;\n\n\t\tconst onWorldPointerMove = composePluginEvent(\n\t\t\tconsumerOnWorldPointerMove,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onWorldPointerMove,\n\t\t\t),\n\t\t);\n\t\tconst onWorldPointerLeave = composePluginEvent(\n\t\t\tconsumerOnWorldPointerLeave,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onWorldPointerLeave,\n\t\t\t),\n\t\t);\n\t\tconst onPlacementPreviewChange = composePluginEvent(\n\t\t\tconsumerOnPlacementPreviewChange,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onPlacementPreviewChange,\n\t\t\t),\n\t\t);\n\t\tconst onCameraChange = composePluginEvent(\n\t\t\tconsumerOnCameraChange,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onCameraChange,\n\t\t\t),\n\t\t);\n\n\t\tconst onItemsChange = useMemo(() => {\n\t\t\tconst middlewares = orderedPluginContributions\n\t\t\t\t.map((contribution) => contribution.wrapOnItemsChange)\n\t\t\t\t.filter(\n\t\t\t\t\t(\n\t\t\t\t\t\tmiddleware,\n\t\t\t\t\t): middleware is NonNullable<\n\t\t\t\t\t\tCanvasPluginContribution[\"wrapOnItemsChange\"]\n\t\t\t\t\t> => middleware != null,\n\t\t\t\t);\n\t\t\tif (!consumerOnItemsChange && middlewares.length === 0) return undefined;\n\t\t\tconst baseNext: NonNullable<VectorViewportProps[\"onItemsChange\"]> = (\n\t\t\t\tnextItems,\n\t\t\t) => {\n\t\t\t\tconsumerOnItemsChange?.(nextItems);\n\t\t\t};\n\t\t\treturn middlewares.reduceRight<\n\t\t\t\tNonNullable<VectorViewportProps[\"onItemsChange\"]>\n\t\t\t>(\n\t\t\t\t(next, middleware) => (nextItems) => {\n\t\t\t\t\tconst ctx: CanvasPluginItemsChangeMiddlewareContext = {\n\t\t\t\t\t\tcurrentItems: items,\n\t\t\t\t\t\tnext,\n\t\t\t\t\t\tconsumerOnItemsChange,\n\t\t\t\t\t\tviewportRef: pluginViewportRef,\n\t\t\t\t\t};\n\t\t\t\t\tmiddleware(nextItems, ctx);\n\t\t\t\t},\n\t\t\t\tbaseNext,\n\t\t\t);\n\t\t}, [consumerOnItemsChange, items, orderedPluginContributions]);\n\n\t\tconst pluginRenderContext = useMemo<CanvasPluginRenderContext>(\n\t\t\t() => ({ viewportRef: pluginViewportRef }),\n\t\t\t[],\n\t\t);\n\n\t\tconst pluginContextValue = useMemo(\n\t\t\t() => ({\n\t\t\t\tviewportRef: pluginViewportRef,\n\t\t\t\tviewport: {\n\t\t\t\t\titems,\n\t\t\t\t\tonItemsChange: consumerOnItemsChange,\n\t\t\t\t\ttoolId,\n\t\t\t\t\tinteractive,\n\t\t\t\t\ttoolLocked,\n\t\t\t\t\tonToolChangeRequest,\n\t\t\t\t},\n\t\t\t\tresolvedTools,\n\t\t\t\tregisterContribution,\n\t\t\t\tunregisterContribution,\n\t\t\t}),\n\t\t\t[\n\t\t\t\tconsumerOnItemsChange,\n\t\t\t\tinteractive,\n\t\t\t\titems,\n\t\t\t\tonToolChangeRequest,\n\t\t\t\tregisterContribution,\n\t\t\t\tresolvedTools,\n\t\t\t\ttoolId,\n\t\t\t\ttoolLocked,\n\t\t\t\tunregisterContribution,\n\t\t\t],\n\t\t);\n\t\tconst toolIdRef = useRef(toolId);\n\t\tconst interactiveRef = useRef(interactive);\n\t\tconst reducedMotionRef = useRef(false);\n\t\tconst itemsRef = useRef(items);\n\t\tconst onWorldPointerDownRef = useRef(onWorldPointerDown);\n\t\tconst onItemsChangeRef = useRef(onItemsChange);\n\t\tconst customPlacementRef = useRef(customPlacement);\n\t\tcustomPlacementRef.current = customPlacement;\n\t\tconst dragStateRef = useRef<DragState>({ kind: \"idle\" });\n\t\tconst clipboardRef = useRef<VectorSceneItem[] | null>(null);\n\t\tconst undoStackRef = useRef<VectorSceneItem[][]>([]);\n\t\tconst redoStackRef = useRef<VectorSceneItem[][]>([]);\n\t\tconst isUndoingRef = useRef(false);\n\t\tconst MAX_HISTORY = 50;\n\t\tconst [canUndo, setCanUndo] = useState(false);\n\t\tconst [canRedo, setCanRedo] = useState(false);\n\n\t\tconst pushUndo = useCallback(() => {\n\t\t\tundoStackRef.current.push(itemsRef.current.map((i) => structuredClone(i)));\n\t\t\tif (undoStackRef.current.length > MAX_HISTORY) {\n\t\t\t\tundoStackRef.current.shift();\n\t\t\t}\n\t\t\tredoStackRef.current = [];\n\t\t\tsetCanUndo(true);\n\t\t\tsetCanRedo(false);\n\t\t}, []);\n\n\t\tconst undo = useCallback(() => {\n\t\t\tconst stack = undoStackRef.current;\n\t\t\tif (stack.length === 0) return;\n\t\t\tconst prev = stack.pop() as VectorSceneItem[];\n\t\t\tconst current = itemsRef.current.map((i) => structuredClone(i));\n\t\t\tredoStackRef.current.push(current);\n\t\t\tsetCanRedo(true);\n\t\t\tsetCanUndo(stack.length > 0);\n\t\t\tisUndoingRef.current = true;\n\t\t\tonItemsChangeRef.current?.(prev);\n\t\t}, []);\n\n\t\tconst redo = useCallback(() => {\n\t\t\tconst stack = redoStackRef.current;\n\t\t\tif (stack.length === 0) return;\n\t\t\tconst next = stack.pop() as VectorSceneItem[];\n\t\t\tconst current = itemsRef.current.map((i) => structuredClone(i));\n\t\t\tundoStackRef.current.push(current);\n\t\t\tsetCanUndo(true);\n\t\t\tsetCanRedo(stack.length > 0);\n\t\t\tisUndoingRef.current = true;\n\t\t\tonItemsChangeRef.current?.(next);\n\t\t}, []);\n\t\tconst [contextMenu, setContextMenu] = useState<{\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t\titemIds: string[];\n\t\t} | null>(null);\n\n\t\tconst [uncontrolledSel, setUncontrolledSel] = useState<string[]>([]);\n\t\tconst isSelectionControlled = onSelectionChange !== undefined;\n\t\t/**\n\t\t * Stable when only `items` changes: controlled branch keys off serialized ids so parents\n\t\t * that pass a new `selectedIds` array reference each render with the same contents do not\n\t\t * invalidate this memo every frame (avoids orphan-selection effect + update-depth issues).\n\t\t */\n\t\tconst controlledSelectedKey = JSON.stringify(selectedIdsProp ?? []);\n\t\tconst effectiveSelectedIds = useMemo((): string[] => {\n\t\t\tif (isSelectionControlled) {\n\t\t\t\treturn [...(JSON.parse(controlledSelectedKey) as string[])];\n\t\t\t}\n\t\t\treturn uncontrolledSel;\n\t\t}, [isSelectionControlled, controlledSelectedKey, uncontrolledSel]);\n\n\t\tconst effectiveSelectedIdsRef = useRef<string[]>([]);\n\t\teffectiveSelectedIdsRef.current = effectiveSelectedIds;\n\n\t\tconst setEffectiveSelectedIds = useCallback(\n\t\t\t(ids: readonly string[]) => {\n\t\t\t\tconst next = [...ids];\n\t\t\t\tif (isSelectionControlled) {\n\t\t\t\t\tonSelectionChange?.(next);\n\t\t\t\t} else {\n\t\t\t\t\tsetUncontrolledSel(next);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[isSelectionControlled, onSelectionChange],\n\t\t);\n\n\t\tconst setEffectiveSelectedIdsRef = useRef(setEffectiveSelectedIds);\n\t\tsetEffectiveSelectedIdsRef.current = setEffectiveSelectedIds;\n\n\t\ttoolIdRef.current = toolId;\n\t\tinteractiveRef.current = interactive;\n\t\titemsRef.current = items;\n\t\tonWorldPointerDownRef.current = onWorldPointerDown;\n\t\tconst originalOnItemsChangeRef = useRef(onItemsChange);\n\t\toriginalOnItemsChangeRef.current = onItemsChange;\n\t\tconst changeItems = useCallback(\n\t\t\t(items: VectorSceneItem[]) => {\n\t\t\t\tif (!isUndoingRef.current) {\n\t\t\t\t\tpushUndo();\n\t\t\t\t}\n\t\t\t\tisUndoingRef.current = false;\n\t\t\t\toriginalOnItemsChangeRef.current?.(items);\n\t\t\t},\n\t\t\t[pushUndo],\n\t\t);\n\t\tonItemsChangeRef.current = changeItems;\n\t\tconst toolLockedRef = useRef(toolLocked);\n\t\ttoolLockedRef.current = toolLocked;\n\t\tconst autoResetToolToRef = useRef(autoResetToolTo);\n\t\tautoResetToolToRef.current = autoResetToolTo;\n\t\tconst onToolChangeRequestRef = useRef(onToolChangeRequest);\n\t\tonToolChangeRequestRef.current = onToolChangeRequest;\n\n\t\tconst resolvedItems = useMemo(() => resolveArrowBindingsInScene(items), [items]);\n\t\tconst resolvedItemsRef = useRef(resolvedItems);\n\t\tresolvedItemsRef.current = resolvedItems;\n\n\t\tconst liveId = useId();\n\t\tconst reducedMotion = usePrefersReducedMotion();\n\t\treducedMotionRef.current = reducedMotion;\n\t\tconst [zoomPercent, setZoomPercent] = useState(100);\n\t\tconst [cameraTick, setCameraTick] = useState(0);\n\t\tconst [placementPreview, setPlacementPreview] =\n\t\t\tuseState<PlacementPreview | null>(null);\n\t\tconst [eraserTrail, setEraserTrail] = useState<\n\t\t\t{ x: number; y: number; t: number }[]\n\t\t>([]);\n\t\tconst [laserTrail, setLaserTrail] = useState<\n\t\t\t{ x: number; y: number; t: number }[]\n\t\t>([]);\n\t\tconst [eraserPreviewIds, setEraserPreviewIds] = useState<string[]>([]);\n\t\tconst eraserPreviewIdsRef = useRef<Set<string>>(new Set());\n\t\tconst resolvedSceneItems = useMemo(() => {\n\t\t\tif (eraserPreviewIds.length === 0) return resolvedItems;\n\t\t\tconst hiddenIds = new Set(eraserPreviewIds);\n\t\t\treturn resolvedItems.filter((it) => !hiddenIds.has(it.id));\n\t\t}, [eraserPreviewIds, resolvedItems]);\n\t\tconst resolvedSceneItemsRef =\n\t\t\tuseRef<readonly VectorSceneItem[]>(resolvedSceneItems);\n\t\tresolvedSceneItemsRef.current = resolvedSceneItems;\n\t\tconst livePenStrokeItemRef = useRef<VectorSceneItem | null>(null);\n\t\tconst [eraserActive, setEraserActive] = useState(false);\n\t\tconst [editingTextId, setEditingTextId] = useState<string | null>(null);\n\t\tconst [draftText, setDraftText] = useState(\"\");\n\t\tconst draftTextRef = useRef(\"\");\n\t\tdraftTextRef.current = draftText;\n\t\tconst [loadingSkeletons, setLoadingSkeletons] = useState<\n\t\t\t{ id: string; x: number; y: number; width: number; height: number }[]\n\t\t>([]);\n\t\tconst skeletonSeqRef = useRef(0);\n\t\t/** Snapshot when inline edit starts; used to restore on Escape if draft changed. */\n\t\tconst editingTextSnapshotRef = useRef<VectorSceneItem | null>(null);\n\t\tconst editingTextIdRef = useRef<string | null>(null);\n\t\teditingTextIdRef.current = editingTextId;\n\t\tconst pendingImagePlacementRef = useRef<{\n\t\t\tworldX: number;\n\t\t\tworldY: number;\n\t\t} | null>(null);\n\t\tconst lastToolIdRef = useRef(toolId);\n\t\tconst imageInputRef = useRef<HTMLInputElement>(null);\n\t\tconst imageStoreRef = useRef<IndexedDbImageStore | null>(null);\n\t\tif (typeof indexedDB !== \"undefined\" && !imageStoreRef.current) {\n\t\t\timageStoreRef.current = new IndexedDbImageStore();\n\t\t}\n\t\tconst strokeStyleRef = useRef<StrokeStyle>({ ...DEFAULT_STROKE_STYLE });\n\t\tconst [strokeStyleState, setStrokeStyleState] = useState<StrokeStyle>({\n\t\t\t...DEFAULT_STROKE_STYLE,\n\t\t});\n\t\tconst setCurrentStrokeStyle = useCallback((next: StrokeStyle) => {\n\t\t\tstrokeStyleRef.current = next;\n\t\t\tsetStrokeStyleState(next);\n\t\t}, []);\n\n\t\t/* ── Progressive image loading (thumbnail → full-res) ── */\n\t\tconst progressiveQueueRef = useRef<Set<string>>(new Set());\n\t\tuseEffect(() => {\n\t\t\tconst store = imageStoreRef.current;\n\t\t\tif (!store) return;\n\t\t\tlet cancelled = false;\n\t\t\tconst timer = setTimeout(async () => {\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\tif (\n\t\t\t\t\t\titem.toolKind === \"image\" &&\n\t\t\t\t\t\titem.imageBlobId &&\n\t\t\t\t\t\ttypeof item.imageRasterHref === \"string\" &&\n\t\t\t\t\t\titem.imageRasterHref.startsWith(\"blob:\") &&\n\t\t\t\t\t\titem.imageThumbnailHref &&\n\t\t\t\t\t\t!progressiveQueueRef.current.has(item.id)\n\t\t\t\t\t) {\n\t\t\t\t\t\tprogressiveQueueRef.current.add(item.id);\n\t\t\t\t\t\tconst fullUrl = item.imageRasterHref;\n\t\t\t\t\t\t// Pre-decode the full-res image\n\t\t\t\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\t\t\t\tconst img = new Image();\n\t\t\t\t\t\t\timg.onload = () => resolve();\n\t\t\t\t\t\t\timg.onerror = () => reject();\n\t\t\t\t\t\t\timg.src = fullUrl;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (cancelled) return;\n\t\t\t\t\t\t// Swap childrenSvg to use full-res\n\t\t\t\t\t\tconst { buildRasterImageChildrenSvg } = await import(\n\t\t\t\t\t\t\t\"../scene/shape-builders\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\t\tif (!change) return;\n\t\t\t\t\t\tconst list = itemsRef.current;\n\t\t\t\t\t\tconst existing = list.find((i) => i.id === item.id);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!existing ||\n\t\t\t\t\t\t\texisting.toolKind !== \"image\" ||\n\t\t\t\t\t\t\t!existing.imageIntrinsicSize\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\tconst { imageIntrinsicSize: isize, imageThumbnailHref } = existing;\n\t\t\t\t\t\t// Only swap if thumbnail is still the one showing\n\t\t\t\t\t\tconst needsSwap = imageThumbnailHref?.startsWith(\"blob:\");\n\t\t\t\t\t\tif (needsSwap && imageThumbnailHref) {\n\t\t\t\t\t\t\tURL.revokeObjectURL(imageThumbnailHref);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst rebuilt = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\timageThumbnailHref: undefined,\n\t\t\t\t\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\t\t\t\t\tfullUrl,\n\t\t\t\t\t\t\t\tisize,\n\t\t\t\t\t\t\t\texisting.bounds,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} as VectorSceneItem;\n\t\t\t\t\t\tchange(list.map((i) => (i.id === item.id ? rebuilt : i)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t\tclearTimeout(timer);\n\t\t\t};\n\t\t}, [items]);\n\t\tconst onCameraChangeRef = useRef(onCameraChange);\n\t\tonCameraChangeRef.current = onCameraChange;\n\t\tconst onWorldPointerMoveRef = useRef(onWorldPointerMove);\n\t\tonWorldPointerMoveRef.current = onWorldPointerMove;\n\t\tconst onWorldPointerLeaveRef = useRef(onWorldPointerLeave);\n\t\tonWorldPointerLeaveRef.current = onWorldPointerLeave;\n\t\tconst onPlacementPreviewChangeRef = useRef(onPlacementPreviewChange);\n\t\tonPlacementPreviewChangeRef.current = onPlacementPreviewChange;\n\t\t/** Re-render overlays when the camera moves — including non-interactive + `remotePresence`. */\n\t\tconst overlayCameraTickRef = useRef(false);\n\t\toverlayCameraTickRef.current =\n\t\t\tinteractive ||\n\t\t\t(remotePresence != null && remotePresence.length > 0) ||\n\t\t\tpresenceOverlay != null;\n\t\tconst pruneEraserTrail = useCallback(\n\t\t\t(points: { x: number; y: number; t: number }[]) => {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst maxAgeMs = 150;\n\t\t\t\treturn points.filter((p) => now - p.t <= maxAgeMs);\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t\tconst pruneLaserTrail = useCallback(\n\t\t\t(points: { x: number; y: number; t: number }[]) => {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst maxAgeMs = 650;\n\t\t\t\treturn points.filter((p) => now - p.t <= maxAgeMs);\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t\tconst requestAutoResetTool = useCallback((usedTool: string) => {\n\t\t\tif (toolLockedRef.current) return;\n\t\t\tif (usedTool === \"select\" || usedTool === \"hand\") return;\n\t\t\tonToolChangeRequestRef.current?.(autoResetToolToRef.current);\n\t\t}, []);\n\n\t\tconst shouldKeepToolForContinuousPenInput = useCallback(\n\t\t\t(tool: string, pointerType: string) =>\n\t\t\t\tpointerType === \"pen\" && (tool === \"draw\" || tool === \"marker\"),\n\t\t\t[],\n\t\t);\n\n\t\tconst commitCompletedStroke = useCallback(\n\t\t\t(args: {\n\t\t\t\ttool: Extract<DragState, { kind: \"stroke\" }>[\"tool\"];\n\t\t\t\tpointerType: string;\n\t\t\t\tpoints: VectorPathPoint[];\n\t\t\t\tstyle: StrokeStyle;\n\t\t\t\titemId?: string;\n\t\t\t}) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tif (args.tool === \"laser\") {\n\t\t\t\t\tif (!shouldKeepToolForContinuousPenInput(args.tool, args.pointerType)) {\n\t\t\t\t\t\trequestAutoResetTool(args.tool);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst id = args.itemId ?? createShapeId();\n\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\tid,\n\t\t\t\t\targs.points,\n\t\t\t\t\targs.tool,\n\t\t\t\t\targs.style,\n\t\t\t\t);\n\t\t\t\tif (item) {\n\t\t\t\t\tconst exists = itemsRef.current.some((it) => it.id === id);\n\t\t\t\t\tchange(\n\t\t\t\t\t\texists\n\t\t\t\t\t\t\t? replaceItem(itemsRef.current, id, item)\n\t\t\t\t\t\t\t: [...itemsRef.current, item],\n\t\t\t\t\t);\n\t\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\t\tstroke: item.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\t\t\tstrokeWidth: item.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t\t\t\t...(item.strokeOpacity != null\n\t\t\t\t\t\t\t? { strokeOpacity: item.strokeOpacity }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!shouldKeepToolForContinuousPenInput(args.tool, args.pointerType)) {\n\t\t\t\t\trequestAutoResetTool(args.tool);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\trequestAutoResetTool,\n\t\t\t\tsetCurrentStrokeStyle,\n\t\t\t\tshouldKeepToolForContinuousPenInput,\n\t\t\t],\n\t\t);\n\n\t\tconst captureInteractionPointer = useCallback(\n\t\t\t(\n\t\t\t\ttarget: HTMLDivElement,\n\t\t\t\tpointerId: number,\n\t\t\t\toptions?: { captureNativePointer?: boolean },\n\t\t\t) => {\n\t\t\t\tconst captureNativePointer = options?.captureNativePointer ?? true;\n\t\t\t\tdebugApplePencilPointer(\"capture\", { pointerId, captureNativePointer });\n\t\t\t\tactiveInteractionPointerIdRef.current = pointerId;\n\t\t\t\tactiveInteractionPointerTargetRef.current = captureNativePointer\n\t\t\t\t\t? target\n\t\t\t\t\t: null;\n\t\t\t\tif (captureNativePointer) {\n\t\t\t\t\ttryPointerCaptureOnTarget(target, pointerId);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst releaseInteractionPointer = useCallback(() => {\n\t\t\tconst pointerId = activeInteractionPointerIdRef.current;\n\t\t\tconst target = activeInteractionPointerTargetRef.current;\n\t\t\tdebugApplePencilPointer(\"release\", { pointerId });\n\t\t\tif (pointerId != null && target) {\n\t\t\t\ttry {\n\t\t\t\t\tif (target.hasPointerCapture(pointerId)) {\n\t\t\t\t\t\ttarget.releasePointerCapture(pointerId);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore Safari/iPad capture races */\n\t\t\t\t}\n\t\t\t}\n\t\t\tactiveInteractionPointerIdRef.current = null;\n\t\t\tactiveInteractionPointerTargetRef.current = null;\n\t\t\tactiveInteractionTouchIdRef.current = null;\n\t\t}, []);\n\n\t\tconst renderSceneWithLivePenStroke = useCallback(\n\t\t\t(item: VectorSceneItem | null) => {\n\t\t\t\tlivePenStrokeItemRef.current = item;\n\t\t\t\tconst scene = sceneRef.current;\n\t\t\t\tconst renderer = rendererRef.current;\n\t\t\t\tif (!scene || !renderer) return;\n\t\t\t\tconst base = resolvedSceneItemsRef.current;\n\t\t\t\tscene.setItems(item ? [...base, item] : base);\n\t\t\t\trenderer.render();\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst finalizeStrokeDragState = useCallback(\n\t\t\t(strokeState: Extract<DragState, { kind: \"stroke\" }>) => {\n\t\t\t\tconst tool = strokeState.tool;\n\t\t\t\tconst pts = strokeState.points;\n\t\t\t\tconst pointerType = strokeState.pointerType;\n\t\t\t\tconst itemId = strokeState.itemId;\n\t\t\t\tconst style = { ...strokeStyleRef.current };\n\t\t\t\tdebugApplePencilPointer(\"finalize-stroke\", {\n\t\t\t\t\tpointerType,\n\t\t\t\t\ttool,\n\t\t\t\t\tpoints: pts.length,\n\t\t\t\t});\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\treleaseInteractionPointer();\n\t\t\t\tif (itemId) {\n\t\t\t\t\trenderSceneWithLivePenStroke(null);\n\t\t\t\t}\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tcommitCompletedStroke({\n\t\t\t\t\ttool,\n\t\t\t\t\tpointerType,\n\t\t\t\t\tpoints: [...pts],\n\t\t\t\t\tstyle,\n\t\t\t\t\titemId,\n\t\t\t\t});\n\t\t\t},\n\t\t\t[\n\t\t\t\tcommitCompletedStroke,\n\t\t\t\treleaseInteractionPointer,\n\t\t\t\trenderSceneWithLivePenStroke,\n\t\t\t],\n\t\t);\n\n\t\tconst renderFrame = useCallback(() => {\n\t\t\tconst renderer = rendererRef.current;\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!renderer || !cam) return;\n\t\t\trenderer.render();\n\t\t\tif (overlayCameraTickRef.current) {\n\t\t\t\tsetCameraTick((n) => n + 1);\n\t\t\t}\n\t\t\tif (!reducedMotionRef.current) {\n\t\t\t\tsetZoomPercent(Math.round(cam.zoom * 100));\n\t\t\t}\n\t\t\tonCameraChangeRef.current?.();\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tconst interactionEl = interactionRootRef.current;\n\t\t\tif (!el || !interactionEl) return;\n\n\t\t\tconst camera = new Camera2D({ minZoom: 0.1, maxZoom: 24 });\n\t\t\tcameraRef.current = camera;\n\t\t\tsetCameraForOverlay(camera);\n\n\t\t\tconst scene = new VectorScene();\n\t\t\tsceneRef.current = scene;\n\t\t\tscene.setItems(itemsRef.current);\n\n\t\t\tconst renderer = new SvgVectorRenderer({\n\t\t\t\tcontainer: el,\n\t\t\t\tscene,\n\t\t\t\tcamera,\n\t\t\t\tpointerEventsNone: interactiveRef.current,\n\t\t\t});\n\t\t\trendererRef.current = renderer;\n\t\t\trenderer.render();\n\t\t\tif (!reducedMotionRef.current) {\n\t\t\t\tsetZoomPercent(Math.round(camera.zoom * 100));\n\t\t\t}\n\n\t\t\tconst detachInput = attachViewportInput({\n\t\t\t\telement: interactionEl,\n\t\t\t\tcamera,\n\t\t\t\tonUpdate: renderFrame,\n\t\t\t\twheelElement: wrapperRef.current ?? undefined,\n\t\t\t\ttouchHandledElsewhere: applePencilNav,\n\t\t\t\tallowPrimaryPointerPan: () => {\n\t\t\t\t\tif (interactiveRef.current) {\n\t\t\t\t\t\treturn toolIdRef.current === \"hand\";\n\t\t\t\t\t}\n\t\t\t\t\tconst t = toolIdRef.current;\n\t\t\t\t\treturn t === \"hand\" || t === \"select\";\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tlet detachPencil: (() => void) | undefined;\n\t\t\tif (applePencilNav) {\n\t\t\t\tdetachPencil = attachApplePencilNavigation({\n\t\t\t\t\telement: interactionEl,\n\t\t\t\t\tcamera,\n\t\t\t\t\tgetCurrentToolId: () => toolIdRef.current,\n\t\t\t\t\tonUpdate: renderFrame,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tdetachInput();\n\t\t\t\tdetachPencil?.();\n\t\t\t\trenderer.destroy();\n\t\t\t\trendererRef.current = null;\n\t\t\t\tsceneRef.current = null;\n\t\t\t\tcameraRef.current = null;\n\t\t\t\tsetCameraForOverlay(null);\n\t\t\t};\n\t\t}, [applePencilNav, renderFrame]);\n\n\t\tuseEffect(() => {\n\t\t\tconst r = rendererRef.current;\n\t\t\tif (!r) return;\n\t\t\tr.setPointerEventsNone(interactive);\n\t\t}, [interactive]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!eraserActive && laserTrail.length === 0) return;\n\t\t\tconst timer = window.setInterval(() => {\n\t\t\t\tsetEraserTrail((prev) => pruneEraserTrail(prev));\n\t\t\t\tsetLaserTrail((prev) => pruneLaserTrail(prev));\n\t\t\t}, 50);\n\t\t\treturn () => window.clearInterval(timer);\n\t\t}, [eraserActive, laserTrail.length, pruneEraserTrail, pruneLaserTrail]);\n\n\t\tuseEffect(() => {\n\t\t\tconst root = wrapperRef.current;\n\t\t\tif (!root || !onWorldPointerMove) return;\n\t\t\tlet lastEmit = 0;\n\t\t\tconst throttleMs = 33;\n\t\t\tconst move = (e: PointerEvent) => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tif (now - lastEmit < throttleMs) return;\n\t\t\t\tlastEmit = now;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tconst rect = sceneContainerRef.current?.getBoundingClientRect();\n\t\t\t\tif (!cam || !rect) return;\n\t\t\t\tconst { worldX, worldY } = cam.screenToWorld(\n\t\t\t\t\te.clientX - rect.left,\n\t\t\t\t\te.clientY - rect.top,\n\t\t\t\t);\n\t\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\n\t\t\t};\n\t\t\tconst leave = () => onWorldPointerLeaveRef.current?.();\n\t\t\troot.addEventListener(\"pointermove\", move, { passive: true });\n\t\t\troot.addEventListener(\"pointerleave\", leave);\n\t\t\treturn () => {\n\t\t\t\troot.removeEventListener(\"pointermove\", move);\n\t\t\t\troot.removeEventListener(\"pointerleave\", leave);\n\t\t\t};\n\t\t}, [onWorldPointerMove]);\n\n\t\tuseEffect(() => {\n\t\t\tonPlacementPreviewChangeRef.current?.(placementPreview);\n\t\t}, [placementPreview]);\n\n\t\tuseEffect(() => {\n\t\t\tconst scene = sceneRef.current;\n\t\t\tif (scene) {\n\t\t\t\tconst live = livePenStrokeItemRef.current;\n\t\t\t\tif (live && resolvedSceneItems.some((it) => it.id === live.id)) {\n\t\t\t\t\tlivePenStrokeItemRef.current = null;\n\t\t\t\t}\n\t\t\t\tconst currentLive = livePenStrokeItemRef.current;\n\t\t\t\tscene.setItems(\n\t\t\t\t\tcurrentLive ? [...resolvedSceneItems, currentLive] : resolvedSceneItems,\n\t\t\t\t);\n\t\t\t\trenderFrame();\n\t\t\t}\n\t\t}, [resolvedSceneItems, renderFrame]);\n\n\t\t/** Drop selection ids that no longer exist (e.g. erased item). */\n\t\tuseEffect(() => {\n\t\t\tconst ids = effectiveSelectedIds;\n\t\t\tconst valid = ids.filter((id) => items.some((i) => i.id === id));\n\t\t\tif (valid.length === ids.length) return;\n\t\t\tsetEffectiveSelectedIdsRef.current(valid);\n\t\t}, [items, effectiveSelectedIds]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!editingTextId) return;\n\t\t\tconst it = items.find((i) => i.id === editingTextId);\n\t\t\tif (!it || it.toolKind !== \"text\") {\n\t\t\t\tsetEditingTextId(null);\n\t\t\t}\n\t\t}, [items, editingTextId]);\n\n\t\tconst itemsSnapshotForBlobRef = useRef<readonly VectorSceneItem[]>([]);\n\t\tuseEffect(() => {\n\t\t\tconst prev = itemsSnapshotForBlobRef.current;\n\t\t\titemsSnapshotForBlobRef.current = items;\n\t\t\tconst blobHrefs = (list: readonly VectorSceneItem[]) => {\n\t\t\t\tconst s = new Set<string>();\n\t\t\t\tfor (const it of list) {\n\t\t\t\t\tif (it.toolKind === \"image\" && it.imageRasterHref?.startsWith(\"blob:\")) {\n\t\t\t\t\t\ts.add(it.imageRasterHref);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn s;\n\t\t\t};\n\t\t\tconst before = blobHrefs(prev);\n\t\t\tconst after = blobHrefs(items);\n\t\t\tfor (const href of before) {\n\t\t\t\tif (!after.has(href)) {\n\t\t\t\t\tURL.revokeObjectURL(href);\n\t\t\t\t}\n\t\t\t}\n\t\t}, [items]);\n\n\t\tconst PASTE_OFFSET_WORLD = 24;\n\n\t\tconst copyIdsToInternalClipboard = useCallback((ids: readonly string[]) => {\n\t\t\tif (ids.length === 0) return;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst copies = ids\n\t\t\t\t.map((id) => list.find((i) => i.id === id))\n\t\t\t\t.filter((x): x is VectorSceneItem => x != null);\n\t\t\tclipboardRef.current = copies.map(\n\t\t\t\t(it) => JSON.parse(JSON.stringify(it)) as VectorSceneItem,\n\t\t\t);\n\t\t}, []);\n\n\t\tconst pasteFromInternalClipboard = useCallback(() => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tconst buf = clipboardRef.current;\n\t\t\tif (!change || !buf?.length) return;\n\t\t\tconst clones = cloneVectorSceneItemsWithNewIds(buf);\n\t\t\tconst moved = clones.map((it) =>\n\t\t\t\tmoveItemByDelta(it, PASTE_OFFSET_WORLD, PASTE_OFFSET_WORLD),\n\t\t\t);\n\t\t\tchange([...itemsRef.current, ...moved]);\n\t\t\tsetEffectiveSelectedIdsRef.current(moved.map((i) => i.id));\n\t\t}, []);\n\n\t\tconst duplicateIds = useCallback((ids: readonly string[]) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change || ids.length === 0) return;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst selected = ids\n\t\t\t\t.map((id) => list.find((i) => i.id === id))\n\t\t\t\t.filter((x): x is VectorSceneItem => x != null);\n\t\t\tconst clones = cloneVectorSceneItemsWithNewIds(selected);\n\t\t\tconst moved = clones.map((it) =>\n\t\t\t\tmoveItemByDelta(it, PASTE_OFFSET_WORLD, PASTE_OFFSET_WORLD),\n\t\t\t);\n\t\t\tchange([...list, ...moved]);\n\t\t\tsetEffectiveSelectedIdsRef.current(moved.map((i) => i.id));\n\t\t}, []);\n\n\t\tconst deleteIds = useCallback((ids: readonly string[]) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change || ids.length === 0) return;\n\t\t\tconst idSet = new Set(ids);\n\t\t\tchange(itemsRef.current.filter((i) => !idSet.has(i.id)));\n\t\t\tsetEffectiveSelectedIdsRef.current([]);\n\t\t}, []);\n\n\t\tconst cutIds = useCallback(\n\t\t\t(ids: readonly string[]) => {\n\t\t\t\tcopyIdsToInternalClipboard(ids);\n\t\t\t\tdeleteIds(ids);\n\t\t\t},\n\t\t\t[copyIdsToInternalClipboard, deleteIds],\n\t\t);\n\n\t\tconst setLockedOnIds = useCallback((ids: readonly string[], locked: boolean) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change || ids.length === 0) return;\n\t\t\tconst idSet = new Set(ids);\n\t\t\tchange(\n\t\t\t\titemsRef.current.map((it) => (idSet.has(it.id) ? { ...it, locked } : it)),\n\t\t\t);\n\t\t}, []);\n\n\t\tconst reorderIds = useCallback(\n\t\t\t(ids: readonly string[], direction: ReorderDirection) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change || ids.length === 0) return;\n\t\t\t\tconst next = reorderItemsByIds(itemsRef.current, ids, direction);\n\t\t\t\tchange(next);\n\t\t\t\tsetEffectiveSelectedIdsRef.current([...ids]);\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst onKeyDown = useCallback(\n\t\t\t(e: KeyboardEvent<HTMLDivElement>) => {\n\t\t\t\tconst t = e.target;\n\t\t\t\tif (\n\t\t\t\t\tt instanceof HTMLTextAreaElement ||\n\t\t\t\t\tt instanceof HTMLInputElement ||\n\t\t\t\t\t(t instanceof HTMLElement && t.isContentEditable)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (editingTextIdRef.current) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst camera = cameraRef.current;\n\t\t\t\tconst el = sceneContainerRef.current;\n\t\t\t\tif (!camera || !el) return;\n\n\t\t\t\tif (interactive && onItemsChangeRef.current) {\n\t\t\t\t\tconst mod = e.ctrlKey || e.metaKey;\n\t\t\t\t\tif (mod && e.key === \"c\") {\n\t\t\t\t\t\tconst ids = effectiveSelectedIdsRef.current;\n\t\t\t\t\t\tif (ids.length > 0) {\n\t\t\t\t\t\t\tcopyIdsToInternalClipboard(ids);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (mod && e.key === \"v\") {\n\t\t\t\t\t\tif (clipboardRef.current?.length) {\n\t\t\t\t\t\t\tpasteFromInternalClipboard();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (mod && e.key === \"z\") {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\tredo();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tundo();\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (mod && e.key === \"Z\") {\n\t\t\t\t\t\tredo();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (e.key === \"Delete\" || e.key === \"Backspace\") {\n\t\t\t\t\t\tconst ids = effectiveSelectedIdsRef.current;\n\t\t\t\t\t\tif (ids.length > 0) {\n\t\t\t\t\t\t\tdeleteIds(ids);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst step = 40 / camera.zoom;\n\t\t\t\tlet handled = false;\n\t\t\t\tif (e.key === \"ArrowLeft\") {\n\t\t\t\t\tcamera.x += step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\t\t\tcamera.x -= step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\t\t\tcamera.y += step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"ArrowDown\") {\n\t\t\t\t\tcamera.y -= step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"+\" || e.key === \"=\") {\n\t\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\t\tcamera.setZoom(camera.zoom * VIEWPORT_ZOOM_STEP, {\n\t\t\t\t\t\tx: rect.width / 2,\n\t\t\t\t\t\ty: rect.height / 2,\n\t\t\t\t\t});\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"-\" || e.key === \"_\") {\n\t\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\t\tcamera.setZoom(camera.zoom / VIEWPORT_ZOOM_STEP, {\n\t\t\t\t\t\tx: rect.width / 2,\n\t\t\t\t\t\ty: rect.height / 2,\n\t\t\t\t\t});\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"0\" && (e.metaKey || e.ctrlKey)) {\n\t\t\t\t\tcamera.zoom = 1;\n\t\t\t\t\tcamera.x = 0;\n\t\t\t\t\tcamera.y = 0;\n\t\t\t\t\thandled = true;\n\t\t\t\t}\n\n\t\t\t\tif (handled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\trenderFrame();\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\trenderFrame,\n\t\t\t\tinteractive,\n\t\t\t\tcopyIdsToInternalClipboard,\n\t\t\t\tpasteFromInternalClipboard,\n\t\t\t\tdeleteIds,\n\t\t\t\tundo,\n\t\t\t\tredo,\n\t\t\t],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst el = wrapperRef.current;\n\t\t\tif (!el) return;\n\t\t\tel.tabIndex = 0;\n\n\t\t\t// Inject skeleton animation keyframe once\n\t\t\tif (!document.getElementById(\"canvu-skeleton-keyframe\")) {\n\t\t\t\tconst style = document.createElement(\"style\");\n\t\t\t\tstyle.id = \"canvu-skeleton-keyframe\";\n\t\t\t\tstyle.textContent =\n\t\t\t\t\t\"@keyframes canvu-pulse { 0%,100% { opacity: 0.3 } 50% { opacity: 0.7 } }\";\n\t\t\t\tdocument.head.appendChild(style);\n\t\t\t}\n\t\t\tif (!document.getElementById(\"canvu-pen-active-ui-block\")) {\n\t\t\t\tconst style = document.createElement(\"style\");\n\t\t\t\tstyle.id = \"canvu-pen-active-ui-block\";\n\t\t\t\tstyle.textContent = CANVU_PEN_ACTIVE_UI_BLOCK_CSS;\n\t\t\t\tdocument.head.appendChild(style);\n\t\t\t}\n\n\t\t\tconst focusOnPointerDown = (e: PointerEvent) => {\n\t\t\t\tconst t = e.target;\n\t\t\t\tif (\n\t\t\t\t\tt instanceof HTMLTextAreaElement ||\n\t\t\t\t\tt instanceof HTMLInputElement ||\n\t\t\t\t\t(t instanceof HTMLElement && t.isContentEditable)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tel.focus({ preventScroll: true });\n\t\t\t};\n\t\t\tel.addEventListener(\"pointerdown\", focusOnPointerDown);\n\n\t\t\tconst ro = new ResizeObserver((entries) => {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tconst { inlineSize, blockSize } = entry.borderBoxSize[0] ?? {};\n\t\t\t\t\tif (inlineSize && blockSize) {\n\t\t\t\t\t\tviewportSizeRef.current = {\n\t\t\t\t\t\t\twidth: inlineSize,\n\t\t\t\t\t\t\theight: blockSize,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tro.observe(el);\n\n\t\t\treturn () => {\n\t\t\t\tel.removeEventListener(\"pointerdown\", focusOnPointerDown);\n\t\t\t\tro.disconnect();\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tconst root = wrapperRef.current;\n\t\t\tif (!root) return;\n\t\t\tconst surface =\n\t\t\t\t(root.closest(\n\t\t\t\t\t'[data-slot=\"vector-canvas-viewport-surface\"]',\n\t\t\t\t) as HTMLElement | null) ?? root;\n\t\t\tconst activePenPointerIds = new Set<number>();\n\t\t\tconst isInteractiveUiTarget = (target: EventTarget | null): boolean => {\n\t\t\t\tif (!(target instanceof HTMLElement)) return false;\n\t\t\t\tif (target.closest('[data-slot=\"shape-context-menu\"]')) return true;\n\t\t\t\tconst ui = target.closest(\n\t\t\t\t\t[\n\t\t\t\t\t\t'[data-slot=\"vector-canvas-toolbar\"]',\n\t\t\t\t\t\t'[data-slot=\"canvu-plugin-layer\"]',\n\t\t\t\t\t\t'[data-slot=\"vector-selection-inspector\"]',\n\t\t\t\t\t\t'[data-slot=\"zoom-minimap-panel\"]',\n\t\t\t\t\t\t'[data-slot=\"text-edit-overlay\"]',\n\t\t\t\t\t\t\".vector-toolbar-overflow-panel\",\n\t\t\t\t\t].join(\", \"),\n\t\t\t\t);\n\t\t\t\tif (!ui) return false;\n\t\t\t\treturn surface.contains(ui);\n\t\t\t};\n\t\t\tconst syncPenActive = () => {\n\t\t\t\tconst active = activePenPointerIds.size > 0;\n\t\t\t\tsurface.toggleAttribute(\"data-canvu-pen-active\", active);\n\t\t\t\tdocument.body.toggleAttribute(\"data-canvu-pen-active\", active);\n\t\t\t};\n\t\t\tconst onPointerDownCapture = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"pen\") return;\n\t\t\t\tpenDetectedRef.current = true;\n\t\t\t\tlastPenPointerDownAtRef.current = performance.now();\n\t\t\t\tactivePenPointerIds.add(e.pointerId);\n\t\t\t\tsyncPenActive();\n\t\t\t};\n\t\t\tconst suppressTouchUiEvent = (e: Event) => {\n\t\t\t\tif (!penDetectedRef.current) return;\n\t\t\t\tif (!isInteractiveUiTarget(e.target)) return;\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t};\n\t\t\tconst onTouchPointerCapture = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"touch\") return;\n\t\t\t\tsuppressTouchUiEvent(e);\n\t\t\t};\n\t\t\tconst onPointerEndCapture = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"pen\") return;\n\t\t\t\tactivePenPointerIds.delete(e.pointerId);\n\t\t\t\tsyncPenActive();\n\t\t\t};\n\t\t\tsurface.addEventListener(\"pointerdown\", onPointerDownCapture, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\tsurface.addEventListener(\"pointerup\", onPointerEndCapture, { capture: true });\n\t\t\tsurface.addEventListener(\"pointercancel\", onPointerEndCapture, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"pointerdown\", onTouchPointerCapture, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchstart\", suppressTouchUiEvent, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchmove\", suppressTouchUiEvent, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"selectstart\", suppressTouchUiEvent, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tsurface.removeEventListener(\"pointerdown\", onPointerDownCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tsurface.removeEventListener(\"pointerup\", onPointerEndCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tsurface.removeEventListener(\"pointercancel\", onPointerEndCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"pointerdown\", onTouchPointerCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchstart\", suppressTouchUiEvent, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchmove\", suppressTouchUiEvent, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"selectstart\", suppressTouchUiEvent, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tsurface.removeAttribute(\"data-canvu-pen-active\");\n\t\t\t\tdocument.body.removeAttribute(\"data-canvu-pen-active\");\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tif (!el) return;\n\t\t\tif (interactive) return;\n\n\t\t\tconst onPointerDownForTools = (e: PointerEvent) => {\n\t\t\t\tif (e.button !== 0) return;\n\t\t\t\tif (toolIdRef.current === \"hand\") return;\n\t\t\t\tconst cb = onWorldPointerDownRef.current;\n\t\t\t\tif (!cb) return;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\tconst { worldX, worldY } = cam.screenToWorld(\n\t\t\t\t\te.clientX - rect.left,\n\t\t\t\t\te.clientY - rect.top,\n\t\t\t\t);\n\t\t\t\tcb({\n\t\t\t\t\tworldX,\n\t\t\t\t\tworldY,\n\t\t\t\t\ttoolId: toolIdRef.current,\n\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tel.addEventListener(\"pointerdown\", onPointerDownForTools);\n\t\t\treturn () => el.removeEventListener(\"pointerdown\", onPointerDownForTools);\n\t\t}, [interactive]);\n\n\t\tconst screenToWorld = useCallback((clientX: number, clientY: number) => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!el || !cam) return { worldX: 0, worldY: 0 };\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\treturn cam.screenToWorld(clientX - rect.left, clientY - rect.top);\n\t\t}, []);\n\n\t\tconst handleOverlayContextMenu = useCallback(\n\t\t\t(e: MouseEvent<HTMLDivElement>) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (toolIdRef.current !== \"select\") return;\n\t\t\t\te.preventDefault();\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\tconst hit = hitTestWorldPoint(resolvedItemsRef.current, worldX, worldY, {\n\t\t\t\t\tlineHitWorld,\n\t\t\t\t\tignoreLocked: true,\n\t\t\t\t});\n\t\t\t\tif (!hit) {\n\t\t\t\t\tsetContextMenu(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cur = effectiveSelectedIdsRef.current;\n\t\t\t\tlet nextIds: string[];\n\t\t\t\tif (!cur.includes(hit.id)) {\n\t\t\t\t\tnextIds = e.shiftKey ? [...cur, hit.id] : [hit.id];\n\t\t\t\t\tsetEffectiveSelectedIdsRef.current(nextIds);\n\t\t\t\t} else {\n\t\t\t\t\tnextIds = cur;\n\t\t\t\t}\n\t\t\t\tsetContextMenu({\n\t\t\t\t\tx: e.clientX,\n\t\t\t\t\ty: e.clientY,\n\t\t\t\t\titemIds: nextIds,\n\t\t\t\t});\n\t\t\t},\n\t\t\t[screenToWorld],\n\t\t);\n\n\t\tconst viewportHandle = useMemo<VectorViewportHandle>(\n\t\t\t() => ({\n\t\t\t\tgetCamera: () => cameraRef.current,\n\t\t\t\trequestRender: () => {\n\t\t\t\t\trenderFrame();\n\t\t\t\t},\n\t\t\t\tgetViewportSize: () => {\n\t\t\t\t\tconst el = sceneContainerRef.current;\n\t\t\t\t\tif (!el) {\n\t\t\t\t\t\treturn { width: 0, height: 0 };\n\t\t\t\t\t}\n\t\t\t\t\treturn { width: el.clientWidth, height: el.clientHeight };\n\t\t\t\t},\n\t\t\t\tfitWorldRect: (worldRect, options) => {\n\t\t\t\t\tconst camera = cameraRef.current;\n\t\t\t\t\tconst el = sceneContainerRef.current;\n\t\t\t\t\tif (!camera || !el) return;\n\t\t\t\t\tconst w = el.clientWidth;\n\t\t\t\t\tconst h = el.clientHeight;\n\t\t\t\t\tfitCameraToWorldRect(camera, w, h, worldRect, options?.padding ?? 0.08);\n\t\t\t\t\trenderFrame();\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[renderFrame],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tpluginViewportRef.current = viewportHandle;\n\t\t\treturn () => {\n\t\t\t\tif (pluginViewportRef.current === viewportHandle) {\n\t\t\t\t\tpluginViewportRef.current = null;\n\t\t\t\t}\n\t\t\t};\n\t\t}, [viewportHandle]);\n\n\t\tuseImperativeHandle(ref, () => viewportHandle, [viewportHandle]);\n\n\t\tconst handleZoomInClick = useCallback(() => {\n\t\t\tconst camera = cameraRef.current;\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tif (!camera || !el) return;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tcamera.setZoom(camera.zoom * VIEWPORT_ZOOM_STEP, {\n\t\t\t\tx: rect.width / 2,\n\t\t\t\ty: rect.height / 2,\n\t\t\t});\n\t\t\trenderFrame();\n\t\t}, [renderFrame]);\n\n\t\tconst handleZoomOutClick = useCallback(() => {\n\t\t\tconst camera = cameraRef.current;\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tif (!camera || !el) return;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tcamera.setZoom(camera.zoom / VIEWPORT_ZOOM_STEP, {\n\t\t\t\tx: rect.width / 2,\n\t\t\t\ty: rect.height / 2,\n\t\t\t});\n\t\t\trenderFrame();\n\t\t}, [renderFrame]);\n\n\t\tuseEffect(() => {\n\t\t\tif (toolId === \"marker\") {\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\t...strokeStyleRef.current,\n\t\t\t\t\t...MARKER_TOOL_STYLE,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst current = strokeStyleRef.current;\n\t\t\tif (isDefaultMarkerToolStyle(current)) {\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\tstroke: DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\t\tstrokeWidth: toolId === \"draw\" ? 3 : DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetCurrentStrokeStyle({\n\t\t\t\tstroke: current.stroke,\n\t\t\t\tstrokeWidth: toolId === \"draw\" ? 3 : current.strokeWidth,\n\t\t\t});\n\t\t}, [setCurrentStrokeStyle, toolId]);\n\n\t\tuseEffect(() => {\n\t\t\tconst primaryId = effectiveSelectedIds[0];\n\t\t\tif (primaryId == null) return;\n\t\t\tconst it = items.find((i) => i.id === primaryId);\n\t\t\tif (!it || it.locked) return;\n\t\t\tif (it.toolKind === \"image\") return;\n\t\t\tconst next: StrokeStyle = {\n\t\t\t\tstroke: it.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\tstrokeWidth: it.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t};\n\t\t\tif (it.strokeOpacity != null) {\n\t\t\t\tnext.strokeOpacity = it.strokeOpacity;\n\t\t\t}\n\t\t\tsetCurrentStrokeStyle(next);\n\t\t}, [effectiveSelectedIds, items, setCurrentStrokeStyle]);\n\n\t\tconst handleSelectionStyleChange = useCallback(\n\t\t\t(patch: { stroke: string; strokeWidth: number; strokeOpacity?: number }) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst ids = effectiveSelectedIdsRef.current;\n\t\t\t\tif (ids.length === 0) return;\n\t\t\t\tlet nextList: VectorSceneItem[] = [...itemsRef.current];\n\t\t\t\tfor (const id of ids) {\n\t\t\t\t\tconst it = nextList.find((i) => i.id === id);\n\t\t\t\t\tif (!it || it.locked) continue;\n\t\t\t\t\tconst next = applyStrokeToItem(it, patch);\n\t\t\t\t\tconst out =\n\t\t\t\t\t\teditingTextIdRef.current === id && next.toolKind === \"text\"\n\t\t\t\t\t\t\t? applyTextDraftWhileEditing(next, draftTextRef.current)\n\t\t\t\t\t\t\t: next;\n\t\t\t\t\tnextList = replaceItem(nextList, id, out);\n\t\t\t\t}\n\t\t\t\tchange(nextList);\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\t...strokeStyleRef.current,\n\t\t\t\t\tstroke: patch.stroke,\n\t\t\t\t\tstrokeWidth: patch.strokeWidth,\n\t\t\t\t\t...(patch.strokeOpacity != null\n\t\t\t\t\t\t? { strokeOpacity: patch.strokeOpacity }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t},\n\t\t\t[setCurrentStrokeStyle],\n\t\t);\n\n\t\tconst handleActiveToolStyleChange = useCallback(\n\t\t\t(patch: { stroke: string; strokeWidth: number; strokeOpacity?: number }) => {\n\t\t\t\tconst current = strokeStyleRef.current;\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\tstroke: patch.stroke,\n\t\t\t\t\tstrokeWidth: patch.strokeWidth,\n\t\t\t\t\t...(patch.strokeOpacity != null\n\t\t\t\t\t\t? { strokeOpacity: patch.strokeOpacity }\n\t\t\t\t\t\t: current.strokeOpacity != null\n\t\t\t\t\t\t\t? { strokeOpacity: current.strokeOpacity }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t},\n\t\t\t[setCurrentStrokeStyle],\n\t\t);\n\n\t\tconst commitTextEdit = useCallback(() => {\n\t\t\tconst id = editingTextIdRef.current;\n\t\t\tif (!id) return;\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change) return;\n\t\t\tconst text = draftTextRef.current;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst it = list.find((i) => i.id === id);\n\t\t\tif (!it || it.toolKind !== \"text\") {\n\t\t\t\tsetEditingTextId(null);\n\t\t\t\teditingTextSnapshotRef.current = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst next = rebuildItemSvg({ ...it, text });\n\t\t\tchange(replaceItem(list, id, next));\n\t\t\teditingTextSnapshotRef.current = null;\n\t\t\tsetEditingTextId(null);\n\t\t}, []);\n\n\t\tconst handleDraftTextChange = useCallback((v: string) => {\n\t\t\tsetDraftText(v);\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tconst editId = editingTextIdRef.current;\n\t\t\tif (!change || !editId) return;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst it = list.find((i) => i.id === editId);\n\t\t\tif (!it || it.toolKind !== \"text\") return;\n\t\t\tchange(replaceItem(list, editId, applyTextDraftWhileEditing(it, v)));\n\t\t}, []);\n\n\t\t/** End inline text edit when switching to a tool that places on the canvas (draw, shapes…). */\n\t\tuseEffect(() => {\n\t\t\tif (!editingTextId) return;\n\t\t\tif (toolId === \"select\" || toolId === \"text\") return;\n\t\t\tcommitTextEdit();\n\t\t}, [toolId, editingTextId, commitTextEdit]);\n\n\t\tconst cancelTextEdit = useCallback(() => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tconst id = editingTextIdRef.current;\n\t\t\tconst snap = editingTextSnapshotRef.current;\n\t\t\tif (change && id && snap) {\n\t\t\t\tchange(replaceItem(itemsRef.current, id, snap));\n\t\t\t}\n\t\t\teditingTextSnapshotRef.current = null;\n\t\t\tsetEditingTextId(null);\n\t\t}, []);\n\n\t\tconst placeImageFilesAtWorld = useCallback(\n\t\t\tasync (files: File[], worldX: number, worldY: number) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change || files.length === 0) return;\n\t\t\t\tconst store = imageStoreRef.current;\n\t\t\t\tif (!store) return;\n\t\t\t\tconst { buildRasterImageChildrenSvg } = await import(\n\t\t\t\t\t\"../scene/shape-builders\"\n\t\t\t\t);\n\t\t\t\tconst newItems: VectorSceneItem[] = [];\n\t\t\t\tconst gapWorld = 16;\n\t\t\t\tconst stepWorld = 48;\n\t\t\t\tlet placed = 0;\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (file.type === \"application/pdf\") {\n\t\t\t\t\t\t\t// Estimate A4 at 1.5x scale: 1241x1754\n\t\t\t\t\t\t\tconst estW = 1241;\n\t\t\t\t\t\t\tconst estH = 1754;\n\t\t\t\t\t\t\tconst estPages = 10;\n\t\t\t\t\t\t\tconst skels: {\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tx: number;\n\t\t\t\t\t\t\t\ty: number;\n\t\t\t\t\t\t\t\twidth: number;\n\t\t\t\t\t\t\t\theight: number;\n\t\t\t\t\t\t\t}[] = [];\n\t\t\t\t\t\t\tconst skelIds: string[] = [];\n\t\t\t\t\t\t\tfor (let i = 0; i < estPages; i++) {\n\t\t\t\t\t\t\t\tconst id = `skeleton-${skeletonSeqRef.current++}`;\n\t\t\t\t\t\t\t\tskelIds.push(id);\n\t\t\t\t\t\t\t\tskels.push({\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tx: worldX - estW / 2,\n\t\t\t\t\t\t\t\t\ty: worldY - estH / 2 + i * (estH + gapWorld),\n\t\t\t\t\t\t\t\t\twidth: estW,\n\t\t\t\t\t\t\t\t\theight: estH,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetLoadingSkeletons(skels);\n\n\t\t\t\t\t\t\tconst pages = await loadPdfToStore(file, store);\n\t\t\t\t\t\t\tsetLoadingSkeletons([]);\n\t\t\t\t\t\t\tfor (const page of pages) {\n\t\t\t\t\t\t\t\tconst { blobId, width, height } = page;\n\t\t\t\t\t\t\t\tconst fullUrl = await createBlobUrlFromStore(store, blobId);\n\t\t\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\t\t\tconst bounds = {\n\t\t\t\t\t\t\t\t\tx: worldX - width / 2,\n\t\t\t\t\t\t\t\t\ty: worldY - height / 2 + placed * (height + gapWorld),\n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tnewItems.push({\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tx: bounds.x,\n\t\t\t\t\t\t\t\t\ty: bounds.y,\n\t\t\t\t\t\t\t\t\tbounds: { ...bounds },\n\t\t\t\t\t\t\t\t\ttoolKind: \"image\",\n\t\t\t\t\t\t\t\t\timageBlobId: blobId,\n\t\t\t\t\t\t\t\t\timageRasterHref: fullUrl ?? undefined,\n\t\t\t\t\t\t\t\t\timageIntrinsicSize: { width, height },\n\t\t\t\t\t\t\t\t\tchildrenSvg: fullUrl\n\t\t\t\t\t\t\t\t\t\t? buildRasterImageChildrenSvg(fullUrl, { width, height }, bounds)\n\t\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t\t\t} as VectorSceneItem);\n\t\t\t\t\t\t\t\tplaced++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (file.type.startsWith(\"image/\")) {\n\t\t\t\t\t\t\tconst { blobId, thumbnailBlobId, width, height } =\n\t\t\t\t\t\t\t\tawait loadImageToStore(file, store);\n\t\t\t\t\t\t\tconst fullUrl = await createBlobUrlFromStore(store, blobId);\n\t\t\t\t\t\t\tconst thumbBlob = await store.getThumbnail(thumbnailBlobId);\n\t\t\t\t\t\t\tconst thumbnailHref = thumbBlob\n\t\t\t\t\t\t\t\t? URL.createObjectURL(thumbBlob)\n\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\t\tconst ox = (placed % 8) * stepWorld;\n\t\t\t\t\t\t\tconst oy = Math.floor(placed / 8) * stepWorld;\n\t\t\t\t\t\t\tconst bounds = {\n\t\t\t\t\t\t\t\tx: worldX - width / 2 + ox,\n\t\t\t\t\t\t\t\ty: worldY - height / 2 + oy,\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst href = thumbnailHref ?? fullUrl;\n\t\t\t\t\t\t\tnewItems.push({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tx: bounds.x,\n\t\t\t\t\t\t\t\ty: bounds.y,\n\t\t\t\t\t\t\t\tbounds: { ...bounds },\n\t\t\t\t\t\t\t\ttoolKind: \"image\",\n\t\t\t\t\t\t\t\timageBlobId: blobId,\n\t\t\t\t\t\t\t\timageThumbnailBlobId: thumbnailBlobId,\n\t\t\t\t\t\t\t\timageRasterHref: fullUrl ?? undefined,\n\t\t\t\t\t\t\t\timageThumbnailHref: thumbnailHref ?? undefined,\n\t\t\t\t\t\t\t\timageIntrinsicSize: { width, height },\n\t\t\t\t\t\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\t\t\t\t\t\thref ?? \"\",\n\t\t\t\t\t\t\t\t\t{ width, height },\n\t\t\t\t\t\t\t\t\tbounds,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t} as VectorSceneItem);\n\t\t\t\t\t\t\tplaced++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconsole.error(\"Failed to add file:\", err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newItems.length === 0) return;\n\t\t\t\tchange([...itemsRef.current, ...newItems]);\n\t\t\t\tsetEffectiveSelectedIdsRef.current(newItems.map((it) => it.id));\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t\tconst handleImageFileChange = useCallback(\n\t\t\tasync (e: ChangeEvent<HTMLInputElement>) => {\n\t\t\t\tconst file = e.target.files?.[0];\n\t\t\t\te.target.value = \"\";\n\t\t\t\tconst pending = pendingImagePlacementRef.current;\n\t\t\t\tpendingImagePlacementRef.current = null;\n\t\t\t\tif (!file || !pending) return;\n\t\t\t\tawait placeImageFilesAtWorld([file], pending.worldX, pending.worldY);\n\t\t\t},\n\t\t\t[placeImageFilesAtWorld],\n\t\t);\n\t\tconst openImagePickerAtViewportCenter = useCallback(() => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tconst cam = cameraRef.current;\n\t\t\tconst input = imageInputRef.current;\n\t\t\tif (!el || !cam || !input) return;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tconst center = cam.screenToWorld(rect.width / 2, rect.height / 2);\n\t\t\tpendingImagePlacementRef.current = {\n\t\t\t\tworldX: center.worldX,\n\t\t\t\tworldY: center.worldY,\n\t\t\t};\n\t\t\tif (typeof input.showPicker === \"function\") {\n\t\t\t\tinput.showPicker();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tinput.click();\n\t\t}, []);\n\t\tuseEffect(() => {\n\t\t\tconst prevToolId = lastToolIdRef.current;\n\t\t\tif (\n\t\t\t\ttoolId !== \"image\" ||\n\t\t\t\tprevToolId === \"image\" ||\n\t\t\t\t!interactive ||\n\t\t\t\tonItemsChange == null\n\t\t\t) {\n\t\t\t\tlastToolIdRef.current = toolId;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\topenImagePickerAtViewportCenter();\n\t\t\trequestAutoResetTool(\"image\");\n\t\t\tlastToolIdRef.current = toolId;\n\t\t}, [\n\t\t\tinteractive,\n\t\t\tonItemsChange,\n\t\t\topenImagePickerAtViewportCenter,\n\t\t\trequestAutoResetTool,\n\t\t\ttoolId,\n\t\t]);\n\n\t\tconst handleWrapperDragOver = useCallback((e: DragEvent<HTMLDivElement>) => {\n\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\tif (!Array.from(e.dataTransfer.types).includes(\"Files\")) return;\n\t\t\te.preventDefault();\n\t\t\te.dataTransfer.dropEffect = \"copy\";\n\t\t}, []);\n\n\t\tconst handleWrapperDrop = useCallback(\n\t\t\tasync (e: DragEvent<HTMLDivElement>) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tconst fl = e.dataTransfer.files;\n\t\t\t\tif (!fl?.length) return;\n\t\t\t\te.preventDefault();\n\t\t\t\tconst files = Array.from(fl).filter(\n\t\t\t\t\t(f) => f.type.startsWith(\"image/\") || f.type === \"application/pdf\",\n\t\t\t\t);\n\t\t\t\tif (files.length === 0) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tawait placeImageFilesAtWorld(files, worldX, worldY);\n\t\t\t},\n\t\t\t[screenToWorld, placeImageFilesAtWorld],\n\t\t);\n\n\t\tconst handleOverlayDoubleClick = useCallback(\n\t\t\t(e: MouseEvent<HTMLDivElement>) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (toolIdRef.current !== \"select\") return;\n\t\t\t\te.preventDefault();\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\tconst hit = hitTestWorldPoint(resolvedItemsRef.current, worldX, worldY, {\n\t\t\t\t\tlineHitWorld,\n\t\t\t\t\tignoreLocked: true,\n\t\t\t\t});\n\t\t\t\tif (hit?.toolKind === \"text\") {\n\t\t\t\t\tconst draft = hit.text ?? \"\";\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tconst list = itemsRef.current;\n\t\t\t\t\tconst it = list.find((i) => i.id === hit.id);\n\t\t\t\t\teditingTextSnapshotRef.current =\n\t\t\t\t\t\tit != null\n\t\t\t\t\t\t\t? { ...it, bounds: { ...it.bounds } }\n\t\t\t\t\t\t\t: { ...hit, bounds: { ...hit.bounds } };\n\t\t\t\t\tsetEffectiveSelectedIdsRef.current([hit.id]);\n\t\t\t\t\tsetDraftText(draft);\n\t\t\t\t\tsetEditingTextId(hit.id);\n\t\t\t\t\tif (change && it && it.toolKind === \"text\") {\n\t\t\t\t\t\tchange(replaceItem(list, hit.id, applyTextDraftWhileEditing(it, draft)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t[screenToWorld],\n\t\t);\n\n\t\tconst handleOverlayPointerDown = useCallback(\n\t\t\t(e: ReactPointerEvent<HTMLDivElement>) => {\n\t\t\t\tlet currentDragState = dragStateRef.current;\n\t\t\t\tlet activePointerId = activeInteractionPointerIdRef.current;\n\t\t\t\tif (e.pointerType === \"pen\" || e.pointerType === \"touch\") {\n\t\t\t\t\tdebugApplePencilPointer(\"pointerdown\", {\n\t\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tpressure: e.pointerType === \"pen\" ? e.pressure : undefined,\n\t\t\t\t\t\tactivePointerId,\n\t\t\t\t\t\tdragKind: currentDragState.kind,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\te.pointerType === \"pen\" &&\n\t\t\t\t\tcurrentDragState.kind === \"stroke\" &&\n\t\t\t\t\tcurrentDragState.pointerType === \"pen\"\n\t\t\t\t) {\n\t\t\t\t\tdebugApplePencilPointer(\"pen-reentry\", {\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tpreviousPointerId: activePointerId,\n\t\t\t\t\t\tpreviousPoints: currentDragState.points.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(currentDragState);\n\t\t\t\t\tcurrentDragState = dragStateRef.current;\n\t\t\t\t\tactivePointerId = activeInteractionPointerIdRef.current;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcurrentDragState.kind !== \"idle\" &&\n\t\t\t\t\tactivePointerId != null &&\n\t\t\t\t\tactivePointerId !== e.pointerId\n\t\t\t\t) {\n\t\t\t\t\tif (dragStateRef.current.kind !== \"idle\") {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currentDragState.kind !== \"idle\" && activePointerId == null) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (e.button !== 0) return;\n\t\t\t\tif (editingTextIdRef.current) return;\n\n\t\t\t\twrapperRef.current?.focus({ preventScroll: true });\n\t\t\t\tsetContextMenu(null);\n\n\t\t\t\tconst tool = toolIdRef.current;\n\t\t\t\tif (tool === \"hand\") return;\n\t\t\t\tif (\n\t\t\t\t\tapplePencilNav &&\n\t\t\t\t\te.pointerType === \"pen\" &&\n\t\t\t\t\tnavigator.maxTouchPoints > 0 &&\n\t\t\t\t\t(tool === \"draw\" || tool === \"marker\")\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\tconst handleRadiusWorld = 6 / cam.zoom;\n\n\t\t\t\tconst canonical = itemsRef.current;\n\t\t\t\tconst resolved = resolvedItemsRef.current;\n\n\t\t\t\tconst bakedSnapshot = (id: string): VectorSceneItem | undefined => {\n\t\t\t\t\tconst raw = canonical.find((i) => i.id === id);\n\t\t\t\t\tif (!raw) return undefined;\n\t\t\t\t\treturn raw.toolKind === \"arrow\" && raw.arrowBind\n\t\t\t\t\t\t? bakeArrowItemToAbsolute(raw, canonical)\n\t\t\t\t\t\t: raw;\n\t\t\t\t};\n\n\t\t\t\tif (tool === \"eraser\") {\n\t\t\t\t\tdragStateRef.current = { kind: \"erase\" };\n\t\t\t\t\teraserPreviewIdsRef.current = new Set();\n\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\tsetEraserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\t\tsetEraserActive(true);\n\t\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\t\tresolved,\n\t\t\t\t\t\tworldX,\n\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlineHitWorld,\n\t\t\t\t\t\t\tignoreLocked: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tif (toErase.length > 0) {\n\t\t\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\t\t\teraserPreviewIdsRef.current.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdsRef.current));\n\t\t\t\t\t}\n\t\t\t\t\tsetEffectiveSelectedIdsRef.current([]);\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (tool === \"select\") {\n\t\t\t\t\tconst cur = effectiveSelectedIdsRef.current;\n\t\t\t\t\tconst primaryId = cur.length === 1 ? cur[0] : undefined;\n\t\t\t\t\tconst selected =\n\t\t\t\t\t\tprimaryId != null ? resolved.find((i) => i.id === primaryId) : undefined;\n\t\t\t\t\tconst showHandles =\n\t\t\t\t\t\tselected &&\n\t\t\t\t\t\tcur.length === 1 &&\n\t\t\t\t\t\t!selected.locked &&\n\t\t\t\t\t\tsupportsResizeHandles(selected) &&\n\t\t\t\t\t\ttool === \"select\";\n\n\t\t\t\t\tif (showHandles && selected) {\n\t\t\t\t\t\tconst rb = normalizeRect(selected.bounds);\n\t\t\t\t\t\tconst rot = selected.rotation ?? 0;\n\t\t\t\t\t\tconst rotateOffsetWorld = 24 / cam.zoom;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thitTestRotateHandle(\n\t\t\t\t\t\t\t\trb,\n\t\t\t\t\t\t\t\trot,\n\t\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\t\thandleRadiusWorld,\n\t\t\t\t\t\t\t\trotateOffsetWorld,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst snapSpin = bakedSnapshot(selected.id);\n\t\t\t\t\t\t\tif (!snapSpin) return;\n\t\t\t\t\t\t\tconst pivot = itemPivotWorld(selected);\n\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\tkind: \"rotate\",\n\t\t\t\t\t\t\t\tid: selected.id,\n\t\t\t\t\t\t\t\tsnapshot: snapSpin,\n\t\t\t\t\t\t\t\tpivotWorld: pivot,\n\t\t\t\t\t\t\t\tstartPointerAngleRad: Math.atan2(worldY - pivot.y, worldX - pivot.x),\n\t\t\t\t\t\t\t\tstartRotation: selected.rotation ?? 0,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hb = hitTestResizeHandle(\n\t\t\t\t\t\t\trb,\n\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\thandleRadiusWorld,\n\t\t\t\t\t\t\trot,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (hb) {\n\t\t\t\t\t\t\tconst snapRs = bakedSnapshot(selected.id);\n\t\t\t\t\t\t\tif (!snapRs) return;\n\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\tkind: \"resize\",\n\t\t\t\t\t\t\t\tid: selected.id,\n\t\t\t\t\t\t\t\thandle: hb,\n\t\t\t\t\t\t\t\tsnapshot: snapRs,\n\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\tbounds: snapRs.bounds,\n\t\t\t\t\t\t\t\t\tline: snapRs.line,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hit = hitTestWorldPoint(resolved, worldX, worldY, {\n\t\t\t\t\t\tlineHitWorld,\n\t\t\t\t\t\tignoreLocked: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (hit) {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\tconst next = cur.includes(hit.id)\n\t\t\t\t\t\t\t\t? cur.filter((id) => id !== hit.id)\n\t\t\t\t\t\t\t\t: [...cur, hit.id];\n\t\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(next);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet idsToMove: string[];\n\t\t\t\t\t\tif (!cur.includes(hit.id)) {\n\t\t\t\t\t\t\tidsToMove = [hit.id];\n\t\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(idsToMove);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tidsToMove = [...cur];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\t\tfor (const id of idsToMove) {\n\t\t\t\t\t\t\tconst snap = bakedSnapshot(id);\n\t\t\t\t\t\t\tif (snap) {\n\t\t\t\t\t\t\t\tsnapshots[id] = snap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\tkind: \"move\",\n\t\t\t\t\t\t\tids: idsToMove,\n\t\t\t\t\t\t\tsnapshots,\n\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!e.shiftKey && cur.length > 0) {\n\t\t\t\t\t\tconst selectedArrowOrLine = cur\n\t\t\t\t\t\t\t.map((id) => resolved.find((it) => it.id === id))\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(it): it is VectorSceneItem =>\n\t\t\t\t\t\t\t\t\tit != null &&\n\t\t\t\t\t\t\t\t\t!it.locked &&\n\t\t\t\t\t\t\t\t\t(it.toolKind === \"line\" || it.toolKind === \"arrow\"),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tselectedArrowOrLine.some((it) =>\n\t\t\t\t\t\t\t\tpointInSelectedItemBounds(it, worldX, worldY),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\t\t\tfor (const id of cur) {\n\t\t\t\t\t\t\t\tconst snap = bakedSnapshot(id);\n\t\t\t\t\t\t\t\tif (snap && !snap.locked) {\n\t\t\t\t\t\t\t\t\tsnapshots[id] = snap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (Object.keys(snapshots).length > 0) {\n\t\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\t\tkind: \"move\",\n\t\t\t\t\t\t\t\t\tids: Object.keys(snapshots),\n\t\t\t\t\t\t\t\t\tsnapshots,\n\t\t\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"marquee\",\n\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\tstartScreen: { x: e.clientX, y: e.clientY },\n\t\t\t\t\t\tshiftKey: e.shiftKey,\n\t\t\t\t\t\tselectionBefore: [...cur],\n\t\t\t\t\t};\n\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\tkind: \"marquee\",\n\t\t\t\t\t\trect: rectFromCorners(\n\t\t\t\t\t\t\t{ x: worldX, y: worldY },\n\t\t\t\t\t\t\t{ x: worldX, y: worldY },\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (tool === \"draw\" || tool === \"marker\" || tool === \"laser\") {\n\t\t\t\t\tconst startPoint = pointerSampleToWorldPoint(\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t\te.clientX,\n\t\t\t\t\t\te.clientY,\n\t\t\t\t\t\te.pointerType === \"pen\" ? e.pressure : undefined,\n\t\t\t\t\t);\n\t\t\t\t\tconst directPenStroke =\n\t\t\t\t\t\te.pointerType === \"pen\" && (tool === \"draw\" || tool === \"marker\");\n\t\t\t\t\tlet itemId: string | undefined;\n\t\t\t\t\tif (directPenStroke) {\n\t\t\t\t\t\titemId = createShapeId();\n\t\t\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\t\t\titemId,\n\t\t\t\t\t\t\t[startPoint],\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (item) {\n\t\t\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\t\t...(itemId ? { itemId } : {}),\n\t\t\t\t\t};\n\t\t\t\t\tif (tool === \"laser\") {\n\t\t\t\t\t\tsetLaserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t} else if (directPenStroke) {\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (tool === \"text\" || tool === \"image\") {\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"tap\",\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\tstartScreen: { x: e.clientX, y: e.clientY },\n\t\t\t\t\t};\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst cp = customPlacementRef.current;\n\t\t\t\tif (\n\t\t\t\t\ttool === \"rect\" ||\n\t\t\t\t\ttool === \"ellipse\" ||\n\t\t\t\t\ttool === \"line\" ||\n\t\t\t\t\ttool === \"arrow\" ||\n\t\t\t\t\t(cp && tool === cp.toolId)\n\t\t\t\t) {\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"place\",\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\tstartScreen: { x: e.clientX, y: e.clientY },\n\t\t\t\t\t};\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tapplePencilNav,\n\t\t\t\tcaptureInteractionPointer,\n\t\t\t\tfinalizeStrokeDragState,\n\t\t\t\trenderSceneWithLivePenStroke,\n\t\t\t\tscreenToWorld,\n\t\t\t],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (!interactive) return;\n\t\t\tconst el = interactionRootRef.current;\n\t\t\tif (!el) return;\n\n\t\t\tconst onNativePenPointerDown = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"pen\") return;\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (e.button !== 0) return;\n\t\t\t\tif (editingTextIdRef.current) return;\n\n\t\t\t\tconst tool = toolIdRef.current;\n\t\t\t\tif (tool !== \"draw\" && tool !== \"marker\") return;\n\t\t\t\tif (applePencilNav && navigator.maxTouchPoints > 0) return;\n\n\t\t\t\tconst currentDragState = dragStateRef.current;\n\t\t\t\tif (\n\t\t\t\t\tcurrentDragState.kind === \"stroke\" &&\n\t\t\t\t\tcurrentDragState.pointerType === \"pen\"\n\t\t\t\t) {\n\t\t\t\t\tdebugApplePencilPointer(\"native-pen-reentry\", {\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tpreviousPointerId: activeInteractionPointerIdRef.current,\n\t\t\t\t\t\tpreviousPoints: currentDragState.points.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(currentDragState);\n\t\t\t\t} else if (currentDragState.kind !== \"idle\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\twrapperRef.current?.focus({ preventScroll: true });\n\t\t\t\tsetContextMenu(null);\n\t\t\t\tconst startPoint = pointerSampleToWorldPoint(\n\t\t\t\t\tscreenToWorld,\n\t\t\t\t\te.clientX,\n\t\t\t\t\te.clientY,\n\t\t\t\t\te.pressure,\n\t\t\t\t);\n\t\t\t\tconst itemId = createShapeId();\n\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\titemId,\n\t\t\t\t\t[startPoint],\n\t\t\t\t\ttool,\n\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t);\n\t\t\t\tif (item) {\n\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t}\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\ttool,\n\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\titemId,\n\t\t\t\t};\n\t\t\t\tactiveInteractionPointerIdRef.current = e.pointerId;\n\t\t\t\tactiveInteractionPointerTargetRef.current = null;\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tdebugApplePencilPointer(\"native-pointerdown\", {\n\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\tpressure: e.pressure,\n\t\t\t\t\ttool,\n\t\t\t\t});\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t};\n\n\t\t\tel.addEventListener(\"pointerdown\", onNativePenPointerDown, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tel.removeEventListener(\"pointerdown\", onNativePenPointerDown, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t};\n\t\t}, [\n\t\t\tapplePencilNav,\n\t\t\tfinalizeStrokeDragState,\n\t\t\tinteractive,\n\t\t\trenderSceneWithLivePenStroke,\n\t\t\tscreenToWorld,\n\t\t]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!interactive) return;\n\t\t\tconst el = interactionRootRef.current;\n\t\t\tif (!el) return;\n\n\t\t\tconst findChangedTouch = (touches: TouchList): Touch | null => {\n\t\t\t\tconst activeTouchId = activeInteractionTouchIdRef.current;\n\t\t\t\tif (activeTouchId == null) return null;\n\t\t\t\tfor (let i = 0; i < touches.length; i += 1) {\n\t\t\t\t\tconst touch = touches.item(i);\n\t\t\t\t\tif (touch?.identifier === activeTouchId) return touch;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\n\t\t\tconst findStartTouch = (touches: TouchList): Touch | null => {\n\t\t\t\tfor (let i = 0; i < touches.length; i += 1) {\n\t\t\t\t\tconst touch = touches.item(i);\n\t\t\t\t\tif (!touch) continue;\n\t\t\t\t\tif (touchKind(touch) === \"direct\") continue;\n\t\t\t\t\tif (!applePencilNav || isLikelyStylusTouch(touch)) return touch;\n\t\t\t\t\tif (penDetectedRef.current && touchPressure(touch) != null) return touch;\n\t\t\t\t\tif (\n\t\t\t\t\t\tpenDetectedRef.current &&\n\t\t\t\t\t\tperformance.now() - lastPenPointerDownAtRef.current < 750\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn touch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\n\t\t\tconst stopTouchEvent = (ev: TouchEvent) => {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopImmediatePropagation();\n\t\t\t};\n\n\t\t\tconst onTouchStart = (ev: TouchEvent) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (editingTextIdRef.current) return;\n\t\t\t\tconst tool = toolIdRef.current;\n\t\t\t\tif (tool !== \"draw\" && tool !== \"marker\") return;\n\n\t\t\t\tconst touch = findStartTouch(ev.changedTouches);\n\t\t\t\tif (!touch) return;\n\n\t\t\t\tconst currentDragState = dragStateRef.current;\n\t\t\t\tif (\n\t\t\t\t\tcurrentDragState.kind === \"stroke\" &&\n\t\t\t\t\tcurrentDragState.pointerType === \"pen\"\n\t\t\t\t) {\n\t\t\t\t\tdebugApplePencilPointer(\"touch-pen-reentry\", {\n\t\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\t\tpreviousPoints: currentDragState.points.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(currentDragState);\n\t\t\t\t} else if (currentDragState.kind !== \"idle\") {\n\t\t\t\t\tstopTouchEvent(ev);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\twrapperRef.current?.focus({ preventScroll: true });\n\t\t\t\tsetContextMenu(null);\n\t\t\t\tpenDetectedRef.current = true;\n\n\t\t\t\tconst startPoint = pointerSampleToWorldPoint(\n\t\t\t\t\tscreenToWorld,\n\t\t\t\t\ttouch.clientX,\n\t\t\t\t\ttouch.clientY,\n\t\t\t\t\ttouchPressure(touch),\n\t\t\t\t);\n\t\t\t\tconst itemId = createShapeId();\n\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\titemId,\n\t\t\t\t\t[startPoint],\n\t\t\t\t\ttool,\n\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t);\n\t\t\t\tif (item) {\n\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t}\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\ttool,\n\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\tpointerType: \"pen\",\n\t\t\t\t\titemId,\n\t\t\t\t};\n\t\t\t\tactiveInteractionPointerIdRef.current = null;\n\t\t\t\tactiveInteractionPointerTargetRef.current = null;\n\t\t\t\tactiveInteractionTouchIdRef.current = touch.identifier;\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tdebugApplePencilPointer(\"touchstart-stroke\", {\n\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\ttouchType: touchKind(touch),\n\t\t\t\t\tforce: touchPressure(touch),\n\t\t\t\t\ttool,\n\t\t\t\t});\n\t\t\t\tstopTouchEvent(ev);\n\t\t\t};\n\n\t\t\tconst onTouchMove = (ev: TouchEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tif (st.kind !== \"stroke\") return;\n\t\t\t\tconst touch = findChangedTouch(ev.changedTouches);\n\t\t\t\tif (!touch) return;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\n\t\t\t\tconst interpolated = appendTouchToStrokePoints(\n\t\t\t\t\tst.points,\n\t\t\t\t\ttouch,\n\t\t\t\t\tcam.zoom,\n\t\t\t\t\tscreenToWorld,\n\t\t\t\t);\n\t\t\t\tst.points = interpolated;\n\t\t\t\tif (st.itemId && st.tool !== \"laser\") {\n\t\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\t\tst.itemId,\n\t\t\t\t\t\tinterpolated,\n\t\t\t\t\t\tst.tool,\n\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t);\n\t\t\t\t\tif (item) {\n\t\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t\t}\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t}\n\t\t\t\tdebugApplePencilPointer(\"touchmove-stroke\", {\n\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\tpoints: interpolated.length,\n\t\t\t\t\tforce: touchPressure(touch),\n\t\t\t\t});\n\t\t\t\tstopTouchEvent(ev);\n\t\t\t};\n\n\t\t\tconst onTouchEnd = (ev: TouchEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tif (st.kind !== \"stroke\") return;\n\t\t\t\tconst touch = findChangedTouch(ev.changedTouches);\n\t\t\t\tif (!touch) return;\n\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (cam) {\n\t\t\t\t\tconst completedPoints = appendTouchToStrokePoints(\n\t\t\t\t\t\tst.points,\n\t\t\t\t\t\ttouch,\n\t\t\t\t\t\tcam.zoom,\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t);\n\t\t\t\t\tst.points = completedPoints;\n\t\t\t\t}\n\t\t\t\tdebugApplePencilPointer(\"touchend-stroke\", {\n\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\tpoints: st.points.length,\n\t\t\t\t});\n\t\t\t\tfinalizeStrokeDragState(st);\n\t\t\t\tstopTouchEvent(ev);\n\t\t\t};\n\n\t\t\tel.addEventListener(\"touchstart\", onTouchStart, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchmove\", onTouchMove, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchend\", onTouchEnd, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchcancel\", onTouchEnd, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tel.removeEventListener(\"touchstart\", onTouchStart, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchmove\", onTouchMove, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchend\", onTouchEnd, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchcancel\", onTouchEnd, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t};\n\t\t}, [\n\t\t\tapplePencilNav,\n\t\t\tfinalizeStrokeDragState,\n\t\t\tinteractive,\n\t\t\trenderSceneWithLivePenStroke,\n\t\t\tscreenToWorld,\n\t\t]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!interactive) return;\n\n\t\t\tconst onMove = (ev: PointerEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam || st.kind === \"idle\") return;\n\t\t\t\tif (activeInteractionPointerIdRef.current !== ev.pointerId) return;\n\n\t\t\t\t/* Tap placement (draw/text/image): validate on pointerup only — early move\n\t\t\t\t * cancellation caused false negatives from tiny pointer jitter on trackpads. */\n\t\t\t\tif (st.kind === \"tap\") return;\n\n\t\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst raw = rectFromCorners(st.startWorld, { x: worldX, y: worldY });\n\t\t\t\t\tsetPlacementPreview({ kind: \"marquee\", rect: raw });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"stroke\") {\n\t\t\t\t\tif (ev.pointerType === \"pen\" || ev.pointerType === \"touch\") {\n\t\t\t\t\t\tdebugApplePencilPointer(\"pointermove\", {\n\t\t\t\t\t\t\tpointerType: ev.pointerType,\n\t\t\t\t\t\t\tpointerId: ev.pointerId,\n\t\t\t\t\t\t\tpointsBefore: st.points.length,\n\t\t\t\t\t\t\tpressure: ev.pointerType === \"pen\" ? ev.pressure : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst interpolated = appendPointerEventSamplesToStrokePoints(\n\t\t\t\t\t\tst.points,\n\t\t\t\t\t\tev,\n\t\t\t\t\t\tcam.zoom,\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t);\n\t\t\t\t\tst.points = interpolated;\n\t\t\t\t\tif (st.itemId && st.pointerType === \"pen\" && st.tool !== \"laser\") {\n\t\t\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\t\t\tst.itemId,\n\t\t\t\t\t\t\tinterpolated,\n\t\t\t\t\t\t\tst.tool,\n\t\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (item) {\n\t\t\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (st.tool === \"laser\") {\n\t\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\t\tsetLaserTrail((prev) =>\n\t\t\t\t\t\t\tpruneLaserTrail([\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t...interpolated\n\t\t\t\t\t\t\t\t\t.slice(Math.max(0, interpolated.length - 3))\n\t\t\t\t\t\t\t\t\t.map((p) => ({\n\t\t\t\t\t\t\t\t\t\tx: p.x,\n\t\t\t\t\t\t\t\t\t\ty: p.y,\n\t\t\t\t\t\t\t\t\t\tt: now,\n\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\t\ttool: st.tool,\n\t\t\t\t\t\t\tpoints: interpolated,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\t\tsetEraserTrail((prev) =>\n\t\t\t\t\t\tpruneEraserTrail([...prev, { x: worldX, y: worldY, t: Date.now() }]),\n\t\t\t\t\t);\n\t\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\t\tresolvedItemsRef.current,\n\t\t\t\t\t\tworldX,\n\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlineHitWorld,\n\t\t\t\t\t\t\tignoreLocked: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tif (toErase.length > 0) {\n\t\t\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\t\t\teraserPreviewIdsRef.current.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdsRef.current));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst list = itemsRef.current;\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\n\t\t\t\tif (st.kind === \"move\") {\n\t\t\t\t\tconst dx = worldX - st.startWorld.x;\n\t\t\t\t\tconst dy = worldY - st.startWorld.y;\n\t\t\t\t\tlet nextList: VectorSceneItem[] = [...list];\n\t\t\t\t\tfor (const id of st.ids) {\n\t\t\t\t\t\tconst snap = st.snapshots[id];\n\t\t\t\t\t\tif (!snap) continue;\n\t\t\t\t\t\tconst next = moveItemByDelta(snap, dx, dy);\n\t\t\t\t\t\tnextList = replaceItem(nextList, id, next);\n\t\t\t\t\t}\n\t\t\t\t\tchange(nextList);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"rotate\") {\n\t\t\t\t\tconst p = st.pivotWorld;\n\t\t\t\t\tconst angle = Math.atan2(worldY - p.y, worldX - p.x);\n\t\t\t\t\tconst next = applyRotationFromPointer(\n\t\t\t\t\t\tst.snapshot,\n\t\t\t\t\t\tst.startRotation,\n\t\t\t\t\t\tst.startPointerAngleRad,\n\t\t\t\t\t\tangle,\n\t\t\t\t\t);\n\t\t\t\t\tchange(replaceItem(list, st.id, next));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"resize\") {\n\t\t\t\t\tconst next = resizeItemByHandle(st.snapshot, st.start, st.handle, {\n\t\t\t\t\t\tx: worldX,\n\t\t\t\t\t\ty: worldY,\n\t\t\t\t\t});\n\t\t\t\t\tchange(replaceItem(list, st.id, next));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"place\") {\n\t\t\t\t\tconst a = st.startWorld;\n\t\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\t\tconst cp = customPlacementRef.current;\n\t\t\t\t\tif (st.tool === \"rect\") {\n\t\t\t\t\t\tsetPlacementPreview({ kind: \"rect\", rect: rectFromCorners(a, b) });\n\t\t\t\t\t} else if (st.tool === \"ellipse\") {\n\t\t\t\t\t\tsetPlacementPreview({ kind: \"ellipse\", rect: rectFromCorners(a, b) });\n\t\t\t\t\t} else if (st.tool === \"line\") {\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"line\",\n\t\t\t\t\t\t\tstart: a,\n\t\t\t\t\t\t\tend: b,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (st.tool === \"arrow\") {\n\t\t\t\t\t\tconst maxDist = ARROW_BIND_SNAP_PX / cam.zoom;\n\t\t\t\t\t\tconst exclude = new Set<string>();\n\t\t\t\t\t\tconst snapA = snapArrowEndpointToShape(\n\t\t\t\t\t\t\ta.x,\n\t\t\t\t\t\t\ta.y,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst snapB = snapArrowEndpointToShape(\n\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst startW = snapA ? snapA.world : a;\n\t\t\t\t\t\tconst endW = snapB ? snapB.world : { x: worldX, y: worldY };\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"arrow\",\n\t\t\t\t\t\t\tstart: startW,\n\t\t\t\t\t\t\tend: endW,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (cp && st.tool === cp.toolId) {\n\t\t\t\t\t\tsetPlacementPreview({ kind: \"rect\", rect: rectFromCorners(a, b) });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onUp = (ev: PointerEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tif (ev.pointerType === \"pen\" || ev.pointerType === \"touch\") {\n\t\t\t\t\tdebugApplePencilPointer(\"pointerup\", {\n\t\t\t\t\t\tpointerType: ev.pointerType,\n\t\t\t\t\t\tpointerId: ev.pointerId,\n\t\t\t\t\t\tdragKind: st.kind,\n\t\t\t\t\t\tactivePointerId: activeInteractionPointerIdRef.current,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tst.kind !== \"idle\" &&\n\t\t\t\t\tactiveInteractionPointerIdRef.current !== ev.pointerId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) {\n\t\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\t\teraserPreviewIdsRef.current.clear();\n\t\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\t\tsetEraserTrail([]);\n\t\t\t\t\t\tsetEraserActive(false);\n\t\t\t\t\t}\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"move\" || st.kind === \"resize\" || st.kind === \"rotate\") {\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst raw = rectFromCorners(st.startWorld, { x: worldX, y: worldY });\n\t\t\t\t\tconst br = normalizeRect(raw);\n\t\t\t\t\tconst screenDx = ev.clientX - st.startScreen.x;\n\t\t\t\t\tconst screenDy = ev.clientY - st.startScreen.y;\n\t\t\t\t\tconst tooSmall =\n\t\t\t\t\t\tMath.hypot(screenDx, screenDy) < TAP_PX ||\n\t\t\t\t\t\t(br.width < MIN_MARQUEE_WORLD && br.height < MIN_MARQUEE_WORLD);\n\t\t\t\t\tif (tooSmall) {\n\t\t\t\t\t\tif (!st.shiftKey) {\n\t\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst picked = collectItemIdsInRect(resolvedItemsRef.current, br);\n\t\t\t\t\tif (st.shiftKey) {\n\t\t\t\t\t\tconst seen = new Set(st.selectionBefore);\n\t\t\t\t\t\tconst merged = [...st.selectionBefore];\n\t\t\t\t\t\tfor (const id of picked) {\n\t\t\t\t\t\t\tif (!seen.has(id)) {\n\t\t\t\t\t\t\t\tseen.add(id);\n\t\t\t\t\t\t\t\tmerged.push(id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(merged);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(picked);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"stroke\") {\n\t\t\t\t\tconst completedPoints = appendPointerEventSamplesToStrokePoints(\n\t\t\t\t\t\tst.points,\n\t\t\t\t\t\tev,\n\t\t\t\t\t\tcam.zoom,\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t);\n\t\t\t\t\tst.points = completedPoints;\n\t\t\t\t\tdebugApplePencilPointer(\"pointerup-stroke-points\", {\n\t\t\t\t\t\tpointerType: ev.pointerType,\n\t\t\t\t\t\tpointerId: ev.pointerId,\n\t\t\t\t\t\tpointsAfterUp: completedPoints.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(st);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tif (change && eraserPreviewIdsRef.current.size > 0) {\n\t\t\t\t\t\tconst idSet = new Set(eraserPreviewIdsRef.current);\n\t\t\t\t\t\tchange(itemsRef.current.filter((i) => !idSet.has(i.id)));\n\t\t\t\t\t}\n\t\t\t\t\teraserPreviewIdsRef.current.clear();\n\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\tsetEraserTrail([]);\n\t\t\t\t\tsetEraserActive(false);\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\trequestAutoResetTool(\"eraser\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"tap\") {\n\t\t\t\t\tconst dx = ev.clientX - st.startScreen.x;\n\t\t\t\t\tconst dy = ev.clientY - st.startScreen.y;\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tif (Math.hypot(dx, dy) > TAP_PX) return;\n\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tif (!change) return;\n\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\tconst { x: worldX, y: worldY } = st.startWorld;\n\t\t\t\t\tif (st.tool === \"text\") {\n\t\t\t\t\t\tconst newItem = createTextItem(\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tx: worldX - 4,\n\t\t\t\t\t\t\t\ty: worldY - 24,\n\t\t\t\t\t\t\t\twidth: 160,\n\t\t\t\t\t\t\t\theight: 36,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t);\n\t\t\t\t\t\teditingTextSnapshotRef.current = {\n\t\t\t\t\t\t\t...newItem,\n\t\t\t\t\t\t\tbounds: { ...newItem.bounds },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst hidden = applyTextDraftWhileEditing(newItem, \"\");\n\t\t\t\t\t\tchange([...itemsRef.current, hidden]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t\tsetEditingTextId(id);\n\t\t\t\t\t\tsetDraftText(\"\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpendingImagePlacementRef.current = { worldX, worldY };\n\t\t\t\t\t\timageInputRef.current?.click();\n\t\t\t\t\t}\n\t\t\t\t\trequestAutoResetTool(st.tool);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"place\") {\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst a = st.startWorld;\n\t\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tif (!change) return;\n\n\t\t\t\t\tif (st.tool === \"arrow\") {\n\t\t\t\t\t\tconst screenDx = ev.clientX - st.startScreen.x;\n\t\t\t\t\t\tconst screenDy = ev.clientY - st.startScreen.y;\n\t\t\t\t\t\tif (Math.hypot(screenDx, screenDy) < MIN_ARROW_DRAG_PX) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst maxDist = ARROW_BIND_SNAP_PX / cam.zoom;\n\t\t\t\t\t\tconst exclude = new Set<string>();\n\t\t\t\t\t\tconst snapA = snapArrowEndpointToShape(\n\t\t\t\t\t\t\ta.x,\n\t\t\t\t\t\t\ta.y,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst snapB = snapArrowEndpointToShape(\n\t\t\t\t\t\t\tb.x,\n\t\t\t\t\t\t\tb.y,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst startW = snapA ? snapA.world : a;\n\t\t\t\t\t\tconst endW = snapB ? snapB.world : b;\n\t\t\t\t\t\tconst rawArrow = rectFromCorners(startW, endW);\n\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\tconst pen = strokeStyleRef.current;\n\t\t\t\t\t\tconst line = lineEndpointsToLocal(rawArrow, startW, endW);\n\t\t\t\t\t\tlet arrowBind: ArrowBindings | undefined;\n\t\t\t\t\t\tif (snapA || snapB) {\n\t\t\t\t\t\t\tarrowBind = {\n\t\t\t\t\t\t\t\t...(snapA ? { start: snapA.binding } : {}),\n\t\t\t\t\t\t\t\t...(snapB ? { end: snapB.binding } : {}),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchange([\n\t\t\t\t\t\t\t...itemsRef.current,\n\t\t\t\t\t\t\tcreateLineItem(id, rawArrow, line, \"arrow\", pen, arrowBind),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet raw = rectFromCorners(a, b);\n\t\t\t\t\tlet br = normalizeRect(raw);\n\t\t\t\t\tlet lineA = a;\n\t\t\t\t\tlet lineB = b;\n\n\t\t\t\t\tconst cpUp = customPlacementRef.current;\n\t\t\t\t\tif (br.width < MIN_PLACE_SIZE || br.height < MIN_PLACE_SIZE) {\n\t\t\t\t\t\tconst center = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n\t\t\t\t\t\tif (cpUp && st.tool === cpUp.toolId) {\n\t\t\t\t\t\t\traw = { x: center.x - 60, y: center.y - 40, width: 120, height: 80 };\n\t\t\t\t\t\t\tbr = normalizeRect(raw);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst def = defaultPlacementWorld(st.tool, center);\n\t\t\t\t\t\t\traw = def.raw;\n\t\t\t\t\t\t\tbr = normalizeRect(raw);\n\t\t\t\t\t\t\tif (def.lineWorld) {\n\t\t\t\t\t\t\t\tlineA = def.lineWorld[0];\n\t\t\t\t\t\t\t\tlineB = def.lineWorld[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\tconst pen = strokeStyleRef.current;\n\t\t\t\t\tif (cpUp && st.tool === cpUp.toolId) {\n\t\t\t\t\t\tchange(itemsRef.current.concat(cpUp.createItem({ id, bounds: br })));\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (st.tool === \"rect\") {\n\t\t\t\t\t\tchange([...itemsRef.current, createRectangleItem(id, raw, pen)]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t} else if (st.tool === \"ellipse\") {\n\t\t\t\t\t\tchange([...itemsRef.current, createEllipseItem(id, raw, pen)]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t} else if (st.tool === \"line\" || st.tool === \"arrow\") {\n\t\t\t\t\t\tconst line = lineEndpointsToLocal(raw, lineA, lineB);\n\t\t\t\t\t\tchange([\n\t\t\t\t\t\t\t...itemsRef.current,\n\t\t\t\t\t\t\tcreateLineItem(\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\traw,\n\t\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\t\tst.tool === \"arrow\" ? \"arrow\" : \"line\",\n\t\t\t\t\t\t\t\tpen,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t}\n\t\t\t\t\trequestAutoResetTool(st.tool);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.addEventListener(\"pointermove\", onMove);\n\t\t\tdocument.addEventListener(\"pointerup\", onUp);\n\t\t\tdocument.addEventListener(\"pointercancel\", onUp);\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener(\"pointermove\", onMove);\n\t\t\t\tdocument.removeEventListener(\"pointerup\", onUp);\n\t\t\t\tdocument.removeEventListener(\"pointercancel\", onUp);\n\t\t\t};\n\t\t}, [\n\t\t\tinteractive,\n\t\t\tpruneEraserTrail,\n\t\t\tpruneLaserTrail,\n\t\t\tfinalizeStrokeDragState,\n\t\t\trenderSceneWithLivePenStroke,\n\t\t\treleaseInteractionPointer,\n\t\t\trequestAutoResetTool,\n\t\t\tscreenToWorld,\n\t\t]);\n\n\t\tconst selectedItemsForOverlay = useMemo(() => {\n\t\t\treturn effectiveSelectedIds\n\t\t\t\t.map((id) => resolvedItems.find((i) => i.id === id))\n\t\t\t\t.filter((i): i is VectorSceneItem => i != null);\n\t\t}, [effectiveSelectedIds, resolvedItems]);\n\t\tconst activeToolInspectorStyle = useMemo(() => {\n\t\t\tif (toolId !== \"draw\") return undefined;\n\t\t\treturn {\n\t\t\t\ttoolKind: \"draw\" as const,\n\t\t\t\tlabel: \"Estilo da ferramenta\",\n\t\t\t\t...strokeStyleState,\n\t\t\t};\n\t\t}, [strokeStyleState, toolId]);\n\t\tconst eraserPreviewItemsForOverlay = useMemo(() => {\n\t\t\treturn eraserPreviewIds\n\t\t\t\t.map((id) => resolvedItems.find((i) => i.id === id))\n\t\t\t\t.filter((i): i is VectorSceneItem => i != null);\n\t\t}, [eraserPreviewIds, resolvedItems]);\n\n\t\tconst presenceLayer = useMemo(() => {\n\t\t\tif (!cameraForOverlay) return null;\n\t\t\tif (presenceOverlay) {\n\t\t\t\treturn presenceOverlay({\n\t\t\t\t\tcamera: cameraForOverlay,\n\t\t\t\t\tcameraVersion: cameraTick,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (remotePresence && remotePresence.length > 0) {\n\t\t\t\treturn (\n\t\t\t\t\t<PresenceRemoteLayer\n\t\t\t\t\t\tcamera={cameraForOverlay}\n\t\t\t\t\t\tcameraVersion={cameraTick}\n\t\t\t\t\t\tpeers={remotePresence}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, [cameraForOverlay, cameraTick, presenceOverlay, remotePresence]);\n\n\t\tconst primarySelected =\n\t\t\teffectiveSelectedIds.length === 1\n\t\t\t\t? (resolvedItems.find((i) => i.id === effectiveSelectedIds[0]) ?? null)\n\t\t\t\t: null;\n\n\t\tconst editingTextItem = editingTextId\n\t\t\t? (items.find((i) => i.id === editingTextId && i.toolKind === \"text\") ?? null)\n\t\t\t: null;\n\t\tconst showResizeHandles =\n\t\t\ttoolId === \"select\" &&\n\t\t\t!!primarySelected &&\n\t\t\t!primarySelected.locked &&\n\t\t\tsupportsResizeHandles(primarySelected);\n\n\t\tconst overlayPointerEvents: \"none\" | \"auto\" =\n\t\t\tinteractive && toolId !== \"hand\" ? \"auto\" : \"none\";\n\n\t\tconst viewportCursor =\n\t\t\tcustomPlacement?.toolId === toolId\n\t\t\t\t? \"crosshair\"\n\t\t\t\t: cursorForVectorToolId(toolId);\n\n\t\tconst rootStyle: CSSProperties = {\n\t\t\tposition: \"relative\",\n\t\t\twidth: \"100%\",\n\t\t\theight: \"100%\",\n\t\t\tminHeight: 0,\n\t\t\toutline: \"none\",\n\t\t\tcursor: viewportCursor,\n\t\t\tuserSelect: \"none\",\n\t\t\tWebkitUserSelect: \"none\",\n\t\t\tWebkitTouchCallout: \"none\",\n\t\t};\n\n\t\tconst canEditSelection = interactive && !!onItemsChange;\n\t\tconst chromeContextValue: CanvuChromeContextValue = {\n\t\t\tcamera: cameraForOverlay,\n\t\t\tviewportWidth: viewportSizeRef.current.width,\n\t\t\tviewportHeight: viewportSizeRef.current.height,\n\t\t\titems,\n\t\t\tselectedItems: selectedItemsForOverlay,\n\t\t\tinteractive,\n\t\t\tcanEditSelection,\n\t\t\tactiveToolStyle: activeToolInspectorStyle ?? null,\n\t\t\tonSelectionStyleChange: canEditSelection\n\t\t\t\t? activeToolInspectorStyle\n\t\t\t\t\t? handleActiveToolStyleChange\n\t\t\t\t\t: handleSelectionStyleChange\n\t\t\t\t: null,\n\t\t\tzoomPercent,\n\t\t\tonZoomIn: handleZoomInClick,\n\t\t\tonZoomOut: handleZoomOutClick,\n\t\t\tonUndo: undo,\n\t\t\tonRedo: redo,\n\t\t\tcanUndo,\n\t\t\tcanRedo,\n\t\t\tonRequestRender: renderFrame,\n\t\t};\n\n\t\tconst defaultSelectionInspector =\n\t\t\tcameraForOverlay && canEditSelection ? <VectorSelectionInspector /> : null;\n\t\tconst defaultNavMenu = cameraForOverlay ? <NavMenu /> : null;\n\n\t\tconst resolvedSelectionInspector =\n\t\t\tselectionInspector === undefined\n\t\t\t\t? defaultSelectionInspector\n\t\t\t\t: selectionInspector;\n\t\tconst resolvedNavMenu = navMenu === undefined ? defaultNavMenu : navMenu;\n\n\t\treturn (\n\t\t\t<CanvuPluginContext.Provider value={pluginContextValue}>\n\t\t\t\t<CanvuChromeContext.Provider value={chromeContextValue}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={wrapperRef}\n\t\t\t\t\t\tstyle={rootStyle}\n\t\t\t\t\t\trole=\"application\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-describedby={liveId}\n\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t\tonDragOver={handleWrapperDragOver}\n\t\t\t\t\t\tonDrop={handleWrapperDrop}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={interactionRootRef}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\tzIndex: 0,\n\t\t\t\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tref={sceneContainerRef}\n\t\t\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\tzIndex: 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{loadingSkeletons.length > 0 && cameraForOverlay && (\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\t\tzIndex: 1,\n\t\t\t\t\t\t\t\t\t\tpointerEvents: \"none\",\n\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<g transform={formatCameraTransform(cameraForOverlay)}>\n\t\t\t\t\t\t\t\t\t\t{loadingSkeletons.map((sk) => (\n\t\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\t\tkey={sk.id}\n\t\t\t\t\t\t\t\t\t\t\t\tx={sk.x}\n\t\t\t\t\t\t\t\t\t\t\t\ty={sk.y}\n\t\t\t\t\t\t\t\t\t\t\t\twidth={sk.width}\n\t\t\t\t\t\t\t\t\t\t\t\theight={sk.height}\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"#f4f4f5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"#d4d4d8\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1 / cameraForOverlay.zoom}\n\t\t\t\t\t\t\t\t\t\t\t\trx={2 / cameraForOverlay.zoom}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimation: \"canvu-pulse 1.5s ease-in-out infinite\",\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{presenceLayer}\n\t\t\t\t\t\t\t{cameraForOverlay && interactive && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<InteractionOverlay\n\t\t\t\t\t\t\t\t\t\tcamera={cameraForOverlay}\n\t\t\t\t\t\t\t\t\t\tcameraVersion={cameraTick}\n\t\t\t\t\t\t\t\t\t\tselectedItems={selectedItemsForOverlay}\n\t\t\t\t\t\t\t\t\t\tshowResizeHandles={showResizeHandles}\n\t\t\t\t\t\t\t\t\t\tplacementPreview={placementPreview}\n\t\t\t\t\t\t\t\t\t\teraserTrail={eraserTrail}\n\t\t\t\t\t\t\t\t\t\tlaserTrail={laserTrail}\n\t\t\t\t\t\t\t\t\t\teraserPreviewItems={eraserPreviewItemsForOverlay}\n\t\t\t\t\t\t\t\t\t\tpreviewStrokeStyle={strokeStyleRef.current}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 12,\n\t\t\t\t\t\t\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: overlayPointerEvents,\n\t\t\t\t\t\t\t\t\t\t\tcursor: viewportCursor,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tonPointerDown={handleOverlayPointerDown}\n\t\t\t\t\t\t\t\t\t\tonContextMenu={handleOverlayContextMenu}\n\t\t\t\t\t\t\t\t\t\tonDoubleClick={handleOverlayDoubleClick}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tref={imageInputRef}\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept=\"image/*,application/pdf\"\n\t\t\t\t\t\t\tstyle={{ display: \"none\" }}\n\t\t\t\t\t\t\taria-label=\"Select image or PDF to place on canvas\"\n\t\t\t\t\t\t\tonChange={handleImageFileChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t\t{plugins.length > 0 ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tdata-slot=\"canvu-plugin-layer\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\tzIndex: 40,\n\t\t\t\t\t\t\t\t\tpointerEvents: \"none\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<VectorViewportPluginInstances\n\t\t\t\t\t\t\t\t\tplugins={plugins}\n\t\t\t\t\t\t\t\t\trenderContext={pluginRenderContext}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{cameraForOverlay && interactive && editingTextItem && (\n\t\t\t\t\t\t\t<TextEditOverlay\n\t\t\t\t\t\t\t\tcamera={cameraForOverlay}\n\t\t\t\t\t\t\t\tcameraVersion={cameraTick}\n\t\t\t\t\t\t\t\titem={editingTextItem}\n\t\t\t\t\t\t\t\tdraftText={draftText}\n\t\t\t\t\t\t\t\tonDraftChange={handleDraftTextChange}\n\t\t\t\t\t\t\t\tonCommit={commitTextEdit}\n\t\t\t\t\t\t\t\tonCancel={cancelTextEdit}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{resolvedSelectionInspector}\n\t\t\t\t\t\t{interactive && onItemsChange && contextMenu && (\n\t\t\t\t\t\t\t<ShapeContextMenu\n\t\t\t\t\t\t\t\tx={contextMenu.x}\n\t\t\t\t\t\t\t\ty={contextMenu.y}\n\t\t\t\t\t\t\t\tallSelectedLocked={\n\t\t\t\t\t\t\t\t\tcontextMenu.itemIds.length > 0 &&\n\t\t\t\t\t\t\t\t\tcontextMenu.itemIds.every(\n\t\t\t\t\t\t\t\t\t\t(id) => items.find((i) => i.id === id)?.locked,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonClose={() => setContextMenu(null)}\n\t\t\t\t\t\t\t\tonToggleLock={() => {\n\t\t\t\t\t\t\t\t\tconst ids = contextMenu.itemIds;\n\t\t\t\t\t\t\t\t\tconst allLocked =\n\t\t\t\t\t\t\t\t\t\tids.length > 0 &&\n\t\t\t\t\t\t\t\t\t\tids.every((id) => items.find((i) => i.id === id)?.locked);\n\t\t\t\t\t\t\t\t\tsetLockedOnIds(ids, !allLocked);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonCut={() => cutIds(contextMenu.itemIds)}\n\t\t\t\t\t\t\t\tonCopy={() => copyIdsToInternalClipboard(contextMenu.itemIds)}\n\t\t\t\t\t\t\t\tonBringToFront={() => reorderIds(contextMenu.itemIds, \"front\")}\n\t\t\t\t\t\t\t\tonBringForward={() => reorderIds(contextMenu.itemIds, \"forward\")}\n\t\t\t\t\t\t\t\tonSendBackward={() => reorderIds(contextMenu.itemIds, \"backward\")}\n\t\t\t\t\t\t\t\tonSendToBack={() => reorderIds(contextMenu.itemIds, \"back\")}\n\t\t\t\t\t\t\t\tonDuplicate={() => duplicateIds(contextMenu.itemIds)}\n\t\t\t\t\t\t\t\tonDelete={() => deleteIds(contextMenu.itemIds)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{resolvedNavMenu}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tid={liveId}\n\t\t\t\t\t\t\tstyle={visuallyHidden}\n\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\taria-atomic=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{`Zoom ${zoomPercent} percent.`}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</CanvuChromeContext.Provider>\n\t\t\t</CanvuPluginContext.Provider>\n\t\t);\n\t},\n);\n\nVectorViewport.displayName = \"VectorViewport\";\n\nexport { cursorForVectorToolId };\n","import type { Camera2D } from \"../camera/camera\";\nimport { normalizeRect } from \"../math/rect\";\nimport { cullItemsByViewport } from \"../scene/cull\";\nimport type { VectorScene } from \"../scene/scene\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\n/**\n * Builds the SVG `transform` attribute for mapping world coordinates to viewport CSS pixels.\n */\nexport function formatCameraTransform(camera: Camera2D): string {\n\tconst z = camera.zoom;\n\treturn `matrix(${z}, 0, 0, ${z}, ${camera.x}, ${camera.y})`;\n}\n\n/**\n * Transform for item `<g>`: `translate(x,y)` plus optional rotation around the bounds center.\n * SVG `rotate` uses degrees.\n */\nexport function formatItemPlacementTransform(item: VectorSceneItem): string {\n\tconst r = normalizeRect(item.bounds);\n\tconst rot = item.rotation ?? 0;\n\tif (Math.abs(rot) < 1e-12) {\n\t\treturn `translate(${item.x}, ${item.y})`;\n\t}\n\tconst deg = (rot * 180) / Math.PI;\n\tconst cx = r.width / 2;\n\tconst cy = r.height / 2;\n\treturn `translate(${item.x}, ${item.y}) translate(${cx}, ${cy}) rotate(${deg}) translate(${-cx}, ${-cy})`;\n}\n\nexport type SvgVectorRendererOptions = {\n\t/** Root element (typically `position: relative` and fixed size). */\n\tcontainer: HTMLElement;\n\tscene: VectorScene;\n\tcamera: Camera2D;\n\t/**\n\t * When true, the scene SVG ignores pointer events so an overlay can own hit-testing\n\t * (interactive selection / resize / placement).\n\t */\n\tpointerEventsNone?: boolean;\n};\n\ntype CachedItemG = {\n\treadonly g: SVGGElement;\n\tlastChildrenSvg: string;\n\tlastTransform: string;\n};\n\n/**\n * Renders vector scene items into a single SVG: camera as an outer `<g>` transform,\n * so geometry stays sharp at any zoom (no fixed-resolution raster).\n *\n * Uses incremental DOM updates: keeps a stable `<g>` per visible item id, updates\n * `innerHTML` only when `childrenSvg` changes, and only adjusts the camera transform\n * when pan/zoom changes without content edits.\n */\nexport class SvgVectorRenderer {\n\tprivate readonly container: HTMLElement;\n\tprivate readonly scene: VectorScene;\n\tprivate readonly camera: Camera2D;\n\tprivate readonly svg: SVGSVGElement;\n\tprivate readonly rootG: SVGGElement;\n\tprivate readonly itemNodeCache = new Map<string, CachedItemG>();\n\tprivate readonly resizeObserver: ResizeObserver;\n\n\tconstructor(options: SvgVectorRendererOptions) {\n\t\tthis.container = options.container;\n\t\tthis.scene = options.scene;\n\t\tthis.camera = options.camera;\n\n\t\tthis.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\t\tthis.svg.setAttribute(\"width\", \"100%\");\n\t\tthis.svg.setAttribute(\"height\", \"100%\");\n\t\tthis.svg.setAttribute(\"shape-rendering\", \"geometricPrecision\");\n\t\tthis.svg.style.display = \"block\";\n\t\tthis.svg.setAttribute(\"role\", \"presentation\");\n\t\tthis.svg.setAttribute(\"focusable\", \"false\");\n\t\tthis.setPointerEventsNone(options.pointerEventsNone ?? false);\n\n\t\tthis.rootG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\tthis.svg.appendChild(this.rootG);\n\n\t\tthis.container.appendChild(this.svg);\n\n\t\tthis.resizeObserver = new ResizeObserver(() => this.render());\n\t\tthis.resizeObserver.observe(this.container);\n\t}\n\n\t/**\n\t * Reads container size, culls items, and updates the SVG (incrementally when possible).\n\t */\n\trender(): void {\n\t\tconst w = this.container.clientWidth;\n\t\tconst h = this.container.clientHeight;\n\t\tif (w <= 0 || h <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.svg.setAttribute(\"viewBox\", `0 0 ${w} ${h}`);\n\t\tthis.svg.setAttribute(\"preserveAspectRatio\", \"xMidYMid slice\");\n\n\t\tconst visible = this.camera.getVisibleWorldRect(w, h);\n\t\tconst items = cullItemsByViewport(this.scene.getItems(), visible);\n\n\t\tthis.syncVisibleItems(items);\n\t\tthis.rootG.setAttribute(\"transform\", formatCameraTransform(this.camera));\n\t}\n\n\tprivate syncVisibleItems(items: readonly VectorSceneItem[]): void {\n\t\tconst visibleIds = new Set<string>();\n\t\tfor (const item of items) {\n\t\t\tvisibleIds.add(item.id);\n\t\t}\n\n\t\tfor (const [id, cached] of this.itemNodeCache) {\n\t\t\tif (!visibleIds.has(id)) {\n\t\t\t\tcached.g.remove();\n\t\t\t}\n\t\t}\n\n\t\tlet previousNode: ChildNode | null = null;\n\t\tfor (const item of items) {\n\t\t\tlet cached = this.itemNodeCache.get(item.id);\n\t\t\tif (!cached) {\n\t\t\t\tconst g = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\t\t\tg.setAttribute(\"data-item-id\", item.id);\n\t\t\t\tcached = {\n\t\t\t\t\tg,\n\t\t\t\t\tlastChildrenSvg: \"\",\n\t\t\t\t\tlastTransform: \"\",\n\t\t\t\t};\n\t\t\t\tthis.itemNodeCache.set(item.id, cached);\n\t\t\t}\n\n\t\t\tconst { g } = cached;\n\t\t\tconst t = formatItemPlacementTransform(item);\n\t\t\tif (cached.lastTransform !== t) {\n\t\t\t\tg.setAttribute(\"transform\", t);\n\t\t\t\tcached.lastTransform = t;\n\t\t\t}\n\n\t\t\tif (cached.lastChildrenSvg !== item.childrenSvg) {\n\t\t\t\t// Trusted SVG fragments only — sanitize untrusted strings in your app.\n\t\t\t\tg.innerHTML = item.childrenSvg;\n\t\t\t\tcached.lastChildrenSvg = item.childrenSvg;\n\t\t\t}\n\n\t\t\tconst expectedPosition: ChildNode | null = previousNode\n\t\t\t\t? previousNode.nextSibling\n\t\t\t\t: this.rootG.firstChild;\n\t\t\tif (expectedPosition !== g) {\n\t\t\t\tthis.rootG.insertBefore(g, expectedPosition);\n\t\t\t}\n\t\t\tpreviousNode = g;\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tthis.resizeObserver.disconnect();\n\t\tthis.itemNodeCache.clear();\n\t\tthis.svg.remove();\n\t}\n\n\t/** Toggle whether the scene SVG receives pointer events (vs overlay handling them). */\n\tsetPointerEventsNone(value: boolean): void {\n\t\tthis.svg.style.pointerEvents = value ? \"none\" : \"auto\";\n\t}\n}\n","import { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { rectsIntersect } from \"../math/rect\";\nimport { cullItemsByViewportSpatial } from \"./spatial-cull\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Below this count, a linear scan is cheaper than building the spatial grid. */\nconst SPATIAL_MIN_ITEMS = 400;\n\n/** World-space cell size for the uniform grid (px in world units). */\nconst SPATIAL_CELL_SIZE = 256;\n\nfunction cullItemsLinear(\n\titems: readonly VectorSceneItem[],\n\tvisibleWorld: Rect,\n): VectorSceneItem[] {\n\treturn items.filter((item) =>\n\t\trectsIntersect(boundsAabbForCull(item), visibleWorld),\n\t);\n}\n\nfunction boundsAabbForCull(item: VectorSceneItem): Rect {\n\treturn boundsAabbForRotatedItem(item);\n}\n\n/**\n * Returns scene items whose `bounds` intersect the visible world rectangle.\n *\n * Uses a uniform grid when there are many items; otherwise a linear filter (faster for\n * small scenes due to grid build overhead).\n */\nexport function cullItemsByViewport(\n\titems: readonly VectorSceneItem[],\n\tvisibleWorld: Rect,\n): VectorSceneItem[] {\n\tif (items.length < SPATIAL_MIN_ITEMS) {\n\t\treturn cullItemsLinear(items, visibleWorld);\n\t}\n\treturn cullItemsByViewportSpatial(items, visibleWorld, SPATIAL_CELL_SIZE);\n}\n","import { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect, rectsIntersect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\ntype SpatialIndex = {\n\treadonly cellSize: number;\n\treadonly aabbs: readonly Rect[];\n\treadonly buckets: ReadonlyMap<string, readonly number[]>;\n};\n\nconst spatialIndexCache = new WeakMap<readonly VectorSceneItem[], SpatialIndex>();\n\nfunction cellKey(ix: number, iy: number): string {\n\treturn `${ix},${iy}`;\n}\n\nfunction buildSpatialIndex(\n\titems: readonly VectorSceneItem[],\n\tcellSize: number,\n): SpatialIndex {\n\tconst cached = spatialIndexCache.get(items);\n\tif (cached && cached.cellSize === cellSize) {\n\t\treturn cached;\n\t}\n\n\tconst aabbs: Rect[] = new Array(items.length);\n\tconst buckets = new Map<string, number[]>();\n\n\tfor (let index = 0; index < items.length; index += 1) {\n\t\tconst item = items[index];\n\t\tif (!item) continue;\n\t\tconst aabb = boundsAabbForRotatedItem(item);\n\t\taabbs[index] = aabb;\n\t\tconst { minIx, maxIx, minIy, maxIy } = cellRangeForRect(aabb, cellSize);\n\t\tfor (let ix = minIx; ix <= maxIx; ix += 1) {\n\t\t\tfor (let iy = minIy; iy <= maxIy; iy += 1) {\n\t\t\t\tconst key = cellKey(ix, iy);\n\t\t\t\tlet bucket = buckets.get(key);\n\t\t\t\tif (!bucket) {\n\t\t\t\t\tbucket = [];\n\t\t\t\t\tbuckets.set(key, bucket);\n\t\t\t\t}\n\t\t\t\tbucket.push(index);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst next: SpatialIndex = {\n\t\tcellSize,\n\t\taabbs,\n\t\tbuckets,\n\t};\n\tspatialIndexCache.set(items, next);\n\treturn next;\n}\n\n/**\n * Axis-aligned cell range (inclusive indices) for a rectangle in a uniform grid.\n */\nfunction cellRangeForRect(\n\tr: Rect,\n\tcellSize: number,\n): {\n\tminIx: number;\n\tmaxIx: number;\n\tminIy: number;\n\tmaxIy: number;\n} {\n\tconst n = normalizeRect(r);\n\tconst x1 = n.x + n.width;\n\tconst y1 = n.y + n.height;\n\tconst minIx = Math.floor(n.x / cellSize);\n\tconst maxIx = Math.max(minIx, Math.ceil(x1 / cellSize) - 1);\n\tconst minIy = Math.floor(n.y / cellSize);\n\tconst maxIy = Math.max(minIy, Math.ceil(y1 / cellSize) - 1);\n\treturn { minIx, maxIx, minIy, maxIy };\n}\n\n/**\n * Viewport cull using a uniform grid: each item is inserted into every cell its bounds\n * overlap. Query walks cells overlapping the viewport, dedupes by id, then applies an exact\n * {@link rectsIntersect} test. Output order matches the original `items` array (z-order).\n *\n * Build cost is O(n × cells per item); query cost is O(viewport cells × bucket size).\n * Use only when {@link items}.length is large enough that this beats a linear scan.\n */\nexport function cullItemsByViewportSpatial(\n\titems: readonly VectorSceneItem[],\n\tvisibleWorld: Rect,\n\tcellSize: number,\n): VectorSceneItem[] {\n\tconst { aabbs, buckets } = buildSpatialIndex(items, cellSize);\n\n\tconst vr = cellRangeForRect(visibleWorld, cellSize);\n\tconst seen = new Set<number>();\n\tconst outIndices: number[] = [];\n\n\tfor (let ix = vr.minIx; ix <= vr.maxIx; ix++) {\n\t\tfor (let iy = vr.minIy; iy <= vr.maxIy; iy++) {\n\t\t\tconst bucket = buckets.get(cellKey(ix, iy));\n\t\t\tif (!bucket) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const index of bucket) {\n\t\t\t\tif (seen.has(index)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tseen.add(index);\n\t\t\t\tconst aabb = aabbs[index];\n\t\t\t\tif (aabb && rectsIntersect(aabb, visibleWorld)) {\n\t\t\t\t\toutIndices.push(index);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\toutIndices.sort((a, b) => a - b);\n\treturn outIndices.map((index) => items[index]).filter((item) => item != null);\n}\n","import {\n\tbuildArrowSvg,\n\tcreateShapeId,\n\trebuildItemSvg,\n\tresolveStrokeStyle,\n} from \"./shape-builders\";\nimport type { VectorSceneItem } from \"./types\";\n\n/**\n * Deep-clones an item with a new id. Rebuilds SVG where the id is embedded (arrow, text, custom).\n */\nexport function cloneVectorSceneItemWithNewId(\n\titem: VectorSceneItem,\n): VectorSceneItem {\n\tconst id = createShapeId();\n\tconst copy = JSON.parse(JSON.stringify(item)) as VectorSceneItem;\n\tlet next: VectorSceneItem = { ...copy, id };\n\tif (next.toolKind === \"arrow\" && next.line) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tchildrenSvg: buildArrowSvg(id, next.line, resolveStrokeStyle(next)),\n\t\t};\n\t}\n\tif (next.toolKind === \"text\" && next.text !== undefined) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\tif (\n\t\tnext.toolKind === \"custom\" &&\n\t\tnext.customInnerSvg &&\n\t\tnext.customIntrinsicSize\n\t) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\treturn next;\n}\n\nexport function cloneVectorSceneItemsWithNewIds(\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem[] {\n\treturn items.map(cloneVectorSceneItemWithNewId);\n}\n","import type { VectorSceneItem } from \"./types\";\n\n/**\n * Mutable collection of vector scene items (replace wholesale for simplicity in MVP).\n */\nexport class VectorScene {\n\tprivate items: VectorSceneItem[] = [];\n\n\tgetItems(): readonly VectorSceneItem[] {\n\t\treturn this.items;\n\t}\n\n\t/**\n\t * Replaces the entire scene contents.\n\t */\n\tsetItems(next: readonly VectorSceneItem[]): void {\n\t\tthis.items = [...next];\n\t}\n\n\tclear(): void {\n\t\tthis.items = [];\n\t}\n}\n","\"use client\";\n\nimport type { Camera2D } from \"../camera/camera\";\nimport {\n\tgetHandleWorldPositionRotated,\n\tgetRotationHandleWorldPosition,\n\ttype ResizeHandleId,\n} from \"../interaction/resize-handles\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tformatCameraTransform,\n\tformatItemPlacementTransform,\n} from \"../renderer/svg-vector-renderer\";\nimport { smoothFreehandPointsToPathD } from \"../scene/freehand-path\";\nimport {\n\tcomputeFreehandSvgPayload,\n\tcomputeStraightArrowGeometry,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nconst HANDLE_ORDER: ResizeHandleId[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\nconst ERASER_TINT = \"#cbd5e1\";\nconst ERASER_TINT_OPACITY = 0.95;\n\nfunction pointsToSmoothPath(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length === 0) return null;\n\tconst d = smoothFreehandPointsToPathD(points);\n\treturn d || null;\n}\n\nfunction renderEraserSkeleton(\n\tit: VectorSceneItem,\n\toverlayStrokePx: number,\n): React.ReactNode {\n\tconst b = normalizeRect(it.bounds);\n\tconst tool = it.toolKind;\n\tconst strokeWidth = Math.max(it.strokeWidth ?? 2, overlayStrokePx);\n\tconst common = {\n\t\tstroke: ERASER_TINT,\n\t\tstrokeWidth,\n\t\tstrokeOpacity: ERASER_TINT_OPACITY,\n\t\tvectorEffect: \"non-scaling-stroke\" as const,\n\t\tstrokeLinecap: \"round\" as const,\n\t\tstrokeLinejoin: \"round\" as const,\n\t\tfill: \"none\",\n\t};\n\n\tif (tool === \"rect\") {\n\t\treturn <rect x={0} y={0} width={b.width} height={b.height} {...common} />;\n\t}\n\tif (tool === \"ellipse\") {\n\t\treturn (\n\t\t\t<ellipse\n\t\t\t\tcx={b.width / 2}\n\t\t\t\tcy={b.height / 2}\n\t\t\t\trx={Math.max(0, b.width / 2)}\n\t\t\t\try={Math.max(0, b.height / 2)}\n\t\t\t\t{...common}\n\t\t\t/>\n\t\t);\n\t}\n\tif (tool === \"line\" || tool === \"arrow\") {\n\t\tconst ln = it.line;\n\t\tif (!ln)\n\t\t\treturn <rect x={0} y={0} width={b.width} height={b.height} {...common} />;\n\t\tconst geometry =\n\t\t\ttool === \"arrow\"\n\t\t\t\t? computeStraightArrowGeometry(\n\t\t\t\t\t\tln,\n\t\t\t\t\t\tMath.max(it.strokeWidth ?? 2, overlayStrokePx),\n\t\t\t\t\t)\n\t\t\t\t: null;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<line\n\t\t\t\t\tx1={ln.x1}\n\t\t\t\t\ty1={ln.y1}\n\t\t\t\t\tx2={geometry?.shaftEndX ?? ln.x2}\n\t\t\t\t\ty2={geometry?.shaftEndY ?? ln.y2}\n\t\t\t\t\t{...common}\n\t\t\t\t/>\n\t\t\t\t{tool === \"arrow\" && geometry ? (\n\t\t\t\t\t<path\n\t\t\t\t\t\td={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\t\t{...common}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</>\n\t\t);\n\t}\n\tif (\n\t\ttool === \"draw\" ||\n\t\ttool === \"marker\" ||\n\t\ttool === \"pencil\" ||\n\t\ttool === \"brush\"\n\t) {\n\t\tconst pts = it.pathPointsLocal ?? [];\n\t\tif (pts.length === 1) {\n\t\t\tconst p = pts[0];\n\t\t\tif (!p) return null;\n\t\t\treturn (\n\t\t\t\t<circle\n\t\t\t\t\tcx={p.x}\n\t\t\t\t\tcy={p.y}\n\t\t\t\t\tr={Math.max((it.strokeWidth ?? 2) / 2, 2)}\n\t\t\t\t\tfill={ERASER_TINT}\n\t\t\t\t\tfillOpacity={0.8}\n\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tconst d = pointsToSmoothPath(pts);\n\t\tif (d) {\n\t\t\treturn <path d={d} {...common} shapeRendering=\"geometricPrecision\" />;\n\t\t}\n\t}\n\treturn (\n\t\t<rect\n\t\t\tx={0}\n\t\t\ty={0}\n\t\t\twidth={b.width}\n\t\t\theight={b.height}\n\t\t\t{...common}\n\t\t\tstrokeDasharray=\"4 4\"\n\t\t/>\n\t);\n}\n\nexport type PlacementPreview =\n\t| { kind: \"rect\" | \"ellipse\"; rect: Rect }\n\t/** Multi-select drag (world rect), like image crop / rubber-band selection. */\n\t| { kind: \"marquee\"; rect: Rect }\n\t| {\n\t\t\tkind: \"line\" | \"arrow\";\n\t\t\tstart: { x: number; y: number };\n\t\t\tend: { x: number; y: number };\n\t }\n\t| {\n\t\t\tkind: \"stroke\";\n\t\t\ttool: \"draw\" | \"marker\" | \"laser\";\n\t\t\tpoints: { x: number; y: number }[];\n\t };\n\nexport type InteractionOverlayProps = {\n\tcamera: Camera2D;\n\t/** Bump when camera mutates so React redraws the overlay transform. */\n\tcameraVersion: number;\n\t/** Selected items (order preserved). Empty = no selection. */\n\tselectedItems: readonly VectorSceneItem[];\n\t/** When false, only the selection outline is shown (no resize handles). */\n\tshowResizeHandles: boolean;\n\tplacementPreview: PlacementPreview | null;\n\t/** Live eraser trail points in world space, newest at the end. */\n\teraserTrail?: readonly { x: number; y: number; t: number }[];\n\t/** Live laser trail points in world space, fades out after pointerup. */\n\tlaserTrail?: readonly { x: number; y: number; t: number }[];\n\t/** Shapes currently touched by eraser and queued to be removed on pointerup. */\n\teraserPreviewItems?: readonly VectorSceneItem[];\n\t/** Current stroke style used for local stroke previews (draw/marker). */\n\tpreviewStrokeStyle?: StrokeStyle;\n};\n\n/**\n * World-space decoration: selection bounds, resize handles, placement preview.\n * Renders above the scene SVG with `pointer-events: none` so a sibling HTML hit-layer\n * div can own all pointer capture for tools.\n */\nexport function InteractionOverlay({\n\tcamera,\n\tcameraVersion: _cameraVersion,\n\tselectedItems,\n\tshowResizeHandles,\n\tplacementPreview,\n\teraserTrail = [],\n\tlaserTrail = [],\n\teraserPreviewItems = [],\n\tpreviewStrokeStyle,\n}: InteractionOverlayProps) {\n\tvoid _cameraVersion;\n\tconst z = camera.zoom;\n\t/** World radius so handles stay ~5 CSS px after camera scale (see `formatCameraTransform`). */\n\tconst handleR = 5 / z;\n\t/**\n\t * Constant stroke in user units; `vectorEffect=\"non-scaling-stroke\"` keeps ~this many CSS px\n\t * regardless of zoom. Do not divide by `z` here — that doubled with non-scaling-stroke and made\n\t * borders/handles look overly thick when zoomed in.\n\t */\n\tconst overlayStrokePx = 1.25;\n\tconst dashPattern = \"4 4\";\n\tconst rotateHandleOffsetWorld = 24 / z;\n\t/** Screen-sized icon in world units (~16px at current zoom). */\n\tconst rotateIconWorld = 16 / z;\n\tconst rotateIconScale = rotateIconWorld / 24;\n\n\tconst rootTransform = formatCameraTransform(camera);\n\n\tlet selection: React.ReactNode = null;\n\tif (selectedItems.length > 0) {\n\t\tconst single = selectedItems.length === 1 ? selectedItems[0] : undefined;\n\t\tconst bSingle = single ? normalizeRect(single.bounds) : null;\n\t\tconst rotSingle = single?.rotation ?? 0;\n\t\tconst rotHandlePos =\n\t\t\tshowResizeHandles && bSingle && single\n\t\t\t\t? getRotationHandleWorldPosition(bSingle, rotSingle, rotateHandleOffsetWorld)\n\t\t\t\t: null;\n\t\tselection = (\n\t\t\t<g>\n\t\t\t\t{selectedItems.map((it) => {\n\t\t\t\t\tconst b = normalizeRect(it.bounds);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g key={it.id} transform={formatItemPlacementTransform(it)}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={0}\n\t\t\t\t\t\t\t\ty={0}\n\t\t\t\t\t\t\t\twidth={b.width}\n\t\t\t\t\t\t\t\theight={b.height}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{showResizeHandles && bSingle && single && rotHandlePos && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{HANDLE_ORDER.map((hid) => {\n\t\t\t\t\t\t\tconst p = getHandleWorldPositionRotated(bSingle, hid, rotSingle);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\tkey={hid}\n\t\t\t\t\t\t\t\t\tcx={p.x}\n\t\t\t\t\t\t\t\t\tcy={p.y}\n\t\t\t\t\t\t\t\t\tr={handleR}\n\t\t\t\t\t\t\t\t\tfill=\"#ffffff\"\n\t\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t\tdata-handle-id={hid}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t<g\n\t\t\t\t\t\t\ttransform={`translate(${rotHandlePos.x}, ${rotHandlePos.y}) rotate(${(rotSingle * 180) / Math.PI})`}\n\t\t\t\t\t\t\tdata-rotate-handle=\"1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\ttransform={`translate(${-rotateIconWorld / 2}, ${-rotateIconWorld / 2}) scale(${rotateIconScale})`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Curved arrow (rotate) — Lucide-style arc + arrowhead */}\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M21 3v5h-5\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</g>\n\t\t);\n\t}\n\n\tlet preview: React.ReactNode = null;\n\tif (placementPreview) {\n\t\tif (placementPreview.kind === \"marquee\") {\n\t\t\tconst r = normalizeRect(placementPreview.rect);\n\t\t\tpreview = (\n\t\t\t\t<rect\n\t\t\t\t\tx={r.x}\n\t\t\t\t\ty={r.y}\n\t\t\t\t\twidth={r.width}\n\t\t\t\t\theight={r.height}\n\t\t\t\t\tfill=\"rgba(59, 130, 246, 0.12)\"\n\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t/>\n\t\t\t);\n\t\t} else if (\n\t\t\tplacementPreview.kind === \"rect\" ||\n\t\t\tplacementPreview.kind === \"ellipse\"\n\t\t) {\n\t\t\tconst r = normalizeRect(placementPreview.rect);\n\t\t\tpreview =\n\t\t\t\tplacementPreview.kind === \"rect\" ? (\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx={r.x}\n\t\t\t\t\t\ty={r.y}\n\t\t\t\t\t\twidth={r.width}\n\t\t\t\t\t\theight={r.height}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<ellipse\n\t\t\t\t\t\tcx={r.x + r.width / 2}\n\t\t\t\t\t\tcy={r.y + r.height / 2}\n\t\t\t\t\t\trx={r.width / 2}\n\t\t\t\t\t\try={r.height / 2}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t} else if (\n\t\t\tplacementPreview.kind === \"line\" ||\n\t\t\tplacementPreview.kind === \"arrow\"\n\t\t) {\n\t\t\tconst { start, end } = placementPreview;\n\t\t\tconst geometry =\n\t\t\t\tplacementPreview.kind === \"arrow\"\n\t\t\t\t\t? computeStraightArrowGeometry(\n\t\t\t\t\t\t\t{ x1: start.x, y1: start.y, x2: end.x, y2: end.y },\n\t\t\t\t\t\t\toverlayStrokePx,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null;\n\t\t\tpreview = (\n\t\t\t\t<>\n\t\t\t\t\t<line\n\t\t\t\t\t\tx1={start.x}\n\t\t\t\t\t\ty1={start.y}\n\t\t\t\t\t\tx2={geometry?.shaftEndX ?? end.x}\n\t\t\t\t\t\ty2={geometry?.shaftEndY ?? end.y}\n\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t\t{placementPreview.kind === \"arrow\" && geometry ? (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\tstrokeOpacity={0.9}\n\t\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</>\n\t\t\t);\n\t\t} else if (placementPreview.kind === \"stroke\") {\n\t\t\tconst raw = placementPreview.points;\n\t\t\tconst tool = placementPreview.tool;\n\t\t\tif (raw.length >= 1) {\n\t\t\t\tconst isLaser = tool === \"laser\";\n\t\t\t\tconst previewStyle: StrokeStyle = {\n\t\t\t\t\tstroke: isLaser ? \"#f43f5e\" : (previewStrokeStyle?.stroke ?? \"#64748b\"),\n\t\t\t\t\tstrokeWidth: isLaser\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: (previewStrokeStyle?.strokeWidth ?? (tool === \"marker\" ? 16 : 3)),\n\t\t\t\t\t...(previewStrokeStyle?.strokeOpacity != null && !isLaser\n\t\t\t\t\t\t? { strokeOpacity: previewStrokeStyle.strokeOpacity }\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\t\t\t\tconst payload = computeFreehandSvgPayload(\n\t\t\t\t\traw,\n\t\t\t\t\tpreviewStyle,\n\t\t\t\t\ttool === \"laser\" ? \"draw\" : tool,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\tif (payload) {\n\t\t\t\t\tif (payload.kind === \"circle\") {\n\t\t\t\t\t\tpreview = (\n\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\t\t\t\tr={payload.r}\n\t\t\t\t\t\t\t\tfill={payload.fill}\n\t\t\t\t\t\t\t\tfillOpacity={payload.fillOpacity}\n\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (payload.kind === \"fillPath\") {\n\t\t\t\t\t\tpreview = (\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={payload.d}\n\t\t\t\t\t\t\t\tfill={payload.fill}\n\t\t\t\t\t\t\t\tfillOpacity={payload.fillOpacity}\n\t\t\t\t\t\t\t\tfillRule=\"nonzero\"\n\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpreview = (\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={payload.d}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={payload.stroke}\n\t\t\t\t\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\t\t\t\t\tstrokeOpacity={isLaser ? 0.85 : payload.strokeOpacity}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlet eraserPreview: React.ReactNode = null;\n\tif (eraserPreviewItems.length > 0) {\n\t\teraserPreview = (\n\t\t\t<g>\n\t\t\t\t{eraserPreviewItems.map((it) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g\n\t\t\t\t\t\t\tkey={`erase-preview-${it.id}`}\n\t\t\t\t\t\t\ttransform={formatItemPlacementTransform(it)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderEraserSkeleton(it, overlayStrokePx)}\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</g>\n\t\t);\n\t}\n\n\tlet eraserTrailOverlay: React.ReactNode = null;\n\tif (eraserTrail.length >= 1) {\n\t\tconst now = Date.now();\n\t\tconst maxAgeMs = 150;\n\t\tconst alive = eraserTrail.filter((p) => now - p.t <= maxAgeMs);\n\t\tif (alive.length > 0) {\n\t\t\tconst d = pointsToSmoothPath(alive);\n\t\t\tconst newest = alive[alive.length - 1];\n\t\t\tconst newestAge = newest ? now - newest.t : maxAgeMs;\n\t\t\tconst headOpacity = Math.max(0, 1 - newestAge / maxAgeMs);\n\t\t\teraserTrailOverlay = (\n\t\t\t\t<g>\n\t\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={d}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={ERASER_TINT}\n\t\t\t\t\t\t\tstrokeOpacity={ERASER_TINT_OPACITY}\n\t\t\t\t\t\t\tstrokeWidth={Math.max(3.5, overlayStrokePx)}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx={newest?.x ?? alive[0]?.x}\n\t\t\t\t\t\tcy={newest?.y ?? alive[0]?.y}\n\t\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\t\tfill={ERASER_TINT}\n\t\t\t\t\t\tfillOpacity={headOpacity}\n\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t);\n\t\t}\n\t}\n\n\tlet laserTrailOverlay: React.ReactNode = null;\n\tif (laserTrail.length >= 1) {\n\t\tconst now = Date.now();\n\t\tconst maxAgeMs = 650;\n\t\tconst alive = laserTrail.filter((p) => now - p.t <= maxAgeMs);\n\t\tif (alive.length > 0) {\n\t\t\tconst d = pointsToSmoothPath(alive);\n\t\t\tconst newest = alive[alive.length - 1];\n\t\t\tconst newestAge = newest ? now - newest.t : maxAgeMs;\n\t\t\tconst headOpacity = Math.max(0, 1 - newestAge / maxAgeMs);\n\t\t\tlaserTrailOverlay = (\n\t\t\t\t<g>\n\t\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={d}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"#f43f5e\"\n\t\t\t\t\t\t\tstrokeOpacity={0.9}\n\t\t\t\t\t\t\tstrokeWidth={Math.max(4, overlayStrokePx)}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx={newest?.x ?? alive[0]?.x}\n\t\t\t\t\t\tcy={newest?.y ?? alive[0]?.y}\n\t\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\t\tfill=\"#f43f5e\"\n\t\t\t\t\t\tfillOpacity={headOpacity}\n\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<svg\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\tbottom: 0,\n\t\t\t\tzIndex: 11,\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: \"100%\",\n\t\t\t\ttouchAction: \"none\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t}}\n\t\t\trole=\"presentation\"\n\t\t\taria-hidden\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t>\n\t\t\t<g transform={rootTransform}>\n\t\t\t\t{preview}\n\t\t\t\t{laserTrailOverlay}\n\t\t\t\t{eraserTrailOverlay}\n\t\t\t\t{eraserPreview}\n\t\t\t\t{selection}\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","\"use client\";\n\nimport { MousePointer2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { Camera2D } from \"../../camera/camera\";\nimport { formatCameraTransform } from \"../../renderer/svg-vector-renderer\";\nimport { smoothFreehandPointsToPathD } from \"../../scene/freehand-path\";\nimport { defaultPresenceColorForId } from \"./peer-color\";\nimport type { RemotePresenceMarkupStroke, RemotePresencePeer } from \"./types\";\n\nfunction strokePaint(\n\ttool: RemotePresenceMarkupStroke[\"tool\"],\n\tfallback: string,\n): { stroke: string; strokeOpacity: number; widthWorld: number } {\n\tswitch (tool) {\n\t\tcase \"laser\":\n\t\t\treturn { stroke: \"#f43f5e\", strokeOpacity: 0.92, widthWorld: 4 };\n\t\tcase \"marker\":\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.45, widthWorld: 14 };\n\t\tcase \"brush\":\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.85, widthWorld: 5 };\n\t\tcase \"pencil\":\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.9, widthWorld: 2.5 };\n\t\tdefault:\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.95, widthWorld: 3.5 };\n\t}\n}\n\nexport type PresenceRemoteLayerProps = {\n\tcamera: Camera2D;\n\t/** Bump when camera changes (same as {@link InteractionOverlay}). */\n\tcameraVersion: number;\n\tpeers: readonly RemotePresencePeer[];\n};\n\n/**\n * World-space SVG overlay: remote cursors + in-progress markup strokes.\n * Usually passed via {@link VectorViewport} `remotePresence` or `presenceOverlay`.\n */\nexport function PresenceRemoteLayer({\n\tcamera,\n\tcameraVersion: _cameraVersion,\n\tpeers,\n}: PresenceRemoteLayerProps) {\n\tvoid _cameraVersion;\n\tconst z = camera.zoom;\n\tconst rootTransform = formatCameraTransform(camera);\n\tconst overlayStrokePx = 1.25;\n\t/** Lucide `MousePointer2` viewBox; tip ≈ this point in icon space (see lucide `mouse-pointer-2`). */\n\tconst LUCIDE_POINTER_VIEWBOX = 24;\n\tconst LUCIDE_POINTER_TIP_X = 4.037;\n\tconst LUCIDE_POINTER_TIP_Y = 4.688;\n\t/** Target on-screen size (~px); scale in world space so it stays constant when zooming. */\n\tconst remoteCursorScreenPx = 15;\n\tconst iconWorldScale = remoteCursorScreenPx / (LUCIDE_POINTER_VIEWBOX * z);\n\n\treturn (\n\t\t<svg\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\tbottom: 0,\n\t\t\t\tzIndex: 9,\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: \"100%\",\n\t\t\t\ttouchAction: \"none\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t}}\n\t\t\trole=\"presentation\"\n\t\t\taria-hidden\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t>\n\t\t\t<g transform={rootTransform}>\n\t\t\t\t{peers.map((peer) => {\n\t\t\t\t\tconst color = peer.color ?? defaultPresenceColorForId(peer.id);\n\t\t\t\t\tconst markup = peer.markupStroke;\n\t\t\t\t\tlet strokeNode: ReactNode = null;\n\t\t\t\t\tif (markup && markup.points.length > 0) {\n\t\t\t\t\t\tconst paint = strokePaint(markup.tool, color);\n\t\t\t\t\t\tconst d =\n\t\t\t\t\t\t\tmarkup.points.length >= 2\n\t\t\t\t\t\t\t\t? smoothFreehandPointsToPathD([...markup.points])\n\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\tstrokeNode = (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={d}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={paint.stroke}\n\t\t\t\t\t\t\t\t\tstrokeOpacity={paint.strokeOpacity}\n\t\t\t\t\t\t\t\t\tstrokeWidth={Math.max(paint.widthWorld / z, overlayStrokePx)}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst p0 = markup.points[0];\n\t\t\t\t\t\t\tif (p0) {\n\t\t\t\t\t\t\t\tstrokeNode = (\n\t\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\t\tcx={p0.x}\n\t\t\t\t\t\t\t\t\t\tcy={p0.y}\n\t\t\t\t\t\t\t\t\t\tr={Math.max(3 / z, 2)}\n\t\t\t\t\t\t\t\t\t\tfill={paint.stroke}\n\t\t\t\t\t\t\t\t\t\tfillOpacity={paint.strokeOpacity}\n\t\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cur = peer.cursor;\n\t\t\t\t\tlet cursorNode: ReactNode = null;\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tconst displayName = peer.displayName;\n\t\t\t\t\t\tconst labelOffsetX = 10 / z;\n\t\t\t\t\t\tconst labelOffsetY = 10 / z;\n\t\t\t\t\t\tconst labelFont = 10 / z;\n\t\t\t\t\t\tcursorNode = (\n\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\t\ttransform={`translate(${cur.x}, ${cur.y}) scale(${iconWorldScale}) translate(${-LUCIDE_POINTER_TIP_X}, ${-LUCIDE_POINTER_TIP_Y})`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MousePointer2\n\t\t\t\t\t\t\t\t\t\tsize={LUCIDE_POINTER_VIEWBOX}\n\t\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\t\tfill={color}\n\t\t\t\t\t\t\t\t\t\tstroke=\"#ffffff\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.25}\n\t\t\t\t\t\t\t\t\t\tabsoluteStrokeWidth\n\t\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t{displayName ? (\n\t\t\t\t\t\t\t\t\t<text\n\t\t\t\t\t\t\t\t\t\tx={cur.x + labelOffsetX}\n\t\t\t\t\t\t\t\t\t\ty={cur.y + labelOffsetY}\n\t\t\t\t\t\t\t\t\t\tfill={color}\n\t\t\t\t\t\t\t\t\t\tstroke=\"#ffffff\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={2.5 / z}\n\t\t\t\t\t\t\t\t\t\tpaintOrder=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tfontSize: labelFont,\n\t\t\t\t\t\t\t\t\t\t\tfontFamily: \"system-ui, sans-serif\",\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g key={peer.id}>\n\t\t\t\t\t\t\t{strokeNode}\n\t\t\t\t\t\t\t{cursorNode}\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","/**\n * Deterministic accent from a peer id when `color` is not provided.\n */\nexport function defaultPresenceColorForId(id: string): string {\n\tlet h = 2166136261;\n\tfor (let i = 0; i < id.length; i++) {\n\t\th ^= id.charCodeAt(i);\n\t\th = Math.imul(h, 16777619);\n\t}\n\tconst hue = (h >>> 0) % 360;\n\treturn `hsl(${hue} 72% 42%)`;\n}\n","\"use client\";\n\nimport { type KeyboardEvent, useLayoutEffect, useRef } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport { normalizeRect } from \"../math/rect\";\nimport { DEFAULT_TEXT_FONT_SIZE } from \"../scene/text-svg\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type TextEditOverlayProps = {\n\tcamera: Camera2D;\n\t/** Re-render when camera pans/zooms so the field stays aligned. */\n\tcameraVersion: number;\n\titem: VectorSceneItem;\n\tdraftText: string;\n\tonDraftChange: (value: string) => void;\n\tonCommit: () => void;\n\tonCancel: () => void;\n};\n\n/**\n * Screen-space textarea aligned to a text item’s world bounds (above hit layer).\n */\nexport function TextEditOverlay({\n\tcamera,\n\tcameraVersion: _cameraVersion,\n\titem,\n\tdraftText,\n\tonDraftChange,\n\tonCommit,\n\tonCancel,\n}: TextEditOverlayProps) {\n\tvoid _cameraVersion;\n\tconst taRef = useRef<HTMLTextAreaElement>(null);\n\tconst skipCommitRef = useRef(false);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: re-focus when switching to another text item\n\tuseLayoutEffect(() => {\n\t\tconst el = taRef.current;\n\t\tif (!el) return;\n\t\tel.focus();\n\t\tel.select();\n\t}, [item.id]);\n\n\tconst handleBlur = () => {\n\t\tif (skipCommitRef.current) {\n\t\t\tskipCommitRef.current = false;\n\t\t\treturn;\n\t\t}\n\t\tonCommit();\n\t};\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.key === \"Escape\") {\n\t\t\te.preventDefault();\n\t\t\tskipCommitRef.current = true;\n\t\t\tonCancel();\n\t\t}\n\t};\n\n\tconst b = normalizeRect(item.bounds);\n\tconst z = camera.zoom;\n\tconst w = b.width * z;\n\tconst h = b.height * z;\n\tconst rot = item.rotation ?? 0;\n\tconst cx = b.x + b.width / 2;\n\tconst cy = b.y + b.height / 2;\n\tconst cScreen = camera.worldToScreen(cx, cy);\n\tconst fsWorld = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\tconst fontSize = fsWorld * z;\n\tconst lineHeight = fsWorld * (22 / 18) * z;\n\tconst fixedBox = !!item.textFixedBounds;\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"text-edit-overlay\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: cScreen.screenX - w / 2,\n\t\t\t\ttop: cScreen.screenY - h / 2,\n\t\t\t\twidth: w,\n\t\t\t\theight: h,\n\t\t\t\tzIndex: 20,\n\t\t\t\tpointerEvents: \"auto\",\n\t\t\t\toverflow: \"visible\",\n\t\t\t\ttransform:\n\t\t\t\t\tMath.abs(rot) < 1e-12 ? undefined : `rotate(${(rot * 180) / Math.PI}deg)`,\n\t\t\t\ttransformOrigin: \"center center\",\n\t\t\t}}\n\t\t>\n\t\t\t<textarea\n\t\t\t\tref={taRef}\n\t\t\t\tvalue={draftText}\n\t\t\t\tonChange={(e) => onDraftChange(e.target.value)}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\taria-label=\"Edit text\"\n\t\t\t\tstyle={{\n\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 2,\n\t\t\t\t\tborder: \"none\",\n\t\t\t\t\tborderRadius: 0,\n\t\t\t\t\tresize: \"none\",\n\t\t\t\t\tfontFamily: \"system-ui, sans-serif\",\n\t\t\t\t\tfontSize,\n\t\t\t\t\tlineHeight: `${lineHeight}px`,\n\t\t\t\t\tcolor: \"#0f172a\",\n\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\tbackgroundColor: \"transparent\",\n\t\t\t\t\toutline: \"none\",\n\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\tappearance: \"none\",\n\t\t\t\t\tWebkitAppearance: \"none\",\n\t\t\t\t\tWebkitTapHighlightColor: \"transparent\",\n\t\t\t\t\t/* Auto-sized text: no soft wrap / scrollbar; fixed box: wrap like the SVG. */\n\t\t\t\t\twhiteSpace: fixedBox ? \"pre-wrap\" : \"pre\",\n\t\t\t\t\toverflow: fixedBox ? \"auto\" : \"hidden\",\n\t\t\t\t\toverflowX: fixedBox ? \"hidden\" : \"hidden\",\n\t\t\t\t\twordWrap: fixedBox ? \"break-word\" : \"normal\",\n\t\t\t\t\twordBreak: fixedBox ? \"break-word\" : \"normal\",\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport type { ResizeHandleId } from \"../interaction/resize-handles\";\nimport { rectFromCorners } from \"../interaction/resize-handles\";\nimport { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect, rectsIntersect } from \"../math/rect\";\nimport type { VectorPathPoint, VectorSceneItem } from \"../scene/types\";\n\nexport function usePrefersReducedMotion(): boolean {\n\tconst [reduced, setReduced] = useState(false);\n\tuseEffect(() => {\n\t\tconst mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\t\tsetReduced(mq.matches);\n\t\tconst listener = () => setReduced(mq.matches);\n\t\tmq.addEventListener(\"change\", listener);\n\t\treturn () => mq.removeEventListener(\"change\", listener);\n\t}, []);\n\treturn reduced;\n}\n\nexport const visuallyHidden: CSSProperties = {\n\tposition: \"absolute\",\n\twidth: 1,\n\theight: 1,\n\tpadding: 0,\n\tmargin: -1,\n\toverflow: \"hidden\",\n\tclip: \"rect(0, 0, 0, 0)\",\n\twhiteSpace: \"nowrap\",\n\tborder: 0,\n};\n\n/** Keyboard +/- and zoom UI buttons use the same factor. */\nexport const VIEWPORT_ZOOM_STEP = 1.15;\n\nexport function replaceItem(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n\tnext: VectorSceneItem,\n): VectorSceneItem[] {\n\treturn items.map((it) => (it.id === id ? next : it));\n}\n\nexport function supportsResizeHandles(\n\titem: VectorSceneItem | null | undefined,\n): item is VectorSceneItem & {\n\ttoolKind:\n\t\t| \"rect\"\n\t\t| \"ellipse\"\n\t\t| \"line\"\n\t\t| \"arrow\"\n\t\t| \"image\"\n\t\t| \"text\"\n\t\t| \"custom\"\n\t\t| \"draw\"\n\t\t| \"pencil\"\n\t\t| \"brush\"\n\t\t| \"marker\";\n} {\n\tconst k = item?.toolKind;\n\tif (\n\t\tk === \"rect\" ||\n\t\tk === \"ellipse\" ||\n\t\tk === \"line\" ||\n\t\tk === \"arrow\" ||\n\t\tk === \"image\" ||\n\t\tk === \"text\"\n\t) {\n\t\treturn true;\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 true;\n\t}\n\treturn k === \"custom\" && !!item?.customIntrinsicSize && !!item?.customInnerSvg;\n}\n\nexport type DragState =\n\t| { kind: \"idle\" }\n\t| {\n\t\t\tkind: \"move\";\n\t\t\tids: string[];\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tsnapshots: Record<string, VectorSceneItem>;\n\t }\n\t| {\n\t\t\tkind: \"resize\";\n\t\t\tid: string;\n\t\t\thandle: ResizeHandleId;\n\t\t\tsnapshot: VectorSceneItem;\n\t\t\tstart: {\n\t\t\t\tbounds: Rect;\n\t\t\t\tline?: import(\"../scene/types\").LineEndpointsLocal;\n\t\t\t};\n\t }\n\t| {\n\t\t\tkind: \"rotate\";\n\t\t\tid: string;\n\t\t\tsnapshot: VectorSceneItem;\n\t\t\tpivotWorld: { x: number; y: number };\n\t\t\tstartPointerAngleRad: number;\n\t\t\tstartRotation: number;\n\t }\n\t| {\n\t\t\tkind: \"place\";\n\t\t\ttool: string;\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tstartScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\tkind: \"tap\";\n\t\t\ttool: \"text\" | \"image\";\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tstartScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\tkind: \"stroke\";\n\t\t\ttool: \"draw\" | \"marker\" | \"laser\";\n\t\t\tpoints: VectorPathPoint[];\n\t\t\tpointerType: string;\n\t\t\titemId?: string;\n\t }\n\t| { kind: \"erase\" }\n\t| {\n\t\t\tkind: \"marquee\";\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tstartScreen: { x: number; y: number };\n\t\t\tshiftKey: boolean;\n\t\t\tselectionBefore: string[];\n\t };\n\nexport const MIN_PLACE_SIZE = 8;\n/** Screen px — arrow is created only by drag; a click or micro-move cancels (tldraw-style). */\nexport const MIN_ARROW_DRAG_PX = 8;\n/** World units — ignore accidental micro-drags when rubber-band selecting. */\nexport const MIN_MARQUEE_WORLD = 4;\n/** Screen px — small jitter on trackpads cancels the tap if too low. */\nexport const TAP_PX = 20;\n\nexport function collectItemIdsInRect(\n\titems: readonly VectorSceneItem[],\n\tmarqueeWorld: Rect,\n): string[] {\n\tconst m = normalizeRect(marqueeWorld);\n\tconst out: string[] = [];\n\tfor (const it of items) {\n\t\tif (it.locked) continue;\n\t\tif (rectsIntersect(normalizeRect(boundsAabbForRotatedItem(it)), m)) {\n\t\t\tout.push(it.id);\n\t\t}\n\t}\n\treturn out;\n}\n\n/** Fits {@link Camera2D} so `worldRect` is visible in a viewport of `viewportW` × `viewportH` CSS px. */\nexport function fitCameraToWorldRect(\n\tcamera: Camera2D,\n\tviewportW: number,\n\tviewportH: number,\n\tworldRect: Rect,\n\tpadding: number,\n): void {\n\tconst r = normalizeRect(worldRect);\n\tif (r.width <= 0 || r.height <= 0 || viewportW <= 0 || viewportH <= 0) {\n\t\treturn;\n\t}\n\tconst pad = Math.max(0, padding);\n\tconst neededW = r.width * (1 + 2 * pad);\n\tconst neededH = r.height * (1 + 2 * pad);\n\tconst zoomX = viewportW / neededW;\n\tconst zoomY = viewportH / neededH;\n\tlet z = Math.min(zoomX, zoomY);\n\tz = Math.min(camera.maxZoom, Math.max(camera.minZoom, z));\n\tconst cx = r.x + r.width / 2;\n\tconst cy = r.y + r.height / 2;\n\tcamera.zoom = z;\n\tcamera.x = viewportW / 2 - cx * z;\n\tcamera.y = viewportH / 2 - cy * z;\n}\n\nexport function tryPointerCaptureOnTarget(\n\ttarget: EventTarget | null,\n\tpointerId: number,\n): void {\n\tif (!target || !(target instanceof HTMLElement)) return;\n\ttry {\n\t\ttarget.setPointerCapture(pointerId);\n\t} catch {\n\t\t/* ignore */\n\t}\n}\n\nexport { cursorForVectorToolId } from \"./vector-tool-cursors\";\n\n/** When the user clicks (or barely drags), use centered default sizes instead of rejecting. */\nexport function defaultPlacementWorld(\n\ttool: string,\n\tcenter: { x: number; y: number },\n): {\n\traw: Rect;\n\tlineWorld?: [{ x: number; y: number }, { x: number; y: number }];\n} {\n\tconst cx = center.x;\n\tconst cy = center.y;\n\tif (tool === \"rect\") {\n\t\treturn { raw: { x: cx - 60, y: cy - 40, width: 120, height: 80 } };\n\t}\n\tif (tool === \"ellipse\") {\n\t\treturn { raw: { x: cx - 70, y: cy - 45, width: 140, height: 90 } };\n\t}\n\tconst a = { x: cx - 50, y: cy };\n\tconst b = { x: cx + 50, y: cy };\n\treturn {\n\t\traw: rectFromCorners(a, b),\n\t\tlineWorld: [a, b],\n\t};\n}\n","\"use client\";\n\n/**\n * SVG paths for drawing tools match Lucide icons in {@link DEFAULT_VECTOR_TOOLS} (lucide-react v1.x).\n */\nconst NS = 'xmlns=\"http://www.w3.org/2000/svg\"';\nconst STROKE = \"#18181b\";\n\nfunction wrapSvg(inner: string): string {\n\treturn `<svg ${NS} width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"${STROKE}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${inner}</svg>`;\n}\n\nfunction svgUrlCursor(\n\tinner: string,\n\thx: number,\n\thy: number,\n\tfallback: string,\n): string {\n\treturn `url(\"data:image/svg+xml,${encodeURIComponent(wrapSvg(inner))}\") ${hx} ${hy}, ${fallback}`;\n}\n\n/** Lucide `pen-line` */\nconst DRAW_INNER = `<path d=\"M13 21h8\"/><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/>`;\n/** Lucide `highlighter` */\nconst MARKER_INNER = `<path d=\"m9 11-6 6v3h9l3-3\"/><path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\"/>`;\n/** Lucide `eraser` */\nconst ERASER_INNER = `<path d=\"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21\"/><path d=\"m5.082 11.09 8.828 8.828\"/>`;\n/**\n * CSS `cursor` for the active toolbar tool id (see default vector tools).\n * SVG cursors matching Lucide toolbar glyphs are used for freehand tools only.\n * Shape tools keep the old native crosshair cursor.\n */\nexport function cursorForVectorToolId(toolId: string): string {\n\tconst fb = \"crosshair\";\n\tswitch (toolId) {\n\t\tcase \"hand\":\n\t\t\treturn \"grab\";\n\t\tcase \"select\":\n\t\t\treturn \"default\";\n\t\tcase \"rect\":\n\t\tcase \"ellipse\":\n\t\tcase \"line\":\n\t\tcase \"arrow\":\n\t\t\treturn \"crosshair\";\n\t\tcase \"draw\":\n\t\t\treturn svgUrlCursor(DRAW_INNER, 4, 18, fb);\n\t\tcase \"marker\":\n\t\t\treturn svgUrlCursor(MARKER_INNER, 11, 14, fb);\n\t\tcase \"laser\":\n\t\t\treturn \"crosshair\";\n\t\tcase \"eraser\":\n\t\t\treturn svgUrlCursor(ERASER_INNER, 12, 14, fb);\n\t\tcase \"text\":\n\t\t\treturn \"text\";\n\t\tcase \"image\":\n\t\t\treturn \"crosshair\";\n\t\tdefault:\n\t\t\treturn \"default\";\n\t}\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport {\n\ttype BoardComponentPosition,\n\tgetBoardPositionStyle,\n} from \"./VectorCanvasLayout\";\n\nexport type ViewportZoomControlsProps = {\n\t/** Current zoom for display, e.g. from `Math.round(camera.zoom * 100)`. */\n\tzoomPercent: number;\n\tonZoomIn: () => void;\n\tonZoomOut: () => void;\n\tclassName?: string;\n\t/** Anchor preset. Pass to relocate the floating control. */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from anchored edges. @default 12 */\n\tinset?: number;\n\t/** @default 22 */\n\tzIndex?: number;\n\t/** Merged on top of position-derived styles for custom tweaks. */\n\tstyle?: CSSProperties;\n};\n\n/** Default anchor — sits above the {@link NavMenu}/{@link VectorMinimap} on the bottom-left. */\nconst DEFAULT_SHELL_STYLE: CSSProperties = {\n\tposition: \"absolute\",\n\tleft: 12,\n\tbottom: 140,\n\tzIndex: 22,\n};\n\nconst layoutStyle: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: 4,\n\t/* Let clicks pass through the flex gaps; buttons opt in below. */\n\tpointerEvents: \"none\",\n};\n\nconst btnStyle: CSSProperties = {\n\tpointerEvents: \"auto\",\n\twidth: 36,\n\theight: 36,\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tborderRadius: 8,\n\tborder: \"1px solid rgba(0,0,0,0.12)\",\n\tbackground: \"rgba(255,255,255,0.96)\",\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tcursor: \"pointer\",\n\tfontSize: 18,\n\tlineHeight: 1,\n\tfontWeight: 600,\n\tcolor: \"#18181b\",\n\tpadding: 0,\n\toutline: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nconst labelStyle: CSSProperties = {\n\tpointerEvents: \"none\",\n\tfontSize: 10,\n\tfontWeight: 600,\n\tcolor: \"#52525b\",\n\ttextAlign: \"center\",\n\tuserSelect: \"none\",\n\tpadding: \"2px 0\",\n};\n\n/** Reset default fieldset chrome so layout matches the previous `div` shell. */\nconst fieldsetReset: CSSProperties = {\n\tborder: \"none\",\n\tmargin: 0,\n\tpadding: 0,\n\tminWidth: 0,\n};\n\n/**\n * Floating zoom +/- controls. Defaults to the bottom-left, above the minimap.\n * Place inside the viewport root (position relative). Pass `position` for any of the\n * {@link BoardComponentPosition} presets, or `className`/`style` to fully customize.\n */\nexport function ViewportZoomControls({\n\tzoomPercent,\n\tonZoomIn,\n\tonZoomOut,\n\tclassName = \"\",\n\tposition,\n\tinset = 12,\n\tzIndex = 22,\n\tstyle,\n}: ViewportZoomControlsProps) {\n\tconst anchorStyle: CSSProperties =\n\t\tposition !== undefined\n\t\t\t? getBoardPositionStyle(position, inset, zIndex)\n\t\t\t: DEFAULT_SHELL_STYLE;\n\treturn (\n\t\t<fieldset\n\t\t\tclassName={className}\n\t\t\tdata-position={position ?? \"default\"}\n\t\t\taria-label=\"Zoom controls\"\n\t\t\tstyle={{ ...anchorStyle, ...layoutStyle, ...fieldsetReset, ...style }}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tstyle={btnStyle}\n\t\t\t\taria-label=\"Zoom in\"\n\t\t\t\ttitle=\"Zoom in\"\n\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t}}\n\t\t\t\tonClick={onZoomIn}\n\t\t\t>\n\t\t\t\t+\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tstyle={btnStyle}\n\t\t\t\taria-label=\"Zoom out\"\n\t\t\t\ttitle=\"Zoom out\"\n\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t}}\n\t\t\t\tonClick={onZoomOut}\n\t\t\t>\n\t\t\t\t−\n\t\t\t</button>\n\t\t\t<span style={labelStyle} aria-hidden>\n\t\t\t\t{zoomPercent}%\n\t\t\t</span>\n\t\t</fieldset>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/freehand-path.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/react/chrome-context.ts","../src/math/item-transform.ts","../src/react/NavMenu.tsx","../src/react/VectorSelectionInspector.tsx","../src/react/VectorCanvasLayout.tsx","../src/image/indexed-db-image-store.ts","../src/react/persistence/indexed-db-adapter.ts","../src/react/persistence/local-storage-adapter.ts","../src/react/persistence/use-vector-canvas-document.ts","../src/react/plugins/types.ts","../src/react/plugins/tool-plugin.tsx","../src/react/ShapeContextMenu.tsx","../src/react/tools/icons.tsx","../src/react/tools/default-tools.tsx","../src/react/VectorToolbar.tsx","../src/camera/camera.ts","../src/image/pdf-loader.ts","../src/input/apple-pencil-navigation.ts","../src/input/attach-viewport-input.ts","../src/interaction/arrow-bindings.ts","../src/interaction/resize-handles.ts","../src/interaction/hit-test.ts","../src/interaction/mutations.ts","../src/react/VectorViewport.tsx","../src/renderer/svg-vector-renderer.ts","../src/scene/cull.ts","../src/scene/spatial-cull.ts","../src/scene/clone-item.ts","../src/scene/scene.ts","../src/react/InteractionOverlay.tsx","../src/react/presence/PresenceRemoteLayer.tsx","../src/react/presence/peer-color.ts","../src/react/TextEditOverlay.tsx","../src/react/vector-viewport-support.ts","../src/react/vector-tool-cursors.ts","../src/react/ViewportZoomControls.tsx"],"names":["d","base","op","b","s","stroke","strokeWidth","hex","showMarkerOpacity","opacityPct","jsx","labelStyle","jsxs","useState","useRef","useCallback","createContext","useContext","useMemo","useLayoutEffect","useEffect","Image","Fragment","canvasToBlob","g","MousePointer2","VectorViewport","items","useId","buildRasterImageChildrenSvg","worldX","worldY","id","pen","rootStyle","btnStyle"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * Axis-aligned rectangle in 2D (world or screen space).\n */\nexport type Rect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\n/**\n * Returns whether two axis-aligned rectangles intersect (edges touching count).\n */\nexport function rectsIntersect(a: Rect, b: Rect): boolean {\n\treturn (\n\t\ta.x < b.x + b.width &&\n\t\ta.x + a.width > b.x &&\n\t\ta.y < b.y + b.height &&\n\t\ta.y + a.height > b.y\n\t);\n}\n\n/**\n * Normalizes a rect so width and height are non-negative.\n */\nexport function normalizeRect(r: Rect): Rect {\n\tconst x0 = r.width >= 0 ? r.x : r.x + r.width;\n\tconst y0 = r.height >= 0 ? r.y : r.y + r.height;\n\treturn {\n\t\tx: x0,\n\t\ty: y0,\n\t\twidth: Math.abs(r.width),\n\t\theight: Math.abs(r.height),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Width/height of the shape’s local drawing box (same as `bounds` at creation). */\nexport type CustomShapeSize = { width: number; height: number };\n\n/**\n * How to build the inner SVG (inside the item’s bounding box).\n *\n * - **`svg`**: paste-friendly markup. Use `{{w}}`, `{{h}}`, `{{width}}`, or `{{height}}` where the size should go.\n * - **`render`**: a small function when you prefer code over a string template.\n */\nexport type CreateCustomShapeContent =\n\t| {\n\t\t\t/**\n\t\t\t * SVG fragment for `<g>` contents (no outer `<svg>`). Placeholders are replaced with numeric sizes:\n\t\t\t * `{{w}}`, `{{h}}`, `{{width}}`, `{{height}}`.\n\t\t\t */\n\t\t\tsvg: string;\n\t }\n\t| {\n\t\t\t/** Returns inner SVG for the given box size (same coordinate range as `bounds`). */\n\t\t\trender: (size: CustomShapeSize) => string;\n\t };\n\n/**\n * Replaces `{{w}}`, `{{h}}`, `{{width}}`, and `{{height}}` in a string with the given dimensions.\n * Use this if you build SVG strings yourself and want the same rules as {@link createCustomShapeItem}.\n */\nexport function expandCustomShapeTemplate(\n\ttemplate: string,\n\twidth: number,\n\theight: number,\n): string {\n\treturn template\n\t\t.replace(/\\{\\{w\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{h\\}\\}/g, String(height))\n\t\t.replace(/\\{\\{width\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{height\\}\\}/g, String(height));\n}\n\nfunction resolveCustomInner(\n\tcontent: CreateCustomShapeContent,\n\tsize: CustomShapeSize,\n): string {\n\tif (\"render\" in content) {\n\t\treturn content.render(size);\n\t}\n\treturn expandCustomShapeTemplate(content.svg, size.width, size.height);\n}\n\n/**\n * Builds the scaled `<g>` wrapper used for `childrenSvg` on custom shapes that support resize.\n */\nexport function buildCustomShapeChildrenSvg(\n\tinner: string,\n\tintrinsic: CustomShapeSize,\n\tbounds: Rect,\n): string {\n\tconst b = normalizeRect(bounds);\n\tconst sx = b.width / intrinsic.width;\n\tconst sy = b.height / intrinsic.height;\n\treturn `<g transform=\"scale(${sx},${sy})\">${inner}</g>`;\n}\n\n/**\n * Creates a user-defined shape from SVG markup or a `render` callback.\n *\n * Coordinates are **local**: draw from `(0,0)` to `(width, height)` of `bounds`. The library stores an\n * intrinsic copy so resize handles (when interactive) scale the drawing uniformly.\n *\n * @example\n * ```ts\n * const star = createCustomShapeItem(createShapeId(), rect, {\n * svg: `<polygon points=\"...\" fill=\"gold\" stroke=\"#b45309\" stroke-width=\"2\" />`,\n * });\n * ```\n *\n * @example Template (good for copy-paste from design tools)\n * ```ts\n * createCustomShapeItem(id, rect, {\n * svg: `<rect width=\"{{w}}\" height=\"{{h}}\" rx=\"8\" fill=\"#e0e7ff\" stroke=\"#6366f1\" />`,\n * });\n * ```\n */\nexport function createCustomShapeItem(\n\tid: string,\n\tbounds: Rect,\n\tcontent: CreateCustomShapeContent,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst intrinsic: CustomShapeSize = { width: r.width, height: r.height };\n\tconst inner = resolveCustomInner(content, intrinsic);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"custom\",\n\t\tcustomIntrinsicSize: intrinsic,\n\t\tcustomInnerSvg: inner,\n\t\tchildrenSvg: buildCustomShapeChildrenSvg(inner, intrinsic, r),\n\t};\n}\n","/**\n * Freehand stroke helpers: dedupe noisy samples and build smooth SVG path `d` values\n * (quadratic Béziers) so strokes don't look jagged / \"pixelated\" from many short L segments.\n */\n\n/** Drop intermediate samples closer than `minDist` (local/world units) to reduce jitter. */\nexport function dedupeFreehandPoints<T extends { x: number; y: number }>(\n\tpoints: readonly T[],\n\tminDist: number,\n): T[] {\n\tif (points.length <= 2) {\n\t\treturn points.map((p) => ({ ...p }));\n\t}\n\tconst minSq = minDist * minDist;\n\tconst first = points[0];\n\tif (!first) return [];\n\tconst out: T[] = [{ ...first }];\n\tfor (let i = 1; i < points.length - 1; i++) {\n\t\tconst p = points[i];\n\t\tconst last = out[out.length - 1];\n\t\tif (!p || !last) continue;\n\t\tconst dx = p.x - last.x;\n\t\tconst dy = p.y - last.y;\n\t\tif (dx * dx + dy * dy >= minSq) {\n\t\t\tout.push({ ...p });\n\t\t}\n\t}\n\tconst end = points[points.length - 1];\n\tconst lastKept = out[out.length - 1];\n\tif (!end || !lastKept) return out;\n\tif ((end.x - lastKept.x) ** 2 + (end.y - lastKept.y) ** 2 > 1e-12) {\n\t\tout.push({ ...end });\n\t}\n\treturn out;\n}\n\n/**\n * Smooth polyline → SVG path `d` using quadratic curves (canvas quadraticCurveTo midpoint pattern).\n * Avoids faceted \"broken\" lines from chaining many `L` commands.\n */\nexport function smoothFreehandPointsToPathD(\n\tpoints: readonly { x: number; y: number }[],\n): string {\n\tconst n = points.length;\n\tif (n === 0) return \"\";\n\tif (n === 1) {\n\t\tconst p = points[0];\n\t\tif (!p) return \"\";\n\t\treturn `M ${p.x} ${p.y}`;\n\t}\n\tif (n === 2) {\n\t\tconst a = points[0];\n\t\tconst b = points[1];\n\t\tif (!a || !b) return \"\";\n\t\treturn `M ${a.x} ${a.y} L ${b.x} ${b.y}`;\n\t}\n\tconst p0 = points[0];\n\tif (!p0) return \"\";\n\tlet d = `M ${p0.x} ${p0.y}`;\n\tlet i = 1;\n\tfor (; i < n - 2; i++) {\n\t\tconst pi = points[i];\n\t\tconst pi1 = points[i + 1];\n\t\tif (!pi || !pi1) continue;\n\t\tconst xc = (pi.x + pi1.x) / 2;\n\t\tconst yc = (pi.y + pi1.y) / 2;\n\t\td += ` Q ${pi.x} ${pi.y} ${xc} ${yc}`;\n\t}\n\tconst pLast = points[i];\n\tconst pEnd = points[i + 1];\n\tif (!pLast || !pEnd) return d;\n\td += ` Q ${pLast.x} ${pLast.y} ${pEnd.x} ${pEnd.y}`;\n\treturn d;\n}\n\n/**\n * Closed path from `perfect-freehand` outline → SVG `d` for fill.\n *\n * Uses the algorithm from the perfect-freehand README (`getSvgPathFromStroke`):\n * each outline point is a quadratic control point and the midpoint between\n * consecutive outline points is the curve endpoint. This produces\n * C1-continuous curves without the kinks that chained `T` or short `L` segments cause.\n */\nexport function outlineStrokeToClosedPathD(\n\toutline: readonly [number, number][],\n): string {\n\tconst len = outline.length;\n\tif (len === 0) return \"\";\n\tconst first = outline[0];\n\tif (!first) return \"\";\n\tif (len < 3) {\n\t\tlet d = `M ${first[0]} ${first[1]}`;\n\t\tfor (let i = 1; i < len; i++) {\n\t\t\tconst pt = outline[i];\n\t\t\tif (!pt) continue;\n\t\t\td += ` L ${pt[0]} ${pt[1]}`;\n\t\t}\n\t\treturn `${d} Z`;\n\t}\n\n\tlet d = `M ${first[0]} ${first[1]} Q`;\n\tfor (let i = 0; i < len; i++) {\n\t\tconst p0 = outline[i];\n\t\tconst p1 = outline[(i + 1) % len];\n\t\tif (!p0 || !p1) continue;\n\t\td += ` ${p0[0]} ${p0[1]} ${(p0[0] + p1[0]) / 2} ${(p0[1] + p1[1]) / 2}`;\n\t}\n\treturn `${d} Z`;\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, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\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\tdedupeFreehandPoints,\n\toutlineStrokeToClosedPathD,\n\tsmoothFreehandPointsToPathD,\n} from \"./freehand-path\";\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: 3 },\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.56,\n\t\t\t\tstreamline: 0.18,\n\t\t\t\tsimulatePressure: false,\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.72,\n\t\t\tstreamline: 0.42,\n\t\t\tsimulatePressure: false,\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: false,\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\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\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\tconst r = Math.max(0.5, style.strokeWidth / 2);\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr,\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\t// Keep dense samples so circles/arcs don't become faceted.\n\tconst minDist = Math.min(0.25, Math.max(0.02, style.strokeWidth * 0.02));\n\tconst pts = dedupeFreehandPoints(pathPointsLocal, minDist);\n\tif (pts.length === 0) return null;\n\tif (pts.length === 1) {\n\t\tconst p = pts[0];\n\t\tif (!p) return null;\n\t\tconst r = Math.max(0.5, style.strokeWidth / 2);\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr,\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tconst hasPressure =\n\t\ttoolKind === \"draw\" &&\n\t\tpts.some((p) => p.pressure != null && Number.isFinite(p.pressure));\n\tif (toolKind === \"draw\" && !hasPressure) {\n\t\tconst d = smoothFreehandPointsToPathD(pts);\n\t\treturn {\n\t\t\tkind: \"strokePath\",\n\t\t\td,\n\t\t\tstroke: style.stroke,\n\t\t\tstrokeWidth: style.strokeWidth,\n\t\t\tstrokeOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tconst input = hasPressure\n\t\t? pts.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: pts.map((p) => [p.x, p.y] as [number, number]);\n\tconst opts = perfectFreehandOptions(toolKind, style, strokeComplete, hasPressure);\n\tlet outline: [number, number][] = [];\n\ttry {\n\t\tconst raw = getStroke(input, opts);\n\t\toutline = raw.map(([x, y]) => [x, y] as [number, number]);\n\t} catch {\n\t\toutline = [];\n\t}\n\tif (outline.length >= 3) {\n\t\tconst d = outlineStrokeToClosedPathD(outline);\n\t\treturn {\n\t\t\tkind: \"fillPath\",\n\t\t\td,\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tconst d = smoothFreehandPointsToPathD(pts);\n\treturn {\n\t\tkind: \"strokePath\",\n\t\td,\n\t\tstroke: style.stroke,\n\t\tstrokeWidth: style.strokeWidth,\n\t\tstrokeOpacity: 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 === \"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/** 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, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type CanvuChromeActiveToolStyle = StrokeStyle & {\n\ttoolKind: \"draw\" | \"marker\";\n\tlabel?: string;\n};\n\nexport type CanvuChromeSelectionStyleChange = (patch: {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n}) => void;\n\n/**\n * Runtime data and handlers shared with floating board chrome (e.g. {@link NavMenu},\n * {@link VectorSelectionInspector}). Populated by `VectorViewport` and consumed via\n * {@link useCanvuChromeContext}.\n */\nexport type CanvuChromeContextValue = {\n\tcamera: Camera2D | null;\n\tviewportWidth: number;\n\tviewportHeight: number;\n\titems: readonly VectorSceneItem[];\n\tselectedItems: readonly VectorSceneItem[];\n\tinteractive: boolean;\n\tcanEditSelection: boolean;\n\tactiveToolStyle: CanvuChromeActiveToolStyle | null;\n\tonSelectionStyleChange: CanvuChromeSelectionStyleChange | null;\n\tzoomPercent: number;\n\tonZoomIn: () => void;\n\tonZoomOut: () => void;\n\tonUndo: () => void;\n\tonRedo: () => void;\n\tcanUndo: boolean;\n\tcanRedo: boolean;\n\tonRequestRender: () => void;\n};\n\nexport const CanvuChromeContext = createContext<CanvuChromeContextValue | null>(\n\tnull,\n);\n\n/** Returns the current chrome context or `null` when used outside `VectorViewport`. */\nexport function useCanvuChromeContext(): CanvuChromeContextValue | null {\n\treturn useContext(CanvuChromeContext);\n}\n","import type { VectorSceneItem } from \"../scene/types\";\nimport type { Rect } from \"./rect\";\nimport { normalizeRect } from \"./rect\";\n\n/** Rotation in radians; `undefined` / `0` means no rotation. */\nexport function getItemRotationRad(item: VectorSceneItem): number {\n\treturn item.rotation ?? 0;\n}\n\n/**\n * Converts a point in item **local** space (origin top-left, 0…w × 0…h) to world,\n * with rotation around the box center.\n */\nexport function itemLocalToWorld(\n\tlx: number,\n\tly: number,\n\titemX: number,\n\titemY: number,\n\tw: number,\n\th: number,\n\trotationRad: number,\n): { x: number; y: number } {\n\tconst c = { x: w / 2, y: h / 2 };\n\tconst dlx = lx - c.x;\n\tconst dly = ly - c.y;\n\tconst cos = Math.cos(rotationRad);\n\tconst sin = Math.sin(rotationRad);\n\treturn {\n\t\tx: itemX + c.x + cos * dlx - sin * dly,\n\t\ty: itemY + c.y + sin * dlx + cos * dly,\n\t};\n}\n\n/**\n * Inverse of {@link itemLocalToWorld}.\n */\nexport function worldToItemLocal(\n\twx: number,\n\twy: number,\n\titemX: number,\n\titemY: number,\n\tw: number,\n\th: number,\n\trotationRad: number,\n): { x: number; y: number } {\n\tconst c = { x: w / 2, y: h / 2 };\n\tconst vx = wx - itemX;\n\tconst vy = wy - itemY;\n\tconst dx = vx - c.x;\n\tconst dy = vy - c.y;\n\tconst cos = Math.cos(-rotationRad);\n\tconst sin = Math.sin(-rotationRad);\n\tconst lx = cos * dx - sin * dy;\n\tconst ly = sin * dx + cos * dy;\n\treturn { x: c.x + lx, y: c.y + ly };\n}\n\n/** World-space center of the item’s unrotated bounds (rotation pivot). */\nexport function itemPivotWorld(item: VectorSceneItem): { x: number; y: number } {\n\tconst r = normalizeRect(item.bounds);\n\treturn { x: r.x + r.width / 2, y: r.y + r.height / 2 };\n}\n\n/** Axis-aligned bounding box in world space that contains the rotated rectangle. */\nexport function boundsAabbForRotatedItem(item: VectorSceneItem): Rect {\n\tconst rot = getItemRotationRad(item);\n\tif (Math.abs(rot) < 1e-12 && item.bounds.width >= 0 && item.bounds.height >= 0) {\n\t\treturn item.bounds;\n\t}\n\tconst r = normalizeRect(item.bounds);\n\tif (Math.abs(rot) < 1e-12) {\n\t\treturn r;\n\t}\n\tconst corners: [number, number][] = [\n\t\t[0, 0],\n\t\t[r.width, 0],\n\t\t[r.width, r.height],\n\t\t[0, r.height],\n\t];\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\tfor (const [lx, ly] of corners) {\n\t\tconst p = itemLocalToWorld(lx, ly, item.x, item.y, r.width, r.height, rot);\n\t\tminX = Math.min(minX, p.x);\n\t\tminY = Math.min(minY, p.y);\n\t\tmaxX = Math.max(maxX, p.x);\n\t\tmaxY = Math.max(maxY, p.y);\n\t}\n\treturn { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n","\"use client\";\n\nimport { Redo2, Undo2 } from \"lucide-react\";\nimport { type CSSProperties, useCallback, useRef, useState } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { useCanvuChromeContext } from \"./chrome-context\";\nimport {\n\ttype BoardComponentPosition,\n\tgetBoardPositionStyle,\n} from \"./VectorCanvasLayout\";\n\n/**\n * Floating bottom-bar combining zoom controls, undo/redo, and an expandable minimap.\n * When rendered inside `VectorViewport` (e.g. via the `navMenu` slot), data props default\n * to values from {@link CanvuChromeContext}; pass any prop to override.\n */\nexport type NavMenuProps = {\n\tcamera?: Camera2D;\n\tviewportWidth?: number;\n\tviewportHeight?: number;\n\titems?: readonly VectorSceneItem[];\n\tzoomPercent?: number;\n\tonZoomIn?: () => void;\n\tonZoomOut?: () => void;\n\tonUndo?: () => void;\n\tonRedo?: () => void;\n\tcanUndo?: boolean;\n\tcanRedo?: boolean;\n\tonRequestRender?: () => void;\n\t/** Anchor preset. Defaults to bottom-left. */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from anchored edges. @default 12 */\n\tinset?: number;\n\t/** @default 23 */\n\tzIndex?: number;\n\tclassName?: string;\n\t/** Merged on top of position-derived styles for custom tweaks. */\n\tstyle?: CSSProperties;\n};\n\nconst MINIMAP_W = 180;\nconst MINIMAP_H = 120;\nconst PADDING = 12;\nconst BORDER_RADIUS = 8;\nconst BG = \"#ffffff\";\nconst BORDER_COLOR = \"rgba(0,0,0,0.12)\";\nconst ITEM_FILL = \"rgba(0,0,0,0.08)\";\nconst ITEM_STROKE = \"rgba(0,0,0,0.15)\";\nconst VIEWPORT_FILL = \"rgba(59,130,246,0.08)\";\nconst VIEWPORT_STROKE = \"#3b82f6\";\n\nconst btnStyle: React.CSSProperties = {\n\tpointerEvents: \"auto\",\n\twidth: 36,\n\theight: 36,\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tcursor: \"pointer\",\n\tfontSize: 18,\n\tlineHeight: 1,\n\tcolor: \"#18181b\",\n\tpadding: 0,\n\tborder: \"none\",\n\toutline: \"none\",\n\tbackground: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nconst chevronBtnStyle: React.CSSProperties = {\n\tpointerEvents: \"auto\",\n\twidth: 24,\n\theight: 36,\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tcursor: \"pointer\",\n\tfontSize: 12,\n\tlineHeight: 1,\n\tcolor: \"#52525b\",\n\tpadding: 0,\n\tborder: \"none\",\n\toutline: \"none\",\n\tbackground: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nconst undoBtnStyle: React.CSSProperties = {\n\t...chevronBtnStyle,\n\twidth: 30,\n\topacity: 1,\n\tcolor: \"#18181b\",\n};\n\nconst labelStyle: React.CSSProperties = {\n\tfontSize: 10,\n\tfontWeight: 600,\n\tcolor: \"#52525b\",\n\ttextAlign: \"center\",\n\tuserSelect: \"none\",\n\tpadding: \"2px 0\",\n};\n\nconst panelLayoutStyle: React.CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\talignItems: \"flex-start\",\n\tgap: 4,\n\ttouchAction: \"none\",\n\tpointerEvents: \"none\",\n\tuserSelect: \"none\",\n};\n\nconst innerStyle: React.CSSProperties = {\n\tpointerEvents: \"auto\",\n\tdisplay: \"flex\",\n\tflexDirection: \"row\",\n\talignItems: \"center\",\n\tgap: 4,\n\tbackground: BG,\n\tborderRadius: BORDER_RADIUS,\n\tborder: `1px solid ${BORDER_COLOR}`,\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tpadding: 4,\n};\n\nexport function NavMenu({\n\tcamera: cameraProp,\n\tviewportWidth: viewportWidthProp,\n\tviewportHeight: viewportHeightProp,\n\titems: itemsProp,\n\tzoomPercent: zoomPercentProp,\n\tonZoomIn: onZoomInProp,\n\tonZoomOut: onZoomOutProp,\n\tonUndo: onUndoProp,\n\tonRedo: onRedoProp,\n\tcanUndo: canUndoProp,\n\tcanRedo: canRedoProp,\n\tonRequestRender: onRequestRenderProp,\n\tposition = \"bottom-left\",\n\tinset = 12,\n\tzIndex = 23,\n\tclassName,\n\tstyle,\n}: NavMenuProps) {\n\tconst ctx = useCanvuChromeContext();\n\tconst camera = cameraProp ?? ctx?.camera ?? null;\n\tconst viewportWidth = viewportWidthProp ?? ctx?.viewportWidth ?? 0;\n\tconst viewportHeight = viewportHeightProp ?? ctx?.viewportHeight ?? 0;\n\tconst items = itemsProp ?? ctx?.items ?? [];\n\tconst zoomPercent = zoomPercentProp ?? ctx?.zoomPercent ?? 100;\n\tconst onZoomIn = onZoomInProp ?? ctx?.onZoomIn ?? noop;\n\tconst onZoomOut = onZoomOutProp ?? ctx?.onZoomOut ?? noop;\n\tconst onUndo = onUndoProp ?? ctx?.onUndo ?? noop;\n\tconst onRedo = onRedoProp ?? ctx?.onRedo ?? noop;\n\tconst canUndo = canUndoProp ?? ctx?.canUndo ?? false;\n\tconst canRedo = canRedoProp ?? ctx?.canRedo ?? false;\n\tconst onRequestRender = onRequestRenderProp ?? ctx?.onRequestRender ?? noop;\n\n\tconst [expanded, setExpanded] = useState(false);\n\tconst svgRef = useRef<SVGSVGElement>(null);\n\tconst [dragging, setDragging] = useState(false);\n\tconst [mouseDown, setMouseDown] = useState(false);\n\n\tconst worldBounds = computeWorldBounds(items);\n\tconst isEmpty = worldBounds.width <= 0 || worldBounds.height <= 0;\n\n\tconst scale = Math.min(\n\t\t(MINIMAP_W - PADDING * 2) / Math.max(worldBounds.width, 1),\n\t\t(MINIMAP_H - PADDING * 2) / Math.max(worldBounds.height, 1),\n\t);\n\tconst originX = worldBounds.x;\n\tconst originY = worldBounds.y;\n\n\tconst toMinimapX = (wx: number) => (wx - originX) * scale + PADDING;\n\tconst toMinimapY = (wy: number) => (wy - originY) * scale + PADDING;\n\tconst toMinimapW = (ww: number) => ww * scale;\n\tconst toMinimapH = (wh: number) => wh * scale;\n\n\tconst viewportWorld = camera\n\t\t? camera.getVisibleWorldRect(viewportWidth, viewportHeight)\n\t\t: { x: 0, y: 0, width: 0, height: 0 };\n\tconst vpMinimap = {\n\t\tx: toMinimapX(viewportWorld.x),\n\t\ty: toMinimapY(viewportWorld.y),\n\t\twidth: toMinimapW(viewportWorld.width),\n\t\theight: toMinimapH(viewportWorld.height),\n\t};\n\n\tconst worldFromMinimap = useCallback(\n\t\t(mx: number, my: number) => ({\n\t\t\tworldX: (mx - PADDING) / scale + originX,\n\t\t\tworldY: (my - PADDING) / scale + originY,\n\t\t}),\n\t\t[scale, originX, originY],\n\t);\n\n\tconst panTo = useCallback(\n\t\t(mx: number, my: number) => {\n\t\t\tif (!camera) return;\n\t\t\tconst { worldX, worldY } = worldFromMinimap(mx, my);\n\t\t\tcamera.x = viewportWidth / 2 - worldX * camera.zoom;\n\t\t\tcamera.y = viewportHeight / 2 - worldY * camera.zoom;\n\t\t\tonRequestRender();\n\t\t},\n\t\t[worldFromMinimap, camera, viewportWidth, viewportHeight, onRequestRender],\n\t);\n\n\tconst handlePointerDown = useCallback(\n\t\t(e: React.PointerEvent) => {\n\t\t\tif (isEmpty) return;\n\t\t\tsetDragging(true);\n\t\t\tsetMouseDown(true);\n\t\t\tconst rect = svgRef.current?.getBoundingClientRect();\n\t\t\tif (!rect) return;\n\t\t\tpanTo(e.clientX - rect.left, e.clientY - rect.top);\n\t\t\tsvgRef.current?.setPointerCapture(e.pointerId);\n\t\t},\n\t\t[isEmpty, panTo],\n\t);\n\n\tconst handlePointerMove = useCallback(\n\t\t(e: React.PointerEvent) => {\n\t\t\tif (!mouseDown || isEmpty) return;\n\t\t\tconst rect = svgRef.current?.getBoundingClientRect();\n\t\t\tif (!rect) return;\n\t\t\tpanTo(e.clientX - rect.left, e.clientY - rect.top);\n\t\t},\n\t\t[mouseDown, isEmpty, panTo],\n\t);\n\n\tconst handlePointerUp = useCallback(() => {\n\t\tsetDragging(false);\n\t\tsetMouseDown(false);\n\t}, []);\n\n\tconst toggleExpanded = useCallback(() => {\n\t\tsetExpanded((v) => !v);\n\t}, []);\n\n\tconst anchorStyle = getBoardPositionStyle(position, inset, zIndex);\n\treturn (\n\t\t<fieldset\n\t\t\tdata-slot=\"canvu-nav-menu\"\n\t\t\tdata-position={position}\n\t\t\tclassName={className}\n\t\t\tstyle={{\n\t\t\t\t...anchorStyle,\n\t\t\t\t...panelLayoutStyle,\n\t\t\t\tborder: \"none\",\n\t\t\t\tmargin: 0,\n\t\t\t\tpadding: 0,\n\t\t\t\tminWidth: 0,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t\taria-label=\"Zoom and minimap controls\"\n\t\t>\n\t\t\t<div style={innerStyle}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={btnStyle}\n\t\t\t\t\taria-label=\"Zoom out\"\n\t\t\t\t\ttitle=\"Zoom out\"\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onZoomOut}\n\t\t\t\t>\n\t\t\t\t\t−\n\t\t\t\t</button>\n\t\t\t\t<span style={labelStyle} aria-hidden>\n\t\t\t\t\t{zoomPercent}%\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={btnStyle}\n\t\t\t\t\taria-label=\"Zoom in\"\n\t\t\t\t\ttitle=\"Zoom in\"\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onZoomIn}\n\t\t\t\t>\n\t\t\t\t\t+\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={undoBtnStyle}\n\t\t\t\t\taria-label=\"Undo\"\n\t\t\t\t\ttitle=\"Undo\"\n\t\t\t\t\tdisabled={!canUndo}\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onUndo}\n\t\t\t\t>\n\t\t\t\t\t<Undo2 size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={undoBtnStyle}\n\t\t\t\t\taria-label=\"Redo\"\n\t\t\t\t\ttitle=\"Redo\"\n\t\t\t\t\tdisabled={!canRedo}\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={onRedo}\n\t\t\t\t>\n\t\t\t\t\t<Redo2 size={16} />\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tstyle={chevronBtnStyle}\n\t\t\t\t\taria-label={expanded ? \"Hide minimap\" : \"Show minimap\"}\n\t\t\t\t\ttitle={expanded ? \"Hide minimap\" : \"Show minimap\"}\n\t\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={toggleExpanded}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\theight=\"12\"\n\t\t\t\t\t\tviewBox=\"0 0 12 12\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttransform: expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n\t\t\t\t\t\t\ttransition: \"transform 0.15s ease\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M2 4 L6 8 L10 4\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t{expanded && (\n\t\t\t\t<nav aria-label=\"Minimap\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\tref={svgRef}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: MINIMAP_W,\n\t\t\t\t\t\t\theight: MINIMAP_H,\n\t\t\t\t\t\t\tborderRadius: BORDER_RADIUS,\n\t\t\t\t\t\t\tborder: `1px solid ${BORDER_COLOR}`,\n\t\t\t\t\t\t\tbackground: BG,\n\t\t\t\t\t\t\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\t\t\t\t\t\t\tcursor: isEmpty ? \"default\" : dragging ? \"grabbing\" : \"grab\",\n\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\tpointerEvents: \"auto\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerMove={handlePointerMove}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerCancel={handlePointerUp}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isEmpty ? null : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{items.map((it) => {\n\t\t\t\t\t\t\t\t\tconst b = normalizeRect(boundsAabbForRotatedItem(it));\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\t\t\t\t\t\tx={toMinimapX(b.x)}\n\t\t\t\t\t\t\t\t\t\t\ty={toMinimapY(b.y)}\n\t\t\t\t\t\t\t\t\t\t\twidth={toMinimapW(b.width)}\n\t\t\t\t\t\t\t\t\t\t\theight={toMinimapH(b.height)}\n\t\t\t\t\t\t\t\t\t\t\tfill={ITEM_FILL}\n\t\t\t\t\t\t\t\t\t\t\tstroke={ITEM_STROKE}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={0.5}\n\t\t\t\t\t\t\t\t\t\t\trx={1}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\tx={vpMinimap.x}\n\t\t\t\t\t\t\t\t\ty={vpMinimap.y}\n\t\t\t\t\t\t\t\t\twidth={vpMinimap.width}\n\t\t\t\t\t\t\t\t\theight={vpMinimap.height}\n\t\t\t\t\t\t\t\t\tfill={VIEWPORT_FILL}\n\t\t\t\t\t\t\t\t\tstroke={VIEWPORT_STROKE}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\trx={2}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</svg>\n\t\t\t\t</nav>\n\t\t\t)}\n\t\t</fieldset>\n\t);\n}\n\nfunction noop() {}\n\nfunction computeWorldBounds(items: readonly VectorSceneItem[]): Rect {\n\tif (items.length === 0) {\n\t\treturn { x: 0, y: 0, width: 0, height: 0 };\n\t}\n\tlet minX = Infinity;\n\tlet minY = Infinity;\n\tlet maxX = -Infinity;\n\tlet maxY = -Infinity;\n\tfor (const it of items) {\n\t\tconst b = boundsAabbForRotatedItem(it);\n\t\tminX = Math.min(minX, b.x);\n\t\tminY = Math.min(minY, b.y);\n\t\tmaxX = Math.max(maxX, b.x + b.width);\n\t\tmaxY = Math.max(maxY, b.y + b.height);\n\t}\n\tconst pad = Math.max((maxX - minX) * 0.1, (maxY - minY) * 0.1, 40);\n\treturn {\n\t\tx: minX - pad,\n\t\ty: minY - pad,\n\t\twidth: maxX - minX + pad * 2,\n\t\theight: maxY - minY + pad * 2,\n\t};\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport {\n\ttype CanvuChromeSelectionStyleChange,\n\tuseCanvuChromeContext,\n} from \"./chrome-context\";\nimport {\n\ttype BoardComponentPosition,\n\tgetBoardPositionStyle,\n} from \"./VectorCanvasLayout\";\n\ntype ActiveToolStyle = StrokeStyle & {\n\ttoolKind: \"draw\" | \"marker\";\n\tlabel?: string;\n};\n\n/**\n * Color + stroke-width inspector for the current selection (or active drawing tool style).\n * When rendered inside `VectorViewport` (e.g. via the `selectionInspector` slot), `items`,\n * `activeToolStyle`, and `onChange` default to values from {@link CanvuChromeContext};\n * pass any prop to override.\n */\nexport type VectorSelectionInspectorProps = {\n\t/** Selected items that support stroke/fill styling (caller may filter). */\n\titems?: readonly VectorSceneItem[];\n\t/** Optional active tool style shown even without a selection. */\n\tactiveToolStyle?: ActiveToolStyle | null;\n\t/** Apply stroke / width / opacity to every item in `items`. */\n\tonChange?: CanvuChromeSelectionStyleChange;\n\t/** Anchor preset. Defaults to top-left. */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from anchored edges. @default 12 */\n\tinset?: number;\n\t/** @default 24 */\n\tzIndex?: number;\n\tclassName?: string;\n\t/** Merged on top of position-derived styles for custom tweaks. */\n\tstyle?: CSSProperties;\n};\n\nconst shellLook: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: 8,\n\tminWidth: 160,\n\tpadding: \"10px 12px\",\n\tborderRadius: 8,\n\tborder: \"1px solid rgba(0,0,0,0.12)\",\n\tbackground: \"rgba(255,255,255,0.96)\",\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tpointerEvents: \"auto\",\n};\n\nconst labelStyle: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: 4,\n\tfontSize: 11,\n\tfontWeight: 600,\n\tcolor: \"#52525b\",\n};\n\nfunction normalizeHex(stroke: string): string {\n\tif (/^#[0-9A-Fa-f]{6}$/.test(stroke)) return stroke;\n\treturn \"#2563eb\";\n}\n\nfunction isStylableKind(\n\ttk: VectorSceneItem[\"toolKind\"],\n): tk is NonNullable<VectorSceneItem[\"toolKind\"]> {\n\treturn (\n\t\ttk === \"rect\" ||\n\t\ttk === \"ellipse\" ||\n\t\ttk === \"line\" ||\n\t\ttk === \"arrow\" ||\n\t\ttk === \"draw\" ||\n\t\ttk === \"pencil\" ||\n\t\ttk === \"brush\" ||\n\t\ttk === \"marker\" ||\n\t\ttk === \"text\"\n\t);\n}\n\n/**\n * Color + stroke width for the current selection. Supports multiple selected shapes: one change applies to all.\n */\nexport function VectorSelectionInspector({\n\titems: itemsProp,\n\tactiveToolStyle: activeToolStyleProp,\n\tonChange: onChangeProp,\n\tposition = \"top-left\",\n\tinset = 12,\n\tzIndex = 24,\n\tclassName,\n\tstyle,\n}: VectorSelectionInspectorProps) {\n\tconst ctx = useCanvuChromeContext();\n\tconst items = itemsProp ?? ctx?.selectedItems ?? [];\n\tconst activeToolStyle =\n\t\tactiveToolStyleProp === undefined\n\t\t\t? (ctx?.activeToolStyle ?? null)\n\t\t\t: activeToolStyleProp;\n\tconst onChange = onChangeProp ?? ctx?.onSelectionStyleChange ?? null;\n\tif (!onChange) return null;\n\tconst shell: CSSProperties = {\n\t\t...getBoardPositionStyle(position, inset, zIndex),\n\t\t...shellLook,\n\t\t...style,\n\t};\n\tif (activeToolStyle) {\n\t\tconst stroke = activeToolStyle.stroke;\n\t\tconst strokeWidth = activeToolStyle.strokeWidth;\n\t\tconst hex = normalizeHex(stroke);\n\t\tconst showMarkerOpacity = activeToolStyle.toolKind === \"marker\";\n\t\tconst opacityPct = Math.round((activeToolStyle.strokeOpacity ?? 1) * 100);\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tdata-slot=\"vector-selection-inspector\"\n\t\t\t\tdata-position={position}\n\t\t\t\tclassName={className}\n\t\t\t\taria-label={activeToolStyle.label ?? \"Estilo da ferramenta\"}\n\t\t\t\tstyle={shell}\n\t\t\t>\n\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\tCor\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\tvalue={hex}\n\t\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\tstroke: e.target.value,\n\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\t...(activeToolStyle.strokeOpacity != null\n\t\t\t\t\t\t\t\t\t? { strokeOpacity: activeToolStyle.strokeOpacity }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</label>\n\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\tGrossura\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\tmax={48}\n\t\t\t\t\t\tvalue={strokeWidth}\n\t\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\t\tstrokeWidth: Number(e.target.value),\n\t\t\t\t\t\t\t\t...(activeToolStyle.strokeOpacity != null\n\t\t\t\t\t\t\t\t\t? { strokeOpacity: activeToolStyle.strokeOpacity }\n\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{strokeWidth}px</span>\n\t\t\t\t</label>\n\t\t\t\t{showMarkerOpacity && (\n\t\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\t\tOpacidade (marcador)\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\t\tmin={10}\n\t\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\t\tvalue={opacityPct}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst v = Number(e.target.value) / 100;\n\t\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\t\tstrokeOpacity: v,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{opacityPct}%</span>\n\t\t\t\t\t</label>\n\t\t\t\t)}\n\t\t\t</section>\n\t\t);\n\t}\n\n\tconst stylable = items.filter(\n\t\t(it) => !it.locked && it.toolKind && isStylableKind(it.toolKind),\n\t);\n\tif (stylable.length === 0) return null;\n\n\tconst first = stylable[0];\n\tif (!first) return null;\n\tconst allSameStroke = stylable.every(\n\t\t(it) => (it.stroke ?? \"#2563eb\") === (first.stroke ?? \"#2563eb\"),\n\t);\n\tconst allSameWidth = stylable.every(\n\t\t(it) => (it.strokeWidth ?? 2) === (first.strokeWidth ?? 2),\n\t);\n\tconst stroke = first.stroke ?? \"#2563eb\";\n\tconst strokeWidth = first.strokeWidth ?? 2;\n\tconst hex = normalizeHex(stroke);\n\n\tconst markers = stylable.filter((it) => it.toolKind === \"marker\");\n\tconst showMarkerOpacity = markers.length > 0;\n\tconst firstMarker = markers[0];\n\tconst allSameMarkerOpacity =\n\t\tmarkers.length > 0 &&\n\t\tmarkers.every(\n\t\t\t(it) => (it.strokeOpacity ?? 1) === (firstMarker?.strokeOpacity ?? 1),\n\t\t);\n\tconst opacityPct = firstMarker\n\t\t? Math.round((firstMarker.strokeOpacity ?? 1) * 100)\n\t\t: 100;\n\n\treturn (\n\t\t<section\n\t\t\tdata-slot=\"vector-selection-inspector\"\n\t\t\tdata-position={position}\n\t\t\tclassName={className}\n\t\t\taria-label=\"Estilo da seleção\"\n\t\t\tstyle={shell}\n\t\t>\n\t\t\t{stylable.length > 1 && (\n\t\t\t\t<p style={{ margin: 0, fontSize: 11, color: \"#71717a\" }}>\n\t\t\t\t\t{stylable.length} objetos selecionados\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t<label style={labelStyle}>\n\t\t\t\tCor\n\t\t\t\t{!allSameStroke && (\n\t\t\t\t\t<span style={{ fontWeight: 400, color: \"#a1a1aa\" }}>\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t(valores misturados — novo valor aplica a todos)\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<input\n\t\t\t\t\ttype=\"color\"\n\t\t\t\t\tvalue={hex}\n\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\tstroke: e.target.value,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</label>\n\t\t\t<label style={labelStyle}>\n\t\t\t\tGrossura\n\t\t\t\t{!allSameWidth && (\n\t\t\t\t\t<span style={{ fontWeight: 400, color: \"#a1a1aa\" }}> (misturado)</span>\n\t\t\t\t)}\n\t\t\t\t<input\n\t\t\t\t\ttype=\"range\"\n\t\t\t\t\tmin={1}\n\t\t\t\t\tmax={48}\n\t\t\t\t\tvalue={strokeWidth}\n\t\t\t\t\tonChange={(e) =>\n\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\tstrokeWidth: Number(e.target.value),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{strokeWidth}px</span>\n\t\t\t</label>\n\t\t\t{showMarkerOpacity && firstMarker && (\n\t\t\t\t<label style={labelStyle}>\n\t\t\t\t\tOpacidade (marcador)\n\t\t\t\t\t{!allSameMarkerOpacity && markers.length > 1 && (\n\t\t\t\t\t\t<span style={{ fontWeight: 400, color: \"#a1a1aa\" }}> (misturado)</span>\n\t\t\t\t\t)}\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\tmin={10}\n\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\tvalue={opacityPct}\n\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\tconst v = Number(e.target.value) / 100;\n\t\t\t\t\t\t\tonChange({\n\t\t\t\t\t\t\t\tstroke: hex,\n\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\tstrokeOpacity: v,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<span style={{ fontWeight: 500, color: \"#71717a\" }}>{opacityPct}%</span>\n\t\t\t\t</label>\n\t\t\t)}\n\t\t</section>\n\t);\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { NavMenu } from \"./NavMenu\";\nimport { VectorSelectionInspector } from \"./VectorSelectionInspector\";\n\nexport type VectorCanvasSlotProps = {\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n};\n\n/**\n * Anchor presets for floating board components.\n *\n * Names are `<edge>-<position-along-edge>`:\n * - `top-*` / `bottom-*` anchor to the top or bottom edge.\n * - `left-*` / `right-*` anchor to the left or right edge.\n *\n * Corner aliases are equivalent (e.g. `top-left` and `left-top` resolve to the same anchor),\n * but kept distinct so callers can pick whichever reads best in their layout (a vertical\n * strip might prefer `left-top`; a horizontal strip prefers `top-left`).\n */\nexport type BoardComponentPosition =\n\t| \"top-left\"\n\t| \"top-center\"\n\t| \"top-right\"\n\t| \"bottom-left\"\n\t| \"bottom-center\"\n\t| \"bottom-right\"\n\t| \"left-top\"\n\t| \"left-center\"\n\t| \"left-bottom\"\n\t| \"right-top\"\n\t| \"right-center\"\n\t| \"right-bottom\"\n\t| \"center\"\n\t| \"fill\";\n\n/** @deprecated Use {@link BoardComponentPosition}. */\nexport type VectorCanvasSpacePosition = BoardComponentPosition;\n\n/**\n * Compute absolute-position CSS for a board component anchor preset.\n * Returns `position`, `zIndex`, and the relevant edge offsets / transforms.\n * Callers merge the result with their own style/className overrides.\n */\nexport function getBoardPositionStyle(\n\tposition: BoardComponentPosition,\n\tinset = 12,\n\tzIndex = 40,\n): CSSProperties {\n\tconst base: CSSProperties = { position: \"absolute\", zIndex };\n\tswitch (position) {\n\t\tcase \"fill\":\n\t\t\treturn { ...base, inset };\n\t\tcase \"top-left\":\n\t\tcase \"left-top\":\n\t\t\treturn { ...base, top: inset, left: inset };\n\t\tcase \"top-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttop: inset,\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t};\n\t\tcase \"top-right\":\n\t\tcase \"right-top\":\n\t\t\treturn { ...base, top: inset, right: inset };\n\t\tcase \"bottom-left\":\n\t\tcase \"left-bottom\":\n\t\t\treturn { ...base, bottom: inset, left: inset };\n\t\tcase \"bottom-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tbottom: inset,\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t};\n\t\tcase \"bottom-right\":\n\t\tcase \"right-bottom\":\n\t\t\treturn { ...base, bottom: inset, right: inset };\n\t\tcase \"left-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tleft: inset,\n\t\t\t\ttop: \"50%\",\n\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t};\n\t\tcase \"right-center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tright: inset,\n\t\t\t\ttop: \"50%\",\n\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t};\n\t\tcase \"center\":\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttop: \"50%\",\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translate(-50%, -50%)\",\n\t\t\t};\n\t\tdefault:\n\t\t\treturn base;\n\t}\n}\n\nexport type VectorCanvasSpaceProps = VectorCanvasSlotProps & {\n\tposition?: BoardComponentPosition;\n\t/** @default 12 */\n\tinset?: number;\n\t/** @default 40 */\n\tzIndex?: number;\n\t/** Pointer events value on the content wrapper. @default \"auto\" */\n\tcontentPointerEvents?: CSSProperties[\"pointerEvents\"];\n};\n\nconst rootStyle: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\theight: \"100%\",\n\tminHeight: 0,\n\twidth: \"100%\",\n};\n\nconst headerStyle: CSSProperties = {\n\tflexShrink: 0,\n\tdisplay: \"flex\",\n\tflexWrap: \"wrap\",\n\talignItems: \"center\",\n\tgap: \"0.75rem\",\n\tpadding: \"0.75rem 1rem\",\n\tborderBottom: \"1px solid #e4e4e7\",\n\tbackground: \"#fff\",\n\tfontSize: \"0.875rem\",\n};\n\nconst bodyStyle: CSSProperties = {\n\tflex: 1,\n\tminHeight: 0,\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n};\n\nconst mainStyle: CSSProperties = {\n\tflex: 1,\n\tminHeight: 0,\n\tposition: \"relative\",\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n};\n\nconst viewportSurfaceStyle: CSSProperties = {\n\tflex: 1,\n\tminHeight: 0,\n\tposition: \"relative\",\n\twidth: \"100%\",\n\talignSelf: \"stretch\",\n\tbackground: \"#fff\",\n\ttouchAction: \"none\",\n};\n\nfunction mergeStyle(\n\tbase: CSSProperties,\n\tstyle: CSSProperties | undefined,\n): CSSProperties {\n\treturn style ? { ...base, ...style } : base;\n}\n\nfunction vectorCanvasSpaceStyle(\n\tposition: BoardComponentPosition,\n\tinset: number,\n\tzIndex: number,\n): CSSProperties {\n\treturn {\n\t\t...getBoardPositionStyle(position, inset, zIndex),\n\t\tpointerEvents: \"none\",\n\t};\n}\n\n/**\n * Full-viewport column shell for a vector canvas (header + body with stage).\n * Use with {@link VectorCanvasBody}, {@link VectorCanvasMain}. Pass `toolbar` on {@link VectorViewport};\n * Compose the floating tool strip with {@link VectorCanvasToolbar} around {@link VectorToolbar} (see example below).\n */\nexport function VectorCanvasRoot({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-root\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(rootStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n/** Optional top chrome (title, hints, toggles). */\nexport function VectorCanvasHeader({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<header\n\t\t\tdata-slot=\"vector-canvas-header\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(headerStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</header>\n\t);\n}\n\n/** Fills remaining space below the header (typically one {@link VectorCanvasMain}). */\nexport function VectorCanvasBody({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-body\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(bodyStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n/**\n * Stretch area for {@link VectorViewport} (or any child that should fill the stage).\n */\nexport function VectorCanvasMain({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-main\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(mainStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n/**\n * Flex child that fills {@link VectorCanvasMain} and gives {@link VectorViewport} a bounded height\n * (white surface by default). Omit if you set the background on `Main` or the viewport yourself.\n */\nexport function VectorCanvasViewportSurface({\n\tchildren,\n\tclassName,\n\tstyle,\n}: VectorCanvasSlotProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-viewport-surface\"\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(viewportSurfaceStyle, style)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nexport type VectorCanvasToolbarProps = {\n\tchildren?: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n\t/** Anchor preset. @default \"bottom-center\" */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from the anchored edge(s). @default 12 */\n\tinset?: number;\n\t/** @default 30 */\n\tzIndex?: number;\n};\n\n/**\n * Floating strip anchor for {@link VectorToolbar} or custom controls. Defaults to bottom-center.\n * Renders `pointer-events: none` on the shell and `auto` on children so the canvas keeps receiving hits outside the bar.\n * Pass as the `toolbar` prop of `VectorViewport`; pick a different `position` for top / side anchoring.\n * Z-index defaults to 30 so the strip stays above zoom controls.\n */\nexport function VectorCanvasToolbar({\n\tchildren,\n\tclassName,\n\tstyle,\n\tposition = \"bottom-center\",\n\tinset = 12,\n\tzIndex = 30,\n}: VectorCanvasToolbarProps) {\n\tconst base: CSSProperties = {\n\t\t...getBoardPositionStyle(position, inset, zIndex),\n\t\tdisplay: \"flex\",\n\t\tjustifyContent: \"center\",\n\t\talignItems: \"center\",\n\t\tmaxWidth: \"calc(100% - 24px)\",\n\t\tpointerEvents: \"none\",\n\t};\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"vector-canvas-toolbar\"\n\t\t\tdata-position={position}\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(base, style)}\n\t\t>\n\t\t\t<div style={{ pointerEvents: \"auto\" }}>{children}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Absolute canvas-aligned space for floating UI such as chats, rosters, inspectors, and overlays.\n * Use this instead of ad-hoc wrapper divs or plugin hosts when a feature can be expressed as React nodes.\n */\nexport function VectorCanvasSpace({\n\tchildren,\n\tclassName,\n\tstyle,\n\tposition = \"top-right\",\n\tinset = 12,\n\tzIndex = 40,\n\tcontentPointerEvents = \"auto\",\n}: VectorCanvasSpaceProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot={`vector-canvas-space-${position}`}\n\t\t\tclassName={className}\n\t\t\tstyle={mergeStyle(vectorCanvasSpaceStyle(position, inset, zIndex), style)}\n\t\t>\n\t\t\t<div style={{ pointerEvents: contentPointerEvents }}>{children}</div>\n\t\t</div>\n\t);\n}\n\n/**\n * Namespaced layout primitives for composing a vector canvas shell without ad-hoc wrapper divs.\n *\n * @example\n * ```tsx\n * <VectorCanvas.Root>\n * <VectorCanvas.Header>…</VectorCanvas.Header>\n * <VectorCanvas.Body>\n * <VectorCanvas.Main>\n * <VectorCanvas.ViewportSurface>\n * <VectorViewport\n * toolbar={\n * <VectorCanvas.Toolbar>\n * <VectorToolbar … />\n * </VectorCanvas.Toolbar>\n * }\n * …\n * />\n * </VectorCanvas.ViewportSurface>\n * </VectorCanvas.Main>\n * </VectorCanvas.Body>\n * </VectorCanvas.Root>\n * ```\n */\nexport const VectorCanvas = {\n\tRoot: VectorCanvasRoot,\n\tHeader: VectorCanvasHeader,\n\tBody: VectorCanvasBody,\n\tMain: VectorCanvasMain,\n\tViewportSurface: VectorCanvasViewportSurface,\n\tToolbar: VectorCanvasToolbar,\n\tSpace: VectorCanvasSpace,\n\tNavMenu,\n\tSelectionInspector: VectorSelectionInspector,\n} as const;\n","const DB_NAME = \"canvu-image-store\";\nconst DB_VERSION = 1;\n\nfunction openDb(): Promise<IDBDatabase> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst req = indexedDB.open(DB_NAME, DB_VERSION);\n\t\treq.onupgradeneeded = () => {\n\t\t\tconst db = req.result;\n\t\t\tif (!db.objectStoreNames.contains(\"images\")) {\n\t\t\t\tdb.createObjectStore(\"images\");\n\t\t\t}\n\t\t\tif (!db.objectStoreNames.contains(\"thumbnails\")) {\n\t\t\t\tdb.createObjectStore(\"thumbnails\");\n\t\t\t}\n\t\t};\n\t\treq.onsuccess = () => resolve(req.result);\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction getFromStore(\n\tdb: IDBDatabase,\n\tstoreName: string,\n\tid: string,\n): Promise<Blob | undefined> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(storeName, \"readonly\");\n\t\tconst req = tx.objectStore(storeName).get(id);\n\t\treq.onsuccess = () => resolve(req.result ?? undefined);\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction putInStore(\n\tdb: IDBDatabase,\n\tstoreName: string,\n\tid: string,\n\tblob: Blob,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(storeName, \"readwrite\");\n\t\tconst req = tx.objectStore(storeName).put(blob, id);\n\t\treq.onsuccess = () => resolve();\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction deleteFromStore(\n\tdb: IDBDatabase,\n\tstoreName: string,\n\tid: string,\n): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(storeName, \"readwrite\");\n\t\tconst req = tx.objectStore(storeName).delete(id);\n\t\treq.onsuccess = () => resolve();\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\nfunction generateBlobId(): string {\n\treturn crypto.randomUUID();\n}\n\nexport class IndexedDbImageStore {\n\tprivate dbPromise: Promise<IDBDatabase> | null = null;\n\n\tprivate getDb(): Promise<IDBDatabase> {\n\t\tif (!this.dbPromise) {\n\t\t\tthis.dbPromise = openDb();\n\t\t}\n\t\treturn this.dbPromise;\n\t}\n\n\tasync storeOriginal(blob: Blob): Promise<string> {\n\t\tconst id = generateBlobId();\n\t\tconst db = await this.getDb();\n\t\tawait putInStore(db, \"images\", id, blob);\n\t\treturn id;\n\t}\n\n\tasync getOriginal(id: string): Promise<Blob | undefined> {\n\t\tconst db = await this.getDb();\n\t\treturn getFromStore(db, \"images\", id);\n\t}\n\n\tasync deleteOriginal(id: string): Promise<void> {\n\t\tconst db = await this.getDb();\n\t\tawait deleteFromStore(db, \"images\", id);\n\t}\n\n\tasync storeThumbnail(blob: Blob): Promise<string> {\n\t\tconst id = generateBlobId();\n\t\tconst db = await this.getDb();\n\t\tawait putInStore(db, \"thumbnails\", id, blob);\n\t\treturn id;\n\t}\n\n\tasync getThumbnail(id: string): Promise<Blob | undefined> {\n\t\tconst db = await this.getDb();\n\t\treturn getFromStore(db, \"thumbnails\", id);\n\t}\n\n\tasync deleteThumbnail(id: string): Promise<void> {\n\t\tconst db = await this.getDb();\n\t\tawait deleteFromStore(db, \"thumbnails\", id);\n\t}\n}\n\nfunction decodeImageToCanvas(\n\tblob: Blob,\n\tmaxDimension?: number,\n): Promise<{ canvas: HTMLCanvasElement; width: number; height: number }> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\timg.onload = () => {\n\t\t\tconst w0 = img.naturalWidth;\n\t\t\tconst h0 = img.naturalHeight;\n\t\t\tif (w0 < 1 || h0 < 1) {\n\t\t\t\treject(new Error(\"Image has no dimensions\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst scale = maxDimension ? Math.min(1, maxDimension / Math.max(w0, h0)) : 1;\n\t\t\tconst cw = Math.max(1, Math.round(w0 * scale));\n\t\t\tconst ch = Math.max(1, Math.round(h0 * scale));\n\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\tcanvas.width = cw;\n\t\t\tcanvas.height = ch;\n\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\tif (!ctx) {\n\t\t\t\treject(new Error(\"Canvas 2D context unavailable\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tctx.imageSmoothingEnabled = true;\n\t\t\tctx.imageSmoothingQuality = \"high\";\n\t\t\tctx.drawImage(img, 0, 0, cw, ch);\n\t\t\tURL.revokeObjectURL(img.src);\n\t\t\tresolve({ canvas, width: cw, height: ch });\n\t\t};\n\t\timg.onerror = () => {\n\t\t\tURL.revokeObjectURL(img.src);\n\t\t\treject(new Error(\"Could not decode image\"));\n\t\t};\n\t\timg.src = URL.createObjectURL(blob);\n\t});\n}\n\nfunction canvasToBlob(\n\tcanvas: HTMLCanvasElement,\n\tmime: string,\n\tquality?: number,\n): Promise<Blob> {\n\treturn new Promise((resolve, reject) => {\n\t\tcanvas.toBlob(\n\t\t\t(blob) => {\n\t\t\t\tif (!blob) {\n\t\t\t\t\treject(new Error(\"Could not encode blob\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve(blob);\n\t\t\t},\n\t\t\tmime,\n\t\t\tquality,\n\t\t);\n\t});\n}\n\nexport type StoredImageResult = {\n\tblobId: string;\n\tthumbnailBlobId: string;\n\twidth: number;\n\theight: number;\n};\n\n/**\n * Stores an image file in IndexedDB at original resolution and generates a 256px thumbnail.\n * Returns blob IDs that can be referenced from `VectorSceneItem.imageBlobId`.\n */\nexport async function loadImageToStore(\n\tfile: File,\n\tstore: IndexedDbImageStore,\n): Promise<StoredImageResult> {\n\tconst originalBlob = file;\n\tconst blobId = await store.storeOriginal(originalBlob);\n\n\tconst { canvas, width, height } = await decodeImageToCanvas(originalBlob);\n\n\tconst thumbScale = Math.min(1, 256 / Math.max(width, height));\n\tconst tw = Math.max(1, Math.round(width * thumbScale));\n\tconst th = Math.max(1, Math.round(height * thumbScale));\n\tconst thumbCanvas = document.createElement(\"canvas\");\n\tthumbCanvas.width = tw;\n\tthumbCanvas.height = th;\n\tconst tCtx = thumbCanvas.getContext(\"2d\");\n\tif (tCtx) {\n\t\ttCtx.imageSmoothingEnabled = true;\n\t\ttCtx.imageSmoothingQuality = \"high\";\n\t\ttCtx.drawImage(canvas, 0, 0, tw, th);\n\t}\n\tconst thumbBlob = await canvasToBlob(\n\t\tthumbCanvas,\n\t\tfile.type === \"image/jpeg\" || file.type === \"image/jpg\"\n\t\t\t? \"image/jpeg\"\n\t\t\t: \"image/png\",\n\t\tfile.type.startsWith(\"image/jpeg\") ? 0.85 : undefined,\n\t);\n\tconst thumbnailBlobId = await store.storeThumbnail(thumbBlob);\n\n\treturn { blobId, thumbnailBlobId, width, height };\n}\n\n/**\n * Fetches a blob from IndexedDB and creates a session-scoped `blob:` URL.\n * Caller must revoke via `URL.revokeObjectURL` when done.\n */\nexport async function createBlobUrlFromStore(\n\tstore: IndexedDbImageStore,\n\tblobId: string,\n): Promise<string | null> {\n\tconst blob = await store.getOriginal(blobId);\n\tif (!blob) return null;\n\treturn URL.createObjectURL(blob);\n}\n\n/**\n * Creates a `blob:` URL for the thumbnail from IndexedDB.\n */\nexport async function createThumbnailBlobUrlFromStore(\n\tstore: IndexedDbImageStore,\n\tthumbnailBlobId: string,\n): Promise<string | null> {\n\tconst blob = await store.getThumbnail(thumbnailBlobId);\n\tif (!blob) return null;\n\treturn URL.createObjectURL(blob);\n}\n\nexport async function deleteImageFromStore(\n\tstore: IndexedDbImageStore,\n\tblobId: string,\n\tthumbnailBlobId?: string,\n): Promise<void> {\n\tawait store.deleteOriginal(blobId);\n\tif (thumbnailBlobId) {\n\t\tawait store.deleteThumbnail(thumbnailBlobId);\n\t}\n}\n","import {\n\tcreateBlobUrlFromStore,\n\tcreateThumbnailBlobUrlFromStore,\n\tIndexedDbImageStore,\n} from \"../../image/indexed-db-image-store\";\nimport { rebuildItemSvg } from \"../../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport type { VectorCanvasPersistenceAdapter, VectorCanvasSnapshot } from \"./types\";\n\nconst DOCUMENT_STORE = \"document\";\nconst DOCUMENT_KEY = \"main\";\n\nfunction openDocumentDb(dbName: string): Promise<IDBDatabase> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst req = indexedDB.open(dbName, 1);\n\t\treq.onupgradeneeded = () => {\n\t\t\tconst db = req.result;\n\t\t\tif (!db.objectStoreNames.contains(DOCUMENT_STORE)) {\n\t\t\t\tdb.createObjectStore(DOCUMENT_STORE);\n\t\t\t}\n\t\t};\n\t\treq.onsuccess = () => resolve(req.result);\n\t\treq.onerror = () => reject(req.error);\n\t});\n}\n\n/**\n * Persistence adapter that stores the document JSON in IndexedDB and manages\n * image blobs separately. Images are stored at original resolution in a dedicated\n * `images` object store via {@link IndexedDbImageStore}, keeping the document JSON\n * lightweight and enabling full-resolution zoom without blur.\n *\n * On load, blob URLs are created from the stored blobs and `childrenSvg` is\n * rebuilt for each image item. Blob URLs are session-scoped and revoked on\n * subsequent saves / cleanup.\n */\nexport function createIndexedDbPersistenceAdapter(\n\toptions: { dbName?: string } = {},\n): VectorCanvasPersistenceAdapter {\n\tconst dbName = options.dbName ?? \"canvu-document\";\n\tconst imageStore = new IndexedDbImageStore();\n\tlet documentDbPromise: Promise<IDBDatabase> | null = null;\n\n\tfunction getDocDb(): Promise<IDBDatabase> {\n\t\tif (!documentDbPromise) {\n\t\t\tdocumentDbPromise = openDocumentDb(dbName);\n\t\t}\n\t\treturn documentDbPromise;\n\t}\n\n\tasync function getFromDocDb<T>(key: string): Promise<T | undefined> {\n\t\tconst db = await getDocDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction(DOCUMENT_STORE, \"readonly\");\n\t\t\tconst req = tx.objectStore(DOCUMENT_STORE).get(key);\n\t\t\treq.onsuccess = () => resolve(req.result as T | undefined);\n\t\t\treq.onerror = () => reject(req.error);\n\t\t});\n\t}\n\n\tasync function putInDocDb(key: string, value: unknown): Promise<void> {\n\t\tconst db = await getDocDb();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst tx = db.transaction(DOCUMENT_STORE, \"readwrite\");\n\t\t\tconst req = tx.objectStore(DOCUMENT_STORE).put(value, key);\n\t\t\treq.onsuccess = () => resolve();\n\t\t\treq.onerror = () => reject(req.error);\n\t\t});\n\t}\n\n\t/** Revoke all blob URLs on items and optionally clean stale blobs. */\n\tconst revokedHrefs = new Set<string>();\n\n\tfunction revokeItemBlob(item: VectorSceneItem): VectorSceneItem {\n\t\tif (item.imageRasterHref?.startsWith(\"blob:\")) {\n\t\t\trevokedHrefs.add(item.imageRasterHref);\n\t\t}\n\t\tif (item.imageThumbnailHref?.startsWith(\"blob:\")) {\n\t\t\trevokedHrefs.add(item.imageThumbnailHref);\n\t\t}\n\t\tconst out = { ...item };\n\t\tdelete out.imageRasterHref;\n\t\tdelete out.imageThumbnailHref;\n\t\t// Remove the stale childrenSvg since it contains the blob URL\n\t\tif (item.toolKind === \"image\") {\n\t\t\tout.childrenSvg = \"\";\n\t\t}\n\t\treturn out;\n\t}\n\n\treturn {\n\t\tasync load(): Promise<VectorCanvasSnapshot | null> {\n\t\t\tconst raw = await getFromDocDb<{\n\t\t\t\titems: VectorSceneItem[];\n\t\t\t\tversion?: number;\n\t\t\t}>(DOCUMENT_KEY);\n\t\t\tif (!raw?.items) return null;\n\n\t\t\tconst resolved: VectorSceneItem[] = [];\n\t\t\tfor (const item of raw.items) {\n\t\t\t\tif (item.toolKind === \"image\" && item.imageBlobId) {\n\t\t\t\t\tconst itemWithBlob = { ...item } as VectorSceneItem & {\n\t\t\t\t\t\timageRasterHref?: string;\n\t\t\t\t\t\timageThumbnailHref?: string;\n\t\t\t\t\t};\n\t\t\t\t\t// Create thumbnail blob URL first for progressive loading\n\t\t\t\t\tif (item.imageThumbnailBlobId) {\n\t\t\t\t\t\tconst thumbUrl = await createThumbnailBlobUrlFromStore(\n\t\t\t\t\t\t\timageStore,\n\t\t\t\t\t\t\titem.imageThumbnailBlobId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (thumbUrl) {\n\t\t\t\t\t\t\titemWithBlob.imageThumbnailHref = thumbUrl;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Create full-res blob URL\n\t\t\t\t\tconst fullUrl = await createBlobUrlFromStore(imageStore, item.imageBlobId);\n\t\t\t\t\tif (fullUrl) {\n\t\t\t\t\t\titemWithBlob.imageRasterHref = fullUrl;\n\t\t\t\t\t}\n\t\t\t\t\t// Rebuild childrenSvg with the blob URL\n\t\t\t\t\tconst rebuilt = rebuildItemSvg(itemWithBlob as VectorSceneItem);\n\t\t\t\t\tresolved.push(rebuilt);\n\t\t\t\t} else {\n\t\t\t\t\tresolved.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { items: resolved, version: raw.version ?? 1 };\n\t\t},\n\n\t\tasync save(snapshot: VectorCanvasSnapshot): Promise<void> {\n\t\t\t// Revoke previous blob URLs\n\t\t\tfor (const href of revokedHrefs) {\n\t\t\t\tURL.revokeObjectURL(href);\n\t\t\t}\n\t\t\trevokedHrefs.clear();\n\n\t\t\t// Strip blob URLs from items before persisting\n\t\t\tconst cleanItems = snapshot.items.map(revokeItemBlob);\n\t\t\tawait putInDocDb(DOCUMENT_KEY, {\n\t\t\t\titems: cleanItems,\n\t\t\t\tversion: snapshot.version ?? 1,\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport function createNoopPersistenceAdapter(): VectorCanvasPersistenceAdapter {\n\treturn {\n\t\tload: () => Promise.resolve(null),\n\t\tsave: () => Promise.resolve(),\n\t};\n}\n","import type { VectorCanvasPersistenceAdapter, VectorCanvasSnapshot } from \"./types\";\n\nexport const DEFAULT_VECTOR_CANVAS_STORAGE_KEY = \"trazo.vector-canvas.v1\";\n\nconst SNAPSHOT_VERSION = 1;\n\nexport type CreateLocalStoragePersistenceAdapterOptions = {\n\t/** Defaults to {@link DEFAULT_VECTOR_CANVAS_STORAGE_KEY} */\n\tkey?: string;\n\t/** Defaults to `window.localStorage` when `typeof window !== \"undefined\"` */\n\tstorage?: Storage | null;\n};\n\n/**\n * Default persistence: `JSON.stringify` snapshot under a single localStorage key.\n * Pass the same `key` in every session to restore the board.\n */\nexport function createLocalStoragePersistenceAdapter(\n\toptions: CreateLocalStoragePersistenceAdapterOptions = {},\n): VectorCanvasPersistenceAdapter {\n\tconst key = options.key ?? DEFAULT_VECTOR_CANVAS_STORAGE_KEY;\n\tconst storage =\n\t\toptions.storage ??\n\t\t(typeof globalThis !== \"undefined\" &&\n\t\t\"localStorage\" in globalThis &&\n\t\tglobalThis.localStorage\n\t\t\t? globalThis.localStorage\n\t\t\t: null);\n\n\treturn {\n\t\tload(): Promise<VectorCanvasSnapshot | null> {\n\t\t\tif (!storage) return Promise.resolve(null);\n\t\t\ttry {\n\t\t\t\tconst raw = storage.getItem(key);\n\t\t\t\tif (!raw) return Promise.resolve(null);\n\t\t\t\tconst parsed = JSON.parse(raw) as unknown;\n\t\t\t\tif (\n\t\t\t\t\t!parsed ||\n\t\t\t\t\ttypeof parsed !== \"object\" ||\n\t\t\t\t\t!(\"items\" in parsed) ||\n\t\t\t\t\t!Array.isArray((parsed as VectorCanvasSnapshot).items)\n\t\t\t\t) {\n\t\t\t\t\treturn Promise.resolve(null);\n\t\t\t\t}\n\t\t\t\treturn Promise.resolve(parsed as VectorCanvasSnapshot);\n\t\t\t} catch {\n\t\t\t\treturn Promise.resolve(null);\n\t\t\t}\n\t\t},\n\t\tsave(snapshot: VectorCanvasSnapshot): Promise<void> {\n\t\t\tif (!storage) return Promise.resolve();\n\t\t\ttry {\n\t\t\t\tstorage.setItem(\n\t\t\t\t\tkey,\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t...snapshot,\n\t\t\t\t\t\tversion: snapshot.version ?? SNAPSHOT_VERSION,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\t/* quota / private mode */\n\t\t\t}\n\t\t\treturn Promise.resolve();\n\t\t},\n\t};\n}\n\nfunction createNoopPersistenceAdapter(): VectorCanvasPersistenceAdapter {\n\treturn {\n\t\tload: () => Promise.resolve(null),\n\t\tsave: () => Promise.resolve(),\n\t};\n}\n\nexport { createNoopPersistenceAdapter };\n","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport {\n\tcreateLocalStoragePersistenceAdapter,\n\tcreateNoopPersistenceAdapter,\n\tDEFAULT_VECTOR_CANVAS_STORAGE_KEY,\n} from \"./local-storage-adapter\";\nimport type {\n\tVectorCanvasPersistenceAdapter,\n\tVectorCanvasRemoteAdapter,\n} from \"./types\";\n\nexport type UseVectorCanvasDocumentOptions = {\n\t/**\n\t * Storage key for the built-in localStorage adapter (ignored if `persistence` is set).\n\t * @default {@link DEFAULT_VECTOR_CANVAS_STORAGE_KEY}\n\t */\n\tpersistenceKey?: string;\n\t/**\n\t * Custom persistence (Postgres via API, IndexedDB, …).\n\t * - `undefined` → default **localStorage** adapter with `persistenceKey`\n\t * - `false` → no persistence (memory only)\n\t */\n\tpersistence?: VectorCanvasPersistenceAdapter | false;\n\t/** Debounce before writing to storage after edits. @default 400 */\n\tdebounceMs?: number;\n\t/**\n\t * Optional: WebSocket / server sync — `subscribe` receives remote `items`;\n\t * `send` is called after local edits (after debounce) so you can push upstream.\n\t */\n\tremote?: VectorCanvasRemoteAdapter;\n};\n\nexport type UseVectorCanvasDocumentResult = {\n\titems: VectorSceneItem[];\n\t/** Pass to `VectorViewport` `onItemsChange` */\n\tonItemsChange: (next: VectorSceneItem[]) => void;\n\t/** Same as `onItemsChange`; included for flexibility */\n\tsetItems: (next: VectorSceneItem[]) => void;\n\t/** `false` until the first `load()` finished (avoid SSR flash / empty overwrite) */\n\tisHydrated: boolean;\n\t/** Clear persisted snapshot (and reset state to `[]`) */\n\tclearPersistedDocument: () => void;\n};\n\n/**\n * Default **localStorage** persistence + optional **remote** sync hook.\n *\n * @example\n * ```tsx\n * const doc = useVectorCanvasDocument();\n * return (\n * <VectorViewport\n * items={doc.items}\n * onItemsChange={doc.onItemsChange}\n * interactive\n * ariaLabel=\"Board\"\n * />\n * );\n * ```\n *\n * @example Custom API\n * ```ts\n * const persistence = useMemo(() => ({\n * load: () => fetch(\"/api/board\").then((r) => r.json()),\n * save: (snap) => fetch(\"/api/board\", { method: \"PUT\", body: JSON.stringify(snap) }),\n * }), []);\n * useVectorCanvasDocument({ persistence });\n * ```\n */\nexport function useVectorCanvasDocument(\n\toptions: UseVectorCanvasDocumentOptions = {},\n): UseVectorCanvasDocumentResult {\n\tconst {\n\t\tpersistenceKey = DEFAULT_VECTOR_CANVAS_STORAGE_KEY,\n\t\tpersistence,\n\t\tdebounceMs = 400,\n\t\tremote,\n\t} = options;\n\n\tconst adapter = useMemo((): VectorCanvasPersistenceAdapter => {\n\t\tif (persistence === false) return createNoopPersistenceAdapter();\n\t\tif (persistence) return persistence;\n\t\treturn createLocalStoragePersistenceAdapter({ key: persistenceKey });\n\t}, [persistence, persistenceKey]);\n\n\tconst [items, setItems] = useState<VectorSceneItem[]>([]);\n\tconst [isHydrated, setIsHydrated] = useState(false);\n\tconst saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst adapterRef = useRef(adapter);\n\tadapterRef.current = adapter;\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tadapter.load().then((snap) => {\n\t\t\tif (cancelled) return;\n\t\t\tif (snap?.items && snap.items.length > 0) {\n\t\t\t\tsetItems(snap.items);\n\t\t\t}\n\t\t\tsetIsHydrated(true);\n\t\t});\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [adapter]);\n\n\tconst persist = useCallback((next: VectorSceneItem[]) => {\n\t\tvoid adapterRef.current.save({ items: next, version: 1 });\n\t}, []);\n\n\tconst onItemsChange = useCallback(\n\t\t(next: VectorSceneItem[]) => {\n\t\t\tsetItems(next);\n\t\t\tremote?.send?.(next);\n\t\t\tif (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n\t\t\tsaveTimerRef.current = setTimeout(() => {\n\t\t\t\tpersist(next);\n\t\t\t\tsaveTimerRef.current = null;\n\t\t\t}, debounceMs);\n\t\t},\n\t\t[debounceMs, persist, remote],\n\t);\n\n\t/** After local load, wire server so a fast WS message does not get overwritten by stale LS. */\n\tuseEffect(() => {\n\t\tif (!remote || !isHydrated) return;\n\t\treturn remote.subscribe((serverItems) => {\n\t\t\tsetItems(serverItems);\n\t\t\tpersist(serverItems);\n\t\t});\n\t}, [remote, isHydrated, persist]);\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (saveTimerRef.current) clearTimeout(saveTimerRef.current);\n\t\t},\n\t\t[],\n\t);\n\n\tconst clearPersistedDocument = useCallback(() => {\n\t\tsetItems([]);\n\t\tvoid adapterRef.current.save({ items: [], version: 1 });\n\t}, []);\n\n\treturn {\n\t\titems,\n\t\tonItemsChange,\n\t\tsetItems: onItemsChange,\n\t\tisHydrated,\n\t\tclearPersistedDocument,\n\t};\n}\n","\"use client\";\n\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseContext,\n\tuseLayoutEffect,\n} from \"react\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport type { VectorToolDefinition } from \"../tools/types\";\nimport type {\n\tCustomShapePlacementOptions,\n\tVectorViewportHandle,\n\tVectorViewportProps,\n} from \"../VectorViewport\";\n\nexport type CanvasPluginRenderContext = {\n\t/** Live viewport handle when the plugin needs camera or viewport size. */\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n};\n\nexport type CanvasPluginItemsChangeMiddlewareContext = {\n\t/** Current board items before the pending change is applied. */\n\tcurrentItems: readonly VectorSceneItem[];\n\t/** Continue the item change pipeline. */\n\tnext: NonNullable<VectorViewportProps[\"onItemsChange\"]>;\n\t/** Original consumer callback passed to `VectorViewport`. */\n\tconsumerOnItemsChange?: VectorViewportProps[\"onItemsChange\"];\n\t/** Live viewport handle for advanced integrations. */\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n};\n\nexport type CanvasPluginContribution = {\n\t/** Additional tools injected into the board toolbar/runtime. */\n\ttools?: readonly VectorToolDefinition[];\n\t/** Transform the resolved tool list (reorder, replace, or filter existing tools). */\n\ttoolTransform?: (tools: VectorToolDefinition[]) => VectorToolDefinition[];\n\t/** Multiple custom placements contributed by plugins; the active one is resolved by `toolId`. */\n\tcustomPlacements?: readonly CustomShapePlacementOptions[];\n\t/** Simple viewport prop overrides owned by the plugin runtime. */\n\tviewportProps?: Partial<\n\t\tPick<VectorViewportProps, \"remotePresence\" | \"presenceOverlay\">\n\t>;\n\t/** Event callbacks chained into the viewport without manual wiring in app code. */\n\tcallbacks?: Partial<\n\t\tPick<\n\t\t\tVectorViewportProps,\n\t\t\t| \"onWorldPointerDown\"\n\t\t\t| \"onWorldPointerMove\"\n\t\t\t| \"onWorldPointerLeave\"\n\t\t\t| \"onPlacementPreviewChange\"\n\t\t\t| \"onCameraChange\"\n\t\t>\n\t>;\n\t/** Middleware around `onItemsChange` for collaboration, comments, persistence, etc. */\n\twrapOnItemsChange?: (\n\t\tnextItems: VectorSceneItem[],\n\t\tctx: CanvasPluginItemsChangeMiddlewareContext,\n\t) => void;\n};\n\nexport type CanvasPluginComponentProps = {\n\t/** Stable plugin id so the component can register contributions. */\n\tpluginId: string;\n};\n\nexport type CanvasPlugin = {\n\t/** Stable id, e.g. `canvu.plugin.chatbot`. */\n\tid: string;\n\t/**\n\t * Legacy/simple rendering path for purely visual plugins.\n\t *\n\t * Prefer `Component` for plugins that need hooks, document integration, tools, or runtime contributions.\n\t */\n\trender?: (ctx: CanvasPluginRenderContext) => ReactNode;\n\t/**\n\t * Preferred plugin entrypoint for first-party and advanced plugins.\n\t *\n\t * The component can use hooks and register contributions through `useCanvuPluginContribution`.\n\t */\n\tComponent?: (props: CanvasPluginComponentProps) => ReactNode;\n};\n\nexport type CanvuPluginViewportSnapshot = Pick<\n\tVectorViewportProps,\n\t| \"items\"\n\t| \"onItemsChange\"\n\t| \"toolId\"\n\t| \"interactive\"\n\t| \"toolLocked\"\n\t| \"onToolChangeRequest\"\n>;\n\nexport type CanvuPluginContextValue = {\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n\tviewport: CanvuPluginViewportSnapshot;\n\tresolvedTools: VectorToolDefinition[];\n\tregisterContribution: (\n\t\tpluginId: string,\n\t\tcontribution: CanvasPluginContribution,\n\t) => void;\n\tunregisterContribution: (pluginId: string) => void;\n};\n\nexport const CanvuPluginContext = createContext<CanvuPluginContextValue | null>(\n\tnull,\n);\n\n/**\n * Creates a typed canvu plugin descriptor.\n *\n * Use this helper when authoring custom plugins so your editor can infer the plugin shape\n * and surface better hover documentation for the returned object.\n */\nexport function createCanvuPlugin(plugin: CanvasPlugin): CanvasPlugin {\n\treturn plugin;\n}\n\n/**\n * Returns the low-level canvu plugin runtime context.\n *\n * This is an advanced API for custom plugin authors. Prefer first-party plugin factories such as\n * `chatbotPlugin(...)` and `realtimeCollaborationPlugin(...)` for the common path.\n */\nexport function useCanvuPluginContext(): CanvuPluginContextValue {\n\tconst ctx = useContext(CanvuPluginContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t\"useCanvuPluginContext must be used inside a VectorViewport plugin runtime.\",\n\t\t);\n\t}\n\treturn ctx;\n}\n\n/**\n * Returns the current viewport-facing board state exposed to plugins.\n *\n * Use this when a custom plugin needs access to items, the active tool, or the consumer's\n * `onToolChangeRequest` callback.\n */\nexport function useCanvuViewportContext(): {\n\tviewportRef?: RefObject<VectorViewportHandle | null>;\n\tviewport: CanvuPluginViewportSnapshot;\n} {\n\tconst { viewportRef, viewport } = useCanvuPluginContext();\n\treturn { viewportRef, viewport };\n}\n\n/**\n * Returns the board document context exposed to plugins.\n *\n * This hook is intended for advanced plugins that need to read items or integrate with the board's\n * `onItemsChange` lifecycle.\n */\nexport function useCanvuDocumentContext(): {\n\titems: readonly VectorSceneItem[];\n\tonItemsChange?: VectorViewportProps[\"onItemsChange\"];\n} {\n\tconst { viewport } = useCanvuPluginContext();\n\treturn {\n\t\titems: viewport.items,\n\t\tonItemsChange: viewport.onItemsChange,\n\t};\n}\n\n/**\n * Returns the tool list already resolved by the plugin runtime.\n *\n * `VectorToolbar` consumes this automatically when you omit its `tools` prop, so most apps do not\n * need this hook directly.\n */\nexport function useCanvuResolvedTools(): VectorToolDefinition[] {\n\treturn useCanvuPluginContext().resolvedTools;\n}\n\n/**\n * Registers non-visual plugin contributions with the current `VectorViewport` runtime.\n *\n * Use this inside `plugin.Component` when you want to inject tools, pointer/camera behavior, or\n * document middleware without requiring the consumer to wire hooks manually.\n */\nexport function useCanvuPluginContribution(\n\tpluginId: string,\n\tcontribution: CanvasPluginContribution,\n): void {\n\tconst { registerContribution, unregisterContribution } = useCanvuPluginContext();\n\tuseLayoutEffect(() => {\n\t\tregisterContribution(pluginId, contribution);\n\t\treturn () => unregisterContribution(pluginId);\n\t}, [contribution, pluginId, registerContribution, unregisterContribution]);\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport type { VectorSceneItem } from \"../../scene/types\";\nimport type { VectorToolDefinition } from \"../tools/types\";\nimport type { CustomShapePlacementOptions } from \"../VectorViewport\";\nimport {\n\ttype CanvasPlugin,\n\tcreateCanvuPlugin,\n\tuseCanvuPluginContribution,\n} from \"./types\";\n\nexport type CreateToolPluginOptions = VectorToolDefinition & {\n\t/**\n\t * Optional custom placement factory for tools that create scene items directly.\n\t *\n\t * When provided, the resulting plugin contributes a `customPlacement` entry for this tool id.\n\t */\n\tcreateItem?: (args: {\n\t\tid: string;\n\t\tbounds: { x: number; y: number; width: number; height: number };\n\t}) => VectorSceneItem;\n\t/**\n\t * Optional tool list transform applied after this tool is merged.\n\t *\n\t * Use this when you need custom ordering or to replace an existing tool position.\n\t */\n\ttoolTransform?: (tools: VectorToolDefinition[]) => VectorToolDefinition[];\n};\n\nfunction ToolPluginComponent({\n\tpluginId,\n\ttool,\n\ttoolTransform,\n\tcreateItem,\n}: {\n\tpluginId: string;\n\ttool: VectorToolDefinition;\n\ttoolTransform?: (tools: VectorToolDefinition[]) => VectorToolDefinition[];\n\tcreateItem?: CustomShapePlacementOptions[\"createItem\"];\n}) {\n\tconst contribution = useMemo(\n\t\t() => ({\n\t\t\ttools: [tool],\n\t\t\ttoolTransform,\n\t\t\tcustomPlacements: createItem\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttoolId: tool.id,\n\t\t\t\t\t\t\tcreateItem,\n\t\t\t\t\t\t},\n\t\t\t\t\t]\n\t\t\t\t: undefined,\n\t\t}),\n\t\t[createItem, tool, toolTransform],\n\t);\n\tuseCanvuPluginContribution(pluginId, contribution);\n\treturn null;\n}\n\n/**\n * Creates a lightweight plugin that contributes a single tool to `VectorViewport`.\n *\n * Use this for isolated tools such as custom shapes, review pins, or lightweight creation flows.\n * For larger features that also need presence, panels, or network integration, prefer a dedicated\n * feature plugin such as `realtimeCollaborationPlugin(...)`.\n */\nexport function createToolPlugin(options: CreateToolPluginOptions): CanvasPlugin {\n\tconst { createItem, toolTransform, ...tool } = options;\n\tconst pluginId = `canvu.plugin.tool:${tool.id}`;\n\treturn createCanvuPlugin({\n\t\tid: pluginId,\n\t\tComponent() {\n\t\t\treturn (\n\t\t\t\t<ToolPluginComponent\n\t\t\t\t\tpluginId={pluginId}\n\t\t\t\t\ttool={tool}\n\t\t\t\t\ttoolTransform={toolTransform}\n\t\t\t\t\tcreateItem={createItem}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t});\n}\n","\"use client\";\n\nimport { type CSSProperties, useEffect, useLayoutEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nconst menuStyle: CSSProperties = {\n\tposition: \"fixed\",\n\tzIndex: 10000,\n\tminWidth: 200,\n\tpadding: 4,\n\tbackgroundColor: \"#ffffff\",\n\tborder: \"1px solid #e2e8f0\",\n\tborderRadius: 8,\n\tboxShadow: \"0 10px 40px rgba(15, 23, 42, 0.12)\",\n\tfontSize: 13,\n\tfontFamily: \"system-ui, sans-serif\",\n\tcolor: \"#0f172a\",\n};\n\nconst itemStyle: CSSProperties = {\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\ttextAlign: \"left\",\n\tpadding: \"8px 12px\",\n\tmargin: 0,\n\tborder: \"none\",\n\tborderRadius: 4,\n\tbackground: \"transparent\",\n\tcursor: \"pointer\",\n};\n\nconst dividerStyle: CSSProperties = {\n\theight: 1,\n\tmargin: \"4px 8px\",\n\tbackground: \"#e2e8f0\",\n};\n\nexport type ShapeContextMenuProps = {\n\t/** Viewport client coordinates (from `clientX` / `clientY`). */\n\tx: number;\n\ty: number;\n\t/** When true, all selected items are locked — action is “unlock”. */\n\tallSelectedLocked: boolean;\n\tonClose: () => void;\n\tonToggleLock: () => void;\n\tonCut: () => void;\n\tonCopy: () => void;\n\tonBringToFront: () => void;\n\tonBringForward: () => void;\n\tonSendBackward: () => void;\n\tonSendToBack: () => void;\n\tonDuplicate: () => void;\n\tonDelete: () => void;\n};\n\n/**\n * Floating menu for shape actions (reorder, clipboard, lock, delete).\n * Renders in a portal and closes on Escape or outside click.\n */\nexport function ShapeContextMenu({\n\tx,\n\ty,\n\tallSelectedLocked,\n\tonClose,\n\tonToggleLock,\n\tonCut,\n\tonCopy,\n\tonBringToFront,\n\tonBringForward,\n\tonSendBackward,\n\tonSendToBack,\n\tonDuplicate,\n\tonDelete,\n}: ShapeContextMenuProps) {\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\n\tuseLayoutEffect(() => {\n\t\tconst el = rootRef.current;\n\t\tif (!el) return;\n\t\tconst pad = 8;\n\t\tconst w = el.offsetWidth || 200;\n\t\tconst h = el.offsetHeight || 160;\n\t\tlet left = x;\n\t\tlet top = y;\n\t\tif (left + w + pad > window.innerWidth) {\n\t\t\tleft = Math.max(pad, window.innerWidth - w - pad);\n\t\t}\n\t\tif (top + h + pad > window.innerHeight) {\n\t\t\ttop = Math.max(pad, window.innerHeight - h - pad);\n\t\t}\n\t\tel.style.left = `${left}px`;\n\t\tel.style.top = `${top}px`;\n\t}, [x, y]);\n\n\tuseEffect(() => {\n\t\tconst onKey = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\t\tconst onPointerDown = (e: PointerEvent) => {\n\t\t\tconst t = e.target as Node | null;\n\t\t\tif (t && rootRef.current?.contains(t)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClose();\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\tdocument.addEventListener(\"pointerdown\", onPointerDown, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"keydown\", onKey);\n\t\t\tdocument.removeEventListener(\"pointerdown\", onPointerDown, true);\n\t\t};\n\t}, [onClose]);\n\n\tconst run = (fn: () => void) => () => {\n\t\tfn();\n\t\tonClose();\n\t};\n\n\tconst renderAction = (\n\t\tlabel: string,\n\t\tonClick: () => void,\n\t\toptions?: { danger?: boolean },\n\t) => (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\trole=\"menuitem\"\n\t\t\tstyle={{\n\t\t\t\t...itemStyle,\n\t\t\t\t...(options?.danger ? { color: \"#b91c1c\" } : {}),\n\t\t\t}}\n\t\t\tonMouseEnter={(e) => {\n\t\t\t\te.currentTarget.style.background = options?.danger ? \"#fef2f2\" : \"#f1f5f9\";\n\t\t\t}}\n\t\t\tonMouseLeave={(e) => {\n\t\t\t\te.currentTarget.style.background = \"transparent\";\n\t\t\t}}\n\t\t\tonClick={run(onClick)}\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n\n\tconst menu = (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tdata-slot=\"shape-context-menu\"\n\t\t\tstyle={{ ...menuStyle, left: x, top: y }}\n\t\t\trole=\"menu\"\n\t\t>\n\t\t\t{renderAction(\"Recortar\", onCut)}\n\t\t\t{renderAction(\"Copiar\", onCopy)}\n\t\t\t{renderAction(\"Duplicar\", onDuplicate)}\n\t\t\t<div aria-hidden style={dividerStyle} />\n\t\t\t{renderAction(\"Trazer para frente\", onBringToFront)}\n\t\t\t{renderAction(\"Avancar uma camada\", onBringForward)}\n\t\t\t{renderAction(\"Recuar uma camada\", onSendBackward)}\n\t\t\t{renderAction(\"Enviar para tras\", onSendToBack)}\n\t\t\t<div aria-hidden style={dividerStyle} />\n\t\t\t{renderAction(allSelectedLocked ? \"Desbloquear\" : \"Bloquear\", onToggleLock)}\n\t\t\t{renderAction(\"Apagar\", onDelete, { danger: true })}\n\t\t</div>\n\t);\n\n\tif (typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\treturn createPortal(menu, document.body);\n}\n","import type { SVGProps } from \"react\";\n\ntype IconProps = SVGProps<SVGSVGElement>;\n\nconst base = {\n\twidth: 20,\n\theight: 20,\n\tviewBox: \"0 0 24 24\",\n\tfill: \"none\",\n\tstroke: \"currentColor\",\n\tstrokeWidth: 2,\n\tstrokeLinecap: \"round\" as const,\n\tstrokeLinejoin: \"round\" as const,\n};\n\nexport function IconHand(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M18 11V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0\" />\n\t\t\t<path d=\"M14 10V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2\" />\n\t\t\t<path d=\"M10 10.5V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v8\" />\n\t\t\t<path d=\"M18 8a2 2 0 1 1 4 0v5a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconSelect(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\" />\n\t\t\t<path d=\"M13 13l6 6\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconRect(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconEllipse(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<ellipse cx=\"12\" cy=\"12\" rx=\"9\" ry=\"6\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconLine(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<line x1=\"5\" y1=\"19\" x2=\"19\" y2=\"5\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconArrow(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<line x1=\"5\" y1=\"19\" x2=\"19\" y2=\"5\" />\n\t\t\t<polyline points=\"12 5 19 5 19 12\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconDraw(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M12 19l7-7 3 3-7 7-3-3z\" />\n\t\t\t<path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\" />\n\t\t\t<path d=\"M2 2l7.586 7.586\" />\n\t\t\t<circle cx=\"11\" cy=\"11\" r=\"2\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconText(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2\" />\n\t\t\t<path d=\"M9 21h6\" />\n\t\t\t<path d=\"M12 3v18\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconImage(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n\t\t\t<circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n\t\t\t<polyline points=\"21 15 16 10 5 21\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconPencil(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M12 19l7-7 3 3-7 7-3-3z\" />\n\t\t\t<path d=\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\" />\n\t\t\t<path d=\"M2 2l7.586 7.586\" />\n\t\t\t<path d=\"M11 4h4v4\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconBrush(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M9.06 11.9l8.07-8.06a2.85 2.85 0 0 1 4.03 4.03l-8.06 8.07\" />\n\t\t\t<path d=\"M7.5 15.5L3 21l5.5-4.5\" />\n\t\t\t<path d=\"M2 22l4-1\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconMarker(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<path d=\"M4 20h16\" />\n\t\t\t<path d=\"M6 16l6-12 6 12\" fill=\"currentColor\" fillOpacity={0.35} />\n\t\t\t<path d=\"M8 14h8\" />\n\t\t</svg>\n\t);\n}\n\nexport function IconLaser(props: IconProps) {\n\treturn (\n\t\t<svg {...base} {...props} aria-hidden>\n\t\t\t<circle cx=\"12\" cy=\"12\" r=\"2.5\" />\n\t\t\t<path d=\"M12 4v4\" />\n\t\t\t<path d=\"M12 16v4\" />\n\t\t\t<path d=\"M4 12h4\" />\n\t\t\t<path d=\"M16 12h4\" />\n\t\t</svg>\n\t);\n}\n","import {\n\tArrowUpRight,\n\tCircle,\n\tEraser,\n\tHand,\n\tHighlighter,\n\tImage,\n\tMinus,\n\tMousePointer2,\n\tPenLine,\n\tSquare,\n\tType,\n} from \"lucide-react\";\nimport { IconLaser } from \"./icons\";\nimport type { VectorToolDefinition } from \"./types\";\n\n/** Match previous 20×20 toolbar glyphs; Lucide scales with `currentColor`. */\nconst ic = { size: 20, strokeWidth: 2 } as const;\n\n/**\n * Tool ids shown in the overflow menu at the end of the default toolbar (horizontal layout).\n * Order: shapes, marker, laser, image.\n */\nexport const DEFAULT_OVERFLOW_TOOL_IDS = [\n\t\"rect\",\n\t\"ellipse\",\n\t\"line\",\n\t\"marker\",\n\t\"laser\",\n\t\"image\",\n] as const;\n\n/**\n * Opinionated default tool strip using [Lucide](https://lucide.dev) icons.\n * Pass a subset or your own list via {@link VectorToolbarProps.tools}.\n */\nexport const DEFAULT_VECTOR_TOOLS: VectorToolDefinition[] = [\n\t{\n\t\tid: \"hand\",\n\t\tlabel: \"Hand\",\n\t\ticon: <Hand {...ic} aria-hidden />,\n\t\tshortcutHint: \"H\",\n\t},\n\t{\n\t\tid: \"select\",\n\t\tlabel: \"Select\",\n\t\ticon: <MousePointer2 {...ic} aria-hidden />,\n\t\tshortcutHint: \"V\",\n\t},\n\t{\n\t\tid: \"rect\",\n\t\tlabel: \"Rectangle\",\n\t\ticon: <Square {...ic} aria-hidden />,\n\t\tshortcutHint: \"R\",\n\t},\n\t{\n\t\tid: \"ellipse\",\n\t\tlabel: \"Ellipse\",\n\t\ticon: <Circle {...ic} aria-hidden />,\n\t\tshortcutHint: \"O\",\n\t},\n\t{\n\t\tid: \"line\",\n\t\tlabel: \"Line\",\n\t\ticon: <Minus {...ic} aria-hidden />,\n\t\tshortcutHint: \"L\",\n\t},\n\t{\n\t\tid: \"arrow\",\n\t\tlabel: \"Arrow\",\n\t\ticon: <ArrowUpRight {...ic} aria-hidden />,\n\t\tshortcutHint: \"A\",\n\t},\n\t{\n\t\tid: \"draw\",\n\t\tlabel: \"Desenhar\",\n\t\ttooltipLabel: \"Draw\",\n\t\ticon: <PenLine {...ic} aria-hidden />,\n\t\tshortcutHint: \"D\",\n\t},\n\t{\n\t\tid: \"marker\",\n\t\tlabel: \"Realce\",\n\t\ttooltipLabel: \"Highlighter\",\n\t\ticon: <Highlighter {...ic} aria-hidden />,\n\t\tshortcutHint: \"M\",\n\t},\n\t{\n\t\tid: \"laser\",\n\t\tlabel: \"Laser\",\n\t\ticon: <IconLaser aria-hidden />,\n\t\tshortcutHint: \"K\",\n\t},\n\t{\n\t\tid: \"eraser\",\n\t\tlabel: \"Borracha\",\n\t\ttooltipLabel: \"Eraser\",\n\t\ticon: <Eraser {...ic} aria-hidden />,\n\t\tshortcutHint: \"E\",\n\t},\n\t{\n\t\tid: \"text\",\n\t\tlabel: \"Text\",\n\t\ticon: <Type {...ic} aria-hidden />,\n\t\tshortcutHint: \"T\",\n\t},\n\t{\n\t\tid: \"image\",\n\t\tlabel: \"File\",\n\t\ticon: <Image {...ic} aria-hidden />,\n\t\tshortcutHint: \"I\",\n\t},\n];\n","\"use client\";\n\nimport { ChevronDown, Lock, LockOpen, Shapes } from \"lucide-react\";\nimport {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseId,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { CanvuPluginContext } from \"./plugins\";\nimport {\n\tDEFAULT_OVERFLOW_TOOL_IDS,\n\tDEFAULT_VECTOR_TOOLS,\n} from \"./tools/default-tools\";\nimport type { VectorToolDefinition } from \"./tools/types\";\n\nexport type VectorToolbarRenderContext = {\n\ttools: VectorToolDefinition[];\n\tselectedId: string;\n\tselectTool: (id: string) => void;\n\ttoolLocked: boolean;\n\tsetToolLocked: (locked: boolean) => void;\n};\n\nexport type VectorToolbarProps = {\n\t/** Controlled selection. */\n\tvalue: string;\n\tonChange: (toolId: string) => void;\n\t/** Defaults to {@link DEFAULT_VECTOR_TOOLS}. */\n\ttools?: VectorToolDefinition[];\n\t/**\n\t * Tool ids placed in the overflow menu at the end of the toolbar (horizontal) or bottom (vertical).\n\t * Defaults to {@link DEFAULT_OVERFLOW_TOOL_IDS}. Pass an empty array to show every tool in the main strip.\n\t */\n\toverflowToolIds?: readonly string[];\n\t/** Accessible name for the overflow trigger (menu button). Default: `\"More tools\"`. */\n\toverflowMenuAriaLabel?: string;\n\t/** Accessible name for the toolbar landmark. */\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\t/** Layout direction. */\n\torientation?: \"horizontal\" | \"vertical\";\n\t/** Optional style for the outer `role=\"toolbar\"` element. */\n\tstyle?: CSSProperties;\n\t/** Class names applied to every tool button. */\n\tbuttonClassName?: string;\n\t/** Extra class names when that tool is selected. */\n\tactiveButtonClassName?: string;\n\t/** Shows a lock toggle that keeps current tool active after use. */\n\tshowToolLockToggle?: boolean;\n\t/** Controlled lock state for tool persistence. */\n\ttoolLocked?: boolean;\n\t/** Called when lock state changes. */\n\tonToolLockedChange?: (locked: boolean) => void;\n\t/** `compact` = icon + tooltip only; `comfortable` = small caption under the icon. */\n\tdensity?: \"compact\" | \"comfortable\";\n\t/**\n\t * Full control: render your own toolbar using the same tool list and selection API.\n\t * When set, default buttons are not rendered.\n\t */\n\tchildren?: (ctx: VectorToolbarRenderContext) => ReactNode;\n\t/**\n\t * Partial customization: render the content of each tool button (icon + label layout).\n\t * Default: icon with optional label below on narrow toolbars, or icon-only if `icon` is set.\n\t */\n\trenderToolButton?: (props: {\n\t\ttool: VectorToolDefinition;\n\t\tselected: boolean;\n\t\tonSelect: () => void;\n\t}) => ReactNode;\n};\n\nconst toolbarStyles: CSSProperties = {\n\tdisplay: \"flex\",\n\tgap: \"4px\",\n\talignItems: \"center\",\n\tflexWrap: \"wrap\",\n\tpadding: \"6px 8px\",\n\tborderRadius: \"8px\",\n\tborder: \"1px solid rgba(0,0,0,0.12)\",\n\tbackground: \"rgba(255,255,255,0.95)\",\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tuserSelect: \"none\",\n\tWebkitUserSelect: \"none\",\n\tWebkitTouchCallout: \"none\",\n};\n\n/** Injected once; tooltips show on hover / keyboard focus within the tool wrap. */\nconst TOOLBAR_TOOLTIP_CSS = `\n.vector-toolbar-tool-wrap {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n}\n.vector-toolbar-tip {\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: calc(100% + 8px);\n\ttransform: translateX(-50%);\n\tpadding: 5px 10px;\n\tfont-size: 11px;\n\tfont-weight: 600;\n\tline-height: 1.25;\n\twhite-space: nowrap;\n\tbackground: #18181b;\n\tcolor: #fafafa;\n\tborder-radius: 6px;\n\tbox-shadow: 0 4px 14px rgba(0,0,0,0.18);\n\tpointer-events: none;\n\tz-index: 100;\n\topacity: 0;\n\tvisibility: hidden;\n\ttransition: opacity 0.12s ease, visibility 0.12s ease;\n\tmax-width: min(240px, 70vw);\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.vector-toolbar-tool-wrap:has(button:hover) .vector-toolbar-tip,\n.vector-toolbar-tool-wrap:has(button:focus-visible) .vector-toolbar-tip {\n\topacity: 1;\n\tvisibility: visible;\n}\n`;\n\nconst OVERFLOW_MENU_CSS = `\n.vector-toolbar-overflow-panel {\n\tposition: absolute;\n\tbottom: calc(100% + 6px);\n\ttop: auto;\n\tright: 0;\n\tdisplay: grid;\n\tgrid-template-columns: repeat(3, 40px);\n\tgap: 6px;\n\tpadding: 10px;\n\tborder-radius: 10px;\n\tborder: 1px solid rgba(0,0,0,0.1);\n\tbackground: rgba(255,255,255,0.98);\n\tbox-shadow:\n\t\t0 -4px 24px rgba(0,0,0,0.08),\n\t\t0 0 0 1px rgba(255,255,255,0.6) inset;\n\tz-index: 200;\n\toverflow: visible;\n}\n.vector-toolbar-overflow-anchor {\n\tposition: relative;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n}\n.vector-toolbar-overflow-anchor .vector-toolbar-tip {\n\tleft: auto;\n\tright: 0;\n\ttransform: none;\n}\n.vector-toolbar-overflow-cell {\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 40px;\n\theight: 40px;\n}\n.vector-toolbar-overflow-cell > button {\n\twidth: 100%;\n\theight: 100%;\n\tmin-width: 0;\n\tmin-height: 0;\n}\n.vector-toolbar-overflow-tip {\n\tposition: absolute;\n\tleft: 50%;\n\tbottom: calc(100% + 8px);\n\ttop: auto;\n\ttransform: translateX(-50%);\n\tpadding: 6px 10px;\n\tfont-size: 11px;\n\tfont-weight: 600;\n\tline-height: 1.35;\n\ttext-align: center;\n\twhite-space: normal;\n\tbackground: #18181b;\n\tcolor: #fafafa;\n\tborder-radius: 6px;\n\tbox-shadow: 0 4px 14px rgba(0,0,0,0.2);\n\tpointer-events: none;\n\tz-index: 210;\n\topacity: 0;\n\tvisibility: hidden;\n\ttransition: opacity 0.12s ease, visibility 0.12s ease;\n\tmax-width: min(220px, 70vw);\n}\n.vector-toolbar-overflow-tip-shortcut {\n\tdisplay: block;\n\tmargin-top: 2px;\n\tfont-size: 10px;\n\tfont-weight: 600;\n\tfont-variant-numeric: tabular-nums;\n\tletter-spacing: 0.04em;\n\topacity: 0.85;\n\tcolor: #a1a1aa;\n}\n.vector-toolbar-overflow-cell:has(button:hover) .vector-toolbar-overflow-tip,\n.vector-toolbar-overflow-cell:has(button:focus-visible) .vector-toolbar-overflow-tip {\n\topacity: 1;\n\tvisibility: visible;\n}\n.vector-toolbar-overflow-cell > button {\n\tbackground: rgba(24,24,27,0.05);\n}\n.vector-toolbar-overflow-cell > button:hover {\n\tbackground: rgba(24,24,27,0.1);\n}\n.vector-toolbar-overflow-cell > button[aria-checked=\"true\"] {\n\tbackground: rgba(24,24,27,0.14);\n\tborder-color: rgba(24,24,27,0.22);\n\tbox-shadow: inset 0 0 0 1px rgba(24,24,27,0.08);\n}\n.vector-toolbar-overflow-cell > button[aria-checked=\"true\"]:hover {\n\tbackground: rgba(24,24,27,0.18);\n}\n.vector-toolbar-overflow-cell > button:focus-visible {\n\toutline: 2px solid rgba(24,24,27,0.35);\n\toutline-offset: 1px;\n}\n`;\n\n/** Narrow viewports: single-row scroll strip, tighter chrome, safe overflow palette width. */\nconst TOOLBAR_MOBILE_CSS = `\n@media (max-width: 639px) {\n\t.vector-toolbar[data-orientation=\"horizontal\"] {\n\t\tflex-wrap: nowrap;\n\t\talign-items: center;\n\t\tgap: 2px;\n\t\tpadding: 4px 4px;\n\t\tmax-width: 100%;\n\t\toverflow-x: auto;\n\t\toverflow-y: hidden;\n\t\t-webkit-overflow-scrolling: touch;\n\t\toverscroll-behavior-x: contain;\n\t\ttouch-action: pan-x;\n\t\tscrollbar-width: none;\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"]::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"] .vector-toolbar-spacer {\n\t\tflex: 1 1 4px;\n\t\tmin-width: 2px;\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"] .vector-toolbar-tool-wrap button {\n\t\tmin-width: 38px;\n\t\tmin-height: 38px;\n\t\tpadding: 4px 5px;\n\t}\n\t.vector-toolbar-overflow-panel {\n\t\tmax-width: min(calc(100vw - 16px), 260px);\n\t\tright: 0;\n\t\tleft: auto;\n\t\tgrid-template-columns: repeat(3, 36px);\n\t\tgap: 5px;\n\t\tpadding: 8px;\n\t}\n\t.vector-toolbar-overflow-cell {\n\t\twidth: 36px;\n\t\theight: 36px;\n\t}\n\t.vector-toolbar-overflow-tip {\n\t\tfont-size: 10px;\n\t\tpadding: 5px 8px;\n\t\tmax-width: min(200px, 85vw);\n\t}\n\t.vector-toolbar[data-orientation=\"horizontal\"] button.vector-toolbar-overflow-trigger {\n\t\tmin-width: 40px !important;\n\t\tmin-height: 38px !important;\n\t\tpadding: 4px 6px !important;\n\t}\n}\n`;\n\nconst defaultButtonStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\tflexDirection: \"column\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tgap: \"2px\",\n\tminWidth: \"44px\",\n\tminHeight: \"44px\",\n\tpadding: \"4px 6px\",\n\tborderWidth: \"1px\",\n\tborderStyle: \"solid\",\n\tborderColor: \"transparent\",\n\tborderRadius: \"6px\",\n\tbackground: \"transparent\",\n\tcursor: \"pointer\",\n\tfontSize: \"10px\",\n\tcolor: \"#18181b\",\n\toutline: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n\tuserSelect: \"none\",\n\tWebkitUserSelect: \"none\",\n\tWebkitTouchCallout: \"none\",\n};\n\nconst toolLockDividerStyle: CSSProperties = {\n\twidth: 1,\n\talignSelf: \"stretch\",\n\tbackground: \"rgba(24,24,27,0.14)\",\n\tmargin: \"4px 6px\",\n};\n\nconst overflowSpacerStyle: CSSProperties = {\n\tflex: \"1 1 0\",\n\tminWidth: \"8px\",\n\tminHeight: \"8px\",\n};\n\n/** Icon-only grid tile inside the overflow palette (surface + border from CSS). */\nconst overflowGridCellButtonStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tpadding: 0,\n\tborderWidth: \"1px\",\n\tborderStyle: \"solid\",\n\tborderColor: \"transparent\",\n\tborderRadius: \"8px\",\n\tcursor: \"pointer\",\n\tcolor: \"#18181b\",\n\toutline: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nfunction ToolLockGlyph({ locked }: { locked: boolean }) {\n\tconst Icon = locked ? Lock : LockOpen;\n\treturn <Icon size={18} strokeWidth={2} aria-hidden />;\n}\n\nfunction splitToolbarTools(\n\ttools: VectorToolDefinition[],\n\toverflowIds: readonly string[],\n): { primary: VectorToolDefinition[]; overflow: VectorToolDefinition[] } {\n\tif (overflowIds.length === 0) {\n\t\treturn { primary: tools, overflow: [] };\n\t}\n\tconst overflowSet = new Set<string>(overflowIds);\n\tconst primary = tools.filter((t) => !overflowSet.has(t.id));\n\tconst overflow = overflowIds\n\t\t.map((id) => tools.find((t) => t.id === id))\n\t\t.filter((t): t is VectorToolDefinition => Boolean(t));\n\treturn { primary, overflow };\n}\n\nconst icOverflow = { size: 18, strokeWidth: 2 } as const;\n\ntype OverflowMenuProps = {\n\ttools: VectorToolDefinition[];\n\tselectedId: string;\n\tonSelect: (id: string) => void;\n\tdensity: \"compact\" | \"comfortable\";\n\tbuttonClassName: string;\n\tactiveButtonClassName: string;\n\trenderToolButton?: VectorToolbarProps[\"renderToolButton\"];\n\tmenuAriaLabel: string;\n};\n\nfunction ToolbarOverflowMenu({\n\ttools,\n\tselectedId,\n\tonSelect,\n\tdensity,\n\tbuttonClassName,\n\tactiveButtonClassName,\n\trenderToolButton,\n\tmenuAriaLabel,\n}: OverflowMenuProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst wrapRef = useRef<HTMLDivElement>(null);\n\tconst triggerRef = useRef<HTMLButtonElement>(null);\n\tconst menuId = useId();\n\n\tconst activeInOverflow = tools.some((t) => t.id === selectedId);\n\tconst activeTool = tools.find((t) => t.id === selectedId);\n\n\tconst close = useCallback(() => {\n\t\tsetOpen(false);\n\t}, []);\n\n\tconst prevOpenRef = useRef(open);\n\n\tuseEffect(() => {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\t\tconst onDocPointerDown = (e: PointerEvent) => {\n\t\t\tif (wrapRef.current?.contains(e.target as Node)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclose();\n\t\t};\n\t\tconst onKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.stopPropagation();\n\t\t\t\tclose();\n\t\t\t\ttriggerRef.current?.focus();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"pointerdown\", onDocPointerDown, true);\n\t\tdocument.addEventListener(\"keydown\", onKeyDown, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"pointerdown\", onDocPointerDown, true);\n\t\t\tdocument.removeEventListener(\"keydown\", onKeyDown, true);\n\t\t};\n\t}, [open, close]);\n\n\tuseEffect(() => {\n\t\tif (prevOpenRef.current && !open) {\n\t\t\ttriggerRef.current?.focus({ preventScroll: true });\n\t\t}\n\t\tprevOpenRef.current = open;\n\t}, [open]);\n\n\tconst triggerHighlighted = open || activeInOverflow;\n\n\treturn (\n\t\t<div ref={wrapRef} className=\"vector-toolbar-overflow-anchor\">\n\t\t\t<span className=\"vector-toolbar-tool-wrap\">\n\t\t\t\t<button\n\t\t\t\t\tref={triggerRef}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tid={`${menuId}-trigger`}\n\t\t\t\t\taria-haspopup={renderToolButton ? \"true\" : \"menu\"}\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\taria-controls={open ? `${menuId}-menu` : undefined}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tactiveTool\n\t\t\t\t\t\t\t? `${menuAriaLabel}: ${activeTool.ariaLabel ?? activeTool.label}`\n\t\t\t\t\t\t\t: menuAriaLabel\n\t\t\t\t\t}\n\t\t\t\t\tclassName={`vector-toolbar-overflow-trigger ${buttonClassName} ${triggerHighlighted ? activeButtonClassName : \"\"}`.trim()}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...defaultButtonStyle,\n\t\t\t\t\t\tflexDirection: \"row\",\n\t\t\t\t\t\tminWidth: \"48px\",\n\t\t\t\t\t\tminHeight: density === \"compact\" ? \"40px\" : \"44px\",\n\t\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\t\tgap: \"4px\",\n\t\t\t\t\t\t...(triggerHighlighted\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tbackground: \"rgba(24,24,27,0.1)\",\n\t\t\t\t\t\t\t\t\tborderColor: \"rgba(24,24,27,0.28)\",\n\t\t\t\t\t\t\t\t\tboxShadow: \"inset 0 0 0 1px rgba(24,24,27,0.08)\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tborderColor: \"transparent\",\n\t\t\t\t\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t}}\n\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={() => setOpen((o) => !o)}\n\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\tif (e.key === \"ArrowDown\" && !open) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{activeTool?.icon ?? (\n\t\t\t\t\t\t\t<Shapes {...icOverflow} aria-hidden strokeWidth={2} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\topacity: 0.75,\n\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\ttransform: open ? \"rotate(180deg)\" : undefined,\n\t\t\t\t\t\t\ttransition: \"transform 0.15s ease\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t\t<span className=\"vector-toolbar-tip\" aria-hidden=\"true\">\n\t\t\t\t\t{menuAriaLabel}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t\t{open && renderToolButton ? (\n\t\t\t\t<section\n\t\t\t\t\tid={`${menuId}-menu`}\n\t\t\t\t\taria-label={menuAriaLabel}\n\t\t\t\t\tclassName=\"vector-toolbar-overflow-panel\"\n\t\t\t\t>\n\t\t\t\t\t{tools.map((tool) => {\n\t\t\t\t\t\tconst selected = tool.id === selectedId;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={tool.id}\n\t\t\t\t\t\t\t\tclassName=\"vector-toolbar-overflow-cell\"\n\t\t\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{renderToolButton({\n\t\t\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\t\t\tselected,\n\t\t\t\t\t\t\t\t\tonSelect: () => {\n\t\t\t\t\t\t\t\t\t\tonSelect(tool.id);\n\t\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</section>\n\t\t\t) : null}\n\t\t\t{open && !renderToolButton ? (\n\t\t\t\t<div\n\t\t\t\t\tid={`${menuId}-menu`}\n\t\t\t\t\trole=\"menu\"\n\t\t\t\t\taria-label={menuAriaLabel}\n\t\t\t\t\tclassName=\"vector-toolbar-overflow-panel\"\n\t\t\t\t>\n\t\t\t\t\t{tools.map((tool, index) => {\n\t\t\t\t\t\tconst selected = tool.id === selectedId;\n\t\t\t\t\t\tconst label = tool.ariaLabel ?? tool.label;\n\t\t\t\t\t\tconst tooltipName = tool.tooltipLabel ?? tool.label;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={tool.id} className=\"vector-toolbar-overflow-cell\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\t\t\t\t\taria-checked={selected}\n\t\t\t\t\t\t\t\t\ttabIndex={index === 0 ? 0 : -1}\n\t\t\t\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\t\t\t\t{...(tool.shortcutHint !== undefined\n\t\t\t\t\t\t\t\t\t\t? { \"aria-keyshortcuts\": tool.shortcutHint }\n\t\t\t\t\t\t\t\t\t\t: {})}\n\t\t\t\t\t\t\t\t\tstyle={overflowGridCellButtonStyle}\n\t\t\t\t\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tonSelect(tool.id);\n\t\t\t\t\t\t\t\t\t\tclose();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t\t\tlineHeight: 0,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{tool.icon ?? (\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1.1,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"34px\",\n\t\t\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{tool.label.slice(0, 3)}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<span className=\"vector-toolbar-overflow-tip\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<span>{tooltipName}</span>\n\t\t\t\t\t\t\t\t\t{tool.shortcutHint !== undefined ? (\n\t\t\t\t\t\t\t\t\t\t<span className=\"vector-toolbar-overflow-tip-shortcut\">\n\t\t\t\t\t\t\t\t\t\t\t{tool.shortcutHint}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n\n/**\n * Default floating-style toolbar for choosing vector tools (hand, shapes, draw, marker, text, …).\n * Supply your own `tools` array or `children` render prop for full customization.\n *\n * @example\n * ```tsx\n * const [tool, setTool] = useState(\"hand\");\n * <VectorToolbar value={tool} onChange={setTool} aria-label=\"Canvas tools\" />\n * ```\n */\nexport function VectorToolbar({\n\tvalue,\n\tonChange,\n\ttools,\n\toverflowToolIds = DEFAULT_OVERFLOW_TOOL_IDS,\n\toverflowMenuAriaLabel = \"More tools\",\n\t\"aria-label\": ariaLabel = \"Canvas tools\",\n\tclassName = \"\",\n\torientation = \"horizontal\",\n\tstyle,\n\tbuttonClassName = \"\",\n\tactiveButtonClassName = \"\",\n\tshowToolLockToggle = true,\n\ttoolLocked = false,\n\tonToolLockedChange,\n\tdensity = \"compact\",\n\tchildren,\n\trenderToolButton,\n}: VectorToolbarProps) {\n\tconst pluginContext = useContext(CanvuPluginContext);\n\tconst runtimeTools = pluginContext?.resolvedTools;\n\tconst resolvedTools = tools ?? runtimeTools ?? DEFAULT_VECTOR_TOOLS;\n\tconst ctx: VectorToolbarRenderContext = {\n\t\ttools: resolvedTools,\n\t\tselectedId: value,\n\t\tselectTool: onChange,\n\t\ttoolLocked,\n\t\tsetToolLocked: (locked: boolean) => onToolLockedChange?.(locked),\n\t};\n\n\tif (children) {\n\t\treturn (\n\t\t\t<div className={className} style={style}>\n\t\t\t\t{children(ctx)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst { primary: primaryTools, overflow: overflowTools } = splitToolbarTools(\n\t\tresolvedTools,\n\t\toverflowToolIds,\n\t);\n\n\tconst flexDir = orientation === \"vertical\" ? \"column\" : \"row\";\n\tconst showOverflowMenu = overflowTools.length > 0;\n\n\tconst toolbarClass =\n\t\tclassName.trim() === \"\"\n\t\t\t? \"vector-toolbar\"\n\t\t\t: `vector-toolbar ${className.trim()}`;\n\n\treturn (\n\t\t<>\n\t\t\t<style>{TOOLBAR_TOOLTIP_CSS}</style>\n\t\t\t<style>{OVERFLOW_MENU_CSS}</style>\n\t\t\t<style>{TOOLBAR_MOBILE_CSS}</style>\n\t\t\t<div\n\t\t\t\trole=\"toolbar\"\n\t\t\t\tdata-orientation={orientation}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-orientation={orientation === \"vertical\" ? \"vertical\" : \"horizontal\"}\n\t\t\t\tclassName={toolbarClass}\n\t\t\t\tstyle={{ ...toolbarStyles, flexDirection: flexDir, ...style }}\n\t\t\t>\n\t\t\t\t{showToolLockToggle ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<span className=\"vector-toolbar-tool-wrap\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={toolLocked}\n\t\t\t\t\t\t\t\taria-label={toolLocked ? \"Unlock tool\" : \"Lock tool\"}\n\t\t\t\t\t\t\t\tclassName={`${buttonClassName} ${toolLocked ? activeButtonClassName : \"\"}`.trim()}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...defaultButtonStyle,\n\t\t\t\t\t\t\t\t\t...(density === \"compact\"\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t...(toolLocked\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(24,24,27,0.1)\",\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"rgba(24,24,27,0.28)\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"inset 0 0 0 1px rgba(24,24,27,0.08)\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={() => onToolLockedChange?.(!toolLocked)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ToolLockGlyph locked={toolLocked} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<span className=\"vector-toolbar-tip\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{toolLocked ? \"Tool lock on\" : \"Tool lock off\"}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span aria-hidden style={toolLockDividerStyle} />\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{primaryTools.map((tool) => {\n\t\t\t\t\tconst selected = tool.id === value;\n\t\t\t\t\tconst label = tool.ariaLabel ?? tool.label;\n\n\t\t\t\t\tif (renderToolButton) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={tool.id}>\n\t\t\t\t\t\t\t\t{renderToolButton({\n\t\t\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\t\t\tselected,\n\t\t\t\t\t\t\t\t\tonSelect: () => onChange(tool.id),\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tooltipName = tool.tooltipLabel ?? tool.label;\n\t\t\t\t\tconst tooltipText =\n\t\t\t\t\t\ttool.shortcutHint !== undefined\n\t\t\t\t\t\t\t? `${tooltipName} · ${tool.shortcutHint}`\n\t\t\t\t\t\t\t: tooltipName;\n\n\t\t\t\t\tconst labelOnly = tool.icon == null;\n\t\t\t\t\tconst labelTextStyle: CSSProperties = labelOnly\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tfontSize: \"12px\",\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.02em\",\n\t\t\t\t\t\t\t\tlineHeight: 1.2,\n\t\t\t\t\t\t\t\tWebkitFontSmoothing: \"antialiased\",\n\t\t\t\t\t\t\t\tMozOsxFontSmoothing: \"grayscale\",\n\t\t\t\t\t\t\t\ttextRendering: \"geometricPrecision\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {};\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<span key={tool.id} className=\"vector-toolbar-tool-wrap\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={selected}\n\t\t\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\t\t\t{...(tool.shortcutHint !== undefined\n\t\t\t\t\t\t\t\t\t? { \"aria-keyshortcuts\": tool.shortcutHint }\n\t\t\t\t\t\t\t\t\t: {})}\n\t\t\t\t\t\t\t\tclassName={`${buttonClassName} ${selected ? activeButtonClassName : \"\"}`.trim()}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...defaultButtonStyle,\n\t\t\t\t\t\t\t\t\t...(density === \"compact\"\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tminHeight: \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tminWidth: labelOnly ? \"52px\" : \"40px\",\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"6px 8px\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t...(selected\n\t\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(24,24,27,0.1)\",\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"rgba(24,24,27,0.28)\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"inset 0 0 0 1px rgba(24,24,27,0.08)\",\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\t\tborderColor: \"transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonPointerDown={(ev) => {\n\t\t\t\t\t\t\t\t\tif (ev.pointerType === \"mouse\") {\n\t\t\t\t\t\t\t\t\t\tev.preventDefault();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonClick={() => onChange(tool.id)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{tool.icon ?? <span style={labelTextStyle}>{tool.label}</span>}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{density === \"comfortable\" && tool.icon ? (\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: \"56px\",\n\t\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{tool.label}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<span className=\"vector-toolbar-tip\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{tooltipText}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{showOverflowMenu && orientation === \"horizontal\" ? (\n\t\t\t\t\t<span\n\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\tclassName=\"vector-toolbar-spacer\"\n\t\t\t\t\t\tstyle={overflowSpacerStyle}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t{showOverflowMenu ? (\n\t\t\t\t\t<ToolbarOverflowMenu\n\t\t\t\t\t\ttools={overflowTools}\n\t\t\t\t\t\tselectedId={value}\n\t\t\t\t\t\tonSelect={onChange}\n\t\t\t\t\t\tdensity={density}\n\t\t\t\t\t\tbuttonClassName={buttonClassName}\n\t\t\t\t\t\tactiveButtonClassName={activeButtonClassName}\n\t\t\t\t\t\trenderToolButton={renderToolButton}\n\t\t\t\t\t\tmenuAriaLabel={overflowMenuAriaLabel}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\n\nexport type Camera2DOptions = {\n\t/** Minimum zoom scale (world units per CSS pixel). */\n\tminZoom?: number;\n\t/** Maximum zoom scale. */\n\tmaxZoom?: number;\n};\n\n/**\n * 2D camera: pan (`x`, `y`) in **screen space** (CSS pixels) and uniform zoom `zoom`.\n *\n * Screen mapping: `screen = world * zoom + cameraOffset`\n * (world origin maps to `(x, y)` on screen).\n */\nexport class Camera2D {\n\tx = 0;\n\ty = 0;\n\t/** Scale: world units per CSS pixel (larger = more zoomed in). */\n\tzoom = 1;\n\n\treadonly minZoom: number;\n\treadonly maxZoom: number;\n\n\tconstructor(options: Camera2DOptions = {}) {\n\t\tthis.minZoom = options.minZoom ?? 0.05;\n\t\tthis.maxZoom = options.maxZoom ?? 32;\n\t}\n\n\t/**\n\t * Converts a point from world coordinates to CSS pixel coordinates relative to the viewport top-left.\n\t */\n\tworldToScreen(\n\t\tworldX: number,\n\t\tworldY: number,\n\t): { screenX: number; screenY: number } {\n\t\treturn {\n\t\t\tscreenX: worldX * this.zoom + this.x,\n\t\t\tscreenY: worldY * this.zoom + this.y,\n\t\t};\n\t}\n\n\t/**\n\t * Converts a point from CSS pixel coordinates (viewport-relative) to world coordinates.\n\t */\n\tscreenToWorld(\n\t\tscreenX: number,\n\t\tscreenY: number,\n\t): { worldX: number; worldY: number } {\n\t\tconst z = this.zoom;\n\t\tif (z === 0) {\n\t\t\treturn { worldX: 0, worldY: 0 };\n\t\t}\n\t\treturn {\n\t\t\tworldX: (screenX - this.x) / z,\n\t\t\tworldY: (screenY - this.y) / z,\n\t\t};\n\t}\n\n\t/**\n\t * Sets zoom, clamped to `[minZoom, maxZoom]`, optionally anchoring a screen point so it stays under the cursor.\n\t */\n\tsetZoom(nextZoom: number, anchorScreen?: { x: number; y: number }): void {\n\t\tconst clamped = Math.min(this.maxZoom, Math.max(this.minZoom, nextZoom));\n\t\tif (!anchorScreen) {\n\t\t\tthis.zoom = clamped;\n\t\t\treturn;\n\t\t}\n\t\t// World point under the anchor before changing zoom (using current pan + zoom).\n\t\tconst anchorWorld = this.screenToWorld(anchorScreen.x, anchorScreen.y);\n\t\tthis.zoom = clamped;\n\t\t// screen = world * zoom + offset → offset = screen - world * zoom\n\t\tthis.x = anchorScreen.x - anchorWorld.worldX * this.zoom;\n\t\tthis.y = anchorScreen.y - anchorWorld.worldY * this.zoom;\n\t}\n\n\t/**\n\t * Returns the world-space rectangle visible in a viewport of `viewportWidth` x `viewportHeight` CSS pixels.\n\t */\n\tgetVisibleWorldRect(viewportWidth: number, viewportHeight: number): Rect {\n\t\tconst topLeft = this.screenToWorld(0, 0);\n\t\tconst bottomRight = this.screenToWorld(viewportWidth, viewportHeight);\n\t\treturn normalizeRect({\n\t\t\tx: topLeft.worldX,\n\t\t\ty: topLeft.worldY,\n\t\t\twidth: bottomRight.worldX - topLeft.worldX,\n\t\t\theight: bottomRight.worldY - topLeft.worldY,\n\t\t});\n\t}\n}\n","import type {\n\tIndexedDbImageStore,\n\tStoredImageResult,\n} from \"./indexed-db-image-store\";\n\ntype PdfJsLib = typeof import(\"pdfjs-dist\");\n\nlet pdfjsPromise: Promise<PdfJsLib> | null = null;\n\nfunction getPdfJs(): Promise<PdfJsLib> {\n\tif (!pdfjsPromise) {\n\t\tpdfjsPromise = import(\"pdfjs-dist\").then((mod) => {\n\t\t\tconst workerSrc = new URL(\n\t\t\t\t\"pdfjs-dist/build/pdf.worker.min.mjs\",\n\t\t\t\timport.meta.url,\n\t\t\t).toString();\n\t\t\tmod.GlobalWorkerOptions.workerSrc = workerSrc;\n\t\t\treturn mod;\n\t\t});\n\t}\n\treturn pdfjsPromise;\n}\n\nasync function renderPageToCanvas(\n\tpage: import(\"pdfjs-dist\").PDFPageProxy,\n\tscale: number,\n): Promise<{ canvas: HTMLCanvasElement; width: number; height: number }> {\n\tconst raw = page.getViewport({ scale: 1 });\n\tconst adjustedScale = Math.round(raw.width * scale) / raw.width;\n\tconst viewport = page.getViewport({ scale: adjustedScale });\n\tconst w = Math.round(viewport.width);\n\tconst h = Math.round(viewport.height);\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = w;\n\tcanvas.height = h;\n\tconst ctx = canvas.getContext(\"2d\");\n\tif (!ctx) throw new Error(\"Canvas 2D context unavailable\");\n\tctx.imageSmoothingEnabled = true;\n\tctx.imageSmoothingQuality = \"high\";\n\tawait page.render({ canvas, viewport }).promise;\n\treturn { canvas, width: w, height: h };\n}\n\nfunction canvasToBlob(\n\tcanvas: HTMLCanvasElement,\n\tmime: string,\n\tquality?: number,\n): Promise<Blob> {\n\treturn new Promise((resolve, reject) => {\n\t\tcanvas.toBlob(\n\t\t\t(blob) => {\n\t\t\t\tif (!blob) {\n\t\t\t\t\treject(new Error(\"Could not encode blob\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolve(blob);\n\t\t\t},\n\t\t\tmime,\n\t\t\tquality,\n\t\t);\n\t});\n}\n\ntype PdfPageResult = StoredImageResult & { pageNumber: number };\n\n/**\n * Renders each page of a PDF to a bitmap blob, stores original + thumbnail in IndexedDB,\n * and returns the results for creating `VectorSceneItem` entries.\n *\n * Pages are rendered at 1.5× screen DPI by default for crisp zoom.\n */\nexport async function loadPdfToStore(\n\tfile: File,\n\tstore: IndexedDbImageStore,\n\toptions?: { scale?: number },\n): Promise<PdfPageResult[]> {\n\tconst scale = options?.scale ?? 1.5;\n\tconst pdfjs = await getPdfJs();\n\tconst arrayBuffer = await file.arrayBuffer();\n\tconst pdf = await pdfjs.getDocument({ data: arrayBuffer }).promise;\n\tconst results: PdfPageResult[] = [];\n\n\tfor (let i = 1; i <= pdf.numPages; i++) {\n\t\tconst page = await pdf.getPage(i);\n\t\tconst { canvas, width, height } = await renderPageToCanvas(page, scale);\n\t\tconst mime = \"image/png\";\n\t\tconst pageBlob = await canvasToBlob(canvas, mime);\n\t\tconst blobId = await store.storeOriginal(pageBlob);\n\n\t\tconst thumbScale = Math.min(1, 256 / Math.max(width, height));\n\t\tconst tw = Math.max(1, Math.round(width * thumbScale));\n\t\tconst th = Math.max(1, Math.round(height * thumbScale));\n\t\tconst thumbCanvas = document.createElement(\"canvas\");\n\t\tthumbCanvas.width = tw;\n\t\tthumbCanvas.height = th;\n\t\tconst tCtx = thumbCanvas.getContext(\"2d\");\n\t\tif (tCtx) {\n\t\t\ttCtx.imageSmoothingEnabled = true;\n\t\t\ttCtx.imageSmoothingQuality = \"high\";\n\t\t\ttCtx.drawImage(canvas, 0, 0, tw, th);\n\t\t}\n\t\tconst thumbBlob = await canvasToBlob(thumbCanvas, mime);\n\t\tconst thumbnailBlobId = await store.storeThumbnail(thumbBlob);\n\n\t\tresults.push({ blobId, thumbnailBlobId, width, height, pageNumber: i });\n\t}\n\n\treturn results;\n}\n","import type { Camera2D } from \"../camera/camera\";\n\nconst DRAWING_LIKE_TOOLS = new Set([\n\t\"draw\",\n\t\"marker\",\n\t\"annotate\",\n\t\"pen\",\n\t\"highlight\",\n\t\"rect\",\n\t\"ellipse\",\n\t\"line\",\n\t\"arrow\",\n\t\"text\",\n\t\"image\",\n]);\n\nexport type ApplePencilNavOptions = {\n\telement: HTMLElement;\n\tcamera: Camera2D;\n\t/** Current tool id from your app (e.g. `\"hand\"` vs `\"draw\"`). */\n\tgetCurrentToolId: () => string;\n\tonUpdate: () => void;\n\ttouchPanSensitivity?: number;\n};\n\n/**\n * After a **stylus** (`pointerType === \"pen\"`) has been used, finger touches on the canvas\n * pan/pinch the camera instead of passing through to drawing tools — similar to iPad behavior\n * in many design apps. No-op until the first pen contact.\n *\n * Compose with {@link attachViewportInput} by calling this **after** it so capture handlers run first,\n * or use only one of them depending on product needs.\n */\nexport function attachApplePencilNavigation(\n\toptions: ApplePencilNavOptions,\n): () => void {\n\tconst {\n\t\telement,\n\t\tcamera,\n\t\tgetCurrentToolId,\n\t\tonUpdate,\n\t\ttouchPanSensitivity = 1.25,\n\t} = options;\n\n\tlet penDetected = false;\n\tconst activePenPointerIds = new Set<number>();\n\tconst blockedTouchPointerIds = new Set<number>();\n\tconst pointers = new Map<number, { x: number; y: number }>();\n\tlet mode: \"idle\" | \"pan\" | \"pinch\" = \"idle\";\n\tlet pinchStartDist = 0;\n\tlet pinchStartZoom = 1;\n\tlet panLast: { x: number; y: number } | null = null;\n\n\tconst shouldIntercept = (e: PointerEvent): boolean => {\n\t\tif (e.pointerType !== \"touch\") return false;\n\t\tconst tool = getCurrentToolId();\n\t\tif (tool === \"hand\") return true;\n\t\treturn penDetected && DRAWING_LIKE_TOOLS.has(tool);\n\t};\n\n\tconst dist = (a: { x: number; y: number }, b: { x: number; y: number }) =>\n\t\tMath.hypot(b.x - a.x, b.y - a.y);\n\n\tconst mid = (a: { x: number; y: number }, b: { x: number; y: number }) => ({\n\t\tx: (a.x + b.x) / 2,\n\t\ty: (a.y + b.y) / 2,\n\t});\n\n\tconst onPointerDown = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") {\n\t\t\tpenDetected = true;\n\t\t\tactivePenPointerIds.add(e.pointerId);\n\t\t\tpointers.clear();\n\t\t\tmode = \"idle\";\n\t\t\tpanLast = null;\n\t\t\treturn;\n\t\t}\n\t\tif (e.pointerType === \"touch\" && activePenPointerIds.size > 0) {\n\t\t\tblockedTouchPointerIds.add(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\t\tif (!shouldIntercept(e)) return;\n\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\t\tif (pointers.size === 1) {\n\t\t\tmode = \"pan\";\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t} else if (pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tmode = \"pinch\";\n\t\t\tpinchStartDist = dist(a, b);\n\t\t\tpinchStartZoom = camera.zoom;\n\t\t\tpanLast = mid(a, b);\n\t\t}\n\t\te.preventDefault();\n\t\te.stopImmediatePropagation();\n\t};\n\n\tconst onPointerMove = (e: PointerEvent) => {\n\t\tif (blockedTouchPointerIds.has(e.pointerId)) {\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"idle\" || !pointers.has(e.pointerId)) return;\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\n\t\tif (mode === \"pan\" && pointers.size === 1 && panLast) {\n\t\t\tconst dx = e.clientX - panLast.x;\n\t\t\tconst dy = e.clientY - panLast.y;\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\tcamera.x += dx * touchPanSensitivity;\n\t\t\tcamera.y += dy * touchPanSensitivity;\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\n\t\tif (mode === \"pinch\" && pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tconst d = dist(a, b);\n\t\t\tconst m = mid(a, b);\n\t\t\tconst scale = d / Math.max(pinchStartDist, 1e-6);\n\t\t\tconst nextZoom = Math.min(\n\t\t\t\tcamera.maxZoom,\n\t\t\t\tMath.max(camera.minZoom, pinchStartZoom * scale),\n\t\t\t);\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tcamera.setZoom(nextZoom, {\n\t\t\t\tx: m.x - rect.left,\n\t\t\t\ty: m.y - rect.top,\n\t\t\t});\n\t\t\tif (panLast) {\n\t\t\t\tcamera.x += m.x - panLast.x;\n\t\t\t\tcamera.y += m.y - panLast.y;\n\t\t\t\tpanLast = m;\n\t\t\t}\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t};\n\n\tconst onPointerUp = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") {\n\t\t\tactivePenPointerIds.delete(e.pointerId);\n\t\t\treturn;\n\t\t}\n\t\tif (blockedTouchPointerIds.has(e.pointerId)) {\n\t\t\tblockedTouchPointerIds.delete(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn;\n\t\t}\n\t\tif (!pointers.has(e.pointerId)) return;\n\t\tpointers.delete(e.pointerId);\n\t\tif (pointers.size === 0) {\n\t\t\tmode = \"idle\";\n\t\t\tpanLast = null;\n\t\t} else if (pointers.size === 1 && mode === \"pinch\") {\n\t\t\tmode = \"pan\";\n\t\t\tconst r = Array.from(pointers.values())[0];\n\t\t\tpanLast = r ?? null;\n\t\t}\n\t\te.preventDefault();\n\t\te.stopImmediatePropagation();\n\t};\n\n\telement.addEventListener(\"pointerdown\", onPointerDown, { capture: true });\n\telement.addEventListener(\"pointermove\", onPointerMove, { capture: true });\n\telement.addEventListener(\"pointerup\", onPointerUp, { capture: true });\n\telement.addEventListener(\"pointercancel\", onPointerUp, { capture: true });\n\n\treturn () => {\n\t\telement.removeEventListener(\"pointerdown\", onPointerDown, { capture: true });\n\t\telement.removeEventListener(\"pointermove\", onPointerMove, { capture: true });\n\t\telement.removeEventListener(\"pointerup\", onPointerUp, { capture: true });\n\t\telement.removeEventListener(\"pointercancel\", onPointerUp, { capture: true });\n\t};\n}\n","import type { Camera2D } from \"../camera/camera\";\n\nexport type ViewportInputOptions = {\n\telement: HTMLElement;\n\tcamera: Camera2D;\n\t/** Called after any camera mutation so the renderer can redraw. */\n\tonUpdate: () => void;\n\t/**\n\t * Element to attach the wheel listener to. Defaults to `element`.\n\t * Useful when an overlay with `pointer-events: auto` sits above `element` and\n\t * would otherwise intercept wheel events before they reach the scene container.\n\t */\n\twheelElement?: HTMLElement;\n\twheelPanSensitivity?: number;\n\t/** Multiplier applied to wheel delta for zoom (with Ctrl/Meta). */\n\twheelZoomSensitivity?: number;\n\ttouchPanSensitivity?: number;\n\t/**\n\t * When `true`, pointer events with `pointerType === \"touch\"` are ignored so another layer\n\t * (e.g. `attachApplePencilNavigation`) can handle them without double panning.\n\t */\n\ttouchHandledElsewhere?: boolean;\n\t/**\n\t * When `false`, one-finger / primary-button drag does **not** pan the camera (e.g. shape tools).\n\t * Wheel zoom and two-finger pinch still work.\n\t */\n\tallowPrimaryPointerPan?: () => boolean;\n};\n\ntype PointerRecord = { x: number; y: number };\n\nfunction distanceBetween(a: PointerRecord, b: PointerRecord): number {\n\tconst dx = b.x - a.x;\n\tconst dy = b.y - a.y;\n\treturn Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction midpoint(a: PointerRecord, b: PointerRecord): PointerRecord {\n\treturn { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n}\n\n/** Normalize wheel delta so zoom speed is similar across mice (lines) and trackpads (pixels). */\nfunction wheelDeltaYPixels(e: WheelEvent): number {\n\tswitch (e.deltaMode) {\n\t\tcase WheelEvent.DOM_DELTA_LINE:\n\t\t\treturn e.deltaY * 16;\n\t\tcase WheelEvent.DOM_DELTA_PAGE:\n\t\t\treturn e.deltaY * 400;\n\t\tdefault:\n\t\t\treturn e.deltaY;\n\t}\n}\n\n/**\n * Attaches wheel (pan / Ctrl+zoom), pointer drag pan, and two-finger pinch zoom.\n * Uses `touch-action: none` on `element` — set that in CSS on the same node.\n *\n * @returns A dispose function that removes all listeners.\n */\nexport function attachViewportInput(options: ViewportInputOptions): () => void {\n\tconst {\n\t\telement,\n\t\tcamera,\n\t\tonUpdate,\n\t\twheelElement,\n\t\twheelPanSensitivity = 0.5,\n\t\twheelZoomSensitivity = 0.0015,\n\t\ttouchPanSensitivity = 1.25,\n\t\ttouchHandledElsewhere = false,\n\t\tallowPrimaryPointerPan = () => true,\n\t} = options;\n\n\tconst wheelTarget = wheelElement ?? element;\n\n\tconst pointers = new Map<number, PointerRecord>();\n\tlet mode: \"idle\" | \"pan\" | \"pinch\" | \"mousePan\" = \"idle\";\n\tlet pinchStartDist = 0;\n\tlet pinchStartZoom = 1;\n\tlet panLast: PointerRecord | null = null;\n\tlet mousePanButton: number | null = null;\n\n\tconst onWheel = (e: WheelEvent) => {\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\te.preventDefault();\n\t\t\tconst dy = wheelDeltaYPixels(e);\n\t\t\t// Trackpad generates very small deltas (1-5px) vs mouse (100-200px).\n\t\t\t// Normalize so both feel responsive: amplify small deltas (trackpad).\n\t\t\tconst normDy = dy < 20 ? dy * 12 : dy;\n\t\t\tconst factor = Math.exp(-normDy * wheelZoomSensitivity);\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tcamera.setZoom(camera.zoom * factor, {\n\t\t\t\tx: e.clientX - rect.left,\n\t\t\t\ty: e.clientY - rect.top,\n\t\t\t});\n\t\t\tonUpdate();\n\t\t\treturn;\n\t\t}\n\t\te.preventDefault();\n\t\tcamera.x -= (e.deltaX * wheelPanSensitivity) / camera.zoom;\n\t\tcamera.y -= (e.deltaY * wheelPanSensitivity) / camera.zoom;\n\t\tonUpdate();\n\t};\n\n\tconst onPointerDown = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") return;\n\t\tif (touchHandledElsewhere && e.pointerType === \"touch\") {\n\t\t\treturn;\n\t\t}\n\t\tconst panOk = allowPrimaryPointerPan();\n\t\tif (e.pointerType === \"mouse\" && e.button === 0) {\n\t\t\tif (!panOk) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmousePanButton = 0;\n\t\t\tmode = \"mousePan\";\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\telement.setPointerCapture(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t\tif (e.pointerType === \"mouse\" && e.button === 1) {\n\t\t\tmousePanButton = 1;\n\t\t\tmode = \"mousePan\";\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\telement.setPointerCapture(e.pointerId);\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\n\t\tif (pointers.size === 1 && e.pointerType === \"touch\") {\n\t\t\tif (panOk) {\n\t\t\t\tmode = \"pan\";\n\t\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t} else if (pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tmode = \"pinch\";\n\t\t\tpinchStartDist = distanceBetween(a, b);\n\t\t\tpinchStartZoom = camera.zoom;\n\t\t\tpanLast = midpoint(a, b);\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\tconst onPointerMove = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") return;\n\t\tif (touchHandledElsewhere && e.pointerType === \"touch\") {\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"mousePan\" && panLast && mousePanButton !== null) {\n\t\t\tconst dx = e.clientX - panLast.x;\n\t\t\tconst dy = e.clientY - panLast.y;\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\tcamera.x += dx;\n\t\t\tcamera.y += dy;\n\t\t\tonUpdate();\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pointers.has(e.pointerId)) return;\n\t\tpointers.set(e.pointerId, { x: e.clientX, y: e.clientY });\n\n\t\tif (mode === \"pan\" && pointers.size === 1 && panLast) {\n\t\t\tconst dx = e.clientX - panLast.x;\n\t\t\tconst dy = e.clientY - panLast.y;\n\t\t\tpanLast = { x: e.clientX, y: e.clientY };\n\t\t\tcamera.x += dx * touchPanSensitivity;\n\t\t\tcamera.y += dy * touchPanSensitivity;\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (mode === \"pinch\" && pointers.size === 2) {\n\t\t\tconst vals = Array.from(pointers.values());\n\t\t\tconst a = vals[0];\n\t\t\tconst b = vals[1];\n\t\t\tif (a === undefined || b === undefined) return;\n\t\t\tconst dist = distanceBetween(a, b);\n\t\t\tconst mid = midpoint(a, b);\n\t\t\tconst scale = dist / Math.max(pinchStartDist, 1e-6);\n\t\t\tconst nextZoom = Math.min(\n\t\t\t\tcamera.maxZoom,\n\t\t\t\tMath.max(camera.minZoom, pinchStartZoom * scale),\n\t\t\t);\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tcamera.setZoom(nextZoom, {\n\t\t\t\tx: mid.x - rect.left,\n\t\t\t\ty: mid.y - rect.top,\n\t\t\t});\n\t\t\tif (panLast) {\n\t\t\t\tconst dx = mid.x - panLast.x;\n\t\t\t\tconst dy = mid.y - panLast.y;\n\t\t\t\tcamera.x += dx;\n\t\t\t\tcamera.y += dy;\n\t\t\t\tpanLast = mid;\n\t\t\t}\n\t\t\tonUpdate();\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\tconst onPointerUp = (e: PointerEvent) => {\n\t\tif (e.pointerType === \"pen\") return;\n\t\tif (touchHandledElsewhere && e.pointerType === \"touch\") {\n\t\t\treturn;\n\t\t}\n\t\tif (mode === \"mousePan\") {\n\t\t\tif (e.pointerType === \"mouse\" && e.button === mousePanButton) {\n\t\t\t\tmode = \"idle\";\n\t\t\t\tpanLast = null;\n\t\t\t\tmousePanButton = null;\n\t\t\t\ttry {\n\t\t\t\t\telement.releasePointerCapture(e.pointerId);\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore */\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tpointers.delete(e.pointerId);\n\t\tif (pointers.size === 0) {\n\t\t\tmode = \"idle\";\n\t\t\tpanLast = null;\n\t\t} else if (pointers.size === 1 && mode === \"pinch\") {\n\t\t\tmode = \"pan\";\n\t\t\tconst remaining = Array.from(pointers.values())[0];\n\t\t\tpanLast = remaining ?? null;\n\t\t}\n\t};\n\n\tconst onPointerCancel = (e: PointerEvent) => {\n\t\tonPointerUp(e);\n\t};\n\n\twheelTarget.addEventListener(\"wheel\", onWheel, { passive: false });\n\telement.addEventListener(\"pointerdown\", onPointerDown);\n\telement.addEventListener(\"pointermove\", onPointerMove);\n\telement.addEventListener(\"pointerup\", onPointerUp);\n\telement.addEventListener(\"pointercancel\", onPointerCancel);\n\n\treturn () => {\n\t\twheelTarget.removeEventListener(\"wheel\", onWheel);\n\t\telement.removeEventListener(\"pointerdown\", onPointerDown);\n\t\telement.removeEventListener(\"pointermove\", onPointerMove);\n\t\telement.removeEventListener(\"pointerup\", onPointerUp);\n\t\telement.removeEventListener(\"pointercancel\", onPointerCancel);\n\t};\n}\n","import {\n\tgetItemRotationRad,\n\titemLocalToWorld,\n\tworldToItemLocal,\n} from \"../math/item-transform\";\nimport { normalizeRect } from \"../math/rect\";\nimport { lineEndpointsToLocal, rebuildItemSvg } from \"../scene/shape-builders\";\nimport type { ArrowEndpointBinding, VectorSceneItem } from \"../scene/types\";\nimport { rectFromCorners } from \"./resize-handles\";\n\n/** Default screen px — converted to world with `/ camera.zoom` when snapping. */\nexport const ARROW_BIND_SNAP_PX = 16;\n\nfunction closestPointOnSegment(\n\tpx: number,\n\tpy: number,\n\tax: number,\n\tay: number,\n\tbx: number,\n\tby: number,\n): { x: number; y: number } {\n\tconst abx = bx - ax;\n\tconst aby = by - ay;\n\tconst apx = px - ax;\n\tconst apy = py - ay;\n\tconst abLenSq = abx * abx + aby * aby;\n\tif (abLenSq < 1e-12) {\n\t\treturn { x: ax, y: ay };\n\t}\n\tlet t = (apx * abx + apy * aby) / abLenSq;\n\tt = Math.max(0, Math.min(1, t));\n\treturn { x: ax + t * abx, y: ay + t * aby };\n}\n\n/** Closest point on the boundary of axis-aligned rect [0,w]×[0,h] to (px,py). */\nfunction closestPointOnRectBoundaryLocal(\n\tpx: number,\n\tpy: number,\n\tw: number,\n\th: number,\n): { x: number; y: number } {\n\tconst edges: [number, number, number, number][] = [\n\t\t[0, 0, w, 0],\n\t\t[w, 0, w, h],\n\t\t[w, h, 0, h],\n\t\t[0, h, 0, 0],\n\t];\n\tlet best = { x: 0, y: 0, d: Infinity };\n\tfor (const [ax, ay, bx, by] of edges) {\n\t\tconst p = closestPointOnSegment(px, py, ax, ay, bx, by);\n\t\tconst d = Math.hypot(px - p.x, py - p.y);\n\t\tif (d < best.d) {\n\t\t\tbest = { x: p.x, y: p.y, d };\n\t\t}\n\t}\n\treturn { x: best.x, y: best.y };\n}\n\nfunction closestPointOnEllipseBoundaryLocal(\n\tpx: number,\n\tpy: number,\n\tw: number,\n\th: number,\n): { x: number; y: number } {\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst rx = w / 2;\n\tconst ry = h / 2;\n\tif (rx < 1e-9 || ry < 1e-9) {\n\t\treturn { x: cx, y: cy };\n\t}\n\tconst dx = px - cx;\n\tconst dy = py - cy;\n\tif (dx === 0 && dy === 0) {\n\t\treturn { x: cx + rx, y: cy };\n\t}\n\tconst t = Math.atan2(dy / ry, dx / rx);\n\treturn {\n\t\tx: cx + rx * Math.cos(t),\n\t\ty: cy + ry * Math.sin(t),\n\t};\n}\n\nexport function isArrowBindTarget(item: VectorSceneItem): boolean {\n\tif (item.locked) return false;\n\tconst k = item.toolKind;\n\tif (!k) return false;\n\treturn (\n\t\tk === \"rect\" ||\n\t\tk === \"ellipse\" ||\n\t\tk === \"text\" ||\n\t\tk === \"image\" ||\n\t\tk === \"custom\"\n\t);\n}\n\nfunction closestPointOnShapeBoundaryLocal(\n\titem: VectorSceneItem,\n\tlx: number,\n\tly: number,\n\tw: number,\n\th: number,\n): { x: number; y: number } {\n\tif (item.toolKind === \"ellipse\") {\n\t\treturn closestPointOnEllipseBoundaryLocal(lx, ly, w, h);\n\t}\n\treturn closestPointOnRectBoundaryLocal(lx, ly, w, h);\n}\n\nfunction anchorNormalizedToWorld(\n\ttarget: VectorSceneItem,\n\tanchor: { x: number; y: number },\n): { x: number; y: number } {\n\tconst b = normalizeRect(target.bounds);\n\tconst w = b.width;\n\tconst h = b.height;\n\tconst lx = anchor.x * w;\n\tconst ly = anchor.y * h;\n\tconst rot = getItemRotationRad(target);\n\treturn itemLocalToWorld(lx, ly, target.x, target.y, w, h, rot);\n}\n\n/**\n * If `worldX/worldY` is within `maxDistWorld` of a bindable shape’s boundary,\n * returns the snapped point on that boundary plus binding metadata.\n */\nexport function snapArrowEndpointToShape(\n\tworldX: number,\n\tworldY: number,\n\titems: readonly VectorSceneItem[],\n\texcludeIds: ReadonlySet<string>,\n\tmaxDistWorld: number,\n): { world: { x: number; y: number }; binding: ArrowEndpointBinding } | null {\n\tlet best: {\n\t\tworld: { x: number; y: number };\n\t\tbinding: ArrowEndpointBinding;\n\t\td: number;\n\t} | null = null;\n\n\tfor (const item of items) {\n\t\tif (excludeIds.has(item.id)) continue;\n\t\tif (!isArrowBindTarget(item)) continue;\n\n\t\tconst b = normalizeRect(item.bounds);\n\t\tconst w = b.width;\n\t\tconst h = b.height;\n\t\tconst rot = getItemRotationRad(item);\n\t\tconst pl = worldToItemLocal(worldX, worldY, item.x, item.y, w, h, rot);\n\n\t\tconst localClosest = closestPointOnShapeBoundaryLocal(item, pl.x, pl.y, w, h);\n\t\tconst worldClosest = itemLocalToWorld(\n\t\t\tlocalClosest.x,\n\t\t\tlocalClosest.y,\n\t\t\titem.x,\n\t\t\titem.y,\n\t\t\tw,\n\t\t\th,\n\t\t\trot,\n\t\t);\n\t\tconst d = Math.hypot(worldX - worldClosest.x, worldY - worldClosest.y);\n\t\tif (d > maxDistWorld) continue;\n\t\tif (!best || d < best.d) {\n\t\t\tbest = {\n\t\t\t\td,\n\t\t\t\tworld: worldClosest,\n\t\t\t\tbinding: {\n\t\t\t\t\ttargetId: item.id,\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\tx: localClosest.x / Math.max(1e-9, w),\n\t\t\t\t\t\ty: localClosest.y / Math.max(1e-9, h),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\treturn best ? { world: best.world, binding: best.binding } : null;\n}\n\nfunction resolveOneArrowItem(\n\titem: VectorSceneItem,\n\tmap: Map<string, VectorSceneItem>,\n): VectorSceneItem {\n\tconst bind = item.arrowBind;\n\tif (!bind || item.toolKind !== \"arrow\") return item;\n\tconst ln = item.line;\n\tif (!ln) return item;\n\n\tconst b0 = normalizeRect(item.bounds);\n\tconst rot = getItemRotationRad(item);\n\tconst w0 = b0.width;\n\tconst h0 = b0.height;\n\tconst startFallback = itemLocalToWorld(ln.x1, ln.y1, item.x, item.y, w0, h0, rot);\n\tconst endFallback = itemLocalToWorld(ln.x2, ln.y2, item.x, item.y, w0, h0, rot);\n\n\tconst startW = bind.start\n\t\t? (() => {\n\t\t\t\tconst t = map.get(bind.start.targetId);\n\t\t\t\treturn t ? anchorNormalizedToWorld(t, bind.start.anchor) : startFallback;\n\t\t\t})()\n\t\t: startFallback;\n\tconst endW = bind.end\n\t\t? (() => {\n\t\t\t\tconst t = map.get(bind.end.targetId);\n\t\t\t\treturn t ? anchorNormalizedToWorld(t, bind.end.anchor) : endFallback;\n\t\t\t})()\n\t\t: endFallback;\n\n\tconst raw = rectFromCorners(startW, endW);\n\tconst br = normalizeRect(raw);\n\tconst newLine = lineEndpointsToLocal(br, startW, endW);\n\tconst next: VectorSceneItem = {\n\t\t...item,\n\t\tx: br.x,\n\t\ty: br.y,\n\t\tbounds: br,\n\t\tline: newLine,\n\t\trotation: 0,\n\t};\n\treturn rebuildItemSvg(next);\n}\n\n/**\n * Recomputes every arrow item that has {@link VectorSceneItem.arrowBind} so endpoints\n * follow bound shapes (move/resize).\n */\nexport function resolveArrowBindingsInScene(\n\titems: readonly VectorSceneItem[],\n): readonly VectorSceneItem[] {\n\tlet hasBoundArrow = false;\n\tfor (const item of items) {\n\t\tif (item.toolKind === \"arrow\" && item.arrowBind) {\n\t\t\thasBoundArrow = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!hasBoundArrow) {\n\t\treturn items;\n\t}\n\n\tconst map = new Map(items.map((i) => [i.id, i]));\n\treturn items.map((item) => {\n\t\tif (item.toolKind !== \"arrow\" || !item.arrowBind) return item;\n\t\treturn resolveOneArrowItem(item, map);\n\t});\n}\n\n/**\n * Converts a bound arrow to a plain arrow (drops bindings) using the current resolved\n * geometry so move/resize gestures don’t fight binding resolution.\n */\nexport function bakeArrowItemToAbsolute(\n\titem: VectorSceneItem,\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem {\n\tif (item.toolKind !== \"arrow\" || !item.arrowBind) return item;\n\tconst map = new Map(items.map((i) => [i.id, i]));\n\tconst resolved = resolveOneArrowItem(item, map);\n\tconst { arrowBind: _a, ...rest } = resolved;\n\treturn { ...rest };\n}\n","import { itemLocalToWorld, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\n\nexport type ResizeHandleId = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\n\nconst HANDLE_IDS: ResizeHandleId[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\n\nexport function getHandleWorldPosition(\n\tbounds: Rect,\n\tid: ResizeHandleId,\n): { x: number; y: number } {\n\tconst r = normalizeRect(bounds);\n\tconst cx = r.x + r.width / 2;\n\tconst cy = r.y + r.height / 2;\n\tswitch (id) {\n\t\tcase \"nw\":\n\t\t\treturn { x: r.x, y: r.y };\n\t\tcase \"n\":\n\t\t\treturn { x: cx, y: r.y };\n\t\tcase \"ne\":\n\t\t\treturn { x: r.x + r.width, y: r.y };\n\t\tcase \"e\":\n\t\t\treturn { x: r.x + r.width, y: cy };\n\t\tcase \"se\":\n\t\t\treturn { x: r.x + r.width, y: r.y + r.height };\n\t\tcase \"s\":\n\t\t\treturn { x: cx, y: r.y + r.height };\n\t\tcase \"sw\":\n\t\t\treturn { x: r.x, y: r.y + r.height };\n\t\tcase \"w\":\n\t\t\treturn { x: r.x, y: cy };\n\t}\n}\n\n/**\n * Hit-tests resize handles in **local** item space (handles rotation).\n */\nexport function hitTestResizeHandle(\n\tbounds: Rect,\n\tworldX: number,\n\tworldY: number,\n\tradiusWorld: number,\n\trotationRad: number = 0,\n): ResizeHandleId | null {\n\tconst r = normalizeRect(bounds);\n\tconst pl = worldToItemLocal(\n\t\tworldX,\n\t\tworldY,\n\t\tr.x,\n\t\tr.y,\n\t\tr.width,\n\t\tr.height,\n\t\trotationRad,\n\t);\n\tconst localBounds = { x: 0, y: 0, width: r.width, height: r.height };\n\tlet best: ResizeHandleId | null = null;\n\tlet bestD = radiusWorld;\n\tfor (const id of HANDLE_IDS) {\n\t\tconst p = getHandleWorldPosition(localBounds, id);\n\t\tconst d = Math.hypot(pl.x - p.x, pl.y - p.y);\n\t\tif (d <= bestD) {\n\t\t\tbestD = d;\n\t\t\tbest = id;\n\t\t}\n\t}\n\treturn best;\n}\n\n/** World position of a resize handle when the item is rotated around its center. */\nexport function getHandleWorldPositionRotated(\n\tbounds: Rect,\n\thandle: ResizeHandleId,\n\trotationRad: number,\n): { x: number; y: number } {\n\tconst r = normalizeRect(bounds);\n\tconst p = getHandleWorldPosition(\n\t\t{ x: 0, y: 0, width: r.width, height: r.height },\n\t\thandle,\n\t);\n\treturn itemLocalToWorld(p.x, p.y, r.x, r.y, r.width, r.height, rotationRad);\n}\n\n/** World position of the rotation handle (above the top edge of the bounds). */\nexport function getRotationHandleWorldPosition(\n\tbounds: Rect,\n\trotationRad: number,\n\thandleOffsetWorld: number,\n): { x: number; y: number } {\n\tconst r = normalizeRect(bounds);\n\treturn itemLocalToWorld(\n\t\tr.width / 2,\n\t\t-handleOffsetWorld,\n\t\tr.x,\n\t\tr.y,\n\t\tr.width,\n\t\tr.height,\n\t\trotationRad,\n\t);\n}\n\nexport function hitTestRotateHandle(\n\tbounds: Rect,\n\trotationRad: number,\n\tworldX: number,\n\tworldY: number,\n\tradiusWorld: number,\n\thandleOffsetWorld: number,\n): boolean {\n\tconst p = getRotationHandleWorldPosition(bounds, rotationRad, handleOffsetWorld);\n\treturn Math.hypot(worldX - p.x, worldY - p.y) <= radiusWorld;\n}\n\nexport function rectFromCorners(\n\ta: { x: number; y: number },\n\tb: { x: number; y: number },\n): Rect {\n\tconst minX = Math.min(a.x, b.x);\n\tconst maxX = Math.max(a.x, b.x);\n\tconst minY = Math.min(a.y, b.y);\n\tconst maxY = Math.max(a.y, b.y);\n\treturn { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\nfunction clampMinSize(r: Rect, min: number): Rect {\n\tconst n = normalizeRect(r);\n\treturn {\n\t\tx: n.x,\n\t\ty: n.y,\n\t\twidth: Math.max(min, n.width),\n\t\theight: Math.max(min, n.height),\n\t};\n}\n\n/**\n * Computes new axis-aligned bounds when dragging a resize handle to `currentWorld`.\n */\nexport function computeResizeBounds(\n\tbounds: Rect,\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n): Rect {\n\tconst r = normalizeRect(bounds);\n\tconst x0 = r.x;\n\tconst y0 = r.y;\n\tconst x1 = r.x + r.width;\n\tconst y1 = r.y + r.height;\n\tconst minSize = 8;\n\n\tswitch (handle) {\n\t\tcase \"nw\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x1, y: y1 }), minSize);\n\t\tcase \"ne\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x0, y: y1 }), minSize);\n\t\tcase \"se\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x0, y: y0 }), minSize);\n\t\tcase \"sw\":\n\t\t\treturn clampMinSize(rectFromCorners(currentWorld, { x: x1, y: y0 }), minSize);\n\t\tcase \"n\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: x0, y: currentWorld.y }, { x: x1, y: y1 }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tcase \"s\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: x0, y: y0 }, { x: x1, y: currentWorld.y }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tcase \"e\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: x0, y: y0 }, { x: currentWorld.x, y: y1 }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tcase \"w\":\n\t\t\treturn clampMinSize(\n\t\t\t\trectFromCorners({ x: currentWorld.x, y: y0 }, { x: x1, y: y1 }),\n\t\t\t\tminSize,\n\t\t\t);\n\t\tdefault:\n\t\t\treturn r;\n\t}\n}\n\n/**\n * Resize bounds with fixed width/height ratio (`aspect` = width ÷ height), similar to tldraw\n * image resize: corners follow the cursor by adjusting the other dimension to preserve aspect;\n * edges resize from the opposite edge with the box centered on the orthogonal axis.\n */\nexport function computeResizeBoundsFixedAspect(\n\tbounds: Rect,\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n\taspect: number,\n): Rect {\n\tconst r = normalizeRect(bounds);\n\tconst x0 = r.x;\n\tconst y0 = r.y;\n\tconst x1 = r.x + r.width;\n\tconst y1 = r.y + r.height;\n\tconst w = r.width;\n\tconst h = r.height;\n\tconst minSize = 8;\n\tconst a = Math.max(1e-9, aspect);\n\n\tfunction cornerAspectRect(\n\t\tanchor: { x: number; y: number },\n\t\tcursor: { x: number; y: number },\n\t): Rect {\n\t\tconst dx = cursor.x - anchor.x;\n\t\tconst dy = cursor.y - anchor.y;\n\t\tconst aw = Math.abs(dx);\n\t\tconst ah = Math.abs(dy);\n\t\tlet W: number;\n\t\tlet H: number;\n\t\tif (aw < 1e-12 && ah < 1e-12) {\n\t\t\tW = minSize;\n\t\t\tH = minSize / a;\n\t\t} else if (ah < 1e-12) {\n\t\t\tW = Math.max(minSize, aw);\n\t\t\tH = W / a;\n\t\t} else if (aw < 1e-12) {\n\t\t\tH = Math.max(minSize, ah);\n\t\t\tW = H * a;\n\t\t} else if (aw / ah > a) {\n\t\t\tW = aw;\n\t\t\tH = aw / a;\n\t\t} else {\n\t\t\tH = ah;\n\t\t\tW = ah * a;\n\t\t}\n\t\tif (W < minSize || H < minSize) {\n\t\t\tconst scale = Math.max(minSize / W, minSize / H);\n\t\t\tW *= scale;\n\t\t\tH *= scale;\n\t\t}\n\t\tconst sx = Math.sign(dx) || 1;\n\t\tconst sy = Math.sign(dy) || 1;\n\t\treturn rectFromCorners(anchor, {\n\t\t\tx: anchor.x + sx * W,\n\t\t\ty: anchor.y + sy * H,\n\t\t});\n\t}\n\n\tswitch (handle) {\n\t\tcase \"se\":\n\t\t\treturn cornerAspectRect({ x: x0, y: y0 }, currentWorld);\n\t\tcase \"nw\":\n\t\t\treturn cornerAspectRect({ x: x1, y: y1 }, currentWorld);\n\t\tcase \"ne\":\n\t\t\treturn cornerAspectRect({ x: x0, y: y1 }, currentWorld);\n\t\tcase \"sw\":\n\t\t\treturn cornerAspectRect({ x: x1, y: y0 }, currentWorld);\n\t\tcase \"e\": {\n\t\t\tconst rawW = currentWorld.x - x0;\n\t\t\tconst aw = Math.max(minSize, Math.abs(rawW));\n\t\t\tconst H = aw / a;\n\t\t\tconst newY = y0 + h / 2 - H / 2;\n\t\t\tconst sign = Math.sign(rawW) || 1;\n\t\t\treturn normalizeRect({ x: x0, y: newY, width: sign * aw, height: H });\n\t\t}\n\t\tcase \"w\": {\n\t\t\tconst rawW = x1 - currentWorld.x;\n\t\t\tconst aw = Math.max(minSize, Math.abs(rawW));\n\t\t\tconst H = aw / a;\n\t\t\tconst newY = y0 + h / 2 - H / 2;\n\t\t\tconst sign = Math.sign(rawW) || 1;\n\t\t\treturn normalizeRect({\n\t\t\t\tx: x1 - sign * aw,\n\t\t\t\ty: newY,\n\t\t\t\twidth: sign * aw,\n\t\t\t\theight: H,\n\t\t\t});\n\t\t}\n\t\tcase \"n\": {\n\t\t\tconst rawH = y1 - currentWorld.y;\n\t\t\tconst ah = Math.max(minSize, Math.abs(rawH));\n\t\t\tconst W = ah * a;\n\t\t\tconst newX = x0 + w / 2 - W / 2;\n\t\t\tconst sign = Math.sign(rawH) || 1;\n\t\t\treturn normalizeRect({\n\t\t\t\tx: newX,\n\t\t\t\ty: y1 - sign * ah,\n\t\t\t\twidth: W,\n\t\t\t\theight: sign * ah,\n\t\t\t});\n\t\t}\n\t\tcase \"s\": {\n\t\t\tconst rawH = currentWorld.y - y0;\n\t\t\tconst ah = Math.max(minSize, Math.abs(rawH));\n\t\t\tconst W = ah * a;\n\t\t\tconst newX = x0 + w / 2 - W / 2;\n\t\t\tconst sign = Math.sign(rawH) || 1;\n\t\t\treturn normalizeRect({ x: newX, y: y0, width: W, height: sign * ah });\n\t\t}\n\t\tdefault:\n\t\t\treturn r;\n\t}\n}\n","import {\n\tgetItemRotationRad,\n\titemLocalToWorld,\n\tworldToItemLocal,\n} from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\n/**\n * Returns whether a world point lies inside an axis-aligned rectangle.\n */\nexport function pointInWorldRect(px: number, py: number, rect: Rect): boolean {\n\tconst r = normalizeRect(rect);\n\treturn px >= r.x && px <= r.x + r.width && py >= r.y && py <= r.y + r.height;\n}\n\nfunction pointInLocalRect(lx: number, ly: number, w: number, h: number): boolean {\n\treturn lx >= 0 && lx <= w && ly >= 0 && ly <= h;\n}\n\nfunction pointInLocalEllipse(lx: number, ly: number, w: number, h: number): boolean {\n\tconst rx = w / 2;\n\tconst ry = h / 2;\n\tif (rx < 1e-9 || ry < 1e-9) {\n\t\treturn false;\n\t}\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst nx = (lx - cx) / rx;\n\tconst ny = (ly - cy) / ry;\n\treturn nx * nx + ny * ny <= 1;\n}\n\n/**\n * Distance from point `p` to segment `a`–`b` in 2D.\n */\nexport function distancePointToSegment(\n\tpx: number,\n\tpy: number,\n\tax: number,\n\tay: number,\n\tbx: number,\n\tby: number,\n): number {\n\tconst abx = bx - ax;\n\tconst aby = by - ay;\n\tconst apx = px - ax;\n\tconst apy = py - ay;\n\tconst abLenSq = abx * abx + aby * aby;\n\tif (abLenSq < 1e-12) {\n\t\treturn Math.hypot(px - ax, py - ay);\n\t}\n\tlet t = (apx * abx + apy * aby) / abLenSq;\n\tt = Math.max(0, Math.min(1, t));\n\tconst qx = ax + t * abx;\n\tconst qy = ay + t * aby;\n\treturn Math.hypot(px - qx, py - qy);\n}\n\nexport type HitTestWorldPointOptions = {\n\t/** Max distance to a line segment in **world** units (e.g. ~10 / camera.zoom for ~10px on screen). */\n\tlineHitWorld?: number;\n\t/** When true, locked items are ignored as interaction targets. */\n\tignoreLocked?: boolean;\n};\n\nfunction hitTestFilledShape(\n\titem: VectorSceneItem,\n\tworldX: number,\n\tworldY: number,\n): boolean {\n\tconst b = normalizeRect(item.bounds);\n\tconst w = b.width;\n\tconst h = b.height;\n\tconst rot = getItemRotationRad(item);\n\tconst pl = worldToItemLocal(worldX, worldY, item.x, item.y, w, h, rot);\n\n\tif (item.toolKind === \"ellipse\") {\n\t\treturn pointInLocalEllipse(pl.x, pl.y, w, h);\n\t}\n\treturn pointInLocalRect(pl.x, pl.y, w, h);\n}\n\n/**\n * Whether `worldX/worldY` hits this item’s visible geometry (stroke/area).\n */\nexport function itemHitTestWorldPoint(\n\titem: VectorSceneItem,\n\tworldX: number,\n\tworldY: number,\n\toptions?: HitTestWorldPointOptions,\n): boolean {\n\tconst lineHit = options?.lineHitWorld ?? 8;\n\tconst lineHitSq = lineHit * lineHit;\n\n\tconst b = normalizeRect(item.bounds);\n\tconst w = b.width;\n\tconst h = b.height;\n\tconst rot = getItemRotationRad(item);\n\n\tif (item.toolKind === \"line\" || item.toolKind === \"arrow\") {\n\t\tconst ln = item.line;\n\t\tif (ln) {\n\t\t\tconst a = itemLocalToWorld(ln.x1, ln.y1, item.x, item.y, w, h, rot);\n\t\t\tconst p2 = itemLocalToWorld(ln.x2, ln.y2, item.x, item.y, w, h, rot);\n\t\t\tconst d = distancePointToSegment(worldX, worldY, a.x, a.y, p2.x, p2.y);\n\t\t\tif (d * d <= lineHitSq) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (hitTestFilledShape(item, worldX, worldY)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tif (\n\t\titem.toolKind === \"draw\" ||\n\t\titem.toolKind === \"pencil\" ||\n\t\titem.toolKind === \"brush\" ||\n\t\titem.toolKind === \"marker\"\n\t) {\n\t\tconst pts = item.pathPointsLocal;\n\t\tconst halfW = Math.max((item.strokeWidth ?? 2) / 2, lineHit * 0.5);\n\t\tconst tol = Math.max(lineHit, halfW);\n\t\tconst tolSq = tol * tol;\n\t\tif (pts && pts.length >= 2) {\n\t\t\tfor (let j = 0; j < pts.length - 1; j++) {\n\t\t\t\tconst a = pts[j];\n\t\t\t\tconst p2 = pts[j + 1];\n\t\t\t\tif (!a || !p2) continue;\n\t\t\t\tconst aw = itemLocalToWorld(a.x, a.y, item.x, item.y, w, h, rot);\n\t\t\t\tconst bw = itemLocalToWorld(p2.x, p2.y, item.x, item.y, w, h, rot);\n\t\t\t\tconst d = distancePointToSegment(worldX, worldY, aw.x, aw.y, bw.x, bw.y);\n\t\t\t\tif (d * d <= tolSq) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (pts?.length === 1) {\n\t\t\tconst p = pts[0];\n\t\t\tif (p) {\n\t\t\t\tconst cw = itemLocalToWorld(p.x, p.y, item.x, item.y, w, h, rot);\n\t\t\t\tconst dsq = (worldX - cw.x) ** 2 + (worldY - cw.y) ** 2;\n\t\t\t\tif (dsq <= tolSq) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn hitTestFilledShape(item, worldX, worldY);\n\t}\n\treturn hitTestFilledShape(item, worldX, worldY);\n}\n\n/**\n * Hit-tests a scene item in world coordinates (top-most = last in array wins if overlapping).\n */\nexport function hitTestWorldPoint(\n\titems: readonly VectorSceneItem[],\n\tworldX: number,\n\tworldY: number,\n\toptions?: HitTestWorldPointOptions,\n): VectorSceneItem | null {\n\tfor (let i = items.length - 1; i >= 0; i--) {\n\t\tconst item = items[i];\n\t\tif (item === undefined) continue;\n\t\tif (options?.ignoreLocked && item.locked) continue;\n\t\tif (itemHitTestWorldPoint(item, worldX, worldY, options)) {\n\t\t\treturn item;\n\t\t}\n\t}\n\treturn null;\n}\n\n/**\n * Eraser: IDs of every **unlocked** item hit at this point.\n * Locked items are ignored so protected background layers do not block erasing editable shapes above them.\n */\nexport function collectEraserTargetsAtWorldPoint(\n\titems: readonly VectorSceneItem[],\n\tworldX: number,\n\tworldY: number,\n\toptions?: HitTestWorldPointOptions,\n): string[] {\n\tconst topHit = hitTestWorldPoint(items, worldX, worldY, {\n\t\t...options,\n\t\tignoreLocked: true,\n\t});\n\tif (!topHit) return [];\n\n\tconst ids: string[] = [];\n\tconst seen = new Set<string>();\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst item = items[i];\n\t\tif (item === undefined || item.locked) continue;\n\t\tif (!itemHitTestWorldPoint(item, worldX, worldY, options)) continue;\n\t\tif (!seen.has(item.id)) {\n\t\t\tseen.add(item.id);\n\t\t\tids.push(item.id);\n\t\t}\n\t}\n\treturn ids;\n}\n","import { getItemRotationRad, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tbuildArrowSvg,\n\tbuildEllipseSvg,\n\tbuildLineSvg,\n\tbuildRasterImageChildrenSvg,\n\tbuildRectSvg,\n\trebuildItemSvg,\n\tresolveStrokeStyle,\n} from \"../scene/shape-builders\";\nimport { DEFAULT_TEXT_FONT_SIZE } from \"../scene/text-svg\";\nimport type { LineEndpointsLocal, VectorSceneItem } from \"../scene/types\";\nimport {\n\tcomputeResizeBounds,\n\tcomputeResizeBoundsFixedAspect,\n\ttype ResizeHandleId,\n} from \"./resize-handles\";\n\nfunction computeNewBoundsForResize(\n\titem: VectorSceneItem,\n\tsb: Rect,\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n): Rect {\n\tconst rot = getItemRotationRad(item);\n\tif (Math.abs(rot) < 1e-12) {\n\t\tif (item.toolKind === \"image\") {\n\t\t\tlet aspect: number | undefined;\n\t\t\tif (item.imageIntrinsicSize) {\n\t\t\t\tconst iw = Math.max(1e-9, item.imageIntrinsicSize.width);\n\t\t\t\tconst ih = Math.max(1e-9, item.imageIntrinsicSize.height);\n\t\t\t\taspect = iw / ih;\n\t\t\t} else if (item.imageVectorLocalSize) {\n\t\t\t\tconst lw = Math.max(1e-9, item.imageVectorLocalSize.width);\n\t\t\t\tconst lh = Math.max(1e-9, item.imageVectorLocalSize.height);\n\t\t\t\taspect = lw / lh;\n\t\t\t}\n\t\t\treturn aspect !== undefined\n\t\t\t\t? computeResizeBoundsFixedAspect(sb, handle, currentWorld, aspect)\n\t\t\t\t: computeResizeBounds(sb, handle, currentWorld);\n\t\t}\n\t\treturn computeResizeBounds(sb, handle, currentWorld);\n\t}\n\n\tconst local = worldToItemLocal(\n\t\tcurrentWorld.x,\n\t\tcurrentWorld.y,\n\t\tsb.x,\n\t\tsb.y,\n\t\tsb.width,\n\t\tsb.height,\n\t\trot,\n\t);\n\tconst localBounds = { x: 0, y: 0, width: sb.width, height: sb.height };\n\tlet nbLocal: Rect;\n\tif (item.toolKind === \"image\") {\n\t\tlet aspect: number | undefined;\n\t\tif (item.imageIntrinsicSize) {\n\t\t\tconst iw = Math.max(1e-9, item.imageIntrinsicSize.width);\n\t\t\tconst ih = Math.max(1e-9, item.imageIntrinsicSize.height);\n\t\t\taspect = iw / ih;\n\t\t} else if (item.imageVectorLocalSize) {\n\t\t\tconst lw = Math.max(1e-9, item.imageVectorLocalSize.width);\n\t\t\tconst lh = Math.max(1e-9, item.imageVectorLocalSize.height);\n\t\t\taspect = lw / lh;\n\t\t}\n\t\tnbLocal =\n\t\t\taspect !== undefined\n\t\t\t\t? computeResizeBoundsFixedAspect(localBounds, handle, local, aspect)\n\t\t\t\t: computeResizeBounds(localBounds, handle, local);\n\t} else {\n\t\tnbLocal = computeResizeBounds(localBounds, handle, local);\n\t}\n\treturn {\n\t\tx: sb.x + nbLocal.x,\n\t\ty: sb.y + nbLocal.y,\n\t\twidth: nbLocal.width,\n\t\theight: nbLocal.height,\n\t};\n}\n\n/** Unwraps pointer angle delta so rotation stays continuous across ±π. */\nexport function applyRotationFromPointer(\n\titem: VectorSceneItem,\n\tstartRotation: number,\n\tstartPointerAngleRad: number,\n\tpointerAngleRad: number,\n): VectorSceneItem {\n\tlet delta = pointerAngleRad - startPointerAngleRad;\n\twhile (delta > Math.PI) {\n\t\tdelta -= 2 * Math.PI;\n\t}\n\twhile (delta < -Math.PI) {\n\t\tdelta += 2 * Math.PI;\n\t}\n\treturn { ...item, rotation: startRotation + delta };\n}\n\nexport function moveItemByDelta(\n\titem: VectorSceneItem,\n\tdx: number,\n\tdy: number,\n): VectorSceneItem {\n\treturn {\n\t\t...item,\n\t\tx: item.x + dx,\n\t\ty: item.y + dy,\n\t\tbounds: {\n\t\t\t...item.bounds,\n\t\t\tx: item.bounds.x + dx,\n\t\t\ty: item.bounds.y + dy,\n\t\t},\n\t};\n}\n\n/**\n * Resizes an item by dragging a corner/edge handle. Line/arrow endpoints scale\n * proportionally within the resize start bounds.\n */\nexport function resizeItemByHandle(\n\titem: VectorSceneItem,\n\tstart: { bounds: Rect; line?: LineEndpointsLocal },\n\thandle: ResizeHandleId,\n\tcurrentWorld: { x: number; y: number },\n): VectorSceneItem {\n\tconst sb = normalizeRect(start.bounds);\n\tconst newBoundsRaw = computeNewBoundsForResize(item, sb, handle, currentWorld);\n\tconst nb = normalizeRect(newBoundsRaw);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst style = resolveStrokeStyle(item);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tchildrenSvg: buildRectSvg(nb.width, nb.height, style),\n\t\t};\n\t}\n\tif (k === \"ellipse\") {\n\t\tconst style = resolveStrokeStyle(item);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tchildrenSvg: buildEllipseSvg(nb.width, nb.height, style),\n\t\t};\n\t}\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst sfw = Math.max(sb.width, 1e-6);\n\t\tconst sfh = Math.max(sb.height, 1e-6);\n\t\tconst baseFs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\t\tconst areaRatio = (nb.width * nb.height) / (sfw * sfh);\n\t\tconst scale = Math.sqrt(Math.max(areaRatio, 1e-12));\n\t\tconst nextFs = Math.min(256, Math.max(6, baseFs * scale));\n\t\treturn rebuildItemSvg({\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\ttextFixedBounds: true,\n\t\t\ttextFontSize: nextFs,\n\t\t});\n\t}\n\tif (k === \"image\") {\n\t\tif (item.imageRasterHref && item.imageIntrinsicSize) {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: nb.x,\n\t\t\t\ty: nb.y,\n\t\t\t\tbounds: nb,\n\t\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\t\titem.imageRasterHref,\n\t\t\t\t\titem.imageIntrinsicSize,\n\t\t\t\t\tnb,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tif (item.imageVectorInnerSvg && item.imageVectorLocalSize) {\n\t\t\tconst lw = Math.max(1e-6, item.imageVectorLocalSize.width);\n\t\t\tconst lh = Math.max(1e-6, item.imageVectorLocalSize.height);\n\t\t\tconst arB = nb.width / Math.max(1e-9, nb.height);\n\t\t\tconst arI = lw / lh;\n\t\t\tlet childrenSvg: string;\n\t\t\tif (Math.abs(arB - arI) < 1e-3) {\n\t\t\t\tconst s = nb.width / lw;\n\t\t\t\tchildrenSvg = `<g transform=\"scale(${s})\">${item.imageVectorInnerSvg}</g>`;\n\t\t\t} else {\n\t\t\t\tconst s = Math.min(nb.width / lw, nb.height / lh);\n\t\t\t\tconst tx = (nb.width - lw * s) / 2;\n\t\t\t\tconst ty = (nb.height - lh * s) / 2;\n\t\t\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${item.imageVectorInnerSvg}</g>`;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: nb.x,\n\t\t\t\ty: nb.y,\n\t\t\t\tbounds: nb,\n\t\t\t\tchildrenSvg,\n\t\t\t};\n\t\t}\n\t}\n\tif ((k === \"line\" || k === \"arrow\") && start.line) {\n\t\tconst sfw = Math.max(sb.width, 1e-6);\n\t\tconst sfh = Math.max(sb.height, 1e-6);\n\t\tconst f = start.line;\n\t\tconst u1 = f.x1 / sfw;\n\t\tconst v1 = f.y1 / sfh;\n\t\tconst u2 = f.x2 / sfw;\n\t\tconst v2 = f.y2 / sfh;\n\t\tconst newLine: LineEndpointsLocal = {\n\t\t\tx1: u1 * nb.width,\n\t\t\ty1: v1 * nb.height,\n\t\t\tx2: u2 * nb.width,\n\t\t\ty2: v2 * nb.height,\n\t\t};\n\t\tconst style = resolveStrokeStyle(item);\n\t\tconst childrenSvg =\n\t\t\tk === \"arrow\"\n\t\t\t\t? buildArrowSvg(item.id, newLine, style)\n\t\t\t\t: buildLineSvg(newLine, style);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tline: newLine,\n\t\t\tchildrenSvg,\n\t\t};\n\t}\n\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\tconst sfw = Math.max(sb.width, 1e-6);\n\t\tconst sfh = Math.max(sb.height, 1e-6);\n\t\tconst sx = nb.width / sfw;\n\t\tconst sy = nb.height / sfh;\n\t\tconst scaledPoints = item.pathPointsLocal.map((p) => ({\n\t\t\tx: p.x * sx,\n\t\t\ty: p.y * sy,\n\t\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t\t}));\n\t\treturn rebuildItemSvg({\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t\tpathPointsLocal: scaledPoints,\n\t\t});\n\t}\n\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\treturn rebuildItemSvg({\n\t\t\t...item,\n\t\t\tx: nb.x,\n\t\t\ty: nb.y,\n\t\t\tbounds: nb,\n\t\t});\n\t}\n\n\treturn { ...item, x: nb.x, y: nb.y, bounds: nb };\n}\n","\"use client\";\n\nimport {\n\ttype ChangeEvent,\n\ttype CSSProperties,\n\ttype DragEvent,\n\tforwardRef,\n\ttype KeyboardEvent,\n\ttype MouseEvent,\n\ttype ReactNode,\n\ttype PointerEvent as ReactPointerEvent,\n\tuseCallback,\n\tuseEffect,\n\tuseId,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { Camera2D } from \"../camera/camera\";\nimport {\n\tcreateBlobUrlFromStore,\n\tIndexedDbImageStore,\n\tloadImageToStore,\n} from \"../image/indexed-db-image-store\";\nimport { loadPdfToStore } from \"../image/pdf-loader\";\nimport { attachApplePencilNavigation } from \"../input/apple-pencil-navigation\";\nimport { attachViewportInput } from \"../input/attach-viewport-input\";\nimport {\n\tARROW_BIND_SNAP_PX,\n\tbakeArrowItemToAbsolute,\n\tresolveArrowBindingsInScene,\n\tsnapArrowEndpointToShape,\n} from \"../interaction/arrow-bindings\";\nimport {\n\tcollectEraserTargetsAtWorldPoint,\n\thitTestWorldPoint,\n} from \"../interaction/hit-test\";\nimport {\n\tapplyRotationFromPointer,\n\tmoveItemByDelta,\n\tresizeItemByHandle,\n} from \"../interaction/mutations\";\nimport {\n\thitTestResizeHandle,\n\thitTestRotateHandle,\n\trectFromCorners,\n} from \"../interaction/resize-handles\";\nimport { itemPivotWorld, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tformatCameraTransform,\n\tSvgVectorRenderer,\n} from \"../renderer/svg-vector-renderer\";\nimport { cloneVectorSceneItemsWithNewIds } from \"../scene/clone-item\";\nimport { VectorScene } from \"../scene/scene\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\nimport {\n\tapplyStrokeToItem,\n\tapplyTextDraftWhileEditing,\n\tcreateEllipseItem,\n\tcreateFreehandStrokeItem,\n\tcreateLineItem,\n\tcreateRectangleItem,\n\tcreateShapeId,\n\tcreateTextItem,\n\tDEFAULT_STROKE_STYLE,\n\tlineEndpointsToLocal,\n\trebuildItemSvg,\n} from \"../scene/shape-builders\";\nimport type {\n\tArrowBindings,\n\tVectorPathPoint,\n\tVectorSceneItem,\n} from \"../scene/types\";\nimport { CanvuChromeContext, type CanvuChromeContextValue } from \"./chrome-context\";\nimport { InteractionOverlay, type PlacementPreview } from \"./InteractionOverlay\";\nimport { NavMenu } from \"./NavMenu\";\nimport {\n\ttype CanvasPlugin,\n\ttype CanvasPluginContribution,\n\ttype CanvasPluginItemsChangeMiddlewareContext,\n\ttype CanvasPluginRenderContext,\n\tCanvuPluginContext,\n} from \"./plugins\";\nimport { PresenceRemoteLayer } from \"./presence/PresenceRemoteLayer\";\nimport type {\n\tPresenceOverlayRenderContext,\n\tRemotePresencePeer,\n} from \"./presence/types\";\nimport { ShapeContextMenu } from \"./ShapeContextMenu\";\nimport { TextEditOverlay } from \"./TextEditOverlay\";\nimport { DEFAULT_VECTOR_TOOLS } from \"./tools/default-tools\";\nimport type { VectorToolDefinition } from \"./tools/types\";\nimport {\n\tVectorSelectionInspector,\n\ttype VectorSelectionInspectorProps,\n} from \"./VectorSelectionInspector\";\nimport {\n\tcollectItemIdsInRect,\n\tcursorForVectorToolId,\n\ttype DragState,\n\tdefaultPlacementWorld,\n\tfitCameraToWorldRect,\n\tMIN_ARROW_DRAG_PX,\n\tMIN_MARQUEE_WORLD,\n\tMIN_PLACE_SIZE,\n\treplaceItem,\n\tsupportsResizeHandles,\n\tTAP_PX,\n\ttryPointerCaptureOnTarget,\n\tusePrefersReducedMotion,\n\tVIEWPORT_ZOOM_STEP,\n\tvisuallyHidden,\n} from \"./vector-viewport-support\";\n\nexport type WorldPointerDownDetail = {\n\tworldX: number;\n\tworldY: number;\n\ttoolId: string;\n\tpointerType: string;\n};\n\nfunction pointInSelectedItemBounds(\n\titem: VectorSceneItem,\n\tworldX: number,\n\tworldY: number,\n): boolean {\n\tconst bounds = normalizeRect(item.bounds);\n\tconst local = worldToItemLocal(\n\t\tworldX,\n\t\tworldY,\n\t\titem.x,\n\t\titem.y,\n\t\tbounds.width,\n\t\tbounds.height,\n\t\titem.rotation ?? 0,\n\t);\n\treturn (\n\t\tlocal.x >= 0 &&\n\t\tlocal.x <= bounds.width &&\n\t\tlocal.y >= 0 &&\n\t\tlocal.y <= bounds.height\n\t);\n}\n\nfunction pointerEventSamples(ev: PointerEvent): readonly PointerEvent[] {\n\tif (ev.pointerType !== \"pen\" || typeof ev.getCoalescedEvents !== \"function\") {\n\t\treturn [ev];\n\t}\n\tconst samples = ev.getCoalescedEvents();\n\treturn samples.length > 0 ? samples : [ev];\n}\n\nconst CANVU_PEN_ACTIVE_UI_BLOCK_CSS = `\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-canvas-toolbar\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-canvas-toolbar\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"canvu-plugin-layer\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"canvu-plugin-layer\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-selection-inspector\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"vector-selection-inspector\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"zoom-minimap-panel\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"zoom-minimap-panel\"] *,\n[data-canvu-pen-active=\"true\"] [data-slot=\"text-edit-overlay\"],\n[data-canvu-pen-active=\"true\"] [data-slot=\"text-edit-overlay\"] *,\n[data-canvu-pen-active=\"true\"] .vector-toolbar-overflow-panel,\n[data-canvu-pen-active=\"true\"] .vector-toolbar-overflow-panel *,\nbody[data-canvu-pen-active=\"true\"] [data-slot=\"shape-context-menu\"],\nbody[data-canvu-pen-active=\"true\"] [data-slot=\"shape-context-menu\"] * {\n\tpointer-events: none !important;\n\tuser-select: none !important;\n\t-webkit-user-select: none !important;\n\t-webkit-touch-callout: none !important;\n}\n`;\n\nconst DEBUG_APPLE_PENCIL_POINTERS = true;\n\nfunction debugApplePencilPointer(\n\tphase: string,\n\tdetail: Record<string, unknown>,\n): void {\n\tif (!DEBUG_APPLE_PENCIL_POINTERS) return;\n\tconsole.debug(`[canvu][apple-pencil] ${phase}`, detail);\n}\n\nconst MARKER_TOOL_STYLE: StrokeStyle = {\n\tstroke: \"#fde047\",\n\tstrokeWidth: 16,\n\tstrokeOpacity: 0.5,\n};\n\ntype ReorderDirection = \"front\" | \"forward\" | \"backward\" | \"back\";\n\nfunction reorderItemsByIds(\n\titems: readonly VectorSceneItem[],\n\tids: readonly string[],\n\tdirection: ReorderDirection,\n): VectorSceneItem[] {\n\tif (ids.length === 0 || items.length <= 1) {\n\t\treturn [...items];\n\t}\n\tconst idSet = new Set(ids);\n\tif (direction === \"front\") {\n\t\tconst rest = items.filter((item) => !idSet.has(item.id));\n\t\tconst selected = items.filter((item) => idSet.has(item.id));\n\t\treturn [...rest, ...selected];\n\t}\n\tif (direction === \"back\") {\n\t\tconst selected = items.filter((item) => idSet.has(item.id));\n\t\tconst rest = items.filter((item) => !idSet.has(item.id));\n\t\treturn [...selected, ...rest];\n\t}\n\tconst next = [...items];\n\tif (direction === \"forward\") {\n\t\tfor (let index = next.length - 2; index >= 0; index--) {\n\t\t\tconst current = next[index];\n\t\t\tconst after = next[index + 1];\n\t\t\tif (!current || !after) continue;\n\t\t\tif (idSet.has(current.id) && !idSet.has(after.id)) {\n\t\t\t\tnext[index] = after;\n\t\t\t\tnext[index + 1] = current;\n\t\t\t}\n\t\t}\n\t\treturn next;\n\t}\n\tfor (let index = 1; index < next.length; index++) {\n\t\tconst before = next[index - 1];\n\t\tconst current = next[index];\n\t\tif (!before || !current) continue;\n\t\tif (idSet.has(current.id) && !idSet.has(before.id)) {\n\t\t\tnext[index - 1] = current;\n\t\t\tnext[index] = before;\n\t\t}\n\t}\n\treturn next;\n}\n\nfunction isDefaultMarkerToolStyle(style: StrokeStyle): boolean {\n\treturn (\n\t\tstyle.stroke === MARKER_TOOL_STYLE.stroke &&\n\t\tstyle.strokeWidth === MARKER_TOOL_STYLE.strokeWidth &&\n\t\tstyle.strokeOpacity === MARKER_TOOL_STYLE.strokeOpacity\n\t);\n}\n\n/**\n * Imperative API for pan/zoom and integrations (e.g. AI agents following a region).\n * Call {@link requestRender} after mutating the {@link Camera2D} from {@link getCamera}.\n */\nexport type VectorViewportHandle = {\n\t/** The live camera instance, or `null` before mount / after unmount. */\n\tgetCamera: () => Camera2D | null;\n\t/**\n\t * Re-run SVG + overlay after changing `x`, `y`, or `zoom` on the camera from {@link getCamera}.\n\t */\n\trequestRender: () => void;\n\t/** CSS pixel size of the scene surface (`clientWidth` / `clientHeight`). */\n\tgetViewportSize: () => { width: number; height: number };\n\t/**\n\t * Sets pan/zoom so `worldRect` fits in the viewport with optional margin (fraction of rect size per side, default `0.08`).\n\t */\n\tfitWorldRect: (worldRect: Rect, options?: { padding?: number }) => void;\n};\n\n/** Drag-to-place a custom shape (same interaction as rectangle). Use with `createCustomShapeItem` from `canvu`. */\nexport type CustomShapePlacementOptions = {\n\ttoolId: string;\n\tcreateItem: (args: { id: string; bounds: Rect }) => VectorSceneItem;\n};\n\nexport type VectorViewportProps = {\n\t/** Vector items to draw (SVG fragments). */\n\titems: readonly VectorSceneItem[];\n\tclassName?: string;\n\t/** Accessible name for the application region. */\n\tariaLabel: string;\n\t/**\n\t * When `applePencilNav` is true, used with `attachApplePencilNavigation` to decide\n\t * when finger touches navigate (e.g. `\"hand\"` vs `\"draw\"`).\n\t */\n\ttoolId?: string;\n\t/** Enable Apple Pencil vs finger split (optional). */\n\tapplePencilNav?: boolean;\n\t/**\n\t * When true, selection, drag-to-move, resize handles, and drag-to-create shapes are enabled.\n\t * Requires `onItemsChange` to persist mutations.\n\t */\n\tinteractive?: boolean;\n\t/** Selected item ids (order preserved). Empty = none. */\n\tselectedIds?: readonly string[];\n\tonSelectionChange?: (ids: string[]) => void;\n\tonItemsChange?: (items: VectorSceneItem[]) => void;\n\t/**\n\t * Fires on primary pointer down on the viewport in **world** coordinates.\n\t * Not called when `toolId` is `\"hand\"` (use that tool for panning).\n\t * Ignored when `interactive` is true (placement uses drag-to-define).\n\t */\n\tonWorldPointerDown?: (detail: WorldPointerDownDetail) => void;\n\t/**\n\t * Floating UI above the scene. Compose with `VectorCanvas.Toolbar` + {@link VectorToolbar}\n\t * so the strip anchors at the bottom center (`data-slot=\"vector-canvas-toolbar\"`).\n\t */\n\ttoolbar?: ReactNode;\n\t/**\n\t * Floating bottom-left zoom / undo / minimap bar. Omit to render the default `NavMenu`.\n\t * Pass `<VectorCanvas.NavMenu position=\"...\" />` to relocate or style it. Pass `null` to hide it.\n\t */\n\tnavMenu?: ReactNode | null;\n\t/**\n\t * Floating selection / active-tool style inspector. Omit to render the default `VectorSelectionInspector`.\n\t * Pass `<VectorCanvas.SelectionInspector position=\"...\" />` to relocate or style it. Pass `null` to hide it.\n\t */\n\tselectionInspector?: ReactNode | null;\n\t/**\n\t * Props forwarded to the built-in {@link VectorSelectionInspector}.\n\t *\n\t * Use this to reposition or theme the default left-side style panel without replacing it.\n\t */\n\tselectionInspectorProps?: Pick<\n\t\tVectorSelectionInspectorProps,\n\t\t\"className\" | \"style\"\n\t>;\n\t/**\n\t * Plug and play board extensions.\n\t *\n\t * First-party plugins such as `chatbotPlugin(...)` and `realtimeCollaborationPlugin(...)`\n\t * should be passed here. Advanced authors can create their own plugins with `createCanvuPlugin(...)`.\n\t */\n\tplugins?: readonly CanvasPlugin[];\n\t/**\n\t * Called after the scene/camera redraw (pan, zoom, items update, or {@link VectorViewportHandle.requestRender}).\n\t * Can fire often during gestures — throttle/debounce if needed.\n\t */\n\tonCameraChange?: () => void;\n\t/**\n\t * When `interactive` is true, enables drag (or tap) placement for `toolId`, like built-in shapes.\n\t * Implement `createItem` with `createCustomShapeItem` from `canvu`.\n\t */\n\tcustomPlacement?: CustomShapePlacementOptions;\n\t/**\n\t * Multiple custom placements contributed by plugins or app code.\n\t *\n\t * When both `customPlacement` and `customPlacements` are provided, they are combined and the active\n\t * placement is resolved by the current `toolId`.\n\t */\n\tcustomPlacements?: readonly CustomShapePlacementOptions[];\n\t/**\n\t * When false (default), finishing a draw/place/erase gesture requests switching back to `autoResetToolTo`.\n\t * Use with controlled tool state (`onToolChangeRequest`) to keep \"select-after-use\" behavior.\n\t */\n\ttoolLocked?: boolean;\n\t/** Tool id requested after one-shot actions complete. Default `\"select\"`. */\n\tautoResetToolTo?: string;\n\t/** Called when viewport requests a tool change (e.g. auto reset to select). */\n\tonToolChangeRequest?: (toolId: string) => void;\n\t/**\n\t * Remote participants (cursors + optional in-progress strokes). Renders a world-space overlay\n\t * below the local interaction layer. Transport is your app (WebSocket, party server, …).\n\t */\n\tremotePresence?: readonly RemotePresencePeer[];\n\t/**\n\t * Replace the default presence layer (e.g. custom cursors). When set, `remotePresence` is not\n\t * rendered unless you read it from the parent closure inside this callback.\n\t */\n\tpresenceOverlay?: (ctx: PresenceOverlayRenderContext) => ReactNode;\n\t/**\n\t * Throttled pointer position in **world** space while the cursor moves over the viewport\n\t * (for broadcasting your cursor). Pair with `onWorldPointerLeave`.\n\t */\n\tonWorldPointerMove?: (world: { x: number; y: number }) => void;\n\t/** Fires when the pointer leaves the viewport (clear your broadcast cursor). */\n\tonWorldPointerLeave?: () => void;\n\t/**\n\t * Fires when drag placement preview updates (rect, line, freehand stroke, …). Use it to broadcast\n\t * {@link RemotePresencePeer.markupStroke} for other participants while drawing.\n\t */\n\tonPlacementPreviewChange?: (preview: PlacementPreview | null) => void;\n};\n\nfunction mergeToolListById(\n\tbaseTools: VectorToolDefinition[],\n\tpluginTools: readonly VectorToolDefinition[],\n): VectorToolDefinition[] {\n\tconst next = [...baseTools];\n\tfor (const tool of pluginTools) {\n\t\tconst index = next.findIndex((candidate) => candidate.id === tool.id);\n\t\tif (index >= 0) {\n\t\t\tnext[index] = tool;\n\t\t\tcontinue;\n\t\t}\n\t\tnext.push(tool);\n\t}\n\treturn next;\n}\n\nfunction composePluginEvent<TArgs extends readonly unknown[]>(\n\tconsumerHandler: ((...args: TArgs) => void) | undefined,\n\tpluginHandlers: readonly (((...args: TArgs) => void) | undefined)[],\n): ((...args: TArgs) => void) | undefined {\n\tconst activePluginHandlers = pluginHandlers.filter(\n\t\t(handler): handler is (...args: TArgs) => void => handler != null,\n\t);\n\tif (!consumerHandler && activePluginHandlers.length === 0) return undefined;\n\treturn (...args: TArgs) => {\n\t\tconsumerHandler?.(...args);\n\t\tfor (const handler of activePluginHandlers) {\n\t\t\thandler(...args);\n\t\t}\n\t};\n}\n\nfunction VectorViewportPluginInstances({\n\tplugins,\n\trenderContext,\n}: {\n\tplugins: readonly CanvasPlugin[];\n\trenderContext: CanvasPluginRenderContext;\n}) {\n\tif (plugins.length === 0) return null;\n\treturn (\n\t\t<>\n\t\t\t{plugins.map((plugin) => {\n\t\t\t\tconst Component = plugin.Component;\n\t\t\t\treturn (\n\t\t\t\t\t<div key={plugin.id} style={{ pointerEvents: \"none\", height: \"100%\" }}>\n\t\t\t\t\t\t{plugin.render?.(renderContext)}\n\t\t\t\t\t\t{Component ? <Component pluginId={plugin.id} /> : null}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nfunction appendInterpolatedPoints(\n\tpoints: VectorPathPoint[],\n\tnext: VectorPathPoint,\n\tmaxStepWorld: number,\n): VectorPathPoint[] {\n\tif (points.length === 0) return [next];\n\tconst last = points[points.length - 1];\n\tif (!last) return [...points, next];\n\tconst dx = next.x - last.x;\n\tconst dy = next.y - last.y;\n\tconst dist = Math.hypot(dx, dy);\n\tif (dist < 1e-6) return points;\n\tconst safeStep = Math.max(maxStepWorld, 1e-4);\n\tconst steps = Math.max(1, Math.ceil(dist / safeStep));\n\tif (steps === 1) return [...points, next];\n\tconst out = [...points];\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst t = i / steps;\n\t\tconst pressure =\n\t\t\tlast.pressure != null || next.pressure != null\n\t\t\t\t? (last.pressure ?? next.pressure ?? 0.5) +\n\t\t\t\t\t((next.pressure ?? last.pressure ?? 0.5) -\n\t\t\t\t\t\t(last.pressure ?? next.pressure ?? 0.5)) *\n\t\t\t\t\t\tt\n\t\t\t\t: undefined;\n\t\tout.push({\n\t\t\tx: last.x + dx * t,\n\t\t\ty: last.y + dy * t,\n\t\t\t...(pressure != null ? { pressure } : {}),\n\t\t});\n\t}\n\treturn out;\n}\n\nfunction pointerSampleToWorldPoint(\n\tscreenToWorldFn: (\n\t\tclientX: number,\n\t\tclientY: number,\n\t) => {\n\t\tworldX: number;\n\t\tworldY: number;\n\t},\n\tclientX: number,\n\tclientY: number,\n\tpressure?: number,\n): VectorPathPoint {\n\tconst { worldX, worldY } = screenToWorldFn(clientX, clientY);\n\tconst safePressure =\n\t\tpressure != null && Number.isFinite(pressure)\n\t\t\t? Math.min(1, Math.max(0, pressure))\n\t\t\t: undefined;\n\treturn {\n\t\tx: worldX,\n\t\ty: worldY,\n\t\t...(safePressure != null ? { pressure: safePressure } : {}),\n\t};\n}\n\ntype SafariTouch = Touch & {\n\tforce?: number;\n\tradiusX?: number;\n\tradiusY?: number;\n\ttouchType?: string;\n};\n\nfunction touchPressure(touch: Touch): number | undefined {\n\tconst force = (touch as SafariTouch).force;\n\tif (force == null || !Number.isFinite(force) || force <= 0) return undefined;\n\treturn Math.min(1, Math.max(0, force));\n}\n\nfunction touchKind(touch: Touch): string | undefined {\n\tconst kind = (touch as SafariTouch).touchType;\n\treturn typeof kind === \"string\" ? kind.toLowerCase() : undefined;\n}\n\nfunction isLikelyStylusTouch(touch: Touch): boolean {\n\tconst kind = touchKind(touch);\n\tif (kind === \"stylus\" || kind === \"pen\" || kind === \"pencil\") return true;\n\tif (kind === \"direct\") return false;\n\n\tconst force = touchPressure(touch);\n\tconst radiusX = (touch as SafariTouch).radiusX;\n\tconst radiusY = (touch as SafariTouch).radiusY;\n\tconst hasSmallRadius =\n\t\t(radiusX == null || radiusX <= 12) && (radiusY == null || radiusY <= 12);\n\treturn force != null && hasSmallRadius;\n}\n\nfunction appendPointerEventSamplesToStrokePoints(\n\tpoints: VectorPathPoint[],\n\tev: PointerEvent,\n\tzoom: number,\n\tscreenToWorldFn: (\n\t\tclientX: number,\n\t\tclientY: number,\n\t) => {\n\t\tworldX: number;\n\t\tworldY: number;\n\t},\n): VectorPathPoint[] {\n\tlet interpolated = points;\n\tconst maxStepWorld = ev.pointerType === \"pen\" ? 0.35 / zoom : 1.0 / zoom;\n\tfor (const sample of pointerEventSamples(ev)) {\n\t\tconst nextPoint = pointerSampleToWorldPoint(\n\t\t\tscreenToWorldFn,\n\t\t\tsample.clientX,\n\t\t\tsample.clientY,\n\t\t\tsample.pointerType === \"pen\" ? sample.pressure : undefined,\n\t\t);\n\t\tinterpolated = appendInterpolatedPoints(interpolated, nextPoint, maxStepWorld);\n\t}\n\treturn interpolated;\n}\n\nfunction appendTouchToStrokePoints(\n\tpoints: VectorPathPoint[],\n\ttouch: Touch,\n\tzoom: number,\n\tscreenToWorldFn: (\n\t\tclientX: number,\n\t\tclientY: number,\n\t) => {\n\t\tworldX: number;\n\t\tworldY: number;\n\t},\n): VectorPathPoint[] {\n\tconst nextPoint = pointerSampleToWorldPoint(\n\t\tscreenToWorldFn,\n\t\ttouch.clientX,\n\t\ttouch.clientY,\n\t\ttouchPressure(touch),\n\t);\n\treturn appendInterpolatedPoints(points, nextPoint, 0.35 / zoom);\n}\n\n/**\n * Full-viewport vector canvas: SVG rendering + pan/zoom/pinch + optional Apple Pencil navigation.\n * Pass a `className` that includes `touch-action: none` (e.g. Tailwind `touch-none`) on the viewport.\n */\nexport const VectorViewport = forwardRef<VectorViewportHandle, VectorViewportProps>(\n\tfunction VectorViewport(\n\t\t{\n\t\t\titems,\n\t\t\tclassName = \"\",\n\t\t\tariaLabel,\n\t\t\ttoolId = \"hand\",\n\t\t\tapplePencilNav = false,\n\t\t\tinteractive = false,\n\t\t\tselectedIds: selectedIdsProp,\n\t\t\tonSelectionChange,\n\t\t\tonItemsChange: consumerOnItemsChange,\n\t\t\tonWorldPointerDown: consumerOnWorldPointerDown,\n\t\t\ttoolbar,\n\t\t\tnavMenu,\n\t\t\tselectionInspector,\n\t\t\tselectionInspectorProps,\n\t\t\tplugins = [],\n\t\t\tonCameraChange: consumerOnCameraChange,\n\t\t\tcustomPlacement: consumerCustomPlacement,\n\t\t\tcustomPlacements: consumerCustomPlacements,\n\t\t\ttoolLocked = false,\n\t\t\tautoResetToolTo = \"select\",\n\t\t\tonToolChangeRequest,\n\t\t\tremotePresence: consumerRemotePresence,\n\t\t\tpresenceOverlay: consumerPresenceOverlay,\n\t\t\tonWorldPointerMove: consumerOnWorldPointerMove,\n\t\t\tonWorldPointerLeave: consumerOnWorldPointerLeave,\n\t\t\tonPlacementPreviewChange: consumerOnPlacementPreviewChange,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst wrapperRef = useRef<HTMLDivElement>(null);\n\t\tconst interactionRootRef = useRef<HTMLDivElement>(null);\n\t\tconst sceneContainerRef = useRef<HTMLDivElement>(null);\n\t\tconst activeInteractionPointerIdRef = useRef<number | null>(null);\n\t\tconst activeInteractionPointerTargetRef = useRef<HTMLDivElement | null>(null);\n\t\tconst activeInteractionTouchIdRef = useRef<number | null>(null);\n\t\tconst penDetectedRef = useRef(false);\n\t\tconst lastPenPointerDownAtRef = useRef(0);\n\t\tconst cameraRef = useRef<Camera2D | null>(null);\n\t\tconst viewportSizeRef = useRef({ width: 0, height: 0 });\n\t\tconst [cameraForOverlay, setCameraForOverlay] = useState<Camera2D | null>(null);\n\t\tconst sceneRef = useRef<VectorScene | null>(null);\n\t\tconst rendererRef = useRef<SvgVectorRenderer | null>(null);\n\t\tconst pluginViewportRef = useRef<VectorViewportHandle | null>(null);\n\t\tconst [pluginContributions, setPluginContributions] = useState<\n\t\t\tRecord<string, CanvasPluginContribution>\n\t\t>({});\n\n\t\tconst registerContribution = useCallback(\n\t\t\t(pluginId: string, contribution: CanvasPluginContribution) => {\n\t\t\t\tsetPluginContributions((current) => {\n\t\t\t\t\tif (current[pluginId] === contribution) return current;\n\t\t\t\t\treturn { ...current, [pluginId]: contribution };\n\t\t\t\t});\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst unregisterContribution = useCallback((pluginId: string) => {\n\t\t\tsetPluginContributions((current) => {\n\t\t\t\tif (!(pluginId in current)) return current;\n\t\t\t\tconst next = { ...current };\n\t\t\t\tdelete next[pluginId];\n\t\t\t\treturn next;\n\t\t\t});\n\t\t}, []);\n\n\t\tconst orderedPluginContributions = useMemo(\n\t\t\t() =>\n\t\t\t\tplugins\n\t\t\t\t\t.map((plugin) => pluginContributions[plugin.id])\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(contribution): contribution is CanvasPluginContribution =>\n\t\t\t\t\t\t\tcontribution != null,\n\t\t\t\t\t),\n\t\t\t[pluginContributions, plugins],\n\t\t);\n\n\t\tconst resolvedTools = useMemo(() => {\n\t\t\tlet nextTools = [...DEFAULT_VECTOR_TOOLS];\n\t\t\tfor (const contribution of orderedPluginContributions) {\n\t\t\t\tif (contribution.tools?.length) {\n\t\t\t\t\tnextTools = mergeToolListById(nextTools, contribution.tools);\n\t\t\t\t}\n\t\t\t\tif (contribution.toolTransform) {\n\t\t\t\t\tnextTools = contribution.toolTransform(nextTools);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nextTools;\n\t\t}, [orderedPluginContributions]);\n\n\t\tconst allCustomPlacements = useMemo(() => {\n\t\t\tconst placements: CustomShapePlacementOptions[] = [];\n\t\t\tif (consumerCustomPlacement) placements.push(consumerCustomPlacement);\n\t\t\tif (consumerCustomPlacements?.length) {\n\t\t\t\tplacements.push(...consumerCustomPlacements);\n\t\t\t}\n\t\t\tfor (const contribution of orderedPluginContributions) {\n\t\t\t\tif (contribution.customPlacements?.length) {\n\t\t\t\t\tplacements.push(...contribution.customPlacements);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placements;\n\t\t}, [\n\t\t\tconsumerCustomPlacement,\n\t\t\tconsumerCustomPlacements,\n\t\t\torderedPluginContributions,\n\t\t]);\n\n\t\tconst customPlacement = useMemo(\n\t\t\t() =>\n\t\t\t\t[...allCustomPlacements]\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.find((placement) => placement.toolId === toolId),\n\t\t\t[allCustomPlacements, toolId],\n\t\t);\n\n\t\tconst remotePresence =\n\t\t\t[...orderedPluginContributions]\n\t\t\t\t.reverse()\n\t\t\t\t.map((contribution) => contribution.viewportProps?.remotePresence)\n\t\t\t\t.find((value) => value !== undefined) ?? consumerRemotePresence;\n\n\t\tconst presenceOverlay =\n\t\t\t[...orderedPluginContributions]\n\t\t\t\t.reverse()\n\t\t\t\t.map((contribution) => contribution.viewportProps?.presenceOverlay)\n\t\t\t\t.find((value) => value !== undefined) ?? consumerPresenceOverlay;\n\n\t\tconst onWorldPointerDown = composePluginEvent(\n\t\t\tconsumerOnWorldPointerDown,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onWorldPointerDown,\n\t\t\t),\n\t\t);\n\t\tconst onWorldPointerMove = composePluginEvent(\n\t\t\tconsumerOnWorldPointerMove,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onWorldPointerMove,\n\t\t\t),\n\t\t);\n\t\tconst onWorldPointerLeave = composePluginEvent(\n\t\t\tconsumerOnWorldPointerLeave,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onWorldPointerLeave,\n\t\t\t),\n\t\t);\n\t\tconst onPlacementPreviewChange = composePluginEvent(\n\t\t\tconsumerOnPlacementPreviewChange,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onPlacementPreviewChange,\n\t\t\t),\n\t\t);\n\t\tconst onCameraChange = composePluginEvent(\n\t\t\tconsumerOnCameraChange,\n\t\t\torderedPluginContributions.map(\n\t\t\t\t(contribution) => contribution.callbacks?.onCameraChange,\n\t\t\t),\n\t\t);\n\n\t\tconst onItemsChange = useMemo(() => {\n\t\t\tconst middlewares = orderedPluginContributions\n\t\t\t\t.map((contribution) => contribution.wrapOnItemsChange)\n\t\t\t\t.filter(\n\t\t\t\t\t(\n\t\t\t\t\t\tmiddleware,\n\t\t\t\t\t): middleware is NonNullable<\n\t\t\t\t\t\tCanvasPluginContribution[\"wrapOnItemsChange\"]\n\t\t\t\t\t> => middleware != null,\n\t\t\t\t);\n\t\t\tif (!consumerOnItemsChange && middlewares.length === 0) return undefined;\n\t\t\tconst baseNext: NonNullable<VectorViewportProps[\"onItemsChange\"]> = (\n\t\t\t\tnextItems,\n\t\t\t) => {\n\t\t\t\tconsumerOnItemsChange?.(nextItems);\n\t\t\t};\n\t\t\treturn middlewares.reduceRight<\n\t\t\t\tNonNullable<VectorViewportProps[\"onItemsChange\"]>\n\t\t\t>(\n\t\t\t\t(next, middleware) => (nextItems) => {\n\t\t\t\t\tconst ctx: CanvasPluginItemsChangeMiddlewareContext = {\n\t\t\t\t\t\tcurrentItems: items,\n\t\t\t\t\t\tnext,\n\t\t\t\t\t\tconsumerOnItemsChange,\n\t\t\t\t\t\tviewportRef: pluginViewportRef,\n\t\t\t\t\t};\n\t\t\t\t\tmiddleware(nextItems, ctx);\n\t\t\t\t},\n\t\t\t\tbaseNext,\n\t\t\t);\n\t\t}, [consumerOnItemsChange, items, orderedPluginContributions]);\n\n\t\tconst pluginRenderContext = useMemo<CanvasPluginRenderContext>(\n\t\t\t() => ({ viewportRef: pluginViewportRef }),\n\t\t\t[],\n\t\t);\n\n\t\tconst pluginContextValue = useMemo(\n\t\t\t() => ({\n\t\t\t\tviewportRef: pluginViewportRef,\n\t\t\t\tviewport: {\n\t\t\t\t\titems,\n\t\t\t\t\tonItemsChange: consumerOnItemsChange,\n\t\t\t\t\ttoolId,\n\t\t\t\t\tinteractive,\n\t\t\t\t\ttoolLocked,\n\t\t\t\t\tonToolChangeRequest,\n\t\t\t\t},\n\t\t\t\tresolvedTools,\n\t\t\t\tregisterContribution,\n\t\t\t\tunregisterContribution,\n\t\t\t}),\n\t\t\t[\n\t\t\t\tconsumerOnItemsChange,\n\t\t\t\tinteractive,\n\t\t\t\titems,\n\t\t\t\tonToolChangeRequest,\n\t\t\t\tregisterContribution,\n\t\t\t\tresolvedTools,\n\t\t\t\ttoolId,\n\t\t\t\ttoolLocked,\n\t\t\t\tunregisterContribution,\n\t\t\t],\n\t\t);\n\t\tconst toolIdRef = useRef(toolId);\n\t\tconst interactiveRef = useRef(interactive);\n\t\tconst reducedMotionRef = useRef(false);\n\t\tconst itemsRef = useRef(items);\n\t\tconst onWorldPointerDownRef = useRef(onWorldPointerDown);\n\t\tconst onItemsChangeRef = useRef(onItemsChange);\n\t\tconst customPlacementRef = useRef(customPlacement);\n\t\tcustomPlacementRef.current = customPlacement;\n\t\tconst dragStateRef = useRef<DragState>({ kind: \"idle\" });\n\t\tconst clipboardRef = useRef<VectorSceneItem[] | null>(null);\n\t\tconst undoStackRef = useRef<VectorSceneItem[][]>([]);\n\t\tconst redoStackRef = useRef<VectorSceneItem[][]>([]);\n\t\tconst isUndoingRef = useRef(false);\n\t\tconst MAX_HISTORY = 50;\n\t\tconst [canUndo, setCanUndo] = useState(false);\n\t\tconst [canRedo, setCanRedo] = useState(false);\n\n\t\tconst pushUndo = useCallback(() => {\n\t\t\tundoStackRef.current.push(itemsRef.current.map((i) => structuredClone(i)));\n\t\t\tif (undoStackRef.current.length > MAX_HISTORY) {\n\t\t\t\tundoStackRef.current.shift();\n\t\t\t}\n\t\t\tredoStackRef.current = [];\n\t\t\tsetCanUndo(true);\n\t\t\tsetCanRedo(false);\n\t\t}, []);\n\n\t\tconst undo = useCallback(() => {\n\t\t\tconst stack = undoStackRef.current;\n\t\t\tif (stack.length === 0) return;\n\t\t\tconst prev = stack.pop() as VectorSceneItem[];\n\t\t\tconst current = itemsRef.current.map((i) => structuredClone(i));\n\t\t\tredoStackRef.current.push(current);\n\t\t\tsetCanRedo(true);\n\t\t\tsetCanUndo(stack.length > 0);\n\t\t\tisUndoingRef.current = true;\n\t\t\tonItemsChangeRef.current?.(prev);\n\t\t}, []);\n\n\t\tconst redo = useCallback(() => {\n\t\t\tconst stack = redoStackRef.current;\n\t\t\tif (stack.length === 0) return;\n\t\t\tconst next = stack.pop() as VectorSceneItem[];\n\t\t\tconst current = itemsRef.current.map((i) => structuredClone(i));\n\t\t\tundoStackRef.current.push(current);\n\t\t\tsetCanUndo(true);\n\t\t\tsetCanRedo(stack.length > 0);\n\t\t\tisUndoingRef.current = true;\n\t\t\tonItemsChangeRef.current?.(next);\n\t\t}, []);\n\t\tconst [contextMenu, setContextMenu] = useState<{\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t\titemIds: string[];\n\t\t} | null>(null);\n\n\t\tconst [uncontrolledSel, setUncontrolledSel] = useState<string[]>([]);\n\t\tconst isSelectionControlled = onSelectionChange !== undefined;\n\t\t/**\n\t\t * Stable when only `items` changes: controlled branch keys off serialized ids so parents\n\t\t * that pass a new `selectedIds` array reference each render with the same contents do not\n\t\t * invalidate this memo every frame (avoids orphan-selection effect + update-depth issues).\n\t\t */\n\t\tconst controlledSelectedKey = JSON.stringify(selectedIdsProp ?? []);\n\t\tconst effectiveSelectedIds = useMemo((): string[] => {\n\t\t\tif (isSelectionControlled) {\n\t\t\t\treturn [...(JSON.parse(controlledSelectedKey) as string[])];\n\t\t\t}\n\t\t\treturn uncontrolledSel;\n\t\t}, [isSelectionControlled, controlledSelectedKey, uncontrolledSel]);\n\n\t\tconst effectiveSelectedIdsRef = useRef<string[]>([]);\n\t\teffectiveSelectedIdsRef.current = effectiveSelectedIds;\n\n\t\tconst setEffectiveSelectedIds = useCallback(\n\t\t\t(ids: readonly string[]) => {\n\t\t\t\tconst next = [...ids];\n\t\t\t\tif (isSelectionControlled) {\n\t\t\t\t\tonSelectionChange?.(next);\n\t\t\t\t} else {\n\t\t\t\t\tsetUncontrolledSel(next);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[isSelectionControlled, onSelectionChange],\n\t\t);\n\n\t\tconst setEffectiveSelectedIdsRef = useRef(setEffectiveSelectedIds);\n\t\tsetEffectiveSelectedIdsRef.current = setEffectiveSelectedIds;\n\n\t\ttoolIdRef.current = toolId;\n\t\tinteractiveRef.current = interactive;\n\t\titemsRef.current = items;\n\t\tonWorldPointerDownRef.current = onWorldPointerDown;\n\t\tconst originalOnItemsChangeRef = useRef(onItemsChange);\n\t\toriginalOnItemsChangeRef.current = onItemsChange;\n\t\tconst changeItems = useCallback(\n\t\t\t(items: VectorSceneItem[]) => {\n\t\t\t\tif (!isUndoingRef.current) {\n\t\t\t\t\tpushUndo();\n\t\t\t\t}\n\t\t\t\tisUndoingRef.current = false;\n\t\t\t\toriginalOnItemsChangeRef.current?.(items);\n\t\t\t},\n\t\t\t[pushUndo],\n\t\t);\n\t\tonItemsChangeRef.current = changeItems;\n\t\tconst toolLockedRef = useRef(toolLocked);\n\t\ttoolLockedRef.current = toolLocked;\n\t\tconst autoResetToolToRef = useRef(autoResetToolTo);\n\t\tautoResetToolToRef.current = autoResetToolTo;\n\t\tconst onToolChangeRequestRef = useRef(onToolChangeRequest);\n\t\tonToolChangeRequestRef.current = onToolChangeRequest;\n\n\t\tconst resolvedItems = useMemo(() => resolveArrowBindingsInScene(items), [items]);\n\t\tconst resolvedItemsRef = useRef(resolvedItems);\n\t\tresolvedItemsRef.current = resolvedItems;\n\n\t\tconst liveId = useId();\n\t\tconst reducedMotion = usePrefersReducedMotion();\n\t\treducedMotionRef.current = reducedMotion;\n\t\tconst [zoomPercent, setZoomPercent] = useState(100);\n\t\tconst [cameraTick, setCameraTick] = useState(0);\n\t\tconst [placementPreview, setPlacementPreview] =\n\t\t\tuseState<PlacementPreview | null>(null);\n\t\tconst [eraserTrail, setEraserTrail] = useState<\n\t\t\t{ x: number; y: number; t: number }[]\n\t\t>([]);\n\t\tconst [laserTrail, setLaserTrail] = useState<\n\t\t\t{ x: number; y: number; t: number }[]\n\t\t>([]);\n\t\tconst [eraserPreviewIds, setEraserPreviewIds] = useState<string[]>([]);\n\t\tconst eraserPreviewIdsRef = useRef<Set<string>>(new Set());\n\t\tconst resolvedSceneItems = useMemo(() => {\n\t\t\tif (eraserPreviewIds.length === 0) return resolvedItems;\n\t\t\tconst hiddenIds = new Set(eraserPreviewIds);\n\t\t\treturn resolvedItems.filter((it) => !hiddenIds.has(it.id));\n\t\t}, [eraserPreviewIds, resolvedItems]);\n\t\tconst resolvedSceneItemsRef =\n\t\t\tuseRef<readonly VectorSceneItem[]>(resolvedSceneItems);\n\t\tresolvedSceneItemsRef.current = resolvedSceneItems;\n\t\tconst livePenStrokeItemRef = useRef<VectorSceneItem | null>(null);\n\t\tconst [eraserActive, setEraserActive] = useState(false);\n\t\tconst [editingTextId, setEditingTextId] = useState<string | null>(null);\n\t\tconst [draftText, setDraftText] = useState(\"\");\n\t\tconst draftTextRef = useRef(\"\");\n\t\tdraftTextRef.current = draftText;\n\t\tconst [loadingSkeletons, setLoadingSkeletons] = useState<\n\t\t\t{ id: string; x: number; y: number; width: number; height: number }[]\n\t\t>([]);\n\t\tconst skeletonSeqRef = useRef(0);\n\t\t/** Snapshot when inline edit starts; used to restore on Escape if draft changed. */\n\t\tconst editingTextSnapshotRef = useRef<VectorSceneItem | null>(null);\n\t\tconst editingTextIdRef = useRef<string | null>(null);\n\t\teditingTextIdRef.current = editingTextId;\n\t\tconst pendingImagePlacementRef = useRef<{\n\t\t\tworldX: number;\n\t\t\tworldY: number;\n\t\t} | null>(null);\n\t\tconst lastToolIdRef = useRef(toolId);\n\t\tconst imageInputRef = useRef<HTMLInputElement>(null);\n\t\tconst imageStoreRef = useRef<IndexedDbImageStore | null>(null);\n\t\tif (typeof indexedDB !== \"undefined\" && !imageStoreRef.current) {\n\t\t\timageStoreRef.current = new IndexedDbImageStore();\n\t\t}\n\t\tconst strokeStyleRef = useRef<StrokeStyle>({ ...DEFAULT_STROKE_STYLE });\n\t\tconst [strokeStyleState, setStrokeStyleState] = useState<StrokeStyle>({\n\t\t\t...DEFAULT_STROKE_STYLE,\n\t\t});\n\t\tconst setCurrentStrokeStyle = useCallback((next: StrokeStyle) => {\n\t\t\tstrokeStyleRef.current = next;\n\t\t\tsetStrokeStyleState(next);\n\t\t}, []);\n\n\t\t/* ── Progressive image loading (thumbnail → full-res) ── */\n\t\tconst progressiveQueueRef = useRef<Set<string>>(new Set());\n\t\tuseEffect(() => {\n\t\t\tconst store = imageStoreRef.current;\n\t\t\tif (!store) return;\n\t\t\tlet cancelled = false;\n\t\t\tconst timer = setTimeout(async () => {\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\tif (\n\t\t\t\t\t\titem.toolKind === \"image\" &&\n\t\t\t\t\t\titem.imageBlobId &&\n\t\t\t\t\t\ttypeof item.imageRasterHref === \"string\" &&\n\t\t\t\t\t\titem.imageRasterHref.startsWith(\"blob:\") &&\n\t\t\t\t\t\titem.imageThumbnailHref &&\n\t\t\t\t\t\t!progressiveQueueRef.current.has(item.id)\n\t\t\t\t\t) {\n\t\t\t\t\t\tprogressiveQueueRef.current.add(item.id);\n\t\t\t\t\t\tconst fullUrl = item.imageRasterHref;\n\t\t\t\t\t\t// Pre-decode the full-res image\n\t\t\t\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\t\t\t\tconst img = new Image();\n\t\t\t\t\t\t\timg.onload = () => resolve();\n\t\t\t\t\t\t\timg.onerror = () => reject();\n\t\t\t\t\t\t\timg.src = fullUrl;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (cancelled) return;\n\t\t\t\t\t\t// Swap childrenSvg to use full-res\n\t\t\t\t\t\tconst { buildRasterImageChildrenSvg } = await import(\n\t\t\t\t\t\t\t\"../scene/shape-builders\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\t\tif (!change) return;\n\t\t\t\t\t\tconst list = itemsRef.current;\n\t\t\t\t\t\tconst existing = list.find((i) => i.id === item.id);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!existing ||\n\t\t\t\t\t\t\texisting.toolKind !== \"image\" ||\n\t\t\t\t\t\t\t!existing.imageIntrinsicSize\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\tconst { imageIntrinsicSize: isize, imageThumbnailHref } = existing;\n\t\t\t\t\t\t// Only swap if thumbnail is still the one showing\n\t\t\t\t\t\tconst needsSwap = imageThumbnailHref?.startsWith(\"blob:\");\n\t\t\t\t\t\tif (needsSwap && imageThumbnailHref) {\n\t\t\t\t\t\t\tURL.revokeObjectURL(imageThumbnailHref);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst rebuilt = {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\timageThumbnailHref: undefined,\n\t\t\t\t\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\t\t\t\t\tfullUrl,\n\t\t\t\t\t\t\t\tisize,\n\t\t\t\t\t\t\t\texisting.bounds,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t} as VectorSceneItem;\n\t\t\t\t\t\tchange(list.map((i) => (i.id === item.id ? rebuilt : i)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t\tclearTimeout(timer);\n\t\t\t};\n\t\t}, [items]);\n\t\tconst onCameraChangeRef = useRef(onCameraChange);\n\t\tonCameraChangeRef.current = onCameraChange;\n\t\tconst onWorldPointerMoveRef = useRef(onWorldPointerMove);\n\t\tonWorldPointerMoveRef.current = onWorldPointerMove;\n\t\tconst onWorldPointerLeaveRef = useRef(onWorldPointerLeave);\n\t\tonWorldPointerLeaveRef.current = onWorldPointerLeave;\n\t\tconst onPlacementPreviewChangeRef = useRef(onPlacementPreviewChange);\n\t\tonPlacementPreviewChangeRef.current = onPlacementPreviewChange;\n\t\t/** Re-render overlays when the camera moves — including non-interactive + `remotePresence`. */\n\t\tconst overlayCameraTickRef = useRef(false);\n\t\toverlayCameraTickRef.current =\n\t\t\tinteractive ||\n\t\t\t(remotePresence != null && remotePresence.length > 0) ||\n\t\t\tpresenceOverlay != null;\n\t\tconst pruneEraserTrail = useCallback(\n\t\t\t(points: { x: number; y: number; t: number }[]) => {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst maxAgeMs = 150;\n\t\t\t\treturn points.filter((p) => now - p.t <= maxAgeMs);\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t\tconst pruneLaserTrail = useCallback(\n\t\t\t(points: { x: number; y: number; t: number }[]) => {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst maxAgeMs = 650;\n\t\t\t\treturn points.filter((p) => now - p.t <= maxAgeMs);\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t\tconst requestAutoResetTool = useCallback((usedTool: string) => {\n\t\t\tif (toolLockedRef.current) return;\n\t\t\tif (usedTool === \"select\" || usedTool === \"hand\") return;\n\t\t\tonToolChangeRequestRef.current?.(autoResetToolToRef.current);\n\t\t}, []);\n\n\t\tconst shouldKeepToolForContinuousPenInput = useCallback(\n\t\t\t(tool: string, pointerType: string) =>\n\t\t\t\tpointerType === \"pen\" && (tool === \"draw\" || tool === \"marker\"),\n\t\t\t[],\n\t\t);\n\n\t\tconst commitCompletedStroke = useCallback(\n\t\t\t(args: {\n\t\t\t\ttool: Extract<DragState, { kind: \"stroke\" }>[\"tool\"];\n\t\t\t\tpointerType: string;\n\t\t\t\tpoints: VectorPathPoint[];\n\t\t\t\tstyle: StrokeStyle;\n\t\t\t\titemId?: string;\n\t\t\t}) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tif (args.tool === \"laser\") {\n\t\t\t\t\tif (!shouldKeepToolForContinuousPenInput(args.tool, args.pointerType)) {\n\t\t\t\t\t\trequestAutoResetTool(args.tool);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst id = args.itemId ?? createShapeId();\n\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\tid,\n\t\t\t\t\targs.points,\n\t\t\t\t\targs.tool,\n\t\t\t\t\targs.style,\n\t\t\t\t);\n\t\t\t\tif (item) {\n\t\t\t\t\tconst exists = itemsRef.current.some((it) => it.id === id);\n\t\t\t\t\tchange(\n\t\t\t\t\t\texists\n\t\t\t\t\t\t\t? replaceItem(itemsRef.current, id, item)\n\t\t\t\t\t\t\t: [...itemsRef.current, item],\n\t\t\t\t\t);\n\t\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\t\tstroke: item.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\t\t\tstrokeWidth: item.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t\t\t\t...(item.strokeOpacity != null\n\t\t\t\t\t\t\t? { strokeOpacity: item.strokeOpacity }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!shouldKeepToolForContinuousPenInput(args.tool, args.pointerType)) {\n\t\t\t\t\trequestAutoResetTool(args.tool);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\trequestAutoResetTool,\n\t\t\t\tsetCurrentStrokeStyle,\n\t\t\t\tshouldKeepToolForContinuousPenInput,\n\t\t\t],\n\t\t);\n\n\t\tconst captureInteractionPointer = useCallback(\n\t\t\t(\n\t\t\t\ttarget: HTMLDivElement,\n\t\t\t\tpointerId: number,\n\t\t\t\toptions?: { captureNativePointer?: boolean },\n\t\t\t) => {\n\t\t\t\tconst captureNativePointer = options?.captureNativePointer ?? true;\n\t\t\t\tdebugApplePencilPointer(\"capture\", { pointerId, captureNativePointer });\n\t\t\t\tactiveInteractionPointerIdRef.current = pointerId;\n\t\t\t\tactiveInteractionPointerTargetRef.current = captureNativePointer\n\t\t\t\t\t? target\n\t\t\t\t\t: null;\n\t\t\t\tif (captureNativePointer) {\n\t\t\t\t\ttryPointerCaptureOnTarget(target, pointerId);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst releaseInteractionPointer = useCallback(() => {\n\t\t\tconst pointerId = activeInteractionPointerIdRef.current;\n\t\t\tconst target = activeInteractionPointerTargetRef.current;\n\t\t\tdebugApplePencilPointer(\"release\", { pointerId });\n\t\t\tif (pointerId != null && target) {\n\t\t\t\ttry {\n\t\t\t\t\tif (target.hasPointerCapture(pointerId)) {\n\t\t\t\t\t\ttarget.releasePointerCapture(pointerId);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore Safari/iPad capture races */\n\t\t\t\t}\n\t\t\t}\n\t\t\tactiveInteractionPointerIdRef.current = null;\n\t\t\tactiveInteractionPointerTargetRef.current = null;\n\t\t\tactiveInteractionTouchIdRef.current = null;\n\t\t}, []);\n\n\t\tconst renderSceneWithLivePenStroke = useCallback(\n\t\t\t(item: VectorSceneItem | null) => {\n\t\t\t\tlivePenStrokeItemRef.current = item;\n\t\t\t\tconst scene = sceneRef.current;\n\t\t\t\tconst renderer = rendererRef.current;\n\t\t\t\tif (!scene || !renderer) return;\n\t\t\t\tconst base = resolvedSceneItemsRef.current;\n\t\t\t\tscene.setItems(item ? [...base, item] : base);\n\t\t\t\trenderer.render();\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst finalizeStrokeDragState = useCallback(\n\t\t\t(strokeState: Extract<DragState, { kind: \"stroke\" }>) => {\n\t\t\t\tconst tool = strokeState.tool;\n\t\t\t\tconst pts = strokeState.points;\n\t\t\t\tconst pointerType = strokeState.pointerType;\n\t\t\t\tconst itemId = strokeState.itemId;\n\t\t\t\tconst style = { ...strokeStyleRef.current };\n\t\t\t\tdebugApplePencilPointer(\"finalize-stroke\", {\n\t\t\t\t\tpointerType,\n\t\t\t\t\ttool,\n\t\t\t\t\tpoints: pts.length,\n\t\t\t\t});\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\treleaseInteractionPointer();\n\t\t\t\tif (itemId) {\n\t\t\t\t\trenderSceneWithLivePenStroke(null);\n\t\t\t\t}\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tcommitCompletedStroke({\n\t\t\t\t\ttool,\n\t\t\t\t\tpointerType,\n\t\t\t\t\tpoints: [...pts],\n\t\t\t\t\tstyle,\n\t\t\t\t\titemId,\n\t\t\t\t});\n\t\t\t},\n\t\t\t[\n\t\t\t\tcommitCompletedStroke,\n\t\t\t\treleaseInteractionPointer,\n\t\t\t\trenderSceneWithLivePenStroke,\n\t\t\t],\n\t\t);\n\n\t\tconst renderFrame = useCallback(() => {\n\t\t\tconst renderer = rendererRef.current;\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!renderer || !cam) return;\n\t\t\trenderer.render();\n\t\t\tif (overlayCameraTickRef.current) {\n\t\t\t\tsetCameraTick((n) => n + 1);\n\t\t\t}\n\t\t\tif (!reducedMotionRef.current) {\n\t\t\t\tsetZoomPercent(Math.round(cam.zoom * 100));\n\t\t\t}\n\t\t\tonCameraChangeRef.current?.();\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tconst interactionEl = interactionRootRef.current;\n\t\t\tif (!el || !interactionEl) return;\n\n\t\t\tconst camera = new Camera2D({ minZoom: 0.1, maxZoom: 24 });\n\t\t\tcameraRef.current = camera;\n\t\t\tsetCameraForOverlay(camera);\n\n\t\t\tconst scene = new VectorScene();\n\t\t\tsceneRef.current = scene;\n\t\t\tscene.setItems(itemsRef.current);\n\n\t\t\tconst renderer = new SvgVectorRenderer({\n\t\t\t\tcontainer: el,\n\t\t\t\tscene,\n\t\t\t\tcamera,\n\t\t\t\tpointerEventsNone: interactiveRef.current,\n\t\t\t});\n\t\t\trendererRef.current = renderer;\n\t\t\trenderer.render();\n\t\t\tif (!reducedMotionRef.current) {\n\t\t\t\tsetZoomPercent(Math.round(camera.zoom * 100));\n\t\t\t}\n\n\t\t\tconst detachInput = attachViewportInput({\n\t\t\t\telement: interactionEl,\n\t\t\t\tcamera,\n\t\t\t\tonUpdate: renderFrame,\n\t\t\t\twheelElement: wrapperRef.current ?? undefined,\n\t\t\t\ttouchHandledElsewhere: applePencilNav,\n\t\t\t\tallowPrimaryPointerPan: () => {\n\t\t\t\t\tif (interactiveRef.current) {\n\t\t\t\t\t\treturn toolIdRef.current === \"hand\";\n\t\t\t\t\t}\n\t\t\t\t\tconst t = toolIdRef.current;\n\t\t\t\t\treturn t === \"hand\" || t === \"select\";\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tlet detachPencil: (() => void) | undefined;\n\t\t\tif (applePencilNav) {\n\t\t\t\tdetachPencil = attachApplePencilNavigation({\n\t\t\t\t\telement: interactionEl,\n\t\t\t\t\tcamera,\n\t\t\t\t\tgetCurrentToolId: () => toolIdRef.current,\n\t\t\t\t\tonUpdate: renderFrame,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tdetachInput();\n\t\t\t\tdetachPencil?.();\n\t\t\t\trenderer.destroy();\n\t\t\t\trendererRef.current = null;\n\t\t\t\tsceneRef.current = null;\n\t\t\t\tcameraRef.current = null;\n\t\t\t\tsetCameraForOverlay(null);\n\t\t\t};\n\t\t}, [applePencilNav, renderFrame]);\n\n\t\tuseEffect(() => {\n\t\t\tconst r = rendererRef.current;\n\t\t\tif (!r) return;\n\t\t\tr.setPointerEventsNone(interactive);\n\t\t}, [interactive]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!eraserActive && laserTrail.length === 0) return;\n\t\t\tconst timer = window.setInterval(() => {\n\t\t\t\tsetEraserTrail((prev) => pruneEraserTrail(prev));\n\t\t\t\tsetLaserTrail((prev) => pruneLaserTrail(prev));\n\t\t\t}, 50);\n\t\t\treturn () => window.clearInterval(timer);\n\t\t}, [eraserActive, laserTrail.length, pruneEraserTrail, pruneLaserTrail]);\n\n\t\tuseEffect(() => {\n\t\t\tconst root = wrapperRef.current;\n\t\t\tif (!root || !onWorldPointerMove) return;\n\t\t\tlet lastEmit = 0;\n\t\t\tconst throttleMs = 33;\n\t\t\tconst move = (e: PointerEvent) => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tif (now - lastEmit < throttleMs) return;\n\t\t\t\tlastEmit = now;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tconst rect = sceneContainerRef.current?.getBoundingClientRect();\n\t\t\t\tif (!cam || !rect) return;\n\t\t\t\tconst { worldX, worldY } = cam.screenToWorld(\n\t\t\t\t\te.clientX - rect.left,\n\t\t\t\t\te.clientY - rect.top,\n\t\t\t\t);\n\t\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\n\t\t\t};\n\t\t\tconst leave = () => onWorldPointerLeaveRef.current?.();\n\t\t\troot.addEventListener(\"pointermove\", move, { passive: true });\n\t\t\troot.addEventListener(\"pointerleave\", leave);\n\t\t\treturn () => {\n\t\t\t\troot.removeEventListener(\"pointermove\", move);\n\t\t\t\troot.removeEventListener(\"pointerleave\", leave);\n\t\t\t};\n\t\t}, [onWorldPointerMove]);\n\n\t\tuseEffect(() => {\n\t\t\tonPlacementPreviewChangeRef.current?.(placementPreview);\n\t\t}, [placementPreview]);\n\n\t\tuseEffect(() => {\n\t\t\tconst scene = sceneRef.current;\n\t\t\tif (scene) {\n\t\t\t\tconst live = livePenStrokeItemRef.current;\n\t\t\t\tif (live && resolvedSceneItems.some((it) => it.id === live.id)) {\n\t\t\t\t\tlivePenStrokeItemRef.current = null;\n\t\t\t\t}\n\t\t\t\tconst currentLive = livePenStrokeItemRef.current;\n\t\t\t\tscene.setItems(\n\t\t\t\t\tcurrentLive ? [...resolvedSceneItems, currentLive] : resolvedSceneItems,\n\t\t\t\t);\n\t\t\t\trenderFrame();\n\t\t\t}\n\t\t}, [resolvedSceneItems, renderFrame]);\n\n\t\t/** Drop selection ids that no longer exist (e.g. erased item). */\n\t\tuseEffect(() => {\n\t\t\tconst ids = effectiveSelectedIds;\n\t\t\tconst valid = ids.filter((id) => items.some((i) => i.id === id));\n\t\t\tif (valid.length === ids.length) return;\n\t\t\tsetEffectiveSelectedIdsRef.current(valid);\n\t\t}, [items, effectiveSelectedIds]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!editingTextId) return;\n\t\t\tconst it = items.find((i) => i.id === editingTextId);\n\t\t\tif (!it || it.toolKind !== \"text\") {\n\t\t\t\tsetEditingTextId(null);\n\t\t\t}\n\t\t}, [items, editingTextId]);\n\n\t\tconst itemsSnapshotForBlobRef = useRef<readonly VectorSceneItem[]>([]);\n\t\tuseEffect(() => {\n\t\t\tconst prev = itemsSnapshotForBlobRef.current;\n\t\t\titemsSnapshotForBlobRef.current = items;\n\t\t\tconst blobHrefs = (list: readonly VectorSceneItem[]) => {\n\t\t\t\tconst s = new Set<string>();\n\t\t\t\tfor (const it of list) {\n\t\t\t\t\tif (it.toolKind === \"image\" && it.imageRasterHref?.startsWith(\"blob:\")) {\n\t\t\t\t\t\ts.add(it.imageRasterHref);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn s;\n\t\t\t};\n\t\t\tconst before = blobHrefs(prev);\n\t\t\tconst after = blobHrefs(items);\n\t\t\tfor (const href of before) {\n\t\t\t\tif (!after.has(href)) {\n\t\t\t\t\tURL.revokeObjectURL(href);\n\t\t\t\t}\n\t\t\t}\n\t\t}, [items]);\n\n\t\tconst PASTE_OFFSET_WORLD = 24;\n\n\t\tconst copyIdsToInternalClipboard = useCallback((ids: readonly string[]) => {\n\t\t\tif (ids.length === 0) return;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst copies = ids\n\t\t\t\t.map((id) => list.find((i) => i.id === id))\n\t\t\t\t.filter((x): x is VectorSceneItem => x != null);\n\t\t\tclipboardRef.current = copies.map(\n\t\t\t\t(it) => JSON.parse(JSON.stringify(it)) as VectorSceneItem,\n\t\t\t);\n\t\t}, []);\n\n\t\tconst pasteFromInternalClipboard = useCallback(() => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tconst buf = clipboardRef.current;\n\t\t\tif (!change || !buf?.length) return;\n\t\t\tconst clones = cloneVectorSceneItemsWithNewIds(buf);\n\t\t\tconst moved = clones.map((it) =>\n\t\t\t\tmoveItemByDelta(it, PASTE_OFFSET_WORLD, PASTE_OFFSET_WORLD),\n\t\t\t);\n\t\t\tchange([...itemsRef.current, ...moved]);\n\t\t\tsetEffectiveSelectedIdsRef.current(moved.map((i) => i.id));\n\t\t}, []);\n\n\t\tconst duplicateIds = useCallback((ids: readonly string[]) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change || ids.length === 0) return;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst selected = ids\n\t\t\t\t.map((id) => list.find((i) => i.id === id))\n\t\t\t\t.filter((x): x is VectorSceneItem => x != null);\n\t\t\tconst clones = cloneVectorSceneItemsWithNewIds(selected);\n\t\t\tconst moved = clones.map((it) =>\n\t\t\t\tmoveItemByDelta(it, PASTE_OFFSET_WORLD, PASTE_OFFSET_WORLD),\n\t\t\t);\n\t\t\tchange([...list, ...moved]);\n\t\t\tsetEffectiveSelectedIdsRef.current(moved.map((i) => i.id));\n\t\t}, []);\n\n\t\tconst deleteIds = useCallback((ids: readonly string[]) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change || ids.length === 0) return;\n\t\t\tconst idSet = new Set(ids);\n\t\t\tchange(itemsRef.current.filter((i) => !idSet.has(i.id)));\n\t\t\tsetEffectiveSelectedIdsRef.current([]);\n\t\t}, []);\n\n\t\tconst cutIds = useCallback(\n\t\t\t(ids: readonly string[]) => {\n\t\t\t\tcopyIdsToInternalClipboard(ids);\n\t\t\t\tdeleteIds(ids);\n\t\t\t},\n\t\t\t[copyIdsToInternalClipboard, deleteIds],\n\t\t);\n\n\t\tconst setLockedOnIds = useCallback((ids: readonly string[], locked: boolean) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change || ids.length === 0) return;\n\t\t\tconst idSet = new Set(ids);\n\t\t\tchange(\n\t\t\t\titemsRef.current.map((it) => (idSet.has(it.id) ? { ...it, locked } : it)),\n\t\t\t);\n\t\t}, []);\n\n\t\tconst reorderIds = useCallback(\n\t\t\t(ids: readonly string[], direction: ReorderDirection) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change || ids.length === 0) return;\n\t\t\t\tconst next = reorderItemsByIds(itemsRef.current, ids, direction);\n\t\t\t\tchange(next);\n\t\t\t\tsetEffectiveSelectedIdsRef.current([...ids]);\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst onKeyDown = useCallback(\n\t\t\t(e: KeyboardEvent<HTMLDivElement>) => {\n\t\t\t\tconst t = e.target;\n\t\t\t\tif (\n\t\t\t\t\tt instanceof HTMLTextAreaElement ||\n\t\t\t\t\tt instanceof HTMLInputElement ||\n\t\t\t\t\t(t instanceof HTMLElement && t.isContentEditable)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (editingTextIdRef.current) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst camera = cameraRef.current;\n\t\t\t\tconst el = sceneContainerRef.current;\n\t\t\t\tif (!camera || !el) return;\n\n\t\t\t\tif (interactive && onItemsChangeRef.current) {\n\t\t\t\t\tconst mod = e.ctrlKey || e.metaKey;\n\t\t\t\t\tif (mod && e.key === \"c\") {\n\t\t\t\t\t\tconst ids = effectiveSelectedIdsRef.current;\n\t\t\t\t\t\tif (ids.length > 0) {\n\t\t\t\t\t\t\tcopyIdsToInternalClipboard(ids);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (mod && e.key === \"v\") {\n\t\t\t\t\t\tif (clipboardRef.current?.length) {\n\t\t\t\t\t\t\tpasteFromInternalClipboard();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (mod && e.key === \"z\") {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\tredo();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tundo();\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (mod && e.key === \"Z\") {\n\t\t\t\t\t\tredo();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (e.key === \"Delete\" || e.key === \"Backspace\") {\n\t\t\t\t\t\tconst ids = effectiveSelectedIdsRef.current;\n\t\t\t\t\t\tif (ids.length > 0) {\n\t\t\t\t\t\t\tdeleteIds(ids);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst step = 40 / camera.zoom;\n\t\t\t\tlet handled = false;\n\t\t\t\tif (e.key === \"ArrowLeft\") {\n\t\t\t\t\tcamera.x += step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\t\t\tcamera.x -= step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\t\t\tcamera.y += step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"ArrowDown\") {\n\t\t\t\t\tcamera.y -= step;\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"+\" || e.key === \"=\") {\n\t\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\t\tcamera.setZoom(camera.zoom * VIEWPORT_ZOOM_STEP, {\n\t\t\t\t\t\tx: rect.width / 2,\n\t\t\t\t\t\ty: rect.height / 2,\n\t\t\t\t\t});\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"-\" || e.key === \"_\") {\n\t\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\t\tcamera.setZoom(camera.zoom / VIEWPORT_ZOOM_STEP, {\n\t\t\t\t\t\tx: rect.width / 2,\n\t\t\t\t\t\ty: rect.height / 2,\n\t\t\t\t\t});\n\t\t\t\t\thandled = true;\n\t\t\t\t} else if (e.key === \"0\" && (e.metaKey || e.ctrlKey)) {\n\t\t\t\t\tcamera.zoom = 1;\n\t\t\t\t\tcamera.x = 0;\n\t\t\t\t\tcamera.y = 0;\n\t\t\t\t\thandled = true;\n\t\t\t\t}\n\n\t\t\t\tif (handled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\trenderFrame();\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\trenderFrame,\n\t\t\t\tinteractive,\n\t\t\t\tcopyIdsToInternalClipboard,\n\t\t\t\tpasteFromInternalClipboard,\n\t\t\t\tdeleteIds,\n\t\t\t\tundo,\n\t\t\t\tredo,\n\t\t\t],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst el = wrapperRef.current;\n\t\t\tif (!el) return;\n\t\t\tel.tabIndex = 0;\n\n\t\t\t// Inject skeleton animation keyframe once\n\t\t\tif (!document.getElementById(\"canvu-skeleton-keyframe\")) {\n\t\t\t\tconst style = document.createElement(\"style\");\n\t\t\t\tstyle.id = \"canvu-skeleton-keyframe\";\n\t\t\t\tstyle.textContent =\n\t\t\t\t\t\"@keyframes canvu-pulse { 0%,100% { opacity: 0.3 } 50% { opacity: 0.7 } }\";\n\t\t\t\tdocument.head.appendChild(style);\n\t\t\t}\n\t\t\tif (!document.getElementById(\"canvu-pen-active-ui-block\")) {\n\t\t\t\tconst style = document.createElement(\"style\");\n\t\t\t\tstyle.id = \"canvu-pen-active-ui-block\";\n\t\t\t\tstyle.textContent = CANVU_PEN_ACTIVE_UI_BLOCK_CSS;\n\t\t\t\tdocument.head.appendChild(style);\n\t\t\t}\n\n\t\t\tconst focusOnPointerDown = (e: PointerEvent) => {\n\t\t\t\tconst t = e.target;\n\t\t\t\tif (\n\t\t\t\t\tt instanceof HTMLTextAreaElement ||\n\t\t\t\t\tt instanceof HTMLInputElement ||\n\t\t\t\t\t(t instanceof HTMLElement && t.isContentEditable)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tel.focus({ preventScroll: true });\n\t\t\t};\n\t\t\tel.addEventListener(\"pointerdown\", focusOnPointerDown);\n\n\t\t\tconst ro = new ResizeObserver((entries) => {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tconst { inlineSize, blockSize } = entry.borderBoxSize[0] ?? {};\n\t\t\t\t\tif (inlineSize && blockSize) {\n\t\t\t\t\t\tviewportSizeRef.current = {\n\t\t\t\t\t\t\twidth: inlineSize,\n\t\t\t\t\t\t\theight: blockSize,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tro.observe(el);\n\n\t\t\treturn () => {\n\t\t\t\tel.removeEventListener(\"pointerdown\", focusOnPointerDown);\n\t\t\t\tro.disconnect();\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tconst root = wrapperRef.current;\n\t\t\tif (!root) return;\n\t\t\tconst surface =\n\t\t\t\t(root.closest(\n\t\t\t\t\t'[data-slot=\"vector-canvas-viewport-surface\"]',\n\t\t\t\t) as HTMLElement | null) ?? root;\n\t\t\tconst activePenPointerIds = new Set<number>();\n\t\t\tconst isInteractiveUiTarget = (target: EventTarget | null): boolean => {\n\t\t\t\tif (!(target instanceof HTMLElement)) return false;\n\t\t\t\tif (target.closest('[data-slot=\"shape-context-menu\"]')) return true;\n\t\t\t\tconst ui = target.closest(\n\t\t\t\t\t[\n\t\t\t\t\t\t'[data-slot=\"vector-canvas-toolbar\"]',\n\t\t\t\t\t\t'[data-slot=\"canvu-plugin-layer\"]',\n\t\t\t\t\t\t'[data-slot=\"vector-selection-inspector\"]',\n\t\t\t\t\t\t'[data-slot=\"zoom-minimap-panel\"]',\n\t\t\t\t\t\t'[data-slot=\"text-edit-overlay\"]',\n\t\t\t\t\t\t\".vector-toolbar-overflow-panel\",\n\t\t\t\t\t].join(\", \"),\n\t\t\t\t);\n\t\t\t\tif (!ui) return false;\n\t\t\t\treturn surface.contains(ui);\n\t\t\t};\n\t\t\tconst syncPenActive = () => {\n\t\t\t\tconst active = activePenPointerIds.size > 0;\n\t\t\t\tsurface.toggleAttribute(\"data-canvu-pen-active\", active);\n\t\t\t\tdocument.body.toggleAttribute(\"data-canvu-pen-active\", active);\n\t\t\t};\n\t\t\tconst onPointerDownCapture = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"pen\") return;\n\t\t\t\tpenDetectedRef.current = true;\n\t\t\t\tlastPenPointerDownAtRef.current = performance.now();\n\t\t\t\tactivePenPointerIds.add(e.pointerId);\n\t\t\t\tsyncPenActive();\n\t\t\t};\n\t\t\tconst suppressTouchUiEvent = (e: Event) => {\n\t\t\t\tif (!penDetectedRef.current) return;\n\t\t\t\tif (!isInteractiveUiTarget(e.target)) return;\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t};\n\t\t\tconst onTouchPointerCapture = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"touch\") return;\n\t\t\t\tsuppressTouchUiEvent(e);\n\t\t\t};\n\t\t\tconst onPointerEndCapture = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"pen\") return;\n\t\t\t\tactivePenPointerIds.delete(e.pointerId);\n\t\t\t\tsyncPenActive();\n\t\t\t};\n\t\t\tsurface.addEventListener(\"pointerdown\", onPointerDownCapture, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\tsurface.addEventListener(\"pointerup\", onPointerEndCapture, { capture: true });\n\t\t\tsurface.addEventListener(\"pointercancel\", onPointerEndCapture, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"pointerdown\", onTouchPointerCapture, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchstart\", suppressTouchUiEvent, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchmove\", suppressTouchUiEvent, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"selectstart\", suppressTouchUiEvent, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tsurface.removeEventListener(\"pointerdown\", onPointerDownCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tsurface.removeEventListener(\"pointerup\", onPointerEndCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tsurface.removeEventListener(\"pointercancel\", onPointerEndCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"pointerdown\", onTouchPointerCapture, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchstart\", suppressTouchUiEvent, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchmove\", suppressTouchUiEvent, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"selectstart\", suppressTouchUiEvent, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tsurface.removeAttribute(\"data-canvu-pen-active\");\n\t\t\t\tdocument.body.removeAttribute(\"data-canvu-pen-active\");\n\t\t\t};\n\t\t}, []);\n\n\t\tuseEffect(() => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tif (!el) return;\n\t\t\tif (interactive) return;\n\n\t\t\tconst onPointerDownForTools = (e: PointerEvent) => {\n\t\t\t\tif (e.button !== 0) return;\n\t\t\t\tif (toolIdRef.current === \"hand\") return;\n\t\t\t\tconst cb = onWorldPointerDownRef.current;\n\t\t\t\tif (!cb) return;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\tconst { worldX, worldY } = cam.screenToWorld(\n\t\t\t\t\te.clientX - rect.left,\n\t\t\t\t\te.clientY - rect.top,\n\t\t\t\t);\n\t\t\t\tcb({\n\t\t\t\t\tworldX,\n\t\t\t\t\tworldY,\n\t\t\t\t\ttoolId: toolIdRef.current,\n\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tel.addEventListener(\"pointerdown\", onPointerDownForTools);\n\t\t\treturn () => el.removeEventListener(\"pointerdown\", onPointerDownForTools);\n\t\t}, [interactive]);\n\n\t\tconst screenToWorld = useCallback((clientX: number, clientY: number) => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!el || !cam) return { worldX: 0, worldY: 0 };\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\treturn cam.screenToWorld(clientX - rect.left, clientY - rect.top);\n\t\t}, []);\n\n\t\tconst handleOverlayContextMenu = useCallback(\n\t\t\t(e: MouseEvent<HTMLDivElement>) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (toolIdRef.current !== \"select\") return;\n\t\t\t\te.preventDefault();\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\tconst hit = hitTestWorldPoint(resolvedItemsRef.current, worldX, worldY, {\n\t\t\t\t\tlineHitWorld,\n\t\t\t\t\tignoreLocked: true,\n\t\t\t\t});\n\t\t\t\tif (!hit) {\n\t\t\t\t\tsetContextMenu(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cur = effectiveSelectedIdsRef.current;\n\t\t\t\tlet nextIds: string[];\n\t\t\t\tif (!cur.includes(hit.id)) {\n\t\t\t\t\tnextIds = e.shiftKey ? [...cur, hit.id] : [hit.id];\n\t\t\t\t\tsetEffectiveSelectedIdsRef.current(nextIds);\n\t\t\t\t} else {\n\t\t\t\t\tnextIds = cur;\n\t\t\t\t}\n\t\t\t\tsetContextMenu({\n\t\t\t\t\tx: e.clientX,\n\t\t\t\t\ty: e.clientY,\n\t\t\t\t\titemIds: nextIds,\n\t\t\t\t});\n\t\t\t},\n\t\t\t[screenToWorld],\n\t\t);\n\n\t\tconst viewportHandle = useMemo<VectorViewportHandle>(\n\t\t\t() => ({\n\t\t\t\tgetCamera: () => cameraRef.current,\n\t\t\t\trequestRender: () => {\n\t\t\t\t\trenderFrame();\n\t\t\t\t},\n\t\t\t\tgetViewportSize: () => {\n\t\t\t\t\tconst el = sceneContainerRef.current;\n\t\t\t\t\tif (!el) {\n\t\t\t\t\t\treturn { width: 0, height: 0 };\n\t\t\t\t\t}\n\t\t\t\t\treturn { width: el.clientWidth, height: el.clientHeight };\n\t\t\t\t},\n\t\t\t\tfitWorldRect: (worldRect, options) => {\n\t\t\t\t\tconst camera = cameraRef.current;\n\t\t\t\t\tconst el = sceneContainerRef.current;\n\t\t\t\t\tif (!camera || !el) return;\n\t\t\t\t\tconst w = el.clientWidth;\n\t\t\t\t\tconst h = el.clientHeight;\n\t\t\t\t\tfitCameraToWorldRect(camera, w, h, worldRect, options?.padding ?? 0.08);\n\t\t\t\t\trenderFrame();\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[renderFrame],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tpluginViewportRef.current = viewportHandle;\n\t\t\treturn () => {\n\t\t\t\tif (pluginViewportRef.current === viewportHandle) {\n\t\t\t\t\tpluginViewportRef.current = null;\n\t\t\t\t}\n\t\t\t};\n\t\t}, [viewportHandle]);\n\n\t\tuseImperativeHandle(ref, () => viewportHandle, [viewportHandle]);\n\n\t\tconst handleZoomInClick = useCallback(() => {\n\t\t\tconst camera = cameraRef.current;\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tif (!camera || !el) return;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tcamera.setZoom(camera.zoom * VIEWPORT_ZOOM_STEP, {\n\t\t\t\tx: rect.width / 2,\n\t\t\t\ty: rect.height / 2,\n\t\t\t});\n\t\t\trenderFrame();\n\t\t}, [renderFrame]);\n\n\t\tconst handleZoomOutClick = useCallback(() => {\n\t\t\tconst camera = cameraRef.current;\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tif (!camera || !el) return;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tcamera.setZoom(camera.zoom / VIEWPORT_ZOOM_STEP, {\n\t\t\t\tx: rect.width / 2,\n\t\t\t\ty: rect.height / 2,\n\t\t\t});\n\t\t\trenderFrame();\n\t\t}, [renderFrame]);\n\n\t\tuseEffect(() => {\n\t\t\tif (toolId === \"marker\") {\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\t...strokeStyleRef.current,\n\t\t\t\t\t...MARKER_TOOL_STYLE,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst current = strokeStyleRef.current;\n\t\t\tif (isDefaultMarkerToolStyle(current)) {\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\tstroke: DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\t\tstrokeWidth: toolId === \"draw\" ? 3 : DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetCurrentStrokeStyle({\n\t\t\t\tstroke: current.stroke,\n\t\t\t\tstrokeWidth: toolId === \"draw\" ? 3 : current.strokeWidth,\n\t\t\t});\n\t\t}, [setCurrentStrokeStyle, toolId]);\n\n\t\tuseEffect(() => {\n\t\t\tconst primaryId = effectiveSelectedIds[0];\n\t\t\tif (primaryId == null) return;\n\t\t\tconst it = items.find((i) => i.id === primaryId);\n\t\t\tif (!it || it.locked) return;\n\t\t\tif (it.toolKind === \"image\") return;\n\t\t\tconst next: StrokeStyle = {\n\t\t\t\tstroke: it.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\tstrokeWidth: it.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t};\n\t\t\tif (it.strokeOpacity != null) {\n\t\t\t\tnext.strokeOpacity = it.strokeOpacity;\n\t\t\t}\n\t\t\tsetCurrentStrokeStyle(next);\n\t\t}, [effectiveSelectedIds, items, setCurrentStrokeStyle]);\n\n\t\tconst handleSelectionStyleChange = useCallback(\n\t\t\t(patch: { stroke: string; strokeWidth: number; strokeOpacity?: number }) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst ids = effectiveSelectedIdsRef.current;\n\t\t\t\tif (ids.length === 0) return;\n\t\t\t\tlet nextList: VectorSceneItem[] = [...itemsRef.current];\n\t\t\t\tfor (const id of ids) {\n\t\t\t\t\tconst it = nextList.find((i) => i.id === id);\n\t\t\t\t\tif (!it || it.locked) continue;\n\t\t\t\t\tconst next = applyStrokeToItem(it, patch);\n\t\t\t\t\tconst out =\n\t\t\t\t\t\teditingTextIdRef.current === id && next.toolKind === \"text\"\n\t\t\t\t\t\t\t? applyTextDraftWhileEditing(next, draftTextRef.current)\n\t\t\t\t\t\t\t: next;\n\t\t\t\t\tnextList = replaceItem(nextList, id, out);\n\t\t\t\t}\n\t\t\t\tchange(nextList);\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\t...strokeStyleRef.current,\n\t\t\t\t\tstroke: patch.stroke,\n\t\t\t\t\tstrokeWidth: patch.strokeWidth,\n\t\t\t\t\t...(patch.strokeOpacity != null\n\t\t\t\t\t\t? { strokeOpacity: patch.strokeOpacity }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t},\n\t\t\t[setCurrentStrokeStyle],\n\t\t);\n\n\t\tconst handleActiveToolStyleChange = useCallback(\n\t\t\t(patch: { stroke: string; strokeWidth: number; strokeOpacity?: number }) => {\n\t\t\t\tconst current = strokeStyleRef.current;\n\t\t\t\tsetCurrentStrokeStyle({\n\t\t\t\t\tstroke: patch.stroke,\n\t\t\t\t\tstrokeWidth: patch.strokeWidth,\n\t\t\t\t\t...(patch.strokeOpacity != null\n\t\t\t\t\t\t? { strokeOpacity: patch.strokeOpacity }\n\t\t\t\t\t\t: current.strokeOpacity != null\n\t\t\t\t\t\t\t? { strokeOpacity: current.strokeOpacity }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t},\n\t\t\t[setCurrentStrokeStyle],\n\t\t);\n\n\t\tconst commitTextEdit = useCallback(() => {\n\t\t\tconst id = editingTextIdRef.current;\n\t\t\tif (!id) return;\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change) return;\n\t\t\tconst text = draftTextRef.current;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst it = list.find((i) => i.id === id);\n\t\t\tif (!it || it.toolKind !== \"text\") {\n\t\t\t\tsetEditingTextId(null);\n\t\t\t\teditingTextSnapshotRef.current = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst next = rebuildItemSvg({ ...it, text });\n\t\t\tchange(replaceItem(list, id, next));\n\t\t\teditingTextSnapshotRef.current = null;\n\t\t\tsetEditingTextId(null);\n\t\t}, []);\n\n\t\tconst handleDraftTextChange = useCallback((v: string) => {\n\t\t\tsetDraftText(v);\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tconst editId = editingTextIdRef.current;\n\t\t\tif (!change || !editId) return;\n\t\t\tconst list = itemsRef.current;\n\t\t\tconst it = list.find((i) => i.id === editId);\n\t\t\tif (!it || it.toolKind !== \"text\") return;\n\t\t\tchange(replaceItem(list, editId, applyTextDraftWhileEditing(it, v)));\n\t\t}, []);\n\n\t\t/** End inline text edit when switching to a tool that places on the canvas (draw, shapes…). */\n\t\tuseEffect(() => {\n\t\t\tif (!editingTextId) return;\n\t\t\tif (toolId === \"select\" || toolId === \"text\") return;\n\t\t\tcommitTextEdit();\n\t\t}, [toolId, editingTextId, commitTextEdit]);\n\n\t\tconst cancelTextEdit = useCallback(() => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tconst id = editingTextIdRef.current;\n\t\t\tconst snap = editingTextSnapshotRef.current;\n\t\t\tif (change && id && snap) {\n\t\t\t\tchange(replaceItem(itemsRef.current, id, snap));\n\t\t\t}\n\t\t\teditingTextSnapshotRef.current = null;\n\t\t\tsetEditingTextId(null);\n\t\t}, []);\n\n\t\tconst placeImageFilesAtWorld = useCallback(\n\t\t\tasync (files: File[], worldX: number, worldY: number) => {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change || files.length === 0) return;\n\t\t\t\tconst store = imageStoreRef.current;\n\t\t\t\tif (!store) return;\n\t\t\t\tconst { buildRasterImageChildrenSvg } = await import(\n\t\t\t\t\t\"../scene/shape-builders\"\n\t\t\t\t);\n\t\t\t\tconst newItems: VectorSceneItem[] = [];\n\t\t\t\tconst gapWorld = 16;\n\t\t\t\tconst stepWorld = 48;\n\t\t\t\tlet placed = 0;\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (file.type === \"application/pdf\") {\n\t\t\t\t\t\t\t// Estimate A4 at 1.5x scale: 1241x1754\n\t\t\t\t\t\t\tconst estW = 1241;\n\t\t\t\t\t\t\tconst estH = 1754;\n\t\t\t\t\t\t\tconst estPages = 10;\n\t\t\t\t\t\t\tconst skels: {\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tx: number;\n\t\t\t\t\t\t\t\ty: number;\n\t\t\t\t\t\t\t\twidth: number;\n\t\t\t\t\t\t\t\theight: number;\n\t\t\t\t\t\t\t}[] = [];\n\t\t\t\t\t\t\tconst skelIds: string[] = [];\n\t\t\t\t\t\t\tfor (let i = 0; i < estPages; i++) {\n\t\t\t\t\t\t\t\tconst id = `skeleton-${skeletonSeqRef.current++}`;\n\t\t\t\t\t\t\t\tskelIds.push(id);\n\t\t\t\t\t\t\t\tskels.push({\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tx: worldX - estW / 2,\n\t\t\t\t\t\t\t\t\ty: worldY - estH / 2 + i * (estH + gapWorld),\n\t\t\t\t\t\t\t\t\twidth: estW,\n\t\t\t\t\t\t\t\t\theight: estH,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetLoadingSkeletons(skels);\n\n\t\t\t\t\t\t\tconst pages = await loadPdfToStore(file, store);\n\t\t\t\t\t\t\tsetLoadingSkeletons([]);\n\t\t\t\t\t\t\tfor (const page of pages) {\n\t\t\t\t\t\t\t\tconst { blobId, width, height } = page;\n\t\t\t\t\t\t\t\tconst fullUrl = await createBlobUrlFromStore(store, blobId);\n\t\t\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\t\t\tconst bounds = {\n\t\t\t\t\t\t\t\t\tx: worldX - width / 2,\n\t\t\t\t\t\t\t\t\ty: worldY - height / 2 + placed * (height + gapWorld),\n\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tnewItems.push({\n\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\tx: bounds.x,\n\t\t\t\t\t\t\t\t\ty: bounds.y,\n\t\t\t\t\t\t\t\t\tbounds: { ...bounds },\n\t\t\t\t\t\t\t\t\ttoolKind: \"image\",\n\t\t\t\t\t\t\t\t\timageBlobId: blobId,\n\t\t\t\t\t\t\t\t\timageRasterHref: fullUrl ?? undefined,\n\t\t\t\t\t\t\t\t\timageIntrinsicSize: { width, height },\n\t\t\t\t\t\t\t\t\tchildrenSvg: fullUrl\n\t\t\t\t\t\t\t\t\t\t? buildRasterImageChildrenSvg(fullUrl, { width, height }, bounds)\n\t\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t\t\t} as VectorSceneItem);\n\t\t\t\t\t\t\t\tplaced++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (file.type.startsWith(\"image/\")) {\n\t\t\t\t\t\t\tconst { blobId, thumbnailBlobId, width, height } =\n\t\t\t\t\t\t\t\tawait loadImageToStore(file, store);\n\t\t\t\t\t\t\tconst fullUrl = await createBlobUrlFromStore(store, blobId);\n\t\t\t\t\t\t\tconst thumbBlob = await store.getThumbnail(thumbnailBlobId);\n\t\t\t\t\t\t\tconst thumbnailHref = thumbBlob\n\t\t\t\t\t\t\t\t? URL.createObjectURL(thumbBlob)\n\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\t\tconst ox = (placed % 8) * stepWorld;\n\t\t\t\t\t\t\tconst oy = Math.floor(placed / 8) * stepWorld;\n\t\t\t\t\t\t\tconst bounds = {\n\t\t\t\t\t\t\t\tx: worldX - width / 2 + ox,\n\t\t\t\t\t\t\t\ty: worldY - height / 2 + oy,\n\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst href = thumbnailHref ?? fullUrl;\n\t\t\t\t\t\t\tnewItems.push({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tx: bounds.x,\n\t\t\t\t\t\t\t\ty: bounds.y,\n\t\t\t\t\t\t\t\tbounds: { ...bounds },\n\t\t\t\t\t\t\t\ttoolKind: \"image\",\n\t\t\t\t\t\t\t\timageBlobId: blobId,\n\t\t\t\t\t\t\t\timageThumbnailBlobId: thumbnailBlobId,\n\t\t\t\t\t\t\t\timageRasterHref: fullUrl ?? undefined,\n\t\t\t\t\t\t\t\timageThumbnailHref: thumbnailHref ?? undefined,\n\t\t\t\t\t\t\t\timageIntrinsicSize: { width, height },\n\t\t\t\t\t\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\t\t\t\t\t\thref ?? \"\",\n\t\t\t\t\t\t\t\t\t{ width, height },\n\t\t\t\t\t\t\t\t\tbounds,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t} as VectorSceneItem);\n\t\t\t\t\t\t\tplaced++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconsole.error(\"Failed to add file:\", err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newItems.length === 0) return;\n\t\t\t\tchange([...itemsRef.current, ...newItems]);\n\t\t\t\tsetEffectiveSelectedIdsRef.current(newItems.map((it) => it.id));\n\t\t\t},\n\t\t\t[],\n\t\t);\n\t\tconst handleImageFileChange = useCallback(\n\t\t\tasync (e: ChangeEvent<HTMLInputElement>) => {\n\t\t\t\tconst file = e.target.files?.[0];\n\t\t\t\te.target.value = \"\";\n\t\t\t\tconst pending = pendingImagePlacementRef.current;\n\t\t\t\tpendingImagePlacementRef.current = null;\n\t\t\t\tif (!file || !pending) return;\n\t\t\t\tawait placeImageFilesAtWorld([file], pending.worldX, pending.worldY);\n\t\t\t},\n\t\t\t[placeImageFilesAtWorld],\n\t\t);\n\t\tconst openImagePickerAtViewportCenter = useCallback(() => {\n\t\t\tconst el = sceneContainerRef.current;\n\t\t\tconst cam = cameraRef.current;\n\t\t\tconst input = imageInputRef.current;\n\t\t\tif (!el || !cam || !input) return;\n\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\tconst center = cam.screenToWorld(rect.width / 2, rect.height / 2);\n\t\t\tpendingImagePlacementRef.current = {\n\t\t\t\tworldX: center.worldX,\n\t\t\t\tworldY: center.worldY,\n\t\t\t};\n\t\t\tif (typeof input.showPicker === \"function\") {\n\t\t\t\tinput.showPicker();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tinput.click();\n\t\t}, []);\n\t\tuseEffect(() => {\n\t\t\tconst prevToolId = lastToolIdRef.current;\n\t\t\tif (\n\t\t\t\ttoolId !== \"image\" ||\n\t\t\t\tprevToolId === \"image\" ||\n\t\t\t\t!interactive ||\n\t\t\t\tonItemsChange == null\n\t\t\t) {\n\t\t\t\tlastToolIdRef.current = toolId;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\topenImagePickerAtViewportCenter();\n\t\t\trequestAutoResetTool(\"image\");\n\t\t\tlastToolIdRef.current = toolId;\n\t\t}, [\n\t\t\tinteractive,\n\t\t\tonItemsChange,\n\t\t\topenImagePickerAtViewportCenter,\n\t\t\trequestAutoResetTool,\n\t\t\ttoolId,\n\t\t]);\n\n\t\tconst handleWrapperDragOver = useCallback((e: DragEvent<HTMLDivElement>) => {\n\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\tif (!Array.from(e.dataTransfer.types).includes(\"Files\")) return;\n\t\t\te.preventDefault();\n\t\t\te.dataTransfer.dropEffect = \"copy\";\n\t\t}, []);\n\n\t\tconst handleWrapperDrop = useCallback(\n\t\t\tasync (e: DragEvent<HTMLDivElement>) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tconst fl = e.dataTransfer.files;\n\t\t\t\tif (!fl?.length) return;\n\t\t\t\te.preventDefault();\n\t\t\t\tconst files = Array.from(fl).filter(\n\t\t\t\t\t(f) => f.type.startsWith(\"image/\") || f.type === \"application/pdf\",\n\t\t\t\t);\n\t\t\t\tif (files.length === 0) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tawait placeImageFilesAtWorld(files, worldX, worldY);\n\t\t\t},\n\t\t\t[screenToWorld, placeImageFilesAtWorld],\n\t\t);\n\n\t\tconst handleOverlayDoubleClick = useCallback(\n\t\t\t(e: MouseEvent<HTMLDivElement>) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (toolIdRef.current !== \"select\") return;\n\t\t\t\te.preventDefault();\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\tconst hit = hitTestWorldPoint(resolvedItemsRef.current, worldX, worldY, {\n\t\t\t\t\tlineHitWorld,\n\t\t\t\t\tignoreLocked: true,\n\t\t\t\t});\n\t\t\t\tif (hit?.toolKind === \"text\") {\n\t\t\t\t\tconst draft = hit.text ?? \"\";\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tconst list = itemsRef.current;\n\t\t\t\t\tconst it = list.find((i) => i.id === hit.id);\n\t\t\t\t\teditingTextSnapshotRef.current =\n\t\t\t\t\t\tit != null\n\t\t\t\t\t\t\t? { ...it, bounds: { ...it.bounds } }\n\t\t\t\t\t\t\t: { ...hit, bounds: { ...hit.bounds } };\n\t\t\t\t\tsetEffectiveSelectedIdsRef.current([hit.id]);\n\t\t\t\t\tsetDraftText(draft);\n\t\t\t\t\tsetEditingTextId(hit.id);\n\t\t\t\t\tif (change && it && it.toolKind === \"text\") {\n\t\t\t\t\t\tchange(replaceItem(list, hit.id, applyTextDraftWhileEditing(it, draft)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t[screenToWorld],\n\t\t);\n\n\t\tconst handleOverlayPointerDown = useCallback(\n\t\t\t(e: ReactPointerEvent<HTMLDivElement>) => {\n\t\t\t\tlet currentDragState = dragStateRef.current;\n\t\t\t\tlet activePointerId = activeInteractionPointerIdRef.current;\n\t\t\t\tif (e.pointerType === \"pen\" || e.pointerType === \"touch\") {\n\t\t\t\t\tdebugApplePencilPointer(\"pointerdown\", {\n\t\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tpressure: e.pointerType === \"pen\" ? e.pressure : undefined,\n\t\t\t\t\t\tactivePointerId,\n\t\t\t\t\t\tdragKind: currentDragState.kind,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\te.pointerType === \"pen\" &&\n\t\t\t\t\tcurrentDragState.kind === \"stroke\" &&\n\t\t\t\t\tcurrentDragState.pointerType === \"pen\"\n\t\t\t\t) {\n\t\t\t\t\tdebugApplePencilPointer(\"pen-reentry\", {\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tpreviousPointerId: activePointerId,\n\t\t\t\t\t\tpreviousPoints: currentDragState.points.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(currentDragState);\n\t\t\t\t\tcurrentDragState = dragStateRef.current;\n\t\t\t\t\tactivePointerId = activeInteractionPointerIdRef.current;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tcurrentDragState.kind !== \"idle\" &&\n\t\t\t\t\tactivePointerId != null &&\n\t\t\t\t\tactivePointerId !== e.pointerId\n\t\t\t\t) {\n\t\t\t\t\tif (dragStateRef.current.kind !== \"idle\") {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currentDragState.kind !== \"idle\" && activePointerId == null) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (e.button !== 0) return;\n\t\t\t\tif (editingTextIdRef.current) return;\n\n\t\t\t\twrapperRef.current?.focus({ preventScroll: true });\n\t\t\t\tsetContextMenu(null);\n\n\t\t\t\tconst tool = toolIdRef.current;\n\t\t\t\tif (tool === \"hand\") return;\n\t\t\t\tif (\n\t\t\t\t\tapplePencilNav &&\n\t\t\t\t\te.pointerType === \"pen\" &&\n\t\t\t\t\tnavigator.maxTouchPoints > 0 &&\n\t\t\t\t\t(tool === \"draw\" || tool === \"marker\")\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\n\t\t\t\tconst { worldX, worldY } = screenToWorld(e.clientX, e.clientY);\n\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\tconst handleRadiusWorld = 6 / cam.zoom;\n\n\t\t\t\tconst canonical = itemsRef.current;\n\t\t\t\tconst resolved = resolvedItemsRef.current;\n\n\t\t\t\tconst bakedSnapshot = (id: string): VectorSceneItem | undefined => {\n\t\t\t\t\tconst raw = canonical.find((i) => i.id === id);\n\t\t\t\t\tif (!raw) return undefined;\n\t\t\t\t\treturn raw.toolKind === \"arrow\" && raw.arrowBind\n\t\t\t\t\t\t? bakeArrowItemToAbsolute(raw, canonical)\n\t\t\t\t\t\t: raw;\n\t\t\t\t};\n\n\t\t\t\tif (tool === \"eraser\") {\n\t\t\t\t\tdragStateRef.current = { kind: \"erase\" };\n\t\t\t\t\teraserPreviewIdsRef.current = new Set();\n\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\tsetEraserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\t\tsetEraserActive(true);\n\t\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\t\tresolved,\n\t\t\t\t\t\tworldX,\n\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlineHitWorld,\n\t\t\t\t\t\t\tignoreLocked: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tif (toErase.length > 0) {\n\t\t\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\t\t\teraserPreviewIdsRef.current.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdsRef.current));\n\t\t\t\t\t}\n\t\t\t\t\tsetEffectiveSelectedIdsRef.current([]);\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (tool === \"select\") {\n\t\t\t\t\tconst cur = effectiveSelectedIdsRef.current;\n\t\t\t\t\tconst primaryId = cur.length === 1 ? cur[0] : undefined;\n\t\t\t\t\tconst selected =\n\t\t\t\t\t\tprimaryId != null ? resolved.find((i) => i.id === primaryId) : undefined;\n\t\t\t\t\tconst showHandles =\n\t\t\t\t\t\tselected &&\n\t\t\t\t\t\tcur.length === 1 &&\n\t\t\t\t\t\t!selected.locked &&\n\t\t\t\t\t\tsupportsResizeHandles(selected) &&\n\t\t\t\t\t\ttool === \"select\";\n\n\t\t\t\t\tif (showHandles && selected) {\n\t\t\t\t\t\tconst rb = normalizeRect(selected.bounds);\n\t\t\t\t\t\tconst rot = selected.rotation ?? 0;\n\t\t\t\t\t\tconst rotateOffsetWorld = 24 / cam.zoom;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thitTestRotateHandle(\n\t\t\t\t\t\t\t\trb,\n\t\t\t\t\t\t\t\trot,\n\t\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\t\thandleRadiusWorld,\n\t\t\t\t\t\t\t\trotateOffsetWorld,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst snapSpin = bakedSnapshot(selected.id);\n\t\t\t\t\t\t\tif (!snapSpin) return;\n\t\t\t\t\t\t\tconst pivot = itemPivotWorld(selected);\n\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\tkind: \"rotate\",\n\t\t\t\t\t\t\t\tid: selected.id,\n\t\t\t\t\t\t\t\tsnapshot: snapSpin,\n\t\t\t\t\t\t\t\tpivotWorld: pivot,\n\t\t\t\t\t\t\t\tstartPointerAngleRad: Math.atan2(worldY - pivot.y, worldX - pivot.x),\n\t\t\t\t\t\t\t\tstartRotation: selected.rotation ?? 0,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hb = hitTestResizeHandle(\n\t\t\t\t\t\t\trb,\n\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\thandleRadiusWorld,\n\t\t\t\t\t\t\trot,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (hb) {\n\t\t\t\t\t\t\tconst snapRs = bakedSnapshot(selected.id);\n\t\t\t\t\t\t\tif (!snapRs) return;\n\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\tkind: \"resize\",\n\t\t\t\t\t\t\t\tid: selected.id,\n\t\t\t\t\t\t\t\thandle: hb,\n\t\t\t\t\t\t\t\tsnapshot: snapRs,\n\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\tbounds: snapRs.bounds,\n\t\t\t\t\t\t\t\t\tline: snapRs.line,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hit = hitTestWorldPoint(resolved, worldX, worldY, {\n\t\t\t\t\t\tlineHitWorld,\n\t\t\t\t\t\tignoreLocked: true,\n\t\t\t\t\t});\n\t\t\t\t\tif (hit) {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\tconst next = cur.includes(hit.id)\n\t\t\t\t\t\t\t\t? cur.filter((id) => id !== hit.id)\n\t\t\t\t\t\t\t\t: [...cur, hit.id];\n\t\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(next);\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet idsToMove: string[];\n\t\t\t\t\t\tif (!cur.includes(hit.id)) {\n\t\t\t\t\t\t\tidsToMove = [hit.id];\n\t\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(idsToMove);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tidsToMove = [...cur];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\t\tfor (const id of idsToMove) {\n\t\t\t\t\t\t\tconst snap = bakedSnapshot(id);\n\t\t\t\t\t\t\tif (snap) {\n\t\t\t\t\t\t\t\tsnapshots[id] = snap;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\tkind: \"move\",\n\t\t\t\t\t\t\tids: idsToMove,\n\t\t\t\t\t\t\tsnapshots,\n\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!e.shiftKey && cur.length > 0) {\n\t\t\t\t\t\tconst selectedArrowOrLine = cur\n\t\t\t\t\t\t\t.map((id) => resolved.find((it) => it.id === id))\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(it): it is VectorSceneItem =>\n\t\t\t\t\t\t\t\t\tit != null &&\n\t\t\t\t\t\t\t\t\t!it.locked &&\n\t\t\t\t\t\t\t\t\t(it.toolKind === \"line\" || it.toolKind === \"arrow\"),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tselectedArrowOrLine.some((it) =>\n\t\t\t\t\t\t\t\tpointInSelectedItemBounds(it, worldX, worldY),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\t\t\tfor (const id of cur) {\n\t\t\t\t\t\t\t\tconst snap = bakedSnapshot(id);\n\t\t\t\t\t\t\t\tif (snap && !snap.locked) {\n\t\t\t\t\t\t\t\t\tsnapshots[id] = snap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (Object.keys(snapshots).length > 0) {\n\t\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\t\tkind: \"move\",\n\t\t\t\t\t\t\t\t\tids: Object.keys(snapshots),\n\t\t\t\t\t\t\t\t\tsnapshots,\n\t\t\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"marquee\",\n\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\tstartScreen: { x: e.clientX, y: e.clientY },\n\t\t\t\t\t\tshiftKey: e.shiftKey,\n\t\t\t\t\t\tselectionBefore: [...cur],\n\t\t\t\t\t};\n\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\tkind: \"marquee\",\n\t\t\t\t\t\trect: rectFromCorners(\n\t\t\t\t\t\t\t{ x: worldX, y: worldY },\n\t\t\t\t\t\t\t{ x: worldX, y: worldY },\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (tool === \"draw\" || tool === \"marker\" || tool === \"laser\") {\n\t\t\t\t\tconst startPoint = pointerSampleToWorldPoint(\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t\te.clientX,\n\t\t\t\t\t\te.clientY,\n\t\t\t\t\t\te.pointerType === \"pen\" ? e.pressure : undefined,\n\t\t\t\t\t);\n\t\t\t\t\tconst directPenStroke =\n\t\t\t\t\t\te.pointerType === \"pen\" && (tool === \"draw\" || tool === \"marker\");\n\t\t\t\t\tlet itemId: string | undefined;\n\t\t\t\t\tif (directPenStroke) {\n\t\t\t\t\t\titemId = createShapeId();\n\t\t\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\t\t\titemId,\n\t\t\t\t\t\t\t[startPoint],\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (item) {\n\t\t\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\t\t...(itemId ? { itemId } : {}),\n\t\t\t\t\t};\n\t\t\t\t\tif (tool === \"laser\") {\n\t\t\t\t\t\tsetLaserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t} else if (directPenStroke) {\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (tool === \"text\" || tool === \"image\") {\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"tap\",\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\tstartScreen: { x: e.clientX, y: e.clientY },\n\t\t\t\t\t};\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst cp = customPlacementRef.current;\n\t\t\t\tif (\n\t\t\t\t\ttool === \"rect\" ||\n\t\t\t\t\ttool === \"ellipse\" ||\n\t\t\t\t\ttool === \"line\" ||\n\t\t\t\t\ttool === \"arrow\" ||\n\t\t\t\t\t(cp && tool === cp.toolId)\n\t\t\t\t) {\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"place\",\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\tstartScreen: { x: e.clientX, y: e.clientY },\n\t\t\t\t\t};\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tcaptureInteractionPointer(e.currentTarget, e.pointerId);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tapplePencilNav,\n\t\t\t\tcaptureInteractionPointer,\n\t\t\t\tfinalizeStrokeDragState,\n\t\t\t\trenderSceneWithLivePenStroke,\n\t\t\t\tscreenToWorld,\n\t\t\t],\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tif (!interactive) return;\n\t\t\tconst el = interactionRootRef.current;\n\t\t\tif (!el) return;\n\n\t\t\tconst onNativePenPointerDown = (e: PointerEvent) => {\n\t\t\t\tif (e.pointerType !== \"pen\") return;\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (e.button !== 0) return;\n\t\t\t\tif (editingTextIdRef.current) return;\n\n\t\t\t\tconst tool = toolIdRef.current;\n\t\t\t\tif (tool !== \"draw\" && tool !== \"marker\") return;\n\t\t\t\tif (applePencilNav && navigator.maxTouchPoints > 0) return;\n\n\t\t\t\tconst currentDragState = dragStateRef.current;\n\t\t\t\tif (\n\t\t\t\t\tcurrentDragState.kind === \"stroke\" &&\n\t\t\t\t\tcurrentDragState.pointerType === \"pen\"\n\t\t\t\t) {\n\t\t\t\t\tdebugApplePencilPointer(\"native-pen-reentry\", {\n\t\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\t\tpreviousPointerId: activeInteractionPointerIdRef.current,\n\t\t\t\t\t\tpreviousPoints: currentDragState.points.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(currentDragState);\n\t\t\t\t} else if (currentDragState.kind !== \"idle\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\twrapperRef.current?.focus({ preventScroll: true });\n\t\t\t\tsetContextMenu(null);\n\t\t\t\tconst startPoint = pointerSampleToWorldPoint(\n\t\t\t\t\tscreenToWorld,\n\t\t\t\t\te.clientX,\n\t\t\t\t\te.clientY,\n\t\t\t\t\te.pressure,\n\t\t\t\t);\n\t\t\t\tconst itemId = createShapeId();\n\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\titemId,\n\t\t\t\t\t[startPoint],\n\t\t\t\t\ttool,\n\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t);\n\t\t\t\tif (item) {\n\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t}\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\ttool,\n\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\titemId,\n\t\t\t\t};\n\t\t\t\tactiveInteractionPointerIdRef.current = e.pointerId;\n\t\t\t\tactiveInteractionPointerTargetRef.current = null;\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tdebugApplePencilPointer(\"native-pointerdown\", {\n\t\t\t\t\tpointerType: e.pointerType,\n\t\t\t\t\tpointerId: e.pointerId,\n\t\t\t\t\tpressure: e.pressure,\n\t\t\t\t\ttool,\n\t\t\t\t});\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t};\n\n\t\t\tel.addEventListener(\"pointerdown\", onNativePenPointerDown, {\n\t\t\t\tcapture: true,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tel.removeEventListener(\"pointerdown\", onNativePenPointerDown, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t};\n\t\t}, [\n\t\t\tapplePencilNav,\n\t\t\tfinalizeStrokeDragState,\n\t\t\tinteractive,\n\t\t\trenderSceneWithLivePenStroke,\n\t\t\tscreenToWorld,\n\t\t]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!interactive) return;\n\t\t\tconst el = interactionRootRef.current;\n\t\t\tif (!el) return;\n\n\t\t\tconst findChangedTouch = (touches: TouchList): Touch | null => {\n\t\t\t\tconst activeTouchId = activeInteractionTouchIdRef.current;\n\t\t\t\tif (activeTouchId == null) return null;\n\t\t\t\tfor (let i = 0; i < touches.length; i += 1) {\n\t\t\t\t\tconst touch = touches.item(i);\n\t\t\t\t\tif (touch?.identifier === activeTouchId) return touch;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\n\t\t\tconst findStartTouch = (touches: TouchList): Touch | null => {\n\t\t\t\tfor (let i = 0; i < touches.length; i += 1) {\n\t\t\t\t\tconst touch = touches.item(i);\n\t\t\t\t\tif (!touch) continue;\n\t\t\t\t\tif (touchKind(touch) === \"direct\") continue;\n\t\t\t\t\tif (!applePencilNav || isLikelyStylusTouch(touch)) return touch;\n\t\t\t\t\tif (penDetectedRef.current && touchPressure(touch) != null) return touch;\n\t\t\t\t\tif (\n\t\t\t\t\t\tpenDetectedRef.current &&\n\t\t\t\t\t\tperformance.now() - lastPenPointerDownAtRef.current < 750\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn touch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\n\t\t\tconst stopTouchEvent = (ev: TouchEvent) => {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopImmediatePropagation();\n\t\t\t};\n\n\t\t\tconst onTouchStart = (ev: TouchEvent) => {\n\t\t\t\tif (!interactiveRef.current || !onItemsChangeRef.current) return;\n\t\t\t\tif (editingTextIdRef.current) return;\n\t\t\t\tconst tool = toolIdRef.current;\n\t\t\t\tif (tool !== \"draw\" && tool !== \"marker\") return;\n\n\t\t\t\tconst touch = findStartTouch(ev.changedTouches);\n\t\t\t\tif (!touch) return;\n\n\t\t\t\tconst currentDragState = dragStateRef.current;\n\t\t\t\tif (\n\t\t\t\t\tcurrentDragState.kind === \"stroke\" &&\n\t\t\t\t\tcurrentDragState.pointerType === \"pen\"\n\t\t\t\t) {\n\t\t\t\t\tdebugApplePencilPointer(\"touch-pen-reentry\", {\n\t\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\t\tpreviousPoints: currentDragState.points.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(currentDragState);\n\t\t\t\t} else if (currentDragState.kind !== \"idle\") {\n\t\t\t\t\tstopTouchEvent(ev);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\twrapperRef.current?.focus({ preventScroll: true });\n\t\t\t\tsetContextMenu(null);\n\t\t\t\tpenDetectedRef.current = true;\n\n\t\t\t\tconst startPoint = pointerSampleToWorldPoint(\n\t\t\t\t\tscreenToWorld,\n\t\t\t\t\ttouch.clientX,\n\t\t\t\t\ttouch.clientY,\n\t\t\t\t\ttouchPressure(touch),\n\t\t\t\t);\n\t\t\t\tconst itemId = createShapeId();\n\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\titemId,\n\t\t\t\t\t[startPoint],\n\t\t\t\t\ttool,\n\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t);\n\t\t\t\tif (item) {\n\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t}\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\ttool,\n\t\t\t\t\tpoints: [startPoint],\n\t\t\t\t\tpointerType: \"pen\",\n\t\t\t\t\titemId,\n\t\t\t\t};\n\t\t\t\tactiveInteractionPointerIdRef.current = null;\n\t\t\t\tactiveInteractionPointerTargetRef.current = null;\n\t\t\t\tactiveInteractionTouchIdRef.current = touch.identifier;\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tdebugApplePencilPointer(\"touchstart-stroke\", {\n\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\ttouchType: touchKind(touch),\n\t\t\t\t\tforce: touchPressure(touch),\n\t\t\t\t\ttool,\n\t\t\t\t});\n\t\t\t\tstopTouchEvent(ev);\n\t\t\t};\n\n\t\t\tconst onTouchMove = (ev: TouchEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tif (st.kind !== \"stroke\") return;\n\t\t\t\tconst touch = findChangedTouch(ev.changedTouches);\n\t\t\t\tif (!touch) return;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\n\t\t\t\tconst interpolated = appendTouchToStrokePoints(\n\t\t\t\t\tst.points,\n\t\t\t\t\ttouch,\n\t\t\t\t\tcam.zoom,\n\t\t\t\t\tscreenToWorld,\n\t\t\t\t);\n\t\t\t\tst.points = interpolated;\n\t\t\t\tif (st.itemId && st.tool !== \"laser\") {\n\t\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\t\tst.itemId,\n\t\t\t\t\t\tinterpolated,\n\t\t\t\t\t\tst.tool,\n\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t);\n\t\t\t\t\tif (item) {\n\t\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t\t}\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t}\n\t\t\t\tdebugApplePencilPointer(\"touchmove-stroke\", {\n\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\tpoints: interpolated.length,\n\t\t\t\t\tforce: touchPressure(touch),\n\t\t\t\t});\n\t\t\t\tstopTouchEvent(ev);\n\t\t\t};\n\n\t\t\tconst onTouchEnd = (ev: TouchEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tif (st.kind !== \"stroke\") return;\n\t\t\t\tconst touch = findChangedTouch(ev.changedTouches);\n\t\t\t\tif (!touch) return;\n\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (cam) {\n\t\t\t\t\tconst completedPoints = appendTouchToStrokePoints(\n\t\t\t\t\t\tst.points,\n\t\t\t\t\t\ttouch,\n\t\t\t\t\t\tcam.zoom,\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t);\n\t\t\t\t\tst.points = completedPoints;\n\t\t\t\t}\n\t\t\t\tdebugApplePencilPointer(\"touchend-stroke\", {\n\t\t\t\t\ttouchId: touch.identifier,\n\t\t\t\t\tpoints: st.points.length,\n\t\t\t\t});\n\t\t\t\tfinalizeStrokeDragState(st);\n\t\t\t\tstopTouchEvent(ev);\n\t\t\t};\n\n\t\t\tel.addEventListener(\"touchstart\", onTouchStart, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchmove\", onTouchMove, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchend\", onTouchEnd, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\tdocument.addEventListener(\"touchcancel\", onTouchEnd, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t\treturn () => {\n\t\t\t\tel.removeEventListener(\"touchstart\", onTouchStart, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchmove\", onTouchMove, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchend\", onTouchEnd, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t\tdocument.removeEventListener(\"touchcancel\", onTouchEnd, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t});\n\t\t\t};\n\t\t}, [\n\t\t\tapplePencilNav,\n\t\t\tfinalizeStrokeDragState,\n\t\t\tinteractive,\n\t\t\trenderSceneWithLivePenStroke,\n\t\t\tscreenToWorld,\n\t\t]);\n\n\t\tuseEffect(() => {\n\t\t\tif (!interactive) return;\n\n\t\t\tconst onMove = (ev: PointerEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam || st.kind === \"idle\") return;\n\t\t\t\tif (activeInteractionPointerIdRef.current !== ev.pointerId) return;\n\n\t\t\t\t/* Tap placement (draw/text/image): validate on pointerup only — early move\n\t\t\t\t * cancellation caused false negatives from tiny pointer jitter on trackpads. */\n\t\t\t\tif (st.kind === \"tap\") return;\n\n\t\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst raw = rectFromCorners(st.startWorld, { x: worldX, y: worldY });\n\t\t\t\t\tsetPlacementPreview({ kind: \"marquee\", rect: raw });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"stroke\") {\n\t\t\t\t\tif (ev.pointerType === \"pen\" || ev.pointerType === \"touch\") {\n\t\t\t\t\t\tdebugApplePencilPointer(\"pointermove\", {\n\t\t\t\t\t\t\tpointerType: ev.pointerType,\n\t\t\t\t\t\t\tpointerId: ev.pointerId,\n\t\t\t\t\t\t\tpointsBefore: st.points.length,\n\t\t\t\t\t\t\tpressure: ev.pointerType === \"pen\" ? ev.pressure : undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst interpolated = appendPointerEventSamplesToStrokePoints(\n\t\t\t\t\t\tst.points,\n\t\t\t\t\t\tev,\n\t\t\t\t\t\tcam.zoom,\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t);\n\t\t\t\t\tst.points = interpolated;\n\t\t\t\t\tif (st.itemId && st.pointerType === \"pen\" && st.tool !== \"laser\") {\n\t\t\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\t\t\tst.itemId,\n\t\t\t\t\t\t\tinterpolated,\n\t\t\t\t\t\t\tst.tool,\n\t\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (item) {\n\t\t\t\t\t\t\trenderSceneWithLivePenStroke(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (st.tool === \"laser\") {\n\t\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\t\tsetLaserTrail((prev) =>\n\t\t\t\t\t\t\tpruneLaserTrail([\n\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t...interpolated\n\t\t\t\t\t\t\t\t\t.slice(Math.max(0, interpolated.length - 3))\n\t\t\t\t\t\t\t\t\t.map((p) => ({\n\t\t\t\t\t\t\t\t\t\tx: p.x,\n\t\t\t\t\t\t\t\t\t\ty: p.y,\n\t\t\t\t\t\t\t\t\t\tt: now,\n\t\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\t\ttool: st.tool,\n\t\t\t\t\t\t\tpoints: interpolated,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst lineHitWorld = 10 / cam.zoom;\n\t\t\t\t\tsetEraserTrail((prev) =>\n\t\t\t\t\t\tpruneEraserTrail([...prev, { x: worldX, y: worldY, t: Date.now() }]),\n\t\t\t\t\t);\n\t\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\t\tresolvedItemsRef.current,\n\t\t\t\t\t\tworldX,\n\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlineHitWorld,\n\t\t\t\t\t\t\tignoreLocked: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tif (toErase.length > 0) {\n\t\t\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\t\t\teraserPreviewIdsRef.current.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdsRef.current));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst list = itemsRef.current;\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\n\t\t\t\tif (st.kind === \"move\") {\n\t\t\t\t\tconst dx = worldX - st.startWorld.x;\n\t\t\t\t\tconst dy = worldY - st.startWorld.y;\n\t\t\t\t\tlet nextList: VectorSceneItem[] = [...list];\n\t\t\t\t\tfor (const id of st.ids) {\n\t\t\t\t\t\tconst snap = st.snapshots[id];\n\t\t\t\t\t\tif (!snap) continue;\n\t\t\t\t\t\tconst next = moveItemByDelta(snap, dx, dy);\n\t\t\t\t\t\tnextList = replaceItem(nextList, id, next);\n\t\t\t\t\t}\n\t\t\t\t\tchange(nextList);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"rotate\") {\n\t\t\t\t\tconst p = st.pivotWorld;\n\t\t\t\t\tconst angle = Math.atan2(worldY - p.y, worldX - p.x);\n\t\t\t\t\tconst next = applyRotationFromPointer(\n\t\t\t\t\t\tst.snapshot,\n\t\t\t\t\t\tst.startRotation,\n\t\t\t\t\t\tst.startPointerAngleRad,\n\t\t\t\t\t\tangle,\n\t\t\t\t\t);\n\t\t\t\t\tchange(replaceItem(list, st.id, next));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"resize\") {\n\t\t\t\t\tconst next = resizeItemByHandle(st.snapshot, st.start, st.handle, {\n\t\t\t\t\t\tx: worldX,\n\t\t\t\t\t\ty: worldY,\n\t\t\t\t\t});\n\t\t\t\t\tchange(replaceItem(list, st.id, next));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"place\") {\n\t\t\t\t\tconst a = st.startWorld;\n\t\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\t\tconst cp = customPlacementRef.current;\n\t\t\t\t\tif (st.tool === \"rect\") {\n\t\t\t\t\t\tsetPlacementPreview({ kind: \"rect\", rect: rectFromCorners(a, b) });\n\t\t\t\t\t} else if (st.tool === \"ellipse\") {\n\t\t\t\t\t\tsetPlacementPreview({ kind: \"ellipse\", rect: rectFromCorners(a, b) });\n\t\t\t\t\t} else if (st.tool === \"line\") {\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"line\",\n\t\t\t\t\t\t\tstart: a,\n\t\t\t\t\t\t\tend: b,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (st.tool === \"arrow\") {\n\t\t\t\t\t\tconst maxDist = ARROW_BIND_SNAP_PX / cam.zoom;\n\t\t\t\t\t\tconst exclude = new Set<string>();\n\t\t\t\t\t\tconst snapA = snapArrowEndpointToShape(\n\t\t\t\t\t\t\ta.x,\n\t\t\t\t\t\t\ta.y,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst snapB = snapArrowEndpointToShape(\n\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst startW = snapA ? snapA.world : a;\n\t\t\t\t\t\tconst endW = snapB ? snapB.world : { x: worldX, y: worldY };\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"arrow\",\n\t\t\t\t\t\t\tstart: startW,\n\t\t\t\t\t\t\tend: endW,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (cp && st.tool === cp.toolId) {\n\t\t\t\t\t\tsetPlacementPreview({ kind: \"rect\", rect: rectFromCorners(a, b) });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onUp = (ev: PointerEvent) => {\n\t\t\t\tconst st = dragStateRef.current;\n\t\t\t\tif (ev.pointerType === \"pen\" || ev.pointerType === \"touch\") {\n\t\t\t\t\tdebugApplePencilPointer(\"pointerup\", {\n\t\t\t\t\t\tpointerType: ev.pointerType,\n\t\t\t\t\t\tpointerId: ev.pointerId,\n\t\t\t\t\t\tdragKind: st.kind,\n\t\t\t\t\t\tactivePointerId: activeInteractionPointerIdRef.current,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tst.kind !== \"idle\" &&\n\t\t\t\t\tactiveInteractionPointerIdRef.current !== ev.pointerId\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) {\n\t\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\t\teraserPreviewIdsRef.current.clear();\n\t\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\t\tsetEraserTrail([]);\n\t\t\t\t\t\tsetEraserActive(false);\n\t\t\t\t\t}\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"move\" || st.kind === \"resize\" || st.kind === \"rotate\") {\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst raw = rectFromCorners(st.startWorld, { x: worldX, y: worldY });\n\t\t\t\t\tconst br = normalizeRect(raw);\n\t\t\t\t\tconst screenDx = ev.clientX - st.startScreen.x;\n\t\t\t\t\tconst screenDy = ev.clientY - st.startScreen.y;\n\t\t\t\t\tconst tooSmall =\n\t\t\t\t\t\tMath.hypot(screenDx, screenDy) < TAP_PX ||\n\t\t\t\t\t\t(br.width < MIN_MARQUEE_WORLD && br.height < MIN_MARQUEE_WORLD);\n\t\t\t\t\tif (tooSmall) {\n\t\t\t\t\t\tif (!st.shiftKey) {\n\t\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst picked = collectItemIdsInRect(resolvedItemsRef.current, br);\n\t\t\t\t\tif (st.shiftKey) {\n\t\t\t\t\t\tconst seen = new Set(st.selectionBefore);\n\t\t\t\t\t\tconst merged = [...st.selectionBefore];\n\t\t\t\t\t\tfor (const id of picked) {\n\t\t\t\t\t\t\tif (!seen.has(id)) {\n\t\t\t\t\t\t\t\tseen.add(id);\n\t\t\t\t\t\t\t\tmerged.push(id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(merged);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current(picked);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"stroke\") {\n\t\t\t\t\tconst completedPoints = appendPointerEventSamplesToStrokePoints(\n\t\t\t\t\t\tst.points,\n\t\t\t\t\t\tev,\n\t\t\t\t\t\tcam.zoom,\n\t\t\t\t\t\tscreenToWorld,\n\t\t\t\t\t);\n\t\t\t\t\tst.points = completedPoints;\n\t\t\t\t\tdebugApplePencilPointer(\"pointerup-stroke-points\", {\n\t\t\t\t\t\tpointerType: ev.pointerType,\n\t\t\t\t\t\tpointerId: ev.pointerId,\n\t\t\t\t\t\tpointsAfterUp: completedPoints.length,\n\t\t\t\t\t});\n\t\t\t\t\tfinalizeStrokeDragState(st);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tif (change && eraserPreviewIdsRef.current.size > 0) {\n\t\t\t\t\t\tconst idSet = new Set(eraserPreviewIdsRef.current);\n\t\t\t\t\t\tchange(itemsRef.current.filter((i) => !idSet.has(i.id)));\n\t\t\t\t\t}\n\t\t\t\t\teraserPreviewIdsRef.current.clear();\n\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\tsetEraserTrail([]);\n\t\t\t\t\tsetEraserActive(false);\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\trequestAutoResetTool(\"eraser\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"tap\") {\n\t\t\t\t\tconst dx = ev.clientX - st.startScreen.x;\n\t\t\t\t\tconst dy = ev.clientY - st.startScreen.y;\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tif (Math.hypot(dx, dy) > TAP_PX) return;\n\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tif (!change) return;\n\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\tconst { x: worldX, y: worldY } = st.startWorld;\n\t\t\t\t\tif (st.tool === \"text\") {\n\t\t\t\t\t\tconst newItem = createTextItem(\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tx: worldX - 4,\n\t\t\t\t\t\t\t\ty: worldY - 24,\n\t\t\t\t\t\t\t\twidth: 160,\n\t\t\t\t\t\t\t\theight: 36,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t);\n\t\t\t\t\t\teditingTextSnapshotRef.current = {\n\t\t\t\t\t\t\t...newItem,\n\t\t\t\t\t\t\tbounds: { ...newItem.bounds },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst hidden = applyTextDraftWhileEditing(newItem, \"\");\n\t\t\t\t\t\tchange([...itemsRef.current, hidden]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t\tsetEditingTextId(id);\n\t\t\t\t\t\tsetDraftText(\"\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpendingImagePlacementRef.current = { worldX, worldY };\n\t\t\t\t\t\timageInputRef.current?.click();\n\t\t\t\t\t}\n\t\t\t\t\trequestAutoResetTool(st.tool);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (st.kind === \"place\") {\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(ev.clientX, ev.clientY);\n\t\t\t\t\tconst a = st.startWorld;\n\t\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\treleaseInteractionPointer();\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tif (!change) return;\n\n\t\t\t\t\tif (st.tool === \"arrow\") {\n\t\t\t\t\t\tconst screenDx = ev.clientX - st.startScreen.x;\n\t\t\t\t\t\tconst screenDy = ev.clientY - st.startScreen.y;\n\t\t\t\t\t\tif (Math.hypot(screenDx, screenDy) < MIN_ARROW_DRAG_PX) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst maxDist = ARROW_BIND_SNAP_PX / cam.zoom;\n\t\t\t\t\t\tconst exclude = new Set<string>();\n\t\t\t\t\t\tconst snapA = snapArrowEndpointToShape(\n\t\t\t\t\t\t\ta.x,\n\t\t\t\t\t\t\ta.y,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst snapB = snapArrowEndpointToShape(\n\t\t\t\t\t\t\tb.x,\n\t\t\t\t\t\t\tb.y,\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\texclude,\n\t\t\t\t\t\t\tmaxDist,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst startW = snapA ? snapA.world : a;\n\t\t\t\t\t\tconst endW = snapB ? snapB.world : b;\n\t\t\t\t\t\tconst rawArrow = rectFromCorners(startW, endW);\n\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\tconst pen = strokeStyleRef.current;\n\t\t\t\t\t\tconst line = lineEndpointsToLocal(rawArrow, startW, endW);\n\t\t\t\t\t\tlet arrowBind: ArrowBindings | undefined;\n\t\t\t\t\t\tif (snapA || snapB) {\n\t\t\t\t\t\t\tarrowBind = {\n\t\t\t\t\t\t\t\t...(snapA ? { start: snapA.binding } : {}),\n\t\t\t\t\t\t\t\t...(snapB ? { end: snapB.binding } : {}),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchange([\n\t\t\t\t\t\t\t...itemsRef.current,\n\t\t\t\t\t\t\tcreateLineItem(id, rawArrow, line, \"arrow\", pen, arrowBind),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet raw = rectFromCorners(a, b);\n\t\t\t\t\tlet br = normalizeRect(raw);\n\t\t\t\t\tlet lineA = a;\n\t\t\t\t\tlet lineB = b;\n\n\t\t\t\t\tconst cpUp = customPlacementRef.current;\n\t\t\t\t\tif (br.width < MIN_PLACE_SIZE || br.height < MIN_PLACE_SIZE) {\n\t\t\t\t\t\tconst center = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n\t\t\t\t\t\tif (cpUp && st.tool === cpUp.toolId) {\n\t\t\t\t\t\t\traw = { x: center.x - 60, y: center.y - 40, width: 120, height: 80 };\n\t\t\t\t\t\t\tbr = normalizeRect(raw);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst def = defaultPlacementWorld(st.tool, center);\n\t\t\t\t\t\t\traw = def.raw;\n\t\t\t\t\t\t\tbr = normalizeRect(raw);\n\t\t\t\t\t\t\tif (def.lineWorld) {\n\t\t\t\t\t\t\t\tlineA = def.lineWorld[0];\n\t\t\t\t\t\t\t\tlineB = def.lineWorld[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\tconst pen = strokeStyleRef.current;\n\t\t\t\t\tif (cpUp && st.tool === cpUp.toolId) {\n\t\t\t\t\t\tchange(itemsRef.current.concat(cpUp.createItem({ id, bounds: br })));\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (st.tool === \"rect\") {\n\t\t\t\t\t\tchange([...itemsRef.current, createRectangleItem(id, raw, pen)]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t} else if (st.tool === \"ellipse\") {\n\t\t\t\t\t\tchange([...itemsRef.current, createEllipseItem(id, raw, pen)]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t} else if (st.tool === \"line\" || st.tool === \"arrow\") {\n\t\t\t\t\t\tconst line = lineEndpointsToLocal(raw, lineA, lineB);\n\t\t\t\t\t\tchange([\n\t\t\t\t\t\t\t...itemsRef.current,\n\t\t\t\t\t\t\tcreateLineItem(\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\traw,\n\t\t\t\t\t\t\t\tline,\n\t\t\t\t\t\t\t\tst.tool === \"arrow\" ? \"arrow\" : \"line\",\n\t\t\t\t\t\t\t\tpen,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tsetEffectiveSelectedIdsRef.current([id]);\n\t\t\t\t\t}\n\t\t\t\t\trequestAutoResetTool(st.tool);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.addEventListener(\"pointermove\", onMove);\n\t\t\tdocument.addEventListener(\"pointerup\", onUp);\n\t\t\tdocument.addEventListener(\"pointercancel\", onUp);\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener(\"pointermove\", onMove);\n\t\t\t\tdocument.removeEventListener(\"pointerup\", onUp);\n\t\t\t\tdocument.removeEventListener(\"pointercancel\", onUp);\n\t\t\t};\n\t\t}, [\n\t\t\tinteractive,\n\t\t\tpruneEraserTrail,\n\t\t\tpruneLaserTrail,\n\t\t\tfinalizeStrokeDragState,\n\t\t\trenderSceneWithLivePenStroke,\n\t\t\treleaseInteractionPointer,\n\t\t\trequestAutoResetTool,\n\t\t\tscreenToWorld,\n\t\t]);\n\n\t\tconst selectedItemsForOverlay = useMemo(() => {\n\t\t\treturn effectiveSelectedIds\n\t\t\t\t.map((id) => resolvedItems.find((i) => i.id === id))\n\t\t\t\t.filter((i): i is VectorSceneItem => i != null);\n\t\t}, [effectiveSelectedIds, resolvedItems]);\n\t\tconst activeToolInspectorStyle = useMemo(() => {\n\t\t\tif (toolId !== \"draw\") return undefined;\n\t\t\treturn {\n\t\t\t\ttoolKind: \"draw\" as const,\n\t\t\t\tlabel: \"Estilo da ferramenta\",\n\t\t\t\t...strokeStyleState,\n\t\t\t};\n\t\t}, [strokeStyleState, toolId]);\n\t\tconst eraserPreviewItemsForOverlay = useMemo(() => {\n\t\t\treturn eraserPreviewIds\n\t\t\t\t.map((id) => resolvedItems.find((i) => i.id === id))\n\t\t\t\t.filter((i): i is VectorSceneItem => i != null);\n\t\t}, [eraserPreviewIds, resolvedItems]);\n\n\t\tconst presenceLayer = useMemo(() => {\n\t\t\tif (!cameraForOverlay) return null;\n\t\t\tif (presenceOverlay) {\n\t\t\t\treturn presenceOverlay({\n\t\t\t\t\tcamera: cameraForOverlay,\n\t\t\t\t\tcameraVersion: cameraTick,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (remotePresence && remotePresence.length > 0) {\n\t\t\t\treturn (\n\t\t\t\t\t<PresenceRemoteLayer\n\t\t\t\t\t\tcamera={cameraForOverlay}\n\t\t\t\t\t\tcameraVersion={cameraTick}\n\t\t\t\t\t\tpeers={remotePresence}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}, [cameraForOverlay, cameraTick, presenceOverlay, remotePresence]);\n\n\t\tconst primarySelected =\n\t\t\teffectiveSelectedIds.length === 1\n\t\t\t\t? (resolvedItems.find((i) => i.id === effectiveSelectedIds[0]) ?? null)\n\t\t\t\t: null;\n\n\t\tconst editingTextItem = editingTextId\n\t\t\t? (items.find((i) => i.id === editingTextId && i.toolKind === \"text\") ?? null)\n\t\t\t: null;\n\t\tconst showResizeHandles =\n\t\t\ttoolId === \"select\" &&\n\t\t\t!!primarySelected &&\n\t\t\t!primarySelected.locked &&\n\t\t\tsupportsResizeHandles(primarySelected);\n\n\t\tconst overlayPointerEvents: \"none\" | \"auto\" =\n\t\t\tinteractive && toolId !== \"hand\" ? \"auto\" : \"none\";\n\n\t\tconst viewportCursor =\n\t\t\tcustomPlacement?.toolId === toolId\n\t\t\t\t? \"crosshair\"\n\t\t\t\t: cursorForVectorToolId(toolId);\n\n\t\tconst rootStyle: CSSProperties = {\n\t\t\tposition: \"relative\",\n\t\t\twidth: \"100%\",\n\t\t\theight: \"100%\",\n\t\t\tminHeight: 0,\n\t\t\toutline: \"none\",\n\t\t\tcursor: viewportCursor,\n\t\t\tuserSelect: \"none\",\n\t\t\tWebkitUserSelect: \"none\",\n\t\t\tWebkitTouchCallout: \"none\",\n\t\t};\n\n\t\tconst canEditSelection = interactive && !!onItemsChange;\n\t\tconst chromeContextValue: CanvuChromeContextValue = {\n\t\t\tcamera: cameraForOverlay,\n\t\t\tviewportWidth: viewportSizeRef.current.width,\n\t\t\tviewportHeight: viewportSizeRef.current.height,\n\t\t\titems,\n\t\t\tselectedItems: selectedItemsForOverlay,\n\t\t\tinteractive,\n\t\t\tcanEditSelection,\n\t\t\tactiveToolStyle: activeToolInspectorStyle ?? null,\n\t\t\tonSelectionStyleChange: canEditSelection\n\t\t\t\t? activeToolInspectorStyle\n\t\t\t\t\t? handleActiveToolStyleChange\n\t\t\t\t\t: handleSelectionStyleChange\n\t\t\t\t: null,\n\t\t\tzoomPercent,\n\t\t\tonZoomIn: handleZoomInClick,\n\t\t\tonZoomOut: handleZoomOutClick,\n\t\t\tonUndo: undo,\n\t\t\tonRedo: redo,\n\t\t\tcanUndo,\n\t\t\tcanRedo,\n\t\t\tonRequestRender: renderFrame,\n\t\t};\n\n\t\tconst defaultSelectionInspector =\n\t\t\tcameraForOverlay && canEditSelection ? (\n\t\t\t\t<VectorSelectionInspector\n\t\t\t\t\tclassName={selectionInspectorProps?.className}\n\t\t\t\t\tstyle={selectionInspectorProps?.style}\n\t\t\t\t/>\n\t\t\t) : null;\n\t\tconst defaultNavMenu = cameraForOverlay ? <NavMenu /> : null;\n\n\t\tconst resolvedSelectionInspector =\n\t\t\tselectionInspector === undefined\n\t\t\t\t? defaultSelectionInspector\n\t\t\t\t: selectionInspector;\n\t\tconst resolvedNavMenu = navMenu === undefined ? defaultNavMenu : navMenu;\n\n\t\treturn (\n\t\t\t<CanvuPluginContext.Provider value={pluginContextValue}>\n\t\t\t\t<CanvuChromeContext.Provider value={chromeContextValue}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={wrapperRef}\n\t\t\t\t\t\tstyle={rootStyle}\n\t\t\t\t\t\trole=\"application\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-describedby={liveId}\n\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t\tonDragOver={handleWrapperDragOver}\n\t\t\t\t\t\tonDrop={handleWrapperDrop}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={interactionRootRef}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\tzIndex: 0,\n\t\t\t\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tref={sceneContainerRef}\n\t\t\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\tzIndex: 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{loadingSkeletons.length > 0 && cameraForOverlay && (\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\t\tzIndex: 1,\n\t\t\t\t\t\t\t\t\t\tpointerEvents: \"none\",\n\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\t\theight: \"100%\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<g transform={formatCameraTransform(cameraForOverlay)}>\n\t\t\t\t\t\t\t\t\t\t{loadingSkeletons.map((sk) => (\n\t\t\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\t\t\tkey={sk.id}\n\t\t\t\t\t\t\t\t\t\t\t\tx={sk.x}\n\t\t\t\t\t\t\t\t\t\t\t\ty={sk.y}\n\t\t\t\t\t\t\t\t\t\t\t\twidth={sk.width}\n\t\t\t\t\t\t\t\t\t\t\t\theight={sk.height}\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"#f4f4f5\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"#d4d4d8\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1 / cameraForOverlay.zoom}\n\t\t\t\t\t\t\t\t\t\t\t\trx={2 / cameraForOverlay.zoom}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tanimation: \"canvu-pulse 1.5s ease-in-out infinite\",\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{presenceLayer}\n\t\t\t\t\t\t\t{cameraForOverlay && interactive && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<InteractionOverlay\n\t\t\t\t\t\t\t\t\t\tcamera={cameraForOverlay}\n\t\t\t\t\t\t\t\t\t\tcameraVersion={cameraTick}\n\t\t\t\t\t\t\t\t\t\tselectedItems={selectedItemsForOverlay}\n\t\t\t\t\t\t\t\t\t\tshowResizeHandles={showResizeHandles}\n\t\t\t\t\t\t\t\t\t\tplacementPreview={placementPreview}\n\t\t\t\t\t\t\t\t\t\teraserTrail={eraserTrail}\n\t\t\t\t\t\t\t\t\t\tlaserTrail={laserTrail}\n\t\t\t\t\t\t\t\t\t\teraserPreviewItems={eraserPreviewItemsForOverlay}\n\t\t\t\t\t\t\t\t\t\tpreviewStrokeStyle={strokeStyleRef.current}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\t\t\t\t\t\tzIndex: 12,\n\t\t\t\t\t\t\t\t\t\t\ttouchAction: \"none\",\n\t\t\t\t\t\t\t\t\t\t\tpointerEvents: overlayPointerEvents,\n\t\t\t\t\t\t\t\t\t\t\tcursor: viewportCursor,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tonPointerDown={handleOverlayPointerDown}\n\t\t\t\t\t\t\t\t\t\tonContextMenu={handleOverlayContextMenu}\n\t\t\t\t\t\t\t\t\t\tonDoubleClick={handleOverlayDoubleClick}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tref={imageInputRef}\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept=\"image/*,application/pdf\"\n\t\t\t\t\t\t\tstyle={{ display: \"none\" }}\n\t\t\t\t\t\t\taria-label=\"Select image or PDF to place on canvas\"\n\t\t\t\t\t\t\tonChange={handleImageFileChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t\t{plugins.length > 0 ? (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tdata-slot=\"canvu-plugin-layer\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\t\tzIndex: 40,\n\t\t\t\t\t\t\t\t\tpointerEvents: \"none\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<VectorViewportPluginInstances\n\t\t\t\t\t\t\t\t\tplugins={plugins}\n\t\t\t\t\t\t\t\t\trenderContext={pluginRenderContext}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t{cameraForOverlay && interactive && editingTextItem && (\n\t\t\t\t\t\t\t<TextEditOverlay\n\t\t\t\t\t\t\t\tcamera={cameraForOverlay}\n\t\t\t\t\t\t\t\tcameraVersion={cameraTick}\n\t\t\t\t\t\t\t\titem={editingTextItem}\n\t\t\t\t\t\t\t\tdraftText={draftText}\n\t\t\t\t\t\t\t\tonDraftChange={handleDraftTextChange}\n\t\t\t\t\t\t\t\tonCommit={commitTextEdit}\n\t\t\t\t\t\t\t\tonCancel={cancelTextEdit}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{resolvedSelectionInspector}\n\t\t\t\t\t\t{interactive && onItemsChange && contextMenu && (\n\t\t\t\t\t\t\t<ShapeContextMenu\n\t\t\t\t\t\t\t\tx={contextMenu.x}\n\t\t\t\t\t\t\t\ty={contextMenu.y}\n\t\t\t\t\t\t\t\tallSelectedLocked={\n\t\t\t\t\t\t\t\t\tcontextMenu.itemIds.length > 0 &&\n\t\t\t\t\t\t\t\t\tcontextMenu.itemIds.every(\n\t\t\t\t\t\t\t\t\t\t(id) => items.find((i) => i.id === id)?.locked,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tonClose={() => setContextMenu(null)}\n\t\t\t\t\t\t\t\tonToggleLock={() => {\n\t\t\t\t\t\t\t\t\tconst ids = contextMenu.itemIds;\n\t\t\t\t\t\t\t\t\tconst allLocked =\n\t\t\t\t\t\t\t\t\t\tids.length > 0 &&\n\t\t\t\t\t\t\t\t\t\tids.every((id) => items.find((i) => i.id === id)?.locked);\n\t\t\t\t\t\t\t\t\tsetLockedOnIds(ids, !allLocked);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonCut={() => cutIds(contextMenu.itemIds)}\n\t\t\t\t\t\t\t\tonCopy={() => copyIdsToInternalClipboard(contextMenu.itemIds)}\n\t\t\t\t\t\t\t\tonBringToFront={() => reorderIds(contextMenu.itemIds, \"front\")}\n\t\t\t\t\t\t\t\tonBringForward={() => reorderIds(contextMenu.itemIds, \"forward\")}\n\t\t\t\t\t\t\t\tonSendBackward={() => reorderIds(contextMenu.itemIds, \"backward\")}\n\t\t\t\t\t\t\t\tonSendToBack={() => reorderIds(contextMenu.itemIds, \"back\")}\n\t\t\t\t\t\t\t\tonDuplicate={() => duplicateIds(contextMenu.itemIds)}\n\t\t\t\t\t\t\t\tonDelete={() => deleteIds(contextMenu.itemIds)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{resolvedNavMenu}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tid={liveId}\n\t\t\t\t\t\t\tstyle={visuallyHidden}\n\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\taria-atomic=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{`Zoom ${zoomPercent} percent.`}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</CanvuChromeContext.Provider>\n\t\t\t</CanvuPluginContext.Provider>\n\t\t);\n\t},\n);\n\nVectorViewport.displayName = \"VectorViewport\";\n\nexport { cursorForVectorToolId };\n","import type { Camera2D } from \"../camera/camera\";\nimport { normalizeRect } from \"../math/rect\";\nimport { cullItemsByViewport } from \"../scene/cull\";\nimport type { VectorScene } from \"../scene/scene\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\n/**\n * Builds the SVG `transform` attribute for mapping world coordinates to viewport CSS pixels.\n */\nexport function formatCameraTransform(camera: Camera2D): string {\n\tconst z = camera.zoom;\n\treturn `matrix(${z}, 0, 0, ${z}, ${camera.x}, ${camera.y})`;\n}\n\n/**\n * Transform for item `<g>`: `translate(x,y)` plus optional rotation around the bounds center.\n * SVG `rotate` uses degrees.\n */\nexport function formatItemPlacementTransform(item: VectorSceneItem): string {\n\tconst r = normalizeRect(item.bounds);\n\tconst rot = item.rotation ?? 0;\n\tif (Math.abs(rot) < 1e-12) {\n\t\treturn `translate(${item.x}, ${item.y})`;\n\t}\n\tconst deg = (rot * 180) / Math.PI;\n\tconst cx = r.width / 2;\n\tconst cy = r.height / 2;\n\treturn `translate(${item.x}, ${item.y}) translate(${cx}, ${cy}) rotate(${deg}) translate(${-cx}, ${-cy})`;\n}\n\nexport type SvgVectorRendererOptions = {\n\t/** Root element (typically `position: relative` and fixed size). */\n\tcontainer: HTMLElement;\n\tscene: VectorScene;\n\tcamera: Camera2D;\n\t/**\n\t * When true, the scene SVG ignores pointer events so an overlay can own hit-testing\n\t * (interactive selection / resize / placement).\n\t */\n\tpointerEventsNone?: boolean;\n};\n\ntype CachedItemG = {\n\treadonly g: SVGGElement;\n\tlastChildrenSvg: string;\n\tlastTransform: string;\n};\n\n/**\n * Renders vector scene items into a single SVG: camera as an outer `<g>` transform,\n * so geometry stays sharp at any zoom (no fixed-resolution raster).\n *\n * Uses incremental DOM updates: keeps a stable `<g>` per visible item id, updates\n * `innerHTML` only when `childrenSvg` changes, and only adjusts the camera transform\n * when pan/zoom changes without content edits.\n */\nexport class SvgVectorRenderer {\n\tprivate readonly container: HTMLElement;\n\tprivate readonly scene: VectorScene;\n\tprivate readonly camera: Camera2D;\n\tprivate readonly svg: SVGSVGElement;\n\tprivate readonly rootG: SVGGElement;\n\tprivate readonly itemNodeCache = new Map<string, CachedItemG>();\n\tprivate readonly resizeObserver: ResizeObserver;\n\n\tconstructor(options: SvgVectorRendererOptions) {\n\t\tthis.container = options.container;\n\t\tthis.scene = options.scene;\n\t\tthis.camera = options.camera;\n\n\t\tthis.svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n\t\tthis.svg.setAttribute(\"width\", \"100%\");\n\t\tthis.svg.setAttribute(\"height\", \"100%\");\n\t\tthis.svg.setAttribute(\"shape-rendering\", \"geometricPrecision\");\n\t\tthis.svg.style.display = \"block\";\n\t\tthis.svg.setAttribute(\"role\", \"presentation\");\n\t\tthis.svg.setAttribute(\"focusable\", \"false\");\n\t\tthis.setPointerEventsNone(options.pointerEventsNone ?? false);\n\n\t\tthis.rootG = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\tthis.svg.appendChild(this.rootG);\n\n\t\tthis.container.appendChild(this.svg);\n\n\t\tthis.resizeObserver = new ResizeObserver(() => this.render());\n\t\tthis.resizeObserver.observe(this.container);\n\t}\n\n\t/**\n\t * Reads container size, culls items, and updates the SVG (incrementally when possible).\n\t */\n\trender(): void {\n\t\tconst w = this.container.clientWidth;\n\t\tconst h = this.container.clientHeight;\n\t\tif (w <= 0 || h <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.svg.setAttribute(\"viewBox\", `0 0 ${w} ${h}`);\n\t\tthis.svg.setAttribute(\"preserveAspectRatio\", \"xMidYMid slice\");\n\n\t\tconst visible = this.camera.getVisibleWorldRect(w, h);\n\t\tconst items = cullItemsByViewport(this.scene.getItems(), visible);\n\n\t\tthis.syncVisibleItems(items);\n\t\tthis.rootG.setAttribute(\"transform\", formatCameraTransform(this.camera));\n\t}\n\n\tprivate syncVisibleItems(items: readonly VectorSceneItem[]): void {\n\t\tconst visibleIds = new Set<string>();\n\t\tfor (const item of items) {\n\t\t\tvisibleIds.add(item.id);\n\t\t}\n\n\t\tfor (const [id, cached] of this.itemNodeCache) {\n\t\t\tif (!visibleIds.has(id)) {\n\t\t\t\tcached.g.remove();\n\t\t\t}\n\t\t}\n\n\t\tlet previousNode: ChildNode | null = null;\n\t\tfor (const item of items) {\n\t\t\tlet cached = this.itemNodeCache.get(item.id);\n\t\t\tif (!cached) {\n\t\t\t\tconst g = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t\t\t\tg.setAttribute(\"data-item-id\", item.id);\n\t\t\t\tcached = {\n\t\t\t\t\tg,\n\t\t\t\t\tlastChildrenSvg: \"\",\n\t\t\t\t\tlastTransform: \"\",\n\t\t\t\t};\n\t\t\t\tthis.itemNodeCache.set(item.id, cached);\n\t\t\t}\n\n\t\t\tconst { g } = cached;\n\t\t\tconst t = formatItemPlacementTransform(item);\n\t\t\tif (cached.lastTransform !== t) {\n\t\t\t\tg.setAttribute(\"transform\", t);\n\t\t\t\tcached.lastTransform = t;\n\t\t\t}\n\n\t\t\tif (cached.lastChildrenSvg !== item.childrenSvg) {\n\t\t\t\t// Trusted SVG fragments only — sanitize untrusted strings in your app.\n\t\t\t\tg.innerHTML = item.childrenSvg;\n\t\t\t\tcached.lastChildrenSvg = item.childrenSvg;\n\t\t\t}\n\n\t\t\tconst expectedPosition: ChildNode | null = previousNode\n\t\t\t\t? previousNode.nextSibling\n\t\t\t\t: this.rootG.firstChild;\n\t\t\tif (expectedPosition !== g) {\n\t\t\t\tthis.rootG.insertBefore(g, expectedPosition);\n\t\t\t}\n\t\t\tpreviousNode = g;\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tthis.resizeObserver.disconnect();\n\t\tthis.itemNodeCache.clear();\n\t\tthis.svg.remove();\n\t}\n\n\t/** Toggle whether the scene SVG receives pointer events (vs overlay handling them). */\n\tsetPointerEventsNone(value: boolean): void {\n\t\tthis.svg.style.pointerEvents = value ? \"none\" : \"auto\";\n\t}\n}\n","import { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { rectsIntersect } from \"../math/rect\";\nimport { cullItemsByViewportSpatial } from \"./spatial-cull\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Below this count, a linear scan is cheaper than building the spatial grid. */\nconst SPATIAL_MIN_ITEMS = 400;\n\n/** World-space cell size for the uniform grid (px in world units). */\nconst SPATIAL_CELL_SIZE = 256;\n\nfunction cullItemsLinear(\n\titems: readonly VectorSceneItem[],\n\tvisibleWorld: Rect,\n): VectorSceneItem[] {\n\treturn items.filter((item) =>\n\t\trectsIntersect(boundsAabbForCull(item), visibleWorld),\n\t);\n}\n\nfunction boundsAabbForCull(item: VectorSceneItem): Rect {\n\treturn boundsAabbForRotatedItem(item);\n}\n\n/**\n * Returns scene items whose `bounds` intersect the visible world rectangle.\n *\n * Uses a uniform grid when there are many items; otherwise a linear filter (faster for\n * small scenes due to grid build overhead).\n */\nexport function cullItemsByViewport(\n\titems: readonly VectorSceneItem[],\n\tvisibleWorld: Rect,\n): VectorSceneItem[] {\n\tif (items.length < SPATIAL_MIN_ITEMS) {\n\t\treturn cullItemsLinear(items, visibleWorld);\n\t}\n\treturn cullItemsByViewportSpatial(items, visibleWorld, SPATIAL_CELL_SIZE);\n}\n","import { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect, rectsIntersect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\ntype SpatialIndex = {\n\treadonly cellSize: number;\n\treadonly aabbs: readonly Rect[];\n\treadonly buckets: ReadonlyMap<string, readonly number[]>;\n};\n\nconst spatialIndexCache = new WeakMap<readonly VectorSceneItem[], SpatialIndex>();\n\nfunction cellKey(ix: number, iy: number): string {\n\treturn `${ix},${iy}`;\n}\n\nfunction buildSpatialIndex(\n\titems: readonly VectorSceneItem[],\n\tcellSize: number,\n): SpatialIndex {\n\tconst cached = spatialIndexCache.get(items);\n\tif (cached && cached.cellSize === cellSize) {\n\t\treturn cached;\n\t}\n\n\tconst aabbs: Rect[] = new Array(items.length);\n\tconst buckets = new Map<string, number[]>();\n\n\tfor (let index = 0; index < items.length; index += 1) {\n\t\tconst item = items[index];\n\t\tif (!item) continue;\n\t\tconst aabb = boundsAabbForRotatedItem(item);\n\t\taabbs[index] = aabb;\n\t\tconst { minIx, maxIx, minIy, maxIy } = cellRangeForRect(aabb, cellSize);\n\t\tfor (let ix = minIx; ix <= maxIx; ix += 1) {\n\t\t\tfor (let iy = minIy; iy <= maxIy; iy += 1) {\n\t\t\t\tconst key = cellKey(ix, iy);\n\t\t\t\tlet bucket = buckets.get(key);\n\t\t\t\tif (!bucket) {\n\t\t\t\t\tbucket = [];\n\t\t\t\t\tbuckets.set(key, bucket);\n\t\t\t\t}\n\t\t\t\tbucket.push(index);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst next: SpatialIndex = {\n\t\tcellSize,\n\t\taabbs,\n\t\tbuckets,\n\t};\n\tspatialIndexCache.set(items, next);\n\treturn next;\n}\n\n/**\n * Axis-aligned cell range (inclusive indices) for a rectangle in a uniform grid.\n */\nfunction cellRangeForRect(\n\tr: Rect,\n\tcellSize: number,\n): {\n\tminIx: number;\n\tmaxIx: number;\n\tminIy: number;\n\tmaxIy: number;\n} {\n\tconst n = normalizeRect(r);\n\tconst x1 = n.x + n.width;\n\tconst y1 = n.y + n.height;\n\tconst minIx = Math.floor(n.x / cellSize);\n\tconst maxIx = Math.max(minIx, Math.ceil(x1 / cellSize) - 1);\n\tconst minIy = Math.floor(n.y / cellSize);\n\tconst maxIy = Math.max(minIy, Math.ceil(y1 / cellSize) - 1);\n\treturn { minIx, maxIx, minIy, maxIy };\n}\n\n/**\n * Viewport cull using a uniform grid: each item is inserted into every cell its bounds\n * overlap. Query walks cells overlapping the viewport, dedupes by id, then applies an exact\n * {@link rectsIntersect} test. Output order matches the original `items` array (z-order).\n *\n * Build cost is O(n × cells per item); query cost is O(viewport cells × bucket size).\n * Use only when {@link items}.length is large enough that this beats a linear scan.\n */\nexport function cullItemsByViewportSpatial(\n\titems: readonly VectorSceneItem[],\n\tvisibleWorld: Rect,\n\tcellSize: number,\n): VectorSceneItem[] {\n\tconst { aabbs, buckets } = buildSpatialIndex(items, cellSize);\n\n\tconst vr = cellRangeForRect(visibleWorld, cellSize);\n\tconst seen = new Set<number>();\n\tconst outIndices: number[] = [];\n\n\tfor (let ix = vr.minIx; ix <= vr.maxIx; ix++) {\n\t\tfor (let iy = vr.minIy; iy <= vr.maxIy; iy++) {\n\t\t\tconst bucket = buckets.get(cellKey(ix, iy));\n\t\t\tif (!bucket) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const index of bucket) {\n\t\t\t\tif (seen.has(index)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tseen.add(index);\n\t\t\t\tconst aabb = aabbs[index];\n\t\t\t\tif (aabb && rectsIntersect(aabb, visibleWorld)) {\n\t\t\t\t\toutIndices.push(index);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\toutIndices.sort((a, b) => a - b);\n\treturn outIndices.map((index) => items[index]).filter((item) => item != null);\n}\n","import {\n\tbuildArrowSvg,\n\tcreateShapeId,\n\trebuildItemSvg,\n\tresolveStrokeStyle,\n} from \"./shape-builders\";\nimport type { VectorSceneItem } from \"./types\";\n\n/**\n * Deep-clones an item with a new id. Rebuilds SVG where the id is embedded (arrow, text, custom).\n */\nexport function cloneVectorSceneItemWithNewId(\n\titem: VectorSceneItem,\n): VectorSceneItem {\n\tconst id = createShapeId();\n\tconst copy = JSON.parse(JSON.stringify(item)) as VectorSceneItem;\n\tlet next: VectorSceneItem = { ...copy, id };\n\tif (next.toolKind === \"arrow\" && next.line) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tchildrenSvg: buildArrowSvg(id, next.line, resolveStrokeStyle(next)),\n\t\t};\n\t}\n\tif (next.toolKind === \"text\" && next.text !== undefined) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\tif (\n\t\tnext.toolKind === \"custom\" &&\n\t\tnext.customInnerSvg &&\n\t\tnext.customIntrinsicSize\n\t) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\treturn next;\n}\n\nexport function cloneVectorSceneItemsWithNewIds(\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem[] {\n\treturn items.map(cloneVectorSceneItemWithNewId);\n}\n","import type { VectorSceneItem } from \"./types\";\n\n/**\n * Mutable collection of vector scene items (replace wholesale for simplicity in MVP).\n */\nexport class VectorScene {\n\tprivate items: VectorSceneItem[] = [];\n\n\tgetItems(): readonly VectorSceneItem[] {\n\t\treturn this.items;\n\t}\n\n\t/**\n\t * Replaces the entire scene contents.\n\t */\n\tsetItems(next: readonly VectorSceneItem[]): void {\n\t\tthis.items = [...next];\n\t}\n\n\tclear(): void {\n\t\tthis.items = [];\n\t}\n}\n","\"use client\";\n\nimport type { Camera2D } from \"../camera/camera\";\nimport {\n\tgetHandleWorldPositionRotated,\n\tgetRotationHandleWorldPosition,\n\ttype ResizeHandleId,\n} from \"../interaction/resize-handles\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tformatCameraTransform,\n\tformatItemPlacementTransform,\n} from \"../renderer/svg-vector-renderer\";\nimport { smoothFreehandPointsToPathD } from \"../scene/freehand-path\";\nimport {\n\tcomputeFreehandSvgPayload,\n\tcomputeStraightArrowGeometry,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nconst HANDLE_ORDER: ResizeHandleId[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\nconst ERASER_TINT = \"#cbd5e1\";\nconst ERASER_TINT_OPACITY = 0.95;\n\nfunction pointsToSmoothPath(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length === 0) return null;\n\tconst d = smoothFreehandPointsToPathD(points);\n\treturn d || null;\n}\n\nfunction renderEraserSkeleton(\n\tit: VectorSceneItem,\n\toverlayStrokePx: number,\n): React.ReactNode {\n\tconst b = normalizeRect(it.bounds);\n\tconst tool = it.toolKind;\n\tconst strokeWidth = Math.max(it.strokeWidth ?? 2, overlayStrokePx);\n\tconst common = {\n\t\tstroke: ERASER_TINT,\n\t\tstrokeWidth,\n\t\tstrokeOpacity: ERASER_TINT_OPACITY,\n\t\tvectorEffect: \"non-scaling-stroke\" as const,\n\t\tstrokeLinecap: \"round\" as const,\n\t\tstrokeLinejoin: \"round\" as const,\n\t\tfill: \"none\",\n\t};\n\n\tif (tool === \"rect\") {\n\t\treturn <rect x={0} y={0} width={b.width} height={b.height} {...common} />;\n\t}\n\tif (tool === \"ellipse\") {\n\t\treturn (\n\t\t\t<ellipse\n\t\t\t\tcx={b.width / 2}\n\t\t\t\tcy={b.height / 2}\n\t\t\t\trx={Math.max(0, b.width / 2)}\n\t\t\t\try={Math.max(0, b.height / 2)}\n\t\t\t\t{...common}\n\t\t\t/>\n\t\t);\n\t}\n\tif (tool === \"line\" || tool === \"arrow\") {\n\t\tconst ln = it.line;\n\t\tif (!ln)\n\t\t\treturn <rect x={0} y={0} width={b.width} height={b.height} {...common} />;\n\t\tconst geometry =\n\t\t\ttool === \"arrow\"\n\t\t\t\t? computeStraightArrowGeometry(\n\t\t\t\t\t\tln,\n\t\t\t\t\t\tMath.max(it.strokeWidth ?? 2, overlayStrokePx),\n\t\t\t\t\t)\n\t\t\t\t: null;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<line\n\t\t\t\t\tx1={ln.x1}\n\t\t\t\t\ty1={ln.y1}\n\t\t\t\t\tx2={geometry?.shaftEndX ?? ln.x2}\n\t\t\t\t\ty2={geometry?.shaftEndY ?? ln.y2}\n\t\t\t\t\t{...common}\n\t\t\t\t/>\n\t\t\t\t{tool === \"arrow\" && geometry ? (\n\t\t\t\t\t<path\n\t\t\t\t\t\td={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\t\t{...common}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</>\n\t\t);\n\t}\n\tif (\n\t\ttool === \"draw\" ||\n\t\ttool === \"marker\" ||\n\t\ttool === \"pencil\" ||\n\t\ttool === \"brush\"\n\t) {\n\t\tconst pts = it.pathPointsLocal ?? [];\n\t\tif (pts.length === 1) {\n\t\t\tconst p = pts[0];\n\t\t\tif (!p) return null;\n\t\t\treturn (\n\t\t\t\t<circle\n\t\t\t\t\tcx={p.x}\n\t\t\t\t\tcy={p.y}\n\t\t\t\t\tr={Math.max((it.strokeWidth ?? 2) / 2, 2)}\n\t\t\t\t\tfill={ERASER_TINT}\n\t\t\t\t\tfillOpacity={0.8}\n\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tconst d = pointsToSmoothPath(pts);\n\t\tif (d) {\n\t\t\treturn <path d={d} {...common} shapeRendering=\"geometricPrecision\" />;\n\t\t}\n\t}\n\treturn (\n\t\t<rect\n\t\t\tx={0}\n\t\t\ty={0}\n\t\t\twidth={b.width}\n\t\t\theight={b.height}\n\t\t\t{...common}\n\t\t\tstrokeDasharray=\"4 4\"\n\t\t/>\n\t);\n}\n\nexport type PlacementPreview =\n\t| { kind: \"rect\" | \"ellipse\"; rect: Rect }\n\t/** Multi-select drag (world rect), like image crop / rubber-band selection. */\n\t| { kind: \"marquee\"; rect: Rect }\n\t| {\n\t\t\tkind: \"line\" | \"arrow\";\n\t\t\tstart: { x: number; y: number };\n\t\t\tend: { x: number; y: number };\n\t }\n\t| {\n\t\t\tkind: \"stroke\";\n\t\t\ttool: \"draw\" | \"marker\" | \"laser\";\n\t\t\tpoints: { x: number; y: number }[];\n\t };\n\nexport type InteractionOverlayProps = {\n\tcamera: Camera2D;\n\t/** Bump when camera mutates so React redraws the overlay transform. */\n\tcameraVersion: number;\n\t/** Selected items (order preserved). Empty = no selection. */\n\tselectedItems: readonly VectorSceneItem[];\n\t/** When false, only the selection outline is shown (no resize handles). */\n\tshowResizeHandles: boolean;\n\tplacementPreview: PlacementPreview | null;\n\t/** Live eraser trail points in world space, newest at the end. */\n\teraserTrail?: readonly { x: number; y: number; t: number }[];\n\t/** Live laser trail points in world space, fades out after pointerup. */\n\tlaserTrail?: readonly { x: number; y: number; t: number }[];\n\t/** Shapes currently touched by eraser and queued to be removed on pointerup. */\n\teraserPreviewItems?: readonly VectorSceneItem[];\n\t/** Current stroke style used for local stroke previews (draw/marker). */\n\tpreviewStrokeStyle?: StrokeStyle;\n};\n\n/**\n * World-space decoration: selection bounds, resize handles, placement preview.\n * Renders above the scene SVG with `pointer-events: none` so a sibling HTML hit-layer\n * div can own all pointer capture for tools.\n */\nexport function InteractionOverlay({\n\tcamera,\n\tcameraVersion: _cameraVersion,\n\tselectedItems,\n\tshowResizeHandles,\n\tplacementPreview,\n\teraserTrail = [],\n\tlaserTrail = [],\n\teraserPreviewItems = [],\n\tpreviewStrokeStyle,\n}: InteractionOverlayProps) {\n\tvoid _cameraVersion;\n\tconst z = camera.zoom;\n\t/** World radius so handles stay ~5 CSS px after camera scale (see `formatCameraTransform`). */\n\tconst handleR = 5 / z;\n\t/**\n\t * Constant stroke in user units; `vectorEffect=\"non-scaling-stroke\"` keeps ~this many CSS px\n\t * regardless of zoom. Do not divide by `z` here — that doubled with non-scaling-stroke and made\n\t * borders/handles look overly thick when zoomed in.\n\t */\n\tconst overlayStrokePx = 1.25;\n\tconst dashPattern = \"4 4\";\n\tconst rotateHandleOffsetWorld = 24 / z;\n\t/** Screen-sized icon in world units (~16px at current zoom). */\n\tconst rotateIconWorld = 16 / z;\n\tconst rotateIconScale = rotateIconWorld / 24;\n\n\tconst rootTransform = formatCameraTransform(camera);\n\n\tlet selection: React.ReactNode = null;\n\tif (selectedItems.length > 0) {\n\t\tconst single = selectedItems.length === 1 ? selectedItems[0] : undefined;\n\t\tconst bSingle = single ? normalizeRect(single.bounds) : null;\n\t\tconst rotSingle = single?.rotation ?? 0;\n\t\tconst rotHandlePos =\n\t\t\tshowResizeHandles && bSingle && single\n\t\t\t\t? getRotationHandleWorldPosition(bSingle, rotSingle, rotateHandleOffsetWorld)\n\t\t\t\t: null;\n\t\tselection = (\n\t\t\t<g>\n\t\t\t\t{selectedItems.map((it) => {\n\t\t\t\t\tconst b = normalizeRect(it.bounds);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g key={it.id} transform={formatItemPlacementTransform(it)}>\n\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\tx={0}\n\t\t\t\t\t\t\t\ty={0}\n\t\t\t\t\t\t\t\twidth={b.width}\n\t\t\t\t\t\t\t\theight={b.height}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{showResizeHandles && bSingle && single && rotHandlePos && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{HANDLE_ORDER.map((hid) => {\n\t\t\t\t\t\t\tconst p = getHandleWorldPositionRotated(bSingle, hid, rotSingle);\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\tkey={hid}\n\t\t\t\t\t\t\t\t\tcx={p.x}\n\t\t\t\t\t\t\t\t\tcy={p.y}\n\t\t\t\t\t\t\t\t\tr={handleR}\n\t\t\t\t\t\t\t\t\tfill=\"#ffffff\"\n\t\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t\tdata-handle-id={hid}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t<g\n\t\t\t\t\t\t\ttransform={`translate(${rotHandlePos.x}, ${rotHandlePos.y}) rotate(${(rotSingle * 180) / Math.PI})`}\n\t\t\t\t\t\t\tdata-rotate-handle=\"1\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\ttransform={`translate(${-rotateIconWorld / 2}, ${-rotateIconWorld / 2}) scale(${rotateIconScale})`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Curved arrow (rotate) — Lucide-style arc + arrowhead */}\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M21 3v5h-5\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</g>\n\t\t);\n\t}\n\n\tlet preview: React.ReactNode = null;\n\tif (placementPreview) {\n\t\tif (placementPreview.kind === \"marquee\") {\n\t\t\tconst r = normalizeRect(placementPreview.rect);\n\t\t\tpreview = (\n\t\t\t\t<rect\n\t\t\t\t\tx={r.x}\n\t\t\t\t\ty={r.y}\n\t\t\t\t\twidth={r.width}\n\t\t\t\t\theight={r.height}\n\t\t\t\t\tfill=\"rgba(59, 130, 246, 0.12)\"\n\t\t\t\t\tstroke=\"#3b82f6\"\n\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t/>\n\t\t\t);\n\t\t} else if (\n\t\t\tplacementPreview.kind === \"rect\" ||\n\t\t\tplacementPreview.kind === \"ellipse\"\n\t\t) {\n\t\t\tconst r = normalizeRect(placementPreview.rect);\n\t\t\tpreview =\n\t\t\t\tplacementPreview.kind === \"rect\" ? (\n\t\t\t\t\t<rect\n\t\t\t\t\t\tx={r.x}\n\t\t\t\t\t\ty={r.y}\n\t\t\t\t\t\twidth={r.width}\n\t\t\t\t\t\theight={r.height}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<ellipse\n\t\t\t\t\t\tcx={r.x + r.width / 2}\n\t\t\t\t\t\tcy={r.y + r.height / 2}\n\t\t\t\t\t\trx={r.width / 2}\n\t\t\t\t\t\try={r.height / 2}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t} else if (\n\t\t\tplacementPreview.kind === \"line\" ||\n\t\t\tplacementPreview.kind === \"arrow\"\n\t\t) {\n\t\t\tconst { start, end } = placementPreview;\n\t\t\tconst geometry =\n\t\t\t\tplacementPreview.kind === \"arrow\"\n\t\t\t\t\t? computeStraightArrowGeometry(\n\t\t\t\t\t\t\t{ x1: start.x, y1: start.y, x2: end.x, y2: end.y },\n\t\t\t\t\t\t\toverlayStrokePx,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null;\n\t\t\tpreview = (\n\t\t\t\t<>\n\t\t\t\t\t<line\n\t\t\t\t\t\tx1={start.x}\n\t\t\t\t\t\ty1={start.y}\n\t\t\t\t\t\tx2={geometry?.shaftEndX ?? end.x}\n\t\t\t\t\t\ty2={geometry?.shaftEndY ?? end.y}\n\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t\t{placementPreview.kind === \"arrow\" && geometry ? (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"#64748b\"\n\t\t\t\t\t\t\tstrokeWidth={overlayStrokePx}\n\t\t\t\t\t\t\tstrokeOpacity={0.9}\n\t\t\t\t\t\t\tstrokeDasharray={dashPattern}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</>\n\t\t\t);\n\t\t} else if (placementPreview.kind === \"stroke\") {\n\t\t\tconst raw = placementPreview.points;\n\t\t\tconst tool = placementPreview.tool;\n\t\t\tif (raw.length >= 1) {\n\t\t\t\tconst isLaser = tool === \"laser\";\n\t\t\t\tconst previewStyle: StrokeStyle = {\n\t\t\t\t\tstroke: isLaser ? \"#f43f5e\" : (previewStrokeStyle?.stroke ?? \"#64748b\"),\n\t\t\t\t\tstrokeWidth: isLaser\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: (previewStrokeStyle?.strokeWidth ?? (tool === \"marker\" ? 16 : 3)),\n\t\t\t\t\t...(previewStrokeStyle?.strokeOpacity != null && !isLaser\n\t\t\t\t\t\t? { strokeOpacity: previewStrokeStyle.strokeOpacity }\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\t\t\t\tconst payload = computeFreehandSvgPayload(\n\t\t\t\t\traw,\n\t\t\t\t\tpreviewStyle,\n\t\t\t\t\ttool === \"laser\" ? \"draw\" : tool,\n\t\t\t\t\tfalse,\n\t\t\t\t);\n\t\t\t\tif (payload) {\n\t\t\t\t\tif (payload.kind === \"circle\") {\n\t\t\t\t\t\tpreview = (\n\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\t\t\t\tr={payload.r}\n\t\t\t\t\t\t\t\tfill={payload.fill}\n\t\t\t\t\t\t\t\tfillOpacity={payload.fillOpacity}\n\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (payload.kind === \"fillPath\") {\n\t\t\t\t\t\tpreview = (\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={payload.d}\n\t\t\t\t\t\t\t\tfill={payload.fill}\n\t\t\t\t\t\t\t\tfillOpacity={payload.fillOpacity}\n\t\t\t\t\t\t\t\tfillRule=\"nonzero\"\n\t\t\t\t\t\t\t\tstroke=\"none\"\n\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpreview = (\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td={payload.d}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={payload.stroke}\n\t\t\t\t\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\t\t\t\t\tstrokeOpacity={isLaser ? 0.85 : payload.strokeOpacity}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlet eraserPreview: React.ReactNode = null;\n\tif (eraserPreviewItems.length > 0) {\n\t\teraserPreview = (\n\t\t\t<g>\n\t\t\t\t{eraserPreviewItems.map((it) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g\n\t\t\t\t\t\t\tkey={`erase-preview-${it.id}`}\n\t\t\t\t\t\t\ttransform={formatItemPlacementTransform(it)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderEraserSkeleton(it, overlayStrokePx)}\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</g>\n\t\t);\n\t}\n\n\tlet eraserTrailOverlay: React.ReactNode = null;\n\tif (eraserTrail.length >= 1) {\n\t\tconst now = Date.now();\n\t\tconst maxAgeMs = 150;\n\t\tconst alive = eraserTrail.filter((p) => now - p.t <= maxAgeMs);\n\t\tif (alive.length > 0) {\n\t\t\tconst d = pointsToSmoothPath(alive);\n\t\t\tconst newest = alive[alive.length - 1];\n\t\t\tconst newestAge = newest ? now - newest.t : maxAgeMs;\n\t\t\tconst headOpacity = Math.max(0, 1 - newestAge / maxAgeMs);\n\t\t\teraserTrailOverlay = (\n\t\t\t\t<g>\n\t\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={d}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={ERASER_TINT}\n\t\t\t\t\t\t\tstrokeOpacity={ERASER_TINT_OPACITY}\n\t\t\t\t\t\t\tstrokeWidth={Math.max(3.5, overlayStrokePx)}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx={newest?.x ?? alive[0]?.x}\n\t\t\t\t\t\tcy={newest?.y ?? alive[0]?.y}\n\t\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\t\tfill={ERASER_TINT}\n\t\t\t\t\t\tfillOpacity={headOpacity}\n\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t);\n\t\t}\n\t}\n\n\tlet laserTrailOverlay: React.ReactNode = null;\n\tif (laserTrail.length >= 1) {\n\t\tconst now = Date.now();\n\t\tconst maxAgeMs = 650;\n\t\tconst alive = laserTrail.filter((p) => now - p.t <= maxAgeMs);\n\t\tif (alive.length > 0) {\n\t\t\tconst d = pointsToSmoothPath(alive);\n\t\t\tconst newest = alive[alive.length - 1];\n\t\t\tconst newestAge = newest ? now - newest.t : maxAgeMs;\n\t\t\tconst headOpacity = Math.max(0, 1 - newestAge / maxAgeMs);\n\t\t\tlaserTrailOverlay = (\n\t\t\t\t<g>\n\t\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td={d}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"#f43f5e\"\n\t\t\t\t\t\t\tstrokeOpacity={0.9}\n\t\t\t\t\t\t\tstrokeWidth={Math.max(4, overlayStrokePx)}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx={newest?.x ?? alive[0]?.x}\n\t\t\t\t\t\tcy={newest?.y ?? alive[0]?.y}\n\t\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\t\tfill=\"#f43f5e\"\n\t\t\t\t\t\tfillOpacity={headOpacity}\n\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</g>\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<svg\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\tbottom: 0,\n\t\t\t\tzIndex: 11,\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: \"100%\",\n\t\t\t\ttouchAction: \"none\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t}}\n\t\t\trole=\"presentation\"\n\t\t\taria-hidden\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t>\n\t\t\t<g transform={rootTransform}>\n\t\t\t\t{preview}\n\t\t\t\t{laserTrailOverlay}\n\t\t\t\t{eraserTrailOverlay}\n\t\t\t\t{eraserPreview}\n\t\t\t\t{selection}\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","\"use client\";\n\nimport { MousePointer2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { Camera2D } from \"../../camera/camera\";\nimport { formatCameraTransform } from \"../../renderer/svg-vector-renderer\";\nimport { smoothFreehandPointsToPathD } from \"../../scene/freehand-path\";\nimport { defaultPresenceColorForId } from \"./peer-color\";\nimport type { RemotePresenceMarkupStroke, RemotePresencePeer } from \"./types\";\n\nfunction strokePaint(\n\ttool: RemotePresenceMarkupStroke[\"tool\"],\n\tfallback: string,\n): { stroke: string; strokeOpacity: number; widthWorld: number } {\n\tswitch (tool) {\n\t\tcase \"laser\":\n\t\t\treturn { stroke: \"#f43f5e\", strokeOpacity: 0.92, widthWorld: 4 };\n\t\tcase \"marker\":\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.45, widthWorld: 14 };\n\t\tcase \"brush\":\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.85, widthWorld: 5 };\n\t\tcase \"pencil\":\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.9, widthWorld: 2.5 };\n\t\tdefault:\n\t\t\treturn { stroke: fallback, strokeOpacity: 0.95, widthWorld: 3.5 };\n\t}\n}\n\nexport type PresenceRemoteLayerProps = {\n\tcamera: Camera2D;\n\t/** Bump when camera changes (same as {@link InteractionOverlay}). */\n\tcameraVersion: number;\n\tpeers: readonly RemotePresencePeer[];\n};\n\n/**\n * World-space SVG overlay: remote cursors + in-progress markup strokes.\n * Usually passed via {@link VectorViewport} `remotePresence` or `presenceOverlay`.\n */\nexport function PresenceRemoteLayer({\n\tcamera,\n\tcameraVersion: _cameraVersion,\n\tpeers,\n}: PresenceRemoteLayerProps) {\n\tvoid _cameraVersion;\n\tconst z = camera.zoom;\n\tconst rootTransform = formatCameraTransform(camera);\n\tconst overlayStrokePx = 1.25;\n\t/** Lucide `MousePointer2` viewBox; tip ≈ this point in icon space (see lucide `mouse-pointer-2`). */\n\tconst LUCIDE_POINTER_VIEWBOX = 24;\n\tconst LUCIDE_POINTER_TIP_X = 4.037;\n\tconst LUCIDE_POINTER_TIP_Y = 4.688;\n\t/** Target on-screen size (~px); scale in world space so it stays constant when zooming. */\n\tconst remoteCursorScreenPx = 15;\n\tconst iconWorldScale = remoteCursorScreenPx / (LUCIDE_POINTER_VIEWBOX * z);\n\n\treturn (\n\t\t<svg\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\tbottom: 0,\n\t\t\t\tzIndex: 9,\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: \"100%\",\n\t\t\t\ttouchAction: \"none\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t}}\n\t\t\trole=\"presentation\"\n\t\t\taria-hidden\n\t\t\twidth=\"100%\"\n\t\t\theight=\"100%\"\n\t\t>\n\t\t\t<g transform={rootTransform}>\n\t\t\t\t{peers.map((peer) => {\n\t\t\t\t\tconst color = peer.color ?? defaultPresenceColorForId(peer.id);\n\t\t\t\t\tconst markup = peer.markupStroke;\n\t\t\t\t\tlet strokeNode: ReactNode = null;\n\t\t\t\t\tif (markup && markup.points.length > 0) {\n\t\t\t\t\t\tconst paint = strokePaint(markup.tool, color);\n\t\t\t\t\t\tconst d =\n\t\t\t\t\t\t\tmarkup.points.length >= 2\n\t\t\t\t\t\t\t\t? smoothFreehandPointsToPathD([...markup.points])\n\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\tstrokeNode = (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={d}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={paint.stroke}\n\t\t\t\t\t\t\t\t\tstrokeOpacity={paint.strokeOpacity}\n\t\t\t\t\t\t\t\t\tstrokeWidth={Math.max(paint.widthWorld / z, overlayStrokePx)}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\tshapeRendering=\"geometricPrecision\"\n\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst p0 = markup.points[0];\n\t\t\t\t\t\t\tif (p0) {\n\t\t\t\t\t\t\t\tstrokeNode = (\n\t\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\t\tcx={p0.x}\n\t\t\t\t\t\t\t\t\t\tcy={p0.y}\n\t\t\t\t\t\t\t\t\t\tr={Math.max(3 / z, 2)}\n\t\t\t\t\t\t\t\t\t\tfill={paint.stroke}\n\t\t\t\t\t\t\t\t\t\tfillOpacity={paint.strokeOpacity}\n\t\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cur = peer.cursor;\n\t\t\t\t\tlet cursorNode: ReactNode = null;\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tconst displayName = peer.displayName;\n\t\t\t\t\t\tconst labelOffsetX = 10 / z;\n\t\t\t\t\t\tconst labelOffsetY = 10 / z;\n\t\t\t\t\t\tconst labelFont = 10 / z;\n\t\t\t\t\t\tcursorNode = (\n\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\t\ttransform={`translate(${cur.x}, ${cur.y}) scale(${iconWorldScale}) translate(${-LUCIDE_POINTER_TIP_X}, ${-LUCIDE_POINTER_TIP_Y})`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MousePointer2\n\t\t\t\t\t\t\t\t\t\tsize={LUCIDE_POINTER_VIEWBOX}\n\t\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\t\tfill={color}\n\t\t\t\t\t\t\t\t\t\tstroke=\"#ffffff\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.25}\n\t\t\t\t\t\t\t\t\t\tabsoluteStrokeWidth\n\t\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t{displayName ? (\n\t\t\t\t\t\t\t\t\t<text\n\t\t\t\t\t\t\t\t\t\tx={cur.x + labelOffsetX}\n\t\t\t\t\t\t\t\t\t\ty={cur.y + labelOffsetY}\n\t\t\t\t\t\t\t\t\t\tfill={color}\n\t\t\t\t\t\t\t\t\t\tstroke=\"#ffffff\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={2.5 / z}\n\t\t\t\t\t\t\t\t\t\tpaintOrder=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tfontSize: labelFont,\n\t\t\t\t\t\t\t\t\t\t\tfontFamily: \"system-ui, sans-serif\",\n\t\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t\t</text>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<g key={peer.id}>\n\t\t\t\t\t\t\t{strokeNode}\n\t\t\t\t\t\t\t{cursorNode}\n\t\t\t\t\t\t</g>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</g>\n\t\t</svg>\n\t);\n}\n","/**\n * Deterministic accent from a peer id when `color` is not provided.\n */\nexport function defaultPresenceColorForId(id: string): string {\n\tlet h = 2166136261;\n\tfor (let i = 0; i < id.length; i++) {\n\t\th ^= id.charCodeAt(i);\n\t\th = Math.imul(h, 16777619);\n\t}\n\tconst hue = (h >>> 0) % 360;\n\treturn `hsl(${hue} 72% 42%)`;\n}\n","\"use client\";\n\nimport { type KeyboardEvent, useLayoutEffect, useRef } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport { normalizeRect } from \"../math/rect\";\nimport { DEFAULT_TEXT_FONT_SIZE } from \"../scene/text-svg\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type TextEditOverlayProps = {\n\tcamera: Camera2D;\n\t/** Re-render when camera pans/zooms so the field stays aligned. */\n\tcameraVersion: number;\n\titem: VectorSceneItem;\n\tdraftText: string;\n\tonDraftChange: (value: string) => void;\n\tonCommit: () => void;\n\tonCancel: () => void;\n};\n\n/**\n * Screen-space textarea aligned to a text item’s world bounds (above hit layer).\n */\nexport function TextEditOverlay({\n\tcamera,\n\tcameraVersion: _cameraVersion,\n\titem,\n\tdraftText,\n\tonDraftChange,\n\tonCommit,\n\tonCancel,\n}: TextEditOverlayProps) {\n\tvoid _cameraVersion;\n\tconst taRef = useRef<HTMLTextAreaElement>(null);\n\tconst skipCommitRef = useRef(false);\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: re-focus when switching to another text item\n\tuseLayoutEffect(() => {\n\t\tconst el = taRef.current;\n\t\tif (!el) return;\n\t\tel.focus();\n\t\tel.select();\n\t}, [item.id]);\n\n\tconst handleBlur = () => {\n\t\tif (skipCommitRef.current) {\n\t\t\tskipCommitRef.current = false;\n\t\t\treturn;\n\t\t}\n\t\tonCommit();\n\t};\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n\t\tif (e.key === \"Escape\") {\n\t\t\te.preventDefault();\n\t\t\tskipCommitRef.current = true;\n\t\t\tonCancel();\n\t\t}\n\t};\n\n\tconst b = normalizeRect(item.bounds);\n\tconst z = camera.zoom;\n\tconst w = b.width * z;\n\tconst h = b.height * z;\n\tconst rot = item.rotation ?? 0;\n\tconst cx = b.x + b.width / 2;\n\tconst cy = b.y + b.height / 2;\n\tconst cScreen = camera.worldToScreen(cx, cy);\n\tconst fsWorld = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\tconst fontSize = fsWorld * z;\n\tconst lineHeight = fsWorld * (22 / 18) * z;\n\tconst fixedBox = !!item.textFixedBounds;\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"text-edit-overlay\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: cScreen.screenX - w / 2,\n\t\t\t\ttop: cScreen.screenY - h / 2,\n\t\t\t\twidth: w,\n\t\t\t\theight: h,\n\t\t\t\tzIndex: 20,\n\t\t\t\tpointerEvents: \"auto\",\n\t\t\t\toverflow: \"visible\",\n\t\t\t\ttransform:\n\t\t\t\t\tMath.abs(rot) < 1e-12 ? undefined : `rotate(${(rot * 180) / Math.PI}deg)`,\n\t\t\t\ttransformOrigin: \"center center\",\n\t\t\t}}\n\t\t>\n\t\t\t<textarea\n\t\t\t\tref={taRef}\n\t\t\t\tvalue={draftText}\n\t\t\t\tonChange={(e) => onDraftChange(e.target.value)}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\taria-label=\"Edit text\"\n\t\t\t\tstyle={{\n\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\theight: \"100%\",\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 2,\n\t\t\t\t\tborder: \"none\",\n\t\t\t\t\tborderRadius: 0,\n\t\t\t\t\tresize: \"none\",\n\t\t\t\t\tfontFamily: \"system-ui, sans-serif\",\n\t\t\t\t\tfontSize,\n\t\t\t\t\tlineHeight: `${lineHeight}px`,\n\t\t\t\t\tcolor: \"#0f172a\",\n\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\tbackgroundColor: \"transparent\",\n\t\t\t\t\toutline: \"none\",\n\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t\tappearance: \"none\",\n\t\t\t\t\tWebkitAppearance: \"none\",\n\t\t\t\t\tWebkitTapHighlightColor: \"transparent\",\n\t\t\t\t\t/* Auto-sized text: no soft wrap / scrollbar; fixed box: wrap like the SVG. */\n\t\t\t\t\twhiteSpace: fixedBox ? \"pre-wrap\" : \"pre\",\n\t\t\t\t\toverflow: fixedBox ? \"auto\" : \"hidden\",\n\t\t\t\t\toverflowX: fixedBox ? \"hidden\" : \"hidden\",\n\t\t\t\t\twordWrap: fixedBox ? \"break-word\" : \"normal\",\n\t\t\t\t\twordBreak: fixedBox ? \"break-word\" : \"normal\",\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport type { ResizeHandleId } from \"../interaction/resize-handles\";\nimport { rectFromCorners } from \"../interaction/resize-handles\";\nimport { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect, rectsIntersect } from \"../math/rect\";\nimport type { VectorPathPoint, VectorSceneItem } from \"../scene/types\";\n\nexport function usePrefersReducedMotion(): boolean {\n\tconst [reduced, setReduced] = useState(false);\n\tuseEffect(() => {\n\t\tconst mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\t\tsetReduced(mq.matches);\n\t\tconst listener = () => setReduced(mq.matches);\n\t\tmq.addEventListener(\"change\", listener);\n\t\treturn () => mq.removeEventListener(\"change\", listener);\n\t}, []);\n\treturn reduced;\n}\n\nexport const visuallyHidden: CSSProperties = {\n\tposition: \"absolute\",\n\twidth: 1,\n\theight: 1,\n\tpadding: 0,\n\tmargin: -1,\n\toverflow: \"hidden\",\n\tclip: \"rect(0, 0, 0, 0)\",\n\twhiteSpace: \"nowrap\",\n\tborder: 0,\n};\n\n/** Keyboard +/- and zoom UI buttons use the same factor. */\nexport const VIEWPORT_ZOOM_STEP = 1.15;\n\nexport function replaceItem(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n\tnext: VectorSceneItem,\n): VectorSceneItem[] {\n\treturn items.map((it) => (it.id === id ? next : it));\n}\n\nexport function supportsResizeHandles(\n\titem: VectorSceneItem | null | undefined,\n): item is VectorSceneItem & {\n\ttoolKind:\n\t\t| \"rect\"\n\t\t| \"ellipse\"\n\t\t| \"line\"\n\t\t| \"arrow\"\n\t\t| \"image\"\n\t\t| \"text\"\n\t\t| \"custom\"\n\t\t| \"draw\"\n\t\t| \"pencil\"\n\t\t| \"brush\"\n\t\t| \"marker\";\n} {\n\tconst k = item?.toolKind;\n\tif (\n\t\tk === \"rect\" ||\n\t\tk === \"ellipse\" ||\n\t\tk === \"line\" ||\n\t\tk === \"arrow\" ||\n\t\tk === \"image\" ||\n\t\tk === \"text\"\n\t) {\n\t\treturn true;\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 true;\n\t}\n\treturn k === \"custom\" && !!item?.customIntrinsicSize && !!item?.customInnerSvg;\n}\n\nexport type DragState =\n\t| { kind: \"idle\" }\n\t| {\n\t\t\tkind: \"move\";\n\t\t\tids: string[];\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tsnapshots: Record<string, VectorSceneItem>;\n\t }\n\t| {\n\t\t\tkind: \"resize\";\n\t\t\tid: string;\n\t\t\thandle: ResizeHandleId;\n\t\t\tsnapshot: VectorSceneItem;\n\t\t\tstart: {\n\t\t\t\tbounds: Rect;\n\t\t\t\tline?: import(\"../scene/types\").LineEndpointsLocal;\n\t\t\t};\n\t }\n\t| {\n\t\t\tkind: \"rotate\";\n\t\t\tid: string;\n\t\t\tsnapshot: VectorSceneItem;\n\t\t\tpivotWorld: { x: number; y: number };\n\t\t\tstartPointerAngleRad: number;\n\t\t\tstartRotation: number;\n\t }\n\t| {\n\t\t\tkind: \"place\";\n\t\t\ttool: string;\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tstartScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\tkind: \"tap\";\n\t\t\ttool: \"text\" | \"image\";\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tstartScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\tkind: \"stroke\";\n\t\t\ttool: \"draw\" | \"marker\" | \"laser\";\n\t\t\tpoints: VectorPathPoint[];\n\t\t\tpointerType: string;\n\t\t\titemId?: string;\n\t }\n\t| { kind: \"erase\" }\n\t| {\n\t\t\tkind: \"marquee\";\n\t\t\tstartWorld: { x: number; y: number };\n\t\t\tstartScreen: { x: number; y: number };\n\t\t\tshiftKey: boolean;\n\t\t\tselectionBefore: string[];\n\t };\n\nexport const MIN_PLACE_SIZE = 8;\n/** Screen px — arrow is created only by drag; a click or micro-move cancels (tldraw-style). */\nexport const MIN_ARROW_DRAG_PX = 8;\n/** World units — ignore accidental micro-drags when rubber-band selecting. */\nexport const MIN_MARQUEE_WORLD = 4;\n/** Screen px — small jitter on trackpads cancels the tap if too low. */\nexport const TAP_PX = 20;\n\nexport function collectItemIdsInRect(\n\titems: readonly VectorSceneItem[],\n\tmarqueeWorld: Rect,\n): string[] {\n\tconst m = normalizeRect(marqueeWorld);\n\tconst out: string[] = [];\n\tfor (const it of items) {\n\t\tif (it.locked) continue;\n\t\tif (rectsIntersect(normalizeRect(boundsAabbForRotatedItem(it)), m)) {\n\t\t\tout.push(it.id);\n\t\t}\n\t}\n\treturn out;\n}\n\n/** Fits {@link Camera2D} so `worldRect` is visible in a viewport of `viewportW` × `viewportH` CSS px. */\nexport function fitCameraToWorldRect(\n\tcamera: Camera2D,\n\tviewportW: number,\n\tviewportH: number,\n\tworldRect: Rect,\n\tpadding: number,\n): void {\n\tconst r = normalizeRect(worldRect);\n\tif (r.width <= 0 || r.height <= 0 || viewportW <= 0 || viewportH <= 0) {\n\t\treturn;\n\t}\n\tconst pad = Math.max(0, padding);\n\tconst neededW = r.width * (1 + 2 * pad);\n\tconst neededH = r.height * (1 + 2 * pad);\n\tconst zoomX = viewportW / neededW;\n\tconst zoomY = viewportH / neededH;\n\tlet z = Math.min(zoomX, zoomY);\n\tz = Math.min(camera.maxZoom, Math.max(camera.minZoom, z));\n\tconst cx = r.x + r.width / 2;\n\tconst cy = r.y + r.height / 2;\n\tcamera.zoom = z;\n\tcamera.x = viewportW / 2 - cx * z;\n\tcamera.y = viewportH / 2 - cy * z;\n}\n\nexport function tryPointerCaptureOnTarget(\n\ttarget: EventTarget | null,\n\tpointerId: number,\n): void {\n\tif (!target || !(target instanceof HTMLElement)) return;\n\ttry {\n\t\ttarget.setPointerCapture(pointerId);\n\t} catch {\n\t\t/* ignore */\n\t}\n}\n\nexport { cursorForVectorToolId } from \"./vector-tool-cursors\";\n\n/** When the user clicks (or barely drags), use centered default sizes instead of rejecting. */\nexport function defaultPlacementWorld(\n\ttool: string,\n\tcenter: { x: number; y: number },\n): {\n\traw: Rect;\n\tlineWorld?: [{ x: number; y: number }, { x: number; y: number }];\n} {\n\tconst cx = center.x;\n\tconst cy = center.y;\n\tif (tool === \"rect\") {\n\t\treturn { raw: { x: cx - 60, y: cy - 40, width: 120, height: 80 } };\n\t}\n\tif (tool === \"ellipse\") {\n\t\treturn { raw: { x: cx - 70, y: cy - 45, width: 140, height: 90 } };\n\t}\n\tconst a = { x: cx - 50, y: cy };\n\tconst b = { x: cx + 50, y: cy };\n\treturn {\n\t\traw: rectFromCorners(a, b),\n\t\tlineWorld: [a, b],\n\t};\n}\n","\"use client\";\n\n/**\n * SVG paths for drawing tools match Lucide icons in {@link DEFAULT_VECTOR_TOOLS} (lucide-react v1.x).\n */\nconst NS = 'xmlns=\"http://www.w3.org/2000/svg\"';\nconst STROKE = \"#18181b\";\n\nfunction wrapSvg(inner: string): string {\n\treturn `<svg ${NS} width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"${STROKE}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${inner}</svg>`;\n}\n\nfunction svgUrlCursor(\n\tinner: string,\n\thx: number,\n\thy: number,\n\tfallback: string,\n): string {\n\treturn `url(\"data:image/svg+xml,${encodeURIComponent(wrapSvg(inner))}\") ${hx} ${hy}, ${fallback}`;\n}\n\n/** Lucide `pen-line` */\nconst DRAW_INNER = `<path d=\"M13 21h8\"/><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/>`;\n/** Lucide `highlighter` */\nconst MARKER_INNER = `<path d=\"m9 11-6 6v3h9l3-3\"/><path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\"/>`;\n/** Lucide `eraser` */\nconst ERASER_INNER = `<path d=\"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21\"/><path d=\"m5.082 11.09 8.828 8.828\"/>`;\n/**\n * CSS `cursor` for the active toolbar tool id (see default vector tools).\n * SVG cursors matching Lucide toolbar glyphs are used for freehand tools only.\n * Shape tools keep the old native crosshair cursor.\n */\nexport function cursorForVectorToolId(toolId: string): string {\n\tconst fb = \"crosshair\";\n\tswitch (toolId) {\n\t\tcase \"hand\":\n\t\t\treturn \"grab\";\n\t\tcase \"select\":\n\t\t\treturn \"default\";\n\t\tcase \"rect\":\n\t\tcase \"ellipse\":\n\t\tcase \"line\":\n\t\tcase \"arrow\":\n\t\t\treturn \"crosshair\";\n\t\tcase \"draw\":\n\t\t\treturn svgUrlCursor(DRAW_INNER, 4, 18, fb);\n\t\tcase \"marker\":\n\t\t\treturn svgUrlCursor(MARKER_INNER, 11, 14, fb);\n\t\tcase \"laser\":\n\t\t\treturn \"crosshair\";\n\t\tcase \"eraser\":\n\t\t\treturn svgUrlCursor(ERASER_INNER, 12, 14, fb);\n\t\tcase \"text\":\n\t\t\treturn \"text\";\n\t\tcase \"image\":\n\t\t\treturn \"crosshair\";\n\t\tdefault:\n\t\t\treturn \"default\";\n\t}\n}\n","\"use client\";\n\nimport type { CSSProperties } from \"react\";\nimport {\n\ttype BoardComponentPosition,\n\tgetBoardPositionStyle,\n} from \"./VectorCanvasLayout\";\n\nexport type ViewportZoomControlsProps = {\n\t/** Current zoom for display, e.g. from `Math.round(camera.zoom * 100)`. */\n\tzoomPercent: number;\n\tonZoomIn: () => void;\n\tonZoomOut: () => void;\n\tclassName?: string;\n\t/** Anchor preset. Pass to relocate the floating control. */\n\tposition?: BoardComponentPosition;\n\t/** Distance (px) from anchored edges. @default 12 */\n\tinset?: number;\n\t/** @default 22 */\n\tzIndex?: number;\n\t/** Merged on top of position-derived styles for custom tweaks. */\n\tstyle?: CSSProperties;\n};\n\n/** Default anchor — sits above the {@link NavMenu}/{@link VectorMinimap} on the bottom-left. */\nconst DEFAULT_SHELL_STYLE: CSSProperties = {\n\tposition: \"absolute\",\n\tleft: 12,\n\tbottom: 140,\n\tzIndex: 22,\n};\n\nconst layoutStyle: CSSProperties = {\n\tdisplay: \"flex\",\n\tflexDirection: \"column\",\n\tgap: 4,\n\t/* Let clicks pass through the flex gaps; buttons opt in below. */\n\tpointerEvents: \"none\",\n};\n\nconst btnStyle: CSSProperties = {\n\tpointerEvents: \"auto\",\n\twidth: 36,\n\theight: 36,\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\tborderRadius: 8,\n\tborder: \"1px solid rgba(0,0,0,0.12)\",\n\tbackground: \"rgba(255,255,255,0.96)\",\n\tboxShadow: \"0 1px 3px rgba(0,0,0,0.08)\",\n\tcursor: \"pointer\",\n\tfontSize: 18,\n\tlineHeight: 1,\n\tfontWeight: 600,\n\tcolor: \"#18181b\",\n\tpadding: 0,\n\toutline: \"none\",\n\tWebkitTapHighlightColor: \"transparent\",\n};\n\nconst labelStyle: CSSProperties = {\n\tpointerEvents: \"none\",\n\tfontSize: 10,\n\tfontWeight: 600,\n\tcolor: \"#52525b\",\n\ttextAlign: \"center\",\n\tuserSelect: \"none\",\n\tpadding: \"2px 0\",\n};\n\n/** Reset default fieldset chrome so layout matches the previous `div` shell. */\nconst fieldsetReset: CSSProperties = {\n\tborder: \"none\",\n\tmargin: 0,\n\tpadding: 0,\n\tminWidth: 0,\n};\n\n/**\n * Floating zoom +/- controls. Defaults to the bottom-left, above the minimap.\n * Place inside the viewport root (position relative). Pass `position` for any of the\n * {@link BoardComponentPosition} presets, or `className`/`style` to fully customize.\n */\nexport function ViewportZoomControls({\n\tzoomPercent,\n\tonZoomIn,\n\tonZoomOut,\n\tclassName = \"\",\n\tposition,\n\tinset = 12,\n\tzIndex = 22,\n\tstyle,\n}: ViewportZoomControlsProps) {\n\tconst anchorStyle: CSSProperties =\n\t\tposition !== undefined\n\t\t\t? getBoardPositionStyle(position, inset, zIndex)\n\t\t\t: DEFAULT_SHELL_STYLE;\n\treturn (\n\t\t<fieldset\n\t\t\tclassName={className}\n\t\t\tdata-position={position ?? \"default\"}\n\t\t\taria-label=\"Zoom controls\"\n\t\t\tstyle={{ ...anchorStyle, ...layoutStyle, ...fieldsetReset, ...style }}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tstyle={btnStyle}\n\t\t\t\taria-label=\"Zoom in\"\n\t\t\t\ttitle=\"Zoom in\"\n\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t}}\n\t\t\t\tonClick={onZoomIn}\n\t\t\t>\n\t\t\t\t+\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tstyle={btnStyle}\n\t\t\t\taria-label=\"Zoom out\"\n\t\t\t\ttitle=\"Zoom out\"\n\t\t\t\tonPointerDown={(e) => {\n\t\t\t\t\tif (e.pointerType === \"mouse\") e.preventDefault();\n\t\t\t\t}}\n\t\t\t\tonClick={onZoomOut}\n\t\t\t>\n\t\t\t\t−\n\t\t\t</button>\n\t\t\t<span style={labelStyle} aria-hidden>\n\t\t\t\t{zoomPercent}%\n\t\t\t</span>\n\t\t</fieldset>\n\t);\n}\n"]}
|