@embedpdf/plugin-annotation 1.5.0 → 2.0.0-next.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/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1760 -1444
- package/dist/index.js.map +1 -1
- package/dist/lib/actions.d.ts +58 -19
- package/dist/lib/annotation-plugin.d.ts +14 -5
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/reducer.d.ts +2 -1
- package/dist/lib/selectors.d.ts +10 -8
- package/dist/lib/types.d.ts +53 -10
- package/dist/preact/index.cjs +1 -1
- package/dist/preact/index.cjs.map +1 -1
- package/dist/preact/index.js +96 -48
- package/dist/preact/index.js.map +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +96 -48
- package/dist/react/index.js.map +1 -1
- package/dist/shared/components/annotation-container.d.ts +4 -3
- package/dist/shared/components/annotation-layer.d.ts +7 -7
- package/dist/shared/components/annotation-paint-layer.d.ts +2 -1
- package/dist/shared/components/annotations/stamp.d.ts +2 -1
- package/dist/shared/components/annotations.d.ts +3 -2
- package/dist/shared/components/render-annotation.d.ts +2 -1
- package/dist/shared/components/text-markup.d.ts +2 -1
- package/dist/shared/components/types.d.ts +7 -7
- package/dist/shared/hooks/use-annotation.d.ts +8 -4
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared-preact/components/annotation-container.d.ts +4 -3
- package/dist/shared-preact/components/annotation-layer.d.ts +7 -7
- package/dist/shared-preact/components/annotation-paint-layer.d.ts +2 -1
- package/dist/shared-preact/components/annotations/stamp.d.ts +2 -1
- package/dist/shared-preact/components/annotations.d.ts +3 -2
- package/dist/shared-preact/components/render-annotation.d.ts +2 -1
- package/dist/shared-preact/components/text-markup.d.ts +2 -1
- package/dist/shared-preact/components/types.d.ts +7 -7
- package/dist/shared-preact/hooks/use-annotation.d.ts +8 -4
- package/dist/shared-preact/index.d.ts +1 -0
- package/dist/shared-react/components/annotation-container.d.ts +4 -3
- package/dist/shared-react/components/annotation-layer.d.ts +7 -7
- package/dist/shared-react/components/annotation-paint-layer.d.ts +2 -1
- package/dist/shared-react/components/annotations/stamp.d.ts +2 -1
- package/dist/shared-react/components/annotations.d.ts +3 -2
- package/dist/shared-react/components/render-annotation.d.ts +2 -1
- package/dist/shared-react/components/text-markup.d.ts +2 -1
- package/dist/shared-react/components/types.d.ts +7 -7
- package/dist/shared-react/hooks/use-annotation.d.ts +8 -4
- package/dist/shared-react/index.d.ts +1 -0
- package/dist/svelte/components/AnnotationContainer.svelte.d.ts +26 -0
- package/dist/svelte/components/AnnotationLayer.svelte.d.ts +27 -0
- package/dist/svelte/components/AnnotationPaintLayer.svelte.d.ts +8 -0
- package/dist/svelte/components/Annotations.svelte.d.ts +22 -0
- package/dist/svelte/components/PreviewRenderer.svelte.d.ts +8 -0
- package/dist/svelte/components/RenderAnnotation.svelte.d.ts +13 -0
- package/dist/svelte/components/TextMarkup.svelte.d.ts +8 -0
- package/dist/svelte/components/annotations/Circle.svelte.d.ts +26 -0
- package/dist/svelte/components/annotations/FreeText.svelte.d.ts +15 -0
- package/dist/svelte/components/annotations/Ink.svelte.d.ts +14 -0
- package/dist/svelte/components/annotations/Line.svelte.d.ts +18 -0
- package/dist/svelte/components/annotations/Polygon.svelte.d.ts +19 -0
- package/dist/svelte/components/annotations/Polyline.svelte.d.ts +17 -0
- package/dist/svelte/components/annotations/Square.svelte.d.ts +16 -0
- package/dist/svelte/components/annotations/Stamp.svelte.d.ts +13 -0
- package/dist/svelte/components/annotations/index.d.ts +8 -0
- package/dist/svelte/components/index.d.ts +9 -0
- package/dist/svelte/components/text-markup/Highlight.svelte.d.ts +13 -0
- package/dist/svelte/components/text-markup/Squiggly.svelte.d.ts +13 -0
- package/dist/svelte/components/text-markup/Strikeout.svelte.d.ts +13 -0
- package/dist/svelte/components/text-markup/Underline.svelte.d.ts +13 -0
- package/dist/svelte/components/text-markup/index.d.ts +4 -0
- package/dist/svelte/components/types.d.ts +32 -0
- package/dist/svelte/hooks/index.d.ts +1 -0
- package/dist/svelte/hooks/use-annotation.svelte.d.ts +21 -0
- package/dist/svelte/index.cjs +2 -0
- package/dist/svelte/index.cjs.map +1 -0
- package/dist/svelte/index.d.ts +4 -0
- package/dist/svelte/index.js +3083 -0
- package/dist/svelte/index.js.map +1 -0
- package/dist/svelte/types.d.ts +54 -0
- package/dist/vue/components/annotation-container.vue.d.ts +10 -5
- package/dist/vue/components/annotation-layer.vue.d.ts +13 -7
- package/dist/vue/components/annotation-paint-layer.vue.d.ts +3 -1
- package/dist/vue/components/annotations/circle.vue.d.ts +2 -1
- package/dist/vue/components/annotations/free-text.vue.d.ts +2 -1
- package/dist/vue/components/annotations/ink.vue.d.ts +2 -1
- package/dist/vue/components/annotations/line.vue.d.ts +2 -1
- package/dist/vue/components/annotations/polygon.vue.d.ts +2 -1
- package/dist/vue/components/annotations/polyline.vue.d.ts +2 -1
- package/dist/vue/components/annotations/square.vue.d.ts +2 -1
- package/dist/vue/components/annotations/stamp.vue.d.ts +3 -1
- package/dist/vue/components/annotations.vue.d.ts +7 -3
- package/dist/vue/components/preview-renderer.vue.d.ts +2 -1
- package/dist/vue/components/render-annotation.vue.d.ts +3 -1
- package/dist/vue/components/text-markup/highlight.vue.d.ts +2 -1
- package/dist/vue/components/text-markup/squiggly.vue.d.ts +2 -1
- package/dist/vue/components/text-markup/strikeout.vue.d.ts +2 -1
- package/dist/vue/components/text-markup/underline.vue.d.ts +2 -1
- package/dist/vue/components/text-markup.vue.d.ts +3 -1
- package/dist/vue/hooks/use-annotation.d.ts +21 -2682
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.ts +1 -0
- package/dist/vue/index.js +354 -250
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/types.d.ts +23 -0
- package/package.json +19 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","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":["useAnnotationCapability","useCapability","AnnotationPlugin","id","useAnnotationPlugin","usePlugin","lockAspectRatio","propsClass","outlineOffset","zIndex","selectionOutlineColor","restProps","$","rest_props","$$props","preview","object","annotationCapability","gestureBaseRef","annotationProvides","derived","provides","forDocument","documentId","currentObject","trackedAnnotation","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","HANDLE_SIZE","size","VERTEX_SIZE","user_effect","set","interactionHandles","useInteractionHandles","controller","element","get","rect","vertices","vertexConfig","extractVertices","constraints","minWidth","minHeight","boundingBox","width","pageWidth","height","pageHeight","maintainAspectRatio","pageRotation","rotation","scale","enabled","isSelected","onUpdate","event","transformData","type","state","transformType","base","changes","transformAnnotation","patched","_c","metadata","sanitized","deepToRaw","updateAnnotation","pageIndex","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","resizeHandles","resize","vertexHandles","shouldShowMenu","selectionMenu","selectionMenuSnippet","menuPlacement","suggestTop","spaceAbove","spaceBelow","isDraggable","dragProps","left","origin","x","top","y","outline","cursor","annotation","children","onSelect","key","style","handleStyle","hProps","$$anchor","$$item","exclude_from_object","Component","component","consequent_1","$$render","alternate_1","vertexStyle","vProps","consequent_3","alternate_2","onDouble","onDoubleClick","menuProps","menuWrapperProps","context","selected","placement","buildMenuProps","result","result_component","spread_props","props","consequent_5","consequent_8","opacity","b","tabindex","onClick","Object","fromEntries","entries","map","k","v","thickness","r","amplitude","period","svg","svgDataUri","encodeURIComponent","paths","inkList","points","d","i","length","trim","each","styles","set_style","set_attribute","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","$$d","outerW","outerH","Math","max","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","innerW","innerH","cx","cy","rx","ry","peValue","ellipse","__pointerdown","e","__touchstart","styles_1","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","_b","lineEndings","transform","path","filled","consequent","path_1","localPts","pathData","first","rest","p","toAngle","a","startRad","endRad","path_2","stroke","allPoints","currentVertex","isPreview","isPreviewing","rect_1","fill","editorRef","isIOS","focus","selection","getSelection","call","window","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","user_pre_effect","nav","navigator","ios","test","userAgent","platform","maxTouchPoints","computedFontPx","fontSize","needsComp","isEditing","adjustedFontPx","scaleComp","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","bind_this","span","$$value","set_text","text","contents","fontColor","standardFontCss","fontFamily","textAlignmentToCss","textAlign","backgroundColor","innerText","scaleFactor","imageUrl","urlRef","handleImageLoad","URL","revokeObjectURL","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","annotationProp","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","annotations","proxy","selectionState","editingId","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationByPageIndex","off","onStateChange","handlers","onPointerDown","_","pe","target","currentTarget","deselectAnnotation","handleClick","stopPropagation","selectAnnotation","clear","register","tool","findToolForAnnotation","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","obj","noop","$0","interaction","$1","isResizable","$2","Multiply","linePoints","_object","isStamp","consequent_11","isFreeText","consequent_10","alternate","isPolygon","consequent_9","isPolyline","isLine","consequent_7","alternate_3","isHighlight","consequent_6","alternate_4","isSquiggly","alternate_5","isStrikeout","consequent_4","alternate_6","isUnderline","alternate_7","isCircle","consequent_2","alternate_8","isSquare","alternate_9","isInk","alternate_10","rects","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","defaults","PdfAnnotationSubtype","HIGHLIGHT","SQUIGGLY","STRIKEOUT","UNDERLINE","bounds","data","FREETEXT","INK","LINE","POLYLINE","POLYGON","SQUARE","CIRCLE","annotationPlugin","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","img","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","src","plugin","registerPageHandlers","onPreview","toolId","delete","input_1","canvas_1","Array","from","$$array","documentState","useDocumentState","page","current","pages","actualScale","actualRotation","Rotation","Degree0","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"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"}
|