canvu-react 0.4.48 → 0.4.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/native.cjs +12 -3
- package/dist/native.cjs.map +1 -1
- package/dist/native.js +12 -3
- package/dist/native.js.map +1 -1
- package/package.json +1 -1
package/dist/native.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/link-item.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/math/item-transform.ts","../src/scene/clone-item.ts","../src/scene/managed-images.ts","../src/native/NativeImagesMenu.tsx","../src/interaction/resize-handles.ts","../src/react/presence/peer-color.ts","../src/scene/freehand-path.ts","../src/native/native-freehand-payload-cache.ts","../src/native/native-link-card.ts","../src/native/native-image-cache.ts","../src/native/skia-transform.ts","../src/native/SvgNodeRenderer.tsx","../src/native/svg-parser.ts","../src/native/NativeShapeRenderer.tsx","../src/native/native-overlay-style.ts","../src/native/native-stroke-preview.ts","../src/native/native-vector-interactions.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-remote-presence-hit-test.ts","../src/native/native-transient-items.ts","../src/native/NativeVectorViewport.tsx"],"names":["escapeHtmlText","d","getStroke","op","b","s","jsx","Canvas","Group","Path","Pressable","View","jsxs","NativeImage","useMemo","useState","Text","ScrollView","StyleSheet","localBounds","useEffect","loadedImage","Fragment","RoundedRect","Rect","SkiaCircle","Oval","SkiaLine","vec","DashPathEffect","matchFont","SkiaText","SkiaImage","parseNum","attrs","node","dashIntervalsFromStrokeDasharray","SkiaRect","Circle","Line","last","camera","memo","MemoShape","styles","useCallback","PanResponder","clamp","local","REMOTE_CURSOR_SCREEN_PX","REMOTE_LABEL_SCREEN_PX","forwardRef","NativeVectorViewport","useRef","toolId","customPlacement","useImperativeHandle","Modal","TextInput"],"mappings":"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","file":"native.cjs","sourcesContent":["/**\n * Axis-aligned rectangle in 2D (world or screen space).\n */\nexport type Rect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\n/**\n * Returns whether two axis-aligned rectangles intersect (edges touching count).\n */\nexport function rectsIntersect(a: Rect, b: Rect): boolean {\n\treturn (\n\t\ta.x < b.x + b.width &&\n\t\ta.x + a.width > b.x &&\n\t\ta.y < b.y + b.height &&\n\t\ta.y + a.height > b.y\n\t);\n}\n\n/**\n * Normalizes a rect so width and height are non-negative.\n */\nexport function normalizeRect(r: Rect): Rect {\n\tconst x0 = r.width >= 0 ? r.x : r.x + r.width;\n\tconst y0 = r.height >= 0 ? r.y : r.y + r.height;\n\treturn {\n\t\tx: x0,\n\t\ty: y0,\n\t\twidth: Math.abs(r.width),\n\t\theight: Math.abs(r.height),\n\t};\n}\n","import type { CustomShapeResizeHandles } from \"../interaction/resize-handles\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\nexport type { CustomShapeResizeHandles } from \"../interaction/resize-handles\";\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 * Optional behavior and styling hooks for {@link createCustomShapeItem}.\n */\nexport type CreateCustomShapeOptions = {\n\t/**\n\t * Controls which resize handles are visible and active for the custom shape.\n\t *\n\t * Defaults to `\"all\"`. Use `\"corners\"` for corner-only resize, explicit handle ids such\n\t * as `[\"se\"]` for constrained tools, or an empty array to hide resize dots while keeping\n\t * selection and rotation available.\n\t */\n\tresizeHandles?: CustomShapeResizeHandles;\n\t/**\n\t * CSS class applied to the outer rendered SVG `<g>`.\n\t *\n\t * Useful for custom animations and styling. In interactive canvases, prefer\n\t * `[data-canvu-hovered=\"true\"]` over `:hover` because the scene SVG often has\n\t * `pointer-events: none` while Canvu owns hit-testing in a separate layer.\n\t */\n\tsvgClassName?: string;\n};\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 *\n * @example One resize handle and a CSS animation hook\n * ```ts\n * createCustomShapeItem(id, rect, { svg }, {\n * resizeHandles: [\"se\"],\n * svgClassName: \"sticky-note\",\n * });\n * ```\n */\nexport function createCustomShapeItem(\n\tid: string,\n\tbounds: Rect,\n\tcontent: CreateCustomShapeContent,\n\toptions: CreateCustomShapeOptions = {},\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\t...(options.resizeHandles !== undefined\n\t\t\t? { customResizeHandles: options.resizeHandles }\n\t\t\t: {}),\n\t\t...(options.svgClassName ? { svgClassName: options.svgClassName } : {}),\n\t\tchildrenSvg: buildCustomShapeChildrenSvg(inner, intrinsic, r),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { createCustomShapeItem } from \"./custom-shape\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Plugin key under which link metadata is stored on a link item's `pluginData`. */\nexport const LINK_PLUGIN_KEY = \"canvuLink\";\n\n/**\n * Metadata describing a clickable link/bookmark item.\n * `href` is required; the rest enrich the rendered card (unfurl result).\n */\nexport type CanvuLinkData = {\n\t/** Absolute URL the card points to. */\n\thref: string;\n\t/** Human readable title (falls back to the hostname). */\n\ttitle?: string;\n\t/** Short description shown under the title. */\n\tdescription?: string;\n\t/** Preview image URL (og:image). */\n\timage?: string;\n\t/** Favicon URL shown in the leading badge. */\n\tfavicon?: string;\n};\n\nconst DEFAULT_LINK_CARD_WIDTH = 320;\nconst DEFAULT_LINK_CARD_HEIGHT = 70;\nexport const LINK_CARD_MIN_SCALE = 0.6;\nexport const LINK_CARD_MAX_SCALE = 6;\nexport const LINK_CARD_ASPECT = DEFAULT_LINK_CARD_WIDTH / DEFAULT_LINK_CARD_HEIGHT;\nconst LINK_CARD_BORDER = \"oklch(0.918 0.008 255)\";\nconst LINK_CARD_BORDER_STRONG = \"oklch(0.86 0.012 255)\";\nconst LINK_CARD_ACCENT = \"oklch(0.55 0.19 264)\";\nconst LINK_CARD_ACCENT_DEEP = \"oklch(0.46 0.18 264)\";\nconst LINK_CARD_TITLE_COLOR = \"oklch(0.26 0.022 265)\";\nconst LINK_CARD_TEXT_COLOR = \"oklch(0.55 0.022 265)\";\n\nconst clamp = (value: number, min: number, max: number): number =>\n\tMath.min(max, Math.max(min, value));\n\nconst formatNumber = (value: number): string => {\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Object.is(rounded, -0) ? \"0\" : String(rounded);\n};\n\nconst escapeHtmlText = (value: string): string =>\n\tvalue.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n\nconst getLinkHostname = (href: string): string => {\n\ttry {\n\t\treturn new URL(href).hostname.replace(/^www\\./, \"\");\n\t} catch {\n\t\treturn href;\n\t}\n};\n\ntype LinkTextBand = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\tfontSize: number;\n\tcolor: string;\n\tfontWeight?: number;\n};\n\nconst buildLinkTextBand = (band: LinkTextBand): string => {\n\tconst lineHeight = band.height;\n\tconst weight = band.fontWeight != null ? `font-weight:${band.fontWeight};` : \"\";\n\treturn `<foreignObject x=\"${formatNumber(band.x)}\" y=\"${formatNumber(band.y)}\" width=\"${formatNumber(Math.max(1, band.width))}\" height=\"${formatNumber(Math.max(1, band.height))}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;font-family:system-ui,sans-serif;font-size:${formatNumber(band.fontSize)}px;line-height:${formatNumber(lineHeight)}px;letter-spacing:-0.01em;color:${band.color};overflow:hidden;white-space:nowrap;text-overflow:ellipsis;${weight}\">${escapeHtmlText(band.text)}</div></foreignObject>`;\n};\n\nconst getLinkProtocol = (href: string): string => {\n\ttry {\n\t\treturn new URL(href).protocol;\n\t} catch {\n\t\treturn \"\";\n\t}\n};\n\nconst getLinkInitial = (hostname: string): string => {\n\tconst first = hostname.trim().charAt(0).toUpperCase();\n\treturn first || \"L\";\n};\n\nconst getStableLinkIdSuffix = (value: string): string => {\n\tlet hash = 0;\n\tfor (const char of value) {\n\t\thash = (hash * 31 + char.charCodeAt(0)) >>> 0;\n\t}\n\treturn hash.toString(36);\n};\n\n/**\n * Builds the inner SVG (no outer `<svg>`) for a link/bookmark card at the given box size.\n * Uses fixed pixel bands so text never overlaps regardless of the card's aspect ratio.\n */\nexport function buildLinkCardSvg(\n\twidth: number,\n\t_height: number,\n\tlink: CanvuLinkData,\n): string {\n\tconst cardWidth = Math.max(1, width);\n\tconst scale = cardWidth / DEFAULT_LINK_CARD_WIDTH;\n\tconst contentWidth = DEFAULT_LINK_CARD_WIDTH;\n\tconst contentHeight = DEFAULT_LINK_CARD_HEIGHT;\n\tconst padding = 14;\n\tconst badgeSize = 42;\n\tconst gap = 13;\n\tconst buttonSize = 34;\n\tconst textX = padding + badgeSize + gap;\n\tconst textWidth = Math.max(1, contentWidth - textX - buttonSize - gap - padding);\n\tconst hostname = getLinkHostname(link.href);\n\tconst title = link.title?.trim() || hostname || \"Link\";\n\tconst protocol = getLinkProtocol(link.href);\n\tconst subtitle = hostname || link.href;\n\tconst idSuffix = getStableLinkIdSuffix(`${hostname}:${link.href}`);\n\tconst gradientId = `canvu-link-favicon-gradient-${idSuffix}`;\n\tconst buttonX = contentWidth - padding - buttonSize;\n\tconst buttonY = (contentHeight - buttonSize) / 2;\n\tconst isSecure = protocol === \"https:\";\n\tconst subtitleX = isSecure ? textX + 13 : textX;\n\tconst subtitleWidth = isSecure ? textWidth - 13 : textWidth;\n\n\treturn `\n\t\t<style>\n\t\t\t.canvu-link-card-root .canvu-link-card { transition: transform .18s ease, filter .18s ease, stroke .18s ease; }\n\t\t\t.canvu-link-card-root .canvu-link-open { opacity: 0; transform: translateX(-4px); transition: opacity .18s ease, transform .18s ease; }\n\t\t\t.canvu-link-card-root:hover .canvu-link-card { transform: translateY(-2px); filter: drop-shadow(0 4px 14px oklch(0.4 0.05 265 / .08)) drop-shadow(0 1px 3px oklch(0.4 0.05 265 / .06)); stroke: ${LINK_CARD_BORDER_STRONG}; }\n\t\t\t.canvu-link-card-root:hover .canvu-link-open { opacity: 1; transform: translateX(0); }\n\t\t</style>\n\t\t<g class=\"canvu-link-card-root\" transform=\"scale(${formatNumber(scale)})\">\n\t\t\t<rect class=\"canvu-link-card\" width=\"${formatNumber(contentWidth)}\" height=\"${formatNumber(contentHeight)}\" rx=\"16\" fill=\"#ffffff\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1\" filter=\"drop-shadow(0 1px 2px oklch(0.4 0.03 265 / .05)) drop-shadow(0 1px 1px oklch(0.4 0.03 265 / .04))\" />\n\t\t\t<defs>\n\t\t\t\t<linearGradient id=\"${gradientId}\" x1=\"8\" y1=\"48\" x2=\"48\" y2=\"8\" gradientUnits=\"userSpaceOnUse\">\n\t\t\t\t\t<stop stop-color=\"${LINK_CARD_ACCENT}\" />\n\t\t\t\t\t<stop offset=\"1\" stop-color=\"${LINK_CARD_ACCENT_DEEP}\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t\t<rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"11\" fill=\"url(#${gradientId})\" />\n\t\t\t<text x=\"${formatNumber(padding + badgeSize / 2)}\" y=\"${formatNumber(padding + badgeSize / 2 + 5)}\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"17\" font-weight=\"700\" fill=\"#ffffff\">${escapeHtmlText(getLinkInitial(hostname))}</text>\n\t\t\t${buildLinkTextBand({ x: textX, y: 16, width: textWidth, height: 19, text: title, fontSize: 14.5, color: LINK_CARD_TITLE_COLOR, fontWeight: 700 })}\n\t\t\t${\n\t\t\t\tisSecure\n\t\t\t\t\t? `<g transform=\"translate(${formatNumber(textX)},40)\" stroke=\"${LINK_CARD_TEXT_COLOR}\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"><rect x=\"1.5\" y=\"4.5\" width=\"7\" height=\"6\" rx=\"1\" /><path d=\"M3 4.5 V3 a2 2 0 0 1 4 0 v1.5\" /></g>`\n\t\t\t\t\t: \"\"\n\t\t\t}\n\t\t\t${buildLinkTextBand({ x: subtitleX, y: 36, width: subtitleWidth, height: 17, text: subtitle, fontSize: 12.5, color: LINK_CARD_TEXT_COLOR })}\n\t\t\t<g class=\"canvu-link-open\" transform=\"translate(${formatNumber(buttonX)},${formatNumber(buttonY)})\">\n\t\t\t\t<rect width=\"${formatNumber(buttonSize)}\" height=\"${formatNumber(buttonSize)}\" rx=\"10\" fill=\"#ffffff\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1\" />\n\t\t\t\t<g transform=\"translate(10,10)\" stroke=\"${LINK_CARD_TEXT_COLOR}\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\">\n\t\t\t\t\t<path d=\"M8 2 H14 V8\" />\n\t\t\t\t\t<path d=\"M14 2 L7 9\" />\n\t\t\t\t\t<path d=\"M12 10 V13 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 V5 a1 1 0 0 1 1 -1 H6\" />\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</g>\n\t`;\n}\n\nconst isCanvuLinkData = (value: unknown): value is CanvuLinkData => {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst candidate = value as Record<string, unknown>;\n\treturn typeof candidate.href === \"string\" && candidate.href.length > 0;\n};\n\n/** Reads the link metadata from an item, or `null` when the item is not a link. */\nexport function getLinkData(item: VectorSceneItem): CanvuLinkData | null {\n\tconst entry = item.pluginData?.[LINK_PLUGIN_KEY];\n\treturn isCanvuLinkData(entry) ? entry : null;\n}\n\n/** True when the item carries link metadata (clickable card). */\nexport function isLinkItem(item: VectorSceneItem): boolean {\n\treturn getLinkData(item) != null;\n}\n\nexport function rebuildLinkItemSvg(item: VectorSceneItem): VectorSceneItem {\n\tconst link = getLinkData(item);\n\tif (!link) return item;\n\tconst scale = clamp(\n\t\titem.bounds.width / DEFAULT_LINK_CARD_WIDTH,\n\t\tLINK_CARD_MIN_SCALE,\n\t\tLINK_CARD_MAX_SCALE,\n\t);\n\tconst width = DEFAULT_LINK_CARD_WIDTH * scale;\n\tconst height = DEFAULT_LINK_CARD_HEIGHT * scale;\n\tconst bounds = {\n\t\t...item.bounds,\n\t\twidth,\n\t\theight,\n\t};\n\tconst customInnerSvg = buildLinkCardSvg(\n\t\tDEFAULT_LINK_CARD_WIDTH,\n\t\tDEFAULT_LINK_CARD_HEIGHT,\n\t\tlink,\n\t);\n\treturn {\n\t\t...item,\n\t\tx: bounds.x,\n\t\ty: bounds.y,\n\t\tbounds,\n\t\tcustomIntrinsicSize: {\n\t\t\twidth: DEFAULT_LINK_CARD_WIDTH,\n\t\t\theight: DEFAULT_LINK_CARD_HEIGHT,\n\t\t},\n\t\tcustomInnerSvg,\n\t\tchildrenSvg: buildLinkCardSvg(width, height, link),\n\t};\n}\n\n/**\n * Creates a clickable link/bookmark card item ready to append to the scene.\n * The card resizes by scaling its authored SVG, like other custom shapes.\n */\nexport function createLinkItem(\n\tid: string,\n\tbounds: Rect,\n\tlink: CanvuLinkData,\n): VectorSceneItem {\n\tconst width = bounds.width || DEFAULT_LINK_CARD_WIDTH;\n\tconst height = bounds.height || DEFAULT_LINK_CARD_HEIGHT;\n\tconst item = createCustomShapeItem(\n\t\tid,\n\t\t{ ...bounds, width, height },\n\t\t{ render: (size) => buildLinkCardSvg(size.width, size.height, link) },\n\t);\n\treturn rebuildLinkItemSvg({\n\t\t...item,\n\t\tpluginData: {\n\t\t\t...(item.pluginData ?? {}),\n\t\t\t[LINK_PLUGIN_KEY]: link,\n\t\t},\n\t});\n}\n\n/** Default card size used when placing a new link without explicit bounds. */\nexport const DEFAULT_LINK_CARD_SIZE = {\n\twidth: DEFAULT_LINK_CARD_WIDTH,\n\theight: DEFAULT_LINK_CARD_HEIGHT,\n} as const;\n","/**\n * Escape text for use inside SVG `<text>` / `<tspan>` (not full XML attribute context).\n */\nexport function escapeSvgTextContent(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\n/** Default font size used when the text tool creates a new text item. */\nexport const DEFAULT_TEXT_TOOL_FONT_SIZE = 28;\n/**\n * Sophisticated sans-serif used for both canvas text rendering and inline editing.\n * Inter is loaded by host apps (e.g. demo/index.html); system-ui fallback keeps the canvas\n * usable when the webfont hasn't loaded yet.\n */\nexport const TEXT_FONT_FAMILY =\n\t\"Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, system-ui, sans-serif\";\nconst LINE_HEIGHT_RATIO = 22 / 18;\n/**\n * Where the first text baseline sits, expressed in font-size units. Picked so\n * the SVG glyph and the inline-edit textarea agree visually (the textarea's\n * natural first-line baseline lands at this same y when padded by\n * {@link EDIT_TOP_PAD_RATIO}). See {@link TextEditOverlay} for the matching\n * inset.\n */\nconst FIRST_LINE_BASELINE_RATIO = 20 / 18;\n/** Textarea top inset (font-size units) that lines up with the SVG baseline. */\nexport const EDIT_TOP_PAD_RATIO = 4 / 18;\n/** Extra space below the descender so glyphs aren't clipped at the bounds. */\nconst BOTTOM_PAD_RATIO = 4 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 26;\n/** Horizontal padding in local space (matches `<text x=\"4\">`). */\nconst TEXT_PAD_X = 4;\nconst MAX_TEXT_MEASURE_CACHE_ENTRIES = 2000;\n\nlet sharedMeasureContext: CanvasRenderingContext2D | null | undefined;\nconst textMeasureCache = new Map<string, { width: number; height: number }>();\n\nfunction getSharedMeasureContext(): CanvasRenderingContext2D | null {\n\tif (sharedMeasureContext !== undefined) {\n\t\treturn sharedMeasureContext;\n\t}\n\tif (typeof document === \"undefined\") {\n\t\tsharedMeasureContext = null;\n\t\treturn sharedMeasureContext;\n\t}\n\tconst canvas = document.createElement(\"canvas\");\n\tsharedMeasureContext = canvas.getContext(\"2d\");\n\treturn sharedMeasureContext;\n}\n\nfunction textMeasureCacheKey(content: string, fontSize: number): string {\n\treturn `${fontSize}\\n${content}`;\n}\n\nfunction cacheMeasuredBounds(\n\tkey: string,\n\tbounds: { width: number; height: number },\n): void {\n\tif (textMeasureCache.size >= MAX_TEXT_MEASURE_CACHE_ENTRIES) {\n\t\ttextMeasureCache.clear();\n\t}\n\ttextMeasureCache.set(key, bounds);\n}\n\nfunction lineHeightFor(fontSize: number): number {\n\treturn fontSize * LINE_HEIGHT_RATIO;\n}\n\nfunction firstLineBaselineY(fontSize: number): number {\n\treturn fontSize * FIRST_LINE_BASELINE_RATIO;\n}\n\n/** Public version used by callers that need the same baseline as SVG rendering. */\nexport function textBaselineYFor(fontSize: number): number {\n\treturn firstLineBaselineY(fontSize);\n}\n\n/** Public version used by callers that need the same line height as SVG rendering. */\nexport function textLineHeightFor(fontSize: number): number {\n\treturn lineHeightFor(fontSize);\n}\n\n/**\n * Local width/height for a text item so bounds match rendered SVG (no fixed max width).\n * Uses canvas measureText when `document` is available; rough fallback otherwise.\n */\nexport function measureTextBoundsLocal(\n\tcontent: string,\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): {\n\twidth: number;\n\theight: number;\n} {\n\tconst cacheKey = textMeasureCacheKey(content, fontSize);\n\tconst cached = textMeasureCache.get(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst lh = lineHeightFor(fontSize);\n\tconst baselineY = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tconst lines = trimmed.length === 0 ? [PLACEHOLDER] : content.split(\"\\n\");\n\n\tlet maxInnerW = 0;\n\tconst ctx = getSharedMeasureContext();\n\tif (ctx) {\n\t\tctx.font = `${fontSize}px ${TEXT_FONT_FAMILY}`;\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, ctx.measureText(toMeasure).width);\n\t\t}\n\t}\n\tif (maxInnerW === 0) {\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, toMeasure.length * fontSize * 0.52);\n\t\t}\n\t}\n\n\tconst minW = Math.max(MIN_TEXT_BOX_W, TEXT_PAD_X * 2 + fontSize);\n\tconst width = Math.max(minW, TEXT_PAD_X * 2 + maxInnerW);\n\tconst height = Math.max(\n\t\tMIN_TEXT_BOX_H,\n\t\tbaselineY + (lines.length - 1) * lh + Math.max(4, fontSize * BOTTOM_PAD_RATIO),\n\t);\n\tconst measured = { width, height };\n\tcacheMeasuredBounds(cacheKey, measured);\n\treturn measured;\n}\n\n/**\n * Builds SVG `<text>` markup for a text box in local coordinates [0, w] × [0, h].\n * @param fillColor — Text fill (defaults to blue-gray placeholder / blue body).\n */\nexport function buildTextSvg(\n\tcontent: string,\n\t_width: number,\n\t_height: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst lh = lineHeightFor(fontSize);\n\tconst y0 = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tif (trimmed.length === 0) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"#94a3b8\" font-style=\"italic\">${escapeSvgTextContent(PLACEHOLDER)}</text>`;\n\t}\n\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length === 1) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${escapeSvgTextContent(lines[0] ?? \"\")}</text>`;\n\t}\n\n\tconst parts: string[] = [];\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] ?? \"\";\n\t\tif (i === 0) {\n\t\t\tparts.push(`<tspan x=\"4\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t} else {\n\t\t\tparts.push(`<tspan x=\"4\" dy=\"${lh}\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t}\n\t}\n\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${parts.join(\"\")}</text>`;\n}\n\n/**\n * Text that wraps inside a fixed rectangle (after user resize). Uses `foreignObject` + XHTML\n * so wrapping matches browser layout.\n */\nexport function buildTextFixedBoundsSvg(\n\tcontent: string,\n\twidth: number,\n\theight: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst w = Math.max(1, width);\n\tconst h = Math.max(1, height);\n\tconst lh = lineHeightFor(fontSize);\n\tconst trimmed = content.trim();\n\tconst padTop = EDIT_TOP_PAD_RATIO * fontSize;\n\tif (trimmed.length === 0) {\n\t\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:#94a3b8;font-style:italic\">${escapeHtmlText(PLACEHOLDER)}</div></foreignObject>`;\n\t}\n\tconst body = escapeHtmlText(content);\n\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:${fillColor}\">${body}</div></foreignObject>`;\n}\n","import type { StrokeOptions } from \"perfect-freehand\";\nimport getStroke from \"perfect-freehand\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { buildCustomShapeChildrenSvg } from \"./custom-shape\";\nimport { getLinkData, rebuildLinkItemSvg } from \"./link-item\";\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 (getLinkData(item)) {\n\t\treturn rebuildLinkItemSvg(item);\n\t}\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildCustomShapeChildrenSvg(\n\t\t\t\titem.customInnerSvg,\n\t\t\t\titem.customIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\n\treturn item;\n}\n\n/** Updates stroke color / width / opacity and refreshes the item’s SVG. */\nexport function applyStrokeToItem(\n\titem: VectorSceneItem,\n\tpatch: Partial<\n\t\tPick<\n\t\t\tVectorSceneItem,\n\t\t\t\"stroke\" | \"strokeWidth\" | \"strokeOpacity\" | \"strokeDash\" | \"textFontSize\"\n\t\t>\n\t>,\n): VectorSceneItem {\n\treturn rebuildItemSvg({ ...item, ...patch });\n}\n\n/** Creates a rectangle shape ready to append to your scene `items` array. */\nexport function createRectangleItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"rect\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an ellipse shape. */\nexport function createEllipseItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"ellipse\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/**\n * Creates an architectural revision cloud shape.\n *\n * Use this high-level builder when adding the built-in cloud shape from code or\n * from custom integrations. It creates an editable `VectorSceneItem` with\n * `toolKind: \"architectural-cloud\"`, so resize, stroke styling, selection, and\n * serialization continue to work like the built-in rectangle and ellipse tools.\n *\n * @example\n * ```ts\n * const cloud = createArchitecturalCloudItem(createShapeId(), {\n * x: 40,\n * y: 30,\n * width: 180,\n * height: 90,\n * });\n * ```\n */\nexport function createArchitecturalCloudItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"architectural-cloud\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates a straight line or arrow; `line` is usually from {@link lineEndpointsToLocal}. */\nexport function createLineItem(\n\tid: string,\n\tbounds: Rect,\n\tline: LineEndpointsLocal,\n\ttoolKind: \"line\" | \"arrow\",\n\tstyle?: Partial<StrokeStyle>,\n\tarrowBind?: ArrowBindings,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind,\n\t\tline: { ...line },\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(arrowBind ? { arrowBind } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** “Draw dot” tool: a small filled circle at (`worldX`, `worldY`). */\nexport function createDrawDotItem(\n\tid: string,\n\tworldX: number,\n\tworldY: number,\n\tradius: number,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: worldX - radius,\n\t\ty: worldY - radius,\n\t\tbounds: {\n\t\t\tx: worldX - radius,\n\t\t\ty: worldY - radius,\n\t\t\twidth: radius * 2,\n\t\t\theight: radius * 2,\n\t\t},\n\t\ttoolKind: \"draw\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an editable text box (`stroke` is used as text fill). */\nexport function createTextItem(\n\tid: string,\n\tbounds: Rect,\n\ttext = \"\",\n\tstyle?: Partial<StrokeStyle>,\n\ttextFontSize?: number,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"text\",\n\t\ttext,\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(textFontSize != null ? { textFontSize } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Freehand stroke from world-space points (main pen or marker highlight). */\nexport function createFreehandStrokeItem(\n\tid: string,\n\tpointsWorld: readonly VectorPathPoint[],\n\ttoolKind: \"draw\" | \"marker\",\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem | null {\n\tif (pointsWorld.length === 0) return null;\n\n\tconst merged: StrokeStyle = {\n\t\t...DEFAULT_STROKE_STYLE,\n\t\t...TOOL_FREEHAND_DEFAULTS[toolKind],\n\t\t...style,\n\t};\n\n\tconst sw = merged.strokeWidth;\n\t/** Filled outline extends ~size/2 past the polyline; keep generous padding to avoid clipping. */\n\tconst pad = Math.max(sw * 0.75 + 4, sw / 2 + 6);\n\tconst xs = pointsWorld.map((p) => p.x);\n\tconst ys = pointsWorld.map((p) => p.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\n\tconst x = minX - pad;\n\tconst y = minY - pad;\n\tconst w = Math.max(maxX - minX + 2 * pad, sw);\n\tconst h = Math.max(maxY - minY + 2 * pad, sw);\n\n\tconst pathPointsLocal = pointsWorld.map((p) => ({\n\t\tx: p.x - x,\n\t\ty: p.y - y,\n\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t}));\n\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx,\n\t\ty,\n\t\tbounds: { x, y, width: w, height: h },\n\t\ttoolKind,\n\t\tstroke: merged.stroke,\n\t\tstrokeWidth: merged.strokeWidth,\n\t\t...(merged.strokeOpacity != null ? { strokeOpacity: merged.strokeOpacity } : {}),\n\t\t...(merged.strokeDash != null ? { strokeDash: merged.strokeDash } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","import 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 {\n\tbuildArrowSvg,\n\tcreateShapeId,\n\trebuildItemSvg,\n\tresolveStrokeStyle,\n} from \"./shape-builders\";\nimport type { VectorSceneItem } from \"./types\";\n\n/**\n * Deep-clones an item with a new id. Rebuilds SVG where the id is embedded (arrow, text, custom).\n */\nexport function cloneVectorSceneItemWithNewId(\n\titem: VectorSceneItem,\n): VectorSceneItem {\n\tconst id = createShapeId();\n\tconst copy = JSON.parse(JSON.stringify(item)) as VectorSceneItem;\n\tlet next: VectorSceneItem = { ...copy, id };\n\tif (next.toolKind === \"arrow\" && next.line) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tchildrenSvg: buildArrowSvg(id, next.line, resolveStrokeStyle(next)),\n\t\t};\n\t}\n\tif (next.toolKind === \"text\" && next.text !== undefined) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\tif (\n\t\tnext.toolKind === \"custom\" &&\n\t\tnext.customInnerSvg &&\n\t\tnext.customIntrinsicSize\n\t) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\treturn next;\n}\n\nexport function cloneVectorSceneItemsWithNewIds(\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem[] {\n\treturn items.map(cloneVectorSceneItemWithNewId);\n}\n","import { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport { cloneVectorSceneItemWithNewId } from \"./clone-item\";\nimport type { VectorSceneItem } from \"./types\";\n\nexport const MANAGED_KEY = \"managed\";\n\nconst STACK_GAP_WORLD = 16;\n\nexport function isManagedImage(item: VectorSceneItem): boolean {\n\tconst data = item.pluginData;\n\treturn data != null && (data as { [key: string]: unknown })[MANAGED_KEY] === true;\n}\n\nexport function markImageAsManaged(item: VectorSceneItem): VectorSceneItem {\n\treturn {\n\t\t...item,\n\t\tlocked: true,\n\t\tpluginData: { ...(item.pluginData ?? {}), [MANAGED_KEY]: true },\n\t};\n}\n\n/**\n * Repositions every managed image into a single vertical stack. The stack\n * origin is the current topmost (minimum Y) managed item — that point in world\n * space is stable across reorder/copy/delete operations, so reorder swaps slots\n * instead of making the whole stack drift downward. Subsequent items are\n * centered on the anchor's center X and stacked downward with a fixed gap.\n *\n * Non-managed items keep their position. Call this after any operation that\n * changes the relative order or count of managed images so the canvas reflects\n * the menu order.\n */\nexport function restackManagedImages(\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem[] {\n\tlet anchorAabbY = Infinity;\n\tlet anchorCenterX = 0;\n\tfor (const item of items) {\n\t\tif (!isManagedImage(item)) continue;\n\t\tconst aabb = boundsAabbForRotatedItem(item);\n\t\tif (aabb.y < anchorAabbY) {\n\t\t\tanchorAabbY = aabb.y;\n\t\t\tanchorCenterX = aabb.x + aabb.width / 2;\n\t\t}\n\t}\n\tif (!Number.isFinite(anchorAabbY)) return [...items];\n\tlet cursorY = anchorAabbY;\n\treturn items.map((item) => {\n\t\tif (!isManagedImage(item)) return item;\n\t\t// Rotation pivots around the unrotated bounds' center, which is also the\n\t\t// AABB's center. Place the item so its AABB top-left lands at the cursor\n\t\t// centered on the anchor's AABB center X, then advance the cursor by the\n\t\t// AABB height so rotated items push subsequent items down.\n\t\tconst aabb = boundsAabbForRotatedItem(item);\n\t\tconst centerY = cursorY + aabb.height / 2;\n\t\tconst newX = anchorCenterX - item.bounds.width / 2;\n\t\tconst newY = centerY - item.bounds.height / 2;\n\t\tcursorY += aabb.height + STACK_GAP_WORLD;\n\t\tif (item.bounds.x === newX && item.bounds.y === newY) return item;\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: newX,\n\t\t\ty: newY,\n\t\t\tbounds: { ...item.bounds, x: newX, y: newY },\n\t\t};\n\t});\n}\n\n/**\n * Marks `newItem` as a managed image (locked + `pluginData.managed = true`),\n * appends it to `items`, and restacks all managed images so the new one lands\n * at the bottom of the stack with the anchor preserved.\n *\n * Typical usage: after producing scene items with\n * `ingestAssetFilesToSceneItems`, push each result through this helper to add\n * them to the managed-images stack:\n *\n * ```ts\n * let next = doc.items;\n * for (const created of result.items) next = addManagedImage(next, created);\n * doc.onItemsChange(next);\n * ```\n */\nexport function addManagedImage(\n\titems: readonly VectorSceneItem[],\n\tnewItem: VectorSceneItem,\n): VectorSceneItem[] {\n\treturn restackManagedImages([...items, markImageAsManaged(newItem)]);\n}\n\nexport function copyManagedImage(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n): VectorSceneItem[] {\n\tconst idx = items.findIndex((i) => i.id === id);\n\tif (idx < 0) return [...items];\n\tconst source = items[idx];\n\tif (!source) return [...items];\n\tconst clone = markImageAsManaged(cloneVectorSceneItemWithNewId(source));\n\tconst inserted = [...items.slice(0, idx + 1), clone, ...items.slice(idx + 1)];\n\treturn restackManagedImages(inserted);\n}\n\nexport function rotateManagedImage(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n): VectorSceneItem[] {\n\treturn restackManagedImages(\n\t\titems.map((i) =>\n\t\t\ti.id === id\n\t\t\t\t? { ...i, rotation: ((i.rotation ?? 0) + Math.PI / 2) % (Math.PI * 2) }\n\t\t\t\t: i,\n\t\t),\n\t);\n}\n\nexport function deleteManagedImage(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n): VectorSceneItem[] {\n\treturn restackManagedImages(items.filter((i) => i.id !== id));\n}\n\nexport function reorderManagedImages(\n\titems: readonly VectorSceneItem[],\n\torderedManagedIds: readonly string[],\n): VectorSceneItem[] {\n\tconst managedSlots: number[] = [];\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst item = items[i];\n\t\tif (item && isManagedImage(item)) managedSlots.push(i);\n\t}\n\tif (managedSlots.length !== orderedManagedIds.length) {\n\t\treturn [...items];\n\t}\n\tconst byId = new Map(items.map((i) => [i.id, i]));\n\tconst next = [...items];\n\tmanagedSlots.forEach((slot, k) => {\n\t\tconst orderedId = orderedManagedIds[k];\n\t\tif (orderedId === undefined) return;\n\t\tconst replacement = byId.get(orderedId);\n\t\tif (replacement) next[slot] = replacement;\n\t});\n\treturn restackManagedImages(next);\n}\n","import { Canvas, Group, Path } from \"@shopify/react-native-skia\";\nimport { type ReactNode, useMemo, useState } from \"react\";\nimport {\n\tImage as NativeImage,\n\tPressable,\n\tScrollView,\n\ttype StyleProp,\n\tStyleSheet,\n\tText,\n\tView,\n\ttype ViewStyle,\n} from \"react-native\";\nimport {\n\tcopyManagedImage,\n\tdeleteManagedImage,\n\tisManagedImage,\n\trotateManagedImage,\n} from \"../scene/managed-images\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type NativeImagesMenuLabels = {\n\ttitle?: string;\n\tfocus?: string;\n\tduplicate?: string;\n\tcopy?: string;\n\trotate?: string;\n\tdelete?: string;\n\tcollapse?: string;\n\texpand?: string;\n};\n\ntype ResolvedNativeImagesMenuLabels = Required<\n\tOmit<NativeImagesMenuLabels, \"copy\">\n> &\n\tPick<NativeImagesMenuLabels, \"copy\">;\n\nexport type NativeImagesMenuProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly onItemsChange: (items: VectorSceneItem[]) => void;\n\treadonly onFocusItem?: (item: VectorSceneItem) => void;\n\treadonly labels?: NativeImagesMenuLabels;\n\treadonly defaultOpen?: boolean;\n\treadonly style?: StyleProp<ViewStyle>;\n\treadonly panelStyle?: StyleProp<ViewStyle>;\n\treadonly collapsedButtonStyle?: StyleProp<ViewStyle>;\n\treadonly rowStyle?: StyleProp<ViewStyle>;\n\treadonly actionButtonStyle?: StyleProp<ViewStyle>;\n\treadonly getImageUri?: (item: VectorSceneItem) => string | null | undefined;\n\treadonly renderThumbnail?: (item: VectorSceneItem) => ReactNode;\n};\n\nconst defaultLabels: ResolvedNativeImagesMenuLabels = {\n\ttitle: \"Images\",\n\tfocus: \"Focus on canvas\",\n\tduplicate: \"Duplicate\",\n\trotate: \"Rotate\",\n\tdelete: \"Delete\",\n\tcollapse: \"Collapse images menu\",\n\texpand: \"Open images menu\",\n};\n\nconst iconPaths = {\n\timages: [\"M4 5h16v14H4z\", \"M4 15l4-4 3 3 5-6 4 5\"],\n\tchevronRight: [\"M9 18l6-6-6-6\"],\n\tcopy: [\"M8 8h10v10H8z\", \"M6 16H4V4h12v2\", \"M13 11v4\", \"M11 13h4\"],\n\trotate: [\"M21 12a9 9 0 1 1-2.64-6.36\", \"M21 3v6h-6\"],\n\ttrash: [\"M3 6h18\", \"M8 6V4h8v2\", \"M6 6l1 15h10l1-15\", \"M10 11v6\", \"M14 11v6\"],\n\tgrip: [\"M8 7h8\", \"M8 12h8\", \"M8 17h8\"],\n} as const;\n\ntype NativeImagesMenuIconName = keyof typeof iconPaths;\n\nfunction NativeImagesMenuIcon({\n\tname,\n\tcolor = \"#0f172a\",\n\tsize = 18,\n}: {\n\treadonly name: NativeImagesMenuIconName;\n\treadonly color?: string;\n\treadonly size?: number;\n}) {\n\tconst scale = size / 24;\n\treturn (\n\t\t<Canvas style={{ width: size, height: size }}>\n\t\t\t<Group transform={[{ scale }]}>\n\t\t\t\t{iconPaths[name].map((path) => (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tkey={path}\n\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\n\nfunction resolveLabels(\n\tlabels?: NativeImagesMenuLabels,\n): ResolvedNativeImagesMenuLabels {\n\treturn {\n\t\t...defaultLabels,\n\t\t...labels,\n\t\tduplicate: labels?.duplicate ?? labels?.copy ?? defaultLabels.duplicate,\n\t};\n}\n\nfunction getDefaultImageUri(item: VectorSceneItem): string | null {\n\treturn item.imageThumbnailHref ?? item.imageRasterHref ?? null;\n}\n\nfunction NativeImagesMenuAction({\n\tlabel,\n\tdanger = false,\n\tchildren,\n\tonPress,\n\tstyle,\n}: {\n\treadonly label: string;\n\treadonly danger?: boolean;\n\treadonly children: ReactNode;\n\treadonly onPress: () => void;\n\treadonly style?: StyleProp<ViewStyle>;\n}) {\n\treturn (\n\t\t<Pressable\n\t\t\taccessibilityRole=\"button\"\n\t\t\taccessibilityLabel={label}\n\t\t\tonPress={onPress}\n\t\t\tstyle={({ pressed }) => [\n\t\t\t\tstyles.actionButton,\n\t\t\t\tpressed && styles.actionButtonPressed,\n\t\t\t\tdanger && styles.dangerActionButton,\n\t\t\t\tstyle,\n\t\t\t]}\n\t\t>\n\t\t\t{children}\n\t\t</Pressable>\n\t);\n}\n\nfunction NativeImagesMenuRow({\n\titem,\n\titems,\n\tlabels,\n\tonItemsChange,\n\tonFocusItem,\n\tgetImageUri,\n\trenderThumbnail,\n\trowStyle,\n\tactionButtonStyle,\n}: {\n\treadonly item: VectorSceneItem;\n\treadonly items: readonly VectorSceneItem[];\n\treadonly labels: ResolvedNativeImagesMenuLabels;\n\treadonly onItemsChange: (items: VectorSceneItem[]) => void;\n\treadonly onFocusItem?: (item: VectorSceneItem) => void;\n\treadonly getImageUri: (item: VectorSceneItem) => string | null | undefined;\n\treadonly renderThumbnail?: (item: VectorSceneItem) => ReactNode;\n\treadonly rowStyle?: StyleProp<ViewStyle>;\n\treadonly actionButtonStyle?: StyleProp<ViewStyle>;\n}) {\n\tconst imageUri = getImageUri(item);\n\treturn (\n\t\t<View style={[styles.row, rowStyle]}>\n\t\t\t<View style={styles.handle}>\n\t\t\t\t<NativeImagesMenuIcon name=\"grip\" color=\"#94a3b8\" />\n\t\t\t</View>\n\t\t\t<Pressable\n\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\taccessibilityLabel={labels.focus}\n\t\t\t\tdisabled={!onFocusItem}\n\t\t\t\tonPress={() => onFocusItem?.(item)}\n\t\t\t\tstyle={styles.thumbnailButton}\n\t\t\t>\n\t\t\t\t<View style={styles.thumbnailBox}>\n\t\t\t\t\t{renderThumbnail ? renderThumbnail(item) : null}\n\t\t\t\t\t{!renderThumbnail && imageUri ? (\n\t\t\t\t\t\t<NativeImage source={{ uri: imageUri }} style={styles.thumbnailImage} />\n\t\t\t\t\t) : null}\n\t\t\t\t</View>\n\t\t\t</Pressable>\n\t\t\t<View style={styles.actionsColumn}>\n\t\t\t\t<NativeImagesMenuAction\n\t\t\t\t\tlabel={labels.duplicate}\n\t\t\t\t\tonPress={() => onItemsChange(copyManagedImage(items, item.id))}\n\t\t\t\t\tstyle={actionButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"copy\" />\n\t\t\t\t</NativeImagesMenuAction>\n\t\t\t\t<NativeImagesMenuAction\n\t\t\t\t\tlabel={labels.rotate}\n\t\t\t\t\tonPress={() => onItemsChange(rotateManagedImage(items, item.id))}\n\t\t\t\t\tstyle={actionButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"rotate\" />\n\t\t\t\t</NativeImagesMenuAction>\n\t\t\t\t<NativeImagesMenuAction\n\t\t\t\t\tlabel={labels.delete}\n\t\t\t\t\tdanger\n\t\t\t\t\tonPress={() => onItemsChange(deleteManagedImage(items, item.id))}\n\t\t\t\t\tstyle={actionButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"trash\" color=\"#b91c1c\" />\n\t\t\t\t</NativeImagesMenuAction>\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\n/**\n * React Native companion to the web `ImagesMenu` component.\n *\n * Use this for floating mobile page/image management controls that should look\n * and behave like the web `ImagesMenu`: a compact button when collapsed and a\n * small anchored panel with managed image thumbnails plus duplicate, rotate,\n * delete, and focus actions when expanded.\n *\n * @example\n * ```tsx\n * <NativeImagesMenu\n * items={items}\n * onItemsChange={setItems}\n * onFocusItem={(item) => viewportRef.current?.fitWorldRect(item.bounds)}\n * />\n * ```\n */\nexport function NativeImagesMenu({\n\titems,\n\tonItemsChange,\n\tonFocusItem,\n\tlabels,\n\tdefaultOpen = false,\n\tstyle,\n\tpanelStyle,\n\tcollapsedButtonStyle,\n\trowStyle,\n\tactionButtonStyle,\n\tgetImageUri = getDefaultImageUri,\n\trenderThumbnail,\n}: NativeImagesMenuProps) {\n\tconst managed = useMemo(() => items.filter(isManagedImage), [items]);\n\tconst [collapsed, setCollapsed] = useState(!defaultOpen);\n\n\tif (managed.length === 0) return null;\n\n\tconst resolvedLabels = resolveLabels(labels);\n\n\tif (collapsed) {\n\t\treturn (\n\t\t\t<Pressable\n\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\taccessibilityLabel={resolvedLabels.expand}\n\t\t\t\tonPress={() => setCollapsed(false)}\n\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\tstyles.collapsedButton,\n\t\t\t\t\tpressed && styles.collapsedButtonPressed,\n\t\t\t\t\tcollapsedButtonStyle,\n\t\t\t\t\tstyle,\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t<NativeImagesMenuIcon name=\"images\" size={20} />\n\t\t\t</Pressable>\n\t\t);\n\t}\n\n\treturn (\n\t\t<View style={[styles.panel, panelStyle, style]}>\n\t\t\t<View style={styles.header}>\n\t\t\t\t<View style={styles.headerTitleRow}>\n\t\t\t\t\t<Text style={styles.headerTitle}>{resolvedLabels.title}</Text>\n\t\t\t\t\t<Text style={styles.count}>{managed.length}</Text>\n\t\t\t\t</View>\n\t\t\t\t<Pressable\n\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\taccessibilityLabel={resolvedLabels.collapse}\n\t\t\t\t\tonPress={() => setCollapsed(true)}\n\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\tstyles.collapseButton,\n\t\t\t\t\t\tpressed && styles.actionButtonPressed,\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"chevronRight\" size={20} />\n\t\t\t\t</Pressable>\n\t\t\t</View>\n\t\t\t<ScrollView\n\t\t\t\tstyle={styles.listScroll}\n\t\t\t\tcontentContainerStyle={styles.listContent}\n\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{managed.map((item) => (\n\t\t\t\t\t<NativeImagesMenuRow\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\titems={items}\n\t\t\t\t\t\tlabels={resolvedLabels}\n\t\t\t\t\t\tonItemsChange={onItemsChange}\n\t\t\t\t\t\tonFocusItem={onFocusItem}\n\t\t\t\t\t\tgetImageUri={getImageUri}\n\t\t\t\t\t\trenderThumbnail={renderThumbnail}\n\t\t\t\t\t\trowStyle={rowStyle}\n\t\t\t\t\t\tactionButtonStyle={actionButtonStyle}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</ScrollView>\n\t\t</View>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tactionButton: {\n\t\talignItems: \"center\",\n\t\tborderRadius: 6,\n\t\theight: 32,\n\t\tjustifyContent: \"center\",\n\t\twidth: 32,\n\t},\n\tactionButtonPressed: {\n\t\tbackgroundColor: \"#f1f5f9\",\n\t},\n\tactionsColumn: {\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tjustifyContent: \"center\",\n\t},\n\tcollapseButton: {\n\t\talignItems: \"center\",\n\t\tborderRadius: 8,\n\t\theight: 32,\n\t\tjustifyContent: \"center\",\n\t\twidth: 32,\n\t},\n\tcollapsedButton: {\n\t\talignItems: \"center\",\n\t\tbackgroundColor: \"#ffffff\",\n\t\tborderColor: \"#e2e8f0\",\n\t\tborderRadius: 10,\n\t\tborderWidth: 1,\n\t\theight: 44,\n\t\tjustifyContent: \"center\",\n\t\tshadowColor: \"#0f172a\",\n\t\tshadowOffset: { width: 0, height: 8 },\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 24,\n\t\twidth: 44,\n\t},\n\tcollapsedButtonPressed: {\n\t\tbackgroundColor: \"#f8fafc\",\n\t},\n\tcount: {\n\t\tcolor: \"#64748b\",\n\t\tfontSize: 14,\n\t\tfontWeight: \"500\",\n\t},\n\tdangerActionButton: {\n\t\tbackgroundColor: \"#fef2f2\",\n\t},\n\thandle: {\n\t\talignItems: \"center\",\n\t\theight: 128,\n\t\tjustifyContent: \"center\",\n\t\twidth: 28,\n\t},\n\theader: {\n\t\talignItems: \"center\",\n\t\tborderBottomColor: \"#e2e8f0\",\n\t\tborderBottomWidth: 1,\n\t\tflexDirection: \"row\",\n\t\tgap: 8,\n\t\tjustifyContent: \"space-between\",\n\t\tpaddingBottom: 8,\n\t\tpaddingLeft: 14,\n\t\tpaddingRight: 8,\n\t\tpaddingTop: 8,\n\t},\n\theaderTitle: {\n\t\tcolor: \"#0f172a\",\n\t\tfontSize: 14,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.28,\n\t},\n\theaderTitleRow: {\n\t\talignItems: \"center\",\n\t\tflexDirection: \"row\",\n\t\tgap: 8,\n\t},\n\tlistContent: {\n\t\tgap: 6,\n\t\tpadding: 8,\n\t},\n\tlistScroll: {\n\t\tmaxHeight: 640,\n\t},\n\tpanel: {\n\t\tbackgroundColor: \"#ffffff\",\n\t\tborderColor: \"#e2e8f0\",\n\t\tborderRadius: 10,\n\t\tborderWidth: 1,\n\t\tmaxHeight: 820,\n\t\toverflow: \"hidden\",\n\t\tshadowColor: \"#0f172a\",\n\t\tshadowOffset: { width: 0, height: 10 },\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 40,\n\t},\n\trow: {\n\t\talignItems: \"center\",\n\t\tborderRadius: 10,\n\t\tflexDirection: \"row\",\n\t\tgap: 12,\n\t\tpaddingBottom: 10,\n\t\tpaddingLeft: 12,\n\t\tpaddingRight: 12,\n\t\tpaddingTop: 10,\n\t},\n\tthumbnailBox: {\n\t\talignItems: \"center\",\n\t\tbackgroundColor: \"#e2e8f0\",\n\t\tborderRadius: 8,\n\t\theight: 128,\n\t\tjustifyContent: \"center\",\n\t\toverflow: \"hidden\",\n\t\twidth: 128,\n\t},\n\tthumbnailButton: {\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\tthumbnailImage: {\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t},\n});\n","import { itemLocalToWorld, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { getLinkData } from \"../scene/link-item\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type ResizeHandleId = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\n\nexport const ALL_RESIZE_HANDLES: readonly ResizeHandleId[] = [\n\t\"nw\",\n\t\"n\",\n\t\"ne\",\n\t\"e\",\n\t\"se\",\n\t\"s\",\n\t\"sw\",\n\t\"w\",\n];\nexport const CORNER_RESIZE_HANDLES: readonly ResizeHandleId[] = [\n\t\"nw\",\n\t\"ne\",\n\t\"se\",\n\t\"sw\",\n];\n\n/**\n * Resize handles exposed for a custom shape.\n *\n * Use `\"all\"` for the default 8 handles, `\"corners\"` for corner-only resize,\n * or pass explicit handle ids for constrained tools such as a single southeast\n * corner handle. An empty array hides resize dots but leaves selection and\n * rotation available.\n */\nexport type CustomShapeResizeHandles = \"all\" | \"corners\" | readonly ResizeHandleId[];\n\nfunction dedupeHandles(\n\thandles: readonly ResizeHandleId[],\n): readonly ResizeHandleId[] {\n\tconst allowed = new Set(handles);\n\treturn ALL_RESIZE_HANDLES.filter((handle) => allowed.has(handle));\n}\n\nfunction resolveCustomResizeHandles(\n\thandles: CustomShapeResizeHandles | undefined,\n): readonly ResizeHandleId[] {\n\tif (handles === \"corners\") return CORNER_RESIZE_HANDLES;\n\tif (handles === \"all\" || handles === undefined) return ALL_RESIZE_HANDLES;\n\treturn dedupeHandles(handles);\n}\n\n/**\n * Returns the resize handles that should be visible and active for an item.\n *\n * Link cards keep their historical corner-only behavior. Custom shapes may\n * narrow the handle set through `customResizeHandles`; all other resizable\n * items use the full 8-handle set.\n */\nexport function resolveResizeHandlesForItem(\n\titem: VectorSceneItem | null | undefined,\n): readonly ResizeHandleId[] {\n\tif (!item) return ALL_RESIZE_HANDLES;\n\tif (getLinkData(item)) return CORNER_RESIZE_HANDLES;\n\tif (item.toolKind === \"custom\") {\n\t\treturn resolveCustomResizeHandles(item.customResizeHandles);\n\t}\n\treturn ALL_RESIZE_HANDLES;\n}\n\n/** Returns whether a handle is currently visible/active for an item. */\nexport function itemAllowsResizeHandle(\n\titem: VectorSceneItem | null | undefined,\n\thandle: ResizeHandleId,\n): boolean {\n\treturn resolveResizeHandlesForItem(item).includes(handle);\n}\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\thandles: readonly ResizeHandleId[] = ALL_RESIZE_HANDLES,\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 handles) {\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 * Deterministic accent from a peer id when `color` is not provided.\n */\nexport function defaultPresenceColorForId(id: string): string {\n\tlet h = 2166136261;\n\tfor (let i = 0; i < id.length; i++) {\n\t\th ^= id.charCodeAt(i);\n\t\th = Math.imul(h, 16777619);\n\t}\n\tconst hue = (h >>> 0) % 360;\n\treturn `hsl(${hue} 72% 42%)`;\n}\n","/**\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","import type { FreehandSvgPayload, StrokeStyle } from \"../scene/shape-builders\";\nimport { computeFreehandSvgPayload } from \"../scene/shape-builders\";\nimport type { VectorPathPoint } from \"../scene/types\";\n\ntype NativeFreehandToolKind = \"draw\" | \"pencil\" | \"brush\" | \"marker\";\n\ntype NativeFreehandSvgPayloadInput = {\n\treadonly itemId: string;\n\treadonly pathPointsLocal: readonly VectorPathPoint[];\n\treadonly style: StrokeStyle;\n\treadonly toolKind: NativeFreehandToolKind;\n};\n\nconst MAX_NATIVE_FREEHAND_PAYLOAD_CACHE_SIZE = 800;\nconst pathSignatureCache = new WeakMap<readonly VectorPathPoint[], string>();\nconst payloadCache = new Map<string, FreehandSvgPayload | null>();\n\nfunction hashNumber(hash: number, value: number): number {\n\tconst normalizedValue = Math.round(value * 100);\n\treturn Math.imul(hash ^ normalizedValue, 16777619) >>> 0;\n}\n\nfunction getPathPointsSignature(\n\tpathPointsLocal: readonly VectorPathPoint[],\n): string {\n\tconst cachedSignature = pathSignatureCache.get(pathPointsLocal);\n\tif (cachedSignature) return cachedSignature;\n\tconst hash = pathPointsLocal.reduce((currentHash, point) => {\n\t\tconst withX = hashNumber(currentHash, point.x);\n\t\tconst withY = hashNumber(withX, point.y);\n\t\treturn hashNumber(withY, point.pressure ?? -1);\n\t}, 2166136261);\n\tconst signature = `${pathPointsLocal.length}:${hash}`;\n\tpathSignatureCache.set(pathPointsLocal, signature);\n\treturn signature;\n}\n\nfunction getStyleSignature(style: StrokeStyle): string {\n\treturn [\n\t\tstyle.stroke,\n\t\tstyle.strokeWidth,\n\t\tstyle.strokeOpacity ?? \"\",\n\t\tstyle.strokeDash ?? \"\",\n\t].join(\":\");\n}\n\nfunction getPayloadCacheKey(input: NativeFreehandSvgPayloadInput): string {\n\treturn [\n\t\tinput.itemId,\n\t\tinput.toolKind,\n\t\tgetStyleSignature(input.style),\n\t\tgetPathPointsSignature(input.pathPointsLocal),\n\t].join(\"|\");\n}\n\nfunction storePayload(\n\tkey: string,\n\tpayload: FreehandSvgPayload | null,\n): FreehandSvgPayload | null {\n\tpayloadCache.set(key, payload);\n\tif (payloadCache.size > MAX_NATIVE_FREEHAND_PAYLOAD_CACHE_SIZE) {\n\t\tconst oldestKey = payloadCache.keys().next().value;\n\t\tif (oldestKey !== undefined) {\n\t\t\tpayloadCache.delete(oldestKey);\n\t\t}\n\t}\n\treturn payload;\n}\n\nexport function getNativeFreehandSvgPayload(\n\tinput: NativeFreehandSvgPayloadInput,\n): FreehandSvgPayload | null {\n\tconst key = getPayloadCacheKey(input);\n\tif (payloadCache.has(key)) {\n\t\treturn payloadCache.get(key) ?? null;\n\t}\n\treturn storePayload(\n\t\tkey,\n\t\tcomputeFreehandSvgPayload(input.pathPointsLocal, input.style, input.toolKind),\n\t);\n}\n","import type { Rect } from \"../math/rect\";\nimport { type CanvuLinkData, DEFAULT_LINK_CARD_SIZE } from \"../scene/link-item\";\n\nexport type NativeLinkCardDisplay = {\n\treadonly title: string;\n\treadonly subtitle: string;\n\treadonly initial: string;\n\treadonly secure: boolean;\n};\n\nfunction linkHostname(href: string): string {\n\ttry {\n\t\treturn new URL(href).hostname.replace(/^www\\./, \"\");\n\t} catch {\n\t\treturn href;\n\t}\n}\n\nfunction linkProtocol(href: string): string {\n\ttry {\n\t\treturn new URL(href).protocol;\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n\nfunction linkInitial(value: string): string {\n\tconst first = value.trim().charAt(0).toUpperCase();\n\treturn first || \"L\";\n}\n\nexport function normalizeNativeLinkHref(value: string): string | null {\n\tconst trimmed = value.trim();\n\tif (!trimmed) return null;\n\tif (/^[a-z][a-z0-9+.-]*:/i.test(trimmed)) return trimmed;\n\treturn `https://${trimmed}`;\n}\n\nexport function buildNativeLinkCardDisplay(\n\tlink: CanvuLinkData,\n): NativeLinkCardDisplay {\n\tconst hostname = linkHostname(link.href);\n\tconst title = link.title?.trim() || hostname || \"Link\";\n\treturn {\n\t\ttitle,\n\t\tsubtitle: hostname || link.href,\n\t\tinitial: linkInitial(hostname || title),\n\t\tsecure: linkProtocol(link.href) === \"https:\",\n\t};\n}\n\nexport function createNativeLinkCardBoundsAtPoint(point: {\n\treadonly x: number;\n\treadonly y: number;\n}): Rect {\n\treturn {\n\t\tx: point.x - DEFAULT_LINK_CARD_SIZE.width / 2,\n\t\ty: point.y - DEFAULT_LINK_CARD_SIZE.height / 2,\n\t\twidth: DEFAULT_LINK_CARD_SIZE.width,\n\t\theight: DEFAULT_LINK_CARD_SIZE.height,\n\t};\n}\n","import type { SkImage } from \"@shopify/react-native-skia\";\nimport { useEffect, useState } from \"react\";\n\nexport type NativeImageCacheImage = {\n\treadonly dispose?: () => void;\n};\n\ntype NativeImageCacheInput<TImage extends NativeImageCacheImage> = {\n\treadonly loadImage: (href: string) => Promise<TImage | null>;\n\treadonly maxEntries?: number;\n};\n\ntype NativeImageCacheEntry<TImage extends NativeImageCacheImage> = {\n\timage?: TImage;\n\tpromise?: Promise<TImage | null>;\n\tlastUsed: number;\n\tretainCount: number;\n};\n\nexport type NativeImageCache<TImage extends NativeImageCacheImage> = {\n\treadonly getCached: (href: string) => TImage | null;\n\treadonly load: (href: string) => Promise<TImage | null>;\n\treadonly retain: (href: string) => () => void;\n\treadonly clear: () => void;\n\treadonly size: () => number;\n};\n\ntype LoadedSkiaImage = {\n\treadonly href: string;\n\treadonly image: SkImage | null;\n};\n\nconst DEFAULT_NATIVE_IMAGE_CACHE_MAX_ENTRIES = 96;\n\nfunction disposeCachedImage(image: NativeImageCacheImage): void {\n\ttry {\n\t\timage.dispose?.();\n\t} catch {}\n}\n\nexport function createNativeImageCache<TImage extends NativeImageCacheImage>({\n\tloadImage,\n\tmaxEntries = DEFAULT_NATIVE_IMAGE_CACHE_MAX_ENTRIES,\n}: NativeImageCacheInput<TImage>): NativeImageCache<TImage> {\n\tconst safeMaxEntries = Math.max(1, Math.round(maxEntries));\n\tconst entries = new Map<string, NativeImageCacheEntry<TImage>>();\n\tlet clock = 0;\n\n\tconst touchEntry = (entry: NativeImageCacheEntry<TImage>) => {\n\t\tclock += 1;\n\t\tentry.lastUsed = clock;\n\t};\n\n\tconst createEntry = (): NativeImageCacheEntry<TImage> => {\n\t\tclock += 1;\n\t\treturn {\n\t\t\tlastUsed: clock,\n\t\t\tretainCount: 0,\n\t\t};\n\t};\n\n\tconst prune = () => {\n\t\tconst cachedEntries = [...entries.entries()].filter(\n\t\t\t(\n\t\t\t\tentry,\n\t\t\t): entry is [string, NativeImageCacheEntry<TImage> & { image: TImage }] =>\n\t\t\t\tentry[1].image != null && entry[1].retainCount === 0,\n\t\t);\n\t\tif (cachedEntries.length <= safeMaxEntries) return;\n\t\tconst evictedEntries = cachedEntries\n\t\t\t.sort(\n\t\t\t\t(leftEntry, rightEntry) => leftEntry[1].lastUsed - rightEntry[1].lastUsed,\n\t\t\t)\n\t\t\t.slice(0, cachedEntries.length - safeMaxEntries);\n\t\tfor (const [href, entry] of evictedEntries) {\n\t\t\tentries.delete(href);\n\t\t\tdisposeCachedImage(entry.image);\n\t\t}\n\t};\n\n\tconst getCached = (href: string): TImage | null => {\n\t\tconst entry = entries.get(href);\n\t\tif (!entry?.image) return null;\n\t\ttouchEntry(entry);\n\t\treturn entry.image;\n\t};\n\n\tconst load = async (href: string): Promise<TImage | null> => {\n\t\tconst cachedImage = getCached(href);\n\t\tif (cachedImage) return cachedImage;\n\t\tconst existingEntry = entries.get(href);\n\t\tif (existingEntry?.promise) return await existingEntry.promise;\n\t\tconst entry = existingEntry ?? createEntry();\n\t\tconst promise = loadImage(href)\n\t\t\t.then((image) => {\n\t\t\t\tif (!image) {\n\t\t\t\t\tif (entry.retainCount === 0) entries.delete(href);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tentry.image = image;\n\t\t\t\tentry.promise = undefined;\n\t\t\t\ttouchEntry(entry);\n\t\t\t\tprune();\n\t\t\t\treturn image;\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tentries.delete(href);\n\t\t\t\tthrow error;\n\t\t\t});\n\t\tentry.promise = promise;\n\t\tentries.set(href, entry);\n\t\treturn await promise;\n\t};\n\n\tconst retain = (href: string) => {\n\t\tconst entry = entries.get(href) ?? createEntry();\n\t\tentry.retainCount += 1;\n\t\ttouchEntry(entry);\n\t\tentries.set(href, entry);\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tentry.retainCount = Math.max(0, entry.retainCount - 1);\n\t\t\tif (!entry.image && !entry.promise && entry.retainCount === 0) {\n\t\t\t\tentries.delete(href);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprune();\n\t\t};\n\t};\n\n\tconst clear = () => {\n\t\tfor (const entry of entries.values()) {\n\t\t\tif (entry.image) disposeCachedImage(entry.image);\n\t\t}\n\t\tentries.clear();\n\t};\n\n\tconst size = () =>\n\t\t[...entries.values()].filter((entry) => entry.image != null).length;\n\n\treturn { getCached, load, retain, clear, size };\n}\n\nasync function loadSkiaImageFromHref(href: string): Promise<SkImage | null> {\n\tconst { Skia } = await import(\"@shopify/react-native-skia\");\n\tconst data = await Skia.Data.fromURI(href);\n\treturn Skia.Image.MakeImageFromEncoded(data);\n}\n\nconst nativeSkiaImageCache = createNativeImageCache<SkImage>({\n\tloadImage: loadSkiaImageFromHref,\n});\n\nexport function useCachedSkiaImage(href: string | null | undefined): SkImage | null {\n\tconst [loadedImage, setLoadedImage] = useState<LoadedSkiaImage | null>(() =>\n\t\thref ? { href, image: nativeSkiaImageCache.getCached(href) } : null,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!href) {\n\t\t\tsetLoadedImage(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst releaseImage = nativeSkiaImageCache.retain(href);\n\t\tconst cachedImage = nativeSkiaImageCache.getCached(href);\n\t\tif (cachedImage) {\n\t\t\tsetLoadedImage({ href, image: cachedImage });\n\t\t\treturn releaseImage;\n\t\t}\n\n\t\tlet active = true;\n\t\tsetLoadedImage({ href, image: null });\n\t\tvoid nativeSkiaImageCache.load(href).then(\n\t\t\t(loadedImage) => {\n\t\t\t\tif (active) setLoadedImage({ href, image: loadedImage });\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (active) setLoadedImage({ href, image: null });\n\t\t\t},\n\t\t);\n\n\t\treturn () => {\n\t\t\tactive = false;\n\t\t\treleaseImage();\n\t\t};\n\t}, [href]);\n\n\tif (!href || loadedImage?.href !== href) return null;\n\treturn loadedImage.image;\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\nexport function skiaItemTranslationTransform(x: number, y: number): SkiaTransform[] {\n\treturn [{ translateX: x }, { translateY: y }];\n}\n\nexport function skiaItemRotationTransform(rotationRad: number): SkiaTransform[] {\n\tif (Math.abs(rotationRad) > 1e-12) {\n\t\treturn [{ rotate: rotationRad }];\n\t}\n\treturn [];\n}\n\nexport function skiaItemRotationOrigin(\n\tx: number,\n\ty: number,\n\tcx: number,\n\tcy: number,\n): { x: number; y: number } {\n\treturn { x: x + cx, y: y + cy };\n}\n","import {\n\tDashPathEffect,\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\tvec,\n} from \"@shopify/react-native-skia\";\nimport { useCachedSkiaImage } from \"./native-image-cache\";\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\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 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\tconst intervals =\n\t\t\t\tstyle === \"stroke\"\n\t\t\t\t\t? dashIntervalsFromStrokeDasharray(node.strokeDasharray)\n\t\t\t\t\t: null;\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\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t\t</Path>\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 = useCachedSkiaImage(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 strokeDasharray?: 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\tstrokeDasharray: attrs[\"stroke-dasharray\"],\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\tDashPathEffect,\n\tGroup,\n\tLine,\n\tmatchFont,\n\tPath,\n\tRoundedRect,\n\tRect as SkiaRect,\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\ttype CanvuLinkData,\n\tDEFAULT_LINK_CARD_SIZE,\n\tgetLinkData,\n} from \"../scene/link-item\";\nimport {\n\tcomputeStraightArrowGeometry,\n\tresolveStrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { getNativeFreehandSvgPayload } from \"./native-freehand-payload-cache\";\nimport { buildNativeLinkCardDisplay } from \"./native-link-card\";\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\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 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\nfunction truncateText(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\treturn `${value.slice(0, Math.max(0, maxChars - 3)).trimEnd()}...`;\n}\n\nfunction NativeLinkCardRenderer({\n\titem,\n\tlink,\n}: {\n\treadonly item: VectorSceneItem;\n\treadonly link: CanvuLinkData;\n}) {\n\tconst bounds = normalizeRect(item.bounds);\n\tconst scaleX = Math.max(0.01, bounds.width / DEFAULT_LINK_CARD_SIZE.width);\n\tconst scaleY = Math.max(0.01, bounds.height / DEFAULT_LINK_CARD_SIZE.height);\n\tconst display = buildNativeLinkCardDisplay(link);\n\tconst titleFont = matchFont({ fontSize: 14.5, fontWeight: \"700\" });\n\tconst subtitleFont = matchFont({ fontSize: 12.5 });\n\tconst initialFont = matchFont({ fontSize: 17, fontWeight: \"700\" });\n\tconst title = truncateText(display.title, 28);\n\tconst subtitle = truncateText(display.subtitle, display.secure ? 28 : 31);\n\tconst subtitleX = display.secure ? 82 : 69;\n\tconst subtitleWidth = display.secure ? 188 : 201;\n\n\treturn (\n\t\t<Group transform={[{ scaleX }, { scaleY }]}>\n\t\t\t<RoundedRect\n\t\t\t\tx={0}\n\t\t\t\ty={0}\n\t\t\t\twidth={DEFAULT_LINK_CARD_SIZE.width}\n\t\t\t\theight={DEFAULT_LINK_CARD_SIZE.height}\n\t\t\t\tr={16}\n\t\t\t\tcolor=\"#ffffff\"\n\t\t\t\tstyle=\"fill\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<RoundedRect\n\t\t\t\tx={0.5}\n\t\t\t\ty={0.5}\n\t\t\t\twidth={DEFAULT_LINK_CARD_SIZE.width - 1}\n\t\t\t\theight={DEFAULT_LINK_CARD_SIZE.height - 1}\n\t\t\t\tr={15.5}\n\t\t\t\tcolor=\"#dfe4ea\"\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={1}\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<RoundedRect\n\t\t\t\tx={14}\n\t\t\t\ty={14}\n\t\t\t\twidth={42}\n\t\t\t\theight={42}\n\t\t\t\tr={11}\n\t\t\t\tcolor=\"#315bd6\"\n\t\t\t\tstyle=\"fill\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<SkiaText\n\t\t\t\tx={29.5}\n\t\t\t\ty={41}\n\t\t\t\ttext={display.initial}\n\t\t\t\tcolor=\"#ffffff\"\n\t\t\t\tfont={initialFont}\n\t\t\t/>\n\t\t\t<Group clip={{ x: 69, y: 13, width: 215, height: 24 }}>\n\t\t\t\t<SkiaText x={69} y={32} text={title} color=\"#1f2937\" font={titleFont} />\n\t\t\t</Group>\n\t\t\t{display.secure ? (\n\t\t\t\t<Group transform={[{ translateX: 69 }, { translateY: 41 }]}>\n\t\t\t\t\t<SkiaRect\n\t\t\t\t\t\tx={1.5}\n\t\t\t\t\t\ty={4.5}\n\t\t\t\t\t\twidth={7}\n\t\t\t\t\t\theight={6}\n\t\t\t\t\t\tcolor=\"#6b7280\"\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={1.3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath=\"M3 4.5 V3 a2 2 0 0 1 4 0 v1.5\"\n\t\t\t\t\t\tcolor=\"#6b7280\"\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={1.3}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t/>\n\t\t\t\t</Group>\n\t\t\t) : null}\n\t\t\t<Group clip={{ x: subtitleX, y: 34, width: subtitleWidth, height: 22 }}>\n\t\t\t\t<SkiaText\n\t\t\t\t\tx={subtitleX}\n\t\t\t\t\ty={51}\n\t\t\t\t\ttext={subtitle}\n\t\t\t\t\tcolor=\"#6b7280\"\n\t\t\t\t\tfont={subtitleFont}\n\t\t\t\t/>\n\t\t\t</Group>\n\t\t</Group>\n\t);\n}\n\nexport function NativeShapeRenderer({ item }: NativeShapeRendererProps) {\n\tconst link = getLinkData(item);\n\tif (link) {\n\t\treturn <NativeLinkCardRenderer item={item} link={link} />;\n\t}\n\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 = getNativeFreehandSvgPayload({\n\t\t\titemId: item.id,\n\t\t\tpathPointsLocal: item.pathPointsLocal,\n\t\t\tstyle,\n\t\t\ttoolKind: k,\n\t\t});\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\tconst intervals = dashIntervalsFromStrokeDasharray(payload.strokeDasharray);\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\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t</Path>\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 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 { smoothFreehandPointsToPathD } from \"../scene/freehand-path\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\n\nexport type NativeStrokePreviewPoint = {\n\treadonly x: number;\n\treadonly y: number;\n};\n\nexport type NativeStrokePreviewTool = \"draw\" | \"marker\" | \"laser\";\n\nexport const NATIVE_STROKE_PREVIEW_MAX_POINTS = 160;\n\nexport function sampleNativeStrokePreviewPoints(\n\tpoints: readonly NativeStrokePreviewPoint[],\n\tmaxPoints = NATIVE_STROKE_PREVIEW_MAX_POINTS,\n): NativeStrokePreviewPoint[] {\n\tif (points.length <= maxPoints) return points.map((point) => ({ ...point }));\n\tif (maxPoints <= 1) {\n\t\tconst last = points[points.length - 1];\n\t\treturn last ? [{ ...last }] : [];\n\t}\n\tconst lastIndex = points.length - 1;\n\tconst last = points[lastIndex];\n\tif (!last) return [];\n\tconst step = lastIndex / (maxPoints - 1);\n\treturn Array.from({ length: maxPoints }, (_, index) => {\n\t\tconst point = points[Math.round(index * step)] ?? last;\n\t\treturn { x: point.x, y: point.y };\n\t});\n}\n\nexport function buildNativeStrokePreviewPath(\n\tpoints: readonly NativeStrokePreviewPoint[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst d = smoothFreehandPointsToPathD(points);\n\treturn d || null;\n}\n\nexport function nativeStrokePreviewDashArray(\n\tstyle: StrokeStyle,\n\ttool: NativeStrokePreviewTool,\n): string | undefined {\n\tif (style.strokeDash !== \"dashed\" || tool !== \"draw\") return undefined;\n\tconst dash = Math.max(style.strokeWidth * 1.8, 4);\n\tconst gap = Math.max(style.strokeWidth * 1.4, 3);\n\treturn `${dash} ${gap}`;\n}\n","import {\n\thitTestResizeHandle,\n\thitTestRotateHandle,\n\ttype ResizeHandleId,\n\tresolveResizeHandlesForItem,\n} from \"../interaction/resize-handles\";\nimport { worldToItemLocal } 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 nativeItemPlacementBounds(item: VectorSceneItem): Rect {\n\tconst bounds = normalizeRect(item.bounds);\n\treturn {\n\t\tx: item.x,\n\t\ty: item.y,\n\t\twidth: bounds.width,\n\t\theight: bounds.height,\n\t};\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 = nativeItemPlacementBounds(selectedItem);\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\tresolveResizeHandlesForItem(selectedItem),\n\t);\n\treturn handle ? { kind: \"resize\", handle } : null;\n}\n\nexport function pointInNativeSelectedItemBounds(\n\titem: VectorSceneItem,\n\tworldPoint: { readonly x: number; readonly y: number },\n): boolean {\n\tconst bounds = normalizeRect(item.bounds);\n\tconst local = worldToItemLocal(\n\t\tworldPoint.x,\n\t\tworldPoint.y,\n\t\titem.x,\n\t\titem.y,\n\t\tbounds.width,\n\t\tbounds.height,\n\t\titem.rotation ?? 0,\n\t);\n\treturn (\n\t\tlocal.x >= 0 &&\n\t\tlocal.x <= bounds.width &&\n\t\tlocal.y >= 0 &&\n\t\tlocal.y <= bounds.height\n\t);\n}\n\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 bounds = nativeItemPlacementBounds(input.item);\n\tconst pivotWorld = {\n\t\tx: bounds.x + bounds.width / 2,\n\t\ty: bounds.y + bounds.height / 2,\n\t};\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\tCanvas,\n\tDashPathEffect,\n\tGroup,\n\tLine,\n\tmatchFont,\n\tOval,\n\tPath,\n\tRect,\n\tRoundedRect,\n\tCircle as SkiaCircle,\n\tText as SkiaText,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport { type ReactNode, useMemo } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport {\n\tgetHandleWorldPositionRotated,\n\tgetRotationHandleWorldPosition,\n\tresolveResizeHandlesForItem,\n} from \"../interaction/resize-handles\";\nimport { normalizeRect } from \"../math/rect\";\nimport { defaultPresenceColorForId } from \"../react/presence/peer-color\";\nimport type {\n\tRemotePresenceMarkupStroke,\n\tRemotePresencePeer,\n} from \"../react/presence/types\";\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 {\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 {\n\tbuildNativeStrokePreviewPath,\n\tnativeStrokePreviewDashArray,\n} from \"./native-stroke-preview\";\nimport { nativeItemPlacementBounds } from \"./native-vector-interactions\";\nimport {\n\tskiaCameraTransform,\n\tskiaItemRotationOrigin,\n\tskiaItemRotationTransform,\n\tskiaItemTranslationTransform,\n} from \"./skia-transform\";\n\nconst ERASER_PREVIEW_OPACITY = 0.3;\nconst OVERLAY_STROKE_PX = 1.25;\nconst MARQUEE_DASH_PX = 4;\nconst REMOTE_CURSOR_SCREEN_PX = 22;\nconst REMOTE_LABEL_SCREEN_PX = 12;\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 remotePresence?: readonly RemotePresencePeer[];\n};\n\nfunction remoteStrokePaint(\n\ttool: RemotePresenceMarkupStroke[\"tool\"],\n\tfallback: string,\n): { stroke: string; strokeOpacity: number; widthWorld: number } {\n\tif (tool === \"laser\") {\n\t\treturn { stroke: LASER_TINT, strokeOpacity: 0.92, widthWorld: 4 };\n\t}\n\tif (tool === \"marker\") {\n\t\treturn { stroke: fallback, strokeOpacity: 0.45, widthWorld: 14 };\n\t}\n\tif (tool === \"brush\") {\n\t\treturn { stroke: fallback, strokeOpacity: 0.85, widthWorld: 5 };\n\t}\n\tif (tool === \"pencil\") {\n\t\treturn { stroke: fallback, strokeOpacity: 0.9, widthWorld: 2.5 };\n\t}\n\treturn { stroke: fallback, strokeOpacity: 0.95, widthWorld: 3.5 };\n}\n\nfunction isRemoteFreehandTool(\n\ttool: RemotePresenceMarkupStroke[\"tool\"],\n): tool is \"draw\" | \"marker\" | \"pencil\" | \"brush\" {\n\treturn (\n\t\ttool === \"draw\" || tool === \"marker\" || tool === \"pencil\" || tool === \"brush\"\n\t);\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\tremotePresence = [],\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 ? nativeItemPlacementBounds(single) : 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 rotationTransform = skiaItemRotationTransform(it.rotation ?? 0);\n\t\t\t\t\tconst rotationOrigin = skiaItemRotationOrigin(it.x, it.y, cx, cy);\n\t\t\t\t\tconst translationTransform = skiaItemTranslationTransform(it.x, it.y);\n\t\t\t\t\tconst selectionRect = (\n\t\t\t\t\t\t<Group transform={translationTransform}>\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\tif (rotationTransform.length === 0) {\n\t\t\t\t\t\treturn <Group key={it.id}>{selectionRect}</Group>;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group key={it.id} transform={rotationTransform} origin={rotationOrigin}>\n\t\t\t\t\t\t\t{selectionRect}\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{resolveResizeHandlesForItem(single).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 strokeColor = colorWithOpacity(\n\t\t\t\tstyle.stroke,\n\t\t\t\tisLaser ? 0.85 : style.strokeOpacity,\n\t\t\t);\n\t\t\tif (p.points.length === 1) {\n\t\t\t\tconst point = p.points[0];\n\t\t\t\tif (!point) return null;\n\t\t\t\treturn (\n\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\tcx={point.x}\n\t\t\t\t\t\tcy={point.y}\n\t\t\t\t\t\tr={Math.max(0.5, style.strokeWidth / 2)}\n\t\t\t\t\t\tcolor={strokeColor}\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\tconst path = buildNativeStrokePreviewPath(p.points);\n\t\t\tif (!path) return null;\n\t\t\tconst strokeDasharray = nativeStrokePreviewDashArray(style, p.tool);\n\t\t\tconst intervals = dashIntervalsFromStrokeDasharray(strokeDasharray);\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={path}\n\t\t\t\t\tcolor={strokeColor}\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\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t\t</Path>\n\t\t\t);\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 rotationTransform = skiaItemRotationTransform(it.rotation ?? 0);\n\t\t\t\t\tconst rotationOrigin = skiaItemRotationOrigin(it.x, it.y, cx, cy);\n\t\t\t\t\tconst translationTransform = skiaItemTranslationTransform(it.x, it.y);\n\t\t\t\t\tconst preview = (\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={translationTransform}\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\tif (rotationTransform.length === 0) return preview;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group\n\t\t\t\t\t\t\tkey={`erase-rot-${it.id}`}\n\t\t\t\t\t\t\ttransform={rotationTransform}\n\t\t\t\t\t\t\torigin={rotationOrigin}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{preview}\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\tconst remotePresenceElements = useMemo(() => {\n\t\tif (remotePresence.length === 0) return null;\n\t\tconst labelFont = matchFont({ fontSize: REMOTE_LABEL_SCREEN_PX / z });\n\t\tconst cursorSize = REMOTE_CURSOR_SCREEN_PX / z;\n\t\tconst labelOffsetX = 14 / z;\n\t\tconst labelOffsetY = 18 / z;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{remotePresence.map((peer) => {\n\t\t\t\t\tconst color = peer.color ?? defaultPresenceColorForId(peer.id);\n\t\t\t\t\tconst markup = peer.markupStroke;\n\t\t\t\t\tconst cursor = peer.cursor;\n\t\t\t\t\tconst camera = peer.camera;\n\t\t\t\t\tlet strokeElement: ReactNode = null;\n\t\t\t\t\tif (markup && markup.points.length > 0) {\n\t\t\t\t\t\tconst fallbackPaint = remoteStrokePaint(markup.tool, color);\n\t\t\t\t\t\tconst paint = {\n\t\t\t\t\t\t\tstroke: markup.stroke ?? fallbackPaint.stroke,\n\t\t\t\t\t\t\tstrokeOpacity: markup.strokeOpacity ?? fallbackPaint.strokeOpacity,\n\t\t\t\t\t\t\twidthWorld: markup.strokeWidth ?? fallbackPaint.widthWorld,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (markup.tool === \"laser\") {\n\t\t\t\t\t\t\tconst d =\n\t\t\t\t\t\t\t\tmarkup.points.length >= 2\n\t\t\t\t\t\t\t\t\t? smoothFreehandPointsToPathD([...markup.points])\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\t\tpath={d}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(paint.stroke, paint.strokeOpacity)}\n\t\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={Math.max(paint.widthWorld, OVERLAY_STROKE_PX) / z}\n\t\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\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);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!strokeElement && isRemoteFreehandTool(markup.tool)) {\n\t\t\t\t\t\t\tconst payload = computeFreehandSvgPayload(\n\t\t\t\t\t\t\t\tmarkup.points.map((point) => ({ x: point.x, y: point.y })),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstroke: paint.stroke,\n\t\t\t\t\t\t\t\t\tstrokeWidth: paint.widthWorld,\n\t\t\t\t\t\t\t\t\tstrokeOpacity: paint.strokeOpacity,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmarkup.tool,\n\t\t\t\t\t\t\t\tmarkup.points.length === 2,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (payload?.kind === \"circle\") {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\t\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\t\t\t\t\t\tr={payload.r}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\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);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (payload?.kind === \"fillPath\") {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\n\t\t\t\t\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\t\t\t\t\tfillType=\"winding\"\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);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (payload?.kind === \"strokePath\") {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(payload.stroke, payload.strokeOpacity)}\n\t\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\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);\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\tconst cameraElement = camera ? (\n\t\t\t\t\t\t<Rect\n\t\t\t\t\t\t\tx={-camera.x / camera.zoom}\n\t\t\t\t\t\t\ty={-camera.y / camera.zoom}\n\t\t\t\t\t\t\twidth={camera.viewportWidth / camera.zoom}\n\t\t\t\t\t\t\theight={camera.viewportHeight / camera.zoom}\n\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DashPathEffect intervals={[marqueeDashWorld, marqueeDashWorld]} />\n\t\t\t\t\t\t</Rect>\n\t\t\t\t\t) : null;\n\t\t\t\t\tconst cursorElement = cursor ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\tpath={`M ${cursor.x} ${cursor.y} L ${cursor.x + cursorSize} ${cursor.y + cursorSize * 0.34} L ${cursor.x + cursorSize * 0.42} ${cursor.y + cursorSize * 0.44} L ${cursor.x + cursorSize * 0.58} ${cursor.y + cursorSize} Z`}\n\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{peer.displayName ? (\n\t\t\t\t\t\t\t\t<SkiaText\n\t\t\t\t\t\t\t\t\tx={cursor.x + labelOffsetX}\n\t\t\t\t\t\t\t\t\ty={cursor.y + labelOffsetY}\n\t\t\t\t\t\t\t\t\ttext={peer.displayName}\n\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\tfont={labelFont}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group key={peer.clientId ?? peer.id}>\n\t\t\t\t\t\t\t{cameraElement}\n\t\t\t\t\t\t\t{strokeElement}\n\t\t\t\t\t\t\t{cursorElement}\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}, [remotePresence, z, overlayStrokeWorld, marqueeDashWorld]);\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{remotePresenceElements}\n\t\t\t\t{selectionElements}\n\t\t\t</Group>\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 {\n\tskiaCameraTransform,\n\tskiaItemRotationOrigin,\n\tskiaItemRotationTransform,\n\tskiaItemTranslationTransform,\n} 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 rotationTransform = skiaItemRotationTransform(item.rotation ?? 0);\n\tconst rotationOrigin = skiaItemRotationOrigin(item.x, item.y, cx, cy);\n\tconst translationTransform = skiaItemTranslationTransform(item.x, item.y);\n\n\tconst shape = (\n\t\t<Group transform={translationTransform}>\n\t\t\t<NativeShapeRenderer item={item} />\n\t\t</Group>\n\t);\n\n\tif (rotationTransform.length === 0) return shape;\n\n\treturn (\n\t\t<Group transform={rotationTransform} origin={rotationOrigin}>\n\t\t\t{shape}\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 { Canvas, Group, Path } from \"@shopify/react-native-skia\";\nimport { 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\t\"link\",\n] as const;\n\nconst CLOUD_TOOL_ICON_PATH =\n\t\"M17.5 19H8.5a6.5 6.5 0 1 1 6.17-8.55A4.75 4.75 0 0 1 17.5 9.5a4.75 4.75 0 0 1 0 9.5Z\";\nconst LINK_TOOL_ICON_PATHS = [\n\t\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\",\n\t\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\",\n] as const;\n\nfunction NativeCloudToolIcon({\n\tcolor,\n\tsize = 19,\n\tstrokeWidth = 2,\n}: {\n\treadonly color: string;\n\treadonly size?: number;\n\treadonly strokeWidth?: number;\n}) {\n\tconst scale = size / 24;\n\treturn (\n\t\t<Canvas style={{ width: size, height: size }}>\n\t\t\t<Group transform={[{ scale }]}>\n\t\t\t\t<Path\n\t\t\t\t\tpath={CLOUD_TOOL_ICON_PATH}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t/>\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\n\nfunction NativeLinkToolIcon({\n\tcolor,\n\tsize = 20,\n\tstrokeWidth = 2.4,\n}: {\n\treadonly color: string;\n\treadonly size?: number;\n\treadonly strokeWidth?: number;\n}) {\n\tconst scale = size / 24;\n\treturn (\n\t\t<Canvas style={{ width: size, height: size }}>\n\t\t\t<Group transform={[{ scale }]}>\n\t\t\t\t{LINK_TOOL_ICON_PATHS.map((path) => (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tkey={path}\n\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\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\t{ id: \"link\", label: \"Link\", shortcutHint: \"N\", shortLabel: \"L\" },\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\tif (tool.id === \"architectural-cloud\") {\n\t\treturn <NativeCloudToolIcon color={foregroundColor} />;\n\t}\n\tif (tool.id === \"link\") {\n\t\treturn <NativeLinkToolIcon color={foregroundColor} />;\n\t}\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\tgetLinkData,\n\tLINK_CARD_ASPECT,\n\tLINK_CARD_MAX_SCALE,\n\tLINK_CARD_MIN_SCALE,\n} from \"../scene/link-item\";\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\titemAllowsResizeHandle,\n\ttype ResizeHandleId,\n} from \"./resize-handles\";\n\nconst LINK_CORNER_HANDLES = new Set<ResizeHandleId>([\"nw\", \"ne\", \"se\", \"sw\"]);\n\nconst clamp = (value: number, min: number, max: number): number =>\n\tMath.min(max, Math.max(min, value));\n\nconst clampLinkResizeBounds = (\n\tstartBounds: Rect,\n\tnextBounds: Rect,\n\thandle: ResizeHandleId,\n\tintrinsicWidth: number,\n): Rect => {\n\tconst next = normalizeRect(nextBounds);\n\tconst scale = clamp(\n\t\tnext.width / Math.max(1e-9, intrinsicWidth),\n\t\tLINK_CARD_MIN_SCALE,\n\t\tLINK_CARD_MAX_SCALE,\n\t);\n\tconst width = intrinsicWidth * scale;\n\tconst height = width / LINK_CARD_ASPECT;\n\tconst start = normalizeRect(startBounds);\n\tconst x0 = start.x;\n\tconst y0 = start.y;\n\tconst x1 = start.x + start.width;\n\tconst y1 = start.y + start.height;\n\tswitch (handle) {\n\t\tcase \"nw\":\n\t\t\treturn { x: x1 - width, y: y1 - height, width, height };\n\t\tcase \"ne\":\n\t\t\treturn { x: x0, y: y1 - height, width, height };\n\t\tcase \"sw\":\n\t\t\treturn { x: x1 - width, y: y0, width, height };\n\t\tdefault:\n\t\t\treturn { x: x0, y: y0, width, height };\n\t}\n};\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\tconst link = getLinkData(item);\n\tif (link && item.customIntrinsicSize) {\n\t\tif (!LINK_CORNER_HANDLES.has(handle)) return sb;\n\t\tconst intrinsicWidth = Math.max(1e-9, item.customIntrinsicSize.width);\n\t\tif (Math.abs(rot) < 1e-12) {\n\t\t\tconst next = computeResizeBoundsFixedAspect(\n\t\t\t\tsb,\n\t\t\t\thandle,\n\t\t\t\tcurrentWorld,\n\t\t\t\tLINK_CARD_ASPECT,\n\t\t\t);\n\t\t\treturn clampLinkResizeBounds(sb, next, handle, intrinsicWidth);\n\t\t}\n\t\tconst local = worldToItemLocal(\n\t\t\tcurrentWorld.x,\n\t\t\tcurrentWorld.y,\n\t\t\tsb.x,\n\t\t\tsb.y,\n\t\t\tsb.width,\n\t\t\tsb.height,\n\t\t\trot,\n\t\t);\n\t\tconst localBounds = { x: 0, y: 0, width: sb.width, height: sb.height };\n\t\tconst nextLocal = computeResizeBoundsFixedAspect(\n\t\t\tlocalBounds,\n\t\t\thandle,\n\t\t\tlocal,\n\t\t\tLINK_CARD_ASPECT,\n\t\t);\n\t\tconst clamped = clampLinkResizeBounds(\n\t\t\tlocalBounds,\n\t\t\tnextLocal,\n\t\t\thandle,\n\t\t\tintrinsicWidth,\n\t\t);\n\t\treturn {\n\t\t\tx: sb.x + clamped.x,\n\t\t\ty: sb.y + clamped.y,\n\t\t\twidth: clamped.width,\n\t\t\theight: clamped.height,\n\t\t};\n\t}\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\tif (!itemAllowsResizeHandle(item, handle)) {\n\t\treturn item;\n\t}\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","import type { Camera2D } from \"../camera/camera\";\nimport type { RemotePresencePeer } from \"../react/presence/types\";\n\nexport type NativeRemotePresenceHitTarget = \"cursor\" | \"label\";\n\nexport type NativeRemotePresenceHit = {\n\treadonly peer: RemotePresencePeer;\n\treadonly followId: string;\n\treadonly target: NativeRemotePresenceHitTarget;\n\treadonly screenX: number;\n\treadonly screenY: number;\n\treadonly worldX: number;\n\treadonly worldY: number;\n\treadonly clientId?: string;\n\treadonly peerId?: string;\n};\n\nconst REMOTE_CURSOR_SCREEN_PX = 22;\nconst REMOTE_LABEL_SCREEN_PX = 12;\nconst REMOTE_LABEL_OFFSET_X = 14;\nconst REMOTE_LABEL_BASELINE_OFFSET_Y = 18;\nconst REMOTE_LABEL_AVERAGE_CHAR_PX = 7;\nconst REMOTE_LABEL_MAX_WIDTH_PX = 180;\nconst REMOTE_LABEL_MIN_HIT_WIDTH_PX = 44;\nconst REMOTE_LABEL_HIT_PADDING_X = 10;\nconst REMOTE_LABEL_HIT_PADDING_Y = 10;\nconst REMOTE_CURSOR_MIN_HIT_SIZE_PX = 36;\n\ntype ScreenPoint = {\n\treadonly x: number;\n\treadonly y: number;\n};\n\ntype ScreenRect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\nfunction pointInScreenRect(point: ScreenPoint, rect: ScreenRect): boolean {\n\treturn (\n\t\tpoint.x >= rect.x &&\n\t\tpoint.x <= rect.x + rect.width &&\n\t\tpoint.y >= rect.y &&\n\t\tpoint.y <= rect.y + rect.height\n\t);\n}\n\nfunction displayLabelForPeer(peer: RemotePresencePeer): string | null {\n\tconst displayName = peer.displayName?.trim();\n\tif (displayName) return displayName;\n\treturn null;\n}\n\nfunction followIdForPeer(peer: RemotePresencePeer): string {\n\treturn peer.clientId ?? peer.peerId ?? peer.id;\n}\n\nfunction estimateLabelWidth(label: string): number {\n\treturn Math.max(\n\t\tREMOTE_LABEL_MIN_HIT_WIDTH_PX,\n\t\tMath.min(REMOTE_LABEL_MAX_WIDTH_PX, label.length * REMOTE_LABEL_AVERAGE_CHAR_PX),\n\t);\n}\n\nfunction buildHit(\n\tpeer: RemotePresencePeer,\n\tcamera: Camera2D,\n\tpoint: ScreenPoint,\n\ttarget: NativeRemotePresenceHitTarget,\n): NativeRemotePresenceHit {\n\tconst world = camera.screenToWorld(point.x, point.y);\n\treturn {\n\t\tpeer,\n\t\tfollowId: followIdForPeer(peer),\n\t\ttarget,\n\t\tscreenX: point.x,\n\t\tscreenY: point.y,\n\t\tworldX: world.worldX,\n\t\tworldY: world.worldY,\n\t\t...(peer.clientId ? { clientId: peer.clientId } : {}),\n\t\t...(peer.peerId ? { peerId: peer.peerId } : {}),\n\t};\n}\n\n/**\n * Hit-tests native Skia remote presence labels/cursors in screen coordinates.\n *\n * Use the returned `followId` with `useRealtimePeerFollow`'s `followedPeerId`\n * state. The id intentionally follows the session peer id shape: client id when\n * present, then stable peer id, then the rendered presence id.\n */\nexport function hitTestNativeRemotePresence(\n\tpeers: readonly RemotePresencePeer[],\n\tcamera: Camera2D,\n\tpoint: ScreenPoint,\n): NativeRemotePresenceHit | null {\n\tfor (let index = peers.length - 1; index >= 0; index -= 1) {\n\t\tconst peer = peers[index];\n\t\tif (!peer || peer.isSelf || !peer.cursor) continue;\n\n\t\tconst cursorScreen = camera.worldToScreen(peer.cursor.x, peer.cursor.y);\n\t\tconst label = displayLabelForPeer(peer);\n\t\tif (label) {\n\t\t\tconst labelX = cursorScreen.screenX + REMOTE_LABEL_OFFSET_X;\n\t\t\tconst labelBaselineY = cursorScreen.screenY + REMOTE_LABEL_BASELINE_OFFSET_Y;\n\t\t\tconst labelRect: ScreenRect = {\n\t\t\t\tx: labelX - REMOTE_LABEL_HIT_PADDING_X,\n\t\t\t\ty: labelBaselineY - REMOTE_LABEL_SCREEN_PX - REMOTE_LABEL_HIT_PADDING_Y,\n\t\t\t\twidth: estimateLabelWidth(label) + REMOTE_LABEL_HIT_PADDING_X * 2,\n\t\t\t\theight: REMOTE_LABEL_SCREEN_PX + REMOTE_LABEL_HIT_PADDING_Y * 2,\n\t\t\t};\n\t\t\tif (pointInScreenRect(point, labelRect)) {\n\t\t\t\treturn buildHit(peer, camera, point, \"label\");\n\t\t\t}\n\t\t}\n\n\t\tconst cursorHitSize = Math.max(\n\t\t\tREMOTE_CURSOR_MIN_HIT_SIZE_PX,\n\t\t\tREMOTE_CURSOR_SCREEN_PX,\n\t\t);\n\t\tconst cursorRect: ScreenRect = {\n\t\t\tx: cursorScreen.screenX - (cursorHitSize - REMOTE_CURSOR_SCREEN_PX) / 2,\n\t\t\ty: cursorScreen.screenY - (cursorHitSize - REMOTE_CURSOR_SCREEN_PX) / 2,\n\t\t\twidth: cursorHitSize,\n\t\t\theight: cursorHitSize,\n\t\t};\n\t\tif (pointInScreenRect(point, cursorRect)) {\n\t\t\treturn buildHit(peer, camera, point, \"cursor\");\n\t\t}\n\t}\n\n\treturn null;\n}\n","import type { VectorSceneItem } from \"../scene/types\";\n\ntype MoveNativeTransientItemsInput = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly snapshots: Readonly<Record<string, VectorSceneItem>>;\n\treadonly dx: number;\n\treadonly dy: number;\n};\n\ntype ReplaceNativeTransientItemInput = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly itemId: string;\n\treadonly item: VectorSceneItem;\n};\n\nexport function moveNativeTransientItems({\n\titems,\n\tsnapshots,\n\tdx,\n\tdy,\n}: MoveNativeTransientItemsInput): VectorSceneItem[] {\n\treturn items.map((item) => {\n\t\tconst snapshot = snapshots[item.id];\n\t\tif (!snapshot) return item;\n\t\treturn {\n\t\t\t...snapshot,\n\t\t\tx: snapshot.x + dx,\n\t\t\ty: snapshot.y + dy,\n\t\t\tbounds: {\n\t\t\t\t...snapshot.bounds,\n\t\t\t\tx: snapshot.bounds.x + dx,\n\t\t\t\ty: snapshot.bounds.y + dy,\n\t\t\t},\n\t\t};\n\t});\n}\n\nexport function replaceNativeTransientItem({\n\titems,\n\titemId,\n\titem: replacement,\n}: ReplaceNativeTransientItemInput): VectorSceneItem[] {\n\treturn items.map((item) => (item.id === itemId ? replacement : item));\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\tModal,\n\tPanResponder,\n\ttype PointerEvent,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tTextInput,\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 type { RemotePresencePeer } from \"../react/presence/types\";\nimport { type CanvuLinkData, createLinkItem } from \"../scene/link-item\";\nimport {\n\tapplyStrokeToItem,\n\tcreateArchitecturalCloudItem,\n\tcreateEllipseItem,\n\tcreateFreehandStrokeItem,\n\tcreateLineItem,\n\tcreateRectangleItem,\n\tcreateShapeId,\n\tcreateTextItem,\n\tDEFAULT_STROKE_STYLE,\n\tlineEndpointsToLocal,\n\tresolveStrokeStyle,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport {\n\tDEFAULT_TEXT_TOOL_FONT_SIZE,\n\ttextBaselineYFor,\n\ttextLineHeightFor,\n} from \"../scene/text-svg\";\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\tcreateNativeLinkCardBoundsAtPoint,\n\tnormalizeNativeLinkHref,\n} from \"./native-link-card\";\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\thitTestNativeRemotePresence,\n\ttype NativeRemotePresenceHit,\n} from \"./native-remote-presence-hit-test\";\nimport { sampleNativeStrokePreviewPoints } from \"./native-stroke-preview\";\nimport {\n\tmoveNativeTransientItems,\n\treplaceNativeTransientItem,\n} from \"./native-transient-items\";\nimport {\n\thitTestNativeSelectionHandle,\n\ttype NativeCustomShapePlacementOptions,\n\tnativeItemPlacementBounds,\n\tnativeRotationDragStart,\n\tpointInNativeSelectedItemBounds,\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\n/**\n * Detail emitted when a native pointer/touch begins on a remote realtime\n * participant label or cursor.\n *\n * Pass `followId` into your `followedPeerId` state for\n * `useRealtimePeerFollow(...)`. For realtime-session peers this is the\n * connection `clientId`, matching the session peer `id`.\n */\nexport type NativeRemotePresencePressDetail = NativeRemotePresenceHit;\n\n/**\n * Optional override for a link item inserted from the native link tool.\n *\n * Use this when your app has already reserved an item id or wants to place the\n * link card at a custom box. Most apps can omit it and use the default card\n * centered on the tapped world point.\n */\nexport type NativeLinkToolInsertOptions = {\n\treadonly id?: string;\n\treadonly bounds?: Rect;\n};\n\n/**\n * Copy used by the built-in native link dialog.\n *\n * Pass this only when you need localized or product-specific text. Omit it for\n * the default plug-and-play `\"link\"` tool flow.\n */\nexport type NativeLinkToolDialogLabels = {\n\treadonly title?: string;\n\treadonly description?: string;\n\treadonly inputPlaceholder?: string;\n\treadonly cancelLabel?: string;\n\treadonly addLabel?: string;\n};\n\n/**\n * Detail passed when the built-in native `\"link\"` tool receives a tap.\n *\n * The default flow shows canvu's built-in URL dialog and inserts the card after\n * submit. Use this detail only when overriding that dialog through\n * `onLinkToolRequest`.\n *\n * @example\n * ```tsx\n * <NativeVectorViewport\n * toolId={toolId}\n * onLinkToolRequest={(detail) => {\n * openLinkDialog({\n * onSubmit: (href) => detail.insertLink({ href }),\n * });\n * }}\n * />\n * ```\n */\nexport type NativeLinkToolRequestDetail = {\n\treadonly toolId: \"link\";\n\treadonly worldX: number;\n\treadonly worldY: number;\n\treadonly screenX: number;\n\treadonly screenY: number;\n\treadonly suggestedBounds: Rect;\n\treadonly insertLink: (\n\t\tlink: CanvuLinkData,\n\t\toptions?: NativeLinkToolInsertOptions,\n\t) => VectorSceneItem | null;\n};\n\nexport type NativeVectorViewportProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly selectedIds?: readonly string[];\n\treadonly remotePresence?: readonly RemotePresencePeer[];\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\t/**\n\t * Optional override for the built-in native link dialog.\n\t *\n\t * Omit this for the plug-and-play first-party link tool. When supplied,\n\t * canvu will not show its default dialog; your app is responsible for\n\t * calling `detail.insertLink(...)`.\n\t */\n\treadonly onLinkToolRequest?: (detail: NativeLinkToolRequestDetail) => void;\n\treadonly linkToolDialogLabels?: NativeLinkToolDialogLabels;\n\treadonly onWorldPointerDown?: (detail: NativeWorldPointerDownDetail) => void;\n\treadonly onRemotePresencePress?: (detail: NativeRemotePresencePressDetail) => void;\n\treadonly onWorldPointerMove?: (world: {\n\t\treadonly x: number;\n\t\treadonly y: number;\n\t}) => void;\n\treadonly onWorldPointerLeave?: () => void;\n\treadonly onPlacementPreviewChange?: (preview: PlacementPreview | null) => void;\n\treadonly onCameraChange?: () => void;\n\treadonly customPlacement?: NativeCustomShapePlacementOptions;\n\treadonly customPlacements?: readonly NativeCustomShapePlacementOptions[];\n\treadonly overlay?: React.ReactNode;\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: \"link\" | \"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 };\ntype NativeSelectedStyleInspectorState = {\n\treadonly toolId: NativeVectorStyleToolId;\n\treadonly value: StrokeStyle;\n};\n\nconst DEFAULT_NATIVE_LINK_TOOL_DIALOG_LABELS: Required<NativeLinkToolDialogLabels> =\n\t{\n\t\ttitle: \"Add link\",\n\t\tdescription: \"Paste the link you want to add to the board.\",\n\t\tinputPlaceholder: \"https://example.com\",\n\t\tcancelLabel: \"Cancel\",\n\t\taddLabel: \"Add\",\n\t};\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};\nconst NATIVE_VIEWPORT_OVERLAY_Z_INDEX = 40;\nconst NATIVE_VIEWPORT_OVERLAY_ELEVATION = 40;\nconst NATIVE_VIEWPORT_EXTERNAL_OVERLAY_Z_INDEX = 20;\nconst NATIVE_VIEWPORT_EXTERNAL_OVERLAY_ELEVATION = 20;\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 getNativeStyleInspectorToolId(\n\titem: VectorSceneItem,\n): NativeVectorStyleToolId | null {\n\tconst kind = item.toolKind;\n\tif (kind === \"marker\") return \"marker\";\n\tif (\n\t\tkind === \"draw\" ||\n\t\tkind === \"pencil\" ||\n\t\tkind === \"brush\" ||\n\t\tkind === \"rect\" ||\n\t\tkind === \"ellipse\" ||\n\t\tkind === \"architectural-cloud\" ||\n\t\tkind === \"line\" ||\n\t\tkind === \"arrow\"\n\t) {\n\t\treturn \"draw\";\n\t}\n\treturn null;\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\tremotePresence = [],\n\t\ttoolId = \"hand\",\n\t\ttoolLocked = false,\n\t\tinteractive = false,\n\t\tonSelectionChange,\n\t\tonItemsChange,\n\t\tonToolChangeRequest,\n\t\tonLinkToolRequest,\n\t\tlinkToolDialogLabels,\n\t\tonWorldPointerDown,\n\t\tonRemotePresencePress,\n\t\tonWorldPointerMove,\n\t\tonWorldPointerLeave,\n\t\tonPlacementPreviewChange,\n\t\tonCameraChange,\n\t\tcustomPlacement,\n\t\tcustomPlacements = [],\n\t\toverlay,\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 onLinkToolRequestRef = useRef(onLinkToolRequest);\n\tonLinkToolRequestRef.current = onLinkToolRequest;\n\tconst onWorldPointerDownRef = useRef(onWorldPointerDown);\n\tonWorldPointerDownRef.current = onWorldPointerDown;\n\tconst onRemotePresencePressRef = useRef(onRemotePresencePress);\n\tonRemotePresencePressRef.current = onRemotePresencePress;\n\tconst onWorldPointerMoveRef = useRef(onWorldPointerMove);\n\tonWorldPointerMoveRef.current = onWorldPointerMove;\n\tconst onWorldPointerLeaveRef = useRef(onWorldPointerLeave);\n\tonWorldPointerLeaveRef.current = onWorldPointerLeave;\n\tconst onPlacementPreviewChangeRef = useRef(onPlacementPreviewChange);\n\tonPlacementPreviewChangeRef.current = onPlacementPreviewChange;\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 onSelectionChangeRef = useRef(onSelectionChange);\n\tonSelectionChangeRef.current = onSelectionChange;\n\tconst [transientItems, setTransientItems] = useState<VectorSceneItem[] | null>(\n\t\tnull,\n\t);\n\tconst transientItemsRef = useRef<VectorSceneItem[] | null>(null);\n\tconst activeItems = transientItems ?? items;\n\tconst itemsRef = useRef(activeItems);\n\titemsRef.current = activeItems;\n\tconst selectedIdsRef = useRef(selectedIds);\n\tselectedIdsRef.current = selectedIds;\n\tconst remotePresenceRef = useRef(remotePresence);\n\tremotePresenceRef.current = remotePresence;\n\n\tconst dragStateRef = useRef<DragState>({ kind: \"idle\" });\n\n\tuseEffect(() => {\n\t\tconst committedItems = items;\n\t\tif (transientItemsRef.current === null && itemsRef.current === committedItems) {\n\t\t\treturn;\n\t\t}\n\t\ttransientItemsRef.current = null;\n\t\tsetTransientItems(null);\n\t}, [items]);\n\n\tconst setTransientItemsPreview = useCallback((nextItems: VectorSceneItem[]) => {\n\t\ttransientItemsRef.current = nextItems;\n\t\tsetTransientItems(nextItems);\n\t}, []);\n\n\tconst clearTransientItemsPreview = useCallback(() => {\n\t\ttransientItemsRef.current = null;\n\t\tsetTransientItems(null);\n\t}, []);\n\n\tconst commitTransientItemsPreview = useCallback(() => {\n\t\tconst nextItems = transientItemsRef.current;\n\t\tconst change = onItemsChangeRef.current;\n\t\tif (!nextItems || !change) return false;\n\t\tchange(nextItems);\n\t\treturn true;\n\t}, []);\n\n\tconst [placementPreview, setPlacementPreviewState] =\n\t\tuseState<PlacementPreview | null>(null);\n\tconst setRealtimePlacementPreview = useCallback(\n\t\t(nextPreview: PlacementPreview | null) => {\n\t\t\tsetPlacementPreviewState(nextPreview);\n\t\t\tonPlacementPreviewChangeRef.current?.(nextPreview);\n\t\t},\n\t\t[],\n\t);\n\tconst [eraserTrail, setEraserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [laserTrail, setLaserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [pendingNativeLinkRequest, setPendingNativeLinkRequest] =\n\t\tuseState<NativeLinkToolRequestDetail | null>(null);\n\tconst [nativeLinkInputValue, setNativeLinkInputValue] = useState(\"\");\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\tconst requestSelectToolAfterNativeLinkUse = useCallback(() => {\n\t\tonToolChangeRequestRef.current?.(\"select\");\n\t}, []);\n\tconst closeNativeLinkDialog = useCallback(() => {\n\t\tsetPendingNativeLinkRequest(null);\n\t\tsetNativeLinkInputValue(\"\");\n\t}, []);\n\tconst submitNativeLinkDialog = useCallback(() => {\n\t\tconst href = normalizeNativeLinkHref(nativeLinkInputValue);\n\t\tif (!href || !pendingNativeLinkRequest) return;\n\t\tconst inserted = pendingNativeLinkRequest.insertLink({ href });\n\t\tif (inserted) {\n\t\t\tcloseNativeLinkDialog();\n\t\t}\n\t}, [closeNativeLinkDialog, nativeLinkInputValue, pendingNativeLinkRequest]);\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 notifyWorldPointerMove = useCallback(\n\t\t(point: ScreenPoint) => {\n\t\t\tconst { worldX, worldY } = screenToWorld(point.x, point.y);\n\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\n\t\t},\n\t\t[screenToWorld],\n\t);\n\n\tconst notifyWorldPointerLeave = useCallback(() => {\n\t\tonWorldPointerLeaveRef.current?.();\n\t}, []);\n\n\tconst requestRender = useCallback(() => {\n\t\tsetCameraTick((n) => n + 1);\n\t\tonCameraChangeRef.current?.();\n\t}, []);\n\n\tconst onLayout = useCallback((e: LayoutChangeEvent) => {\n\t\tconst { width, height } = e.nativeEvent.layout;\n\t\tsetSize({ width, height });\n\t}, []);\n\n\tconst updateToolCursorPoint = useCallback((_point: ScreenPoint) => {}, []);\n\tconst hideToolCursor = useCallback(() => {}, []);\n\n\tconst selectedItems = useMemo(\n\t\t() => activeItems.filter((item) => selectedIds.includes(item.id)),\n\t\t[activeItems, selectedIds],\n\t);\n\tconst selectedStyleInspectorState =\n\t\tuseMemo<NativeSelectedStyleInspectorState | null>(() => {\n\t\t\tconst styleableItems = selectedItems.filter(\n\t\t\t\t(item) => !item.locked && getNativeStyleInspectorToolId(item) !== null,\n\t\t\t);\n\t\t\tif (styleableItems.length === 0) return null;\n\t\t\tconst toolId = styleableItems.every((item) => item.toolKind === \"marker\")\n\t\t\t\t? \"marker\"\n\t\t\t\t: \"draw\";\n\t\t\tconst primaryItem =\n\t\t\t\ttoolId === \"marker\"\n\t\t\t\t\t? styleableItems[0]\n\t\t\t\t\t: (styleableItems.find((item) => item.toolKind !== \"marker\") ??\n\t\t\t\t\t\tstyleableItems[0]);\n\t\t\tif (!primaryItem) return null;\n\t\t\treturn {\n\t\t\t\ttoolId,\n\t\t\t\tvalue: resolveStrokeStyle(primaryItem),\n\t\t\t};\n\t\t}, [selectedItems]);\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 activeItems;\n\t\tconst hidden = new Set(eraserPreviewIds);\n\t\treturn activeItems.filter((item) => !hidden.has(item.id));\n\t}, [activeItems, 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\tconst patchSelectedItemsStrokeStyle = useCallback(\n\t\t(patch: Partial<StrokeStyle>) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change) return;\n\t\t\tconst selectedIdSet = new Set(selectedIdsRef.current);\n\t\t\tif (selectedIdSet.size === 0) return;\n\t\t\tlet changed = false;\n\t\t\tconst nextItems = itemsRef.current.map((item) => {\n\t\t\t\tif (\n\t\t\t\t\t!selectedIdSet.has(item.id) ||\n\t\t\t\t\titem.locked ||\n\t\t\t\t\tgetNativeStyleInspectorToolId(item) === null\n\t\t\t\t) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t\tchanged = true;\n\t\t\t\treturn applyStrokeToItem(item, patch);\n\t\t\t});\n\t\t\tif (!changed) return;\n\t\t\tchange(nextItems);\n\t\t\tpatchCurrentStrokeStyle(patch);\n\t\t},\n\t\t[patchCurrentStrokeStyle],\n\t);\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\tconst cam = cameraRef.current;\n\t\t\tif (!cam) return;\n\n\t\t\tconst remotePresenceHit =\n\t\t\t\tinteractive && onRemotePresencePressRef.current\n\t\t\t\t\t? hitTestNativeRemotePresence(remotePresenceRef.current, cam, point)\n\t\t\t\t\t: null;\n\t\t\tif (remotePresenceHit) {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\tonRemotePresencePressRef.current?.(remotePresenceHit);\n\t\t\t\treturn;\n\t\t\t}\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 { worldX, worldY } = screenToWorld(sx, sy);\n\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\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: nativeItemPlacementBounds(selectedItem),\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\tconst selectedUnlockedItems = currentSelectedIds\n\t\t\t\t\t\t.map((id) => itemsRef.current.find((item) => item.id === id))\n\t\t\t\t\t\t.filter((item): item is VectorSceneItem => !!item && !item.locked);\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectedUnlockedItems.some((item) =>\n\t\t\t\t\t\t\tpointInNativeSelectedItemBounds(item, { x: worldX, y: worldY }),\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\t\tfor (const item of selectedUnlockedItems) {\n\t\t\t\t\t\t\tsnapshots[item.id] = item;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst ids = Object.keys(snapshots);\n\t\t\t\t\t\tif (ids.length > 0) {\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\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\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\tsetRealtimePlacementPreview({\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\tsetRealtimePlacementPreview({\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\tsetRealtimePlacementPreview(\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\tsetRealtimePlacementPreview({\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 === \"link\" || 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[\n\t\t\tinteractive,\n\t\t\trequestSelectToolAfterUse,\n\t\t\tscreenToWorld,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tupdateToolCursorPoint,\n\t\t],\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\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\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\tsetRealtimePlacementPreview({\n\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\ttool: st.tool,\n\t\t\t\t\tpoints: sampleNativeStrokePreviewPoints(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 nextItems = moveNativeTransientItems({\n\t\t\t\t\titems: itemsRef.current,\n\t\t\t\t\tsnapshots: st.snapshots,\n\t\t\t\t\tdx,\n\t\t\t\t\tdy,\n\t\t\t\t});\n\t\t\t\tsetTransientItemsPreview(nextItems);\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\tsetTransientItemsPreview(\n\t\t\t\t\treplaceNativeTransientItem({\n\t\t\t\t\t\titems: itemsRef.current,\n\t\t\t\t\t\titemId: st.id,\n\t\t\t\t\t\titem: next,\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 === \"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\tsetTransientItemsPreview(\n\t\t\t\t\treplaceNativeTransientItem({\n\t\t\t\t\t\titems: itemsRef.current,\n\t\t\t\t\t\titemId: st.id,\n\t\t\t\t\t\titem: next,\n\t\t\t\t\t}),\n\t\t\t\t);\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\tsetRealtimePlacementPreview({ 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\tsetRealtimePlacementPreview(\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\tsetRealtimePlacementPreview({\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[\n\t\t\trequestRender,\n\t\t\tscreenToWorld,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tsetTransientItemsPreview,\n\t\t\tupdateToolCursorPoint,\n\t\t],\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\tsetRealtimePlacementPreview(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\tcommitTransientItemsPreview();\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\tcommitTransientItemsPreview();\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\tsetRealtimePlacementPreview(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\tsetRealtimePlacementPreview(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\tsetRealtimePlacementPreview(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 (st.tool === \"link\") {\n\t\t\t\t\tconst suggestedBounds = createNativeLinkCardBoundsAtPoint(st.startWorld);\n\t\t\t\t\tconst insertLink: NativeLinkToolRequestDetail[\"insertLink\"] = (\n\t\t\t\t\t\tlink,\n\t\t\t\t\t\toptions = {},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst currentChange = onItemsChangeRef.current;\n\t\t\t\t\t\tif (!currentChange) return null;\n\t\t\t\t\t\tconst id = options.id ?? createShapeId();\n\t\t\t\t\t\tconst item = createLinkItem(id, options.bounds ?? suggestedBounds, link);\n\t\t\t\t\t\tcurrentChange([...itemsRef.current, item]);\n\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\trequestSelectToolAfterNativeLinkUse();\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t};\n\t\t\t\t\tconst requestLink = onLinkToolRequestRef.current;\n\t\t\t\t\tif (requestLink) {\n\t\t\t\t\t\trequestLink({\n\t\t\t\t\t\t\ttoolId: \"link\",\n\t\t\t\t\t\t\tworldX: st.startWorld.x,\n\t\t\t\t\t\t\tworldY: st.startWorld.y,\n\t\t\t\t\t\t\tscreenX: st.startScreen.x,\n\t\t\t\t\t\t\tscreenY: st.startScreen.y,\n\t\t\t\t\t\t\tsuggestedBounds,\n\t\t\t\t\t\t\tinsertLink,\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\tsetNativeLinkInputValue(\"\");\n\t\t\t\t\tsetPendingNativeLinkRequest({\n\t\t\t\t\t\ttoolId: \"link\",\n\t\t\t\t\t\tworldX: st.startWorld.x,\n\t\t\t\t\t\tworldY: st.startWorld.y,\n\t\t\t\t\t\tscreenX: st.startScreen.x,\n\t\t\t\t\t\tscreenY: st.startScreen.y,\n\t\t\t\t\t\tsuggestedBounds,\n\t\t\t\t\t\tinsertLink,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\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 fs = DEFAULT_TEXT_TOOL_FONT_SIZE;\n\t\t\t\t\tconst baseline = textBaselineYFor(fs);\n\t\t\t\t\tconst lh = textLineHeightFor(fs);\n\t\t\t\t\tconst minH = Math.max(26, baseline + Math.max(4, lh * 0.2));\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 - baseline,\n\t\t\t\t\t\t\twidth: 160,\n\t\t\t\t\t\t\theight: minH,\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\tfs,\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[\n\t\t\trequestSelectToolAfterNativeLinkUse,\n\t\t\trequestSelectToolAfterUse,\n\t\t\tscreenToWorld,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tcommitTransientItemsPreview,\n\t\t\tupdateToolCursorPoint,\n\t\t],\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\tnotifyWorldPointerMove(point);\n\t\t\tupdateToolCursorPoint(point);\n\t\t},\n\t\t[applyDragMoveAtScreenPoint, notifyWorldPointerMove, 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\tnotifyWorldPointerLeave();\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\tif (touches && touches.length >= 2) {\n\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\tnotifyWorldPointerLeave();\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\tnotifyWorldPointerLeave();\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\tsetRealtimePlacementPreview(null);\n\t\t\t\t\tclearTransientItemsPreview();\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\tnotifyWorldPointerLeave,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tclearTransientItemsPreview,\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 styleInspectorToolId =\n\t\tselectedStyleInspectorState?.toolId ?? activeStyleToolId;\n\tconst styleInspectorValue = selectedStyleInspectorState?.value ?? strokeStyleState;\n\tconst styleInspectorChange = selectedStyleInspectorState\n\t\t? patchSelectedItemsStrokeStyle\n\t\t: patchCurrentStrokeStyle;\n\tconst nativeLinkDialogLabels = {\n\t\t...DEFAULT_NATIVE_LINK_TOOL_DIALOG_LABELS,\n\t\t...(linkToolDialogLabels ?? {}),\n\t};\n\tconst normalizedNativeLinkHref = normalizeNativeLinkHref(nativeLinkInputValue);\n\tconst nativeLinkCanSubmit =\n\t\tpendingNativeLinkRequest !== null &&\n\t\tnormalizedNativeLinkHref !== null &&\n\t\tonItemsChange != null;\n\n\treturn (\n\t\t<View style={{ flex: 1, overflow: \"hidden\" }} onLayout={onLayout}>\n\t\t\t{size.width > 0 && size.height > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t<View\n\t\t\t\t\t\tstyle={StyleSheet.absoluteFill}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerMove={handlePointerMove}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerMove}\n\t\t\t\t\t\tonPointerLeave={() => {\n\t\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\t\tnotifyWorldPointerLeave();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t{...panResponder.panHandlers}\n\t\t\t\t\t>\n\t\t\t\t\t\t<NativeSceneRenderer\n\t\t\t\t\t\t\titems={sceneItems}\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/>\n\t\t\t\t\t\t{interactive && (\n\t\t\t\t\t\t\t<NativeInteractionOverlay\n\t\t\t\t\t\t\t\tcamera={camera}\n\t\t\t\t\t\t\t\twidth={size.width}\n\t\t\t\t\t\t\t\theight={size.height}\n\t\t\t\t\t\t\t\tselectedItems={selectedItems}\n\t\t\t\t\t\t\t\tshowResizeHandles={showResizeHandles}\n\t\t\t\t\t\t\t\tplacementPreview={placementPreview}\n\t\t\t\t\t\t\t\tlaserTrail={laserTrail}\n\t\t\t\t\t\t\t\teraserTrail={eraserTrail}\n\t\t\t\t\t\t\t\teraserPreviewItems={activeItems.filter((item) =>\n\t\t\t\t\t\t\t\t\teraserPreviewIds.includes(item.id),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tpreviewStrokeStyle={strokeStyleState}\n\t\t\t\t\t\t\t\tremotePresence={remotePresence}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</View>\n\t\t\t\t\t{overlay ? (\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\tStyleSheet.absoluteFill,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tzIndex: NATIVE_VIEWPORT_EXTERNAL_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_EXTERNAL_OVERLAY_ELEVATION,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{overlay}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{interactive && showStyleInspector && styleInspectorToolId ? (\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\tzIndex: NATIVE_VIEWPORT_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_OVERLAY_ELEVATION,\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\tzIndex: NATIVE_VIEWPORT_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_OVERLAY_ELEVATION,\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={styleInspectorToolId}\n\t\t\t\t\t\t\t\tvalue={styleInspectorValue}\n\t\t\t\t\t\t\t\tonChange={styleInspectorChange}\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\tzIndex: NATIVE_VIEWPORT_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_OVERLAY_ELEVATION,\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\t<Modal\n\t\t\t\tanimationType=\"fade\"\n\t\t\t\ttransparent\n\t\t\t\tvisible={pendingNativeLinkRequest !== null}\n\t\t\t\tonRequestClose={closeNativeLinkDialog}\n\t\t\t>\n\t\t\t\t<View style={styles.nativeLinkDialogBackdrop}>\n\t\t\t\t\t<View style={styles.nativeLinkDialogCard}>\n\t\t\t\t\t\t<Text style={styles.nativeLinkDialogTitle}>\n\t\t\t\t\t\t\t{nativeLinkDialogLabels.title}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Text style={styles.nativeLinkDialogDescription}>\n\t\t\t\t\t\t\t{nativeLinkDialogLabels.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\taccessibilityLabel={nativeLinkDialogLabels.title}\n\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\tautoCorrect={false}\n\t\t\t\t\t\t\tkeyboardType=\"url\"\n\t\t\t\t\t\t\tonChangeText={setNativeLinkInputValue}\n\t\t\t\t\t\t\tonSubmitEditing={submitNativeLinkDialog}\n\t\t\t\t\t\t\tplaceholder={nativeLinkDialogLabels.inputPlaceholder}\n\t\t\t\t\t\t\treturnKeyType=\"done\"\n\t\t\t\t\t\t\tstyle={styles.nativeLinkDialogInput}\n\t\t\t\t\t\t\tvalue={nativeLinkInputValue}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<View style={styles.nativeLinkDialogActions}>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\t\tonPress={closeNativeLinkDialog}\n\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\tstyles.nativeLinkDialogButton,\n\t\t\t\t\t\t\t\t\tpressed ? styles.nativeLinkDialogButtonPressed : undefined,\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<Text style={styles.nativeLinkDialogButtonText}>\n\t\t\t\t\t\t\t\t\t{nativeLinkDialogLabels.cancelLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\t\taccessibilityState={{ disabled: !nativeLinkCanSubmit }}\n\t\t\t\t\t\t\t\tdisabled={!nativeLinkCanSubmit}\n\t\t\t\t\t\t\t\tonPress={submitNativeLinkDialog}\n\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\tstyles.nativeLinkDialogButton,\n\t\t\t\t\t\t\t\t\tstyles.nativeLinkDialogPrimaryButton,\n\t\t\t\t\t\t\t\t\tpressed && nativeLinkCanSubmit\n\t\t\t\t\t\t\t\t\t\t? styles.nativeLinkDialogPrimaryButtonPressed\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t!nativeLinkCanSubmit\n\t\t\t\t\t\t\t\t\t\t? styles.nativeLinkDialogDisabledButton\n\t\t\t\t\t\t\t\t\t\t: undefined,\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<Text style={styles.nativeLinkDialogPrimaryButtonText}>\n\t\t\t\t\t\t\t\t\t{nativeLinkDialogLabels.addLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</Modal>\n\t\t</View>\n\t);\n});\n\nconst styles = StyleSheet.create({\n\tnativeLinkDialogBackdrop: {\n\t\tflex: 1,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpaddingHorizontal: 24,\n\t\tbackgroundColor: \"rgba(0, 0, 0, 0.45)\",\n\t},\n\tnativeLinkDialogCard: {\n\t\twidth: \"100%\",\n\t\tmaxWidth: 480,\n\t\tpadding: 24,\n\t\tborderRadius: 16,\n\t\tbackgroundColor: \"#ffffff\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.18,\n\t\tshadowRadius: 24,\n\t\tshadowOffset: { width: 0, height: 8 },\n\t\televation: 12,\n\t},\n\tnativeLinkDialogTitle: {\n\t\tcolor: \"#111827\",\n\t\tfontSize: 24,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 30,\n\t},\n\tnativeLinkDialogDescription: {\n\t\tmarginTop: 12,\n\t\tcolor: \"#6b7280\",\n\t\tfontSize: 16,\n\t\tlineHeight: 22,\n\t},\n\tnativeLinkDialogInput: {\n\t\tmarginTop: 24,\n\t\theight: 52,\n\t\tpaddingHorizontal: 14,\n\t\tborderRadius: 10,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"#d1d5db\",\n\t\tcolor: \"#111827\",\n\t\tfontSize: 18,\n\t\tbackgroundColor: \"#ffffff\",\n\t},\n\tnativeLinkDialogActions: {\n\t\tmarginTop: 24,\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"flex-end\",\n\t\tgap: 12,\n\t},\n\tnativeLinkDialogButton: {\n\t\tminWidth: 92,\n\t\theight: 48,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tborderRadius: 10,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"#d1d5db\",\n\t\tbackgroundColor: \"#ffffff\",\n\t\tpaddingHorizontal: 18,\n\t},\n\tnativeLinkDialogButtonPressed: {\n\t\tbackgroundColor: \"#f3f4f6\",\n\t},\n\tnativeLinkDialogButtonText: {\n\t\tcolor: \"#111827\",\n\t\tfontSize: 17,\n\t\tfontWeight: \"600\",\n\t},\n\tnativeLinkDialogPrimaryButton: {\n\t\tborderColor: \"#18181b\",\n\t\tbackgroundColor: \"#18181b\",\n\t},\n\tnativeLinkDialogPrimaryButtonPressed: {\n\t\tbackgroundColor: \"#27272a\",\n\t},\n\tnativeLinkDialogDisabledButton: {\n\t\tborderColor: \"#9ca3af\",\n\t\tbackgroundColor: \"#9ca3af\",\n\t},\n\tnativeLinkDialogPrimaryButtonText: {\n\t\tcolor: \"#ffffff\",\n\t\tfontSize: 17,\n\t\tfontWeight: \"700\",\n\t},\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/link-item.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/math/item-transform.ts","../src/scene/clone-item.ts","../src/scene/managed-images.ts","../src/native/NativeImagesMenu.tsx","../src/interaction/resize-handles.ts","../src/react/presence/peer-color.ts","../src/scene/freehand-path.ts","../src/native/native-freehand-payload-cache.ts","../src/native/native-link-card.ts","../src/native/native-image-cache.ts","../src/native/skia-transform.ts","../src/native/SvgNodeRenderer.tsx","../src/native/svg-parser.ts","../src/native/NativeShapeRenderer.tsx","../src/native/native-overlay-style.ts","../src/native/native-stroke-preview.ts","../src/native/native-vector-interactions.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-remote-presence-hit-test.ts","../src/native/native-transient-items.ts","../src/native/NativeVectorViewport.tsx"],"names":["escapeHtmlText","d","getStroke","op","b","s","jsx","Canvas","Group","Path","Pressable","View","jsxs","NativeImage","useMemo","useState","Text","ScrollView","StyleSheet","localBounds","useEffect","loadedImage","Fragment","RoundedRect","Rect","SkiaCircle","Oval","SkiaLine","vec","DashPathEffect","matchFont","SkiaText","SkiaImage","parseNum","attrs","node","dashIntervalsFromStrokeDasharray","SkiaRect","Circle","Line","last","camera","memo","MemoShape","styles","useCallback","PanResponder","clamp","local","REMOTE_CURSOR_SCREEN_PX","REMOTE_LABEL_SCREEN_PX","forwardRef","NativeVectorViewport","useRef","toolId","customPlacement","useImperativeHandle","Modal","TextInput"],"mappings":"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","file":"native.cjs","sourcesContent":["/**\n * Axis-aligned rectangle in 2D (world or screen space).\n */\nexport type Rect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\n/**\n * Returns whether two axis-aligned rectangles intersect (edges touching count).\n */\nexport function rectsIntersect(a: Rect, b: Rect): boolean {\n\treturn (\n\t\ta.x < b.x + b.width &&\n\t\ta.x + a.width > b.x &&\n\t\ta.y < b.y + b.height &&\n\t\ta.y + a.height > b.y\n\t);\n}\n\n/**\n * Normalizes a rect so width and height are non-negative.\n */\nexport function normalizeRect(r: Rect): Rect {\n\tconst x0 = r.width >= 0 ? r.x : r.x + r.width;\n\tconst y0 = r.height >= 0 ? r.y : r.y + r.height;\n\treturn {\n\t\tx: x0,\n\t\ty: y0,\n\t\twidth: Math.abs(r.width),\n\t\theight: Math.abs(r.height),\n\t};\n}\n","import type { CustomShapeResizeHandles } from \"../interaction/resize-handles\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\nexport type { CustomShapeResizeHandles } from \"../interaction/resize-handles\";\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 * Optional behavior and styling hooks for {@link createCustomShapeItem}.\n */\nexport type CreateCustomShapeOptions = {\n\t/**\n\t * Controls which resize handles are visible and active for the custom shape.\n\t *\n\t * Defaults to `\"all\"`. Use `\"corners\"` for corner-only resize, explicit handle ids such\n\t * as `[\"se\"]` for constrained tools, or an empty array to hide resize dots while keeping\n\t * selection and rotation available.\n\t */\n\tresizeHandles?: CustomShapeResizeHandles;\n\t/**\n\t * CSS class applied to the outer rendered SVG `<g>`.\n\t *\n\t * Useful for custom animations and styling. In interactive canvases, prefer\n\t * `[data-canvu-hovered=\"true\"]` over `:hover` because the scene SVG often has\n\t * `pointer-events: none` while Canvu owns hit-testing in a separate layer.\n\t */\n\tsvgClassName?: string;\n};\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 *\n * @example One resize handle and a CSS animation hook\n * ```ts\n * createCustomShapeItem(id, rect, { svg }, {\n * resizeHandles: [\"se\"],\n * svgClassName: \"sticky-note\",\n * });\n * ```\n */\nexport function createCustomShapeItem(\n\tid: string,\n\tbounds: Rect,\n\tcontent: CreateCustomShapeContent,\n\toptions: CreateCustomShapeOptions = {},\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\t...(options.resizeHandles !== undefined\n\t\t\t? { customResizeHandles: options.resizeHandles }\n\t\t\t: {}),\n\t\t...(options.svgClassName ? { svgClassName: options.svgClassName } : {}),\n\t\tchildrenSvg: buildCustomShapeChildrenSvg(inner, intrinsic, r),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { createCustomShapeItem } from \"./custom-shape\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Plugin key under which link metadata is stored on a link item's `pluginData`. */\nexport const LINK_PLUGIN_KEY = \"canvuLink\";\n\n/**\n * Metadata describing a clickable link/bookmark item.\n * `href` is required; the rest enrich the rendered card (unfurl result).\n */\nexport type CanvuLinkData = {\n\t/** Absolute URL the card points to. */\n\thref: string;\n\t/** Human readable title (falls back to the hostname). */\n\ttitle?: string;\n\t/** Short description shown under the title. */\n\tdescription?: string;\n\t/** Preview image URL (og:image). */\n\timage?: string;\n\t/** Favicon URL shown in the leading badge. */\n\tfavicon?: string;\n};\n\nconst DEFAULT_LINK_CARD_WIDTH = 320;\nconst DEFAULT_LINK_CARD_HEIGHT = 70;\nexport const LINK_CARD_MIN_SCALE = 0.6;\nexport const LINK_CARD_MAX_SCALE = 6;\nexport const LINK_CARD_ASPECT = DEFAULT_LINK_CARD_WIDTH / DEFAULT_LINK_CARD_HEIGHT;\nconst LINK_CARD_BORDER = \"oklch(0.918 0.008 255)\";\nconst LINK_CARD_BORDER_STRONG = \"oklch(0.86 0.012 255)\";\nconst LINK_CARD_ACCENT = \"oklch(0.55 0.19 264)\";\nconst LINK_CARD_ACCENT_DEEP = \"oklch(0.46 0.18 264)\";\nconst LINK_CARD_TITLE_COLOR = \"oklch(0.26 0.022 265)\";\nconst LINK_CARD_TEXT_COLOR = \"oklch(0.55 0.022 265)\";\n\nconst clamp = (value: number, min: number, max: number): number =>\n\tMath.min(max, Math.max(min, value));\n\nconst formatNumber = (value: number): string => {\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Object.is(rounded, -0) ? \"0\" : String(rounded);\n};\n\nconst escapeHtmlText = (value: string): string =>\n\tvalue.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n\nconst getLinkHostname = (href: string): string => {\n\ttry {\n\t\treturn new URL(href).hostname.replace(/^www\\./, \"\");\n\t} catch {\n\t\treturn href;\n\t}\n};\n\ntype LinkTextBand = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\tfontSize: number;\n\tcolor: string;\n\tfontWeight?: number;\n};\n\nconst buildLinkTextBand = (band: LinkTextBand): string => {\n\tconst lineHeight = band.height;\n\tconst weight = band.fontWeight != null ? `font-weight:${band.fontWeight};` : \"\";\n\treturn `<foreignObject x=\"${formatNumber(band.x)}\" y=\"${formatNumber(band.y)}\" width=\"${formatNumber(Math.max(1, band.width))}\" height=\"${formatNumber(Math.max(1, band.height))}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;font-family:system-ui,sans-serif;font-size:${formatNumber(band.fontSize)}px;line-height:${formatNumber(lineHeight)}px;letter-spacing:-0.01em;color:${band.color};overflow:hidden;white-space:nowrap;text-overflow:ellipsis;${weight}\">${escapeHtmlText(band.text)}</div></foreignObject>`;\n};\n\nconst getLinkProtocol = (href: string): string => {\n\ttry {\n\t\treturn new URL(href).protocol;\n\t} catch {\n\t\treturn \"\";\n\t}\n};\n\nconst getLinkInitial = (hostname: string): string => {\n\tconst first = hostname.trim().charAt(0).toUpperCase();\n\treturn first || \"L\";\n};\n\nconst getStableLinkIdSuffix = (value: string): string => {\n\tlet hash = 0;\n\tfor (const char of value) {\n\t\thash = (hash * 31 + char.charCodeAt(0)) >>> 0;\n\t}\n\treturn hash.toString(36);\n};\n\n/**\n * Builds the inner SVG (no outer `<svg>`) for a link/bookmark card at the given box size.\n * Uses fixed pixel bands so text never overlaps regardless of the card's aspect ratio.\n */\nexport function buildLinkCardSvg(\n\twidth: number,\n\t_height: number,\n\tlink: CanvuLinkData,\n): string {\n\tconst cardWidth = Math.max(1, width);\n\tconst scale = cardWidth / DEFAULT_LINK_CARD_WIDTH;\n\tconst contentWidth = DEFAULT_LINK_CARD_WIDTH;\n\tconst contentHeight = DEFAULT_LINK_CARD_HEIGHT;\n\tconst padding = 14;\n\tconst badgeSize = 42;\n\tconst gap = 13;\n\tconst buttonSize = 34;\n\tconst textX = padding + badgeSize + gap;\n\tconst textWidth = Math.max(1, contentWidth - textX - buttonSize - gap - padding);\n\tconst hostname = getLinkHostname(link.href);\n\tconst title = link.title?.trim() || hostname || \"Link\";\n\tconst protocol = getLinkProtocol(link.href);\n\tconst subtitle = hostname || link.href;\n\tconst idSuffix = getStableLinkIdSuffix(`${hostname}:${link.href}`);\n\tconst gradientId = `canvu-link-favicon-gradient-${idSuffix}`;\n\tconst buttonX = contentWidth - padding - buttonSize;\n\tconst buttonY = (contentHeight - buttonSize) / 2;\n\tconst isSecure = protocol === \"https:\";\n\tconst subtitleX = isSecure ? textX + 13 : textX;\n\tconst subtitleWidth = isSecure ? textWidth - 13 : textWidth;\n\n\treturn `\n\t\t<style>\n\t\t\t.canvu-link-card-root .canvu-link-card { transition: transform .18s ease, filter .18s ease, stroke .18s ease; }\n\t\t\t.canvu-link-card-root .canvu-link-open { opacity: 0; transform: translateX(-4px); transition: opacity .18s ease, transform .18s ease; }\n\t\t\t.canvu-link-card-root:hover .canvu-link-card { transform: translateY(-2px); filter: drop-shadow(0 4px 14px oklch(0.4 0.05 265 / .08)) drop-shadow(0 1px 3px oklch(0.4 0.05 265 / .06)); stroke: ${LINK_CARD_BORDER_STRONG}; }\n\t\t\t.canvu-link-card-root:hover .canvu-link-open { opacity: 1; transform: translateX(0); }\n\t\t</style>\n\t\t<g class=\"canvu-link-card-root\" transform=\"scale(${formatNumber(scale)})\">\n\t\t\t<rect class=\"canvu-link-card\" width=\"${formatNumber(contentWidth)}\" height=\"${formatNumber(contentHeight)}\" rx=\"16\" fill=\"#ffffff\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1\" filter=\"drop-shadow(0 1px 2px oklch(0.4 0.03 265 / .05)) drop-shadow(0 1px 1px oklch(0.4 0.03 265 / .04))\" />\n\t\t\t<defs>\n\t\t\t\t<linearGradient id=\"${gradientId}\" x1=\"8\" y1=\"48\" x2=\"48\" y2=\"8\" gradientUnits=\"userSpaceOnUse\">\n\t\t\t\t\t<stop stop-color=\"${LINK_CARD_ACCENT}\" />\n\t\t\t\t\t<stop offset=\"1\" stop-color=\"${LINK_CARD_ACCENT_DEEP}\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t\t<rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"11\" fill=\"url(#${gradientId})\" />\n\t\t\t<text x=\"${formatNumber(padding + badgeSize / 2)}\" y=\"${formatNumber(padding + badgeSize / 2 + 5)}\" text-anchor=\"middle\" font-family=\"system-ui,sans-serif\" font-size=\"17\" font-weight=\"700\" fill=\"#ffffff\">${escapeHtmlText(getLinkInitial(hostname))}</text>\n\t\t\t${buildLinkTextBand({ x: textX, y: 16, width: textWidth, height: 19, text: title, fontSize: 14.5, color: LINK_CARD_TITLE_COLOR, fontWeight: 700 })}\n\t\t\t${\n\t\t\t\tisSecure\n\t\t\t\t\t? `<g transform=\"translate(${formatNumber(textX)},40)\" stroke=\"${LINK_CARD_TEXT_COLOR}\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"><rect x=\"1.5\" y=\"4.5\" width=\"7\" height=\"6\" rx=\"1\" /><path d=\"M3 4.5 V3 a2 2 0 0 1 4 0 v1.5\" /></g>`\n\t\t\t\t\t: \"\"\n\t\t\t}\n\t\t\t${buildLinkTextBand({ x: subtitleX, y: 36, width: subtitleWidth, height: 17, text: subtitle, fontSize: 12.5, color: LINK_CARD_TEXT_COLOR })}\n\t\t\t<g class=\"canvu-link-open\" transform=\"translate(${formatNumber(buttonX)},${formatNumber(buttonY)})\">\n\t\t\t\t<rect width=\"${formatNumber(buttonSize)}\" height=\"${formatNumber(buttonSize)}\" rx=\"10\" fill=\"#ffffff\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1\" />\n\t\t\t\t<g transform=\"translate(10,10)\" stroke=\"${LINK_CARD_TEXT_COLOR}\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\">\n\t\t\t\t\t<path d=\"M8 2 H14 V8\" />\n\t\t\t\t\t<path d=\"M14 2 L7 9\" />\n\t\t\t\t\t<path d=\"M12 10 V13 a1 1 0 0 1 -1 1 H3 a1 1 0 0 1 -1 -1 V5 a1 1 0 0 1 1 -1 H6\" />\n\t\t\t\t</g>\n\t\t\t</g>\n\t\t</g>\n\t`;\n}\n\nconst isCanvuLinkData = (value: unknown): value is CanvuLinkData => {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst candidate = value as Record<string, unknown>;\n\treturn typeof candidate.href === \"string\" && candidate.href.length > 0;\n};\n\n/** Reads the link metadata from an item, or `null` when the item is not a link. */\nexport function getLinkData(item: VectorSceneItem): CanvuLinkData | null {\n\tconst entry = item.pluginData?.[LINK_PLUGIN_KEY];\n\treturn isCanvuLinkData(entry) ? entry : null;\n}\n\n/** True when the item carries link metadata (clickable card). */\nexport function isLinkItem(item: VectorSceneItem): boolean {\n\treturn getLinkData(item) != null;\n}\n\nexport function rebuildLinkItemSvg(item: VectorSceneItem): VectorSceneItem {\n\tconst link = getLinkData(item);\n\tif (!link) return item;\n\tconst scale = clamp(\n\t\titem.bounds.width / DEFAULT_LINK_CARD_WIDTH,\n\t\tLINK_CARD_MIN_SCALE,\n\t\tLINK_CARD_MAX_SCALE,\n\t);\n\tconst width = DEFAULT_LINK_CARD_WIDTH * scale;\n\tconst height = DEFAULT_LINK_CARD_HEIGHT * scale;\n\tconst bounds = {\n\t\t...item.bounds,\n\t\twidth,\n\t\theight,\n\t};\n\tconst customInnerSvg = buildLinkCardSvg(\n\t\tDEFAULT_LINK_CARD_WIDTH,\n\t\tDEFAULT_LINK_CARD_HEIGHT,\n\t\tlink,\n\t);\n\treturn {\n\t\t...item,\n\t\tx: bounds.x,\n\t\ty: bounds.y,\n\t\tbounds,\n\t\tcustomIntrinsicSize: {\n\t\t\twidth: DEFAULT_LINK_CARD_WIDTH,\n\t\t\theight: DEFAULT_LINK_CARD_HEIGHT,\n\t\t},\n\t\tcustomInnerSvg,\n\t\tchildrenSvg: buildLinkCardSvg(width, height, link),\n\t};\n}\n\n/**\n * Creates a clickable link/bookmark card item ready to append to the scene.\n * The card resizes by scaling its authored SVG, like other custom shapes.\n */\nexport function createLinkItem(\n\tid: string,\n\tbounds: Rect,\n\tlink: CanvuLinkData,\n): VectorSceneItem {\n\tconst width = bounds.width || DEFAULT_LINK_CARD_WIDTH;\n\tconst height = bounds.height || DEFAULT_LINK_CARD_HEIGHT;\n\tconst item = createCustomShapeItem(\n\t\tid,\n\t\t{ ...bounds, width, height },\n\t\t{ render: (size) => buildLinkCardSvg(size.width, size.height, link) },\n\t);\n\treturn rebuildLinkItemSvg({\n\t\t...item,\n\t\tpluginData: {\n\t\t\t...(item.pluginData ?? {}),\n\t\t\t[LINK_PLUGIN_KEY]: link,\n\t\t},\n\t});\n}\n\n/** Default card size used when placing a new link without explicit bounds. */\nexport const DEFAULT_LINK_CARD_SIZE = {\n\twidth: DEFAULT_LINK_CARD_WIDTH,\n\theight: DEFAULT_LINK_CARD_HEIGHT,\n} as const;\n","/**\n * Escape text for use inside SVG `<text>` / `<tspan>` (not full XML attribute context).\n */\nexport function escapeSvgTextContent(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\n/** Default font size used when the text tool creates a new text item. */\nexport const DEFAULT_TEXT_TOOL_FONT_SIZE = 28;\n/**\n * Sophisticated sans-serif used for both canvas text rendering and inline editing.\n * Inter is loaded by host apps (e.g. demo/index.html); system-ui fallback keeps the canvas\n * usable when the webfont hasn't loaded yet.\n */\nexport const TEXT_FONT_FAMILY =\n\t\"Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, system-ui, sans-serif\";\nconst LINE_HEIGHT_RATIO = 22 / 18;\n/**\n * Where the first text baseline sits, expressed in font-size units. Picked so\n * the SVG glyph and the inline-edit textarea agree visually (the textarea's\n * natural first-line baseline lands at this same y when padded by\n * {@link EDIT_TOP_PAD_RATIO}). See {@link TextEditOverlay} for the matching\n * inset.\n */\nconst FIRST_LINE_BASELINE_RATIO = 20 / 18;\n/** Textarea top inset (font-size units) that lines up with the SVG baseline. */\nexport const EDIT_TOP_PAD_RATIO = 4 / 18;\n/** Extra space below the descender so glyphs aren't clipped at the bounds. */\nconst BOTTOM_PAD_RATIO = 4 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 26;\n/** Horizontal padding in local space (matches `<text x=\"4\">`). */\nconst TEXT_PAD_X = 4;\nconst MAX_TEXT_MEASURE_CACHE_ENTRIES = 2000;\n\nlet sharedMeasureContext: CanvasRenderingContext2D | null | undefined;\nconst textMeasureCache = new Map<string, { width: number; height: number }>();\n\nfunction getSharedMeasureContext(): CanvasRenderingContext2D | null {\n\tif (sharedMeasureContext !== undefined) {\n\t\treturn sharedMeasureContext;\n\t}\n\tif (typeof document === \"undefined\") {\n\t\tsharedMeasureContext = null;\n\t\treturn sharedMeasureContext;\n\t}\n\tconst canvas = document.createElement(\"canvas\");\n\tsharedMeasureContext = canvas.getContext(\"2d\");\n\treturn sharedMeasureContext;\n}\n\nfunction textMeasureCacheKey(content: string, fontSize: number): string {\n\treturn `${fontSize}\\n${content}`;\n}\n\nfunction cacheMeasuredBounds(\n\tkey: string,\n\tbounds: { width: number; height: number },\n): void {\n\tif (textMeasureCache.size >= MAX_TEXT_MEASURE_CACHE_ENTRIES) {\n\t\ttextMeasureCache.clear();\n\t}\n\ttextMeasureCache.set(key, bounds);\n}\n\nfunction lineHeightFor(fontSize: number): number {\n\treturn fontSize * LINE_HEIGHT_RATIO;\n}\n\nfunction firstLineBaselineY(fontSize: number): number {\n\treturn fontSize * FIRST_LINE_BASELINE_RATIO;\n}\n\n/** Public version used by callers that need the same baseline as SVG rendering. */\nexport function textBaselineYFor(fontSize: number): number {\n\treturn firstLineBaselineY(fontSize);\n}\n\n/** Public version used by callers that need the same line height as SVG rendering. */\nexport function textLineHeightFor(fontSize: number): number {\n\treturn lineHeightFor(fontSize);\n}\n\n/**\n * Local width/height for a text item so bounds match rendered SVG (no fixed max width).\n * Uses canvas measureText when `document` is available; rough fallback otherwise.\n */\nexport function measureTextBoundsLocal(\n\tcontent: string,\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): {\n\twidth: number;\n\theight: number;\n} {\n\tconst cacheKey = textMeasureCacheKey(content, fontSize);\n\tconst cached = textMeasureCache.get(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst lh = lineHeightFor(fontSize);\n\tconst baselineY = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tconst lines = trimmed.length === 0 ? [PLACEHOLDER] : content.split(\"\\n\");\n\n\tlet maxInnerW = 0;\n\tconst ctx = getSharedMeasureContext();\n\tif (ctx) {\n\t\tctx.font = `${fontSize}px ${TEXT_FONT_FAMILY}`;\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, ctx.measureText(toMeasure).width);\n\t\t}\n\t}\n\tif (maxInnerW === 0) {\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, toMeasure.length * fontSize * 0.52);\n\t\t}\n\t}\n\n\tconst minW = Math.max(MIN_TEXT_BOX_W, TEXT_PAD_X * 2 + fontSize);\n\tconst width = Math.max(minW, TEXT_PAD_X * 2 + maxInnerW);\n\tconst height = Math.max(\n\t\tMIN_TEXT_BOX_H,\n\t\tbaselineY + (lines.length - 1) * lh + Math.max(4, fontSize * BOTTOM_PAD_RATIO),\n\t);\n\tconst measured = { width, height };\n\tcacheMeasuredBounds(cacheKey, measured);\n\treturn measured;\n}\n\n/**\n * Builds SVG `<text>` markup for a text box in local coordinates [0, w] × [0, h].\n * @param fillColor — Text fill (defaults to blue-gray placeholder / blue body).\n */\nexport function buildTextSvg(\n\tcontent: string,\n\t_width: number,\n\t_height: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst lh = lineHeightFor(fontSize);\n\tconst y0 = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tif (trimmed.length === 0) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"#94a3b8\" font-style=\"italic\">${escapeSvgTextContent(PLACEHOLDER)}</text>`;\n\t}\n\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length === 1) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${escapeSvgTextContent(lines[0] ?? \"\")}</text>`;\n\t}\n\n\tconst parts: string[] = [];\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] ?? \"\";\n\t\tif (i === 0) {\n\t\t\tparts.push(`<tspan x=\"4\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t} else {\n\t\t\tparts.push(`<tspan x=\"4\" dy=\"${lh}\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t}\n\t}\n\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${parts.join(\"\")}</text>`;\n}\n\n/**\n * Text that wraps inside a fixed rectangle (after user resize). Uses `foreignObject` + XHTML\n * so wrapping matches browser layout.\n */\nexport function buildTextFixedBoundsSvg(\n\tcontent: string,\n\twidth: number,\n\theight: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst w = Math.max(1, width);\n\tconst h = Math.max(1, height);\n\tconst lh = lineHeightFor(fontSize);\n\tconst trimmed = content.trim();\n\tconst padTop = EDIT_TOP_PAD_RATIO * fontSize;\n\tif (trimmed.length === 0) {\n\t\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:#94a3b8;font-style:italic\">${escapeHtmlText(PLACEHOLDER)}</div></foreignObject>`;\n\t}\n\tconst body = escapeHtmlText(content);\n\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:${fillColor}\">${body}</div></foreignObject>`;\n}\n","import type { StrokeOptions } from \"perfect-freehand\";\nimport getStroke from \"perfect-freehand\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { buildCustomShapeChildrenSvg } from \"./custom-shape\";\nimport { getLinkData, rebuildLinkItemSvg } from \"./link-item\";\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 (getLinkData(item)) {\n\t\treturn rebuildLinkItemSvg(item);\n\t}\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildCustomShapeChildrenSvg(\n\t\t\t\titem.customInnerSvg,\n\t\t\t\titem.customIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\n\treturn item;\n}\n\n/** Updates stroke color / width / opacity and refreshes the item’s SVG. */\nexport function applyStrokeToItem(\n\titem: VectorSceneItem,\n\tpatch: Partial<\n\t\tPick<\n\t\t\tVectorSceneItem,\n\t\t\t\"stroke\" | \"strokeWidth\" | \"strokeOpacity\" | \"strokeDash\" | \"textFontSize\"\n\t\t>\n\t>,\n): VectorSceneItem {\n\treturn rebuildItemSvg({ ...item, ...patch });\n}\n\n/** Creates a rectangle shape ready to append to your scene `items` array. */\nexport function createRectangleItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"rect\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an ellipse shape. */\nexport function createEllipseItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"ellipse\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/**\n * Creates an architectural revision cloud shape.\n *\n * Use this high-level builder when adding the built-in cloud shape from code or\n * from custom integrations. It creates an editable `VectorSceneItem` with\n * `toolKind: \"architectural-cloud\"`, so resize, stroke styling, selection, and\n * serialization continue to work like the built-in rectangle and ellipse tools.\n *\n * @example\n * ```ts\n * const cloud = createArchitecturalCloudItem(createShapeId(), {\n * x: 40,\n * y: 30,\n * width: 180,\n * height: 90,\n * });\n * ```\n */\nexport function createArchitecturalCloudItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"architectural-cloud\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates a straight line or arrow; `line` is usually from {@link lineEndpointsToLocal}. */\nexport function createLineItem(\n\tid: string,\n\tbounds: Rect,\n\tline: LineEndpointsLocal,\n\ttoolKind: \"line\" | \"arrow\",\n\tstyle?: Partial<StrokeStyle>,\n\tarrowBind?: ArrowBindings,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind,\n\t\tline: { ...line },\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(arrowBind ? { arrowBind } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** “Draw dot” tool: a small filled circle at (`worldX`, `worldY`). */\nexport function createDrawDotItem(\n\tid: string,\n\tworldX: number,\n\tworldY: number,\n\tradius: number,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: worldX - radius,\n\t\ty: worldY - radius,\n\t\tbounds: {\n\t\t\tx: worldX - radius,\n\t\t\ty: worldY - radius,\n\t\t\twidth: radius * 2,\n\t\t\theight: radius * 2,\n\t\t},\n\t\ttoolKind: \"draw\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an editable text box (`stroke` is used as text fill). */\nexport function createTextItem(\n\tid: string,\n\tbounds: Rect,\n\ttext = \"\",\n\tstyle?: Partial<StrokeStyle>,\n\ttextFontSize?: number,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"text\",\n\t\ttext,\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(textFontSize != null ? { textFontSize } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Freehand stroke from world-space points (main pen or marker highlight). */\nexport function createFreehandStrokeItem(\n\tid: string,\n\tpointsWorld: readonly VectorPathPoint[],\n\ttoolKind: \"draw\" | \"marker\",\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem | null {\n\tif (pointsWorld.length === 0) return null;\n\n\tconst merged: StrokeStyle = {\n\t\t...DEFAULT_STROKE_STYLE,\n\t\t...TOOL_FREEHAND_DEFAULTS[toolKind],\n\t\t...style,\n\t};\n\n\tconst sw = merged.strokeWidth;\n\t/** Filled outline extends ~size/2 past the polyline; keep generous padding to avoid clipping. */\n\tconst pad = Math.max(sw * 0.75 + 4, sw / 2 + 6);\n\tconst xs = pointsWorld.map((p) => p.x);\n\tconst ys = pointsWorld.map((p) => p.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\n\tconst x = minX - pad;\n\tconst y = minY - pad;\n\tconst w = Math.max(maxX - minX + 2 * pad, sw);\n\tconst h = Math.max(maxY - minY + 2 * pad, sw);\n\n\tconst pathPointsLocal = pointsWorld.map((p) => ({\n\t\tx: p.x - x,\n\t\ty: p.y - y,\n\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t}));\n\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx,\n\t\ty,\n\t\tbounds: { x, y, width: w, height: h },\n\t\ttoolKind,\n\t\tstroke: merged.stroke,\n\t\tstrokeWidth: merged.strokeWidth,\n\t\t...(merged.strokeOpacity != null ? { strokeOpacity: merged.strokeOpacity } : {}),\n\t\t...(merged.strokeDash != null ? { strokeDash: merged.strokeDash } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","import 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 {\n\tbuildArrowSvg,\n\tcreateShapeId,\n\trebuildItemSvg,\n\tresolveStrokeStyle,\n} from \"./shape-builders\";\nimport type { VectorSceneItem } from \"./types\";\n\n/**\n * Deep-clones an item with a new id. Rebuilds SVG where the id is embedded (arrow, text, custom).\n */\nexport function cloneVectorSceneItemWithNewId(\n\titem: VectorSceneItem,\n): VectorSceneItem {\n\tconst id = createShapeId();\n\tconst copy = JSON.parse(JSON.stringify(item)) as VectorSceneItem;\n\tlet next: VectorSceneItem = { ...copy, id };\n\tif (next.toolKind === \"arrow\" && next.line) {\n\t\tnext = {\n\t\t\t...next,\n\t\t\tchildrenSvg: buildArrowSvg(id, next.line, resolveStrokeStyle(next)),\n\t\t};\n\t}\n\tif (next.toolKind === \"text\" && next.text !== undefined) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\tif (\n\t\tnext.toolKind === \"custom\" &&\n\t\tnext.customInnerSvg &&\n\t\tnext.customIntrinsicSize\n\t) {\n\t\treturn rebuildItemSvg(next);\n\t}\n\treturn next;\n}\n\nexport function cloneVectorSceneItemsWithNewIds(\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem[] {\n\treturn items.map(cloneVectorSceneItemWithNewId);\n}\n","import { boundsAabbForRotatedItem } from \"../math/item-transform\";\nimport { cloneVectorSceneItemWithNewId } from \"./clone-item\";\nimport type { VectorSceneItem } from \"./types\";\n\nexport const MANAGED_KEY = \"managed\";\n\nconst STACK_GAP_WORLD = 16;\n\nexport function isManagedImage(item: VectorSceneItem): boolean {\n\tconst data = item.pluginData;\n\treturn data != null && (data as { [key: string]: unknown })[MANAGED_KEY] === true;\n}\n\nexport function markImageAsManaged(item: VectorSceneItem): VectorSceneItem {\n\treturn {\n\t\t...item,\n\t\tlocked: true,\n\t\tpluginData: { ...(item.pluginData ?? {}), [MANAGED_KEY]: true },\n\t};\n}\n\n/**\n * Repositions every managed image into a single vertical stack. The stack\n * origin is the current topmost (minimum Y) managed item — that point in world\n * space is stable across reorder/copy/delete operations, so reorder swaps slots\n * instead of making the whole stack drift downward. Subsequent items are\n * centered on the anchor's center X and stacked downward with a fixed gap.\n *\n * Non-managed items keep their position. Call this after any operation that\n * changes the relative order or count of managed images so the canvas reflects\n * the menu order.\n */\nexport function restackManagedImages(\n\titems: readonly VectorSceneItem[],\n): VectorSceneItem[] {\n\tlet anchorAabbY = Infinity;\n\tlet anchorCenterX = 0;\n\tfor (const item of items) {\n\t\tif (!isManagedImage(item)) continue;\n\t\tconst aabb = boundsAabbForRotatedItem(item);\n\t\tif (aabb.y < anchorAabbY) {\n\t\t\tanchorAabbY = aabb.y;\n\t\t\tanchorCenterX = aabb.x + aabb.width / 2;\n\t\t}\n\t}\n\tif (!Number.isFinite(anchorAabbY)) return [...items];\n\tlet cursorY = anchorAabbY;\n\treturn items.map((item) => {\n\t\tif (!isManagedImage(item)) return item;\n\t\t// Rotation pivots around the unrotated bounds' center, which is also the\n\t\t// AABB's center. Place the item so its AABB top-left lands at the cursor\n\t\t// centered on the anchor's AABB center X, then advance the cursor by the\n\t\t// AABB height so rotated items push subsequent items down.\n\t\tconst aabb = boundsAabbForRotatedItem(item);\n\t\tconst centerY = cursorY + aabb.height / 2;\n\t\tconst newX = anchorCenterX - item.bounds.width / 2;\n\t\tconst newY = centerY - item.bounds.height / 2;\n\t\tcursorY += aabb.height + STACK_GAP_WORLD;\n\t\tif (item.bounds.x === newX && item.bounds.y === newY) return item;\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: newX,\n\t\t\ty: newY,\n\t\t\tbounds: { ...item.bounds, x: newX, y: newY },\n\t\t};\n\t});\n}\n\n/**\n * Marks `newItem` as a managed image (locked + `pluginData.managed = true`),\n * appends it to `items`, and restacks all managed images so the new one lands\n * at the bottom of the stack with the anchor preserved.\n *\n * Typical usage: after producing scene items with\n * `ingestAssetFilesToSceneItems`, push each result through this helper to add\n * them to the managed-images stack:\n *\n * ```ts\n * let next = doc.items;\n * for (const created of result.items) next = addManagedImage(next, created);\n * doc.onItemsChange(next);\n * ```\n */\nexport function addManagedImage(\n\titems: readonly VectorSceneItem[],\n\tnewItem: VectorSceneItem,\n): VectorSceneItem[] {\n\treturn restackManagedImages([...items, markImageAsManaged(newItem)]);\n}\n\nexport function copyManagedImage(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n): VectorSceneItem[] {\n\tconst idx = items.findIndex((i) => i.id === id);\n\tif (idx < 0) return [...items];\n\tconst source = items[idx];\n\tif (!source) return [...items];\n\tconst clone = markImageAsManaged(cloneVectorSceneItemWithNewId(source));\n\tconst inserted = [...items.slice(0, idx + 1), clone, ...items.slice(idx + 1)];\n\treturn restackManagedImages(inserted);\n}\n\nexport function rotateManagedImage(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n): VectorSceneItem[] {\n\treturn restackManagedImages(\n\t\titems.map((i) =>\n\t\t\ti.id === id\n\t\t\t\t? { ...i, rotation: ((i.rotation ?? 0) + Math.PI / 2) % (Math.PI * 2) }\n\t\t\t\t: i,\n\t\t),\n\t);\n}\n\nexport function deleteManagedImage(\n\titems: readonly VectorSceneItem[],\n\tid: string,\n): VectorSceneItem[] {\n\treturn restackManagedImages(items.filter((i) => i.id !== id));\n}\n\nexport function reorderManagedImages(\n\titems: readonly VectorSceneItem[],\n\torderedManagedIds: readonly string[],\n): VectorSceneItem[] {\n\tconst managedSlots: number[] = [];\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst item = items[i];\n\t\tif (item && isManagedImage(item)) managedSlots.push(i);\n\t}\n\tif (managedSlots.length !== orderedManagedIds.length) {\n\t\treturn [...items];\n\t}\n\tconst byId = new Map(items.map((i) => [i.id, i]));\n\tconst next = [...items];\n\tmanagedSlots.forEach((slot, k) => {\n\t\tconst orderedId = orderedManagedIds[k];\n\t\tif (orderedId === undefined) return;\n\t\tconst replacement = byId.get(orderedId);\n\t\tif (replacement) next[slot] = replacement;\n\t});\n\treturn restackManagedImages(next);\n}\n","import { Canvas, Group, Path } from \"@shopify/react-native-skia\";\nimport { type ReactNode, useMemo, useState } from \"react\";\nimport {\n\tImage as NativeImage,\n\tPressable,\n\tScrollView,\n\ttype StyleProp,\n\tStyleSheet,\n\tText,\n\tView,\n\ttype ViewStyle,\n} from \"react-native\";\nimport {\n\tcopyManagedImage,\n\tdeleteManagedImage,\n\tisManagedImage,\n\trotateManagedImage,\n} from \"../scene/managed-images\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type NativeImagesMenuLabels = {\n\ttitle?: string;\n\tfocus?: string;\n\tduplicate?: string;\n\tcopy?: string;\n\trotate?: string;\n\tdelete?: string;\n\tcollapse?: string;\n\texpand?: string;\n};\n\ntype ResolvedNativeImagesMenuLabels = Required<\n\tOmit<NativeImagesMenuLabels, \"copy\">\n> &\n\tPick<NativeImagesMenuLabels, \"copy\">;\n\nexport type NativeImagesMenuProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly onItemsChange: (items: VectorSceneItem[]) => void;\n\treadonly onFocusItem?: (item: VectorSceneItem) => void;\n\treadonly labels?: NativeImagesMenuLabels;\n\treadonly defaultOpen?: boolean;\n\treadonly style?: StyleProp<ViewStyle>;\n\treadonly panelStyle?: StyleProp<ViewStyle>;\n\treadonly collapsedButtonStyle?: StyleProp<ViewStyle>;\n\treadonly rowStyle?: StyleProp<ViewStyle>;\n\treadonly actionButtonStyle?: StyleProp<ViewStyle>;\n\treadonly getImageUri?: (item: VectorSceneItem) => string | null | undefined;\n\treadonly renderThumbnail?: (item: VectorSceneItem) => ReactNode;\n};\n\nconst defaultLabels: ResolvedNativeImagesMenuLabels = {\n\ttitle: \"Images\",\n\tfocus: \"Focus on canvas\",\n\tduplicate: \"Duplicate\",\n\trotate: \"Rotate\",\n\tdelete: \"Delete\",\n\tcollapse: \"Collapse images menu\",\n\texpand: \"Open images menu\",\n};\n\nconst iconPaths = {\n\timages: [\"M4 5h16v14H4z\", \"M4 15l4-4 3 3 5-6 4 5\"],\n\tchevronRight: [\"M9 18l6-6-6-6\"],\n\tcopy: [\"M8 8h10v10H8z\", \"M6 16H4V4h12v2\", \"M13 11v4\", \"M11 13h4\"],\n\trotate: [\"M21 12a9 9 0 1 1-2.64-6.36\", \"M21 3v6h-6\"],\n\ttrash: [\"M3 6h18\", \"M8 6V4h8v2\", \"M6 6l1 15h10l1-15\", \"M10 11v6\", \"M14 11v6\"],\n\tgrip: [\"M8 7h8\", \"M8 12h8\", \"M8 17h8\"],\n} as const;\n\ntype NativeImagesMenuIconName = keyof typeof iconPaths;\n\nfunction NativeImagesMenuIcon({\n\tname,\n\tcolor = \"#0f172a\",\n\tsize = 18,\n}: {\n\treadonly name: NativeImagesMenuIconName;\n\treadonly color?: string;\n\treadonly size?: number;\n}) {\n\tconst scale = size / 24;\n\treturn (\n\t\t<Canvas style={{ width: size, height: size }}>\n\t\t\t<Group transform={[{ scale }]}>\n\t\t\t\t{iconPaths[name].map((path) => (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tkey={path}\n\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\n\nfunction resolveLabels(\n\tlabels?: NativeImagesMenuLabels,\n): ResolvedNativeImagesMenuLabels {\n\treturn {\n\t\t...defaultLabels,\n\t\t...labels,\n\t\tduplicate: labels?.duplicate ?? labels?.copy ?? defaultLabels.duplicate,\n\t};\n}\n\nfunction getDefaultImageUri(item: VectorSceneItem): string | null {\n\treturn item.imageThumbnailHref ?? item.imageRasterHref ?? null;\n}\n\nfunction NativeImagesMenuAction({\n\tlabel,\n\tdanger = false,\n\tchildren,\n\tonPress,\n\tstyle,\n}: {\n\treadonly label: string;\n\treadonly danger?: boolean;\n\treadonly children: ReactNode;\n\treadonly onPress: () => void;\n\treadonly style?: StyleProp<ViewStyle>;\n}) {\n\treturn (\n\t\t<Pressable\n\t\t\taccessibilityRole=\"button\"\n\t\t\taccessibilityLabel={label}\n\t\t\tonPress={onPress}\n\t\t\tstyle={({ pressed }) => [\n\t\t\t\tstyles.actionButton,\n\t\t\t\tpressed && styles.actionButtonPressed,\n\t\t\t\tdanger && styles.dangerActionButton,\n\t\t\t\tstyle,\n\t\t\t]}\n\t\t>\n\t\t\t{children}\n\t\t</Pressable>\n\t);\n}\n\nfunction NativeImagesMenuRow({\n\titem,\n\titems,\n\tlabels,\n\tonItemsChange,\n\tonFocusItem,\n\tgetImageUri,\n\trenderThumbnail,\n\trowStyle,\n\tactionButtonStyle,\n}: {\n\treadonly item: VectorSceneItem;\n\treadonly items: readonly VectorSceneItem[];\n\treadonly labels: ResolvedNativeImagesMenuLabels;\n\treadonly onItemsChange: (items: VectorSceneItem[]) => void;\n\treadonly onFocusItem?: (item: VectorSceneItem) => void;\n\treadonly getImageUri: (item: VectorSceneItem) => string | null | undefined;\n\treadonly renderThumbnail?: (item: VectorSceneItem) => ReactNode;\n\treadonly rowStyle?: StyleProp<ViewStyle>;\n\treadonly actionButtonStyle?: StyleProp<ViewStyle>;\n}) {\n\tconst imageUri = getImageUri(item);\n\treturn (\n\t\t<View style={[styles.row, rowStyle]}>\n\t\t\t<View style={styles.handle}>\n\t\t\t\t<NativeImagesMenuIcon name=\"grip\" color=\"#94a3b8\" />\n\t\t\t</View>\n\t\t\t<Pressable\n\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\taccessibilityLabel={labels.focus}\n\t\t\t\tdisabled={!onFocusItem}\n\t\t\t\tonPress={() => onFocusItem?.(item)}\n\t\t\t\tstyle={styles.thumbnailButton}\n\t\t\t>\n\t\t\t\t<View style={styles.thumbnailBox}>\n\t\t\t\t\t{renderThumbnail ? renderThumbnail(item) : null}\n\t\t\t\t\t{!renderThumbnail && imageUri ? (\n\t\t\t\t\t\t<NativeImage source={{ uri: imageUri }} style={styles.thumbnailImage} />\n\t\t\t\t\t) : null}\n\t\t\t\t</View>\n\t\t\t</Pressable>\n\t\t\t<View style={styles.actionsColumn}>\n\t\t\t\t<NativeImagesMenuAction\n\t\t\t\t\tlabel={labels.duplicate}\n\t\t\t\t\tonPress={() => onItemsChange(copyManagedImage(items, item.id))}\n\t\t\t\t\tstyle={actionButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"copy\" />\n\t\t\t\t</NativeImagesMenuAction>\n\t\t\t\t<NativeImagesMenuAction\n\t\t\t\t\tlabel={labels.rotate}\n\t\t\t\t\tonPress={() => onItemsChange(rotateManagedImage(items, item.id))}\n\t\t\t\t\tstyle={actionButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"rotate\" />\n\t\t\t\t</NativeImagesMenuAction>\n\t\t\t\t<NativeImagesMenuAction\n\t\t\t\t\tlabel={labels.delete}\n\t\t\t\t\tdanger\n\t\t\t\t\tonPress={() => onItemsChange(deleteManagedImage(items, item.id))}\n\t\t\t\t\tstyle={actionButtonStyle}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"trash\" color=\"#b91c1c\" />\n\t\t\t\t</NativeImagesMenuAction>\n\t\t\t</View>\n\t\t</View>\n\t);\n}\n\n/**\n * React Native companion to the web `ImagesMenu` component.\n *\n * Use this for floating mobile page/image management controls that should look\n * and behave like the web `ImagesMenu`: a compact button when collapsed and a\n * small anchored panel with managed image thumbnails plus duplicate, rotate,\n * delete, and focus actions when expanded.\n *\n * @example\n * ```tsx\n * <NativeImagesMenu\n * items={items}\n * onItemsChange={setItems}\n * onFocusItem={(item) => viewportRef.current?.fitWorldRect(item.bounds)}\n * />\n * ```\n */\nexport function NativeImagesMenu({\n\titems,\n\tonItemsChange,\n\tonFocusItem,\n\tlabels,\n\tdefaultOpen = false,\n\tstyle,\n\tpanelStyle,\n\tcollapsedButtonStyle,\n\trowStyle,\n\tactionButtonStyle,\n\tgetImageUri = getDefaultImageUri,\n\trenderThumbnail,\n}: NativeImagesMenuProps) {\n\tconst managed = useMemo(() => items.filter(isManagedImage), [items]);\n\tconst [collapsed, setCollapsed] = useState(!defaultOpen);\n\n\tif (managed.length === 0) return null;\n\n\tconst resolvedLabels = resolveLabels(labels);\n\n\tif (collapsed) {\n\t\treturn (\n\t\t\t<Pressable\n\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\taccessibilityLabel={resolvedLabels.expand}\n\t\t\t\tonPress={() => setCollapsed(false)}\n\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\tstyles.collapsedButton,\n\t\t\t\t\tpressed && styles.collapsedButtonPressed,\n\t\t\t\t\tcollapsedButtonStyle,\n\t\t\t\t\tstyle,\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t<NativeImagesMenuIcon name=\"images\" size={20} />\n\t\t\t</Pressable>\n\t\t);\n\t}\n\n\treturn (\n\t\t<View style={[styles.panel, panelStyle, style]}>\n\t\t\t<View style={styles.header}>\n\t\t\t\t<View style={styles.headerTitleRow}>\n\t\t\t\t\t<Text style={styles.headerTitle}>{resolvedLabels.title}</Text>\n\t\t\t\t\t<Text style={styles.count}>{managed.length}</Text>\n\t\t\t\t</View>\n\t\t\t\t<Pressable\n\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\taccessibilityLabel={resolvedLabels.collapse}\n\t\t\t\t\tonPress={() => setCollapsed(true)}\n\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\tstyles.collapseButton,\n\t\t\t\t\t\tpressed && styles.actionButtonPressed,\n\t\t\t\t\t]}\n\t\t\t\t>\n\t\t\t\t\t<NativeImagesMenuIcon name=\"chevronRight\" size={20} />\n\t\t\t\t</Pressable>\n\t\t\t</View>\n\t\t\t<ScrollView\n\t\t\t\tstyle={styles.listScroll}\n\t\t\t\tcontentContainerStyle={styles.listContent}\n\t\t\t\tshowsVerticalScrollIndicator={false}\n\t\t\t>\n\t\t\t\t{managed.map((item) => (\n\t\t\t\t\t<NativeImagesMenuRow\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\titems={items}\n\t\t\t\t\t\tlabels={resolvedLabels}\n\t\t\t\t\t\tonItemsChange={onItemsChange}\n\t\t\t\t\t\tonFocusItem={onFocusItem}\n\t\t\t\t\t\tgetImageUri={getImageUri}\n\t\t\t\t\t\trenderThumbnail={renderThumbnail}\n\t\t\t\t\t\trowStyle={rowStyle}\n\t\t\t\t\t\tactionButtonStyle={actionButtonStyle}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</ScrollView>\n\t\t</View>\n\t);\n}\n\nconst styles = StyleSheet.create({\n\tactionButton: {\n\t\talignItems: \"center\",\n\t\tborderRadius: 6,\n\t\theight: 32,\n\t\tjustifyContent: \"center\",\n\t\twidth: 32,\n\t},\n\tactionButtonPressed: {\n\t\tbackgroundColor: \"#f1f5f9\",\n\t},\n\tactionsColumn: {\n\t\talignItems: \"center\",\n\t\tgap: 4,\n\t\tjustifyContent: \"center\",\n\t},\n\tcollapseButton: {\n\t\talignItems: \"center\",\n\t\tborderRadius: 8,\n\t\theight: 32,\n\t\tjustifyContent: \"center\",\n\t\twidth: 32,\n\t},\n\tcollapsedButton: {\n\t\talignItems: \"center\",\n\t\tbackgroundColor: \"#ffffff\",\n\t\tborderColor: \"#e2e8f0\",\n\t\tborderRadius: 10,\n\t\tborderWidth: 1,\n\t\theight: 44,\n\t\tjustifyContent: \"center\",\n\t\tshadowColor: \"#0f172a\",\n\t\tshadowOffset: { width: 0, height: 8 },\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 24,\n\t\twidth: 44,\n\t},\n\tcollapsedButtonPressed: {\n\t\tbackgroundColor: \"#f8fafc\",\n\t},\n\tcount: {\n\t\tcolor: \"#64748b\",\n\t\tfontSize: 14,\n\t\tfontWeight: \"500\",\n\t},\n\tdangerActionButton: {\n\t\tbackgroundColor: \"#fef2f2\",\n\t},\n\thandle: {\n\t\talignItems: \"center\",\n\t\theight: 128,\n\t\tjustifyContent: \"center\",\n\t\twidth: 28,\n\t},\n\theader: {\n\t\talignItems: \"center\",\n\t\tborderBottomColor: \"#e2e8f0\",\n\t\tborderBottomWidth: 1,\n\t\tflexDirection: \"row\",\n\t\tgap: 8,\n\t\tjustifyContent: \"space-between\",\n\t\tpaddingBottom: 8,\n\t\tpaddingLeft: 14,\n\t\tpaddingRight: 8,\n\t\tpaddingTop: 8,\n\t},\n\theaderTitle: {\n\t\tcolor: \"#0f172a\",\n\t\tfontSize: 14,\n\t\tfontWeight: \"600\",\n\t\tletterSpacing: 0.28,\n\t},\n\theaderTitleRow: {\n\t\talignItems: \"center\",\n\t\tflexDirection: \"row\",\n\t\tgap: 8,\n\t},\n\tlistContent: {\n\t\tgap: 6,\n\t\tpadding: 8,\n\t},\n\tlistScroll: {\n\t\tmaxHeight: 640,\n\t},\n\tpanel: {\n\t\tbackgroundColor: \"#ffffff\",\n\t\tborderColor: \"#e2e8f0\",\n\t\tborderRadius: 10,\n\t\tborderWidth: 1,\n\t\tmaxHeight: 820,\n\t\toverflow: \"hidden\",\n\t\tshadowColor: \"#0f172a\",\n\t\tshadowOffset: { width: 0, height: 10 },\n\t\tshadowOpacity: 0.12,\n\t\tshadowRadius: 40,\n\t},\n\trow: {\n\t\talignItems: \"center\",\n\t\tborderRadius: 10,\n\t\tflexDirection: \"row\",\n\t\tgap: 12,\n\t\tpaddingBottom: 10,\n\t\tpaddingLeft: 12,\n\t\tpaddingRight: 12,\n\t\tpaddingTop: 10,\n\t},\n\tthumbnailBox: {\n\t\talignItems: \"center\",\n\t\tbackgroundColor: \"#e2e8f0\",\n\t\tborderRadius: 8,\n\t\theight: 128,\n\t\tjustifyContent: \"center\",\n\t\toverflow: \"hidden\",\n\t\twidth: 128,\n\t},\n\tthumbnailButton: {\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t},\n\tthumbnailImage: {\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t},\n});\n","import { itemLocalToWorld, worldToItemLocal } from \"../math/item-transform\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { getLinkData } from \"../scene/link-item\";\nimport type { VectorSceneItem } from \"../scene/types\";\n\nexport type ResizeHandleId = \"nw\" | \"n\" | \"ne\" | \"e\" | \"se\" | \"s\" | \"sw\" | \"w\";\n\nexport const ALL_RESIZE_HANDLES: readonly ResizeHandleId[] = [\n\t\"nw\",\n\t\"n\",\n\t\"ne\",\n\t\"e\",\n\t\"se\",\n\t\"s\",\n\t\"sw\",\n\t\"w\",\n];\nexport const CORNER_RESIZE_HANDLES: readonly ResizeHandleId[] = [\n\t\"nw\",\n\t\"ne\",\n\t\"se\",\n\t\"sw\",\n];\n\n/**\n * Resize handles exposed for a custom shape.\n *\n * Use `\"all\"` for the default 8 handles, `\"corners\"` for corner-only resize,\n * or pass explicit handle ids for constrained tools such as a single southeast\n * corner handle. An empty array hides resize dots but leaves selection and\n * rotation available.\n */\nexport type CustomShapeResizeHandles = \"all\" | \"corners\" | readonly ResizeHandleId[];\n\nfunction dedupeHandles(\n\thandles: readonly ResizeHandleId[],\n): readonly ResizeHandleId[] {\n\tconst allowed = new Set(handles);\n\treturn ALL_RESIZE_HANDLES.filter((handle) => allowed.has(handle));\n}\n\nfunction resolveCustomResizeHandles(\n\thandles: CustomShapeResizeHandles | undefined,\n): readonly ResizeHandleId[] {\n\tif (handles === \"corners\") return CORNER_RESIZE_HANDLES;\n\tif (handles === \"all\" || handles === undefined) return ALL_RESIZE_HANDLES;\n\treturn dedupeHandles(handles);\n}\n\n/**\n * Returns the resize handles that should be visible and active for an item.\n *\n * Link cards keep their historical corner-only behavior. Custom shapes may\n * narrow the handle set through `customResizeHandles`; all other resizable\n * items use the full 8-handle set.\n */\nexport function resolveResizeHandlesForItem(\n\titem: VectorSceneItem | null | undefined,\n): readonly ResizeHandleId[] {\n\tif (!item) return ALL_RESIZE_HANDLES;\n\tif (getLinkData(item)) return CORNER_RESIZE_HANDLES;\n\tif (item.toolKind === \"custom\") {\n\t\treturn resolveCustomResizeHandles(item.customResizeHandles);\n\t}\n\treturn ALL_RESIZE_HANDLES;\n}\n\n/** Returns whether a handle is currently visible/active for an item. */\nexport function itemAllowsResizeHandle(\n\titem: VectorSceneItem | null | undefined,\n\thandle: ResizeHandleId,\n): boolean {\n\treturn resolveResizeHandlesForItem(item).includes(handle);\n}\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\thandles: readonly ResizeHandleId[] = ALL_RESIZE_HANDLES,\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 handles) {\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 * Deterministic accent from a peer id when `color` is not provided.\n */\nexport function defaultPresenceColorForId(id: string): string {\n\tlet h = 2166136261;\n\tfor (let i = 0; i < id.length; i++) {\n\t\th ^= id.charCodeAt(i);\n\t\th = Math.imul(h, 16777619);\n\t}\n\tconst hue = (h >>> 0) % 360;\n\treturn `hsl(${hue} 72% 42%)`;\n}\n","/**\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","import type { FreehandSvgPayload, StrokeStyle } from \"../scene/shape-builders\";\nimport { computeFreehandSvgPayload } from \"../scene/shape-builders\";\nimport type { VectorPathPoint } from \"../scene/types\";\n\ntype NativeFreehandToolKind = \"draw\" | \"pencil\" | \"brush\" | \"marker\";\n\ntype NativeFreehandSvgPayloadInput = {\n\treadonly itemId: string;\n\treadonly pathPointsLocal: readonly VectorPathPoint[];\n\treadonly style: StrokeStyle;\n\treadonly toolKind: NativeFreehandToolKind;\n};\n\nconst MAX_NATIVE_FREEHAND_PAYLOAD_CACHE_SIZE = 800;\nconst pathSignatureCache = new WeakMap<readonly VectorPathPoint[], string>();\nconst payloadCache = new Map<string, FreehandSvgPayload | null>();\n\nfunction hashNumber(hash: number, value: number): number {\n\tconst normalizedValue = Math.round(value * 100);\n\treturn Math.imul(hash ^ normalizedValue, 16777619) >>> 0;\n}\n\nfunction getPathPointsSignature(\n\tpathPointsLocal: readonly VectorPathPoint[],\n): string {\n\tconst cachedSignature = pathSignatureCache.get(pathPointsLocal);\n\tif (cachedSignature) return cachedSignature;\n\tconst hash = pathPointsLocal.reduce((currentHash, point) => {\n\t\tconst withX = hashNumber(currentHash, point.x);\n\t\tconst withY = hashNumber(withX, point.y);\n\t\treturn hashNumber(withY, point.pressure ?? -1);\n\t}, 2166136261);\n\tconst signature = `${pathPointsLocal.length}:${hash}`;\n\tpathSignatureCache.set(pathPointsLocal, signature);\n\treturn signature;\n}\n\nfunction getStyleSignature(style: StrokeStyle): string {\n\treturn [\n\t\tstyle.stroke,\n\t\tstyle.strokeWidth,\n\t\tstyle.strokeOpacity ?? \"\",\n\t\tstyle.strokeDash ?? \"\",\n\t].join(\":\");\n}\n\nfunction getPayloadCacheKey(input: NativeFreehandSvgPayloadInput): string {\n\treturn [\n\t\tinput.itemId,\n\t\tinput.toolKind,\n\t\tgetStyleSignature(input.style),\n\t\tgetPathPointsSignature(input.pathPointsLocal),\n\t].join(\"|\");\n}\n\nfunction storePayload(\n\tkey: string,\n\tpayload: FreehandSvgPayload | null,\n): FreehandSvgPayload | null {\n\tpayloadCache.set(key, payload);\n\tif (payloadCache.size > MAX_NATIVE_FREEHAND_PAYLOAD_CACHE_SIZE) {\n\t\tconst oldestKey = payloadCache.keys().next().value;\n\t\tif (oldestKey !== undefined) {\n\t\t\tpayloadCache.delete(oldestKey);\n\t\t}\n\t}\n\treturn payload;\n}\n\nexport function getNativeFreehandSvgPayload(\n\tinput: NativeFreehandSvgPayloadInput,\n): FreehandSvgPayload | null {\n\tconst key = getPayloadCacheKey(input);\n\tif (payloadCache.has(key)) {\n\t\treturn payloadCache.get(key) ?? null;\n\t}\n\treturn storePayload(\n\t\tkey,\n\t\tcomputeFreehandSvgPayload(input.pathPointsLocal, input.style, input.toolKind),\n\t);\n}\n","import type { Rect } from \"../math/rect\";\nimport { type CanvuLinkData, DEFAULT_LINK_CARD_SIZE } from \"../scene/link-item\";\n\nexport type NativeLinkCardDisplay = {\n\treadonly title: string;\n\treadonly subtitle: string;\n\treadonly initial: string;\n\treadonly secure: boolean;\n};\n\nfunction linkHostname(href: string): string {\n\ttry {\n\t\treturn new URL(href).hostname.replace(/^www\\./, \"\");\n\t} catch {\n\t\treturn href;\n\t}\n}\n\nfunction linkProtocol(href: string): string {\n\ttry {\n\t\treturn new URL(href).protocol;\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n\nfunction linkInitial(value: string): string {\n\tconst first = value.trim().charAt(0).toUpperCase();\n\treturn first || \"L\";\n}\n\nexport function normalizeNativeLinkHref(value: string): string | null {\n\tconst trimmed = value.trim();\n\tif (!trimmed) return null;\n\tif (/^[a-z][a-z0-9+.-]*:/i.test(trimmed)) return trimmed;\n\treturn `https://${trimmed}`;\n}\n\nexport function buildNativeLinkCardDisplay(\n\tlink: CanvuLinkData,\n): NativeLinkCardDisplay {\n\tconst hostname = linkHostname(link.href);\n\tconst title = link.title?.trim() || hostname || \"Link\";\n\treturn {\n\t\ttitle,\n\t\tsubtitle: hostname || link.href,\n\t\tinitial: linkInitial(hostname || title),\n\t\tsecure: linkProtocol(link.href) === \"https:\",\n\t};\n}\n\nexport function createNativeLinkCardBoundsAtPoint(point: {\n\treadonly x: number;\n\treadonly y: number;\n}): Rect {\n\treturn {\n\t\tx: point.x - DEFAULT_LINK_CARD_SIZE.width / 2,\n\t\ty: point.y - DEFAULT_LINK_CARD_SIZE.height / 2,\n\t\twidth: DEFAULT_LINK_CARD_SIZE.width,\n\t\theight: DEFAULT_LINK_CARD_SIZE.height,\n\t};\n}\n","import type { SkImage } from \"@shopify/react-native-skia\";\nimport { useEffect, useState } from \"react\";\n\nexport type NativeImageCacheImage = {\n\treadonly dispose?: () => void;\n};\n\ntype NativeImageCacheInput<TImage extends NativeImageCacheImage> = {\n\treadonly loadImage: (href: string) => Promise<TImage | null>;\n\treadonly maxEntries?: number;\n};\n\ntype NativeImageCacheEntry<TImage extends NativeImageCacheImage> = {\n\timage?: TImage;\n\tpromise?: Promise<TImage | null>;\n\tlastUsed: number;\n\tretainCount: number;\n};\n\nexport type NativeImageCache<TImage extends NativeImageCacheImage> = {\n\treadonly getCached: (href: string) => TImage | null;\n\treadonly load: (href: string) => Promise<TImage | null>;\n\treadonly retain: (href: string) => () => void;\n\treadonly clear: () => void;\n\treadonly size: () => number;\n};\n\n/**\n * Tracks the last decoded native image for a canvas image source.\n */\nexport type LoadedNativeImage<TImage> = {\n\treadonly href: string;\n\treadonly image: TImage | null;\n};\n\ntype LoadedSkiaImage = LoadedNativeImage<SkImage>;\n\nconst DEFAULT_NATIVE_IMAGE_CACHE_MAX_ENTRIES = 96;\n\nfunction disposeCachedImage(image: NativeImageCacheImage): void {\n\ttry {\n\t\timage.dispose?.();\n\t} catch {}\n}\n\nexport function createNativeImageCache<TImage extends NativeImageCacheImage>({\n\tloadImage,\n\tmaxEntries = DEFAULT_NATIVE_IMAGE_CACHE_MAX_ENTRIES,\n}: NativeImageCacheInput<TImage>): NativeImageCache<TImage> {\n\tconst safeMaxEntries = Math.max(1, Math.round(maxEntries));\n\tconst entries = new Map<string, NativeImageCacheEntry<TImage>>();\n\tlet clock = 0;\n\n\tconst touchEntry = (entry: NativeImageCacheEntry<TImage>) => {\n\t\tclock += 1;\n\t\tentry.lastUsed = clock;\n\t};\n\n\tconst createEntry = (): NativeImageCacheEntry<TImage> => {\n\t\tclock += 1;\n\t\treturn {\n\t\t\tlastUsed: clock,\n\t\t\tretainCount: 0,\n\t\t};\n\t};\n\n\tconst prune = () => {\n\t\tconst cachedEntries = [...entries.entries()].filter(\n\t\t\t(\n\t\t\t\tentry,\n\t\t\t): entry is [string, NativeImageCacheEntry<TImage> & { image: TImage }] =>\n\t\t\t\tentry[1].image != null && entry[1].retainCount === 0,\n\t\t);\n\t\tif (cachedEntries.length <= safeMaxEntries) return;\n\t\tconst evictedEntries = cachedEntries\n\t\t\t.sort(\n\t\t\t\t(leftEntry, rightEntry) => leftEntry[1].lastUsed - rightEntry[1].lastUsed,\n\t\t\t)\n\t\t\t.slice(0, cachedEntries.length - safeMaxEntries);\n\t\tfor (const [href, entry] of evictedEntries) {\n\t\t\tentries.delete(href);\n\t\t\tdisposeCachedImage(entry.image);\n\t\t}\n\t};\n\n\tconst getCached = (href: string): TImage | null => {\n\t\tconst entry = entries.get(href);\n\t\tif (!entry?.image) return null;\n\t\ttouchEntry(entry);\n\t\treturn entry.image;\n\t};\n\n\tconst load = async (href: string): Promise<TImage | null> => {\n\t\tconst cachedImage = getCached(href);\n\t\tif (cachedImage) return cachedImage;\n\t\tconst existingEntry = entries.get(href);\n\t\tif (existingEntry?.promise) return await existingEntry.promise;\n\t\tconst entry = existingEntry ?? createEntry();\n\t\tconst promise = loadImage(href)\n\t\t\t.then((image) => {\n\t\t\t\tif (!image) {\n\t\t\t\t\tif (entry.retainCount === 0) entries.delete(href);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tentry.image = image;\n\t\t\t\tentry.promise = undefined;\n\t\t\t\ttouchEntry(entry);\n\t\t\t\tprune();\n\t\t\t\treturn image;\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tentries.delete(href);\n\t\t\t\tthrow error;\n\t\t\t});\n\t\tentry.promise = promise;\n\t\tentries.set(href, entry);\n\t\treturn await promise;\n\t};\n\n\tconst retain = (href: string) => {\n\t\tconst entry = entries.get(href) ?? createEntry();\n\t\tentry.retainCount += 1;\n\t\ttouchEntry(entry);\n\t\tentries.set(href, entry);\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tentry.retainCount = Math.max(0, entry.retainCount - 1);\n\t\t\tif (!entry.image && !entry.promise && entry.retainCount === 0) {\n\t\t\t\tentries.delete(href);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprune();\n\t\t};\n\t};\n\n\tconst clear = () => {\n\t\tfor (const entry of entries.values()) {\n\t\t\tif (entry.image) disposeCachedImage(entry.image);\n\t\t}\n\t\tentries.clear();\n\t};\n\n\tconst size = () =>\n\t\t[...entries.values()].filter((entry) => entry.image != null).length;\n\n\treturn { getCached, load, retain, clear, size };\n}\n\nasync function loadSkiaImageFromHref(href: string): Promise<SkImage | null> {\n\tconst { Skia } = await import(\"@shopify/react-native-skia\");\n\tconst data = await Skia.Data.fromURI(href);\n\treturn Skia.Image.MakeImageFromEncoded(data);\n}\n\nconst nativeSkiaImageCache = createNativeImageCache<SkImage>({\n\tloadImage: loadSkiaImageFromHref,\n});\n\n/**\n * Keeps the previous decoded image visible while a replacement image loads.\n */\nexport function resolveNativeImageLoadingState<TImage>(\n\thref: string,\n\tloadedImage: LoadedNativeImage<TImage> | null,\n): LoadedNativeImage<TImage> {\n\tif (loadedImage?.image) return loadedImage;\n\treturn { href, image: null };\n}\n\n/**\n * Returns the renderable native image without clearing the current frame for\n * in-flight image source changes.\n */\nexport function resolveNativeImageRenderValue<TImage>(\n\thref: string | null | undefined,\n\tloadedImage: LoadedNativeImage<TImage> | null,\n): TImage | null {\n\tif (!href) return null;\n\treturn loadedImage?.image ?? null;\n}\n\nexport function useCachedSkiaImage(href: string | null | undefined): SkImage | null {\n\tconst [loadedImage, setLoadedImage] = useState<LoadedSkiaImage | null>(() =>\n\t\thref ? { href, image: nativeSkiaImageCache.getCached(href) } : null,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!href) {\n\t\t\tsetLoadedImage(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst releaseImage = nativeSkiaImageCache.retain(href);\n\t\tconst cachedImage = nativeSkiaImageCache.getCached(href);\n\t\tif (cachedImage) {\n\t\t\tsetLoadedImage({ href, image: cachedImage });\n\t\t\treturn releaseImage;\n\t\t}\n\n\t\tlet active = true;\n\t\tsetLoadedImage((currentLoadedImage) =>\n\t\t\tresolveNativeImageLoadingState(href, currentLoadedImage),\n\t\t);\n\t\tvoid nativeSkiaImageCache.load(href).then(\n\t\t\t(loadedImage) => {\n\t\t\t\tif (active) setLoadedImage({ href, image: loadedImage });\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (active) setLoadedImage({ href, image: null });\n\t\t\t},\n\t\t);\n\n\t\treturn () => {\n\t\t\tactive = false;\n\t\t\treleaseImage();\n\t\t};\n\t}, [href]);\n\n\treturn resolveNativeImageRenderValue(href, loadedImage);\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\nexport function skiaItemTranslationTransform(x: number, y: number): SkiaTransform[] {\n\treturn [{ translateX: x }, { translateY: y }];\n}\n\nexport function skiaItemRotationTransform(rotationRad: number): SkiaTransform[] {\n\tif (Math.abs(rotationRad) > 1e-12) {\n\t\treturn [{ rotate: rotationRad }];\n\t}\n\treturn [];\n}\n\nexport function skiaItemRotationOrigin(\n\tx: number,\n\ty: number,\n\tcx: number,\n\tcy: number,\n): { x: number; y: number } {\n\treturn { x: x + cx, y: y + cy };\n}\n","import {\n\tDashPathEffect,\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\tvec,\n} from \"@shopify/react-native-skia\";\nimport { useCachedSkiaImage } from \"./native-image-cache\";\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\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 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\tconst intervals =\n\t\t\t\tstyle === \"stroke\"\n\t\t\t\t\t? dashIntervalsFromStrokeDasharray(node.strokeDasharray)\n\t\t\t\t\t: null;\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\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t\t</Path>\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 = useCachedSkiaImage(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 strokeDasharray?: 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\tstrokeDasharray: attrs[\"stroke-dasharray\"],\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\tDashPathEffect,\n\tGroup,\n\tLine,\n\tmatchFont,\n\tPath,\n\tRoundedRect,\n\tRect as SkiaRect,\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\ttype CanvuLinkData,\n\tDEFAULT_LINK_CARD_SIZE,\n\tgetLinkData,\n} from \"../scene/link-item\";\nimport {\n\tcomputeStraightArrowGeometry,\n\tresolveStrokeStyle,\n} from \"../scene/shape-builders\";\nimport type { VectorSceneItem } from \"../scene/types\";\nimport { getNativeFreehandSvgPayload } from \"./native-freehand-payload-cache\";\nimport { buildNativeLinkCardDisplay } from \"./native-link-card\";\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\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 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\nfunction truncateText(value: string, maxChars: number): string {\n\tif (value.length <= maxChars) return value;\n\treturn `${value.slice(0, Math.max(0, maxChars - 3)).trimEnd()}...`;\n}\n\nfunction NativeLinkCardRenderer({\n\titem,\n\tlink,\n}: {\n\treadonly item: VectorSceneItem;\n\treadonly link: CanvuLinkData;\n}) {\n\tconst bounds = normalizeRect(item.bounds);\n\tconst scaleX = Math.max(0.01, bounds.width / DEFAULT_LINK_CARD_SIZE.width);\n\tconst scaleY = Math.max(0.01, bounds.height / DEFAULT_LINK_CARD_SIZE.height);\n\tconst display = buildNativeLinkCardDisplay(link);\n\tconst titleFont = matchFont({ fontSize: 14.5, fontWeight: \"700\" });\n\tconst subtitleFont = matchFont({ fontSize: 12.5 });\n\tconst initialFont = matchFont({ fontSize: 17, fontWeight: \"700\" });\n\tconst title = truncateText(display.title, 28);\n\tconst subtitle = truncateText(display.subtitle, display.secure ? 28 : 31);\n\tconst subtitleX = display.secure ? 82 : 69;\n\tconst subtitleWidth = display.secure ? 188 : 201;\n\n\treturn (\n\t\t<Group transform={[{ scaleX }, { scaleY }]}>\n\t\t\t<RoundedRect\n\t\t\t\tx={0}\n\t\t\t\ty={0}\n\t\t\t\twidth={DEFAULT_LINK_CARD_SIZE.width}\n\t\t\t\theight={DEFAULT_LINK_CARD_SIZE.height}\n\t\t\t\tr={16}\n\t\t\t\tcolor=\"#ffffff\"\n\t\t\t\tstyle=\"fill\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<RoundedRect\n\t\t\t\tx={0.5}\n\t\t\t\ty={0.5}\n\t\t\t\twidth={DEFAULT_LINK_CARD_SIZE.width - 1}\n\t\t\t\theight={DEFAULT_LINK_CARD_SIZE.height - 1}\n\t\t\t\tr={15.5}\n\t\t\t\tcolor=\"#dfe4ea\"\n\t\t\t\tstyle=\"stroke\"\n\t\t\t\tstrokeWidth={1}\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<RoundedRect\n\t\t\t\tx={14}\n\t\t\t\ty={14}\n\t\t\t\twidth={42}\n\t\t\t\theight={42}\n\t\t\t\tr={11}\n\t\t\t\tcolor=\"#315bd6\"\n\t\t\t\tstyle=\"fill\"\n\t\t\t\tantiAlias\n\t\t\t/>\n\t\t\t<SkiaText\n\t\t\t\tx={29.5}\n\t\t\t\ty={41}\n\t\t\t\ttext={display.initial}\n\t\t\t\tcolor=\"#ffffff\"\n\t\t\t\tfont={initialFont}\n\t\t\t/>\n\t\t\t<Group clip={{ x: 69, y: 13, width: 215, height: 24 }}>\n\t\t\t\t<SkiaText x={69} y={32} text={title} color=\"#1f2937\" font={titleFont} />\n\t\t\t</Group>\n\t\t\t{display.secure ? (\n\t\t\t\t<Group transform={[{ translateX: 69 }, { translateY: 41 }]}>\n\t\t\t\t\t<SkiaRect\n\t\t\t\t\t\tx={1.5}\n\t\t\t\t\t\ty={4.5}\n\t\t\t\t\t\twidth={7}\n\t\t\t\t\t\theight={6}\n\t\t\t\t\t\tcolor=\"#6b7280\"\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={1.3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Path\n\t\t\t\t\t\tpath=\"M3 4.5 V3 a2 2 0 0 1 4 0 v1.5\"\n\t\t\t\t\t\tcolor=\"#6b7280\"\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={1.3}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t/>\n\t\t\t\t</Group>\n\t\t\t) : null}\n\t\t\t<Group clip={{ x: subtitleX, y: 34, width: subtitleWidth, height: 22 }}>\n\t\t\t\t<SkiaText\n\t\t\t\t\tx={subtitleX}\n\t\t\t\t\ty={51}\n\t\t\t\t\ttext={subtitle}\n\t\t\t\t\tcolor=\"#6b7280\"\n\t\t\t\t\tfont={subtitleFont}\n\t\t\t\t/>\n\t\t\t</Group>\n\t\t</Group>\n\t);\n}\n\nexport function NativeShapeRenderer({ item }: NativeShapeRendererProps) {\n\tconst link = getLinkData(item);\n\tif (link) {\n\t\treturn <NativeLinkCardRenderer item={item} link={link} />;\n\t}\n\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 = getNativeFreehandSvgPayload({\n\t\t\titemId: item.id,\n\t\t\tpathPointsLocal: item.pathPointsLocal,\n\t\t\tstyle,\n\t\t\ttoolKind: k,\n\t\t});\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\tconst intervals = dashIntervalsFromStrokeDasharray(payload.strokeDasharray);\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\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t</Path>\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 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 { smoothFreehandPointsToPathD } from \"../scene/freehand-path\";\nimport type { StrokeStyle } from \"../scene/shape-builders\";\n\nexport type NativeStrokePreviewPoint = {\n\treadonly x: number;\n\treadonly y: number;\n};\n\nexport type NativeStrokePreviewTool = \"draw\" | \"marker\" | \"laser\";\n\nexport const NATIVE_STROKE_PREVIEW_MAX_POINTS = 160;\n\nexport function sampleNativeStrokePreviewPoints(\n\tpoints: readonly NativeStrokePreviewPoint[],\n\tmaxPoints = NATIVE_STROKE_PREVIEW_MAX_POINTS,\n): NativeStrokePreviewPoint[] {\n\tif (points.length <= maxPoints) return points.map((point) => ({ ...point }));\n\tif (maxPoints <= 1) {\n\t\tconst last = points[points.length - 1];\n\t\treturn last ? [{ ...last }] : [];\n\t}\n\tconst lastIndex = points.length - 1;\n\tconst last = points[lastIndex];\n\tif (!last) return [];\n\tconst step = lastIndex / (maxPoints - 1);\n\treturn Array.from({ length: maxPoints }, (_, index) => {\n\t\tconst point = points[Math.round(index * step)] ?? last;\n\t\treturn { x: point.x, y: point.y };\n\t});\n}\n\nexport function buildNativeStrokePreviewPath(\n\tpoints: readonly NativeStrokePreviewPoint[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst d = smoothFreehandPointsToPathD(points);\n\treturn d || null;\n}\n\nexport function nativeStrokePreviewDashArray(\n\tstyle: StrokeStyle,\n\ttool: NativeStrokePreviewTool,\n): string | undefined {\n\tif (style.strokeDash !== \"dashed\" || tool !== \"draw\") return undefined;\n\tconst dash = Math.max(style.strokeWidth * 1.8, 4);\n\tconst gap = Math.max(style.strokeWidth * 1.4, 3);\n\treturn `${dash} ${gap}`;\n}\n","import {\n\thitTestResizeHandle,\n\thitTestRotateHandle,\n\ttype ResizeHandleId,\n\tresolveResizeHandlesForItem,\n} from \"../interaction/resize-handles\";\nimport { worldToItemLocal } 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 nativeItemPlacementBounds(item: VectorSceneItem): Rect {\n\tconst bounds = normalizeRect(item.bounds);\n\treturn {\n\t\tx: item.x,\n\t\ty: item.y,\n\t\twidth: bounds.width,\n\t\theight: bounds.height,\n\t};\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 = nativeItemPlacementBounds(selectedItem);\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\tresolveResizeHandlesForItem(selectedItem),\n\t);\n\treturn handle ? { kind: \"resize\", handle } : null;\n}\n\nexport function pointInNativeSelectedItemBounds(\n\titem: VectorSceneItem,\n\tworldPoint: { readonly x: number; readonly y: number },\n): boolean {\n\tconst bounds = normalizeRect(item.bounds);\n\tconst local = worldToItemLocal(\n\t\tworldPoint.x,\n\t\tworldPoint.y,\n\t\titem.x,\n\t\titem.y,\n\t\tbounds.width,\n\t\tbounds.height,\n\t\titem.rotation ?? 0,\n\t);\n\treturn (\n\t\tlocal.x >= 0 &&\n\t\tlocal.x <= bounds.width &&\n\t\tlocal.y >= 0 &&\n\t\tlocal.y <= bounds.height\n\t);\n}\n\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 bounds = nativeItemPlacementBounds(input.item);\n\tconst pivotWorld = {\n\t\tx: bounds.x + bounds.width / 2,\n\t\ty: bounds.y + bounds.height / 2,\n\t};\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\tCanvas,\n\tDashPathEffect,\n\tGroup,\n\tLine,\n\tmatchFont,\n\tOval,\n\tPath,\n\tRect,\n\tRoundedRect,\n\tCircle as SkiaCircle,\n\tText as SkiaText,\n\tvec,\n} from \"@shopify/react-native-skia\";\nimport { type ReactNode, useMemo } from \"react\";\nimport type { Camera2D } from \"../camera/camera\";\nimport {\n\tgetHandleWorldPositionRotated,\n\tgetRotationHandleWorldPosition,\n\tresolveResizeHandlesForItem,\n} from \"../interaction/resize-handles\";\nimport { normalizeRect } from \"../math/rect\";\nimport { defaultPresenceColorForId } from \"../react/presence/peer-color\";\nimport type {\n\tRemotePresenceMarkupStroke,\n\tRemotePresencePeer,\n} from \"../react/presence/types\";\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 {\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 {\n\tbuildNativeStrokePreviewPath,\n\tnativeStrokePreviewDashArray,\n} from \"./native-stroke-preview\";\nimport { nativeItemPlacementBounds } from \"./native-vector-interactions\";\nimport {\n\tskiaCameraTransform,\n\tskiaItemRotationOrigin,\n\tskiaItemRotationTransform,\n\tskiaItemTranslationTransform,\n} from \"./skia-transform\";\n\nconst ERASER_PREVIEW_OPACITY = 0.3;\nconst OVERLAY_STROKE_PX = 1.25;\nconst MARQUEE_DASH_PX = 4;\nconst REMOTE_CURSOR_SCREEN_PX = 22;\nconst REMOTE_LABEL_SCREEN_PX = 12;\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 remotePresence?: readonly RemotePresencePeer[];\n};\n\nfunction remoteStrokePaint(\n\ttool: RemotePresenceMarkupStroke[\"tool\"],\n\tfallback: string,\n): { stroke: string; strokeOpacity: number; widthWorld: number } {\n\tif (tool === \"laser\") {\n\t\treturn { stroke: LASER_TINT, strokeOpacity: 0.92, widthWorld: 4 };\n\t}\n\tif (tool === \"marker\") {\n\t\treturn { stroke: fallback, strokeOpacity: 0.45, widthWorld: 14 };\n\t}\n\tif (tool === \"brush\") {\n\t\treturn { stroke: fallback, strokeOpacity: 0.85, widthWorld: 5 };\n\t}\n\tif (tool === \"pencil\") {\n\t\treturn { stroke: fallback, strokeOpacity: 0.9, widthWorld: 2.5 };\n\t}\n\treturn { stroke: fallback, strokeOpacity: 0.95, widthWorld: 3.5 };\n}\n\nfunction isRemoteFreehandTool(\n\ttool: RemotePresenceMarkupStroke[\"tool\"],\n): tool is \"draw\" | \"marker\" | \"pencil\" | \"brush\" {\n\treturn (\n\t\ttool === \"draw\" || tool === \"marker\" || tool === \"pencil\" || tool === \"brush\"\n\t);\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\tremotePresence = [],\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 ? nativeItemPlacementBounds(single) : 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 rotationTransform = skiaItemRotationTransform(it.rotation ?? 0);\n\t\t\t\t\tconst rotationOrigin = skiaItemRotationOrigin(it.x, it.y, cx, cy);\n\t\t\t\t\tconst translationTransform = skiaItemTranslationTransform(it.x, it.y);\n\t\t\t\t\tconst selectionRect = (\n\t\t\t\t\t\t<Group transform={translationTransform}>\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\tif (rotationTransform.length === 0) {\n\t\t\t\t\t\treturn <Group key={it.id}>{selectionRect}</Group>;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group key={it.id} transform={rotationTransform} origin={rotationOrigin}>\n\t\t\t\t\t\t\t{selectionRect}\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{resolveResizeHandlesForItem(single).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 strokeColor = colorWithOpacity(\n\t\t\t\tstyle.stroke,\n\t\t\t\tisLaser ? 0.85 : style.strokeOpacity,\n\t\t\t);\n\t\t\tif (p.points.length === 1) {\n\t\t\t\tconst point = p.points[0];\n\t\t\t\tif (!point) return null;\n\t\t\t\treturn (\n\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\tcx={point.x}\n\t\t\t\t\t\tcy={point.y}\n\t\t\t\t\t\tr={Math.max(0.5, style.strokeWidth / 2)}\n\t\t\t\t\t\tcolor={strokeColor}\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\tconst path = buildNativeStrokePreviewPath(p.points);\n\t\t\tif (!path) return null;\n\t\t\tconst strokeDasharray = nativeStrokePreviewDashArray(style, p.tool);\n\t\t\tconst intervals = dashIntervalsFromStrokeDasharray(strokeDasharray);\n\t\t\treturn (\n\t\t\t\t<Path\n\t\t\t\t\tpath={path}\n\t\t\t\t\tcolor={strokeColor}\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\t\t{intervals ? <DashPathEffect intervals={intervals} /> : null}\n\t\t\t\t</Path>\n\t\t\t);\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 rotationTransform = skiaItemRotationTransform(it.rotation ?? 0);\n\t\t\t\t\tconst rotationOrigin = skiaItemRotationOrigin(it.x, it.y, cx, cy);\n\t\t\t\t\tconst translationTransform = skiaItemTranslationTransform(it.x, it.y);\n\t\t\t\t\tconst preview = (\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={translationTransform}\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\tif (rotationTransform.length === 0) return preview;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group\n\t\t\t\t\t\t\tkey={`erase-rot-${it.id}`}\n\t\t\t\t\t\t\ttransform={rotationTransform}\n\t\t\t\t\t\t\torigin={rotationOrigin}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{preview}\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\tconst remotePresenceElements = useMemo(() => {\n\t\tif (remotePresence.length === 0) return null;\n\t\tconst labelFont = matchFont({ fontSize: REMOTE_LABEL_SCREEN_PX / z });\n\t\tconst cursorSize = REMOTE_CURSOR_SCREEN_PX / z;\n\t\tconst labelOffsetX = 14 / z;\n\t\tconst labelOffsetY = 18 / z;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{remotePresence.map((peer) => {\n\t\t\t\t\tconst color = peer.color ?? defaultPresenceColorForId(peer.id);\n\t\t\t\t\tconst markup = peer.markupStroke;\n\t\t\t\t\tconst cursor = peer.cursor;\n\t\t\t\t\tconst camera = peer.camera;\n\t\t\t\t\tlet strokeElement: ReactNode = null;\n\t\t\t\t\tif (markup && markup.points.length > 0) {\n\t\t\t\t\t\tconst fallbackPaint = remoteStrokePaint(markup.tool, color);\n\t\t\t\t\t\tconst paint = {\n\t\t\t\t\t\t\tstroke: markup.stroke ?? fallbackPaint.stroke,\n\t\t\t\t\t\t\tstrokeOpacity: markup.strokeOpacity ?? fallbackPaint.strokeOpacity,\n\t\t\t\t\t\t\twidthWorld: markup.strokeWidth ?? fallbackPaint.widthWorld,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (markup.tool === \"laser\") {\n\t\t\t\t\t\t\tconst d =\n\t\t\t\t\t\t\t\tmarkup.points.length >= 2\n\t\t\t\t\t\t\t\t\t? smoothFreehandPointsToPathD([...markup.points])\n\t\t\t\t\t\t\t\t\t: null;\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\t\tpath={d}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(paint.stroke, paint.strokeOpacity)}\n\t\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={Math.max(paint.widthWorld, OVERLAY_STROKE_PX) / z}\n\t\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\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);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!strokeElement && isRemoteFreehandTool(markup.tool)) {\n\t\t\t\t\t\t\tconst payload = computeFreehandSvgPayload(\n\t\t\t\t\t\t\t\tmarkup.points.map((point) => ({ x: point.x, y: point.y })),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tstroke: paint.stroke,\n\t\t\t\t\t\t\t\t\tstrokeWidth: paint.widthWorld,\n\t\t\t\t\t\t\t\t\tstrokeOpacity: paint.strokeOpacity,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmarkup.tool,\n\t\t\t\t\t\t\t\tmarkup.points.length === 2,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (payload?.kind === \"circle\") {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<SkiaCircle\n\t\t\t\t\t\t\t\t\t\tcx={payload.cx}\n\t\t\t\t\t\t\t\t\t\tcy={payload.cy}\n\t\t\t\t\t\t\t\t\t\tr={payload.r}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\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);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (payload?.kind === \"fillPath\") {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(payload.fill, payload.fillOpacity)}\n\t\t\t\t\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\t\t\t\t\tfillType=\"winding\"\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);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (payload?.kind === \"strokePath\") {\n\t\t\t\t\t\t\t\tstrokeElement = (\n\t\t\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\t\t\tpath={payload.d}\n\t\t\t\t\t\t\t\t\t\tcolor={colorWithOpacity(payload.stroke, payload.strokeOpacity)}\n\t\t\t\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={payload.strokeWidth}\n\t\t\t\t\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstrokeJoin=\"round\"\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);\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\tconst cameraElement = camera ? (\n\t\t\t\t\t\t<Rect\n\t\t\t\t\t\t\tx={-camera.x / camera.zoom}\n\t\t\t\t\t\t\ty={-camera.y / camera.zoom}\n\t\t\t\t\t\t\twidth={camera.viewportWidth / camera.zoom}\n\t\t\t\t\t\t\theight={camera.viewportHeight / camera.zoom}\n\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\t\tstrokeWidth={overlayStrokeWorld}\n\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DashPathEffect intervals={[marqueeDashWorld, marqueeDashWorld]} />\n\t\t\t\t\t\t</Rect>\n\t\t\t\t\t) : null;\n\t\t\t\t\tconst cursorElement = cursor ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Path\n\t\t\t\t\t\t\t\tpath={`M ${cursor.x} ${cursor.y} L ${cursor.x + cursorSize} ${cursor.y + cursorSize * 0.34} L ${cursor.x + cursorSize * 0.42} ${cursor.y + cursorSize * 0.44} L ${cursor.x + cursorSize * 0.58} ${cursor.y + cursorSize} Z`}\n\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\tstyle=\"fill\"\n\t\t\t\t\t\t\t\tantiAlias\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{peer.displayName ? (\n\t\t\t\t\t\t\t\t<SkiaText\n\t\t\t\t\t\t\t\t\tx={cursor.x + labelOffsetX}\n\t\t\t\t\t\t\t\t\ty={cursor.y + labelOffsetY}\n\t\t\t\t\t\t\t\t\ttext={peer.displayName}\n\t\t\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\t\t\tfont={labelFont}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Group key={peer.clientId ?? peer.id}>\n\t\t\t\t\t\t\t{cameraElement}\n\t\t\t\t\t\t\t{strokeElement}\n\t\t\t\t\t\t\t{cursorElement}\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}, [remotePresence, z, overlayStrokeWorld, marqueeDashWorld]);\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{remotePresenceElements}\n\t\t\t\t{selectionElements}\n\t\t\t</Group>\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 {\n\tskiaCameraTransform,\n\tskiaItemRotationOrigin,\n\tskiaItemRotationTransform,\n\tskiaItemTranslationTransform,\n} 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 rotationTransform = skiaItemRotationTransform(item.rotation ?? 0);\n\tconst rotationOrigin = skiaItemRotationOrigin(item.x, item.y, cx, cy);\n\tconst translationTransform = skiaItemTranslationTransform(item.x, item.y);\n\n\tconst shape = (\n\t\t<Group transform={translationTransform}>\n\t\t\t<NativeShapeRenderer item={item} />\n\t\t</Group>\n\t);\n\n\tif (rotationTransform.length === 0) return shape;\n\n\treturn (\n\t\t<Group transform={rotationTransform} origin={rotationOrigin}>\n\t\t\t{shape}\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 { Canvas, Group, Path } from \"@shopify/react-native-skia\";\nimport { 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\t\"link\",\n] as const;\n\nconst CLOUD_TOOL_ICON_PATH =\n\t\"M17.5 19H8.5a6.5 6.5 0 1 1 6.17-8.55A4.75 4.75 0 0 1 17.5 9.5a4.75 4.75 0 0 1 0 9.5Z\";\nconst LINK_TOOL_ICON_PATHS = [\n\t\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\",\n\t\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\",\n] as const;\n\nfunction NativeCloudToolIcon({\n\tcolor,\n\tsize = 19,\n\tstrokeWidth = 2,\n}: {\n\treadonly color: string;\n\treadonly size?: number;\n\treadonly strokeWidth?: number;\n}) {\n\tconst scale = size / 24;\n\treturn (\n\t\t<Canvas style={{ width: size, height: size }}>\n\t\t\t<Group transform={[{ scale }]}>\n\t\t\t\t<Path\n\t\t\t\t\tpath={CLOUD_TOOL_ICON_PATH}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t/>\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\n\nfunction NativeLinkToolIcon({\n\tcolor,\n\tsize = 20,\n\tstrokeWidth = 2.4,\n}: {\n\treadonly color: string;\n\treadonly size?: number;\n\treadonly strokeWidth?: number;\n}) {\n\tconst scale = size / 24;\n\treturn (\n\t\t<Canvas style={{ width: size, height: size }}>\n\t\t\t<Group transform={[{ scale }]}>\n\t\t\t\t{LINK_TOOL_ICON_PATHS.map((path) => (\n\t\t\t\t\t<Path\n\t\t\t\t\t\tkey={path}\n\t\t\t\t\t\tpath={path}\n\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\tstyle=\"stroke\"\n\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\tstrokeCap=\"round\"\n\t\t\t\t\t\tstrokeJoin=\"round\"\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</Group>\n\t\t</Canvas>\n\t);\n}\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\t{ id: \"link\", label: \"Link\", shortcutHint: \"N\", shortLabel: \"L\" },\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\tif (tool.id === \"architectural-cloud\") {\n\t\treturn <NativeCloudToolIcon color={foregroundColor} />;\n\t}\n\tif (tool.id === \"link\") {\n\t\treturn <NativeLinkToolIcon color={foregroundColor} />;\n\t}\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\tgetLinkData,\n\tLINK_CARD_ASPECT,\n\tLINK_CARD_MAX_SCALE,\n\tLINK_CARD_MIN_SCALE,\n} from \"../scene/link-item\";\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\titemAllowsResizeHandle,\n\ttype ResizeHandleId,\n} from \"./resize-handles\";\n\nconst LINK_CORNER_HANDLES = new Set<ResizeHandleId>([\"nw\", \"ne\", \"se\", \"sw\"]);\n\nconst clamp = (value: number, min: number, max: number): number =>\n\tMath.min(max, Math.max(min, value));\n\nconst clampLinkResizeBounds = (\n\tstartBounds: Rect,\n\tnextBounds: Rect,\n\thandle: ResizeHandleId,\n\tintrinsicWidth: number,\n): Rect => {\n\tconst next = normalizeRect(nextBounds);\n\tconst scale = clamp(\n\t\tnext.width / Math.max(1e-9, intrinsicWidth),\n\t\tLINK_CARD_MIN_SCALE,\n\t\tLINK_CARD_MAX_SCALE,\n\t);\n\tconst width = intrinsicWidth * scale;\n\tconst height = width / LINK_CARD_ASPECT;\n\tconst start = normalizeRect(startBounds);\n\tconst x0 = start.x;\n\tconst y0 = start.y;\n\tconst x1 = start.x + start.width;\n\tconst y1 = start.y + start.height;\n\tswitch (handle) {\n\t\tcase \"nw\":\n\t\t\treturn { x: x1 - width, y: y1 - height, width, height };\n\t\tcase \"ne\":\n\t\t\treturn { x: x0, y: y1 - height, width, height };\n\t\tcase \"sw\":\n\t\t\treturn { x: x1 - width, y: y0, width, height };\n\t\tdefault:\n\t\t\treturn { x: x0, y: y0, width, height };\n\t}\n};\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\tconst link = getLinkData(item);\n\tif (link && item.customIntrinsicSize) {\n\t\tif (!LINK_CORNER_HANDLES.has(handle)) return sb;\n\t\tconst intrinsicWidth = Math.max(1e-9, item.customIntrinsicSize.width);\n\t\tif (Math.abs(rot) < 1e-12) {\n\t\t\tconst next = computeResizeBoundsFixedAspect(\n\t\t\t\tsb,\n\t\t\t\thandle,\n\t\t\t\tcurrentWorld,\n\t\t\t\tLINK_CARD_ASPECT,\n\t\t\t);\n\t\t\treturn clampLinkResizeBounds(sb, next, handle, intrinsicWidth);\n\t\t}\n\t\tconst local = worldToItemLocal(\n\t\t\tcurrentWorld.x,\n\t\t\tcurrentWorld.y,\n\t\t\tsb.x,\n\t\t\tsb.y,\n\t\t\tsb.width,\n\t\t\tsb.height,\n\t\t\trot,\n\t\t);\n\t\tconst localBounds = { x: 0, y: 0, width: sb.width, height: sb.height };\n\t\tconst nextLocal = computeResizeBoundsFixedAspect(\n\t\t\tlocalBounds,\n\t\t\thandle,\n\t\t\tlocal,\n\t\t\tLINK_CARD_ASPECT,\n\t\t);\n\t\tconst clamped = clampLinkResizeBounds(\n\t\t\tlocalBounds,\n\t\t\tnextLocal,\n\t\t\thandle,\n\t\t\tintrinsicWidth,\n\t\t);\n\t\treturn {\n\t\t\tx: sb.x + clamped.x,\n\t\t\ty: sb.y + clamped.y,\n\t\t\twidth: clamped.width,\n\t\t\theight: clamped.height,\n\t\t};\n\t}\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\tif (!itemAllowsResizeHandle(item, handle)) {\n\t\treturn item;\n\t}\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","import type { Camera2D } from \"../camera/camera\";\nimport type { RemotePresencePeer } from \"../react/presence/types\";\n\nexport type NativeRemotePresenceHitTarget = \"cursor\" | \"label\";\n\nexport type NativeRemotePresenceHit = {\n\treadonly peer: RemotePresencePeer;\n\treadonly followId: string;\n\treadonly target: NativeRemotePresenceHitTarget;\n\treadonly screenX: number;\n\treadonly screenY: number;\n\treadonly worldX: number;\n\treadonly worldY: number;\n\treadonly clientId?: string;\n\treadonly peerId?: string;\n};\n\nconst REMOTE_CURSOR_SCREEN_PX = 22;\nconst REMOTE_LABEL_SCREEN_PX = 12;\nconst REMOTE_LABEL_OFFSET_X = 14;\nconst REMOTE_LABEL_BASELINE_OFFSET_Y = 18;\nconst REMOTE_LABEL_AVERAGE_CHAR_PX = 7;\nconst REMOTE_LABEL_MAX_WIDTH_PX = 180;\nconst REMOTE_LABEL_MIN_HIT_WIDTH_PX = 44;\nconst REMOTE_LABEL_HIT_PADDING_X = 10;\nconst REMOTE_LABEL_HIT_PADDING_Y = 10;\nconst REMOTE_CURSOR_MIN_HIT_SIZE_PX = 36;\n\ntype ScreenPoint = {\n\treadonly x: number;\n\treadonly y: number;\n};\n\ntype ScreenRect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\nfunction pointInScreenRect(point: ScreenPoint, rect: ScreenRect): boolean {\n\treturn (\n\t\tpoint.x >= rect.x &&\n\t\tpoint.x <= rect.x + rect.width &&\n\t\tpoint.y >= rect.y &&\n\t\tpoint.y <= rect.y + rect.height\n\t);\n}\n\nfunction displayLabelForPeer(peer: RemotePresencePeer): string | null {\n\tconst displayName = peer.displayName?.trim();\n\tif (displayName) return displayName;\n\treturn null;\n}\n\nfunction followIdForPeer(peer: RemotePresencePeer): string {\n\treturn peer.clientId ?? peer.peerId ?? peer.id;\n}\n\nfunction estimateLabelWidth(label: string): number {\n\treturn Math.max(\n\t\tREMOTE_LABEL_MIN_HIT_WIDTH_PX,\n\t\tMath.min(REMOTE_LABEL_MAX_WIDTH_PX, label.length * REMOTE_LABEL_AVERAGE_CHAR_PX),\n\t);\n}\n\nfunction buildHit(\n\tpeer: RemotePresencePeer,\n\tcamera: Camera2D,\n\tpoint: ScreenPoint,\n\ttarget: NativeRemotePresenceHitTarget,\n): NativeRemotePresenceHit {\n\tconst world = camera.screenToWorld(point.x, point.y);\n\treturn {\n\t\tpeer,\n\t\tfollowId: followIdForPeer(peer),\n\t\ttarget,\n\t\tscreenX: point.x,\n\t\tscreenY: point.y,\n\t\tworldX: world.worldX,\n\t\tworldY: world.worldY,\n\t\t...(peer.clientId ? { clientId: peer.clientId } : {}),\n\t\t...(peer.peerId ? { peerId: peer.peerId } : {}),\n\t};\n}\n\n/**\n * Hit-tests native Skia remote presence labels/cursors in screen coordinates.\n *\n * Use the returned `followId` with `useRealtimePeerFollow`'s `followedPeerId`\n * state. The id intentionally follows the session peer id shape: client id when\n * present, then stable peer id, then the rendered presence id.\n */\nexport function hitTestNativeRemotePresence(\n\tpeers: readonly RemotePresencePeer[],\n\tcamera: Camera2D,\n\tpoint: ScreenPoint,\n): NativeRemotePresenceHit | null {\n\tfor (let index = peers.length - 1; index >= 0; index -= 1) {\n\t\tconst peer = peers[index];\n\t\tif (!peer || peer.isSelf || !peer.cursor) continue;\n\n\t\tconst cursorScreen = camera.worldToScreen(peer.cursor.x, peer.cursor.y);\n\t\tconst label = displayLabelForPeer(peer);\n\t\tif (label) {\n\t\t\tconst labelX = cursorScreen.screenX + REMOTE_LABEL_OFFSET_X;\n\t\t\tconst labelBaselineY = cursorScreen.screenY + REMOTE_LABEL_BASELINE_OFFSET_Y;\n\t\t\tconst labelRect: ScreenRect = {\n\t\t\t\tx: labelX - REMOTE_LABEL_HIT_PADDING_X,\n\t\t\t\ty: labelBaselineY - REMOTE_LABEL_SCREEN_PX - REMOTE_LABEL_HIT_PADDING_Y,\n\t\t\t\twidth: estimateLabelWidth(label) + REMOTE_LABEL_HIT_PADDING_X * 2,\n\t\t\t\theight: REMOTE_LABEL_SCREEN_PX + REMOTE_LABEL_HIT_PADDING_Y * 2,\n\t\t\t};\n\t\t\tif (pointInScreenRect(point, labelRect)) {\n\t\t\t\treturn buildHit(peer, camera, point, \"label\");\n\t\t\t}\n\t\t}\n\n\t\tconst cursorHitSize = Math.max(\n\t\t\tREMOTE_CURSOR_MIN_HIT_SIZE_PX,\n\t\t\tREMOTE_CURSOR_SCREEN_PX,\n\t\t);\n\t\tconst cursorRect: ScreenRect = {\n\t\t\tx: cursorScreen.screenX - (cursorHitSize - REMOTE_CURSOR_SCREEN_PX) / 2,\n\t\t\ty: cursorScreen.screenY - (cursorHitSize - REMOTE_CURSOR_SCREEN_PX) / 2,\n\t\t\twidth: cursorHitSize,\n\t\t\theight: cursorHitSize,\n\t\t};\n\t\tif (pointInScreenRect(point, cursorRect)) {\n\t\t\treturn buildHit(peer, camera, point, \"cursor\");\n\t\t}\n\t}\n\n\treturn null;\n}\n","import type { VectorSceneItem } from \"../scene/types\";\n\ntype MoveNativeTransientItemsInput = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly snapshots: Readonly<Record<string, VectorSceneItem>>;\n\treadonly dx: number;\n\treadonly dy: number;\n};\n\ntype ReplaceNativeTransientItemInput = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly itemId: string;\n\treadonly item: VectorSceneItem;\n};\n\nexport function moveNativeTransientItems({\n\titems,\n\tsnapshots,\n\tdx,\n\tdy,\n}: MoveNativeTransientItemsInput): VectorSceneItem[] {\n\treturn items.map((item) => {\n\t\tconst snapshot = snapshots[item.id];\n\t\tif (!snapshot) return item;\n\t\treturn {\n\t\t\t...snapshot,\n\t\t\tx: snapshot.x + dx,\n\t\t\ty: snapshot.y + dy,\n\t\t\tbounds: {\n\t\t\t\t...snapshot.bounds,\n\t\t\t\tx: snapshot.bounds.x + dx,\n\t\t\t\ty: snapshot.bounds.y + dy,\n\t\t\t},\n\t\t};\n\t});\n}\n\nexport function replaceNativeTransientItem({\n\titems,\n\titemId,\n\titem: replacement,\n}: ReplaceNativeTransientItemInput): VectorSceneItem[] {\n\treturn items.map((item) => (item.id === itemId ? replacement : item));\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\tModal,\n\tPanResponder,\n\ttype PointerEvent,\n\tPressable,\n\tStyleSheet,\n\tText,\n\tTextInput,\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 type { RemotePresencePeer } from \"../react/presence/types\";\nimport { type CanvuLinkData, createLinkItem } from \"../scene/link-item\";\nimport {\n\tapplyStrokeToItem,\n\tcreateArchitecturalCloudItem,\n\tcreateEllipseItem,\n\tcreateFreehandStrokeItem,\n\tcreateLineItem,\n\tcreateRectangleItem,\n\tcreateShapeId,\n\tcreateTextItem,\n\tDEFAULT_STROKE_STYLE,\n\tlineEndpointsToLocal,\n\tresolveStrokeStyle,\n\ttype StrokeStyle,\n} from \"../scene/shape-builders\";\nimport {\n\tDEFAULT_TEXT_TOOL_FONT_SIZE,\n\ttextBaselineYFor,\n\ttextLineHeightFor,\n} from \"../scene/text-svg\";\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\tcreateNativeLinkCardBoundsAtPoint,\n\tnormalizeNativeLinkHref,\n} from \"./native-link-card\";\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\thitTestNativeRemotePresence,\n\ttype NativeRemotePresenceHit,\n} from \"./native-remote-presence-hit-test\";\nimport { sampleNativeStrokePreviewPoints } from \"./native-stroke-preview\";\nimport {\n\tmoveNativeTransientItems,\n\treplaceNativeTransientItem,\n} from \"./native-transient-items\";\nimport {\n\thitTestNativeSelectionHandle,\n\ttype NativeCustomShapePlacementOptions,\n\tnativeItemPlacementBounds,\n\tnativeRotationDragStart,\n\tpointInNativeSelectedItemBounds,\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\n/**\n * Detail emitted when a native pointer/touch begins on a remote realtime\n * participant label or cursor.\n *\n * Pass `followId` into your `followedPeerId` state for\n * `useRealtimePeerFollow(...)`. For realtime-session peers this is the\n * connection `clientId`, matching the session peer `id`.\n */\nexport type NativeRemotePresencePressDetail = NativeRemotePresenceHit;\n\n/**\n * Optional override for a link item inserted from the native link tool.\n *\n * Use this when your app has already reserved an item id or wants to place the\n * link card at a custom box. Most apps can omit it and use the default card\n * centered on the tapped world point.\n */\nexport type NativeLinkToolInsertOptions = {\n\treadonly id?: string;\n\treadonly bounds?: Rect;\n};\n\n/**\n * Copy used by the built-in native link dialog.\n *\n * Pass this only when you need localized or product-specific text. Omit it for\n * the default plug-and-play `\"link\"` tool flow.\n */\nexport type NativeLinkToolDialogLabels = {\n\treadonly title?: string;\n\treadonly description?: string;\n\treadonly inputPlaceholder?: string;\n\treadonly cancelLabel?: string;\n\treadonly addLabel?: string;\n};\n\n/**\n * Detail passed when the built-in native `\"link\"` tool receives a tap.\n *\n * The default flow shows canvu's built-in URL dialog and inserts the card after\n * submit. Use this detail only when overriding that dialog through\n * `onLinkToolRequest`.\n *\n * @example\n * ```tsx\n * <NativeVectorViewport\n * toolId={toolId}\n * onLinkToolRequest={(detail) => {\n * openLinkDialog({\n * onSubmit: (href) => detail.insertLink({ href }),\n * });\n * }}\n * />\n * ```\n */\nexport type NativeLinkToolRequestDetail = {\n\treadonly toolId: \"link\";\n\treadonly worldX: number;\n\treadonly worldY: number;\n\treadonly screenX: number;\n\treadonly screenY: number;\n\treadonly suggestedBounds: Rect;\n\treadonly insertLink: (\n\t\tlink: CanvuLinkData,\n\t\toptions?: NativeLinkToolInsertOptions,\n\t) => VectorSceneItem | null;\n};\n\nexport type NativeVectorViewportProps = {\n\treadonly items: readonly VectorSceneItem[];\n\treadonly selectedIds?: readonly string[];\n\treadonly remotePresence?: readonly RemotePresencePeer[];\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\t/**\n\t * Optional override for the built-in native link dialog.\n\t *\n\t * Omit this for the plug-and-play first-party link tool. When supplied,\n\t * canvu will not show its default dialog; your app is responsible for\n\t * calling `detail.insertLink(...)`.\n\t */\n\treadonly onLinkToolRequest?: (detail: NativeLinkToolRequestDetail) => void;\n\treadonly linkToolDialogLabels?: NativeLinkToolDialogLabels;\n\treadonly onWorldPointerDown?: (detail: NativeWorldPointerDownDetail) => void;\n\treadonly onRemotePresencePress?: (detail: NativeRemotePresencePressDetail) => void;\n\treadonly onWorldPointerMove?: (world: {\n\t\treadonly x: number;\n\t\treadonly y: number;\n\t}) => void;\n\treadonly onWorldPointerLeave?: () => void;\n\treadonly onPlacementPreviewChange?: (preview: PlacementPreview | null) => void;\n\treadonly onCameraChange?: () => void;\n\treadonly customPlacement?: NativeCustomShapePlacementOptions;\n\treadonly customPlacements?: readonly NativeCustomShapePlacementOptions[];\n\treadonly overlay?: React.ReactNode;\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: \"link\" | \"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 };\ntype NativeSelectedStyleInspectorState = {\n\treadonly toolId: NativeVectorStyleToolId;\n\treadonly value: StrokeStyle;\n};\n\nconst DEFAULT_NATIVE_LINK_TOOL_DIALOG_LABELS: Required<NativeLinkToolDialogLabels> =\n\t{\n\t\ttitle: \"Add link\",\n\t\tdescription: \"Paste the link you want to add to the board.\",\n\t\tinputPlaceholder: \"https://example.com\",\n\t\tcancelLabel: \"Cancel\",\n\t\taddLabel: \"Add\",\n\t};\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};\nconst NATIVE_VIEWPORT_OVERLAY_Z_INDEX = 40;\nconst NATIVE_VIEWPORT_OVERLAY_ELEVATION = 40;\nconst NATIVE_VIEWPORT_EXTERNAL_OVERLAY_Z_INDEX = 20;\nconst NATIVE_VIEWPORT_EXTERNAL_OVERLAY_ELEVATION = 20;\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 getNativeStyleInspectorToolId(\n\titem: VectorSceneItem,\n): NativeVectorStyleToolId | null {\n\tconst kind = item.toolKind;\n\tif (kind === \"marker\") return \"marker\";\n\tif (\n\t\tkind === \"draw\" ||\n\t\tkind === \"pencil\" ||\n\t\tkind === \"brush\" ||\n\t\tkind === \"rect\" ||\n\t\tkind === \"ellipse\" ||\n\t\tkind === \"architectural-cloud\" ||\n\t\tkind === \"line\" ||\n\t\tkind === \"arrow\"\n\t) {\n\t\treturn \"draw\";\n\t}\n\treturn null;\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\tremotePresence = [],\n\t\ttoolId = \"hand\",\n\t\ttoolLocked = false,\n\t\tinteractive = false,\n\t\tonSelectionChange,\n\t\tonItemsChange,\n\t\tonToolChangeRequest,\n\t\tonLinkToolRequest,\n\t\tlinkToolDialogLabels,\n\t\tonWorldPointerDown,\n\t\tonRemotePresencePress,\n\t\tonWorldPointerMove,\n\t\tonWorldPointerLeave,\n\t\tonPlacementPreviewChange,\n\t\tonCameraChange,\n\t\tcustomPlacement,\n\t\tcustomPlacements = [],\n\t\toverlay,\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 onLinkToolRequestRef = useRef(onLinkToolRequest);\n\tonLinkToolRequestRef.current = onLinkToolRequest;\n\tconst onWorldPointerDownRef = useRef(onWorldPointerDown);\n\tonWorldPointerDownRef.current = onWorldPointerDown;\n\tconst onRemotePresencePressRef = useRef(onRemotePresencePress);\n\tonRemotePresencePressRef.current = onRemotePresencePress;\n\tconst onWorldPointerMoveRef = useRef(onWorldPointerMove);\n\tonWorldPointerMoveRef.current = onWorldPointerMove;\n\tconst onWorldPointerLeaveRef = useRef(onWorldPointerLeave);\n\tonWorldPointerLeaveRef.current = onWorldPointerLeave;\n\tconst onPlacementPreviewChangeRef = useRef(onPlacementPreviewChange);\n\tonPlacementPreviewChangeRef.current = onPlacementPreviewChange;\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 onSelectionChangeRef = useRef(onSelectionChange);\n\tonSelectionChangeRef.current = onSelectionChange;\n\tconst [transientItems, setTransientItems] = useState<VectorSceneItem[] | null>(\n\t\tnull,\n\t);\n\tconst transientItemsRef = useRef<VectorSceneItem[] | null>(null);\n\tconst activeItems = transientItems ?? items;\n\tconst itemsRef = useRef(activeItems);\n\titemsRef.current = activeItems;\n\tconst selectedIdsRef = useRef(selectedIds);\n\tselectedIdsRef.current = selectedIds;\n\tconst remotePresenceRef = useRef(remotePresence);\n\tremotePresenceRef.current = remotePresence;\n\n\tconst dragStateRef = useRef<DragState>({ kind: \"idle\" });\n\n\tuseEffect(() => {\n\t\tconst committedItems = items;\n\t\tif (transientItemsRef.current === null && itemsRef.current === committedItems) {\n\t\t\treturn;\n\t\t}\n\t\ttransientItemsRef.current = null;\n\t\tsetTransientItems(null);\n\t}, [items]);\n\n\tconst setTransientItemsPreview = useCallback((nextItems: VectorSceneItem[]) => {\n\t\ttransientItemsRef.current = nextItems;\n\t\tsetTransientItems(nextItems);\n\t}, []);\n\n\tconst clearTransientItemsPreview = useCallback(() => {\n\t\ttransientItemsRef.current = null;\n\t\tsetTransientItems(null);\n\t}, []);\n\n\tconst commitTransientItemsPreview = useCallback(() => {\n\t\tconst nextItems = transientItemsRef.current;\n\t\tconst change = onItemsChangeRef.current;\n\t\tif (!nextItems || !change) return false;\n\t\tchange(nextItems);\n\t\treturn true;\n\t}, []);\n\n\tconst [placementPreview, setPlacementPreviewState] =\n\t\tuseState<PlacementPreview | null>(null);\n\tconst setRealtimePlacementPreview = useCallback(\n\t\t(nextPreview: PlacementPreview | null) => {\n\t\t\tsetPlacementPreviewState(nextPreview);\n\t\t\tonPlacementPreviewChangeRef.current?.(nextPreview);\n\t\t},\n\t\t[],\n\t);\n\tconst [eraserTrail, setEraserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [laserTrail, setLaserTrail] = useState<TimedTrailPoint[]>([]);\n\tconst [pendingNativeLinkRequest, setPendingNativeLinkRequest] =\n\t\tuseState<NativeLinkToolRequestDetail | null>(null);\n\tconst [nativeLinkInputValue, setNativeLinkInputValue] = useState(\"\");\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\tconst requestSelectToolAfterNativeLinkUse = useCallback(() => {\n\t\tonToolChangeRequestRef.current?.(\"select\");\n\t}, []);\n\tconst closeNativeLinkDialog = useCallback(() => {\n\t\tsetPendingNativeLinkRequest(null);\n\t\tsetNativeLinkInputValue(\"\");\n\t}, []);\n\tconst submitNativeLinkDialog = useCallback(() => {\n\t\tconst href = normalizeNativeLinkHref(nativeLinkInputValue);\n\t\tif (!href || !pendingNativeLinkRequest) return;\n\t\tconst inserted = pendingNativeLinkRequest.insertLink({ href });\n\t\tif (inserted) {\n\t\t\tcloseNativeLinkDialog();\n\t\t}\n\t}, [closeNativeLinkDialog, nativeLinkInputValue, pendingNativeLinkRequest]);\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 notifyWorldPointerMove = useCallback(\n\t\t(point: ScreenPoint) => {\n\t\t\tconst { worldX, worldY } = screenToWorld(point.x, point.y);\n\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\n\t\t},\n\t\t[screenToWorld],\n\t);\n\n\tconst notifyWorldPointerLeave = useCallback(() => {\n\t\tonWorldPointerLeaveRef.current?.();\n\t}, []);\n\n\tconst requestRender = useCallback(() => {\n\t\tsetCameraTick((n) => n + 1);\n\t\tonCameraChangeRef.current?.();\n\t}, []);\n\n\tconst onLayout = useCallback((e: LayoutChangeEvent) => {\n\t\tconst { width, height } = e.nativeEvent.layout;\n\t\tsetSize({ width, height });\n\t}, []);\n\n\tconst updateToolCursorPoint = useCallback((_point: ScreenPoint) => {}, []);\n\tconst hideToolCursor = useCallback(() => {}, []);\n\n\tconst selectedItems = useMemo(\n\t\t() => activeItems.filter((item) => selectedIds.includes(item.id)),\n\t\t[activeItems, selectedIds],\n\t);\n\tconst selectedStyleInspectorState =\n\t\tuseMemo<NativeSelectedStyleInspectorState | null>(() => {\n\t\t\tconst styleableItems = selectedItems.filter(\n\t\t\t\t(item) => !item.locked && getNativeStyleInspectorToolId(item) !== null,\n\t\t\t);\n\t\t\tif (styleableItems.length === 0) return null;\n\t\t\tconst toolId = styleableItems.every((item) => item.toolKind === \"marker\")\n\t\t\t\t? \"marker\"\n\t\t\t\t: \"draw\";\n\t\t\tconst primaryItem =\n\t\t\t\ttoolId === \"marker\"\n\t\t\t\t\t? styleableItems[0]\n\t\t\t\t\t: (styleableItems.find((item) => item.toolKind !== \"marker\") ??\n\t\t\t\t\t\tstyleableItems[0]);\n\t\t\tif (!primaryItem) return null;\n\t\t\treturn {\n\t\t\t\ttoolId,\n\t\t\t\tvalue: resolveStrokeStyle(primaryItem),\n\t\t\t};\n\t\t}, [selectedItems]);\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 activeItems;\n\t\tconst hidden = new Set(eraserPreviewIds);\n\t\treturn activeItems.filter((item) => !hidden.has(item.id));\n\t}, [activeItems, 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\tconst patchSelectedItemsStrokeStyle = useCallback(\n\t\t(patch: Partial<StrokeStyle>) => {\n\t\t\tconst change = onItemsChangeRef.current;\n\t\t\tif (!change) return;\n\t\t\tconst selectedIdSet = new Set(selectedIdsRef.current);\n\t\t\tif (selectedIdSet.size === 0) return;\n\t\t\tlet changed = false;\n\t\t\tconst nextItems = itemsRef.current.map((item) => {\n\t\t\t\tif (\n\t\t\t\t\t!selectedIdSet.has(item.id) ||\n\t\t\t\t\titem.locked ||\n\t\t\t\t\tgetNativeStyleInspectorToolId(item) === null\n\t\t\t\t) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t\tchanged = true;\n\t\t\t\treturn applyStrokeToItem(item, patch);\n\t\t\t});\n\t\t\tif (!changed) return;\n\t\t\tchange(nextItems);\n\t\t\tpatchCurrentStrokeStyle(patch);\n\t\t},\n\t\t[patchCurrentStrokeStyle],\n\t);\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\tconst cam = cameraRef.current;\n\t\t\tif (!cam) return;\n\n\t\t\tconst remotePresenceHit =\n\t\t\t\tinteractive && onRemotePresencePressRef.current\n\t\t\t\t\t? hitTestNativeRemotePresence(remotePresenceRef.current, cam, point)\n\t\t\t\t\t: null;\n\t\t\tif (remotePresenceHit) {\n\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\tonRemotePresencePressRef.current?.(remotePresenceHit);\n\t\t\t\treturn;\n\t\t\t}\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 { worldX, worldY } = screenToWorld(sx, sy);\n\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\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: nativeItemPlacementBounds(selectedItem),\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\tconst selectedUnlockedItems = currentSelectedIds\n\t\t\t\t\t\t.map((id) => itemsRef.current.find((item) => item.id === id))\n\t\t\t\t\t\t.filter((item): item is VectorSceneItem => !!item && !item.locked);\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectedUnlockedItems.some((item) =>\n\t\t\t\t\t\t\tpointInNativeSelectedItemBounds(item, { x: worldX, y: worldY }),\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst snapshots: Record<string, VectorSceneItem> = {};\n\t\t\t\t\t\tfor (const item of selectedUnlockedItems) {\n\t\t\t\t\t\t\tsnapshots[item.id] = item;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst ids = Object.keys(snapshots);\n\t\t\t\t\t\tif (ids.length > 0) {\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\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\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\tsetRealtimePlacementPreview({\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\tsetRealtimePlacementPreview({\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\tsetRealtimePlacementPreview(\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\tsetRealtimePlacementPreview({\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 === \"link\" || 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[\n\t\t\tinteractive,\n\t\t\trequestSelectToolAfterUse,\n\t\t\tscreenToWorld,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tupdateToolCursorPoint,\n\t\t],\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\t\t\tonWorldPointerMoveRef.current?.({ x: worldX, y: worldY });\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\tsetRealtimePlacementPreview({\n\t\t\t\t\tkind: \"stroke\",\n\t\t\t\t\ttool: st.tool,\n\t\t\t\t\tpoints: sampleNativeStrokePreviewPoints(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 nextItems = moveNativeTransientItems({\n\t\t\t\t\titems: itemsRef.current,\n\t\t\t\t\tsnapshots: st.snapshots,\n\t\t\t\t\tdx,\n\t\t\t\t\tdy,\n\t\t\t\t});\n\t\t\t\tsetTransientItemsPreview(nextItems);\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\tsetTransientItemsPreview(\n\t\t\t\t\treplaceNativeTransientItem({\n\t\t\t\t\t\titems: itemsRef.current,\n\t\t\t\t\t\titemId: st.id,\n\t\t\t\t\t\titem: next,\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 === \"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\tsetTransientItemsPreview(\n\t\t\t\t\treplaceNativeTransientItem({\n\t\t\t\t\t\titems: itemsRef.current,\n\t\t\t\t\t\titemId: st.id,\n\t\t\t\t\t\titem: next,\n\t\t\t\t\t}),\n\t\t\t\t);\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\tsetRealtimePlacementPreview({ 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\tsetRealtimePlacementPreview(\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\tsetRealtimePlacementPreview({\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[\n\t\t\trequestRender,\n\t\t\tscreenToWorld,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tsetTransientItemsPreview,\n\t\t\tupdateToolCursorPoint,\n\t\t],\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\tsetRealtimePlacementPreview(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\tcommitTransientItemsPreview();\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\tcommitTransientItemsPreview();\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\tsetRealtimePlacementPreview(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\tsetRealtimePlacementPreview(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\tsetRealtimePlacementPreview(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 (st.tool === \"link\") {\n\t\t\t\t\tconst suggestedBounds = createNativeLinkCardBoundsAtPoint(st.startWorld);\n\t\t\t\t\tconst insertLink: NativeLinkToolRequestDetail[\"insertLink\"] = (\n\t\t\t\t\t\tlink,\n\t\t\t\t\t\toptions = {},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst currentChange = onItemsChangeRef.current;\n\t\t\t\t\t\tif (!currentChange) return null;\n\t\t\t\t\t\tconst id = options.id ?? createShapeId();\n\t\t\t\t\t\tconst item = createLinkItem(id, options.bounds ?? suggestedBounds, link);\n\t\t\t\t\t\tcurrentChange([...itemsRef.current, item]);\n\t\t\t\t\t\tonSelectionChangeRef.current?.([id]);\n\t\t\t\t\t\trequestSelectToolAfterNativeLinkUse();\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t};\n\t\t\t\t\tconst requestLink = onLinkToolRequestRef.current;\n\t\t\t\t\tif (requestLink) {\n\t\t\t\t\t\trequestLink({\n\t\t\t\t\t\t\ttoolId: \"link\",\n\t\t\t\t\t\t\tworldX: st.startWorld.x,\n\t\t\t\t\t\t\tworldY: st.startWorld.y,\n\t\t\t\t\t\t\tscreenX: st.startScreen.x,\n\t\t\t\t\t\t\tscreenY: st.startScreen.y,\n\t\t\t\t\t\t\tsuggestedBounds,\n\t\t\t\t\t\t\tinsertLink,\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\tsetNativeLinkInputValue(\"\");\n\t\t\t\t\tsetPendingNativeLinkRequest({\n\t\t\t\t\t\ttoolId: \"link\",\n\t\t\t\t\t\tworldX: st.startWorld.x,\n\t\t\t\t\t\tworldY: st.startWorld.y,\n\t\t\t\t\t\tscreenX: st.startScreen.x,\n\t\t\t\t\t\tscreenY: st.startScreen.y,\n\t\t\t\t\t\tsuggestedBounds,\n\t\t\t\t\t\tinsertLink,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\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 fs = DEFAULT_TEXT_TOOL_FONT_SIZE;\n\t\t\t\t\tconst baseline = textBaselineYFor(fs);\n\t\t\t\t\tconst lh = textLineHeightFor(fs);\n\t\t\t\t\tconst minH = Math.max(26, baseline + Math.max(4, lh * 0.2));\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 - baseline,\n\t\t\t\t\t\t\twidth: 160,\n\t\t\t\t\t\t\theight: minH,\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\tfs,\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[\n\t\t\trequestSelectToolAfterNativeLinkUse,\n\t\t\trequestSelectToolAfterUse,\n\t\t\tscreenToWorld,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tcommitTransientItemsPreview,\n\t\t\tupdateToolCursorPoint,\n\t\t],\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\tnotifyWorldPointerMove(point);\n\t\t\tupdateToolCursorPoint(point);\n\t\t},\n\t\t[applyDragMoveAtScreenPoint, notifyWorldPointerMove, 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\tnotifyWorldPointerLeave();\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\tif (touches && touches.length >= 2) {\n\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\tnotifyWorldPointerLeave();\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\tnotifyWorldPointerLeave();\n\t\t\t\t\tdragStateRef.current = { kind: \"idle\" };\n\t\t\t\t\tsetRealtimePlacementPreview(null);\n\t\t\t\t\tclearTransientItemsPreview();\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\tnotifyWorldPointerLeave,\n\t\t\tsetRealtimePlacementPreview,\n\t\t\tclearTransientItemsPreview,\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 styleInspectorToolId =\n\t\tselectedStyleInspectorState?.toolId ?? activeStyleToolId;\n\tconst styleInspectorValue = selectedStyleInspectorState?.value ?? strokeStyleState;\n\tconst styleInspectorChange = selectedStyleInspectorState\n\t\t? patchSelectedItemsStrokeStyle\n\t\t: patchCurrentStrokeStyle;\n\tconst nativeLinkDialogLabels = {\n\t\t...DEFAULT_NATIVE_LINK_TOOL_DIALOG_LABELS,\n\t\t...(linkToolDialogLabels ?? {}),\n\t};\n\tconst normalizedNativeLinkHref = normalizeNativeLinkHref(nativeLinkInputValue);\n\tconst nativeLinkCanSubmit =\n\t\tpendingNativeLinkRequest !== null &&\n\t\tnormalizedNativeLinkHref !== null &&\n\t\tonItemsChange != null;\n\n\treturn (\n\t\t<View style={{ flex: 1, overflow: \"hidden\" }} onLayout={onLayout}>\n\t\t\t{size.width > 0 && size.height > 0 && (\n\t\t\t\t<>\n\t\t\t\t\t<View\n\t\t\t\t\t\tstyle={StyleSheet.absoluteFill}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerMove={handlePointerMove}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerMove}\n\t\t\t\t\t\tonPointerLeave={() => {\n\t\t\t\t\t\t\thideToolCursor();\n\t\t\t\t\t\t\tnotifyWorldPointerLeave();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t{...panResponder.panHandlers}\n\t\t\t\t\t>\n\t\t\t\t\t\t<NativeSceneRenderer\n\t\t\t\t\t\t\titems={sceneItems}\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/>\n\t\t\t\t\t\t{interactive && (\n\t\t\t\t\t\t\t<NativeInteractionOverlay\n\t\t\t\t\t\t\t\tcamera={camera}\n\t\t\t\t\t\t\t\twidth={size.width}\n\t\t\t\t\t\t\t\theight={size.height}\n\t\t\t\t\t\t\t\tselectedItems={selectedItems}\n\t\t\t\t\t\t\t\tshowResizeHandles={showResizeHandles}\n\t\t\t\t\t\t\t\tplacementPreview={placementPreview}\n\t\t\t\t\t\t\t\tlaserTrail={laserTrail}\n\t\t\t\t\t\t\t\teraserTrail={eraserTrail}\n\t\t\t\t\t\t\t\teraserPreviewItems={activeItems.filter((item) =>\n\t\t\t\t\t\t\t\t\teraserPreviewIds.includes(item.id),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tpreviewStrokeStyle={strokeStyleState}\n\t\t\t\t\t\t\t\tremotePresence={remotePresence}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</View>\n\t\t\t\t\t{overlay ? (\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\tStyleSheet.absoluteFill,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tzIndex: NATIVE_VIEWPORT_EXTERNAL_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_EXTERNAL_OVERLAY_ELEVATION,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{overlay}\n\t\t\t\t\t\t</View>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{interactive && showStyleInspector && styleInspectorToolId ? (\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\tzIndex: NATIVE_VIEWPORT_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_OVERLAY_ELEVATION,\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\tzIndex: NATIVE_VIEWPORT_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_OVERLAY_ELEVATION,\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={styleInspectorToolId}\n\t\t\t\t\t\t\t\tvalue={styleInspectorValue}\n\t\t\t\t\t\t\t\tonChange={styleInspectorChange}\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\tzIndex: NATIVE_VIEWPORT_OVERLAY_Z_INDEX,\n\t\t\t\t\t\t\t\televation: NATIVE_VIEWPORT_OVERLAY_ELEVATION,\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\t<Modal\n\t\t\t\tanimationType=\"fade\"\n\t\t\t\ttransparent\n\t\t\t\tvisible={pendingNativeLinkRequest !== null}\n\t\t\t\tonRequestClose={closeNativeLinkDialog}\n\t\t\t>\n\t\t\t\t<View style={styles.nativeLinkDialogBackdrop}>\n\t\t\t\t\t<View style={styles.nativeLinkDialogCard}>\n\t\t\t\t\t\t<Text style={styles.nativeLinkDialogTitle}>\n\t\t\t\t\t\t\t{nativeLinkDialogLabels.title}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Text style={styles.nativeLinkDialogDescription}>\n\t\t\t\t\t\t\t{nativeLinkDialogLabels.description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\taccessibilityLabel={nativeLinkDialogLabels.title}\n\t\t\t\t\t\t\tautoCapitalize=\"none\"\n\t\t\t\t\t\t\tautoCorrect={false}\n\t\t\t\t\t\t\tkeyboardType=\"url\"\n\t\t\t\t\t\t\tonChangeText={setNativeLinkInputValue}\n\t\t\t\t\t\t\tonSubmitEditing={submitNativeLinkDialog}\n\t\t\t\t\t\t\tplaceholder={nativeLinkDialogLabels.inputPlaceholder}\n\t\t\t\t\t\t\treturnKeyType=\"done\"\n\t\t\t\t\t\t\tstyle={styles.nativeLinkDialogInput}\n\t\t\t\t\t\t\tvalue={nativeLinkInputValue}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<View style={styles.nativeLinkDialogActions}>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\t\tonPress={closeNativeLinkDialog}\n\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\tstyles.nativeLinkDialogButton,\n\t\t\t\t\t\t\t\t\tpressed ? styles.nativeLinkDialogButtonPressed : undefined,\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<Text style={styles.nativeLinkDialogButtonText}>\n\t\t\t\t\t\t\t\t\t{nativeLinkDialogLabels.cancelLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t\t<Pressable\n\t\t\t\t\t\t\t\taccessibilityRole=\"button\"\n\t\t\t\t\t\t\t\taccessibilityState={{ disabled: !nativeLinkCanSubmit }}\n\t\t\t\t\t\t\t\tdisabled={!nativeLinkCanSubmit}\n\t\t\t\t\t\t\t\tonPress={submitNativeLinkDialog}\n\t\t\t\t\t\t\t\tstyle={({ pressed }) => [\n\t\t\t\t\t\t\t\t\tstyles.nativeLinkDialogButton,\n\t\t\t\t\t\t\t\t\tstyles.nativeLinkDialogPrimaryButton,\n\t\t\t\t\t\t\t\t\tpressed && nativeLinkCanSubmit\n\t\t\t\t\t\t\t\t\t\t? styles.nativeLinkDialogPrimaryButtonPressed\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t!nativeLinkCanSubmit\n\t\t\t\t\t\t\t\t\t\t? styles.nativeLinkDialogDisabledButton\n\t\t\t\t\t\t\t\t\t\t: undefined,\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<Text style={styles.nativeLinkDialogPrimaryButtonText}>\n\t\t\t\t\t\t\t\t\t{nativeLinkDialogLabels.addLabel}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Pressable>\n\t\t\t\t\t\t</View>\n\t\t\t\t\t</View>\n\t\t\t\t</View>\n\t\t\t</Modal>\n\t\t</View>\n\t);\n});\n\nconst styles = StyleSheet.create({\n\tnativeLinkDialogBackdrop: {\n\t\tflex: 1,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tpaddingHorizontal: 24,\n\t\tbackgroundColor: \"rgba(0, 0, 0, 0.45)\",\n\t},\n\tnativeLinkDialogCard: {\n\t\twidth: \"100%\",\n\t\tmaxWidth: 480,\n\t\tpadding: 24,\n\t\tborderRadius: 16,\n\t\tbackgroundColor: \"#ffffff\",\n\t\tshadowColor: \"#000000\",\n\t\tshadowOpacity: 0.18,\n\t\tshadowRadius: 24,\n\t\tshadowOffset: { width: 0, height: 8 },\n\t\televation: 12,\n\t},\n\tnativeLinkDialogTitle: {\n\t\tcolor: \"#111827\",\n\t\tfontSize: 24,\n\t\tfontWeight: \"700\",\n\t\tlineHeight: 30,\n\t},\n\tnativeLinkDialogDescription: {\n\t\tmarginTop: 12,\n\t\tcolor: \"#6b7280\",\n\t\tfontSize: 16,\n\t\tlineHeight: 22,\n\t},\n\tnativeLinkDialogInput: {\n\t\tmarginTop: 24,\n\t\theight: 52,\n\t\tpaddingHorizontal: 14,\n\t\tborderRadius: 10,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"#d1d5db\",\n\t\tcolor: \"#111827\",\n\t\tfontSize: 18,\n\t\tbackgroundColor: \"#ffffff\",\n\t},\n\tnativeLinkDialogActions: {\n\t\tmarginTop: 24,\n\t\tflexDirection: \"row\",\n\t\tjustifyContent: \"flex-end\",\n\t\tgap: 12,\n\t},\n\tnativeLinkDialogButton: {\n\t\tminWidth: 92,\n\t\theight: 48,\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tborderRadius: 10,\n\t\tborderWidth: StyleSheet.hairlineWidth,\n\t\tborderColor: \"#d1d5db\",\n\t\tbackgroundColor: \"#ffffff\",\n\t\tpaddingHorizontal: 18,\n\t},\n\tnativeLinkDialogButtonPressed: {\n\t\tbackgroundColor: \"#f3f4f6\",\n\t},\n\tnativeLinkDialogButtonText: {\n\t\tcolor: \"#111827\",\n\t\tfontSize: 17,\n\t\tfontWeight: \"600\",\n\t},\n\tnativeLinkDialogPrimaryButton: {\n\t\tborderColor: \"#18181b\",\n\t\tbackgroundColor: \"#18181b\",\n\t},\n\tnativeLinkDialogPrimaryButtonPressed: {\n\t\tbackgroundColor: \"#27272a\",\n\t},\n\tnativeLinkDialogDisabledButton: {\n\t\tborderColor: \"#9ca3af\",\n\t\tbackgroundColor: \"#9ca3af\",\n\t},\n\tnativeLinkDialogPrimaryButtonText: {\n\t\tcolor: \"#ffffff\",\n\t\tfontSize: 17,\n\t\tfontWeight: \"700\",\n\t},\n});\n"]}
|