@embedpdf/plugin-annotation 2.0.0-next.3 → 2.0.1
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/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.js.map +1 -1
- package/dist/vue/components/annotation-container.vue.d.ts +51 -16
- package/dist/vue/components/annotation-layer.vue.d.ts +39 -4
- package/dist/vue/components/annotations.vue.d.ts +385 -29
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.js +19 -7
- package/dist/vue/index.js.map +1 -1
- package/package.json +10 -10
package/dist/svelte/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/text-markup/Highlight.svelte","../../src/svelte/components/text-markup/Underline.svelte","../../src/svelte/components/text-markup/Strikeout.svelte","../../src/svelte/components/text-markup/Squiggly.svelte","../../src/svelte/components/annotations/Ink.svelte","../../src/svelte/components/annotations/Square.svelte","../../src/svelte/components/annotations/Circle.svelte","../../src/svelte/components/annotations/Line.svelte","../../src/svelte/components/annotations/Polyline.svelte","../../src/svelte/components/annotations/Polygon.svelte","../../src/svelte/components/annotations/FreeText.svelte","../../src/svelte/components/RenderAnnotation.svelte","../../src/svelte/components/annotations/Stamp.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n AnnotationScope,\n} from '@embedpdf/plugin-annotation';\nimport { useCapability, usePlugin } from '@embedpdf/core/svelte';\n\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseAnnotationReturn {\n provides: AnnotationScope | null;\n state: AnnotationDocumentState;\n}\n\n/**\n * Hook for annotation state for a specific document\n * @param getDocumentId Document ID getter function\n */\nexport const useAnnotation = (getDocumentId: () => string | null): UseAnnotationReturn => {\n const capability = useAnnotationCapability();\n\n let state = $state<AnnotationDocumentState>(initialDocumentState());\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n state = initialDocumentState();\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Get initial state\n state = scope.getState();\n\n // Subscribe to state changes for THIS docId\n return scope.onStateChange((newState) => {\n state = newState;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return state;\n },\n };\n};\n","<script lang=\"ts\" generics=\"T extends PdfAnnotationObject\">\n import type { PdfAnnotationObject, Rect } from '@embedpdf/models';\n import { useAnnotationCapability } from '../hooks';\n import type { AnnotationContainerProps } from './types';\n import {\n useInteractionHandles,\n doublePress,\n CounterRotate,\n deepToRaw,\n type SelectionMenuPlacement,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import type { Snippet } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isDraggable,\n isResizable,\n lockAspectRatio = false,\n style,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n zIndex = 20,\n resizeUI,\n vertexUI,\n selectionOutlineColor = '#007ACC',\n customAnnotationRenderer,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T>(trackedAnnotation.object);\n let annotationCapability = useAnnotationCapability();\n let gestureBaseRef = $state<T | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let currentObject = $derived<T>(\n preview ? { ...trackedAnnotation.object, ...preview } : trackedAnnotation.object,\n );\n\n // Defaults retain current behavior\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = trackedAnnotation.object;\n }\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: currentObject.rect,\n vertices: vertexConfig?.extractVertices(currentObject),\n constraints: {\n minWidth: 10,\n minHeight: 10,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n enabled: isSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n\n if (event.state === 'start') {\n gestureBaseRef = currentObject;\n }\n\n const transformType = event.transformData.type;\n const base = gestureBaseRef ?? currentObject;\n\n const changes = event.transformData.changes.vertices\n ? vertexConfig?.transformAnnotation(base, event.transformData.changes.vertices)\n : { rect: event.transformData.changes.rect };\n\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type: transformType,\n changes: changes as Partial<T>,\n metadata: event.transformData.metadata,\n });\n\n if (patched) {\n preview = {\n ...preview,\n ...patched,\n };\n }\n if (event.state === 'end' && patched) {\n gestureBaseRef = null;\n // Sanitize to remove Svelte reactive properties before updating\n // Use deepToRaw to recursively strip proxies while preserving complex objects\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, trackedAnnotation.object.id, sanitized);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOffset,\n offsetMode: 'outside',\n includeSides: lockAspectRatio ? false : true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: zIndex + 2,\n },\n includeVertices: vertexConfig ? true : false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(isSelected && (!!selectionMenu || !!selectionMenuSnippet));\n\n // Build context object for selection menu\n function buildContext(): AnnotationSelectionContext {\n return {\n type: 'annotation',\n annotation: trackedAnnotation,\n pageIndex,\n };\n }\n\n // Placement hints\n const menuPlacement: SelectionMenuPlacement = {\n suggestTop: false,\n spaceAbove: 0,\n spaceBelow: 0,\n };\n\n // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: menuPlacement,\n menuWrapperProps,\n };\n }\n</script>\n\n<div data-no-interaction>\n <div\n {...isDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: onDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{currentObject.rect.size.width * scale}px\"\n style:height=\"{currentObject.rect.size.height * scale}px\"\n style:outline={isSelected ? `1px solid ${selectionOutlineColor}` : 'none'}\n style:outline-offset={isSelected ? `${outlineOffset}px` : '0px'}\n style:pointer-events={isSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && isDraggable ? 'move' : 'default'}\n style:z-index={zIndex}\n style={style || ''}\n class={propsClass}\n {...restProps}\n >\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: currentObject,\n children: children as Snippet,\n isSelected,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n pageIndex,\n onSelect,\n })}\n {:else}\n {@render children(currentObject)}\n {/if}\n\n {#if isSelected && isResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@const Component = resizeUI.component}\n <Component {...hProps} backgroundColor={HANDLE_COLOR} />\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n {#if isSelected}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@const Component = vertexUI.component}\n <Component {...vProps} backgroundColor={VERTEX_COLOR} />\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: currentObject.rect.origin.x * scale,\n y: currentObject.rect.origin.y * scale,\n },\n size: {\n width: currentObject.rect.size.width * scale,\n height: currentObject.rect.size.height * scale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if selectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = selectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if selectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render selectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n</div>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: HighlightProps = $props();\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px\"\n style:top=\"{(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px\"\n style:width=\"{b.size.width * scale}px\"\n style:height=\"{b.size.height * scale}px\"\n style:background={color}\n style:opacity\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : undefined}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n ></div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface UnderlineProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: UnderlineProps = $props();\n\n const thickness = $derived(2 * scale); // 2 CSS px at 100% zoom\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual underline -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: StrikeoutProps = $props();\n\n const thickness = $derived(2 * scale);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual strikeout line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"50%\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: SquigglyProps = $props();\n\n const amplitude = $derived(2 * scale); // wave height\n const period = $derived(6 * scale); // wave length\n\n const svg =\n $derived(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${color}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`);\n\n // Completely escape the SVG markup\n const svgDataUri = $derived(`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual squiggly line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{amplitude * 2}px\"\n style:background-image={svgDataUri}\n style:background-repeat=\"repeat-x\"\n style:background-size=\"{period}px {amplitude * 2}px\"\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n interface InkProps {\n isSelected: boolean;\n color?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n }: InkProps = $props();\n\n // derived SVG path data\n const paths = $derived.by(() =>\n inkList.map(({ points }) => {\n let d = '';\n for (let i = 0; i < points.length; i++) {\n const { x, y } = points[i];\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n }\n return d.trim();\n }),\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n {#each paths as d, i (i)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={color}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n</svg>\n","<!-- Square.svelte -->\n<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface SquareProps {\n isSelected: boolean;\n color?: string; // fill color (defaults to black)\n strokeColor?: string; // stroke color (defaults to fill when omitted)\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect; // bbox includes stroke\n scale: number; // page zoom\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: SquareProps = $props();\n\n // Geometry helpers — compute inner rect so visual fill matches preview\n const { width, height, x, y } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n return {\n width: innerW,\n height: innerH,\n x: strokeWidth / 2,\n y: strokeWidth / 2,\n };\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; pointer-events: none; z-index: 2;\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width + strokeWidth} ${height + strokeWidth}`}\n>\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface CircleProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Fill colour – defaults to PDFium’s black if omitted */\n color?: string;\n /** Stroke colour – defaults to same as fill when omitted */\n strokeColor?: string;\n /** 0 – 1 */\n opacity?: number;\n /** Stroke width in PDF units */\n strokeWidth: number;\n /** Stroke type – defaults to solid when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – defaults to undefined when omitted */\n strokeDashArray?: number[];\n /** Bounding box of the annotation */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Pointer/touch handler (used for selection) */\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: CircleProps = $props();\n\n const { width, height, cx, cy, rx, ry } = $derived.by(() => {\n // Full bounding box *includes* stroke width.\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n\n // Remove the stroke so the visible fill matches the preview.\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n // Centre of the fill sits strokeWidth/2 in from the edges\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n\n let peValue = $derived(\n isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n );\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n {svgWidth}\n {svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n>\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n onpointerdown={(e) => onClick?.(e)}\n ontouchstart={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n</svg>\n","<!-- Line.svelte -->\n<script lang=\"ts\">\n import type { Rect, LinePoints, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface LineProps {\n color?: string; // interior color\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n isSelected: boolean;\n }\n\n let {\n color = 'transparent',\n opacity = 1,\n strokeWidth,\n strokeColor = '#000000',\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n linePoints,\n lineEndings,\n scale,\n onClick,\n isSelected,\n }: LineProps = $props();\n\n // Localize endpoints into the annotation's bbox\n const x1 = $derived(linePoints.start.x - rect.origin.x);\n const y1 = $derived(linePoints.start.y - rect.origin.y);\n const x2 = $derived(linePoints.end.x - rect.origin.x);\n const y2 = $derived(linePoints.end.y - rect.origin.y);\n\n // Arrow-head / butt endings via shared factory\n const endings = $derived.by(() => {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(lineEndings?.start, strokeWidth, angle + Math.PI, x1, y1),\n end: patching.createEnding(lineEndings?.end, strokeWidth, angle, x2, y2),\n };\n });\n\n // Absolute placement + scaling\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n // Dashed stroke only when requested\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Main line -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Optional arrowheads / butt caps -->\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n onpointerdown={onClick}\n ontouchstart={onClick}\n stroke={strokeColor}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.start.filled ? color : 'none'}\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.end.filled ? color : 'none'}\n />\n {/if}\n</svg>\n","<!-- Polyline.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface PolylineProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Optional start & end endings */\n lineEndings?: LineEndings;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n scale,\n isSelected,\n onClick,\n lineEndings,\n }: PolylineProps = $props();\n\n // Localize vertices to the annotation rect\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data: \"M x0 y0 L x1 y1 ...\"\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n return (\n `M ${first.x} ${first.y} ` +\n rest\n .map((p) => `L ${p.x} ${p.y} `)\n .join('')\n .trim()\n );\n });\n\n // Compute endings (angles from first→second, last-1→last)\n const endings = $derived.by(() => {\n if (localPts.length < 2) return { start: null as any, end: null as any };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts[0], localPts[1]); // FROM first TO second\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]); // FROM second-to-last TO last\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI, // tip outward from start\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad, // tip in line direction\n localPts[localPts.length - 1].x,\n localPts[localPts.length - 1].y,\n );\n return { start, end };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; width: var(--w); height: var(--h); pointer-events: none; z-index: 2; overflow: visible;\"\n style:--w={`${width}px`}\n style:--h={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n</svg>\n","<!-- Polygon.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface PolygonProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n // Preview-only\n currentVertex?: Position;\n handleSize?: number;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n currentVertex,\n handleSize = 14,\n }: PolygonProps = $props();\n\n // Combine vertices with preview point (if any)\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n // Localize points to the annotation bbox\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data; omit 'Z' when previewing\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n const isPreview = !!currentVertex;\n return (\n `M ${first.x} ${first.y} ` +\n rest.map((p) => `L ${p.x} ${p.y}`).join(' ') +\n (isPreview ? '' : ' Z')\n ).trim();\n });\n\n const isPreviewing = $derived(!!currentVertex && vertices.length > 0);\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Preview-only elements -->\n {#if isPreviewing && vertices.length > 1}\n <path\n d={`M ${localPts[localPts.length - 1].x} ${localPts[localPts.length - 1].y} L ${localPts[0].x} ${localPts[0].y}`}\n fill=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={'4,4'}\n style:opacity={0.7}\n />\n {/if}\n\n {#if isPreviewing && vertices.length >= 2}\n <rect\n x={localPts[0].x - handleSize / scale / 2}\n y={localPts[0].y - handleSize / scale / 2}\n width={handleSize / scale}\n height={handleSize / scale}\n fill={strokeColor}\n opacity={0.4}\n stroke={strokeColor}\n stroke-width={strokeWidth / 2}\n />\n {/if}\n</svg>\n","<!-- Free-text.svelte -->\n<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\n // ---------- props ----------\n interface FreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n }\n\n let { documentId, isSelected, isEditing, annotation, pageIndex, scale, onClick }: FreeTextProps =\n $props();\n\n // ---------- capabilities ----------\n const annotationCapability = useAnnotationCapability();\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // ---------- refs / state ----------\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n\n // Focus and move caret to end when entering edit mode\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editorRef.focus();\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n // One-time iOS detection (prevents zoom by font-size compensation)\n $effect.pre(() => {\n try {\n const nav = navigator as any;\n const ios =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n isIOS = ios;\n } catch {\n isIOS = false;\n }\n });\n\n // Persist contents on blur\n function handleBlur() {\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\n // ---------- iOS zoom compensation ----------\n const computedFontPx = $derived(annotation.object.fontSize * scale);\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp = $derived(\n isIOS && isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX,\n );\n const adjustedFontPx = $derived(needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx);\n const scaleComp = $derived(needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1);\n const invScalePercent = $derived(needsComp ? 100 / scaleComp : 100);\n\n // ---------- derived sizes ----------\n const outerW = $derived(annotation.object.rect.size.width * scale);\n const outerH = $derived(annotation.object.rect.size.height * scale);\n\n const justify = $derived(\n annotation.object.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : annotation.object.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n</script>\n\n<!-- Outer positioned container -->\n<div\n style:position=\"absolute\"\n style:width={`${outerW}px`}\n style:height={`${outerH}px`}\n style:z-index={2}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events={isSelected && !isEditing ? 'none' : 'auto'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <!-- Editable span -->\n <span\n bind:this={editorRef}\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:display=\"flex\"\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:color={annotation.object.fontColor}\n style:font-size={`${adjustedFontPx}px`}\n style:font-family={standardFontCss(annotation.object.fontFamily)}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.backgroundColor}\n style:opacity={annotation.object.opacity}\n style:width={needsComp ? `${invScalePercent}%` : '100%'}\n style:height={needsComp ? `${invScalePercent}%` : '100%'}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : 'pointer'}\n style:outline=\"none\"\n style:transform={needsComp ? `scale(${scaleComp})` : undefined}\n style:transform-origin=\"top left\">{annotation.object.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import { ignore, type PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\n import type { HTMLImgAttributes } from 'svelte/elements';\n import { useAnnotationCapability } from '../hooks';\n import { deepToRaw } from '@embedpdf/utils/svelte';\n\n interface RenderAnnotationProps extends Omit<HTMLImgAttributes, 'style'> {\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n dpr?: number;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n style,\n ...restProps\n }: RenderAnnotationProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n let imageUrl = $state<string | null>(null);\n let urlRef: string | null = null;\n\n const { width, height } = $derived(annotation.rect.size);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Effect to render annotation\n $effect(() => {\n if (annotationProvides) {\n const task = annotationProvides.renderAnnotation({\n pageIndex,\n annotation: deepToRaw(annotation),\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl = url;\n urlRef = url;\n }, ignore);\n\n return () => {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n };\n }\n });\n\n function handleImageLoad() {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n alt=\"\"\n src={imageUrl}\n onload={handleImageLoad}\n {...restProps}\n style:width=\"100%\"\n style:height=\"100%\"\n style:display=\"block\"\n {style}\n />\n{/if}\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import RenderAnnotation from '../RenderAnnotation.svelte';\n\n interface StampProps {\n documentId: string;\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick: (e: MouseEvent | TouchEvent) => void;\n }\n\n let { documentId, isSelected, annotation, pageIndex, scale, onClick }: StampProps = $props();\n\n let annotationProp = $derived({ ...annotation.object, id: annotation.object.id });\n</script>\n\n<div\n style=\"position: absolute; width: 100%; height: 100%; z-index: 2;\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor=\"pointer\"\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <RenderAnnotation {documentId} {pageIndex} annotation={annotationProp} scaleFactor={scale} />\n</div>\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import { blendModeToCss, type PdfAnnotationObject, PdfBlendMode } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationByPageIndex,\n isCircle,\n isFreeText,\n isHighlight,\n isInk,\n isLine,\n isPolygon,\n isPolyline,\n isSquare,\n isSquiggly,\n isStamp,\n isStrikeout,\n isUnderline,\n type TrackedAnnotation,\n } from '@embedpdf/plugin-annotation';\n\n import { type PointerEventHandlersWithLifecycle } from '@embedpdf/plugin-interaction-manager';\n import { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/svelte';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n\n import Highlight from './text-markup/Highlight.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Ink from './annotations/Ink.svelte';\n import Square from './annotations/Square.svelte';\n import Circle from './annotations/Circle.svelte';\n import Line from './annotations/Line.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import FreeText from './annotations/FreeText.svelte';\n import Stamp from './annotations/Stamp.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n\n // ---------- props ----------\n interface AnnotationsProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // ---------- capabilities / handlers ----------\n const annotationCapability = useAnnotationCapability();\n const selectionCapability = useSelectionCapability();\n const pointerHandlers = usePointerHandlers({\n documentId: annotationsProps.documentId,\n pageIndex: annotationsProps.pageIndex,\n });\n\n // ---------- local state ----------\n let annotations = $state<TrackedAnnotation[]>([]);\n let selectionState = $state<TrackedAnnotation | null>(null);\n let editingId = $state<string | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n // subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current state immediately\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(currentState, annotationsProps.pageIndex);\n\n // Then subscribe to changes\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(state, annotationsProps.pageIndex);\n });\n return () => off?.();\n });\n\n // pointer handlers (capture-down to deselect when clicking empty layer)\n const handlers: PointerEventHandlersWithLifecycle = {\n onPointerDown: (_: unknown, pe: PointerEvent) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n // register pointer handlers\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n // click/select logic shared across shapes\n function handleClick(e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n selectionCapability.provides.clear();\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const isSelected = selectionState?.object.id === annotation.object.id}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const mixBlendMode = blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\n\n {#if isInk(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Ink\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquare(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Square\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isCircle(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Circle\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: PointerEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isUnderline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Underline\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStrikeout(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Strikeout\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquiggly(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Squiggly\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isHighlight(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply)}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Highlight\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLine(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, vertices) => ({\n ...a,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Line\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolyline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n {isSelected}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polyline\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolygon(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polygon\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isFreeText(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isEditing}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n editingId = annotation.object.id;\n }}\n {...annotationsProps}\n >\n {#snippet children(object)}\n <FreeText\n documentId={annotationsProps.documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object }}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStamp(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(_object)}\n <Stamp\n documentId={annotationsProps.documentId}\n {isSelected}\n {annotation}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n","<script lang=\"ts\">\n import { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, type Rect } from '@embedpdf/models';\n import type { AnnotationTool } from '@embedpdf/plugin-annotation';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n import Highlight from './text-markup/Highlight.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n\n interface TextMarkupProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: TextMarkupProps = $props();\n\n const selectionCapability = useSelectionCapability();\n const annotationCapability = useAnnotationCapability();\n\n let rects = $state<Rect[]>([]);\n let boundingRect = $state<Rect | null>(null);\n let activeTool = $state<AnnotationTool | null>(null);\n\n // Get scoped APIs for this document\n const selectionProvides = $derived(\n selectionCapability.provides ? selectionCapability.provides.forDocument(documentId) : null,\n );\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Subscribe to selection changes\n $effect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n rects = selectionProvides.getHighlightRectsForPage(pageIndex);\n boundingRect = selectionProvides.getBoundingRectForPage(pageIndex);\n });\n return off;\n });\n\n // Subscribe to active tool changes\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current active tool\n activeTool = annotationProvides.getActiveTool();\n\n const off = annotationProvides.onActiveToolChange((tool) => {\n activeTool = tool;\n });\n return off;\n });\n\n const mixBlendMode = $derived(\n activeTool?.defaults?.blendMode\n ? blendModeToCss(activeTool.defaults.blendMode)\n : activeTool?.defaults?.type === PdfAnnotationSubtype.HIGHLIGHT\n ? blendModeToCss(PdfBlendMode.Multiply)\n : blendModeToCss(PdfBlendMode.Normal),\n );\n</script>\n\n{#if boundingRect && activeTool && activeTool.defaults}\n {#if activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Underline\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Highlight\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Strikeout\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Squiggly\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {/if}\n{/if}\n","<script lang=\"ts\">\n import type { AnyPreviewState } from '@embedpdf/plugin-annotation';\n import { PdfAnnotationSubtype } from '@embedpdf/models';\n import Circle from './annotations/Circle.svelte';\n import Square from './annotations/Square.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Line from './annotations/Line.svelte';\n import Ink from './annotations/Ink.svelte';\n\n interface PreviewRendererProps {\n preview: AnyPreviewState;\n scale: number;\n }\n\n let { preview, scale }: PreviewRendererProps = $props();\n\n const bounds = $derived(preview.bounds);\n\n const style = $derived({\n left: bounds.origin.x * scale,\n top: bounds.origin.y * scale,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n });\n</script>\n\n{#if preview.type === PdfAnnotationSubtype.CIRCLE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Circle isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.SQUARE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Square isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYGON}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polygon isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYLINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polyline isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.LINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Line isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.INK}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Ink isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.FREETEXT}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <!-- Render a simple dashed border preview -->\n <div\n style:width=\"100%\"\n style:height=\"100%\"\n style:border=\"1px dashed {preview.data.fontColor || '#000000'}\"\n style:background-color=\"transparent\"\n ></div>\n </div>\n{/if}\n","<script lang=\"ts\">\n import { useAnnotationPlugin } from '../hooks';\n import type { AnyPreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\n import PreviewRenderer from './PreviewRenderer.svelte';\n\n interface AnnotationPaintLayerProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: AnnotationPaintLayerProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let previews = $state<Map<string, AnyPreviewState>>(new Map());\n\n let fileInputRef: HTMLInputElement | null = $state(null);\n let canvasRef: HTMLCanvasElement | null = $state(null);\n\n const services: HandlerServices = {\n requestFile: ({ accept, onFile }) => {\n if (!fileInputRef) return;\n const input = fileInputRef;\n input.accept = accept;\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n onFile(file);\n input.value = '';\n }\n };\n input.click();\n },\n processImage: ({ source, maxWidth, maxHeight, onComplete }) => {\n const canvas = canvasRef;\n if (!canvas || !canvas.getContext) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n let { naturalWidth: width, naturalHeight: height } = img;\n\n // --- SCALING LOGIC ---\n // Calculate the scale factor to fit within maxWidth and maxHeight\n const scaleX = maxWidth ? maxWidth / width : 1;\n const scaleY = maxHeight ? maxHeight / height : 1;\n const scaleFactor = Math.min(scaleX, scaleY, 1); // Ensure we don't scale up\n\n const finalWidth = width * scaleFactor;\n const finalHeight = height * scaleFactor;\n\n canvas.width = finalWidth;\n canvas.height = finalHeight;\n ctx.drawImage(img, 0, 0, finalWidth, finalHeight);\n\n const imageData = ctx.getImageData(0, 0, finalWidth, finalHeight);\n if (typeof source !== 'string') URL.revokeObjectURL(img.src);\n\n onComplete({ imageData, width: finalWidth, height: finalHeight });\n };\n img.src = typeof source === 'string' ? source : URL.createObjectURL(source);\n },\n };\n\n $effect(() => {\n if (!annotationPlugin.plugin) return;\n\n return annotationPlugin.plugin.registerPageHandlers(documentId, pageIndex, scale, {\n services,\n onPreview: (toolId, state) => {\n previews = new Map(previews);\n if (state) {\n previews.set(toolId, state);\n } else {\n previews.delete(toolId);\n }\n },\n });\n });\n</script>\n\n<!-- Hidden DOM elements required by services -->\n<input bind:this={fileInputRef} type=\"file\" style:display=\"none\" />\n<canvas bind:this={canvasRef} style:display=\"none\"></canvas>\n\n<!-- Render any active previews from any tool -->\n{#each Array.from(previews.entries()) as [toolId, preview] (toolId)}\n <PreviewRenderer {preview} {scale} />\n{/each}\n","<script lang=\"ts\">\n import { Rotation, type PdfAnnotationObject } from '@embedpdf/models';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n resizeUI,\n vertexUI,\n selectionOutlineColor,\n customAnnotationRenderer,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived(\n overrideRotation !== undefined\n ? overrideRotation\n : (documentState?.current?.rotation ?? Rotation.Degree0),\n );\n</script>\n\n<div\n id=\"annotation-layer\"\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n {...restProps}\n>\n <Annotations\n {documentId}\n {selectionMenu}\n {selectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {selectionOutlineColor}\n {customAnnotationRenderer}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["_a","$$anchor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/text-markup/Highlight.svelte","../../src/svelte/components/text-markup/Underline.svelte","../../src/svelte/components/text-markup/Strikeout.svelte","../../src/svelte/components/text-markup/Squiggly.svelte","../../src/svelte/components/annotations/Ink.svelte","../../src/svelte/components/annotations/Square.svelte","../../src/svelte/components/annotations/Circle.svelte","../../src/svelte/components/annotations/Line.svelte","../../src/svelte/components/annotations/Polyline.svelte","../../src/svelte/components/annotations/Polygon.svelte","../../src/svelte/components/annotations/FreeText.svelte","../../src/svelte/components/RenderAnnotation.svelte","../../src/svelte/components/annotations/Stamp.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n AnnotationScope,\n} from '@embedpdf/plugin-annotation';\nimport { useCapability, usePlugin } from '@embedpdf/core/svelte';\n\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseAnnotationReturn {\n provides: AnnotationScope | null;\n state: AnnotationDocumentState;\n}\n\n/**\n * Hook for annotation state for a specific document\n * @param getDocumentId Document ID getter function\n */\nexport const useAnnotation = (getDocumentId: () => string | null): UseAnnotationReturn => {\n const capability = useAnnotationCapability();\n\n let state = $state<AnnotationDocumentState>(initialDocumentState());\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n state = initialDocumentState();\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Get initial state\n state = scope.getState();\n\n // Subscribe to state changes for THIS docId\n return scope.onStateChange((newState) => {\n state = newState;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return state;\n },\n };\n};\n","<script lang=\"ts\" generics=\"T extends PdfAnnotationObject\">\n import type { PdfAnnotationObject, Rect } from '@embedpdf/models';\n import { useAnnotationCapability } from '../hooks';\n import type { AnnotationContainerProps } from './types';\n import {\n useInteractionHandles,\n doublePress,\n CounterRotate,\n deepToRaw,\n type SelectionMenuPlacement,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import type { Snippet } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isDraggable,\n isResizable,\n lockAspectRatio = false,\n style,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n zIndex = 20,\n resizeUI,\n vertexUI,\n selectionOutlineColor = '#007ACC',\n customAnnotationRenderer,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T>(trackedAnnotation.object);\n let annotationCapability = useAnnotationCapability();\n let gestureBaseRef = $state<T | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let currentObject = $derived<T>(\n preview ? { ...trackedAnnotation.object, ...preview } : trackedAnnotation.object,\n );\n\n // Defaults retain current behavior\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = trackedAnnotation.object;\n }\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: currentObject.rect,\n vertices: vertexConfig?.extractVertices(currentObject),\n constraints: {\n minWidth: 10,\n minHeight: 10,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n enabled: isSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n\n if (event.state === 'start') {\n gestureBaseRef = currentObject;\n }\n\n const transformType = event.transformData.type;\n const base = gestureBaseRef ?? currentObject;\n\n const changes = event.transformData.changes.vertices\n ? vertexConfig?.transformAnnotation(base, event.transformData.changes.vertices)\n : { rect: event.transformData.changes.rect };\n\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type: transformType,\n changes: changes as Partial<T>,\n metadata: event.transformData.metadata,\n });\n\n if (patched) {\n preview = {\n ...preview,\n ...patched,\n };\n }\n if (event.state === 'end' && patched) {\n gestureBaseRef = null;\n // Sanitize to remove Svelte reactive properties before updating\n // Use deepToRaw to recursively strip proxies while preserving complex objects\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, trackedAnnotation.object.id, sanitized);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOffset,\n offsetMode: 'outside',\n includeSides: lockAspectRatio ? false : true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: zIndex + 2,\n },\n includeVertices: vertexConfig ? true : false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(isSelected && (!!selectionMenu || !!selectionMenuSnippet));\n\n // Build context object for selection menu\n function buildContext(): AnnotationSelectionContext {\n return {\n type: 'annotation',\n annotation: trackedAnnotation,\n pageIndex,\n };\n }\n\n // Placement hints\n const menuPlacement: SelectionMenuPlacement = {\n suggestTop: false,\n spaceAbove: 0,\n spaceBelow: 0,\n };\n\n // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: menuPlacement,\n menuWrapperProps,\n };\n }\n</script>\n\n<div data-no-interaction>\n <div\n {...isDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: onDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{currentObject.rect.size.width * scale}px\"\n style:height=\"{currentObject.rect.size.height * scale}px\"\n style:outline={isSelected ? `1px solid ${selectionOutlineColor}` : 'none'}\n style:outline-offset={isSelected ? `${outlineOffset}px` : '0px'}\n style:pointer-events={isSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && isDraggable ? 'move' : 'default'}\n style:z-index={zIndex}\n style={style || ''}\n class={propsClass}\n {...restProps}\n >\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: currentObject,\n children: children as Snippet,\n isSelected,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n pageIndex,\n onSelect,\n })}\n {:else}\n {@render children(currentObject)}\n {/if}\n\n {#if isSelected && isResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@const Component = resizeUI.component}\n <Component {...hProps} backgroundColor={HANDLE_COLOR} />\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n {#if isSelected}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@const Component = vertexUI.component}\n <Component {...vProps} backgroundColor={VERTEX_COLOR} />\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: currentObject.rect.origin.x * scale,\n y: currentObject.rect.origin.y * scale,\n },\n size: {\n width: currentObject.rect.size.width * scale,\n height: currentObject.rect.size.height * scale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if selectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = selectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if selectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render selectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n</div>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: HighlightProps = $props();\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px\"\n style:top=\"{(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px\"\n style:width=\"{b.size.width * scale}px\"\n style:height=\"{b.size.height * scale}px\"\n style:background={color}\n style:opacity\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : undefined}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n ></div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface UnderlineProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: UnderlineProps = $props();\n\n const thickness = $derived(2 * scale); // 2 CSS px at 100% zoom\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual underline -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: StrikeoutProps = $props();\n\n const thickness = $derived(2 * scale);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual strikeout line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"50%\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: SquigglyProps = $props();\n\n const amplitude = $derived(2 * scale); // wave height\n const period = $derived(6 * scale); // wave length\n\n const svg =\n $derived(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${color}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`);\n\n // Completely escape the SVG markup\n const svgDataUri = $derived(`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual squiggly line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{amplitude * 2}px\"\n style:background-image={svgDataUri}\n style:background-repeat=\"repeat-x\"\n style:background-size=\"{period}px {amplitude * 2}px\"\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n interface InkProps {\n isSelected: boolean;\n color?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n }: InkProps = $props();\n\n // derived SVG path data\n const paths = $derived.by(() =>\n inkList.map(({ points }) => {\n let d = '';\n for (let i = 0; i < points.length; i++) {\n const { x, y } = points[i];\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n }\n return d.trim();\n }),\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n {#each paths as d, i (i)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={color}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n</svg>\n","<!-- Square.svelte -->\n<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface SquareProps {\n isSelected: boolean;\n color?: string; // fill color (defaults to black)\n strokeColor?: string; // stroke color (defaults to fill when omitted)\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect; // bbox includes stroke\n scale: number; // page zoom\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: SquareProps = $props();\n\n // Geometry helpers — compute inner rect so visual fill matches preview\n const { width, height, x, y } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n return {\n width: innerW,\n height: innerH,\n x: strokeWidth / 2,\n y: strokeWidth / 2,\n };\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; pointer-events: none; z-index: 2;\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width + strokeWidth} ${height + strokeWidth}`}\n>\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface CircleProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Fill colour – defaults to PDFium’s black if omitted */\n color?: string;\n /** Stroke colour – defaults to same as fill when omitted */\n strokeColor?: string;\n /** 0 – 1 */\n opacity?: number;\n /** Stroke width in PDF units */\n strokeWidth: number;\n /** Stroke type – defaults to solid when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – defaults to undefined when omitted */\n strokeDashArray?: number[];\n /** Bounding box of the annotation */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Pointer/touch handler (used for selection) */\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: CircleProps = $props();\n\n const { width, height, cx, cy, rx, ry } = $derived.by(() => {\n // Full bounding box *includes* stroke width.\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n\n // Remove the stroke so the visible fill matches the preview.\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n // Centre of the fill sits strokeWidth/2 in from the edges\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n\n let peValue = $derived(\n isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n );\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n {svgWidth}\n {svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n>\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n onpointerdown={(e) => onClick?.(e)}\n ontouchstart={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n</svg>\n","<!-- Line.svelte -->\n<script lang=\"ts\">\n import type { Rect, LinePoints, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface LineProps {\n color?: string; // interior color\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n isSelected: boolean;\n }\n\n let {\n color = 'transparent',\n opacity = 1,\n strokeWidth,\n strokeColor = '#000000',\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n linePoints,\n lineEndings,\n scale,\n onClick,\n isSelected,\n }: LineProps = $props();\n\n // Localize endpoints into the annotation's bbox\n const x1 = $derived(linePoints.start.x - rect.origin.x);\n const y1 = $derived(linePoints.start.y - rect.origin.y);\n const x2 = $derived(linePoints.end.x - rect.origin.x);\n const y2 = $derived(linePoints.end.y - rect.origin.y);\n\n // Arrow-head / butt endings via shared factory\n const endings = $derived.by(() => {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(lineEndings?.start, strokeWidth, angle + Math.PI, x1, y1),\n end: patching.createEnding(lineEndings?.end, strokeWidth, angle, x2, y2),\n };\n });\n\n // Absolute placement + scaling\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n // Dashed stroke only when requested\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Main line -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Optional arrowheads / butt caps -->\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n onpointerdown={onClick}\n ontouchstart={onClick}\n stroke={strokeColor}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.start.filled ? color : 'none'}\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.end.filled ? color : 'none'}\n />\n {/if}\n</svg>\n","<!-- Polyline.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface PolylineProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Optional start & end endings */\n lineEndings?: LineEndings;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n scale,\n isSelected,\n onClick,\n lineEndings,\n }: PolylineProps = $props();\n\n // Localize vertices to the annotation rect\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data: \"M x0 y0 L x1 y1 ...\"\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n return (\n `M ${first.x} ${first.y} ` +\n rest\n .map((p) => `L ${p.x} ${p.y} `)\n .join('')\n .trim()\n );\n });\n\n // Compute endings (angles from first→second, last-1→last)\n const endings = $derived.by(() => {\n if (localPts.length < 2) return { start: null as any, end: null as any };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts[0], localPts[1]); // FROM first TO second\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]); // FROM second-to-last TO last\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI, // tip outward from start\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad, // tip in line direction\n localPts[localPts.length - 1].x,\n localPts[localPts.length - 1].y,\n );\n return { start, end };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; width: var(--w); height: var(--h); pointer-events: none; z-index: 2; overflow: visible;\"\n style:--w={`${width}px`}\n style:--h={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n</svg>\n","<!-- Polygon.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface PolygonProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n // Preview-only\n currentVertex?: Position;\n handleSize?: number;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n currentVertex,\n handleSize = 14,\n }: PolygonProps = $props();\n\n // Combine vertices with preview point (if any)\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n // Localize points to the annotation bbox\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data; omit 'Z' when previewing\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n const isPreview = !!currentVertex;\n return (\n `M ${first.x} ${first.y} ` +\n rest.map((p) => `L ${p.x} ${p.y}`).join(' ') +\n (isPreview ? '' : ' Z')\n ).trim();\n });\n\n const isPreviewing = $derived(!!currentVertex && vertices.length > 0);\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Preview-only elements -->\n {#if isPreviewing && vertices.length > 1}\n <path\n d={`M ${localPts[localPts.length - 1].x} ${localPts[localPts.length - 1].y} L ${localPts[0].x} ${localPts[0].y}`}\n fill=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={'4,4'}\n style:opacity={0.7}\n />\n {/if}\n\n {#if isPreviewing && vertices.length >= 2}\n <rect\n x={localPts[0].x - handleSize / scale / 2}\n y={localPts[0].y - handleSize / scale / 2}\n width={handleSize / scale}\n height={handleSize / scale}\n fill={strokeColor}\n opacity={0.4}\n stroke={strokeColor}\n stroke-width={strokeWidth / 2}\n />\n {/if}\n</svg>\n","<!-- Free-text.svelte -->\n<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\n // ---------- props ----------\n interface FreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n }\n\n let { documentId, isSelected, isEditing, annotation, pageIndex, scale, onClick }: FreeTextProps =\n $props();\n\n // ---------- capabilities ----------\n const annotationCapability = useAnnotationCapability();\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // ---------- refs / state ----------\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n\n // Focus and move caret to end when entering edit mode\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editorRef.focus();\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n // One-time iOS detection (prevents zoom by font-size compensation)\n $effect.pre(() => {\n try {\n const nav = navigator as any;\n const ios =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n isIOS = ios;\n } catch {\n isIOS = false;\n }\n });\n\n // Persist contents on blur\n function handleBlur() {\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\n // ---------- iOS zoom compensation ----------\n const computedFontPx = $derived(annotation.object.fontSize * scale);\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp = $derived(\n isIOS && isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX,\n );\n const adjustedFontPx = $derived(needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx);\n const scaleComp = $derived(needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1);\n const invScalePercent = $derived(needsComp ? 100 / scaleComp : 100);\n\n // ---------- derived sizes ----------\n const outerW = $derived(annotation.object.rect.size.width * scale);\n const outerH = $derived(annotation.object.rect.size.height * scale);\n\n const justify = $derived(\n annotation.object.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : annotation.object.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n</script>\n\n<!-- Outer positioned container -->\n<div\n style:position=\"absolute\"\n style:width={`${outerW}px`}\n style:height={`${outerH}px`}\n style:z-index={2}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events={isSelected && !isEditing ? 'none' : 'auto'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <!-- Editable span -->\n <span\n bind:this={editorRef}\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:display=\"flex\"\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:color={annotation.object.fontColor}\n style:font-size={`${adjustedFontPx}px`}\n style:font-family={standardFontCss(annotation.object.fontFamily)}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.backgroundColor}\n style:opacity={annotation.object.opacity}\n style:width={needsComp ? `${invScalePercent}%` : '100%'}\n style:height={needsComp ? `${invScalePercent}%` : '100%'}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : 'pointer'}\n style:outline=\"none\"\n style:transform={needsComp ? `scale(${scaleComp})` : undefined}\n style:transform-origin=\"top left\">{annotation.object.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import { ignore, type PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\n import type { HTMLImgAttributes } from 'svelte/elements';\n import { useAnnotationCapability } from '../hooks';\n import { deepToRaw } from '@embedpdf/utils/svelte';\n\n interface RenderAnnotationProps extends Omit<HTMLImgAttributes, 'style'> {\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n dpr?: number;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n style,\n ...restProps\n }: RenderAnnotationProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n let imageUrl = $state<string | null>(null);\n let urlRef: string | null = null;\n\n const { width, height } = $derived(annotation.rect.size);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Effect to render annotation\n $effect(() => {\n if (annotationProvides) {\n const task = annotationProvides.renderAnnotation({\n pageIndex,\n annotation: deepToRaw(annotation),\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl = url;\n urlRef = url;\n }, ignore);\n\n return () => {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n };\n }\n });\n\n function handleImageLoad() {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n alt=\"\"\n src={imageUrl}\n onload={handleImageLoad}\n {...restProps}\n style:width=\"100%\"\n style:height=\"100%\"\n style:display=\"block\"\n {style}\n />\n{/if}\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import RenderAnnotation from '../RenderAnnotation.svelte';\n\n interface StampProps {\n documentId: string;\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick: (e: MouseEvent | TouchEvent) => void;\n }\n\n let { documentId, isSelected, annotation, pageIndex, scale, onClick }: StampProps = $props();\n\n let annotationProp = $derived({ ...annotation.object, id: annotation.object.id });\n</script>\n\n<div\n style=\"position: absolute; width: 100%; height: 100%; z-index: 2;\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor=\"pointer\"\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <RenderAnnotation {documentId} {pageIndex} annotation={annotationProp} scaleFactor={scale} />\n</div>\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import { blendModeToCss, type PdfAnnotationObject, PdfBlendMode } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationByPageIndex,\n isCircle,\n isFreeText,\n isHighlight,\n isInk,\n isLine,\n isPolygon,\n isPolyline,\n isSquare,\n isSquiggly,\n isStamp,\n isStrikeout,\n isUnderline,\n type TrackedAnnotation,\n } from '@embedpdf/plugin-annotation';\n\n import { type PointerEventHandlersWithLifecycle } from '@embedpdf/plugin-interaction-manager';\n import { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/svelte';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n\n import Highlight from './text-markup/Highlight.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Ink from './annotations/Ink.svelte';\n import Square from './annotations/Square.svelte';\n import Circle from './annotations/Circle.svelte';\n import Line from './annotations/Line.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import FreeText from './annotations/FreeText.svelte';\n import Stamp from './annotations/Stamp.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n\n // ---------- props ----------\n interface AnnotationsProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // ---------- capabilities / handlers ----------\n const annotationCapability = useAnnotationCapability();\n const selectionCapability = useSelectionCapability();\n const pointerHandlers = usePointerHandlers({\n documentId: annotationsProps.documentId,\n pageIndex: annotationsProps.pageIndex,\n });\n\n // ---------- local state ----------\n let annotations = $state<TrackedAnnotation[]>([]);\n let selectionState = $state<TrackedAnnotation | null>(null);\n let editingId = $state<string | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n // subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current state immediately\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(currentState, annotationsProps.pageIndex);\n\n // Then subscribe to changes\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(state, annotationsProps.pageIndex);\n });\n return () => off?.();\n });\n\n // pointer handlers (capture-down to deselect when clicking empty layer)\n const handlers: PointerEventHandlersWithLifecycle = {\n onPointerDown: (_: unknown, pe: PointerEvent) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n // register pointer handlers\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n // click/select logic shared across shapes\n function handleClick(e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n selectionCapability.provides.clear();\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const isSelected = selectionState?.object.id === annotation.object.id}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const mixBlendMode = blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\n\n {#if isInk(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Ink\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquare(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Square\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isCircle(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Circle\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: PointerEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isUnderline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Underline\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStrikeout(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Strikeout\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquiggly(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Squiggly\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isHighlight(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply)}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Highlight\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLine(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, vertices) => ({\n ...a,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Line\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolyline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n {isSelected}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polyline\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolygon(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polygon\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isFreeText(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isEditing}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n editingId = annotation.object.id;\n }}\n {...annotationsProps}\n >\n {#snippet children(object)}\n <FreeText\n documentId={annotationsProps.documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object }}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStamp(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(_object)}\n <Stamp\n documentId={annotationsProps.documentId}\n {isSelected}\n {annotation}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n","<script lang=\"ts\">\n import { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, type Rect } from '@embedpdf/models';\n import type { AnnotationTool } from '@embedpdf/plugin-annotation';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n import Highlight from './text-markup/Highlight.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n\n interface TextMarkupProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: TextMarkupProps = $props();\n\n const selectionCapability = useSelectionCapability();\n const annotationCapability = useAnnotationCapability();\n\n let rects = $state<Rect[]>([]);\n let boundingRect = $state<Rect | null>(null);\n let activeTool = $state<AnnotationTool | null>(null);\n\n // Get scoped APIs for this document\n const selectionProvides = $derived(\n selectionCapability.provides ? selectionCapability.provides.forDocument(documentId) : null,\n );\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Subscribe to selection changes\n $effect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n rects = selectionProvides.getHighlightRectsForPage(pageIndex);\n boundingRect = selectionProvides.getBoundingRectForPage(pageIndex);\n });\n return off;\n });\n\n // Subscribe to active tool changes\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current active tool\n activeTool = annotationProvides.getActiveTool();\n\n const off = annotationProvides.onActiveToolChange((tool) => {\n activeTool = tool;\n });\n return off;\n });\n\n const mixBlendMode = $derived(\n activeTool?.defaults?.blendMode\n ? blendModeToCss(activeTool.defaults.blendMode)\n : activeTool?.defaults?.type === PdfAnnotationSubtype.HIGHLIGHT\n ? blendModeToCss(PdfBlendMode.Multiply)\n : blendModeToCss(PdfBlendMode.Normal),\n );\n</script>\n\n{#if boundingRect && activeTool && activeTool.defaults}\n {#if activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Underline\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Highlight\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Strikeout\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Squiggly\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {/if}\n{/if}\n","<script lang=\"ts\">\n import type { AnyPreviewState } from '@embedpdf/plugin-annotation';\n import { PdfAnnotationSubtype } from '@embedpdf/models';\n import Circle from './annotations/Circle.svelte';\n import Square from './annotations/Square.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Line from './annotations/Line.svelte';\n import Ink from './annotations/Ink.svelte';\n\n interface PreviewRendererProps {\n preview: AnyPreviewState;\n scale: number;\n }\n\n let { preview, scale }: PreviewRendererProps = $props();\n\n const bounds = $derived(preview.bounds);\n\n const style = $derived({\n left: bounds.origin.x * scale,\n top: bounds.origin.y * scale,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n });\n</script>\n\n{#if preview.type === PdfAnnotationSubtype.CIRCLE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Circle isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.SQUARE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Square isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYGON}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polygon isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYLINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polyline isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.LINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Line isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.INK}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Ink isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.FREETEXT}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <!-- Render a simple dashed border preview -->\n <div\n style:width=\"100%\"\n style:height=\"100%\"\n style:border=\"1px dashed {preview.data.fontColor || '#000000'}\"\n style:background-color=\"transparent\"\n ></div>\n </div>\n{/if}\n","<script lang=\"ts\">\n import { useAnnotationPlugin } from '../hooks';\n import type { AnyPreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\n import PreviewRenderer from './PreviewRenderer.svelte';\n\n interface AnnotationPaintLayerProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: AnnotationPaintLayerProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let previews = $state<Map<string, AnyPreviewState>>(new Map());\n\n let fileInputRef: HTMLInputElement | null = $state(null);\n let canvasRef: HTMLCanvasElement | null = $state(null);\n\n const services: HandlerServices = {\n requestFile: ({ accept, onFile }) => {\n if (!fileInputRef) return;\n const input = fileInputRef;\n input.accept = accept;\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n onFile(file);\n input.value = '';\n }\n };\n input.click();\n },\n processImage: ({ source, maxWidth, maxHeight, onComplete }) => {\n const canvas = canvasRef;\n if (!canvas || !canvas.getContext) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n let { naturalWidth: width, naturalHeight: height } = img;\n\n // --- SCALING LOGIC ---\n // Calculate the scale factor to fit within maxWidth and maxHeight\n const scaleX = maxWidth ? maxWidth / width : 1;\n const scaleY = maxHeight ? maxHeight / height : 1;\n const scaleFactor = Math.min(scaleX, scaleY, 1); // Ensure we don't scale up\n\n const finalWidth = width * scaleFactor;\n const finalHeight = height * scaleFactor;\n\n canvas.width = finalWidth;\n canvas.height = finalHeight;\n ctx.drawImage(img, 0, 0, finalWidth, finalHeight);\n\n const imageData = ctx.getImageData(0, 0, finalWidth, finalHeight);\n if (typeof source !== 'string') URL.revokeObjectURL(img.src);\n\n onComplete({ imageData, width: finalWidth, height: finalHeight });\n };\n img.src = typeof source === 'string' ? source : URL.createObjectURL(source);\n },\n };\n\n $effect(() => {\n if (!annotationPlugin.plugin) return;\n\n return annotationPlugin.plugin.registerPageHandlers(documentId, pageIndex, scale, {\n services,\n onPreview: (toolId, state) => {\n previews = new Map(previews);\n if (state) {\n previews.set(toolId, state);\n } else {\n previews.delete(toolId);\n }\n },\n });\n });\n</script>\n\n<!-- Hidden DOM elements required by services -->\n<input bind:this={fileInputRef} type=\"file\" style:display=\"none\" />\n<canvas bind:this={canvasRef} style:display=\"none\"></canvas>\n\n<!-- Render any active previews from any tool -->\n{#each Array.from(previews.entries()) as [toolId, preview] (toolId)}\n <PreviewRenderer {preview} {scale} />\n{/each}\n","<script lang=\"ts\">\n import { Rotation, type PdfAnnotationObject } from '@embedpdf/models';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n resizeUI,\n vertexUI,\n selectionOutlineColor,\n customAnnotationRenderer,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived(\n overrideRotation !== undefined\n ? overrideRotation\n : (documentState?.current?.rotation ?? Rotation.Degree0),\n );\n</script>\n\n<div\n id=\"annotation-layer\"\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n {...restProps}\n>\n <Annotations\n {documentId}\n {selectionMenu}\n {selectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {selectionOutlineColor}\n {customAnnotationRenderer}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["_a","root","$$anchor","root_6","root_1","root_2"],"mappings":"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"}
|