@embedpdf/plugin-annotation 2.8.0 → 2.9.0

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.
Files changed (52) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +814 -139
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/geometry/cloudy-border.d.ts +90 -0
  6. package/dist/lib/geometry/index.d.ts +1 -0
  7. package/dist/lib/handlers/types.d.ts +2 -1
  8. package/dist/lib/tools/default-tools.d.ts +38 -87
  9. package/dist/lib/tools/types.d.ts +32 -1
  10. package/dist/preact/index.cjs +1 -1
  11. package/dist/preact/index.cjs.map +1 -1
  12. package/dist/preact/index.js +352 -239
  13. package/dist/preact/index.js.map +1 -1
  14. package/dist/react/index.cjs +1 -1
  15. package/dist/react/index.cjs.map +1 -1
  16. package/dist/react/index.js +352 -239
  17. package/dist/react/index.js.map +1 -1
  18. package/dist/shared/components/annotation-container.d.ts +4 -2
  19. package/dist/shared/components/annotations/circle.d.ts +6 -2
  20. package/dist/shared/components/annotations/polygon.d.ts +3 -1
  21. package/dist/shared/components/annotations/square.d.ts +6 -2
  22. package/dist/shared/components/types.d.ts +6 -2
  23. package/dist/shared-preact/components/annotation-container.d.ts +4 -2
  24. package/dist/shared-preact/components/annotations/circle.d.ts +6 -2
  25. package/dist/shared-preact/components/annotations/polygon.d.ts +3 -1
  26. package/dist/shared-preact/components/annotations/square.d.ts +6 -2
  27. package/dist/shared-preact/components/types.d.ts +6 -2
  28. package/dist/shared-react/components/annotation-container.d.ts +4 -2
  29. package/dist/shared-react/components/annotations/circle.d.ts +6 -2
  30. package/dist/shared-react/components/annotations/polygon.d.ts +3 -1
  31. package/dist/shared-react/components/annotations/square.d.ts +6 -2
  32. package/dist/shared-react/components/types.d.ts +6 -2
  33. package/dist/svelte/components/annotations/Circle.svelte.d.ts +3 -1
  34. package/dist/svelte/components/annotations/Polygon.svelte.d.ts +1 -0
  35. package/dist/svelte/components/annotations/Square.svelte.d.ts +3 -1
  36. package/dist/svelte/components/types.d.ts +2 -1
  37. package/dist/svelte/context/types.d.ts +6 -2
  38. package/dist/svelte/index.cjs +1 -1
  39. package/dist/svelte/index.cjs.map +1 -1
  40. package/dist/svelte/index.js +505 -293
  41. package/dist/svelte/index.js.map +1 -1
  42. package/dist/vue/components/annotation-container.vue.d.ts +7 -6
  43. package/dist/vue/components/annotations/circle.vue.d.ts +5 -1
  44. package/dist/vue/components/annotations/polygon.vue.d.ts +2 -0
  45. package/dist/vue/components/annotations/square.vue.d.ts +5 -1
  46. package/dist/vue/components/annotations.vue.d.ts +8 -9
  47. package/dist/vue/context/types.d.ts +6 -2
  48. package/dist/vue/index.cjs +1 -1
  49. package/dist/vue/index.cjs.map +1 -1
  50. package/dist/vue/index.js +259 -121
  51. package/dist/vue/index.js.map +1 -1
  52. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/svelte/context/renderer-registry.svelte.ts","../../src/svelte/components/RendererRegistryProvider.svelte","../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/AppearanceImage.svelte","../../src/shared/annotation-bounds.ts","../../src/svelte/components/GroupSelectionBox.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/Link.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/Text.svelte","../../src/svelte/components/built-in-renderers.ts","../../src/svelte/components/renderers/InkRenderer.svelte","../../src/svelte/components/renderers/SquareRenderer.svelte","../../src/svelte/components/renderers/CircleRenderer.svelte","../../src/svelte/components/renderers/LineRenderer.svelte","../../src/svelte/components/renderers/PolylineRenderer.svelte","../../src/svelte/components/renderers/PolygonRenderer.svelte","../../src/svelte/components/renderers/HighlightRenderer.svelte","../../src/svelte/components/renderers/UnderlineRenderer.svelte","../../src/svelte/components/renderers/StrikeoutRenderer.svelte","../../src/svelte/components/renderers/SquigglyRenderer.svelte","../../src/svelte/components/renderers/TextRenderer.svelte","../../src/svelte/components/annotations/Caret.svelte","../../src/svelte/components/renderers/CaretRenderer.svelte","../../src/svelte/components/renderers/FreeTextRenderer.svelte","../../src/svelte/components/renderers/StampRenderer.svelte","../../src/svelte/components/renderers/LinkRenderer.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/index.ts","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import { getContext, setContext } from 'svelte';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationRendererEntry,\n AnnotationRendererProps,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from './types';\nimport type { PdfAnnotationObject } from '@embedpdf/models';\nimport type { VertexConfig } from '../../shared/types';\nimport type { Component } from 'svelte';\n\n/**\n * Annotation Renderer Registry\n *\n * Allows external plugins to register custom annotation renderers\n * that integrate with the annotation layer.\n */\nexport interface AnnotationRendererRegistry {\n register(entries: BoxedAnnotationRenderer[]): () => void;\n getAll(): BoxedAnnotationRenderer[];\n}\n\nconst REGISTRY_KEY = Symbol('AnnotationRendererRegistry');\n\nexport function createRendererRegistry(): AnnotationRendererRegistry {\n let renderers = $state<BoxedAnnotationRenderer[]>([]);\n\n return {\n register(entries) {\n const ids = new Set(entries.map((e) => e.id));\n renderers = [...renderers.filter((r) => !ids.has(r.id)), ...entries];\n return () => {\n renderers = renderers.filter((r) => !entries.some((e) => e.id === r.id));\n };\n },\n getAll() {\n return renderers;\n },\n };\n}\n\nexport function provideRendererRegistry(): AnnotationRendererRegistry {\n const registry = createRendererRegistry();\n setContext(REGISTRY_KEY, registry);\n return registry;\n}\n\nexport function getRendererRegistry(): AnnotationRendererRegistry | null {\n return getContext<AnnotationRendererRegistry>(REGISTRY_KEY) ?? null;\n}\n\n/**\n * Factory to create a boxed renderer from a typed entry.\n */\nexport function createRenderer<T extends PdfAnnotationObject>(\n entry: AnnotationRendererEntry<T>,\n): BoxedAnnotationRenderer {\n return {\n id: entry.id,\n matches: entry.matches,\n component: entry.component as Component<AnnotationRendererProps>,\n vertexConfig: entry.vertexConfig as VertexConfig<PdfAnnotationObject> | undefined,\n zIndex: entry.zIndex,\n containerStyle: entry.containerStyle as\n | ((annotation: PdfAnnotationObject) => string)\n | undefined,\n interactionDefaults: entry.interactionDefaults,\n useAppearanceStream: entry.useAppearanceStream,\n isDraggable: entry.isDraggable,\n onDoubleClick: entry.onDoubleClick,\n selectOverride: entry.selectOverride as BoxedAnnotationRenderer['selectOverride'],\n hideSelectionMenu: entry.hideSelectionMenu as\n | ((annotation: PdfAnnotationObject) => boolean)\n | undefined,\n };\n}\n\n// Re-export types for convenience\nexport type {\n AnnotationRendererProps,\n AnnotationRendererEntry,\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n};\n","<script lang=\"ts\">\n import { provideRendererRegistry } from '../context';\n import type { Snippet } from 'svelte';\n\n let { children }: { children: Snippet } = $props();\n\n provideRendererRegistry();\n</script>\n\n{@render children()}\n","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 { getCounterRotation } from '@embedpdf/utils';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationCapability, useAnnotationPlugin } 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 { untrack } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n import { inferRotationCenterFromRects } from '../../lib/geometry/rotation';\n import AppearanceImage from './AppearanceImage.svelte';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isEditing = false,\n isMultiSelected = false,\n isDraggable,\n isResizable,\n isRotatable = true,\n lockAspectRatio = false,\n style,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n appearance,\n zIndex = 1,\n resizeUI,\n vertexUI,\n rotationUI,\n selectionOutlineColor,\n selectionOutline,\n customAnnotationRenderer,\n // Destructure props that shouldn't be passed to DOM elements\n groupSelectionMenu: _groupSelectionMenu,\n groupSelectionOutline: _groupSelectionOutline,\n annotationRenderers: _annotationRenderers,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T | null>(null);\n let liveRotation = $state<number | null>(null);\n let cursorScreen = $state<{ x: number; y: number } | null>(null);\n let isHandleHovered = $state(false);\n let gestureActive = $state(false);\n let annotationCapability = useAnnotationCapability();\n const annotationPlugin = useAnnotationPlugin();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBaseRef = $state<T | null>(null);\n let gestureBaseRectRef = $state<Rect | null>(null);\n\n // When multi-selected, disable individual drag/resize - GroupSelectionBox handles it\n const effectiveIsDraggable = $derived(\n permissions.canModifyAnnotations && isDraggable && !isMultiSelected,\n );\n const effectiveIsResizable = $derived(\n permissions.canModifyAnnotations && isResizable && !isMultiSelected,\n );\n const effectiveIsRotatable = $derived(\n permissions.canModifyAnnotations && isRotatable && !isMultiSelected,\n );\n\n // Wrap onDoubleClick to respect permissions\n const guardedOnDoubleClick = $derived(\n permissions.canModifyAnnotations && onDoubleClick ? onDoubleClick : undefined,\n );\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 // Annotation flags\n const annoFlags = $derived(trackedAnnotation.object.flags ?? []);\n const hasNoZoom = $derived(annoFlags.includes('noZoom'));\n const hasNoRotate = $derived(annoFlags.includes('noRotate'));\n // noZoom: maintain constant screen-pixel size regardless of zoom level.\n const visualScale = $derived(hasNoZoom ? 1 : scale);\n // noRotate: stay visually upright regardless of page rotation.\n const effectivePageRotation = $derived((hasNoRotate ? 0 : rotation) as typeof rotation);\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const ROTATION_COLOR = $derived(rotationUI?.color ?? 'white');\n const ROTATION_CONNECTOR_COLOR = $derived(rotationUI?.connectorColor ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n const ROTATION_SIZE = $derived(rotationUI?.size ?? 32);\n const ROTATION_MARGIN = $derived(rotationUI?.margin);\n const ROTATION_ICON_COLOR = $derived(rotationUI?.iconColor ?? '#007ACC');\n const SHOW_CONNECTOR = $derived(rotationUI?.showConnector ?? false);\n const ROTATION_BORDER_COLOR = $derived(rotationUI?.border?.color ?? '#007ACC');\n const ROTATION_BORDER_WIDTH = $derived(rotationUI?.border?.width ?? 1);\n const ROTATION_BORDER_STYLE = $derived(rotationUI?.border?.style ?? 'solid');\n\n // Outline resolution (new object > deprecated props > defaults)\n const outlineColor = $derived(selectionOutline?.color ?? selectionOutlineColor ?? '#007ACC');\n const outlineStyleVal = $derived(selectionOutline?.style ?? 'solid');\n const outlineWidth = $derived(selectionOutline?.width ?? 1);\n const outlineOff = $derived(selectionOutline?.offset ?? outlineOffset ?? 1);\n\n // Get annotation's current rotation (for simple shapes that store rotation)\n // During drag, use liveRotation if available; otherwise use the annotation's rotation\n const annotationRotation = $derived(liveRotation ?? (currentObject as any).rotation ?? 0);\n const rotationDisplay = $derived(liveRotation ?? (currentObject as any).rotation ?? 0);\n const normalizedRotationDisplay = $derived(\n Number.isFinite(rotationDisplay) ? Math.round(rotationDisplay * 10) / 10 : 0,\n );\n const rotationActive = $derived(liveRotation !== null);\n\n // Determine if we should show the outline\n // When multi-selected, don't show individual outlines - GroupSelectionBox shows the group outline\n const showOutline = $derived(isSelected && !isMultiSelected);\n\n // Geometry model:\n // - `rect` is the visible AABB container.\n // - `unrotatedRect` is the local editing frame for resize/vertex operations.\n const explicitUnrotatedRect = $derived((currentObject as any).unrotatedRect as Rect | undefined);\n const effectiveUnrotatedRect = $derived(explicitUnrotatedRect ?? currentObject.rect);\n const rotationPivot = $derived(\n explicitUnrotatedRect && annotationRotation !== 0\n ? inferRotationCenterFromRects(effectiveUnrotatedRect, currentObject.rect, annotationRotation)\n : undefined,\n );\n const controllerElement = $derived(effectiveUnrotatedRect);\n\n // Three-layer model dimensions\n // noZoom: use visualScale (=1) so the annotation keeps a constant screen-pixel size.\n // noRotate: counter-rotate the outer div so the annotation stays upright on rotated pages.\n const aabbWidth = $derived(currentObject.rect.size.width * visualScale);\n const aabbHeight = $derived(currentObject.rect.size.height * visualScale);\n const innerWidth = $derived(effectiveUnrotatedRect.size.width * visualScale);\n const innerHeight = $derived(effectiveUnrotatedRect.size.height * visualScale);\n const usesCustomPivot = $derived(Boolean(explicitUnrotatedRect) && annotationRotation !== 0);\n const innerLeft = $derived(\n usesCustomPivot\n ? (effectiveUnrotatedRect.origin.x - currentObject.rect.origin.x) * visualScale\n : (aabbWidth - innerWidth) / 2,\n );\n const innerTop = $derived(\n usesCustomPivot\n ? (effectiveUnrotatedRect.origin.y - currentObject.rect.origin.y) * visualScale\n : (aabbHeight - innerHeight) / 2,\n );\n const innerTransformOrigin = $derived(\n usesCustomPivot && rotationPivot\n ? `${(rotationPivot.x - effectiveUnrotatedRect.origin.x) * visualScale}px ${(rotationPivot.y - effectiveUnrotatedRect.origin.y) * visualScale}px`\n : 'center center',\n );\n const centerX = $derived(\n rotationPivot ? (rotationPivot.x - currentObject.rect.origin.x) * visualScale : aabbWidth / 2,\n );\n const centerY = $derived(\n rotationPivot ? (rotationPivot.y - currentObject.rect.origin.y) * visualScale : aabbHeight / 2,\n );\n const guideLength = $derived(Math.max(300, Math.max(aabbWidth, aabbHeight) + 80));\n // noRotate: compute counter-rotation to undo page rotation on this annotation's outer div.\n const counterRot = $derived(\n hasNoRotate\n ? getCounterRotation(\n { origin: { x: 0, y: 0 }, size: { width: aabbWidth, height: aabbHeight } },\n rotation,\n )\n : null,\n );\n\n const apActive = $derived(\n !!appearance?.normal && !gestureActive && !isEditing && !trackedAnnotation.dictMode,\n );\n\n // For children, override rect to use unrotatedRect so content renders in unrotated space\n const childObject = $derived.by(() => {\n if (explicitUnrotatedRect) {\n return { ...currentObject, rect: explicitUnrotatedRect };\n }\n return currentObject;\n });\n\n // Sync preview with tracked annotation when it changes\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = trackedAnnotation.object;\n }\n });\n\n // Subscribe to unified drag/resize/rotate changes - plugin sends pre-computed patches!\n // ALL preview updates come through here (primary, attached links, multi-select)\n $effect(() => {\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const id = trackedAnnotation.object.id;\n\n const handleEvent = (event: {\n documentId: string;\n type: string;\n previewPatches?: Record<string, any>;\n }) => {\n if (event.documentId !== documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation = null;\n }\n const patch = event.previewPatches?.[id];\n if (event.type === 'update' && patch) {\n // Use untrack to prevent tracking the read of preview (like Vue's toRaw)\n preview = { ...(untrack(() => preview) ?? trackedAnnotation.object), ...patch } as T;\n } else if (event.type === 'cancel') {\n preview = trackedAnnotation.object;\n }\n };\n\n const unsubs = [\n plugin.onDragChange(handleEvent),\n plugin.onResizeChange(handleEvent),\n plugin.onRotateChange(handleEvent),\n ];\n\n return () => unsubs.forEach((u) => u());\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: controllerElement,\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 annotationRotation: annotationRotation,\n rotationCenter: rotationPivot,\n rotationElement: currentObject.rect,\n scale: scale,\n // Disable interaction handles when multi-selected\n enabled: isSelected && !isMultiSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type || isMultiSelected) return;\n\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const { type, changes, metadata } = event.transformData;\n const id = trackedAnnotation.object.id;\n const pageSize = { width: pageWidth, height: pageHeight };\n\n // Gesture start - initialize plugin drag/resize\n if (event.state === 'start') {\n gestureBaseRectRef =\n (trackedAnnotation.object as any).unrotatedRect ?? trackedAnnotation.object.rect;\n gestureBaseRef = trackedAnnotation.object;\n\n if (type === 'resize' || type === 'vertex-edit') {\n gestureActive = true;\n }\n\n if (type === 'move') {\n plugin.startDrag(documentId, { annotationIds: [id], pageSize });\n } else if (type === 'resize') {\n plugin.startResize(documentId, {\n annotationIds: [id],\n pageSize,\n resizeHandle: metadata?.handle ?? 'se',\n });\n }\n }\n\n // Gesture update - call plugin, preview comes from subscription\n if (changes.rect && gestureBaseRectRef) {\n if (type === 'move') {\n const delta = {\n x: changes.rect.origin.x - gestureBaseRectRef.origin.x,\n y: changes.rect.origin.y - gestureBaseRectRef.origin.y,\n };\n plugin.updateDrag(documentId, delta);\n } else if (type === 'resize') {\n plugin.updateResize(documentId, changes.rect);\n }\n }\n\n // Vertex edit - handle directly (no attached link handling needed)\n if (type === 'vertex-edit' && changes.vertices && vertexConfig) {\n const base = gestureBaseRef ?? trackedAnnotation.object;\n const vertexChanges = vertexConfig.transformAnnotation(base, changes.vertices);\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type,\n changes: vertexChanges as Partial<T>,\n metadata,\n });\n if (patched) {\n preview = { ...(preview ?? trackedAnnotation.object), ...patched };\n if (event.state === 'end') {\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, id, sanitized);\n }\n }\n }\n\n // Rotation handling\n if (type === 'rotate') {\n const cursorAngle = metadata?.rotationAngle ?? annotationRotation;\n const cursorPos = metadata?.cursorPosition;\n if (cursorPos) cursorScreen = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation = cursorAngle;\n plugin.startRotation(documentId, {\n annotationIds: [id],\n cursorAngle,\n rotationCenter: metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation = cursorAngle;\n plugin.updateRotation(documentId, cursorAngle, metadata?.rotationDelta);\n } else if (event.state === 'end') {\n liveRotation = null;\n cursorScreen = null;\n plugin.commitRotation(documentId);\n }\n return;\n }\n\n // Gesture end - commit\n if (event.state === 'end') {\n gestureActive = false;\n gestureBaseRectRef = null;\n gestureBaseRef = null;\n if (type === 'move') plugin.commitDrag(documentId);\n else if (type === 'resize') plugin.commitResize(documentId);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOff,\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 rotationUI: {\n handleSize: ROTATION_SIZE,\n margin: ROTATION_MARGIN,\n zIndex: zIndex + 3,\n showConnector: SHOW_CONNECTOR,\n },\n includeVertices: vertexConfig ? true : false,\n includeRotation: effectiveIsRotatable,\n currentRotation: annotationRotation,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n const rotationHandle = $derived(interactionHandles.rotation);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu - hide when multi-selected or rotating\n const shouldShowMenu = $derived(\n isSelected &&\n !isMultiSelected &&\n !rotationActive &&\n (!!selectionMenu || !!selectionMenuSnippet),\n );\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 // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n // The handle's visual angle = annotationRotation + pageRotation (in degrees).\n // `rotation` is in quarter turns (0-3), so multiply by 90 to get degrees.\n // The menu (suggestTop: false) renders at the visual bottom (180deg).\n // Flip the menu to the top when the handle is in the bottom visual hemisphere\n // to prevent it from overlapping with the rotation handle.\n const effectiveAngle = (((annotationRotation + effectivePageRotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide = effectiveIsRotatable && effectiveAngle > 90 && effectiveAngle < 270;\n\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: {\n suggestTop: handleNearMenuSide,\n spaceAbove: 0,\n spaceBelow: 0,\n },\n menuWrapperProps,\n };\n }\n\n // Svelte action for portaling tooltip to document.body\n function portalToBody(node: HTMLElement) {\n document.body.appendChild(node);\n return {\n destroy() {\n if (node.parentNode === document.body) {\n document.body.removeChild(node);\n }\n },\n };\n }\n</script>\n\n<div data-no-interaction>\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <!-- Outer div: AABB container - stable center for help lines and rotation handle -->\n <div\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=\"{counterRot ? counterRot.width : aabbWidth}px\"\n style:height=\"{counterRot ? counterRot.height : aabbHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n style:transform={counterRot ? counterRot.matrix : undefined}\n style:transform-origin={counterRot ? '0 0' : undefined}\n style={style || ''}\n class={propsClass}\n {...restProps}\n >\n <!-- Rotation guide lines - anchored at stable AABB center -->\n {#if rotationActive}\n <!-- Fixed snap lines (cross at 0/90/180/270) -->\n <div\n style:position=\"absolute\"\n style:left=\"{centerX - guideLength / 2}px\"\n style:top=\"{centerY}px\"\n style:width=\"{guideLength}px\"\n style:height=\"1px\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <div\n style:position=\"absolute\"\n style:left=\"{centerX}px\"\n style:top=\"{centerY - guideLength / 2}px\"\n style:width=\"1px\"\n style:height=\"{guideLength}px\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <!-- Rotating indicator line showing current angle -->\n <div\n style:position=\"absolute\"\n style:left=\"{centerX - guideLength / 2}px\"\n style:top=\"{centerY}px\"\n style:width=\"{guideLength}px\"\n style:height=\"1px\"\n style:transform-origin=\"center center\"\n style:transform=\"rotate({annotationRotation}deg)\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.8\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n\n <!-- Rotation handle - orbits in AABB space, kept in DOM during rotation -->\n {#if isSelected && effectiveIsRotatable && rotationHandle}\n {#if rotationUI?.component}\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n {@render rotationUI.component({\n ...rotationHandle.handle,\n backgroundColor: ROTATION_COLOR,\n iconColor: ROTATION_ICON_COLOR,\n connectorStyle: `${rotationHandle.connector.style}; background-color: ${ROTATION_CONNECTOR_COLOR}; opacity: ${rotationActive ? 0 : 1};`,\n showConnector: SHOW_CONNECTOR,\n opacity: rotationActive ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR,\n width: ROTATION_BORDER_WIDTH,\n style: ROTATION_BORDER_STYLE,\n },\n })}\n </div>\n {:else}\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n <!-- Connector line -->\n {#if SHOW_CONNECTOR}\n <div\n style=\"{rotationHandle.connector\n .style}; background-color: {ROTATION_CONNECTOR_COLOR}; opacity: {rotationActive\n ? 0\n : 1};\"\n ></div>\n {/if}\n <!-- Rotation handle -->\n <div\n {...{\n onpointerdown: rotationHandle.handle.onpointerdown,\n onpointermove: rotationHandle.handle.onpointermove,\n onpointerup: rotationHandle.handle.onpointerup,\n onpointercancel: rotationHandle.handle.onpointercancel,\n }}\n style=\"{rotationHandle.handle\n .style}; background-color: {ROTATION_COLOR}; border: {ROTATION_BORDER_WIDTH}px {ROTATION_BORDER_STYLE} {ROTATION_BORDER_COLOR}; box-sizing: border-box; display: flex; align-items: center; justify-content: center; pointer-events: auto; opacity: {rotationActive\n ? 0\n : 1};\"\n >\n <svg\n width={Math.round(ROTATION_SIZE * 0.6)}\n height={Math.round(ROTATION_SIZE * 0.6)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={ROTATION_ICON_COLOR}\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n {/if}\n {/if}\n\n <!-- Inner div: rotated content area - holds content, resize handles, vertex handles -->\n <div\n {...effectiveIsDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: guardedOnDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{innerLeft}px\"\n style:top=\"{innerTop}px\"\n style:width=\"{innerWidth}px\"\n style:height=\"{innerHeight}px\"\n style:transform={annotationRotation !== 0 ? `rotate(${annotationRotation}deg)` : undefined}\n style:transform-origin={innerTransformOrigin}\n style:outline={showOutline ? `${outlineWidth}px ${outlineStyleVal} ${outlineColor}` : 'none'}\n style:outline-offset={showOutline ? `${outlineOff}px` : '0px'}\n style:pointer-events={isSelected && !isMultiSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && effectiveIsDraggable ? 'move' : 'default'}\n >\n <!-- Annotation content - renders in unrotated coordinate space -->\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: childObject,\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(childObject, { appearanceActive: apActive })}\n {/if}\n\n <!-- AP overlay canvas (always in DOM, toggled via display) -->\n {#if appearance?.normal}\n <AppearanceImage\n appearance={appearance.normal}\n style=\"display: {apActive ? 'block' : 'none'};\"\n />\n {/if}\n\n <!-- Resize handles - rotate with the shape -->\n {#if isSelected && effectiveIsResizable && !rotationActive}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({\n ...hProps,\n style: handleStyle,\n backgroundColor: HANDLE_COLOR,\n })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n <!-- Vertex handles - rotate with the shape -->\n {#if isSelected && permissions.canModifyAnnotations && !isMultiSelected && !rotationActive}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@render vertexUI.component({\n ...vProps,\n style: vertexStyle,\n backgroundColor: VERTEX_COLOR,\n })}\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet - hide when multi-selected or rotating -->\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 * visualScale,\n height: currentObject.rect.size.height * visualScale,\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\n <!-- Cursor-following rotation tooltip - portaled to document.body to escape CSS transform chain -->\n {#if (rotationActive || isHandleHovered) && cursorScreen}\n <div use:portalToBody>\n <div\n style:position=\"fixed\"\n style:left=\"{cursorScreen.x + 16}px\"\n style:top=\"{cursorScreen.y - 16}px\"\n style:background=\"rgba(0,0,0,0.8)\"\n style:color=\"#fff\"\n style:padding=\"4px 8px\"\n style:border-radius=\"4px\"\n style:font-size=\"12px\"\n style:font-family=\"monospace\"\n style:pointer-events=\"none\"\n style:z-index=\"10000\"\n style:white-space=\"nowrap\"\n >\n {normalizedRotationDisplay.toFixed(0)}°\n </div>\n </div>\n {/if}\n</div>\n","<script lang=\"ts\">\n import { type AnnotationAppearanceImage } from '@embedpdf/models';\n\n interface Props {\n appearance: AnnotationAppearanceImage<Blob>;\n style?: string;\n }\n\n let { appearance, style }: Props = $props();\n\n let imageUrl = $state<string | null>(null);\n let currentUrl: string | null = null;\n\n $effect(() => {\n const url = URL.createObjectURL(appearance.data);\n imageUrl = url;\n currentUrl = url;\n\n return () => {\n if (currentUrl) {\n URL.revokeObjectURL(currentUrl);\n currentUrl = null;\n }\n };\n });\n\n function handleLoad() {\n if (currentUrl) {\n URL.revokeObjectURL(currentUrl);\n currentUrl = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n src={imageUrl}\n alt=\"\"\n draggable=\"false\"\n onload={handleLoad}\n style=\"position: absolute; width: 100%; height: 100%; display: block; pointer-events: none; user-select: none; {style ??\n ''}\"\n />\n{/if}\n","import { Rotation } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface ScreenBounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nfunction mapCounterRotatePoint(\n x: number,\n y: number,\n width: number,\n height: number,\n rotation: Rotation,\n): { x: number; y: number } {\n switch (rotation) {\n case 1:\n return { x: y, y: height - x };\n case 2:\n return { x: width - x, y: height - y };\n case 3:\n return { x: width - y, y: x };\n default:\n return { x, y };\n }\n}\n\n/**\n * Compute the screen-space bounding box of an annotation, correctly accounting\n * for `noZoom` (constant pixel size regardless of zoom) and `noRotate`\n * (visually upright regardless of page rotation) annotation flags.\n */\nexport function getAnnotationScreenBounds(\n annotation: TrackedAnnotation,\n scale: number,\n rotation: Rotation,\n): ScreenBounds {\n const flags = annotation.object.flags ?? [];\n const hasNoZoom = flags.includes('noZoom');\n const hasNoRotate = flags.includes('noRotate');\n\n const left = annotation.object.rect.origin.x * scale;\n const top = annotation.object.rect.origin.y * scale;\n const width = annotation.object.rect.size.width * (hasNoZoom ? 1 : scale);\n const height = annotation.object.rect.size.height * (hasNoZoom ? 1 : scale);\n\n if (!hasNoRotate || rotation === 0) {\n return {\n left,\n top,\n right: left + width,\n bottom: top + height,\n };\n }\n\n const corners = [\n mapCounterRotatePoint(0, 0, width, height, rotation),\n mapCounterRotatePoint(width, 0, width, height, rotation),\n mapCounterRotatePoint(0, height, width, height, rotation),\n mapCounterRotatePoint(width, height, width, height, rotation),\n ];\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const corner of corners) {\n if (corner.x < minX) minX = corner.x;\n if (corner.y < minY) minY = corner.y;\n if (corner.x > maxX) maxX = corner.x;\n if (corner.y > maxY) maxY = corner.y;\n }\n\n return {\n left: left + minX,\n top: top + minY,\n right: left + maxX,\n bottom: top + maxY,\n };\n}\n","<!-- GroupSelectionBox.svelte -->\n<script lang=\"ts\">\n import { boundingRectOrEmpty, type Rect, type Rotation } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { getAnnotationScreenBounds } from '../../shared/annotation-bounds';\n import {\n useInteractionHandles,\n CounterRotate,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationPlugin } from '../hooks';\n import type {\n GroupSelectionContext,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import type { Snippet } from 'svelte';\n\n interface GroupSelectionBoxProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** All selected annotations on this page */\n selectedAnnotations: TrackedAnnotation[];\n /** Whether the group is draggable (all annotations must be group-draggable) */\n isDraggable: boolean;\n /** Whether the group is resizable (all annotations must be group-resizable) */\n isResizable: boolean;\n /** Whether the group can be rotated */\n isRotatable?: boolean;\n /** Whether to lock aspect ratio during group resize */\n lockAspectRatio?: boolean;\n /** Resize handle UI customization */\n resizeUI?: ResizeHandleUI;\n /** Rotation handle UI customization */\n rotationUI?: RotationHandleUI;\n /** @deprecated Use `selectionOutline.color` instead */\n selectionOutlineColor?: string;\n /** @deprecated Use `selectionOutline.offset` instead */\n outlineOffset?: number;\n /** Customize the selection outline (color, style, width, offset) */\n selectionOutline?: SelectionOutline;\n /** Z-index for the group box */\n zIndex?: number;\n /** Group selection menu render function */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n }\n\n let {\n documentId,\n pageIndex,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n selectedAnnotations,\n isDraggable,\n isResizable,\n isRotatable = true,\n lockAspectRatio = false,\n resizeUI,\n rotationUI,\n selectionOutlineColor,\n outlineOffset,\n selectionOutline,\n zIndex = 2,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n }: GroupSelectionBoxProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBase = $state<Rect | null>(null);\n let isDraggingRef = $state(false);\n let isResizingRef = $state(false);\n let liveRotation = $state<number | null>(null);\n let cursorScreen = $state<{ x: number; y: number } | null>(null);\n let isHandleHovered = $state(false);\n\n // Check permissions before allowing drag/resize/rotate\n const effectiveIsDraggable = $derived(permissions.canModifyAnnotations && isDraggable);\n const effectiveIsResizable = $derived(permissions.canModifyAnnotations && isResizable);\n const effectiveIsRotatable = $derived(permissions.canModifyAnnotations && isRotatable);\n\n // Helper to compute group box on demand\n function getGroupBox(): Rect {\n const rects = selectedAnnotations.map((ta) => ta.object.rect);\n return boundingRectOrEmpty(rects);\n }\n\n // Compute the group bounding box from all selected annotations (for reactive bindings)\n const groupBox = $derived.by(getGroupBox);\n\n // Preview state for the group box during drag/resize\n let previewGroupBox = $state<Rect>(getGroupBox());\n\n // Sync preview with actual group box when not dragging/resizing\n $effect(() => {\n if (!isDraggingRef && !isResizingRef) {\n const newBox = groupBox;\n // Only update if values actually changed (not just object reference)\n if (\n previewGroupBox.origin.x !== newBox.origin.x ||\n previewGroupBox.origin.y !== newBox.origin.y ||\n previewGroupBox.size.width !== newBox.size.width ||\n previewGroupBox.size.height !== newBox.size.height\n ) {\n previewGroupBox = newBox;\n }\n }\n });\n\n // Subscribe to rotation end events to clear live rotation\n $effect(() => {\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n const unsubscribe = plugin.onRotateChange((event: { documentId: string; type: string }) => {\n if (event.documentId !== documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation = null;\n }\n });\n return unsubscribe;\n });\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const ROTATION_COLOR = $derived(rotationUI?.color ?? 'white');\n const ROTATION_CONNECTOR_COLOR = $derived(rotationUI?.connectorColor ?? '#007ACC');\n const ROTATION_SIZE = $derived(rotationUI?.size ?? 32);\n const ROTATION_MARGIN = $derived(rotationUI?.margin);\n const ROTATION_ICON_COLOR = $derived(rotationUI?.iconColor ?? '#007ACC');\n const SHOW_CONNECTOR = $derived(rotationUI?.showConnector ?? false);\n const ROTATION_BORDER_COLOR = $derived(rotationUI?.border?.color ?? '#007ACC');\n const ROTATION_BORDER_WIDTH = $derived(rotationUI?.border?.width ?? 1);\n const ROTATION_BORDER_STYLE = $derived(rotationUI?.border?.style ?? 'solid');\n\n // Outline resolution (new object > deprecated props > group defaults)\n const outlineColor = $derived(selectionOutline?.color ?? selectionOutlineColor ?? '#007ACC');\n const outlineStyleVal = $derived(selectionOutline?.style ?? 'dashed');\n const outlineWidthVal = $derived(selectionOutline?.width ?? 2);\n const outlineOff = $derived(selectionOutline?.offset ?? outlineOffset ?? 2);\n\n const groupRotationDisplay = $derived(liveRotation ?? 0);\n const rotationActive = $derived(liveRotation !== null);\n const normalizedRotationDisplay = $derived(\n Number.isFinite(groupRotationDisplay) ? Math.round(groupRotationDisplay * 10) / 10 : 0,\n );\n\n // Compute visual bounds in screen pixels, accounting for mixed noZoom/noRotate selections.\n // The correction offsets let us adjust the previewGroupBox position/size during drag/resize\n // without re-running the per-annotation loop.\n const visualBoundsCorrection = $derived.by(() => {\n let visualLeft = Infinity;\n let visualTop = Infinity;\n let visualRight = -Infinity;\n let visualBottom = -Infinity;\n for (const ta of selectedAnnotations) {\n const bounds = getAnnotationScreenBounds(ta, scale, rotation as Rotation);\n if (bounds.left < visualLeft) visualLeft = bounds.left;\n if (bounds.top < visualTop) visualTop = bounds.top;\n if (bounds.right > visualRight) visualRight = bounds.right;\n if (bounds.bottom > visualBottom) visualBottom = bounds.bottom;\n }\n const logicalLeft = groupBox.origin.x * scale;\n const logicalTop = groupBox.origin.y * scale;\n const logicalRight = (groupBox.origin.x + groupBox.size.width) * scale;\n const logicalBottom = (groupBox.origin.y + groupBox.size.height) * scale;\n return {\n left: visualLeft - logicalLeft,\n top: visualTop - logicalTop,\n right: visualRight - logicalRight,\n bottom: visualBottom - logicalBottom,\n };\n });\n\n // Group box dimensions for guide lines and rotation handle positioning\n const groupBoxLeft = $derived(previewGroupBox.origin.x * scale + visualBoundsCorrection.left);\n const groupBoxTop = $derived(previewGroupBox.origin.y * scale + visualBoundsCorrection.top);\n const groupBoxWidth = $derived(\n previewGroupBox.size.width * scale +\n (visualBoundsCorrection.right - visualBoundsCorrection.left),\n );\n const groupBoxHeight = $derived(\n previewGroupBox.size.height * scale +\n (visualBoundsCorrection.bottom - visualBoundsCorrection.top),\n );\n const groupCenterX = $derived(groupBoxWidth / 2);\n const groupCenterY = $derived(groupBoxHeight / 2);\n const groupGuideLength = $derived(Math.max(300, Math.max(groupBoxWidth, groupBoxHeight) + 80));\n\n // Use interaction handles for both drag, resize, and rotation\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: previewGroupBox,\n constraints: {\n minWidth: 20,\n minHeight: 20,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n enabled: true,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n if (!annotationPlugin.plugin) return;\n\n const plugin = annotationPlugin.plugin;\n const transformType = event.transformData.type;\n const isMove = transformType === 'move';\n const isResize = transformType === 'resize';\n\n // Skip drag operations if group is not draggable\n if (isMove && !effectiveIsDraggable) return;\n\n if (event.state === 'start') {\n gestureBase = getGroupBox();\n\n if (isMove) {\n isDraggingRef = true;\n // Use unified drag API - plugin handles attached links automatically\n plugin.startDrag(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n });\n } else if (isResize) {\n isResizingRef = true;\n // Use unified resize API - plugin handles attached links automatically\n plugin.startResize(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n resizeHandle: event.transformData.metadata?.handle ?? 'se',\n });\n }\n }\n\n // Rotation handling\n if (transformType === 'rotate') {\n if (!isRotatable) return;\n const ids = selectedAnnotations.map((ta) => ta.object.id);\n const cursorAngle = event.transformData.metadata?.rotationAngle ?? 0;\n const cursorPos = event.transformData.metadata?.cursorPosition;\n if (cursorPos) cursorScreen = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation = cursorAngle;\n plugin.startRotation(documentId, {\n annotationIds: ids,\n cursorAngle,\n rotationCenter: event.transformData.metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation = cursorAngle;\n plugin.updateRotation(\n documentId,\n cursorAngle,\n event.transformData.metadata?.rotationDelta,\n );\n } else if (event.state === 'end') {\n liveRotation = null;\n cursorScreen = null;\n plugin.commitRotation(documentId);\n }\n return;\n }\n\n const base = gestureBase ?? getGroupBox();\n\n if (isMove && event.transformData.changes.rect) {\n // Calculate delta from original position\n const newRect = event.transformData.changes.rect;\n const rawDelta = {\n x: newRect.origin.x - base.origin.x,\n y: newRect.origin.y - base.origin.y,\n };\n\n // Plugin clamps delta and emits events (attached links receive updates too)\n const clampedDelta = plugin.updateDrag(documentId, rawDelta);\n\n // Update preview group box with clamped delta\n previewGroupBox = {\n ...base,\n origin: {\n x: base.origin.x + clampedDelta.x,\n y: base.origin.y + clampedDelta.y,\n },\n };\n } else if (isResize && event.transformData.changes.rect) {\n const newGroupBox = event.transformData.changes.rect;\n\n // Plugin computes rects for all participants and emits events\n plugin.updateResize(documentId, newGroupBox);\n\n // Update preview\n previewGroupBox = newGroupBox;\n }\n\n if (event.state === 'end') {\n gestureBase = null;\n\n if (isMove && isDraggingRef) {\n isDraggingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitDrag(documentId);\n } else if (isResize && isResizingRef) {\n isResizingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitResize(documentId);\n }\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOff,\n offsetMode: 'outside',\n includeSides: !lockAspectRatio,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: 0,\n zIndex: zIndex,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE,\n margin: ROTATION_MARGIN,\n zIndex: zIndex + 2,\n showConnector: SHOW_CONNECTOR,\n },\n includeVertices: false,\n includeRotation: effectiveIsRotatable,\n currentRotation: liveRotation ?? 0,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const rotationHandle = $derived(interactionHandles.rotation);\n\n // --- Group Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(!!groupSelectionMenu || !!groupSelectionMenuSnippet);\n\n // Build context object for group selection menu\n function buildContext(): GroupSelectionContext {\n return {\n type: 'group',\n annotations: selectedAnnotations,\n pageIndex,\n };\n }\n\n // Build menu props\n function buildMenuProps(rect: Rect, menuWrapperProps: MenuWrapperProps): GroupSelectionMenuProps {\n // The handle's visual angle = groupRotationDisplay + pageRotation (in degrees).\n // `rotation` is in quarter turns (0-3), so multiply by 90 to get degrees.\n // The menu (suggestTop: false) renders at the visual bottom (180deg).\n // Flip the menu to the top when the handle is in the bottom visual hemisphere\n // to prevent it from overlapping with the rotation handle.\n const effectiveAngle = (((groupRotationDisplay + rotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide = effectiveIsRotatable && effectiveAngle > 90 && effectiveAngle < 270;\n\n return {\n context: buildContext(),\n selected: true,\n rect,\n placement: { suggestTop: handleNearMenuSide },\n menuWrapperProps,\n };\n }\n\n // Svelte action for portaling tooltip to document.body\n function portalToBody(node: HTMLElement) {\n document.body.appendChild(node);\n return {\n destroy() {\n if (node.parentNode === document.body) {\n document.body.removeChild(node);\n }\n },\n };\n }\n</script>\n\n{#if selectedAnnotations.length >= 2}\n <div data-group-selection-box data-no-interaction>\n <!-- Outer div: AABB container - stable center for help lines and rotation handle -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupBoxLeft}px\"\n style:top=\"{groupBoxTop}px\"\n style:width=\"{groupBoxWidth}px\"\n style:height=\"{groupBoxHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n >\n <!-- Rotation guide lines - anchored at stable center -->\n {#if rotationActive}\n <!-- Fixed snap lines (cross at 0/90/180/270) -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX - groupGuideLength / 2}px\"\n style:top=\"{groupCenterY}px\"\n style:width=\"{groupGuideLength}px\"\n style:height=\"1px\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX}px\"\n style:top=\"{groupCenterY - groupGuideLength / 2}px\"\n style:width=\"1px\"\n style:height=\"{groupGuideLength}px\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <!-- Rotating indicator line showing current angle -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX - groupGuideLength / 2}px\"\n style:top=\"{groupCenterY}px\"\n style:width=\"{groupGuideLength}px\"\n style:height=\"1px\"\n style:transform-origin=\"center center\"\n style:transform=\"rotate({groupRotationDisplay}deg)\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.8\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n\n <!-- Rotation handle - orbits in AABB space -->\n {#if effectiveIsRotatable && rotationHandle}\n {#if rotationUI?.component}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n {@render rotationUI.component({\n ...rotationHandle.handle,\n backgroundColor: ROTATION_COLOR,\n iconColor: ROTATION_ICON_COLOR,\n connectorStyle: `${rotationHandle.connector.style}; background-color: ${ROTATION_CONNECTOR_COLOR}; opacity: ${rotationActive ? 0 : 1};`,\n showConnector: SHOW_CONNECTOR,\n opacity: rotationActive ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR,\n width: ROTATION_BORDER_WIDTH,\n style: ROTATION_BORDER_STYLE,\n },\n })}\n </div>\n {:else}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n <!-- Connector line -->\n {#if SHOW_CONNECTOR}\n <div\n style=\"{rotationHandle.connector\n .style}; background-color: {ROTATION_CONNECTOR_COLOR}; opacity: {rotationActive\n ? 0\n : 1};\"\n ></div>\n {/if}\n <!-- Rotation handle -->\n <div\n {...{\n onpointerdown: rotationHandle.handle.onpointerdown,\n onpointermove: rotationHandle.handle.onpointermove,\n onpointerup: rotationHandle.handle.onpointerup,\n onpointercancel: rotationHandle.handle.onpointercancel,\n }}\n style=\"{rotationHandle.handle\n .style}; background-color: {ROTATION_COLOR}; border: {ROTATION_BORDER_WIDTH}px {ROTATION_BORDER_STYLE} {ROTATION_BORDER_COLOR}; box-sizing: border-box; display: flex; align-items: center; justify-content: center; pointer-events: auto; opacity: {rotationActive\n ? 0\n : 1};\"\n >\n <svg\n width={Math.round(ROTATION_SIZE * 0.6)}\n height={Math.round(ROTATION_SIZE * 0.6)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={ROTATION_ICON_COLOR}\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n {/if}\n {/if}\n\n <!-- Inner div: group content area with outline and resize handles -->\n <div\n {...effectiveIsDraggable\n ? interactionHandles.dragProps\n : { onpointerdown: (e: PointerEvent) => e.stopPropagation() }}\n style:position=\"absolute\"\n style:left=\"0px\"\n style:top=\"0px\"\n style:width=\"{groupBoxWidth}px\"\n style:height=\"{groupBoxHeight}px\"\n style:outline={rotationActive\n ? 'none'\n : `${outlineWidthVal}px ${outlineStyleVal} ${outlineColor}`}\n style:outline-offset=\"{outlineOff - 1}px\"\n style:cursor={effectiveIsDraggable ? 'move' : 'default'}\n style:touch-action=\"none\"\n style:pointer-events=\"auto\"\n >\n <!-- Resize handles -->\n {#if effectiveIsResizable && !rotationActive}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({\n ...hProps,\n style: handleStyle,\n backgroundColor: HANDLE_COLOR,\n })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n </div>\n\n <!-- Cursor-following rotation tooltip -->\n {#if (rotationActive || isHandleHovered) && cursorScreen}\n <div use:portalToBody>\n <div\n style:position=\"fixed\"\n style:left=\"{cursorScreen.x + 16}px\"\n style:top=\"{cursorScreen.y - 16}px\"\n style:background=\"rgba(0,0,0,0.8)\"\n style:color=\"#fff\"\n style:padding=\"4px 8px\"\n style:border-radius=\"4px\"\n style:font-size=\"12px\"\n style:font-family=\"monospace\"\n style:pointer-events=\"none\"\n style:z-index=\"10000\"\n style:white-space=\"nowrap\"\n >\n {normalizedRotationDisplay.toFixed(0)}°\n </div>\n </div>\n {/if}\n\n <!-- Group selection menu -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: groupBoxLeft,\n y: groupBoxTop,\n },\n size: {\n width: groupBoxWidth,\n height: groupBoxHeight,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if groupSelectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = groupSelectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if groupSelectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render groupSelectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n </div>\n{/if}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface InkProps {\n isSelected: boolean;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n strokeColor,\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n }: InkProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#000000');\n\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 const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n {#each paths as d, i (`hit-${i}`)}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n {d}\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#each paths as d, i (`vis-${i}`)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={resolvedColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface SquareProps {\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\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 appearanceActive = false,\n }: SquareProps = $props();\n\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 const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 overflow=\"visible\"\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <rect\n {x}\n {y}\n {width}\n {height}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n />\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n {/if}\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface CircleProps {\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\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 appearanceActive = false,\n }: CircleProps = $props();\n\n const { width, height, cx, cy, rx, ry } = $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\n return {\n width: outerW,\n height: outerH,\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 let hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n overflow=\"visible\"\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n />\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n {/if}\n</svg>\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 const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface LineProps {\n color?: string;\n opacity?: number;\n strokeWidth: number;\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) => void;\n isSelected: boolean;\n appearanceActive?: 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 appearanceActive = false,\n }: LineProps = $props();\n\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 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 const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {#if endings.start}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n {#if endings.end}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface PolylineProps {\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) => void;\n lineEndings?: LineEndings;\n appearanceActive?: boolean;\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 lineEndings,\n appearanceActive = false,\n }: PolylineProps = $props();\n\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\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 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]);\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]);\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI,\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad,\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 const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={pathData}\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\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 {#if endings.start}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n {#if endings.end}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <path\n d={pathData}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\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) => void;\n currentVertex?: Position;\n handleSize?: number;\n appearanceActive?: boolean;\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 appearanceActive = false,\n }: PolygonProps = $props();\n\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\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 const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={pathData}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\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 />\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <path\n d={pathData}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\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 style:pointer-events=\"none\"\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 style:pointer-events=\"none\"\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCssProperties,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\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) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n documentId,\n isSelected,\n isEditing,\n annotation,\n pageIndex,\n scale,\n onClick,\n appearanceActive = false,\n }: FreeTextProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n let editingRef = false;\n\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editingRef = true;\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 $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 function handleBlur() {\n if (!editingRef) return;\n editingRef = false;\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\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 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\n const fontCss = $derived(standardFontCssProperties(annotation.object.fontFamily));\n</script>\n\n<div\n role=\"button\"\n tabindex={-1}\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 style:opacity={appearanceActive ? 0 : 1}\n onpointerdown={onClick}\n>\n <span\n bind:this={editorRef}\n role=\"textbox\"\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={fontCss.fontFamily}\n style:font-weight={fontCss.fontWeight}\n style:font-style={fontCss.fontStyle}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.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 unrotated?: boolean;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n unrotated = false,\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 unrotated,\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) => 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 const unrotated = $derived(!!annotation.object.rotation && !!annotation.object.unrotatedRect);\n</script>\n\n<div\n role=\"button\"\n tabindex={-1}\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>\n <RenderAnnotation\n {documentId}\n {pageIndex}\n annotation={annotationProp}\n scaleFactor={scale}\n {unrotated}\n />\n</div>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface LinkProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Stroke colour – defaults to blue when omitted */\n strokeColor?: string;\n /** Stroke width in PDF units */\n strokeWidth?: number;\n /** Stroke type – defaults to underline when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – for dashed style */\n strokeDashArray?: number[];\n /** Bounding box of the annotation (PDF units) */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Click handler (used for selection) */\n onClick?: (e: MouseEvent) => void;\n /** Whether this link has an IRT (In Reply To) reference - disables direct interaction */\n hasIRT?: boolean;\n }\n\n let {\n isSelected,\n strokeColor = '#0000FF',\n strokeWidth = 2,\n strokeStyle = PdfAnnotationBorderStyle.UNDERLINE,\n strokeDashArray,\n rect,\n scale,\n onClick,\n hasIRT = false,\n }: LinkProps = $props();\n\n const width = $derived(rect.size.width);\n const height = $derived(rect.size.height);\n const svgWidth = $derived(width * scale);\n const svgHeight = $derived(height * scale);\n\n // Calculate dash array for SVG\n const dashArray = $derived.by(() => {\n if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n return strokeDashArray?.join(',') ?? `${strokeWidth * 3},${strokeWidth}`;\n }\n return undefined;\n });\n\n // For underline style, render a line at the bottom\n // For solid/dashed, render a rectangle border\n const isUnderline = $derived(strokeStyle === PdfAnnotationBorderStyle.UNDERLINE);\n\n const hitAreaCursor = $derived(hasIRT ? 'default' : isSelected ? 'move' : 'pointer');\n const hitAreaPointerEvents = $derived(hasIRT ? 'none' : isSelected ? 'none' : 'visible');\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; pointer-events: none;\"\n style:width=\"{svgWidth}px\"\n style:height=\"{svgHeight}px\"\n width={svgWidth}\n height={svgHeight}\n viewBox=\"0 0 {width} {height}\"\n>\n <!-- Invisible hit area for the entire link region -->\n <!-- IRT links are not directly clickable - interaction goes through parent -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <rect\n x={0}\n y={0}\n {width}\n {height}\n fill=\"transparent\"\n onpointerdown={hasIRT ? undefined : onClick}\n style:cursor={hitAreaCursor}\n style:pointer-events={hitAreaPointerEvents}\n />\n\n {#if isUnderline}\n <!-- Underline style: line at bottom of rect -->\n <line\n x1={1}\n y1={height - 1}\n x2={width - 1}\n y2={height - 1}\n stroke={strokeColor}\n stroke-width={strokeWidth}\n stroke-dasharray={dashArray}\n style:pointer-events=\"none\"\n />\n {:else}\n <!-- Solid/Dashed style: rectangle border -->\n <rect\n x={strokeWidth / 2}\n y={strokeWidth / 2}\n width={Math.max(width - strokeWidth, 0)}\n height={Math.max(height - strokeWidth, 0)}\n fill=\"transparent\"\n stroke={strokeColor}\n stroke-width={strokeWidth}\n stroke-dasharray={dashArray}\n style:pointer-events=\"none\"\n />\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: HighlightProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={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={appearanceActive ? 'transparent' : resolvedColor}\n style:opacity={appearanceActive ? undefined : 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 /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: UnderlineProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\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 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 -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\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={resolvedColor}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: StrikeoutProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\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 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 -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\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={resolvedColor}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: SquigglyProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\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=\"${resolvedColor}\" 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 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 -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\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 {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import { getContrastStrokeColor } from '@embedpdf/models';\n\n interface TextProps {\n isSelected: boolean;\n color?: string;\n opacity?: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n color = '#facc15',\n opacity = 1,\n onClick,\n appearanceActive = false,\n }: TextProps = $props();\n\n const lineColor = $derived(getContrastStrokeColor(color));\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div\n style:position=\"absolute\"\n style:inset=\"0\"\n style:z-index=\"2\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor={isSelected ? 'move' : 'pointer'}\n onpointerdown={onClick}\n>\n {#if !appearanceActive}\n <svg\n style:position=\"absolute\"\n style:inset=\"0\"\n style:pointer-events=\"none\"\n viewBox=\"0 0 20 20\"\n width=\"100%\"\n height=\"100%\"\n >\n <path\n d=\"M 0.5 15.5 L 0.5 0.5 L 19.5 0.5 L 19.5 15.5 L 8.5 15.5 L 6.5 19.5 L 4.5 15.5 Z\"\n fill={color}\n {opacity}\n stroke={lineColor}\n stroke-width=\"1\"\n stroke-linejoin=\"miter\"\n />\n <line x1=\"2.5\" y1=\"4.25\" x2=\"17.5\" y2=\"4.25\" stroke={lineColor} stroke-width=\"1\" />\n <line x1=\"2.5\" y1=\"8\" x2=\"17.5\" y2=\"8\" stroke={lineColor} stroke-width=\"1\" />\n <line x1=\"2.5\" y1=\"11.75\" x2=\"17.5\" y2=\"11.75\" stroke={lineColor} stroke-width=\"1\" />\n </svg>\n {/if}\n</div>\n","import {\n PdfAnnotationSubtype,\n PdfAnnotationObject,\n PdfBlendMode,\n PdfInkAnnoObject,\n PdfSquareAnnoObject,\n PdfCircleAnnoObject,\n PdfLineAnnoObject,\n PdfPolylineAnnoObject,\n PdfPolygonAnnoObject,\n PdfFreeTextAnnoObject,\n PdfStampAnnoObject,\n PdfLinkAnnoObject,\n PdfHighlightAnnoObject,\n PdfUnderlineAnnoObject,\n PdfStrikeOutAnnoObject,\n PdfSquigglyAnnoObject,\n PdfCaretAnnoObject,\n PdfTextAnnoObject,\n blendModeToCss,\n} from '@embedpdf/models';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from '../context';\nimport { createRenderer } from '../context/renderer-registry.svelte';\n\nimport InkWrapper from './renderers/InkRenderer.svelte';\nimport SquareWrapper from './renderers/SquareRenderer.svelte';\nimport CircleWrapper from './renderers/CircleRenderer.svelte';\nimport LineWrapper from './renderers/LineRenderer.svelte';\nimport PolylineWrapper from './renderers/PolylineRenderer.svelte';\nimport PolygonWrapper from './renderers/PolygonRenderer.svelte';\nimport FreeTextWrapper from './renderers/FreeTextRenderer.svelte';\nimport StampWrapper from './renderers/StampRenderer.svelte';\nimport LinkWrapper from './renderers/LinkRenderer.svelte';\nimport HighlightWrapper from './renderers/HighlightRenderer.svelte';\nimport UnderlineWrapper from './renderers/UnderlineRenderer.svelte';\nimport StrikeoutWrapper from './renderers/StrikeoutRenderer.svelte';\nimport SquigglyWrapper from './renderers/SquigglyRenderer.svelte';\nimport CaretWrapper from './renderers/CaretRenderer.svelte';\nimport TextWrapper from './renderers/TextRenderer.svelte';\n\nexport const builtInRenderers: BoxedAnnotationRenderer[] = [\n createRenderer<PdfInkAnnoObject>({\n id: 'ink',\n matches: (a): a is PdfInkAnnoObject => a.type === PdfAnnotationSubtype.INK,\n component: InkWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfSquareAnnoObject>({\n id: 'square',\n matches: (a): a is PdfSquareAnnoObject => a.type === PdfAnnotationSubtype.SQUARE,\n component: SquareWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfCircleAnnoObject>({\n id: 'circle',\n matches: (a): a is PdfCircleAnnoObject => a.type === PdfAnnotationSubtype.CIRCLE,\n component: CircleWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLineAnnoObject>({\n id: 'line',\n matches: (a): a is PdfLineAnnoObject => a.type === PdfAnnotationSubtype.LINE,\n component: LineWrapper,\n vertexConfig: {\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, v) => ({\n ...a,\n linePoints: { start: v[0], end: v[1] },\n }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfPolylineAnnoObject>({\n id: 'polyline',\n matches: (a): a is PdfPolylineAnnoObject => a.type === PdfAnnotationSubtype.POLYLINE,\n component: PolylineWrapper,\n vertexConfig: {\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfPolygonAnnoObject>({\n id: 'polygon',\n matches: (a): a is PdfPolygonAnnoObject => a.type === PdfAnnotationSubtype.POLYGON,\n component: PolygonWrapper,\n vertexConfig: {\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfHighlightAnnoObject>({\n id: 'highlight',\n matches: (a): a is PdfHighlightAnnoObject => a.type === PdfAnnotationSubtype.HIGHLIGHT,\n component: HighlightWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n containerStyle: (a) =>\n `mix-blend-mode: ${blendModeToCss(a.blendMode ?? PdfBlendMode.Multiply)}`,\n }),\n\n createRenderer<PdfUnderlineAnnoObject>({\n id: 'underline',\n matches: (a): a is PdfUnderlineAnnoObject => a.type === PdfAnnotationSubtype.UNDERLINE,\n component: UnderlineWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfStrikeOutAnnoObject>({\n id: 'strikeout',\n matches: (a): a is PdfStrikeOutAnnoObject => a.type === PdfAnnotationSubtype.STRIKEOUT,\n component: StrikeoutWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfSquigglyAnnoObject>({\n id: 'squiggly',\n matches: (a): a is PdfSquigglyAnnoObject => a.type === PdfAnnotationSubtype.SQUIGGLY,\n component: SquigglyWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfTextAnnoObject>({\n id: 'text',\n matches: (a): a is PdfTextAnnoObject => a.type === PdfAnnotationSubtype.TEXT && !a.inReplyToId,\n component: TextWrapper,\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfCaretAnnoObject>({\n id: 'caret',\n matches: (a): a is PdfCaretAnnoObject => a.type === PdfAnnotationSubtype.CARET,\n component: CaretWrapper,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfFreeTextAnnoObject>({\n id: 'freeText',\n matches: (a): a is PdfFreeTextAnnoObject => a.type === PdfAnnotationSubtype.FREETEXT,\n component: FreeTextWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n isDraggable: (toolDraggable, { isEditing }) => toolDraggable && !isEditing,\n onDoubleClick: (id, setEditingId) => setEditingId(id),\n }),\n\n createRenderer<PdfStampAnnoObject>({\n id: 'stamp',\n matches: (a): a is PdfStampAnnoObject => a.type === PdfAnnotationSubtype.STAMP,\n component: StampWrapper,\n useAppearanceStream: false,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLinkAnnoObject>({\n id: 'link',\n matches: (a): a is PdfLinkAnnoObject => a.type === PdfAnnotationSubtype.LINK,\n component: LinkWrapper,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n useAppearanceStream: false,\n selectOverride: (e, annotation, helpers) => {\n e.stopPropagation();\n helpers.clearSelection();\n if (annotation.object.inReplyToId) {\n const parent = helpers.allAnnotations.find(\n (a) => a.object.id === annotation.object.inReplyToId,\n );\n if (parent) {\n helpers.selectAnnotation(parent.object.pageIndex, parent.object.id);\n return;\n }\n }\n helpers.selectAnnotation(helpers.pageIndex, annotation.object.id);\n },\n hideSelectionMenu: (a) => !!a.inReplyToId,\n }),\n];\n","<script lang=\"ts\">\n import type { PdfInkAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Ink from '../annotations/Ink.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfInkAnnoObject> = $props();\n</script>\n\n<Ink {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfSquareAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Square from '../annotations/Square.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfSquareAnnoObject> = $props();\n</script>\n\n<Square {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfCircleAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Circle from '../annotations/Circle.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfCircleAnnoObject> = $props();\n</script>\n\n<Circle {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfLineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Line from '../annotations/Line.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfLineAnnoObject> = $props();\n</script>\n\n<Line {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfPolylineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Polyline from '../annotations/Polyline.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfPolylineAnnoObject> = $props();\n</script>\n\n<Polyline {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfPolygonAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Polygon from '../annotations/Polygon.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfPolygonAnnoObject> = $props();\n</script>\n\n<Polygon {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfHighlightAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Highlight from '../text-markup/Highlight.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfHighlightAnnoObject> = $props();\n</script>\n\n<Highlight {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfUnderlineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Underline from '../text-markup/Underline.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfUnderlineAnnoObject> = $props();\n</script>\n\n<Underline {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfStrikeOutAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Strikeout from '../text-markup/Strikeout.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfStrikeOutAnnoObject> = $props();\n</script>\n\n<Strikeout {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfSquigglyAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Squiggly from '../text-markup/Squiggly.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfSquigglyAnnoObject> = $props();\n</script>\n\n<Squiggly {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfTextAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Text from '../annotations/Text.svelte';\n\n let {\n currentObject,\n isSelected,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfTextAnnoObject> = $props();\n</script>\n\n<Text\n {isSelected}\n color={currentObject.strokeColor ?? currentObject.color}\n opacity={currentObject.opacity}\n {onClick}\n {appearanceActive}\n/>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface CaretProps {\n isSelected: boolean;\n strokeColor?: string;\n opacity?: number;\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n strokeColor = '#000000',\n opacity = 1,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n }: CaretProps = $props();\n\n const { width, height, path } = $derived.by(() => {\n const w = rect.size.width;\n const h = rect.size.height;\n const midX = w / 2;\n\n const d = [\n `M 0 ${h}`,\n `C ${w * 0.27} ${h} ${midX} ${h - h * 0.44} ${midX} 0`,\n `C ${midX} ${h - h * 0.44} ${w - w * 0.27} ${h} ${w} ${h}`,\n 'Z',\n ].join(' ');\n\n return { width: w, height: h, path: d };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\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 width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n overflow=\"visible\"\n>\n <!-- Hit area -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={path}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={4}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={isSelected ? 'none' : 'visible'}\n />\n <!-- Visual -->\n {#if !appearanceActive}\n <path\n d={path}\n fill={strokeColor}\n stroke={strokeColor}\n stroke-width={0.5}\n {opacity}\n fill-rule=\"evenodd\"\n style:pointer-events=\"none\"\n />\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { PdfCaretAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Caret from '../annotations/Caret.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfCaretAnnoObject> = $props();\n</script>\n\n<Caret {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfFreeTextAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import FreeText from '../annotations/FreeText.svelte';\n\n let {\n annotation,\n currentObject,\n isSelected,\n isEditing,\n scale,\n pageIndex,\n documentId,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfFreeTextAnnoObject> = $props();\n</script>\n\n<FreeText\n {documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object: currentObject }}\n {pageIndex}\n {scale}\n {onClick}\n {appearanceActive}\n/>\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Stamp from '../annotations/Stamp.svelte';\n\n let {\n annotation,\n isSelected,\n documentId,\n pageIndex,\n scale,\n onClick,\n }: AnnotationRendererProps<PdfStampAnnoObject> = $props();\n</script>\n\n<Stamp {documentId} {isSelected} {annotation} {pageIndex} {scale} {onClick} />\n","<script lang=\"ts\">\n import type { PdfLinkAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Link from '../annotations/Link.svelte';\n\n let { currentObject, isSelected, scale, onClick }: AnnotationRendererProps<PdfLinkAnnoObject> =\n $props();\n</script>\n\n<Link {...currentObject} {isSelected} {scale} {onClick} hasIRT={!!currentObject.inReplyToId} />\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import {\n blendModeToCss,\n type PdfAnnotationObject,\n PdfBlendMode,\n type AnnotationAppearanceMap,\n type AnnotationAppearances,\n } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationIds,\n type TrackedAnnotation,\n resolveInteractionProp,\n } from '@embedpdf/plugin-annotation';\n\n import {\n type PointerEventHandlersWithLifecycle,\n type EmbedPdfPointerEvent,\n } 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 import type {\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n } from '../context';\n\n import GroupSelectionBox from './GroupSelectionBox.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n import { builtInRenderers } from './built-in-renderers';\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 selectionMenu?: AnnotationSelectionMenuRenderFn;\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n rotationUI?: RotationHandleUI;\n /** @deprecated Use `selectionOutline` instead */\n selectionOutlineColor?: string;\n selectionOutline?: SelectionOutline;\n groupSelectionOutline?: SelectionOutline;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n annotationRenderers?: BoxedAnnotationRenderer[];\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 allSelectedIds = $state<string[]>([]);\n let editingId = $state<string | null>(null);\n let appearanceMap = $state<AnnotationAppearanceMap<Blob>>({});\n let prevScale: number = annotationsProps.scale;\n\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n const isMultiSelected = $derived(allSelectedIds.length > 1);\n\n // Merge renderers: external renderers override built-ins by ID\n const allRenderers = $derived.by(() => {\n const external = annotationsProps.annotationRenderers ?? [];\n const externalIds = new Set(external.map((r) => r.id));\n return [...external, ...builtInRenderers.filter((r) => !externalIds.has(r.id))];\n });\n\n function resolveRenderer(annotation: TrackedAnnotation): BoxedAnnotationRenderer | null {\n return allRenderers.find((r) => r.matches(annotation.object)) ?? null;\n }\n\n function getAppearanceForAnnotation(ta: TrackedAnnotation): AnnotationAppearances<Blob> | null {\n if (ta.dictMode) return null;\n if (ta.object.rotation && ta.object.unrotatedRect) return null;\n const appearances = appearanceMap[ta.object.id];\n if (!appearances?.normal) return null;\n return appearances;\n }\n\n // Subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(currentState);\n\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(state);\n });\n return () => off?.();\n });\n\n // Fetch appearance map, invalidate on scale change\n $effect(() => {\n if (!annotationProvides) return;\n\n if (prevScale !== annotationsProps.scale) {\n annotationProvides.invalidatePageAppearances(annotationsProps.pageIndex);\n prevScale = annotationsProps.scale;\n }\n\n const task = annotationProvides.getPageAppearances(annotationsProps.pageIndex, {\n scaleFactor: annotationsProps.scale,\n dpr: typeof window !== 'undefined' ? window.devicePixelRatio : 1,\n });\n task.wait(\n (map) => (appearanceMap = map),\n () => (appearanceMap = {}),\n );\n });\n\n // Pointer handlers\n const handlers: PointerEventHandlersWithLifecycle<EmbedPdfPointerEvent<PointerEvent>> = {\n onPointerDown: (_, pe) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n function handleClick(e: AnnotationInteractionEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n selectionCapability.provides.clear();\n\n const isModifierPressed = 'metaKey' in e ? e.metaKey || e.ctrlKey : false;\n\n if (isModifierPressed) {\n annotationProvides.toggleSelection(annotationsProps.pageIndex, annotation.object.id);\n } else {\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n }\n\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n\n function setEditingId(id: string) {\n editingId = id;\n }\n\n const selectedAnnotationsOnPage = $derived(\n annotations.filter((anno) => allSelectedIds.includes(anno.object.id)),\n );\n\n const areAllSelectedDraggable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupDraggable = resolveInteractionProp(\n tool?.interaction.isGroupDraggable,\n ta.object,\n true,\n );\n const singleDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupDraggable !== undefined ? groupDraggable : singleDraggable;\n });\n });\n\n const areAllSelectedResizable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupResizable = resolveInteractionProp(\n tool?.interaction.isGroupResizable,\n ta.object,\n true,\n );\n const singleResizable = resolveInteractionProp(\n tool?.interaction.isResizable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupResizable !== undefined ? groupResizable : singleResizable;\n });\n });\n\n const areAllSelectedRotatable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupRotatable = resolveInteractionProp(\n tool?.interaction.isGroupRotatable,\n ta.object,\n true,\n );\n const singleRotatable = resolveInteractionProp(\n tool?.interaction.isRotatable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupRotatable !== undefined ? groupRotatable : singleRotatable;\n });\n });\n\n const shouldLockGroupAspectRatio = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.some((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupLock = resolveInteractionProp(\n tool?.interaction.lockGroupAspectRatio,\n ta.object,\n false,\n );\n const singleLock = resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n ta.object,\n false,\n );\n return tool?.interaction.lockGroupAspectRatio !== undefined ? groupLock : singleLock;\n });\n });\n\n const allSelectedOnSamePage = $derived.by(() => {\n if (!annotationProvides) return false;\n if (allSelectedIds.length < 2) return false;\n const allSelected = annotationProvides.getSelectedAnnotations();\n return allSelected.every((ta) => ta.object.pageIndex === annotationsProps.pageIndex);\n });\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const renderer = resolveRenderer(annotation)}\n {#if renderer}\n {@const isSelected = allSelectedIds.includes(annotation.object.id)}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const defaults = renderer.interactionDefaults}\n {@const resolvedDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n defaults?.isDraggable ?? true,\n )}\n {@const finalDraggable = renderer.isDraggable\n ? renderer.isDraggable(resolvedDraggable, { isEditing })\n : resolvedDraggable}\n {@const useAP = tool?.behavior?.useAppearanceStream ?? renderer.useAppearanceStream ?? true}\n {@const selectHelpers = {\n defaultSelect: handleClick,\n selectAnnotation: (pi: number, id: string) => annotationProvides?.selectAnnotation(pi, id),\n clearSelection: () => selectionCapability.provides?.clear(),\n allAnnotations: annotations,\n pageIndex: annotationsProps.pageIndex,\n }}\n {@const onSelect = renderer.selectOverride\n ? (e: AnnotationInteractionEvent) => renderer.selectOverride!(e, annotation, selectHelpers)\n : (e: AnnotationInteractionEvent) => handleClick(e, annotation)}\n {@const RendererComponent = renderer.component}\n\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n {isEditing}\n {isMultiSelected}\n isDraggable={finalDraggable}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n defaults?.isResizable ?? false,\n )}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n defaults?.lockAspectRatio ?? false,\n )}\n isRotatable={resolveInteractionProp(\n tool?.interaction.isRotatable,\n annotation.object,\n defaults?.isRotatable ?? false,\n )}\n vertexConfig={renderer.vertexConfig}\n selectionMenu={renderer.hideSelectionMenu?.(annotation.object)\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenu}\n selectionMenuSnippet={renderer.hideSelectionMenu?.(annotation.object)\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenuSnippet}\n {onSelect}\n onDoubleClick={renderer.onDoubleClick\n ? (e) => {\n e.stopPropagation();\n renderer.onDoubleClick!(annotation.object.id, setEditingId);\n }\n : undefined}\n zIndex={renderer.zIndex}\n style={renderer.containerStyle?.(annotation.object) ??\n `mix-blend-mode: ${blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}`}\n appearance={useAP ? getAppearanceForAnnotation(annotation) : undefined}\n {...annotationsProps}\n >\n {#snippet children(currentObject, { appearanceActive })}\n <RendererComponent\n {annotation}\n {currentObject}\n {isSelected}\n {isEditing}\n scale={annotationsProps.scale}\n pageIndex={annotationsProps.pageIndex}\n documentId={annotationsProps.documentId}\n onClick={onSelect}\n {appearanceActive}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n\n<!-- Group Selection Box -->\n{#if allSelectedOnSamePage && selectedAnnotationsOnPage.length >= 2}\n <GroupSelectionBox\n documentId={annotationsProps.documentId}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n rotation={annotationsProps.rotation}\n pageWidth={annotationsProps.pageWidth}\n pageHeight={annotationsProps.pageHeight}\n selectedAnnotations={selectedAnnotationsOnPage}\n isDraggable={areAllSelectedDraggable}\n isResizable={areAllSelectedResizable}\n isRotatable={areAllSelectedRotatable}\n lockAspectRatio={shouldLockGroupAspectRatio}\n resizeUI={annotationsProps.resizeUI}\n rotationUI={annotationsProps.rotationUI}\n selectionOutlineColor={annotationsProps.selectionOutlineColor}\n selectionOutline={annotationsProps.groupSelectionOutline ?? annotationsProps.selectionOutline}\n groupSelectionMenu={annotationsProps.groupSelectionMenu}\n groupSelectionMenuSnippet={annotationsProps.groupSelectionMenuSnippet}\n />\n{/if}\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 strokeColor={activeTool.defaults?.strokeColor}\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 strokeColor={activeTool.defaults?.strokeColor}\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 strokeColor={activeTool.defaults?.strokeColor}\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 strokeColor={activeTool.defaults?.strokeColor}\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","import { createPluginPackage } from '@embedpdf/core';\nimport { AnnotationPluginPackage as BaseAnnotationPackage } from '@embedpdf/plugin-annotation';\nimport RendererRegistryProvider from './components/RendererRegistryProvider.svelte';\n\nexport * from './hooks';\nexport * from './components';\nexport * from './types';\nexport * from './context';\nexport * from '@embedpdf/plugin-annotation';\n\nexport const AnnotationPluginPackage = createPluginPackage(BaseAnnotationPackage)\n .addWrapper(RendererRegistryProvider)\n .build();\n","<script lang=\"ts\">\n import { type 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 GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import { getRendererRegistry, type BoxedAnnotationRenderer } from '../context';\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 /** Render function for group selection menu (schema-driven approach) */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize rotation handle */\n rotationUI?: RotationHandleUI;\n /** @deprecated Use `selectionOutline` instead */\n selectionOutlineColor?: string;\n /** Customize the selection outline for individual annotations */\n selectionOutline?: SelectionOutline;\n /** Customize the selection outline for the group selection box (falls back to selectionOutline) */\n groupSelectionOutline?: SelectionOutline;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n /** Custom annotation renderers from props */\n annotationRenderers?: BoxedAnnotationRenderer[];\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n resizeUI,\n vertexUI,\n rotationUI,\n selectionOutlineColor,\n selectionOutline,\n groupSelectionOutline,\n customAnnotationRenderer,\n annotationRenderers,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n // Get registry and merge with props\n const registry = getRendererRegistry();\n\n const allRenderers = $derived.by(() => {\n const fromRegistry = registry?.getAll() ?? [];\n const fromProps = annotationRenderers ?? [];\n const merged = [...fromRegistry];\n for (const r of fromProps) {\n const idx = merged.findIndex((m) => m.id === r.id);\n if (idx >= 0) merged[idx] = r;\n else merged.push(r);\n }\n return merged;\n });\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.by(() => {\n if (overrideRotation !== undefined) return overrideRotation;\n // Combine page intrinsic rotation with document rotation\n const pageRotation = page?.rotation ?? 0;\n const docRotation = documentState?.current?.rotation ?? 0;\n return ((pageRotation + docRotation) % 4) as Rotation;\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 {groupSelectionMenu}\n {groupSelectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {rotationUI}\n {selectionOutlineColor}\n {selectionOutline}\n {groupSelectionOutline}\n {customAnnotationRenderer}\n annotationRenderers={allRenderers}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["REGISTRY_KEY","Symbol","createRendererRegistry","renderers","$","state","proxy","register","entries","ids","Set","map","e","id","filter","r","has","set","some","getAll","provideRendererRegistry","registry","setContext","getRendererRegistry","getContext","createRenderer","entry","matches","component","vertexConfig","zIndex","containerStyle","interactionDefaults","useAppearanceStream","isDraggable","onDoubleClick","selectOverride","hideSelectionMenu","useAnnotationCapability","useCapability","AnnotationPlugin","useAnnotationPlugin","usePlugin","isEditing","isMultiSelected","isRotatable","lockAspectRatio","propsClass","outlineOffset","restProps","rest_props","$$props","preview","liveRotation","cursorScreen","isHandleHovered","gestureActive","annotationCapability","annotationPlugin","permissions","useDocumentPermissions","documentId","gestureBaseRef","gestureBaseRectRef","effectiveIsDraggable","derived","canModifyAnnotations","effectiveIsResizable","effectiveIsRotatable","guardedOnDoubleClick","annotationProvides","provides","forDocument","currentObject","trackedAnnotation","object","annoFlags","flags","hasNoZoom","get","includes","hasNoRotate","visualScale","scale","effectivePageRotation","rotation","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","ROTATION_COLOR","rotationUI","ROTATION_CONNECTOR_COLOR","connectorColor","HANDLE_SIZE","size","VERTEX_SIZE","ROTATION_SIZE","ROTATION_MARGIN","margin","ROTATION_ICON_COLOR","iconColor","SHOW_CONNECTOR","showConnector","ROTATION_BORDER_COLOR","_b","border","ROTATION_BORDER_WIDTH","width","ROTATION_BORDER_STYLE","style","outlineColor","selectionOutline","selectionOutlineColor","outlineStyleVal","outlineWidth","outlineOff","offset","annotationRotation","rotationDisplay","normalizedRotationDisplay","Number","isFinite","Math","round","rotationActive","showOutline","explicitUnrotatedRect","unrotatedRect","effectiveUnrotatedRect","rect","rotationPivot","inferRotationCenterFromRects","controllerElement","aabbWidth","aabbHeight","height","innerWidth","innerHeight","usesCustomPivot","Boolean","innerLeft","origin","x","innerTop","y","innerTransformOrigin","centerX","centerY","guideLength","max","counterRot","getCounterRotation","apActive","normal","dictMode","childObject","user_effect","plugin","handleEvent","event","type","patch","previewPatches","untrack","unsubs","onDragChange","onResizeChange","onRotateChange","forEach","u","interactionHandles","useInteractionHandles","controller","element","vertices","extractVertices","constraints","minWidth","minHeight","boundingBox","pageWidth","pageHeight","maintainAspectRatio","pageRotation","rotationCenter","rotationElement","enabled","onUpdate","transformData","changes","metadata","pageSize","startDrag","annotationIds","startResize","resizeHandle","handle","delta","updateDrag","updateResize","base","vertexChanges","transformAnnotation","patched","sanitized","deepToRaw","updateAnnotation","pageIndex","cursorAngle","rotationAngle","cursorPos","cursorPosition","clientX","clientY","startRotation","updateRotation","rotationDelta","commitRotation","commitDrag","commitResize","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","includeRotation","currentRotation","resizeHandles","resize","vertexHandles","rotationHandle","shouldShowMenu","isSelected","selectionMenu","selectionMenuSnippet","portalToBody","node","document","body","appendChild","destroy","parentNode","removeChild","div","root","div_1","left","top","transform","matrix","div_2","first_child","fragment","div_3","div_4","styles","styles_1","styles_2","consequent","div_5","root_3","__pointermove","backgroundColor","connectorStyle","connector","opacity","$0","div_6","root_4","div_7","root_5","template_effect","set_style","consequent_2","div_8","sibling","node_5","onpointerdown","onpointermove","onpointerup","onpointercancel","svg","$1","set_attribute","consequent_1","$$render","alternate","consequent_3","div_9","node_2","dragProps","annotation","children","onSelect","appearanceActive","imageUrl","currentUrl","handleLoad","URL","revokeObjectURL","url","createObjectURL","data","img","root_1","AppearanceImage","$$anchor","consequent_5","key","handleStyle","hProps","$$item","exclude_from_object","div_10","root_12","consequent_6","alternate_2","consequent_7","vertexStyle","vProps","div_11","root_16","consequent_8","alternate_3","consequent_9","$$node","$$action_arg","doublePress","onDouble","$$arg0","menuProps","menuWrapperProps","effectiveAngle","handleNearMenuSide","context","selected","placement","suggestTop","spaceAbove","spaceBelow","buildMenuProps","result","result_component","spread_props","props","consequent_10","CounterRotate","consequent_13","div_12","root_23","div_13","styles_3","toFixed","consequent_14","mapCounterRotatePoint","getAnnotationScreenBounds","right","bottom","corners","minX","Infinity","minY","maxX","maxY","corner","gestureBase","isDraggingRef","isResizingRef","isResizable","getGroupBox","rects","selectedAnnotations","ta","boundingRectOrEmpty","groupBox","previewGroupBox","newBox","outlineWidthVal","groupRotationDisplay","visualBoundsCorrection","visualLeft","visualTop","visualRight","visualBottom","bounds","groupBoxLeft","groupBoxTop","groupBoxWidth","groupBoxHeight","groupCenterX","groupCenterY","groupGuideLength","transformType","isMove","isResize","_c","_d","_e","_f","newRect","rawDelta","clampedDelta","newGroupBox","groupSelectionMenu","groupSelectionMenuSnippet","fragment_1","root_6","node_6","node_3","stopPropagation","root_10","consequent_4","alternate_1","root_11","styles_4","annotations","length","consequent_11","resolvedColor","paths","inkList","points","d","i","trim","hitStrokeWidth","each","path","__pointerdown","$$args","cursor","path_1","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","$$d","outerW","outerH","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","rect_1","rect_2","innerW","innerH","cx","cy","rx","ry","peValue","ellipse","ellipse_1","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","lineEndings","line","filled","root_2","line_1","path_2","styles_5","path_3","styles_6","localPts","pathData","first","rest","p","toAngle","a","b","startRad","endRad","path_4","path_5","stroke","allPoints","currentVertex","isPreview","isPreviewing","fill","editorRef","isIOS","editingRef","focus","selection","getSelection","call","window","range","createRange","selectNodeContents","collapse","removeAllRanges","addRange","user_pre_effect","nav","navigator","ios","test","userAgent","platform","maxTouchPoints","computedFontPx","fontSize","needsComp","adjustedFontPx","scaleComp","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","fontCss","standardFontCssProperties","fontFamily","span","$$value","set_text","text","contents","fontColor","fontWeight","fontStyle","textAlignmentToCss","textAlign","innerText","scaleFactor","unrotated","urlRef","handleImageLoad","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","ignore","abort","code","PdfErrorCode","Cancelled","message","annotationProp","RenderAnnotation","UNDERLINE","hasIRT","dashArray","isUnderline","hitAreaCursor","hitAreaPointerEvents","onClick","apply","this","tabindex","Object","fromEntries","k","v","thickness","amplitude","period","svgDataUri","encodeURIComponent","lineColor","getContrastStrokeColor","position","inset","line_2","builtInRenderers","PdfAnnotationSubtype","INK","Ink","SQUARE","Square","CIRCLE","Circle","LINE","Line","linePoints","POLYLINE","Polyline","POLYGON","Polygon","HIGHLIGHT","Highlight","blendModeToCss","blendMode","PdfBlendMode","Multiply","Underline","STRIKEOUT","Strikeout","SQUIGGLY","Squiggly","TEXT","inReplyToId","Text","CARET","w","h","midX","Caret","FREETEXT","FreeText","toolDraggable","setEditingId","STAMP","Stamp","LINK","Link","helpers","clearSelection","parent","allAnnotations","find","selectAnnotation","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","allSelectedIds","editingId","appearanceMap","prevScale","allRenderers","external","annotationRenderers","externalIds","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationIds","off","onStateChange","invalidatePageAppearances","getPageAppearances","handlers","onPointerDown","_","pe","target","currentTarget","deselectAnnotation","handleClick","clear","metaKey","ctrlKey","toggleSelection","selectedAnnotationsOnPage","anno","areAllSelectedDraggable","every","tool","findToolForAnnotation","groupDraggable","resolveInteractionProp","interaction","isGroupDraggable","singleDraggable","areAllSelectedResizable","groupResizable","isGroupResizable","singleResizable","areAllSelectedRotatable","groupRotatable","isGroupRotatable","singleRotatable","shouldLockGroupAspectRatio","groupLock","lockGroupAspectRatio","singleLock","allSelectedOnSamePage","getSelectedAnnotations","renderer","resolveRenderer","defaults","resolvedDraggable","finalDraggable","useAP","behavior","selectHelpers","defaultSelect","pi","RendererComponent","noop","$$arg1","RendererComponent_1","$2","$3","$4","$5","$6","Normal","appearances","getAppearanceForAnnotation","AnnotationContainer","$$slots","default","groupSelectionOutline","GroupSelectionBox","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","mixBlendMode","node_4","root_8","node_8","root_7","root_9","root_13","styles_7","alternate_4","alternate_5","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","ctx","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","src","registerPageHandlers","onPreview","toolId","delete","input_1","display","canvas_1","Array","from","PreviewRenderer","$$array","AnnotationPluginPackage","createPluginPackage","BaseAnnotationPackage","addWrapper","RendererRegistryProvider","build","fromRegistry","fromProps","merged","idx","findIndex","m","push","documentState","useDocumentState","page","current","pages","actualScale","actualRotation","attribute_effect","Annotations","TextMarkup","node_1","AnnotationPaintLayer","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/svelte/context/renderer-registry.svelte.ts","../../src/svelte/components/RendererRegistryProvider.svelte","../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/AppearanceImage.svelte","../../src/shared/annotation-bounds.ts","../../src/svelte/components/GroupSelectionBox.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/Link.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/Text.svelte","../../src/svelte/components/built-in-renderers.ts","../../src/svelte/components/renderers/InkRenderer.svelte","../../src/svelte/components/renderers/SquareRenderer.svelte","../../src/svelte/components/renderers/CircleRenderer.svelte","../../src/svelte/components/renderers/LineRenderer.svelte","../../src/svelte/components/renderers/PolylineRenderer.svelte","../../src/svelte/components/renderers/PolygonRenderer.svelte","../../src/svelte/components/renderers/HighlightRenderer.svelte","../../src/svelte/components/renderers/UnderlineRenderer.svelte","../../src/svelte/components/renderers/StrikeoutRenderer.svelte","../../src/svelte/components/renderers/SquigglyRenderer.svelte","../../src/svelte/components/renderers/TextRenderer.svelte","../../src/svelte/components/annotations/Caret.svelte","../../src/svelte/components/renderers/CaretRenderer.svelte","../../src/svelte/components/renderers/FreeTextRenderer.svelte","../../src/svelte/components/renderers/StampRenderer.svelte","../../src/svelte/components/renderers/LinkRenderer.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/index.ts","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import { getContext, setContext } from 'svelte';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationRendererEntry,\n AnnotationRendererProps,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from './types';\nimport type { PdfAnnotationObject } from '@embedpdf/models';\nimport type { VertexConfig } from '../../shared/types';\nimport type { Component } from 'svelte';\n\n/**\n * Annotation Renderer Registry\n *\n * Allows external plugins to register custom annotation renderers\n * that integrate with the annotation layer.\n */\nexport interface AnnotationRendererRegistry {\n register(entries: BoxedAnnotationRenderer[]): () => void;\n getAll(): BoxedAnnotationRenderer[];\n}\n\nconst REGISTRY_KEY = Symbol('AnnotationRendererRegistry');\n\nexport function createRendererRegistry(): AnnotationRendererRegistry {\n let renderers = $state<BoxedAnnotationRenderer[]>([]);\n\n return {\n register(entries) {\n const ids = new Set(entries.map((e) => e.id));\n renderers = [...renderers.filter((r) => !ids.has(r.id)), ...entries];\n return () => {\n renderers = renderers.filter((r) => !entries.some((e) => e.id === r.id));\n };\n },\n getAll() {\n return renderers;\n },\n };\n}\n\nexport function provideRendererRegistry(): AnnotationRendererRegistry {\n const registry = createRendererRegistry();\n setContext(REGISTRY_KEY, registry);\n return registry;\n}\n\nexport function getRendererRegistry(): AnnotationRendererRegistry | null {\n return getContext<AnnotationRendererRegistry>(REGISTRY_KEY) ?? null;\n}\n\n/**\n * Factory to create a boxed renderer from a typed entry.\n */\nexport function createRenderer<T extends PdfAnnotationObject>(\n entry: AnnotationRendererEntry<T>,\n): BoxedAnnotationRenderer {\n return {\n id: entry.id,\n matches: entry.matches,\n component: entry.component as Component<AnnotationRendererProps>,\n vertexConfig: entry.vertexConfig as VertexConfig<PdfAnnotationObject> | undefined,\n zIndex: entry.zIndex,\n defaultBlendMode: entry.defaultBlendMode,\n containerStyle: entry.containerStyle as\n | ((annotation: PdfAnnotationObject) => string)\n | undefined,\n interactionDefaults: entry.interactionDefaults,\n useAppearanceStream: entry.useAppearanceStream,\n isDraggable: entry.isDraggable,\n onDoubleClick: entry.onDoubleClick,\n selectOverride: entry.selectOverride as BoxedAnnotationRenderer['selectOverride'],\n hideSelectionMenu: entry.hideSelectionMenu as\n | ((annotation: PdfAnnotationObject) => boolean)\n | undefined,\n };\n}\n\n// Re-export types for convenience\nexport type {\n AnnotationRendererProps,\n AnnotationRendererEntry,\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n};\n","<script lang=\"ts\">\n import { provideRendererRegistry } from '../context';\n import type { Snippet } from 'svelte';\n\n let { children }: { children: Snippet } = $props();\n\n provideRendererRegistry();\n</script>\n\n{@render children()}\n","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, CssBlendMode } from '@embedpdf/models';\n import { getCounterRotation } from '@embedpdf/utils';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationCapability, useAnnotationPlugin } 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 { untrack } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n import { inferRotationCenterFromRects } from '../../lib/geometry/rotation';\n import AppearanceImage from './AppearanceImage.svelte';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isEditing = false,\n isMultiSelected = false,\n isDraggable,\n isResizable,\n isRotatable = true,\n lockAspectRatio = false,\n blendMode,\n style: propsStyle,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n appearance,\n zIndex = 1,\n resizeUI,\n vertexUI,\n rotationUI,\n selectionOutlineColor,\n selectionOutline,\n customAnnotationRenderer,\n // Destructure props that shouldn't be passed to DOM elements\n groupSelectionMenu: _groupSelectionMenu,\n groupSelectionOutline: _groupSelectionOutline,\n annotationRenderers: _annotationRenderers,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T | null>(null);\n let liveRotation = $state<number | null>(null);\n let cursorScreen = $state<{ x: number; y: number } | null>(null);\n let isHandleHovered = $state(false);\n let gestureActive = $state(false);\n let annotationCapability = useAnnotationCapability();\n const annotationPlugin = useAnnotationPlugin();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBaseRef = $state<T | null>(null);\n let gestureBaseRectRef = $state<Rect | null>(null);\n\n // When multi-selected, disable individual drag/resize - GroupSelectionBox handles it\n const effectiveIsDraggable = $derived(\n permissions.canModifyAnnotations && isDraggable && !isMultiSelected,\n );\n const effectiveIsResizable = $derived(\n permissions.canModifyAnnotations && isResizable && !isMultiSelected,\n );\n const effectiveIsRotatable = $derived(\n permissions.canModifyAnnotations && isRotatable && !isMultiSelected,\n );\n\n // Wrap onDoubleClick to respect permissions\n const guardedOnDoubleClick = $derived(\n permissions.canModifyAnnotations && onDoubleClick ? onDoubleClick : undefined,\n );\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 // Annotation flags\n const annoFlags = $derived(trackedAnnotation.object.flags ?? []);\n const hasNoZoom = $derived(annoFlags.includes('noZoom'));\n const hasNoRotate = $derived(annoFlags.includes('noRotate'));\n // noZoom: maintain constant screen-pixel size regardless of zoom level.\n const visualScale = $derived(hasNoZoom ? 1 : scale);\n // noRotate: stay visually upright regardless of page rotation.\n const effectivePageRotation = $derived((hasNoRotate ? 0 : rotation) as typeof rotation);\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const ROTATION_COLOR = $derived(rotationUI?.color ?? 'white');\n const ROTATION_CONNECTOR_COLOR = $derived(rotationUI?.connectorColor ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n const ROTATION_SIZE = $derived(rotationUI?.size ?? 32);\n const ROTATION_MARGIN = $derived(rotationUI?.margin);\n const ROTATION_ICON_COLOR = $derived(rotationUI?.iconColor ?? '#007ACC');\n const SHOW_CONNECTOR = $derived(rotationUI?.showConnector ?? false);\n const ROTATION_BORDER_COLOR = $derived(rotationUI?.border?.color ?? '#007ACC');\n const ROTATION_BORDER_WIDTH = $derived(rotationUI?.border?.width ?? 1);\n const ROTATION_BORDER_STYLE = $derived(rotationUI?.border?.style ?? 'solid');\n\n // Outline resolution (new object > deprecated props > defaults)\n const outlineColor = $derived(selectionOutline?.color ?? selectionOutlineColor ?? '#007ACC');\n const outlineStyleVal = $derived(selectionOutline?.style ?? 'solid');\n const outlineWidth = $derived(selectionOutline?.width ?? 1);\n const outlineOff = $derived(selectionOutline?.offset ?? outlineOffset ?? 1);\n\n // Get annotation's current rotation (for simple shapes that store rotation)\n // During drag, use liveRotation if available; otherwise use the annotation's rotation\n const annotationRotation = $derived(liveRotation ?? (currentObject as any).rotation ?? 0);\n const rotationDisplay = $derived(liveRotation ?? (currentObject as any).rotation ?? 0);\n const normalizedRotationDisplay = $derived(\n Number.isFinite(rotationDisplay) ? Math.round(rotationDisplay * 10) / 10 : 0,\n );\n const rotationActive = $derived(liveRotation !== null);\n\n // Determine if we should show the outline\n // When multi-selected, don't show individual outlines - GroupSelectionBox shows the group outline\n const showOutline = $derived(isSelected && !isMultiSelected);\n\n // Geometry model:\n // - `rect` is the visible AABB container.\n // - `unrotatedRect` is the local editing frame for resize/vertex operations.\n const explicitUnrotatedRect = $derived((currentObject as any).unrotatedRect as Rect | undefined);\n const effectiveUnrotatedRect = $derived(explicitUnrotatedRect ?? currentObject.rect);\n const rotationPivot = $derived(\n explicitUnrotatedRect && annotationRotation !== 0\n ? inferRotationCenterFromRects(effectiveUnrotatedRect, currentObject.rect, annotationRotation)\n : undefined,\n );\n const controllerElement = $derived(effectiveUnrotatedRect);\n\n // Three-layer model dimensions\n // noZoom: use visualScale (=1) so the annotation keeps a constant screen-pixel size.\n // noRotate: counter-rotate the outer div so the annotation stays upright on rotated pages.\n const aabbWidth = $derived(currentObject.rect.size.width * visualScale);\n const aabbHeight = $derived(currentObject.rect.size.height * visualScale);\n const innerWidth = $derived(effectiveUnrotatedRect.size.width * visualScale);\n const innerHeight = $derived(effectiveUnrotatedRect.size.height * visualScale);\n const usesCustomPivot = $derived(Boolean(explicitUnrotatedRect) && annotationRotation !== 0);\n const innerLeft = $derived(\n usesCustomPivot\n ? (effectiveUnrotatedRect.origin.x - currentObject.rect.origin.x) * visualScale\n : (aabbWidth - innerWidth) / 2,\n );\n const innerTop = $derived(\n usesCustomPivot\n ? (effectiveUnrotatedRect.origin.y - currentObject.rect.origin.y) * visualScale\n : (aabbHeight - innerHeight) / 2,\n );\n const innerTransformOrigin = $derived(\n usesCustomPivot && rotationPivot\n ? `${(rotationPivot.x - effectiveUnrotatedRect.origin.x) * visualScale}px ${(rotationPivot.y - effectiveUnrotatedRect.origin.y) * visualScale}px`\n : 'center center',\n );\n const centerX = $derived(\n rotationPivot ? (rotationPivot.x - currentObject.rect.origin.x) * visualScale : aabbWidth / 2,\n );\n const centerY = $derived(\n rotationPivot ? (rotationPivot.y - currentObject.rect.origin.y) * visualScale : aabbHeight / 2,\n );\n const guideLength = $derived(Math.max(300, Math.max(aabbWidth, aabbHeight) + 80));\n // noRotate: compute counter-rotation to undo page rotation on this annotation's outer div.\n const counterRot = $derived(\n hasNoRotate\n ? getCounterRotation(\n { origin: { x: 0, y: 0 }, size: { width: aabbWidth, height: aabbHeight } },\n rotation,\n )\n : null,\n );\n\n const apActive = $derived(\n !!appearance?.normal && !gestureActive && !isEditing && !trackedAnnotation.dictMode,\n );\n\n // For children, override rect to use unrotatedRect so content renders in unrotated space\n const childObject = $derived.by(() => {\n if (explicitUnrotatedRect) {\n return { ...currentObject, rect: explicitUnrotatedRect };\n }\n return currentObject;\n });\n\n // Sync preview with tracked annotation when it changes\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = trackedAnnotation.object;\n }\n });\n\n // Subscribe to unified drag/resize/rotate changes - plugin sends pre-computed patches!\n // ALL preview updates come through here (primary, attached links, multi-select)\n $effect(() => {\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const id = trackedAnnotation.object.id;\n\n const handleEvent = (event: {\n documentId: string;\n type: string;\n previewPatches?: Record<string, any>;\n }) => {\n if (event.documentId !== documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation = null;\n }\n const patch = event.previewPatches?.[id];\n if (event.type === 'update' && patch) {\n // Use untrack to prevent tracking the read of preview (like Vue's toRaw)\n preview = { ...(untrack(() => preview) ?? trackedAnnotation.object), ...patch } as T;\n } else if (event.type === 'cancel') {\n preview = trackedAnnotation.object;\n }\n };\n\n const unsubs = [\n plugin.onDragChange(handleEvent),\n plugin.onResizeChange(handleEvent),\n plugin.onRotateChange(handleEvent),\n ];\n\n return () => unsubs.forEach((u) => u());\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: controllerElement,\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 annotationRotation: annotationRotation,\n rotationCenter: rotationPivot,\n rotationElement: currentObject.rect,\n scale: scale,\n // Disable interaction handles when multi-selected\n enabled: isSelected && !isMultiSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type || isMultiSelected) return;\n\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const { type, changes, metadata } = event.transformData;\n const id = trackedAnnotation.object.id;\n const pageSize = { width: pageWidth, height: pageHeight };\n\n // Gesture start - initialize plugin drag/resize\n if (event.state === 'start') {\n gestureBaseRectRef =\n (trackedAnnotation.object as any).unrotatedRect ?? trackedAnnotation.object.rect;\n gestureBaseRef = trackedAnnotation.object;\n\n if (type === 'resize' || type === 'vertex-edit') {\n gestureActive = true;\n }\n\n if (type === 'move') {\n plugin.startDrag(documentId, { annotationIds: [id], pageSize });\n } else if (type === 'resize') {\n plugin.startResize(documentId, {\n annotationIds: [id],\n pageSize,\n resizeHandle: metadata?.handle ?? 'se',\n });\n }\n }\n\n // Gesture update - call plugin, preview comes from subscription\n if (changes.rect && gestureBaseRectRef) {\n if (type === 'move') {\n const delta = {\n x: changes.rect.origin.x - gestureBaseRectRef.origin.x,\n y: changes.rect.origin.y - gestureBaseRectRef.origin.y,\n };\n plugin.updateDrag(documentId, delta);\n } else if (type === 'resize') {\n plugin.updateResize(documentId, changes.rect);\n }\n }\n\n // Vertex edit - handle directly (no attached link handling needed)\n if (type === 'vertex-edit' && changes.vertices && vertexConfig) {\n const base = gestureBaseRef ?? trackedAnnotation.object;\n const vertexChanges = vertexConfig.transformAnnotation(base, changes.vertices);\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type,\n changes: vertexChanges as Partial<T>,\n metadata,\n });\n if (patched) {\n preview = { ...(preview ?? trackedAnnotation.object), ...patched };\n if (event.state === 'end') {\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, id, sanitized);\n }\n }\n }\n\n // Rotation handling\n if (type === 'rotate') {\n const cursorAngle = metadata?.rotationAngle ?? annotationRotation;\n const cursorPos = metadata?.cursorPosition;\n if (cursorPos) cursorScreen = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation = cursorAngle;\n plugin.startRotation(documentId, {\n annotationIds: [id],\n cursorAngle,\n rotationCenter: metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation = cursorAngle;\n plugin.updateRotation(documentId, cursorAngle, metadata?.rotationDelta);\n } else if (event.state === 'end') {\n liveRotation = null;\n cursorScreen = null;\n plugin.commitRotation(documentId);\n }\n return;\n }\n\n // Gesture end - commit\n if (event.state === 'end') {\n gestureActive = false;\n gestureBaseRectRef = null;\n gestureBaseRef = null;\n if (type === 'move') plugin.commitDrag(documentId);\n else if (type === 'resize') plugin.commitResize(documentId);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOff,\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 rotationUI: {\n handleSize: ROTATION_SIZE,\n margin: ROTATION_MARGIN,\n zIndex: zIndex + 3,\n showConnector: SHOW_CONNECTOR,\n },\n includeVertices: vertexConfig ? true : false,\n includeRotation: effectiveIsRotatable,\n currentRotation: annotationRotation,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n const rotationHandle = $derived(interactionHandles.rotation);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu - hide when multi-selected or rotating\n const shouldShowMenu = $derived(\n isSelected &&\n !isMultiSelected &&\n !rotationActive &&\n (!!selectionMenu || !!selectionMenuSnippet),\n );\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 // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n // The handle's visual angle = annotationRotation + pageRotation (in degrees).\n // `rotation` is in quarter turns (0-3), so multiply by 90 to get degrees.\n // The menu (suggestTop: false) renders at the visual bottom (180deg).\n // Flip the menu to the top when the handle is in the bottom visual hemisphere\n // to prevent it from overlapping with the rotation handle.\n const effectiveAngle = (((annotationRotation + effectivePageRotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide = effectiveIsRotatable && effectiveAngle > 90 && effectiveAngle < 270;\n\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: {\n suggestTop: handleNearMenuSide,\n spaceAbove: 0,\n spaceBelow: 0,\n },\n menuWrapperProps,\n };\n }\n\n // Svelte action for portaling tooltip to document.body\n function portalToBody(node: HTMLElement) {\n document.body.appendChild(node);\n return {\n destroy() {\n if (node.parentNode === document.body) {\n document.body.removeChild(node);\n }\n },\n };\n }\n</script>\n\n<div data-no-interaction>\n <!-- Visual Layer: blend mode applied here, contains only annotation content -->\n <div\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=\"{counterRot ? counterRot.width : aabbWidth}px\"\n style:height=\"{counterRot ? counterRot.height : aabbHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n style:transform={counterRot ? counterRot.matrix : undefined}\n style:transform-origin={counterRot ? '0 0' : undefined}\n style:mix-blend-mode={blendMode}\n style={propsStyle}\n >\n <!-- Inner div: rotated visual content - no pointer events -->\n <div\n style:position=\"absolute\"\n style:left=\"{innerLeft}px\"\n style:top=\"{innerTop}px\"\n style:width=\"{innerWidth}px\"\n style:height=\"{innerHeight}px\"\n style:transform={annotationRotation !== 0 ? `rotate(${annotationRotation}deg)` : undefined}\n style:transform-origin={innerTransformOrigin}\n style:pointer-events=\"none\"\n >\n <!-- Annotation content - renders in unrotated coordinate space -->\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: childObject,\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(childObject, { appearanceActive: apActive })}\n {/if}\n\n <!-- AP overlay canvas (always in DOM, toggled via display) -->\n {#if appearance?.normal}\n <AppearanceImage\n appearance={appearance.normal}\n style=\"display: {apActive ? 'block' : 'none'};\"\n />\n {/if}\n </div>\n </div>\n\n <!-- Interaction Layer: no blend mode, contains rotation guides, handles, and drag/resize/vertex -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\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=\"{counterRot ? counterRot.width : aabbWidth}px\"\n style:height=\"{counterRot ? counterRot.height : aabbHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n style:transform={counterRot ? counterRot.matrix : undefined}\n style:transform-origin={counterRot ? '0 0' : undefined}\n class={propsClass}\n {...restProps}\n >\n <!-- Rotation guide lines - anchored at stable AABB center -->\n {#if rotationActive}\n <!-- Fixed snap lines (cross at 0/90/180/270) -->\n <div\n style:position=\"absolute\"\n style:left=\"{centerX - guideLength / 2}px\"\n style:top=\"{centerY}px\"\n style:width=\"{guideLength}px\"\n style:height=\"1px\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <div\n style:position=\"absolute\"\n style:left=\"{centerX}px\"\n style:top=\"{centerY - guideLength / 2}px\"\n style:width=\"1px\"\n style:height=\"{guideLength}px\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <!-- Rotating indicator line showing current angle -->\n <div\n style:position=\"absolute\"\n style:left=\"{centerX - guideLength / 2}px\"\n style:top=\"{centerY}px\"\n style:width=\"{guideLength}px\"\n style:height=\"1px\"\n style:transform-origin=\"center center\"\n style:transform=\"rotate({annotationRotation}deg)\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.8\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n\n <!-- Rotation handle - orbits in AABB space, kept in DOM during rotation -->\n {#if isSelected && effectiveIsRotatable && rotationHandle}\n {#if rotationUI?.component}\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n {@render rotationUI.component({\n ...rotationHandle.handle,\n backgroundColor: ROTATION_COLOR,\n iconColor: ROTATION_ICON_COLOR,\n connectorStyle: `${rotationHandle.connector.style}; background-color: ${ROTATION_CONNECTOR_COLOR}; opacity: ${rotationActive ? 0 : 1};`,\n showConnector: SHOW_CONNECTOR,\n opacity: rotationActive ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR,\n width: ROTATION_BORDER_WIDTH,\n style: ROTATION_BORDER_STYLE,\n },\n })}\n </div>\n {:else}\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n <!-- Connector line -->\n {#if SHOW_CONNECTOR}\n <div\n style=\"{rotationHandle.connector\n .style}; background-color: {ROTATION_CONNECTOR_COLOR}; opacity: {rotationActive\n ? 0\n : 1};\"\n ></div>\n {/if}\n <!-- Rotation handle -->\n <div\n {...{\n onpointerdown: rotationHandle.handle.onpointerdown,\n onpointermove: rotationHandle.handle.onpointermove,\n onpointerup: rotationHandle.handle.onpointerup,\n onpointercancel: rotationHandle.handle.onpointercancel,\n }}\n style=\"{rotationHandle.handle\n .style}; background-color: {ROTATION_COLOR}; border: {ROTATION_BORDER_WIDTH}px {ROTATION_BORDER_STYLE} {ROTATION_BORDER_COLOR}; box-sizing: border-box; display: flex; align-items: center; justify-content: center; pointer-events: auto; opacity: {rotationActive\n ? 0\n : 1};\"\n >\n <svg\n width={Math.round(ROTATION_SIZE * 0.6)}\n height={Math.round(ROTATION_SIZE * 0.6)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={ROTATION_ICON_COLOR}\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n {/if}\n {/if}\n\n <!-- Inner div: drag/resize/vertex interaction -->\n <div\n {...effectiveIsDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: guardedOnDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{innerLeft}px\"\n style:top=\"{innerTop}px\"\n style:width=\"{innerWidth}px\"\n style:height=\"{innerHeight}px\"\n style:transform={annotationRotation !== 0 ? `rotate(${annotationRotation}deg)` : undefined}\n style:transform-origin={innerTransformOrigin}\n style:outline={showOutline ? `${outlineWidth}px ${outlineStyleVal} ${outlineColor}` : 'none'}\n style:outline-offset={showOutline ? `${outlineOff}px` : '0px'}\n style:pointer-events={isSelected && !isMultiSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && effectiveIsDraggable ? 'move' : 'default'}\n >\n <!-- Resize handles - rotate with the shape -->\n {#if isSelected && effectiveIsResizable && !rotationActive}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({\n ...hProps,\n style: handleStyle,\n backgroundColor: HANDLE_COLOR,\n })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n <!-- Vertex handles - rotate with the shape -->\n {#if isSelected && permissions.canModifyAnnotations && !isMultiSelected && !rotationActive}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@render vertexUI.component({\n ...vProps,\n style: vertexStyle,\n backgroundColor: VERTEX_COLOR,\n })}\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet - hide when multi-selected or rotating -->\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 * visualScale,\n height: currentObject.rect.size.height * visualScale,\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\n <!-- Cursor-following rotation tooltip - portaled to document.body to escape CSS transform chain -->\n {#if (rotationActive || isHandleHovered) && cursorScreen}\n <div use:portalToBody>\n <div\n style:position=\"fixed\"\n style:left=\"{cursorScreen.x + 16}px\"\n style:top=\"{cursorScreen.y - 16}px\"\n style:background=\"rgba(0,0,0,0.8)\"\n style:color=\"#fff\"\n style:padding=\"4px 8px\"\n style:border-radius=\"4px\"\n style:font-size=\"12px\"\n style:font-family=\"monospace\"\n style:pointer-events=\"none\"\n style:z-index=\"10000\"\n style:white-space=\"nowrap\"\n >\n {normalizedRotationDisplay.toFixed(0)}°\n </div>\n </div>\n {/if}\n</div>\n","<script lang=\"ts\">\n import { type AnnotationAppearanceImage } from '@embedpdf/models';\n\n interface Props {\n appearance: AnnotationAppearanceImage<Blob>;\n style?: string;\n }\n\n let { appearance, style }: Props = $props();\n\n let imageUrl = $state<string | null>(null);\n let currentUrl: string | null = null;\n\n $effect(() => {\n const url = URL.createObjectURL(appearance.data);\n imageUrl = url;\n currentUrl = url;\n\n return () => {\n if (currentUrl) {\n URL.revokeObjectURL(currentUrl);\n currentUrl = null;\n }\n };\n });\n\n function handleLoad() {\n if (currentUrl) {\n URL.revokeObjectURL(currentUrl);\n currentUrl = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n src={imageUrl}\n alt=\"\"\n draggable=\"false\"\n onload={handleLoad}\n style=\"position: absolute; width: 100%; height: 100%; display: block; pointer-events: none; user-select: none; {style ??\n ''}\"\n />\n{/if}\n","import { Rotation } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface ScreenBounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nfunction mapCounterRotatePoint(\n x: number,\n y: number,\n width: number,\n height: number,\n rotation: Rotation,\n): { x: number; y: number } {\n switch (rotation) {\n case 1:\n return { x: y, y: height - x };\n case 2:\n return { x: width - x, y: height - y };\n case 3:\n return { x: width - y, y: x };\n default:\n return { x, y };\n }\n}\n\n/**\n * Compute the screen-space bounding box of an annotation, correctly accounting\n * for `noZoom` (constant pixel size regardless of zoom) and `noRotate`\n * (visually upright regardless of page rotation) annotation flags.\n */\nexport function getAnnotationScreenBounds(\n annotation: TrackedAnnotation,\n scale: number,\n rotation: Rotation,\n): ScreenBounds {\n const flags = annotation.object.flags ?? [];\n const hasNoZoom = flags.includes('noZoom');\n const hasNoRotate = flags.includes('noRotate');\n\n const left = annotation.object.rect.origin.x * scale;\n const top = annotation.object.rect.origin.y * scale;\n const width = annotation.object.rect.size.width * (hasNoZoom ? 1 : scale);\n const height = annotation.object.rect.size.height * (hasNoZoom ? 1 : scale);\n\n if (!hasNoRotate || rotation === 0) {\n return {\n left,\n top,\n right: left + width,\n bottom: top + height,\n };\n }\n\n const corners = [\n mapCounterRotatePoint(0, 0, width, height, rotation),\n mapCounterRotatePoint(width, 0, width, height, rotation),\n mapCounterRotatePoint(0, height, width, height, rotation),\n mapCounterRotatePoint(width, height, width, height, rotation),\n ];\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const corner of corners) {\n if (corner.x < minX) minX = corner.x;\n if (corner.y < minY) minY = corner.y;\n if (corner.x > maxX) maxX = corner.x;\n if (corner.y > maxY) maxY = corner.y;\n }\n\n return {\n left: left + minX,\n top: top + minY,\n right: left + maxX,\n bottom: top + maxY,\n };\n}\n","<!-- GroupSelectionBox.svelte -->\n<script lang=\"ts\">\n import { boundingRectOrEmpty, type Rect, type Rotation } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { getAnnotationScreenBounds } from '../../shared/annotation-bounds';\n import {\n useInteractionHandles,\n CounterRotate,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationPlugin } from '../hooks';\n import type {\n GroupSelectionContext,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import type { Snippet } from 'svelte';\n\n interface GroupSelectionBoxProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** All selected annotations on this page */\n selectedAnnotations: TrackedAnnotation[];\n /** Whether the group is draggable (all annotations must be group-draggable) */\n isDraggable: boolean;\n /** Whether the group is resizable (all annotations must be group-resizable) */\n isResizable: boolean;\n /** Whether the group can be rotated */\n isRotatable?: boolean;\n /** Whether to lock aspect ratio during group resize */\n lockAspectRatio?: boolean;\n /** Resize handle UI customization */\n resizeUI?: ResizeHandleUI;\n /** Rotation handle UI customization */\n rotationUI?: RotationHandleUI;\n /** @deprecated Use `selectionOutline.color` instead */\n selectionOutlineColor?: string;\n /** @deprecated Use `selectionOutline.offset` instead */\n outlineOffset?: number;\n /** Customize the selection outline (color, style, width, offset) */\n selectionOutline?: SelectionOutline;\n /** Z-index for the group box */\n zIndex?: number;\n /** Group selection menu render function */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n }\n\n let {\n documentId,\n pageIndex,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n selectedAnnotations,\n isDraggable,\n isResizable,\n isRotatable = true,\n lockAspectRatio = false,\n resizeUI,\n rotationUI,\n selectionOutlineColor,\n outlineOffset,\n selectionOutline,\n zIndex = 2,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n }: GroupSelectionBoxProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBase = $state<Rect | null>(null);\n let isDraggingRef = $state(false);\n let isResizingRef = $state(false);\n let liveRotation = $state<number | null>(null);\n let cursorScreen = $state<{ x: number; y: number } | null>(null);\n let isHandleHovered = $state(false);\n\n // Check permissions before allowing drag/resize/rotate\n const effectiveIsDraggable = $derived(permissions.canModifyAnnotations && isDraggable);\n const effectiveIsResizable = $derived(permissions.canModifyAnnotations && isResizable);\n const effectiveIsRotatable = $derived(permissions.canModifyAnnotations && isRotatable);\n\n // Helper to compute group box on demand\n function getGroupBox(): Rect {\n const rects = selectedAnnotations.map((ta) => ta.object.rect);\n return boundingRectOrEmpty(rects);\n }\n\n // Compute the group bounding box from all selected annotations (for reactive bindings)\n const groupBox = $derived.by(getGroupBox);\n\n // Preview state for the group box during drag/resize\n let previewGroupBox = $state<Rect>(getGroupBox());\n\n // Sync preview with actual group box when not dragging/resizing\n $effect(() => {\n if (!isDraggingRef && !isResizingRef) {\n const newBox = groupBox;\n // Only update if values actually changed (not just object reference)\n if (\n previewGroupBox.origin.x !== newBox.origin.x ||\n previewGroupBox.origin.y !== newBox.origin.y ||\n previewGroupBox.size.width !== newBox.size.width ||\n previewGroupBox.size.height !== newBox.size.height\n ) {\n previewGroupBox = newBox;\n }\n }\n });\n\n // Subscribe to rotation end events to clear live rotation\n $effect(() => {\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n const unsubscribe = plugin.onRotateChange((event: { documentId: string; type: string }) => {\n if (event.documentId !== documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation = null;\n }\n });\n return unsubscribe;\n });\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const ROTATION_COLOR = $derived(rotationUI?.color ?? 'white');\n const ROTATION_CONNECTOR_COLOR = $derived(rotationUI?.connectorColor ?? '#007ACC');\n const ROTATION_SIZE = $derived(rotationUI?.size ?? 32);\n const ROTATION_MARGIN = $derived(rotationUI?.margin);\n const ROTATION_ICON_COLOR = $derived(rotationUI?.iconColor ?? '#007ACC');\n const SHOW_CONNECTOR = $derived(rotationUI?.showConnector ?? false);\n const ROTATION_BORDER_COLOR = $derived(rotationUI?.border?.color ?? '#007ACC');\n const ROTATION_BORDER_WIDTH = $derived(rotationUI?.border?.width ?? 1);\n const ROTATION_BORDER_STYLE = $derived(rotationUI?.border?.style ?? 'solid');\n\n // Outline resolution (new object > deprecated props > group defaults)\n const outlineColor = $derived(selectionOutline?.color ?? selectionOutlineColor ?? '#007ACC');\n const outlineStyleVal = $derived(selectionOutline?.style ?? 'dashed');\n const outlineWidthVal = $derived(selectionOutline?.width ?? 2);\n const outlineOff = $derived(selectionOutline?.offset ?? outlineOffset ?? 2);\n\n const groupRotationDisplay = $derived(liveRotation ?? 0);\n const rotationActive = $derived(liveRotation !== null);\n const normalizedRotationDisplay = $derived(\n Number.isFinite(groupRotationDisplay) ? Math.round(groupRotationDisplay * 10) / 10 : 0,\n );\n\n // Compute visual bounds in screen pixels, accounting for mixed noZoom/noRotate selections.\n // The correction offsets let us adjust the previewGroupBox position/size during drag/resize\n // without re-running the per-annotation loop.\n const visualBoundsCorrection = $derived.by(() => {\n let visualLeft = Infinity;\n let visualTop = Infinity;\n let visualRight = -Infinity;\n let visualBottom = -Infinity;\n for (const ta of selectedAnnotations) {\n const bounds = getAnnotationScreenBounds(ta, scale, rotation as Rotation);\n if (bounds.left < visualLeft) visualLeft = bounds.left;\n if (bounds.top < visualTop) visualTop = bounds.top;\n if (bounds.right > visualRight) visualRight = bounds.right;\n if (bounds.bottom > visualBottom) visualBottom = bounds.bottom;\n }\n const logicalLeft = groupBox.origin.x * scale;\n const logicalTop = groupBox.origin.y * scale;\n const logicalRight = (groupBox.origin.x + groupBox.size.width) * scale;\n const logicalBottom = (groupBox.origin.y + groupBox.size.height) * scale;\n return {\n left: visualLeft - logicalLeft,\n top: visualTop - logicalTop,\n right: visualRight - logicalRight,\n bottom: visualBottom - logicalBottom,\n };\n });\n\n // Group box dimensions for guide lines and rotation handle positioning\n const groupBoxLeft = $derived(previewGroupBox.origin.x * scale + visualBoundsCorrection.left);\n const groupBoxTop = $derived(previewGroupBox.origin.y * scale + visualBoundsCorrection.top);\n const groupBoxWidth = $derived(\n previewGroupBox.size.width * scale +\n (visualBoundsCorrection.right - visualBoundsCorrection.left),\n );\n const groupBoxHeight = $derived(\n previewGroupBox.size.height * scale +\n (visualBoundsCorrection.bottom - visualBoundsCorrection.top),\n );\n const groupCenterX = $derived(groupBoxWidth / 2);\n const groupCenterY = $derived(groupBoxHeight / 2);\n const groupGuideLength = $derived(Math.max(300, Math.max(groupBoxWidth, groupBoxHeight) + 80));\n\n // Use interaction handles for both drag, resize, and rotation\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: previewGroupBox,\n constraints: {\n minWidth: 20,\n minHeight: 20,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n enabled: true,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n if (!annotationPlugin.plugin) return;\n\n const plugin = annotationPlugin.plugin;\n const transformType = event.transformData.type;\n const isMove = transformType === 'move';\n const isResize = transformType === 'resize';\n\n // Skip drag operations if group is not draggable\n if (isMove && !effectiveIsDraggable) return;\n\n if (event.state === 'start') {\n gestureBase = getGroupBox();\n\n if (isMove) {\n isDraggingRef = true;\n // Use unified drag API - plugin handles attached links automatically\n plugin.startDrag(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n });\n } else if (isResize) {\n isResizingRef = true;\n // Use unified resize API - plugin handles attached links automatically\n plugin.startResize(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n resizeHandle: event.transformData.metadata?.handle ?? 'se',\n });\n }\n }\n\n // Rotation handling\n if (transformType === 'rotate') {\n if (!isRotatable) return;\n const ids = selectedAnnotations.map((ta) => ta.object.id);\n const cursorAngle = event.transformData.metadata?.rotationAngle ?? 0;\n const cursorPos = event.transformData.metadata?.cursorPosition;\n if (cursorPos) cursorScreen = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation = cursorAngle;\n plugin.startRotation(documentId, {\n annotationIds: ids,\n cursorAngle,\n rotationCenter: event.transformData.metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation = cursorAngle;\n plugin.updateRotation(\n documentId,\n cursorAngle,\n event.transformData.metadata?.rotationDelta,\n );\n } else if (event.state === 'end') {\n liveRotation = null;\n cursorScreen = null;\n plugin.commitRotation(documentId);\n }\n return;\n }\n\n const base = gestureBase ?? getGroupBox();\n\n if (isMove && event.transformData.changes.rect) {\n // Calculate delta from original position\n const newRect = event.transformData.changes.rect;\n const rawDelta = {\n x: newRect.origin.x - base.origin.x,\n y: newRect.origin.y - base.origin.y,\n };\n\n // Plugin clamps delta and emits events (attached links receive updates too)\n const clampedDelta = plugin.updateDrag(documentId, rawDelta);\n\n // Update preview group box with clamped delta\n previewGroupBox = {\n ...base,\n origin: {\n x: base.origin.x + clampedDelta.x,\n y: base.origin.y + clampedDelta.y,\n },\n };\n } else if (isResize && event.transformData.changes.rect) {\n const newGroupBox = event.transformData.changes.rect;\n\n // Plugin computes rects for all participants and emits events\n plugin.updateResize(documentId, newGroupBox);\n\n // Update preview\n previewGroupBox = newGroupBox;\n }\n\n if (event.state === 'end') {\n gestureBase = null;\n\n if (isMove && isDraggingRef) {\n isDraggingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitDrag(documentId);\n } else if (isResize && isResizingRef) {\n isResizingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitResize(documentId);\n }\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOff,\n offsetMode: 'outside',\n includeSides: !lockAspectRatio,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: 0,\n zIndex: zIndex,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE,\n margin: ROTATION_MARGIN,\n zIndex: zIndex + 2,\n showConnector: SHOW_CONNECTOR,\n },\n includeVertices: false,\n includeRotation: effectiveIsRotatable,\n currentRotation: liveRotation ?? 0,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const rotationHandle = $derived(interactionHandles.rotation);\n\n // --- Group Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(!!groupSelectionMenu || !!groupSelectionMenuSnippet);\n\n // Build context object for group selection menu\n function buildContext(): GroupSelectionContext {\n return {\n type: 'group',\n annotations: selectedAnnotations,\n pageIndex,\n };\n }\n\n // Build menu props\n function buildMenuProps(rect: Rect, menuWrapperProps: MenuWrapperProps): GroupSelectionMenuProps {\n // The handle's visual angle = groupRotationDisplay + pageRotation (in degrees).\n // `rotation` is in quarter turns (0-3), so multiply by 90 to get degrees.\n // The menu (suggestTop: false) renders at the visual bottom (180deg).\n // Flip the menu to the top when the handle is in the bottom visual hemisphere\n // to prevent it from overlapping with the rotation handle.\n const effectiveAngle = (((groupRotationDisplay + rotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide = effectiveIsRotatable && effectiveAngle > 90 && effectiveAngle < 270;\n\n return {\n context: buildContext(),\n selected: true,\n rect,\n placement: { suggestTop: handleNearMenuSide },\n menuWrapperProps,\n };\n }\n\n // Svelte action for portaling tooltip to document.body\n function portalToBody(node: HTMLElement) {\n document.body.appendChild(node);\n return {\n destroy() {\n if (node.parentNode === document.body) {\n document.body.removeChild(node);\n }\n },\n };\n }\n</script>\n\n{#if selectedAnnotations.length >= 2}\n <div data-group-selection-box data-no-interaction>\n <!-- Outer div: AABB container - stable center for help lines and rotation handle -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupBoxLeft}px\"\n style:top=\"{groupBoxTop}px\"\n style:width=\"{groupBoxWidth}px\"\n style:height=\"{groupBoxHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n >\n <!-- Rotation guide lines - anchored at stable center -->\n {#if rotationActive}\n <!-- Fixed snap lines (cross at 0/90/180/270) -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX - groupGuideLength / 2}px\"\n style:top=\"{groupCenterY}px\"\n style:width=\"{groupGuideLength}px\"\n style:height=\"1px\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX}px\"\n style:top=\"{groupCenterY - groupGuideLength / 2}px\"\n style:width=\"1px\"\n style:height=\"{groupGuideLength}px\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <!-- Rotating indicator line showing current angle -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX - groupGuideLength / 2}px\"\n style:top=\"{groupCenterY}px\"\n style:width=\"{groupGuideLength}px\"\n style:height=\"1px\"\n style:transform-origin=\"center center\"\n style:transform=\"rotate({groupRotationDisplay}deg)\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.8\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n\n <!-- Rotation handle - orbits in AABB space -->\n {#if effectiveIsRotatable && rotationHandle}\n {#if rotationUI?.component}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n {@render rotationUI.component({\n ...rotationHandle.handle,\n backgroundColor: ROTATION_COLOR,\n iconColor: ROTATION_ICON_COLOR,\n connectorStyle: `${rotationHandle.connector.style}; background-color: ${ROTATION_CONNECTOR_COLOR}; opacity: ${rotationActive ? 0 : 1};`,\n showConnector: SHOW_CONNECTOR,\n opacity: rotationActive ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR,\n width: ROTATION_BORDER_WIDTH,\n style: ROTATION_BORDER_STYLE,\n },\n })}\n </div>\n {:else}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n <!-- Connector line -->\n {#if SHOW_CONNECTOR}\n <div\n style=\"{rotationHandle.connector\n .style}; background-color: {ROTATION_CONNECTOR_COLOR}; opacity: {rotationActive\n ? 0\n : 1};\"\n ></div>\n {/if}\n <!-- Rotation handle -->\n <div\n {...{\n onpointerdown: rotationHandle.handle.onpointerdown,\n onpointermove: rotationHandle.handle.onpointermove,\n onpointerup: rotationHandle.handle.onpointerup,\n onpointercancel: rotationHandle.handle.onpointercancel,\n }}\n style=\"{rotationHandle.handle\n .style}; background-color: {ROTATION_COLOR}; border: {ROTATION_BORDER_WIDTH}px {ROTATION_BORDER_STYLE} {ROTATION_BORDER_COLOR}; box-sizing: border-box; display: flex; align-items: center; justify-content: center; pointer-events: auto; opacity: {rotationActive\n ? 0\n : 1};\"\n >\n <svg\n width={Math.round(ROTATION_SIZE * 0.6)}\n height={Math.round(ROTATION_SIZE * 0.6)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={ROTATION_ICON_COLOR}\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n {/if}\n {/if}\n\n <!-- Inner div: group content area with outline and resize handles -->\n <div\n {...effectiveIsDraggable\n ? interactionHandles.dragProps\n : { onpointerdown: (e: PointerEvent) => e.stopPropagation() }}\n style:position=\"absolute\"\n style:left=\"0px\"\n style:top=\"0px\"\n style:width=\"{groupBoxWidth}px\"\n style:height=\"{groupBoxHeight}px\"\n style:outline={rotationActive\n ? 'none'\n : `${outlineWidthVal}px ${outlineStyleVal} ${outlineColor}`}\n style:outline-offset=\"{outlineOff - 1}px\"\n style:cursor={effectiveIsDraggable ? 'move' : 'default'}\n style:touch-action=\"none\"\n style:pointer-events=\"auto\"\n >\n <!-- Resize handles -->\n {#if effectiveIsResizable && !rotationActive}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({\n ...hProps,\n style: handleStyle,\n backgroundColor: HANDLE_COLOR,\n })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n </div>\n\n <!-- Cursor-following rotation tooltip -->\n {#if (rotationActive || isHandleHovered) && cursorScreen}\n <div use:portalToBody>\n <div\n style:position=\"fixed\"\n style:left=\"{cursorScreen.x + 16}px\"\n style:top=\"{cursorScreen.y - 16}px\"\n style:background=\"rgba(0,0,0,0.8)\"\n style:color=\"#fff\"\n style:padding=\"4px 8px\"\n style:border-radius=\"4px\"\n style:font-size=\"12px\"\n style:font-family=\"monospace\"\n style:pointer-events=\"none\"\n style:z-index=\"10000\"\n style:white-space=\"nowrap\"\n >\n {normalizedRotationDisplay.toFixed(0)}°\n </div>\n </div>\n {/if}\n\n <!-- Group selection menu -->\n {#if shouldShowMenu && !rotationActive}\n <CounterRotate\n rect={{\n origin: {\n x: groupBoxLeft,\n y: groupBoxTop,\n },\n size: {\n width: groupBoxWidth,\n height: groupBoxHeight,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if groupSelectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = groupSelectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if groupSelectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render groupSelectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n </div>\n{/if}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface InkProps {\n isSelected: boolean;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n strokeColor,\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n }: InkProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#000000');\n\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 const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n {#each paths as d, i (`hit-${i}`)}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n {d}\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#each paths as d, i (`vis-${i}`)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={resolvedColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, PdfRectDifferences } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { generateCloudyRectanglePath } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface SquareProps {\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n cloudyBorderIntensity?: number;\n rectangleDifferences?: PdfRectDifferences;\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 appearanceActive = false,\n cloudyBorderIntensity,\n rectangleDifferences,\n }: SquareProps = $props();\n\n const isCloudy = $derived((cloudyBorderIntensity ?? 0) > 0);\n\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 cloudyPath = $derived.by(() => {\n if (!isCloudy) return null;\n return generateCloudyRectanglePath(\n { x: 0, y: 0, width: rect.size.width, height: rect.size.height },\n rectangleDifferences,\n cloudyBorderIntensity!,\n strokeWidth,\n );\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 overflow=\"visible\"\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n />\n {:else}\n <rect\n {x}\n {y}\n {width}\n {height}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n />\n {/if}\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n stroke-linejoin=\"round\"\n />\n {:else}\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type PdfRectDifferences, type Rect } from '@embedpdf/models';\n import { generateCloudyEllipsePath } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface CircleProps {\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\n cloudyBorderIntensity?: number;\n rectangleDifferences?: PdfRectDifferences;\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 appearanceActive = false,\n cloudyBorderIntensity,\n rectangleDifferences,\n }: CircleProps = $props();\n\n const isCloudy = $derived((cloudyBorderIntensity ?? 0) > 0);\n\n const { width, height, cx, cy, rx, ry } = $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\n return {\n width: outerW,\n height: outerH,\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n const cloudyPath = $derived.by(() => {\n if (!isCloudy) return null;\n return generateCloudyEllipsePath(\n { x: 0, y: 0, width: rect.size.width, height: rect.size.height },\n rectangleDifferences,\n cloudyBorderIntensity!,\n strokeWidth,\n );\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n let hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n overflow=\"visible\"\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n />\n {:else}\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n />\n {/if}\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-linejoin=\"round\"\n />\n {:else}\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n {/if}\n {/if}\n</svg>\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 const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface LineProps {\n color?: string;\n opacity?: number;\n strokeWidth: number;\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) => void;\n isSelected: boolean;\n appearanceActive?: 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 appearanceActive = false,\n }: LineProps = $props();\n\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 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 const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {#if endings.start}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n {#if endings.end}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface PolylineProps {\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) => void;\n lineEndings?: LineEndings;\n appearanceActive?: boolean;\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 lineEndings,\n appearanceActive = false,\n }: PolylineProps = $props();\n\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\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 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]);\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]);\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI,\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad,\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 const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={pathData}\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\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 {#if endings.start}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n {#if endings.end}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <path\n d={pathData}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\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 style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { generateCloudyPolygonPath } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\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) => void;\n currentVertex?: Position;\n handleSize?: number;\n appearanceActive?: boolean;\n cloudyBorderIntensity?: 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 appearanceActive = false,\n cloudyBorderIntensity,\n }: PolygonProps = $props();\n\n const isCloudy = $derived((cloudyBorderIntensity ?? 0) > 0);\n\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\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 cloudyPath = $derived.by(() => {\n if (!isCloudy || allPoints.length < 3) return null;\n return generateCloudyPolygonPath(allPoints, rect.origin, cloudyBorderIntensity!, strokeWidth);\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 const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / 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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={isCloudy && cloudyPath ? cloudyPath.path : pathData}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\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 />\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n {opacity}\n style:fill={color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linejoin=\"round\"\n />\n {:else}\n <path\n d={pathData}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\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 style:pointer-events=\"none\"\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 style:pointer-events=\"none\"\n />\n {/if}\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCssProperties,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\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) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n documentId,\n isSelected,\n isEditing,\n annotation,\n pageIndex,\n scale,\n onClick,\n appearanceActive = false,\n }: FreeTextProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n let editingRef = false;\n\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editingRef = true;\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 $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 function handleBlur() {\n if (!editingRef) return;\n editingRef = false;\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\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 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\n const fontCss = $derived(standardFontCssProperties(annotation.object.fontFamily));\n</script>\n\n<div\n role=\"button\"\n tabindex={-1}\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 style:opacity={appearanceActive ? 0 : 1}\n onpointerdown={onClick}\n>\n <span\n bind:this={editorRef}\n role=\"textbox\"\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={fontCss.fontFamily}\n style:font-weight={fontCss.fontWeight}\n style:font-style={fontCss.fontStyle}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.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 unrotated?: boolean;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n unrotated = false,\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 unrotated,\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) => 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 const unrotated = $derived(!!annotation.object.rotation && !!annotation.object.unrotatedRect);\n</script>\n\n<div\n role=\"button\"\n tabindex={-1}\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>\n <RenderAnnotation\n {documentId}\n {pageIndex}\n annotation={annotationProp}\n scaleFactor={scale}\n {unrotated}\n />\n</div>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface LinkProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Stroke colour – defaults to blue when omitted */\n strokeColor?: string;\n /** Stroke width in PDF units */\n strokeWidth?: number;\n /** Stroke type – defaults to underline when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – for dashed style */\n strokeDashArray?: number[];\n /** Bounding box of the annotation (PDF units) */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Click handler (used for selection) */\n onClick?: (e: MouseEvent) => void;\n /** Whether this link has an IRT (In Reply To) reference - disables direct interaction */\n hasIRT?: boolean;\n }\n\n let {\n isSelected,\n strokeColor = '#0000FF',\n strokeWidth = 2,\n strokeStyle = PdfAnnotationBorderStyle.UNDERLINE,\n strokeDashArray,\n rect,\n scale,\n onClick,\n hasIRT = false,\n }: LinkProps = $props();\n\n const width = $derived(rect.size.width);\n const height = $derived(rect.size.height);\n const svgWidth = $derived(width * scale);\n const svgHeight = $derived(height * scale);\n\n // Calculate dash array for SVG\n const dashArray = $derived.by(() => {\n if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n return strokeDashArray?.join(',') ?? `${strokeWidth * 3},${strokeWidth}`;\n }\n return undefined;\n });\n\n // For underline style, render a line at the bottom\n // For solid/dashed, render a rectangle border\n const isUnderline = $derived(strokeStyle === PdfAnnotationBorderStyle.UNDERLINE);\n\n const hitAreaCursor = $derived(hasIRT ? 'default' : isSelected ? 'move' : 'pointer');\n const hitAreaPointerEvents = $derived(hasIRT ? 'none' : isSelected ? 'none' : 'visible');\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; pointer-events: none;\"\n style:width=\"{svgWidth}px\"\n style:height=\"{svgHeight}px\"\n width={svgWidth}\n height={svgHeight}\n viewBox=\"0 0 {width} {height}\"\n>\n <!-- Invisible hit area for the entire link region -->\n <!-- IRT links are not directly clickable - interaction goes through parent -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <rect\n x={0}\n y={0}\n {width}\n {height}\n fill=\"transparent\"\n onpointerdown={hasIRT ? undefined : onClick}\n style:cursor={hitAreaCursor}\n style:pointer-events={hitAreaPointerEvents}\n />\n\n {#if isUnderline}\n <!-- Underline style: line at bottom of rect -->\n <line\n x1={1}\n y1={height - 1}\n x2={width - 1}\n y2={height - 1}\n stroke={strokeColor}\n stroke-width={strokeWidth}\n stroke-dasharray={dashArray}\n style:pointer-events=\"none\"\n />\n {:else}\n <!-- Solid/Dashed style: rectangle border -->\n <rect\n x={strokeWidth / 2}\n y={strokeWidth / 2}\n width={Math.max(width - strokeWidth, 0)}\n height={Math.max(height - strokeWidth, 0)}\n fill=\"transparent\"\n stroke={strokeColor}\n stroke-width={strokeWidth}\n stroke-dasharray={dashArray}\n style:pointer-events=\"none\"\n />\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: HighlightProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={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={appearanceActive ? 'transparent' : resolvedColor}\n style:opacity={appearanceActive ? undefined : 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 /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: UnderlineProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\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 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 -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\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={resolvedColor}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: StrikeoutProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\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 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 -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\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={resolvedColor}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: SquigglyProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\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=\"${resolvedColor}\" 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 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 -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\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 {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import { getContrastStrokeColor } from '@embedpdf/models';\n\n interface TextProps {\n isSelected: boolean;\n color?: string;\n opacity?: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n color = '#facc15',\n opacity = 1,\n onClick,\n appearanceActive = false,\n }: TextProps = $props();\n\n const lineColor = $derived(getContrastStrokeColor(color));\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div\n style:position=\"absolute\"\n style:inset=\"0\"\n style:z-index=\"2\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor={isSelected ? 'move' : 'pointer'}\n onpointerdown={onClick}\n>\n {#if !appearanceActive}\n <svg\n style:position=\"absolute\"\n style:inset=\"0\"\n style:pointer-events=\"none\"\n viewBox=\"0 0 20 20\"\n width=\"100%\"\n height=\"100%\"\n >\n <path\n d=\"M 0.5 15.5 L 0.5 0.5 L 19.5 0.5 L 19.5 15.5 L 8.5 15.5 L 6.5 19.5 L 4.5 15.5 Z\"\n fill={color}\n {opacity}\n stroke={lineColor}\n stroke-width=\"1\"\n stroke-linejoin=\"miter\"\n />\n <line x1=\"2.5\" y1=\"4.25\" x2=\"17.5\" y2=\"4.25\" stroke={lineColor} stroke-width=\"1\" />\n <line x1=\"2.5\" y1=\"8\" x2=\"17.5\" y2=\"8\" stroke={lineColor} stroke-width=\"1\" />\n <line x1=\"2.5\" y1=\"11.75\" x2=\"17.5\" y2=\"11.75\" stroke={lineColor} stroke-width=\"1\" />\n </svg>\n {/if}\n</div>\n","import {\n PdfAnnotationSubtype,\n PdfAnnotationObject,\n PdfBlendMode,\n PdfInkAnnoObject,\n PdfSquareAnnoObject,\n PdfCircleAnnoObject,\n PdfLineAnnoObject,\n PdfPolylineAnnoObject,\n PdfPolygonAnnoObject,\n PdfFreeTextAnnoObject,\n PdfStampAnnoObject,\n PdfLinkAnnoObject,\n PdfHighlightAnnoObject,\n PdfUnderlineAnnoObject,\n PdfStrikeOutAnnoObject,\n PdfSquigglyAnnoObject,\n PdfCaretAnnoObject,\n PdfTextAnnoObject,\n} from '@embedpdf/models';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from '../context';\nimport { createRenderer } from '../context/renderer-registry.svelte';\n\nimport InkWrapper from './renderers/InkRenderer.svelte';\nimport SquareWrapper from './renderers/SquareRenderer.svelte';\nimport CircleWrapper from './renderers/CircleRenderer.svelte';\nimport LineWrapper from './renderers/LineRenderer.svelte';\nimport PolylineWrapper from './renderers/PolylineRenderer.svelte';\nimport PolygonWrapper from './renderers/PolygonRenderer.svelte';\nimport FreeTextWrapper from './renderers/FreeTextRenderer.svelte';\nimport StampWrapper from './renderers/StampRenderer.svelte';\nimport LinkWrapper from './renderers/LinkRenderer.svelte';\nimport HighlightWrapper from './renderers/HighlightRenderer.svelte';\nimport UnderlineWrapper from './renderers/UnderlineRenderer.svelte';\nimport StrikeoutWrapper from './renderers/StrikeoutRenderer.svelte';\nimport SquigglyWrapper from './renderers/SquigglyRenderer.svelte';\nimport CaretWrapper from './renderers/CaretRenderer.svelte';\nimport TextWrapper from './renderers/TextRenderer.svelte';\n\nexport const builtInRenderers: BoxedAnnotationRenderer[] = [\n createRenderer<PdfInkAnnoObject>({\n id: 'ink',\n matches: (a): a is PdfInkAnnoObject => a.type === PdfAnnotationSubtype.INK,\n component: InkWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfSquareAnnoObject>({\n id: 'square',\n matches: (a): a is PdfSquareAnnoObject => a.type === PdfAnnotationSubtype.SQUARE,\n component: SquareWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfCircleAnnoObject>({\n id: 'circle',\n matches: (a): a is PdfCircleAnnoObject => a.type === PdfAnnotationSubtype.CIRCLE,\n component: CircleWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLineAnnoObject>({\n id: 'line',\n matches: (a): a is PdfLineAnnoObject => a.type === PdfAnnotationSubtype.LINE,\n component: LineWrapper,\n vertexConfig: {\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, v) => ({\n ...a,\n linePoints: { start: v[0], end: v[1] },\n }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfPolylineAnnoObject>({\n id: 'polyline',\n matches: (a): a is PdfPolylineAnnoObject => a.type === PdfAnnotationSubtype.POLYLINE,\n component: PolylineWrapper,\n vertexConfig: {\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfPolygonAnnoObject>({\n id: 'polygon',\n matches: (a): a is PdfPolygonAnnoObject => a.type === PdfAnnotationSubtype.POLYGON,\n component: PolygonWrapper,\n vertexConfig: {\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfHighlightAnnoObject>({\n id: 'highlight',\n matches: (a): a is PdfHighlightAnnoObject => a.type === PdfAnnotationSubtype.HIGHLIGHT,\n component: HighlightWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n defaultBlendMode: PdfBlendMode.Multiply,\n }),\n\n createRenderer<PdfUnderlineAnnoObject>({\n id: 'underline',\n matches: (a): a is PdfUnderlineAnnoObject => a.type === PdfAnnotationSubtype.UNDERLINE,\n component: UnderlineWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfStrikeOutAnnoObject>({\n id: 'strikeout',\n matches: (a): a is PdfStrikeOutAnnoObject => a.type === PdfAnnotationSubtype.STRIKEOUT,\n component: StrikeoutWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfSquigglyAnnoObject>({\n id: 'squiggly',\n matches: (a): a is PdfSquigglyAnnoObject => a.type === PdfAnnotationSubtype.SQUIGGLY,\n component: SquigglyWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfTextAnnoObject>({\n id: 'text',\n matches: (a): a is PdfTextAnnoObject => a.type === PdfAnnotationSubtype.TEXT && !a.inReplyToId,\n component: TextWrapper,\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfCaretAnnoObject>({\n id: 'caret',\n matches: (a): a is PdfCaretAnnoObject => a.type === PdfAnnotationSubtype.CARET,\n component: CaretWrapper,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfFreeTextAnnoObject>({\n id: 'freeText',\n matches: (a): a is PdfFreeTextAnnoObject => a.type === PdfAnnotationSubtype.FREETEXT,\n component: FreeTextWrapper,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n isDraggable: (toolDraggable, { isEditing }) => toolDraggable && !isEditing,\n onDoubleClick: (id, setEditingId) => setEditingId(id),\n }),\n\n createRenderer<PdfStampAnnoObject>({\n id: 'stamp',\n matches: (a): a is PdfStampAnnoObject => a.type === PdfAnnotationSubtype.STAMP,\n component: StampWrapper,\n useAppearanceStream: false,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLinkAnnoObject>({\n id: 'link',\n matches: (a): a is PdfLinkAnnoObject => a.type === PdfAnnotationSubtype.LINK,\n component: LinkWrapper,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n useAppearanceStream: false,\n selectOverride: (e, annotation, helpers) => {\n e.stopPropagation();\n helpers.clearSelection();\n if (annotation.object.inReplyToId) {\n const parent = helpers.allAnnotations.find(\n (a) => a.object.id === annotation.object.inReplyToId,\n );\n if (parent) {\n helpers.selectAnnotation(parent.object.pageIndex, parent.object.id);\n return;\n }\n }\n helpers.selectAnnotation(helpers.pageIndex, annotation.object.id);\n },\n hideSelectionMenu: (a) => !!a.inReplyToId,\n }),\n];\n","<script lang=\"ts\">\n import type { PdfInkAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Ink from '../annotations/Ink.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfInkAnnoObject> = $props();\n</script>\n\n<Ink {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfSquareAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Square from '../annotations/Square.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfSquareAnnoObject> = $props();\n</script>\n\n<Square {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfCircleAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Circle from '../annotations/Circle.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfCircleAnnoObject> = $props();\n</script>\n\n<Circle {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfLineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Line from '../annotations/Line.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfLineAnnoObject> = $props();\n</script>\n\n<Line {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfPolylineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Polyline from '../annotations/Polyline.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfPolylineAnnoObject> = $props();\n</script>\n\n<Polyline {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfPolygonAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Polygon from '../annotations/Polygon.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfPolygonAnnoObject> = $props();\n</script>\n\n<Polygon {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfHighlightAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Highlight from '../text-markup/Highlight.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfHighlightAnnoObject> = $props();\n</script>\n\n<Highlight {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfUnderlineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Underline from '../text-markup/Underline.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfUnderlineAnnoObject> = $props();\n</script>\n\n<Underline {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfStrikeOutAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Strikeout from '../text-markup/Strikeout.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfStrikeOutAnnoObject> = $props();\n</script>\n\n<Strikeout {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfSquigglyAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Squiggly from '../text-markup/Squiggly.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfSquigglyAnnoObject> = $props();\n</script>\n\n<Squiggly {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfTextAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Text from '../annotations/Text.svelte';\n\n let {\n currentObject,\n isSelected,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfTextAnnoObject> = $props();\n</script>\n\n<Text\n {isSelected}\n color={currentObject.strokeColor ?? currentObject.color}\n opacity={currentObject.opacity}\n {onClick}\n {appearanceActive}\n/>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface CaretProps {\n isSelected: boolean;\n strokeColor?: string;\n opacity?: number;\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n strokeColor = '#000000',\n opacity = 1,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n }: CaretProps = $props();\n\n const { width, height, path } = $derived.by(() => {\n const w = rect.size.width;\n const h = rect.size.height;\n const midX = w / 2;\n\n const d = [\n `M 0 ${h}`,\n `C ${w * 0.27} ${h} ${midX} ${h - h * 0.44} ${midX} 0`,\n `C ${midX} ${h - h * 0.44} ${w - w * 0.27} ${h} ${w} ${h}`,\n 'Z',\n ].join(' ');\n\n return { width: w, height: h, path: d };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\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 width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n overflow=\"visible\"\n>\n <!-- Hit area -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={path}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={4}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={isSelected ? 'none' : 'visible'}\n />\n <!-- Visual -->\n {#if !appearanceActive}\n <path\n d={path}\n fill={strokeColor}\n stroke={strokeColor}\n stroke-width={0.5}\n {opacity}\n fill-rule=\"evenodd\"\n style:pointer-events=\"none\"\n />\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { PdfCaretAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Caret from '../annotations/Caret.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfCaretAnnoObject> = $props();\n</script>\n\n<Caret {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfFreeTextAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import FreeText from '../annotations/FreeText.svelte';\n\n let {\n annotation,\n currentObject,\n isSelected,\n isEditing,\n scale,\n pageIndex,\n documentId,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfFreeTextAnnoObject> = $props();\n</script>\n\n<FreeText\n {documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object: currentObject }}\n {pageIndex}\n {scale}\n {onClick}\n {appearanceActive}\n/>\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Stamp from '../annotations/Stamp.svelte';\n\n let {\n annotation,\n isSelected,\n documentId,\n pageIndex,\n scale,\n onClick,\n }: AnnotationRendererProps<PdfStampAnnoObject> = $props();\n</script>\n\n<Stamp {documentId} {isSelected} {annotation} {pageIndex} {scale} {onClick} />\n","<script lang=\"ts\">\n import type { PdfLinkAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Link from '../annotations/Link.svelte';\n\n let { currentObject, isSelected, scale, onClick }: AnnotationRendererProps<PdfLinkAnnoObject> =\n $props();\n</script>\n\n<Link {...currentObject} {isSelected} {scale} {onClick} hasIRT={!!currentObject.inReplyToId} />\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import {\n blendModeToCss,\n type PdfAnnotationObject,\n PdfBlendMode,\n type AnnotationAppearanceMap,\n type AnnotationAppearances,\n } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationIds,\n type TrackedAnnotation,\n resolveInteractionProp,\n } from '@embedpdf/plugin-annotation';\n\n import {\n type PointerEventHandlersWithLifecycle,\n type EmbedPdfPointerEvent,\n } 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 import type {\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n } from '../context';\n\n import GroupSelectionBox from './GroupSelectionBox.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n import { builtInRenderers } from './built-in-renderers';\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 selectionMenu?: AnnotationSelectionMenuRenderFn;\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n rotationUI?: RotationHandleUI;\n /** @deprecated Use `selectionOutline` instead */\n selectionOutlineColor?: string;\n selectionOutline?: SelectionOutline;\n groupSelectionOutline?: SelectionOutline;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n annotationRenderers?: BoxedAnnotationRenderer[];\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 allSelectedIds = $state<string[]>([]);\n let editingId = $state<string | null>(null);\n let appearanceMap = $state<AnnotationAppearanceMap<Blob>>({});\n let prevScale: number = annotationsProps.scale;\n\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n const isMultiSelected = $derived(allSelectedIds.length > 1);\n\n // Merge renderers: external renderers override built-ins by ID\n const allRenderers = $derived.by(() => {\n const external = annotationsProps.annotationRenderers ?? [];\n const externalIds = new Set(external.map((r) => r.id));\n return [...external, ...builtInRenderers.filter((r) => !externalIds.has(r.id))];\n });\n\n function resolveRenderer(annotation: TrackedAnnotation): BoxedAnnotationRenderer | null {\n return allRenderers.find((r) => r.matches(annotation.object)) ?? null;\n }\n\n function getAppearanceForAnnotation(ta: TrackedAnnotation): AnnotationAppearances<Blob> | null {\n if (ta.dictMode) return null;\n if (ta.object.rotation && ta.object.unrotatedRect) return null;\n const appearances = appearanceMap[ta.object.id];\n if (!appearances?.normal) return null;\n return appearances;\n }\n\n // Subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(currentState);\n\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(state);\n });\n return () => off?.();\n });\n\n // Fetch appearance map, invalidate on scale change\n $effect(() => {\n if (!annotationProvides) return;\n\n if (prevScale !== annotationsProps.scale) {\n annotationProvides.invalidatePageAppearances(annotationsProps.pageIndex);\n prevScale = annotationsProps.scale;\n }\n\n const task = annotationProvides.getPageAppearances(annotationsProps.pageIndex, {\n scaleFactor: annotationsProps.scale,\n dpr: typeof window !== 'undefined' ? window.devicePixelRatio : 1,\n });\n task.wait(\n (map) => (appearanceMap = map),\n () => (appearanceMap = {}),\n );\n });\n\n // Pointer handlers\n const handlers: PointerEventHandlersWithLifecycle<EmbedPdfPointerEvent<PointerEvent>> = {\n onPointerDown: (_, pe) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n function handleClick(e: AnnotationInteractionEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n selectionCapability.provides.clear();\n\n const isModifierPressed = 'metaKey' in e ? e.metaKey || e.ctrlKey : false;\n\n if (isModifierPressed) {\n annotationProvides.toggleSelection(annotationsProps.pageIndex, annotation.object.id);\n } else {\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n }\n\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n\n function setEditingId(id: string) {\n editingId = id;\n }\n\n const selectedAnnotationsOnPage = $derived(\n annotations.filter((anno) => allSelectedIds.includes(anno.object.id)),\n );\n\n const areAllSelectedDraggable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupDraggable = resolveInteractionProp(\n tool?.interaction.isGroupDraggable,\n ta.object,\n true,\n );\n const singleDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupDraggable !== undefined ? groupDraggable : singleDraggable;\n });\n });\n\n const areAllSelectedResizable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupResizable = resolveInteractionProp(\n tool?.interaction.isGroupResizable,\n ta.object,\n true,\n );\n const singleResizable = resolveInteractionProp(\n tool?.interaction.isResizable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupResizable !== undefined ? groupResizable : singleResizable;\n });\n });\n\n const areAllSelectedRotatable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupRotatable = resolveInteractionProp(\n tool?.interaction.isGroupRotatable,\n ta.object,\n true,\n );\n const singleRotatable = resolveInteractionProp(\n tool?.interaction.isRotatable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupRotatable !== undefined ? groupRotatable : singleRotatable;\n });\n });\n\n const shouldLockGroupAspectRatio = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.some((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupLock = resolveInteractionProp(\n tool?.interaction.lockGroupAspectRatio,\n ta.object,\n false,\n );\n const singleLock = resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n ta.object,\n false,\n );\n return tool?.interaction.lockGroupAspectRatio !== undefined ? groupLock : singleLock;\n });\n });\n\n const allSelectedOnSamePage = $derived.by(() => {\n if (!annotationProvides) return false;\n if (allSelectedIds.length < 2) return false;\n const allSelected = annotationProvides.getSelectedAnnotations();\n return allSelected.every((ta) => ta.object.pageIndex === annotationsProps.pageIndex);\n });\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const renderer = resolveRenderer(annotation)}\n {#if renderer}\n {@const isSelected = allSelectedIds.includes(annotation.object.id)}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const defaults = renderer.interactionDefaults}\n {@const resolvedDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n defaults?.isDraggable ?? true,\n )}\n {@const finalDraggable = renderer.isDraggable\n ? renderer.isDraggable(resolvedDraggable, { isEditing })\n : resolvedDraggable}\n {@const useAP = tool?.behavior?.useAppearanceStream ?? renderer.useAppearanceStream ?? true}\n {@const selectHelpers = {\n defaultSelect: handleClick,\n selectAnnotation: (pi: number, id: string) => annotationProvides?.selectAnnotation(pi, id),\n clearSelection: () => selectionCapability.provides?.clear(),\n allAnnotations: annotations,\n pageIndex: annotationsProps.pageIndex,\n }}\n {@const onSelect = renderer.selectOverride\n ? (e: AnnotationInteractionEvent) => renderer.selectOverride!(e, annotation, selectHelpers)\n : (e: AnnotationInteractionEvent) => handleClick(e, annotation)}\n {@const RendererComponent = renderer.component}\n\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n {isEditing}\n {isMultiSelected}\n isDraggable={finalDraggable}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n defaults?.isResizable ?? false,\n )}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n defaults?.lockAspectRatio ?? false,\n )}\n isRotatable={resolveInteractionProp(\n tool?.interaction.isRotatable,\n annotation.object,\n defaults?.isRotatable ?? false,\n )}\n vertexConfig={renderer.vertexConfig}\n selectionMenu={renderer.hideSelectionMenu?.(annotation.object)\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenu}\n selectionMenuSnippet={renderer.hideSelectionMenu?.(annotation.object)\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenuSnippet}\n {onSelect}\n onDoubleClick={renderer.onDoubleClick\n ? (e) => {\n e.stopPropagation();\n renderer.onDoubleClick!(annotation.object.id, setEditingId);\n }\n : undefined}\n zIndex={renderer.zIndex}\n blendMode={blendModeToCss(\n annotation.object.blendMode ?? renderer.defaultBlendMode ?? PdfBlendMode.Normal,\n )}\n style={renderer.containerStyle?.(annotation.object)}\n appearance={useAP ? getAppearanceForAnnotation(annotation) : undefined}\n {...annotationsProps}\n >\n {#snippet children(currentObject, { appearanceActive })}\n <RendererComponent\n {annotation}\n {currentObject}\n {isSelected}\n {isEditing}\n scale={annotationsProps.scale}\n pageIndex={annotationsProps.pageIndex}\n documentId={annotationsProps.documentId}\n onClick={onSelect}\n {appearanceActive}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n\n<!-- Group Selection Box -->\n{#if allSelectedOnSamePage && selectedAnnotationsOnPage.length >= 2}\n <GroupSelectionBox\n documentId={annotationsProps.documentId}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n rotation={annotationsProps.rotation}\n pageWidth={annotationsProps.pageWidth}\n pageHeight={annotationsProps.pageHeight}\n selectedAnnotations={selectedAnnotationsOnPage}\n isDraggable={areAllSelectedDraggable}\n isResizable={areAllSelectedResizable}\n isRotatable={areAllSelectedRotatable}\n lockAspectRatio={shouldLockGroupAspectRatio}\n resizeUI={annotationsProps.resizeUI}\n rotationUI={annotationsProps.rotationUI}\n selectionOutlineColor={annotationsProps.selectionOutlineColor}\n selectionOutline={annotationsProps.groupSelectionOutline ?? annotationsProps.selectionOutline}\n groupSelectionMenu={annotationsProps.groupSelectionMenu}\n groupSelectionMenuSnippet={annotationsProps.groupSelectionMenuSnippet}\n />\n{/if}\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 strokeColor={activeTool.defaults?.strokeColor}\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 strokeColor={activeTool.defaults?.strokeColor}\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 strokeColor={activeTool.defaults?.strokeColor}\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 strokeColor={activeTool.defaults?.strokeColor}\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 { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode } 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 style:mix-blend-mode={blendModeToCss(preview.data.blendMode ?? PdfBlendMode.Normal)}\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","import { createPluginPackage } from '@embedpdf/core';\nimport { AnnotationPluginPackage as BaseAnnotationPackage } from '@embedpdf/plugin-annotation';\nimport RendererRegistryProvider from './components/RendererRegistryProvider.svelte';\n\nexport * from './hooks';\nexport * from './components';\nexport * from './types';\nexport * from './context';\nexport * from '@embedpdf/plugin-annotation';\n\nexport const AnnotationPluginPackage = createPluginPackage(BaseAnnotationPackage)\n .addWrapper(RendererRegistryProvider)\n .build();\n","<script lang=\"ts\">\n import { type 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 GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import { getRendererRegistry, type BoxedAnnotationRenderer } from '../context';\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 /** Render function for group selection menu (schema-driven approach) */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize rotation handle */\n rotationUI?: RotationHandleUI;\n /** @deprecated Use `selectionOutline` instead */\n selectionOutlineColor?: string;\n /** Customize the selection outline for individual annotations */\n selectionOutline?: SelectionOutline;\n /** Customize the selection outline for the group selection box (falls back to selectionOutline) */\n groupSelectionOutline?: SelectionOutline;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n /** Custom annotation renderers from props */\n annotationRenderers?: BoxedAnnotationRenderer[];\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n resizeUI,\n vertexUI,\n rotationUI,\n selectionOutlineColor,\n selectionOutline,\n groupSelectionOutline,\n customAnnotationRenderer,\n annotationRenderers,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n // Get registry and merge with props\n const registry = getRendererRegistry();\n\n const allRenderers = $derived.by(() => {\n const fromRegistry = registry?.getAll() ?? [];\n const fromProps = annotationRenderers ?? [];\n const merged = [...fromRegistry];\n for (const r of fromProps) {\n const idx = merged.findIndex((m) => m.id === r.id);\n if (idx >= 0) merged[idx] = r;\n else merged.push(r);\n }\n return merged;\n });\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.by(() => {\n if (overrideRotation !== undefined) return overrideRotation;\n // Combine page intrinsic rotation with document rotation\n const pageRotation = page?.rotation ?? 0;\n const docRotation = documentState?.current?.rotation ?? 0;\n return ((pageRotation + docRotation) % 4) as Rotation;\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 {groupSelectionMenu}\n {groupSelectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {rotationUI}\n {selectionOutlineColor}\n {selectionOutline}\n {groupSelectionOutline}\n {customAnnotationRenderer}\n annotationRenderers={allRenderers}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["REGISTRY_KEY","Symbol","createRendererRegistry","renderers","$","state","proxy","register","entries","ids","Set","map","e","id","filter","r","has","set","some","getAll","provideRendererRegistry","registry","setContext","getRendererRegistry","getContext","createRenderer","entry","matches","component","vertexConfig","zIndex","defaultBlendMode","containerStyle","interactionDefaults","useAppearanceStream","isDraggable","onDoubleClick","selectOverride","hideSelectionMenu","useAnnotationCapability","useCapability","AnnotationPlugin","useAnnotationPlugin","usePlugin","isEditing","isMultiSelected","isRotatable","lockAspectRatio","propsClass","outlineOffset","restProps","rest_props","$$props","preview","liveRotation","cursorScreen","isHandleHovered","gestureActive","annotationCapability","annotationPlugin","permissions","useDocumentPermissions","documentId","gestureBaseRef","gestureBaseRectRef","effectiveIsDraggable","derived","canModifyAnnotations","effectiveIsResizable","effectiveIsRotatable","guardedOnDoubleClick","annotationProvides","provides","forDocument","currentObject","trackedAnnotation","object","annoFlags","flags","hasNoZoom","get","includes","hasNoRotate","visualScale","scale","effectivePageRotation","rotation","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","ROTATION_COLOR","rotationUI","ROTATION_CONNECTOR_COLOR","connectorColor","HANDLE_SIZE","size","VERTEX_SIZE","ROTATION_SIZE","ROTATION_MARGIN","margin","ROTATION_ICON_COLOR","iconColor","SHOW_CONNECTOR","showConnector","ROTATION_BORDER_COLOR","_b","border","ROTATION_BORDER_WIDTH","width","ROTATION_BORDER_STYLE","style","outlineColor","selectionOutline","selectionOutlineColor","outlineStyleVal","outlineWidth","outlineOff","offset","annotationRotation","rotationDisplay","normalizedRotationDisplay","Number","isFinite","Math","round","rotationActive","showOutline","explicitUnrotatedRect","unrotatedRect","effectiveUnrotatedRect","rect","rotationPivot","inferRotationCenterFromRects","controllerElement","aabbWidth","aabbHeight","height","innerWidth","innerHeight","usesCustomPivot","Boolean","innerLeft","origin","x","innerTop","y","innerTransformOrigin","centerX","centerY","guideLength","max","counterRot","getCounterRotation","apActive","normal","dictMode","childObject","user_effect","plugin","handleEvent","event","type","patch","previewPatches","untrack","unsubs","onDragChange","onResizeChange","onRotateChange","forEach","u","interactionHandles","useInteractionHandles","controller","element","vertices","extractVertices","constraints","minWidth","minHeight","boundingBox","pageWidth","pageHeight","maintainAspectRatio","pageRotation","rotationCenter","rotationElement","enabled","onUpdate","transformData","changes","metadata","pageSize","startDrag","annotationIds","startResize","resizeHandle","handle","delta","updateDrag","updateResize","base","vertexChanges","transformAnnotation","patched","sanitized","deepToRaw","updateAnnotation","pageIndex","cursorAngle","rotationAngle","cursorPos","cursorPosition","clientX","clientY","startRotation","updateRotation","rotationDelta","commitRotation","commitDrag","commitResize","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","includeRotation","currentRotation","resizeHandles","resize","vertexHandles","rotationHandle","shouldShowMenu","isSelected","selectionMenu","selectionMenuSnippet","portalToBody","node","document","body","appendChild","destroy","parentNode","removeChild","div","root","div_1","div_2","annotation","children","onSelect","appearanceActive","imageUrl","currentUrl","handleLoad","URL","revokeObjectURL","url","createObjectURL","data","img","root_1","set_attribute","set_style","consequent","AppearanceImage","$$anchor","consequent_1","div_3","left","top","transform","matrix","div_4","first_child","fragment_3","div_5","div_6","styles_2","styles_3","styles_4","consequent_2","div_7","root_6","__pointermove","backgroundColor","connectorStyle","connector","opacity","$0","div_8","root_7","div_9","root_8","template_effect","consequent_4","div_10","sibling","node_9","onpointerdown","onpointermove","onpointerup","onpointercancel","svg","$1","consequent_3","$$render","alternate_1","consequent_5","div_11","node_6","dragProps","key","handleStyle","hProps","$$item","exclude_from_object","div_12","root_12","consequent_6","alternate_2","consequent_7","vertexStyle","vProps","div_13","root_16","consequent_8","alternate_3","consequent_9","$$node","$$action_arg","doublePress","onDouble","$$arg0","menuProps","menuWrapperProps","effectiveAngle","handleNearMenuSide","context","selected","placement","suggestTop","spaceAbove","spaceBelow","buildMenuProps","result","result_component","spread_props","props","consequent_10","CounterRotate","consequent_13","div_14","root_23","div_15","styles_5","toFixed","consequent_14","styles","styles_1","mapCounterRotatePoint","getAnnotationScreenBounds","right","bottom","corners","minX","Infinity","minY","maxX","maxY","corner","gestureBase","isDraggingRef","isResizingRef","isResizable","getGroupBox","rects","selectedAnnotations","ta","boundingRectOrEmpty","groupBox","previewGroupBox","newBox","outlineWidthVal","groupRotationDisplay","visualBoundsCorrection","visualLeft","visualTop","visualRight","visualBottom","bounds","groupBoxLeft","groupBoxTop","groupBoxWidth","groupBoxHeight","groupCenterX","groupCenterY","groupGuideLength","transformType","isMove","isResize","_c","_d","_e","_f","newRect","rawDelta","clampedDelta","newGroupBox","groupSelectionMenu","groupSelectionMenuSnippet","fragment_1","root_4","root_5","alternate","node_3","stopPropagation","root_10","root_11","annotations","length","consequent_11","resolvedColor","paths","inkList","points","d","i","trim","hitStrokeWidth","each","path","__pointerdown","$$args","cursor","node_2","path_1","root_3","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","isCloudy","cloudyBorderIntensity","$$d","outerW","outerH","cloudyPath","generateCloudyRectanglePath","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","rect_1","root_2","rect_2","innerW","innerH","cx","cy","rx","ry","generateCloudyEllipsePath","peValue","ellipse","ellipse_1","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","lineEndings","line","filled","line_1","fragment","path_2","path_3","styles_6","localPts","pathData","first","rest","p","toAngle","a","b","startRad","endRad","path_4","path_5","stroke","allPoints","currentVertex","isPreview","generateCloudyPolygonPath","isPreviewing","fill","editorRef","isIOS","editingRef","focus","selection","getSelection","call","window","range","createRange","selectNodeContents","collapse","removeAllRanges","addRange","user_pre_effect","nav","navigator","ios","test","userAgent","platform","maxTouchPoints","computedFontPx","fontSize","needsComp","adjustedFontPx","scaleComp","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","fontCss","standardFontCssProperties","fontFamily","span","$$value","set_text","text","contents","fontColor","fontWeight","fontStyle","textAlignmentToCss","textAlign","innerText","scaleFactor","unrotated","urlRef","handleImageLoad","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","ignore","abort","code","PdfErrorCode","Cancelled","message","annotationProp","RenderAnnotation","UNDERLINE","hasIRT","dashArray","isUnderline","hitAreaCursor","hitAreaPointerEvents","onClick","apply","this","tabindex","Object","fromEntries","k","v","thickness","amplitude","period","svgDataUri","encodeURIComponent","lineColor","getContrastStrokeColor","position","inset","line_2","builtInRenderers","PdfAnnotationSubtype","INK","Ink","SQUARE","Square","CIRCLE","Circle","LINE","Line","linePoints","POLYLINE","Polyline","POLYGON","Polygon","HIGHLIGHT","Highlight","PdfBlendMode","Multiply","Underline","STRIKEOUT","Strikeout","SQUIGGLY","Squiggly","TEXT","inReplyToId","Text","CARET","w","h","midX","Caret","FREETEXT","FreeText","toolDraggable","setEditingId","STAMP","Stamp","LINK","Link","helpers","clearSelection","parent","allAnnotations","find","selectAnnotation","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","allSelectedIds","editingId","appearanceMap","prevScale","allRenderers","external","annotationRenderers","externalIds","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationIds","off","onStateChange","invalidatePageAppearances","getPageAppearances","handlers","onPointerDown","_","pe","target","currentTarget","deselectAnnotation","handleClick","clear","metaKey","ctrlKey","toggleSelection","selectedAnnotationsOnPage","anno","areAllSelectedDraggable","every","tool","findToolForAnnotation","groupDraggable","resolveInteractionProp","interaction","isGroupDraggable","singleDraggable","areAllSelectedResizable","groupResizable","isGroupResizable","singleResizable","areAllSelectedRotatable","groupRotatable","isGroupRotatable","singleRotatable","shouldLockGroupAspectRatio","groupLock","lockGroupAspectRatio","singleLock","allSelectedOnSamePage","getSelectedAnnotations","renderer","resolveRenderer","defaults","resolvedDraggable","finalDraggable","useAP","behavior","selectHelpers","defaultSelect","pi","RendererComponent","noop","$$arg1","RendererComponent_1","$2","$3","$4","$5","$6","blendModeToCss","blendMode","Normal","$7","appearances","getAppearanceForAnnotation","AnnotationContainer","$$slots","default","groupSelectionOutline","GroupSelectionBox","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","mixBlendMode","node_4","node_8","root_9","root_13","styles_7","alternate_4","alternate_5","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","ctx","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","src","registerPageHandlers","onPreview","toolId","delete","input_1","display","canvas_1","Array","from","PreviewRenderer","$$array","AnnotationPluginPackage","createPluginPackage","BaseAnnotationPackage","addWrapper","RendererRegistryProvider","build","fromRegistry","fromProps","merged","idx","findIndex","m","push","documentState","useDocumentState","page","current","pages","actualScale","actualRotation","attribute_effect","Annotations","TextMarkup","node_1","AnnotationPaintLayer","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"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"}