@embedpdf/plugin-annotation 2.2.0 → 2.4.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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1232 -101
- package/dist/index.js.map +1 -1
- package/dist/lib/actions.d.ts +33 -3
- package/dist/lib/annotation-plugin.d.ts +178 -2
- package/dist/lib/handlers/types.d.ts +1 -1
- package/dist/lib/helpers.d.ts +8 -2
- package/dist/lib/selectors.d.ts +97 -8
- package/dist/lib/tools/default-tools.d.ts +39 -11
- package/dist/lib/tools/types.d.ts +22 -4
- package/dist/lib/types.d.ts +278 -1
- package/dist/preact/adapter.d.ts +3 -3
- package/dist/preact/index.cjs +1 -1
- package/dist/preact/index.cjs.map +1 -1
- package/dist/preact/index.js +1133 -403
- package/dist/preact/index.js.map +1 -1
- package/dist/react/adapter.d.ts +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +1132 -402
- package/dist/react/index.js.map +1 -1
- package/dist/shared/components/annotation-container.d.ts +13 -2
- package/dist/shared/components/annotation-layer.d.ts +6 -2
- package/dist/shared/components/annotations/ink.d.ts +3 -3
- package/dist/shared/components/annotations/link.d.ts +28 -0
- package/dist/shared/components/annotations.d.ts +4 -1
- package/dist/shared/components/group-selection-box.d.ts +32 -0
- package/dist/shared/components/index.d.ts +1 -0
- package/dist/shared/components/text-markup/highlight.d.ts +3 -2
- package/dist/shared/components/text-markup/squiggly.d.ts +3 -2
- package/dist/shared/components/text-markup/strikeout.d.ts +3 -2
- package/dist/shared/components/text-markup/underline.d.ts +3 -2
- package/dist/shared/components/types.d.ts +50 -1
- package/dist/shared/context/index.d.ts +1 -0
- package/dist/shared/context/renderer-registry.d.ts +21 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared-preact/components/annotation-container.d.ts +13 -2
- package/dist/shared-preact/components/annotation-layer.d.ts +6 -2
- package/dist/shared-preact/components/annotations/ink.d.ts +3 -3
- package/dist/shared-preact/components/annotations/link.d.ts +28 -0
- package/dist/shared-preact/components/annotations.d.ts +4 -1
- package/dist/shared-preact/components/group-selection-box.d.ts +32 -0
- package/dist/shared-preact/components/index.d.ts +1 -0
- package/dist/shared-preact/components/text-markup/highlight.d.ts +3 -2
- package/dist/shared-preact/components/text-markup/squiggly.d.ts +3 -2
- package/dist/shared-preact/components/text-markup/strikeout.d.ts +3 -2
- package/dist/shared-preact/components/text-markup/underline.d.ts +3 -2
- package/dist/shared-preact/components/types.d.ts +50 -1
- package/dist/shared-preact/context/index.d.ts +1 -0
- package/dist/shared-preact/context/renderer-registry.d.ts +21 -0
- package/dist/shared-preact/index.d.ts +2 -0
- package/dist/shared-react/components/annotation-container.d.ts +13 -2
- package/dist/shared-react/components/annotation-layer.d.ts +6 -2
- package/dist/shared-react/components/annotations/ink.d.ts +3 -3
- package/dist/shared-react/components/annotations/link.d.ts +28 -0
- package/dist/shared-react/components/annotations.d.ts +4 -1
- package/dist/shared-react/components/group-selection-box.d.ts +32 -0
- package/dist/shared-react/components/index.d.ts +1 -0
- package/dist/shared-react/components/text-markup/highlight.d.ts +3 -2
- package/dist/shared-react/components/text-markup/squiggly.d.ts +3 -2
- package/dist/shared-react/components/text-markup/strikeout.d.ts +3 -2
- package/dist/shared-react/components/text-markup/underline.d.ts +3 -2
- package/dist/shared-react/components/types.d.ts +50 -1
- package/dist/shared-react/context/index.d.ts +1 -0
- package/dist/shared-react/context/renderer-registry.d.ts +21 -0
- package/dist/shared-react/index.d.ts +2 -0
- package/dist/svelte/components/AnnotationLayer.svelte.d.ts +8 -1
- package/dist/svelte/components/Annotations.svelte.d.ts +8 -1
- package/dist/svelte/components/GroupSelectionBox.svelte.d.ts +32 -0
- package/dist/svelte/components/RendererRegistryProvider.svelte.d.ts +7 -0
- package/dist/svelte/components/annotations/Ink.svelte.d.ts +2 -1
- package/dist/svelte/components/annotations/Link.svelte.d.ts +24 -0
- package/dist/svelte/components/annotations/index.d.ts +1 -0
- package/dist/svelte/components/index.d.ts +2 -0
- package/dist/svelte/components/text-markup/Highlight.svelte.d.ts +2 -1
- package/dist/svelte/components/text-markup/Squiggly.svelte.d.ts +2 -1
- package/dist/svelte/components/text-markup/Strikeout.svelte.d.ts +2 -1
- package/dist/svelte/components/text-markup/Underline.svelte.d.ts +2 -1
- package/dist/svelte/components/types.d.ts +2 -0
- package/dist/svelte/context/index.d.ts +2 -0
- package/dist/svelte/context/renderer-registry.svelte.d.ts +20 -0
- package/dist/svelte/context/types.d.ts +33 -0
- package/dist/svelte/index.cjs +1 -1
- package/dist/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.d.ts +2 -0
- package/dist/svelte/index.js +1215 -394
- package/dist/svelte/index.js.map +1 -1
- package/dist/svelte/types.d.ts +7 -0
- package/dist/vue/components/annotation-container.vue.d.ts +3 -1
- package/dist/vue/components/annotation-layer.vue.d.ts +31 -5
- package/dist/vue/components/annotations/free-text.vue.d.ts +1 -1
- package/dist/vue/components/annotations/index.d.ts +1 -0
- package/dist/vue/components/annotations/ink.vue.d.ts +2 -2
- package/dist/vue/components/annotations/line.vue.d.ts +1 -1
- package/dist/vue/components/annotations/link.vue.d.ts +29 -0
- package/dist/vue/components/annotations/polygon.vue.d.ts +1 -1
- package/dist/vue/components/annotations/polyline.vue.d.ts +1 -1
- package/dist/vue/components/annotations/stamp.vue.d.ts +1 -1
- package/dist/vue/components/annotations.vue.d.ts +151 -53
- package/dist/vue/components/group-selection-box.vue.d.ts +73 -0
- package/dist/vue/components/index.d.ts +2 -0
- package/dist/vue/components/preview-renderer.vue.d.ts +1 -1
- package/dist/vue/components/renderer-registry-provider.vue.d.ts +13 -0
- package/dist/vue/components/text-markup/highlight.vue.d.ts +2 -2
- package/dist/vue/components/text-markup/squiggly.vue.d.ts +2 -2
- package/dist/vue/components/text-markup/strikeout.vue.d.ts +2 -2
- package/dist/vue/components/text-markup/underline.vue.d.ts +2 -2
- package/dist/vue/context/index.d.ts +2 -0
- package/dist/vue/context/renderer-registry.d.ts +26 -0
- package/dist/vue/context/types.d.ts +33 -0
- package/dist/vue/hooks/use-annotation.d.ts +7 -5
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.ts +3 -1
- package/dist/vue/index.js +1124 -459
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/types.d.ts +8 -1
- 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/context/renderer-registry.svelte.ts","../../src/svelte/components/RendererRegistryProvider.svelte","../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/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/index.ts","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import { getContext, setContext } from 'svelte';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationRendererEntry,\n AnnotationRendererProps,\n} from './types';\nimport type { PdfAnnotationObject } from '@embedpdf/models';\nimport type { Component } from 'svelte';\n\n/**\n * Annotation Renderer Registry\n *\n * Allows external plugins to register custom annotation renderers\n * that integrate with the annotation layer.\n */\nexport interface AnnotationRendererRegistry {\n register(entries: BoxedAnnotationRenderer[]): () => void;\n getAll(): BoxedAnnotationRenderer[];\n}\n\nconst REGISTRY_KEY = Symbol('AnnotationRendererRegistry');\n\nexport function createRendererRegistry(): AnnotationRendererRegistry {\n let renderers = $state<BoxedAnnotationRenderer[]>([]);\n\n return {\n register(entries) {\n const ids = new Set(entries.map((e) => e.id));\n // Add new, replace existing by id\n renderers = [...renderers.filter((r) => !ids.has(r.id)), ...entries];\n // Return cleanup function\n return () => {\n renderers = renderers.filter((r) => !entries.some((e) => e.id === r.id));\n };\n },\n getAll() {\n return renderers;\n },\n };\n}\n\nexport function provideRendererRegistry(): AnnotationRendererRegistry {\n const registry = createRendererRegistry();\n setContext(REGISTRY_KEY, registry);\n return registry;\n}\n\nexport function getRendererRegistry(): AnnotationRendererRegistry | null {\n return getContext<AnnotationRendererRegistry>(REGISTRY_KEY) ?? null;\n}\n\n/**\n * Factory to create a boxed renderer from a typed entry.\n */\nexport function createRenderer<T extends PdfAnnotationObject>(\n entry: AnnotationRendererEntry<T>,\n): BoxedAnnotationRenderer {\n return {\n id: entry.id,\n matches: entry.matches,\n component: entry.component as Component<AnnotationRendererProps>,\n };\n}\n\n// Re-export types for convenience\nexport type { AnnotationRendererProps, AnnotationRendererEntry, BoxedAnnotationRenderer };\n","<script lang=\"ts\">\n import { provideRendererRegistry } from '../context';\n import type { Snippet } from 'svelte';\n\n let { children }: { children: Snippet } = $props();\n\n provideRendererRegistry();\n</script>\n\n{@render children()}\n","import {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n AnnotationScope,\n} from '@embedpdf/plugin-annotation';\nimport { useCapability, usePlugin } from '@embedpdf/core/svelte';\n\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseAnnotationReturn {\n provides: AnnotationScope | null;\n state: AnnotationDocumentState;\n}\n\n/**\n * Hook for annotation state for a specific document\n * @param getDocumentId Document ID getter function\n */\nexport const useAnnotation = (getDocumentId: () => string | null): UseAnnotationReturn => {\n const capability = useAnnotationCapability();\n\n let state = $state<AnnotationDocumentState>(initialDocumentState());\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n state = initialDocumentState();\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Get initial state\n state = scope.getState();\n\n // Subscribe to state changes for THIS docId\n return scope.onStateChange((newState) => {\n state = newState;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return state;\n },\n };\n};\n","<script lang=\"ts\" generics=\"T extends PdfAnnotationObject\">\n import type { PdfAnnotationObject, Rect } from '@embedpdf/models';\n import { 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 = 1,\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 { useDocumentPermissions } from '@embedpdf/core/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 const permissions = useDocumentPermissions(() => documentId);\n let gestureBase = $state<Rect | null>(null);\n let isDraggingRef = $state(false);\n let isResizingRef = $state(false);\n\n // Check permissions before allowing drag/resize\n const effectiveIsDraggable = $derived(permissions.canModifyAnnotations && isDraggable);\n const effectiveIsResizable = $derived(permissions.canModifyAnnotations && isResizable);\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 && !effectiveIsDraggable) return;\n\n if (event.state === 'start') {\n gestureBase = getGroupBox();\n\n if (isMove) {\n isDraggingRef = true;\n // Use unified drag API - plugin handles attached links automatically\n plugin.startDrag(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n });\n } else if (isResize) {\n isResizingRef = true;\n // Use unified resize API - plugin handles attached links automatically\n plugin.startResize(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n resizeHandle: event.transformData.metadata?.handle ?? 'se',\n });\n }\n }\n\n 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 effectiveIsDraggable is true -->\n <div\n {...effectiveIsDraggable\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={effectiveIsDraggable ? 'move' : 'default'}\n style:touch-action=\"none\"\n style:z-index={zIndex}\n >\n <!-- Resize handles -->\n {#if effectiveIsResizable}\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 resolveInteractionProp,\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 import type { BoxedAnnotationRenderer } from '../context';\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 /** Custom annotation renderers from registry/props */\n annotationRenderers?: BoxedAnnotationRenderer[];\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // Helper to find custom renderer for an annotation\n function findCustomRenderer(annotation: TrackedAnnotation): BoxedAnnotationRenderer | undefined {\n return annotationsProps.annotationRenderers?.find((r) => r.matches(annotation.object));\n }\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 const groupDraggable = resolveInteractionProp(\n tool?.interaction.isGroupDraggable,\n ta.object,\n true,\n );\n const singleDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupDraggable !== undefined ? groupDraggable : singleDraggable;\n });\n });\n\n // 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 const groupResizable = resolveInteractionProp(\n tool?.interaction.isGroupResizable,\n ta.object,\n true,\n );\n const singleResizable = resolveInteractionProp(\n tool?.interaction.isResizable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupResizable !== undefined ? groupResizable : singleResizable;\n });\n });\n\n // 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 {@const customRenderer = findCustomRenderer(annotation)}\n\n {#if customRenderer}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(tool?.interaction.isResizable, annotation.object, true) &&\n !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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 {@const CustomComponent = customRenderer.component}\n <CustomComponent\n {annotation}\n {isSelected}\n scale={annotationsProps.scale}\n pageIndex={annotationsProps.pageIndex}\n onClick={(e: PointerEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isInk(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(tool?.interaction.isResizable, annotation.object, true) &&\n !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(tool?.interaction.isResizable, annotation.object, true) &&\n !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(tool?.interaction.isResizable, annotation.object, true) &&\n !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n false,\n ) && !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isEditing &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(tool?.interaction.isResizable, annotation.object, true) &&\n !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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={resolveInteractionProp(tool?.interaction.isDraggable, annotation.object, true) &&\n !isMultiSelected}\n isResizable={resolveInteractionProp(tool?.interaction.isResizable, annotation.object, true) &&\n !isMultiSelected}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n false,\n )}\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","import { createPluginPackage } from '@embedpdf/core';\nimport { AnnotationPluginPackage as BaseAnnotationPackage } from '@embedpdf/plugin-annotation';\nimport RendererRegistryProvider from './components/RendererRegistryProvider.svelte';\n\nexport * from './hooks';\nexport * from './components';\nexport * from './types';\nexport * from './context';\nexport * from '@embedpdf/plugin-annotation';\n\nexport const AnnotationPluginPackage = createPluginPackage(BaseAnnotationPackage)\n .addWrapper(RendererRegistryProvider)\n .build();\n","<script lang=\"ts\">\n import { 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 { getRendererRegistry, type BoxedAnnotationRenderer } from '../context';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n /** Render function for group selection menu (schema-driven approach) */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n /** Custom annotation renderers from props */\n annotationRenderers?: BoxedAnnotationRenderer[];\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n resizeUI,\n vertexUI,\n selectionOutlineColor,\n customAnnotationRenderer,\n annotationRenderers,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n // Get registry and merge with props\n const registry = getRendererRegistry();\n\n const allRenderers = $derived.by(() => {\n const fromRegistry = registry?.getAll() ?? [];\n const fromProps = annotationRenderers ?? [];\n const merged = [...fromRegistry];\n for (const r of fromProps) {\n const idx = merged.findIndex((m) => m.id === r.id);\n if (idx >= 0) merged[idx] = r;\n else merged.push(r);\n }\n return merged;\n });\n\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived(\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 annotationRenderers={allRenderers}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["REGISTRY_KEY","Symbol","createRendererRegistry","renderers","$","state","proxy","register","entries","ids","Set","map","e","id","filter","r","has","set","some","getAll","provideRendererRegistry","registry","setContext","getRendererRegistry","getContext","useAnnotationCapability","useCapability","AnnotationPlugin","useAnnotationPlugin","usePlugin","isMultiSelected","lockAspectRatio","propsClass","outlineOffset","zIndex","selectionOutlineColor","restProps","rest_props","$$props","preview","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","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","k","v","thickness","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","$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","isDraggable","isResizable","getGroupBox","rects","selectedAnnotations","ta","boundingRectOrEmpty","groupBox","previewGroupBox","newBox","transformType","isMove","isResize","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","selectedAnnotationsOnPage","anno","includes","areAllSelectedDraggable","every","tool","findToolForAnnotation","groupDraggable","resolveInteractionProp","interaction","isGroupDraggable","singleDraggable","areAllSelectedResizable","groupResizable","isGroupResizable","singleResizable","allSelectedOnSamePage","getSelectedAnnotations","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","customRenderer","annotationRenderers","matches","findCustomRenderer","_obj","noop","CustomComponent","CustomComponent_1","$2","AnnotationContainer","$$slots","default","obj","Ink","Square","Circle","Underline","Strikeout","Squiggly","Highlight","Multiply","Line","linePoints","Polyline","$3","$5","Polygon","FreeText","onDoubleClick","_object","Stamp","Link","isLink","consequent_13","isStamp","consequent_12","isFreeText","consequent_11","isPolygon","consequent_10","isPolyline","consequent_9","alternate_3","isLine","alternate_4","isHighlight","consequent_7","alternate_5","isSquiggly","alternate_6","isStrikeout","alternate_7","alternate_8","isCircle","alternate_9","isSquare","alternate_10","isInk","alternate_11","alternate_12","GroupSelectionBox","consequent_14","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","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","AnnotationPluginPackage","createPluginPackage","BaseAnnotationPackage","addWrapper","RendererRegistryProvider","build","allRenderers","fromRegistry","fromProps","merged","idx","findIndex","m","push","documentState","useDocumentState","page","_c","current","pages","actualScale","actualRotation","Rotation","Degree0","attribute_effect","Annotations","node","TextMarkup","node_1","AnnotationPaintLayer","entry","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"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"}
|