@embedpdf/plugin-annotation 2.2.0 → 2.3.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 (97) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +1196 -92
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/actions.d.ts +31 -2
  6. package/dist/lib/annotation-plugin.d.ts +177 -2
  7. package/dist/lib/handlers/types.d.ts +1 -1
  8. package/dist/lib/helpers.d.ts +6 -1
  9. package/dist/lib/selectors.d.ts +97 -8
  10. package/dist/lib/tools/default-tools.d.ts +39 -11
  11. package/dist/lib/tools/types.d.ts +7 -1
  12. package/dist/lib/types.d.ts +265 -1
  13. package/dist/preact/adapter.d.ts +3 -3
  14. package/dist/preact/index.cjs +1 -1
  15. package/dist/preact/index.cjs.map +1 -1
  16. package/dist/preact/index.js +857 -403
  17. package/dist/preact/index.js.map +1 -1
  18. package/dist/react/adapter.d.ts +1 -1
  19. package/dist/react/index.cjs +1 -1
  20. package/dist/react/index.cjs.map +1 -1
  21. package/dist/react/index.js +857 -403
  22. package/dist/react/index.js.map +1 -1
  23. package/dist/shared/components/annotation-container.d.ts +8 -1
  24. package/dist/shared/components/annotation-layer.d.ts +4 -2
  25. package/dist/shared/components/annotations/ink.d.ts +3 -3
  26. package/dist/shared/components/annotations/link.d.ts +28 -0
  27. package/dist/shared/components/annotations.d.ts +2 -1
  28. package/dist/shared/components/group-selection-box.d.ts +32 -0
  29. package/dist/shared/components/index.d.ts +1 -0
  30. package/dist/shared/components/text-markup/highlight.d.ts +3 -2
  31. package/dist/shared/components/text-markup/squiggly.d.ts +3 -2
  32. package/dist/shared/components/text-markup/strikeout.d.ts +3 -2
  33. package/dist/shared/components/text-markup/underline.d.ts +3 -2
  34. package/dist/shared/components/types.d.ts +7 -0
  35. package/dist/shared-preact/components/annotation-container.d.ts +8 -1
  36. package/dist/shared-preact/components/annotation-layer.d.ts +4 -2
  37. package/dist/shared-preact/components/annotations/ink.d.ts +3 -3
  38. package/dist/shared-preact/components/annotations/link.d.ts +28 -0
  39. package/dist/shared-preact/components/annotations.d.ts +2 -1
  40. package/dist/shared-preact/components/group-selection-box.d.ts +32 -0
  41. package/dist/shared-preact/components/index.d.ts +1 -0
  42. package/dist/shared-preact/components/text-markup/highlight.d.ts +3 -2
  43. package/dist/shared-preact/components/text-markup/squiggly.d.ts +3 -2
  44. package/dist/shared-preact/components/text-markup/strikeout.d.ts +3 -2
  45. package/dist/shared-preact/components/text-markup/underline.d.ts +3 -2
  46. package/dist/shared-preact/components/types.d.ts +7 -0
  47. package/dist/shared-react/components/annotation-container.d.ts +8 -1
  48. package/dist/shared-react/components/annotation-layer.d.ts +4 -2
  49. package/dist/shared-react/components/annotations/ink.d.ts +3 -3
  50. package/dist/shared-react/components/annotations/link.d.ts +28 -0
  51. package/dist/shared-react/components/annotations.d.ts +2 -1
  52. package/dist/shared-react/components/group-selection-box.d.ts +32 -0
  53. package/dist/shared-react/components/index.d.ts +1 -0
  54. package/dist/shared-react/components/text-markup/highlight.d.ts +3 -2
  55. package/dist/shared-react/components/text-markup/squiggly.d.ts +3 -2
  56. package/dist/shared-react/components/text-markup/strikeout.d.ts +3 -2
  57. package/dist/shared-react/components/text-markup/underline.d.ts +3 -2
  58. package/dist/shared-react/components/types.d.ts +7 -0
  59. package/dist/svelte/components/AnnotationLayer.svelte.d.ts +5 -1
  60. package/dist/svelte/components/Annotations.svelte.d.ts +5 -1
  61. package/dist/svelte/components/GroupSelectionBox.svelte.d.ts +32 -0
  62. package/dist/svelte/components/annotations/Ink.svelte.d.ts +2 -1
  63. package/dist/svelte/components/annotations/Link.svelte.d.ts +24 -0
  64. package/dist/svelte/components/annotations/index.d.ts +1 -0
  65. package/dist/svelte/components/index.d.ts +1 -0
  66. package/dist/svelte/components/text-markup/Highlight.svelte.d.ts +2 -1
  67. package/dist/svelte/components/text-markup/Squiggly.svelte.d.ts +2 -1
  68. package/dist/svelte/components/text-markup/Strikeout.svelte.d.ts +2 -1
  69. package/dist/svelte/components/text-markup/Underline.svelte.d.ts +2 -1
  70. package/dist/svelte/components/types.d.ts +2 -0
  71. package/dist/svelte/index.cjs +1 -1
  72. package/dist/svelte/index.cjs.map +1 -1
  73. package/dist/svelte/index.js +905 -255
  74. package/dist/svelte/index.js.map +1 -1
  75. package/dist/svelte/types.d.ts +7 -0
  76. package/dist/vue/components/annotation-container.vue.d.ts +2 -0
  77. package/dist/vue/components/annotation-layer.vue.d.ts +28 -5
  78. package/dist/vue/components/annotations/index.d.ts +1 -0
  79. package/dist/vue/components/annotations/ink.vue.d.ts +2 -2
  80. package/dist/vue/components/annotations/line.vue.d.ts +1 -1
  81. package/dist/vue/components/annotations/link.vue.d.ts +29 -0
  82. package/dist/vue/components/annotations/polygon.vue.d.ts +1 -1
  83. package/dist/vue/components/annotations/polyline.vue.d.ts +1 -1
  84. package/dist/vue/components/annotations.vue.d.ts +65 -1
  85. package/dist/vue/components/group-selection-box.vue.d.ts +73 -0
  86. package/dist/vue/components/index.d.ts +1 -0
  87. package/dist/vue/components/text-markup/highlight.vue.d.ts +2 -2
  88. package/dist/vue/components/text-markup/squiggly.vue.d.ts +2 -2
  89. package/dist/vue/components/text-markup/strikeout.vue.d.ts +2 -2
  90. package/dist/vue/components/text-markup/underline.vue.d.ts +2 -2
  91. package/dist/vue/hooks/use-annotation.d.ts +2 -0
  92. package/dist/vue/index.cjs +1 -1
  93. package/dist/vue/index.cjs.map +1 -1
  94. package/dist/vue/index.js +946 -406
  95. package/dist/vue/index.js.map +1 -1
  96. package/dist/vue/types.d.ts +7 -0
  97. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/text-markup/Highlight.svelte","../../src/svelte/components/text-markup/Underline.svelte","../../src/svelte/components/text-markup/Strikeout.svelte","../../src/svelte/components/text-markup/Squiggly.svelte","../../src/svelte/components/annotations/Ink.svelte","../../src/svelte/components/annotations/Square.svelte","../../src/svelte/components/annotations/Circle.svelte","../../src/svelte/components/annotations/Line.svelte","../../src/svelte/components/annotations/Polyline.svelte","../../src/svelte/components/annotations/Polygon.svelte","../../src/svelte/components/annotations/FreeText.svelte","../../src/svelte/components/RenderAnnotation.svelte","../../src/svelte/components/annotations/Stamp.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n AnnotationScope,\n} from '@embedpdf/plugin-annotation';\nimport { useCapability, usePlugin } from '@embedpdf/core/svelte';\n\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseAnnotationReturn {\n provides: AnnotationScope | null;\n state: AnnotationDocumentState;\n}\n\n/**\n * Hook for annotation state for a specific document\n * @param getDocumentId Document ID getter function\n */\nexport const useAnnotation = (getDocumentId: () => string | null): UseAnnotationReturn => {\n const capability = useAnnotationCapability();\n\n let state = $state<AnnotationDocumentState>(initialDocumentState());\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n state = initialDocumentState();\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Get initial state\n state = scope.getState();\n\n // Subscribe to state changes for THIS docId\n return scope.onStateChange((newState) => {\n state = newState;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return state;\n },\n };\n};\n","<script lang=\"ts\" generics=\"T extends PdfAnnotationObject\">\n import type { PdfAnnotationObject, Rect } from '@embedpdf/models';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationCapability } from '../hooks';\n import type { AnnotationContainerProps } from './types';\n import {\n useInteractionHandles,\n doublePress,\n CounterRotate,\n deepToRaw,\n type SelectionMenuPlacement,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import type { Snippet } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isDraggable,\n isResizable,\n lockAspectRatio = false,\n style,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n zIndex = 20,\n resizeUI,\n vertexUI,\n selectionOutlineColor = '#007ACC',\n customAnnotationRenderer,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T>(trackedAnnotation.object);\n let annotationCapability = useAnnotationCapability();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBaseRef = $state<T | null>(null);\n\n // Override props based on permission\n const effectiveIsDraggable = $derived(permissions.canModifyAnnotations && isDraggable);\n const effectiveIsResizable = $derived(permissions.canModifyAnnotations && isResizable);\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 // Defaults retain current behavior\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = trackedAnnotation.object;\n }\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: currentObject.rect,\n vertices: vertexConfig?.extractVertices(currentObject),\n constraints: {\n minWidth: 10,\n minHeight: 10,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n enabled: isSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n\n if (event.state === 'start') {\n gestureBaseRef = currentObject;\n }\n\n const transformType = event.transformData.type;\n const base = gestureBaseRef ?? currentObject;\n\n const changes = event.transformData.changes.vertices\n ? vertexConfig?.transformAnnotation(base, event.transformData.changes.vertices)\n : { rect: event.transformData.changes.rect };\n\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type: transformType,\n changes: changes as Partial<T>,\n metadata: event.transformData.metadata,\n });\n\n if (patched) {\n preview = {\n ...preview,\n ...patched,\n };\n }\n if (event.state === 'end' && patched) {\n gestureBaseRef = null;\n // Sanitize to remove Svelte reactive properties before updating\n // Use deepToRaw to recursively strip proxies while preserving complex objects\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, trackedAnnotation.object.id, sanitized);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOffset,\n offsetMode: 'outside',\n includeSides: lockAspectRatio ? false : true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: zIndex + 2,\n },\n includeVertices: vertexConfig ? true : false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(isSelected && (!!selectionMenu || !!selectionMenuSnippet));\n\n // Build context object for selection menu\n function buildContext(): AnnotationSelectionContext {\n return {\n type: 'annotation',\n annotation: trackedAnnotation,\n pageIndex,\n };\n }\n\n // Placement hints\n const menuPlacement: SelectionMenuPlacement = {\n suggestTop: false,\n spaceAbove: 0,\n spaceBelow: 0,\n };\n\n // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: menuPlacement,\n menuWrapperProps,\n };\n }\n</script>\n\n<div data-no-interaction>\n <div\n {...effectiveIsDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: guardedOnDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{currentObject.rect.size.width * scale}px\"\n style:height=\"{currentObject.rect.size.height * scale}px\"\n style:outline={isSelected ? `1px solid ${selectionOutlineColor}` : 'none'}\n style:outline-offset={isSelected ? `${outlineOffset}px` : '0px'}\n style:pointer-events={isSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && effectiveIsDraggable ? 'move' : 'default'}\n style:z-index={zIndex}\n style={style || ''}\n class={propsClass}\n {...restProps}\n >\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: currentObject,\n children: children as Snippet,\n isSelected,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n pageIndex,\n onSelect,\n })}\n {:else}\n {@render children(currentObject)}\n {/if}\n\n {#if isSelected && effectiveIsResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@const Component = resizeUI.component}\n <Component {...hProps} backgroundColor={HANDLE_COLOR} />\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n {#if isSelected && permissions.canModifyAnnotations}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@const Component = vertexUI.component}\n <Component {...vProps} backgroundColor={VERTEX_COLOR} />\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: currentObject.rect.origin.x * scale,\n y: currentObject.rect.origin.y * scale,\n },\n size: {\n width: currentObject.rect.size.width * scale,\n height: currentObject.rect.size.height * scale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if selectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = selectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if selectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render selectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n</div>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: HighlightProps = $props();\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px\"\n style:top=\"{(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px\"\n style:width=\"{b.size.width * scale}px\"\n style:height=\"{b.size.height * scale}px\"\n style:background={color}\n style:opacity\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : undefined}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n ></div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface UnderlineProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: UnderlineProps = $props();\n\n const thickness = $derived(2 * scale); // 2 CSS px at 100% zoom\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual underline -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: StrikeoutProps = $props();\n\n const thickness = $derived(2 * scale);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual strikeout line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"50%\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: SquigglyProps = $props();\n\n const amplitude = $derived(2 * scale); // wave height\n const period = $derived(6 * scale); // wave length\n\n const svg =\n $derived(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${color}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`);\n\n // Completely escape the SVG markup\n const svgDataUri = $derived(`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual squiggly line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{amplitude * 2}px\"\n style:background-image={svgDataUri}\n style:background-repeat=\"repeat-x\"\n style:background-size=\"{period}px {amplitude * 2}px\"\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n interface InkProps {\n isSelected: boolean;\n color?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n }: InkProps = $props();\n\n // derived SVG path data\n const paths = $derived.by(() =>\n inkList.map(({ points }) => {\n let d = '';\n for (let i = 0; i < points.length; i++) {\n const { x, y } = points[i];\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n }\n return d.trim();\n }),\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n {#each paths as d, i (i)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={color}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n</svg>\n","<!-- Square.svelte -->\n<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface SquareProps {\n isSelected: boolean;\n color?: string; // fill color (defaults to black)\n strokeColor?: string; // stroke color (defaults to fill when omitted)\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect; // bbox includes stroke\n scale: number; // page zoom\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: SquareProps = $props();\n\n // Geometry helpers — compute inner rect so visual fill matches preview\n const { width, height, x, y } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n return {\n width: innerW,\n height: innerH,\n x: strokeWidth / 2,\n y: strokeWidth / 2,\n };\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; pointer-events: none; z-index: 2;\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width + strokeWidth} ${height + strokeWidth}`}\n>\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface CircleProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Fill colour – defaults to PDFium’s black if omitted */\n color?: string;\n /** Stroke colour – defaults to same as fill when omitted */\n strokeColor?: string;\n /** 0 – 1 */\n opacity?: number;\n /** Stroke width in PDF units */\n strokeWidth: number;\n /** Stroke type – defaults to solid when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – defaults to undefined when omitted */\n strokeDashArray?: number[];\n /** Bounding box of the annotation */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Pointer/touch handler (used for selection) */\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: CircleProps = $props();\n\n const { width, height, cx, cy, rx, ry } = $derived.by(() => {\n // Full bounding box *includes* stroke width.\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n\n // Remove the stroke so the visible fill matches the preview.\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n // Centre of the fill sits strokeWidth/2 in from the edges\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n\n let peValue = $derived(\n isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n );\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n {svgWidth}\n {svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n>\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n onpointerdown={(e) => onClick?.(e)}\n ontouchstart={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n</svg>\n","<!-- Line.svelte -->\n<script lang=\"ts\">\n import type { Rect, LinePoints, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface LineProps {\n color?: string; // interior color\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n isSelected: boolean;\n }\n\n let {\n color = 'transparent',\n opacity = 1,\n strokeWidth,\n strokeColor = '#000000',\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n linePoints,\n lineEndings,\n scale,\n onClick,\n isSelected,\n }: LineProps = $props();\n\n // Localize endpoints into the annotation's bbox\n const x1 = $derived(linePoints.start.x - rect.origin.x);\n const y1 = $derived(linePoints.start.y - rect.origin.y);\n const x2 = $derived(linePoints.end.x - rect.origin.x);\n const y2 = $derived(linePoints.end.y - rect.origin.y);\n\n // Arrow-head / butt endings via shared factory\n const endings = $derived.by(() => {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(lineEndings?.start, strokeWidth, angle + Math.PI, x1, y1),\n end: patching.createEnding(lineEndings?.end, strokeWidth, angle, x2, y2),\n };\n });\n\n // Absolute placement + scaling\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n // Dashed stroke only when requested\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Main line -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Optional arrowheads / butt caps -->\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n onpointerdown={onClick}\n ontouchstart={onClick}\n stroke={strokeColor}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.start.filled ? color : 'none'}\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.end.filled ? color : 'none'}\n />\n {/if}\n</svg>\n","<!-- Polyline.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface PolylineProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Optional start & end endings */\n lineEndings?: LineEndings;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n scale,\n isSelected,\n onClick,\n lineEndings,\n }: PolylineProps = $props();\n\n // Localize vertices to the annotation rect\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data: \"M x0 y0 L x1 y1 ...\"\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n return (\n `M ${first.x} ${first.y} ` +\n rest\n .map((p) => `L ${p.x} ${p.y} `)\n .join('')\n .trim()\n );\n });\n\n // Compute endings (angles from first→second, last-1→last)\n const endings = $derived.by(() => {\n if (localPts.length < 2) return { start: null as any, end: null as any };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts[0], localPts[1]); // FROM first TO second\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]); // FROM second-to-last TO last\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI, // tip outward from start\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad, // tip in line direction\n localPts[localPts.length - 1].x,\n localPts[localPts.length - 1].y,\n );\n return { start, end };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; width: var(--w); height: var(--h); pointer-events: none; z-index: 2; overflow: visible;\"\n style:--w={`${width}px`}\n style:--h={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n</svg>\n","<!-- Polygon.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface PolygonProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n // Preview-only\n currentVertex?: Position;\n handleSize?: number;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n currentVertex,\n handleSize = 14,\n }: PolygonProps = $props();\n\n // Combine vertices with preview point (if any)\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n // Localize points to the annotation bbox\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data; omit 'Z' when previewing\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n const isPreview = !!currentVertex;\n return (\n `M ${first.x} ${first.y} ` +\n rest.map((p) => `L ${p.x} ${p.y}`).join(' ') +\n (isPreview ? '' : ' Z')\n ).trim();\n });\n\n const isPreviewing = $derived(!!currentVertex && vertices.length > 0);\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Preview-only elements -->\n {#if isPreviewing && vertices.length > 1}\n <path\n d={`M ${localPts[localPts.length - 1].x} ${localPts[localPts.length - 1].y} L ${localPts[0].x} ${localPts[0].y}`}\n fill=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={'4,4'}\n style:opacity={0.7}\n />\n {/if}\n\n {#if isPreviewing && vertices.length >= 2}\n <rect\n x={localPts[0].x - handleSize / scale / 2}\n y={localPts[0].y - handleSize / scale / 2}\n width={handleSize / scale}\n height={handleSize / scale}\n fill={strokeColor}\n opacity={0.4}\n stroke={strokeColor}\n stroke-width={strokeWidth / 2}\n />\n {/if}\n</svg>\n","<!-- Free-text.svelte -->\n<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\n // ---------- props ----------\n interface FreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n }\n\n let { documentId, isSelected, isEditing, annotation, pageIndex, scale, onClick }: FreeTextProps =\n $props();\n\n // ---------- capabilities ----------\n const annotationCapability = useAnnotationCapability();\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // ---------- refs / state ----------\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n\n // Focus and move caret to end when entering edit mode\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editorRef.focus();\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n // One-time iOS detection (prevents zoom by font-size compensation)\n $effect.pre(() => {\n try {\n const nav = navigator as any;\n const ios =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n isIOS = ios;\n } catch {\n isIOS = false;\n }\n });\n\n // Persist contents on blur\n function handleBlur() {\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\n // ---------- iOS zoom compensation ----------\n const computedFontPx = $derived(annotation.object.fontSize * scale);\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp = $derived(\n isIOS && isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX,\n );\n const adjustedFontPx = $derived(needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx);\n const scaleComp = $derived(needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1);\n const invScalePercent = $derived(needsComp ? 100 / scaleComp : 100);\n\n // ---------- derived sizes ----------\n const outerW = $derived(annotation.object.rect.size.width * scale);\n const outerH = $derived(annotation.object.rect.size.height * scale);\n\n const justify = $derived(\n annotation.object.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : annotation.object.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n</script>\n\n<!-- Outer positioned container -->\n<div\n style:position=\"absolute\"\n style:width={`${outerW}px`}\n style:height={`${outerH}px`}\n style:z-index={2}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events={isSelected && !isEditing ? 'none' : 'auto'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <!-- Editable span -->\n <span\n bind:this={editorRef}\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:display=\"flex\"\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:color={annotation.object.fontColor}\n style:font-size={`${adjustedFontPx}px`}\n style:font-family={standardFontCss(annotation.object.fontFamily)}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.backgroundColor}\n style:opacity={annotation.object.opacity}\n style:width={needsComp ? `${invScalePercent}%` : '100%'}\n style:height={needsComp ? `${invScalePercent}%` : '100%'}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : 'pointer'}\n style:outline=\"none\"\n style:transform={needsComp ? `scale(${scaleComp})` : undefined}\n style:transform-origin=\"top left\">{annotation.object.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import { ignore, type PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\n import type { HTMLImgAttributes } from 'svelte/elements';\n import { useAnnotationCapability } from '../hooks';\n import { deepToRaw } from '@embedpdf/utils/svelte';\n\n interface RenderAnnotationProps extends Omit<HTMLImgAttributes, 'style'> {\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n dpr?: number;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n style,\n ...restProps\n }: RenderAnnotationProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n let imageUrl = $state<string | null>(null);\n let urlRef: string | null = null;\n\n const { width, height } = $derived(annotation.rect.size);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Effect to render annotation\n $effect(() => {\n if (annotationProvides) {\n const task = annotationProvides.renderAnnotation({\n pageIndex,\n annotation: deepToRaw(annotation),\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl = url;\n urlRef = url;\n }, ignore);\n\n return () => {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n };\n }\n });\n\n function handleImageLoad() {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n alt=\"\"\n src={imageUrl}\n onload={handleImageLoad}\n {...restProps}\n style:width=\"100%\"\n style:height=\"100%\"\n style:display=\"block\"\n {style}\n />\n{/if}\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import RenderAnnotation from '../RenderAnnotation.svelte';\n\n interface StampProps {\n documentId: string;\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick: (e: MouseEvent | TouchEvent) => void;\n }\n\n let { documentId, isSelected, annotation, pageIndex, scale, onClick }: StampProps = $props();\n\n let annotationProp = $derived({ ...annotation.object, id: annotation.object.id });\n</script>\n\n<div\n style=\"position: absolute; width: 100%; height: 100%; z-index: 2;\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor=\"pointer\"\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <RenderAnnotation {documentId} {pageIndex} annotation={annotationProp} scaleFactor={scale} />\n</div>\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import { blendModeToCss, type PdfAnnotationObject, PdfBlendMode } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationByPageIndex,\n isCircle,\n isFreeText,\n isHighlight,\n isInk,\n isLine,\n isPolygon,\n isPolyline,\n isSquare,\n isSquiggly,\n isStamp,\n isStrikeout,\n isUnderline,\n type TrackedAnnotation,\n } from '@embedpdf/plugin-annotation';\n\n import { type PointerEventHandlersWithLifecycle } from '@embedpdf/plugin-interaction-manager';\n import { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/svelte';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n\n import Highlight from './text-markup/Highlight.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Ink from './annotations/Ink.svelte';\n import Square from './annotations/Square.svelte';\n import Circle from './annotations/Circle.svelte';\n import Line from './annotations/Line.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import FreeText from './annotations/FreeText.svelte';\n import Stamp from './annotations/Stamp.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n\n // ---------- props ----------\n interface AnnotationsProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // ---------- capabilities / handlers ----------\n const annotationCapability = useAnnotationCapability();\n const selectionCapability = useSelectionCapability();\n const pointerHandlers = usePointerHandlers({\n documentId: annotationsProps.documentId,\n pageIndex: annotationsProps.pageIndex,\n });\n\n // ---------- local state ----------\n let annotations = $state<TrackedAnnotation[]>([]);\n let selectionState = $state<TrackedAnnotation | null>(null);\n let editingId = $state<string | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n // subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current state immediately\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(currentState, annotationsProps.pageIndex);\n\n // Then subscribe to changes\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(state, annotationsProps.pageIndex);\n });\n return () => off?.();\n });\n\n // pointer handlers (capture-down to deselect when clicking empty layer)\n const handlers: PointerEventHandlersWithLifecycle = {\n onPointerDown: (_: unknown, pe: PointerEvent) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n // register pointer handlers\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n // click/select logic shared across shapes\n function handleClick(e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n selectionCapability.provides.clear();\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const isSelected = selectionState?.object.id === annotation.object.id}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const mixBlendMode = blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\n\n {#if isInk(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Ink\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquare(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Square\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isCircle(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Circle\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: PointerEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isUnderline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Underline\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStrikeout(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Strikeout\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquiggly(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Squiggly\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isHighlight(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply)}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Highlight\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLine(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, vertices) => ({\n ...a,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Line\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolyline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n {isSelected}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polyline\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolygon(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polygon\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isFreeText(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isEditing}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n editingId = annotation.object.id;\n }}\n {...annotationsProps}\n >\n {#snippet children(object)}\n <FreeText\n documentId={annotationsProps.documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object }}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStamp(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(_object)}\n <Stamp\n documentId={annotationsProps.documentId}\n {isSelected}\n {annotation}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n","<script lang=\"ts\">\n import { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, type Rect } from '@embedpdf/models';\n import type { AnnotationTool } from '@embedpdf/plugin-annotation';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n import Highlight from './text-markup/Highlight.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n\n interface TextMarkupProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: TextMarkupProps = $props();\n\n const selectionCapability = useSelectionCapability();\n const annotationCapability = useAnnotationCapability();\n\n let rects = $state<Rect[]>([]);\n let boundingRect = $state<Rect | null>(null);\n let activeTool = $state<AnnotationTool | null>(null);\n\n // Get scoped APIs for this document\n const selectionProvides = $derived(\n selectionCapability.provides ? selectionCapability.provides.forDocument(documentId) : null,\n );\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Subscribe to selection changes\n $effect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n rects = selectionProvides.getHighlightRectsForPage(pageIndex);\n boundingRect = selectionProvides.getBoundingRectForPage(pageIndex);\n });\n return off;\n });\n\n // Subscribe to active tool changes\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current active tool\n activeTool = annotationProvides.getActiveTool();\n\n const off = annotationProvides.onActiveToolChange((tool) => {\n activeTool = tool;\n });\n return off;\n });\n\n const mixBlendMode = $derived(\n activeTool?.defaults?.blendMode\n ? blendModeToCss(activeTool.defaults.blendMode)\n : activeTool?.defaults?.type === PdfAnnotationSubtype.HIGHLIGHT\n ? blendModeToCss(PdfBlendMode.Multiply)\n : blendModeToCss(PdfBlendMode.Normal),\n );\n</script>\n\n{#if boundingRect && activeTool && activeTool.defaults}\n {#if activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Underline\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Highlight\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Strikeout\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Squiggly\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {/if}\n{/if}\n","<script lang=\"ts\">\n import type { AnyPreviewState } from '@embedpdf/plugin-annotation';\n import { PdfAnnotationSubtype } from '@embedpdf/models';\n import Circle from './annotations/Circle.svelte';\n import Square from './annotations/Square.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Line from './annotations/Line.svelte';\n import Ink from './annotations/Ink.svelte';\n\n interface PreviewRendererProps {\n preview: AnyPreviewState;\n scale: number;\n }\n\n let { preview, scale }: PreviewRendererProps = $props();\n\n const bounds = $derived(preview.bounds);\n\n const style = $derived({\n left: bounds.origin.x * scale,\n top: bounds.origin.y * scale,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n });\n</script>\n\n{#if preview.type === PdfAnnotationSubtype.CIRCLE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Circle isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.SQUARE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Square isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYGON}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polygon isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYLINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polyline isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.LINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Line isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.INK}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Ink isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.FREETEXT}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <!-- Render a simple dashed border preview -->\n <div\n style:width=\"100%\"\n style:height=\"100%\"\n style:border=\"1px dashed {preview.data.fontColor || '#000000'}\"\n style:background-color=\"transparent\"\n ></div>\n </div>\n{/if}\n","<script lang=\"ts\">\n import { useAnnotationPlugin } from '../hooks';\n import type { AnyPreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\n import PreviewRenderer from './PreviewRenderer.svelte';\n\n interface AnnotationPaintLayerProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: AnnotationPaintLayerProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let previews = $state<Map<string, AnyPreviewState>>(new Map());\n\n let fileInputRef: HTMLInputElement | null = $state(null);\n let canvasRef: HTMLCanvasElement | null = $state(null);\n\n const services: HandlerServices = {\n requestFile: ({ accept, onFile }) => {\n if (!fileInputRef) return;\n const input = fileInputRef;\n input.accept = accept;\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n onFile(file);\n input.value = '';\n }\n };\n input.click();\n },\n processImage: ({ source, maxWidth, maxHeight, onComplete }) => {\n const canvas = canvasRef;\n if (!canvas || !canvas.getContext) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n let { naturalWidth: width, naturalHeight: height } = img;\n\n // --- SCALING LOGIC ---\n // Calculate the scale factor to fit within maxWidth and maxHeight\n const scaleX = maxWidth ? maxWidth / width : 1;\n const scaleY = maxHeight ? maxHeight / height : 1;\n const scaleFactor = Math.min(scaleX, scaleY, 1); // Ensure we don't scale up\n\n const finalWidth = width * scaleFactor;\n const finalHeight = height * scaleFactor;\n\n canvas.width = finalWidth;\n canvas.height = finalHeight;\n ctx.drawImage(img, 0, 0, finalWidth, finalHeight);\n\n const imageData = ctx.getImageData(0, 0, finalWidth, finalHeight);\n if (typeof source !== 'string') URL.revokeObjectURL(img.src);\n\n onComplete({ imageData, width: finalWidth, height: finalHeight });\n };\n img.src = typeof source === 'string' ? source : URL.createObjectURL(source);\n },\n };\n\n $effect(() => {\n if (!annotationPlugin.plugin) return;\n\n return annotationPlugin.plugin.registerPageHandlers(documentId, pageIndex, scale, {\n services,\n onPreview: (toolId, state) => {\n previews = new Map(previews);\n if (state) {\n previews.set(toolId, state);\n } else {\n previews.delete(toolId);\n }\n },\n });\n });\n</script>\n\n<!-- Hidden DOM elements required by services -->\n<input bind:this={fileInputRef} type=\"file\" style:display=\"none\" />\n<canvas bind:this={canvasRef} style:display=\"none\"></canvas>\n\n<!-- Render any active previews from any tool -->\n{#each Array.from(previews.entries()) as [toolId, preview] (toolId)}\n <PreviewRenderer {preview} {scale} />\n{/each}\n","<script lang=\"ts\">\n import { Rotation, type PdfAnnotationObject } from '@embedpdf/models';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n resizeUI,\n vertexUI,\n selectionOutlineColor,\n customAnnotationRenderer,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived(\n overrideRotation !== undefined\n ? overrideRotation\n : (documentState?.current?.rotation ?? Rotation.Degree0),\n );\n</script>\n\n<div\n id=\"annotation-layer\"\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n {...restProps}\n>\n <Annotations\n {documentId}\n {selectionMenu}\n {selectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {selectionOutlineColor}\n {customAnnotationRenderer}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["useAnnotationCapability","useCapability","AnnotationPlugin","id","useAnnotationPlugin","usePlugin","lockAspectRatio","propsClass","outlineOffset","zIndex","selectionOutlineColor","restProps","$","rest_props","$$props","preview","state","proxy","trackedAnnotation","object","annotationCapability","permissions","useDocumentPermissions","documentId","gestureBaseRef","effectiveIsDraggable","derived","canModifyAnnotations","isDraggable","effectiveIsResizable","isResizable","guardedOnDoubleClick","annotationProvides","provides","forDocument","currentObject","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","HANDLE_SIZE","size","VERTEX_SIZE","user_effect","set","interactionHandles","useInteractionHandles","controller","element","get","rect","vertices","vertexConfig","extractVertices","constraints","minWidth","minHeight","boundingBox","width","pageWidth","height","pageHeight","maintainAspectRatio","pageRotation","rotation","scale","enabled","isSelected","onUpdate","event","transformData","type","transformType","base","changes","transformAnnotation","patched","_c","metadata","sanitized","deepToRaw","updateAnnotation","pageIndex","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","resizeHandles","resize","vertexHandles","shouldShowMenu","selectionMenu","selectionMenuSnippet","menuPlacement","suggestTop","spaceAbove","spaceBelow","div","root","div_1","dragProps","left","origin","x","top","y","outline","annotation","children","onSelect","key","style","handleStyle","hProps","$$anchor","$$item","exclude_from_object","Component","component","Component_1","div_2","root_6","consequent_1","$$render","alternate_1","consequent_2","vertexStyle","vProps","Component_2","div_3","root_10","consequent_3","alternate_2","consequent_4","$$node","$$action_arg","doublePress","onDouble","$$arg0","menuProps","menuWrapperProps","context","selected","placement","buildMenuProps","result","result_component","spread_props","props","consequent_5","CounterRotate","consequent_8","opacity","b","root_1","tabindex","onClick","cursor","Object","fromEntries","entries","map","k","v","thickness","r","styles","amplitude","period","svg","svgDataUri","encodeURIComponent","paths","inkList","points","d","i","length","trim","index","path","__pointerdown","$$args","__touchstart","set_attribute","styles_1","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","$$d","outerW","outerH","Math","max","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","rect_1","innerW","innerH","cx","cy","rx","ry","peValue","ellipse","e","$0","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","_b","lineEndings","line","transform","filled","styles_2","consequent","path_1","root_2","styles_3","localPts","pathData","first","rest","p","toAngle","a","startRad","endRad","path_2","stroke","allPoints","currentVertex","isPreview","isPreviewing","fill","editorRef","isIOS","focus","selection","getSelection","call","window","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","user_pre_effect","nav","navigator","ios","test","userAgent","platform","maxTouchPoints","computedFontPx","fontSize","needsComp","isEditing","adjustedFontPx","scaleComp","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","span","$$value","set_text","text","contents","fontColor","standardFontCss","fontFamily","textAlignmentToCss","textAlign","backgroundColor","innerText","scaleFactor","imageUrl","urlRef","handleImageLoad","URL","revokeObjectURL","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","img","annotationProp","RenderAnnotation","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","annotations","selectionState","editingId","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationByPageIndex","off","onStateChange","handlers","onPointerDown","_","pe","target","currentTarget","deselectAnnotation","handleClick","stopPropagation","selectAnnotation","clear","register","tool","findToolForAnnotation","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","obj","noop","Ink","interaction","$1","$2","AnnotationContainer","$$slots","default","Square","Circle","Underline","Strikeout","Squiggly","Highlight","Multiply","Line","linePoints","Polyline","Polygon","FreeText","onDoubleClick","_object","Stamp","isStamp","consequent_11","isFreeText","consequent_10","alternate","isPolygon","consequent_9","isPolyline","isLine","consequent_7","alternate_3","isHighlight","consequent_6","alternate_4","isSquiggly","alternate_5","isStrikeout","alternate_6","isUnderline","alternate_7","isCircle","alternate_8","isSquare","alternate_9","isInk","alternate_10","rects","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","defaults","PdfAnnotationSubtype","HIGHLIGHT","node_2","root_4","node_4","node_6","root_8","node_8","SQUIGGLY","STRIKEOUT","UNDERLINE","bounds","data","root_3","root_5","root_7","div_4","root_9","styles_4","div_5","root_11","styles_5","div_6","root_13","div_7","styles_6","styles_7","FREETEXT","INK","LINE","POLYLINE","POLYGON","SQUARE","CIRCLE","annotationPlugin","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","src","plugin","registerPageHandlers","onPreview","toolId","delete","input_1","first_child","fragment","display","canvas_1","Array","from","PreviewRenderer","$$array","documentState","useDocumentState","page","current","pages","actualScale","actualRotation","Rotation","Degree0","attribute_effect","Annotations","node","TextMarkup","node_1","AnnotationPaintLayer","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"0rBAQaA,EAAA,IAAgCC,gBAAgCC,EAAAA,iBAAiBC,IACjFC,EAAA,IAA4BC,YAA4BH,EAAAA,iBAAiBC,6KCmBlF,IAAAG,gCAAkB,GAEXC,qBAAa,IAIpBC,6BAAgB,GAGhBC,sBAAS,IAGTC,qCAAwB,WAErBC,EAAQC,EAAAC,WAAAC,EAAA,qYAGTC,EAAUH,EAAAI,MAAMJ,EAAAK,MAAAH,EAAAI,kBAAsBC,SACtCC,EAAuBpB,IACrB,MAAAqB,EAAcC,EAAAA,uBAAsB,IAAAR,EAAAS,gBACtCC,EAAiBZ,EAAAI,MAAiB,YAGhCS,EAAoBb,EAAAc,QAAA,IAAYL,EAAYM,sBAAoBb,EAAAc,aAChEC,EAAoBjB,EAAAc,QAAA,IAAYL,EAAYM,sBAAoBb,EAAAgB,aAGhEC,EAAoBnB,EAAAc,QAAA,IACxBL,EAAYM,2DAAwD,GAIhEK,EAAkBpB,EAAAc,QAAA,IACtBN,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAS,YAAe,MAGtF,IAAAY,sBACFpB,GAAiC,IAAAD,EAAAI,kBAAAC,gBAAWJ,wBAA8BI,cAItEiB,EAAYxB,EAAAc,QAAA,WAAA,OAAA,OAAAW,EAAAvB,EAAAwB,mBAAsBC,QAAS,YAC3CC,EAAY5B,EAAAc,QAAA,WAAA,OAAA,OAAAW,EAAAvB,EAAA2B,mBAAsBF,QAAS,YAC3CG,EAAW9B,EAAAc,QAAA,WAAA,OAAA,OAAAW,EAAAvB,EAAAwB,mBAAsBK,OAAQ,KACzCC,EAAWhC,EAAAc,QAAA,WAAA,OAAA,OAAAW,EAAAvB,EAAA2B,mBAAsBE,OAAQ,KAE/C/B,EAAAiC,YAAO,KACiB/B,EAAAI,kBAAAC,QACpBP,EAAAkC,IAAA/B,sBAA4BI,QAAM,KAIhC,MAAA4B,EAAqBC,EAAAA,sBAAqB,WAAA,MAAA,CAC9CC,WAAU,CACRC,QAAOtC,EAAAuC,IAAEhB,GAAciB,KACvBC,SAAQ,OAAAhB,EAAAvB,EAAAwC,uBAAgBC,gBAAe3C,EAAAuC,IAAChB,IACxCqB,YAAW,CACTC,SAAU,GACVC,UAAW,GACXC,YAAW,CAAIC,MAAK9C,EAAA+C,UAAaC,OAAMhD,EAAAiD,aAEzCC,oBAAqB1D,IACrB2D,aAAYnD,EAAAoD,SACZC,MAAKrD,EAAAqD,MACLC,QAAOtD,EAAAuD,WACPC,SAAWC,qBACJ,OAAAlC,EAAAkC,EAAMC,oBAAN,EAAAnC,EAAqBoC,MAAI,OAEV,UAAhBF,EAAMvD,OACRJ,EAAAkC,IAAAtB,QAAiBW,IAAa,GAG1B,MAAAuC,EAAgBH,EAAMC,cAAcC,KACpCE,EAAI/D,EAAAuC,IAAG3B,IAAcZ,EAAAuC,IAAIhB,GAEzByC,EAAUL,EAAMC,cAAcI,QAAQvB,2CAC1BwB,oBAAoBF,EAAMJ,EAAMC,cAAcI,QAAQvB,UAClE,CAAAD,KAAMmB,EAAMC,cAAcI,QAAQxB,MAElC0B,EAAU,OAAAC,EAAA3D,EAAqBa,eAArB,EAAA8C,EAA+BF,oBAAuBF,EAAI,CACxEF,KAAMC,EACGE,UACTI,SAAUT,EAAMC,cAAcQ,WAS5B,GANAF,SACF/D,EAAO,IAAAH,EAAAuC,IACFpC,MACA+D,IAAO,GAGM,QAAhBP,EAAMvD,OAAmB8D,EAAS,CACpClE,EAAAkC,IAAAtB,EAAiB,YAGXyD,EAAYC,EAAAA,UAAUJ,GAC5BlE,OAAAA,EAAAA,EAAAuC,IAAAnB,KAAApB,EAAoBuE,iBAAgBrE,EAAAsE,UAAAtE,EAAAI,kBAA8BC,OAAOhB,GAAI8E,EAC/E,IAGJ3C,SAAQ,CACN+C,iBAAY3C,GACZ4C,QAAS9E,IACT+E,WAAY,UACZC,cAAclF,IACdG,OAAQA,IAAS,GAEnBgC,SAAQ,CACNgD,WAAU7E,EAAAuC,IAAEP,GACZnC,OAAQA,IAAS,GAEnBiF,kBAAe5E,EAAAwC,gBAIXqC,EAAa/E,EAAAc,QAAA,IAAYqB,EAAmB6C,QAC5CC,EAAajF,EAAAc,QAAA,IAAYqB,EAAmBM,UAK5CyC,EAAclF,EAAAc,QAAA,IAAAZ,EAAAuD,eAAAvD,EAAAiF,iBAAAjF,EAAAkF,6BAYdC,EAAqC,CACzCC,YAAY,EACZC,WAAY,EACZC,WAAY,OAkBfC,EAAGC,IACDC,UADFF,sBACEE,EAAE,KAAA,UACG9E,IAAoBX,EAAAuD,WAAiBtB,EAAmByD,UAAS,CAAA,iBAarD,SACTjG,OACHI,iCAZS8F,KAAA7F,EAAAuC,IAAAhB,GAAciB,KAAKsD,OAAOC,EAAC7F,EAAAqD,MAA3B,KACDyC,IAAAhG,EAAAuC,IAAAhB,GAAciB,KAAKsD,OAAOG,EAAC/F,EAAAqD,MAA3B,KACEP,MAAAhD,EAAAuC,IAAAhB,GAAciB,KAAKT,KAAKiB,MAAK9C,EAAAqD,MAA7B,KACCL,OAAAlD,EAAAuC,IAAAhB,GAAciB,KAAKT,KAAKmB,OAAMhD,EAAAqD,MAA9B,KAC0B2C,QAAAhG,EAAAuD,WAAA,aAAA3D,MAA0B,OAC7B,iBAAAI,EAAAuD,WAAA,GAAA7D,QAAoB,MACvB,iBAAAM,EAAAuD,WAAA,OAAS,wDAEhB5C,GAAuB,OAAS,oBAC7ChB,sBAbhB8F,uGAoBKQ,iBAAY5E,GACZ6E,SAAQlG,EAAAkG,SACR3C,WAAUvD,EAAAuD,WACVF,MAAKrD,EAAAqD,MACLD,SAAQpD,EAAAoD,SACRL,UAAS/C,EAAA+C,UACTE,WAAUjD,EAAAiD,WACVqB,UAAStE,EAAAsE,UACT6B,SAAQnG,EAAAmG,2GAGQ9E,8JAIXwD,GAAa,EAAOuB,MAAKC,MAAOC,KAAgBC,KAASH,EAAG,CAAAI,EAAAC,KAA5B,IAAgBF,EAAM,IAAAzG,EAAA4G,oBAAA5G,EAAAuC,IAAAoE,GAAA,CAAA,MAAA,qDAEjD,MAAAE,2BAAqBC,mFAC5BC,mBAAcN,EAAM,oCAAmBjF,kCAEvCwF,EAAGC,uBAAHD,EAAG,KAAA,IAAKP,IAAgBF,MAAA,YALGA,sCAK8B/E,IAAY,oBAArEwF,oDAJYF,aAASI,GAAAC,EAAAC,GAAA,mEAFTnG,MAAoBoG,2FAY9BpC,GAAa,EAAOqB,MAAKC,MAAOe,KAAgBC,KAASjB,EAAG,CAAAI,EAAAC,KAA5B,IAAgBY,EAAM,IAAAvH,EAAA4G,oBAAA5G,EAAAuC,IAAAoE,GAAA,CAAA,MAAA,qDAEjD,MAAAE,2BAAqBC,mFAC5BU,mBAAcD,EAAM,oCAAmB3F,kCAEvC6F,EAAGC,uBAAHD,EAAG,KAAA,IAAKF,IAAgBhB,MAAA,YALGA,sCAK8B3E,IAAY,oBAArE6F,oDAJYX,aAASa,GAAAR,EAAAS,GAAA,+CAFT1H,EAAAuD,YAAAhD,EAAYM,wBAAoB8G,aA7CpDlC,YAAAA,EAAE,CAAAmC,EAAAC,WAAAC,OAAAA,OAAAA,EAAAA,EAAAA,6BAAAF,EAAAC,IAAA,MAEkBE,SAAQjI,EAAAuC,IAAEpB,sBAF9BwE,EAAE,gBAwEWS,EAAQ,CAAAM,EAAAwB,KACR,MAAAC,EAASnI,EAAAc,QAAA,IAxFd,SACP0B,EACA4F,UAGEC,SAnBAxE,KAAM,aACNsC,WAAUjG,EAAAI,kBACVkE,UAAStE,EAAAsE,WAkBT8D,SAAQpI,EAAAuD,WACRjB,OACA+F,UAAWlD,EACX+C,mBAEJ,CA6E0BI,oBADDhG,wBAAM4F,8DAIf,MAAAK,sCAAuBN,kIAE5BO,EAAgBhC,EAAA1G,EAAA2I,aAAA,IAAA3I,EAAAuC,IAAKkG,GAAOG,0CAD1BH,MAAMI,2JAKmBV,8JArBhCrC,OAAM,CACJC,QAAGxE,GAAciB,KAAKsD,OAAOC,EAAC7F,EAAAqD,MAC9B0C,QAAG1E,GAAciB,KAAKsD,OAAOG,EAAC/F,EAAAqD,OAEhCxB,KAAI,CACFiB,YAAOzB,GAAciB,KAAKT,KAAKiB,MAAK9C,EAAAqD,MACpCL,aAAQ3B,GAAciB,KAAKT,KAAKmB,OAAMhD,EAAAqD,UAR3CuF,EAAAA,cAAYpC,EAAA,+DAaDN,qDAdTlB,MAAc6D,aA3DpBtD,cAAAA,UAFD,+DCtKI,IAAA9D,qBAAQ,WACRqH,uBAAU,mFASSC,SACpBxD,EAAEyD,uBAAFzD,qBAEqB0D,SAAAjJ,EAAAkJ,QAAA,qGAICpJ,EAAAuC,IAAA0G,GAAEnD,OAAOC,EAAC7F,EAAAsC,KAAQsD,OAAOC,QAAIkD,GAAEnD,OAAOC,GAAC7F,EAAAqD,uBACxCvD,EAAAuC,IAAA0G,GAAEnD,OAAOG,EAAC/F,EAAAsC,KAAQsD,OAAOG,QAAIgD,GAAEnD,OAAOG,GAAC/F,EAAAqD,uBAC7C0F,GAAElH,KAAKiB,MAAK9C,EAAAqD,wBACX0F,GAAElH,KAAKmB,OAAMhD,EAAAqD,sBACV5B,gBAEc,iBAAAzB,EAAAkJ,QAAA,OAAS,OACjBC,OAAAnJ,EAAAkJ,QAAA,UAAY,UACX,UAAAlJ,EAAAkJ,QAAA,OAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAOtJ,EAAAqG,OAAQkD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,qBAfrFlE,0BAHH,0ECRI,IAAA9D,qBAAQ,WACRqH,uBAAU,IAQN,MAAAY,gBAAqB,EAAC1J,EAAAqD,sFAGPsG,SACpBpE,EAAEyD,uBAAFzD,qBAEqB0D,SAAAjJ,EAAAkJ,QAAA,qGAICpJ,EAAAuC,IAAAsH,GAAE/D,OAAOC,EAAC7F,EAAAsC,KAAQsD,OAAOC,QAAI8D,GAAE/D,OAAOC,GAAC7F,EAAAqD,uBACxCvD,EAAAuC,IAAAsH,GAAE/D,OAAOG,EAAC/F,EAAAsC,KAAQsD,OAAOG,QAAI4D,GAAE/D,OAAOG,GAAC/F,EAAAqD,uBAC7CsG,GAAE9H,KAAKiB,MAAK9C,EAAAqD,wBACXsG,GAAE9H,KAAKmB,OAAMhD,EAAAqD,oCAEI,iBAAArD,EAAAkJ,QAAA,OAAS,OACjBC,OAAAnJ,EAAAkJ,QAAA,UAAY,UACX,UAAAlJ,EAAAkJ,QAAA,EAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAOtJ,EAAAqG,OAAQkD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAAhE,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAmE,EAAA,sEAKcF,IAAS,kBACNjI,sDAvBrB8D,0BAHH,0ECVI,IAAA9D,qBAAQ,WACRqH,uBAAU,IAQN,MAAAY,gBAAqB,EAAC1J,EAAAqD,sFAGPsG,SACpBpE,EAAEyD,uBAAFzD,qBAEqB0D,SAAAjJ,EAAAkJ,QAAA,qGAICpJ,EAAAuC,IAAAsH,GAAE/D,OAAOC,EAAC7F,EAAAsC,KAAQsD,OAAOC,QAAI8D,GAAE/D,OAAOC,GAAC7F,EAAAqD,uBACxCvD,EAAAuC,IAAAsH,GAAE/D,OAAOG,EAAC/F,EAAAsC,KAAQsD,OAAOG,QAAI4D,GAAE/D,OAAOG,GAAC/F,EAAAqD,uBAC7CsG,GAAE9H,KAAKiB,MAAK9C,EAAAqD,wBACXsG,GAAE9H,KAAKmB,OAAMhD,EAAAqD,oCAEI,iBAAArD,EAAAkJ,QAAA,OAAS,OACjBC,OAAAnJ,EAAAkJ,QAAA,UAAY,UACX,UAAAlJ,EAAAkJ,QAAA,EAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAOtJ,EAAAqG,OAAQkD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAAhE,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAmE,EAAA,qEAKcF,IAAS,kBACNjI,mFAvBrB8D,0BAHH,0ECVI,IAAA9D,qBAAQ,WACRqH,uBAAU,IAQN,MAAAe,gBAAqB,EAAC7J,EAAAqD,OACtByG,gBAAkB,EAAC9J,EAAAqD,OAEnB0G,EAAGjK,EAAAc,QAAA,IAAA,kDAAAd,EAAAuC,IACoDyH,eAA+B,EAAzBhK,EAAAuC,IAAawH,oBAAa/J,EAAAuC,IAAkByH,MAAsB,EAAhBhK,EAAAuC,IAAIwH,2BACvG/J,EAAAuC,IAAAwH,QAAS/J,EAAAuC,IAAMyH,GAAS,OAAChK,EAAAuC,IAAMyH,GAAS,KAAChK,EAAAuC,IAAIwH,QAAS/J,EAAAuC,IAAMyH,YAAUD,wCACxDpI,4BAAwBoI,4CAIlDG,EAAUlK,EAAAc,QAAA,IAAA,gCAA4CqJ,mBAAkBnK,EAAAuC,IAAC0H,wFAG1DJ,SACpBpE,EAAEyD,uBAAFzD,qBAEqB0D,SAAAjJ,EAAAkJ,QAAA,qGAICpJ,EAAAuC,IAAAsH,GAAE/D,OAAOC,EAAC7F,EAAAsC,KAAQsD,OAAOC,QAAI8D,GAAE/D,OAAOC,GAAC7F,EAAAqD,uBACxCvD,EAAAuC,IAAAsH,GAAE/D,OAAOG,EAAC/F,EAAAsC,KAAQsD,OAAOG,QAAI4D,GAAE/D,OAAOG,GAAC/F,EAAAqD,uBAC7CsG,GAAE9H,KAAKiB,MAAK9C,EAAAqD,wBACXsG,GAAE9H,KAAKmB,OAAMhD,EAAAqD,oCAEI,iBAAArD,EAAAkJ,QAAA,OAAS,OACjBC,OAAAnJ,EAAAkJ,QAAA,UAAY,UACX,UAAAlJ,EAAAkJ,QAAA,EAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAOtJ,EAAAqG,OAAQkD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAAhE,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAmE,EAAA,sDAKc5G,OAAY,EAAZlD,EAAAuC,IAAAwH,GAAA,8BACSG,6DAEAF,IAAM,QAAiB,EAAjBhK,EAAAuC,IAAKwH,yDAzBtCtE,0BAHH,wGClBI,IAAA9D,qBAAQ,WACRqH,uBAAU,GASN,MAAAoB,EAAKpK,EAAAc,QAAA,IAAAZ,EAAAmK,QACDZ,IAAG,EAAIa,aACT,IAAAC,EAAI,WACCC,EAAI,EAAGA,EAAIF,EAAOG,OAAQD,IAAK,CAC9B,MAAAzE,EAAAA,EAAAE,EAAGA,GAAMqE,EAAOE,GAGxBD,IAAY,IAANC,EAAU,IAAM,MAFXzE,EAAC7F,EAAAsC,KAAQsD,OAAOC,GAEO,KADvBE,EAAC/F,EAAAsC,KAAQsD,OAAOG,GACkB,GAC/C,CACO,OAAAsE,EAAEG,UAIP1H,EAAKhD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKiB,MAAK9C,EAAAqD,OAChCL,EAAMlD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKmB,OAAMhD,EAAAqD,WAGzC0G,EAAEvE,iBAAFuE,EAAE,GAAA,IAAAjK,EAAAuC,IAQM6H,GAAKpK,EAAA2K,MAAA,CAAAjE,EAAI6D,SACbK,EAAG1B,UAAH0B,EAICC,cAAa,YAAAC,+CAJdF,EAKCG,aAAY,YAAAD,sEALb9K,EAAAgL,cAAAJ,YACEL,IADFvK,EAAAgL,cAAAJ,YAGE5B,mBAHF4B,EAAG,GAAAK,EAAA,CAMyB5B,OAAAnJ,EAAAuD,WAAA,OAAS,UACD,iBAAAvD,EAAAuD,WAAA,OAAS,uBAC9B9B,mGARfiJ,aATJX,wCAAAA,EAAE,2EAAAH,EAAA,CAAA9G,MAAA,GAAAhD,EAAAuC,IAEeS,OAAKE,OAAA,GAAAlD,EAAAuC,IACJW,SAHlBlD,EAAAgL,cAAAf,gBAIEjH,IAJFhD,EAAAgL,cAAAf,iBAKE/G,IALFlD,EAAAgL,cAAAf,0BAMsBlI,KAAKiB,SAAK9C,EAAAsC,KAAST,KAAKmB,uBAN9C+G,UAFD,oHCrBI,IAAAtI,qBAAQ,WAERqH,uBAAU,GAEVkC,EAAWlL,EAAAmL,KAAAjL,EAAA,cAAA,GAAA,IAAGkL,EAAAA,yBAAyBC,OAQS,MAAAC,EAAAtL,EAAAc,QAAA,WAC1CyK,EAAMrL,EAAAsC,KAAQT,KAAKiB,MACnBwI,EAAMtL,EAAAsC,KAAQT,KAAKmB,cAIvBF,MAHayI,KAAKC,IAAIH,gBAAsB,GAI5CrI,OAHauI,KAAKC,IAAIF,gBAAsB,GAI5CzF,gBAAiB,EACjBE,gBAAiB,KATbjD,yBAAAA,OAAOE,yBAAAA,QAAQ6C,yBAAAA,GAAGE,yBAAAA,GAapB0F,uBAAqB3I,GAAK9C,EAAA0L,aAAA1L,EAAAqD,OAC1BsI,uBAAsB3I,GAAMhD,EAAA0L,aAAA1L,EAAAqD,OAE5BuI,EAAI9L,EAAAc,QAAA,WACR,OAAAoK,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAAtK,IAAAuK,sBAAA,EAAAvK,EAAoBwK,KAAK,UAAO,QAIlFhC,EAAEvE,UAQA,IAAAwG,UARFjC,SAQEiC,EAOCrB,cAAa,YAAAC,+CAPdoB,EAQCnB,aAAY,YAAAD,uDAhBfb,wCAAAA,EAAE,wDAAAH,EAAA,gBAEe6B,uBACCE,SAHlB7L,EAAAgL,cAAAf,gBAIQ0B,IAJR3L,EAAAgL,cAAAf,iBAKS4B,oBALT5B,EAAE,UAAA,OAAAjK,EAAAuC,IAMeS,GAAK9C,EAAA0L,eAAA5L,EAAAuC,IAAkBW,GAAMhD,EAAA0L,eAE5C5L,EAAAgL,cAAAkB,YACEnG,IADF/F,EAAAgL,cAAAkB,YAEEjG,IAFFjG,EAAAgL,cAAAkB,gBAGElJ,IAHFhD,EAAAgL,cAAAkB,iBAIEhJ,IAJFlD,EAAAgL,cAAAkB,SAKOvK,KALP3B,EAAAgL,cAAAkB,YAMElD,mBANFkD,EAAG,GAAAjB,EAAA,CASyB5B,OAAAnJ,EAAAuD,WAAA,OAAS,wCAEhC,OACU,gBAAV9B,IACE,gBACA,gCACuBA,0DAELmK,kBAzB3B7B,UAFD,0HCvBI,IAAAtI,qBAAQ,WAERqH,uBAAU,GAEVkC,EAAWlL,EAAAmL,KAAAjL,EAAA,cAAA,GAAA,IAAGkL,EAAAA,yBAAyBC,OAOmB,MAAAC,EAAAtL,EAAAc,QAAA,WAEpDyK,EAAMrL,EAAAsC,KAAQT,KAAKiB,MACnBwI,EAAMtL,EAAAsC,KAAQT,KAAKmB,OAGnBiJ,EAASV,KAAKC,IAAIH,gBAAsB,GACxCa,EAASX,KAAKC,IAAIF,gBAAsB,UAG5CxI,MAAOuI,EACPrI,OAAQsI,EAERa,GAAEnM,EAAA0L,YAAgB,EAAIO,EAAS,EAC/BG,GAAEpM,EAAA0L,YAAgB,EAAIQ,EAAS,EAC/BG,GAAIJ,EAAS,EACbK,GAAIJ,EAAS,KAhBTpJ,yBAAAA,OAAOE,yBAAAA,QAAQmJ,yBAAAA,IAAIC,yBAAAA,IAAIC,yBAAAA,IAAIC,yBAAAA,IAoB/B,IAAAb,sBAAoB3I,GAAK9C,EAAAqD,OACzBsI,sBAAqB3I,GAAMhD,EAAAqD,OAE3BkJ,EAAOzM,EAAAc,QAAA,IAAAZ,EAAAuD,WACI,OAAmB,gBAAV9B,IAA0B,gBAAkB,eAIrEsI,EAAEvE,UAUA,IAAAgH,UAVFzC,SAUEyC,EAOC7B,cAAgB8B,qDAAgBA,IAPjCD,EAQC3B,aAAe4B,qDAAgBA,YAlBlC1C,yBAAAjK,EAAAgL,cAAAf,mBAME0B,IANF3L,EAAAgL,cAAAf,oBAOE4B,oBAPF5B,EAAE,UAAA,OAAAjK,EAAAuC,IAQeS,MAAKhD,EAAAuC,IAAIW,oBAR1B+G,EAAE,GAAAH,EAAA,oCAEe6B,uBACCE,+CAOhB7L,EAAAgL,cAAA0B,aACEL,IADFrM,EAAAgL,cAAA0B,aAEEJ,IAFFtM,EAAAgL,cAAA0B,aAGEH,IAHFvM,EAAAgL,cAAA0B,aAIEF,IAJFxM,EAAAgL,cAAA0B,SAKO/K,KALP3B,EAAAgL,cAAA0B,YAME1D,KANFhJ,EAAAgL,cAAA0B,yBAUiBD,IAVjBzM,EAAAgL,cAAA0B,0BAWwB/K,qBAXxB+K,EAAM,eAAAxM,EAAA0L,6BAANc,EAAM,mBAAAE,iBAANF,EAAM,GAAAzB,EAAA,CAAA5B,OAAAnJ,EAAAuD,WASsB,OAAS,yBAIlB,OAAAyH,MAAgBE,EAAAA,yBAAyBW,4CACtCE,KAAK,UACtB,gBAzBPhC,UAFD,sLC3CI,IAAAtI,qBAAQ,eACRqH,uBAAU,GAEV6D,2BAAc,WACd3B,EAAWlL,EAAAmL,KAAAjL,EAAA,cAAA,GAAA,IAAGkL,EAAAA,yBAAyBC,OAWnC,MAAAyB,6BAAyBC,MAAMhH,EAAC7F,EAAAsC,KAAQsD,OAAOC,GAC/CiH,6BAAyBD,MAAM9G,EAAC/F,EAAAsC,KAAQsD,OAAOG,GAC/CgH,6BAAyBC,IAAInH,EAAC7F,EAAAsC,KAAQsD,OAAOC,GAC7CoH,6BAAyBD,IAAIjH,EAAC/F,EAAAsC,KAAQsD,OAAOG,GAG7CmH,EAAOpN,EAAAc,QAAA,mBACLuM,EAAQ5B,KAAK6B,MAAKtN,EAAAuC,IAAC4K,GAAEnN,EAAAuC,IAAGyK,GAAEhN,EAAAuC,IAAE0K,GAAEjN,EAAAuC,IAAGuK,WAErCC,MAAOQ,EAAAA,SAASC,8CAA0BT,MAAK7M,EAAA0L,YAAeyB,EAAQ5B,KAAKgC,GAAEzN,EAAAuC,IAAEuK,SAAIE,IACnFE,IAAKK,EAAAA,SAASC,aAAY,OAAAE,EAAAxN,EAAAyN,sBAAcT,IAAGhN,EAAA0L,YAAeyB,EAAKrN,EAAAuC,IAAE0K,GAAEjN,EAAAuC,IAAE4K,OAKnEnK,EAAKhD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKiB,MAAK9C,EAAAqD,OAChCL,EAAMlD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKmB,OAAMhD,EAAAqD,OAGlCuI,EAAI9L,EAAAc,QAAA,WACR,OAAAoK,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAAtK,IAAAuK,sBAAA,EAAAvK,EAAoBwK,KAAK,UAAO,QAIlFhC,EAAEvE,UASA,IAAAkI,UATF3D,SASE2D,EAMC/C,cAAa,YAAAC,+CANd8C,EAOC7C,aAAY,YAAAD,+DAPb8C,aAkBEhD,EAAG1B,UAAH0B,EAGCC,cAAa,YAAAC,+CAHdF,EAICG,aAAY,YAAAD,sEAJb9K,EAAAgL,cAAAJ,EAAG,IAAA5K,EAAAuC,IACC6K,GAAQL,MAAMxC,GADlBvK,EAAAgL,cAAAJ,EAAG,YAAA5K,EAAAuC,IAES6K,GAAQL,MAAMc,WAF1B7N,EAAAgL,cAAAJ,WAKSiC,qBALTjC,EAAG,OAAA5K,EAAAuC,IAeI6K,GAAQL,MAAMe,OAASnM,IAAQ,sBAftCiJ,EAAG,GAAAmD,EAAA,CAMyB1E,OAAAnJ,EAAAuD,WAAA,OAAS,6FAIhC,OACAzD,EAAAuC,IAAA6K,GAAQL,MAAMe,OACZ,UACA,yCACkBhC,kBAdzBlB,eADE5K,EAAAuC,IAAA6K,GAAQL,SAAKiB,kCAqBfC,EAAGC,UAAHD,EAICpD,cAAa,YAAAC,+CAJdmD,EAKClD,aAAY,YAAAD,sEALb9K,EAAAgL,cAAAiD,EAAG,IAAAjO,EAAAuC,IACC6K,GAAQF,IAAI3C,GADhBvK,EAAAgL,cAAAiD,EAAG,YAAAjO,EAAAuC,IAES6K,GAAQF,IAAIW,WAFxB7N,EAAAgL,cAAAiD,WAGSpB,qBAHToB,EAAG,OAAAjO,EAAAuC,IAWI6K,GAAQF,IAAIY,OAASnM,IAAQ,sBAXpCsM,EAAG,GAAAE,EAAA,CAMyB9E,OAAAnJ,EAAAuD,WAAA,OAAS,6FAGD,OAASzD,EAAAuC,IAAA6K,GAAQF,IAAIY,OAAS,UAAY,yCACrDhC,kBAVzBmC,eADEjO,EAAAuC,IAAA6K,GAAQF,OAAGhG,aA9CjB+C,wCAAAA,EAAE,2EAAAH,EAAA,CAAA9G,MAAA,GAAAhD,EAAAuC,IAEeS,OAAKE,OAAA,GAAAlD,EAAAuC,IACJW,SAHlBlD,EAAAgL,cAAAf,gBAIEjH,IAJFhD,EAAAgL,cAAAf,iBAKE/G,IALFlD,EAAAgL,cAAAf,0BAMsBlI,KAAKiB,SAAK9C,EAAAsC,KAAST,KAAKmB,UAG5ClD,EAAAgL,cAAA4C,aACEd,IADF9M,EAAAgL,cAAA4C,aAEEZ,IAFFhN,EAAAgL,cAAA4C,aAGEX,IAHFjN,EAAAgL,cAAA4C,aAIET,IAJFnN,EAAAgL,cAAA4C,YAKE5E,mBALF4E,EAAG,GAAA3C,EAAA,CAQyB5B,OAAAnJ,EAAAuD,WAAA,OAAS,UACD,iBAAAvD,EAAAuD,WAAA,OAAS,uBAC9BoJ,kFAGUf,kBAtB3B7B,UAFD,sLCrCI,IAAAtI,qBAAQ,eACRkL,2BAAc,WACd7D,uBAAU,SASNoF,EAAQpO,EAAAc,QAAA,IAAAZ,EAAAuC,SACHgH,IAAG,EAAI1D,IAAGE,QAAC,CAAUF,EAAGA,SAASD,OAAOC,EAAGE,EAAGA,EAAC/F,EAAAsC,KAAQsD,OAAOG,MAInEoI,EAAQrO,EAAAc,QAAA,eACPsN,GAAS3D,OAAM,MAAS,SACtB6D,KAAUC,GAAIvO,EAAAuC,IAAI6L,cAElBE,EAAMvI,KAAKuI,EAAMrI,KACtBsI,EACG9E,IAAK+E,QAAWA,EAAEzI,KAAKyI,EAAEvI,MACzBgG,KAAK,IACLvB,SAKD0C,EAAOpN,EAAAc,QAAA,sBACPsN,GAAS3D,OAAS,EAAC,MAAA,CAAWsC,MAAO,KAAaG,IAAK,YACrDuB,EAAO,CAAIC,EAAazF,IAAgBwC,KAAK6B,MAAMrE,EAAEhD,EAAIyI,EAAEzI,EAAGgD,EAAElD,EAAI2I,EAAE3I,GAEtE4I,EAAWF,EAAOzO,EAAAuC,IAAC6L,GAAS,GAACpO,EAAAuC,IAAG6L,GAAS,IACzCQ,EAASH,EAAOzO,EAAAuC,IAAC6L,SAASA,GAAS3D,OAAS,GAACzK,EAAAuC,IAAG6L,GAAQpO,EAAAuC,IAAC6L,GAAS3D,OAAS,IAgBxE,MAAA,CAAAsC,MAdKQ,EAAAA,SAASC,8CACRT,oBAEb4B,EAAWlD,KAAKgC,SAChBW,GAAS,GAAGrI,QACZqI,GAAS,GAAGnI,GASEiH,IAPJK,EAAAA,SAASC,8CACNN,kBAEb0B,EACA5O,EAAAuC,IAAA6L,SAASA,GAAS3D,OAAS,GAAG1E,EAC9B/F,EAAAuC,IAAA6L,SAASA,GAAS3D,OAAS,GAAGxE,MAK5BjD,EAAKhD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKiB,MAAK9C,EAAAqD,OAChCL,EAAMlD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKmB,OAAMhD,EAAAqD,WAGzC0G,EAAEvE,UAQA,IAAAkF,UARFX,SAQEW,EAECC,cAAa,YAAAC,+CAFdF,EAGCG,aAAY,YAAAD,+DAHbF,aAeEqD,EAAG/E,UAAH+E,EAKCpD,cAAa,YAAAC,+CALdmD,EAMClD,aAAY,YAAAD,sEANb9K,EAAAgL,cAAAiD,EAAG,IAAAjO,EAAAuC,IACC6K,GAAQL,MAAMxC,GADlBvK,EAAAgL,cAAAiD,EAAG,YAAAjO,EAAAuC,IAES6K,GAAQL,MAAMc,WAF1B7N,EAAAgL,cAAAiD,WAGSpB,qBAHToB,EAAG,OAAAjO,EAAAuC,IAII6K,GAAQL,MAAMe,OAASnM,IAAQ,sBAJtCsM,EAAG,GAAAF,EAAA,CAOyB1E,OAAAnJ,EAAAuD,WAAA,OAAS,qEAGhC,OACAzD,EAAAuC,IAAA6K,GAAQL,MAAMe,OACZ,UACA,uDAbPG,eADEjO,EAAAuC,IAAA6K,GAAQL,SAAKiB,kCAoBfa,EAAGX,UAAHW,EAKChE,cAAa,YAAAC,+CALd+D,EAMC9D,aAAY,YAAAD,sEANb9K,EAAAgL,cAAA6D,EAAG,IAAA7O,EAAAuC,IACC6K,GAAQF,IAAI3C,GADhBvK,EAAAgL,cAAA6D,EAAG,YAAA7O,EAAAuC,IAES6K,GAAQF,IAAIW,WAFxB7N,EAAAgL,cAAA6D,WAGShC,qBAHTgC,EAAG,OAAA7O,EAAAuC,IAII6K,GAAQF,IAAIY,OAASnM,IAAQ,sBAJpCkN,EAAG,GAAAV,EAAA,CAOyB9E,OAAAnJ,EAAAuD,WAAA,OAAS,qEAED,OAASzD,EAAAuC,IAAA6K,GAAQF,IAAIY,OAAS,UAAY,uDAT9Ee,eADE7O,EAAAuC,IAAA6K,GAAQF,OAAGhG,aAzCjB+C,wCAAAA,EAAE,8GAAAH,EAAA,CAAA,MAAA,GAAA9J,EAAAuC,IAEaS,OAAK,MAAA,GAAAhD,EAAAuC,IACLW,SAHflD,EAAAgL,cAAAf,gBAIEjH,IAJFhD,EAAAgL,cAAAf,iBAKE/G,IALFlD,EAAAgL,cAAAf,0BAMsBlI,KAAKiB,SAAK9C,EAAAsC,KAAST,KAAKmB,UAE5ClD,EAAAgL,cAAAJ,YACIyD,IADJrO,EAAAgL,cAAAJ,YAIE5B,mBAJF4B,EAAG,GAAAK,EAAA,aAMY6D,OAAAjC,KAAelL,iCAEF0H,OAAAnJ,EAAAuD,WAAA,OAAS,UACD,iBAAAvD,EAAAuD,WAAA,OAAS,iFAjB/CwG,UAFD,kMCpDI,IAAAtI,qBAAQ,eACRkL,2BAAc,WACd7D,uBAAU,GAEVkC,EAAWlL,EAAAmL,KAAAjL,EAAA,cAAA,GAAA,IAAGkL,EAAAA,yBAAyBC,OAMvC5G,0BAAa,UAITsK,EAAS/O,EAAAc,QAAA,IAAAZ,EAAA8O,0DAGTZ,EAAQpO,EAAAc,QAAA,IAAAd,EAAAuC,IACZwM,GAAUtF,MAAO1D,IAAGE,QAAC,CAAUF,EAAGA,EAAC7F,EAAAsC,KAAQsD,OAAOC,EAAGE,EAAGA,EAAC/F,EAAAsC,KAAQsD,OAAOG,MAIpEoI,EAAQrO,EAAAc,QAAA,eACPsN,GAAS3D,OAAM,MAAS,SACtB6D,KAAUC,GAAIvO,EAAAuC,IAAI6L,GACnBa,IAAS/O,EAAA8O,cAER,OAAA,KAAAV,EAAMvI,KAAKuI,EAAMrI,KACtBsI,EAAK9E,IAAK+E,QAAWA,EAAEzI,KAAKyI,EAAEvI,KAAKgG,KAAK,MACvCgD,EAAY,GAAK,OAClBvE,SAGEwE,EAAYlP,EAAAc,QAAA,MAAAZ,EAAA8O,eAAA9O,EAAAuC,SAAwCgI,OAAS,GAE7DzH,EAAKhD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKiB,MAAK9C,EAAAqD,OAChCL,EAAMlD,EAAAc,QAAA,IAAAZ,EAAAsC,KAAiBT,KAAKmB,OAAMhD,EAAAqD,OAElCuI,EAAI9L,EAAAc,QAAA,WACR,OAAAoK,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAAtK,IAAAuK,sBAAA,EAAAvK,EAAoBwK,KAAK,UAAO,QAIlFhC,EAAEvE,UAQA,IAAAkF,UARFX,SAQEW,EAECC,cAAa,YAAAC,+CAFdF,EAGCG,aAAY,YAAAD,+DAHbF,aAqBEqD,EAAG/E,iCAAHlJ,EAAAgL,cAAAiD,EAAG,IAAA,KAAAjO,EAAAuC,IACM6L,GAAQpO,EAAAuC,IAAC6L,GAAS3D,OAAS,GAAG1E,KAAC/F,EAAAuC,IAAI6L,SAASA,GAAS3D,OAAS,GAAGxE,OAACjG,EAAAuC,IAAM6L,GAAS,GAAGrI,KAAC/F,EAAAuC,IAAI6L,GAAS,GAAGnI,mBAD9GgI,EAAG,GAAAF,EAAA,QAGYlB,oDAEU,cACT,kBANhBoB,qBADEiB,IAAYhP,EAAAuC,SAAagI,OAAS,GAACtD,EAAA6G,kCAYrC9B,EAAGgC,IAAHlO,EAAAgL,cAAAkB,YAMU,2CANVA,EAAG,IAAAlM,EAAAuC,IACC6L,GAAS,GAAGrI,EAAItB,IAAUvE,EAAAqD,MAAW,mBADzC2I,EAAG,IAAAlM,EAAAuC,IAEC6L,GAAS,GAAGnI,EAAIxB,IAAUvE,EAAAqD,MAAW,GAFzCvD,EAAAgL,cAAAkB,UAGQzH,IAAUvE,EAAAqD,OAHlBvD,EAAAgL,cAAAkB,WAISzH,IAAUvE,EAAAqD,OAJnBvD,EAAAgL,cAAAkB,SAKOW,KALP7M,EAAAgL,cAAAkB,WAOSW,KAPT7M,EAAAgL,cAAAkB,+BAQ6B,gBAR7BA,qBADEgD,IAAYhP,EAAAuC,SAAagI,QAAU,GAACtD,EAAAD,aAvC1C+C,wCAAAA,EAAE,2EAAAH,EAAA,CAAA9G,MAAA,GAAAhD,EAAAuC,IAEeS,OAAKE,OAAA,GAAAlD,EAAAuC,IACJW,SAHlBlD,EAAAgL,cAAAf,gBAIEjH,IAJFhD,EAAAgL,cAAAf,iBAKE/G,IALFlD,EAAAgL,cAAAf,0BAMsBlI,KAAKiB,SAAK9C,EAAAsC,KAAST,KAAKmB,UAE5ClD,EAAAgL,cAAAJ,YACIyD,IADJrO,EAAAgL,cAAAJ,YAIE5B,mBAJF4B,EAAG,GAAAK,EAAA,CAK0BkE,KAAAjP,EAAA8O,cAAA,OAASrN,IACvBmN,OAAAjC,KAAelL,iCAEF0H,OAAAnJ,EAAAuD,WAAA,OAAS,wCAEhC,OACU,gBAAV9B,IACE,gBACA,qFAGkBmK,kBAxB3B7B,UAFD,mICvCQ,MAAAzJ,EAAuBpB,IAGvBgC,EAAkBpB,EAAAc,QAAA,IACtBN,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAS,YAAe,MAItF,IAAAyO,EAAoC,KACpCC,EAAQrP,EAAAI,OAAO,GAGnBJ,EAAAiC,YAAO,6BACcmN,EAAS,OAC5BA,EAAUE,cAEJC,EAAY,OAAA9N,SAAO+N,mBAAP,EAAA/N,EAAAgO,KAAAC,YACbH,EAAS,aAERI,EAAQC,SAASC,cACvBF,EAAMG,mBAAmBV,GACzBO,EAAMI,UAAS,GACfR,EAAUS,kBACVT,EAAUU,SAASN,KAIrB3P,EAAAkQ,gBAAW,KACL,IACI,MAAAC,EAAMC,UACNC,EACJ,mBAAmBC,KAAKF,UAAUG,YACV,aAAvBH,UAAUI,WAA2B,MAAAL,OAAA,EAAAA,EAAKM,gBAAiB,EAC9DzQ,EAAAkC,IAAAmN,EAAQgB,GAAG,EACb,CAAA,MACErQ,EAAAkC,IAAAmN,GAAQ,EACV,UAYIqB,EAAc1Q,EAAAc,QAAA,IAAAZ,EAAAiG,WAAuB5F,OAAOoQ,SAAQzQ,EAAAqD,OAEpDqN,EAAS5Q,EAAAc,QAAA,IAAAd,EAAAuC,IACb8M,IAAKnP,EAAA2Q,WAAA7Q,EAAAuC,IAAiBmO,GAAiB,GAAC1Q,EAAAuC,IAAImO,GAFhB,IAIxBI,EAAc9Q,EAAAc,QAAA,IAAAd,EAAAuC,IAAYqO,GAJF,SAIsCF,IAC9DK,sBAAqBH,GAAS5Q,EAAAuC,IAAGmO,GALT,GAKkD,GAC1EM,sBAA2BJ,GAAY,IAAG5Q,EAAAuC,IAAGwO,GAAY,KAGzDxF,6BAA6BhL,OAAOiC,KAAKT,KAAKiB,MAAK9C,EAAAqD,OACnDiI,6BAA6BjL,OAAOiC,KAAKT,KAAKmB,OAAMhD,EAAAqD,OAEpD0N,6BACO1Q,OAAO2Q,gBAAkBC,uBAAqBC,IACrD,0BACW7Q,OAAO2Q,gBAAkBC,EAAAA,qBAAqBE,OACvD,SACA,gBAKT5L,EAAEC,UAAFD,EAOCoF,cAAa,YAAAC,+CAPdrF,EAQCsF,aAAY,YAAAD,+CAGX,IAAAwG,UAXF7L,uBAWE6L,GAAG,WAAHA,eAAAA,EAAGC,GACSnC,EAASmC,EAAA,IAATnC,WAZd3J,uCAAAA,EAAE,GAAAqE,EAAA,oCAEeyB,uBACCC,iBACF,EAC0BnC,OAAAnJ,EAAAuD,aAAAvD,EAAA2Q,UAAA,OAAS,UACD,iBAAA3Q,EAAAuD,aAAAvD,EAAA2Q,UAAA,OAAS,yBAKzDS,EAAG,kBAAApR,EAAA2Q,yBAAHS,EAAG,GAAArG,EAAA2B,GAqB4C5M,EAAAwR,SAAAC,EAAAvR,EAAAiG,WAAA5F,OAAOmR,mFAd9BT,GACCtP,MAAAzB,EAAAiG,WAAA5F,OAAOoR,+BACXb,qBACDc,EAAAA,gBAAe1R,EAAAiG,WAAY5F,OAAOsR,yBACnCC,EAAAA,mBAAkB5R,EAAAiG,WAAY5F,OAAOwR,WACpB,mBAAA7R,EAAAiG,WAAA5F,OAAOyR,gBAChBhJ,QAAA9I,EAAAiG,WAAA5F,OAAOyI,oBACpB4H,GAAS,GAAA5Q,EAAAuC,IAAMyO,MAAqB,oBACnCJ,GAAS,GAAA5Q,EAAAuC,IAAMyO,MAAqB,8CAGxB3H,OAAAnJ,EAAA2Q,UAAA,OAAS,yCAElBD,GAAS,SAAA5Q,EAAAuC,IAAYwO,WAAe,oCApBtD/Q,EAAA2D,MAAA,OAAA2N,EA1CQ,WACFtR,EAAAuC,IAAAnB,IAAuBgO,SAC5BhO,GAAmBmD,iBAAgBrE,EAAAsE,UAAAtE,EAAAiG,WAAuB5F,OAAOhB,GAAE,CACjEmS,SAAUtC,EAAU6C,WAExB,cA0BDxM,UAHD,mGC5EI,IAAAyM,2BAAc,GAEXnS,EAAQC,EAAAC,WAAAC,EAAA,+FAGP,MAAAM,EAAuBpB,QAEzB+S,EAAWnS,EAAAI,MAAsB,MACjCgS,EAAwB,KAEkB,MAAA9G,EAAAtL,EAAAc,QAAA,IAAAZ,EAAAiG,WAAA3D,KAAKT,6BAA3CiB,8BAAOE,cAGT9B,EAAkBpB,EAAAc,QAAA,IACtBN,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAS,YAAe,MAmCjF,SAAA0R,IACHD,IACFE,IAAIC,gBAAgBH,GACpBA,EAAS,KAEb,CApCApS,EAAAiC,YAAO,KACD,GAAAjC,EAAAuC,IAAAnB,GAAoB,OAChBoR,EAAIxS,EAAAuC,IAAGnB,GAAmBqR,iBAAgB,CAC9CjO,UAAStE,EAAAsE,UACT2B,WAAY7B,EAAAA,UAASpE,EAAAiG,YACrBuM,QAAO,CACLR,YAAAA,IACAS,IAAKjD,OAAOkD,oBAUH,OANbJ,EAAKK,KAAMC,IACH,MAAAC,EAAMT,IAAIU,gBAAgBF,GAChC9S,EAAAkC,IAAAiQ,EAAWY,GAAG,GACdX,EAASW,GACRE,EAAAA,QAEU,KACPb,GACFE,IAAIC,gBAAgBH,GACpBA,EAAS,MAETI,EAAKU,MAAK,CACRC,KAAMC,EAAAA,aAAaC,UACnBC,QAAS,yBAIjB,mDAYDC,EAAErK,uBAAFqK,EAAE,KAAA,kBAEIpB,UACGE,KACJtS,0FAJLwT,cAAAA,qBADEpB,MAAQnE,0BAFb,sEC1DMwF,EAAcxT,EAAAc,QAAA,KAAA,iBAA4BP,OAAQhB,GAAEW,EAAAiG,WAAa5F,OAAOhB,UAG7EkG,EAAEC,UAAFD,EAICoF,cAAa,YAAAC,+CAJdrF,EAKCsF,aAAY,YAAAD,+CAEX2I,UAPFhO,GAOkB,yGAAsC+N,gDAPxD/N,uCAAAA,EAAE,6DAAAqE,EAAA,CAEkC,iBAAA5J,EAAAuD,WAAA,OAAS,sCAF7CgC,UAFD,kCCiDMiO,EAAkC1T,EAAAC,WAAAC,EAAA,CAAA,UAAA,WAAA,aAGhC,MAAAM,EAAuBpB,IACvBuU,EAAsBC,EAAAA,yBACtBC,EAAkBC,qBAAkB,CACxCnT,aAA6BA,WAC7B6D,UAAStE,EAAmBsE,YAI1B,IAAAuP,EAAc/T,EAAAI,MAAMJ,EAAAK,MAAA,KACpB2T,EAAiBhU,EAAAI,MAAiC,MAClD6T,EAAYjU,EAAAI,MAAsB,YAGhCgB,EAAkBpB,EAAAc,QAAA,IACtBN,EAAqBa,SACjBb,EAAqBa,SAASC,cAA6BX,YAC3D,MAINX,EAAAiC,YAAO,eACAb,GAAkB,aAGjB8S,EAAYlU,EAAAuC,IAAGnB,GAAmB+S,WACxCnU,EAAAkC,IAAA6R,EAAcK,EAAAA,0BAA0BF,IAA+B1P,YAAS,GAChFxE,EAAAkC,IAAA8R,EAAiBK,EAAAA,iCAAiCH,IAA+B1P,YAAS,GAGpF,MAAA8P,QAAMlT,GAAmBmT,cAAenU,IAC5CJ,EAAAkC,IAAA6R,EAAcK,EAAAA,0BAA0BhU,IAAwBoE,YAAS,GACzExE,EAAAkC,IAAA8R,EAAiBK,EAAAA,iCAAiCjU,IAAwBoE,YAAS,eAExE,MAAA8P,OAAA,EAAAA,YAITE,EAA2C,CAC/CC,cAAa,CAAGC,EAAYC,KACtBA,EAAGC,SAAWD,EAAGE,eAAa7U,EAAAuC,IAAInB,KACpCpB,EAAAuC,IAAAnB,GAAmB0T,qBACnB9U,EAAAkC,IAAA+R,EAAY,SAWT,SAAAc,EAAYpI,EAA4BxG,GAC/CwG,EAAEqI,kBACEhV,EAAAuC,IAAAnB,IAAsBuS,EAAoBtS,iBAC5CD,GAAmB6T,iBAAgB/U,EAAkBsE,UAAW2B,EAAW5F,OAAOhB,IAClFoU,EAAoBtS,SAAS6T,QACzB/O,EAAW5F,OAAOhB,KAAES,EAAAuC,IAAK0R,IAC3BjU,EAAAkC,IAAA+R,EAAY,MAGlB,CAdAjU,EAAAiC,YAAO,IACE4R,EAAgBsB,SAASX,EAAQ,CAAI7T,aAA6BA,yEAgBtEoT,GAAe5N,GAAYA,EAAW5F,OAAOhB,GAAE,CAAAmH,EAAhCP,WACZ1C,EAAUzD,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAGyR,SAAHhU,EAAAA,EAAmBO,OAAOhB,MAAES,EAAAuC,IAAK4D,GAAW5F,OAAOhB,KAC7DsR,sBAAYoD,KAASjU,EAAAuC,IAAK4D,GAAW5F,OAAOhB,IAC5C6V,6CAAOhU,aAAoBiU,sBAAqBrV,EAAAuC,IAAC4D,GAAW5F,UAC5D+U,EAAYtV,EAAAc,QAAA,IAAGyU,EAAAA,eAAcvV,EAAAuC,IAAC4D,GAAW5F,OAAOiV,WAAaC,EAAAA,aAAaC,qDAepE,MAAAtP,KAASuP,EAAG3V,EAAA4V,QACnBC,mBACKF,EAAG,+BACNlS,yBACuBF,OACd6F,QAAAuD,GAAMoI,EAAYpI,QAAGxG,QAdtB,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAAMoI,EAAYpI,QAAGxG,+CACRmP,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DAsBR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBQ,mBACKT,EAAG,+BACNlS,yBACuBF,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QAd/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,+CACjCmP,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DAsBR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBS,mBACKV,EAAG,+BACNlS,yBACuBF,OACd6F,QAAAuD,GAAiCoI,EAAYpI,QAAGxG,QAdjD,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,+CACjCmP,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DAuBR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBU,mBACKX,EAAG,sBACiBpS,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QAd/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,WACjD,6CACgBmP,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DAsBR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBW,mBACKZ,EAAG,sBACiBpS,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QAd/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,WACjD,6CACgBmP,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DAsBR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBY,mBACKb,EAAG,sBACiBpS,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QAd/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,WACjD,6CACgBmP,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DAsBR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBa,mBACKd,EAAG,sBACiBpS,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QAd/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,oBAK9B6V,EAAAA,eAAcvV,EAAAuC,IAAC4D,GAAW5F,OAAOiV,WAAaC,EAAAA,aAAaiB,WAVpFT,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,iHAIU4C,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,WACjD,+BACwBhB,mDACOC,gFAEnCsO,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DA4BR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBe,mBACKhB,EAAG,+BACNlS,yBACuBF,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QArB/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,kBAEvDxD,gBAAkB+L,GAAC,CAAMA,EAAEkI,WAAW7J,MAAO2B,EAAEkI,WAAW1J,KAC1DjJ,qBAAsByK,EAAGjM,KAAA,IACpBiM,EACHkI,WAAU,CAAI7J,MAAOtK,EAAS,GAAIyK,IAAKzK,EAAS,kDAG5B6S,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DA0BR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBiB,mBACKlB,EAAG,+BACNlS,yBACuBF,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QAjB/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IANvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,iCACahB,mDACOC,iKAItC3B,IACU4C,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,kBAEvDxD,gBAAkB+L,GAAMA,EAAEjM,SAC1BwB,qBAAsByK,EAAGjM,SAAmBiM,EAAGjM,yDAEzB6S,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DA0BR,MAAA/P,KAASuP,EAAG3V,EAAA4V,QACnBkB,mBACKnB,EAAG,+BACNlS,yBACuBF,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QAlB/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,kBAEvDxD,gBAAkB+L,GAAMA,EAAEjM,SAC1BwB,qBAAsByK,EAAGjM,SAAmBiM,EAAGjM,yDAEzB6S,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DA0BR,MAAA/P,KAAS7F,EAAMP,EAAA4V,wCAKJzP,GAAY5F,OAAAA,OAJ9BwW,EAAOrQ,EAAA,2BACuB/F,0CAC5B8C,iCACAoN,+DAE2BrM,gCACJjB,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,QArB9C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,QAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,WAAU6P,KAC5CkF,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,oBAI9B6V,EAAAA,eAAcvV,EAAAuC,IAAC4D,GAAW5F,OAAOiV,WAAaC,EAAAA,aAAaC,SATpFO,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAAMoI,EAAYpI,QAAGxG,yDAEhB6Q,cAAArK,IACdA,EAAEqI,kBACFhV,EAAAkC,IAAA+R,EAASjU,EAAAuC,IAAG4D,GAAW5F,OAAOhB,IAAE,SAE9BmU,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,0DAyBR,MAAA/P,KAAS6Q,EAAOjX,EAAA4V,QACvBsB,EAAIxQ,EAAA,2BAC0B/F,0CAC5B8C,kCACA0C,6BAC2B3B,gCACJjB,OACd6F,QAAAuD,GAA+BoI,EAAYpI,QAAGxG,OAhB/C,IAAAyG,EAAA5M,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY9U,eAAe,IACjC+U,EAAA/V,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAY5U,eAAe,IAC7B8U,EAAAhW,EAAAc,QAAA,WAAAd,OAAAA,OAAAA,EAAAA,EAAAuC,IAAA6S,SAAApV,EAAAA,EAAM8V,YAAYpW,mBAAmB,IALvDuW,EAAkBvP,EAAA1G,EAAA2I,mDACExC,kCAClB1C,8IAI+B0B,mDACOC,sBAC5BiB,SAAAsG,GAA+BoI,EAAYpI,QAAGxG,+CACjCmP,IAAY,WAChC5B,GAEMtN,WAAQ8P,QAAA,CAAAC,SAAA,mBAbZgB,EAAAA,cAAQhR,OAAUiR,kCA7BlBC,mBAAWlR,MAAUmR,GAAAnQ,EAAAoQ,GAAA,kCA1BrBC,kBAAUrR,MAAUsR,GAAAtQ,EAAAC,GAAA,kCA1BpBsQ,mBAAWvR,MAAU4C,GAAA5B,EAAAS,GAAA,kCA7BrB+P,eAAOxR,MAAUyR,GAAAzQ,EAAA0Q,GAAA,kCAtBjBC,oBAAY3R,MAAU4R,GAAA5Q,EAAA6Q,GAAA,kCAtBtBC,mBAAW9R,MAAU0C,GAAA1B,EAAA+Q,GAAA,kCAtBrBC,oBAAYhS,MAAU0B,GAAAV,EAAAiR,GAAA,kCAtBtBC,oBAAYlS,MAAUwB,GAAAR,EAAAmR,GAAA,kCAtBtBC,iBAASpS,MAAUkB,GAAAF,EAAAqR,GAAA,kCAtBnBC,iBAAStS,MAAUe,GAAAC,EAAAuR,GAAA,kCAtBxBC,cAAMxS,MAAU6H,GAAA7G,EAAAyR,GAAA,0CARvB,2MChHQ,MAAAjF,EAAsBC,EAAAA,yBACtBpT,EAAuBpB,IAEzB,IAAAyZ,EAAQ7Y,EAAAI,MAAMJ,EAAAK,MAAA,KACdyY,EAAe9Y,EAAAI,MAAoB,MACnC2Y,EAAa/Y,EAAAI,MAA8B,YAGzC4Y,EAAiBhZ,EAAAc,QAAA,IACrB6S,EAAoBtS,SAAWsS,EAAoBtS,SAASC,YAAWpB,EAAAS,YAAe,MAElFS,EAAkBpB,EAAAc,QAAA,IACtBN,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAS,YAAe,MAI1FX,EAAAiC,YAAO,eACA+W,GAAiB,cAEbhZ,EAAAuC,IAAGyW,GAAkBC,kBAAiB,WAC7CJ,EAAK7Y,EAAAuC,IAAGyW,GAAkBE,yBAAwBhZ,EAAAsE,YAAA,SAClDsU,EAAY9Y,EAAAuC,IAAGyW,GAAkBG,uBAAsBjZ,EAAAsE,YAAA,OAM3DxE,EAAAiC,YAAO,eACAb,GAAkB,aAGvB2X,EAAU/Y,EAAAuC,IAAGnB,GAAmBgY,iBAAa,gBAEjChY,GAAmBiY,mBAAoBjE,IACjDpV,EAAAkC,IAAA6W,EAAa3D,GAAI,OAKf,MAAAE,EAAYtV,EAAAc,QAAA,iBAAAd,OAAAA,OAAAA,EAAAA,OAAAA,EAAAA,EAAAuC,IAChBwW,SADgB/Y,EAAAA,EACJsZ,mBAAU9D,WAClBD,EAAAA,eAAcvV,EAAAuC,IAACwW,GAAWO,SAAS9D,YACnCxV,OAAAA,EAAAA,OAAAA,EAAAA,EAAAuC,IAAAwW,aAAYO,eAAZtZ,EAAAA,EAAsB6D,QAAS0V,EAAAA,qBAAqBC,UAClDjE,EAAAA,eAAeE,EAAAA,aAAaiB,UAC5BnB,iBAAeE,EAAAA,aAAaC,oGAMjCjQ,EAAEyI,wBAAFzI,qDAOUsT,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUtQ,UAF/BsN,EAAQmD,EAAA,6FAGOZ,0CATjBpT,uCAAAA,EAAE,GAAAqE,EAAA,wBACqBwL,uEADvB7P,yDAcAE,EAAE+T,wBAAF/T,qDAOUoT,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUtQ,UAF/ByN,EAAQkD,EAAA,6FAGOd,0CATjBlT,uCAAAA,EAAE,GAAAsF,EAAA,wBACqBqK,uEADvB3P,yDAcAqB,EAAEC,wBAAFD,qDAOU+R,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUtQ,UAF/BuN,EAAQqD,EAAA,6FAGOf,0CATjB7R,uCAAAA,EAAE,GAAA+G,EAAA,wBACqBuH,uEADvBtO,yDAcAS,EAAEoS,wBAAFpS,qDAOUsR,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUtQ,UAF/BwN,EAAOsD,EAAA,6FAGQjB,0CATjBpR,uCAAAA,EAAE,GAAA0G,EAAA,wBACqBmH,uEADvB7N,eADOzH,EAAAuC,IAAAwW,GAAWO,SAASzV,OAAS0V,uBAAqBQ,UAAQ5S,EAAAQ,kCAd1D3H,EAAAuC,IAAAwW,GAAWO,SAASzV,OAAS0V,EAAAA,qBAAqBS,UAAS7S,EAAAE,GAAAF,EAAAoQ,GAAA,kCAd3DvX,EAAAuC,IAAAwW,GAAWO,SAASzV,OAAS0V,EAAAA,qBAAqBC,UAASrS,EAAAD,GAAAC,EAAAC,GAAA,kCAdhEpH,EAAAuC,IAAAwW,GAAWO,SAASzV,OAAS0V,EAAAA,qBAAqBU,UAAS9S,EAAA6G,GAAA7G,EAAAS,GAAA,+BAD7D5H,EAAAuC,IAAAuW,IAAY9Y,EAAAuC,IAAIwW,IAAU/Y,EAAAuC,IAAIwW,GAAWO,YAAQzR,0BAFtD,kRChDQ,MAAAqS,0BAA0BA,QAE1B3T,EAAKvG,EAAAc,QAAA,KAAA,CACT+E,KAAI7F,EAAAuC,IAAE2X,GAAOpU,OAAOC,EAAC7F,EAAAqD,MACrByC,IAAGhG,EAAAuC,IAAE2X,GAAOpU,OAAOG,EAAC/F,EAAAqD,MACpBP,MAAKhD,EAAAuC,IAAE2X,GAAOnY,KAAKiB,MAAK9C,EAAAqD,MACxBL,OAAMlD,EAAAuC,IAAE2X,GAAOnY,KAAKmB,OAAMhD,EAAAqD,wDAK3BkC,EAAEyD,WASAmN,UATF5Q,GASQzF,EAAA2I,0BAAa,6CAA2BwR,eAThD1U,uCAAAA,EAAE,GAAAqE,EAAA,qBAEYjE,KAAA,GAAA7F,EAAAuC,IAAAgE,GAAMV,MAAI,OACXG,IAAA,GAAAhG,EAAAuC,IAAAgE,GAAMP,KAAG,OACPhD,MAAA,GAAAhD,EAAAuC,IAAAgE,GAAMvD,OAAK,OACVE,OAAA,GAAAlD,EAAAuC,IAAAgE,GAAMrD,QAAM,4DAL5BuC,yDAYAE,EAAEyU,WASAhE,UATFzQ,GASQ3F,EAAA2I,0BAAa,6CAA2BwR,eAThDxU,uCAAAA,EAAE,GAAAsF,EAAA,qBAEYpF,KAAA,GAAA7F,EAAAuC,IAAAgE,GAAMV,MAAI,OACXG,IAAA,GAAAhG,EAAAuC,IAAAgE,GAAMP,KAAG,OACPhD,MAAA,GAAAhD,EAAAuC,IAAAgE,GAAMvD,OAAK,OACVE,OAAA,GAAAlD,EAAAuC,IAAAgE,GAAMrD,QAAM,4DAL5ByC,yDAYAqB,EAAEqT,WASAvD,UATF9P,GASShH,EAAA2I,0BAAa,6CAA2BwR,eATjDnT,uCAAAA,EAAE,GAAA+G,EAAA,qBAEYlI,KAAA,GAAA7F,EAAAuC,IAAAgE,GAAMV,MAAI,OACXG,IAAA,GAAAhG,EAAAuC,IAAAgE,GAAMP,KAAG,OACPhD,MAAA,GAAAhD,EAAAuC,IAAAgE,GAAMvD,OAAK,OACVE,OAAA,GAAAlD,EAAAuC,IAAAgE,GAAMrD,QAAM,4DAL5B8D,yDAYAS,EAAE6S,WASAzD,UATFpP,GASUzH,EAAA2I,0BAAa,6CAA2BwR,eATlD1S,uCAAAA,EAAE,GAAA0G,EAAA,qBAEYtI,KAAA,GAAA7F,EAAAuC,IAAAgE,GAAMV,MAAI,OACXG,IAAA,GAAAhG,EAAAuC,IAAAgE,GAAMP,KAAG,OACPhD,MAAA,GAAAhD,EAAAuC,IAAAgE,GAAMvD,OAAK,OACVE,OAAA,GAAAlD,EAAAuC,IAAAgE,GAAMrD,QAAM,4DAL5BuE,yDAYA8S,EAAEC,WASA7D,UATF4D,GASMva,EAAA2I,0BAAa,6CAA2BwR,eAT9CI,uCAAAA,EAAE,GAAAE,EAAA,qBAEY5U,KAAA,GAAA7F,EAAAuC,IAAAgE,GAAMV,MAAI,OACXG,IAAA,GAAAhG,EAAAuC,IAAAgE,GAAMP,KAAG,OACPhD,MAAA,GAAAhD,EAAAuC,IAAAgE,GAAMvD,OAAK,OACVE,OAAA,GAAAlD,EAAAuC,IAAAgE,GAAMrD,QAAM,4DAL5BqX,yDAYAG,EAAEC,WASA9E,UATF6E,GASK1a,EAAA2I,0BAAa,6CAA2BwR,eAT7CO,uCAAAA,EAAE,GAAAE,EAAA,qBAEY/U,KAAA,GAAA7F,EAAAuC,IAAAgE,GAAMV,MAAI,OACXG,IAAA,GAAAhG,EAAAuC,IAAAgE,GAAMP,KAAG,OACPhD,MAAA,GAAAhD,EAAAuC,IAAAgE,GAAMvD,OAAK,OACVE,OAAA,GAAAlD,EAAAuC,IAAAgE,GAAMrD,QAAM,4DAL5BwX,yDAYAG,EAAEC,WAUA,IAAAC,UAVFF,iBAAAA,wCAAAA,EAAE,GAAAG,EAAA,qBAEYnV,KAAA,GAAA7F,EAAAuC,IAAAgE,GAAMV,MAAI,OACXG,IAAA,GAAAhG,EAAAuC,IAAAgE,GAAMP,KAAG,OACPhD,MAAA,GAAAhD,EAAAuC,IAAAgE,GAAMvD,OAAK,OACVE,OAAA,GAAAlD,EAAAuC,IAAAgE,GAAMrD,QAAM,8DAK1B6X,EAAE,GAAAE,EAAA,4DAGiCd,KAAKxI,WAAa,YAAS,qDAbhEkJ,yBADehX,OAAS0V,EAAAA,qBAAqB2B,YAAQnD,4CAZtClU,OAAS0V,EAAAA,qBAAqB4B,MAAGtS,GAAA1B,EAAAoQ,GAAA,4CAZjC1T,OAAS0V,EAAAA,qBAAqB6B,OAAIvT,GAAAV,EAAAC,GAAA,4CAZlCvD,OAAS0V,EAAAA,qBAAqB8B,WAAQ1T,GAAAR,EAAAS,GAAA,4CAZtC/D,OAAS0V,EAAAA,qBAAqB+B,UAAOjU,GAAAF,EAAA0Q,GAAA,4CAZrChU,OAAS0V,EAAAA,qBAAqBgC,SAAMrU,GAAAC,EAAA6Q,GAAA,4CAZzCnU,OAAS0V,EAAAA,qBAAqBiC,SAAMxN,GAAA7G,EAAA+Q,GAAA,0BAFjD,kGCZQ,MAAAuD,EAAmBjc,QACrBkc,EAAW1b,EAAAI,MAAMJ,EAAAK,MAAA,IAAmCsb,MAEpDC,EAAwC5b,EAAAI,MAAO,MAC/Cyb,EAAsC7b,EAAAI,MAAO,YAE3C0b,EAAyB,CAC7BC,YAAW,EAAKC,SAAQC,uBACjBL,GAAY,OACX,MAAAM,QAAQN,GACdM,EAAMF,OAASA,EACfE,EAAMC,SAAYxP,UACV,MAAAyP,EAAQ,OAAA3a,EAAAkL,EAAEiI,OAA4ByH,YAA9B,EAAA5a,EAAsC,GAChD2a,IACFH,EAAOG,GACPF,EAAMI,MAAQ,KAGlBJ,EAAMK,SAERC,aAAY,EAAKC,SAAQC,WAAUC,YAAWC,iBACtC,MAAAC,QAAShB,OACVgB,IAAWA,EAAOC,WAAU,OAC3B,MAAAC,EAAMF,EAAOC,WAAW,UACzBC,EAAG,OAEF,MAAAxJ,MAAUyJ,MAChBzJ,EAAI0J,YAAc,YAClB1J,EAAI2J,OAAM,KACF,IAAAC,aAAcna,EAAOoa,cAAela,GAAWqQ,EAI/C,MAAA8J,EAASX,EAAWA,EAAW1Z,EAAQ,EACvCsa,EAASX,EAAYA,EAAYzZ,EAAS,EAC1CgP,EAAczG,KAAK8R,IAAIF,EAAQC,EAAQ,GAEvCE,EAAaxa,EAAQkP,EACrBuL,EAAcva,EAASgP,EAE7B2K,EAAO7Z,MAAQwa,EACfX,EAAO3Z,OAASua,EAChBV,EAAIW,UAAUnK,EAAK,EAAG,EAAGiK,EAAYC,SAE/BE,EAAYZ,EAAIa,aAAa,EAAG,EAAGJ,EAAYC,GAC/B,iBAAXhB,GAAqBnK,IAAIC,gBAAgBgB,EAAIsK,KAExDjB,EAAU,CAAGe,YAAW3a,MAAOwa,EAAYta,OAAQua,KAErDlK,EAAIsK,IAAwB,iBAAXpB,EAAsBA,EAASnK,IAAIU,gBAAgByJ,KAIxEzc,EAAAiC,YAAO,KACA,GAAAwZ,EAAiBqC,cAEfrC,EAAiBqC,OAAOC,qBAAoB7d,EAAAS,WAAAT,EAAAsE,UAAAtE,EAAAqD,MAAA,CACjDuY,WACAkC,UAAS,CAAGC,EAAQ7d,WAClBsb,EAAQ,IAAOC,IAAG3b,EAAAuC,IAACmZ,KAAQ,GACvBtb,EACFJ,EAAAuC,IAAAmZ,GAASxZ,IAAI+b,EAAQ7d,SAErBsb,GAASwC,OAAOD,mBAQzBE,EAAKne,EAAAoe,YAAAC,eAALF,EAAK,GAAA,CAAA,EAAA,CAAAG,QAAA,qBAALH,EAAK5M,GAAAvR,EAAAkC,IAAY0Z,EAAYrK,GAAA,IAAAvR,EAAAuC,IAAZqZ,IACjB,IAAA2C,YADAJ,EAAK,eACLI,EAAM,GAAA,CAAA,EAAA,CAAAD,QAAA,qBAANC,EAAMhN,GAAAvR,EAAAkC,IAAY2Z,EAAStK,GAAA,IAAAvR,EAAAuC,IAATsZ,oBAAlB0C,EAAM,mBAGAC,MAAMC,KAAIze,EAAAuC,IAACmZ,GAASlS,WAAO,EAASyU,EAAQ9d,KAAS8d,EAAM,CAAAvX,EAAAC,iDAC/D+X,GAAehY,EAAA,sBADwC1G,EAAAuC,IAAAoc,GAAA,yDAP1D,mIChCO5e,EAAQC,EAAAC,WAAAC,EAAA,uMAGP,MAAA0e,EAAgBC,EAAAA,iBAAgB,IAAA3e,EAAAS,YAEhCme,2BAAgB,OAAA,OAAA3a,EAAA,OAAAuJ,EAAA,OAAAjM,EAAA,MAAAmd,OAAA,EAAAA,EAAeG,cAAf,EAAAtd,EAAwBmO,eAAxB,EAAAlC,EAAkCsR,gBAAK9e,EAAAsE,aACvDvB,wDAAqB6b,aAAM/c,eAAMiB,QAAS,IAC1CG,wDAAsB2b,aAAM/c,eAAMmB,SAAU,IAE5C+b,EAAWjf,EAAAc,QAAA,WAAA,YACG,IADHZ,EAAAqD,MACYrD,EAAAqD,OAAoB,OAAA9B,EAAA,MAAAmd,OAAA,EAAAA,EAAeG,kBAASxb,QAAS,IAG5E2b,mCACiB,2BAEhB,OAAAzd,mBAAesd,cAAf,EAAAtd,EAAwB6B,WAAY6b,EAAAA,SAASC,cAIrD3Z,EAAEC,KAAF1F,EAAAqf,iBAAA5Z,qCAGK1F,IAAS,aADDuJ,OAAOC,YAAYD,OAAOE,QAAOtJ,EAAAqG,OAAQkD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,wBAFrFlE,GAKE6Z,EAAUC,EAAA,0MAKFN,gCACGC,iCACTjc,kCACAE,6NAMFqc,EAAUC,EAAA,oGAAiCR,MAC3CS,kBAAoB,oGAAiCT,cApBvDxZ,cAAAA,UAFD,+WnB9C8Bka,IACtB,MAAAC,EAAaxgB,QAEfgB,EAAQJ,EAAAI,MAAAJ,EAAAK,MAAgCwf,EAAAA,yBAGtC,MAAAlf,YAAsBgf,GAGtBG,EAAA9f,EAAAc,QAAA,IACJ8e,EAAWve,gBAAYV,GAAaif,EAAWve,SAASC,kBAAYX,IAAc,aAGpFX,EAAAiC,uBACQZ,EAAWue,EAAWve,SACtB0e,QAAQpf,OAETU,IAAa0e,cAChB/f,EAAAkC,IAAA9B,EAAQyf,EAAAA,wBAAA,GAIJ,MAAAG,EAAQ3e,EAASC,YAAYye,GAM5B,aAHP3f,EAAQ4f,EAAM7L,YAAA,GAGP6L,EAAMzL,cAAe0L,IAC1BjgB,EAAAkC,IAAA9B,EAAQ6f,GAAA,QAKN,YAAA5e,gBACKye,EACT,EACI,SAAA1f,gBACKA,EACT"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/text-markup/Highlight.svelte","../../src/svelte/components/text-markup/Underline.svelte","../../src/svelte/components/text-markup/Strikeout.svelte","../../src/svelte/components/text-markup/Squiggly.svelte","../../src/svelte/components/annotations/Ink.svelte","../../src/svelte/components/annotations/Square.svelte","../../src/svelte/components/annotations/Circle.svelte","../../src/svelte/components/annotations/Line.svelte","../../src/svelte/components/annotations/Polyline.svelte","../../src/svelte/components/annotations/Polygon.svelte","../../src/svelte/components/annotations/FreeText.svelte","../../src/svelte/components/RenderAnnotation.svelte","../../src/svelte/components/annotations/Stamp.svelte","../../src/svelte/components/annotations/Link.svelte","../../src/svelte/components/GroupSelectionBox.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n AnnotationScope,\n} from '@embedpdf/plugin-annotation';\nimport { useCapability, usePlugin } from '@embedpdf/core/svelte';\n\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseAnnotationReturn {\n provides: AnnotationScope | null;\n state: AnnotationDocumentState;\n}\n\n/**\n * Hook for annotation state for a specific document\n * @param getDocumentId Document ID getter function\n */\nexport const useAnnotation = (getDocumentId: () => string | null): UseAnnotationReturn => {\n const capability = useAnnotationCapability();\n\n let state = $state<AnnotationDocumentState>(initialDocumentState());\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n state = initialDocumentState();\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Get initial state\n state = scope.getState();\n\n // Subscribe to state changes for THIS docId\n return scope.onStateChange((newState) => {\n state = newState;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return state;\n },\n };\n};\n","<script lang=\"ts\" generics=\"T extends PdfAnnotationObject\">\n import type { PdfAnnotationObject, Rect } from '@embedpdf/models';\n import { 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\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isMultiSelected = false,\n isDraggable,\n isResizable,\n lockAspectRatio = false,\n style,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n zIndex = 20,\n resizeUI,\n vertexUI,\n selectionOutlineColor = '#007ACC',\n customAnnotationRenderer,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T>(trackedAnnotation.object);\n let annotationCapability = useAnnotationCapability();\n 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\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 // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n\n // 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 // 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 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 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), ...patch } as T;\n } else if (event.type === 'cancel') {\n preview = trackedAnnotation.object;\n }\n };\n\n const unsubs = [plugin.onDragChange(handleEvent), plugin.onResizeChange(handleEvent)];\n\n return () => unsubs.forEach((u) => u());\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: currentObject.rect,\n vertices: vertexConfig?.extractVertices(currentObject),\n constraints: {\n minWidth: 10,\n minHeight: 10,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n // 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 = trackedAnnotation.object.rect;\n gestureBaseRef = trackedAnnotation.object; // For vertex edit\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, ...patched };\n if (event.state === 'end') {\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, id, sanitized);\n }\n }\n }\n\n // Gesture end - commit\n if (event.state === 'end') {\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: outlineOffset,\n offsetMode: 'outside',\n includeSides: lockAspectRatio ? false : true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: zIndex + 2,\n },\n includeVertices: vertexConfig ? true : false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu - hide when multi-selected\n const shouldShowMenu = $derived(\n isSelected && !isMultiSelected && (!!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 // Placement hints\n const menuPlacement: SelectionMenuPlacement = {\n suggestTop: false,\n spaceAbove: 0,\n spaceBelow: 0,\n };\n\n // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: menuPlacement,\n menuWrapperProps,\n };\n }\n</script>\n\n<div data-no-interaction>\n <div\n {...effectiveIsDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: guardedOnDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{currentObject.rect.size.width * scale}px\"\n style:height=\"{currentObject.rect.size.height * scale}px\"\n style:outline={showOutline ? `1px solid ${selectionOutlineColor}` : 'none'}\n style:outline-offset={showOutline ? `${outlineOffset}px` : '0px'}\n style:pointer-events={isSelected && !isMultiSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && effectiveIsDraggable ? 'move' : 'default'}\n style:z-index={zIndex}\n style={style || ''}\n class={propsClass}\n {...restProps}\n >\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: currentObject,\n children: children as Snippet,\n isSelected,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n pageIndex,\n onSelect,\n })}\n {:else}\n {@render children(currentObject)}\n {/if}\n\n <!-- Resize handles - only when single-selected -->\n {#if isSelected && effectiveIsResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@const Component = resizeUI.component}\n <Component {...hProps} backgroundColor={HANDLE_COLOR} />\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n <!-- Vertex handles - only when single-selected -->\n {#if isSelected && permissions.canModifyAnnotations && !isMultiSelected}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@const Component = vertexUI.component}\n <Component {...vProps} backgroundColor={VERTEX_COLOR} />\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet - hide when multi-selected -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: currentObject.rect.origin.x * scale,\n y: currentObject.rect.origin.y * scale,\n },\n size: {\n width: currentObject.rect.size.width * scale,\n height: currentObject.rect.size.height * scale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if selectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = selectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if selectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render selectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n</div>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\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 ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px\"\n style:top=\"{(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px\"\n style:width=\"{b.size.width * scale}px\"\n style:height=\"{b.size.height * scale}px\"\n style:background={resolvedColor}\n style:opacity\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : undefined}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n ></div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface UnderlineProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\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 ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual underline -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={resolvedColor}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\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 ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual strikeout line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"50%\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={resolvedColor}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\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 ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual squiggly line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{amplitude * 2}px\"\n style:background-image={svgDataUri}\n style:background-repeat=\"repeat-x\"\n style:background-size=\"{period}px {amplitude * 2}px\"\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n interface InkProps {\n isSelected: boolean;\n /** Stroke color */\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n strokeColor,\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n }: InkProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#000000');\n\n // derived SVG path data\n const paths = $derived.by(() =>\n inkList.map(({ points }) => {\n let d = '';\n for (let i = 0; i < points.length; i++) {\n const { x, y } = points[i];\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n }\n return d.trim();\n }),\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n {#each paths as d, i (i)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={resolvedColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n</svg>\n","<!-- Square.svelte -->\n<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface SquareProps {\n isSelected: boolean;\n color?: string; // fill color (defaults to black)\n strokeColor?: string; // stroke color (defaults to fill when omitted)\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect; // bbox includes stroke\n scale: number; // page zoom\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: SquareProps = $props();\n\n // Geometry helpers — compute inner rect so visual fill matches preview\n const { width, height, x, y } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n return {\n width: innerW,\n height: innerH,\n x: strokeWidth / 2,\n y: strokeWidth / 2,\n };\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; pointer-events: none; z-index: 2;\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width + strokeWidth} ${height + strokeWidth}`}\n>\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface CircleProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Fill colour – defaults to PDFium’s black if omitted */\n color?: string;\n /** Stroke colour – defaults to same as fill when omitted */\n strokeColor?: string;\n /** 0 – 1 */\n opacity?: number;\n /** Stroke width in PDF units */\n strokeWidth: number;\n /** Stroke type – defaults to solid when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – defaults to undefined when omitted */\n strokeDashArray?: number[];\n /** Bounding box of the annotation */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Pointer/touch handler (used for selection) */\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: CircleProps = $props();\n\n const { width, height, cx, cy, rx, ry } = $derived.by(() => {\n // Full bounding box *includes* stroke width.\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n\n // Remove the stroke so the visible fill matches the preview.\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n // Centre of the fill sits strokeWidth/2 in from the edges\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n\n let peValue = $derived(\n isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n );\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n {svgWidth}\n {svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n>\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n onpointerdown={(e) => onClick?.(e)}\n ontouchstart={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n</svg>\n","<!-- Line.svelte -->\n<script lang=\"ts\">\n import type { Rect, LinePoints, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface LineProps {\n color?: string; // interior color\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n isSelected: boolean;\n }\n\n let {\n color = 'transparent',\n opacity = 1,\n strokeWidth,\n strokeColor = '#000000',\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n linePoints,\n lineEndings,\n scale,\n onClick,\n isSelected,\n }: LineProps = $props();\n\n // Localize endpoints into the annotation's bbox\n const x1 = $derived(linePoints.start.x - rect.origin.x);\n const y1 = $derived(linePoints.start.y - rect.origin.y);\n const x2 = $derived(linePoints.end.x - rect.origin.x);\n const y2 = $derived(linePoints.end.y - rect.origin.y);\n\n // Arrow-head / butt endings via shared factory\n const endings = $derived.by(() => {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(lineEndings?.start, strokeWidth, angle + Math.PI, x1, y1),\n end: patching.createEnding(lineEndings?.end, strokeWidth, angle, x2, y2),\n };\n });\n\n // Absolute placement + scaling\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n // Dashed stroke only when requested\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Main line -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Optional arrowheads / butt caps -->\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n onpointerdown={onClick}\n ontouchstart={onClick}\n stroke={strokeColor}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.start.filled ? color : 'none'}\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.end.filled ? color : 'none'}\n />\n {/if}\n</svg>\n","<!-- Polyline.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface PolylineProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Optional start & end endings */\n lineEndings?: LineEndings;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n scale,\n isSelected,\n onClick,\n lineEndings,\n }: PolylineProps = $props();\n\n // Localize vertices to the annotation rect\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data: \"M x0 y0 L x1 y1 ...\"\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n return (\n `M ${first.x} ${first.y} ` +\n rest\n .map((p) => `L ${p.x} ${p.y} `)\n .join('')\n .trim()\n );\n });\n\n // Compute endings (angles from first→second, last-1→last)\n const endings = $derived.by(() => {\n if (localPts.length < 2) return { start: null as any, end: null as any };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts[0], localPts[1]); // FROM first TO second\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]); // FROM second-to-last TO last\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI, // tip outward from start\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad, // tip in line direction\n localPts[localPts.length - 1].x,\n localPts[localPts.length - 1].y,\n );\n return { start, end };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; width: var(--w); height: var(--h); pointer-events: none; z-index: 2; overflow: visible;\"\n style:--w={`${width}px`}\n style:--h={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n</svg>\n","<!-- Polygon.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface PolygonProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n // Preview-only\n currentVertex?: Position;\n handleSize?: number;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n currentVertex,\n handleSize = 14,\n }: PolygonProps = $props();\n\n // Combine vertices with preview point (if any)\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n // Localize points to the annotation bbox\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data; omit 'Z' when previewing\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n const isPreview = !!currentVertex;\n return (\n `M ${first.x} ${first.y} ` +\n rest.map((p) => `L ${p.x} ${p.y}`).join(' ') +\n (isPreview ? '' : ' Z')\n ).trim();\n });\n\n const isPreviewing = $derived(!!currentVertex && vertices.length > 0);\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Preview-only elements -->\n {#if isPreviewing && vertices.length > 1}\n <path\n d={`M ${localPts[localPts.length - 1].x} ${localPts[localPts.length - 1].y} L ${localPts[0].x} ${localPts[0].y}`}\n fill=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={'4,4'}\n style:opacity={0.7}\n />\n {/if}\n\n {#if isPreviewing && vertices.length >= 2}\n <rect\n x={localPts[0].x - handleSize / scale / 2}\n y={localPts[0].y - handleSize / scale / 2}\n width={handleSize / scale}\n height={handleSize / scale}\n fill={strokeColor}\n opacity={0.4}\n stroke={strokeColor}\n stroke-width={strokeWidth / 2}\n />\n {/if}\n</svg>\n","<!-- Free-text.svelte -->\n<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\n // ---------- props ----------\n interface FreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n }\n\n let { documentId, isSelected, isEditing, annotation, pageIndex, scale, onClick }: FreeTextProps =\n $props();\n\n // ---------- capabilities ----------\n const annotationCapability = useAnnotationCapability();\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // ---------- refs / state ----------\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n\n // Focus and move caret to end when entering edit mode\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editorRef.focus();\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n // One-time iOS detection (prevents zoom by font-size compensation)\n $effect.pre(() => {\n try {\n const nav = navigator as any;\n const ios =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n isIOS = ios;\n } catch {\n isIOS = false;\n }\n });\n\n // Persist contents on blur\n function handleBlur() {\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\n // ---------- iOS zoom compensation ----------\n const computedFontPx = $derived(annotation.object.fontSize * scale);\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp = $derived(\n isIOS && isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX,\n );\n const adjustedFontPx = $derived(needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx);\n const scaleComp = $derived(needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1);\n const invScalePercent = $derived(needsComp ? 100 / scaleComp : 100);\n\n // ---------- derived sizes ----------\n const outerW = $derived(annotation.object.rect.size.width * scale);\n const outerH = $derived(annotation.object.rect.size.height * scale);\n\n const justify = $derived(\n annotation.object.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : annotation.object.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n</script>\n\n<!-- Outer positioned container -->\n<div\n style:position=\"absolute\"\n style:width={`${outerW}px`}\n style:height={`${outerH}px`}\n style:z-index={2}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events={isSelected && !isEditing ? 'none' : 'auto'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <!-- Editable span -->\n <span\n bind:this={editorRef}\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:display=\"flex\"\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:color={annotation.object.fontColor}\n style:font-size={`${adjustedFontPx}px`}\n style:font-family={standardFontCss(annotation.object.fontFamily)}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.color ?? annotation.object.backgroundColor}\n style:opacity={annotation.object.opacity}\n style:width={needsComp ? `${invScalePercent}%` : '100%'}\n style:height={needsComp ? `${invScalePercent}%` : '100%'}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : 'pointer'}\n style:outline=\"none\"\n style:transform={needsComp ? `scale(${scaleComp})` : undefined}\n style:transform-origin=\"top left\">{annotation.object.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import { ignore, type PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\n import type { HTMLImgAttributes } from 'svelte/elements';\n import { useAnnotationCapability } from '../hooks';\n import { deepToRaw } from '@embedpdf/utils/svelte';\n\n interface RenderAnnotationProps extends Omit<HTMLImgAttributes, 'style'> {\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n dpr?: number;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n style,\n ...restProps\n }: RenderAnnotationProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n let imageUrl = $state<string | null>(null);\n let urlRef: string | null = null;\n\n const { width, height } = $derived(annotation.rect.size);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Effect to render annotation\n $effect(() => {\n if (annotationProvides) {\n const task = annotationProvides.renderAnnotation({\n pageIndex,\n annotation: deepToRaw(annotation),\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl = url;\n urlRef = url;\n }, ignore);\n\n return () => {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n };\n }\n });\n\n function handleImageLoad() {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n alt=\"\"\n src={imageUrl}\n onload={handleImageLoad}\n {...restProps}\n style:width=\"100%\"\n style:height=\"100%\"\n style:display=\"block\"\n {style}\n />\n{/if}\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import RenderAnnotation from '../RenderAnnotation.svelte';\n\n interface StampProps {\n documentId: string;\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick: (e: MouseEvent | TouchEvent) => void;\n }\n\n let { documentId, isSelected, annotation, pageIndex, scale, onClick }: StampProps = $props();\n\n let annotationProp = $derived({ ...annotation.object, id: annotation.object.id });\n</script>\n\n<div\n style=\"position: absolute; width: 100%; height: 100%; z-index: 2;\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor=\"pointer\"\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <RenderAnnotation {documentId} {pageIndex} annotation={annotationProp} scaleFactor={scale} />\n</div>\n","<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 | TouchEvent) => 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 <rect\n x={0}\n y={0}\n {width}\n {height}\n fill=\"transparent\"\n onpointerdown={hasIRT ? undefined : onClick}\n ontouchstart={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","<!-- GroupSelectionBox.svelte -->\n<script lang=\"ts\">\n import { boundingRectOrEmpty, type Rect } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import {\n useInteractionHandles,\n CounterRotate,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import { useAnnotationPlugin } from '../hooks';\n import type {\n GroupSelectionContext,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\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 /** Resize handle UI customization */\n resizeUI?: ResizeHandleUI;\n /** Selection outline color */\n selectionOutlineColor?: string;\n /** Outline offset */\n outlineOffset?: number;\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 resizeUI,\n selectionOutlineColor = '#007ACC',\n outlineOffset = 2,\n zIndex = 100,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n }: GroupSelectionBoxProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let gestureBase = $state<Rect | null>(null);\n let isDraggingRef = $state(false);\n let isResizingRef = $state(false);\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 // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n\n // Use interaction handles for both drag and resize\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: false,\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 && !isDraggable) 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 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: outlineOffset,\n offsetMode: 'outside',\n includeSides: true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: 0,\n zIndex: zIndex,\n },\n includeVertices: false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\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 return {\n context: buildContext(),\n selected: true,\n rect,\n placement: { suggestTop: false },\n menuWrapperProps,\n };\n }\n</script>\n\n{#if selectedAnnotations.length >= 2}\n <div data-group-selection-box data-no-interaction>\n <!-- Group box - draggable only if isDraggable is true -->\n <div\n {...isDraggable\n ? interactionHandles.dragProps\n : { onpointerdown: (e: PointerEvent) => e.stopPropagation() }}\n style:position=\"absolute\"\n style:left=\"{previewGroupBox.origin.x * scale}px\"\n style:top=\"{previewGroupBox.origin.y * scale}px\"\n style:width=\"{previewGroupBox.size.width * scale}px\"\n style:height=\"{previewGroupBox.size.height * scale}px\"\n style:outline=\"2px dashed {selectionOutlineColor}\"\n style:outline-offset=\"{outlineOffset - 1}px\"\n style:cursor={isDraggable ? 'move' : 'default'}\n style:touch-action=\"none\"\n style:z-index={zIndex}\n >\n <!-- Resize handles -->\n {#if isResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({ ...hProps, backgroundColor: HANDLE_COLOR })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Group selection menu -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: previewGroupBox.origin.x * scale,\n y: previewGroupBox.origin.y * scale,\n },\n size: {\n width: previewGroupBox.size.width * scale,\n height: previewGroupBox.size.height * scale,\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","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import { blendModeToCss, type PdfAnnotationObject, PdfBlendMode } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationIds,\n isCircle,\n isFreeText,\n isHighlight,\n isInk,\n isLine,\n isLink,\n isPolygon,\n isPolyline,\n isSquare,\n isSquiggly,\n isStamp,\n isStrikeout,\n isUnderline,\n type TrackedAnnotation,\n } from '@embedpdf/plugin-annotation';\n import type { PdfLinkAnnoObject } from '@embedpdf/models';\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\n import Highlight from './text-markup/Highlight.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Ink from './annotations/Ink.svelte';\n import Square from './annotations/Square.svelte';\n import Circle from './annotations/Circle.svelte';\n import Line from './annotations/Line.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import FreeText from './annotations/FreeText.svelte';\n import Stamp from './annotations/Stamp.svelte';\n import Link from './annotations/Link.svelte';\n import GroupSelectionBox from './GroupSelectionBox.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n\n // ---------- props ----------\n interface AnnotationsProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n /** 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 resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // ---------- capabilities / handlers ----------\n const annotationCapability = useAnnotationCapability();\n const selectionCapability = useSelectionCapability();\n const pointerHandlers = usePointerHandlers({\n documentId: annotationsProps.documentId,\n pageIndex: annotationsProps.pageIndex,\n });\n\n // ---------- local state ----------\n let annotations = $state<TrackedAnnotation[]>([]);\n let allSelectedIds = $state<string[]>([]);\n let editingId = $state<string | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n // Check if multiple annotations are selected\n const isMultiSelected = $derived(allSelectedIds.length > 1);\n\n // subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current state immediately\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(currentState);\n\n // Then subscribe to changes\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(state);\n });\n return () => off?.();\n });\n\n // pointer handlers (capture-down to deselect when clicking empty layer)\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 // register pointer handlers\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n // click/select logic shared across shapes\n function handleClick(e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n selectionCapability.provides.clear();\n\n // Check for modifier key (Cmd on Mac, Ctrl on Windows/Linux)\n const isModifierPressed = 'metaKey' in e ? e.metaKey || e.ctrlKey : false;\n\n if (isModifierPressed) {\n // Toggle selection: add or remove from current selection\n annotationProvides.toggleSelection(annotationsProps.pageIndex, annotation.object.id);\n } else {\n // Exclusive select: clear and select only this one\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n }\n\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n\n // Special handler for link annotations - if IRT exists, select the parent\n function handleLinkClick(\n e: MouseEvent | TouchEvent,\n annotation: TrackedAnnotation<PdfLinkAnnoObject>,\n ) {\n e.stopPropagation();\n if (!annotationProvides || !selectionCapability.provides) return;\n\n selectionCapability.provides.clear();\n\n // If link has IRT, select the parent annotation instead\n if (annotation.object.inReplyToId) {\n const parentId = annotation.object.inReplyToId;\n const parent = annotations.find((a) => a.object.id === parentId);\n if (parent) {\n annotationProvides.selectAnnotation(parent.object.pageIndex, parentId);\n return;\n }\n }\n\n // Standalone link - select it directly\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n }\n\n // Get selected annotations that are on THIS page (for group selection box)\n const selectedAnnotationsOnPage = $derived(\n annotations.filter((anno) => allSelectedIds.includes(anno.object.id)),\n );\n\n // Check if all selected annotations on this page are draggable in group context\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 // Use group-specific property, falling back to single-annotation property\n return tool?.interaction.isGroupDraggable ?? tool?.interaction.isDraggable ?? true;\n });\n });\n\n // Check if all selected annotations on this page are resizable in group context\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 // Use group-specific property, falling back to single-annotation property\n return tool?.interaction.isGroupResizable ?? tool?.interaction.isResizable ?? true;\n });\n });\n\n // Check if all selected annotations are on the same page (this page)\n const allSelectedOnSamePage = $derived.by(() => {\n if (!annotationProvides) return false;\n // Early return if not enough selections (also creates reactive dependency on allSelectedIds)\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 isSelected = allSelectedIds.includes(annotation.object.id)}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const mixBlendMode = blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\n\n {#if isInk(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Ink\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquare(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Square\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isCircle(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Circle\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: PointerEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isUnderline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Underline\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStrikeout(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Strikeout\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquiggly(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Squiggly\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isHighlight(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply)}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Highlight\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLine(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, vertices) => ({\n ...a,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Line\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolyline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n isSelected={isSelected && !isMultiSelected}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polyline\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolygon(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polygon\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isFreeText(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isEditing && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n editingId = annotation.object.id;\n }}\n {...annotationsProps}\n >\n {#snippet children(object)}\n <FreeText\n documentId={annotationsProps.documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object }}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStamp(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(_object)}\n <Stamp\n documentId={annotationsProps.documentId}\n {isSelected}\n {annotation}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLink(annotation)}\n {@const hasIRT = !!annotation.object.inReplyToId}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n {isMultiSelected}\n isDraggable={false}\n isResizable={false}\n lockAspectRatio={false}\n selectionMenu={hasIRT\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenu}\n selectionMenuSnippet={hasIRT\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleLinkClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Link\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleLinkClick(e, annotation)}\n {hasIRT}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n\n<!-- Group Selection Box (shown when multiple annotations are selected on this page) -->\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 resizeUI={annotationsProps.resizeUI}\n selectionOutlineColor={annotationsProps.selectionOutlineColor}\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","<script lang=\"ts\">\n import { Rotation, type PdfAnnotationObject } from '@embedpdf/models';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n /** 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 selection outline color */\n selectionOutlineColor?: string;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n resizeUI,\n vertexUI,\n selectionOutlineColor,\n customAnnotationRenderer,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived(\n overrideRotation !== undefined\n ? overrideRotation\n : (documentState?.current?.rotation ?? Rotation.Degree0),\n );\n</script>\n\n<div\n id=\"annotation-layer\"\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n {...restProps}\n>\n <Annotations\n {documentId}\n {selectionMenu}\n {selectionMenuSnippet}\n {groupSelectionMenu}\n {groupSelectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {selectionOutlineColor}\n {customAnnotationRenderer}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["useAnnotationCapability","useCapability","AnnotationPlugin","id","useAnnotationPlugin","usePlugin","isMultiSelected","lockAspectRatio","propsClass","outlineOffset","zIndex","selectionOutlineColor","restProps","$","rest_props","$$props","preview","state","proxy","trackedAnnotation","object","annotationCapability","annotationPlugin","permissions","useDocumentPermissions","documentId","gestureBaseRef","gestureBaseRectRef","effectiveIsDraggable","derived","canModifyAnnotations","effectiveIsResizable","guardedOnDoubleClick","annotationProvides","provides","forDocument","currentObject","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","HANDLE_SIZE","size","VERTEX_SIZE","showOutline","user_effect","set","plugin","handleEvent","event","patch","previewPatches","type","untrack","get","unsubs","onDragChange","onResizeChange","forEach","u","interactionHandles","useInteractionHandles","controller","element","rect","vertices","vertexConfig","extractVertices","constraints","minWidth","minHeight","boundingBox","width","pageWidth","height","pageHeight","maintainAspectRatio","pageRotation","rotation","scale","enabled","onUpdate","transformData","changes","metadata","pageSize","startDrag","annotationIds","startResize","resizeHandle","handle","delta","x","origin","y","updateDrag","updateResize","base","vertexChanges","transformAnnotation","patched","_b","sanitized","deepToRaw","updateAnnotation","pageIndex","commitDrag","commitResize","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","resizeHandles","resize","vertexHandles","shouldShowMenu","selectionMenu","selectionMenuSnippet","menuPlacement","suggestTop","spaceAbove","spaceBelow","div","root","div_1","isSelected","dragProps","left","top","annotation","children","onSelect","key","style","handleStyle","hProps","$$anchor","$$item","exclude_from_object","Component","component","Component_1","div_2","root_6","consequent_1","$$render","alternate_1","consequent_2","vertexStyle","vProps","Component_2","div_3","root_10","consequent_3","alternate_2","consequent_4","$$node","$$action_arg","doublePress","onDouble","$$arg0","menuProps","menuWrapperProps","context","selected","placement","buildMenuProps","result","result_component","spread_props","props","consequent_5","CounterRotate","consequent_8","opacity","resolvedColor","b","root_1","tabindex","onClick","cursor","Object","fromEntries","entries","map","k","v","thickness","r","styles","amplitude","period","svg","svgDataUri","encodeURIComponent","paths","inkList","points","d","i","length","trim","index","path","__pointerdown","$$args","__touchstart","set_attribute","styles_1","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","$$d","outerW","outerH","Math","max","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","rect_1","innerW","innerH","cx","cy","rx","ry","peValue","ellipse","e","$0","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","lineEndings","line","transform","filled","styles_2","consequent","path_1","root_2","styles_3","localPts","pathData","first","rest","p","toAngle","a","startRad","endRad","path_2","stroke","allPoints","currentVertex","isPreview","isPreviewing","fill","editorRef","isIOS","focus","selection","getSelection","call","window","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","user_pre_effect","nav","navigator","ios","test","userAgent","platform","maxTouchPoints","computedFontPx","fontSize","needsComp","isEditing","adjustedFontPx","scaleComp","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","span","$$value","set_text","text","contents","fontColor","standardFontCss","fontFamily","textAlignmentToCss","textAlign","backgroundColor","innerText","scaleFactor","imageUrl","urlRef","handleImageLoad","URL","revokeObjectURL","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","img","annotationProp","RenderAnnotation","UNDERLINE","hasIRT","dashArray","isUnderline","hitAreaCursor","hitAreaPointerEvents","apply","this","rect_2","$1","alternate","gestureBase","isDraggingRef","isResizingRef","getGroupBox","rects","selectedAnnotations","ta","boundingRectOrEmpty","groupBox","previewGroupBox","newBox","transformType","isMove","isResize","isDraggable","newRect","rawDelta","clampedDelta","newGroupBox","groupSelectionMenu","groupSelectionMenuSnippet","onpointerdown","stopPropagation","root_5","annotations","consequent_6","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","allSelectedIds","editingId","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationIds","off","onStateChange","handlers","onPointerDown","_","pe","target","currentTarget","deselectAnnotation","handleClick","clear","metaKey","ctrlKey","toggleSelection","selectAnnotation","handleLinkClick","inReplyToId","parentId","parent","find","register","selectedAnnotationsOnPage","filter","anno","includes","areAllSelectedDraggable","every","tool","findToolForAnnotation","interaction","isGroupDraggable","areAllSelectedResizable","isGroupResizable","isResizable","allSelectedOnSamePage","getSelectedAnnotations","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","obj","noop","Ink","$2","$3","AnnotationContainer","$$slots","default","Square","Circle","Underline","Strikeout","Squiggly","Highlight","Multiply","Line","linePoints","Polyline","$4","$5","Polygon","FreeText","onDoubleClick","_object","Stamp","Link","isLink","consequent_12","isStamp","consequent_11","isFreeText","consequent_10","isPolygon","consequent_9","isPolyline","alternate_3","isLine","consequent_7","alternate_4","isHighlight","alternate_5","isSquiggly","alternate_6","isStrikeout","alternate_7","alternate_8","isCircle","alternate_9","isSquare","alternate_10","isInk","alternate_11","GroupSelectionBox","consequent_13","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","defaults","PdfAnnotationSubtype","HIGHLIGHT","node_2","root_4","node_4","node_6","root_8","node_8","SQUIGGLY","STRIKEOUT","bounds","data","root_3","root_7","div_4","root_9","styles_4","div_5","root_11","styles_5","div_6","root_13","div_7","styles_6","styles_7","FREETEXT","INK","LINE","POLYLINE","POLYGON","SQUARE","CIRCLE","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","src","registerPageHandlers","onPreview","toolId","delete","input_1","first_child","fragment","display","canvas_1","Array","from","PreviewRenderer","$$array","documentState","useDocumentState","page","_c","current","pages","actualScale","actualRotation","Rotation","Degree0","attribute_effect","Annotations","node","TextMarkup","node_1","AnnotationPaintLayer","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"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"}