@embedpdf/react 3.0.0-next.4 → 3.0.0-next.6
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/{AnnotationListSnapshot-_Z600IzD-DYoq1Iu1.d.cts → AnnotationListSnapshot-CHjkcIaL-CMHGL8-D.d.cts} +2 -2
- package/dist/{AnnotationListSnapshot-_Z600IzD-DYoq1Iu1.d.ts → AnnotationListSnapshot-CHjkcIaL-CMHGL8-D.d.ts} +2 -2
- package/dist/anchored.cjs +89 -0
- package/dist/anchored.cjs.map +1 -0
- package/dist/anchored.d.cts +45 -0
- package/dist/anchored.d.ts +45 -0
- package/dist/anchored.js +60 -0
- package/dist/anchored.js.map +1 -0
- package/dist/annotation-menu.cjs +33 -84
- package/dist/annotation-menu.cjs.map +1 -1
- package/dist/annotation-menu.d.cts +28 -2
- package/dist/annotation-menu.d.ts +28 -2
- package/dist/annotation-menu.js +27 -78
- package/dist/annotation-menu.js.map +1 -1
- package/dist/annotation.cjs +689 -16
- package/dist/annotation.cjs.map +1 -0
- package/dist/annotation.d.cts +119 -2
- package/dist/annotation.d.ts +119 -2
- package/dist/annotation.js +678 -3
- package/dist/annotation.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.d.cts +2 -2
- package/dist/form.d.ts +2 -2
- package/dist/form.js +1 -1
- package/dist/index.cjs +14 -4
- package/dist/index.d.cts +6 -5
- package/dist/index.d.ts +6 -5
- package/dist/index.js +5 -4
- package/dist/interaction.cjs +1 -1
- package/dist/interaction.js +1 -1
- package/dist/page-view.cjs +58 -36
- package/dist/page-view.cjs.map +1 -1
- package/dist/page-view.js +54 -34
- package/dist/page-view.js.map +1 -1
- package/dist/render.cjs +64 -48
- package/dist/render.cjs.map +1 -1
- package/dist/render.d.cts +6 -19
- package/dist/render.d.ts +6 -19
- package/dist/render.js +67 -50
- package/dist/render.js.map +1 -1
- package/dist/search.d.cts +1 -1
- package/dist/search.d.ts +1 -1
- package/dist/selection.cjs +59 -4
- package/dist/selection.cjs.map +1 -1
- package/dist/selection.d.cts +35 -2
- package/dist/selection.d.ts +35 -2
- package/dist/selection.js +52 -5
- package/dist/selection.js.map +1 -1
- package/dist/stage.cjs +33 -1
- package/dist/stage.cjs.map +1 -1
- package/dist/stage.js +33 -1
- package/dist/stage.js.map +1 -1
- package/package.json +27 -23
- package/dist/annotation-BTlcOjcK.js +0 -829
- package/dist/annotation-BTlcOjcK.js.map +0 -1
- package/dist/annotation-BvNPtcxN.d.cts +0 -173
- package/dist/annotation-CPbPvbKa.d.ts +0 -173
- package/dist/annotation-DVwYpWyP.cjs +0 -913
- package/dist/annotation-DVwYpWyP.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"annotation-DVwYpWyP.cjs","names":["MITER_LIMIT","useCapability","AnnotationHostToken","useSelector","shallowArray","React","usePage","useOptionalCapability","AnnotationToken"],"sources":["../src/internal/annotation-menu-position.ts","../src/annotation.tsx"],"sourcesContent":["import type { Rect } from '@embedpdf/core-geometry';\n\nexport type AnnotationMenuPlacement = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface AnnotationMenuPosition {\n left: number;\n top: number;\n transform: string;\n}\n\n/**\n * Place an upright menu around `box` (screen px). `knob` is the rotate handle's\n * screen point, when the selection has one: the menu extends ONLY the edge it\n * sits on, and ONLY when the knob protrudes past that edge — so it clears the\n * handle without ever shifting off-centre on the other axis. When the knob is on\n * another side (e.g. a 90deg shape, knob at mid-height for a `top` menu) the edge\n * is untouched and the menu stays centred on `box`.\n */\nexport function positionMenuAroundRect(\n box: Rect,\n placement: AnnotationMenuPlacement,\n gap: number,\n knob?: { x: number; y: number } | null,\n): AnnotationMenuPosition {\n const cx = box.x + box.width / 2;\n const cy = box.y + box.height / 2;\n\n switch (placement) {\n case 'bottom': {\n const edge = Math.max(box.y + box.height, knob ? knob.y : -Infinity);\n return { left: cx, top: edge + gap, transform: 'translate(-50%, 0)' };\n }\n case 'left': {\n const edge = Math.min(box.x, knob ? knob.x : Infinity);\n return { left: edge - gap, top: cy, transform: 'translate(-100%, -50%)' };\n }\n case 'right': {\n const edge = Math.max(box.x + box.width, knob ? knob.x : -Infinity);\n return { left: edge + gap, top: cy, transform: 'translate(0, -50%)' };\n }\n case 'top':\n default: {\n const edge = Math.min(box.y, knob ? knob.y : Infinity);\n return { left: cx, top: edge - gap, transform: 'translate(-50%, -100%)' };\n }\n }\n}\n","/**\n * The React view of @embedpdf/plugin-annotation.\n *\n * Pure paint: it reads the per-page render items + chrome and draws them. Pointer\n * events arrive through the interaction hub (the Stage's forwarding), and the\n * CURSOR is driven by the hub too (the edit handler claims move/pointer/resize on\n * hover). Each annotation resolves to ONE native node — a vector SceneSvg, the\n * engine's baked /AP <img>, or a registered behavior — and the host\n * `customRenderer` may wrap or replace it.\n */\n\n// One-line-per-feature: registration travels with the UI.\nexport * from '@embedpdf/plugin-annotation';\nimport * as React from 'react';\nimport { useEffect, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n AnnotationToken,\n refKey,\n type Behavior,\n type SelectionFlags,\n type SelectionProps,\n type FilePickerProvider,\n type TextItem,\n} from '@embedpdf/plugin-annotation';\nimport { pickFile } from '@embedpdf/web';\n// The render layer is framework code, so it resolves the FULL host lens\n// (pageItems/chrome/appearances/…). Same runtime token as the public one — only\n// the type differs. App code never imports this.\nimport { AnnotationToken as AnnotationHostToken } from '@embedpdf/plugin-annotation/internal';\nimport {\n scene,\n MITER_LIMIT,\n type AnnotationProps,\n type AnnotationPropsPatch,\n type CreationDraftAnchor,\n type Paint,\n type Rect,\n type RenderItem,\n type Vec,\n} from '@embedpdf/core-annotation';\n\nexport type {\n RenderItem,\n Geom,\n LineEnding,\n LineEndings,\n Border,\n Style,\n AnnotationFlags,\n AnnotationProps,\n AnnotationPropsPatch,\n PropKey,\n PropSpec,\n TextAlign,\n TextStyle,\n} from '@embedpdf/core-annotation';\nexport type { SelectionFlags, SelectionProps } from '@embedpdf/plugin-annotation';\nimport {\n shallowArray,\n useCapability,\n useOptionalCapability,\n usePage,\n useSelector,\n} from './runtime';\nimport type { PageContextValue } from './runtime';\nimport {\n positionMenuAroundRect,\n type AnnotationMenuPlacement,\n type AnnotationMenuPosition,\n} from './internal/annotation-menu-position';\n\nexport type { AnnotationMenuPlacement } from './internal/annotation-menu-position';\n\n/** `#rrggbb` → `rgba(...)` — the marquee's translucent fill derives from the\n * accent, so one `setChrome({ accent })` restyles every piece of chrome. */\nconst rgba = (hex: string, alpha: number): string => {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex);\n if (!m) return hex;\n const n = parseInt(m[1], 16);\n return `rgba(${(n >> 16) & 255},${(n >> 8) & 255},${n & 255},${alpha})`;\n};\n\n/**\n * What an annotation renderer receives: the projected item (its `box` is LIVE —\n * it follows drags), the page context, the engine's baked /AP raster (the\n * \"picture\"), the default visual (`native` — wrap it or ignore it), and\n * whether this entry currently OWNS the pointer (`interactive`). While not\n * interactive the layer renders your component pointer-locked: the annotation\n * stays a first-class citizen of the annotation plane (select/move/resize).\n */\nexport interface AnnotationRendererProps {\n item: RenderItem;\n page: PageContextValue;\n appearance: { url: string; box: Rect } | null;\n native: React.ReactNode;\n interactive: boolean;\n}\n\n/**\n * ONE rule: \"for THESE annotations, render THIS component, and it owns the\n * pointer WHEN …\". The two shapes:\n *\n * - `{ for, component, interactive? }` — your own rule. Without\n * `interactive` it is a pure SKIN: pixels only, mechanically\n * pointer-locked, the annotation plane keeps selection/move/resize. With\n * `interactive` (boolean or live predicate) the layer registers a plugin\n * Behavior for you: while it holds, the annotation plane stands down\n * (hit-test-inert) and your component owns the input.\n * - `{ behavior, component }` — the renderer for a PLUGIN-registered\n * behavior (the form plugin's fill controls via `formWidgetRenderer`);\n * the plugin decides engagement, never the app.\n *\n * Resolution: ownership beats skin — an ENGAGED behavior's component is\n * authoritative; `for` rules apply only to plane-owned annotations, first\n * match wins. Define entries OUTSIDE render (module scope or useMemo): entry\n * identity keys the behavior registration.\n */\nexport type AnnotationRenderer =\n | { behavior: string; component: React.ComponentType<AnnotationRendererProps> }\n | {\n /** Stable id for the auto-registered behavior (optional; generated). */\n id?: string;\n for: Behavior['matches'];\n component: React.ComponentType<AnnotationRendererProps>;\n interactive?: boolean | (() => boolean);\n };\n\nexport interface AnnotationLayerProps {\n /** Annotation renderers — skins and interactive takeovers ({@link AnnotationRenderer}). */\n renderers?: AnnotationRenderer[];\n}\n\n/** Content rect → a view-px box (the page wrapper's own coordinate space). */\nfunction boxOf(r: Rect, page: PageContextValue) {\n const tl = page.transform.pageToContent({ x: r.x, y: r.y });\n const br = page.transform.pageToContent({ x: r.x + r.width, y: r.y + r.height });\n return { left: tl.x, top: tl.y, width: br.x - tl.x, height: br.y - tl.y };\n}\n\n/** Map a core `Paint` to SVG presentation attributes — the whole framework-facing\n * surface. Everything else about appearance is decided in the core's `scene`. */\nfunction paintAttrs(p: Paint) {\n return {\n fill: p.fill ?? 'none',\n stroke: p.stroke ?? 'none',\n strokeWidth: p.width,\n opacity: p.opacity,\n strokeLinejoin: p.join ?? ('miter' as const), // undefined → sharp miter; 'round' only for ink\n strokeMiterlimit: MITER_LIMIT, // must match the bounds math so spike vs bevel agree\n strokeLinecap: p.cap, // undefined → SVG default (butt); 'round' only for ink\n strokeDasharray: p.dash ? p.dash.join(' ') : undefined,\n ...(p.blend ? { style: { mixBlendMode: p.blend } } : {}),\n };\n}\n\n/**\n * The dumb painter. The pure core computed `item.box` and the painted `scene`; we\n * size the <svg> to the box with a content-space `viewBox` and map each SceneNode\n * to one element, applying its `paint`. No per-kind logic, no bounds math — so\n * shapes, cloudy borders and every text-markup type all render here, and a Vue /\n * Svelte painter is the same ~10-line loop.\n */\nfunction Shape({ item, page }: { item: RenderItem; page: PageContextValue }) {\n // Nothing to draw until the annotation has area (the 0×0 draft at mouse-down).\n if (item.box.width <= 0 || item.box.height <= 0) return null;\n const { left, top, width, height } = boxOf(item.box, page);\n // The viewBox (content units) and the <svg> on-screen size MUST stay proportional\n // (scale == zoom). Clamping either — e.g. a `max(1px)` floor on the element while\n // the viewBox keeps shrinking — decouples them, so a sub-pixel box scales content\n // up by ~1/size and a cloudy border's scallops flood the stage. No clamps here.\n const vb = `${item.box.x} ${item.box.y} ${item.box.width} ${item.box.height}`;\n // BOX-family kinds (square/circle, caret) carry an UNROTATED `box` + a `rot`\n // angle; rotate the whole <svg> about its centre. VERTEX kinds (line/poly/ink)\n // are already rotated in their geometry, so `rot` is advisory there — never\n // re-applied.\n const rot = item.geom.t === 'rect' || item.geom.t === 'caret' ? (item.rot ?? 0) : 0;\n return (\n <svg\n viewBox={vb}\n style={{\n position: 'absolute',\n left,\n top,\n width,\n height,\n overflow: 'visible',\n pointerEvents: 'none',\n ...(rot ? { transform: `rotate(${rot}deg)`, transformOrigin: 'center' } : {}),\n }}\n >\n {sceneNodes(item)}\n </svg>\n );\n}\n\n/** Map a core scene to SVG children. */\nfunction sceneNodes(item: RenderItem): React.ReactNode[] {\n return scene(item).map((n, i) => {\n const a = paintAttrs(n.paint);\n if (n.kind === 'rect')\n return (\n <rect\n key={i}\n x={n.rect.x}\n y={n.rect.y}\n width={n.rect.width}\n height={n.rect.height}\n {...a}\n />\n );\n if (n.kind === 'ellipse')\n return (\n <ellipse\n key={i}\n cx={n.rect.x + n.rect.width / 2}\n cy={n.rect.y + n.rect.height / 2}\n rx={n.rect.width / 2}\n ry={n.rect.height / 2}\n {...a}\n />\n );\n if (n.kind === 'line')\n return <line key={i} x1={n.a.x} y1={n.a.y} x2={n.b.x} y2={n.b.y} {...a} />;\n if (n.kind === 'path') return <path key={i} d={n.d} {...a} />;\n if (n.kind === 'text')\n return (\n <text\n key={i}\n x={n.at.x}\n y={n.at.y}\n fontSize={n.fontSize}\n {...(n.fontFamily ? { fontFamily: n.fontFamily } : {})}\n {...a}\n >\n {n.text}\n </text>\n );\n const pts = n.points.map((p) => `${p.x},${p.y}`).join(' ');\n return n.closed ? (\n <polygon key={i} points={pts} {...a} />\n ) : (\n <polyline key={i} points={pts} {...a} />\n );\n });\n}\n\nfunction BakedImage({\n box,\n url,\n page,\n blend,\n rot,\n}: {\n box: Rect;\n url: string;\n page: PageContextValue;\n blend?: Paint['blend'];\n /** The rotation (deg, CW) the engine STRIPPED from this raster\n * (`RenderItem.apRot`) — re-applied here as a view transform, so a live\n * rotate gesture spins the bitmap with zero engine re-renders. Unset for\n * rasters that already contain their rotation (vertex kinds). */\n rot?: number;\n}) {\n const b = boxOf(box, page);\n return (\n <img\n src={url}\n alt=\"\"\n draggable={false}\n style={{\n position: 'absolute',\n left: b.left,\n top: b.top,\n width: b.width,\n height: b.height,\n // The AP box is sized in content units; a global `img { max-width: 100% }`\n // reset would otherwise clamp it to the containing block and distort the\n // aspect. This bites specifically when the box is WIDER than that block —\n // a landscape stamp whose unrotated box overhangs a view-rotated (portrait)\n // page — so honour the explicit size and let `rot` place it.\n maxWidth: 'none',\n maxHeight: 'none',\n pointerEvents: 'none',\n mixBlendMode: blend,\n // Same CW convention as the free-text element: rotate about the centre.\n ...(rot ? { transform: `rotate(${rot}deg)`, transformOrigin: 'center' } : {}),\n }}\n />\n );\n}\n\n/**\n * The armed stamp's IMAGE footprint ghost: a translucent render of the payload\n * drawn in the EXACT box a click would place it (the plugin computes it with\n * the same fit + clamp as placement). Vector footprint ghosts never reach this\n * component — they ride `pageItems` like every draft preview. The preview\n * bytes live in the capability closure; this layer owns only the object-URL\n * lifetime, keyed on the arm epoch — a new arm swaps the image, a disarm (or\n * tool change) drops it.\n */\nfunction ToolGhostImage({ page }: { page: PageContextValue }) {\n const anno = useCapability(AnnotationHostToken);\n const ghost = useSelector(AnnotationHostToken, (c) => c.toolGhost(page.pon));\n const epoch = useSelector(AnnotationHostToken, (c) => c.stampArmEpoch());\n const [url, setUrl] = useState<string | null>(null);\n\n useEffect(() => {\n const preview = anno.armedStampPreview();\n if (!preview) {\n setUrl(null);\n return;\n }\n // Copy into an EXACT ArrayBuffer (the engine idiom): a Uint8Array view may\n // sit on a larger or shared buffer, which Blob won't accept.\n const body = new ArrayBuffer(preview.bytes.byteLength);\n new Uint8Array(body).set(preview.bytes);\n const blob = new Blob([body], preview.mimeType ? { type: preview.mimeType } : {});\n const obj = URL.createObjectURL(blob);\n setUrl(obj);\n return () => {\n URL.revokeObjectURL(obj);\n setUrl(null);\n };\n }, [anno, epoch]);\n\n if (!ghost || ghost.kind !== 'image' || !url) return null;\n const b = boxOf(ghost.box, page);\n return (\n <img\n src={url}\n alt=\"\"\n draggable={false}\n style={{\n position: 'absolute',\n left: b.left,\n top: b.top,\n width: b.width,\n height: b.height,\n // Same explicit-size rule as BakedImage: never let a global img reset\n // clamp the box and distort the aspect.\n maxWidth: 'none',\n maxHeight: 'none',\n pointerEvents: 'none',\n opacity: 0.5,\n ...(ghost.rot ? { transform: `rotate(${ghost.rot}deg)`, transformOrigin: 'center' } : {}),\n }}\n />\n );\n}\n\nfunction Chrome({ page }: { page: PageContextValue }) {\n // The page's view scale converts the CSS-px chrome settings into content\n // units inside the core (knob stalk, grab zones) — screen-constant at every\n // zoom. The painter's own px values (handle glyphs, dot radius) are drawn in\n // screen space and need no conversion.\n const scale = page.transform.viewScale;\n const rotation = page.transform.rotation;\n const zoom = page.transform.zoom;\n const nodes = useSelector(\n AnnotationHostToken,\n (c) => c.chrome(page.pon, scale, rotation, zoom),\n shallowArray,\n );\n const cs = useSelector(AnnotationHostToken, (c) => c.chromeSettings());\n // The accent cascade: each piece's color falls back to the one accent.\n const outlineStroke = cs.outline.color ?? cs.accent;\n const handleStroke = cs.handles.stroke ?? cs.accent;\n const knobStroke = cs.knob.stroke ?? cs.accent;\n // ONE outline style for the resting rect AND the rotated obb — the selection\n // box must never flip dashed↔solid when a rotation starts.\n const outlineDash = cs.outline.style === 'dashed' ? '4 3' : undefined;\n // The live rotation readout — an HTML chip (rounded box + padded text beats\n // hand-rolling it in SVG), riding the pointer like v2's.\n const chip = nodes.find((n) => n.kind === 'angle-chip');\n const chipAt = chip ? page.transform.pageToContent(chip.at) : null;\n return (\n <>\n <svg style={{ position: 'absolute', inset: 0, overflow: 'visible', pointerEvents: 'none' }}>\n {nodes.map((n, i) => {\n if (n.kind === 'angle-chip') return null; // rendered as HTML below\n if (n.kind === 'handle') {\n const p = page.transform.pageToContent(n.at);\n const hs = cs.handles.size;\n return (\n <rect\n key={i}\n x={p.x - hs / 2}\n y={p.y - hs / 2}\n width={hs}\n height={hs}\n fill={cs.handles.fill}\n stroke={handleStroke}\n strokeWidth={1.5}\n // The square rides a rotated box's orientation (spin about itself).\n {...(n.rot ? { transform: `rotate(${n.rot} ${p.x} ${p.y})` } : {})}\n />\n );\n }\n // A live alignment guide of a snapped move: a through-line at the snapped\n // edge/center, spanning both shapes.\n if (n.kind === 'guide') {\n const a = page.transform.pageToContent(\n n.axis === 'x' ? { x: n.at, y: n.lo } : { x: n.lo, y: n.at },\n );\n const b = page.transform.pageToContent(\n n.axis === 'x' ? { x: n.at, y: n.hi } : { x: n.hi, y: n.at },\n );\n return (\n <line\n key={i}\n x1={a.x}\n y1={a.y}\n x2={b.x}\n y2={b.y}\n stroke=\"#e91e63\"\n strokeWidth={1.5}\n shapeRendering=\"crispEdges\"\n />\n );\n }\n // An oriented selection box (a tilted shape/group): a closed quad through\n // the four content-space corners — replaces the axis-aligned outline.\n if (n.kind === 'obb') {\n const pts = n.corners\n .map((c) => {\n const p = page.transform.pageToContent(c);\n return `${p.x},${p.y}`;\n })\n .join(' ');\n return (\n <polygon\n key={i}\n points={pts}\n fill=\"none\"\n stroke={outlineStroke}\n strokeWidth={cs.outline.width}\n strokeDasharray={outlineDash}\n />\n );\n }\n // Rotation guides (live rotate only): the faint 0°/90° reference cross\n // + the prominent indicator riding the angle — pre-cut page chords, so\n // this is a dumb line loop.\n if (n.kind === 'rotate-guides') {\n const guideDash = cs.guides.style === 'dashed' ? '4 3' : undefined;\n return (\n <g key={i}>\n {n.lines.map((l, j) => {\n const a = page.transform.pageToContent(l.a);\n const b = page.transform.pageToContent(l.b);\n const axis = l.role === 'axis';\n return (\n <line\n key={j}\n x1={a.x}\n y1={a.y}\n x2={b.x}\n y2={b.y}\n stroke={\n axis\n ? (cs.guides.axisColor ?? cs.accent)\n : (cs.guides.indicatorColor ?? cs.accent)\n }\n opacity={axis ? cs.guides.axisOpacity : cs.guides.indicatorOpacity}\n strokeWidth={cs.guides.width}\n strokeDasharray={guideDash}\n />\n );\n })}\n </g>\n );\n }\n // The rotate knob: a stalk from the top-edge midpoint out to a grab dot.\n if (n.kind === 'rotate-knob') {\n const at = page.transform.pageToContent(n.at);\n const from = page.transform.pageToContent(n.from);\n return (\n <g key={i}>\n {cs.knob.stalk && (\n <line\n x1={from.x}\n y1={from.y}\n x2={at.x}\n y2={at.y}\n stroke={knobStroke}\n strokeWidth={1}\n />\n )}\n <circle\n cx={at.x}\n cy={at.y}\n r={cs.knob.size / 2}\n fill={cs.knob.fill}\n stroke={knobStroke}\n strokeWidth={1.5}\n />\n </g>\n );\n }\n const b = boxOf(n.rect, page);\n // The marquee rubber band keeps its own look (translucent accent fill,\n // always dashed); the selection outline follows the settings.\n if (n.kind === 'marquee') {\n return (\n <rect\n key={i}\n x={b.left}\n y={b.top}\n width={b.width}\n height={b.height}\n fill={rgba(cs.accent, 0.08)}\n stroke={cs.accent}\n strokeWidth={1}\n strokeDasharray=\"4 3\"\n />\n );\n }\n return (\n <rect\n key={i}\n x={b.left}\n y={b.top}\n width={b.width}\n height={b.height}\n fill=\"none\"\n stroke={outlineStroke}\n strokeWidth={cs.outline.width}\n strokeDasharray={outlineDash}\n />\n );\n })}\n </svg>\n {chip && chipAt && (\n <div\n style={{\n position: 'absolute',\n left: chipAt.x + 16,\n top: chipAt.y - 28,\n background: 'rgba(0,0,0,0.8)',\n color: '#fff',\n padding: '2px 6px',\n borderRadius: 4,\n fontSize: 12,\n fontFamily: 'monospace',\n pointerEvents: 'none',\n whiteSpace: 'nowrap',\n zIndex: 1,\n }}\n >\n {chip.angle}°\n </div>\n )}\n </>\n );\n}\n\n/**\n * A free-text annotation: the SAME styled element for viewing and editing —\n * `contentEditable` just toggles, so the text never jumps. The plugin handed us a\n * ready-to-spread style (`item.css`); the browser owns layout, caret, selection,\n * IME and clipboard; the plugin owns the text truth + the debounced engine write.\n * This component is the ENTIRE per-framework surface for text editing.\n */\nfunction FreeText({ item, page }: { item: TextItem; page: PageContextValue }) {\n const anno = useCapability(AnnotationHostToken);\n const ref = React.useRef<HTMLDivElement>(null);\n const box = boxOf(item.box, page);\n const scale = item.box.width > 0 ? box.width / item.box.width : 1; // content units → screen px\n\n // DOM ← model, but ONLY when this element isn't being typed in — keeps the caret\n // stable while you type AND lets a remote (collab) edit land live when idle.\n useEffect(() => {\n const el = ref.current;\n if (el && document.activeElement !== el && el.innerText !== item.contents) {\n el.innerText = item.contents;\n }\n }, [item.contents, item.editing]);\n // Keep DOM focus in sync with the model's `editing` state. Focus follows the\n // model — it never drives it (exit is hub-driven, see the edit handler), so a\n // transient focus-steal by the page surface can't end the edit.\n useEffect(() => {\n if (item.editing) ref.current?.focus();\n }, [item.editing]);\n\n // Isolate the editor from the interaction hub: a pointerdown inside it must NOT\n // bubble up to the Stage's native listener (which the edit handler reads as a\n // click-outside → exit). Stopping it here lets the browser own caret placement\n // and drag-selection inside the box, while clicks OUTSIDE still reach the hub and\n // commit the edit. Native listener (not React's) so it runs during real DOM\n // bubbling, before the Stage's own native listener on an ancestor.\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const stop = (e: Event) => e.stopPropagation();\n el.addEventListener('pointerdown', stop);\n return () => el.removeEventListener('pointerdown', stop);\n }, []);\n\n return (\n <div\n ref={ref}\n contentEditable={item.editing}\n suppressContentEditableWarning\n onInput={() => item.ref && anno.setContents(item.ref, ref.current!.innerText)}\n onBlur={(e) => {\n // The gesture that opens the editor fires a native `mousedown` on the\n // non-focusable page surface, which blurs us to <body> (relatedTarget null)\n // right after we focus. If the MODEL still has this box in edit, that blur\n // is a spurious steal — re-assert focus. A real click-away routes through\n // the hub, which clears `editing` BEFORE this fires, so we let it go (and a\n // focus move to a real element, relatedTarget != null, is always honoured).\n if (\n e.relatedTarget == null &&\n ref.current?.isConnected &&\n anno.currentEditing() === item.id\n ) {\n ref.current.focus();\n }\n }}\n onPaste={(e) => {\n e.preventDefault();\n document.execCommand('insertText', false, e.clipboardData.getData('text/plain'));\n }}\n style={{\n position: 'absolute',\n left: box.left,\n top: box.top,\n width: box.width,\n // Fixed to the annotation rect — the box never grows with content; it\n // scrolls while editing and clips otherwise (matching the baked /AP).\n height: box.height,\n fontFamily: item.css.fontFamily,\n fontSize: item.css.fontSize * scale,\n lineHeight: `${item.css.lineHeight * scale}px`,\n color: item.css.color,\n textAlign: item.css.align,\n padding: item.css.padding * scale,\n boxSizing: 'border-box',\n background: item.css.background ?? 'transparent',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'break-word',\n overflowY: item.editing ? 'auto' : 'hidden',\n overflowX: 'hidden',\n outline: item.editing ? '1px solid #3858e9' : 'none',\n cursor: item.editing ? 'text' : 'default',\n // A plain text box rotates about its centre (the box model — same as the\n // baked /AP). `box` is the unrotated box; CSS rotate matches our CW `rot`.\n ...(item.rot ? { transform: `rotate(${item.rot}deg)`, transformOrigin: 'center' } : {}),\n // not editing → clicks fall through to the shape layer (select / move / resize)\n pointerEvents: item.editing ? 'auto' : 'none',\n }}\n />\n );\n}\n\n/**\n * Auto-registered behaviors for `interactive` renderer entries — refcounted\n * per (capability, entry) because the layer mounts once PER PAGE: the first\n * page registers, the last unregisters. Entry identity is the key, hence the\n * \"define entries outside render\" rule on {@link AnnotationRenderer}.\n */\nconst autoBehaviors = new WeakMap<\n object,\n Map<object, { id: string; count: number; unregister: () => void }>\n>();\nlet autoBehaviorSeq = 0;\n\nfunction useAutoBehaviors(\n anno: { registerBehavior(b: Behavior): () => void },\n renderers?: AnnotationRenderer[],\n): void {\n useEffect(() => {\n if (!renderers) return;\n const released: Array<() => void> = [];\n for (const r of renderers) {\n if (!('for' in r) || !r.interactive) continue;\n let perCap = autoBehaviors.get(anno);\n if (!perCap) autoBehaviors.set(anno, (perCap = new Map()));\n let rec = perCap.get(r);\n if (!rec) {\n const id = r.id ?? `renderer:${++autoBehaviorSeq}`;\n const engaged = typeof r.interactive === 'function' ? r.interactive : () => true;\n rec = { id, count: 0, unregister: anno.registerBehavior({ id, matches: r.for, engaged }) };\n perCap.set(r, rec);\n }\n rec.count++;\n const owned = rec;\n released.push(() => {\n owned.count--;\n if (owned.count === 0) {\n owned.unregister();\n autoBehaviors.get(anno)?.delete(r);\n }\n });\n }\n return () => released.forEach((f) => f());\n }, [anno, renderers]);\n}\n\n/** The behavior id a renderer entry answers for (plugin-owned or auto-registered). */\nfunction rendererBehaviorId(anno: object, r: AnnotationRenderer): string | null {\n if ('behavior' in r) return r.behavior;\n return autoBehaviors.get(anno)?.get(r)?.id ?? null;\n}\n\n/** React 18 spells the `inert` attribute as a string spread; it hard-disables\n * pointer AND focus for the whole subtree — the mechanical guarantee that a\n * non-interactive renderer entry (a skin) can never steal input. */\nconst INERT = { inert: '' } as Record<string, string>;\n\nexport function AnnotationLayer({ renderers }: AnnotationLayerProps = {}) {\n const page = usePage();\n const anno = useCapability(AnnotationHostToken);\n // The page's view env (RELATIVE zoom + total display rotation) projects\n // screen-anchored (`noZoom`/`noRotate`) annotations to their effective\n // footprint INSIDE the plugin — no flag logic lives in the framework.\n // `transform.zoom` (not `viewScale`): 1 = the page's physical 100%.\n const viewZoom = page.transform.zoom;\n const viewRotation = page.transform.rotation;\n const items = useSelector(\n AnnotationHostToken,\n (c) => c.pageItems(page.pon, { zoom: viewZoom, rotation: viewRotation }),\n shallowArray,\n );\n const texts = useSelector(\n AnnotationHostToken,\n (c) => c.textItems(page.pon, { zoom: viewZoom, rotation: viewRotation }),\n shallowArray,\n );\n const [urls, setUrls] = useState<Record<string, { url: string; box: Rect }>>({});\n useAutoBehaviors(anno, renderers);\n\n useEffect(() => {\n anno.ensurePage(page.pon);\n }, [anno, page.pon]);\n\n // Baked annotations render from engine rasters — refetch when the page's\n // baked set or an /AP content version changes (a freshly placed stamp, a\n // resize whose re-bake RESOLVED), plus at APPEARANCE-SCALE crossings. A move\n // or a rotate leaves the epoch untouched (the blit repositions the same\n // pixels), and live gesture previews don't touch it either — so no mid-drag\n // spam.\n const bakedKey = useSelector(AnnotationHostToken, (c) => c.appearanceEpoch(page.pon));\n // The bake scale conforms to the document's render policy — the plugin's\n // OWN capability over the kernel-materialized fact (no foreign tokens):\n // zoom ticks inside an appearance-lattice rung re-bake NOTHING; crossing\n // 1→2 re-bakes once; continuous is the identity.\n const bakeScale = useSelector(AnnotationHostToken, (c) =>\n c.bakeScale(page.transform.renderScale),\n );\n\n useEffect(() => {\n const controller = new AbortController();\n const revokers: Array<() => void> = [];\n (async () => {\n try {\n const imgs = await anno.appearances(page.pon, bakeScale, controller.signal);\n const map: Record<string, { url: string; box: Rect }> = {};\n for (const ap of imgs) {\n // Place the baked bitmap by its OWN /Rect (the box it was rendered into),\n // converted to content space by the plugin — never a recomputed bound.\n const box = anno.toContentBox(page.pon, ap.rect);\n if (!box) continue;\n const obj = await ap.image.objectUrl(controller.signal);\n if (controller.signal.aborted) {\n obj.revoke();\n return;\n }\n revokers.push(obj.revoke);\n map[refKey(ap.ref)] = { url: obj.url, box };\n }\n if (!controller.signal.aborted) setUrls(map);\n } catch {\n /* aborted / no appearances */\n }\n })();\n return () => {\n controller.abort();\n revokers.forEach((r) => r());\n };\n }, [anno, page.pon, bakeScale, bakedKey]);\n\n return (\n <div style={{ position: 'absolute', inset: 0, pointerEvents: 'none' }}>\n {items.map((item) => {\n // The default visual: the engine's baked raster (blitted into the LIVE\n // AP box — `apBox` follows a move) or the vector scene.\n const baked = urls[item.id];\n const native: React.ReactNode =\n item.source === 'baked' ? (\n baked ? (\n <BakedImage\n box={item.apBox ?? baked.box}\n url={baked.url}\n page={page}\n blend={item.blend}\n rot={item.apRot}\n />\n ) : null\n ) : (\n <Shape item={item} page={page} /> // shapes, cloudy, markup — all painted via scene()\n );\n\n // Ownership beats skin: an ENGAGED behavior's renderer is authoritative\n // (form fill controls own their DOM); `for` rules apply only to\n // plane-owned annotations and render pointer-locked — a skin can change\n // pixels, never steal input.\n const behavior = anno.behaviorFor({ subtype: item.subtype, ref: item.ref });\n let out: React.ReactNode;\n if (behavior) {\n const entry = renderers?.find((r) => rendererBehaviorId(anno, r) === behavior.id);\n if (entry) {\n const Owner = entry.component;\n out = (\n <Owner\n item={item}\n page={page}\n appearance={baked ?? null}\n native={native}\n interactive\n />\n );\n } else {\n out = null; // engaged but no renderer wired — the owner shows nothing\n }\n } else {\n const entry = renderers?.find(\n (r) => 'for' in r && r.for({ subtype: item.subtype, ref: item.ref }),\n );\n if (entry) {\n const Skin = entry.component;\n out = (\n <div {...INERT} style={{ pointerEvents: 'none' }}>\n <Skin\n item={item}\n page={page}\n appearance={baked ?? null}\n native={native}\n interactive={false}\n />\n </div>\n );\n } else {\n out = native;\n }\n }\n return <React.Fragment key={item.id}>{out}</React.Fragment>;\n })}\n {texts.map((t) => (\n <FreeText key={t.id} item={t} page={page} />\n ))}\n <ToolGhostImage page={page} />\n <Chrome page={page} />\n </div>\n );\n}\n\n/**\n * The default file-picker provider: the built-in file dialog (from\n * `@embedpdf/web`), honouring the tool's `accept` filter. This is the ADAPTER\n * fulfilling the plugin's DOM-free port — the dialog lives here, in the\n * framework layer, never in the plugin. A picked `File` carries its own name\n * and mime, so it goes straight through as the engine's file source.\n */\nexport const filePickerProvider: FilePickerProvider = async (req) => {\n const file = await pickFile({ accept: req.accept ?? '*/*' });\n return file ? { data: file } : null;\n};\n\n/**\n * Install the file-picker provider for the active document — the ONE port\n * behind every click-then-pick tool (a stamp `'prompt'` source, the file-\n * attachment tool). Call ONCE at a document-scoped spot (not inside\n * `<AnnotationLayer>`, which is per page). Defaults to\n * {@link filePickerProvider}, so a bare `useFilePickerProvider()` makes all of\n * them work out of the box; pass a custom provider (asset library, cloud\n * drive — switch on `req.subtype` / `req.toolId`) or `null` to make\n * click-then-pick tools inert. Cleared on unmount.\n */\nexport function useFilePickerProvider(\n provider: FilePickerProvider | null = filePickerProvider,\n): void {\n const anno = useOptionalCapability(AnnotationToken);\n useEffect(() => {\n if (!anno) return;\n anno.setFilePickerProvider(provider);\n return () => anno.setFilePickerProvider(null);\n }, [anno, provider]);\n}\n\nexport function useAnnotation() {\n return useCapability(AnnotationToken);\n}\n\nexport function useAnnotationSelection() {\n return useSelector(AnnotationToken, (c) => c.selection(), shallowArray);\n}\n\n/** The selected annotations as engine DTOs — for selection-aware toolbars/sidebars. */\nexport function useAnnotationSelected() {\n return useSelector(AnnotationToken, (c) => c.getSelected(), shallowArray);\n}\n\n/** Structural equality for a resolved props bag — keeps the subscription from\n * re-rendering on unrelated dispatches, since `currentDefaults` returns a fresh\n * object each call. Small flat objects; JSON compare is exact and cheap here. */\nconst sameProps = (a: AnnotationProps, b: AnnotationProps): boolean =>\n a === b || JSON.stringify(a) === JSON.stringify(b);\n\n/**\n * A tool's RESOLVED defaults (base + per-tool override) as a full flat props\n * bag, subscribed so a `setDefaults` re-renders the consumer. Use this — not the\n * imperative `useAnnotation().currentDefaults(id)` — to drive default-editing\n * controls, so they reflect changes live. Pair with `propsForTool(id)` for the\n * specs to render.\n */\nexport function useAnnotationDefaults(toolId: string): AnnotationProps {\n return useSelector(AnnotationToken, (c) => c.currentDefaults(toolId), sameProps);\n}\n\n/**\n * The selection's editable properties — ordered specs shared by every selected\n * kind, current values, and which keys are mixed. THE hook a property sidebar\n * renders from; write back with `useAnnotation().updateSelection({ [key]: v })`.\n * Reference-stable between model changes (the capability memoizes by model\n * identity), so the default equality is enough.\n */\nexport function useSelectionProps(): SelectionProps {\n return useSelector(AnnotationToken, (c) => c.getSelectionProps());\n}\n\n/**\n * The selection's `/F` annotation flags — per-flag `true`/`false`, `null` where\n * the selected annotations disagree (render an indeterminate control), `null`\n * overall when nothing is selected. Write back with\n * `useAnnotation().updateSelectionFlags({ locked: true })`. Reference-stable\n * between model changes, like {@link useSelectionProps}.\n */\nexport function useSelectionFlags(): SelectionFlags | null {\n return useSelector(AnnotationToken, (c) => c.getSelectionFlags());\n}\n\n// ── Selection menu ────────────────────────────────────────────────────────────\n// A headless, render-prop menu that floats over the current selection. The\n// content-space anchor (`selectionAnchor`) is shared by BOTH flavors: the default\n// Stage `<AnnotationMenu>` (in `./annotation-menu`, positions via the camera) and\n// the Stage-free `<PageAnnotationMenu>` below (positions via `page.toClientRect`).\n\n/** The selection's menu anchor: the primary page + the union box of the selection\n * on that page (content space). */\nexport type SelectionAnchor = { pon: number; bounds: Rect; knob?: Vec };\n\n/** Structural equality for the selection anchor — keeps the menu from re-rendering\n * on unrelated dispatches (the capability returns a fresh object each call). */\nexport function sameAnchor(a: SelectionAnchor | null, b: SelectionAnchor | null): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.pon === b.pon &&\n a.bounds.x === b.bounds.x &&\n a.bounds.y === b.bounds.y &&\n a.bounds.width === b.bounds.width &&\n a.bounds.height === b.bounds.height &&\n a.knob?.x === b.knob?.x &&\n a.knob?.y === b.knob?.y\n );\n}\n\n/** What a menu's render prop receives: the live selection (engine DTOs) + the\n * selection-scoped intents. Fully headless — you render all UI. */\nexport interface AnnotationMenuRenderArgs {\n selected: ReturnType<typeof useAnnotationSelected>;\n deleteSelection: () => void;\n deselect: () => void;\n /** Restyle the selection with a flat props patch (see `useSelectionProps`). */\n updateSelection: (patch: AnnotationPropsPatch) => void;\n /** Rotate the current selection a quarter-turn clockwise about its centre. */\n rotate90: () => void;\n /** Reset the current selection to its as-authored orientation. */\n resetRotation: () => void;\n /** Group the current selection into one unit (selecting any member then\n * selects all). */\n group: () => Promise<void>;\n /** Ungroup the group(s) the current selection touches. */\n ungroup: () => Promise<void>;\n /** Whether {@link group} would do something for the current selection. */\n canGroup: boolean;\n /** Whether {@link ungroup} would do something for the current selection. */\n canUngroup: boolean;\n}\n\nexport interface AnnotationMenuProps {\n children: (args: AnnotationMenuRenderArgs) => React.ReactNode;\n /** Gap in screen px between the selection box and the menu (default 8). */\n gap?: number;\n /** Where to place the menu relative to the selection box. Default 'top'. */\n placement?: AnnotationMenuPlacement;\n}\n\nexport function sameCreationDraftAnchor(\n a: CreationDraftAnchor | null,\n b: CreationDraftAnchor | null,\n): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.kind === b.kind &&\n a.subtype === b.subtype &&\n a.pon === b.pon &&\n a.pointCount === b.pointCount &&\n a.minPoints === b.minPoints &&\n a.canFinish === b.canFinish &&\n a.bounds.x === b.bounds.x &&\n a.bounds.y === b.bounds.y &&\n a.bounds.width === b.bounds.width &&\n a.bounds.height === b.bounds.height\n );\n}\n\nexport interface AnnotationDraftMenuRenderArgs extends CreationDraftAnchor {\n finish: () => void;\n cancel: () => void;\n}\n\nexport interface AnnotationDraftMenuProps {\n children: (args: AnnotationDraftMenuRenderArgs) => React.ReactNode;\n /** Gap in screen px between the draft anchor and the menu (default 8). */\n gap?: number;\n /** Where to place the menu relative to the draft anchor. Default 'top'. */\n placement?: AnnotationMenuPlacement;\n}\n\n/**\n * The Stage-FREE selection menu, for `<PageView>` (no camera). It transforms a\n * selected content rect to client px via `page.toClientRect`, then renders an\n * UPRIGHT menu through a portal to\n * `document.body` (so it never rotates with the page nor clips at a container\n * edge). Re-measures on scroll/resize. For `<Stage>`, prefer `<AnnotationMenu>`\n * from `@embedpdf/react/annotation-menu` (camera-driven, more responsive).\n */\nexport function PageAnnotationMenu({ children, gap = 8, placement = 'top' }: AnnotationMenuProps) {\n const page = usePage();\n const anno = useCapability(AnnotationHostToken);\n // This page's view scale sizes the knob the menu dodges; when the anchor is\n // for another page the value is unused (the `here` guard below bails).\n const anchor = useSelector(\n AnnotationHostToken,\n (c) =>\n c.selectionAnchor(page.transform.viewScale, page.transform.rotation, page.transform.zoom),\n sameAnchor,\n );\n const selected = useAnnotationSelected();\n const [pos, setPos] = useState<AnnotationMenuPosition | null>(null);\n const here = !!anchor && anchor.pon === page.pon;\n\n // Measure in a layout effect (NOT during render): `page.toClientRect` reads the\n // page wrapper's live client rect, which only exists after the ref commits.\n useLayoutEffect(() => {\n if (!here || !anchor) {\n setPos(null);\n return;\n }\n const measure = () => {\n const knob = anchor.knob ? page.toClientPoint(anchor.knob) : null;\n setPos(positionMenuAroundRect(page.toClientRect(anchor.bounds), placement, gap, knob));\n };\n measure();\n // No camera here — the page only moves when the document scrolls or resizes.\n window.addEventListener('scroll', measure, true);\n window.addEventListener('resize', measure);\n return () => {\n window.removeEventListener('scroll', measure, true);\n window.removeEventListener('resize', measure);\n };\n }, [here, anchor, page, gap, placement]);\n\n if (!pos) return null;\n return createPortal(\n <div\n style={{\n position: 'fixed',\n left: pos.left,\n top: pos.top,\n transform: pos.transform,\n pointerEvents: 'auto',\n }}\n >\n {children({\n selected,\n deleteSelection: anno.deleteSelection,\n deselect: anno.deselect,\n updateSelection: anno.updateSelection,\n rotate90: anno.rotateSelection90,\n resetRotation: anno.resetSelectionRotation,\n group: anno.group,\n ungroup: anno.ungroup,\n canGroup: anno.canGroup(),\n canUngroup: anno.canUngroup(),\n })}\n </div>,\n document.body,\n );\n}\n\nexport function PageAnnotationDraftMenu({\n children,\n gap = 8,\n placement = 'top',\n}: AnnotationDraftMenuProps) {\n const page = usePage();\n const anno = useCapability(AnnotationHostToken);\n const anchor = useSelector(\n AnnotationHostToken,\n (c) => c.creationDraftAnchor(),\n sameCreationDraftAnchor,\n );\n const [pos, setPos] = useState<AnnotationMenuPosition | null>(null);\n const ref = React.useRef<HTMLDivElement>(null);\n const here = !!anchor && anchor.pon === page.pon;\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const stop = (e: Event) => e.stopPropagation();\n el.addEventListener('pointerdown', stop);\n return () => el.removeEventListener('pointerdown', stop);\n });\n\n useLayoutEffect(() => {\n if (!here || !anchor) {\n setPos(null);\n return;\n }\n const measure = () => {\n setPos(positionMenuAroundRect(page.toClientRect(anchor.bounds), placement, gap));\n };\n measure();\n window.addEventListener('scroll', measure, true);\n window.addEventListener('resize', measure);\n return () => {\n window.removeEventListener('scroll', measure, true);\n window.removeEventListener('resize', measure);\n };\n }, [here, anchor, page, gap, placement]);\n\n if (!anchor || !pos) return null;\n return createPortal(\n <div\n ref={ref}\n style={{\n position: 'fixed',\n left: pos.left,\n top: pos.top,\n transform: pos.transform,\n pointerEvents: 'auto',\n }}\n >\n {children({\n ...anchor,\n finish: anno.finishCreationDraft,\n cancel: anno.cancelCreationDraft,\n })}\n </div>,\n document.body,\n );\n}\n"],"mappings":"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"}
|