canvu-react 0.4.18 → 0.4.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/math/item-transform.ts","../src/interaction/resize-handles.ts","../src/scene/freehand-path.ts","../src/native/skia-transform.ts","../src/native/SvgNodeRenderer.tsx","../src/native/svg-parser.ts","../src/native/NativeShapeRenderer.tsx","../src/native/NativeToolCursorRenderer.tsx","../src/native/native-overlay-style.ts","../src/native/NativeInteractionOverlay.tsx","../src/scene/spatial-cull.ts","../src/scene/cull.ts","../src/native/NativeSceneRenderer.tsx","../src/native/native-style-inspector-values.ts","../src/native/NativeVectorStyleInspector.tsx","../src/native/NativeVectorToolbar.tsx","../src/camera/camera.ts","../src/interaction/hit-test.ts","../src/interaction/mutations.ts","../src/native/native-tool-cursors.ts","../src/native/native-vector-interactions.ts","../src/native/NativeVectorViewport.tsx"],"names":["d","op","b","s","localBounds","SkiaCircle","SkiaLine","SkiaText","SkiaImage","parseNum","attrs","node","jsx","RoundedRect","vec","Fragment","Path","matchFont","jsxs","Line","Group","Rect","Oval","MemoShape","Canvas","useMemo","Text","useState","View","styles","Pressable","StyleSheet","NativeVectorViewport","useCallback","PanResponder","customPlacement"],"mappings":"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","file":"native.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 * Escape text for use inside SVG `<text>` / `<tspan>` (not full XML attribute context).\n */\nexport function escapeSvgTextContent(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\n/**\n * Sophisticated sans-serif used for both canvas text rendering and inline editing.\n * Inter is loaded by host apps (e.g. demo/index.html); system-ui fallback keeps the canvas\n * usable when the webfont hasn't loaded yet.\n */\nexport const TEXT_FONT_FAMILY =\n\t\"Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, system-ui, sans-serif\";\nconst LINE_HEIGHT_RATIO = 22 / 18;\n/**\n * Where the first text baseline sits, expressed in font-size units. Picked so\n * the SVG glyph and the inline-edit textarea agree visually (the textarea's\n * natural first-line baseline lands at this same y when padded by\n * {@link EDIT_TOP_PAD_RATIO}). See {@link TextEditOverlay} for the matching\n * inset.\n */\nconst FIRST_LINE_BASELINE_RATIO = 20 / 18;\n/** Textarea top inset (font-size units) that lines up with the SVG baseline. */\nexport const EDIT_TOP_PAD_RATIO = 4 / 18;\n/** Extra space below the descender so glyphs aren't clipped at the bounds. */\nconst BOTTOM_PAD_RATIO = 4 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 26;\n/** Horizontal padding in local space (matches `<text x=\"4\">`). */\nconst TEXT_PAD_X = 4;\nconst MAX_TEXT_MEASURE_CACHE_ENTRIES = 2000;\n\nlet sharedMeasureContext: CanvasRenderingContext2D | null | undefined;\nconst textMeasureCache = new Map<string, { width: number; height: number }>();\n\nfunction getSharedMeasureContext(): CanvasRenderingContext2D | null {\n\tif (sharedMeasureContext !== undefined) {\n\t\treturn sharedMeasureContext;\n\t}\n\tif (typeof document === \"undefined\") {\n\t\tsharedMeasureContext = null;\n\t\treturn sharedMeasureContext;\n\t}\n\tconst canvas = document.createElement(\"canvas\");\n\tsharedMeasureContext = canvas.getContext(\"2d\");\n\treturn sharedMeasureContext;\n}\n\nfunction textMeasureCacheKey(content: string, fontSize: number): string {\n\treturn `${fontSize}\\n${content}`;\n}\n\nfunction cacheMeasuredBounds(\n\tkey: string,\n\tbounds: { width: number; height: number },\n): void {\n\tif (textMeasureCache.size >= MAX_TEXT_MEASURE_CACHE_ENTRIES) {\n\t\ttextMeasureCache.clear();\n\t}\n\ttextMeasureCache.set(key, bounds);\n}\n\nfunction lineHeightFor(fontSize: number): number {\n\treturn fontSize * LINE_HEIGHT_RATIO;\n}\n\nfunction firstLineBaselineY(fontSize: number): number {\n\treturn fontSize * FIRST_LINE_BASELINE_RATIO;\n}\n\n/** Public version used by callers that need the same baseline as SVG rendering. */\nexport function textBaselineYFor(fontSize: number): number {\n\treturn firstLineBaselineY(fontSize);\n}\n\n/** Public version used by callers that need the same line height as SVG rendering. */\nexport function textLineHeightFor(fontSize: number): number {\n\treturn lineHeightFor(fontSize);\n}\n\n/**\n * Local width/height for a text item so bounds match rendered SVG (no fixed max width).\n * Uses canvas measureText when `document` is available; rough fallback otherwise.\n */\nexport function measureTextBoundsLocal(\n\tcontent: string,\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): {\n\twidth: number;\n\theight: number;\n} {\n\tconst cacheKey = textMeasureCacheKey(content, fontSize);\n\tconst cached = textMeasureCache.get(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst lh = lineHeightFor(fontSize);\n\tconst baselineY = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tconst lines = trimmed.length === 0 ? [PLACEHOLDER] : content.split(\"\\n\");\n\n\tlet maxInnerW = 0;\n\tconst ctx = getSharedMeasureContext();\n\tif (ctx) {\n\t\tctx.font = `${fontSize}px ${TEXT_FONT_FAMILY}`;\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, ctx.measureText(toMeasure).width);\n\t\t}\n\t}\n\tif (maxInnerW === 0) {\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, toMeasure.length * fontSize * 0.52);\n\t\t}\n\t}\n\n\tconst minW = Math.max(MIN_TEXT_BOX_W, TEXT_PAD_X * 2 + fontSize);\n\tconst width = Math.max(minW, TEXT_PAD_X * 2 + maxInnerW);\n\tconst height = Math.max(\n\t\tMIN_TEXT_BOX_H,\n\t\tbaselineY + (lines.length - 1) * lh + Math.max(4, fontSize * BOTTOM_PAD_RATIO),\n\t);\n\tconst measured = { width, height };\n\tcacheMeasuredBounds(cacheKey, measured);\n\treturn measured;\n}\n\n/**\n * Builds SVG `<text>` markup for a text box in local coordinates [0, w] × [0, h].\n * @param fillColor — Text fill (defaults to blue-gray placeholder / blue body).\n */\nexport function buildTextSvg(\n\tcontent: string,\n\t_width: number,\n\t_height: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst lh = lineHeightFor(fontSize);\n\tconst y0 = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tif (trimmed.length === 0) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"#94a3b8\" font-style=\"italic\">${escapeSvgTextContent(PLACEHOLDER)}</text>`;\n\t}\n\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length === 1) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${escapeSvgTextContent(lines[0] ?? \"\")}</text>`;\n\t}\n\n\tconst parts: string[] = [];\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] ?? \"\";\n\t\tif (i === 0) {\n\t\t\tparts.push(`<tspan x=\"4\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t} else {\n\t\t\tparts.push(`<tspan x=\"4\" dy=\"${lh}\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t}\n\t}\n\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${parts.join(\"\")}</text>`;\n}\n\n/**\n * Text that wraps inside a fixed rectangle (after user resize). Uses `foreignObject` + XHTML\n * so wrapping matches browser layout.\n */\nexport function buildTextFixedBoundsSvg(\n\tcontent: string,\n\twidth: number,\n\theight: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst w = Math.max(1, width);\n\tconst h = Math.max(1, height);\n\tconst lh = lineHeightFor(fontSize);\n\tconst trimmed = content.trim();\n\tconst padTop = EDIT_TOP_PAD_RATIO * fontSize;\n\tif (trimmed.length === 0) {\n\t\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:#94a3b8;font-style:italic\">${escapeHtmlText(PLACEHOLDER)}</div></foreignObject>`;\n\t}\n\tconst body = escapeHtmlText(content);\n\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:${fillColor}\">${body}</div></foreignObject>`;\n}\n","import type { StrokeOptions } from \"perfect-freehand\";\nimport getStroke from \"perfect-freehand\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { buildCustomShapeChildrenSvg } from \"./custom-shape\";\nimport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n} from \"./text-svg\";\nimport type {\n\tArrowBindings,\n\tLineEndpointsLocal,\n\tVectorPathPoint,\n\tVectorSceneItem,\n} from \"./types\";\n\nexport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n};\n\n/**\n * While inline-editing: sync bounds to draft width/height and hide SVG so only the textarea shows text.\n */\nexport function applyTextDraftWhileEditing(\n\titem: VectorSceneItem,\n\tdraft: string,\n): VectorSceneItem {\n\tif (item.toolKind !== \"text\") return item;\n\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\tif (item.textFixedBounds) {\n\t\treturn {\n\t\t\t...item,\n\t\t\ttext: draft,\n\t\t\tchildrenSvg: \"\",\n\t\t};\n\t}\n\tconst m = measureTextBoundsLocal(draft, fs);\n\treturn {\n\t\t...item,\n\t\ttext: draft,\n\t\tbounds: {\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t},\n\t\tchildrenSvg: \"\",\n\t};\n}\n\n/** Stroke dash pattern for freehand drawings. `solid` = perfect-freehand fill; `dashed` = centerline stroke with dashes. */\nexport type StrokeDash = \"solid\" | \"dashed\";\n\n/** Resolved stroke for SVG generation. */\nexport type StrokeStyle = {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n\tstrokeDash?: StrokeDash;\n};\n\nexport const DEFAULT_STROKE_STYLE: StrokeStyle = {\n\tstroke: \"#1d1d1d\",\n\tstrokeWidth: 2,\n};\n\nconst TOOL_FREEHAND_DEFAULTS: Record<\n\t\"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tPartial<StrokeStyle>\n> = {\n\tdraw: { strokeWidth: 10 },\n\tpencil: { strokeWidth: 3 },\n\tbrush: { strokeWidth: 10 },\n\tmarker: { stroke: \"#fde047\", strokeWidth: 16, strokeOpacity: 0.5 },\n};\n\nfunction perfectFreehandOptions(\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstyle: StrokeStyle,\n\tstrokeComplete: boolean,\n\tpressureAware = false,\n): StrokeOptions {\n\tconst sw = style.strokeWidth;\n\tconst base: StrokeOptions = {\n\t\tlast: strokeComplete,\n\t\tsimulatePressure: true,\n\t};\n\tif (toolKind === \"draw\" || toolKind === \"pencil\") {\n\t\tif (pressureAware && toolKind === \"draw\") {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tsize: Math.max(2, sw * 1.05),\n\t\t\t\tthinning: 0.42,\n\t\t\t\tsmoothing: 0.78,\n\t\t\t\tstreamline: 0.62,\n\t\t\t\tsimulatePressure: true,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(2, sw * 1.18),\n\t\t\tthinning: 0.12,\n\t\t\tsmoothing: 0.85,\n\t\t\tstreamline: 0.78,\n\t\t\tsimulatePressure: true,\n\t\t};\n\t}\n\tif (toolKind === \"brush\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(4, sw * 1.22),\n\t\t\tthinning: 0.52,\n\t\t\tsmoothing: 0.64,\n\t\t\tstreamline: 0.68,\n\t\t};\n\t}\n\treturn {\n\t\t...base,\n\t\tsize: Math.max(6, sw * 1.08),\n\t\tthinning: 0.08,\n\t\tsmoothing: 0.88,\n\t\tstreamline: 0.84,\n\t\tsimulatePressure: true,\n\t};\n}\n\nexport function resolveStrokeStyle(item: VectorSceneItem): StrokeStyle {\n\treturn {\n\t\tstroke: item.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\tstrokeWidth: item.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\tstrokeOpacity: item.strokeOpacity,\n\t\tstrokeDash: item.strokeDash,\n\t};\n}\n\nfunction strokeOpacityAttr(style: StrokeStyle): string {\n\treturn style.strokeOpacity != null\n\t\t? ` stroke-opacity=\"${style.strokeOpacity}\"`\n\t\t: \"\";\n}\n\nfunction svgNumber(value: number): string {\n\tif (!Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Number.isInteger(rounded) ? String(rounded) : String(rounded);\n}\n\nconst ARCHITECTURAL_CLOUD_RADIUS = 38;\nconst ARCHITECTURAL_CLOUD_TARGET_SPACING = 50;\nconst ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO = 0.38;\nconst ARCHITECTURAL_CLOUD_ROUNDED_RADIUS = 72;\nconst ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS = 44;\nconst ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING = 98;\n\ntype CloudPoint = readonly [number, number];\n\ntype CloudPathSegment = {\n\tlength: number;\n\tpointAt: (t: number) => CloudPoint;\n};\n\nfunction architecturalCloudCenterCount(edgeLength: number, radius: number): number {\n\tconst targetSpacing = Math.min(\n\t\tARCHITECTURAL_CLOUD_TARGET_SPACING,\n\t\tMath.max(1, radius * 1.3),\n\t);\n\treturn Math.max(2, Math.round(edgeLength / targetSpacing) + 1);\n}\n\nfunction distributeRange(start: number, end: number, count: number): number[] {\n\tif (count <= 1) return [start];\n\tconst step = (end - start) / (count - 1);\n\treturn Array.from({ length: count }, (_, index) => start + step * index);\n}\n\nfunction lineCloudPathSegment(start: CloudPoint, end: CloudPoint): CloudPathSegment {\n\tconst dx = end[0] - start[0];\n\tconst dy = end[1] - start[1];\n\tconst length = Math.hypot(dx, dy);\n\treturn {\n\t\tlength,\n\t\tpointAt: (t) => [start[0] + dx * t, start[1] + dy * t],\n\t};\n}\n\nfunction ellipsePoint(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tangle: number,\n): CloudPoint {\n\treturn [centerX + Math.cos(angle) * radiusX, centerY + Math.sin(angle) * radiusY];\n}\n\nfunction approximateEllipseArcLength(\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): number {\n\tconst steps = Math.max(\n\t\t4,\n\t\tMath.ceil(Math.abs(endAngle - startAngle) / (Math.PI / 16)),\n\t);\n\tlet length = 0;\n\tlet previous = ellipsePoint(0, 0, radiusX, radiusY, startAngle);\n\tfor (let index = 1; index <= steps; index += 1) {\n\t\tconst angle = startAngle + ((endAngle - startAngle) * index) / steps;\n\t\tconst next = ellipsePoint(0, 0, radiusX, radiusY, angle);\n\t\tlength += Math.hypot(next[0] - previous[0], next[1] - previous[1]);\n\t\tprevious = next;\n\t}\n\treturn length;\n}\n\nfunction ellipseCloudPathSegment(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): CloudPathSegment {\n\treturn {\n\t\tlength: approximateEllipseArcLength(radiusX, radiusY, startAngle, endAngle),\n\t\tpointAt: (t) =>\n\t\t\tellipsePoint(\n\t\t\t\tcenterX,\n\t\t\t\tcenterY,\n\t\t\t\tradiusX,\n\t\t\t\tradiusY,\n\t\t\t\tstartAngle + (endAngle - startAngle) * t,\n\t\t\t),\n\t};\n}\n\nfunction cloudPathPerimeter(segments: CloudPathSegment[]): number {\n\tconst usableSegments = segments.filter((segment) => segment.length > 1e-9);\n\treturn usableSegments.reduce((sum, segment) => sum + segment.length, 0);\n}\n\nfunction pointOnCloudPath(\n\tsegments: CloudPathSegment[],\n\tdistance: number,\n): CloudPoint {\n\tconst perimeter = cloudPathPerimeter(segments);\n\tif (perimeter <= 0) return [0, 0];\n\n\tlet remaining = ((distance % perimeter) + perimeter) % perimeter;\n\tfor (const segment of segments) {\n\t\tif (segment.length <= 1e-9) continue;\n\t\tif (remaining <= segment.length) {\n\t\t\tconst t = remaining / segment.length;\n\t\t\treturn segment.pointAt(t);\n\t\t}\n\t\tremaining -= segment.length;\n\t}\n\n\tconst fallback = segments.find((segment) => segment.length > 1e-9);\n\treturn fallback?.pointAt(0) ?? [0, 0];\n}\n\nfunction buildRoundedCapsulePathSegments(\n\twidth: number,\n\theight: number,\n\tinset: number,\n): CloudPathSegment[] {\n\tconst left = inset;\n\tconst top = inset;\n\tconst right = width - inset;\n\tconst bottom = height - inset;\n\tconst capsuleWidth = Math.max(0, right - left);\n\tconst capsuleHeight = Math.max(0, bottom - top);\n\tconst radius = Math.min(capsuleWidth, capsuleHeight) / 2;\n\tif (radius <= 0) return [];\n\n\tconst leftCenterX = left + radius;\n\tconst rightCenterX = right - radius;\n\tconst topCenterY = top + radius;\n\tconst bottomCenterY = bottom - radius;\n\n\treturn [\n\t\tlineCloudPathSegment([leftCenterX, top], [rightCenterX, top]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t-Math.PI / 2,\n\t\t\t0,\n\t\t),\n\t\tlineCloudPathSegment([right, topCenterY], [right, bottomCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t0,\n\t\t\tMath.PI / 2,\n\t\t),\n\t\tlineCloudPathSegment([rightCenterX, bottom], [leftCenterX, bottom]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI / 2,\n\t\t\tMath.PI,\n\t\t),\n\t\tlineCloudPathSegment([left, bottomCenterY], [left, topCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI,\n\t\t\tMath.PI * 1.5,\n\t\t),\n\t];\n}\n\nfunction buildRoundedArcCloudPathD(\n\tcloudWidth: number,\n\tcloudHeight: number,\n\tcenter: CloudPoint,\n): string {\n\tconst minDimension = Math.min(cloudWidth, cloudHeight);\n\tconst radius = Math.min(\n\t\tARCHITECTURAL_CLOUD_ROUNDED_RADIUS,\n\t\tMath.max(ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS, minDimension * 0.16),\n\t);\n\tconst centerPath = buildRoundedCapsulePathSegments(\n\t\tcloudWidth,\n\t\tcloudHeight,\n\t\tradius,\n\t);\n\tconst centerPerimeter = cloudPathPerimeter(centerPath);\n\tif (centerPerimeter <= 0) return \"\";\n\n\tconst lobeCount = Math.max(\n\t\t8,\n\t\tMath.round(centerPerimeter / ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING),\n\t);\n\tconst centers = Array.from({ length: lobeCount }, (_, index) =>\n\t\tpointOnCloudPath(centerPath, (centerPerimeter * index) / lobeCount),\n\t);\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudCircleIntersection(previous, point, radius, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\nfunction cloudCircleIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradius: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst midX = (a[0] + b[0]) / 2;\n\tconst midY = (a[1] + b[1]) / 2;\n\tconst dx = b[0] - a[0];\n\tconst dy = b[1] - a[1];\n\tconst distance = Math.hypot(dx, dy);\n\tif (distance <= 1e-9) return [midX, midY];\n\n\tconst halfDistance = distance / 2;\n\tconst offset = Math.sqrt(\n\t\tMath.max(0, radius * radius - halfDistance * halfDistance),\n\t);\n\tconst normalX = -dy / distance;\n\tconst normalY = dx / distance;\n\tconst first: [number, number] = [midX + normalX * offset, midY + normalY * offset];\n\tconst second: [number, number] = [\n\t\tmidX - normalX * offset,\n\t\tmidY - normalY * offset,\n\t];\n\tconst firstDistance =\n\t\t(first[0] - center[0]) * (first[0] - center[0]) +\n\t\t(first[1] - center[1]) * (first[1] - center[1]);\n\tconst secondDistance =\n\t\t(second[0] - center[0]) * (second[0] - center[0]) +\n\t\t(second[1] - center[1]) * (second[1] - center[1]);\n\treturn firstDistance >= secondDistance ? first : second;\n}\n\nfunction cloudEllipseIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradiusX: number,\n\tradiusY: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst scaleY = radiusX / radiusY;\n\tconst [x, y] = cloudCircleIntersection(\n\t\t[a[0], a[1] * scaleY],\n\t\t[b[0], b[1] * scaleY],\n\t\tradiusX,\n\t\t[center[0], center[1] * scaleY],\n\t);\n\treturn [x, y / scaleY];\n}\n\nexport function buildRectSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<rect width=\"${width}\" height=\"${height}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" rx=\"4\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildEllipseSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst rx = width / 2;\n\tconst ry = height / 2;\n\treturn `<ellipse cx=\"${rx}\" cy=\"${ry}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\n/**\n * Returns the local SVG path for a scalable architectural revision cloud.\n *\n * Use this low-level helper when you need to preview or inspect the shape without\n * creating a full scene item. Prefer {@link createArchitecturalCloudItem} when\n * adding a cloud to a `VectorSceneItem[]`, because it keeps `toolKind`, bounds,\n * stroke fields, and `childrenSvg` synchronized for editing.\n *\n * @example\n * ```ts\n * const d = buildArchitecturalCloudPathD(180, 90);\n * ```\n */\nexport function buildArchitecturalCloudPathD(\n\twidth: number,\n\theight: number,\n\tstrokeWidth = DEFAULT_STROKE_STYLE.strokeWidth,\n): string {\n\tconst w = Math.max(0, width);\n\tconst h = Math.max(0, height);\n\tif (w <= 0 || h <= 0) return \"\";\n\n\tconst padding = Math.max(0, strokeWidth * 2);\n\tconst cloudWidth = Math.max(0, w - padding);\n\tconst cloudHeight = Math.max(0, h - padding);\n\tif (cloudWidth <= 0 || cloudHeight <= 0) return \"\";\n\n\tconst radiusX = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudWidth * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tconst radiusY = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudHeight * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tif (radiusX <= 0 || radiusY <= 0) return \"\";\n\n\tconst center: CloudPoint = [cloudWidth / 2, cloudHeight / 2];\n\tconst leftCenterX = radiusX;\n\tconst rightCenterX = cloudWidth - radiusX;\n\tconst topCenterY = radiusY;\n\tconst bottomCenterY = cloudHeight - radiusY;\n\tconst horizontalCenters = distributeRange(\n\t\tleftCenterX,\n\t\trightCenterX,\n\t\tarchitecturalCloudCenterCount(Math.max(0, rightCenterX - leftCenterX), radiusX),\n\t);\n\tconst verticalCenters = distributeRange(\n\t\ttopCenterY,\n\t\tbottomCenterY,\n\t\tarchitecturalCloudCenterCount(Math.max(0, bottomCenterY - topCenterY), radiusY),\n\t);\n\tif (horizontalCenters.length > 3 && verticalCenters.length > 3) {\n\t\tconst roundedArcCloudPath = buildRoundedArcCloudPathD(\n\t\t\tcloudWidth,\n\t\t\tcloudHeight,\n\t\t\tcenter,\n\t\t);\n\t\tif (roundedArcCloudPath !== \"\") return roundedArcCloudPath;\n\t}\n\tconst rectangularCenters: CloudPoint[] = [\n\t\t...horizontalCenters.map((x) => [x, topCenterY] as const),\n\t\t...verticalCenters.slice(1).map((y) => [rightCenterX, y] as const),\n\t\t...horizontalCenters\n\t\t\t.slice(0, -1)\n\t\t\t.reverse()\n\t\t\t.map((x) => [x, bottomCenterY] as const),\n\t\t...verticalCenters\n\t\t\t.slice(1, -1)\n\t\t\t.reverse()\n\t\t\t.map((y) => [leftCenterX, y] as const),\n\t];\n\tconst centers = rectangularCenters;\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudEllipseIntersection(previous, point, radiusX, radiusY, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\n/**\n * Builds an SVG fragment for an architectural revision cloud outline.\n *\n * This is the renderer-level primitive behind the built-in `\"architectural-cloud\"`\n * tool. Prefer {@link createArchitecturalCloudItem} for app code that inserts a\n * normal editable scene item.\n */\nexport function buildArchitecturalCloudSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst d = buildArchitecturalCloudPathD(width, height, style.strokeWidth);\n\treturn `<path d=\"${d}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildLineSvg(\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${line.x2}\" y2=\"${line.y2}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\nexport type StraightArrowGeometry = {\n\tshaftEndX: number;\n\tshaftEndY: number;\n\theadTipX: number;\n\theadTipY: number;\n\theadLeftX: number;\n\theadLeftY: number;\n\theadRightX: number;\n\theadRightY: number;\n};\n\nexport function computeStraightArrowGeometry(\n\tline: LineEndpointsLocal,\n\tstrokeWidth: number,\n): StraightArrowGeometry | null {\n\tconst dx = line.x2 - line.x1;\n\tconst dy = line.y2 - line.y1;\n\tconst len = Math.hypot(dx, dy);\n\tif (len < 1e-6) return null;\n\tconst ux = dx / len;\n\tconst uy = dy / len;\n\tconst headLength = Math.min(Math.max(strokeWidth * 4.2, 12), len * 0.38);\n\tconst headAngle = Math.PI / 6;\n\tconst cos = Math.cos(headAngle);\n\tconst sin = Math.sin(headAngle);\n\tconst rx1 = ux * cos - uy * sin;\n\tconst ry1 = ux * sin + uy * cos;\n\tconst rx2 = ux * cos + uy * sin;\n\tconst ry2 = -ux * sin + uy * cos;\n\treturn {\n\t\tshaftEndX: line.x2,\n\t\tshaftEndY: line.y2,\n\t\theadTipX: line.x2,\n\t\theadTipY: line.y2,\n\t\theadLeftX: line.x2 - rx1 * headLength,\n\t\theadLeftY: line.y2 - ry1 * headLength,\n\t\theadRightX: line.x2 - rx2 * headLength,\n\t\theadRightY: line.y2 - ry2 * headLength,\n\t};\n}\n\nexport function buildArrowSvg(\n\titemId: string,\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tvoid itemId;\n\tconst geometry = computeStraightArrowGeometry(line, style.strokeWidth);\n\tif (!geometry) {\n\t\treturn buildLineSvg(line, style);\n\t}\n\tconst op = strokeOpacityAttr(style);\n\treturn `\n\t\t<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${geometry.shaftEndX}\" y2=\"${geometry.shaftEndY}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\"${op} />\n\t\t<path d=\"M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op} />\n\t`;\n}\n\nexport function buildDrawDotSvg(\n\tr: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst op =\n\t\tstyle.strokeOpacity != null ? ` fill-opacity=\"${style.strokeOpacity}\"` : \"\";\n\treturn `<circle cx=\"${r}\" cy=\"${r}\" r=\"${r}\" fill=\"${style.stroke}\" shape-rendering=\"geometricPrecision\"${op} />`;\n}\n\n/** Structured result for React overlays; scene uses {@link buildFreehandPathSvg} string. */\nexport type FreehandSvgPayload =\n\t| {\n\t\t\tkind: \"circle\";\n\t\t\tcx: number;\n\t\t\tcy: number;\n\t\t\tr: number;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"fillPath\";\n\t\t\td: string;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"strokePath\";\n\t\t\td: string;\n\t\t\tstroke: string;\n\t\t\tstrokeWidth: number;\n\t\t\tstrokeOpacity?: number;\n\t\t\tstrokeDasharray?: string;\n\t };\n\nfunction dashArrayForDrawStroke(strokeWidth: number): string {\n\tconst dash = Math.max(strokeWidth * 1.8, 4);\n\tconst gap = Math.max(strokeWidth * 1.4, 3);\n\treturn `${dash} ${gap}`;\n}\n\nfunction buildSmoothedCenterlinePath(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst first = points[0];\n\tif (!first) return null;\n\tlet d = `M ${first.x} ${first.y}`;\n\tfor (let i = 1; i < points.length - 1; i++) {\n\t\tconst a = points[i];\n\t\tconst b = points[i + 1];\n\t\tif (!a || !b) continue;\n\t\tconst midX = (a.x + b.x) / 2;\n\t\tconst midY = (a.y + b.y) / 2;\n\t\td += ` Q ${a.x} ${a.y} ${midX} ${midY}`;\n\t}\n\tconst last = points[points.length - 1];\n\tif (last) {\n\t\td += ` L ${last.x} ${last.y}`;\n\t}\n\treturn d;\n}\n\n/**\n * Computes freehand geometry (perfect-freehand + fallback). Used by {@link buildFreehandPathSvg}\n * and React overlays without `dangerouslySetInnerHTML`.\n */\nexport function computeFreehandSvgPayload(\n\tpathPointsLocal: readonly VectorPathPoint[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): FreehandSvgPayload | null {\n\tif (pathPointsLocal.length === 0) return null;\n\tif (pathPointsLocal.length === 1) {\n\t\tconst p = pathPointsLocal[0];\n\t\tif (!p) return null;\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr: Math.max(0.5, style.strokeWidth / 2),\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tif (\n\t\tstyle.strokeDash === \"dashed\" &&\n\t\t(toolKind === \"draw\" || toolKind === \"pencil\")\n\t) {\n\t\tconst d = buildSmoothedCenterlinePath(pathPointsLocal);\n\t\tif (!d) return null;\n\t\treturn {\n\t\t\tkind: \"strokePath\",\n\t\t\td,\n\t\t\tstroke: style.stroke,\n\t\t\tstrokeWidth: style.strokeWidth,\n\t\t\tstrokeOpacity: style.strokeOpacity,\n\t\t\tstrokeDasharray: dashArrayForDrawStroke(style.strokeWidth),\n\t\t};\n\t}\n\tconst hasPressure = pathPointsLocal.some(\n\t\t(p) => p.pressure != null && Number.isFinite(p.pressure),\n\t);\n\tconst input = hasPressure\n\t\t? pathPointsLocal.map(\n\t\t\t\t(p) =>\n\t\t\t\t\t[p.x, p.y, Math.min(1, Math.max(0, p.pressure ?? 0.5))] as [\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t],\n\t\t\t)\n\t\t: pathPointsLocal.map((p) => [p.x, p.y] as [number, number]);\n\tconst stroke = getStroke(\n\t\tinput,\n\t\tperfectFreehandOptions(toolKind, style, strokeComplete, hasPressure),\n\t);\n\tif (stroke.length < 3) return null;\n\tconst first = stroke[0];\n\tif (!first) return null;\n\tlet d = `M ${first[0]} ${first[1]} Q`;\n\tfor (let i = 0; i < stroke.length; i++) {\n\t\tconst a = stroke[i];\n\t\tconst b = stroke[(i + 1) % stroke.length];\n\t\tif (!a || !b) continue;\n\t\td += ` ${a[0]} ${a[1]} ${(a[0] + b[0]) / 2} ${(a[1] + b[1]) / 2}`;\n\t}\n\td += \" Z\";\n\treturn {\n\t\tkind: \"fillPath\",\n\t\td,\n\t\tfill: style.stroke,\n\t\tfillOpacity: style.strokeOpacity,\n\t};\n}\n\nfunction freehandPayloadToSvgString(payload: FreehandSvgPayload): string {\n\tif (payload.kind === \"circle\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<circle cx=\"${payload.cx}\" cy=\"${payload.cy}\" r=\"${payload.r}\" fill=\"${payload.fill}\" shape-rendering=\"geometricPrecision\"${op} />`;\n\t}\n\tif (payload.kind === \"fillPath\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<path d=\"${payload.d}\" fill=\"${payload.fill}\" fill-rule=\"nonzero\" stroke=\"none\"${op} shape-rendering=\"geometricPrecision\" />`;\n\t}\n\tconst op = strokeOpacityAttr({\n\t\tstroke: payload.stroke,\n\t\tstrokeWidth: payload.strokeWidth,\n\t\tstrokeOpacity: payload.strokeOpacity,\n\t});\n\tconst dash = payload.strokeDasharray\n\t\t? ` stroke-dasharray=\"${payload.strokeDasharray}\"`\n\t\t: \"\";\n\treturn `<path d=\"${payload.d}\" fill=\"none\" stroke=\"${payload.stroke}\" stroke-width=\"${payload.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op}${dash} />`;\n}\n\n/**\n * Freehand stroke in local coordinates using [perfect-freehand](https://github.com/steveruizok/perfect-freehand)\n * (filled outline, tapered caps — similar spirit to tldraw / Excalidraw ink).\n */\nexport function buildFreehandPathSvg(\n\tpathPointsLocal: readonly { x: number; y: number }[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): string {\n\tconst payload = computeFreehandSvgPayload(\n\t\tpathPointsLocal,\n\t\tstyle,\n\t\ttoolKind,\n\t\tstrokeComplete,\n\t);\n\tif (!payload) return \"\";\n\treturn freehandPayloadToSvgString(payload);\n}\n\n/**\n * Creates a new unique id for a shape (for `VectorSceneItem.id` when adding from code or API).\n */\nexport function createShapeId(): string {\n\tconst uid =\n\t\ttypeof crypto !== \"undefined\" && crypto.randomUUID\n\t\t\t? crypto.randomUUID()\n\t\t\t: String(Date.now());\n\treturn `user-shape-${uid}`;\n}\n\n/**\n * Converts line segment endpoints from **world** coordinates to **local** coordinates\n * (origin = top-left of `bounds`). Use with {@link createLineItem}.\n */\nexport function lineEndpointsToLocal(\n\tbounds: Rect,\n\tworldEndA: { x: number; y: number },\n\tworldEndB: { x: number; y: number },\n): LineEndpointsLocal {\n\tconst b = normalizeRect(bounds);\n\treturn {\n\t\tx1: worldEndA.x - b.x,\n\t\ty1: worldEndA.y - b.y,\n\t\tx2: worldEndB.x - b.x,\n\t\ty2: worldEndB.y - b.y,\n\t};\n}\n\n/**\n * Rebuilds the SVG fragment (`childrenSvg`) from geometry + stroke fields (after edits or resize).\n */\nexport function rebuildItemSvg(item: VectorSceneItem): VectorSceneItem {\n\tconst style = resolveStrokeStyle(item);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRectSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"ellipse\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildEllipseSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"architectural-cloud\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildArchitecturalCloudSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif ((k === \"line\" || k === \"arrow\") && item.line) {\n\t\tconst line = item.line;\n\t\tconst childrenSvg =\n\t\t\tk === \"arrow\"\n\t\t\t\t? buildArrowSvg(item.id, line, style)\n\t\t\t\t: buildLineSvg(line, style);\n\t\treturn { ...item, childrenSvg };\n\t}\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\t\tif (item.textFixedBounds) {\n\t\t\tconst b = normalizeRect(item.bounds);\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: b.x,\n\t\t\t\ty: b.y,\n\t\t\t\tbounds: b,\n\t\t\t\tchildrenSvg: buildTextFixedBoundsSvg(\n\t\t\t\t\titem.text,\n\t\t\t\t\tb.width,\n\t\t\t\t\tb.height,\n\t\t\t\t\tstyle.stroke,\n\t\t\t\t\tfs,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tconst m = measureTextBoundsLocal(item.text, fs);\n\t\tconst b = normalizeRect({\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t});\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildTextSvg(item.text, b.width, b.height, style.stroke, fs),\n\t\t};\n\t}\n\tif (\n\t\t(k === \"draw\" || k === \"pencil\" || k === \"brush\" || k === \"marker\") &&\n\t\titem.pathPointsLocal &&\n\t\titem.pathPointsLocal.length > 0\n\t) {\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildFreehandPathSvg(item.pathPointsLocal, style, k),\n\t\t};\n\t}\n\tif (k === \"draw\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\tconst r = Math.min(b.width, b.height) / 2;\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildDrawDotSvg(r, style),\n\t\t};\n\t}\n\tif (k === \"image\" && item.imageRasterHref && item.imageIntrinsicSize) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\titem.imageRasterHref,\n\t\t\t\titem.imageIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildCustomShapeChildrenSvg(\n\t\t\t\titem.customInnerSvg,\n\t\t\t\titem.customIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\n\treturn item;\n}\n\n/** Updates stroke color / width / opacity and refreshes the item’s SVG. */\nexport function applyStrokeToItem(\n\titem: VectorSceneItem,\n\tpatch: Partial<\n\t\tPick<\n\t\t\tVectorSceneItem,\n\t\t\t\"stroke\" | \"strokeWidth\" | \"strokeOpacity\" | \"strokeDash\" | \"textFontSize\"\n\t\t>\n\t>,\n): VectorSceneItem {\n\treturn rebuildItemSvg({ ...item, ...patch });\n}\n\n/** Creates a rectangle shape ready to append to your scene `items` array. */\nexport function createRectangleItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"rect\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an ellipse shape. */\nexport function createEllipseItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"ellipse\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/**\n * Creates an architectural revision cloud shape.\n *\n * Use this high-level builder when adding the built-in cloud shape from code or\n * from custom integrations. It creates an editable `VectorSceneItem` with\n * `toolKind: \"architectural-cloud\"`, so resize, stroke styling, selection, and\n * serialization continue to work like the built-in rectangle and ellipse tools.\n *\n * @example\n * ```ts\n * const cloud = createArchitecturalCloudItem(createShapeId(), {\n * x: 40,\n * y: 30,\n * width: 180,\n * height: 90,\n * });\n * ```\n */\nexport function createArchitecturalCloudItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"architectural-cloud\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates a straight line or arrow; `line` is usually from {@link lineEndpointsToLocal}. */\nexport function createLineItem(\n\tid: string,\n\tbounds: Rect,\n\tline: LineEndpointsLocal,\n\ttoolKind: \"line\" | \"arrow\",\n\tstyle?: Partial<StrokeStyle>,\n\tarrowBind?: ArrowBindings,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind,\n\t\tline: { ...line },\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(arrowBind ? { arrowBind } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** “Draw dot” tool: a small filled circle at (`worldX`, `worldY`). */\nexport function createDrawDotItem(\n\tid: string,\n\tworldX: number,\n\tworldY: number,\n\tradius: number,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: worldX - radius,\n\t\ty: worldY - radius,\n\t\tbounds: {\n\t\t\tx: worldX - radius,\n\t\t\ty: worldY - radius,\n\t\t\twidth: radius * 2,\n\t\t\theight: radius * 2,\n\t\t},\n\t\ttoolKind: \"draw\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an editable text box (`stroke` is used as text fill). */\nexport function createTextItem(\n\tid: string,\n\tbounds: Rect,\n\ttext = \"\",\n\tstyle?: Partial<StrokeStyle>,\n\ttextFontSize?: number,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"text\",\n\t\ttext,\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(textFontSize != null ? { textFontSize } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Freehand stroke from world-space points (main pen or marker highlight). */\nexport function createFreehandStrokeItem(\n\tid: string,\n\tpointsWorld: readonly VectorPathPoint[],\n\ttoolKind: \"draw\" | \"marker\",\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem | null {\n\tif (pointsWorld.length === 0) return null;\n\n\tconst merged: StrokeStyle = {\n\t\t...DEFAULT_STROKE_STYLE,\n\t\t...TOOL_FREEHAND_DEFAULTS[toolKind],\n\t\t...style,\n\t};\n\n\tconst sw = merged.strokeWidth;\n\t/** Filled outline extends ~size/2 past the polyline; keep generous padding to avoid clipping. */\n\tconst pad = Math.max(sw * 0.75 + 4, sw / 2 + 6);\n\tconst xs = pointsWorld.map((p) => p.x);\n\tconst ys = pointsWorld.map((p) => p.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\n\tconst x = minX - pad;\n\tconst y = minY - pad;\n\tconst w = Math.max(maxX - minX + 2 * pad, sw);\n\tconst h = Math.max(maxY - minY + 2 * pad, sw);\n\n\tconst pathPointsLocal = pointsWorld.map((p) => ({\n\t\tx: p.x - x,\n\t\ty: p.y - y,\n\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t}));\n\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx,\n\t\ty,\n\t\tbounds: { x, y, width: w, height: h },\n\t\ttoolKind,\n\t\tstroke: merged.stroke,\n\t\tstrokeWidth: merged.strokeWidth,\n\t\t...(merged.strokeOpacity != null ? { strokeOpacity: merged.strokeOpacity } : {}),\n\t\t...(merged.strokeDash != null ? { strokeDash: merged.strokeDash } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","import 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","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","/**\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 * Converts SVG transform strings (from formatCameraTransform /\n * formatItemPlacementTransform) to @shopify/react-native-skia\n * Group transform arrays.\n *\n * Skia applies transforms left-to-right. SVG/CSS string transforms are\n * applied right-to-left, so we reverse the order and convert to Skia format.\n */\nexport type SkiaTransform =\n\t| { translateX: number }\n\t| { translateY: number }\n\t| { scale: number }\n\t| { scaleX: number }\n\t| { scaleY: number }\n\t| { rotate: number; origin?: { x: number; y: number } };\n\nfunction parseNum(s: string): number {\n\treturn Number(s);\n}\n\n/**\n * Parses an SVG/CSS transform attribute string into a Skia transform array.\n *\n * Supported functions: matrix(a,b,c,d,e,f), translate(x [,y]),\n * scale(x [,y]), rotate(a [,cx,cy]).\n */\nexport function parseSvgTransform(s: string): SkiaTransform[] {\n\tif (!s || s.trim().length === 0) return [];\n\tconst clean = s.trim();\n\tconst result: SkiaTransform[] = [];\n\n\t// Split on \") \" or \")\" followed by space/letter to find transform function boundaries\n\tconst parts = clean.match(/[a-z]+\\([^)]*\\)/gi);\n\tif (!parts) return [];\n\n\t// SVG applies right-to-left, so we reverse for Skia (left-to-right)\n\tconst reversed = [...parts].reverse();\n\n\tfor (const part of reversed) {\n\t\tconst m = part.match(/^([a-z]+)\\(([^)]*)\\)$/i);\n\t\tif (!m) continue;\n\t\tconst fn = (m[1] ?? \"\").toLowerCase();\n\t\tconst args = (m[2] ?? \"\")\n\t\t\t.split(/[\\s,]+/)\n\t\t\t.filter(Boolean)\n\t\t\t.map(parseNum);\n\n\t\tswitch (fn) {\n\t\t\tcase \"matrix\": {\n\t\t\t\t// matrix(a, b, c, d, e, f)\n\t\t\t\t// SVG: | a c e | Actually for SVG canonical: matrix(a,b,c,d,e,f)\n\t\t\t\t// | b d f | x' = a*x + c*y + e\n\t\t\t\t// | 0 0 1 | y' = b*x + d*y + f\n\t\t\t\tconst [a, b, c, d, e, f] = args;\n\n\t\t\t\t// Only handle uniform scale cases cleanly\n\t\t\t\tif (\n\t\t\t\t\ta !== undefined &&\n\t\t\t\t\td !== undefined &&\n\t\t\t\t\tMath.abs(b ?? 0) < 1e-12 &&\n\t\t\t\t\tMath.abs(c ?? 0) < 1e-12 &&\n\t\t\t\t\tMath.abs(a - (d ?? 0)) < 1e-12\n\t\t\t\t) {\n\t\t\t\t\t// Uniform scale + translate: matrix(s,0,0,s,tx,ty)\n\t\t\t\t\tresult.push({ scale: a });\n\t\t\t\t} else if (\n\t\t\t\t\ta !== undefined &&\n\t\t\t\t\td !== undefined &&\n\t\t\t\t\tMath.abs(b ?? 0) < 1e-12 &&\n\t\t\t\t\tMath.abs(c ?? 0) < 1e-12\n\t\t\t\t) {\n\t\t\t\t\t// Non-uniform scale + translate\n\t\t\t\t\tresult.push({ scaleX: a, scaleY: d } as SkiaTransform);\n\t\t\t\t}\n\t\t\t\tif (e !== undefined && !Number.isNaN(e)) result.push({ translateX: e });\n\t\t\t\tif (f !== undefined && !Number.isNaN(f)) result.push({ translateY: f });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"translate\": {\n\t\t\t\tconst [tx, ty] = args;\n\t\t\t\tif (tx !== undefined && !Number.isNaN(tx)) result.push({ translateX: tx });\n\t\t\t\tif (ty !== undefined && !Number.isNaN(ty)) result.push({ translateY: ty });\n\t\t\t\telse if (tx !== undefined && ty === undefined) {\n\t\t\t\t\t// translate(x) with no y — y defaults to 0\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"scale\": {\n\t\t\t\tconst [sx, sy] = args;\n\t\t\t\tif (sx === undefined || Number.isNaN(sx)) break;\n\t\t\t\tif (sy === undefined || Number.isNaN(sy)) {\n\t\t\t\t\tresult.push({ scale: sx });\n\t\t\t\t} else {\n\t\t\t\t\tif (Math.abs(sx - sy) < 1e-12) {\n\t\t\t\t\t\tresult.push({ scale: sx });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.push({ scaleX: sx, scaleY: sy } as SkiaTransform);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"rotate\": {\n\t\t\t\tconst [deg, cx, cy] = args;\n\t\t\t\tif (deg === undefined || Number.isNaN(deg)) break;\n\t\t\t\tconst rad = (deg * Math.PI) / 180;\n\t\t\t\tif (\n\t\t\t\t\tcx !== undefined &&\n\t\t\t\t\tcy !== undefined &&\n\t\t\t\t\t!Number.isNaN(cx) &&\n\t\t\t\t\t!Number.isNaN(cy)\n\t\t\t\t) {\n\t\t\t\t\tresult.push({ rotate: rad, origin: { x: cx, y: cy } });\n\t\t\t\t} else {\n\t\t\t\t\tresult.push({ rotate: rad });\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Formats the camera world-to-screen transform as a Skia transform array.\n * Equivalent to formatCameraTransform() SVG output.\n */\nexport function skiaCameraTransform(\n\tzoom: number,\n\tpanX: number,\n\tpanY: number,\n): SkiaTransform[] {\n\treturn [{ translateX: panX }, { translateY: panY }, { scale: zoom }];\n}\n\n/**\n * Formats the item placement transform as a Skia transform array.\n * Equivalent to formatItemPlacementTransform() SVG output.\n */\nexport function skiaItemPlacementTransform(\n\tx: number,\n\ty: number,\n\tcx: number,\n\tcy: number,\n\trotationRad: number,\n): SkiaTransform[] {\n\tconst result: SkiaTransform[] = [];\n\tif (Math.abs(rotationRad) > 1e-12) {\n\t\tresult.push({\n\t\t\trotate: rotationRad,\n\t\t\torigin: { x: cx, y: cy },\n\t\t});\n\t}\n\tresult.push({ translateX: x }, { translateY: y });\n\treturn result;\n}\n","import {\n\tGroup,\n\tmatchFont,\n\tOval,\n\tPath,\n\tRect,\n\tRoundedRect,\n\tCircle as SkiaCircle,\n\tImage as SkiaImage,\n\tLine as SkiaLine,\n\tText as SkiaText,\n\tuseImage,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport { parseSvgTransform } from \"./skia-transform\";\nimport type { SvgNode } from \"./svg-parser\";\n\nfunction rgbaFromHexAndOpacity(\n\thex: string | undefined,\n\topacity: number | undefined,\n): string | undefined {\n\tif (!hex) return hex;\n\tif (opacity == null || opacity >= 1) return hex;\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\tif (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return hex;\n\treturn `rgba(${r},${g},${b},${opacity})`;\n}\n\nfunction toNum(v: string | number): number {\n\treturn typeof v === \"number\" ? v : Number(v) || 0;\n}\n\nexport function SvgNodeRenderer({ nodes }: { readonly nodes: readonly SvgNode[] }) {\n\treturn (\n\t\t<>\n\t\t\t{nodes.map((node, i) => (\n\t\t\t\t<SvgNodeItem key={i} node={node} />\n\t\t\t))}\n\t\t</>\n\t);\n}\n\nfunction SvgNodeItem({ node }: { readonly node: SvgNode }) {\n\tconst isFill = (node as { fill?: string }).fill !== \"none\";\n\tconst hasStroke =\n\t\t(node as { stroke?: string }).stroke != null &&\n\t\t(node as { stroke?: string }).stroke !== \"none\";\n\n\tswitch (node.kind) {\n\t\tcase \"rect\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\tconst fill = isFill\n\t\t\t\t? (rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill)\n\t\t\t\t: undefined;\n\t\t\tconst r = node.rx != null ? toNum(node.rx) : 0;\n\t\t\tconst w = toNum(node.width);\n\t\t\tconst h = toNum(node.height);\n\t\t\tif (r > 0) {\n\t\t\t\treturn (\n\t\t\t\t\t<RoundedRect\n\t\t\t\t\t\tx={0}\n\t\t\t\t\t\ty={0}\n\t\t\t\t\t\twidth={w}\n\t\t\t\t\t\theight={h}\n\t\t\t\t\t\tr={r}\n\t\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<Rect\n\t\t\t\t\tx={0}\n\t\t\t\t\ty={0}\n\t\t\t\t\twidth={w}\n\t\t\t\t\theight={h}\n\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"ellipse\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\tconst fill = isFill\n\t\t\t\t? (rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill)\n\t\t\t\t: undefined;\n\t\t\tconst cx = toNum(node.cx);\n\t\t\tconst cy = toNum(node.cy);\n\t\t\tconst rx = toNum(node.rx);\n\t\t\tconst ry = toNum(node.ry);\n\t\t\tif (Math.abs(rx - ry) < 1e-6) {\n\t\t\t\treturn (\n\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\tcx={cx}\n\t\t\t\t\t\tcy={cy}\n\t\t\t\t\t\tr={rx}\n\t\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<Oval\n\t\t\t\t\tx={cx - rx}\n\t\t\t\t\ty={cy - ry}\n\t\t\t\t\twidth={rx * 2}\n\t\t\t\t\theight={ry * 2}\n\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"circle\": {\n\t\t\tconst fill = rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill;\n\t\t\tconst isCircleFill = fill && fill !== \"none\";\n\t\t\tconst strokeColor = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\treturn (\n\t\t\t\t<SkiaCircle\n\t\t\t\t\tcx={toNum(node.cx)}\n\t\t\t\t\tcy={toNum(node.cy)}\n\t\t\t\t\tr={toNum(node.r)}\n\t\t\t\t\tcolor={isCircleFill ? fill : (strokeColor ?? \"black\")}\n\t\t\t\t\tstyle={isCircleFill ? \"fill\" : \"stroke\"}\n\t\t\t\t\tstrokeWidth={\n\t\t\t\t\t\t!isCircleFill && hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined\n\t\t\t\t\t}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"line\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\treturn (\n\t\t\t\t<SkiaLine\n\t\t\t\t\tp1={vec(toNum(node.x1), toNum(node.y1))}\n\t\t\t\t\tp2={vec(toNum(node.x2), toNum(node.y2))}\n\t\t\t\t\tcolor={stroke ?? \"black\"}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={toNum(node.strokeWidth ?? \"1\")}\n\t\t\t\t\tstrokeCap={node.strokeLinecap === \"round\" ? \"round\" : \"butt\"}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"path\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\tconst fill = isFill\n\t\t\t\t? (rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill)\n\t\t\t\t: undefined;\n\t\t\tconst style = fill && fill !== \"none\" ? \"fill\" : \"stroke\";\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={node.d}\n\t\t\t\t\tcolor={style === \"fill\" ? (fill ?? stroke) : (stroke ?? \"black\")}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\tstrokeWidth={\n\t\t\t\t\t\tstyle === \"stroke\" ? toNum(node.strokeWidth ?? \"1\") : undefined\n\t\t\t\t\t}\n\t\t\t\t\tstrokeCap={node.strokeLinecap === \"round\" ? \"round\" : \"butt\"}\n\t\t\t\t\tstrokeJoin={node.strokeLinejoin === \"round\" ? \"round\" : \"miter\"}\n\t\t\t\t\tfillType={node.fillRule === \"evenodd\" ? \"evenOdd\" : \"winding\"}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"text\": {\n\t\t\tconst fill = node.fill ?? \"black\";\n\t\t\tconst fs = node.fontSize != null ? toNum(node.fontSize) : 16;\n\t\t\tconst font = matchFont({ fontSize: fs });\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t{node.children.map((tspan, i) => (\n\t\t\t\t\t\t<SkiaText\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tx={\n\t\t\t\t\t\t\t\ttspan.x != null ? toNum(tspan.x) : node.x != null ? toNum(node.x) : 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ty={\n\t\t\t\t\t\t\t\ttspan.dy != null\n\t\t\t\t\t\t\t\t\t? (node.y != null ? toNum(node.y) : fs) + toNum(tspan.dy)\n\t\t\t\t\t\t\t\t\t: (node.y != null ? toNum(node.y) : fs) + i * fs * 1.2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext={tspan.text}\n\t\t\t\t\t\t\tcolor={fill}\n\t\t\t\t\t\t\tfont={font}\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\tcase \"polygon\": {\n\t\t\tconst fill = node.fill ?? \"black\";\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={polygonPointsToPath(node.points)}\n\t\t\t\t\tcolor={fill}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"image\": {\n\t\t\treturn <SvgImageNodeItem node={node} />;\n\t\t}\n\t\tcase \"g\": {\n\t\t\tconst transform = node.transform\n\t\t\t\t? parseSvgTransform(node.transform)\n\t\t\t\t: undefined;\n\t\t\treturn (\n\t\t\t\t<Group transform={transform}>\n\t\t\t\t\t{node.children.map((child, i) => (\n\t\t\t\t\t\t<SvgNodeItem key={i} node={child} />\n\t\t\t\t\t))}\n\t\t\t\t</Group>\n\t\t\t);\n\t\t}\n\t\tcase \"defs\": {\n\t\t\treturn null;\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction SvgImageNodeItem({\n\tnode,\n}: {\n\treadonly node: Extract<SvgNode, { readonly kind: \"image\" }>;\n}) {\n\tconst image = useImage(node.href);\n\tif (!image) return null;\n\treturn (\n\t\t<SkiaImage\n\t\t\timage={image}\n\t\t\tx={toNum(node.x)}\n\t\t\ty={toNum(node.y)}\n\t\t\twidth={toNum(node.width)}\n\t\t\theight={toNum(node.height)}\n\t\t\tfit=\"contain\"\n\t\t/>\n\t);\n}\n\nfunction polygonPointsToPath(points: string): string {\n\tconst nums = points\n\t\t.split(/[\\s,]+/)\n\t\t.filter(Boolean)\n\t\t.map(Number);\n\tif (nums.length < 4) return \"\";\n\tlet d = `M${nums[0]} ${nums[1]}`;\n\tfor (let i = 2; i < nums.length; i += 2) {\n\t\td += ` L${nums[i]} ${nums[i + 1]}`;\n\t}\n\td += \" Z\";\n\treturn d;\n}\n","export type NumberProp = string | number;\n\nexport type SvgRectNode = {\n\treadonly kind: \"rect\";\n\treadonly width: NumberProp;\n\treadonly height: NumberProp;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly rx?: NumberProp;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgEllipseNode = {\n\treadonly kind: \"ellipse\";\n\treadonly cx: NumberProp;\n\treadonly cy: NumberProp;\n\treadonly rx: NumberProp;\n\treadonly ry: NumberProp;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgCircleNode = {\n\treadonly kind: \"circle\";\n\treadonly cx: NumberProp;\n\treadonly cy: NumberProp;\n\treadonly r: NumberProp;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgLineNode = {\n\treadonly kind: \"line\";\n\treadonly x1: NumberProp;\n\treadonly y1: NumberProp;\n\treadonly x2: NumberProp;\n\treadonly y2: NumberProp;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly strokeLinecap?: string;\n\treadonly strokeLinejoin?: string;\n\treadonly markerEnd?: string;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgPathNode = {\n\treadonly kind: \"path\";\n\treadonly d: string;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly fillRule?: string;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly strokeLinecap?: string;\n\treadonly strokeLinejoin?: string;\n\treadonly shapeRendering?: string;\n\treadonly vectorEffect?: string;\n};\n\nexport type SvgTSpanNode = {\n\treadonly kind: \"tspan\";\n\treadonly x?: NumberProp;\n\treadonly dy?: NumberProp;\n\treadonly text: string;\n};\n\nexport type SvgTextNode = {\n\treadonly kind: \"text\";\n\treadonly x?: NumberProp;\n\treadonly y?: NumberProp;\n\treadonly fill?: string;\n\treadonly textAnchor?: string;\n\treadonly fontSize?: NumberProp;\n\treadonly fontFamily?: string;\n\treadonly children: readonly SvgTSpanNode[];\n};\n\nexport type SvgPolygonNode = {\n\treadonly kind: \"polygon\";\n\treadonly points: string;\n\treadonly fill?: string;\n};\n\nexport type SvgImageNode = {\n\treadonly kind: \"image\";\n\treadonly href: string;\n\treadonly x: NumberProp;\n\treadonly y: NumberProp;\n\treadonly width: NumberProp;\n\treadonly height: NumberProp;\n};\n\nexport type SvgGroupNode = {\n\treadonly kind: \"g\";\n\treadonly transform?: string;\n\treadonly children: readonly SvgNode[];\n};\n\nexport type SvgDefsNode = {\n\treadonly kind: \"defs\";\n\treadonly children: readonly SvgNode[];\n};\n\nexport type SvgMarkerNode = {\n\treadonly kind: \"marker\";\n\treadonly id: string;\n\treadonly markerWidth: NumberProp;\n\treadonly markerHeight: NumberProp;\n\treadonly refX: NumberProp;\n\treadonly refY: NumberProp;\n\treadonly orient: string;\n\treadonly children: readonly SvgPolygonNode[];\n};\n\nexport type SvgNode =\n\t| SvgRectNode\n\t| SvgEllipseNode\n\t| SvgCircleNode\n\t| SvgLineNode\n\t| SvgPathNode\n\t| SvgTextNode\n\t| SvgPolygonNode\n\t| SvgImageNode\n\t| SvgGroupNode\n\t| SvgDefsNode\n\t| SvgMarkerNode;\n\nconst SELF_CLOSING = new Set([\n\t\"rect\",\n\t\"ellipse\",\n\t\"circle\",\n\t\"line\",\n\t\"path\",\n\t\"polygon\",\n\t\"image\",\n]);\n\nconst ATTR_RE = /([a-zA-Z][a-zA-Z0-9_-]*)\\s*=\\s*\"([^\"]*)\"/g;\n\nfunction parseAttrs(raw: string): Record<string, string> {\n\tconst attrs: Record<string, string> = {};\n\tlet m = ATTR_RE.exec(raw);\n\twhile (m !== null) {\n\t\tconst key = m[1];\n\t\tconst val = m[2];\n\t\tif (key !== undefined && val !== undefined) {\n\t\t\tattrs[key] = val;\n\t\t}\n\t\tm = ATTR_RE.exec(raw);\n\t}\n\treturn attrs;\n}\n\nfunction parseNum(val: string | undefined): NumberProp | undefined {\n\tif (val === undefined) return undefined;\n\tconst n = Number(val);\n\tif (Number.isNaN(n)) return val;\n\treturn n;\n}\n\nfunction parseNumR(val: string | undefined, fallback: NumberProp): NumberProp {\n\treturn parseNum(val) ?? fallback;\n}\n\nfunction parseNumOpt(val: string | undefined): number | undefined {\n\tif (val === undefined) return undefined;\n\tconst n = Number(val);\n\treturn Number.isNaN(n) ? undefined : n;\n}\n\nfunction parseRectNode(attrs: Record<string, string>): SvgRectNode {\n\treturn {\n\t\tkind: \"rect\",\n\t\twidth: parseNumR(attrs.width, \"0\"),\n\t\theight: parseNumR(attrs.height, \"0\"),\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\trx: parseNum(attrs.rx),\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parseEllipseNode(attrs: Record<string, string>): SvgEllipseNode {\n\treturn {\n\t\tkind: \"ellipse\",\n\t\tcx: parseNumR(attrs.cx, \"0\"),\n\t\tcy: parseNumR(attrs.cy, \"0\"),\n\t\trx: parseNumR(attrs.rx, \"0\"),\n\t\try: parseNumR(attrs.ry, \"0\"),\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parseCircleNode(attrs: Record<string, string>): SvgCircleNode {\n\treturn {\n\t\tkind: \"circle\",\n\t\tcx: parseNumR(attrs.cx, \"0\"),\n\t\tcy: parseNumR(attrs.cy, \"0\"),\n\t\tr: parseNumR(attrs.r, \"0\"),\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parseLineNode(attrs: Record<string, string>): SvgLineNode {\n\treturn {\n\t\tkind: \"line\",\n\t\tx1: parseNumR(attrs.x1, \"0\"),\n\t\ty1: parseNumR(attrs.y1, \"0\"),\n\t\tx2: parseNumR(attrs.x2, \"0\"),\n\t\ty2: parseNumR(attrs.y2, \"0\"),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tstrokeLinecap: attrs[\"stroke-linecap\"],\n\t\tstrokeLinejoin: attrs[\"stroke-linejoin\"],\n\t\tmarkerEnd: attrs[\"marker-end\"],\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parsePathNode(attrs: Record<string, string>): SvgPathNode {\n\treturn {\n\t\tkind: \"path\",\n\t\td: attrs.d ?? \"\",\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tfillRule: attrs[\"fill-rule\"],\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tstrokeLinecap: attrs[\"stroke-linecap\"],\n\t\tstrokeLinejoin: attrs[\"stroke-linejoin\"],\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t\tvectorEffect: attrs[\"vector-effect\"],\n\t};\n}\n\nfunction parsePolygonNode(attrs: Record<string, string>): SvgPolygonNode {\n\treturn {\n\t\tkind: \"polygon\",\n\t\tpoints: attrs.points ?? \"\",\n\t\tfill: attrs.fill,\n\t};\n}\n\nfunction parseImageNode(attrs: Record<string, string>): SvgImageNode {\n\treturn {\n\t\tkind: \"image\",\n\t\thref: attrs.href ?? \"\",\n\t\tx: parseNumR(attrs.x, \"0\"),\n\t\ty: parseNumR(attrs.y, \"0\"),\n\t\twidth: parseNumR(attrs.width, \"0\"),\n\t\theight: parseNumR(attrs.height, \"0\"),\n\t};\n}\n\nfunction parseTextNode(\n\tattrs: Record<string, string>,\n\tchildren: SvgTSpanNode[],\n): SvgTextNode {\n\treturn {\n\t\tkind: \"text\",\n\t\tx: parseNum(attrs.x),\n\t\ty: parseNum(attrs.y),\n\t\tfill: attrs.fill,\n\t\ttextAnchor: attrs[\"text-anchor\"],\n\t\tfontSize: parseNum(attrs[\"font-size\"]),\n\t\tfontFamily: attrs[\"font-family\"],\n\t\tchildren,\n\t};\n}\n\nfunction parseTspanNode(\n\tattrs: Record<string, string>,\n\ttextContent: string,\n): SvgTSpanNode {\n\treturn {\n\t\tkind: \"tspan\",\n\t\tx: parseNum(attrs.x),\n\t\tdy: parseNum(attrs.dy),\n\t\ttext: textContent,\n\t};\n}\n\nfunction parseSingleElement(\n\ttag: string,\n\tattrs: Record<string, string>,\n\tchildren: SvgNode[],\n\tinnerText: string,\n): SvgNode | null {\n\tswitch (tag) {\n\t\tcase \"rect\":\n\t\t\treturn parseRectNode(attrs);\n\t\tcase \"ellipse\":\n\t\t\treturn parseEllipseNode(attrs);\n\t\tcase \"circle\":\n\t\t\treturn parseCircleNode(attrs);\n\t\tcase \"line\":\n\t\t\treturn parseLineNode(attrs);\n\t\tcase \"path\":\n\t\t\treturn parsePathNode(attrs);\n\t\tcase \"polygon\":\n\t\t\treturn parsePolygonNode(attrs);\n\t\tcase \"image\":\n\t\t\treturn parseImageNode(attrs);\n\t\tcase \"text\":\n\t\t\treturn parseTextNode(attrs, parseTspanChildren(innerText));\n\t\tcase \"g\":\n\t\t\treturn { kind: \"g\", transform: attrs.transform, children };\n\t\tcase \"defs\":\n\t\t\treturn { kind: \"defs\", children };\n\t\tcase \"marker\":\n\t\t\treturn parseMarkerNode(attrs, children);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction parseTspanChildren(innerXml: string): SvgTSpanNode[] {\n\tconst result: SvgTSpanNode[] = [];\n\tif (!innerXml.includes(\"<tspan\")) {\n\t\tconst trimmed = innerXml.trim();\n\t\tif (trimmed) {\n\t\t\tresult.push({ kind: \"tspan\", text: trimmed });\n\t\t}\n\t\treturn result;\n\t}\n\tconst tagRe = /<tspan\\b([^>]*)>([\\s\\S]*?)<\\/tspan>/g;\n\tlet m = tagRe.exec(innerXml);\n\twhile (m !== null) {\n\t\tconst rawAttrs = m[1] ?? \"\";\n\t\tconst text = (m[2] ?? \"\").trim();\n\t\tresult.push(parseTspanNode(parseAttrs(rawAttrs), text));\n\t\tm = tagRe.exec(innerXml);\n\t}\n\treturn result;\n}\n\nfunction parseMarkerNode(\n\tattrs: Record<string, string>,\n\tchildren: SvgNode[],\n): SvgMarkerNode {\n\treturn {\n\t\tkind: \"marker\",\n\t\tid: attrs.id ?? \"\",\n\t\tmarkerWidth: parseNumR(attrs.markerWidth, \"8\"),\n\t\tmarkerHeight: parseNumR(attrs.markerHeight, \"8\"),\n\t\trefX: parseNumR(attrs.refX, \"6\"),\n\t\trefY: parseNumR(attrs.refY, \"4\"),\n\t\torient: attrs.orient ?? \"auto\",\n\t\tchildren: children.filter((c): c is SvgPolygonNode => c.kind === \"polygon\"),\n\t};\n}\n\nfunction stripComments(xml: string): string {\n\treturn xml.replace(/<!--[\\s\\S]*?-->/g, \"\");\n}\n\n/**\n * Lightweight SVG fragment parser — handles the exact SVG elements generated\n * by canvu shape builders. Returns typed nodes suitable for rendering with\n * react-native-svg.\n */\nexport function parseSvgFragment(xml: string): SvgNode[] {\n\tif (!xml || xml.trim().length === 0) return [];\n\n\tconst clean = stripComments(xml.trim());\n\tconst nodes: SvgNode[] = [];\n\tlet pos = 0;\n\n\twhile (pos < clean.length) {\n\t\tconst openStart = clean.indexOf(\"<\", pos);\n\t\tif (openStart === -1) break;\n\t\tif (clean[openStart + 1] === \"/\") {\n\t\t\tpos = openStart + 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst openEnd = clean.indexOf(\">\", openStart);\n\t\tif (openEnd === -1) break;\n\t\tconst openTag = clean.slice(openStart + 1, openEnd);\n\t\tconst spaceIdx = openTag.indexOf(\" \");\n\t\tconst _tagEnd = openTag.indexOf(\"/\");\n\t\tconst tagName = (spaceIdx === -1 ? openTag : openTag.slice(0, spaceIdx))\n\t\t\t.replace(/\\/$/, \"\")\n\t\t\t.trim();\n\t\tconst hasCloseSlash = openTag.endsWith(\"/\");\n\n\t\tif (SELF_CLOSING.has(tagName) || hasCloseSlash) {\n\t\t\tconst attrs =\n\t\t\t\tspaceIdx === -1\n\t\t\t\t\t? {}\n\t\t\t\t\t: parseAttrs(openTag.slice(spaceIdx + 1).replace(/\\/$/, \"\"));\n\t\t\tconst node = parseSingleElement(tagName, attrs, [], \"\");\n\t\t\tif (node) nodes.push(node);\n\t\t\tpos = openEnd + 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Non-self-closing: find matching close tag\n\t\tconst closeTag = `</${tagName}>`;\n\t\tconst closeIdx = clean.indexOf(closeTag, openEnd);\n\t\tif (closeIdx === -1) {\n\t\t\tpos = openEnd + 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst innerXml = clean.slice(openEnd + 1, closeIdx);\n\t\tconst attrs = spaceIdx === -1 ? {} : parseAttrs(openTag.slice(spaceIdx + 1));\n\t\tconst children = parseSvgFragment(innerXml);\n\n\t\tconst node = parseSingleElement(tagName, attrs, children, innerXml);\n\t\tif (node) nodes.push(node);\n\n\t\tpos = closeIdx + closeTag.length;\n\t}\n\n\treturn nodes;\n}\n","import {\n\tCircle,\n\tLine,\n\tmatchFont,\n\tPath,\n\tRoundedRect,\n\tText as SkiaText,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport type { Rect as RectT } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tcomputeFreehandSvgPayload,\n\tcomputeStraightArrowGeometry,\n\tresolveStrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { SvgNodeRenderer } from \"./SvgNodeRenderer\";\nimport { parseSvgFragment } from \"./svg-parser\";\n\nfunction rgba(hex: string, alpha?: number): string {\n\tif (alpha == null || alpha >= 1) return hex;\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\tif (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return hex;\n\treturn `rgba(${r},${g},${b},${alpha})`;\n}\n\nexport type NativeShapeRendererProps = {\n\treadonly item: VectorSceneItem;\n};\n\nfunction localBounds(bounds: RectT): { w: number; h: number } {\n\tconst b = normalizeRect(bounds);\n\treturn { w: Math.max(0, b.width), h: Math.max(0, b.height) };\n}\n\nexport function NativeShapeRenderer({ item }: NativeShapeRendererProps) {\n\tconst style = resolveStrokeStyle(item);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst { w, h } = localBounds(item.bounds);\n\t\treturn (\n\t\t\t<RoundedRect\n\t\t\t\tx={0}\n\t\t\t\ty={0}\n\t\t\t\twidth={w}\n\t\t\t\theight={h}\n\t\t\t\tr={4}\n\t\t\t\tcolor={style.stroke}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (k === \"ellipse\") {\n\t\tconst { w, h } = localBounds(item.bounds);\n\t\tconst rx = Math.max(0, w / 2);\n\t\tconst ry = Math.max(0, h / 2);\n\t\tif (Math.abs(rx - ry) < 1e-9) {\n\t\t\treturn (\n\t\t\t\t<Circle\n\t\t\t\t\tcx={rx}\n\t\t\t\t\tcy={ry}\n\t\t\t\t\tr={rx}\n\t\t\t\t\tcolor={style.stroke}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<Circle\n\t\t\t\tcx={rx}\n\t\t\t\tcy={ry}\n\t\t\t\tr={Math.min(rx, ry)}\n\t\t\t\tcolor={style.stroke}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ((k === \"line\" || k === \"arrow\") && item.line) {\n\t\tconst ln = item.line;\n\t\tconst color = rgba(style.stroke, style.strokeOpacity);\n\t\tif (k === \"line\") {\n\t\t\treturn (\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(ln.x2, ln.y2)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tconst dx = ln.x2 - ln.x1;\n\t\tconst dy = ln.y2 - ln.y1;\n\t\tconst len = Math.hypot(dx, dy);\n\t\tif (len < 1e-6) {\n\t\t\treturn (\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(ln.x2, ln.y2)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tconst geometry = computeStraightArrowGeometry(ln, style.strokeWidth);\n\t\tif (!geometry) {\n\t\t\treturn (\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(ln.x2, ln.y2)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(geometry.shaftEndX, geometry.shaftEndY)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t\t<Path\n\t\t\t\t\tpath={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}\n\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst fs = item.textFontSize ?? 16;\n\t\tconst color = rgba(style.stroke, style.strokeOpacity);\n\t\tconst lines = item.text.split(\"\\n\");\n\t\tconst font = matchFont({ fontSize: fs });\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{lines.map((line, i) => (\n\t\t\t\t\t<SkiaText\n\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\tx={0}\n\t\t\t\t\t\ty={fs + i * fs * 1.2}\n\t\t\t\t\t\ttext={line}\n\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\tfont={font}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</>\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 payload = computeFreehandSvgPayload(item.pathPointsLocal, style, k);\n\t\tif (!payload) return null;\n\t\tconst color = rgba(style.stroke, style.strokeOpacity);\n\t\tif (payload.kind === \"circle\") {\n\t\t\treturn (\n\t\t\t\t<Circle\n\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\tr={payload.r}\n\t\t\t\t\tcolor={rgba(payload.fill, payload.fillOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tif (payload.kind === \"fillPath\") {\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={payload.d}\n\t\t\t\t\tcolor={rgba(payload.fill, payload.fillOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tfillType=\"winding\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<Path\n\t\t\t\tpath={payload.d}\n\t\t\t\tcolor={color}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (k === \"draw\") {\n\t\tconst { w, h } = localBounds(item.bounds);\n\t\tconst r = Math.min(w, h) / 2;\n\t\treturn (\n\t\t\t<Circle\n\t\t\t\tcx={Math.max(0, w) / 2}\n\t\t\t\tcy={Math.max(0, h) / 2}\n\t\t\t\tr={Math.max(0, r)}\n\t\t\t\tcolor={rgba(style.stroke, style.strokeOpacity)}\n\t\t\t\tstyle=\"fill\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (k === \"image\" || k === \"custom\" || item.childrenSvg) {\n\t\tconst nodes = parseSvgFragment(item.childrenSvg);\n\t\tif (nodes.length > 0) {\n\t\t\treturn <SvgNodeRenderer nodes={nodes} />;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { Group, Line, Path, vec } from \"@shopify/react-native-skia\";\nimport type { NativeVectorToolCursor } from \"./native-tool-cursors\";\n\nexport type NativeToolCursorRendererProps = {\n\treadonly cursor: NativeVectorToolCursor;\n\treadonly point: {\n\t\treadonly x: number;\n\t\treadonly y: number;\n\t};\n};\n\nconst CURSOR_STROKE = \"#18181b\";\nconst CURSOR_STROKE_WIDTH = 2;\nconst CROSSHAIR_STROKE_WIDTH = 1.5;\n\nfunction NativeDrawCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Path\n\t\t\t\tpath=\"M13 21h8\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Path\n\t\t\t\tpath=\"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\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeMarkerCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Path\n\t\t\t\tpath=\"m9 11-6 6v3h9l3-3\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Path\n\t\t\t\tpath=\"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\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeEraserCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Path\n\t\t\t\tpath=\"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\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Path\n\t\t\t\tpath=\"m5.082 11.09 8.828 8.828\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeCrosshairCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Line\n\t\t\t\tp1={vec(12, 3)}\n\t\t\t\tp2={vec(12, 21)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CROSSHAIR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Line\n\t\t\t\tp1={vec(3, 12)}\n\t\t\t\tp2={vec(21, 12)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CROSSHAIR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeTextCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Line\n\t\t\t\tp1={vec(12, 4)}\n\t\t\t\tp2={vec(12, 20)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Line\n\t\t\t\tp1={vec(8, 4)}\n\t\t\t\tp2={vec(16, 4)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Line\n\t\t\t\tp1={vec(8, 20)}\n\t\t\t\tp2={vec(16, 20)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeToolCursorGlyph({\n\tcursor,\n}: {\n\treadonly cursor: NativeVectorToolCursor;\n}) {\n\tif (cursor.kind === \"draw\") return <NativeDrawCursor />;\n\tif (cursor.kind === \"marker\") return <NativeMarkerCursor />;\n\tif (cursor.kind === \"eraser\") return <NativeEraserCursor />;\n\tif (cursor.kind === \"text\") return <NativeTextCursor />;\n\treturn <NativeCrosshairCursor />;\n}\n\nexport function NativeToolCursorRenderer({\n\tcursor,\n\tpoint,\n}: NativeToolCursorRendererProps) {\n\tconst x = point.x - cursor.hotspot.x;\n\tconst y = point.y - cursor.hotspot.y;\n\n\treturn (\n\t\t<Group transform={[{ translateX: x }, { translateY: y }]}>\n\t\t\t<NativeToolCursorGlyph cursor={cursor} />\n\t\t</Group>\n\t);\n}\n","import type { StrokeStyle } from \"../scene/shape-builders\";\n\nexport type TimedTrailPoint = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly t: number;\n};\n\nexport const ERASER_TINT = \"#cbd5e1\";\nexport const ERASER_TINT_OPACITY = 0.95;\nexport const LASER_TINT = \"#f43f5e\";\nexport const LASER_TINT_OPACITY = 0.9;\nexport const ERASER_TRAIL_MAX_AGE_MS = 150;\nexport const LASER_TRAIL_MAX_AGE_MS = 650;\n\nexport function colorWithOpacity(hex: string, alpha?: number): string {\n\tif (alpha == null || alpha >= 1) return hex;\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\tif (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return hex;\n\treturn `rgba(${r},${g},${b},${alpha})`;\n}\n\nexport function freshTimedTrailPoints(\n\tpoints: readonly TimedTrailPoint[],\n\tnow: number,\n\tmaxAgeMs: number,\n): TimedTrailPoint[] {\n\treturn points.filter((point) => now - point.t <= maxAgeMs);\n}\n\nexport function timedTrailHeadOpacity(\n\tpoint: TimedTrailPoint | undefined,\n\tnow: number,\n\tmaxAgeMs: number,\n): number {\n\tif (!point) return 0;\n\treturn Math.max(0, 1 - (now - point.t) / maxAgeMs);\n}\n\nexport function resolveNativeStrokePreviewStyle(\n\ttool: string,\n\tpreviewStrokeStyle: StrokeStyle | undefined,\n): StrokeStyle {\n\tconst isLaser = tool === \"laser\";\n\treturn {\n\t\tstroke: isLaser ? LASER_TINT : (previewStrokeStyle?.stroke ?? \"#64748b\"),\n\t\tstrokeWidth: isLaser\n\t\t\t? 4\n\t\t\t: (previewStrokeStyle?.strokeWidth ?? (tool === \"marker\" ? 16 : 3)),\n\t\t...(previewStrokeStyle?.strokeOpacity != null && !isLaser\n\t\t\t? { strokeOpacity: previewStrokeStyle.strokeOpacity }\n\t\t\t: {}),\n\t\t...(previewStrokeStyle?.strokeDash != null && !isLaser\n\t\t\t? { strokeDash: previewStrokeStyle.strokeDash }\n\t\t\t: {}),\n\t};\n}\n","import {\n\tCanvas,\n\tDashPathEffect,\n\tGroup,\n\tLine,\n\tOval,\n\tPath,\n\tRect,\n\tRoundedRect,\n\tCircle as SkiaCircle,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport { useMemo } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport {\n\tgetHandleWorldPositionRotated,\n\tgetRotationHandleWorldPosition,\n\ttype ResizeHandleId,\n} from \"../interaction/resize-handles\";\nimport { normalizeRect } from \"../math/rect\";\nimport { smoothFreehandPointsToPathD } from \"../scene/freehand-path\";\nimport {\n\tbuildArchitecturalCloudPathD,\n\tcomputeFreehandSvgPayload,\n\tcomputeStraightArrowGeometry,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { NativeShapeRenderer } from \"./NativeShapeRenderer\";\nimport { NativeToolCursorRenderer } from \"./NativeToolCursorRenderer\";\nimport {\n\tcolorWithOpacity,\n\tERASER_TINT,\n\tERASER_TINT_OPACITY,\n\tERASER_TRAIL_MAX_AGE_MS,\n\tfreshTimedTrailPoints,\n\tLASER_TINT,\n\tLASER_TINT_OPACITY,\n\tLASER_TRAIL_MAX_AGE_MS,\n\tresolveNativeStrokePreviewStyle,\n\ttype TimedTrailPoint,\n\ttimedTrailHeadOpacity,\n} from \"./native-overlay-style\";\nimport type { NativeVectorToolCursor } from \"./native-tool-cursors\";\nimport { skiaCameraTransform, skiaItemPlacementTransform } from \"./skia-transform\";\n\nconst HANDLE_ORDER: ResizeHandleId[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\nconst ERASER_PREVIEW_OPACITY = 0.3;\nconst OVERLAY_STROKE_PX = 1.25;\nconst MARQUEE_DASH_PX = 4;\n\nexport type PlacementPreview =\n\t| {\n\t\t\treadonly kind: \"rect\" | \"ellipse\" | \"architectural-cloud\";\n\t\t\treadonly rect: {\n\t\t\t\treadonly x: number;\n\t\t\t\treadonly y: number;\n\t\t\t\treadonly width: number;\n\t\t\t\treadonly height: number;\n\t\t\t};\n\t }\n\t| {\n\t\t\treadonly kind: \"marquee\";\n\t\t\treadonly rect: {\n\t\t\t\treadonly x: number;\n\t\t\t\treadonly y: number;\n\t\t\t\treadonly width: number;\n\t\t\t\treadonly height: number;\n\t\t\t};\n\t }\n\t| {\n\t\t\treadonly kind: \"line\" | \"arrow\";\n\t\t\treadonly start: { readonly x: number; readonly y: number };\n\t\t\treadonly end: { readonly x: number; readonly y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"stroke\";\n\t\t\treadonly tool: \"draw\" | \"marker\" | \"laser\";\n\t\t\treadonly points: readonly { readonly x: number; readonly y: number }[];\n\t\t\treadonly style?: StrokeStyle;\n\t };\n\nexport type NativeInteractionOverlayProps = {\n\treadonly camera: Camera2D;\n\treadonly width: number;\n\treadonly height: number;\n\treadonly selectedItems: readonly VectorSceneItem[];\n\treadonly showResizeHandles: boolean;\n\treadonly placementPreview: PlacementPreview | null;\n\treadonly eraserTrail?: readonly TimedTrailPoint[];\n\treadonly laserTrail?: readonly TimedTrailPoint[];\n\treadonly eraserPreviewItems?: readonly VectorSceneItem[];\n\treadonly previewStrokeStyle?: StrokeStyle;\n\treadonly toolCursor?: {\n\t\treadonly cursor: NativeVectorToolCursor;\n\t\treadonly point: {\n\t\t\treadonly x: number;\n\t\t\treadonly y: number;\n\t\t};\n\t} | null;\n};\n\nfunction pointsToSmoothPathD(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst d = smoothFreehandPointsToPathD(points);\n\treturn d || null;\n}\n\nfunction dashIntervalsFromStrokeDasharray(\n\tstrokeDasharray: string | undefined,\n): number[] | null {\n\tif (!strokeDasharray) return null;\n\tconst intervals = strokeDasharray\n\t\t.split(/\\s+/)\n\t\t.map((part) => Number(part))\n\t\t.filter((part) => Number.isFinite(part) && part > 0);\n\treturn intervals.length > 0 ? intervals : null;\n}\n\nexport function NativeInteractionOverlay({\n\tcamera,\n\twidth,\n\theight,\n\tselectedItems,\n\tshowResizeHandles,\n\tplacementPreview,\n\teraserTrail,\n\tlaserTrail,\n\teraserPreviewItems = [],\n\tpreviewStrokeStyle,\n\ttoolCursor,\n}: NativeInteractionOverlayProps) {\n\tconst z = camera.zoom;\n\tconst camTransform = skiaCameraTransform(z, camera.x, camera.y);\n\tconst handleR = 5 / z;\n\tconst overlayStrokeWorld = OVERLAY_STROKE_PX / z;\n\tconst marqueeDashWorld = MARQUEE_DASH_PX / z;\n\tconst rotateOffsetWorld = 24 / z;\n\tconst rotateIconWorld = 16 / z;\n\tconst rotateIconScale = rotateIconWorld / 24;\n\tconst rotateIconStroke = OVERLAY_STROKE_PX / (z * rotateIconScale);\n\n\tconst selectionElements = useMemo(() => {\n\t\tif (selectedItems.length === 0) return null;\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, rotateOffsetWorld)\n\t\t\t\t: null;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{selectedItems.map((it) => {\n\t\t\t\t\tconst b = normalizeRect(it.bounds);\n\t\t\t\t\tconst cx = b.width / 2;\n\t\t\t\t\tconst cy = b.height / 2;\n\t\t\t\t\tconst t = skiaItemPlacementTransform(it.x, it.y, cx, cy, it.rotation ?? 0);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group key={it.id} transform={t}>\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\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Group>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{showResizeHandles && bSingle && single && (\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<Group key={hid}>\n\t\t\t\t\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\t\t\t\t\tcx={p.x}\n\t\t\t\t\t\t\t\t\t\tcy={p.y}\n\t\t\t\t\t\t\t\t\t\tr={handleR}\n\t\t\t\t\t\t\t\t\t\tcolor=\"#ffffff\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\t\t\t\t\tcx={p.x}\n\t\t\t\t\t\t\t\t\t\tcy={p.y}\n\t\t\t\t\t\t\t\t\t\tr={handleR}\n\t\t\t\t\t\t\t\t\t\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{rotHandlePos && (\n\t\t\t\t\t\t\t<Group\n\t\t\t\t\t\t\t\ttransform={[\n\t\t\t\t\t\t\t\t\t{ translateX: rotHandlePos.x },\n\t\t\t\t\t\t\t\t\t{ translateY: rotHandlePos.y },\n\t\t\t\t\t\t\t\t\t{ rotate: rotSingle },\n\t\t\t\t\t\t\t\t\t{ translateX: -rotateIconWorld / 2 },\n\t\t\t\t\t\t\t\t\t{ translateY: -rotateIconWorld / 2 },\n\t\t\t\t\t\t\t\t\t{ scale: rotateIconScale },\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<Path\n\t\t\t\t\t\t\t\t\tpath=\"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\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={rotateIconStroke}\n\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\t\t\t\tantiAlias\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\tpath=\"M21 3v5h-5\"\n\t\t\t\t\t\t\t\t\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={rotateIconStroke}\n\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Group>\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\t\tselectedItems,\n\t\tshowResizeHandles,\n\t\trotateOffsetWorld,\n\t\thandleR,\n\t\toverlayStrokeWorld,\n\t\trotateIconWorld,\n\t\trotateIconScale,\n\t\trotateIconStroke,\n\t]);\n\n\tconst previewElements = useMemo(() => {\n\t\tif (!placementPreview) return null;\n\t\tconst p = placementPreview;\n\t\tconst shapeStroke = previewStrokeStyle?.stroke ?? \"#1d1d1d\";\n\t\tconst shapeWidth = previewStrokeStyle?.strokeWidth ?? 2;\n\t\tconst shapeColor = colorWithOpacity(\n\t\t\tshapeStroke,\n\t\t\tpreviewStrokeStyle?.strokeOpacity,\n\t\t);\n\t\tif (\n\t\t\tp.kind === \"rect\" ||\n\t\t\tp.kind === \"ellipse\" ||\n\t\t\tp.kind === \"architectural-cloud\"\n\t\t) {\n\t\t\tconst r = normalizeRect(p.rect);\n\t\t\treturn p.kind === \"rect\" ? (\n\t\t\t\t<RoundedRect\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\tr={4}\n\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t) : p.kind === \"ellipse\" ? (\n\t\t\t\t<Oval\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\tcolor={shapeColor}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<Group transform={[{ translateX: r.x }, { translateY: r.y }]}>\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={buildArchitecturalCloudPathD(r.width, r.height, shapeWidth)}\n\t\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t</Group>\n\t\t\t);\n\t\t}\n\t\tif (p.kind === \"marquee\") {\n\t\t\tconst r = normalizeRect(p.rect);\n\t\t\treturn (\n\t\t\t\t<>\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\tcolor=\"rgba(59, 130, 246, 0.12)\"\n\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\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\tcolor=\"#3b82f6\"\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t>\n\t\t\t\t\t\t<DashPathEffect intervals={[marqueeDashWorld, marqueeDashWorld]} />\n\t\t\t\t\t</Rect>\n\t\t\t\t</>\n\t\t\t);\n\t\t}\n\t\tif (p.kind === \"line\" || p.kind === \"arrow\") {\n\t\t\tconst geometry =\n\t\t\t\tp.kind === \"arrow\"\n\t\t\t\t\t? computeStraightArrowGeometry(\n\t\t\t\t\t\t\t{ x1: p.start.x, y1: p.start.y, x2: p.end.x, y2: p.end.y },\n\t\t\t\t\t\t\tshapeWidth,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null;\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t<Line\n\t\t\t\t\t\tp1={vec(p.start.x, p.start.y)}\n\t\t\t\t\t\tp2={vec(geometry?.shaftEndX ?? p.end.x, geometry?.shaftEndY ?? p.end.y)}\n\t\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t\t{p.kind === \"arrow\" && geometry ? (\n\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\tpath={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\t\tantiAlias\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}\n\t\tif (p.kind === \"stroke\" && p.points.length >= 1) {\n\t\t\tconst isLaser = p.tool === \"laser\";\n\t\t\tconst style = resolveNativeStrokePreviewStyle(\n\t\t\t\tp.tool,\n\t\t\t\tp.style ?? previewStrokeStyle,\n\t\t\t);\n\t\t\tconst payload = computeFreehandSvgPayload(\n\t\t\t\tp.points,\n\t\t\t\tstyle,\n\t\t\t\tisLaser ? \"draw\" : p.tool,\n\t\t\t\tp.points.length === 2,\n\t\t\t);\n\t\t\tif (!payload) return null;\n\t\t\tif (payload.kind === \"circle\") {\n\t\t\t\treturn (\n\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\t\tr={payload.r}\n\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\n\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (payload.kind === \"fillPath\") {\n\t\t\t\treturn (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\n\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\tfillType=\"winding\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (payload.kind === \"strokePath\") {\n\t\t\t\tconst intervals = dashIntervalsFromStrokeDasharray(payload.strokeDasharray);\n\t\t\t\treturn (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\tcolor={colorWithOpacity(\n\t\t\t\t\t\t\tpayload.stroke,\n\t\t\t\t\t\t\tisLaser ? 0.85 : payload.strokeOpacity,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t>\n\t\t\t\t\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t\t\t</Path>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\t}, [placementPreview, previewStrokeStyle, overlayStrokeWorld, marqueeDashWorld]);\n\n\tconst eraserPreviewElements = useMemo(() => {\n\t\tif (eraserPreviewItems.length === 0) return null;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{eraserPreviewItems.map((it) => {\n\t\t\t\t\tconst b = normalizeRect(it.bounds);\n\t\t\t\t\tconst cx = b.width / 2;\n\t\t\t\t\tconst cy = b.height / 2;\n\t\t\t\t\tconst t = skiaItemPlacementTransform(it.x, it.y, cx, cy, it.rotation ?? 0);\n\t\t\t\t\t// Real item dimmed (same transform/renderer as the scene),\n\t\t\t\t\t// not a redrawn gray skeleton, so geometry always matches.\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group\n\t\t\t\t\t\t\tkey={`erase-${it.id}`}\n\t\t\t\t\t\t\ttransform={t}\n\t\t\t\t\t\t\topacity={ERASER_PREVIEW_OPACITY}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<NativeShapeRenderer item={it} />\n\t\t\t\t\t\t</Group>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</>\n\t\t);\n\t}, [eraserPreviewItems]);\n\n\tconst eraserTrailElements = useMemo(() => {\n\t\tif (!eraserTrail || eraserTrail.length < 1) return null;\n\t\tconst now = Date.now();\n\t\tconst alive = freshTimedTrailPoints(eraserTrail, now, ERASER_TRAIL_MAX_AGE_MS);\n\t\tif (alive.length === 0) return null;\n\t\tconst d = pointsToSmoothPathD(alive);\n\t\tconst newest = alive[alive.length - 1];\n\t\tconst headOpacity = timedTrailHeadOpacity(newest, now, ERASER_TRAIL_MAX_AGE_MS);\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={d}\n\t\t\t\t\t\tcolor={colorWithOpacity(ERASER_TINT, ERASER_TINT_OPACITY)}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={Math.max(3.5, OVERLAY_STROKE_PX) / z}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<SkiaCircle\n\t\t\t\t\tcx={newest?.x ?? alive[0]?.x ?? 0}\n\t\t\t\t\tcy={newest?.y ?? alive[0]?.y ?? 0}\n\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\tcolor={colorWithOpacity(ERASER_TINT, headOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}, [eraserTrail, z]);\n\n\tconst laserTrailElements = useMemo(() => {\n\t\tif (!laserTrail || laserTrail.length < 1) return null;\n\t\tconst now = Date.now();\n\t\tconst alive = freshTimedTrailPoints(laserTrail, now, LASER_TRAIL_MAX_AGE_MS);\n\t\tif (alive.length === 0) return null;\n\t\tconst d = pointsToSmoothPathD(alive);\n\t\tconst newest = alive[alive.length - 1];\n\t\tconst headOpacity = timedTrailHeadOpacity(newest, now, LASER_TRAIL_MAX_AGE_MS);\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={d}\n\t\t\t\t\t\tcolor={colorWithOpacity(LASER_TINT, LASER_TINT_OPACITY)}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={Math.max(4, OVERLAY_STROKE_PX) / z}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<SkiaCircle\n\t\t\t\t\tcx={newest?.x ?? alive[0]?.x ?? 0}\n\t\t\t\t\tcy={newest?.y ?? alive[0]?.y ?? 0}\n\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\tcolor={colorWithOpacity(LASER_TINT, headOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}, [laserTrail, z]);\n\n\tif (width <= 0 || height <= 0) return null;\n\n\treturn (\n\t\t<Canvas\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\twidth,\n\t\t\t\theight,\n\t\t\t}}\n\t\t\tpointerEvents=\"none\"\n\t\t>\n\t\t\t<Group transform={camTransform}>\n\t\t\t\t{previewElements}\n\t\t\t\t{laserTrailElements}\n\t\t\t\t{eraserTrailElements}\n\t\t\t\t{eraserPreviewElements}\n\t\t\t\t{selectionElements}\n\t\t\t</Group>\n\t\t\t{toolCursor ? (\n\t\t\t\t<NativeToolCursorRenderer\n\t\t\t\t\tcursor={toolCursor.cursor}\n\t\t\t\t\tpoint={toolCursor.point}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</Canvas>\n\t);\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 { 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 { Canvas, Group } from \"@shopify/react-native-skia\";\nimport { memo } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport { normalizeRect } from \"../math/rect\";\nimport { cullItemsByViewport } from \"../scene/cull\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { NativeShapeRenderer } from \"./NativeShapeRenderer\";\nimport { skiaCameraTransform, skiaItemPlacementTransform } from \"./skia-transform\";\n\nexport type NativeSceneRendererProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly camera: Camera2D;\n\treadonly width: number;\n\treadonly height: number;\n};\n\nconst MemoShape = memo(function MemoShape({\n\titem,\n}: {\n\treadonly item: VectorSceneItem;\n}) {\n\tconst b = normalizeRect(item.bounds);\n\tconst cx = b.width / 2;\n\tconst cy = b.height / 2;\n\tconst itemTransform = skiaItemPlacementTransform(\n\t\titem.x,\n\t\titem.y,\n\t\tcx,\n\t\tcy,\n\t\titem.rotation ?? 0,\n\t);\n\n\treturn (\n\t\t<Group transform={itemTransform}>\n\t\t\t<NativeShapeRenderer item={item} />\n\t\t</Group>\n\t);\n});\n\nexport function NativeSceneRenderer({\n\titems,\n\tcamera,\n\twidth,\n\theight,\n}: NativeSceneRendererProps) {\n\tconst cameraTransform = skiaCameraTransform(camera.zoom, camera.x, camera.y);\n\n\tconst visible = cullItemsByViewport(\n\t\titems,\n\t\tcamera.getVisibleWorldRect(width, height),\n\t);\n\n\tif (width <= 0 || height <= 0) return null;\n\n\treturn (\n\t\t<Canvas style={{ width, height }}>\n\t\t\t<Group transform={cameraTransform}>\n\t\t\t\t{visible.map((item) => (\n\t\t\t\t\t<MemoShape key={item.id} item={item} />\n\t\t\t\t))}\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\n","export type NativeStyleColor = {\n\treadonly name: string;\n\treadonly hex: string;\n};\n\nexport const NATIVE_STYLE_PALETTE: readonly NativeStyleColor[] = [\n\t{ name: \"black\", hex: \"#1d1d1d\" },\n\t{ name: \"grey\", hex: \"#9fa8b2\" },\n\t{ name: \"light-violet\", hex: \"#e085f4\" },\n\t{ name: \"violet\", hex: \"#ae3ec9\" },\n\t{ name: \"blue\", hex: \"#4263eb\" },\n\t{ name: \"light-blue\", hex: \"#4dabf7\" },\n\t{ name: \"yellow\", hex: \"#ffc078\" },\n\t{ name: \"orange\", hex: \"#f76707\" },\n\t{ name: \"green\", hex: \"#099268\" },\n\t{ name: \"light-green\", hex: \"#40c057\" },\n\t{ name: \"light-red\", hex: \"#ff8787\" },\n\t{ name: \"red\", hex: \"#e03131\" },\n];\n\nexport function normalizeNativeStyleHex(stroke: string | undefined): string {\n\tif (stroke && /^#[0-9A-Fa-f]{6}$/.test(stroke)) return stroke;\n\treturn \"#1d1d1d\";\n}\n\nexport function nativeStyleColorWithOpacity(\n\thex: string,\n\topacity: number | undefined,\n): string {\n\tconst alpha = opacity ?? 1;\n\tif (alpha >= 1) return hex;\n\tconst r = Number.parseInt(hex.slice(1, 3), 16);\n\tconst g = Number.parseInt(hex.slice(3, 5), 16);\n\tconst b = Number.parseInt(hex.slice(5, 7), 16);\n\treturn `rgba(${r},${g},${b},${alpha})`;\n}\n","import { type ReactNode, useCallback, useMemo, useState } from \"react\";\nimport {\n\tPanResponder,\n\tPressable,\n\ttype StyleProp,\n\tStyleSheet,\n\tText,\n\tView,\n\ttype ViewStyle,\n} from \"react-native\";\nimport type { StrokeDash, StrokeStyle } from \"../scene/shape-builders\";\nimport {\n\tNATIVE_STYLE_PALETTE,\n\tnormalizeNativeStyleHex,\n} from \"./native-style-inspector-values\";\n\nexport type NativeVectorStyleToolId = \"draw\" | \"marker\";\n\nexport type NativeVectorStyleInspectorProps = {\n\treadonly toolId: NativeVectorStyleToolId;\n\treadonly value: StrokeStyle;\n\treadonly onChange: (patch: Partial<StrokeStyle>) => void;\n\treadonly style?: StyleProp<ViewStyle>;\n};\n\ntype NativeStyleSegment<TValue extends string | number> = {\n\treadonly value: TValue;\n\treadonly label: string;\n\treadonly preview?: ReactNode;\n};\n\nfunction hexesEqual(a: string, b: string): boolean {\n\treturn a.toLowerCase() === b.toLowerCase();\n}\n\nfunction DashPreview({\n\tcolor,\n\twidth,\n\tdashed = false,\n}: {\n\treadonly color: string;\n\treadonly width: number;\n\treadonly dashed?: boolean;\n}) {\n\tconst strokeHeight = Math.max(3, Math.min(6, width));\n\treturn (\n\t\t<View style={styles.dashPreviewTrack}>\n\t\t\t<View\n\t\t\t\tstyle={[\n\t\t\t\t\tstyles.dashPreviewStroke,\n\t\t\t\t\t{\n\t\t\t\t\t\twidth: dashed ? 11 : 26,\n\t\t\t\t\t\theight: strokeHeight,\n\t\t\t\t\t\tborderRadius: strokeHeight / 2,\n\t\t\t\t\t\tbackgroundColor: color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t\t{dashed ? (\n\t\t\t\t<View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tstyles.dashPreviewStroke,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: 11,\n\t\t\t\t\t\t\theight: strokeHeight,\n\t\t\t\t\t\t\tborderRadius: strokeHeight / 2,\n\t\t\t\t\t\t\tbackgroundColor: color,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</View>\n\t);\n}\n\nfunction clampValue(value: number, min: number, max: number): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction RangeControl({\n\tvalue,\n\tmin,\n\tmax,\n\tonChange,\n\tvalueLabel,\n}: {\n\treadonly value: number;\n\treadonly min: number;\n\treadonly max: number;\n\treadonly onChange: (value: number) => void;\n\treadonly valueLabel?: string;\n}) {\n\tconst [trackWidth, setTrackWidth] = useState(1);\n\tconst normalized = (clampValue(value, min, max) - min) / (max - min);\n\tconst updateFromX = useCallback(\n\t\t(x: number) => {\n\t\t\tconst next = min + clampValue(x / trackWidth, 0, 1) * (max - min);\n\t\t\tonChange(Math.round(next));\n\t\t},\n\t\t[max, min, onChange, trackWidth],\n\t);\n\tconst panResponder = useMemo(\n\t\t() =>\n\t\t\tPanResponder.create({\n\t\t\t\tonMoveShouldSetPanResponder: () => true,\n\t\t\t\tonStartShouldSetPanResponder: () => true,\n\t\t\t\tonPanResponderGrant: (event) => {\n\t\t\t\t\tupdateFromX(event.nativeEvent.locationX);\n\t\t\t\t},\n\t\t\t\tonPanResponderMove: (event) => {\n\t\t\t\t\tupdateFromX(event.nativeEvent.locationX);\n\t\t\t\t},\n\t\t\t}),\n\t\t[updateFromX],\n\t);\n\n\treturn (\n\t\t<View style={styles.rangeRow}>\n\t\t\t<View\n\t\t\t\tstyle={styles.rangeTrack}\n\t\t\t\tonLayout={(event) => setTrackWidth(event.nativeEvent.layout.width)}\n\t\t\t\t{...panResponder.panHandlers}\n\t\t\t>\n\t\t\t\t<View style={styles.rangeBase} />\n\t\t\t\t<View style={[styles.rangeFill, { width: `${normalized * 100}%` }]} />\n\t\t\t\t<View style={[styles.rangeThumb, { left: `${normalized * 100}%` }]} />\n\t\t\t</View>\n\t\t\t{valueLabel ? <Text style={styles.rangeValue}>{valueLabel}</Text> : null}\n\t\t</View>\n\t);\n}\n\nfunction InspectorSection({\n\tlabel,\n\tchildren,\n}: {\n\treadonly label: string;\n\treadonly children: ReactNode;\n}) {\n\treturn (\n\t\t<View style={styles.section}>\n\t\t\t<Text style={styles.sectionLabel}>{label}</Text>\n\t\t\t{children}\n\t\t</View>\n\t);\n}\n\nfunction SegmentControl<TValue extends string | number>({\n\tsegments,\n\tvalue,\n\tonChange,\n}: {\n\treadonly segments: readonly NativeStyleSegment<TValue>[];\n\treadonly value: TValue;\n\treadonly onChange: (value: TValue) => void;\n}) {\n\treturn (\n\t\t<View style={styles.segmentGroup}>\n\t\t\t{segments.map((segment) => {\n\t\t\t\tconst selected = segment.value === value;\n\t\t\t\treturn (\n\t\t\t\t\t<Pressable\n\t\t\t\t\t\tkey={String(segment.value)}\n\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\taccessibilityState={{ selected }}\n\t\t\t\t\t\taccessibilityLabel={segment.label}\n\t\t\t\t\t\tonPress={() => onChange(segment.value)}\n\t\t\t\t\t\tstyle={[styles.segment, selected ? styles.segmentSelected : null]}\n\t\t\t\t\t>\n\t\t\t\t\t\t{segment.preview}\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\tstyles.segmentLabel,\n\t\t\t\t\t\t\t\tselected ? styles.segmentLabelSelected : null,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{segment.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Pressable>\n\t\t\t\t);\n\t\t\t})}\n\t\t</View>\n\t);\n}\n\nexport function NativeVectorStyleInspector({\n\ttoolId,\n\tvalue,\n\tonChange,\n\tstyle,\n}: NativeVectorStyleInspectorProps) {\n\tconst hex = normalizeNativeStyleHex(value.stroke);\n\tconst opacity = toolId === \"marker\" ? (value.strokeOpacity ?? 0.5) : undefined;\n\tconst dashSegments: readonly NativeStyleSegment<StrokeDash>[] = [\n\t\t{\n\t\t\tvalue: \"solid\",\n\t\t\tlabel: \"Contínuo\",\n\t\t\tpreview: <DashPreview color=\"#18181b\" width={4} />,\n\t\t},\n\t\t{\n\t\t\tvalue: \"dashed\",\n\t\t\tlabel: \"Tracejado\",\n\t\t\tpreview: <DashPreview color=\"#18181b\" width={4} dashed />,\n\t\t},\n\t];\n\tconst opacityPercent = Math.round((opacity ?? 1) * 100);\n\n\treturn (\n\t\t<View\n\t\t\tpointerEvents=\"auto\"\n\t\t\tstyle={[styles.shell, style]}\n\t\t\taccessibilityRole=\"summary\"\n\t\t\taccessibilityLabel={\n\t\t\t\ttoolId === \"marker\" ? \"Configurações do marcador\" : \"Configurações da caneta\"\n\t\t\t}\n\t\t>\n\t\t\t<InspectorSection label=\"Cor\">\n\t\t\t\t<View style={styles.palette}>\n\t\t\t\t\t{NATIVE_STYLE_PALETTE.map((color) => {\n\t\t\t\t\t\tconst selected = hexesEqual(color.hex, hex);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tkey={color.name}\n\t\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\t\taccessibilityState={{ selected }}\n\t\t\t\t\t\t\t\taccessibilityLabel={color.name}\n\t\t\t\t\t\t\t\tonPress={() => onChange({ stroke: color.hex })}\n\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\tstyles.swatch,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: color.hex,\n\t\t\t\t\t\t\t\t\t\tborderWidth: selected ? 2 : 1,\n\t\t\t\t\t\t\t\t\t\ttransform: [{ scale: selected ? 1.08 : 1 }],\n\t\t\t\t\t\t\t\t\t\tshadowOpacity: selected ? 0.08 : 0,\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\t\t\t\t</View>\n\t\t\t</InspectorSection>\n\t\t\t<InspectorSection label=\"Grossura\">\n\t\t\t\t<RangeControl\n\t\t\t\t\tvalue={value.strokeWidth}\n\t\t\t\t\tmin={1}\n\t\t\t\t\tmax={48}\n\t\t\t\t\tonChange={(strokeWidth) => onChange({ strokeWidth })}\n\t\t\t\t/>\n\t\t\t</InspectorSection>\n\t\t\t{toolId === \"draw\" ? (\n\t\t\t\t<InspectorSection label=\"Traço\">\n\t\t\t\t\t<SegmentControl\n\t\t\t\t\t\tsegments={dashSegments}\n\t\t\t\t\t\tvalue={value.strokeDash === \"dashed\" ? \"dashed\" : \"solid\"}\n\t\t\t\t\t\tonChange={(strokeDash) => onChange({ strokeDash })}\n\t\t\t\t\t/>\n\t\t\t\t</InspectorSection>\n\t\t\t) : (\n\t\t\t\t<InspectorSection label=\"Opacidade\">\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\tvalue={opacityPercent}\n\t\t\t\t\t\tmin={10}\n\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\tvalueLabel={`${opacityPercent}%`}\n\t\t\t\t\t\tonChange={(nextOpacity) =>\n\t\t\t\t\t\t\tonChange({ strokeOpacity: nextOpacity / 100 })\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</InspectorSection>\n\t\t\t)}\n\t\t</View>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tshell: {\n\t\tminWidth: 240,\n\t\tpaddingHorizontal: 14,\n\t\tpaddingVertical: 12,\n\t\tborderRadius: 10,\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(0,0,0,0.1)\",\n\t\tbackgroundColor: \"rgba(255,255,255,0.97)\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.06,\n\t\tshadowRadius: 16,\n\t\tshadowOffset: { width: 0, height: 4 },\n\t\tgap: 10,\n\t},\n\tsection: {\n\t\tgap: 6,\n\t},\n\tsectionLabel: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#52525b\",\n\t\ttextTransform: \"uppercase\",\n\t\tletterSpacing: 0.22,\n\t},\n\tpalette: {\n\t\tflexDirection: \"row\",\n\t\tflexWrap: \"wrap\",\n\t\tcolumnGap: 6,\n\t\trowGap: 6,\n\t\tmaxWidth: 174,\n\t},\n\tswatch: {\n\t\twidth: 24,\n\t\theight: 24,\n\t\tborderRadius: 12,\n\t\tborderColor: \"rgba(0,0,0,0.12)\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowRadius: 2,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t},\n\trangeRow: {\n\t\tminHeight: 28,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 8,\n\t},\n\trangeTrack: {\n\t\tposition: \"relative\",\n\t\tflex: 1,\n\t\theight: 28,\n\t\tjustifyContent: \"center\",\n\t},\n\trangeBase: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\theight: 3,\n\t\tborderRadius: 2,\n\t\tbackgroundColor: \"rgba(24,24,27,0.12)\",\n\t},\n\trangeFill: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\theight: 3,\n\t\tborderRadius: 2,\n\t\tbackgroundColor: \"#18181b\",\n\t},\n\trangeThumb: {\n\t\tposition: \"absolute\",\n\t\twidth: 18,\n\t\theight: 18,\n\t\tmarginLeft: -9,\n\t\tborderRadius: 9,\n\t\tborderWidth: 2,\n\t\tborderColor: \"#18181b\",\n\t\tbackgroundColor: \"#ffffff\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 3,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t},\n\trangeValue: {\n\t\tminWidth: 34,\n\t\ttextAlign: \"right\",\n\t\tfontSize: 11,\n\t\tfontWeight: \"500\",\n\t\tcolor: \"#71717a\",\n\t},\n\tsegmentGroup: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 3,\n\t\tpadding: 3,\n\t\tborderRadius: 8,\n\t\tbackgroundColor: \"rgba(24,24,27,0.06)\",\n\t},\n\tsegment: {\n\t\tflex: 1,\n\t\tminWidth: 96,\n\t\tminHeight: 32,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 6,\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 5,\n\t\tborderRadius: 6,\n\t},\n\tsegmentSelected: {\n\t\tbackgroundColor: \"#ffffff\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.1,\n\t\tshadowRadius: 2,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t},\n\tsegmentLabel: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#71717a\",\n\t\tflexShrink: 0,\n\t},\n\tsegmentLabelSelected: {\n\t\tcolor: \"#18181b\",\n\t},\n\tdashPreviewTrack: {\n\t\twidth: 26,\n\t\theight: 6,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 3,\n\t},\n\tdashPreviewStroke: {\n\t\tflexShrink: 0,\n\t},\n});\n","import { type ReactNode, useMemo, useState } from \"react\";\nimport {\n\tPressable,\n\tScrollView,\n\ttype StyleProp,\n\tStyleSheet,\n\tText,\n\ttype TextStyle,\n\tView,\n\ttype ViewStyle,\n} from \"react-native\";\n\n/**\n * Describes a single tool button rendered by {@link NativeVectorToolbar}.\n *\n * Use the built-in ids from {@link DEFAULT_NATIVE_VECTOR_TOOLS} when pairing\n * the toolbar with {@link NativeVectorViewport}. Custom ids are useful only\n * when the app also implements matching viewport behavior.\n */\nexport type NativeVectorToolDefinition = {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly shortLabel?: string;\n\treadonly tooltipLabel?: string;\n\treadonly shortcutHint?: string;\n\treadonly accessibilityLabel?: string;\n\treadonly disabled?: boolean;\n};\n\n/**\n * Render input for custom tool icons or complete custom tool buttons.\n *\n * Prefer `renderToolIcon` for app-specific icon packs. Use\n * `renderToolButton` only when you need to replace the full touch target while\n * keeping the toolbar's horizontal scrolling and tool list behavior.\n */\nexport type NativeVectorToolbarRenderToolInput = {\n\treadonly tool: NativeVectorToolDefinition;\n\treadonly selected: boolean;\n\treadonly disabled: boolean;\n\treadonly foregroundColor: string;\n\treadonly onSelect: () => void;\n};\n\nexport type NativeVectorToolbarDensity = \"compact\" | \"comfortable\";\n\nexport type NativeVectorToolbarRenderToolLockInput = {\n\treadonly locked: boolean;\n\treadonly disabled: boolean;\n\treadonly foregroundColor: string;\n\treadonly onToggle: () => void;\n};\n\nexport type NativeVectorToolbarRenderOverflowInput = {\n\treadonly open: boolean;\n\treadonly activeTool: NativeVectorToolDefinition | null;\n\treadonly disabled: boolean;\n\treadonly foregroundColor: string;\n\treadonly onToggle: () => void;\n};\n\n/**\n * Props for {@link NativeVectorToolbar}.\n *\n * The component is controlled: pass the same `value` to `NativeVectorViewport`\n * as `toolId`, and update it from `onChange`. It is intentionally lightweight\n * and native-only, with no dependency on the web toolbar implementation.\n */\nexport type NativeVectorToolbarProps = {\n\treadonly value: string;\n\treadonly onChange: (toolId: string) => void;\n\treadonly tools?: readonly NativeVectorToolDefinition[];\n\treadonly overflowToolIds?: readonly string[];\n\treadonly overflowMenuAccessibilityLabel?: string;\n\treadonly disabled?: boolean;\n\treadonly disabledToolIds?: readonly string[];\n\treadonly showToolLockToggle?: boolean;\n\treadonly toolLocked?: boolean;\n\treadonly onToolLockedChange?: (locked: boolean) => void;\n\treadonly density?: NativeVectorToolbarDensity;\n\treadonly accessibilityLabel?: string;\n\treadonly style?: StyleProp<ViewStyle>;\n\treadonly contentContainerStyle?: StyleProp<ViewStyle>;\n\treadonly overflowPanelStyle?: StyleProp<ViewStyle>;\n\treadonly toolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly activeToolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly toolLabelStyle?: StyleProp<TextStyle>;\n\treadonly activeToolLabelStyle?: StyleProp<TextStyle>;\n\treadonly renderToolIcon?: (input: NativeVectorToolbarRenderToolInput) => ReactNode;\n\treadonly renderToolLockIcon?: (\n\t\tinput: NativeVectorToolbarRenderToolLockInput,\n\t) => ReactNode;\n\treadonly renderOverflowIcon?: (\n\t\tinput: NativeVectorToolbarRenderOverflowInput,\n\t) => ReactNode;\n\treadonly renderOverflowChevronIcon?: (\n\t\tinput: NativeVectorToolbarRenderOverflowInput,\n\t) => ReactNode;\n\treadonly renderToolButton?: (\n\t\tinput: NativeVectorToolbarRenderToolInput,\n\t) => ReactNode;\n};\n\nexport const DEFAULT_NATIVE_OVERFLOW_TOOL_IDS = [\n\t\"rect\",\n\t\"ellipse\",\n\t\"architectural-cloud\",\n\t\"line\",\n\t\"marker\",\n\t\"laser\",\n\t\"image\",\n] as const;\n\n/**\n * Default mobile-friendly tool list for {@link NativeVectorToolbar}.\n *\n * The ids match the native viewport's built-in tool handling. Apps can pass a\n * filtered or reordered list when permissions or product scope require it.\n */\nexport const DEFAULT_NATIVE_VECTOR_TOOLS: readonly NativeVectorToolDefinition[] = [\n\t{ id: \"hand\", label: \"Hand\", shortcutHint: \"H\", shortLabel: \"H\" },\n\t{ id: \"select\", label: \"Select\", shortcutHint: \"V\", shortLabel: \"V\" },\n\t{ id: \"rect\", label: \"Rectangle\", shortcutHint: \"R\", shortLabel: \"R\" },\n\t{ id: \"ellipse\", label: \"Ellipse\", shortcutHint: \"O\", shortLabel: \"O\" },\n\t{\n\t\tid: \"architectural-cloud\",\n\t\tlabel: \"Nuvem arquitetural\",\n\t\ttooltipLabel: \"Architectural cloud\",\n\t\tshortcutHint: \"C\",\n\t\tshortLabel: \"C\",\n\t},\n\t{ id: \"line\", label: \"Line\", shortcutHint: \"L\", shortLabel: \"L\" },\n\t{ id: \"arrow\", label: \"Arrow\", shortcutHint: \"A\", shortLabel: \"A\" },\n\t{\n\t\tid: \"draw\",\n\t\tlabel: \"Desenhar\",\n\t\ttooltipLabel: \"Draw\",\n\t\tshortcutHint: \"D\",\n\t\tshortLabel: \"D\",\n\t},\n\t{\n\t\tid: \"marker\",\n\t\tlabel: \"Realce\",\n\t\ttooltipLabel: \"Highlighter\",\n\t\tshortcutHint: \"M\",\n\t\tshortLabel: \"M\",\n\t},\n\t{ id: \"laser\", label: \"Laser\", shortcutHint: \"K\", shortLabel: \"K\" },\n\t{\n\t\tid: \"eraser\",\n\t\tlabel: \"Borracha\",\n\t\ttooltipLabel: \"Eraser\",\n\t\tshortcutHint: \"E\",\n\t\tshortLabel: \"E\",\n\t},\n\t{ id: \"text\", label: \"Text\", shortcutHint: \"T\", shortLabel: \"T\" },\n\t{ id: \"image\", label: \"File\", shortcutHint: \"I\", shortLabel: \"I\" },\n];\n\nfunction splitToolbarTools(\n\ttools: readonly NativeVectorToolDefinition[],\n\toverflowToolIds: readonly string[],\n): {\n\treadonly primary: readonly NativeVectorToolDefinition[];\n\treadonly overflow: readonly NativeVectorToolDefinition[];\n} {\n\tconst overflowIds = new Set(overflowToolIds);\n\tif (overflowIds.size === 0) return { primary: tools, overflow: [] };\n\treturn {\n\t\tprimary: tools.filter((tool) => !overflowIds.has(tool.id)),\n\t\toverflow: tools.filter((tool) => overflowIds.has(tool.id)),\n\t};\n}\n\nfunction getPromotedOverflowTool(input: {\n\treadonly overflowTools: readonly NativeVectorToolDefinition[];\n\treadonly selectedId: string;\n\treadonly initialPromotedId: string | null;\n}): {\n\treadonly promotedTool: NativeVectorToolDefinition | null;\n\treadonly remainingOverflowTools: readonly NativeVectorToolDefinition[];\n} {\n\tconst selectedOverflowTool =\n\t\tinput.overflowTools.find((tool) => tool.id === input.selectedId) ?? null;\n\tconst fallbackTool =\n\t\tinput.overflowTools.find((tool) => tool.id === input.initialPromotedId) ??\n\t\tinput.overflowTools[0] ??\n\t\tnull;\n\tconst promotedTool = selectedOverflowTool ?? fallbackTool;\n\tif (!promotedTool) {\n\t\treturn { promotedTool: null, remainingOverflowTools: input.overflowTools };\n\t}\n\treturn {\n\t\tpromotedTool,\n\t\tremainingOverflowTools: input.overflowTools.filter(\n\t\t\t(tool) => tool.id !== promotedTool.id,\n\t\t),\n\t};\n}\n\nfunction tooltipTextForTool(tool: NativeVectorToolDefinition): string {\n\tconst name = tool.tooltipLabel ?? tool.label;\n\treturn tool.shortcutHint ? `${name} - ${tool.shortcutHint}` : name;\n}\n\n/**\n * Horizontal, touch-sized toolbar for `canvu/native`.\n *\n * Use it with {@link NativeVectorViewport} by controlling the same `toolId`\n * state. It intentionally uses React Native primitives only, so it works in\n * Expo and bare React Native apps without a WebView.\n *\n * @example\n * ```tsx\n * const [toolId, setToolId] = useState(\"select\");\n *\n * <NativeVectorViewport toolId={toolId} ... />\n * <NativeVectorToolbar value={toolId} onChange={setToolId} />\n * ```\n */\nexport function NativeVectorToolbar({\n\tvalue,\n\tonChange,\n\ttools = DEFAULT_NATIVE_VECTOR_TOOLS,\n\toverflowToolIds = DEFAULT_NATIVE_OVERFLOW_TOOL_IDS,\n\toverflowMenuAccessibilityLabel = \"More tools\",\n\tdisabled = false,\n\tdisabledToolIds = [],\n\tshowToolLockToggle = true,\n\ttoolLocked = false,\n\tonToolLockedChange,\n\tdensity = \"compact\",\n\taccessibilityLabel = \"Canvas tools\",\n\tstyle,\n\tcontentContainerStyle,\n\toverflowPanelStyle,\n\ttoolButtonStyle,\n\tactiveToolButtonStyle,\n\ttoolLabelStyle,\n\tactiveToolLabelStyle,\n\trenderToolIcon,\n\trenderToolLockIcon,\n\trenderOverflowIcon,\n\trenderOverflowChevronIcon,\n\trenderToolButton,\n}: NativeVectorToolbarProps) {\n\tconst [overflowOpen, setOverflowOpen] = useState(false);\n\tconst disabledIds = useMemo(() => new Set(disabledToolIds), [disabledToolIds]);\n\tconst { primary: primaryTools, overflow: overflowTools } = useMemo(\n\t\t() => splitToolbarTools(tools, overflowToolIds),\n\t\t[tools, overflowToolIds],\n\t);\n\tconst { promotedTool, remainingOverflowTools } = useMemo(\n\t\t() =>\n\t\t\tgetPromotedOverflowTool({\n\t\t\t\toverflowTools,\n\t\t\t\tselectedId: value,\n\t\t\t\tinitialPromotedId: overflowToolIds[0] ?? null,\n\t\t\t}),\n\t\t[overflowTools, overflowToolIds, value],\n\t);\n\tconst activeOverflowTool = overflowTools.find((tool) => tool.id === value) ?? null;\n\tconst toolbarTools =\n\t\tpromotedTool !== null ? [...primaryTools, promotedTool] : primaryTools;\n\tconst showOverflowMenu = remainingOverflowTools.length > 0;\n\tconst toolLockDisabled = disabled || !onToolLockedChange;\n\tconst toggleToolLock = () => onToolLockedChange?.(!toolLocked);\n\tconst toggleOverflow = () => setOverflowOpen((open) => !open);\n\tconst overflowRenderInput = {\n\t\topen: overflowOpen,\n\t\tactiveTool: activeOverflowTool,\n\t\tdisabled,\n\t\tforegroundColor: \"#18181b\",\n\t\tonToggle: toggleOverflow,\n\t};\n\n\treturn (\n\t\t<View\n\t\t\taccessibilityLabel={accessibilityLabel}\n\t\t\tstyle={[styles.shell, style]}\n\t\t\tpointerEvents=\"box-none\"\n\t\t>\n\t\t\t<ScrollView\n\t\t\t\thorizontal\n\t\t\t\tshowsHorizontalScrollIndicator={false}\n\t\t\t\tcontentContainerStyle={[\n\t\t\t\t\tstyles.content,\n\t\t\t\t\tdensity === \"comfortable\" ? styles.comfortableContent : undefined,\n\t\t\t\t\tcontentContainerStyle,\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t{showToolLockToggle ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\taccessibilityLabel={toolLocked ? \"Unlock tool\" : \"Lock tool\"}\n\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\taccessibilityState={{\n\t\t\t\t\t\t\t\tchecked: toolLocked,\n\t\t\t\t\t\t\t\tdisabled: toolLockDisabled,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={toolLockDisabled}\n\t\t\t\t\t\t\tonPress={toggleToolLock}\n\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\tstyles.toolButton,\n\t\t\t\t\t\t\t\tdensity === \"comfortable\" ? styles.comfortableToolButton : undefined,\n\t\t\t\t\t\t\t\ttoolLocked ? styles.activeToolButton : undefined,\n\t\t\t\t\t\t\t\tpressed && !toolLockDisabled ? styles.pressedToolButton : undefined,\n\t\t\t\t\t\t\t\ttoolLockDisabled ? styles.disabledToolButton : undefined,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderToolLockIcon?.({\n\t\t\t\t\t\t\t\tlocked: toolLocked,\n\t\t\t\t\t\t\t\tdisabled: toolLockDisabled,\n\t\t\t\t\t\t\t\tforegroundColor: \"#18181b\",\n\t\t\t\t\t\t\t\tonToggle: toggleToolLock,\n\t\t\t\t\t\t\t}) ?? <Text style={styles.lockGlyph}>{toolLocked ? \"L\" : \"U\"}</Text>}\n\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t<View style={styles.toolLockDivider} />\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{toolbarTools.map((tool) =>\n\t\t\t\t\trenderNativeToolButton({\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tonChange,\n\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\tdisabledIds,\n\t\t\t\t\t\tdensity,\n\t\t\t\t\t\ttoolButtonStyle,\n\t\t\t\t\t\tactiveToolButtonStyle,\n\t\t\t\t\t\ttoolLabelStyle,\n\t\t\t\t\t\tactiveToolLabelStyle,\n\t\t\t\t\t\trenderToolIcon,\n\t\t\t\t\t\trenderToolButton,\n\t\t\t\t\t}),\n\t\t\t\t)}\n\t\t\t\t{showOverflowMenu ? <View style={styles.overflowSpacer} /> : null}\n\t\t\t\t{showOverflowMenu ? (\n\t\t\t\t\t<Pressable\n\t\t\t\t\t\taccessibilityLabel={\n\t\t\t\t\t\t\tactiveOverflowTool\n\t\t\t\t\t\t\t\t? `${overflowMenuAccessibilityLabel}: ${activeOverflowTool.accessibilityLabel ?? activeOverflowTool.label}`\n\t\t\t\t\t\t\t\t: overflowMenuAccessibilityLabel\n\t\t\t\t\t\t}\n\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\taccessibilityState={{\n\t\t\t\t\t\t\texpanded: overflowOpen,\n\t\t\t\t\t\t\tselected: overflowOpen || activeOverflowTool !== null,\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonPress={toggleOverflow}\n\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\tstyles.overflowTrigger,\n\t\t\t\t\t\t\toverflowOpen || activeOverflowTool\n\t\t\t\t\t\t\t\t? styles.activeToolButton\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tpressed && !disabled ? styles.pressedToolButton : undefined,\n\t\t\t\t\t\t\tdisabled ? styles.disabledToolButton : undefined,\n\t\t\t\t\t\t]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<View style={styles.iconSlot}>\n\t\t\t\t\t\t\t{activeOverflowTool\n\t\t\t\t\t\t\t\t? (renderToolIcon?.({\n\t\t\t\t\t\t\t\t\t\ttool: activeOverflowTool,\n\t\t\t\t\t\t\t\t\t\tselected: true,\n\t\t\t\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t\t\t\t\tforegroundColor: \"#18181b\",\n\t\t\t\t\t\t\t\t\t\tonSelect: () => onChange(activeOverflowTool.id),\n\t\t\t\t\t\t\t\t\t}) ?? renderNativeToolFallback(activeOverflowTool, \"#18181b\"))\n\t\t\t\t\t\t\t\t: (renderOverflowIcon?.(overflowRenderInput) ?? (\n\t\t\t\t\t\t\t\t\t\t<Text style={styles.shapesGlyph}>S</Text>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t\t{renderOverflowChevronIcon?.(overflowRenderInput) ?? (\n\t\t\t\t\t\t\t<Text style={styles.chevronGlyph}>{overflowOpen ? \"^\" : \"v\"}</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Pressable>\n\t\t\t\t) : null}\n\t\t\t</ScrollView>\n\t\t\t{overflowOpen && showOverflowMenu ? (\n\t\t\t\t<View style={[styles.overflowPanel, overflowPanelStyle]}>\n\t\t\t\t\t{remainingOverflowTools.map((tool) =>\n\t\t\t\t\t\trenderNativeToolButton({\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tonChange: (toolId) => {\n\t\t\t\t\t\t\t\tsetOverflowOpen(false);\n\t\t\t\t\t\t\t\tonChange(toolId);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t\tdisabledIds,\n\t\t\t\t\t\t\tdensity: \"compact\",\n\t\t\t\t\t\t\ttoolButtonStyle: styles.overflowToolButton,\n\t\t\t\t\t\t\tactiveToolButtonStyle,\n\t\t\t\t\t\t\ttoolLabelStyle,\n\t\t\t\t\t\t\tactiveToolLabelStyle,\n\t\t\t\t\t\t\trenderToolIcon,\n\t\t\t\t\t\t\trenderToolButton,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\t\t\t) : null}\n\t\t</View>\n\t);\n}\n\nfunction renderNativeToolButton(input: {\n\treadonly tool: NativeVectorToolDefinition;\n\treadonly value: string;\n\treadonly onChange: (toolId: string) => void;\n\treadonly disabled: boolean;\n\treadonly disabledIds: ReadonlySet<string>;\n\treadonly density: NativeVectorToolbarDensity;\n\treadonly toolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly activeToolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly toolLabelStyle?: StyleProp<TextStyle>;\n\treadonly activeToolLabelStyle?: StyleProp<TextStyle>;\n\treadonly renderToolIcon?: (input: NativeVectorToolbarRenderToolInput) => ReactNode;\n\treadonly renderToolButton?: (\n\t\tinput: NativeVectorToolbarRenderToolInput,\n\t) => ReactNode;\n}): ReactNode {\n\tconst selected = input.tool.id === input.value;\n\tconst toolDisabled =\n\t\tinput.disabled || input.tool.disabled || input.disabledIds.has(input.tool.id);\n\tconst foregroundColor = \"#18181b\";\n\tconst onSelect = () => {\n\t\tif (!toolDisabled) {\n\t\t\tinput.onChange(input.tool.id);\n\t\t}\n\t};\n\tconst renderInput = {\n\t\ttool: input.tool,\n\t\tselected,\n\t\tdisabled: toolDisabled,\n\t\tforegroundColor,\n\t\tonSelect,\n\t};\n\tif (input.renderToolButton) {\n\t\treturn <View key={input.tool.id}>{input.renderToolButton(renderInput)}</View>;\n\t}\n\tconst icon =\n\t\tinput.renderToolIcon?.(renderInput) ??\n\t\trenderNativeToolFallback(input.tool, foregroundColor, input.toolLabelStyle);\n\treturn (\n\t\t<Pressable\n\t\t\tkey={input.tool.id}\n\t\t\taccessibilityLabel={\n\t\t\t\tinput.tool.accessibilityLabel ?? tooltipTextForTool(input.tool)\n\t\t\t}\n\t\t\taccessibilityRole=\"button\"\n\t\t\taccessibilityState={{ selected, disabled: toolDisabled }}\n\t\t\tdisabled={toolDisabled}\n\t\t\tonPress={onSelect}\n\t\t\tstyle={({ pressed }) => [\n\t\t\t\tstyles.toolButton,\n\t\t\t\tinput.density === \"comfortable\" ? styles.comfortableToolButton : undefined,\n\t\t\t\tinput.toolButtonStyle,\n\t\t\t\tselected ? styles.activeToolButton : undefined,\n\t\t\t\tselected ? input.activeToolButtonStyle : undefined,\n\t\t\t\tpressed && !toolDisabled ? styles.pressedToolButton : undefined,\n\t\t\t\ttoolDisabled ? styles.disabledToolButton : undefined,\n\t\t\t]}\n\t\t>\n\t\t\t<View style={styles.iconSlot}>{icon}</View>\n\t\t\t{input.density === \"comfortable\" ? (\n\t\t\t\t<Text\n\t\t\t\t\tnumberOfLines={1}\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tstyles.toolLabel,\n\t\t\t\t\t\t{ color: foregroundColor },\n\t\t\t\t\t\tinput.toolLabelStyle,\n\t\t\t\t\t\tselected ? input.activeToolLabelStyle : undefined,\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t{input.tool.label}\n\t\t\t\t</Text>\n\t\t\t) : null}\n\t\t</Pressable>\n\t);\n}\n\nfunction renderNativeToolFallback(\n\ttool: NativeVectorToolDefinition,\n\tforegroundColor: string,\n\ttoolLabelStyle?: StyleProp<TextStyle>,\n): ReactNode {\n\treturn (\n\t\t<Text style={[styles.shortLabel, { color: foregroundColor }, toolLabelStyle]}>\n\t\t\t{tool.shortLabel ?? tool.label.slice(0, 1).toUpperCase()}\n\t\t</Text>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tshell: {\n\t\tborderRadius: 8,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0, 0, 0, 0.12)\",\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0.95)\",\n\t\tshadowColor: \"#18181b\",\n\t\tshadowOpacity: 0.08,\n\t\tshadowRadius: 3,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t\televation: 3,\n\t},\n\tcontent: {\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 6,\n\t},\n\tcomfortableContent: {\n\t\tgap: 6,\n\t},\n\ttoolButton: {\n\t\tminWidth: 40,\n\t\theight: 40,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 2,\n\t\tborderRadius: 6,\n\t\tpaddingHorizontal: 8,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"transparent\",\n\t\tbackgroundColor: \"transparent\",\n\t},\n\tcomfortableToolButton: {\n\t\tminWidth: 56,\n\t\theight: 48,\n\t},\n\tactiveToolButton: {\n\t\tborderColor: \"rgba(24, 24, 27, 0.28)\",\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.1)\",\n\t},\n\tpressedToolButton: {\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.08)\",\n\t},\n\tdisabledToolButton: {\n\t\topacity: 0.42,\n\t},\n\ticonSlot: {\n\t\theight: 22,\n\t\tminWidth: 22,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\tshortLabel: {\n\t\tfontSize: 16,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 20,\n\t},\n\ttoolLabel: {\n\t\tmaxWidth: 68,\n\t\tfontSize: 10,\n\t\tfontWeight: \"600\",\n\t\tlineHeight: 12,\n\t},\n\ttoolLockDivider: {\n\t\twidth: StyleSheet.hairlineWidth,\n\t\talignSelf: \"stretch\",\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.14)\",\n\t\tmarginHorizontal: 6,\n\t\tmarginVertical: 4,\n\t},\n\tlockGlyph: {\n\t\tcolor: \"#18181b\",\n\t\tfontSize: 13,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 16,\n\t},\n\toverflowSpacer: {\n\t\tminWidth: 8,\n\t\tflexGrow: 1,\n\t},\n\toverflowTrigger: {\n\t\tminWidth: 48,\n\t\theight: 40,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 4,\n\t\tborderRadius: 6,\n\t\tpaddingHorizontal: 8,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"transparent\",\n\t\tbackgroundColor: \"transparent\",\n\t},\n\toverflowPanel: {\n\t\tposition: \"absolute\",\n\t\tright: 8,\n\t\tbottom: 52,\n\t\twidth: 148,\n\t\tflexDirection: \"row\",\n\t\tflexWrap: \"wrap\",\n\t\tgap: 6,\n\t\tpadding: 10,\n\t\tborderRadius: 10,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0, 0, 0, 0.1)\",\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0.98)\",\n\t\tshadowColor: \"#18181b\",\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 24,\n\t\tshadowOffset: { width: 0, height: -4 },\n\t\televation: 8,\n\t},\n\toverflowToolButton: {\n\t\twidth: 40,\n\t\tminWidth: 40,\n\t\theight: 40,\n\t\tpaddingHorizontal: 0,\n\t\tborderRadius: 8,\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.05)\",\n\t},\n\tshapesGlyph: {\n\t\tcolor: \"#18181b\",\n\t\tfontSize: 17,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 20,\n\t},\n\tchevronGlyph: {\n\t\tcolor: \"#18181b\",\n\t\tfontSize: 13,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 16,\n\t\topacity: 0.75,\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 {\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\t// A freehand stroke is only its ink. Do NOT fall back to the\n\t\t\t// bounding box — that erased/selected the stroke from anywhere\n\t\t\t// inside its (often large, mostly empty) rect.\n\t\t\treturn false;\n\t\t}\n\t\tif (pts && pts.length === 1) {\n\t\t\tconst p = pts[0];\n\t\t\tif (!p) return false;\n\t\t\tconst cw = itemLocalToWorld(p.x, p.y, item.x, item.y, w, h, rot);\n\t\t\tconst dsq = (worldX - cw.x) ** 2 + (worldY - cw.y) ** 2;\n\t\t\treturn dsq <= tolSq;\n\t\t}\n\t\t// No usable path points (malformed item): last-resort bbox test.\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\tbuildArchitecturalCloudSvg,\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 === \"architectural-cloud\") {\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: buildArchitecturalCloudSvg(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","export type NativeVectorToolCursorKind =\n\t| \"crosshair\"\n\t| \"draw\"\n\t| \"marker\"\n\t| \"eraser\"\n\t| \"text\";\n\nexport type NativeVectorToolCursor = {\n\treadonly kind: NativeVectorToolCursorKind;\n\treadonly size: number;\n\treadonly hotspot: {\n\t\treadonly x: number;\n\t\treadonly y: number;\n\t};\n};\n\nexport type NativeVectorToolCursorPoint = {\n\treadonly x: number;\n\treadonly y: number;\n};\n\nexport type NativeVectorToolCursorViewportSize = {\n\treadonly width: number;\n\treadonly height: number;\n};\n\nconst ICON_SIZE = 24;\nconst CENTER_HOTSPOT = { x: 12, y: 12 } as const;\n\nexport function nativeCursorForVectorToolId(\n\ttoolId: string,\n): NativeVectorToolCursor | null {\n\tswitch (toolId) {\n\t\tcase \"rect\":\n\t\tcase \"ellipse\":\n\t\tcase \"architectural-cloud\":\n\t\tcase \"line\":\n\t\tcase \"arrow\":\n\t\tcase \"laser\":\n\t\tcase \"image\":\n\t\t\treturn { kind: \"crosshair\", size: ICON_SIZE, hotspot: CENTER_HOTSPOT };\n\t\tcase \"draw\":\n\t\t\treturn { kind: \"draw\", size: ICON_SIZE, hotspot: { x: 4, y: 18 } };\n\t\tcase \"marker\":\n\t\t\treturn { kind: \"marker\", size: ICON_SIZE, hotspot: { x: 11, y: 14 } };\n\t\tcase \"eraser\":\n\t\t\treturn { kind: \"eraser\", size: ICON_SIZE, hotspot: { x: 12, y: 14 } };\n\t\tcase \"text\":\n\t\t\treturn { kind: \"text\", size: ICON_SIZE, hotspot: CENTER_HOTSPOT };\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nexport function nativeCrosshairToolCursor(): NativeVectorToolCursor {\n\treturn { kind: \"crosshair\", size: ICON_SIZE, hotspot: CENTER_HOTSPOT };\n}\n\nexport function nativeFallbackToolCursorPoint(\n\tsize: NativeVectorToolCursorViewportSize,\n): NativeVectorToolCursorPoint | null {\n\tif (size.width <= 0 || size.height <= 0) return null;\n\treturn { x: size.width / 2, y: size.height / 2 };\n}\n","import {\n\thitTestResizeHandle,\n\thitTestRotateHandle,\n\ttype ResizeHandleId,\n} from \"../interaction/resize-handles\";\nimport { itemPivotWorld } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type NativeCustomShapePlacementOptions = {\n\treadonly toolId: string;\n\treadonly createItem: (args: {\n\t\treadonly id: string;\n\t\treadonly bounds: Rect;\n\t}) => VectorSceneItem;\n};\n\nexport type NativeSelectionHandleHit =\n\t| { readonly kind: \"resize\"; readonly handle: ResizeHandleId }\n\t| { readonly kind: \"rotate\" };\n\nexport type NativeSelectionHandleHitInput = {\n\treadonly selectedItem: VectorSceneItem | null | undefined;\n\treadonly selectedCount: number;\n\treadonly worldPoint: { readonly x: number; readonly y: number };\n\treadonly zoom: number;\n};\n\nexport function supportsNativeResizeHandles(\n\titem: VectorSceneItem | null | undefined,\n): boolean {\n\tconst k = item?.toolKind;\n\tif (\n\t\tk === \"rect\" ||\n\t\tk === \"ellipse\" ||\n\t\tk === \"architectural-cloud\" ||\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 function hitTestNativeSelectionHandle({\n\tselectedItem,\n\tselectedCount,\n\tworldPoint,\n\tzoom,\n}: NativeSelectionHandleHitInput): NativeSelectionHandleHit | null {\n\tif (selectedCount !== 1) return null;\n\tif (!selectedItem || selectedItem.locked) return null;\n\tif (!supportsNativeResizeHandles(selectedItem)) return null;\n\tconst bounds = normalizeRect(selectedItem.bounds);\n\tconst rotation = selectedItem.rotation ?? 0;\n\tconst handleRadiusWorld = 6 / Math.max(zoom, 1e-9);\n\tconst rotateOffsetWorld = 24 / Math.max(zoom, 1e-9);\n\tif (\n\t\thitTestRotateHandle(\n\t\t\tbounds,\n\t\t\trotation,\n\t\t\tworldPoint.x,\n\t\t\tworldPoint.y,\n\t\t\thandleRadiusWorld,\n\t\t\trotateOffsetWorld,\n\t\t)\n\t) {\n\t\treturn { kind: \"rotate\" };\n\t}\n\tconst handle = hitTestResizeHandle(\n\t\tbounds,\n\t\tworldPoint.x,\n\t\tworldPoint.y,\n\t\thandleRadiusWorld,\n\t\trotation,\n\t);\n\treturn handle ? { kind: \"resize\", handle } : null;\n}\n\nexport function resolveNativeCustomPlacement(\n\ttoolId: string,\n\tcustomPlacement?: NativeCustomShapePlacementOptions,\n\tcustomPlacements?: readonly NativeCustomShapePlacementOptions[],\n): NativeCustomShapePlacementOptions | null {\n\tif (customPlacement?.toolId === toolId) return customPlacement;\n\treturn customPlacements?.find((placement) => placement.toolId === toolId) ?? null;\n}\n\nexport function nativeRotationDragStart(input: {\n\treadonly item: VectorSceneItem;\n\treadonly worldPoint: { readonly x: number; readonly y: number };\n}) {\n\tconst pivotWorld = itemPivotWorld(input.item);\n\treturn {\n\t\tpivotWorld,\n\t\tstartPointerAngleRad: Math.atan2(\n\t\t\tinput.worldPoint.y - pivotWorld.y,\n\t\t\tinput.worldPoint.x - pivotWorld.x,\n\t\t),\n\t\tstartRotation: input.item.rotation ?? 0,\n\t};\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport {\n\ttype LayoutChangeEvent,\n\tPanResponder,\n\ttype PointerEvent,\n\tView,\n} from \"react-native\";\nimport { Camera2D } from \"../camera/camera\";\nimport {\n\tcollectEraserTargetsAtWorldPoint,\n\thitTestWorldPoint,\n} from \"../interaction/hit-test\";\nimport {\n\tapplyRotationFromPointer,\n\tresizeItemByHandle,\n} from \"../interaction/mutations\";\nimport { type ResizeHandleId, rectFromCorners } from \"../interaction/resize-handles\";\nimport { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect, rectsIntersect } from \"../math/rect\";\nimport {\n\tcreateArchitecturalCloudItem,\n\tcreateEllipseItem,\n\tcreateFreehandStrokeItem,\n\tcreateLineItem,\n\tcreateRectangleItem,\n\tcreateShapeId,\n\tcreateTextItem,\n\tDEFAULT_STROKE_STYLE,\n\tlineEndpointsToLocal,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { LineEndpointsLocal, VectorSceneItem } from \"../scene/types\";\nimport type { PlacementPreview } from \"./NativeInteractionOverlay\";\nimport { NativeInteractionOverlay } from \"./NativeInteractionOverlay\";\nimport { NativeSceneRenderer } from \"./NativeSceneRenderer\";\nimport {\n\tNativeVectorStyleInspector,\n\ttype NativeVectorStyleToolId,\n} from \"./NativeVectorStyleInspector\";\nimport {\n\tERASER_TRAIL_MAX_AGE_MS,\n\tfreshTimedTrailPoints,\n\tLASER_TRAIL_MAX_AGE_MS,\n\ttype TimedTrailPoint,\n} from \"./native-overlay-style\";\nimport {\n\tnativeCrosshairToolCursor,\n\tnativeCursorForVectorToolId,\n\tnativeFallbackToolCursorPoint,\n} from \"./native-tool-cursors\";\nimport {\n\thitTestNativeSelectionHandle,\n\ttype NativeCustomShapePlacementOptions,\n\tnativeRotationDragStart,\n\tresolveNativeCustomPlacement,\n\tsupportsNativeResizeHandles,\n} from \"./native-vector-interactions\";\n\nexport type { PlacementPreview } from \"./NativeInteractionOverlay\";\n\nexport type NativeVectorViewportHandle = {\n\tgetCamera: () => Camera2D | null;\n\trequestRender: () => void;\n\tgetViewportSize: () => { width: number; height: number };\n\tfitWorldRect: (worldRect: Rect, options?: { padding?: number }) => void;\n};\n\nexport type NativeWorldPointerDownDetail = {\n\treadonly toolId: string;\n\treadonly worldX: number;\n\treadonly worldY: number;\n\treadonly screenX: number;\n\treadonly screenY: number;\n};\n\nexport type NativeVectorViewportProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly selectedIds?: readonly string[];\n\treadonly toolId?: string;\n\treadonly toolLocked?: boolean;\n\treadonly interactive?: boolean;\n\treadonly onSelectionChange?: (ids: string[]) => void;\n\treadonly onItemsChange?: (items: VectorSceneItem[]) => void;\n\treadonly onToolChangeRequest?: (toolId: string) => void;\n\treadonly onWorldPointerDown?: (detail: NativeWorldPointerDownDetail) => void;\n\treadonly onCameraChange?: () => void;\n\treadonly customPlacement?: NativeCustomShapePlacementOptions;\n\treadonly customPlacements?: readonly NativeCustomShapePlacementOptions[];\n\treadonly customCrosshairToolIds?: readonly string[];\n\treadonly toolbar?: React.ReactNode;\n\treadonly showStyleInspector?: boolean;\n\treadonly styleInspectorPlacement?: \"bottom\" | \"top-left\";\n};\n\ntype DragState =\n\t| { readonly kind: \"idle\" }\n\t| { readonly kind: \"pan\" }\n\t| {\n\t\t\treadonly kind: \"draw\";\n\t\t\treadonly tool: \"draw\" | \"marker\" | \"laser\";\n\t\t\treadonly points: { x: number; y: number }[];\n\t }\n\t| {\n\t\t\treadonly kind: \"move\";\n\t\t\treadonly ids: string[];\n\t\t\treadonly snapshots: Record<string, VectorSceneItem>;\n\t\t\treadonly startWorld: { x: number; y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"resize\";\n\t\t\treadonly id: string;\n\t\t\treadonly handle: ResizeHandleId;\n\t\t\treadonly snapshot: VectorSceneItem;\n\t\t\treadonly start: {\n\t\t\t\treadonly bounds: Rect;\n\t\t\t\treadonly line?: LineEndpointsLocal;\n\t\t\t};\n\t }\n\t| {\n\t\t\treadonly kind: \"rotate\";\n\t\t\treadonly id: string;\n\t\t\treadonly snapshot: VectorSceneItem;\n\t\t\treadonly pivotWorld: { readonly x: number; readonly y: number };\n\t\t\treadonly startPointerAngleRad: number;\n\t\t\treadonly startRotation: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"marquee\";\n\t\t\treadonly startWorld: { x: number; y: number };\n\t }\n\t| { readonly kind: \"erase\" }\n\t| {\n\t\t\treadonly kind: \"tap\";\n\t\t\treadonly tool: \"note\" | \"text\";\n\t\t\treadonly startWorld: { x: number; y: number };\n\t\t\treadonly startScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"place\";\n\t\t\treadonly tool: PlacementToolId;\n\t\t\treadonly startWorld: { x: number; y: number };\n\t\t\treadonly startScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"custom-place\";\n\t\t\treadonly tool: string;\n\t\t\treadonly placement: NativeCustomShapePlacementOptions;\n\t\t\treadonly startWorld: { x: number; y: number };\n\t\t\treadonly startScreen: { x: number; y: number };\n\t };\n\ntype PlacementToolId = \"rect\" | \"ellipse\" | \"architectural-cloud\" | \"line\" | \"arrow\";\ntype ScreenPoint = { readonly x: number; readonly y: number };\n\nconst MIN_PLACE_SIZE = 8;\nconst MIN_ARROW_DRAG_PX = 8;\nconst TAP_PX = 20;\nconst MARKER_TOOL_STYLE: StrokeStyle = {\n\tstroke: \"#fde047\",\n\tstrokeWidth: 16,\n\tstrokeOpacity: 0.5,\n};\n\nfunction isPlacementTool(toolId: string): toolId is PlacementToolId {\n\treturn (\n\t\ttoolId === \"rect\" ||\n\t\ttoolId === \"ellipse\" ||\n\t\ttoolId === \"architectural-cloud\" ||\n\t\ttoolId === \"line\" ||\n\t\ttoolId === \"arrow\"\n\t);\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\nfunction placementPreviewForTool(\n\ttoolId: PlacementToolId,\n\tstart: { x: number; y: number },\n\tend: { x: number; y: number },\n): PlacementPreview {\n\tif (\n\t\ttoolId === \"rect\" ||\n\t\ttoolId === \"ellipse\" ||\n\t\ttoolId === \"architectural-cloud\"\n\t) {\n\t\treturn { kind: toolId, rect: rectFromCorners(start, end) };\n\t}\n\treturn { kind: toolId, start, end };\n}\n\nfunction defaultPlacementWorld(\n\ttoolId: PlacementToolId,\n\tcenter: { x: number; y: number },\n): {\n\treadonly raw: Rect;\n\treadonly lineWorld?: readonly [\n\t\t{ readonly x: number; readonly y: number },\n\t\t{ readonly x: number; readonly y: number },\n\t];\n} {\n\tconst cx = center.x;\n\tconst cy = center.y;\n\tif (toolId === \"rect\") {\n\t\treturn { raw: { x: cx - 60, y: cy - 40, width: 120, height: 80 } };\n\t}\n\tif (toolId === \"ellipse\") {\n\t\treturn { raw: { x: cx - 70, y: cy - 45, width: 140, height: 90 } };\n\t}\n\tif (toolId === \"architectural-cloud\") {\n\t\treturn { raw: { x: cx - 90, y: cy - 50, width: 180, height: 100 } };\n\t}\n\tconst start = { x: cx - 50, y: cy };\n\tconst end = { x: cx + 50, y: cy };\n\treturn {\n\t\traw: rectFromCorners(start, end),\n\t\tlineWorld: [start, end],\n\t};\n}\n\nfunction collectIdsInRect(\n\titems: readonly VectorSceneItem[],\n\tmarquee: Rect,\n): string[] {\n\tconst m = normalizeRect(marquee);\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\nfunction screenPointFromPointerEvent(event: PointerEvent): ScreenPoint {\n\tconst nativeEvent = event.nativeEvent;\n\tconst x = Number.isFinite(nativeEvent.offsetX)\n\t\t? nativeEvent.offsetX\n\t\t: nativeEvent.x;\n\tconst y = Number.isFinite(nativeEvent.offsetY)\n\t\t? nativeEvent.offsetY\n\t\t: nativeEvent.y;\n\treturn { x, y };\n}\n\nfunction 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) return;\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 const NativeVectorViewport = forwardRef<\n\tNativeVectorViewportHandle,\n\tNativeVectorViewportProps\n>(function NativeVectorViewport(\n\t{\n\t\titems,\n\t\tselectedIds = [],\n\t\ttoolId = \"hand\",\n\t\ttoolLocked = false,\n\t\tinteractive = false,\n\t\tonSelectionChange,\n\t\tonItemsChange,\n\t\tonToolChangeRequest,\n\t\tonWorldPointerDown,\n\t\tonCameraChange,\n\t\tcustomPlacement,\n\t\tcustomPlacements = [],\n\t\tcustomCrosshairToolIds = [],\n\t\ttoolbar,\n\t\tshowStyleInspector = false,\n\t\tstyleInspectorPlacement = \"bottom\",\n\t},\n\tref,\n) {\n\tconst [size, setSize] = useState({ width: 0, height: 0 });\n\tconst cameraRef = useRef<Camera2D | null>(null);\n\tconst toolIdRef = useRef(toolId);\n\ttoolIdRef.current = toolId;\n\tconst toolLockedRef = useRef(toolLocked);\n\ttoolLockedRef.current = toolLocked;\n\tconst onToolChangeRequestRef = useRef(onToolChangeRequest);\n\tonToolChangeRequestRef.current = onToolChangeRequest;\n\tconst onWorldPointerDownRef = useRef(onWorldPointerDown);\n\tonWorldPointerDownRef.current = onWorldPointerDown;\n\tconst onCameraChangeRef = useRef(onCameraChange);\n\tonCameraChangeRef.current = onCameraChange;\n\tconst onItemsChangeRef = useRef(onItemsChange);\n\tonItemsChangeRef.current = onItemsChange;\n\tconst customPlacementRef = useRef(customPlacement);\n\tcustomPlacementRef.current = customPlacement;\n\tconst customPlacementsRef = useRef(customPlacements);\n\tcustomPlacementsRef.current = customPlacements;\n\tconst customCrosshairToolIdsRef = useRef(customCrosshairToolIds);\n\tcustomCrosshairToolIdsRef.current = customCrosshairToolIds;\n\tconst onSelectionChangeRef = useRef(onSelectionChange);\n\tonSelectionChangeRef.current = onSelectionChange;\n\tconst itemsRef = useRef(items);\n\titemsRef.current = items;\n\tconst selectedIdsRef = useRef(selectedIds);\n\tselectedIdsRef.current = selectedIds;\n\n\tconst dragStateRef = useRef<DragState>({ kind: \"idle\" });\n\n\tconst [placementPreview, setPlacementPreview] = useState<PlacementPreview | null>(\n\t\tnull,\n\t);\n\tconst [eraserTrail, setEraserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [laserTrail, setLaserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [toolCursorPoint, setToolCursorPoint] = useState<ScreenPoint | null>(null);\n\tconst laserClearTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst strokeStyleRef = useRef<StrokeStyle>({ ...DEFAULT_STROKE_STYLE });\n\tconst markerStrokeStyleRef = useRef<StrokeStyle>({ ...MARKER_TOOL_STYLE });\n\tconst styleBeforeMarkerRef = useRef<StrokeStyle>({ ...DEFAULT_STROKE_STYLE });\n\tconst lastToolIdRef = useRef(toolId);\n\tconst [strokeStyleState, setStrokeStyleState] = useState<StrokeStyle>({\n\t\t...DEFAULT_STROKE_STYLE,\n\t});\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (laserClearTimerRef.current) {\n\t\t\t\tclearTimeout(laserClearTimerRef.current);\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\tuseEffect(() => {\n\t\tif (eraserTrail.length === 0 && laserTrail.length === 0) return;\n\t\tconst timer = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tsetEraserTrail((prev) =>\n\t\t\t\tfreshTimedTrailPoints(prev, now, ERASER_TRAIL_MAX_AGE_MS),\n\t\t\t);\n\t\t\tsetLaserTrail((prev) =>\n\t\t\t\tfreshTimedTrailPoints(prev, now, LASER_TRAIL_MAX_AGE_MS),\n\t\t\t);\n\t\t}, 50);\n\t\treturn () => clearInterval(timer);\n\t}, [eraserTrail.length, laserTrail.length]);\n\tuseEffect(() => {\n\t\tconst previousToolId = lastToolIdRef.current;\n\t\tconst current = strokeStyleRef.current;\n\t\tlet next = current;\n\t\tif (toolId === \"marker\") {\n\t\t\tif (previousToolId !== \"marker\") {\n\t\t\t\tstyleBeforeMarkerRef.current = current;\n\t\t\t}\n\t\t\tnext = markerStrokeStyleRef.current;\n\t\t} else if (previousToolId === \"marker\") {\n\t\t\tmarkerStrokeStyleRef.current = current;\n\t\t\tconst restored = styleBeforeMarkerRef.current;\n\t\t\tnext = {\n\t\t\t\tstroke: restored.stroke,\n\t\t\t\tstrokeWidth:\n\t\t\t\t\ttoolId === \"draw\" &&\n\t\t\t\t\trestored.strokeWidth === DEFAULT_STROKE_STYLE.strokeWidth\n\t\t\t\t\t\t? 10\n\t\t\t\t\t\t: restored.strokeWidth,\n\t\t\t\t...(restored.strokeDash != null ? { strokeDash: restored.strokeDash } : {}),\n\t\t\t};\n\t\t} else if (toolId === \"draw\") {\n\t\t\tnext = {\n\t\t\t\t...current,\n\t\t\t\tstrokeWidth:\n\t\t\t\t\tcurrent.strokeWidth === DEFAULT_STROKE_STYLE.strokeWidth\n\t\t\t\t\t\t? 10\n\t\t\t\t\t\t: current.strokeWidth,\n\t\t\t};\n\t\t} else if (isDefaultMarkerToolStyle(current)) {\n\t\t\tnext = {\n\t\t\t\tstroke: DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\tstrokeWidth: DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t\t...(current.strokeDash != null ? { strokeDash: current.strokeDash } : {}),\n\t\t\t};\n\t\t}\n\t\tstrokeStyleRef.current = next;\n\t\tsetStrokeStyleState(next);\n\t\tlastToolIdRef.current = toolId;\n\t}, [toolId]);\n\n\tconst patchCurrentStrokeStyle = useCallback((patch: Partial<StrokeStyle>) => {\n\t\tconst next = { ...strokeStyleRef.current, ...patch };\n\t\tstrokeStyleRef.current = next;\n\t\tif (toolIdRef.current === \"marker\") {\n\t\t\tmarkerStrokeStyleRef.current = next;\n\t\t}\n\t\tsetStrokeStyleState(next);\n\t}, []);\n\n\tconst [eraserPreviewIds, setEraserPreviewIds] = useState<string[]>([]);\n\tconst eraserPreviewIdSetRef = useRef<Set<string>>(new Set());\n\n\tconst requestSelectToolAfterUse = useCallback(() => {\n\t\tif (!toolLockedRef.current) {\n\t\t\tonToolChangeRequestRef.current?.(\"select\");\n\t\t}\n\t}, []);\n\n\tif (!cameraRef.current) {\n\t\tcameraRef.current = new Camera2D({ minZoom: 0.05, maxZoom: 32 });\n\t}\n\n\tconst camera = cameraRef.current;\n\tconst [cameraTick, setCameraTick] = useState(0);\n\n\tconst screenToWorld = useCallback(\n\t\t(sx: number, sy: number): { worldX: number; worldY: number } => {\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!cam) return { worldX: 0, worldY: 0 };\n\t\t\treturn cam.screenToWorld(sx, sy);\n\t\t},\n\t\t[],\n\t);\n\n\tconst requestRender = useCallback(() => {\n\t\tsetCameraTick((n) => n + 1);\n\t\tonCameraChangeRef.current?.();\n\t}, []);\n\n\tconst cursorForToolId = useCallback((nextToolId: string) => {\n\t\tconst builtInCursor = nativeCursorForVectorToolId(nextToolId);\n\t\tif (builtInCursor) return builtInCursor;\n\t\treturn customCrosshairToolIdsRef.current.includes(nextToolId)\n\t\t\t? nativeCrosshairToolCursor()\n\t\t\t: null;\n\t}, []);\n\n\tconst onLayout = useCallback(\n\t\t(e: LayoutChangeEvent) => {\n\t\t\tconst { width, height } = e.nativeEvent.layout;\n\t\t\tconst nextSize = { width, height };\n\t\t\tsetSize(nextSize);\n\t\t\tif (!interactive) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!cursorForToolId(toolIdRef.current)) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetToolCursorPoint(\n\t\t\t\t(current) => current ?? nativeFallbackToolCursorPoint(nextSize),\n\t\t\t);\n\t\t},\n\t\t[cursorForToolId, interactive],\n\t);\n\n\tconst updateToolCursorPoint = useCallback(\n\t\t(point: ScreenPoint) => {\n\t\t\tif (!interactive) return;\n\t\t\tif (!cursorForToolId(toolIdRef.current)) return;\n\t\t\tsetToolCursorPoint(point);\n\t\t},\n\t\t[cursorForToolId, interactive],\n\t);\n\n\tconst hideToolCursor = useCallback(() => {\n\t\tsetToolCursorPoint(null);\n\t}, []);\n\n\tconst showFallbackToolCursor = useCallback(\n\t\t(nextToolId: string) => {\n\t\t\tif (!interactive) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!cursorForToolId(nextToolId)) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetToolCursorPoint(\n\t\t\t\t(current) => current ?? nativeFallbackToolCursorPoint(size),\n\t\t\t);\n\t\t},\n\t\t[cursorForToolId, interactive, size],\n\t);\n\n\tuseEffect(() => {\n\t\tshowFallbackToolCursor(toolId);\n\t}, [showFallbackToolCursor, toolId]);\n\n\tconst handlePointerMove = useCallback(\n\t\t(event: PointerEvent) => {\n\t\t\tupdateToolCursorPoint(screenPointFromPointerEvent(event));\n\t\t},\n\t\t[updateToolCursorPoint],\n\t);\n\n\tconst selectedItems = useMemo(\n\t\t() => items.filter((it) => selectedIds.includes(it.id)),\n\t\t[items, selectedIds],\n\t);\n\n\t// Items queued for eraser deletion are hidden from the scene and shown\n\t// dimmed (real geometry) by the overlay instead of a gray skeleton.\n\tconst sceneItems = useMemo(() => {\n\t\tif (eraserPreviewIds.length === 0) return items;\n\t\tconst hidden = new Set(eraserPreviewIds);\n\t\treturn items.filter((it) => !hidden.has(it.id));\n\t}, [items, eraserPreviewIds]);\n\n\tconst showResizeHandles =\n\t\tinteractive &&\n\t\tselectedItems.length === 1 &&\n\t\t!selectedItems[0]?.locked &&\n\t\tsupportsNativeResizeHandles(selectedItems[0]);\n\n\t// ─── Gesture state (refs, not state — avoid re-renders) ────────────\n\n\tconst lastPinchDist = useRef<number | null>(null);\n\tconst lastPanPoint = useRef<{ x: number; y: number } | null>(null);\n\n\tconst panResponder = useMemo(\n\t\t() =>\n\t\t\tPanResponder.create({\n\t\t\t\tonStartShouldSetPanResponder: () => true,\n\t\t\t\tonMoveShouldSetPanResponder: () => true,\n\n\t\t\t\tonPanResponderGrant: (evt) => {\n\t\t\t\t\tlastPinchDist.current = null;\n\t\t\t\t\tlastPanPoint.current = null;\n\n\t\t\t\t\tconst touches = evt.nativeEvent.touches;\n\t\t\t\t\tconst sx = evt.nativeEvent.locationX;\n\t\t\t\t\tconst sy = evt.nativeEvent.locationY;\n\n\t\t\t\t\tif (touches && touches.length >= 2) {\n\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tupdateToolCursorPoint({ x: sx, y: sy });\n\n\t\t\t\t\tif (!interactive) {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tool = toolIdRef.current;\n\t\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\t\tif (!cam) return;\n\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(sx, sy);\n\n\t\t\t\t\tif (tool === \"hand\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tool === \"select\") {\n\t\t\t\t\t\tconst currentSelectedIds = selectedIdsRef.current;\n\t\t\t\t\t\tconst selectedItem =\n\t\t\t\t\t\t\tcurrentSelectedIds.length === 1\n\t\t\t\t\t\t\t\t? itemsRef.current.find((item) => item.id === currentSelectedIds[0])\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst selectionHandle = hitTestNativeSelectionHandle({\n\t\t\t\t\t\t\tselectedItem,\n\t\t\t\t\t\t\tselectedCount: currentSelectedIds.length,\n\t\t\t\t\t\t\tworldPoint: { x: worldX, y: worldY },\n\t\t\t\t\t\t\tzoom: cam.zoom,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (selectionHandle && selectedItem) {\n\t\t\t\t\t\t\tif (selectionHandle.kind === \"rotate\") {\n\t\t\t\t\t\t\t\tconst rotationStart = nativeRotationDragStart({\n\t\t\t\t\t\t\t\t\titem: selectedItem,\n\t\t\t\t\t\t\t\t\tworldPoint: { x: worldX, y: worldY },\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\t\tkind: \"rotate\",\n\t\t\t\t\t\t\t\t\tid: selectedItem.id,\n\t\t\t\t\t\t\t\t\tsnapshot: selectedItem,\n\t\t\t\t\t\t\t\t\t...rotationStart,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\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: selectedItem.id,\n\t\t\t\t\t\t\t\thandle: selectionHandle.handle,\n\t\t\t\t\t\t\t\tsnapshot: selectedItem,\n\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\tbounds: selectedItem.bounds,\n\t\t\t\t\t\t\t\t\tline: selectedItem.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\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst hit = hitTestWorldPoint(itemsRef.current, worldX, worldY, {\n\t\t\t\t\t\t\tlineHitWorld: 10 / cam.zoom,\n\t\t\t\t\t\t\tignoreLocked: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (hit) {\n\t\t\t\t\t\t\tconst cur = selectedIdsRef.current;\n\t\t\t\t\t\t\tconst ids = cur.includes(hit.id) ? [...cur] : [hit.id];\n\t\t\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\t\t\tfor (const id of ids) {\n\t\t\t\t\t\t\t\tconst it = itemsRef.current.find((i) => i.id === id);\n\t\t\t\t\t\t\t\tif (it) snapshots[id] = it;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\tkind: \"move\",\n\t\t\t\t\t\t\t\tids,\n\t\t\t\t\t\t\t\tsnapshots,\n\t\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (!cur.includes(hit.id)) {\n\t\t\t\t\t\t\t\tonSelectionChangeRef.current?.([hit.id]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSelectionChangeRef.current?.([]);\n\t\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\t\tkind: \"marquee\",\n\t\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\t\tkind: \"marquee\",\n\t\t\t\t\t\t\t\trect: { x: worldX, y: worldY, width: 0, height: 0 },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tool === \"draw\" || tool === \"marker\" || tool === \"laser\") {\n\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\tkind: \"draw\",\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tpoints: [{ x: worldX, y: worldY }],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (tool === \"laser\") {\n\t\t\t\t\t\t\tif (laserClearTimerRef.current) {\n\t\t\t\t\t\t\t\tclearTimeout(laserClearTimerRef.current);\n\t\t\t\t\t\t\t\tlaserClearTimerRef.current = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetLaserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\t\tpoints: [{ x: worldX, y: worldY }],\n\t\t\t\t\t\t\t\tstyle: { ...strokeStyleRef.current },\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tool === \"eraser\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"erase\" };\n\t\t\t\t\t\teraserPreviewIdSetRef.current = new Set();\n\t\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\t\tsetEraserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\t{ lineHitWorld: 10 / cam.zoom, ignoreLocked: true },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\t\t\teraserPreviewIdSetRef.current.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdSetRef.current));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isPlacementTool(tool)) {\n\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\tkind: \"place\",\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t\tstartScreen: { x: sx, y: sy },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetPlacementPreview(\n\t\t\t\t\t\t\tplacementPreviewForTool(\n\t\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\t\t{ x: worldX, y: worldY },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tx: worldX,\n\t\t\t\t\t\t\t\t\ty: worldY,\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\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst customPlacement = resolveNativeCustomPlacement(\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tcustomPlacementRef.current,\n\t\t\t\t\t\tcustomPlacementsRef.current,\n\t\t\t\t\t);\n\t\t\t\t\tif (customPlacement) {\n\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\tkind: \"custom-place\",\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tplacement: customPlacement,\n\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t\tstartScreen: { x: sx, y: sy },\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"rect\",\n\t\t\t\t\t\t\trect: { x: worldX, y: worldY, width: 0, height: 0 },\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tool === \"note\" || tool === \"text\") {\n\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\tkind: \"tap\",\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t\t\tstartScreen: { x: sx, y: sy },\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst handleWorldPointerDown = onWorldPointerDownRef.current;\n\t\t\t\t\tif (handleWorldPointerDown) {\n\t\t\t\t\t\thandleWorldPointerDown({\n\t\t\t\t\t\t\ttoolId: tool,\n\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\tscreenX: sx,\n\t\t\t\t\t\t\tscreenY: sy,\n\t\t\t\t\t\t});\n\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t\t\t},\n\n\t\t\t\tonPanResponderMove: (evt) => {\n\t\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\t\tif (!cam) return;\n\n\t\t\t\t\tconst touches = evt.nativeEvent.touches;\n\t\t\t\t\tconst sx = evt.nativeEvent.locationX;\n\t\t\t\t\tconst sy = evt.nativeEvent.locationY;\n\t\t\t\t\tconst pageX = evt.nativeEvent.pageX;\n\t\t\t\t\tconst pageY = evt.nativeEvent.pageY;\n\n\t\t\t\t\t// Pinch zoom (2 fingers)\n\t\t\t\t\tif (touches && touches.length >= 2) {\n\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\tconst t0 = touches[0] as { pageX: number; pageY: number } | undefined;\n\t\t\t\t\t\tconst t1 = touches[1] as { pageX: number; pageY: number } | undefined;\n\t\t\t\t\t\tif (t0 && t1) {\n\t\t\t\t\t\t\tconst dx = t1.pageX - t0.pageX;\n\t\t\t\t\t\t\tconst dy = t1.pageY - t0.pageY;\n\t\t\t\t\t\t\tconst dist = Math.hypot(dx, dy);\n\t\t\t\t\t\t\tif (lastPinchDist.current != null) {\n\t\t\t\t\t\t\t\tconst scale = dist / lastPinchDist.current;\n\t\t\t\t\t\t\t\tconst cx = (t0.pageX + t1.pageX) / 2;\n\t\t\t\t\t\t\t\tconst cy = (t0.pageY + t1.pageY) / 2;\n\t\t\t\t\t\t\t\tcam.setZoom(cam.zoom * scale, { x: cx, y: cy });\n\t\t\t\t\t\t\t\trequestRender();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastPinchDist.current = dist;\n\t\t\t\t\t\t\tlastPanPoint.current = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlastPinchDist.current = null;\n\t\t\t\t\tupdateToolCursorPoint({ x: sx, y: sy });\n\t\t\t\t\tconst { worldX, worldY } = screenToWorld(sx, sy);\n\n\t\t\t\t\tconst st = dragStateRef.current;\n\n\t\t\t\t\t// Pan camera\n\t\t\t\t\tif (st.kind === \"pan\") {\n\t\t\t\t\t\tconst current = { x: pageX, y: pageY };\n\t\t\t\t\t\tif (lastPanPoint.current) {\n\t\t\t\t\t\t\tconst dx = current.x - lastPanPoint.current.x;\n\t\t\t\t\t\t\tconst dy = current.y - lastPanPoint.current.y;\n\t\t\t\t\t\t\tcam.x += dx;\n\t\t\t\t\t\t\tcam.y += dy;\n\t\t\t\t\t\t\trequestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlastPanPoint.current = current;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlastPanPoint.current = null;\n\n\t\t\t\t\t// Draw stroke\n\t\t\t\t\tif (st.kind === \"draw\") {\n\t\t\t\t\t\tconst pts = st.points;\n\t\t\t\t\t\tconst last = pts[pts.length - 1];\n\t\t\t\t\t\tconst dx = worldX - (last?.x ?? worldX);\n\t\t\t\t\t\tconst dy = worldY - (last?.y ?? worldY);\n\t\t\t\t\t\tconst shouldAppendPoint = Math.hypot(dx, dy) > 0.5 / cam.zoom;\n\t\t\t\t\t\tif (shouldAppendPoint) {\n\t\t\t\t\t\t\tpts.push({ x: worldX, y: worldY });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (st.tool === \"laser\") {\n\t\t\t\t\t\t\tif (shouldAppendPoint) {\n\t\t\t\t\t\t\t\tsetLaserTrail((prev) => [\n\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\t{ x: worldX, y: worldY, t: Date.now() },\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\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: [...pts],\n\t\t\t\t\t\t\tstyle: { ...strokeStyleRef.current },\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Move items\n\t\t\t\t\tif (st.kind === \"move\") {\n\t\t\t\t\t\tconst dx = worldX - st.startWorld.x;\n\t\t\t\t\t\tconst dy = worldY - st.startWorld.y;\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 nextList = itemsRef.current.map((it) => {\n\t\t\t\t\t\t\tconst snap = st.snapshots[it.id];\n\t\t\t\t\t\t\tif (!snap) return it;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...snap,\n\t\t\t\t\t\t\t\tx: snap.x + dx,\n\t\t\t\t\t\t\t\ty: snap.y + dy,\n\t\t\t\t\t\t\t\tbounds: {\n\t\t\t\t\t\t\t\t\t...snap.bounds,\n\t\t\t\t\t\t\t\t\tx: snap.bounds.x + dx,\n\t\t\t\t\t\t\t\t\ty: snap.bounds.y + dy,\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\tchange(nextList);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"rotate\") {\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 angle = Math.atan2(\n\t\t\t\t\t\t\tworldY - st.pivotWorld.y,\n\t\t\t\t\t\t\tworldX - st.pivotWorld.x,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst next = applyRotationFromPointer(\n\t\t\t\t\t\t\tst.snapshot,\n\t\t\t\t\t\t\tst.startRotation,\n\t\t\t\t\t\t\tst.startPointerAngleRad,\n\t\t\t\t\t\t\tangle,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tchange(\n\t\t\t\t\t\t\titemsRef.current.map((item) => (item.id === st.id ? next : item)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"resize\") {\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 next = resizeItemByHandle(st.snapshot, st.start, st.handle, {\n\t\t\t\t\t\t\tx: worldX,\n\t\t\t\t\t\t\ty: worldY,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tchange(\n\t\t\t\t\t\t\titemsRef.current.map((item) => (item.id === st.id ? next : item)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Marquee selection\n\t\t\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\t\t\tconst a = st.startWorld;\n\t\t\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\t\t\tconst rect = {\n\t\t\t\t\t\t\tx: Math.min(a.x, b.x),\n\t\t\t\t\t\t\ty: Math.min(a.y, b.y),\n\t\t\t\t\t\t\twidth: Math.abs(b.x - a.x),\n\t\t\t\t\t\t\theight: Math.abs(b.y - a.y),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetPlacementPreview({ kind: \"marquee\", rect });\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Eraser\n\t\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\t\tsetEraserTrail((prev) => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{ x: worldX, y: worldY, t: Date.now() },\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\t\t\titemsRef.current,\n\t\t\t\t\t\t\tworldX,\n\t\t\t\t\t\t\tworldY,\n\t\t\t\t\t\t\t{ lineHitWorld: 10 / cam.zoom, ignoreLocked: true },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\t\t\teraserPreviewIdSetRef.current.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdSetRef.current));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"place\") {\n\t\t\t\t\t\tsetPlacementPreview(\n\t\t\t\t\t\t\tplacementPreviewForTool(st.tool, st.startWorld, {\n\t\t\t\t\t\t\t\tx: worldX,\n\t\t\t\t\t\t\t\ty: worldY,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"custom-place\") {\n\t\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\t\tkind: \"rect\",\n\t\t\t\t\t\t\trect: rectFromCorners(st.startWorld, { x: worldX, y: worldY }),\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\tonPanResponderRelease: (evt) => {\n\t\t\t\t\tlastPinchDist.current = null;\n\t\t\t\t\tlastPanPoint.current = null;\n\t\t\t\t\tupdateToolCursorPoint({\n\t\t\t\t\t\tx: evt.nativeEvent.locationX,\n\t\t\t\t\t\ty: evt.nativeEvent.locationY,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst st = dragStateRef.current;\n\n\t\t\t\t\tif (st.kind === \"draw\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t\tif (st.tool === \"laser\") {\n\t\t\t\t\t\t\tif (laserClearTimerRef.current) {\n\t\t\t\t\t\t\t\tclearTimeout(laserClearTimerRef.current);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlaserClearTimerRef.current = setTimeout(() => {\n\t\t\t\t\t\t\t\tsetLaserTrail([]);\n\t\t\t\t\t\t\t\tlaserClearTimerRef.current = null;\n\t\t\t\t\t\t\t}, 650);\n\t\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (st.points.length < 1) return;\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 id = createShapeId();\n\t\t\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tst.points,\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\tchange([...itemsRef.current, item]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"move\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"resize\" || st.kind === \"rotate\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\t\t\tif (!cam) return;\n\t\t\t\t\t\tconst { worldX, worldY } = screenToWorld(\n\t\t\t\t\t\t\tevt.nativeEvent.locationX,\n\t\t\t\t\t\t\tevt.nativeEvent.locationY,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst a = st.startWorld;\n\t\t\t\t\t\tif (typeof worldX !== \"number\" || typeof worldY !== \"number\") return;\n\t\t\t\t\t\tconst raw = {\n\t\t\t\t\t\t\tx: Math.min(a.x, worldX),\n\t\t\t\t\t\t\ty: Math.min(a.y, worldY),\n\t\t\t\t\t\t\twidth: Math.abs(worldX - a.x),\n\t\t\t\t\t\t\theight: Math.abs(worldY - a.y),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst picked = collectIdsInRect(itemsRef.current, raw);\n\t\t\t\t\t\tonSelectionChangeRef.current?.(picked);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"erase\") {\n\t\t\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\t\t\tif (change && eraserPreviewIdSetRef.current.size > 0) {\n\t\t\t\t\t\t\tconst idSet = new Set(eraserPreviewIdSetRef.current);\n\t\t\t\t\t\t\tchange(itemsRef.current.filter((i) => !idSet.has(i.id)));\n\t\t\t\t\t\t}\n\t\t\t\t\t\teraserPreviewIdSetRef.current.clear();\n\t\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\t\tsetEraserTrail([]);\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"place\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\tsetPlacementPreview(null);\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 { worldX, worldY } = screenToWorld(\n\t\t\t\t\t\t\tevt.nativeEvent.locationX,\n\t\t\t\t\t\t\tevt.nativeEvent.locationY,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst a = st.startWorld;\n\t\t\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\t\t\tconst screenDx = evt.nativeEvent.locationX - st.startScreen.x;\n\t\t\t\t\t\tconst screenDy = evt.nativeEvent.locationY - st.startScreen.y;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tst.tool === \"arrow\" &&\n\t\t\t\t\t\t\tMath.hypot(screenDx, screenDy) < MIN_ARROW_DRAG_PX\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet raw = rectFromCorners(a, b);\n\t\t\t\t\t\tlet br = normalizeRect(raw);\n\t\t\t\t\t\tlet lineStart = a;\n\t\t\t\t\t\tlet lineEnd = b;\n\t\t\t\t\t\tif (br.width < MIN_PLACE_SIZE || br.height < MIN_PLACE_SIZE) {\n\t\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\t\tconst defaults = defaultPlacementWorld(st.tool, center);\n\t\t\t\t\t\t\traw = defaults.raw;\n\t\t\t\t\t\t\tbr = normalizeRect(raw);\n\t\t\t\t\t\t\tif (defaults.lineWorld) {\n\t\t\t\t\t\t\t\tconst [defaultStart, defaultEnd] = defaults.lineWorld;\n\t\t\t\t\t\t\t\tlineStart = defaultStart;\n\t\t\t\t\t\t\t\tlineEnd = defaultEnd;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\tconst style = strokeStyleRef.current;\n\t\t\t\t\t\tif (st.tool === \"rect\") {\n\t\t\t\t\t\t\tchange([...itemsRef.current, createRectangleItem(id, raw, style)]);\n\t\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (st.tool === \"ellipse\") {\n\t\t\t\t\t\t\tchange([...itemsRef.current, createEllipseItem(id, raw, style)]);\n\t\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (st.tool === \"architectural-cloud\") {\n\t\t\t\t\t\t\tchange([\n\t\t\t\t\t\t\t\t...itemsRef.current,\n\t\t\t\t\t\t\t\tcreateArchitecturalCloudItem(id, raw, style),\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst line = lineEndpointsToLocal(br, lineStart, lineEnd);\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, br, line, st.tool, style),\n\t\t\t\t\t\t]);\n\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"custom-place\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\tsetPlacementPreview(null);\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 { worldX, worldY } = screenToWorld(\n\t\t\t\t\t\t\tevt.nativeEvent.locationX,\n\t\t\t\t\t\t\tevt.nativeEvent.locationY,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst center = {\n\t\t\t\t\t\t\tx: (st.startWorld.x + worldX) / 2,\n\t\t\t\t\t\t\ty: (st.startWorld.y + worldY) / 2,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst raw = rectFromCorners(st.startWorld, { x: worldX, y: worldY });\n\t\t\t\t\t\tconst normalized = normalizeRect(raw);\n\t\t\t\t\t\tconst bounds =\n\t\t\t\t\t\t\tnormalized.width < MIN_PLACE_SIZE || normalized.height < MIN_PLACE_SIZE\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tx: center.x - 60,\n\t\t\t\t\t\t\t\t\t\ty: center.y - 40,\n\t\t\t\t\t\t\t\t\t\twidth: 120,\n\t\t\t\t\t\t\t\t\t\theight: 80,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: normalized;\n\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\tconst item = st.placement.createItem({ id, bounds });\n\t\t\t\t\t\tchange([...itemsRef.current, item]);\n\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (st.kind === \"tap\") {\n\t\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\t\tconst screenDx = evt.nativeEvent.locationX - st.startScreen.x;\n\t\t\t\t\t\tconst screenDy = evt.nativeEvent.locationY - st.startScreen.y;\n\t\t\t\t\t\tif (Math.hypot(screenDx, screenDy) > TAP_PX) return;\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\tif (st.tool === \"text\") {\n\t\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\t\tconst item = createTextItem(\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tx: st.startWorld.x - 4,\n\t\t\t\t\t\t\t\t\ty: st.startWorld.y - 18,\n\t\t\t\t\t\t\t\t\twidth: 160,\n\t\t\t\t\t\t\t\t\theight: 26,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"Text\",\n\t\t\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t\t\t18,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tchange([...itemsRef.current, item]);\n\t\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (st.tool === \"note\") {\n\t\t\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\t\t\tconst note: VectorSceneItem = {\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tx: st.startWorld.x - 70,\n\t\t\t\t\t\t\t\ty: st.startWorld.y - 40,\n\t\t\t\t\t\t\t\tbounds: {\n\t\t\t\t\t\t\t\t\tx: st.startWorld.x - 70,\n\t\t\t\t\t\t\t\t\ty: st.startWorld.y - 40,\n\t\t\t\t\t\t\t\t\twidth: 140,\n\t\t\t\t\t\t\t\t\theight: 80,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tchildrenSvg:\n\t\t\t\t\t\t\t\t\t`<rect width=\"140\" height=\"80\" rx=\"8\" fill=\"#fef08a\" stroke=\"#facc15\" stroke-width=\"1\" />` +\n\t\t\t\t\t\t\t\t\t`<text x=\"10\" y=\"22\" fill=\"#1f2937\" font-size=\"12\" font-family=\"system-ui\">Nota</text>`,\n\t\t\t\t\t\t\t\ttoolKind: \"custom\",\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tchange([...itemsRef.current, note]);\n\t\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t},\n\n\t\t\t\tonPanResponderTerminate: () => {\n\t\t\t\t\tlastPinchDist.current = null;\n\t\t\t\t\tlastPanPoint.current = null;\n\t\t\t\t\thideToolCursor();\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tsetLaserTrail([]);\n\t\t\t\t\tsetEraserTrail([]);\n\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\teraserPreviewIdSetRef.current.clear();\n\t\t\t\t},\n\t\t\t}),\n\t\t[\n\t\t\tscreenToWorld,\n\t\t\trequestRender,\n\t\t\trequestSelectToolAfterUse,\n\t\t\tinteractive,\n\t\t\tupdateToolCursorPoint,\n\t\t\thideToolCursor,\n\t\t],\n\t);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t(): NativeVectorViewportHandle => ({\n\t\t\tgetCamera: () => cameraRef.current,\n\t\t\trequestRender,\n\t\t\tgetViewportSize: () => size,\n\t\t\tfitWorldRect: (worldRect, options) => {\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam || size.width <= 0 || size.height <= 0) return;\n\t\t\t\tfitCameraToWorldRect(\n\t\t\t\t\tcam,\n\t\t\t\t\tsize.width,\n\t\t\t\t\tsize.height,\n\t\t\t\t\tworldRect,\n\t\t\t\t\toptions?.padding ?? 0.08,\n\t\t\t\t);\n\t\t\t\trequestRender();\n\t\t\t},\n\t\t}),\n\t\t[requestRender, size],\n\t);\n\n\tvoid cameraTick;\n\tconst activeStyleToolId: NativeVectorStyleToolId | null =\n\t\ttoolId === \"draw\" || toolId === \"marker\" ? toolId : null;\n\tconst activeToolCursor = cursorForToolId(toolId);\n\tconst toolCursor =\n\t\tactiveToolCursor && toolCursorPoint\n\t\t\t? { cursor: activeToolCursor, point: toolCursorPoint }\n\t\t\t: null;\n\n\treturn (\n\t\t<View\n\t\t\tstyle={{ flex: 1, overflow: \"hidden\" }}\n\t\t\tonLayout={onLayout}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerEnter={handlePointerMove}\n\t\t\tonPointerLeave={hideToolCursor}\n\t\t\t{...panResponder.panHandlers}\n\t\t>\n\t\t\t{size.width > 0 && size.height > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t<NativeSceneRenderer\n\t\t\t\t\t\titems={sceneItems}\n\t\t\t\t\t\tcamera={camera}\n\t\t\t\t\t\twidth={size.width}\n\t\t\t\t\t\theight={size.height}\n\t\t\t\t\t/>\n\t\t\t\t\t{interactive && (\n\t\t\t\t\t\t<NativeInteractionOverlay\n\t\t\t\t\t\t\tcamera={camera}\n\t\t\t\t\t\t\twidth={size.width}\n\t\t\t\t\t\t\theight={size.height}\n\t\t\t\t\t\t\tselectedItems={selectedItems}\n\t\t\t\t\t\t\tshowResizeHandles={showResizeHandles}\n\t\t\t\t\t\t\tplacementPreview={placementPreview}\n\t\t\t\t\t\t\tlaserTrail={laserTrail}\n\t\t\t\t\t\t\teraserTrail={eraserTrail}\n\t\t\t\t\t\t\teraserPreviewItems={items.filter((it) =>\n\t\t\t\t\t\t\t\teraserPreviewIds.includes(it.id),\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tpreviewStrokeStyle={strokeStyleState}\n\t\t\t\t\t\t\ttoolCursor={toolCursor}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{interactive && showStyleInspector && activeStyleToolId ? (\n\t\t\t\t\t\t<View\n\t\t\t\t\t\t\tpointerEvents=\"box-none\"\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tstyleInspectorPlacement === \"top-left\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\tleft: 16,\n\t\t\t\t\t\t\t\t\t\t\ttop: 104,\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"flex-start\",\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\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\tleft: 16,\n\t\t\t\t\t\t\t\t\t\t\tright: 16,\n\t\t\t\t\t\t\t\t\t\t\tbottom: 84,\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\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\t\t<NativeVectorStyleInspector\n\t\t\t\t\t\t\t\ttoolId={activeStyleToolId}\n\t\t\t\t\t\t\t\tvalue={strokeStyleState}\n\t\t\t\t\t\t\t\tonChange={patchCurrentStrokeStyle}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{toolbar && (\n\t\t\t\t\t\t<View\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\tbottom: 16,\n\t\t\t\t\t\t\t\tleft: 16,\n\t\t\t\t\t\t\t\tright: 16,\n\t\t\t\t\t\t\t\tflexDirection: \"row\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tpointerEvents=\"box-none\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</View>\n\t);\n});\n"]}
1
+ {"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/math/item-transform.ts","../src/interaction/resize-handles.ts","../src/scene/freehand-path.ts","../src/native/skia-transform.ts","../src/native/SvgNodeRenderer.tsx","../src/native/svg-parser.ts","../src/native/NativeShapeRenderer.tsx","../src/native/NativeToolCursorRenderer.tsx","../src/native/native-overlay-style.ts","../src/native/NativeInteractionOverlay.tsx","../src/scene/spatial-cull.ts","../src/scene/cull.ts","../src/native/NativeSceneRenderer.tsx","../src/native/native-style-inspector-values.ts","../src/native/NativeVectorStyleInspector.tsx","../src/native/NativeVectorToolbar.tsx","../src/camera/camera.ts","../src/interaction/hit-test.ts","../src/interaction/mutations.ts","../src/native/native-tool-cursors.ts","../src/native/native-vector-interactions.ts","../src/native/NativeVectorViewport.tsx"],"names":["d","op","b","s","localBounds","SkiaCircle","SkiaLine","SkiaText","SkiaImage","parseNum","attrs","node","jsx","RoundedRect","vec","Fragment","Path","matchFont","jsxs","Line","Group","Rect","Oval","MemoShape","Canvas","useMemo","Text","useState","View","styles","Pressable","StyleSheet","NativeVectorViewport","useCallback","customPlacement","PanResponder"],"mappings":"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","file":"native.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 * Escape text for use inside SVG `<text>` / `<tspan>` (not full XML attribute context).\n */\nexport function escapeSvgTextContent(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\n/**\n * Sophisticated sans-serif used for both canvas text rendering and inline editing.\n * Inter is loaded by host apps (e.g. demo/index.html); system-ui fallback keeps the canvas\n * usable when the webfont hasn't loaded yet.\n */\nexport const TEXT_FONT_FAMILY =\n\t\"Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, system-ui, sans-serif\";\nconst LINE_HEIGHT_RATIO = 22 / 18;\n/**\n * Where the first text baseline sits, expressed in font-size units. Picked so\n * the SVG glyph and the inline-edit textarea agree visually (the textarea's\n * natural first-line baseline lands at this same y when padded by\n * {@link EDIT_TOP_PAD_RATIO}). See {@link TextEditOverlay} for the matching\n * inset.\n */\nconst FIRST_LINE_BASELINE_RATIO = 20 / 18;\n/** Textarea top inset (font-size units) that lines up with the SVG baseline. */\nexport const EDIT_TOP_PAD_RATIO = 4 / 18;\n/** Extra space below the descender so glyphs aren't clipped at the bounds. */\nconst BOTTOM_PAD_RATIO = 4 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 26;\n/** Horizontal padding in local space (matches `<text x=\"4\">`). */\nconst TEXT_PAD_X = 4;\nconst MAX_TEXT_MEASURE_CACHE_ENTRIES = 2000;\n\nlet sharedMeasureContext: CanvasRenderingContext2D | null | undefined;\nconst textMeasureCache = new Map<string, { width: number; height: number }>();\n\nfunction getSharedMeasureContext(): CanvasRenderingContext2D | null {\n\tif (sharedMeasureContext !== undefined) {\n\t\treturn sharedMeasureContext;\n\t}\n\tif (typeof document === \"undefined\") {\n\t\tsharedMeasureContext = null;\n\t\treturn sharedMeasureContext;\n\t}\n\tconst canvas = document.createElement(\"canvas\");\n\tsharedMeasureContext = canvas.getContext(\"2d\");\n\treturn sharedMeasureContext;\n}\n\nfunction textMeasureCacheKey(content: string, fontSize: number): string {\n\treturn `${fontSize}\\n${content}`;\n}\n\nfunction cacheMeasuredBounds(\n\tkey: string,\n\tbounds: { width: number; height: number },\n): void {\n\tif (textMeasureCache.size >= MAX_TEXT_MEASURE_CACHE_ENTRIES) {\n\t\ttextMeasureCache.clear();\n\t}\n\ttextMeasureCache.set(key, bounds);\n}\n\nfunction lineHeightFor(fontSize: number): number {\n\treturn fontSize * LINE_HEIGHT_RATIO;\n}\n\nfunction firstLineBaselineY(fontSize: number): number {\n\treturn fontSize * FIRST_LINE_BASELINE_RATIO;\n}\n\n/** Public version used by callers that need the same baseline as SVG rendering. */\nexport function textBaselineYFor(fontSize: number): number {\n\treturn firstLineBaselineY(fontSize);\n}\n\n/** Public version used by callers that need the same line height as SVG rendering. */\nexport function textLineHeightFor(fontSize: number): number {\n\treturn lineHeightFor(fontSize);\n}\n\n/**\n * Local width/height for a text item so bounds match rendered SVG (no fixed max width).\n * Uses canvas measureText when `document` is available; rough fallback otherwise.\n */\nexport function measureTextBoundsLocal(\n\tcontent: string,\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): {\n\twidth: number;\n\theight: number;\n} {\n\tconst cacheKey = textMeasureCacheKey(content, fontSize);\n\tconst cached = textMeasureCache.get(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst lh = lineHeightFor(fontSize);\n\tconst baselineY = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tconst lines = trimmed.length === 0 ? [PLACEHOLDER] : content.split(\"\\n\");\n\n\tlet maxInnerW = 0;\n\tconst ctx = getSharedMeasureContext();\n\tif (ctx) {\n\t\tctx.font = `${fontSize}px ${TEXT_FONT_FAMILY}`;\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, ctx.measureText(toMeasure).width);\n\t\t}\n\t}\n\tif (maxInnerW === 0) {\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, toMeasure.length * fontSize * 0.52);\n\t\t}\n\t}\n\n\tconst minW = Math.max(MIN_TEXT_BOX_W, TEXT_PAD_X * 2 + fontSize);\n\tconst width = Math.max(minW, TEXT_PAD_X * 2 + maxInnerW);\n\tconst height = Math.max(\n\t\tMIN_TEXT_BOX_H,\n\t\tbaselineY + (lines.length - 1) * lh + Math.max(4, fontSize * BOTTOM_PAD_RATIO),\n\t);\n\tconst measured = { width, height };\n\tcacheMeasuredBounds(cacheKey, measured);\n\treturn measured;\n}\n\n/**\n * Builds SVG `<text>` markup for a text box in local coordinates [0, w] × [0, h].\n * @param fillColor — Text fill (defaults to blue-gray placeholder / blue body).\n */\nexport function buildTextSvg(\n\tcontent: string,\n\t_width: number,\n\t_height: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst lh = lineHeightFor(fontSize);\n\tconst y0 = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tif (trimmed.length === 0) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"#94a3b8\" font-style=\"italic\">${escapeSvgTextContent(PLACEHOLDER)}</text>`;\n\t}\n\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length === 1) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${escapeSvgTextContent(lines[0] ?? \"\")}</text>`;\n\t}\n\n\tconst parts: string[] = [];\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] ?? \"\";\n\t\tif (i === 0) {\n\t\t\tparts.push(`<tspan x=\"4\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t} else {\n\t\t\tparts.push(`<tspan x=\"4\" dy=\"${lh}\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t}\n\t}\n\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${parts.join(\"\")}</text>`;\n}\n\n/**\n * Text that wraps inside a fixed rectangle (after user resize). Uses `foreignObject` + XHTML\n * so wrapping matches browser layout.\n */\nexport function buildTextFixedBoundsSvg(\n\tcontent: string,\n\twidth: number,\n\theight: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst w = Math.max(1, width);\n\tconst h = Math.max(1, height);\n\tconst lh = lineHeightFor(fontSize);\n\tconst trimmed = content.trim();\n\tconst padTop = EDIT_TOP_PAD_RATIO * fontSize;\n\tif (trimmed.length === 0) {\n\t\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:#94a3b8;font-style:italic\">${escapeHtmlText(PLACEHOLDER)}</div></foreignObject>`;\n\t}\n\tconst body = escapeHtmlText(content);\n\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:${fillColor}\">${body}</div></foreignObject>`;\n}\n","import type { StrokeOptions } from \"perfect-freehand\";\nimport getStroke from \"perfect-freehand\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { buildCustomShapeChildrenSvg } from \"./custom-shape\";\nimport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n} from \"./text-svg\";\nimport type {\n\tArrowBindings,\n\tLineEndpointsLocal,\n\tVectorPathPoint,\n\tVectorSceneItem,\n} from \"./types\";\n\nexport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n};\n\n/**\n * While inline-editing: sync bounds to draft width/height and hide SVG so only the textarea shows text.\n */\nexport function applyTextDraftWhileEditing(\n\titem: VectorSceneItem,\n\tdraft: string,\n): VectorSceneItem {\n\tif (item.toolKind !== \"text\") return item;\n\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\tif (item.textFixedBounds) {\n\t\treturn {\n\t\t\t...item,\n\t\t\ttext: draft,\n\t\t\tchildrenSvg: \"\",\n\t\t};\n\t}\n\tconst m = measureTextBoundsLocal(draft, fs);\n\treturn {\n\t\t...item,\n\t\ttext: draft,\n\t\tbounds: {\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t},\n\t\tchildrenSvg: \"\",\n\t};\n}\n\n/** Stroke dash pattern for freehand drawings. `solid` = perfect-freehand fill; `dashed` = centerline stroke with dashes. */\nexport type StrokeDash = \"solid\" | \"dashed\";\n\n/** Resolved stroke for SVG generation. */\nexport type StrokeStyle = {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n\tstrokeDash?: StrokeDash;\n};\n\nexport const DEFAULT_STROKE_STYLE: StrokeStyle = {\n\tstroke: \"#1d1d1d\",\n\tstrokeWidth: 2,\n};\n\nconst TOOL_FREEHAND_DEFAULTS: Record<\n\t\"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tPartial<StrokeStyle>\n> = {\n\tdraw: { strokeWidth: 10 },\n\tpencil: { strokeWidth: 3 },\n\tbrush: { strokeWidth: 10 },\n\tmarker: { stroke: \"#fde047\", strokeWidth: 16, strokeOpacity: 0.5 },\n};\n\nfunction perfectFreehandOptions(\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstyle: StrokeStyle,\n\tstrokeComplete: boolean,\n\tpressureAware = false,\n): StrokeOptions {\n\tconst sw = style.strokeWidth;\n\tconst base: StrokeOptions = {\n\t\tlast: strokeComplete,\n\t\tsimulatePressure: true,\n\t};\n\tif (toolKind === \"draw\" || toolKind === \"pencil\") {\n\t\tif (pressureAware && toolKind === \"draw\") {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tsize: Math.max(2, sw * 1.05),\n\t\t\t\tthinning: 0.42,\n\t\t\t\tsmoothing: 0.78,\n\t\t\t\tstreamline: 0.62,\n\t\t\t\tsimulatePressure: true,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(2, sw * 1.18),\n\t\t\tthinning: 0.12,\n\t\t\tsmoothing: 0.85,\n\t\t\tstreamline: 0.78,\n\t\t\tsimulatePressure: true,\n\t\t};\n\t}\n\tif (toolKind === \"brush\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(4, sw * 1.22),\n\t\t\tthinning: 0.52,\n\t\t\tsmoothing: 0.64,\n\t\t\tstreamline: 0.68,\n\t\t};\n\t}\n\treturn {\n\t\t...base,\n\t\tsize: Math.max(6, sw * 1.08),\n\t\tthinning: 0.08,\n\t\tsmoothing: 0.88,\n\t\tstreamline: 0.84,\n\t\tsimulatePressure: true,\n\t};\n}\n\nexport function resolveStrokeStyle(item: VectorSceneItem): StrokeStyle {\n\treturn {\n\t\tstroke: item.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\tstrokeWidth: item.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\tstrokeOpacity: item.strokeOpacity,\n\t\tstrokeDash: item.strokeDash,\n\t};\n}\n\nfunction strokeOpacityAttr(style: StrokeStyle): string {\n\treturn style.strokeOpacity != null\n\t\t? ` stroke-opacity=\"${style.strokeOpacity}\"`\n\t\t: \"\";\n}\n\nfunction svgNumber(value: number): string {\n\tif (!Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Number.isInteger(rounded) ? String(rounded) : String(rounded);\n}\n\nconst ARCHITECTURAL_CLOUD_RADIUS = 38;\nconst ARCHITECTURAL_CLOUD_TARGET_SPACING = 50;\nconst ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO = 0.38;\nconst ARCHITECTURAL_CLOUD_ROUNDED_RADIUS = 72;\nconst ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS = 44;\nconst ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING = 98;\n\ntype CloudPoint = readonly [number, number];\n\ntype CloudPathSegment = {\n\tlength: number;\n\tpointAt: (t: number) => CloudPoint;\n};\n\nfunction architecturalCloudCenterCount(edgeLength: number, radius: number): number {\n\tconst targetSpacing = Math.min(\n\t\tARCHITECTURAL_CLOUD_TARGET_SPACING,\n\t\tMath.max(1, radius * 1.3),\n\t);\n\treturn Math.max(2, Math.round(edgeLength / targetSpacing) + 1);\n}\n\nfunction distributeRange(start: number, end: number, count: number): number[] {\n\tif (count <= 1) return [start];\n\tconst step = (end - start) / (count - 1);\n\treturn Array.from({ length: count }, (_, index) => start + step * index);\n}\n\nfunction lineCloudPathSegment(start: CloudPoint, end: CloudPoint): CloudPathSegment {\n\tconst dx = end[0] - start[0];\n\tconst dy = end[1] - start[1];\n\tconst length = Math.hypot(dx, dy);\n\treturn {\n\t\tlength,\n\t\tpointAt: (t) => [start[0] + dx * t, start[1] + dy * t],\n\t};\n}\n\nfunction ellipsePoint(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tangle: number,\n): CloudPoint {\n\treturn [centerX + Math.cos(angle) * radiusX, centerY + Math.sin(angle) * radiusY];\n}\n\nfunction approximateEllipseArcLength(\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): number {\n\tconst steps = Math.max(\n\t\t4,\n\t\tMath.ceil(Math.abs(endAngle - startAngle) / (Math.PI / 16)),\n\t);\n\tlet length = 0;\n\tlet previous = ellipsePoint(0, 0, radiusX, radiusY, startAngle);\n\tfor (let index = 1; index <= steps; index += 1) {\n\t\tconst angle = startAngle + ((endAngle - startAngle) * index) / steps;\n\t\tconst next = ellipsePoint(0, 0, radiusX, radiusY, angle);\n\t\tlength += Math.hypot(next[0] - previous[0], next[1] - previous[1]);\n\t\tprevious = next;\n\t}\n\treturn length;\n}\n\nfunction ellipseCloudPathSegment(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): CloudPathSegment {\n\treturn {\n\t\tlength: approximateEllipseArcLength(radiusX, radiusY, startAngle, endAngle),\n\t\tpointAt: (t) =>\n\t\t\tellipsePoint(\n\t\t\t\tcenterX,\n\t\t\t\tcenterY,\n\t\t\t\tradiusX,\n\t\t\t\tradiusY,\n\t\t\t\tstartAngle + (endAngle - startAngle) * t,\n\t\t\t),\n\t};\n}\n\nfunction cloudPathPerimeter(segments: CloudPathSegment[]): number {\n\tconst usableSegments = segments.filter((segment) => segment.length > 1e-9);\n\treturn usableSegments.reduce((sum, segment) => sum + segment.length, 0);\n}\n\nfunction pointOnCloudPath(\n\tsegments: CloudPathSegment[],\n\tdistance: number,\n): CloudPoint {\n\tconst perimeter = cloudPathPerimeter(segments);\n\tif (perimeter <= 0) return [0, 0];\n\n\tlet remaining = ((distance % perimeter) + perimeter) % perimeter;\n\tfor (const segment of segments) {\n\t\tif (segment.length <= 1e-9) continue;\n\t\tif (remaining <= segment.length) {\n\t\t\tconst t = remaining / segment.length;\n\t\t\treturn segment.pointAt(t);\n\t\t}\n\t\tremaining -= segment.length;\n\t}\n\n\tconst fallback = segments.find((segment) => segment.length > 1e-9);\n\treturn fallback?.pointAt(0) ?? [0, 0];\n}\n\nfunction buildRoundedCapsulePathSegments(\n\twidth: number,\n\theight: number,\n\tinset: number,\n): CloudPathSegment[] {\n\tconst left = inset;\n\tconst top = inset;\n\tconst right = width - inset;\n\tconst bottom = height - inset;\n\tconst capsuleWidth = Math.max(0, right - left);\n\tconst capsuleHeight = Math.max(0, bottom - top);\n\tconst radius = Math.min(capsuleWidth, capsuleHeight) / 2;\n\tif (radius <= 0) return [];\n\n\tconst leftCenterX = left + radius;\n\tconst rightCenterX = right - radius;\n\tconst topCenterY = top + radius;\n\tconst bottomCenterY = bottom - radius;\n\n\treturn [\n\t\tlineCloudPathSegment([leftCenterX, top], [rightCenterX, top]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t-Math.PI / 2,\n\t\t\t0,\n\t\t),\n\t\tlineCloudPathSegment([right, topCenterY], [right, bottomCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t0,\n\t\t\tMath.PI / 2,\n\t\t),\n\t\tlineCloudPathSegment([rightCenterX, bottom], [leftCenterX, bottom]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI / 2,\n\t\t\tMath.PI,\n\t\t),\n\t\tlineCloudPathSegment([left, bottomCenterY], [left, topCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI,\n\t\t\tMath.PI * 1.5,\n\t\t),\n\t];\n}\n\nfunction buildRoundedArcCloudPathD(\n\tcloudWidth: number,\n\tcloudHeight: number,\n\tcenter: CloudPoint,\n): string {\n\tconst minDimension = Math.min(cloudWidth, cloudHeight);\n\tconst radius = Math.min(\n\t\tARCHITECTURAL_CLOUD_ROUNDED_RADIUS,\n\t\tMath.max(ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS, minDimension * 0.16),\n\t);\n\tconst centerPath = buildRoundedCapsulePathSegments(\n\t\tcloudWidth,\n\t\tcloudHeight,\n\t\tradius,\n\t);\n\tconst centerPerimeter = cloudPathPerimeter(centerPath);\n\tif (centerPerimeter <= 0) return \"\";\n\n\tconst lobeCount = Math.max(\n\t\t8,\n\t\tMath.round(centerPerimeter / ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING),\n\t);\n\tconst centers = Array.from({ length: lobeCount }, (_, index) =>\n\t\tpointOnCloudPath(centerPath, (centerPerimeter * index) / lobeCount),\n\t);\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudCircleIntersection(previous, point, radius, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\nfunction cloudCircleIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradius: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst midX = (a[0] + b[0]) / 2;\n\tconst midY = (a[1] + b[1]) / 2;\n\tconst dx = b[0] - a[0];\n\tconst dy = b[1] - a[1];\n\tconst distance = Math.hypot(dx, dy);\n\tif (distance <= 1e-9) return [midX, midY];\n\n\tconst halfDistance = distance / 2;\n\tconst offset = Math.sqrt(\n\t\tMath.max(0, radius * radius - halfDistance * halfDistance),\n\t);\n\tconst normalX = -dy / distance;\n\tconst normalY = dx / distance;\n\tconst first: [number, number] = [midX + normalX * offset, midY + normalY * offset];\n\tconst second: [number, number] = [\n\t\tmidX - normalX * offset,\n\t\tmidY - normalY * offset,\n\t];\n\tconst firstDistance =\n\t\t(first[0] - center[0]) * (first[0] - center[0]) +\n\t\t(first[1] - center[1]) * (first[1] - center[1]);\n\tconst secondDistance =\n\t\t(second[0] - center[0]) * (second[0] - center[0]) +\n\t\t(second[1] - center[1]) * (second[1] - center[1]);\n\treturn firstDistance >= secondDistance ? first : second;\n}\n\nfunction cloudEllipseIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradiusX: number,\n\tradiusY: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst scaleY = radiusX / radiusY;\n\tconst [x, y] = cloudCircleIntersection(\n\t\t[a[0], a[1] * scaleY],\n\t\t[b[0], b[1] * scaleY],\n\t\tradiusX,\n\t\t[center[0], center[1] * scaleY],\n\t);\n\treturn [x, y / scaleY];\n}\n\nexport function buildRectSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<rect width=\"${width}\" height=\"${height}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" rx=\"4\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildEllipseSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst rx = width / 2;\n\tconst ry = height / 2;\n\treturn `<ellipse cx=\"${rx}\" cy=\"${ry}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\n/**\n * Returns the local SVG path for a scalable architectural revision cloud.\n *\n * Use this low-level helper when you need to preview or inspect the shape without\n * creating a full scene item. Prefer {@link createArchitecturalCloudItem} when\n * adding a cloud to a `VectorSceneItem[]`, because it keeps `toolKind`, bounds,\n * stroke fields, and `childrenSvg` synchronized for editing.\n *\n * @example\n * ```ts\n * const d = buildArchitecturalCloudPathD(180, 90);\n * ```\n */\nexport function buildArchitecturalCloudPathD(\n\twidth: number,\n\theight: number,\n\tstrokeWidth = DEFAULT_STROKE_STYLE.strokeWidth,\n): string {\n\tconst w = Math.max(0, width);\n\tconst h = Math.max(0, height);\n\tif (w <= 0 || h <= 0) return \"\";\n\n\tconst padding = Math.max(0, strokeWidth * 2);\n\tconst cloudWidth = Math.max(0, w - padding);\n\tconst cloudHeight = Math.max(0, h - padding);\n\tif (cloudWidth <= 0 || cloudHeight <= 0) return \"\";\n\n\tconst radiusX = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudWidth * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tconst radiusY = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudHeight * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tif (radiusX <= 0 || radiusY <= 0) return \"\";\n\n\tconst center: CloudPoint = [cloudWidth / 2, cloudHeight / 2];\n\tconst leftCenterX = radiusX;\n\tconst rightCenterX = cloudWidth - radiusX;\n\tconst topCenterY = radiusY;\n\tconst bottomCenterY = cloudHeight - radiusY;\n\tconst horizontalCenters = distributeRange(\n\t\tleftCenterX,\n\t\trightCenterX,\n\t\tarchitecturalCloudCenterCount(Math.max(0, rightCenterX - leftCenterX), radiusX),\n\t);\n\tconst verticalCenters = distributeRange(\n\t\ttopCenterY,\n\t\tbottomCenterY,\n\t\tarchitecturalCloudCenterCount(Math.max(0, bottomCenterY - topCenterY), radiusY),\n\t);\n\tif (horizontalCenters.length > 3 && verticalCenters.length > 3) {\n\t\tconst roundedArcCloudPath = buildRoundedArcCloudPathD(\n\t\t\tcloudWidth,\n\t\t\tcloudHeight,\n\t\t\tcenter,\n\t\t);\n\t\tif (roundedArcCloudPath !== \"\") return roundedArcCloudPath;\n\t}\n\tconst rectangularCenters: CloudPoint[] = [\n\t\t...horizontalCenters.map((x) => [x, topCenterY] as const),\n\t\t...verticalCenters.slice(1).map((y) => [rightCenterX, y] as const),\n\t\t...horizontalCenters\n\t\t\t.slice(0, -1)\n\t\t\t.reverse()\n\t\t\t.map((x) => [x, bottomCenterY] as const),\n\t\t...verticalCenters\n\t\t\t.slice(1, -1)\n\t\t\t.reverse()\n\t\t\t.map((y) => [leftCenterX, y] as const),\n\t];\n\tconst centers = rectangularCenters;\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudEllipseIntersection(previous, point, radiusX, radiusY, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\n/**\n * Builds an SVG fragment for an architectural revision cloud outline.\n *\n * This is the renderer-level primitive behind the built-in `\"architectural-cloud\"`\n * tool. Prefer {@link createArchitecturalCloudItem} for app code that inserts a\n * normal editable scene item.\n */\nexport function buildArchitecturalCloudSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst d = buildArchitecturalCloudPathD(width, height, style.strokeWidth);\n\treturn `<path d=\"${d}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildLineSvg(\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${line.x2}\" y2=\"${line.y2}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\nexport type StraightArrowGeometry = {\n\tshaftEndX: number;\n\tshaftEndY: number;\n\theadTipX: number;\n\theadTipY: number;\n\theadLeftX: number;\n\theadLeftY: number;\n\theadRightX: number;\n\theadRightY: number;\n};\n\nexport function computeStraightArrowGeometry(\n\tline: LineEndpointsLocal,\n\tstrokeWidth: number,\n): StraightArrowGeometry | null {\n\tconst dx = line.x2 - line.x1;\n\tconst dy = line.y2 - line.y1;\n\tconst len = Math.hypot(dx, dy);\n\tif (len < 1e-6) return null;\n\tconst ux = dx / len;\n\tconst uy = dy / len;\n\tconst headLength = Math.min(Math.max(strokeWidth * 4.2, 12), len * 0.38);\n\tconst headAngle = Math.PI / 6;\n\tconst cos = Math.cos(headAngle);\n\tconst sin = Math.sin(headAngle);\n\tconst rx1 = ux * cos - uy * sin;\n\tconst ry1 = ux * sin + uy * cos;\n\tconst rx2 = ux * cos + uy * sin;\n\tconst ry2 = -ux * sin + uy * cos;\n\treturn {\n\t\tshaftEndX: line.x2,\n\t\tshaftEndY: line.y2,\n\t\theadTipX: line.x2,\n\t\theadTipY: line.y2,\n\t\theadLeftX: line.x2 - rx1 * headLength,\n\t\theadLeftY: line.y2 - ry1 * headLength,\n\t\theadRightX: line.x2 - rx2 * headLength,\n\t\theadRightY: line.y2 - ry2 * headLength,\n\t};\n}\n\nexport function buildArrowSvg(\n\titemId: string,\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tvoid itemId;\n\tconst geometry = computeStraightArrowGeometry(line, style.strokeWidth);\n\tif (!geometry) {\n\t\treturn buildLineSvg(line, style);\n\t}\n\tconst op = strokeOpacityAttr(style);\n\treturn `\n\t\t<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${geometry.shaftEndX}\" y2=\"${geometry.shaftEndY}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\"${op} />\n\t\t<path d=\"M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op} />\n\t`;\n}\n\nexport function buildDrawDotSvg(\n\tr: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst op =\n\t\tstyle.strokeOpacity != null ? ` fill-opacity=\"${style.strokeOpacity}\"` : \"\";\n\treturn `<circle cx=\"${r}\" cy=\"${r}\" r=\"${r}\" fill=\"${style.stroke}\" shape-rendering=\"geometricPrecision\"${op} />`;\n}\n\n/** Structured result for React overlays; scene uses {@link buildFreehandPathSvg} string. */\nexport type FreehandSvgPayload =\n\t| {\n\t\t\tkind: \"circle\";\n\t\t\tcx: number;\n\t\t\tcy: number;\n\t\t\tr: number;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"fillPath\";\n\t\t\td: string;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"strokePath\";\n\t\t\td: string;\n\t\t\tstroke: string;\n\t\t\tstrokeWidth: number;\n\t\t\tstrokeOpacity?: number;\n\t\t\tstrokeDasharray?: string;\n\t };\n\nfunction dashArrayForDrawStroke(strokeWidth: number): string {\n\tconst dash = Math.max(strokeWidth * 1.8, 4);\n\tconst gap = Math.max(strokeWidth * 1.4, 3);\n\treturn `${dash} ${gap}`;\n}\n\nfunction buildSmoothedCenterlinePath(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst first = points[0];\n\tif (!first) return null;\n\tlet d = `M ${first.x} ${first.y}`;\n\tfor (let i = 1; i < points.length - 1; i++) {\n\t\tconst a = points[i];\n\t\tconst b = points[i + 1];\n\t\tif (!a || !b) continue;\n\t\tconst midX = (a.x + b.x) / 2;\n\t\tconst midY = (a.y + b.y) / 2;\n\t\td += ` Q ${a.x} ${a.y} ${midX} ${midY}`;\n\t}\n\tconst last = points[points.length - 1];\n\tif (last) {\n\t\td += ` L ${last.x} ${last.y}`;\n\t}\n\treturn d;\n}\n\n/**\n * Computes freehand geometry (perfect-freehand + fallback). Used by {@link buildFreehandPathSvg}\n * and React overlays without `dangerouslySetInnerHTML`.\n */\nexport function computeFreehandSvgPayload(\n\tpathPointsLocal: readonly VectorPathPoint[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): FreehandSvgPayload | null {\n\tif (pathPointsLocal.length === 0) return null;\n\tif (pathPointsLocal.length === 1) {\n\t\tconst p = pathPointsLocal[0];\n\t\tif (!p) return null;\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr: Math.max(0.5, style.strokeWidth / 2),\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tif (\n\t\tstyle.strokeDash === \"dashed\" &&\n\t\t(toolKind === \"draw\" || toolKind === \"pencil\")\n\t) {\n\t\tconst d = buildSmoothedCenterlinePath(pathPointsLocal);\n\t\tif (!d) return null;\n\t\treturn {\n\t\t\tkind: \"strokePath\",\n\t\t\td,\n\t\t\tstroke: style.stroke,\n\t\t\tstrokeWidth: style.strokeWidth,\n\t\t\tstrokeOpacity: style.strokeOpacity,\n\t\t\tstrokeDasharray: dashArrayForDrawStroke(style.strokeWidth),\n\t\t};\n\t}\n\tconst hasPressure = pathPointsLocal.some(\n\t\t(p) => p.pressure != null && Number.isFinite(p.pressure),\n\t);\n\tconst input = hasPressure\n\t\t? pathPointsLocal.map(\n\t\t\t\t(p) =>\n\t\t\t\t\t[p.x, p.y, Math.min(1, Math.max(0, p.pressure ?? 0.5))] as [\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t],\n\t\t\t)\n\t\t: pathPointsLocal.map((p) => [p.x, p.y] as [number, number]);\n\tconst stroke = getStroke(\n\t\tinput,\n\t\tperfectFreehandOptions(toolKind, style, strokeComplete, hasPressure),\n\t);\n\tif (stroke.length < 3) return null;\n\tconst first = stroke[0];\n\tif (!first) return null;\n\tlet d = `M ${first[0]} ${first[1]} Q`;\n\tfor (let i = 0; i < stroke.length; i++) {\n\t\tconst a = stroke[i];\n\t\tconst b = stroke[(i + 1) % stroke.length];\n\t\tif (!a || !b) continue;\n\t\td += ` ${a[0]} ${a[1]} ${(a[0] + b[0]) / 2} ${(a[1] + b[1]) / 2}`;\n\t}\n\td += \" Z\";\n\treturn {\n\t\tkind: \"fillPath\",\n\t\td,\n\t\tfill: style.stroke,\n\t\tfillOpacity: style.strokeOpacity,\n\t};\n}\n\nfunction freehandPayloadToSvgString(payload: FreehandSvgPayload): string {\n\tif (payload.kind === \"circle\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<circle cx=\"${payload.cx}\" cy=\"${payload.cy}\" r=\"${payload.r}\" fill=\"${payload.fill}\" shape-rendering=\"geometricPrecision\"${op} />`;\n\t}\n\tif (payload.kind === \"fillPath\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<path d=\"${payload.d}\" fill=\"${payload.fill}\" fill-rule=\"nonzero\" stroke=\"none\"${op} shape-rendering=\"geometricPrecision\" />`;\n\t}\n\tconst op = strokeOpacityAttr({\n\t\tstroke: payload.stroke,\n\t\tstrokeWidth: payload.strokeWidth,\n\t\tstrokeOpacity: payload.strokeOpacity,\n\t});\n\tconst dash = payload.strokeDasharray\n\t\t? ` stroke-dasharray=\"${payload.strokeDasharray}\"`\n\t\t: \"\";\n\treturn `<path d=\"${payload.d}\" fill=\"none\" stroke=\"${payload.stroke}\" stroke-width=\"${payload.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op}${dash} />`;\n}\n\n/**\n * Freehand stroke in local coordinates using [perfect-freehand](https://github.com/steveruizok/perfect-freehand)\n * (filled outline, tapered caps — similar spirit to tldraw / Excalidraw ink).\n */\nexport function buildFreehandPathSvg(\n\tpathPointsLocal: readonly { x: number; y: number }[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): string {\n\tconst payload = computeFreehandSvgPayload(\n\t\tpathPointsLocal,\n\t\tstyle,\n\t\ttoolKind,\n\t\tstrokeComplete,\n\t);\n\tif (!payload) return \"\";\n\treturn freehandPayloadToSvgString(payload);\n}\n\n/**\n * Creates a new unique id for a shape (for `VectorSceneItem.id` when adding from code or API).\n */\nexport function createShapeId(): string {\n\tconst uid =\n\t\ttypeof crypto !== \"undefined\" && crypto.randomUUID\n\t\t\t? crypto.randomUUID()\n\t\t\t: String(Date.now());\n\treturn `user-shape-${uid}`;\n}\n\n/**\n * Converts line segment endpoints from **world** coordinates to **local** coordinates\n * (origin = top-left of `bounds`). Use with {@link createLineItem}.\n */\nexport function lineEndpointsToLocal(\n\tbounds: Rect,\n\tworldEndA: { x: number; y: number },\n\tworldEndB: { x: number; y: number },\n): LineEndpointsLocal {\n\tconst b = normalizeRect(bounds);\n\treturn {\n\t\tx1: worldEndA.x - b.x,\n\t\ty1: worldEndA.y - b.y,\n\t\tx2: worldEndB.x - b.x,\n\t\ty2: worldEndB.y - b.y,\n\t};\n}\n\n/**\n * Rebuilds the SVG fragment (`childrenSvg`) from geometry + stroke fields (after edits or resize).\n */\nexport function rebuildItemSvg(item: VectorSceneItem): VectorSceneItem {\n\tconst style = resolveStrokeStyle(item);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRectSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"ellipse\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildEllipseSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"architectural-cloud\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildArchitecturalCloudSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif ((k === \"line\" || k === \"arrow\") && item.line) {\n\t\tconst line = item.line;\n\t\tconst childrenSvg =\n\t\t\tk === \"arrow\"\n\t\t\t\t? buildArrowSvg(item.id, line, style)\n\t\t\t\t: buildLineSvg(line, style);\n\t\treturn { ...item, childrenSvg };\n\t}\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\t\tif (item.textFixedBounds) {\n\t\t\tconst b = normalizeRect(item.bounds);\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: b.x,\n\t\t\t\ty: b.y,\n\t\t\t\tbounds: b,\n\t\t\t\tchildrenSvg: buildTextFixedBoundsSvg(\n\t\t\t\t\titem.text,\n\t\t\t\t\tb.width,\n\t\t\t\t\tb.height,\n\t\t\t\t\tstyle.stroke,\n\t\t\t\t\tfs,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tconst m = measureTextBoundsLocal(item.text, fs);\n\t\tconst b = normalizeRect({\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t});\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildTextSvg(item.text, b.width, b.height, style.stroke, fs),\n\t\t};\n\t}\n\tif (\n\t\t(k === \"draw\" || k === \"pencil\" || k === \"brush\" || k === \"marker\") &&\n\t\titem.pathPointsLocal &&\n\t\titem.pathPointsLocal.length > 0\n\t) {\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildFreehandPathSvg(item.pathPointsLocal, style, k),\n\t\t};\n\t}\n\tif (k === \"draw\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\tconst r = Math.min(b.width, b.height) / 2;\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildDrawDotSvg(r, style),\n\t\t};\n\t}\n\tif (k === \"image\" && item.imageRasterHref && item.imageIntrinsicSize) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\titem.imageRasterHref,\n\t\t\t\titem.imageIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildCustomShapeChildrenSvg(\n\t\t\t\titem.customInnerSvg,\n\t\t\t\titem.customIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\n\treturn item;\n}\n\n/** Updates stroke color / width / opacity and refreshes the item’s SVG. */\nexport function applyStrokeToItem(\n\titem: VectorSceneItem,\n\tpatch: Partial<\n\t\tPick<\n\t\t\tVectorSceneItem,\n\t\t\t\"stroke\" | \"strokeWidth\" | \"strokeOpacity\" | \"strokeDash\" | \"textFontSize\"\n\t\t>\n\t>,\n): VectorSceneItem {\n\treturn rebuildItemSvg({ ...item, ...patch });\n}\n\n/** Creates a rectangle shape ready to append to your scene `items` array. */\nexport function createRectangleItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"rect\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an ellipse shape. */\nexport function createEllipseItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"ellipse\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/**\n * Creates an architectural revision cloud shape.\n *\n * Use this high-level builder when adding the built-in cloud shape from code or\n * from custom integrations. It creates an editable `VectorSceneItem` with\n * `toolKind: \"architectural-cloud\"`, so resize, stroke styling, selection, and\n * serialization continue to work like the built-in rectangle and ellipse tools.\n *\n * @example\n * ```ts\n * const cloud = createArchitecturalCloudItem(createShapeId(), {\n * x: 40,\n * y: 30,\n * width: 180,\n * height: 90,\n * });\n * ```\n */\nexport function createArchitecturalCloudItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"architectural-cloud\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates a straight line or arrow; `line` is usually from {@link lineEndpointsToLocal}. */\nexport function createLineItem(\n\tid: string,\n\tbounds: Rect,\n\tline: LineEndpointsLocal,\n\ttoolKind: \"line\" | \"arrow\",\n\tstyle?: Partial<StrokeStyle>,\n\tarrowBind?: ArrowBindings,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind,\n\t\tline: { ...line },\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(arrowBind ? { arrowBind } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** “Draw dot” tool: a small filled circle at (`worldX`, `worldY`). */\nexport function createDrawDotItem(\n\tid: string,\n\tworldX: number,\n\tworldY: number,\n\tradius: number,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: worldX - radius,\n\t\ty: worldY - radius,\n\t\tbounds: {\n\t\t\tx: worldX - radius,\n\t\t\ty: worldY - radius,\n\t\t\twidth: radius * 2,\n\t\t\theight: radius * 2,\n\t\t},\n\t\ttoolKind: \"draw\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an editable text box (`stroke` is used as text fill). */\nexport function createTextItem(\n\tid: string,\n\tbounds: Rect,\n\ttext = \"\",\n\tstyle?: Partial<StrokeStyle>,\n\ttextFontSize?: number,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"text\",\n\t\ttext,\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(textFontSize != null ? { textFontSize } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Freehand stroke from world-space points (main pen or marker highlight). */\nexport function createFreehandStrokeItem(\n\tid: string,\n\tpointsWorld: readonly VectorPathPoint[],\n\ttoolKind: \"draw\" | \"marker\",\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem | null {\n\tif (pointsWorld.length === 0) return null;\n\n\tconst merged: StrokeStyle = {\n\t\t...DEFAULT_STROKE_STYLE,\n\t\t...TOOL_FREEHAND_DEFAULTS[toolKind],\n\t\t...style,\n\t};\n\n\tconst sw = merged.strokeWidth;\n\t/** Filled outline extends ~size/2 past the polyline; keep generous padding to avoid clipping. */\n\tconst pad = Math.max(sw * 0.75 + 4, sw / 2 + 6);\n\tconst xs = pointsWorld.map((p) => p.x);\n\tconst ys = pointsWorld.map((p) => p.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\n\tconst x = minX - pad;\n\tconst y = minY - pad;\n\tconst w = Math.max(maxX - minX + 2 * pad, sw);\n\tconst h = Math.max(maxY - minY + 2 * pad, sw);\n\n\tconst pathPointsLocal = pointsWorld.map((p) => ({\n\t\tx: p.x - x,\n\t\ty: p.y - y,\n\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t}));\n\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx,\n\t\ty,\n\t\tbounds: { x, y, width: w, height: h },\n\t\ttoolKind,\n\t\tstroke: merged.stroke,\n\t\tstrokeWidth: merged.strokeWidth,\n\t\t...(merged.strokeOpacity != null ? { strokeOpacity: merged.strokeOpacity } : {}),\n\t\t...(merged.strokeDash != null ? { strokeDash: merged.strokeDash } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","import 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","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","/**\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 * Converts SVG transform strings (from formatCameraTransform /\n * formatItemPlacementTransform) to @shopify/react-native-skia\n * Group transform arrays.\n *\n * Skia applies transforms left-to-right. SVG/CSS string transforms are\n * applied right-to-left, so we reverse the order and convert to Skia format.\n */\nexport type SkiaTransform =\n\t| { translateX: number }\n\t| { translateY: number }\n\t| { scale: number }\n\t| { scaleX: number }\n\t| { scaleY: number }\n\t| { rotate: number; origin?: { x: number; y: number } };\n\nfunction parseNum(s: string): number {\n\treturn Number(s);\n}\n\n/**\n * Parses an SVG/CSS transform attribute string into a Skia transform array.\n *\n * Supported functions: matrix(a,b,c,d,e,f), translate(x [,y]),\n * scale(x [,y]), rotate(a [,cx,cy]).\n */\nexport function parseSvgTransform(s: string): SkiaTransform[] {\n\tif (!s || s.trim().length === 0) return [];\n\tconst clean = s.trim();\n\tconst result: SkiaTransform[] = [];\n\n\t// Split on \") \" or \")\" followed by space/letter to find transform function boundaries\n\tconst parts = clean.match(/[a-z]+\\([^)]*\\)/gi);\n\tif (!parts) return [];\n\n\t// SVG applies right-to-left, so we reverse for Skia (left-to-right)\n\tconst reversed = [...parts].reverse();\n\n\tfor (const part of reversed) {\n\t\tconst m = part.match(/^([a-z]+)\\(([^)]*)\\)$/i);\n\t\tif (!m) continue;\n\t\tconst fn = (m[1] ?? \"\").toLowerCase();\n\t\tconst args = (m[2] ?? \"\")\n\t\t\t.split(/[\\s,]+/)\n\t\t\t.filter(Boolean)\n\t\t\t.map(parseNum);\n\n\t\tswitch (fn) {\n\t\t\tcase \"matrix\": {\n\t\t\t\t// matrix(a, b, c, d, e, f)\n\t\t\t\t// SVG: | a c e | Actually for SVG canonical: matrix(a,b,c,d,e,f)\n\t\t\t\t// | b d f | x' = a*x + c*y + e\n\t\t\t\t// | 0 0 1 | y' = b*x + d*y + f\n\t\t\t\tconst [a, b, c, d, e, f] = args;\n\n\t\t\t\t// Only handle uniform scale cases cleanly\n\t\t\t\tif (\n\t\t\t\t\ta !== undefined &&\n\t\t\t\t\td !== undefined &&\n\t\t\t\t\tMath.abs(b ?? 0) < 1e-12 &&\n\t\t\t\t\tMath.abs(c ?? 0) < 1e-12 &&\n\t\t\t\t\tMath.abs(a - (d ?? 0)) < 1e-12\n\t\t\t\t) {\n\t\t\t\t\t// Uniform scale + translate: matrix(s,0,0,s,tx,ty)\n\t\t\t\t\tresult.push({ scale: a });\n\t\t\t\t} else if (\n\t\t\t\t\ta !== undefined &&\n\t\t\t\t\td !== undefined &&\n\t\t\t\t\tMath.abs(b ?? 0) < 1e-12 &&\n\t\t\t\t\tMath.abs(c ?? 0) < 1e-12\n\t\t\t\t) {\n\t\t\t\t\t// Non-uniform scale + translate\n\t\t\t\t\tresult.push({ scaleX: a, scaleY: d } as SkiaTransform);\n\t\t\t\t}\n\t\t\t\tif (e !== undefined && !Number.isNaN(e)) result.push({ translateX: e });\n\t\t\t\tif (f !== undefined && !Number.isNaN(f)) result.push({ translateY: f });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"translate\": {\n\t\t\t\tconst [tx, ty] = args;\n\t\t\t\tif (tx !== undefined && !Number.isNaN(tx)) result.push({ translateX: tx });\n\t\t\t\tif (ty !== undefined && !Number.isNaN(ty)) result.push({ translateY: ty });\n\t\t\t\telse if (tx !== undefined && ty === undefined) {\n\t\t\t\t\t// translate(x) with no y — y defaults to 0\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"scale\": {\n\t\t\t\tconst [sx, sy] = args;\n\t\t\t\tif (sx === undefined || Number.isNaN(sx)) break;\n\t\t\t\tif (sy === undefined || Number.isNaN(sy)) {\n\t\t\t\t\tresult.push({ scale: sx });\n\t\t\t\t} else {\n\t\t\t\t\tif (Math.abs(sx - sy) < 1e-12) {\n\t\t\t\t\t\tresult.push({ scale: sx });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.push({ scaleX: sx, scaleY: sy } as SkiaTransform);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"rotate\": {\n\t\t\t\tconst [deg, cx, cy] = args;\n\t\t\t\tif (deg === undefined || Number.isNaN(deg)) break;\n\t\t\t\tconst rad = (deg * Math.PI) / 180;\n\t\t\t\tif (\n\t\t\t\t\tcx !== undefined &&\n\t\t\t\t\tcy !== undefined &&\n\t\t\t\t\t!Number.isNaN(cx) &&\n\t\t\t\t\t!Number.isNaN(cy)\n\t\t\t\t) {\n\t\t\t\t\tresult.push({ rotate: rad, origin: { x: cx, y: cy } });\n\t\t\t\t} else {\n\t\t\t\t\tresult.push({ rotate: rad });\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Formats the camera world-to-screen transform as a Skia transform array.\n * Equivalent to formatCameraTransform() SVG output.\n */\nexport function skiaCameraTransform(\n\tzoom: number,\n\tpanX: number,\n\tpanY: number,\n): SkiaTransform[] {\n\treturn [{ translateX: panX }, { translateY: panY }, { scale: zoom }];\n}\n\n/**\n * Formats the item placement transform as a Skia transform array.\n * Equivalent to formatItemPlacementTransform() SVG output.\n */\nexport function skiaItemPlacementTransform(\n\tx: number,\n\ty: number,\n\tcx: number,\n\tcy: number,\n\trotationRad: number,\n): SkiaTransform[] {\n\tconst result: SkiaTransform[] = [];\n\tif (Math.abs(rotationRad) > 1e-12) {\n\t\tresult.push({\n\t\t\trotate: rotationRad,\n\t\t\torigin: { x: cx, y: cy },\n\t\t});\n\t}\n\tresult.push({ translateX: x }, { translateY: y });\n\treturn result;\n}\n","import {\n\tGroup,\n\tmatchFont,\n\tOval,\n\tPath,\n\tRect,\n\tRoundedRect,\n\tCircle as SkiaCircle,\n\tImage as SkiaImage,\n\tLine as SkiaLine,\n\tText as SkiaText,\n\tuseImage,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport { parseSvgTransform } from \"./skia-transform\";\nimport type { SvgNode } from \"./svg-parser\";\n\nfunction rgbaFromHexAndOpacity(\n\thex: string | undefined,\n\topacity: number | undefined,\n): string | undefined {\n\tif (!hex) return hex;\n\tif (opacity == null || opacity >= 1) return hex;\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\tif (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return hex;\n\treturn `rgba(${r},${g},${b},${opacity})`;\n}\n\nfunction toNum(v: string | number): number {\n\treturn typeof v === \"number\" ? v : Number(v) || 0;\n}\n\nexport function SvgNodeRenderer({ nodes }: { readonly nodes: readonly SvgNode[] }) {\n\treturn (\n\t\t<>\n\t\t\t{nodes.map((node, i) => (\n\t\t\t\t<SvgNodeItem key={i} node={node} />\n\t\t\t))}\n\t\t</>\n\t);\n}\n\nfunction SvgNodeItem({ node }: { readonly node: SvgNode }) {\n\tconst isFill = (node as { fill?: string }).fill !== \"none\";\n\tconst hasStroke =\n\t\t(node as { stroke?: string }).stroke != null &&\n\t\t(node as { stroke?: string }).stroke !== \"none\";\n\n\tswitch (node.kind) {\n\t\tcase \"rect\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\tconst fill = isFill\n\t\t\t\t? (rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill)\n\t\t\t\t: undefined;\n\t\t\tconst r = node.rx != null ? toNum(node.rx) : 0;\n\t\t\tconst w = toNum(node.width);\n\t\t\tconst h = toNum(node.height);\n\t\t\tif (r > 0) {\n\t\t\t\treturn (\n\t\t\t\t\t<RoundedRect\n\t\t\t\t\t\tx={0}\n\t\t\t\t\t\ty={0}\n\t\t\t\t\t\twidth={w}\n\t\t\t\t\t\theight={h}\n\t\t\t\t\t\tr={r}\n\t\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<Rect\n\t\t\t\t\tx={0}\n\t\t\t\t\ty={0}\n\t\t\t\t\twidth={w}\n\t\t\t\t\theight={h}\n\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"ellipse\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\tconst fill = isFill\n\t\t\t\t? (rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill)\n\t\t\t\t: undefined;\n\t\t\tconst cx = toNum(node.cx);\n\t\t\tconst cy = toNum(node.cy);\n\t\t\tconst rx = toNum(node.rx);\n\t\t\tconst ry = toNum(node.ry);\n\t\t\tif (Math.abs(rx - ry) < 1e-6) {\n\t\t\t\treturn (\n\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\tcx={cx}\n\t\t\t\t\t\tcy={cy}\n\t\t\t\t\t\tr={rx}\n\t\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<Oval\n\t\t\t\t\tx={cx - rx}\n\t\t\t\t\ty={cy - ry}\n\t\t\t\t\twidth={rx * 2}\n\t\t\t\t\theight={ry * 2}\n\t\t\t\t\tcolor={fill ?? stroke}\n\t\t\t\t\tstyle={fill ? \"fill\" : hasStroke ? \"stroke\" : \"fill\"}\n\t\t\t\t\tstrokeWidth={hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"circle\": {\n\t\t\tconst fill = rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill;\n\t\t\tconst isCircleFill = fill && fill !== \"none\";\n\t\t\tconst strokeColor = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\treturn (\n\t\t\t\t<SkiaCircle\n\t\t\t\t\tcx={toNum(node.cx)}\n\t\t\t\t\tcy={toNum(node.cy)}\n\t\t\t\t\tr={toNum(node.r)}\n\t\t\t\t\tcolor={isCircleFill ? fill : (strokeColor ?? \"black\")}\n\t\t\t\t\tstyle={isCircleFill ? \"fill\" : \"stroke\"}\n\t\t\t\t\tstrokeWidth={\n\t\t\t\t\t\t!isCircleFill && hasStroke ? toNum(node.strokeWidth ?? \"1\") : undefined\n\t\t\t\t\t}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"line\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\treturn (\n\t\t\t\t<SkiaLine\n\t\t\t\t\tp1={vec(toNum(node.x1), toNum(node.y1))}\n\t\t\t\t\tp2={vec(toNum(node.x2), toNum(node.y2))}\n\t\t\t\t\tcolor={stroke ?? \"black\"}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={toNum(node.strokeWidth ?? \"1\")}\n\t\t\t\t\tstrokeCap={node.strokeLinecap === \"round\" ? \"round\" : \"butt\"}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"path\": {\n\t\t\tconst stroke = rgbaFromHexAndOpacity(node.stroke, node.strokeOpacity);\n\t\t\tconst fill = isFill\n\t\t\t\t? (rgbaFromHexAndOpacity(node.fill, node.fillOpacity) ?? node.fill)\n\t\t\t\t: undefined;\n\t\t\tconst style = fill && fill !== \"none\" ? \"fill\" : \"stroke\";\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={node.d}\n\t\t\t\t\tcolor={style === \"fill\" ? (fill ?? stroke) : (stroke ?? \"black\")}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\tstrokeWidth={\n\t\t\t\t\t\tstyle === \"stroke\" ? toNum(node.strokeWidth ?? \"1\") : undefined\n\t\t\t\t\t}\n\t\t\t\t\tstrokeCap={node.strokeLinecap === \"round\" ? \"round\" : \"butt\"}\n\t\t\t\t\tstrokeJoin={node.strokeLinejoin === \"round\" ? \"round\" : \"miter\"}\n\t\t\t\t\tfillType={node.fillRule === \"evenodd\" ? \"evenOdd\" : \"winding\"}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"text\": {\n\t\t\tconst fill = node.fill ?? \"black\";\n\t\t\tconst fs = node.fontSize != null ? toNum(node.fontSize) : 16;\n\t\t\tconst font = matchFont({ fontSize: fs });\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t{node.children.map((tspan, i) => (\n\t\t\t\t\t\t<SkiaText\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tx={\n\t\t\t\t\t\t\t\ttspan.x != null ? toNum(tspan.x) : node.x != null ? toNum(node.x) : 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ty={\n\t\t\t\t\t\t\t\ttspan.dy != null\n\t\t\t\t\t\t\t\t\t? (node.y != null ? toNum(node.y) : fs) + toNum(tspan.dy)\n\t\t\t\t\t\t\t\t\t: (node.y != null ? toNum(node.y) : fs) + i * fs * 1.2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext={tspan.text}\n\t\t\t\t\t\t\tcolor={fill}\n\t\t\t\t\t\t\tfont={font}\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\tcase \"polygon\": {\n\t\t\tconst fill = node.fill ?? \"black\";\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={polygonPointsToPath(node.points)}\n\t\t\t\t\tcolor={fill}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tcase \"image\": {\n\t\t\treturn <SvgImageNodeItem node={node} />;\n\t\t}\n\t\tcase \"g\": {\n\t\t\tconst transform = node.transform\n\t\t\t\t? parseSvgTransform(node.transform)\n\t\t\t\t: undefined;\n\t\t\treturn (\n\t\t\t\t<Group transform={transform}>\n\t\t\t\t\t{node.children.map((child, i) => (\n\t\t\t\t\t\t<SvgNodeItem key={i} node={child} />\n\t\t\t\t\t))}\n\t\t\t\t</Group>\n\t\t\t);\n\t\t}\n\t\tcase \"defs\": {\n\t\t\treturn null;\n\t\t}\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction SvgImageNodeItem({\n\tnode,\n}: {\n\treadonly node: Extract<SvgNode, { readonly kind: \"image\" }>;\n}) {\n\tconst image = useImage(node.href);\n\tif (!image) return null;\n\treturn (\n\t\t<SkiaImage\n\t\t\timage={image}\n\t\t\tx={toNum(node.x)}\n\t\t\ty={toNum(node.y)}\n\t\t\twidth={toNum(node.width)}\n\t\t\theight={toNum(node.height)}\n\t\t\tfit=\"contain\"\n\t\t/>\n\t);\n}\n\nfunction polygonPointsToPath(points: string): string {\n\tconst nums = points\n\t\t.split(/[\\s,]+/)\n\t\t.filter(Boolean)\n\t\t.map(Number);\n\tif (nums.length < 4) return \"\";\n\tlet d = `M${nums[0]} ${nums[1]}`;\n\tfor (let i = 2; i < nums.length; i += 2) {\n\t\td += ` L${nums[i]} ${nums[i + 1]}`;\n\t}\n\td += \" Z\";\n\treturn d;\n}\n","export type NumberProp = string | number;\n\nexport type SvgRectNode = {\n\treadonly kind: \"rect\";\n\treadonly width: NumberProp;\n\treadonly height: NumberProp;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly rx?: NumberProp;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgEllipseNode = {\n\treadonly kind: \"ellipse\";\n\treadonly cx: NumberProp;\n\treadonly cy: NumberProp;\n\treadonly rx: NumberProp;\n\treadonly ry: NumberProp;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgCircleNode = {\n\treadonly kind: \"circle\";\n\treadonly cx: NumberProp;\n\treadonly cy: NumberProp;\n\treadonly r: NumberProp;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgLineNode = {\n\treadonly kind: \"line\";\n\treadonly x1: NumberProp;\n\treadonly y1: NumberProp;\n\treadonly x2: NumberProp;\n\treadonly y2: NumberProp;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly strokeLinecap?: string;\n\treadonly strokeLinejoin?: string;\n\treadonly markerEnd?: string;\n\treadonly shapeRendering?: string;\n};\n\nexport type SvgPathNode = {\n\treadonly kind: \"path\";\n\treadonly d: string;\n\treadonly fill?: string;\n\treadonly fillOpacity?: number;\n\treadonly fillRule?: string;\n\treadonly stroke?: string;\n\treadonly strokeWidth?: NumberProp;\n\treadonly strokeOpacity?: number;\n\treadonly strokeLinecap?: string;\n\treadonly strokeLinejoin?: string;\n\treadonly shapeRendering?: string;\n\treadonly vectorEffect?: string;\n};\n\nexport type SvgTSpanNode = {\n\treadonly kind: \"tspan\";\n\treadonly x?: NumberProp;\n\treadonly dy?: NumberProp;\n\treadonly text: string;\n};\n\nexport type SvgTextNode = {\n\treadonly kind: \"text\";\n\treadonly x?: NumberProp;\n\treadonly y?: NumberProp;\n\treadonly fill?: string;\n\treadonly textAnchor?: string;\n\treadonly fontSize?: NumberProp;\n\treadonly fontFamily?: string;\n\treadonly children: readonly SvgTSpanNode[];\n};\n\nexport type SvgPolygonNode = {\n\treadonly kind: \"polygon\";\n\treadonly points: string;\n\treadonly fill?: string;\n};\n\nexport type SvgImageNode = {\n\treadonly kind: \"image\";\n\treadonly href: string;\n\treadonly x: NumberProp;\n\treadonly y: NumberProp;\n\treadonly width: NumberProp;\n\treadonly height: NumberProp;\n};\n\nexport type SvgGroupNode = {\n\treadonly kind: \"g\";\n\treadonly transform?: string;\n\treadonly children: readonly SvgNode[];\n};\n\nexport type SvgDefsNode = {\n\treadonly kind: \"defs\";\n\treadonly children: readonly SvgNode[];\n};\n\nexport type SvgMarkerNode = {\n\treadonly kind: \"marker\";\n\treadonly id: string;\n\treadonly markerWidth: NumberProp;\n\treadonly markerHeight: NumberProp;\n\treadonly refX: NumberProp;\n\treadonly refY: NumberProp;\n\treadonly orient: string;\n\treadonly children: readonly SvgPolygonNode[];\n};\n\nexport type SvgNode =\n\t| SvgRectNode\n\t| SvgEllipseNode\n\t| SvgCircleNode\n\t| SvgLineNode\n\t| SvgPathNode\n\t| SvgTextNode\n\t| SvgPolygonNode\n\t| SvgImageNode\n\t| SvgGroupNode\n\t| SvgDefsNode\n\t| SvgMarkerNode;\n\nconst SELF_CLOSING = new Set([\n\t\"rect\",\n\t\"ellipse\",\n\t\"circle\",\n\t\"line\",\n\t\"path\",\n\t\"polygon\",\n\t\"image\",\n]);\n\nconst ATTR_RE = /([a-zA-Z][a-zA-Z0-9_-]*)\\s*=\\s*\"([^\"]*)\"/g;\n\nfunction parseAttrs(raw: string): Record<string, string> {\n\tconst attrs: Record<string, string> = {};\n\tlet m = ATTR_RE.exec(raw);\n\twhile (m !== null) {\n\t\tconst key = m[1];\n\t\tconst val = m[2];\n\t\tif (key !== undefined && val !== undefined) {\n\t\t\tattrs[key] = val;\n\t\t}\n\t\tm = ATTR_RE.exec(raw);\n\t}\n\treturn attrs;\n}\n\nfunction parseNum(val: string | undefined): NumberProp | undefined {\n\tif (val === undefined) return undefined;\n\tconst n = Number(val);\n\tif (Number.isNaN(n)) return val;\n\treturn n;\n}\n\nfunction parseNumR(val: string | undefined, fallback: NumberProp): NumberProp {\n\treturn parseNum(val) ?? fallback;\n}\n\nfunction parseNumOpt(val: string | undefined): number | undefined {\n\tif (val === undefined) return undefined;\n\tconst n = Number(val);\n\treturn Number.isNaN(n) ? undefined : n;\n}\n\nfunction parseRectNode(attrs: Record<string, string>): SvgRectNode {\n\treturn {\n\t\tkind: \"rect\",\n\t\twidth: parseNumR(attrs.width, \"0\"),\n\t\theight: parseNumR(attrs.height, \"0\"),\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\trx: parseNum(attrs.rx),\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parseEllipseNode(attrs: Record<string, string>): SvgEllipseNode {\n\treturn {\n\t\tkind: \"ellipse\",\n\t\tcx: parseNumR(attrs.cx, \"0\"),\n\t\tcy: parseNumR(attrs.cy, \"0\"),\n\t\trx: parseNumR(attrs.rx, \"0\"),\n\t\try: parseNumR(attrs.ry, \"0\"),\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parseCircleNode(attrs: Record<string, string>): SvgCircleNode {\n\treturn {\n\t\tkind: \"circle\",\n\t\tcx: parseNumR(attrs.cx, \"0\"),\n\t\tcy: parseNumR(attrs.cy, \"0\"),\n\t\tr: parseNumR(attrs.r, \"0\"),\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parseLineNode(attrs: Record<string, string>): SvgLineNode {\n\treturn {\n\t\tkind: \"line\",\n\t\tx1: parseNumR(attrs.x1, \"0\"),\n\t\ty1: parseNumR(attrs.y1, \"0\"),\n\t\tx2: parseNumR(attrs.x2, \"0\"),\n\t\ty2: parseNumR(attrs.y2, \"0\"),\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tstrokeLinecap: attrs[\"stroke-linecap\"],\n\t\tstrokeLinejoin: attrs[\"stroke-linejoin\"],\n\t\tmarkerEnd: attrs[\"marker-end\"],\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t};\n}\n\nfunction parsePathNode(attrs: Record<string, string>): SvgPathNode {\n\treturn {\n\t\tkind: \"path\",\n\t\td: attrs.d ?? \"\",\n\t\tfill: attrs.fill,\n\t\tfillOpacity: parseNumOpt(attrs[\"fill-opacity\"]),\n\t\tfillRule: attrs[\"fill-rule\"],\n\t\tstroke: attrs.stroke,\n\t\tstrokeWidth: parseNum(attrs[\"stroke-width\"]),\n\t\tstrokeOpacity: parseNumOpt(attrs[\"stroke-opacity\"]),\n\t\tstrokeLinecap: attrs[\"stroke-linecap\"],\n\t\tstrokeLinejoin: attrs[\"stroke-linejoin\"],\n\t\tshapeRendering: attrs[\"shape-rendering\"],\n\t\tvectorEffect: attrs[\"vector-effect\"],\n\t};\n}\n\nfunction parsePolygonNode(attrs: Record<string, string>): SvgPolygonNode {\n\treturn {\n\t\tkind: \"polygon\",\n\t\tpoints: attrs.points ?? \"\",\n\t\tfill: attrs.fill,\n\t};\n}\n\nfunction parseImageNode(attrs: Record<string, string>): SvgImageNode {\n\treturn {\n\t\tkind: \"image\",\n\t\thref: attrs.href ?? \"\",\n\t\tx: parseNumR(attrs.x, \"0\"),\n\t\ty: parseNumR(attrs.y, \"0\"),\n\t\twidth: parseNumR(attrs.width, \"0\"),\n\t\theight: parseNumR(attrs.height, \"0\"),\n\t};\n}\n\nfunction parseTextNode(\n\tattrs: Record<string, string>,\n\tchildren: SvgTSpanNode[],\n): SvgTextNode {\n\treturn {\n\t\tkind: \"text\",\n\t\tx: parseNum(attrs.x),\n\t\ty: parseNum(attrs.y),\n\t\tfill: attrs.fill,\n\t\ttextAnchor: attrs[\"text-anchor\"],\n\t\tfontSize: parseNum(attrs[\"font-size\"]),\n\t\tfontFamily: attrs[\"font-family\"],\n\t\tchildren,\n\t};\n}\n\nfunction parseTspanNode(\n\tattrs: Record<string, string>,\n\ttextContent: string,\n): SvgTSpanNode {\n\treturn {\n\t\tkind: \"tspan\",\n\t\tx: parseNum(attrs.x),\n\t\tdy: parseNum(attrs.dy),\n\t\ttext: textContent,\n\t};\n}\n\nfunction parseSingleElement(\n\ttag: string,\n\tattrs: Record<string, string>,\n\tchildren: SvgNode[],\n\tinnerText: string,\n): SvgNode | null {\n\tswitch (tag) {\n\t\tcase \"rect\":\n\t\t\treturn parseRectNode(attrs);\n\t\tcase \"ellipse\":\n\t\t\treturn parseEllipseNode(attrs);\n\t\tcase \"circle\":\n\t\t\treturn parseCircleNode(attrs);\n\t\tcase \"line\":\n\t\t\treturn parseLineNode(attrs);\n\t\tcase \"path\":\n\t\t\treturn parsePathNode(attrs);\n\t\tcase \"polygon\":\n\t\t\treturn parsePolygonNode(attrs);\n\t\tcase \"image\":\n\t\t\treturn parseImageNode(attrs);\n\t\tcase \"text\":\n\t\t\treturn parseTextNode(attrs, parseTspanChildren(innerText));\n\t\tcase \"g\":\n\t\t\treturn { kind: \"g\", transform: attrs.transform, children };\n\t\tcase \"defs\":\n\t\t\treturn { kind: \"defs\", children };\n\t\tcase \"marker\":\n\t\t\treturn parseMarkerNode(attrs, children);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction parseTspanChildren(innerXml: string): SvgTSpanNode[] {\n\tconst result: SvgTSpanNode[] = [];\n\tif (!innerXml.includes(\"<tspan\")) {\n\t\tconst trimmed = innerXml.trim();\n\t\tif (trimmed) {\n\t\t\tresult.push({ kind: \"tspan\", text: trimmed });\n\t\t}\n\t\treturn result;\n\t}\n\tconst tagRe = /<tspan\\b([^>]*)>([\\s\\S]*?)<\\/tspan>/g;\n\tlet m = tagRe.exec(innerXml);\n\twhile (m !== null) {\n\t\tconst rawAttrs = m[1] ?? \"\";\n\t\tconst text = (m[2] ?? \"\").trim();\n\t\tresult.push(parseTspanNode(parseAttrs(rawAttrs), text));\n\t\tm = tagRe.exec(innerXml);\n\t}\n\treturn result;\n}\n\nfunction parseMarkerNode(\n\tattrs: Record<string, string>,\n\tchildren: SvgNode[],\n): SvgMarkerNode {\n\treturn {\n\t\tkind: \"marker\",\n\t\tid: attrs.id ?? \"\",\n\t\tmarkerWidth: parseNumR(attrs.markerWidth, \"8\"),\n\t\tmarkerHeight: parseNumR(attrs.markerHeight, \"8\"),\n\t\trefX: parseNumR(attrs.refX, \"6\"),\n\t\trefY: parseNumR(attrs.refY, \"4\"),\n\t\torient: attrs.orient ?? \"auto\",\n\t\tchildren: children.filter((c): c is SvgPolygonNode => c.kind === \"polygon\"),\n\t};\n}\n\nfunction stripComments(xml: string): string {\n\treturn xml.replace(/<!--[\\s\\S]*?-->/g, \"\");\n}\n\n/**\n * Lightweight SVG fragment parser — handles the exact SVG elements generated\n * by canvu shape builders. Returns typed nodes suitable for rendering with\n * react-native-svg.\n */\nexport function parseSvgFragment(xml: string): SvgNode[] {\n\tif (!xml || xml.trim().length === 0) return [];\n\n\tconst clean = stripComments(xml.trim());\n\tconst nodes: SvgNode[] = [];\n\tlet pos = 0;\n\n\twhile (pos < clean.length) {\n\t\tconst openStart = clean.indexOf(\"<\", pos);\n\t\tif (openStart === -1) break;\n\t\tif (clean[openStart + 1] === \"/\") {\n\t\t\tpos = openStart + 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst openEnd = clean.indexOf(\">\", openStart);\n\t\tif (openEnd === -1) break;\n\t\tconst openTag = clean.slice(openStart + 1, openEnd);\n\t\tconst spaceIdx = openTag.indexOf(\" \");\n\t\tconst _tagEnd = openTag.indexOf(\"/\");\n\t\tconst tagName = (spaceIdx === -1 ? openTag : openTag.slice(0, spaceIdx))\n\t\t\t.replace(/\\/$/, \"\")\n\t\t\t.trim();\n\t\tconst hasCloseSlash = openTag.endsWith(\"/\");\n\n\t\tif (SELF_CLOSING.has(tagName) || hasCloseSlash) {\n\t\t\tconst attrs =\n\t\t\t\tspaceIdx === -1\n\t\t\t\t\t? {}\n\t\t\t\t\t: parseAttrs(openTag.slice(spaceIdx + 1).replace(/\\/$/, \"\"));\n\t\t\tconst node = parseSingleElement(tagName, attrs, [], \"\");\n\t\t\tif (node) nodes.push(node);\n\t\t\tpos = openEnd + 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Non-self-closing: find matching close tag\n\t\tconst closeTag = `</${tagName}>`;\n\t\tconst closeIdx = clean.indexOf(closeTag, openEnd);\n\t\tif (closeIdx === -1) {\n\t\t\tpos = openEnd + 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst innerXml = clean.slice(openEnd + 1, closeIdx);\n\t\tconst attrs = spaceIdx === -1 ? {} : parseAttrs(openTag.slice(spaceIdx + 1));\n\t\tconst children = parseSvgFragment(innerXml);\n\n\t\tconst node = parseSingleElement(tagName, attrs, children, innerXml);\n\t\tif (node) nodes.push(node);\n\n\t\tpos = closeIdx + closeTag.length;\n\t}\n\n\treturn nodes;\n}\n","import {\n\tCircle,\n\tLine,\n\tmatchFont,\n\tPath,\n\tRoundedRect,\n\tText as SkiaText,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport type { Rect as RectT } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport {\n\tcomputeFreehandSvgPayload,\n\tcomputeStraightArrowGeometry,\n\tresolveStrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { SvgNodeRenderer } from \"./SvgNodeRenderer\";\nimport { parseSvgFragment } from \"./svg-parser\";\n\nfunction rgba(hex: string, alpha?: number): string {\n\tif (alpha == null || alpha >= 1) return hex;\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\tif (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return hex;\n\treturn `rgba(${r},${g},${b},${alpha})`;\n}\n\nexport type NativeShapeRendererProps = {\n\treadonly item: VectorSceneItem;\n};\n\nfunction localBounds(bounds: RectT): { w: number; h: number } {\n\tconst b = normalizeRect(bounds);\n\treturn { w: Math.max(0, b.width), h: Math.max(0, b.height) };\n}\n\nexport function NativeShapeRenderer({ item }: NativeShapeRendererProps) {\n\tconst style = resolveStrokeStyle(item);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst { w, h } = localBounds(item.bounds);\n\t\treturn (\n\t\t\t<RoundedRect\n\t\t\t\tx={0}\n\t\t\t\ty={0}\n\t\t\t\twidth={w}\n\t\t\t\theight={h}\n\t\t\t\tr={4}\n\t\t\t\tcolor={style.stroke}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (k === \"ellipse\") {\n\t\tconst { w, h } = localBounds(item.bounds);\n\t\tconst rx = Math.max(0, w / 2);\n\t\tconst ry = Math.max(0, h / 2);\n\t\tif (Math.abs(rx - ry) < 1e-9) {\n\t\t\treturn (\n\t\t\t\t<Circle\n\t\t\t\t\tcx={rx}\n\t\t\t\t\tcy={ry}\n\t\t\t\t\tr={rx}\n\t\t\t\t\tcolor={style.stroke}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<Circle\n\t\t\t\tcx={rx}\n\t\t\t\tcy={ry}\n\t\t\t\tr={Math.min(rx, ry)}\n\t\t\t\tcolor={style.stroke}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ((k === \"line\" || k === \"arrow\") && item.line) {\n\t\tconst ln = item.line;\n\t\tconst color = rgba(style.stroke, style.strokeOpacity);\n\t\tif (k === \"line\") {\n\t\t\treturn (\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(ln.x2, ln.y2)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tconst dx = ln.x2 - ln.x1;\n\t\tconst dy = ln.y2 - ln.y1;\n\t\tconst len = Math.hypot(dx, dy);\n\t\tif (len < 1e-6) {\n\t\t\treturn (\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(ln.x2, ln.y2)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tconst geometry = computeStraightArrowGeometry(ln, style.strokeWidth);\n\t\tif (!geometry) {\n\t\t\treturn (\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(ln.x2, ln.y2)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Line\n\t\t\t\t\tp1={vec(ln.x1, ln.y1)}\n\t\t\t\t\tp2={vec(geometry.shaftEndX, geometry.shaftEndY)}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t\t<Path\n\t\t\t\t\tpath={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={style.strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}\n\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst fs = item.textFontSize ?? 16;\n\t\tconst color = rgba(style.stroke, style.strokeOpacity);\n\t\tconst lines = item.text.split(\"\\n\");\n\t\tconst font = matchFont({ fontSize: fs });\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{lines.map((line, i) => (\n\t\t\t\t\t<SkiaText\n\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\tx={0}\n\t\t\t\t\t\ty={fs + i * fs * 1.2}\n\t\t\t\t\t\ttext={line}\n\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\tfont={font}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</>\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 payload = computeFreehandSvgPayload(item.pathPointsLocal, style, k);\n\t\tif (!payload) return null;\n\t\tconst color = rgba(style.stroke, style.strokeOpacity);\n\t\tif (payload.kind === \"circle\") {\n\t\t\treturn (\n\t\t\t\t<Circle\n\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\tr={payload.r}\n\t\t\t\t\tcolor={rgba(payload.fill, payload.fillOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\tif (payload.kind === \"fillPath\") {\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={payload.d}\n\t\t\t\t\tcolor={rgba(payload.fill, payload.fillOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tfillType=\"winding\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<Path\n\t\t\t\tpath={payload.d}\n\t\t\t\tcolor={color}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (k === \"draw\") {\n\t\tconst { w, h } = localBounds(item.bounds);\n\t\tconst r = Math.min(w, h) / 2;\n\t\treturn (\n\t\t\t<Circle\n\t\t\t\tcx={Math.max(0, w) / 2}\n\t\t\t\tcy={Math.max(0, h) / 2}\n\t\t\t\tr={Math.max(0, r)}\n\t\t\t\tcolor={rgba(style.stroke, style.strokeOpacity)}\n\t\t\t\tstyle=\"fill\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (k === \"image\" || k === \"custom\" || item.childrenSvg) {\n\t\tconst nodes = parseSvgFragment(item.childrenSvg);\n\t\tif (nodes.length > 0) {\n\t\t\treturn <SvgNodeRenderer nodes={nodes} />;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { Group, Line, Path, vec } from \"@shopify/react-native-skia\";\nimport type { NativeVectorToolCursor } from \"./native-tool-cursors\";\n\nexport type NativeToolCursorRendererProps = {\n\treadonly cursor: NativeVectorToolCursor;\n\treadonly point: {\n\t\treadonly x: number;\n\t\treadonly y: number;\n\t};\n};\n\nconst CURSOR_STROKE = \"#18181b\";\nconst CURSOR_STROKE_WIDTH = 2;\nconst CROSSHAIR_STROKE_WIDTH = 1.5;\n\nfunction NativeDrawCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Path\n\t\t\t\tpath=\"M13 21h8\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Path\n\t\t\t\tpath=\"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\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeMarkerCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Path\n\t\t\t\tpath=\"m9 11-6 6v3h9l3-3\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Path\n\t\t\t\tpath=\"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\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeEraserCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Path\n\t\t\t\tpath=\"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\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Path\n\t\t\t\tpath=\"m5.082 11.09 8.828 8.828\"\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeCrosshairCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Line\n\t\t\t\tp1={vec(12, 3)}\n\t\t\t\tp2={vec(12, 21)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CROSSHAIR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Line\n\t\t\t\tp1={vec(3, 12)}\n\t\t\t\tp2={vec(21, 12)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CROSSHAIR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeTextCursor() {\n\treturn (\n\t\t<>\n\t\t\t<Line\n\t\t\t\tp1={vec(12, 4)}\n\t\t\t\tp2={vec(12, 20)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Line\n\t\t\t\tp1={vec(8, 4)}\n\t\t\t\tp2={vec(16, 4)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<Line\n\t\t\t\tp1={vec(8, 20)}\n\t\t\t\tp2={vec(16, 20)}\n\t\t\t\tcolor={CURSOR_STROKE}\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={CURSOR_STROKE_WIDTH}\n\t\t\t\tstrokeCap=\"round\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t</>\n\t);\n}\n\nfunction NativeToolCursorGlyph({\n\tcursor,\n}: {\n\treadonly cursor: NativeVectorToolCursor;\n}) {\n\tif (cursor.kind === \"draw\") return <NativeDrawCursor />;\n\tif (cursor.kind === \"marker\") return <NativeMarkerCursor />;\n\tif (cursor.kind === \"eraser\") return <NativeEraserCursor />;\n\tif (cursor.kind === \"text\") return <NativeTextCursor />;\n\treturn <NativeCrosshairCursor />;\n}\n\nexport function NativeToolCursorRenderer({\n\tcursor,\n\tpoint,\n}: NativeToolCursorRendererProps) {\n\tconst x = point.x - cursor.hotspot.x;\n\tconst y = point.y - cursor.hotspot.y;\n\n\treturn (\n\t\t<Group transform={[{ translateX: x }, { translateY: y }]}>\n\t\t\t<NativeToolCursorGlyph cursor={cursor} />\n\t\t</Group>\n\t);\n}\n","import type { StrokeStyle } from \"../scene/shape-builders\";\n\nexport type TimedTrailPoint = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly t: number;\n};\n\nexport const ERASER_TINT = \"#cbd5e1\";\nexport const ERASER_TINT_OPACITY = 0.95;\nexport const LASER_TINT = \"#f43f5e\";\nexport const LASER_TINT_OPACITY = 0.9;\nexport const ERASER_TRAIL_MAX_AGE_MS = 150;\nexport const LASER_TRAIL_MAX_AGE_MS = 650;\n\nexport function colorWithOpacity(hex: string, alpha?: number): string {\n\tif (alpha == null || alpha >= 1) return hex;\n\tconst r = parseInt(hex.slice(1, 3), 16);\n\tconst g = parseInt(hex.slice(3, 5), 16);\n\tconst b = parseInt(hex.slice(5, 7), 16);\n\tif (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b)) return hex;\n\treturn `rgba(${r},${g},${b},${alpha})`;\n}\n\nexport function freshTimedTrailPoints(\n\tpoints: readonly TimedTrailPoint[],\n\tnow: number,\n\tmaxAgeMs: number,\n): TimedTrailPoint[] {\n\treturn points.filter((point) => now - point.t <= maxAgeMs);\n}\n\nexport function timedTrailHeadOpacity(\n\tpoint: TimedTrailPoint | undefined,\n\tnow: number,\n\tmaxAgeMs: number,\n): number {\n\tif (!point) return 0;\n\treturn Math.max(0, 1 - (now - point.t) / maxAgeMs);\n}\n\nexport function resolveNativeStrokePreviewStyle(\n\ttool: string,\n\tpreviewStrokeStyle: StrokeStyle | undefined,\n): StrokeStyle {\n\tconst isLaser = tool === \"laser\";\n\treturn {\n\t\tstroke: isLaser ? LASER_TINT : (previewStrokeStyle?.stroke ?? \"#64748b\"),\n\t\tstrokeWidth: isLaser\n\t\t\t? 4\n\t\t\t: (previewStrokeStyle?.strokeWidth ?? (tool === \"marker\" ? 16 : 3)),\n\t\t...(previewStrokeStyle?.strokeOpacity != null && !isLaser\n\t\t\t? { strokeOpacity: previewStrokeStyle.strokeOpacity }\n\t\t\t: {}),\n\t\t...(previewStrokeStyle?.strokeDash != null && !isLaser\n\t\t\t? { strokeDash: previewStrokeStyle.strokeDash }\n\t\t\t: {}),\n\t};\n}\n","import {\n\tCanvas,\n\tDashPathEffect,\n\tGroup,\n\tLine,\n\tOval,\n\tPath,\n\tRect,\n\tRoundedRect,\n\tCircle as SkiaCircle,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport { useMemo } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport {\n\tgetHandleWorldPositionRotated,\n\tgetRotationHandleWorldPosition,\n\ttype ResizeHandleId,\n} from \"../interaction/resize-handles\";\nimport { normalizeRect } from \"../math/rect\";\nimport { smoothFreehandPointsToPathD } from \"../scene/freehand-path\";\nimport {\n\tbuildArchitecturalCloudPathD,\n\tcomputeFreehandSvgPayload,\n\tcomputeStraightArrowGeometry,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { NativeShapeRenderer } from \"./NativeShapeRenderer\";\nimport { NativeToolCursorRenderer } from \"./NativeToolCursorRenderer\";\nimport {\n\tcolorWithOpacity,\n\tERASER_TINT,\n\tERASER_TINT_OPACITY,\n\tERASER_TRAIL_MAX_AGE_MS,\n\tfreshTimedTrailPoints,\n\tLASER_TINT,\n\tLASER_TINT_OPACITY,\n\tLASER_TRAIL_MAX_AGE_MS,\n\tresolveNativeStrokePreviewStyle,\n\ttype TimedTrailPoint,\n\ttimedTrailHeadOpacity,\n} from \"./native-overlay-style\";\nimport type { NativeVectorToolCursor } from \"./native-tool-cursors\";\nimport { skiaCameraTransform, skiaItemPlacementTransform } from \"./skia-transform\";\n\nconst HANDLE_ORDER: ResizeHandleId[] = [\"nw\", \"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\"];\nconst ERASER_PREVIEW_OPACITY = 0.3;\nconst OVERLAY_STROKE_PX = 1.25;\nconst MARQUEE_DASH_PX = 4;\n\nexport type PlacementPreview =\n\t| {\n\t\t\treadonly kind: \"rect\" | \"ellipse\" | \"architectural-cloud\";\n\t\t\treadonly rect: {\n\t\t\t\treadonly x: number;\n\t\t\t\treadonly y: number;\n\t\t\t\treadonly width: number;\n\t\t\t\treadonly height: number;\n\t\t\t};\n\t }\n\t| {\n\t\t\treadonly kind: \"marquee\";\n\t\t\treadonly rect: {\n\t\t\t\treadonly x: number;\n\t\t\t\treadonly y: number;\n\t\t\t\treadonly width: number;\n\t\t\t\treadonly height: number;\n\t\t\t};\n\t }\n\t| {\n\t\t\treadonly kind: \"line\" | \"arrow\";\n\t\t\treadonly start: { readonly x: number; readonly y: number };\n\t\t\treadonly end: { readonly x: number; readonly y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"stroke\";\n\t\t\treadonly tool: \"draw\" | \"marker\" | \"laser\";\n\t\t\treadonly points: readonly { readonly x: number; readonly y: number }[];\n\t\t\treadonly style?: StrokeStyle;\n\t };\n\nexport type NativeInteractionOverlayProps = {\n\treadonly camera: Camera2D;\n\treadonly width: number;\n\treadonly height: number;\n\treadonly selectedItems: readonly VectorSceneItem[];\n\treadonly showResizeHandles: boolean;\n\treadonly placementPreview: PlacementPreview | null;\n\treadonly eraserTrail?: readonly TimedTrailPoint[];\n\treadonly laserTrail?: readonly TimedTrailPoint[];\n\treadonly eraserPreviewItems?: readonly VectorSceneItem[];\n\treadonly previewStrokeStyle?: StrokeStyle;\n\treadonly toolCursor?: {\n\t\treadonly cursor: NativeVectorToolCursor;\n\t\treadonly point: {\n\t\t\treadonly x: number;\n\t\t\treadonly y: number;\n\t\t};\n\t} | null;\n};\n\nfunction pointsToSmoothPathD(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst d = smoothFreehandPointsToPathD(points);\n\treturn d || null;\n}\n\nfunction dashIntervalsFromStrokeDasharray(\n\tstrokeDasharray: string | undefined,\n): number[] | null {\n\tif (!strokeDasharray) return null;\n\tconst intervals = strokeDasharray\n\t\t.split(/\\s+/)\n\t\t.map((part) => Number(part))\n\t\t.filter((part) => Number.isFinite(part) && part > 0);\n\treturn intervals.length > 0 ? intervals : null;\n}\n\nexport function NativeInteractionOverlay({\n\tcamera,\n\twidth,\n\theight,\n\tselectedItems,\n\tshowResizeHandles,\n\tplacementPreview,\n\teraserTrail,\n\tlaserTrail,\n\teraserPreviewItems = [],\n\tpreviewStrokeStyle,\n\ttoolCursor,\n}: NativeInteractionOverlayProps) {\n\tconst z = camera.zoom;\n\tconst camTransform = skiaCameraTransform(z, camera.x, camera.y);\n\tconst handleR = 5 / z;\n\tconst overlayStrokeWorld = OVERLAY_STROKE_PX / z;\n\tconst marqueeDashWorld = MARQUEE_DASH_PX / z;\n\tconst rotateOffsetWorld = 24 / z;\n\tconst rotateIconWorld = 16 / z;\n\tconst rotateIconScale = rotateIconWorld / 24;\n\tconst rotateIconStroke = OVERLAY_STROKE_PX / (z * rotateIconScale);\n\n\tconst selectionElements = useMemo(() => {\n\t\tif (selectedItems.length === 0) return null;\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, rotateOffsetWorld)\n\t\t\t\t: null;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{selectedItems.map((it) => {\n\t\t\t\t\tconst b = normalizeRect(it.bounds);\n\t\t\t\t\tconst cx = b.width / 2;\n\t\t\t\t\tconst cy = b.height / 2;\n\t\t\t\t\tconst t = skiaItemPlacementTransform(it.x, it.y, cx, cy, it.rotation ?? 0);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group key={it.id} transform={t}>\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\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Group>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t{showResizeHandles && bSingle && single && (\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<Group key={hid}>\n\t\t\t\t\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\t\t\t\t\tcx={p.x}\n\t\t\t\t\t\t\t\t\t\tcy={p.y}\n\t\t\t\t\t\t\t\t\t\tr={handleR}\n\t\t\t\t\t\t\t\t\t\tcolor=\"#ffffff\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\t\t\t\t\tcx={p.x}\n\t\t\t\t\t\t\t\t\t\tcy={p.y}\n\t\t\t\t\t\t\t\t\t\tr={handleR}\n\t\t\t\t\t\t\t\t\t\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Group>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{rotHandlePos && (\n\t\t\t\t\t\t\t<Group\n\t\t\t\t\t\t\t\ttransform={[\n\t\t\t\t\t\t\t\t\t{ translateX: rotHandlePos.x },\n\t\t\t\t\t\t\t\t\t{ translateY: rotHandlePos.y },\n\t\t\t\t\t\t\t\t\t{ rotate: rotSingle },\n\t\t\t\t\t\t\t\t\t{ translateX: -rotateIconWorld / 2 },\n\t\t\t\t\t\t\t\t\t{ translateY: -rotateIconWorld / 2 },\n\t\t\t\t\t\t\t\t\t{ scale: rotateIconScale },\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<Path\n\t\t\t\t\t\t\t\t\tpath=\"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\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={rotateIconStroke}\n\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\t\t\t\tantiAlias\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\tpath=\"M21 3v5h-5\"\n\t\t\t\t\t\t\t\t\tcolor=\"#3b82f6\"\n\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={rotateIconStroke}\n\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Group>\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\t\tselectedItems,\n\t\tshowResizeHandles,\n\t\trotateOffsetWorld,\n\t\thandleR,\n\t\toverlayStrokeWorld,\n\t\trotateIconWorld,\n\t\trotateIconScale,\n\t\trotateIconStroke,\n\t]);\n\n\tconst previewElements = useMemo(() => {\n\t\tif (!placementPreview) return null;\n\t\tconst p = placementPreview;\n\t\tconst shapeStroke = previewStrokeStyle?.stroke ?? \"#1d1d1d\";\n\t\tconst shapeWidth = previewStrokeStyle?.strokeWidth ?? 2;\n\t\tconst shapeColor = colorWithOpacity(\n\t\t\tshapeStroke,\n\t\t\tpreviewStrokeStyle?.strokeOpacity,\n\t\t);\n\t\tif (\n\t\t\tp.kind === \"rect\" ||\n\t\t\tp.kind === \"ellipse\" ||\n\t\t\tp.kind === \"architectural-cloud\"\n\t\t) {\n\t\t\tconst r = normalizeRect(p.rect);\n\t\t\treturn p.kind === \"rect\" ? (\n\t\t\t\t<RoundedRect\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\tr={4}\n\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t) : p.kind === \"ellipse\" ? (\n\t\t\t\t<Oval\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\tcolor={shapeColor}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<Group transform={[{ translateX: r.x }, { translateY: r.y }]}>\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={buildArchitecturalCloudPathD(r.width, r.height, shapeWidth)}\n\t\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t</Group>\n\t\t\t);\n\t\t}\n\t\tif (p.kind === \"marquee\") {\n\t\t\tconst r = normalizeRect(p.rect);\n\t\t\treturn (\n\t\t\t\t<>\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\tcolor=\"rgba(59, 130, 246, 0.12)\"\n\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\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\tcolor=\"#3b82f6\"\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t>\n\t\t\t\t\t\t<DashPathEffect intervals={[marqueeDashWorld, marqueeDashWorld]} />\n\t\t\t\t\t</Rect>\n\t\t\t\t</>\n\t\t\t);\n\t\t}\n\t\tif (p.kind === \"line\" || p.kind === \"arrow\") {\n\t\t\tconst geometry =\n\t\t\t\tp.kind === \"arrow\"\n\t\t\t\t\t? computeStraightArrowGeometry(\n\t\t\t\t\t\t\t{ x1: p.start.x, y1: p.start.y, x2: p.end.x, y2: p.end.y },\n\t\t\t\t\t\t\tshapeWidth,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null;\n\t\t\treturn (\n\t\t\t\t<>\n\t\t\t\t\t<Line\n\t\t\t\t\t\tp1={vec(p.start.x, p.start.y)}\n\t\t\t\t\t\tp2={vec(geometry?.shaftEndX ?? p.end.x, geometry?.shaftEndY ?? p.end.y)}\n\t\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t\t{p.kind === \"arrow\" && geometry ? (\n\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\tpath={`M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}`}\n\t\t\t\t\t\t\tcolor={shapeColor}\n\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\tstrokeWidth={shapeWidth}\n\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\t\tantiAlias\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}\n\t\tif (p.kind === \"stroke\" && p.points.length >= 1) {\n\t\t\tconst isLaser = p.tool === \"laser\";\n\t\t\tconst style = resolveNativeStrokePreviewStyle(\n\t\t\t\tp.tool,\n\t\t\t\tp.style ?? previewStrokeStyle,\n\t\t\t);\n\t\t\tconst payload = computeFreehandSvgPayload(\n\t\t\t\tp.points,\n\t\t\t\tstyle,\n\t\t\t\tisLaser ? \"draw\" : p.tool,\n\t\t\t\tp.points.length === 2,\n\t\t\t);\n\t\t\tif (!payload) return null;\n\t\t\tif (payload.kind === \"circle\") {\n\t\t\t\treturn (\n\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\t\tr={payload.r}\n\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\n\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (payload.kind === \"fillPath\") {\n\t\t\t\treturn (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\n\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\tfillType=\"winding\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (payload.kind === \"strokePath\") {\n\t\t\t\tconst intervals = dashIntervalsFromStrokeDasharray(payload.strokeDasharray);\n\t\t\t\treturn (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\tcolor={colorWithOpacity(\n\t\t\t\t\t\t\tpayload.stroke,\n\t\t\t\t\t\t\tisLaser ? 0.85 : payload.strokeOpacity,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t>\n\t\t\t\t\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t\t\t</Path>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\t}, [placementPreview, previewStrokeStyle, overlayStrokeWorld, marqueeDashWorld]);\n\n\tconst eraserPreviewElements = useMemo(() => {\n\t\tif (eraserPreviewItems.length === 0) return null;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{eraserPreviewItems.map((it) => {\n\t\t\t\t\tconst b = normalizeRect(it.bounds);\n\t\t\t\t\tconst cx = b.width / 2;\n\t\t\t\t\tconst cy = b.height / 2;\n\t\t\t\t\tconst t = skiaItemPlacementTransform(it.x, it.y, cx, cy, it.rotation ?? 0);\n\t\t\t\t\t// Real item dimmed (same transform/renderer as the scene),\n\t\t\t\t\t// not a redrawn gray skeleton, so geometry always matches.\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group\n\t\t\t\t\t\t\tkey={`erase-${it.id}`}\n\t\t\t\t\t\t\ttransform={t}\n\t\t\t\t\t\t\topacity={ERASER_PREVIEW_OPACITY}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<NativeShapeRenderer item={it} />\n\t\t\t\t\t\t</Group>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</>\n\t\t);\n\t}, [eraserPreviewItems]);\n\n\tconst eraserTrailElements = useMemo(() => {\n\t\tif (!eraserTrail || eraserTrail.length < 1) return null;\n\t\tconst now = Date.now();\n\t\tconst alive = freshTimedTrailPoints(eraserTrail, now, ERASER_TRAIL_MAX_AGE_MS);\n\t\tif (alive.length === 0) return null;\n\t\tconst d = pointsToSmoothPathD(alive);\n\t\tconst newest = alive[alive.length - 1];\n\t\tconst headOpacity = timedTrailHeadOpacity(newest, now, ERASER_TRAIL_MAX_AGE_MS);\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={d}\n\t\t\t\t\t\tcolor={colorWithOpacity(ERASER_TINT, ERASER_TINT_OPACITY)}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={Math.max(3.5, OVERLAY_STROKE_PX) / z}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<SkiaCircle\n\t\t\t\t\tcx={newest?.x ?? alive[0]?.x ?? 0}\n\t\t\t\t\tcy={newest?.y ?? alive[0]?.y ?? 0}\n\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\tcolor={colorWithOpacity(ERASER_TINT, headOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}, [eraserTrail, z]);\n\n\tconst laserTrailElements = useMemo(() => {\n\t\tif (!laserTrail || laserTrail.length < 1) return null;\n\t\tconst now = Date.now();\n\t\tconst alive = freshTimedTrailPoints(laserTrail, now, LASER_TRAIL_MAX_AGE_MS);\n\t\tif (alive.length === 0) return null;\n\t\tconst d = pointsToSmoothPathD(alive);\n\t\tconst newest = alive[alive.length - 1];\n\t\tconst headOpacity = timedTrailHeadOpacity(newest, now, LASER_TRAIL_MAX_AGE_MS);\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{alive.length >= 2 && d ? (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath={d}\n\t\t\t\t\t\tcolor={colorWithOpacity(LASER_TINT, LASER_TINT_OPACITY)}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={Math.max(4, OVERLAY_STROKE_PX) / z}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t\tantiAlias\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<SkiaCircle\n\t\t\t\t\tcx={newest?.x ?? alive[0]?.x ?? 0}\n\t\t\t\t\tcy={newest?.y ?? alive[0]?.y ?? 0}\n\t\t\t\t\tr={Math.max(5 / z, 3)}\n\t\t\t\t\tcolor={colorWithOpacity(LASER_TINT, headOpacity)}\n\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\tantiAlias\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t}, [laserTrail, z]);\n\n\tif (width <= 0 || height <= 0) return null;\n\n\treturn (\n\t\t<Canvas\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\twidth,\n\t\t\t\theight,\n\t\t\t}}\n\t\t\tpointerEvents=\"none\"\n\t\t>\n\t\t\t<Group transform={camTransform}>\n\t\t\t\t{previewElements}\n\t\t\t\t{laserTrailElements}\n\t\t\t\t{eraserTrailElements}\n\t\t\t\t{eraserPreviewElements}\n\t\t\t\t{selectionElements}\n\t\t\t</Group>\n\t\t\t{toolCursor ? (\n\t\t\t\t<NativeToolCursorRenderer\n\t\t\t\t\tcursor={toolCursor.cursor}\n\t\t\t\t\tpoint={toolCursor.point}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</Canvas>\n\t);\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 { 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 { Canvas, Group } from \"@shopify/react-native-skia\";\nimport { memo } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport { normalizeRect } from \"../math/rect\";\nimport { cullItemsByViewport } from \"../scene/cull\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { NativeShapeRenderer } from \"./NativeShapeRenderer\";\nimport { skiaCameraTransform, skiaItemPlacementTransform } from \"./skia-transform\";\n\nexport type NativeSceneRendererProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly camera: Camera2D;\n\treadonly width: number;\n\treadonly height: number;\n};\n\nconst MemoShape = memo(function MemoShape({\n\titem,\n}: {\n\treadonly item: VectorSceneItem;\n}) {\n\tconst b = normalizeRect(item.bounds);\n\tconst cx = b.width / 2;\n\tconst cy = b.height / 2;\n\tconst itemTransform = skiaItemPlacementTransform(\n\t\titem.x,\n\t\titem.y,\n\t\tcx,\n\t\tcy,\n\t\titem.rotation ?? 0,\n\t);\n\n\treturn (\n\t\t<Group transform={itemTransform}>\n\t\t\t<NativeShapeRenderer item={item} />\n\t\t</Group>\n\t);\n});\n\nexport function NativeSceneRenderer({\n\titems,\n\tcamera,\n\twidth,\n\theight,\n}: NativeSceneRendererProps) {\n\tconst cameraTransform = skiaCameraTransform(camera.zoom, camera.x, camera.y);\n\n\tconst visible = cullItemsByViewport(\n\t\titems,\n\t\tcamera.getVisibleWorldRect(width, height),\n\t);\n\n\tif (width <= 0 || height <= 0) return null;\n\n\treturn (\n\t\t<Canvas style={{ width, height }}>\n\t\t\t<Group transform={cameraTransform}>\n\t\t\t\t{visible.map((item) => (\n\t\t\t\t\t<MemoShape key={item.id} item={item} />\n\t\t\t\t))}\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\n","export type NativeStyleColor = {\n\treadonly name: string;\n\treadonly hex: string;\n};\n\nexport const NATIVE_STYLE_PALETTE: readonly NativeStyleColor[] = [\n\t{ name: \"black\", hex: \"#1d1d1d\" },\n\t{ name: \"grey\", hex: \"#9fa8b2\" },\n\t{ name: \"light-violet\", hex: \"#e085f4\" },\n\t{ name: \"violet\", hex: \"#ae3ec9\" },\n\t{ name: \"blue\", hex: \"#4263eb\" },\n\t{ name: \"light-blue\", hex: \"#4dabf7\" },\n\t{ name: \"yellow\", hex: \"#ffc078\" },\n\t{ name: \"orange\", hex: \"#f76707\" },\n\t{ name: \"green\", hex: \"#099268\" },\n\t{ name: \"light-green\", hex: \"#40c057\" },\n\t{ name: \"light-red\", hex: \"#ff8787\" },\n\t{ name: \"red\", hex: \"#e03131\" },\n];\n\nexport function normalizeNativeStyleHex(stroke: string | undefined): string {\n\tif (stroke && /^#[0-9A-Fa-f]{6}$/.test(stroke)) return stroke;\n\treturn \"#1d1d1d\";\n}\n\nexport function nativeStyleColorWithOpacity(\n\thex: string,\n\topacity: number | undefined,\n): string {\n\tconst alpha = opacity ?? 1;\n\tif (alpha >= 1) return hex;\n\tconst r = Number.parseInt(hex.slice(1, 3), 16);\n\tconst g = Number.parseInt(hex.slice(3, 5), 16);\n\tconst b = Number.parseInt(hex.slice(5, 7), 16);\n\treturn `rgba(${r},${g},${b},${alpha})`;\n}\n","import { type ReactNode, useCallback, useMemo, useState } from \"react\";\nimport {\n\tPanResponder,\n\tPressable,\n\ttype StyleProp,\n\tStyleSheet,\n\tText,\n\tView,\n\ttype ViewStyle,\n} from \"react-native\";\nimport type { StrokeDash, StrokeStyle } from \"../scene/shape-builders\";\nimport {\n\tNATIVE_STYLE_PALETTE,\n\tnormalizeNativeStyleHex,\n} from \"./native-style-inspector-values\";\n\nexport type NativeVectorStyleToolId = \"draw\" | \"marker\";\n\nexport type NativeVectorStyleInspectorProps = {\n\treadonly toolId: NativeVectorStyleToolId;\n\treadonly value: StrokeStyle;\n\treadonly onChange: (patch: Partial<StrokeStyle>) => void;\n\treadonly style?: StyleProp<ViewStyle>;\n};\n\ntype NativeStyleSegment<TValue extends string | number> = {\n\treadonly value: TValue;\n\treadonly label: string;\n\treadonly preview?: ReactNode;\n};\n\nfunction hexesEqual(a: string, b: string): boolean {\n\treturn a.toLowerCase() === b.toLowerCase();\n}\n\nfunction DashPreview({\n\tcolor,\n\twidth,\n\tdashed = false,\n}: {\n\treadonly color: string;\n\treadonly width: number;\n\treadonly dashed?: boolean;\n}) {\n\tconst strokeHeight = Math.max(3, Math.min(6, width));\n\treturn (\n\t\t<View style={styles.dashPreviewTrack}>\n\t\t\t<View\n\t\t\t\tstyle={[\n\t\t\t\t\tstyles.dashPreviewStroke,\n\t\t\t\t\t{\n\t\t\t\t\t\twidth: dashed ? 11 : 26,\n\t\t\t\t\t\theight: strokeHeight,\n\t\t\t\t\t\tborderRadius: strokeHeight / 2,\n\t\t\t\t\t\tbackgroundColor: color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t/>\n\t\t\t{dashed ? (\n\t\t\t\t<View\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tstyles.dashPreviewStroke,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: 11,\n\t\t\t\t\t\t\theight: strokeHeight,\n\t\t\t\t\t\t\tborderRadius: strokeHeight / 2,\n\t\t\t\t\t\t\tbackgroundColor: color,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</View>\n\t);\n}\n\nfunction clampValue(value: number, min: number, max: number): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction RangeControl({\n\tvalue,\n\tmin,\n\tmax,\n\tonChange,\n\tvalueLabel,\n}: {\n\treadonly value: number;\n\treadonly min: number;\n\treadonly max: number;\n\treadonly onChange: (value: number) => void;\n\treadonly valueLabel?: string;\n}) {\n\tconst [trackWidth, setTrackWidth] = useState(1);\n\tconst normalized = (clampValue(value, min, max) - min) / (max - min);\n\tconst updateFromX = useCallback(\n\t\t(x: number) => {\n\t\t\tconst next = min + clampValue(x / trackWidth, 0, 1) * (max - min);\n\t\t\tonChange(Math.round(next));\n\t\t},\n\t\t[max, min, onChange, trackWidth],\n\t);\n\tconst panResponder = useMemo(\n\t\t() =>\n\t\t\tPanResponder.create({\n\t\t\t\tonMoveShouldSetPanResponder: () => true,\n\t\t\t\tonStartShouldSetPanResponder: () => true,\n\t\t\t\tonPanResponderGrant: (event) => {\n\t\t\t\t\tupdateFromX(event.nativeEvent.locationX);\n\t\t\t\t},\n\t\t\t\tonPanResponderMove: (event) => {\n\t\t\t\t\tupdateFromX(event.nativeEvent.locationX);\n\t\t\t\t},\n\t\t\t}),\n\t\t[updateFromX],\n\t);\n\n\treturn (\n\t\t<View style={styles.rangeRow}>\n\t\t\t<View\n\t\t\t\tstyle={styles.rangeTrack}\n\t\t\t\tonLayout={(event) => setTrackWidth(event.nativeEvent.layout.width)}\n\t\t\t\t{...panResponder.panHandlers}\n\t\t\t>\n\t\t\t\t<View style={styles.rangeBase} />\n\t\t\t\t<View style={[styles.rangeFill, { width: `${normalized * 100}%` }]} />\n\t\t\t\t<View style={[styles.rangeThumb, { left: `${normalized * 100}%` }]} />\n\t\t\t</View>\n\t\t\t{valueLabel ? <Text style={styles.rangeValue}>{valueLabel}</Text> : null}\n\t\t</View>\n\t);\n}\n\nfunction InspectorSection({\n\tlabel,\n\tchildren,\n}: {\n\treadonly label: string;\n\treadonly children: ReactNode;\n}) {\n\treturn (\n\t\t<View style={styles.section}>\n\t\t\t<Text style={styles.sectionLabel}>{label}</Text>\n\t\t\t{children}\n\t\t</View>\n\t);\n}\n\nfunction SegmentControl<TValue extends string | number>({\n\tsegments,\n\tvalue,\n\tonChange,\n}: {\n\treadonly segments: readonly NativeStyleSegment<TValue>[];\n\treadonly value: TValue;\n\treadonly onChange: (value: TValue) => void;\n}) {\n\treturn (\n\t\t<View style={styles.segmentGroup}>\n\t\t\t{segments.map((segment) => {\n\t\t\t\tconst selected = segment.value === value;\n\t\t\t\treturn (\n\t\t\t\t\t<Pressable\n\t\t\t\t\t\tkey={String(segment.value)}\n\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\taccessibilityState={{ selected }}\n\t\t\t\t\t\taccessibilityLabel={segment.label}\n\t\t\t\t\t\tonPress={() => onChange(segment.value)}\n\t\t\t\t\t\tstyle={[styles.segment, selected ? styles.segmentSelected : null]}\n\t\t\t\t\t>\n\t\t\t\t\t\t{segment.preview}\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\tstyles.segmentLabel,\n\t\t\t\t\t\t\t\tselected ? styles.segmentLabelSelected : null,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{segment.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Pressable>\n\t\t\t\t);\n\t\t\t})}\n\t\t</View>\n\t);\n}\n\nexport function NativeVectorStyleInspector({\n\ttoolId,\n\tvalue,\n\tonChange,\n\tstyle,\n}: NativeVectorStyleInspectorProps) {\n\tconst hex = normalizeNativeStyleHex(value.stroke);\n\tconst opacity = toolId === \"marker\" ? (value.strokeOpacity ?? 0.5) : undefined;\n\tconst dashSegments: readonly NativeStyleSegment<StrokeDash>[] = [\n\t\t{\n\t\t\tvalue: \"solid\",\n\t\t\tlabel: \"Contínuo\",\n\t\t\tpreview: <DashPreview color=\"#18181b\" width={4} />,\n\t\t},\n\t\t{\n\t\t\tvalue: \"dashed\",\n\t\t\tlabel: \"Tracejado\",\n\t\t\tpreview: <DashPreview color=\"#18181b\" width={4} dashed />,\n\t\t},\n\t];\n\tconst opacityPercent = Math.round((opacity ?? 1) * 100);\n\n\treturn (\n\t\t<View\n\t\t\tpointerEvents=\"auto\"\n\t\t\tstyle={[styles.shell, style]}\n\t\t\taccessibilityRole=\"summary\"\n\t\t\taccessibilityLabel={\n\t\t\t\ttoolId === \"marker\" ? \"Configurações do marcador\" : \"Configurações da caneta\"\n\t\t\t}\n\t\t>\n\t\t\t<InspectorSection label=\"Cor\">\n\t\t\t\t<View style={styles.palette}>\n\t\t\t\t\t{NATIVE_STYLE_PALETTE.map((color) => {\n\t\t\t\t\t\tconst selected = hexesEqual(color.hex, hex);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\tkey={color.name}\n\t\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\t\taccessibilityState={{ selected }}\n\t\t\t\t\t\t\t\taccessibilityLabel={color.name}\n\t\t\t\t\t\t\t\tonPress={() => onChange({ stroke: color.hex })}\n\t\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t\tstyles.swatch,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: color.hex,\n\t\t\t\t\t\t\t\t\t\tborderWidth: selected ? 2 : 1,\n\t\t\t\t\t\t\t\t\t\ttransform: [{ scale: selected ? 1.08 : 1 }],\n\t\t\t\t\t\t\t\t\t\tshadowOpacity: selected ? 0.08 : 0,\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\t\t\t\t</View>\n\t\t\t</InspectorSection>\n\t\t\t<InspectorSection label=\"Grossura\">\n\t\t\t\t<RangeControl\n\t\t\t\t\tvalue={value.strokeWidth}\n\t\t\t\t\tmin={1}\n\t\t\t\t\tmax={48}\n\t\t\t\t\tonChange={(strokeWidth) => onChange({ strokeWidth })}\n\t\t\t\t/>\n\t\t\t</InspectorSection>\n\t\t\t{toolId === \"draw\" ? (\n\t\t\t\t<InspectorSection label=\"Traço\">\n\t\t\t\t\t<SegmentControl\n\t\t\t\t\t\tsegments={dashSegments}\n\t\t\t\t\t\tvalue={value.strokeDash === \"dashed\" ? \"dashed\" : \"solid\"}\n\t\t\t\t\t\tonChange={(strokeDash) => onChange({ strokeDash })}\n\t\t\t\t\t/>\n\t\t\t\t</InspectorSection>\n\t\t\t) : (\n\t\t\t\t<InspectorSection label=\"Opacidade\">\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\tvalue={opacityPercent}\n\t\t\t\t\t\tmin={10}\n\t\t\t\t\t\tmax={100}\n\t\t\t\t\t\tvalueLabel={`${opacityPercent}%`}\n\t\t\t\t\t\tonChange={(nextOpacity) =>\n\t\t\t\t\t\t\tonChange({ strokeOpacity: nextOpacity / 100 })\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</InspectorSection>\n\t\t\t)}\n\t\t</View>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tshell: {\n\t\tminWidth: 240,\n\t\tpaddingHorizontal: 14,\n\t\tpaddingVertical: 12,\n\t\tborderRadius: 10,\n\t\tborderWidth: 1,\n\t\tborderColor: \"rgba(0,0,0,0.1)\",\n\t\tbackgroundColor: \"rgba(255,255,255,0.97)\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.06,\n\t\tshadowRadius: 16,\n\t\tshadowOffset: { width: 0, height: 4 },\n\t\tgap: 10,\n\t},\n\tsection: {\n\t\tgap: 6,\n\t},\n\tsectionLabel: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#52525b\",\n\t\ttextTransform: \"uppercase\",\n\t\tletterSpacing: 0.22,\n\t},\n\tpalette: {\n\t\tflexDirection: \"row\",\n\t\tflexWrap: \"wrap\",\n\t\tcolumnGap: 6,\n\t\trowGap: 6,\n\t\tmaxWidth: 174,\n\t},\n\tswatch: {\n\t\twidth: 24,\n\t\theight: 24,\n\t\tborderRadius: 12,\n\t\tborderColor: \"rgba(0,0,0,0.12)\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowRadius: 2,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t},\n\trangeRow: {\n\t\tminHeight: 28,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 8,\n\t},\n\trangeTrack: {\n\t\tposition: \"relative\",\n\t\tflex: 1,\n\t\theight: 28,\n\t\tjustifyContent: \"center\",\n\t},\n\trangeBase: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\theight: 3,\n\t\tborderRadius: 2,\n\t\tbackgroundColor: \"rgba(24,24,27,0.12)\",\n\t},\n\trangeFill: {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\theight: 3,\n\t\tborderRadius: 2,\n\t\tbackgroundColor: \"#18181b\",\n\t},\n\trangeThumb: {\n\t\tposition: \"absolute\",\n\t\twidth: 18,\n\t\theight: 18,\n\t\tmarginLeft: -9,\n\t\tborderRadius: 9,\n\t\tborderWidth: 2,\n\t\tborderColor: \"#18181b\",\n\t\tbackgroundColor: \"#ffffff\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 3,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t},\n\trangeValue: {\n\t\tminWidth: 34,\n\t\ttextAlign: \"right\",\n\t\tfontSize: 11,\n\t\tfontWeight: \"500\",\n\t\tcolor: \"#71717a\",\n\t},\n\tsegmentGroup: {\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tgap: 3,\n\t\tpadding: 3,\n\t\tborderRadius: 8,\n\t\tbackgroundColor: \"rgba(24,24,27,0.06)\",\n\t},\n\tsegment: {\n\t\tflex: 1,\n\t\tminWidth: 96,\n\t\tminHeight: 32,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 6,\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 5,\n\t\tborderRadius: 6,\n\t},\n\tsegmentSelected: {\n\t\tbackgroundColor: \"#ffffff\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.1,\n\t\tshadowRadius: 2,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t},\n\tsegmentLabel: {\n\t\tfontSize: 11,\n\t\tfontWeight: \"600\",\n\t\tcolor: \"#71717a\",\n\t\tflexShrink: 0,\n\t},\n\tsegmentLabelSelected: {\n\t\tcolor: \"#18181b\",\n\t},\n\tdashPreviewTrack: {\n\t\twidth: 26,\n\t\theight: 6,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 3,\n\t},\n\tdashPreviewStroke: {\n\t\tflexShrink: 0,\n\t},\n});\n","import { type ReactNode, useMemo, useState } from \"react\";\nimport {\n\tPressable,\n\tScrollView,\n\ttype StyleProp,\n\tStyleSheet,\n\tText,\n\ttype TextStyle,\n\tView,\n\ttype ViewStyle,\n} from \"react-native\";\n\n/**\n * Describes a single tool button rendered by {@link NativeVectorToolbar}.\n *\n * Use the built-in ids from {@link DEFAULT_NATIVE_VECTOR_TOOLS} when pairing\n * the toolbar with {@link NativeVectorViewport}. Custom ids are useful only\n * when the app also implements matching viewport behavior.\n */\nexport type NativeVectorToolDefinition = {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly shortLabel?: string;\n\treadonly tooltipLabel?: string;\n\treadonly shortcutHint?: string;\n\treadonly accessibilityLabel?: string;\n\treadonly disabled?: boolean;\n};\n\n/**\n * Render input for custom tool icons or complete custom tool buttons.\n *\n * Prefer `renderToolIcon` for app-specific icon packs. Use\n * `renderToolButton` only when you need to replace the full touch target while\n * keeping the toolbar's horizontal scrolling and tool list behavior.\n */\nexport type NativeVectorToolbarRenderToolInput = {\n\treadonly tool: NativeVectorToolDefinition;\n\treadonly selected: boolean;\n\treadonly disabled: boolean;\n\treadonly foregroundColor: string;\n\treadonly onSelect: () => void;\n};\n\nexport type NativeVectorToolbarDensity = \"compact\" | \"comfortable\";\n\nexport type NativeVectorToolbarRenderToolLockInput = {\n\treadonly locked: boolean;\n\treadonly disabled: boolean;\n\treadonly foregroundColor: string;\n\treadonly onToggle: () => void;\n};\n\nexport type NativeVectorToolbarRenderOverflowInput = {\n\treadonly open: boolean;\n\treadonly activeTool: NativeVectorToolDefinition | null;\n\treadonly disabled: boolean;\n\treadonly foregroundColor: string;\n\treadonly onToggle: () => void;\n};\n\n/**\n * Props for {@link NativeVectorToolbar}.\n *\n * The component is controlled: pass the same `value` to `NativeVectorViewport`\n * as `toolId`, and update it from `onChange`. It is intentionally lightweight\n * and native-only, with no dependency on the web toolbar implementation.\n */\nexport type NativeVectorToolbarProps = {\n\treadonly value: string;\n\treadonly onChange: (toolId: string) => void;\n\treadonly tools?: readonly NativeVectorToolDefinition[];\n\treadonly overflowToolIds?: readonly string[];\n\treadonly overflowMenuAccessibilityLabel?: string;\n\treadonly disabled?: boolean;\n\treadonly disabledToolIds?: readonly string[];\n\treadonly showToolLockToggle?: boolean;\n\treadonly toolLocked?: boolean;\n\treadonly onToolLockedChange?: (locked: boolean) => void;\n\treadonly density?: NativeVectorToolbarDensity;\n\treadonly accessibilityLabel?: string;\n\treadonly style?: StyleProp<ViewStyle>;\n\treadonly contentContainerStyle?: StyleProp<ViewStyle>;\n\treadonly overflowPanelStyle?: StyleProp<ViewStyle>;\n\treadonly toolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly activeToolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly toolLabelStyle?: StyleProp<TextStyle>;\n\treadonly activeToolLabelStyle?: StyleProp<TextStyle>;\n\treadonly renderToolIcon?: (input: NativeVectorToolbarRenderToolInput) => ReactNode;\n\treadonly renderToolLockIcon?: (\n\t\tinput: NativeVectorToolbarRenderToolLockInput,\n\t) => ReactNode;\n\treadonly renderOverflowIcon?: (\n\t\tinput: NativeVectorToolbarRenderOverflowInput,\n\t) => ReactNode;\n\treadonly renderOverflowChevronIcon?: (\n\t\tinput: NativeVectorToolbarRenderOverflowInput,\n\t) => ReactNode;\n\treadonly renderToolButton?: (\n\t\tinput: NativeVectorToolbarRenderToolInput,\n\t) => ReactNode;\n};\n\nexport const DEFAULT_NATIVE_OVERFLOW_TOOL_IDS = [\n\t\"rect\",\n\t\"ellipse\",\n\t\"architectural-cloud\",\n\t\"line\",\n\t\"marker\",\n\t\"laser\",\n\t\"image\",\n] as const;\n\n/**\n * Default mobile-friendly tool list for {@link NativeVectorToolbar}.\n *\n * The ids match the native viewport's built-in tool handling. Apps can pass a\n * filtered or reordered list when permissions or product scope require it.\n */\nexport const DEFAULT_NATIVE_VECTOR_TOOLS: readonly NativeVectorToolDefinition[] = [\n\t{ id: \"hand\", label: \"Hand\", shortcutHint: \"H\", shortLabel: \"H\" },\n\t{ id: \"select\", label: \"Select\", shortcutHint: \"V\", shortLabel: \"V\" },\n\t{ id: \"rect\", label: \"Rectangle\", shortcutHint: \"R\", shortLabel: \"R\" },\n\t{ id: \"ellipse\", label: \"Ellipse\", shortcutHint: \"O\", shortLabel: \"O\" },\n\t{\n\t\tid: \"architectural-cloud\",\n\t\tlabel: \"Nuvem arquitetural\",\n\t\ttooltipLabel: \"Architectural cloud\",\n\t\tshortcutHint: \"C\",\n\t\tshortLabel: \"C\",\n\t},\n\t{ id: \"line\", label: \"Line\", shortcutHint: \"L\", shortLabel: \"L\" },\n\t{ id: \"arrow\", label: \"Arrow\", shortcutHint: \"A\", shortLabel: \"A\" },\n\t{\n\t\tid: \"draw\",\n\t\tlabel: \"Desenhar\",\n\t\ttooltipLabel: \"Draw\",\n\t\tshortcutHint: \"D\",\n\t\tshortLabel: \"D\",\n\t},\n\t{\n\t\tid: \"marker\",\n\t\tlabel: \"Realce\",\n\t\ttooltipLabel: \"Highlighter\",\n\t\tshortcutHint: \"M\",\n\t\tshortLabel: \"M\",\n\t},\n\t{ id: \"laser\", label: \"Laser\", shortcutHint: \"K\", shortLabel: \"K\" },\n\t{\n\t\tid: \"eraser\",\n\t\tlabel: \"Borracha\",\n\t\ttooltipLabel: \"Eraser\",\n\t\tshortcutHint: \"E\",\n\t\tshortLabel: \"E\",\n\t},\n\t{ id: \"text\", label: \"Text\", shortcutHint: \"T\", shortLabel: \"T\" },\n\t{ id: \"image\", label: \"File\", shortcutHint: \"I\", shortLabel: \"I\" },\n];\n\nfunction splitToolbarTools(\n\ttools: readonly NativeVectorToolDefinition[],\n\toverflowToolIds: readonly string[],\n): {\n\treadonly primary: readonly NativeVectorToolDefinition[];\n\treadonly overflow: readonly NativeVectorToolDefinition[];\n} {\n\tconst overflowIds = new Set(overflowToolIds);\n\tif (overflowIds.size === 0) return { primary: tools, overflow: [] };\n\treturn {\n\t\tprimary: tools.filter((tool) => !overflowIds.has(tool.id)),\n\t\toverflow: tools.filter((tool) => overflowIds.has(tool.id)),\n\t};\n}\n\nfunction getPromotedOverflowTool(input: {\n\treadonly overflowTools: readonly NativeVectorToolDefinition[];\n\treadonly selectedId: string;\n\treadonly initialPromotedId: string | null;\n}): {\n\treadonly promotedTool: NativeVectorToolDefinition | null;\n\treadonly remainingOverflowTools: readonly NativeVectorToolDefinition[];\n} {\n\tconst selectedOverflowTool =\n\t\tinput.overflowTools.find((tool) => tool.id === input.selectedId) ?? null;\n\tconst fallbackTool =\n\t\tinput.overflowTools.find((tool) => tool.id === input.initialPromotedId) ??\n\t\tinput.overflowTools[0] ??\n\t\tnull;\n\tconst promotedTool = selectedOverflowTool ?? fallbackTool;\n\tif (!promotedTool) {\n\t\treturn { promotedTool: null, remainingOverflowTools: input.overflowTools };\n\t}\n\treturn {\n\t\tpromotedTool,\n\t\tremainingOverflowTools: input.overflowTools.filter(\n\t\t\t(tool) => tool.id !== promotedTool.id,\n\t\t),\n\t};\n}\n\nfunction tooltipTextForTool(tool: NativeVectorToolDefinition): string {\n\tconst name = tool.tooltipLabel ?? tool.label;\n\treturn tool.shortcutHint ? `${name} - ${tool.shortcutHint}` : name;\n}\n\n/**\n * Horizontal, touch-sized toolbar for `canvu/native`.\n *\n * Use it with {@link NativeVectorViewport} by controlling the same `toolId`\n * state. It intentionally uses React Native primitives only, so it works in\n * Expo and bare React Native apps without a WebView.\n *\n * @example\n * ```tsx\n * const [toolId, setToolId] = useState(\"select\");\n *\n * <NativeVectorViewport toolId={toolId} ... />\n * <NativeVectorToolbar value={toolId} onChange={setToolId} />\n * ```\n */\nexport function NativeVectorToolbar({\n\tvalue,\n\tonChange,\n\ttools = DEFAULT_NATIVE_VECTOR_TOOLS,\n\toverflowToolIds = DEFAULT_NATIVE_OVERFLOW_TOOL_IDS,\n\toverflowMenuAccessibilityLabel = \"More tools\",\n\tdisabled = false,\n\tdisabledToolIds = [],\n\tshowToolLockToggle = true,\n\ttoolLocked = false,\n\tonToolLockedChange,\n\tdensity = \"compact\",\n\taccessibilityLabel = \"Canvas tools\",\n\tstyle,\n\tcontentContainerStyle,\n\toverflowPanelStyle,\n\ttoolButtonStyle,\n\tactiveToolButtonStyle,\n\ttoolLabelStyle,\n\tactiveToolLabelStyle,\n\trenderToolIcon,\n\trenderToolLockIcon,\n\trenderOverflowIcon,\n\trenderOverflowChevronIcon,\n\trenderToolButton,\n}: NativeVectorToolbarProps) {\n\tconst [overflowOpen, setOverflowOpen] = useState(false);\n\tconst disabledIds = useMemo(() => new Set(disabledToolIds), [disabledToolIds]);\n\tconst { primary: primaryTools, overflow: overflowTools } = useMemo(\n\t\t() => splitToolbarTools(tools, overflowToolIds),\n\t\t[tools, overflowToolIds],\n\t);\n\tconst { promotedTool, remainingOverflowTools } = useMemo(\n\t\t() =>\n\t\t\tgetPromotedOverflowTool({\n\t\t\t\toverflowTools,\n\t\t\t\tselectedId: value,\n\t\t\t\tinitialPromotedId: overflowToolIds[0] ?? null,\n\t\t\t}),\n\t\t[overflowTools, overflowToolIds, value],\n\t);\n\tconst activeOverflowTool = overflowTools.find((tool) => tool.id === value) ?? null;\n\tconst toolbarTools =\n\t\tpromotedTool !== null ? [...primaryTools, promotedTool] : primaryTools;\n\tconst showOverflowMenu = remainingOverflowTools.length > 0;\n\tconst toolLockDisabled = disabled || !onToolLockedChange;\n\tconst toggleToolLock = () => onToolLockedChange?.(!toolLocked);\n\tconst toggleOverflow = () => setOverflowOpen((open) => !open);\n\tconst overflowRenderInput = {\n\t\topen: overflowOpen,\n\t\tactiveTool: activeOverflowTool,\n\t\tdisabled,\n\t\tforegroundColor: \"#18181b\",\n\t\tonToggle: toggleOverflow,\n\t};\n\n\treturn (\n\t\t<View\n\t\t\taccessibilityLabel={accessibilityLabel}\n\t\t\tstyle={[styles.shell, style]}\n\t\t\tpointerEvents=\"box-none\"\n\t\t>\n\t\t\t<ScrollView\n\t\t\t\thorizontal\n\t\t\t\tshowsHorizontalScrollIndicator={false}\n\t\t\t\tcontentContainerStyle={[\n\t\t\t\t\tstyles.content,\n\t\t\t\t\tdensity === \"comfortable\" ? styles.comfortableContent : undefined,\n\t\t\t\t\tcontentContainerStyle,\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t{showToolLockToggle ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\taccessibilityLabel={toolLocked ? \"Unlock tool\" : \"Lock tool\"}\n\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\taccessibilityState={{\n\t\t\t\t\t\t\t\tchecked: toolLocked,\n\t\t\t\t\t\t\t\tdisabled: toolLockDisabled,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdisabled={toolLockDisabled}\n\t\t\t\t\t\t\tonPress={toggleToolLock}\n\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\tstyles.toolButton,\n\t\t\t\t\t\t\t\tdensity === \"comfortable\" ? styles.comfortableToolButton : undefined,\n\t\t\t\t\t\t\t\ttoolLocked ? styles.activeToolButton : undefined,\n\t\t\t\t\t\t\t\tpressed && !toolLockDisabled ? styles.pressedToolButton : undefined,\n\t\t\t\t\t\t\t\ttoolLockDisabled ? styles.disabledToolButton : undefined,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{renderToolLockIcon?.({\n\t\t\t\t\t\t\t\tlocked: toolLocked,\n\t\t\t\t\t\t\t\tdisabled: toolLockDisabled,\n\t\t\t\t\t\t\t\tforegroundColor: \"#18181b\",\n\t\t\t\t\t\t\t\tonToggle: toggleToolLock,\n\t\t\t\t\t\t\t}) ?? <Text style={styles.lockGlyph}>{toolLocked ? \"L\" : \"U\"}</Text>}\n\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t<View style={styles.toolLockDivider} />\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t\t{toolbarTools.map((tool) =>\n\t\t\t\t\trenderNativeToolButton({\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tonChange,\n\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\tdisabledIds,\n\t\t\t\t\t\tdensity,\n\t\t\t\t\t\ttoolButtonStyle,\n\t\t\t\t\t\tactiveToolButtonStyle,\n\t\t\t\t\t\ttoolLabelStyle,\n\t\t\t\t\t\tactiveToolLabelStyle,\n\t\t\t\t\t\trenderToolIcon,\n\t\t\t\t\t\trenderToolButton,\n\t\t\t\t\t}),\n\t\t\t\t)}\n\t\t\t\t{showOverflowMenu ? <View style={styles.overflowSpacer} /> : null}\n\t\t\t\t{showOverflowMenu ? (\n\t\t\t\t\t<Pressable\n\t\t\t\t\t\taccessibilityLabel={\n\t\t\t\t\t\t\tactiveOverflowTool\n\t\t\t\t\t\t\t\t? `${overflowMenuAccessibilityLabel}: ${activeOverflowTool.accessibilityLabel ?? activeOverflowTool.label}`\n\t\t\t\t\t\t\t\t: overflowMenuAccessibilityLabel\n\t\t\t\t\t\t}\n\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\taccessibilityState={{\n\t\t\t\t\t\t\texpanded: overflowOpen,\n\t\t\t\t\t\t\tselected: overflowOpen || activeOverflowTool !== null,\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonPress={toggleOverflow}\n\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\tstyles.overflowTrigger,\n\t\t\t\t\t\t\toverflowOpen || activeOverflowTool\n\t\t\t\t\t\t\t\t? styles.activeToolButton\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tpressed && !disabled ? styles.pressedToolButton : undefined,\n\t\t\t\t\t\t\tdisabled ? styles.disabledToolButton : undefined,\n\t\t\t\t\t\t]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<View style={styles.iconSlot}>\n\t\t\t\t\t\t\t{activeOverflowTool\n\t\t\t\t\t\t\t\t? (renderToolIcon?.({\n\t\t\t\t\t\t\t\t\t\ttool: activeOverflowTool,\n\t\t\t\t\t\t\t\t\t\tselected: true,\n\t\t\t\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t\t\t\t\tforegroundColor: \"#18181b\",\n\t\t\t\t\t\t\t\t\t\tonSelect: () => onChange(activeOverflowTool.id),\n\t\t\t\t\t\t\t\t\t}) ?? renderNativeToolFallback(activeOverflowTool, \"#18181b\"))\n\t\t\t\t\t\t\t\t: (renderOverflowIcon?.(overflowRenderInput) ?? (\n\t\t\t\t\t\t\t\t\t\t<Text style={styles.shapesGlyph}>S</Text>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t\t{renderOverflowChevronIcon?.(overflowRenderInput) ?? (\n\t\t\t\t\t\t\t<Text style={styles.chevronGlyph}>{overflowOpen ? \"^\" : \"v\"}</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Pressable>\n\t\t\t\t) : null}\n\t\t\t</ScrollView>\n\t\t\t{overflowOpen && showOverflowMenu ? (\n\t\t\t\t<View style={[styles.overflowPanel, overflowPanelStyle]}>\n\t\t\t\t\t{remainingOverflowTools.map((tool) =>\n\t\t\t\t\t\trenderNativeToolButton({\n\t\t\t\t\t\t\ttool,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tonChange: (toolId) => {\n\t\t\t\t\t\t\t\tsetOverflowOpen(false);\n\t\t\t\t\t\t\t\tonChange(toolId);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t\tdisabledIds,\n\t\t\t\t\t\t\tdensity: \"compact\",\n\t\t\t\t\t\t\ttoolButtonStyle: styles.overflowToolButton,\n\t\t\t\t\t\t\tactiveToolButtonStyle,\n\t\t\t\t\t\t\ttoolLabelStyle,\n\t\t\t\t\t\t\tactiveToolLabelStyle,\n\t\t\t\t\t\t\trenderToolIcon,\n\t\t\t\t\t\t\trenderToolButton,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)}\n\t\t\t\t</View>\n\t\t\t) : null}\n\t\t</View>\n\t);\n}\n\nfunction renderNativeToolButton(input: {\n\treadonly tool: NativeVectorToolDefinition;\n\treadonly value: string;\n\treadonly onChange: (toolId: string) => void;\n\treadonly disabled: boolean;\n\treadonly disabledIds: ReadonlySet<string>;\n\treadonly density: NativeVectorToolbarDensity;\n\treadonly toolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly activeToolButtonStyle?: StyleProp<ViewStyle>;\n\treadonly toolLabelStyle?: StyleProp<TextStyle>;\n\treadonly activeToolLabelStyle?: StyleProp<TextStyle>;\n\treadonly renderToolIcon?: (input: NativeVectorToolbarRenderToolInput) => ReactNode;\n\treadonly renderToolButton?: (\n\t\tinput: NativeVectorToolbarRenderToolInput,\n\t) => ReactNode;\n}): ReactNode {\n\tconst selected = input.tool.id === input.value;\n\tconst toolDisabled =\n\t\tinput.disabled || input.tool.disabled || input.disabledIds.has(input.tool.id);\n\tconst foregroundColor = \"#18181b\";\n\tconst onSelect = () => {\n\t\tif (!toolDisabled) {\n\t\t\tinput.onChange(input.tool.id);\n\t\t}\n\t};\n\tconst renderInput = {\n\t\ttool: input.tool,\n\t\tselected,\n\t\tdisabled: toolDisabled,\n\t\tforegroundColor,\n\t\tonSelect,\n\t};\n\tif (input.renderToolButton) {\n\t\treturn <View key={input.tool.id}>{input.renderToolButton(renderInput)}</View>;\n\t}\n\tconst icon =\n\t\tinput.renderToolIcon?.(renderInput) ??\n\t\trenderNativeToolFallback(input.tool, foregroundColor, input.toolLabelStyle);\n\treturn (\n\t\t<Pressable\n\t\t\tkey={input.tool.id}\n\t\t\taccessibilityLabel={\n\t\t\t\tinput.tool.accessibilityLabel ?? tooltipTextForTool(input.tool)\n\t\t\t}\n\t\t\taccessibilityRole=\"button\"\n\t\t\taccessibilityState={{ selected, disabled: toolDisabled }}\n\t\t\tdisabled={toolDisabled}\n\t\t\tonPress={onSelect}\n\t\t\tstyle={({ pressed }) => [\n\t\t\t\tstyles.toolButton,\n\t\t\t\tinput.density === \"comfortable\" ? styles.comfortableToolButton : undefined,\n\t\t\t\tinput.toolButtonStyle,\n\t\t\t\tselected ? styles.activeToolButton : undefined,\n\t\t\t\tselected ? input.activeToolButtonStyle : undefined,\n\t\t\t\tpressed && !toolDisabled ? styles.pressedToolButton : undefined,\n\t\t\t\ttoolDisabled ? styles.disabledToolButton : undefined,\n\t\t\t]}\n\t\t>\n\t\t\t<View style={styles.iconSlot}>{icon}</View>\n\t\t\t{input.density === \"comfortable\" ? (\n\t\t\t\t<Text\n\t\t\t\t\tnumberOfLines={1}\n\t\t\t\t\tstyle={[\n\t\t\t\t\t\tstyles.toolLabel,\n\t\t\t\t\t\t{ color: foregroundColor },\n\t\t\t\t\t\tinput.toolLabelStyle,\n\t\t\t\t\t\tselected ? input.activeToolLabelStyle : undefined,\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t{input.tool.label}\n\t\t\t\t</Text>\n\t\t\t) : null}\n\t\t</Pressable>\n\t);\n}\n\nfunction renderNativeToolFallback(\n\ttool: NativeVectorToolDefinition,\n\tforegroundColor: string,\n\ttoolLabelStyle?: StyleProp<TextStyle>,\n): ReactNode {\n\treturn (\n\t\t<Text style={[styles.shortLabel, { color: foregroundColor }, toolLabelStyle]}>\n\t\t\t{tool.shortLabel ?? tool.label.slice(0, 1).toUpperCase()}\n\t\t</Text>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tshell: {\n\t\tborderRadius: 8,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0, 0, 0, 0.12)\",\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0.95)\",\n\t\tshadowColor: \"#18181b\",\n\t\tshadowOpacity: 0.08,\n\t\tshadowRadius: 3,\n\t\tshadowOffset: { width: 0, height: 1 },\n\t\televation: 3,\n\t},\n\tcontent: {\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tpaddingHorizontal: 8,\n\t\tpaddingVertical: 6,\n\t},\n\tcomfortableContent: {\n\t\tgap: 6,\n\t},\n\ttoolButton: {\n\t\tminWidth: 40,\n\t\theight: 40,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 2,\n\t\tborderRadius: 6,\n\t\tpaddingHorizontal: 8,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"transparent\",\n\t\tbackgroundColor: \"transparent\",\n\t},\n\tcomfortableToolButton: {\n\t\tminWidth: 56,\n\t\theight: 48,\n\t},\n\tactiveToolButton: {\n\t\tborderColor: \"rgba(24, 24, 27, 0.28)\",\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.1)\",\n\t},\n\tpressedToolButton: {\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.08)\",\n\t},\n\tdisabledToolButton: {\n\t\topacity: 0.42,\n\t},\n\ticonSlot: {\n\t\theight: 22,\n\t\tminWidth: 22,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\tshortLabel: {\n\t\tfontSize: 16,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 20,\n\t},\n\ttoolLabel: {\n\t\tmaxWidth: 68,\n\t\tfontSize: 10,\n\t\tfontWeight: \"600\",\n\t\tlineHeight: 12,\n\t},\n\ttoolLockDivider: {\n\t\twidth: StyleSheet.hairlineWidth,\n\t\talignSelf: \"stretch\",\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.14)\",\n\t\tmarginHorizontal: 6,\n\t\tmarginVertical: 4,\n\t},\n\tlockGlyph: {\n\t\tcolor: \"#18181b\",\n\t\tfontSize: 13,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 16,\n\t},\n\toverflowSpacer: {\n\t\tminWidth: 8,\n\t\tflexGrow: 1,\n\t},\n\toverflowTrigger: {\n\t\tminWidth: 48,\n\t\theight: 40,\n\t\tflexDirection: \"row\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tgap: 4,\n\t\tborderRadius: 6,\n\t\tpaddingHorizontal: 8,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"transparent\",\n\t\tbackgroundColor: \"transparent\",\n\t},\n\toverflowPanel: {\n\t\tposition: \"absolute\",\n\t\tright: 8,\n\t\tbottom: 52,\n\t\twidth: 148,\n\t\tflexDirection: \"row\",\n\t\tflexWrap: \"wrap\",\n\t\tgap: 6,\n\t\tpadding: 10,\n\t\tborderRadius: 10,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"rgba(0, 0, 0, 0.1)\",\n\t\tbackgroundColor: \"rgba(255, 255, 255, 0.98)\",\n\t\tshadowColor: \"#18181b\",\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 24,\n\t\tshadowOffset: { width: 0, height: -4 },\n\t\televation: 8,\n\t},\n\toverflowToolButton: {\n\t\twidth: 40,\n\t\tminWidth: 40,\n\t\theight: 40,\n\t\tpaddingHorizontal: 0,\n\t\tborderRadius: 8,\n\t\tbackgroundColor: \"rgba(24, 24, 27, 0.05)\",\n\t},\n\tshapesGlyph: {\n\t\tcolor: \"#18181b\",\n\t\tfontSize: 17,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 20,\n\t},\n\tchevronGlyph: {\n\t\tcolor: \"#18181b\",\n\t\tfontSize: 13,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 16,\n\t\topacity: 0.75,\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 {\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\t// A freehand stroke is only its ink. Do NOT fall back to the\n\t\t\t// bounding box — that erased/selected the stroke from anywhere\n\t\t\t// inside its (often large, mostly empty) rect.\n\t\t\treturn false;\n\t\t}\n\t\tif (pts && pts.length === 1) {\n\t\t\tconst p = pts[0];\n\t\t\tif (!p) return false;\n\t\t\tconst cw = itemLocalToWorld(p.x, p.y, item.x, item.y, w, h, rot);\n\t\t\tconst dsq = (worldX - cw.x) ** 2 + (worldY - cw.y) ** 2;\n\t\t\treturn dsq <= tolSq;\n\t\t}\n\t\t// No usable path points (malformed item): last-resort bbox test.\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\tbuildArchitecturalCloudSvg,\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 === \"architectural-cloud\") {\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: buildArchitecturalCloudSvg(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","export type NativeVectorToolCursorKind =\n\t| \"crosshair\"\n\t| \"draw\"\n\t| \"marker\"\n\t| \"eraser\"\n\t| \"text\";\n\nexport type NativeVectorToolCursor = {\n\treadonly kind: NativeVectorToolCursorKind;\n\treadonly size: number;\n\treadonly hotspot: {\n\t\treadonly x: number;\n\t\treadonly y: number;\n\t};\n};\n\nexport type NativeVectorToolCursorPoint = {\n\treadonly x: number;\n\treadonly y: number;\n};\n\nexport type NativeVectorToolCursorViewportSize = {\n\treadonly width: number;\n\treadonly height: number;\n};\n\nconst ICON_SIZE = 24;\nconst CENTER_HOTSPOT = { x: 12, y: 12 } as const;\n\nexport function nativeCursorForVectorToolId(\n\ttoolId: string,\n): NativeVectorToolCursor | null {\n\tswitch (toolId) {\n\t\tcase \"rect\":\n\t\tcase \"ellipse\":\n\t\tcase \"architectural-cloud\":\n\t\tcase \"line\":\n\t\tcase \"arrow\":\n\t\tcase \"laser\":\n\t\tcase \"image\":\n\t\t\treturn { kind: \"crosshair\", size: ICON_SIZE, hotspot: CENTER_HOTSPOT };\n\t\tcase \"draw\":\n\t\t\treturn { kind: \"draw\", size: ICON_SIZE, hotspot: { x: 4, y: 18 } };\n\t\tcase \"marker\":\n\t\t\treturn { kind: \"marker\", size: ICON_SIZE, hotspot: { x: 11, y: 14 } };\n\t\tcase \"eraser\":\n\t\t\treturn { kind: \"eraser\", size: ICON_SIZE, hotspot: { x: 12, y: 14 } };\n\t\tcase \"text\":\n\t\t\treturn { kind: \"text\", size: ICON_SIZE, hotspot: CENTER_HOTSPOT };\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nexport function nativeCrosshairToolCursor(): NativeVectorToolCursor {\n\treturn { kind: \"crosshair\", size: ICON_SIZE, hotspot: CENTER_HOTSPOT };\n}\n\nexport function nativeFallbackToolCursorPoint(\n\tsize: NativeVectorToolCursorViewportSize,\n): NativeVectorToolCursorPoint | null {\n\tif (size.width <= 0 || size.height <= 0) return null;\n\treturn { x: size.width / 2, y: size.height / 2 };\n}\n","import {\n\thitTestResizeHandle,\n\thitTestRotateHandle,\n\ttype ResizeHandleId,\n} from \"../interaction/resize-handles\";\nimport { itemPivotWorld } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type NativeCustomShapePlacementOptions = {\n\treadonly toolId: string;\n\treadonly createItem: (args: {\n\t\treadonly id: string;\n\t\treadonly bounds: Rect;\n\t}) => VectorSceneItem;\n};\n\nexport type NativeSelectionHandleHit =\n\t| { readonly kind: \"resize\"; readonly handle: ResizeHandleId }\n\t| { readonly kind: \"rotate\" };\n\nexport type NativeSelectionHandleHitInput = {\n\treadonly selectedItem: VectorSceneItem | null | undefined;\n\treadonly selectedCount: number;\n\treadonly worldPoint: { readonly x: number; readonly y: number };\n\treadonly zoom: number;\n};\n\nconst NATIVE_SELECTION_HANDLE_HIT_RADIUS_PX = 24;\n\nexport function supportsNativeResizeHandles(\n\titem: VectorSceneItem | null | undefined,\n): boolean {\n\tconst k = item?.toolKind;\n\tif (\n\t\tk === \"rect\" ||\n\t\tk === \"ellipse\" ||\n\t\tk === \"architectural-cloud\" ||\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 function hitTestNativeSelectionHandle({\n\tselectedItem,\n\tselectedCount,\n\tworldPoint,\n\tzoom,\n}: NativeSelectionHandleHitInput): NativeSelectionHandleHit | null {\n\tif (selectedCount !== 1) return null;\n\tif (!selectedItem || selectedItem.locked) return null;\n\tif (!supportsNativeResizeHandles(selectedItem)) return null;\n\tconst bounds = normalizeRect(selectedItem.bounds);\n\tconst rotation = selectedItem.rotation ?? 0;\n\tconst handleRadiusWorld =\n\t\tNATIVE_SELECTION_HANDLE_HIT_RADIUS_PX / Math.max(zoom, 1e-9);\n\tconst rotateOffsetWorld = 24 / Math.max(zoom, 1e-9);\n\tif (\n\t\thitTestRotateHandle(\n\t\t\tbounds,\n\t\t\trotation,\n\t\t\tworldPoint.x,\n\t\t\tworldPoint.y,\n\t\t\thandleRadiusWorld,\n\t\t\trotateOffsetWorld,\n\t\t)\n\t) {\n\t\treturn { kind: \"rotate\" };\n\t}\n\tconst handle = hitTestResizeHandle(\n\t\tbounds,\n\t\tworldPoint.x,\n\t\tworldPoint.y,\n\t\thandleRadiusWorld,\n\t\trotation,\n\t);\n\treturn handle ? { kind: \"resize\", handle } : null;\n}\n\nexport function resolveNativeCustomPlacement(\n\ttoolId: string,\n\tcustomPlacement?: NativeCustomShapePlacementOptions,\n\tcustomPlacements?: readonly NativeCustomShapePlacementOptions[],\n): NativeCustomShapePlacementOptions | null {\n\tif (customPlacement?.toolId === toolId) return customPlacement;\n\treturn customPlacements?.find((placement) => placement.toolId === toolId) ?? null;\n}\n\nexport function nativeRotationDragStart(input: {\n\treadonly item: VectorSceneItem;\n\treadonly worldPoint: { readonly x: number; readonly y: number };\n}) {\n\tconst pivotWorld = itemPivotWorld(input.item);\n\treturn {\n\t\tpivotWorld,\n\t\tstartPointerAngleRad: Math.atan2(\n\t\t\tinput.worldPoint.y - pivotWorld.y,\n\t\t\tinput.worldPoint.x - pivotWorld.x,\n\t\t),\n\t\tstartRotation: input.item.rotation ?? 0,\n\t};\n}\n","import {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport {\n\ttype LayoutChangeEvent,\n\tPanResponder,\n\ttype PointerEvent,\n\tView,\n} from \"react-native\";\nimport { Camera2D } from \"../camera/camera\";\nimport {\n\tcollectEraserTargetsAtWorldPoint,\n\thitTestWorldPoint,\n} from \"../interaction/hit-test\";\nimport {\n\tapplyRotationFromPointer,\n\tresizeItemByHandle,\n} from \"../interaction/mutations\";\nimport { type ResizeHandleId, rectFromCorners } from \"../interaction/resize-handles\";\nimport { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect, rectsIntersect } from \"../math/rect\";\nimport {\n\tcreateArchitecturalCloudItem,\n\tcreateEllipseItem,\n\tcreateFreehandStrokeItem,\n\tcreateLineItem,\n\tcreateRectangleItem,\n\tcreateShapeId,\n\tcreateTextItem,\n\tDEFAULT_STROKE_STYLE,\n\tlineEndpointsToLocal,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { LineEndpointsLocal, VectorSceneItem } from \"../scene/types\";\nimport type { PlacementPreview } from \"./NativeInteractionOverlay\";\nimport { NativeInteractionOverlay } from \"./NativeInteractionOverlay\";\nimport { NativeSceneRenderer } from \"./NativeSceneRenderer\";\nimport {\n\tNativeVectorStyleInspector,\n\ttype NativeVectorStyleToolId,\n} from \"./NativeVectorStyleInspector\";\nimport {\n\tERASER_TRAIL_MAX_AGE_MS,\n\tfreshTimedTrailPoints,\n\tLASER_TRAIL_MAX_AGE_MS,\n\ttype TimedTrailPoint,\n} from \"./native-overlay-style\";\nimport {\n\tnativeCrosshairToolCursor,\n\tnativeCursorForVectorToolId,\n\tnativeFallbackToolCursorPoint,\n} from \"./native-tool-cursors\";\nimport {\n\thitTestNativeSelectionHandle,\n\ttype NativeCustomShapePlacementOptions,\n\tnativeRotationDragStart,\n\tresolveNativeCustomPlacement,\n\tsupportsNativeResizeHandles,\n} from \"./native-vector-interactions\";\n\nexport type { PlacementPreview } from \"./NativeInteractionOverlay\";\n\nexport type NativeVectorViewportHandle = {\n\tgetCamera: () => Camera2D | null;\n\trequestRender: () => void;\n\tgetViewportSize: () => { width: number; height: number };\n\tfitWorldRect: (worldRect: Rect, options?: { padding?: number }) => void;\n};\n\nexport type NativeWorldPointerDownDetail = {\n\treadonly toolId: string;\n\treadonly worldX: number;\n\treadonly worldY: number;\n\treadonly screenX: number;\n\treadonly screenY: number;\n};\n\nexport type NativeVectorViewportProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly selectedIds?: readonly string[];\n\treadonly toolId?: string;\n\treadonly toolLocked?: boolean;\n\treadonly interactive?: boolean;\n\treadonly onSelectionChange?: (ids: string[]) => void;\n\treadonly onItemsChange?: (items: VectorSceneItem[]) => void;\n\treadonly onToolChangeRequest?: (toolId: string) => void;\n\treadonly onWorldPointerDown?: (detail: NativeWorldPointerDownDetail) => void;\n\treadonly onCameraChange?: () => void;\n\treadonly customPlacement?: NativeCustomShapePlacementOptions;\n\treadonly customPlacements?: readonly NativeCustomShapePlacementOptions[];\n\treadonly customCrosshairToolIds?: readonly string[];\n\treadonly toolbar?: React.ReactNode;\n\treadonly showStyleInspector?: boolean;\n\treadonly styleInspectorPlacement?: \"bottom\" | \"top-left\";\n};\n\ntype DragState =\n\t| { readonly kind: \"idle\" }\n\t| { readonly kind: \"pan\" }\n\t| {\n\t\t\treadonly kind: \"draw\";\n\t\t\treadonly tool: \"draw\" | \"marker\" | \"laser\";\n\t\t\treadonly points: { x: number; y: number }[];\n\t }\n\t| {\n\t\t\treadonly kind: \"move\";\n\t\t\treadonly ids: string[];\n\t\t\treadonly snapshots: Record<string, VectorSceneItem>;\n\t\t\treadonly startWorld: { x: number; y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"resize\";\n\t\t\treadonly id: string;\n\t\t\treadonly handle: ResizeHandleId;\n\t\t\treadonly snapshot: VectorSceneItem;\n\t\t\treadonly start: {\n\t\t\t\treadonly bounds: Rect;\n\t\t\t\treadonly line?: LineEndpointsLocal;\n\t\t\t};\n\t }\n\t| {\n\t\t\treadonly kind: \"rotate\";\n\t\t\treadonly id: string;\n\t\t\treadonly snapshot: VectorSceneItem;\n\t\t\treadonly pivotWorld: { readonly x: number; readonly y: number };\n\t\t\treadonly startPointerAngleRad: number;\n\t\t\treadonly startRotation: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"marquee\";\n\t\t\treadonly startWorld: { x: number; y: number };\n\t }\n\t| { readonly kind: \"erase\" }\n\t| {\n\t\t\treadonly kind: \"tap\";\n\t\t\treadonly tool: \"note\" | \"text\";\n\t\t\treadonly startWorld: { x: number; y: number };\n\t\t\treadonly startScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"place\";\n\t\t\treadonly tool: PlacementToolId;\n\t\t\treadonly startWorld: { x: number; y: number };\n\t\t\treadonly startScreen: { x: number; y: number };\n\t }\n\t| {\n\t\t\treadonly kind: \"custom-place\";\n\t\t\treadonly tool: string;\n\t\t\treadonly placement: NativeCustomShapePlacementOptions;\n\t\t\treadonly startWorld: { x: number; y: number };\n\t\t\treadonly startScreen: { x: number; y: number };\n\t };\n\ntype PlacementToolId = \"rect\" | \"ellipse\" | \"architectural-cloud\" | \"line\" | \"arrow\";\ntype ScreenPoint = { readonly x: number; readonly y: number };\n\nconst MIN_PLACE_SIZE = 8;\nconst MIN_ARROW_DRAG_PX = 8;\nconst TAP_PX = 20;\nconst MARKER_TOOL_STYLE: StrokeStyle = {\n\tstroke: \"#fde047\",\n\tstrokeWidth: 16,\n\tstrokeOpacity: 0.5,\n};\n\nfunction isPlacementTool(toolId: string): toolId is PlacementToolId {\n\treturn (\n\t\ttoolId === \"rect\" ||\n\t\ttoolId === \"ellipse\" ||\n\t\ttoolId === \"architectural-cloud\" ||\n\t\ttoolId === \"line\" ||\n\t\ttoolId === \"arrow\"\n\t);\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\nfunction placementPreviewForTool(\n\ttoolId: PlacementToolId,\n\tstart: { x: number; y: number },\n\tend: { x: number; y: number },\n): PlacementPreview {\n\tif (\n\t\ttoolId === \"rect\" ||\n\t\ttoolId === \"ellipse\" ||\n\t\ttoolId === \"architectural-cloud\"\n\t) {\n\t\treturn { kind: toolId, rect: rectFromCorners(start, end) };\n\t}\n\treturn { kind: toolId, start, end };\n}\n\nfunction defaultPlacementWorld(\n\ttoolId: PlacementToolId,\n\tcenter: { x: number; y: number },\n): {\n\treadonly raw: Rect;\n\treadonly lineWorld?: readonly [\n\t\t{ readonly x: number; readonly y: number },\n\t\t{ readonly x: number; readonly y: number },\n\t];\n} {\n\tconst cx = center.x;\n\tconst cy = center.y;\n\tif (toolId === \"rect\") {\n\t\treturn { raw: { x: cx - 60, y: cy - 40, width: 120, height: 80 } };\n\t}\n\tif (toolId === \"ellipse\") {\n\t\treturn { raw: { x: cx - 70, y: cy - 45, width: 140, height: 90 } };\n\t}\n\tif (toolId === \"architectural-cloud\") {\n\t\treturn { raw: { x: cx - 90, y: cy - 50, width: 180, height: 100 } };\n\t}\n\tconst start = { x: cx - 50, y: cy };\n\tconst end = { x: cx + 50, y: cy };\n\treturn {\n\t\traw: rectFromCorners(start, end),\n\t\tlineWorld: [start, end],\n\t};\n}\n\nfunction collectIdsInRect(\n\titems: readonly VectorSceneItem[],\n\tmarquee: Rect,\n): string[] {\n\tconst m = normalizeRect(marquee);\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\nfunction screenPointFromPointerEvent(event: PointerEvent): ScreenPoint {\n\tconst nativeEvent = event.nativeEvent;\n\tconst x = Number.isFinite(nativeEvent.offsetX)\n\t\t? nativeEvent.offsetX\n\t\t: nativeEvent.x;\n\tconst y = Number.isFinite(nativeEvent.offsetY)\n\t\t? nativeEvent.offsetY\n\t\t: nativeEvent.y;\n\treturn { x, y };\n}\n\nfunction 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) return;\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 const NativeVectorViewport = forwardRef<\n\tNativeVectorViewportHandle,\n\tNativeVectorViewportProps\n>(function NativeVectorViewport(\n\t{\n\t\titems,\n\t\tselectedIds = [],\n\t\ttoolId = \"hand\",\n\t\ttoolLocked = false,\n\t\tinteractive = false,\n\t\tonSelectionChange,\n\t\tonItemsChange,\n\t\tonToolChangeRequest,\n\t\tonWorldPointerDown,\n\t\tonCameraChange,\n\t\tcustomPlacement,\n\t\tcustomPlacements = [],\n\t\tcustomCrosshairToolIds = [],\n\t\ttoolbar,\n\t\tshowStyleInspector = false,\n\t\tstyleInspectorPlacement = \"bottom\",\n\t},\n\tref,\n) {\n\tconst [size, setSize] = useState({ width: 0, height: 0 });\n\tconst cameraRef = useRef<Camera2D | null>(null);\n\tconst toolIdRef = useRef(toolId);\n\ttoolIdRef.current = toolId;\n\tconst toolLockedRef = useRef(toolLocked);\n\ttoolLockedRef.current = toolLocked;\n\tconst onToolChangeRequestRef = useRef(onToolChangeRequest);\n\tonToolChangeRequestRef.current = onToolChangeRequest;\n\tconst onWorldPointerDownRef = useRef(onWorldPointerDown);\n\tonWorldPointerDownRef.current = onWorldPointerDown;\n\tconst onCameraChangeRef = useRef(onCameraChange);\n\tonCameraChangeRef.current = onCameraChange;\n\tconst onItemsChangeRef = useRef(onItemsChange);\n\tonItemsChangeRef.current = onItemsChange;\n\tconst customPlacementRef = useRef(customPlacement);\n\tcustomPlacementRef.current = customPlacement;\n\tconst customPlacementsRef = useRef(customPlacements);\n\tcustomPlacementsRef.current = customPlacements;\n\tconst customCrosshairToolIdsRef = useRef(customCrosshairToolIds);\n\tcustomCrosshairToolIdsRef.current = customCrosshairToolIds;\n\tconst onSelectionChangeRef = useRef(onSelectionChange);\n\tonSelectionChangeRef.current = onSelectionChange;\n\tconst itemsRef = useRef(items);\n\titemsRef.current = items;\n\tconst selectedIdsRef = useRef(selectedIds);\n\tselectedIdsRef.current = selectedIds;\n\n\tconst dragStateRef = useRef<DragState>({ kind: \"idle\" });\n\n\tconst [placementPreview, setPlacementPreview] = useState<PlacementPreview | null>(\n\t\tnull,\n\t);\n\tconst [eraserTrail, setEraserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [laserTrail, setLaserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [toolCursorPoint, setToolCursorPoint] = useState<ScreenPoint | null>(null);\n\tconst laserClearTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst strokeStyleRef = useRef<StrokeStyle>({ ...DEFAULT_STROKE_STYLE });\n\tconst markerStrokeStyleRef = useRef<StrokeStyle>({ ...MARKER_TOOL_STYLE });\n\tconst styleBeforeMarkerRef = useRef<StrokeStyle>({ ...DEFAULT_STROKE_STYLE });\n\tconst lastToolIdRef = useRef(toolId);\n\tconst [strokeStyleState, setStrokeStyleState] = useState<StrokeStyle>({\n\t\t...DEFAULT_STROKE_STYLE,\n\t});\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tif (laserClearTimerRef.current) {\n\t\t\t\tclearTimeout(laserClearTimerRef.current);\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\tuseEffect(() => {\n\t\tif (eraserTrail.length === 0 && laserTrail.length === 0) return;\n\t\tconst timer = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tsetEraserTrail((prev) =>\n\t\t\t\tfreshTimedTrailPoints(prev, now, ERASER_TRAIL_MAX_AGE_MS),\n\t\t\t);\n\t\t\tsetLaserTrail((prev) =>\n\t\t\t\tfreshTimedTrailPoints(prev, now, LASER_TRAIL_MAX_AGE_MS),\n\t\t\t);\n\t\t}, 50);\n\t\treturn () => clearInterval(timer);\n\t}, [eraserTrail.length, laserTrail.length]);\n\tuseEffect(() => {\n\t\tconst previousToolId = lastToolIdRef.current;\n\t\tconst current = strokeStyleRef.current;\n\t\tlet next = current;\n\t\tif (toolId === \"marker\") {\n\t\t\tif (previousToolId !== \"marker\") {\n\t\t\t\tstyleBeforeMarkerRef.current = current;\n\t\t\t}\n\t\t\tnext = markerStrokeStyleRef.current;\n\t\t} else if (previousToolId === \"marker\") {\n\t\t\tmarkerStrokeStyleRef.current = current;\n\t\t\tconst restored = styleBeforeMarkerRef.current;\n\t\t\tnext = {\n\t\t\t\tstroke: restored.stroke,\n\t\t\t\tstrokeWidth:\n\t\t\t\t\ttoolId === \"draw\" &&\n\t\t\t\t\trestored.strokeWidth === DEFAULT_STROKE_STYLE.strokeWidth\n\t\t\t\t\t\t? 10\n\t\t\t\t\t\t: restored.strokeWidth,\n\t\t\t\t...(restored.strokeDash != null ? { strokeDash: restored.strokeDash } : {}),\n\t\t\t};\n\t\t} else if (toolId === \"draw\") {\n\t\t\tnext = {\n\t\t\t\t...current,\n\t\t\t\tstrokeWidth:\n\t\t\t\t\tcurrent.strokeWidth === DEFAULT_STROKE_STYLE.strokeWidth\n\t\t\t\t\t\t? 10\n\t\t\t\t\t\t: current.strokeWidth,\n\t\t\t};\n\t\t} else if (isDefaultMarkerToolStyle(current)) {\n\t\t\tnext = {\n\t\t\t\tstroke: DEFAULT_STROKE_STYLE.stroke,\n\t\t\t\tstrokeWidth: DEFAULT_STROKE_STYLE.strokeWidth,\n\t\t\t\t...(current.strokeDash != null ? { strokeDash: current.strokeDash } : {}),\n\t\t\t};\n\t\t}\n\t\tstrokeStyleRef.current = next;\n\t\tsetStrokeStyleState(next);\n\t\tlastToolIdRef.current = toolId;\n\t}, [toolId]);\n\n\tconst patchCurrentStrokeStyle = useCallback((patch: Partial<StrokeStyle>) => {\n\t\tconst next = { ...strokeStyleRef.current, ...patch };\n\t\tstrokeStyleRef.current = next;\n\t\tif (toolIdRef.current === \"marker\") {\n\t\t\tmarkerStrokeStyleRef.current = next;\n\t\t}\n\t\tsetStrokeStyleState(next);\n\t}, []);\n\n\tconst [eraserPreviewIds, setEraserPreviewIds] = useState<string[]>([]);\n\tconst eraserPreviewIdSetRef = useRef<Set<string>>(new Set());\n\n\tconst requestSelectToolAfterUse = useCallback(() => {\n\t\tif (!toolLockedRef.current) {\n\t\t\tonToolChangeRequestRef.current?.(\"select\");\n\t\t}\n\t}, []);\n\n\tif (!cameraRef.current) {\n\t\tcameraRef.current = new Camera2D({ minZoom: 0.05, maxZoom: 32 });\n\t}\n\n\tconst camera = cameraRef.current;\n\tconst [cameraTick, setCameraTick] = useState(0);\n\n\tconst screenToWorld = useCallback(\n\t\t(sx: number, sy: number): { worldX: number; worldY: number } => {\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!cam) return { worldX: 0, worldY: 0 };\n\t\t\treturn cam.screenToWorld(sx, sy);\n\t\t},\n\t\t[],\n\t);\n\n\tconst requestRender = useCallback(() => {\n\t\tsetCameraTick((n) => n + 1);\n\t\tonCameraChangeRef.current?.();\n\t}, []);\n\n\tconst cursorForToolId = useCallback((nextToolId: string) => {\n\t\tconst builtInCursor = nativeCursorForVectorToolId(nextToolId);\n\t\tif (builtInCursor) return builtInCursor;\n\t\treturn customCrosshairToolIdsRef.current.includes(nextToolId)\n\t\t\t? nativeCrosshairToolCursor()\n\t\t\t: null;\n\t}, []);\n\n\tconst onLayout = useCallback(\n\t\t(e: LayoutChangeEvent) => {\n\t\t\tconst { width, height } = e.nativeEvent.layout;\n\t\t\tconst nextSize = { width, height };\n\t\t\tsetSize(nextSize);\n\t\t\tif (!interactive) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!cursorForToolId(toolIdRef.current)) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetToolCursorPoint(\n\t\t\t\t(current) => current ?? nativeFallbackToolCursorPoint(nextSize),\n\t\t\t);\n\t\t},\n\t\t[cursorForToolId, interactive],\n\t);\n\n\tconst updateToolCursorPoint = useCallback(\n\t\t(point: ScreenPoint) => {\n\t\t\tif (!interactive) return;\n\t\t\tif (!cursorForToolId(toolIdRef.current)) return;\n\t\t\tsetToolCursorPoint(point);\n\t\t},\n\t\t[cursorForToolId, interactive],\n\t);\n\n\tconst hideToolCursor = useCallback(() => {\n\t\tsetToolCursorPoint(null);\n\t}, []);\n\n\tconst showFallbackToolCursor = useCallback(\n\t\t(nextToolId: string) => {\n\t\t\tif (!interactive) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!cursorForToolId(nextToolId)) {\n\t\t\t\tsetToolCursorPoint(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetToolCursorPoint(\n\t\t\t\t(current) => current ?? nativeFallbackToolCursorPoint(size),\n\t\t\t);\n\t\t},\n\t\t[cursorForToolId, interactive, size],\n\t);\n\n\tuseEffect(() => {\n\t\tshowFallbackToolCursor(toolId);\n\t}, [showFallbackToolCursor, toolId]);\n\n\tconst selectedItems = useMemo(\n\t\t() => items.filter((it) => selectedIds.includes(it.id)),\n\t\t[items, selectedIds],\n\t);\n\n\t// Items queued for eraser deletion are hidden from the scene and shown\n\t// dimmed (real geometry) by the overlay instead of a gray skeleton.\n\tconst sceneItems = useMemo(() => {\n\t\tif (eraserPreviewIds.length === 0) return items;\n\t\tconst hidden = new Set(eraserPreviewIds);\n\t\treturn items.filter((it) => !hidden.has(it.id));\n\t}, [items, eraserPreviewIds]);\n\n\tconst showResizeHandles =\n\t\tinteractive &&\n\t\tselectedItems.length === 1 &&\n\t\t!selectedItems[0]?.locked &&\n\t\tsupportsNativeResizeHandles(selectedItems[0]);\n\n\t// ─── Gesture state (refs, not state — avoid re-renders) ────────────\n\n\tconst lastPinchDist = useRef<number | null>(null);\n\tconst lastPanPoint = useRef<{ x: number; y: number } | null>(null);\n\n\tconst beginDragAtScreenPoint = useCallback(\n\t\t(point: ScreenPoint) => {\n\t\t\tlastPinchDist.current = null;\n\t\t\tlastPanPoint.current = null;\n\n\t\t\tconst sx = point.x;\n\t\t\tconst sy = point.y;\n\t\t\tupdateToolCursorPoint(point);\n\n\t\t\tif (!interactive) {\n\t\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst tool = toolIdRef.current;\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!cam) return;\n\n\t\t\tconst { worldX, worldY } = screenToWorld(sx, sy);\n\n\t\t\tif (tool === \"hand\") {\n\t\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (tool === \"select\") {\n\t\t\t\tconst currentSelectedIds = selectedIdsRef.current;\n\t\t\t\tconst selectedItem =\n\t\t\t\t\tcurrentSelectedIds.length === 1\n\t\t\t\t\t\t? itemsRef.current.find((item) => item.id === currentSelectedIds[0])\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst selectionHandle = hitTestNativeSelectionHandle({\n\t\t\t\t\tselectedItem,\n\t\t\t\t\tselectedCount: currentSelectedIds.length,\n\t\t\t\t\tworldPoint: { x: worldX, y: worldY },\n\t\t\t\t\tzoom: cam.zoom,\n\t\t\t\t});\n\t\t\t\tif (selectionHandle && selectedItem) {\n\t\t\t\t\tif (selectionHandle.kind === \"rotate\") {\n\t\t\t\t\t\tconst rotationStart = nativeRotationDragStart({\n\t\t\t\t\t\t\titem: selectedItem,\n\t\t\t\t\t\t\tworldPoint: { x: worldX, y: worldY },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\t\tkind: \"rotate\",\n\t\t\t\t\t\t\tid: selectedItem.id,\n\t\t\t\t\t\t\tsnapshot: selectedItem,\n\t\t\t\t\t\t\t...rotationStart,\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\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"resize\",\n\t\t\t\t\t\tid: selectedItem.id,\n\t\t\t\t\t\thandle: selectionHandle.handle,\n\t\t\t\t\t\tsnapshot: selectedItem,\n\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\tbounds: selectedItem.bounds,\n\t\t\t\t\t\t\tline: selectedItem.line,\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\tconst hit = hitTestWorldPoint(itemsRef.current, worldX, worldY, {\n\t\t\t\t\tlineHitWorld: 10 / cam.zoom,\n\t\t\t\t\tignoreLocked: true,\n\t\t\t\t});\n\t\t\t\tif (hit) {\n\t\t\t\t\tconst cur = selectedIdsRef.current;\n\t\t\t\t\tconst ids = cur.includes(hit.id) ? [...cur] : [hit.id];\n\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\tfor (const id of ids) {\n\t\t\t\t\t\tconst it = itemsRef.current.find((i) => i.id === id);\n\t\t\t\t\t\tif (it) snapshots[id] = it;\n\t\t\t\t\t}\n\t\t\t\t\tdragStateRef.current = {\n\t\t\t\t\t\tkind: \"move\",\n\t\t\t\t\t\tids,\n\t\t\t\t\t\tsnapshots,\n\t\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\t};\n\t\t\t\t\tif (!cur.includes(hit.id)) {\n\t\t\t\t\t\tonSelectionChangeRef.current?.([hit.id]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tonSelectionChangeRef.current?.([]);\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};\n\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\tkind: \"marquee\",\n\t\t\t\t\t\trect: { x: worldX, y: worldY, width: 0, height: 0 },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (tool === \"draw\" || tool === \"marker\" || tool === \"laser\") {\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"draw\",\n\t\t\t\t\ttool,\n\t\t\t\t\tpoints: [{ x: worldX, y: worldY }],\n\t\t\t\t};\n\t\t\t\tif (tool === \"laser\") {\n\t\t\t\t\tif (laserClearTimerRef.current) {\n\t\t\t\t\t\tclearTimeout(laserClearTimerRef.current);\n\t\t\t\t\t\tlaserClearTimerRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t\tsetLaserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\t} else {\n\t\t\t\t\tsetPlacementPreview({\n\t\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\tpoints: [{ x: worldX, y: worldY }],\n\t\t\t\t\t\tstyle: { ...strokeStyleRef.current },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (tool === \"eraser\") {\n\t\t\t\tdragStateRef.current = { kind: \"erase\" };\n\t\t\t\teraserPreviewIdSetRef.current = new Set();\n\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\tsetEraserTrail([{ x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\titemsRef.current,\n\t\t\t\t\tworldX,\n\t\t\t\t\tworldY,\n\t\t\t\t\t{ lineHitWorld: 10 / cam.zoom, ignoreLocked: true },\n\t\t\t\t);\n\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\teraserPreviewIdSetRef.current.add(id);\n\t\t\t\t}\n\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdSetRef.current));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isPlacementTool(tool)) {\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"place\",\n\t\t\t\t\ttool,\n\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\tstartScreen: { x: sx, y: sy },\n\t\t\t\t};\n\t\t\t\tsetPlacementPreview(\n\t\t\t\t\tplacementPreviewForTool(\n\t\t\t\t\t\ttool,\n\t\t\t\t\t\t{ x: worldX, y: worldY },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tx: worldX,\n\t\t\t\t\t\t\ty: worldY,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst customPlacement = resolveNativeCustomPlacement(\n\t\t\t\ttool,\n\t\t\t\tcustomPlacementRef.current,\n\t\t\t\tcustomPlacementsRef.current,\n\t\t\t);\n\t\t\tif (customPlacement) {\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"custom-place\",\n\t\t\t\t\ttool,\n\t\t\t\t\tplacement: customPlacement,\n\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\tstartScreen: { x: sx, y: sy },\n\t\t\t\t};\n\t\t\t\tsetPlacementPreview({\n\t\t\t\t\tkind: \"rect\",\n\t\t\t\t\trect: { x: worldX, y: worldY, width: 0, height: 0 },\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (tool === \"note\" || tool === \"text\") {\n\t\t\t\tdragStateRef.current = {\n\t\t\t\t\tkind: \"tap\",\n\t\t\t\t\ttool,\n\t\t\t\t\tstartWorld: { x: worldX, y: worldY },\n\t\t\t\t\tstartScreen: { x: sx, y: sy },\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst handleWorldPointerDown = onWorldPointerDownRef.current;\n\t\t\tif (handleWorldPointerDown) {\n\t\t\t\thandleWorldPointerDown({\n\t\t\t\t\ttoolId: tool,\n\t\t\t\t\tworldX,\n\t\t\t\t\tworldY,\n\t\t\t\t\tscreenX: sx,\n\t\t\t\t\tscreenY: sy,\n\t\t\t\t});\n\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t},\n\t\t[interactive, requestSelectToolAfterUse, screenToWorld, updateToolCursorPoint],\n\t);\n\n\tconst applyDragMoveAtScreenPoint = useCallback(\n\t\t(point: ScreenPoint, pagePoint?: ScreenPoint) => {\n\t\t\tconst cam = cameraRef.current;\n\t\t\tif (!cam) return;\n\n\t\t\tupdateToolCursorPoint(point);\n\t\t\tconst { worldX, worldY } = screenToWorld(point.x, point.y);\n\n\t\t\tconst st = dragStateRef.current;\n\n\t\t\t// Pan camera\n\t\t\tif (st.kind === \"pan\") {\n\t\t\t\tconst current = pagePoint ?? point;\n\t\t\t\tif (lastPanPoint.current) {\n\t\t\t\t\tconst dx = current.x - lastPanPoint.current.x;\n\t\t\t\t\tconst dy = current.y - lastPanPoint.current.y;\n\t\t\t\t\tcam.x += dx;\n\t\t\t\t\tcam.y += dy;\n\t\t\t\t\trequestRender();\n\t\t\t\t}\n\t\t\t\tlastPanPoint.current = current;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlastPanPoint.current = null;\n\n\t\t\t// Draw stroke\n\t\t\tif (st.kind === \"draw\") {\n\t\t\t\tconst pts = st.points;\n\t\t\t\tconst last = pts[pts.length - 1];\n\t\t\t\tconst dx = worldX - (last?.x ?? worldX);\n\t\t\t\tconst dy = worldY - (last?.y ?? worldY);\n\t\t\t\tconst shouldAppendPoint = Math.hypot(dx, dy) > 0.5 / cam.zoom;\n\t\t\t\tif (shouldAppendPoint) {\n\t\t\t\t\tpts.push({ x: worldX, y: worldY });\n\t\t\t\t}\n\t\t\t\tif (st.tool === \"laser\") {\n\t\t\t\t\tif (shouldAppendPoint) {\n\t\t\t\t\t\tsetLaserTrail((prev) => [\n\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t{ x: worldX, y: worldY, t: Date.now() },\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\t\t\t\tsetPlacementPreview({\n\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\ttool: st.tool,\n\t\t\t\t\tpoints: [...pts],\n\t\t\t\t\tstyle: { ...strokeStyleRef.current },\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Move items\n\t\t\tif (st.kind === \"move\") {\n\t\t\t\tconst dx = worldX - st.startWorld.x;\n\t\t\t\tconst dy = worldY - st.startWorld.y;\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst nextList = itemsRef.current.map((it) => {\n\t\t\t\t\tconst snap = st.snapshots[it.id];\n\t\t\t\t\tif (!snap) return it;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...snap,\n\t\t\t\t\t\tx: snap.x + dx,\n\t\t\t\t\t\ty: snap.y + dy,\n\t\t\t\t\t\tbounds: {\n\t\t\t\t\t\t\t...snap.bounds,\n\t\t\t\t\t\t\tx: snap.bounds.x + dx,\n\t\t\t\t\t\t\ty: snap.bounds.y + dy,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tchange(nextList);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"rotate\") {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst angle = Math.atan2(worldY - st.pivotWorld.y, worldX - st.pivotWorld.x);\n\t\t\t\tconst next = applyRotationFromPointer(\n\t\t\t\t\tst.snapshot,\n\t\t\t\t\tst.startRotation,\n\t\t\t\t\tst.startPointerAngleRad,\n\t\t\t\t\tangle,\n\t\t\t\t);\n\t\t\t\tchange(itemsRef.current.map((item) => (item.id === st.id ? next : item)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"resize\") {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst next = resizeItemByHandle(st.snapshot, st.start, st.handle, {\n\t\t\t\t\tx: worldX,\n\t\t\t\t\ty: worldY,\n\t\t\t\t});\n\t\t\t\tchange(itemsRef.current.map((item) => (item.id === st.id ? next : item)));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Marquee selection\n\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\tconst a = st.startWorld;\n\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\tconst rect = {\n\t\t\t\t\tx: Math.min(a.x, b.x),\n\t\t\t\t\ty: Math.min(a.y, b.y),\n\t\t\t\t\twidth: Math.abs(b.x - a.x),\n\t\t\t\t\theight: Math.abs(b.y - a.y),\n\t\t\t\t};\n\t\t\t\tsetPlacementPreview({ kind: \"marquee\", rect });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Eraser\n\t\t\tif (st.kind === \"erase\") {\n\t\t\t\tsetEraserTrail((prev) => [...prev, { x: worldX, y: worldY, t: Date.now() }]);\n\t\t\t\tconst toErase = collectEraserTargetsAtWorldPoint(\n\t\t\t\t\titemsRef.current,\n\t\t\t\t\tworldX,\n\t\t\t\t\tworldY,\n\t\t\t\t\t{ lineHitWorld: 10 / cam.zoom, ignoreLocked: true },\n\t\t\t\t);\n\t\t\t\tfor (const id of toErase) {\n\t\t\t\t\teraserPreviewIdSetRef.current.add(id);\n\t\t\t\t}\n\t\t\t\tsetEraserPreviewIds(Array.from(eraserPreviewIdSetRef.current));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"place\") {\n\t\t\t\tsetPlacementPreview(\n\t\t\t\t\tplacementPreviewForTool(st.tool, st.startWorld, {\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);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"custom-place\") {\n\t\t\t\tsetPlacementPreview({\n\t\t\t\t\tkind: \"rect\",\n\t\t\t\t\trect: rectFromCorners(st.startWorld, { x: worldX, y: worldY }),\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\t[requestRender, screenToWorld, updateToolCursorPoint],\n\t);\n\n\tconst finishDragAtScreenPoint = useCallback(\n\t\t(point: ScreenPoint) => {\n\t\t\tlastPinchDist.current = null;\n\t\t\tlastPanPoint.current = null;\n\t\t\tupdateToolCursorPoint(point);\n\n\t\t\tconst st = dragStateRef.current;\n\n\t\t\tif (st.kind === \"draw\") {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tif (st.tool === \"laser\") {\n\t\t\t\t\tif (laserClearTimerRef.current) {\n\t\t\t\t\t\tclearTimeout(laserClearTimerRef.current);\n\t\t\t\t\t}\n\t\t\t\t\tlaserClearTimerRef.current = setTimeout(() => {\n\t\t\t\t\t\tsetLaserTrail([]);\n\t\t\t\t\t\tlaserClearTimerRef.current = null;\n\t\t\t\t\t}, 650);\n\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (st.points.length < 1) return;\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst id = createShapeId();\n\t\t\t\tconst item = createFreehandStrokeItem(\n\t\t\t\t\tid,\n\t\t\t\t\tst.points,\n\t\t\t\t\tst.tool,\n\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t);\n\t\t\t\tif (item) {\n\t\t\t\t\tchange([...itemsRef.current, item]);\n\t\t\t\t}\n\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"move\") {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"resize\" || st.kind === \"rotate\") {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"marquee\") {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(point.x, point.y);\n\t\t\t\tconst a = st.startWorld;\n\t\t\t\tif (typeof worldX !== \"number\" || typeof worldY !== \"number\") return;\n\t\t\t\tconst raw = {\n\t\t\t\t\tx: Math.min(a.x, worldX),\n\t\t\t\t\ty: Math.min(a.y, worldY),\n\t\t\t\t\twidth: Math.abs(worldX - a.x),\n\t\t\t\t\theight: Math.abs(worldY - a.y),\n\t\t\t\t};\n\t\t\t\tconst picked = collectIdsInRect(itemsRef.current, raw);\n\t\t\t\tonSelectionChangeRef.current?.(picked);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"erase\") {\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (change && eraserPreviewIdSetRef.current.size > 0) {\n\t\t\t\t\tconst idSet = new Set(eraserPreviewIdSetRef.current);\n\t\t\t\t\tchange(itemsRef.current.filter((i) => !idSet.has(i.id)));\n\t\t\t\t}\n\t\t\t\teraserPreviewIdSetRef.current.clear();\n\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\tsetEraserTrail([]);\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"place\") {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(point.x, point.y);\n\t\t\t\tconst a = st.startWorld;\n\t\t\t\tconst b = { x: worldX, y: worldY };\n\t\t\t\tconst screenDx = point.x - st.startScreen.x;\n\t\t\t\tconst screenDy = point.y - st.startScreen.y;\n\t\t\t\tif (\n\t\t\t\t\tst.tool === \"arrow\" &&\n\t\t\t\t\tMath.hypot(screenDx, screenDy) < MIN_ARROW_DRAG_PX\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet raw = rectFromCorners(a, b);\n\t\t\t\tlet br = normalizeRect(raw);\n\t\t\t\tlet lineStart = a;\n\t\t\t\tlet lineEnd = b;\n\t\t\t\tif (br.width < MIN_PLACE_SIZE || br.height < MIN_PLACE_SIZE) {\n\t\t\t\t\tconst center = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n\t\t\t\t\tconst defaults = defaultPlacementWorld(st.tool, center);\n\t\t\t\t\traw = defaults.raw;\n\t\t\t\t\tbr = normalizeRect(raw);\n\t\t\t\t\tif (defaults.lineWorld) {\n\t\t\t\t\t\tconst [defaultStart, defaultEnd] = defaults.lineWorld;\n\t\t\t\t\t\tlineStart = defaultStart;\n\t\t\t\t\t\tlineEnd = defaultEnd;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst id = createShapeId();\n\t\t\t\tconst style = strokeStyleRef.current;\n\t\t\t\tif (st.tool === \"rect\") {\n\t\t\t\t\tchange([...itemsRef.current, createRectangleItem(id, raw, style)]);\n\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (st.tool === \"ellipse\") {\n\t\t\t\t\tchange([...itemsRef.current, createEllipseItem(id, raw, style)]);\n\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (st.tool === \"architectural-cloud\") {\n\t\t\t\t\tchange([\n\t\t\t\t\t\t...itemsRef.current,\n\t\t\t\t\t\tcreateArchitecturalCloudItem(id, raw, style),\n\t\t\t\t\t]);\n\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst line = lineEndpointsToLocal(br, lineStart, lineEnd);\n\t\t\t\tchange([...itemsRef.current, createLineItem(id, br, line, st.tool, style)]);\n\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"custom-place\") {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\tsetPlacementPreview(null);\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tconst { worldX, worldY } = screenToWorld(point.x, point.y);\n\t\t\t\tconst center = {\n\t\t\t\t\tx: (st.startWorld.x + worldX) / 2,\n\t\t\t\t\ty: (st.startWorld.y + worldY) / 2,\n\t\t\t\t};\n\t\t\t\tconst raw = rectFromCorners(st.startWorld, { x: worldX, y: worldY });\n\t\t\t\tconst normalized = normalizeRect(raw);\n\t\t\t\tconst bounds =\n\t\t\t\t\tnormalized.width < MIN_PLACE_SIZE || normalized.height < MIN_PLACE_SIZE\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tx: center.x - 60,\n\t\t\t\t\t\t\t\ty: center.y - 40,\n\t\t\t\t\t\t\t\twidth: 120,\n\t\t\t\t\t\t\t\theight: 80,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: normalized;\n\t\t\t\tconst id = createShapeId();\n\t\t\t\tconst item = st.placement.createItem({ id, bounds });\n\t\t\t\tchange([...itemsRef.current, item]);\n\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (st.kind === \"tap\") {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\tconst screenDx = point.x - st.startScreen.x;\n\t\t\t\tconst screenDy = point.y - st.startScreen.y;\n\t\t\t\tif (Math.hypot(screenDx, screenDy) > TAP_PX) return;\n\t\t\t\tconst change = onItemsChangeRef.current;\n\t\t\t\tif (!change) return;\n\t\t\t\tif (st.tool === \"text\") {\n\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\tconst item = createTextItem(\n\t\t\t\t\t\tid,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tx: st.startWorld.x - 4,\n\t\t\t\t\t\t\ty: st.startWorld.y - 18,\n\t\t\t\t\t\t\twidth: 160,\n\t\t\t\t\t\t\theight: 26,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"Text\",\n\t\t\t\t\t\tstrokeStyleRef.current,\n\t\t\t\t\t\t18,\n\t\t\t\t\t);\n\t\t\t\t\tchange([...itemsRef.current, item]);\n\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t}\n\t\t\t\tif (st.tool === \"note\") {\n\t\t\t\t\tconst id = createShapeId();\n\t\t\t\t\tconst note: VectorSceneItem = {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tx: st.startWorld.x - 70,\n\t\t\t\t\t\ty: st.startWorld.y - 40,\n\t\t\t\t\t\tbounds: {\n\t\t\t\t\t\t\tx: st.startWorld.x - 70,\n\t\t\t\t\t\t\ty: st.startWorld.y - 40,\n\t\t\t\t\t\t\twidth: 140,\n\t\t\t\t\t\t\theight: 80,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildrenSvg:\n\t\t\t\t\t\t\t`<rect width=\"140\" height=\"80\" rx=\"8\" fill=\"#fef08a\" stroke=\"#facc15\" stroke-width=\"1\" />` +\n\t\t\t\t\t\t\t`<text x=\"10\" y=\"22\" fill=\"#1f2937\" font-size=\"12\" font-family=\"system-ui\">Nota</text>`,\n\t\t\t\t\t\ttoolKind: \"custom\",\n\t\t\t\t\t};\n\t\t\t\t\tchange([...itemsRef.current, note]);\n\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\trequestSelectToolAfterUse();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t},\n\t\t[requestSelectToolAfterUse, screenToWorld, updateToolCursorPoint],\n\t);\n\n\tconst handlePointerDown = useCallback(\n\t\t(event: PointerEvent) => {\n\t\t\tconst point = screenPointFromPointerEvent(event);\n\t\t\tbeginDragAtScreenPoint(point);\n\t\t},\n\t\t[beginDragAtScreenPoint],\n\t);\n\n\tconst handlePointerMove = useCallback(\n\t\t(event: PointerEvent) => {\n\t\t\tconst point = screenPointFromPointerEvent(event);\n\t\t\tif (dragStateRef.current.kind !== \"idle\") {\n\t\t\t\tapplyDragMoveAtScreenPoint(point, point);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tupdateToolCursorPoint(point);\n\t\t},\n\t\t[applyDragMoveAtScreenPoint, updateToolCursorPoint],\n\t);\n\n\tconst handlePointerUp = useCallback(\n\t\t(event: PointerEvent) => {\n\t\t\tconst point = screenPointFromPointerEvent(event);\n\t\t\tfinishDragAtScreenPoint(point);\n\t\t},\n\t\t[finishDragAtScreenPoint],\n\t);\n\n\tconst panResponder = useMemo(\n\t\t() =>\n\t\t\tPanResponder.create({\n\t\t\t\tonStartShouldSetPanResponder: () => true,\n\t\t\t\tonMoveShouldSetPanResponder: () => true,\n\n\t\t\t\tonPanResponderGrant: (evt) => {\n\t\t\t\t\tconst touches = evt.nativeEvent.touches;\n\t\t\t\t\tconst sx = evt.nativeEvent.locationX;\n\t\t\t\t\tconst sy = evt.nativeEvent.locationY;\n\n\t\t\t\t\tif (touches && touches.length >= 2) {\n\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\tdragStateRef.current = { kind: \"pan\" };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbeginDragAtScreenPoint({ x: sx, y: sy });\n\t\t\t\t},\n\n\t\t\t\tonPanResponderMove: (evt) => {\n\t\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\t\tif (!cam) return;\n\n\t\t\t\t\tconst touches = evt.nativeEvent.touches;\n\t\t\t\t\tconst sx = evt.nativeEvent.locationX;\n\t\t\t\t\tconst sy = evt.nativeEvent.locationY;\n\t\t\t\t\tconst pageX = evt.nativeEvent.pageX;\n\t\t\t\t\tconst pageY = evt.nativeEvent.pageY;\n\n\t\t\t\t\t// Pinch zoom (2 fingers)\n\t\t\t\t\tif (touches && touches.length >= 2) {\n\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\tconst t0 = touches[0] as { pageX: number; pageY: number } | undefined;\n\t\t\t\t\t\tconst t1 = touches[1] as { pageX: number; pageY: number } | undefined;\n\t\t\t\t\t\tif (t0 && t1) {\n\t\t\t\t\t\t\tconst dx = t1.pageX - t0.pageX;\n\t\t\t\t\t\t\tconst dy = t1.pageY - t0.pageY;\n\t\t\t\t\t\t\tconst dist = Math.hypot(dx, dy);\n\t\t\t\t\t\t\tif (lastPinchDist.current != null) {\n\t\t\t\t\t\t\t\tconst scale = dist / lastPinchDist.current;\n\t\t\t\t\t\t\t\tconst cx = (t0.pageX + t1.pageX) / 2;\n\t\t\t\t\t\t\t\tconst cy = (t0.pageY + t1.pageY) / 2;\n\t\t\t\t\t\t\t\tcam.setZoom(cam.zoom * scale, { x: cx, y: cy });\n\t\t\t\t\t\t\t\trequestRender();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastPinchDist.current = dist;\n\t\t\t\t\t\t\tlastPanPoint.current = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlastPinchDist.current = null;\n\t\t\t\t\tapplyDragMoveAtScreenPoint({ x: sx, y: sy }, { x: pageX, y: pageY });\n\t\t\t\t},\n\n\t\t\t\tonPanResponderRelease: (evt) => {\n\t\t\t\t\tfinishDragAtScreenPoint({\n\t\t\t\t\t\tx: evt.nativeEvent.locationX,\n\t\t\t\t\t\ty: evt.nativeEvent.locationY,\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tonPanResponderTerminate: () => {\n\t\t\t\t\tlastPinchDist.current = null;\n\t\t\t\t\tlastPanPoint.current = null;\n\t\t\t\t\thideToolCursor();\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\tsetPlacementPreview(null);\n\t\t\t\t\tsetLaserTrail([]);\n\t\t\t\t\tsetEraserTrail([]);\n\t\t\t\t\tsetEraserPreviewIds([]);\n\t\t\t\t\teraserPreviewIdSetRef.current.clear();\n\t\t\t\t},\n\t\t\t}),\n\t\t[\n\t\t\tapplyDragMoveAtScreenPoint,\n\t\t\tbeginDragAtScreenPoint,\n\t\t\tfinishDragAtScreenPoint,\n\t\t\trequestRender,\n\t\t\thideToolCursor,\n\t\t],\n\t);\n\n\tuseImperativeHandle(\n\t\tref,\n\t\t(): NativeVectorViewportHandle => ({\n\t\t\tgetCamera: () => cameraRef.current,\n\t\t\trequestRender,\n\t\t\tgetViewportSize: () => size,\n\t\t\tfitWorldRect: (worldRect, options) => {\n\t\t\t\tconst cam = cameraRef.current;\n\t\t\t\tif (!cam || size.width <= 0 || size.height <= 0) return;\n\t\t\t\tfitCameraToWorldRect(\n\t\t\t\t\tcam,\n\t\t\t\t\tsize.width,\n\t\t\t\t\tsize.height,\n\t\t\t\t\tworldRect,\n\t\t\t\t\toptions?.padding ?? 0.08,\n\t\t\t\t);\n\t\t\t\trequestRender();\n\t\t\t},\n\t\t}),\n\t\t[requestRender, size],\n\t);\n\n\tvoid cameraTick;\n\tconst activeStyleToolId: NativeVectorStyleToolId | null =\n\t\ttoolId === \"draw\" || toolId === \"marker\" ? toolId : null;\n\tconst activeToolCursor = cursorForToolId(toolId);\n\tconst toolCursor =\n\t\tactiveToolCursor && toolCursorPoint\n\t\t\t? { cursor: activeToolCursor, point: toolCursorPoint }\n\t\t\t: null;\n\n\treturn (\n\t\t<View\n\t\t\tstyle={{ flex: 1, overflow: \"hidden\" }}\n\t\t\tonLayout={onLayout}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerUp={handlePointerUp}\n\t\t\tonPointerEnter={handlePointerMove}\n\t\t\tonPointerLeave={hideToolCursor}\n\t\t\t{...panResponder.panHandlers}\n\t\t>\n\t\t\t{size.width > 0 && size.height > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t<NativeSceneRenderer\n\t\t\t\t\t\titems={sceneItems}\n\t\t\t\t\t\tcamera={camera}\n\t\t\t\t\t\twidth={size.width}\n\t\t\t\t\t\theight={size.height}\n\t\t\t\t\t/>\n\t\t\t\t\t{interactive && (\n\t\t\t\t\t\t<NativeInteractionOverlay\n\t\t\t\t\t\t\tcamera={camera}\n\t\t\t\t\t\t\twidth={size.width}\n\t\t\t\t\t\t\theight={size.height}\n\t\t\t\t\t\t\tselectedItems={selectedItems}\n\t\t\t\t\t\t\tshowResizeHandles={showResizeHandles}\n\t\t\t\t\t\t\tplacementPreview={placementPreview}\n\t\t\t\t\t\t\tlaserTrail={laserTrail}\n\t\t\t\t\t\t\teraserTrail={eraserTrail}\n\t\t\t\t\t\t\teraserPreviewItems={items.filter((it) =>\n\t\t\t\t\t\t\t\teraserPreviewIds.includes(it.id),\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tpreviewStrokeStyle={strokeStyleState}\n\t\t\t\t\t\t\ttoolCursor={toolCursor}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{interactive && showStyleInspector && activeStyleToolId ? (\n\t\t\t\t\t\t<View\n\t\t\t\t\t\t\tpointerEvents=\"box-none\"\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tstyleInspectorPlacement === \"top-left\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\tleft: 16,\n\t\t\t\t\t\t\t\t\t\t\ttop: 104,\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"flex-start\",\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\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\tleft: 16,\n\t\t\t\t\t\t\t\t\t\t\tright: 16,\n\t\t\t\t\t\t\t\t\t\t\tbottom: 84,\n\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\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\t\t<NativeVectorStyleInspector\n\t\t\t\t\t\t\t\ttoolId={activeStyleToolId}\n\t\t\t\t\t\t\t\tvalue={strokeStyleState}\n\t\t\t\t\t\t\t\tonChange={patchCurrentStrokeStyle}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{toolbar && (\n\t\t\t\t\t\t<View\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\tbottom: 16,\n\t\t\t\t\t\t\t\tleft: 16,\n\t\t\t\t\t\t\t\tright: 16,\n\t\t\t\t\t\t\t\tflexDirection: \"row\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tpointerEvents=\"box-none\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{toolbar}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</View>\n\t);\n});\n"]}