@embedpdf/plugin-annotation 2.1.2 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1232 -93
- package/dist/index.js.map +1 -1
- package/dist/lib/actions.d.ts +31 -2
- package/dist/lib/annotation-plugin.d.ts +177 -2
- package/dist/lib/handlers/types.d.ts +1 -1
- package/dist/lib/helpers.d.ts +6 -1
- 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 +7 -1
- package/dist/lib/types.d.ts +265 -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 +867 -406
- 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 +867 -406
- package/dist/react/index.js.map +1 -1
- package/dist/shared/components/annotation-container.d.ts +8 -1
- package/dist/shared/components/annotation-layer.d.ts +4 -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 +2 -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 +7 -0
- package/dist/shared-preact/components/annotation-container.d.ts +8 -1
- package/dist/shared-preact/components/annotation-layer.d.ts +4 -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 +2 -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 +7 -0
- package/dist/shared-react/components/annotation-container.d.ts +8 -1
- package/dist/shared-react/components/annotation-layer.d.ts +4 -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 +2 -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 +7 -0
- package/dist/svelte/components/AnnotationLayer.svelte.d.ts +5 -1
- package/dist/svelte/components/Annotations.svelte.d.ts +5 -1
- package/dist/svelte/components/GroupSelectionBox.svelte.d.ts +32 -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 +1 -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/index.cjs +1 -1
- package/dist/svelte/index.cjs.map +1 -1
- package/dist/svelte/index.js +912 -258
- 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 +2 -0
- package/dist/vue/components/annotation-layer.vue.d.ts +28 -5
- 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.vue.d.ts +65 -1
- package/dist/vue/components/group-selection-box.vue.d.ts +73 -0
- package/dist/vue/components/index.d.ts +1 -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/hooks/use-annotation.d.ts +2 -0
- package/dist/vue/index.cjs +1 -1
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.js +962 -409
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/types.d.ts +7 -0
- 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 { useAnnotationCapability } from '../hooks';\n import type { AnnotationContainerProps } from './types';\n import {\n useInteractionHandles,\n doublePress,\n CounterRotate,\n deepToRaw,\n type SelectionMenuPlacement,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import type { Snippet } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isDraggable,\n isResizable,\n lockAspectRatio = false,\n style,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n zIndex = 20,\n resizeUI,\n vertexUI,\n selectionOutlineColor = '#007ACC',\n customAnnotationRenderer,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T>(trackedAnnotation.object);\n let annotationCapability = useAnnotationCapability();\n let gestureBaseRef = $state<T | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let currentObject = $derived<T>(\n preview ? { ...trackedAnnotation.object, ...preview } : trackedAnnotation.object,\n );\n\n // Defaults retain current behavior\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = trackedAnnotation.object;\n }\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: currentObject.rect,\n vertices: vertexConfig?.extractVertices(currentObject),\n constraints: {\n minWidth: 10,\n minHeight: 10,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n enabled: isSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n\n if (event.state === 'start') {\n gestureBaseRef = currentObject;\n }\n\n const transformType = event.transformData.type;\n const base = gestureBaseRef ?? currentObject;\n\n const changes = event.transformData.changes.vertices\n ? vertexConfig?.transformAnnotation(base, event.transformData.changes.vertices)\n : { rect: event.transformData.changes.rect };\n\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type: transformType,\n changes: changes as Partial<T>,\n metadata: event.transformData.metadata,\n });\n\n if (patched) {\n preview = {\n ...preview,\n ...patched,\n };\n }\n if (event.state === 'end' && patched) {\n gestureBaseRef = null;\n // Sanitize to remove Svelte reactive properties before updating\n // Use deepToRaw to recursively strip proxies while preserving complex objects\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, trackedAnnotation.object.id, sanitized);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOffset,\n offsetMode: 'outside',\n includeSides: lockAspectRatio ? false : true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: zIndex + 2,\n },\n includeVertices: vertexConfig ? true : false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(isSelected && (!!selectionMenu || !!selectionMenuSnippet));\n\n // Build context object for selection menu\n function buildContext(): AnnotationSelectionContext {\n return {\n type: 'annotation',\n annotation: trackedAnnotation,\n pageIndex,\n };\n }\n\n // Placement hints\n const menuPlacement: SelectionMenuPlacement = {\n suggestTop: false,\n spaceAbove: 0,\n spaceBelow: 0,\n };\n\n // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: menuPlacement,\n menuWrapperProps,\n };\n }\n</script>\n\n<div data-no-interaction>\n <div\n {...isDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: onDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{currentObject.rect.size.width * scale}px\"\n style:height=\"{currentObject.rect.size.height * scale}px\"\n style:outline={isSelected ? `1px solid ${selectionOutlineColor}` : 'none'}\n style:outline-offset={isSelected ? `${outlineOffset}px` : '0px'}\n style:pointer-events={isSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && isDraggable ? 'move' : 'default'}\n style:z-index={zIndex}\n style={style || ''}\n class={propsClass}\n {...restProps}\n >\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: currentObject,\n children: children as Snippet,\n isSelected,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n pageIndex,\n onSelect,\n })}\n {:else}\n {@render children(currentObject)}\n {/if}\n\n {#if isSelected && isResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@const Component = resizeUI.component}\n <Component {...hProps} backgroundColor={HANDLE_COLOR} />\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n {#if isSelected}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@const Component = vertexUI.component}\n <Component {...vProps} backgroundColor={VERTEX_COLOR} />\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: currentObject.rect.origin.x * scale,\n y: currentObject.rect.origin.y * scale,\n },\n size: {\n width: currentObject.rect.size.width * scale,\n height: currentObject.rect.size.height * scale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if selectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = selectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if selectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render selectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n</div>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: HighlightProps = $props();\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px\"\n style:top=\"{(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px\"\n style:width=\"{b.size.width * scale}px\"\n style:height=\"{b.size.height * scale}px\"\n style:background={color}\n style:opacity\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : undefined}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n ></div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface UnderlineProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: UnderlineProps = $props();\n\n const thickness = $derived(2 * scale); // 2 CSS px at 100% zoom\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual underline -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: StrikeoutProps = $props();\n\n const thickness = $derived(2 * scale);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual strikeout line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"50%\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={color}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n color = '#FFFF00',\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: SquigglyProps = $props();\n\n const amplitude = $derived(2 * scale); // wave height\n const period = $derived(6 * scale); // wave length\n\n const svg =\n $derived(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${color}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`);\n\n // Completely escape the SVG markup\n const svgDataUri = $derived(`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual squiggly line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{amplitude * 2}px\"\n style:background-image={svgDataUri}\n style:background-repeat=\"repeat-x\"\n style:background-size=\"{period}px {amplitude * 2}px\"\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n interface InkProps {\n isSelected: boolean;\n color?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n }: InkProps = $props();\n\n // derived SVG path data\n const paths = $derived.by(() =>\n inkList.map(({ points }) => {\n let d = '';\n for (let i = 0; i < points.length; i++) {\n const { x, y } = points[i];\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n }\n return d.trim();\n }),\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n {#each paths as d, i (i)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={color}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n</svg>\n","<!-- Square.svelte -->\n<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface SquareProps {\n isSelected: boolean;\n color?: string; // fill color (defaults to black)\n strokeColor?: string; // stroke color (defaults to fill when omitted)\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect; // bbox includes stroke\n scale: number; // page zoom\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: SquareProps = $props();\n\n // Geometry helpers — compute inner rect so visual fill matches preview\n const { width, height, x, y } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n return {\n width: innerW,\n height: innerH,\n x: strokeWidth / 2,\n y: strokeWidth / 2,\n };\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; pointer-events: none; z-index: 2;\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width + strokeWidth} ${height + strokeWidth}`}\n>\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface CircleProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Fill colour – defaults to PDFium’s black if omitted */\n color?: string;\n /** Stroke colour – defaults to same as fill when omitted */\n strokeColor?: string;\n /** 0 – 1 */\n opacity?: number;\n /** Stroke width in PDF units */\n strokeWidth: number;\n /** Stroke type – defaults to solid when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – defaults to undefined when omitted */\n strokeDashArray?: number[];\n /** Bounding box of the annotation */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Pointer/touch handler (used for selection) */\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: CircleProps = $props();\n\n const { width, height, cx, cy, rx, ry } = $derived.by(() => {\n // Full bounding box *includes* stroke width.\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n\n // Remove the stroke so the visible fill matches the preview.\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n // Centre of the fill sits strokeWidth/2 in from the edges\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n\n let peValue = $derived(\n isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n );\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n {svgWidth}\n {svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n>\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n onpointerdown={(e) => onClick?.(e)}\n ontouchstart={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n</svg>\n","<!-- Line.svelte -->\n<script lang=\"ts\">\n import type { Rect, LinePoints, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface LineProps {\n color?: string; // interior color\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n isSelected: boolean;\n }\n\n let {\n color = 'transparent',\n opacity = 1,\n strokeWidth,\n strokeColor = '#000000',\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n linePoints,\n lineEndings,\n scale,\n onClick,\n isSelected,\n }: LineProps = $props();\n\n // Localize endpoints into the annotation's bbox\n const x1 = $derived(linePoints.start.x - rect.origin.x);\n const y1 = $derived(linePoints.start.y - rect.origin.y);\n const x2 = $derived(linePoints.end.x - rect.origin.x);\n const y2 = $derived(linePoints.end.y - rect.origin.y);\n\n // Arrow-head / butt endings via shared factory\n const endings = $derived.by(() => {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(lineEndings?.start, strokeWidth, angle + Math.PI, x1, y1),\n end: patching.createEnding(lineEndings?.end, strokeWidth, angle, x2, y2),\n };\n });\n\n // Absolute placement + scaling\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n // Dashed stroke only when requested\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Main line -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Optional arrowheads / butt caps -->\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n onpointerdown={onClick}\n ontouchstart={onClick}\n stroke={strokeColor}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.start.filled ? color : 'none'}\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.end.filled ? color : 'none'}\n />\n {/if}\n</svg>\n","<!-- Polyline.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface PolylineProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Optional start & end endings */\n lineEndings?: LineEndings;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n scale,\n isSelected,\n onClick,\n lineEndings,\n }: PolylineProps = $props();\n\n // Localize vertices to the annotation rect\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data: \"M x0 y0 L x1 y1 ...\"\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n return (\n `M ${first.x} ${first.y} ` +\n rest\n .map((p) => `L ${p.x} ${p.y} `)\n .join('')\n .trim()\n );\n });\n\n // Compute endings (angles from first→second, last-1→last)\n const endings = $derived.by(() => {\n if (localPts.length < 2) return { start: null as any, end: null as any };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts[0], localPts[1]); // FROM first TO second\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]); // FROM second-to-last TO last\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI, // tip outward from start\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad, // tip in line direction\n localPts[localPts.length - 1].x,\n localPts[localPts.length - 1].y,\n );\n return { start, end };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; width: var(--w); height: var(--h); pointer-events: none; z-index: 2; overflow: visible;\"\n style:--w={`${width}px`}\n style:--h={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n</svg>\n","<!-- Polygon.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface PolygonProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n // Preview-only\n currentVertex?: Position;\n handleSize?: number;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n currentVertex,\n handleSize = 14,\n }: PolygonProps = $props();\n\n // Combine vertices with preview point (if any)\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n // Localize points to the annotation bbox\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data; omit 'Z' when previewing\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n const isPreview = !!currentVertex;\n return (\n `M ${first.x} ${first.y} ` +\n rest.map((p) => `L ${p.x} ${p.y}`).join(' ') +\n (isPreview ? '' : ' Z')\n ).trim();\n });\n\n const isPreviewing = $derived(!!currentVertex && vertices.length > 0);\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Preview-only elements -->\n {#if isPreviewing && vertices.length > 1}\n <path\n d={`M ${localPts[localPts.length - 1].x} ${localPts[localPts.length - 1].y} L ${localPts[0].x} ${localPts[0].y}`}\n fill=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={'4,4'}\n style:opacity={0.7}\n />\n {/if}\n\n {#if isPreviewing && vertices.length >= 2}\n <rect\n x={localPts[0].x - handleSize / scale / 2}\n y={localPts[0].y - handleSize / scale / 2}\n width={handleSize / scale}\n height={handleSize / scale}\n fill={strokeColor}\n opacity={0.4}\n stroke={strokeColor}\n stroke-width={strokeWidth / 2}\n />\n {/if}\n</svg>\n","<!-- Free-text.svelte -->\n<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\n // ---------- props ----------\n interface FreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n }\n\n let { documentId, isSelected, isEditing, annotation, pageIndex, scale, onClick }: FreeTextProps =\n $props();\n\n // ---------- capabilities ----------\n const annotationCapability = useAnnotationCapability();\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // ---------- refs / state ----------\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n\n // Focus and move caret to end when entering edit mode\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editorRef.focus();\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n // One-time iOS detection (prevents zoom by font-size compensation)\n $effect.pre(() => {\n try {\n const nav = navigator as any;\n const ios =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n isIOS = ios;\n } catch {\n isIOS = false;\n }\n });\n\n // Persist contents on blur\n function handleBlur() {\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\n // ---------- iOS zoom compensation ----------\n const computedFontPx = $derived(annotation.object.fontSize * scale);\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp = $derived(\n isIOS && isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX,\n );\n const adjustedFontPx = $derived(needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx);\n const scaleComp = $derived(needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1);\n const invScalePercent = $derived(needsComp ? 100 / scaleComp : 100);\n\n // ---------- derived sizes ----------\n const outerW = $derived(annotation.object.rect.size.width * scale);\n const outerH = $derived(annotation.object.rect.size.height * scale);\n\n const justify = $derived(\n annotation.object.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : annotation.object.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n</script>\n\n<!-- Outer positioned container -->\n<div\n style:position=\"absolute\"\n style:width={`${outerW}px`}\n style:height={`${outerH}px`}\n style:z-index={2}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events={isSelected && !isEditing ? 'none' : 'auto'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <!-- Editable span -->\n <span\n bind:this={editorRef}\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:display=\"flex\"\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:color={annotation.object.fontColor}\n style:font-size={`${adjustedFontPx}px`}\n style:font-family={standardFontCss(annotation.object.fontFamily)}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.backgroundColor}\n style:opacity={annotation.object.opacity}\n style:width={needsComp ? `${invScalePercent}%` : '100%'}\n style:height={needsComp ? `${invScalePercent}%` : '100%'}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : 'pointer'}\n style:outline=\"none\"\n style:transform={needsComp ? `scale(${scaleComp})` : undefined}\n style:transform-origin=\"top left\">{annotation.object.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import { ignore, type PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\n import type { HTMLImgAttributes } from 'svelte/elements';\n import { useAnnotationCapability } from '../hooks';\n import { deepToRaw } from '@embedpdf/utils/svelte';\n\n interface RenderAnnotationProps extends Omit<HTMLImgAttributes, 'style'> {\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n dpr?: number;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n style,\n ...restProps\n }: RenderAnnotationProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n let imageUrl = $state<string | null>(null);\n let urlRef: string | null = null;\n\n const { width, height } = $derived(annotation.rect.size);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Effect to render annotation\n $effect(() => {\n if (annotationProvides) {\n const task = annotationProvides.renderAnnotation({\n pageIndex,\n annotation: deepToRaw(annotation),\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl = url;\n urlRef = url;\n }, ignore);\n\n return () => {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n };\n }\n });\n\n function handleImageLoad() {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n alt=\"\"\n src={imageUrl}\n onload={handleImageLoad}\n {...restProps}\n style:width=\"100%\"\n style:height=\"100%\"\n style:display=\"block\"\n {style}\n />\n{/if}\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import RenderAnnotation from '../RenderAnnotation.svelte';\n\n interface StampProps {\n documentId: string;\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick: (e: MouseEvent | TouchEvent) => void;\n }\n\n let { documentId, isSelected, annotation, pageIndex, scale, onClick }: StampProps = $props();\n\n let annotationProp = $derived({ ...annotation.object, id: annotation.object.id });\n</script>\n\n<div\n style=\"position: absolute; width: 100%; height: 100%; z-index: 2;\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor=\"pointer\"\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <RenderAnnotation {documentId} {pageIndex} annotation={annotationProp} scaleFactor={scale} />\n</div>\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import { blendModeToCss, type PdfAnnotationObject, PdfBlendMode } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationByPageIndex,\n isCircle,\n isFreeText,\n isHighlight,\n isInk,\n isLine,\n isPolygon,\n isPolyline,\n isSquare,\n isSquiggly,\n isStamp,\n isStrikeout,\n isUnderline,\n type TrackedAnnotation,\n } from '@embedpdf/plugin-annotation';\n\n import { type PointerEventHandlersWithLifecycle } from '@embedpdf/plugin-interaction-manager';\n import { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/svelte';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n\n import Highlight from './text-markup/Highlight.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Ink from './annotations/Ink.svelte';\n import Square from './annotations/Square.svelte';\n import Circle from './annotations/Circle.svelte';\n import Line from './annotations/Line.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import FreeText from './annotations/FreeText.svelte';\n import Stamp from './annotations/Stamp.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n\n // ---------- props ----------\n interface AnnotationsProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // ---------- capabilities / handlers ----------\n const annotationCapability = useAnnotationCapability();\n const selectionCapability = useSelectionCapability();\n const pointerHandlers = usePointerHandlers({\n documentId: annotationsProps.documentId,\n pageIndex: annotationsProps.pageIndex,\n });\n\n // ---------- local state ----------\n let annotations = $state<TrackedAnnotation[]>([]);\n let selectionState = $state<TrackedAnnotation | null>(null);\n let editingId = $state<string | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n // subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current state immediately\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(currentState, annotationsProps.pageIndex);\n\n // Then subscribe to changes\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n selectionState = getSelectedAnnotationByPageIndex(state, annotationsProps.pageIndex);\n });\n return () => off?.();\n });\n\n // pointer handlers (capture-down to deselect when clicking empty layer)\n const handlers: PointerEventHandlersWithLifecycle = {\n onPointerDown: (_: unknown, pe: PointerEvent) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n // register pointer handlers\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n // click/select logic shared across shapes\n function handleClick(e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n selectionCapability.provides.clear();\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const isSelected = selectionState?.object.id === annotation.object.id}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const mixBlendMode = blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\n\n {#if isInk(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Ink\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquare(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Square\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isCircle(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Circle\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: PointerEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isUnderline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Underline\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStrikeout(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Strikeout\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquiggly(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Squiggly\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isHighlight(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? false}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply)}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Highlight\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLine(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, vertices) => ({\n ...a,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Line\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolyline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n {isSelected}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polyline\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolygon(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? false}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polygon\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isFreeText(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isEditing}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n editingId = annotation.object.id;\n }}\n {...annotationsProps}\n >\n {#snippet children(object)}\n <FreeText\n documentId={annotationsProps.documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object }}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStamp(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n isDraggable={tool?.interaction.isDraggable ?? true}\n isResizable={tool?.interaction.isResizable ?? true}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={annotationsProps.selectionMenu}\n selectionMenuSnippet={annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(_object)}\n <Stamp\n documentId={annotationsProps.documentId}\n {isSelected}\n {annotation}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n","<script lang=\"ts\">\n import { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, type Rect } from '@embedpdf/models';\n import type { AnnotationTool } from '@embedpdf/plugin-annotation';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n import Highlight from './text-markup/Highlight.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n\n interface TextMarkupProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: TextMarkupProps = $props();\n\n const selectionCapability = useSelectionCapability();\n const annotationCapability = useAnnotationCapability();\n\n let rects = $state<Rect[]>([]);\n let boundingRect = $state<Rect | null>(null);\n let activeTool = $state<AnnotationTool | null>(null);\n\n // Get scoped APIs for this document\n const selectionProvides = $derived(\n selectionCapability.provides ? selectionCapability.provides.forDocument(documentId) : null,\n );\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Subscribe to selection changes\n $effect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n rects = selectionProvides.getHighlightRectsForPage(pageIndex);\n boundingRect = selectionProvides.getBoundingRectForPage(pageIndex);\n });\n return off;\n });\n\n // Subscribe to active tool changes\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current active tool\n activeTool = annotationProvides.getActiveTool();\n\n const off = annotationProvides.onActiveToolChange((tool) => {\n activeTool = tool;\n });\n return off;\n });\n\n const mixBlendMode = $derived(\n activeTool?.defaults?.blendMode\n ? blendModeToCss(activeTool.defaults.blendMode)\n : activeTool?.defaults?.type === PdfAnnotationSubtype.HIGHLIGHT\n ? blendModeToCss(PdfBlendMode.Multiply)\n : blendModeToCss(PdfBlendMode.Normal),\n );\n</script>\n\n{#if boundingRect && activeTool && activeTool.defaults}\n {#if activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Underline\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Highlight\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Strikeout\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Squiggly\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {/if}\n{/if}\n","<script lang=\"ts\">\n import type { AnyPreviewState } from '@embedpdf/plugin-annotation';\n import { PdfAnnotationSubtype } from '@embedpdf/models';\n import Circle from './annotations/Circle.svelte';\n import Square from './annotations/Square.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Line from './annotations/Line.svelte';\n import Ink from './annotations/Ink.svelte';\n\n interface PreviewRendererProps {\n preview: AnyPreviewState;\n scale: number;\n }\n\n let { preview, scale }: PreviewRendererProps = $props();\n\n const bounds = $derived(preview.bounds);\n\n const style = $derived({\n left: bounds.origin.x * scale,\n top: bounds.origin.y * scale,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n });\n</script>\n\n{#if preview.type === PdfAnnotationSubtype.CIRCLE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Circle isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.SQUARE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Square isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYGON}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polygon isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYLINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polyline isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.LINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Line isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.INK}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Ink isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.FREETEXT}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <!-- Render a simple dashed border preview -->\n <div\n style:width=\"100%\"\n style:height=\"100%\"\n style:border=\"1px dashed {preview.data.fontColor || '#000000'}\"\n style:background-color=\"transparent\"\n ></div>\n </div>\n{/if}\n","<script lang=\"ts\">\n import { useAnnotationPlugin } from '../hooks';\n import type { AnyPreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\n import PreviewRenderer from './PreviewRenderer.svelte';\n\n interface AnnotationPaintLayerProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: AnnotationPaintLayerProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let previews = $state<Map<string, AnyPreviewState>>(new Map());\n\n let fileInputRef: HTMLInputElement | null = $state(null);\n let canvasRef: HTMLCanvasElement | null = $state(null);\n\n const services: HandlerServices = {\n requestFile: ({ accept, onFile }) => {\n if (!fileInputRef) return;\n const input = fileInputRef;\n input.accept = accept;\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n onFile(file);\n input.value = '';\n }\n };\n input.click();\n },\n processImage: ({ source, maxWidth, maxHeight, onComplete }) => {\n const canvas = canvasRef;\n if (!canvas || !canvas.getContext) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n let { naturalWidth: width, naturalHeight: height } = img;\n\n // --- SCALING LOGIC ---\n // Calculate the scale factor to fit within maxWidth and maxHeight\n const scaleX = maxWidth ? maxWidth / width : 1;\n const scaleY = maxHeight ? maxHeight / height : 1;\n const scaleFactor = Math.min(scaleX, scaleY, 1); // Ensure we don't scale up\n\n const finalWidth = width * scaleFactor;\n const finalHeight = height * scaleFactor;\n\n canvas.width = finalWidth;\n canvas.height = finalHeight;\n ctx.drawImage(img, 0, 0, finalWidth, finalHeight);\n\n const imageData = ctx.getImageData(0, 0, finalWidth, finalHeight);\n if (typeof source !== 'string') URL.revokeObjectURL(img.src);\n\n onComplete({ imageData, width: finalWidth, height: finalHeight });\n };\n img.src = typeof source === 'string' ? source : URL.createObjectURL(source);\n },\n };\n\n $effect(() => {\n if (!annotationPlugin.plugin) return;\n\n return annotationPlugin.plugin.registerPageHandlers(documentId, pageIndex, scale, {\n services,\n onPreview: (toolId, state) => {\n previews = new Map(previews);\n if (state) {\n previews.set(toolId, state);\n } else {\n previews.delete(toolId);\n }\n },\n });\n });\n</script>\n\n<!-- Hidden DOM elements required by services -->\n<input bind:this={fileInputRef} type=\"file\" style:display=\"none\" />\n<canvas bind:this={canvasRef} style:display=\"none\"></canvas>\n\n<!-- Render any active previews from any tool -->\n{#each Array.from(previews.entries()) as [toolId, preview] (toolId)}\n <PreviewRenderer {preview} {scale} />\n{/each}\n","<script lang=\"ts\">\n import { Rotation, type PdfAnnotationObject } from '@embedpdf/models';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n resizeUI,\n vertexUI,\n selectionOutlineColor,\n customAnnotationRenderer,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived(\n overrideRotation !== undefined\n ? overrideRotation\n : (documentState?.current?.rotation ?? Rotation.Degree0),\n );\n</script>\n\n<div\n id=\"annotation-layer\"\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n {...restProps}\n>\n <Annotations\n {documentId}\n {selectionMenu}\n {selectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {selectionOutlineColor}\n {customAnnotationRenderer}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["useAnnotationCapability","useCapability","AnnotationPlugin","id","useAnnotationPlugin","usePlugin","lockAspectRatio","propsClass","outlineOffset","zIndex","selectionOutlineColor","restProps","$","rest_props","$$props","preview","state","proxy","trackedAnnotation","object","annotationCapability","gestureBaseRef","annotationProvides","derived","provides","forDocument","documentId","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","isDraggable","dragProps","left","origin","x","top","y","outline","cursor","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","vertexStyle","vProps","Component_2","div_3","root_10","consequent_3","alternate_2","action","onDouble","onDoubleClick","$$arg0","menuProps","menuWrapperProps","context","selected","placement","buildMenuProps","result","result_component","spread_props","props","consequent_5","CounterRotate","consequent_8","opacity","b","root_1","tabindex","onClick","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","isResizable","$2","AnnotationContainer","$$slots","default","Square","Circle","Underline","Strikeout","Squiggly","Highlight","Multiply","Line","linePoints","Polyline","Polygon","FreeText","_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","consequent_4","alternate_6","isUnderline","alternate_7","isCircle","consequent_2","alternate_8","isSquare","alternate_9","isInk","alternate_10","rects","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","defaults","PdfAnnotationSubtype","HIGHLIGHT","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":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/text-markup/Highlight.svelte","../../src/svelte/components/text-markup/Underline.svelte","../../src/svelte/components/text-markup/Strikeout.svelte","../../src/svelte/components/text-markup/Squiggly.svelte","../../src/svelte/components/annotations/Ink.svelte","../../src/svelte/components/annotations/Square.svelte","../../src/svelte/components/annotations/Circle.svelte","../../src/svelte/components/annotations/Line.svelte","../../src/svelte/components/annotations/Polyline.svelte","../../src/svelte/components/annotations/Polygon.svelte","../../src/svelte/components/annotations/FreeText.svelte","../../src/svelte/components/RenderAnnotation.svelte","../../src/svelte/components/annotations/Stamp.svelte","../../src/svelte/components/annotations/Link.svelte","../../src/svelte/components/GroupSelectionBox.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n AnnotationScope,\n} from '@embedpdf/plugin-annotation';\nimport { useCapability, usePlugin } from '@embedpdf/core/svelte';\n\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseAnnotationReturn {\n provides: AnnotationScope | null;\n state: AnnotationDocumentState;\n}\n\n/**\n * Hook for annotation state for a specific document\n * @param getDocumentId Document ID getter function\n */\nexport const useAnnotation = (getDocumentId: () => string | null): UseAnnotationReturn => {\n const capability = useAnnotationCapability();\n\n let state = $state<AnnotationDocumentState>(initialDocumentState());\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n state = initialDocumentState();\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Get initial state\n state = scope.getState();\n\n // Subscribe to state changes for THIS docId\n return scope.onStateChange((newState) => {\n state = newState;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return state;\n },\n };\n};\n","<script lang=\"ts\" generics=\"T extends PdfAnnotationObject\">\n import type { PdfAnnotationObject, Rect } from '@embedpdf/models';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationCapability, useAnnotationPlugin } from '../hooks';\n import type { AnnotationContainerProps } from './types';\n import {\n useInteractionHandles,\n doublePress,\n CounterRotate,\n deepToRaw,\n type SelectionMenuPlacement,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import type { Snippet } from 'svelte';\n import { untrack } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isMultiSelected = false,\n isDraggable,\n isResizable,\n lockAspectRatio = false,\n style,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n zIndex = 20,\n resizeUI,\n vertexUI,\n selectionOutlineColor = '#007ACC',\n customAnnotationRenderer,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T>(trackedAnnotation.object);\n let annotationCapability = useAnnotationCapability();\n const annotationPlugin = useAnnotationPlugin();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBaseRef = $state<T | null>(null);\n let gestureBaseRectRef = $state<Rect | null>(null);\n\n // When multi-selected, disable individual drag/resize - GroupSelectionBox handles it\n const effectiveIsDraggable = $derived(\n permissions.canModifyAnnotations && isDraggable && !isMultiSelected,\n );\n const effectiveIsResizable = $derived(\n permissions.canModifyAnnotations && isResizable && !isMultiSelected,\n );\n\n // Wrap onDoubleClick to respect permissions\n const guardedOnDoubleClick = $derived(\n permissions.canModifyAnnotations && onDoubleClick ? onDoubleClick : undefined,\n );\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let currentObject = $derived<T>(\n preview ? { ...trackedAnnotation.object, ...preview } : trackedAnnotation.object,\n );\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n\n // Determine if we should show the outline\n // When multi-selected, don't show individual outlines - GroupSelectionBox shows the group outline\n const showOutline = $derived(isSelected && !isMultiSelected);\n\n // Sync preview with tracked annotation when it changes\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = trackedAnnotation.object;\n }\n });\n\n // Subscribe to unified drag/resize changes - plugin sends pre-computed patches!\n // ALL preview updates come through here (primary, attached links, multi-select)\n $effect(() => {\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const id = trackedAnnotation.object.id;\n\n const handleEvent = (event: {\n documentId: string;\n type: string;\n previewPatches?: Record<string, any>;\n }) => {\n if (event.documentId !== documentId) return;\n const patch = event.previewPatches?.[id];\n if (event.type === 'update' && patch) {\n // Use untrack to prevent tracking the read of preview (like Vue's toRaw)\n preview = { ...untrack(() => preview), ...patch } as T;\n } else if (event.type === 'cancel') {\n preview = trackedAnnotation.object;\n }\n };\n\n const unsubs = [plugin.onDragChange(handleEvent), plugin.onResizeChange(handleEvent)];\n\n return () => unsubs.forEach((u) => u());\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: currentObject.rect,\n vertices: vertexConfig?.extractVertices(currentObject),\n constraints: {\n minWidth: 10,\n minHeight: 10,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n // Disable interaction handles when multi-selected\n enabled: isSelected && !isMultiSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type || isMultiSelected) return;\n\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const { type, changes, metadata } = event.transformData;\n const id = trackedAnnotation.object.id;\n const pageSize = { width: pageWidth, height: pageHeight };\n\n // Gesture start - initialize plugin drag/resize\n if (event.state === 'start') {\n gestureBaseRectRef = trackedAnnotation.object.rect;\n gestureBaseRef = trackedAnnotation.object; // For vertex edit\n\n if (type === 'move') {\n plugin.startDrag(documentId, { annotationIds: [id], pageSize });\n } else if (type === 'resize') {\n plugin.startResize(documentId, {\n annotationIds: [id],\n pageSize,\n resizeHandle: metadata?.handle ?? 'se',\n });\n }\n }\n\n // Gesture update - call plugin, preview comes from subscription\n if (changes.rect && gestureBaseRectRef) {\n if (type === 'move') {\n const delta = {\n x: changes.rect.origin.x - gestureBaseRectRef.origin.x,\n y: changes.rect.origin.y - gestureBaseRectRef.origin.y,\n };\n plugin.updateDrag(documentId, delta);\n } else if (type === 'resize') {\n plugin.updateResize(documentId, changes.rect);\n }\n }\n\n // Vertex edit - handle directly (no attached link handling needed)\n if (type === 'vertex-edit' && changes.vertices && vertexConfig) {\n const base = gestureBaseRef ?? trackedAnnotation.object;\n const vertexChanges = vertexConfig.transformAnnotation(base, changes.vertices);\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type,\n changes: vertexChanges as Partial<T>,\n metadata,\n });\n if (patched) {\n preview = { ...preview, ...patched };\n if (event.state === 'end') {\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, id, sanitized);\n }\n }\n }\n\n // Gesture end - commit\n if (event.state === 'end') {\n gestureBaseRectRef = null;\n gestureBaseRef = null;\n if (type === 'move') plugin.commitDrag(documentId);\n else if (type === 'resize') plugin.commitResize(documentId);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOffset,\n offsetMode: 'outside',\n includeSides: lockAspectRatio ? false : true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: zIndex + 2,\n },\n includeVertices: vertexConfig ? true : false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu - hide when multi-selected\n const shouldShowMenu = $derived(\n isSelected && !isMultiSelected && (!!selectionMenu || !!selectionMenuSnippet),\n );\n\n // Build context object for selection menu\n function buildContext(): AnnotationSelectionContext {\n return {\n type: 'annotation',\n annotation: trackedAnnotation,\n pageIndex,\n };\n }\n\n // Placement hints\n const menuPlacement: SelectionMenuPlacement = {\n suggestTop: false,\n spaceAbove: 0,\n spaceBelow: 0,\n };\n\n // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: menuPlacement,\n menuWrapperProps,\n };\n }\n</script>\n\n<div data-no-interaction>\n <div\n {...effectiveIsDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: guardedOnDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{currentObject.rect.size.width * scale}px\"\n style:height=\"{currentObject.rect.size.height * scale}px\"\n style:outline={showOutline ? `1px solid ${selectionOutlineColor}` : 'none'}\n style:outline-offset={showOutline ? `${outlineOffset}px` : '0px'}\n style:pointer-events={isSelected && !isMultiSelected ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && effectiveIsDraggable ? 'move' : 'default'}\n style:z-index={zIndex}\n style={style || ''}\n class={propsClass}\n {...restProps}\n >\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: currentObject,\n children: children as Snippet,\n isSelected,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n pageIndex,\n onSelect,\n })}\n {:else}\n {@render children(currentObject)}\n {/if}\n\n <!-- Resize handles - only when single-selected -->\n {#if isSelected && effectiveIsResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@const Component = resizeUI.component}\n <Component {...hProps} backgroundColor={HANDLE_COLOR} />\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n <!-- Vertex handles - only when single-selected -->\n {#if isSelected && permissions.canModifyAnnotations && !isMultiSelected}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@const Component = vertexUI.component}\n <Component {...vProps} backgroundColor={VERTEX_COLOR} />\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet - hide when multi-selected -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: currentObject.rect.origin.x * scale,\n y: currentObject.rect.origin.y * scale,\n },\n size: {\n width: currentObject.rect.size.width * scale,\n height: currentObject.rect.size.height * scale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if selectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = selectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if selectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render selectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n</div>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: HighlightProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px\"\n style:top=\"{(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px\"\n style:width=\"{b.size.width * scale}px\"\n style:height=\"{b.size.height * scale}px\"\n style:background={resolvedColor}\n style:opacity\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : undefined}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n ></div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface UnderlineProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: UnderlineProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n const thickness = $derived(2 * scale); // 2 CSS px at 100% zoom\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual underline -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={resolvedColor}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: StrikeoutProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n const thickness = $derived(2 * scale);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual strikeout line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"50%\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={resolvedColor}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n }: SquigglyProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n const amplitude = $derived(2 * scale); // wave height\n const period = $derived(6 * scale); // wave length\n\n const svg =\n $derived(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${resolvedColor}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`);\n\n // Completely escape the SVG markup\n const svgDataUri = $derived(`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual squiggly line -->\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{amplitude * 2}px\"\n style:background-image={svgDataUri}\n style:background-repeat=\"repeat-x\"\n style:background-size=\"{period}px {amplitude * 2}px\"\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n interface InkProps {\n isSelected: boolean;\n /** Stroke color */\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n strokeColor,\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n }: InkProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#000000');\n\n // derived SVG path data\n const paths = $derived.by(() =>\n inkList.map(({ points }) => {\n let d = '';\n for (let i = 0; i < points.length; i++) {\n const { x, y } = points[i];\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n }\n return d.trim();\n }),\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n {#each paths as d, i (i)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={resolvedColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n</svg>\n","<!-- Square.svelte -->\n<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface SquareProps {\n isSelected: boolean;\n color?: string; // fill color (defaults to black)\n strokeColor?: string; // stroke color (defaults to fill when omitted)\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect; // bbox includes stroke\n scale: number; // page zoom\n onClick?: (e: MouseEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: SquareProps = $props();\n\n // Geometry helpers — compute inner rect so visual fill matches preview\n const { width, height, x, y } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n return {\n width: innerW,\n height: innerH,\n x: strokeWidth / 2,\n y: strokeWidth / 2,\n };\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; pointer-events: none; z-index: 2;\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width + strokeWidth} ${height + strokeWidth}`}\n>\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface CircleProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Fill colour – defaults to PDFium’s black if omitted */\n color?: string;\n /** Stroke colour – defaults to same as fill when omitted */\n strokeColor?: string;\n /** 0 – 1 */\n opacity?: number;\n /** Stroke width in PDF units */\n strokeWidth: number;\n /** Stroke type – defaults to solid when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – defaults to undefined when omitted */\n strokeDashArray?: number[];\n /** Bounding box of the annotation */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Pointer/touch handler (used for selection) */\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n }: CircleProps = $props();\n\n const { width, height, cx, cy, rx, ry } = $derived.by(() => {\n // Full bounding box *includes* stroke width.\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n\n // Remove the stroke so the visible fill matches the preview.\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n // Centre of the fill sits strokeWidth/2 in from the edges\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n\n let peValue = $derived(\n isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n );\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n {svgWidth}\n {svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n>\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n onpointerdown={(e) => onClick?.(e)}\n ontouchstart={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : 'pointer'}\n pointer-events={peValue}\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n</svg>\n","<!-- Line.svelte -->\n<script lang=\"ts\">\n import type { Rect, LinePoints, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface LineProps {\n color?: string; // interior color\n opacity?: number; // 0–1\n strokeWidth: number; // PDF units\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n isSelected: boolean;\n }\n\n let {\n color = 'transparent',\n opacity = 1,\n strokeWidth,\n strokeColor = '#000000',\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n linePoints,\n lineEndings,\n scale,\n onClick,\n isSelected,\n }: LineProps = $props();\n\n // Localize endpoints into the annotation's bbox\n const x1 = $derived(linePoints.start.x - rect.origin.x);\n const y1 = $derived(linePoints.start.y - rect.origin.y);\n const x2 = $derived(linePoints.end.x - rect.origin.x);\n const y2 = $derived(linePoints.end.y - rect.origin.y);\n\n // Arrow-head / butt endings via shared factory\n const endings = $derived.by(() => {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(lineEndings?.start, strokeWidth, angle + Math.PI, x1, y1),\n end: patching.createEnding(lineEndings?.end, strokeWidth, angle, x2, y2),\n };\n });\n\n // Absolute placement + scaling\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n // Dashed stroke only when requested\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Main line -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Optional arrowheads / butt caps -->\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n onpointerdown={onClick}\n ontouchstart={onClick}\n stroke={strokeColor}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.start.filled ? color : 'none'}\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-dasharray={dash}\n fill={endings.end.filled ? color : 'none'}\n />\n {/if}\n</svg>\n","<!-- Polyline.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface PolylineProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Optional start & end endings */\n lineEndings?: LineEndings;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n scale,\n isSelected,\n onClick,\n lineEndings,\n }: PolylineProps = $props();\n\n // Localize vertices to the annotation rect\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data: \"M x0 y0 L x1 y1 ...\"\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n return (\n `M ${first.x} ${first.y} ` +\n rest\n .map((p) => `L ${p.x} ${p.y} `)\n .join('')\n .trim()\n );\n });\n\n // Compute endings (angles from first→second, last-1→last)\n const endings = $derived.by(() => {\n if (localPts.length < 2) return { start: null as any, end: null as any };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts[0], localPts[1]); // FROM first TO second\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]); // FROM second-to-last TO last\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI, // tip outward from start\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad, // tip in line direction\n localPts[localPts.length - 1].x,\n localPts[localPts.length - 1].y,\n );\n return { start, end };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n</script>\n\n<svg\n style=\"position: absolute; width: var(--w); height: var(--h); pointer-events: none; z-index: 2; overflow: visible;\"\n style:--w={`${width}px`}\n style:--h={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:stroke-width={strokeWidth}\n style:pointer-events={isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n</svg>\n","<!-- Polygon.svelte -->\n<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n\n interface PolygonProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n // Preview-only\n currentVertex?: Position;\n handleSize?: number;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n currentVertex,\n handleSize = 14,\n }: PolygonProps = $props();\n\n // Combine vertices with preview point (if any)\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n // Localize points to the annotation bbox\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n // Build path data; omit 'Z' when previewing\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n const isPreview = !!currentVertex;\n return (\n `M ${first.x} ${first.y} ` +\n rest.map((p) => `L ${p.x} ${p.y}`).join(' ') +\n (isPreview ? '' : ' Z')\n ).trim();\n });\n\n const isPreviewing = $derived(!!currentVertex && vertices.length > 0);\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <path\n d={pathData}\n onpointerdown={onClick}\n ontouchstart={onClick}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:cursor={isSelected ? 'move' : 'pointer'}\n style:pointer-events={isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\n <!-- Preview-only elements -->\n {#if isPreviewing && vertices.length > 1}\n <path\n d={`M ${localPts[localPts.length - 1].x} ${localPts[localPts.length - 1].y} L ${localPts[0].x} ${localPts[0].y}`}\n fill=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={'4,4'}\n style:opacity={0.7}\n />\n {/if}\n\n {#if isPreviewing && vertices.length >= 2}\n <rect\n x={localPts[0].x - handleSize / scale / 2}\n y={localPts[0].y - handleSize / scale / 2}\n width={handleSize / scale}\n height={handleSize / scale}\n fill={strokeColor}\n opacity={0.4}\n stroke={strokeColor}\n stroke-width={strokeWidth / 2}\n />\n {/if}\n</svg>\n","<!-- Free-text.svelte -->\n<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability } from '../../hooks';\n\n // ---------- props ----------\n interface FreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n }\n\n let { documentId, isSelected, isEditing, annotation, pageIndex, scale, onClick }: FreeTextProps =\n $props();\n\n // ---------- capabilities ----------\n const annotationCapability = useAnnotationCapability();\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // ---------- refs / state ----------\n let editorRef: HTMLSpanElement | null = null;\n let isIOS = $state(false);\n\n // Focus and move caret to end when entering edit mode\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editorRef.focus();\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n // One-time iOS detection (prevents zoom by font-size compensation)\n $effect.pre(() => {\n try {\n const nav = navigator as any;\n const ios =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n isIOS = ios;\n } catch {\n isIOS = false;\n }\n });\n\n // Persist contents on blur\n function handleBlur() {\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText,\n });\n }\n\n // ---------- iOS zoom compensation ----------\n const computedFontPx = $derived(annotation.object.fontSize * scale);\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp = $derived(\n isIOS && isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX,\n );\n const adjustedFontPx = $derived(needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx);\n const scaleComp = $derived(needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1);\n const invScalePercent = $derived(needsComp ? 100 / scaleComp : 100);\n\n // ---------- derived sizes ----------\n const outerW = $derived(annotation.object.rect.size.width * scale);\n const outerH = $derived(annotation.object.rect.size.height * scale);\n\n const justify = $derived(\n annotation.object.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : annotation.object.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n</script>\n\n<!-- Outer positioned container -->\n<div\n style:position=\"absolute\"\n style:width={`${outerW}px`}\n style:height={`${outerH}px`}\n style:z-index={2}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events={isSelected && !isEditing ? 'none' : 'auto'}\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <!-- Editable span -->\n <span\n bind:this={editorRef}\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:display=\"flex\"\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:color={annotation.object.fontColor}\n style:font-size={`${adjustedFontPx}px`}\n style:font-family={standardFontCss(annotation.object.fontFamily)}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.color ?? annotation.object.backgroundColor}\n style:opacity={annotation.object.opacity}\n style:width={needsComp ? `${invScalePercent}%` : '100%'}\n style:height={needsComp ? `${invScalePercent}%` : '100%'}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : 'pointer'}\n style:outline=\"none\"\n style:transform={needsComp ? `scale(${scaleComp})` : undefined}\n style:transform-origin=\"top left\">{annotation.object.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import { ignore, type PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\n import type { HTMLImgAttributes } from 'svelte/elements';\n import { useAnnotationCapability } from '../hooks';\n import { deepToRaw } from '@embedpdf/utils/svelte';\n\n interface RenderAnnotationProps extends Omit<HTMLImgAttributes, 'style'> {\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n dpr?: number;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n style,\n ...restProps\n }: RenderAnnotationProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n let imageUrl = $state<string | null>(null);\n let urlRef: string | null = null;\n\n const { width, height } = $derived(annotation.rect.size);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Effect to render annotation\n $effect(() => {\n if (annotationProvides) {\n const task = annotationProvides.renderAnnotation({\n pageIndex,\n annotation: deepToRaw(annotation),\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl = url;\n urlRef = url;\n }, ignore);\n\n return () => {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n };\n }\n });\n\n function handleImageLoad() {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n alt=\"\"\n src={imageUrl}\n onload={handleImageLoad}\n {...restProps}\n style:width=\"100%\"\n style:height=\"100%\"\n style:display=\"block\"\n {style}\n />\n{/if}\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import RenderAnnotation from '../RenderAnnotation.svelte';\n\n interface StampProps {\n documentId: string;\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick: (e: MouseEvent | TouchEvent) => void;\n }\n\n let { documentId, isSelected, annotation, pageIndex, scale, onClick }: StampProps = $props();\n\n let annotationProp = $derived({ ...annotation.object, id: annotation.object.id });\n</script>\n\n<div\n style=\"position: absolute; width: 100%; height: 100%; z-index: 2;\"\n style:pointer-events={isSelected ? 'none' : 'auto'}\n style:cursor=\"pointer\"\n onpointerdown={onClick}\n ontouchstart={onClick}\n>\n <RenderAnnotation {documentId} {pageIndex} annotation={annotationProp} scaleFactor={scale} />\n</div>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface LinkProps {\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Stroke colour – defaults to blue when omitted */\n strokeColor?: string;\n /** Stroke width in PDF units */\n strokeWidth?: number;\n /** Stroke type – defaults to underline when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – for dashed style */\n strokeDashArray?: number[];\n /** Bounding box of the annotation (PDF units) */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Click handler (used for selection) */\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Whether this link has an IRT (In Reply To) reference - disables direct interaction */\n hasIRT?: boolean;\n }\n\n let {\n isSelected,\n strokeColor = '#0000FF',\n strokeWidth = 2,\n strokeStyle = PdfAnnotationBorderStyle.UNDERLINE,\n strokeDashArray,\n rect,\n scale,\n onClick,\n hasIRT = false,\n }: LinkProps = $props();\n\n const width = $derived(rect.size.width);\n const height = $derived(rect.size.height);\n const svgWidth = $derived(width * scale);\n const svgHeight = $derived(height * scale);\n\n // Calculate dash array for SVG\n const dashArray = $derived.by(() => {\n if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n return strokeDashArray?.join(',') ?? `${strokeWidth * 3},${strokeWidth}`;\n }\n return undefined;\n });\n\n // For underline style, render a line at the bottom\n // For solid/dashed, render a rectangle border\n const isUnderline = $derived(strokeStyle === PdfAnnotationBorderStyle.UNDERLINE);\n\n const hitAreaCursor = $derived(hasIRT ? 'default' : isSelected ? 'move' : 'pointer');\n const hitAreaPointerEvents = $derived(hasIRT ? 'none' : isSelected ? 'none' : 'visible');\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; pointer-events: none;\"\n style:width=\"{svgWidth}px\"\n style:height=\"{svgHeight}px\"\n width={svgWidth}\n height={svgHeight}\n viewBox=\"0 0 {width} {height}\"\n>\n <!-- Invisible hit area for the entire link region -->\n <!-- IRT links are not directly clickable - interaction goes through parent -->\n <rect\n x={0}\n y={0}\n {width}\n {height}\n fill=\"transparent\"\n onpointerdown={hasIRT ? undefined : onClick}\n ontouchstart={hasIRT ? undefined : onClick}\n style:cursor={hitAreaCursor}\n style:pointer-events={hitAreaPointerEvents}\n />\n\n {#if isUnderline}\n <!-- Underline style: line at bottom of rect -->\n <line\n x1={1}\n y1={height - 1}\n x2={width - 1}\n y2={height - 1}\n stroke={strokeColor}\n stroke-width={strokeWidth}\n stroke-dasharray={dashArray}\n style:pointer-events=\"none\"\n />\n {:else}\n <!-- Solid/Dashed style: rectangle border -->\n <rect\n x={strokeWidth / 2}\n y={strokeWidth / 2}\n width={Math.max(width - strokeWidth, 0)}\n height={Math.max(height - strokeWidth, 0)}\n fill=\"transparent\"\n stroke={strokeColor}\n stroke-width={strokeWidth}\n stroke-dasharray={dashArray}\n style:pointer-events=\"none\"\n />\n {/if}\n</svg>\n","<!-- GroupSelectionBox.svelte -->\n<script lang=\"ts\">\n import { boundingRectOrEmpty, type Rect } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import {\n useInteractionHandles,\n CounterRotate,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import { useAnnotationPlugin } from '../hooks';\n import type {\n GroupSelectionContext,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n } from '../types';\n import type { Snippet } from 'svelte';\n\n interface GroupSelectionBoxProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** All selected annotations on this page */\n selectedAnnotations: TrackedAnnotation[];\n /** Whether the group is draggable (all annotations must be group-draggable) */\n isDraggable: boolean;\n /** Whether the group is resizable (all annotations must be group-resizable) */\n isResizable: boolean;\n /** Resize handle UI customization */\n resizeUI?: ResizeHandleUI;\n /** Selection outline color */\n selectionOutlineColor?: string;\n /** Outline offset */\n outlineOffset?: number;\n /** Z-index for the group box */\n zIndex?: number;\n /** Group selection menu render function */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n }\n\n let {\n documentId,\n pageIndex,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n selectedAnnotations,\n isDraggable,\n isResizable,\n resizeUI,\n selectionOutlineColor = '#007ACC',\n outlineOffset = 2,\n zIndex = 100,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n }: GroupSelectionBoxProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let gestureBase = $state<Rect | null>(null);\n let isDraggingRef = $state(false);\n let isResizingRef = $state(false);\n\n // Helper to compute group box on demand\n function getGroupBox(): Rect {\n const rects = selectedAnnotations.map((ta) => ta.object.rect);\n return boundingRectOrEmpty(rects);\n }\n\n // Compute the group bounding box from all selected annotations (for reactive bindings)\n const groupBox = $derived.by(getGroupBox);\n\n // Preview state for the group box during drag/resize\n let previewGroupBox = $state<Rect>(getGroupBox());\n\n // Sync preview with actual group box when not dragging/resizing\n $effect(() => {\n if (!isDraggingRef && !isResizingRef) {\n const newBox = groupBox;\n // Only update if values actually changed (not just object reference)\n if (\n previewGroupBox.origin.x !== newBox.origin.x ||\n previewGroupBox.origin.y !== newBox.origin.y ||\n previewGroupBox.size.width !== newBox.size.width ||\n previewGroupBox.size.height !== newBox.size.height\n ) {\n previewGroupBox = newBox;\n }\n }\n });\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n\n // Use interaction handles for both drag and resize\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: previewGroupBox,\n constraints: {\n minWidth: 20,\n minHeight: 20,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: false,\n pageRotation: rotation,\n scale: scale,\n enabled: true,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n if (!annotationPlugin.plugin) return;\n\n const plugin = annotationPlugin.plugin;\n const transformType = event.transformData.type;\n const isMove = transformType === 'move';\n const isResize = transformType === 'resize';\n\n // Skip drag operations if group is not draggable\n if (isMove && !isDraggable) return;\n\n if (event.state === 'start') {\n gestureBase = getGroupBox();\n\n if (isMove) {\n isDraggingRef = true;\n // Use unified drag API - plugin handles attached links automatically\n plugin.startDrag(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n });\n } else if (isResize) {\n isResizingRef = true;\n // Use unified resize API - plugin handles attached links automatically\n plugin.startResize(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n resizeHandle: event.transformData.metadata?.handle ?? 'se',\n });\n }\n }\n\n const base = gestureBase ?? getGroupBox();\n\n if (isMove && event.transformData.changes.rect) {\n // Calculate delta from original position\n const newRect = event.transformData.changes.rect;\n const rawDelta = {\n x: newRect.origin.x - base.origin.x,\n y: newRect.origin.y - base.origin.y,\n };\n\n // Plugin clamps delta and emits events (attached links receive updates too)\n const clampedDelta = plugin.updateDrag(documentId, rawDelta);\n\n // Update preview group box with clamped delta\n previewGroupBox = {\n ...base,\n origin: {\n x: base.origin.x + clampedDelta.x,\n y: base.origin.y + clampedDelta.y,\n },\n };\n } else if (isResize && event.transformData.changes.rect) {\n const newGroupBox = event.transformData.changes.rect;\n\n // Plugin computes rects for all participants and emits events\n plugin.updateResize(documentId, newGroupBox);\n\n // Update preview\n previewGroupBox = newGroupBox;\n }\n\n if (event.state === 'end') {\n gestureBase = null;\n\n if (isMove && isDraggingRef) {\n isDraggingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitDrag(documentId);\n } else if (isResize && isResizingRef) {\n isResizingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitResize(documentId);\n }\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOffset,\n offsetMode: 'outside',\n includeSides: true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: 0,\n zIndex: zIndex,\n },\n includeVertices: false,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n\n // --- Group Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(!!groupSelectionMenu || !!groupSelectionMenuSnippet);\n\n // Build context object for group selection menu\n function buildContext(): GroupSelectionContext {\n return {\n type: 'group',\n annotations: selectedAnnotations,\n pageIndex,\n };\n }\n\n // Build menu props\n function buildMenuProps(rect: Rect, menuWrapperProps: MenuWrapperProps): GroupSelectionMenuProps {\n return {\n context: buildContext(),\n selected: true,\n rect,\n placement: { suggestTop: false },\n menuWrapperProps,\n };\n }\n</script>\n\n{#if selectedAnnotations.length >= 2}\n <div data-group-selection-box data-no-interaction>\n <!-- Group box - draggable only if isDraggable is true -->\n <div\n {...isDraggable\n ? interactionHandles.dragProps\n : { onpointerdown: (e: PointerEvent) => e.stopPropagation() }}\n style:position=\"absolute\"\n style:left=\"{previewGroupBox.origin.x * scale}px\"\n style:top=\"{previewGroupBox.origin.y * scale}px\"\n style:width=\"{previewGroupBox.size.width * scale}px\"\n style:height=\"{previewGroupBox.size.height * scale}px\"\n style:outline=\"2px dashed {selectionOutlineColor}\"\n style:outline-offset=\"{outlineOffset - 1}px\"\n style:cursor={isDraggable ? 'move' : 'default'}\n style:touch-action=\"none\"\n style:z-index={zIndex}\n >\n <!-- Resize handles -->\n {#if isResizable}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({ ...hProps, backgroundColor: HANDLE_COLOR })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n\n <!-- Group selection menu -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: previewGroupBox.origin.x * scale,\n y: previewGroupBox.origin.y * scale,\n },\n size: {\n width: previewGroupBox.size.width * scale,\n height: previewGroupBox.size.height * scale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if groupSelectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = groupSelectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if groupSelectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render groupSelectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n </div>\n{/if}\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import { blendModeToCss, type PdfAnnotationObject, PdfBlendMode } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationIds,\n isCircle,\n isFreeText,\n isHighlight,\n isInk,\n isLine,\n isLink,\n isPolygon,\n isPolyline,\n isSquare,\n isSquiggly,\n isStamp,\n isStrikeout,\n isUnderline,\n type TrackedAnnotation,\n } from '@embedpdf/plugin-annotation';\n import type { PdfLinkAnnoObject } from '@embedpdf/models';\n\n import {\n type PointerEventHandlersWithLifecycle,\n type EmbedPdfPointerEvent,\n } from '@embedpdf/plugin-interaction-manager';\n import { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/svelte';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n\n import Highlight from './text-markup/Highlight.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Ink from './annotations/Ink.svelte';\n import Square from './annotations/Square.svelte';\n import Circle from './annotations/Circle.svelte';\n import Line from './annotations/Line.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import FreeText from './annotations/FreeText.svelte';\n import Stamp from './annotations/Stamp.svelte';\n import Link from './annotations/Link.svelte';\n import GroupSelectionBox from './GroupSelectionBox.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n\n // ---------- props ----------\n interface AnnotationsProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n /** Render function for group selection menu (schema-driven approach) */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // ---------- capabilities / handlers ----------\n const annotationCapability = useAnnotationCapability();\n const selectionCapability = useSelectionCapability();\n const pointerHandlers = usePointerHandlers({\n documentId: annotationsProps.documentId,\n pageIndex: annotationsProps.pageIndex,\n });\n\n // ---------- local state ----------\n let annotations = $state<TrackedAnnotation[]>([]);\n let allSelectedIds = $state<string[]>([]);\n let editingId = $state<string | null>(null);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n // Check if multiple annotations are selected\n const isMultiSelected = $derived(allSelectedIds.length > 1);\n\n // subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current state immediately\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(currentState);\n\n // Then subscribe to changes\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(state);\n });\n return () => off?.();\n });\n\n // pointer handlers (capture-down to deselect when clicking empty layer)\n const handlers: PointerEventHandlersWithLifecycle<EmbedPdfPointerEvent<PointerEvent>> = {\n onPointerDown: (_, pe) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n // register pointer handlers\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n // click/select logic shared across shapes\n function handleClick(e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n selectionCapability.provides.clear();\n\n // Check for modifier key (Cmd on Mac, Ctrl on Windows/Linux)\n const isModifierPressed = 'metaKey' in e ? e.metaKey || e.ctrlKey : false;\n\n if (isModifierPressed) {\n // Toggle selection: add or remove from current selection\n annotationProvides.toggleSelection(annotationsProps.pageIndex, annotation.object.id);\n } else {\n // Exclusive select: clear and select only this one\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n }\n\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n\n // Special handler for link annotations - if IRT exists, select the parent\n function handleLinkClick(\n e: MouseEvent | TouchEvent,\n annotation: TrackedAnnotation<PdfLinkAnnoObject>,\n ) {\n e.stopPropagation();\n if (!annotationProvides || !selectionCapability.provides) return;\n\n selectionCapability.provides.clear();\n\n // If link has IRT, select the parent annotation instead\n if (annotation.object.inReplyToId) {\n const parentId = annotation.object.inReplyToId;\n const parent = annotations.find((a) => a.object.id === parentId);\n if (parent) {\n annotationProvides.selectAnnotation(parent.object.pageIndex, parentId);\n return;\n }\n }\n\n // Standalone link - select it directly\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n }\n\n // Get selected annotations that are on THIS page (for group selection box)\n const selectedAnnotationsOnPage = $derived(\n annotations.filter((anno) => allSelectedIds.includes(anno.object.id)),\n );\n\n // Check if all selected annotations on this page are draggable in group context\n const areAllSelectedDraggable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n // Use group-specific property, falling back to single-annotation property\n return tool?.interaction.isGroupDraggable ?? tool?.interaction.isDraggable ?? true;\n });\n });\n\n // Check if all selected annotations on this page are resizable in group context\n const areAllSelectedResizable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n // Use group-specific property, falling back to single-annotation property\n return tool?.interaction.isGroupResizable ?? tool?.interaction.isResizable ?? true;\n });\n });\n\n // Check if all selected annotations are on the same page (this page)\n const allSelectedOnSamePage = $derived.by(() => {\n if (!annotationProvides) return false;\n // Early return if not enough selections (also creates reactive dependency on allSelectedIds)\n if (allSelectedIds.length < 2) return false;\n const allSelected = annotationProvides.getSelectedAnnotations();\n return allSelected.every((ta) => ta.object.pageIndex === annotationsProps.pageIndex);\n });\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const isSelected = allSelectedIds.includes(annotation.object.id)}\n {@const isEditing = editingId === annotation.object.id}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object)}\n {@const mixBlendMode = blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\n\n {#if isInk(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Ink\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquare(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Square\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isCircle(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Circle\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: PointerEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isUnderline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Underline\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStrikeout(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Strikeout\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isSquiggly(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Squiggly\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isHighlight(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? false) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n zIndex={0}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply)}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Highlight\n {...obj}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLine(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, vertices) => ({\n ...a,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Line\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolyline(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n isSelected={isSelected && !isMultiSelected}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polyline\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isPolygon(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? false) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n vertexConfig={{\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n }}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Polygon\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isFreeText(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isEditing && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal)}\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n editingId = annotation.object.id;\n }}\n {...annotationsProps}\n >\n {#snippet children(object)}\n <FreeText\n documentId={annotationsProps.documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object }}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isStamp(annotation)}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n isDraggable={(tool?.interaction.isDraggable ?? true) && !isMultiSelected}\n isResizable={(tool?.interaction.isResizable ?? true) && !isMultiSelected}\n lockAspectRatio={tool?.interaction.lockAspectRatio ?? false}\n selectionMenu={isMultiSelected ? undefined : annotationsProps.selectionMenu}\n selectionMenuSnippet={isMultiSelected ? undefined : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(_object)}\n <Stamp\n documentId={annotationsProps.documentId}\n {isSelected}\n {annotation}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleClick(e, annotation)}\n />\n {/snippet}\n </AnnotationContainer>\n {:else if isLink(annotation)}\n {@const hasIRT = !!annotation.object.inReplyToId}\n <AnnotationContainer\n trackedAnnotation={annotation}\n isSelected={isSelected && !isMultiSelected}\n {isMultiSelected}\n isDraggable={false}\n isResizable={false}\n lockAspectRatio={false}\n selectionMenu={hasIRT\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenu}\n selectionMenuSnippet={hasIRT\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenuSnippet}\n onSelect={(e: MouseEvent | TouchEvent) => handleLinkClick(e, annotation)}\n style=\"mix-blend-mode: {mixBlendMode}\"\n {...annotationsProps}\n >\n {#snippet children(obj)}\n <Link\n {...obj}\n {isSelected}\n scale={annotationsProps.scale}\n onClick={(e: MouseEvent | TouchEvent) => handleLinkClick(e, annotation)}\n {hasIRT}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n{/each}\n\n<!-- Group Selection Box (shown when multiple annotations are selected on this page) -->\n{#if allSelectedOnSamePage && selectedAnnotationsOnPage.length >= 2}\n <GroupSelectionBox\n documentId={annotationsProps.documentId}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n rotation={annotationsProps.rotation}\n pageWidth={annotationsProps.pageWidth}\n pageHeight={annotationsProps.pageHeight}\n selectedAnnotations={selectedAnnotationsOnPage}\n isDraggable={areAllSelectedDraggable}\n isResizable={areAllSelectedResizable}\n resizeUI={annotationsProps.resizeUI}\n selectionOutlineColor={annotationsProps.selectionOutlineColor}\n groupSelectionMenu={annotationsProps.groupSelectionMenu}\n groupSelectionMenuSnippet={annotationsProps.groupSelectionMenuSnippet}\n />\n{/if}\n","<script lang=\"ts\">\n import { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, type Rect } from '@embedpdf/models';\n import type { AnnotationTool } from '@embedpdf/plugin-annotation';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n import Highlight from './text-markup/Highlight.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n\n interface TextMarkupProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: TextMarkupProps = $props();\n\n const selectionCapability = useSelectionCapability();\n const annotationCapability = useAnnotationCapability();\n\n let rects = $state<Rect[]>([]);\n let boundingRect = $state<Rect | null>(null);\n let activeTool = $state<AnnotationTool | null>(null);\n\n // Get scoped APIs for this document\n const selectionProvides = $derived(\n selectionCapability.provides ? selectionCapability.provides.forDocument(documentId) : null,\n );\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Subscribe to selection changes\n $effect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n rects = selectionProvides.getHighlightRectsForPage(pageIndex);\n boundingRect = selectionProvides.getBoundingRectForPage(pageIndex);\n });\n return off;\n });\n\n // Subscribe to active tool changes\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current active tool\n activeTool = annotationProvides.getActiveTool();\n\n const off = annotationProvides.onActiveToolChange((tool) => {\n activeTool = tool;\n });\n return off;\n });\n\n const mixBlendMode = $derived(\n activeTool?.defaults?.blendMode\n ? blendModeToCss(activeTool.defaults.blendMode)\n : activeTool?.defaults?.type === PdfAnnotationSubtype.HIGHLIGHT\n ? blendModeToCss(PdfBlendMode.Multiply)\n : blendModeToCss(PdfBlendMode.Normal),\n );\n</script>\n\n{#if boundingRect && activeTool && activeTool.defaults}\n {#if activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Underline\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Highlight\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Strikeout\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Squiggly\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {/if}\n{/if}\n","<script lang=\"ts\">\n import type { AnyPreviewState } from '@embedpdf/plugin-annotation';\n import { PdfAnnotationSubtype } from '@embedpdf/models';\n import Circle from './annotations/Circle.svelte';\n import Square from './annotations/Square.svelte';\n import Polygon from './annotations/Polygon.svelte';\n import Polyline from './annotations/Polyline.svelte';\n import Line from './annotations/Line.svelte';\n import Ink from './annotations/Ink.svelte';\n\n interface PreviewRendererProps {\n preview: AnyPreviewState;\n scale: number;\n }\n\n let { preview, scale }: PreviewRendererProps = $props();\n\n const bounds = $derived(preview.bounds);\n\n const style = $derived({\n left: bounds.origin.x * scale,\n top: bounds.origin.y * scale,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n });\n</script>\n\n{#if preview.type === PdfAnnotationSubtype.CIRCLE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Circle isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.SQUARE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Square isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYGON}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polygon isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.POLYLINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Polyline isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.LINE}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Line isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.INK}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <Ink isSelected={false} {scale} {...preview.data} />\n </div>\n{:else if preview.type === PdfAnnotationSubtype.FREETEXT}\n <div\n style:position=\"absolute\"\n style:left=\"{style.left}px\"\n style:top=\"{style.top}px\"\n style:width=\"{style.width}px\"\n style:height=\"{style.height}px\"\n style:pointer-events=\"none\"\n style:z-index=\"10\"\n >\n <!-- Render a simple dashed border preview -->\n <div\n style:width=\"100%\"\n style:height=\"100%\"\n style:border=\"1px dashed {preview.data.fontColor || '#000000'}\"\n style:background-color=\"transparent\"\n ></div>\n </div>\n{/if}\n","<script lang=\"ts\">\n import { useAnnotationPlugin } from '../hooks';\n import type { AnyPreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\n import PreviewRenderer from './PreviewRenderer.svelte';\n\n interface AnnotationPaintLayerProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: AnnotationPaintLayerProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let previews = $state<Map<string, AnyPreviewState>>(new Map());\n\n let fileInputRef: HTMLInputElement | null = $state(null);\n let canvasRef: HTMLCanvasElement | null = $state(null);\n\n const services: HandlerServices = {\n requestFile: ({ accept, onFile }) => {\n if (!fileInputRef) return;\n const input = fileInputRef;\n input.accept = accept;\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n onFile(file);\n input.value = '';\n }\n };\n input.click();\n },\n processImage: ({ source, maxWidth, maxHeight, onComplete }) => {\n const canvas = canvasRef;\n if (!canvas || !canvas.getContext) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n let { naturalWidth: width, naturalHeight: height } = img;\n\n // --- SCALING LOGIC ---\n // Calculate the scale factor to fit within maxWidth and maxHeight\n const scaleX = maxWidth ? maxWidth / width : 1;\n const scaleY = maxHeight ? maxHeight / height : 1;\n const scaleFactor = Math.min(scaleX, scaleY, 1); // Ensure we don't scale up\n\n const finalWidth = width * scaleFactor;\n const finalHeight = height * scaleFactor;\n\n canvas.width = finalWidth;\n canvas.height = finalHeight;\n ctx.drawImage(img, 0, 0, finalWidth, finalHeight);\n\n const imageData = ctx.getImageData(0, 0, finalWidth, finalHeight);\n if (typeof source !== 'string') URL.revokeObjectURL(img.src);\n\n onComplete({ imageData, width: finalWidth, height: finalHeight });\n };\n img.src = typeof source === 'string' ? source : URL.createObjectURL(source);\n },\n };\n\n $effect(() => {\n if (!annotationPlugin.plugin) return;\n\n return annotationPlugin.plugin.registerPageHandlers(documentId, pageIndex, scale, {\n services,\n onPreview: (toolId, state) => {\n previews = new Map(previews);\n if (state) {\n previews.set(toolId, state);\n } else {\n previews.delete(toolId);\n }\n },\n });\n });\n</script>\n\n<!-- Hidden DOM elements required by services -->\n<input bind:this={fileInputRef} type=\"file\" style:display=\"none\" />\n<canvas bind:this={canvasRef} style:display=\"none\"></canvas>\n\n<!-- Render any active previews from any tool -->\n{#each Array.from(previews.entries()) as [toolId, preview] (toolId)}\n <PreviewRenderer {preview} {scale} />\n{/each}\n","<script lang=\"ts\">\n import { Rotation, type PdfAnnotationObject } from '@embedpdf/models';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n } from '../types';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n /** Render function for group selection menu (schema-driven approach) */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n resizeUI,\n vertexUI,\n selectionOutlineColor,\n customAnnotationRenderer,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived(\n overrideRotation !== undefined\n ? overrideRotation\n : (documentState?.current?.rotation ?? Rotation.Degree0),\n );\n</script>\n\n<div\n id=\"annotation-layer\"\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n {...restProps}\n>\n <Annotations\n {documentId}\n {selectionMenu}\n {selectionMenuSnippet}\n {groupSelectionMenu}\n {groupSelectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {selectionOutlineColor}\n {customAnnotationRenderer}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["useAnnotationCapability","useCapability","AnnotationPlugin","id","useAnnotationPlugin","usePlugin","isMultiSelected","lockAspectRatio","propsClass","outlineOffset","zIndex","selectionOutlineColor","restProps","$","rest_props","$$props","preview","state","proxy","trackedAnnotation","object","annotationCapability","annotationPlugin","permissions","useDocumentPermissions","documentId","gestureBaseRef","gestureBaseRectRef","effectiveIsDraggable","derived","canModifyAnnotations","effectiveIsResizable","guardedOnDoubleClick","annotationProvides","provides","forDocument","currentObject","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","HANDLE_SIZE","size","VERTEX_SIZE","showOutline","user_effect","set","plugin","handleEvent","event","patch","previewPatches","type","untrack","get","unsubs","onDragChange","onResizeChange","forEach","u","interactionHandles","useInteractionHandles","controller","element","rect","vertices","vertexConfig","extractVertices","constraints","minWidth","minHeight","boundingBox","width","pageWidth","height","pageHeight","maintainAspectRatio","pageRotation","rotation","scale","enabled","onUpdate","transformData","changes","metadata","pageSize","startDrag","annotationIds","startResize","resizeHandle","handle","delta","x","origin","y","updateDrag","updateResize","base","vertexChanges","transformAnnotation","patched","_b","sanitized","deepToRaw","updateAnnotation","pageIndex","commitDrag","commitResize","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","resizeHandles","resize","vertexHandles","shouldShowMenu","selectionMenu","selectionMenuSnippet","menuPlacement","suggestTop","spaceAbove","spaceBelow","div","root","div_1","isSelected","dragProps","left","top","annotation","children","onSelect","key","style","handleStyle","hProps","$$anchor","$$item","exclude_from_object","Component","component","Component_1","div_2","root_6","consequent_1","$$render","alternate_1","consequent_2","vertexStyle","vProps","Component_2","div_3","root_10","consequent_3","alternate_2","consequent_4","$$node","$$action_arg","doublePress","onDouble","$$arg0","menuProps","menuWrapperProps","context","selected","placement","buildMenuProps","result","result_component","spread_props","props","consequent_5","CounterRotate","consequent_8","opacity","resolvedColor","b","root_1","tabindex","onClick","cursor","Object","fromEntries","entries","map","k","v","thickness","r","styles","amplitude","period","svg","svgDataUri","encodeURIComponent","paths","inkList","points","d","i","length","trim","index","path","__pointerdown","$$args","__touchstart","set_attribute","styles_1","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","$$d","outerW","outerH","Math","max","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","rect_1","innerW","innerH","cx","cy","rx","ry","peValue","ellipse","e","$0","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","lineEndings","line","transform","filled","styles_2","consequent","path_1","root_2","styles_3","localPts","pathData","first","rest","p","toAngle","a","startRad","endRad","path_2","stroke","allPoints","currentVertex","isPreview","isPreviewing","fill","editorRef","isIOS","focus","selection","getSelection","call","window","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","user_pre_effect","nav","navigator","ios","test","userAgent","platform","maxTouchPoints","computedFontPx","fontSize","needsComp","isEditing","adjustedFontPx","scaleComp","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","span","$$value","set_text","text","contents","fontColor","standardFontCss","fontFamily","textAlignmentToCss","textAlign","backgroundColor","innerText","scaleFactor","imageUrl","urlRef","handleImageLoad","URL","revokeObjectURL","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","img","annotationProp","RenderAnnotation","UNDERLINE","hasIRT","dashArray","isUnderline","hitAreaCursor","hitAreaPointerEvents","apply","this","rect_2","$1","alternate","gestureBase","isDraggingRef","isResizingRef","getGroupBox","rects","selectedAnnotations","ta","boundingRectOrEmpty","groupBox","previewGroupBox","newBox","transformType","isMove","isResize","isDraggable","newRect","rawDelta","clampedDelta","newGroupBox","groupSelectionMenu","groupSelectionMenuSnippet","onpointerdown","stopPropagation","root_5","annotations","consequent_6","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","allSelectedIds","editingId","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationIds","off","onStateChange","handlers","onPointerDown","_","pe","target","currentTarget","deselectAnnotation","handleClick","clear","metaKey","ctrlKey","toggleSelection","selectAnnotation","handleLinkClick","inReplyToId","parentId","parent","find","register","selectedAnnotationsOnPage","filter","anno","includes","areAllSelectedDraggable","every","tool","findToolForAnnotation","interaction","isGroupDraggable","areAllSelectedResizable","isGroupResizable","isResizable","allSelectedOnSamePage","getSelectedAnnotations","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","obj","noop","Ink","$2","$3","AnnotationContainer","$$slots","default","Square","Circle","Underline","Strikeout","Squiggly","Highlight","Multiply","Line","linePoints","Polyline","$4","$5","Polygon","FreeText","onDoubleClick","_object","Stamp","Link","isLink","consequent_12","isStamp","consequent_11","isFreeText","consequent_10","isPolygon","consequent_9","isPolyline","alternate_3","isLine","consequent_7","alternate_4","isHighlight","alternate_5","isSquiggly","alternate_6","isStrikeout","alternate_7","alternate_8","isCircle","alternate_9","isSquare","alternate_10","isInk","alternate_11","GroupSelectionBox","consequent_13","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","defaults","PdfAnnotationSubtype","HIGHLIGHT","node_2","root_4","node_4","node_6","root_8","node_8","SQUIGGLY","STRIKEOUT","bounds","data","root_3","root_7","div_4","root_9","styles_4","div_5","root_11","styles_5","div_6","root_13","div_7","styles_6","styles_7","FREETEXT","INK","LINE","POLYLINE","POLYGON","SQUARE","CIRCLE","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","src","registerPageHandlers","onPreview","toolId","delete","input_1","first_child","fragment","display","canvas_1","Array","from","PreviewRenderer","$$array","documentState","useDocumentState","page","_c","current","pages","actualScale","actualRotation","Rotation","Degree0","attribute_effect","Annotations","node","TextMarkup","node_1","AnnotationPaintLayer","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"8sBAQaA,EAAA,IAAgCC,gBAAgCC,EAAAA,iBAAiBC,IACjFC,EAAA,IAA4BC,YAA4BH,EAAAA,iBAAiBC,6KCkBlF,IAAAG,gCAAkB,GAGlBC,gCAAkB,GAEXC,qBAAa,IAIpBC,6BAAgB,GAGhBC,sBAAS,IAGTC,qCAAwB,WAErBC,EAAQC,EAAAC,WAAAC,EAAA,uZAGTC,EAAUH,EAAAI,MAAMJ,EAAAK,MAAAH,EAAAI,kBAAsBC,SACtCC,EAAuBrB,IACrB,MAAAsB,EAAmBlB,IACnBmB,EAAcC,EAAAA,uBAAsB,IAAAT,EAAAU,gBACtCC,EAAiBb,EAAAI,MAAiB,MAClCU,EAAqBd,EAAAI,MAAoB,MAGvC,MAAAW,EAAoBf,EAAAgB,QAAA,IACxBN,EAAYO,sCAAwCxB,KAEhDyB,EAAoBlB,EAAAgB,QAAA,IACxBN,EAAYO,sCAAwCxB,KAIhD0B,EAAoBnB,EAAAgB,QAAA,IACxBN,EAAYO,2DAAwD,GAIhEG,EAAkBpB,EAAAgB,QAAA,IACtBR,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAU,YAAe,MAGtF,IAAAW,sBACFpB,GAAiC,IAAAD,EAAAI,kBAAAC,gBAAWJ,wBAA8BI,cAItEiB,EAAYxB,EAAAgB,QAAA,WAAA,OAAA,OAAAS,EAAAvB,EAAAwB,mBAAsBC,QAAS,YAC3CC,EAAY5B,EAAAgB,QAAA,WAAA,OAAA,OAAAS,EAAAvB,EAAA2B,mBAAsBF,QAAS,YAC3CG,EAAW9B,EAAAgB,QAAA,WAAA,OAAA,OAAAS,EAAAvB,EAAAwB,mBAAsBK,OAAQ,KACzCC,EAAWhC,EAAAgB,QAAA,WAAA,OAAA,OAAAS,EAAAvB,EAAA2B,mBAAsBE,OAAQ,KAIzCE,+BAAsCxC,KAG5CO,EAAAkC,YAAO,KACiBhC,EAAAI,kBAAAC,QACpBP,EAAAmC,IAAAhC,sBAA4BI,QAAM,KAMtCP,EAAAkC,YAAO,WACCE,EAAS3B,EAAiB2B,WAC3BA,EAAM,aAEL9C,EAAEY,EAAAI,kBAAqBC,OAAOjB,GAE9B+C,EAAeC,UAKf,GAAAA,EAAM1B,aAAUV,EAAAU,WAAA,OACd,MAAA2B,EAAQ,OAAAd,EAAAa,EAAME,qBAAN,EAAAf,EAAuBnC,GAClB,WAAfgD,EAAMG,MAAqBF,EAE7BvC,EAAAmC,IAAAhC,EAAO,IAAQuC,EAAAA,QAAO,IAAA1C,EAAA2C,IAAOxC,OAAaoC,IAAK,GACvB,WAAfD,EAAMG,MACfzC,EAAAmC,IAAAhC,sBAA4BI,QAAM,IAIhCqC,EAAM,CAAIR,EAAOS,aAAaR,GAAcD,EAAOU,eAAeT,IAE3D,MAAA,IAAAO,EAAOG,QAASC,GAAMA,OAG/B,MAAAC,EAAqBC,EAAAA,sBAAqB,WAAA,MAAA,CAC9CC,WAAU,CACRC,QAAOpD,EAAA2C,IAAEpB,GAAc8B,KACvBC,SAAQ,OAAA7B,EAAAvB,EAAAqD,uBAAgBC,gBAAexD,EAAA2C,IAACpB,IACxCkC,YAAW,CACTC,SAAU,GACVC,UAAW,GACXC,YAAW,CAAIC,MAAK3D,EAAA4D,UAAaC,OAAM7D,EAAA8D,aAEzCC,oBAAqBvE,IACrBwE,aAAYhE,EAAAiE,SACZC,MAAKlE,EAAAkE,MAELC,uBAAwB5E,IACxB6E,SAAWhC,cACJ,KAAA,OAAAb,EAAAa,EAAMiC,sBAAN9C,EAAqBgB,OAAQhD,IAAe,aAE3C2C,EAAS3B,EAAiB2B,WAC3BA,EAAM,OAEH,MAAAK,KAAAA,EAAA+B,QAAMA,EAAAC,SAASA,GAAanC,EAAMiC,cACpCjF,EAAEY,EAAAI,kBAAqBC,OAAOjB,GAC9BoF,EAAQ,CAAKb,MAAK3D,EAAA4D,UAAaC,OAAM7D,EAAA8D,YAmBvC,GAhBgB,UAAhB1B,EAAMlC,cACRU,EAAkBZ,EAAAI,kBAAqBC,OAAO8C,MAAI,SAClDxC,sBAAmCN,WAEtB,SAATkC,EACFL,EAAOuC,UAASzE,EAAAU,WAAA,CAAegE,cAAa,CAAGtF,GAAKoF,aAClC,WAATjC,GACTL,EAAOyC,YAAW3E,EAAAU,WAAA,CAChBgE,eAAgBtF,GAChBoF,WACAI,oBAAcL,WAAUM,SAAU,QAMpCP,EAAQnB,MAAIrD,EAAA2C,IAAI7B,MACL,SAAT2B,EAAiB,OACbuC,EAAK,CACTC,EAAGT,EAAQnB,KAAK6B,OAAOD,EAACjF,EAAA2C,IAAG7B,GAAmBoE,OAAOD,EACrDE,EAAGX,EAAQnB,KAAK6B,OAAOC,EAACnF,EAAA2C,IAAG7B,GAAmBoE,OAAOC,GAEvD/C,EAAOgD,WAAUlF,EAAAU,WAAaoE,EAChC,KAAoB,WAATvC,GACTL,EAAOiD,aAAYnF,EAAAU,WAAa4D,EAAQnB,MAKxC,GAAS,gBAATZ,GAA0B+B,EAAQlB,UAAQpD,EAAAqD,aAAkB,OACxD+B,EAAItF,EAAA2C,IAAG9B,IAAcX,EAAAI,kBAAsBC,OAC3CgF,iBAA6BC,oBAAoBF,EAAMd,EAAQlB,UAC/DmC,EAAU,OAAAC,EAAAlF,EAAqBa,eAArB,EAAAqE,EAA+BF,oBAAuBF,EAAI,CACxE7C,OACA+B,QAASe,EACTd,aAEE,GAAAgB,UACFtF,EAAO,IAAAH,EAAA2C,IAAQxC,MAAYsF,IAAO,GACd,QAAhBnD,EAAMlC,OAAiB,OACnBuF,EAAYC,EAAAA,UAAUH,GAC5BzF,OAAAA,EAAAA,EAAA2C,IAAAvB,OAAoByE,iBAAgB3F,EAAA4F,UAAYxG,EAAIqG,EACtD,CAEJ,CAGoB,QAAhBrD,EAAMlC,QACRJ,EAAAmC,IAAArB,EAAqB,MACrBd,EAAAmC,IAAAtB,EAAiB,MACJ,SAAT4B,EAAiBL,EAAO2D,WAAU7F,EAAAU,YACpB,WAAT6B,GAAmBL,EAAO4D,aAAY9F,EAAAU,eAIrDc,SAAQ,CACNuE,iBAAYnE,GACZoE,QAAStG,IACTuG,WAAY,UACZC,cAAc1G,IACdG,OAAQA,IAAS,GAEnBgC,SAAQ,CACNwE,WAAUrG,EAAA2C,IAAEX,GACZnC,OAAQA,IAAS,GAEnByG,kBAAepG,EAAAqD,gBAIXgD,EAAavG,EAAAgB,QAAA,IAAYiC,EAAmBuD,QAC5CC,EAAazG,EAAAgB,QAAA,IAAYiC,EAAmBK,UAK5CoD,+BACWjH,QAAeS,EAAAyG,iBAAAzG,EAAA0G,6BAa1BC,EAAqC,CACzCC,YAAY,EACZC,WAAY,EACZC,WAAY,OAkBfC,EAAGC,IACDC,UADFF,sBACEE,EAAE,KAAA,UACGpG,IAAoBb,EAAAkH,WAAiBnE,EAAmBoE,UAAS,CAAA,iBAarD,SACT1H,OACHI,iCAZSuH,KAAAtH,EAAA2C,IAAApB,GAAc8B,KAAK6B,OAAOD,EAAC/E,EAAAkE,MAA3B,KACDmD,IAAAvH,EAAA2C,IAAApB,GAAc8B,KAAK6B,OAAOC,EAACjF,EAAAkE,MAA3B,KACEP,MAAA7D,EAAA2C,IAAApB,GAAc8B,KAAKtB,KAAK8B,MAAK3D,EAAAkE,MAA7B,KACCL,OAAA/D,EAAA2C,IAAApB,GAAc8B,KAAKtB,KAAKgC,OAAM7D,EAAAkE,MAA9B,mBACAnC,GAAW,aAAgBnC,MAA0B,8BAC9CmC,GAAW,GAAMrC,QAAoB,sCACtBH,IAAkB,OAAS,wDAEpCsB,GAAuB,OAAS,oBAC7ClB,sBAbhBsH,uGAoBKK,iBAAYjG,GACZkG,SAAQvH,EAAAuH,SACRL,WAAUlH,EAAAkH,WACVhD,MAAKlE,EAAAkE,MACLD,SAAQjE,EAAAiE,SACRL,UAAS5D,EAAA4D,UACTE,WAAU9D,EAAA8D,WACV8B,UAAS5F,EAAA4F,UACT4B,SAAQxH,EAAAwH,2GAGQnG,8JAKXgF,GAAa,EAAOoB,MAAKC,MAAOC,KAAgBC,KAASH,EAAG,CAAAI,EAAAC,KAA5B,IAAgBF,EAAM,IAAA9H,EAAAiI,oBAAAjI,EAAA2C,IAAAqF,GAAA,CAAA,MAAA,qDAEjD,MAAAE,2BAAqBC,mFAC5BC,mBAAcN,EAAM,oCAAmBtG,kCAEvC6G,EAAGC,uBAAHD,EAAG,KAAA,IAAKP,IAAgBF,MAAA,YALGA,sCAK8BpG,IAAY,oBAArE6G,oDAJYF,aAASI,GAAAC,EAAAC,GAAA,mEAFTvH,MAAoBwH,2FAa9BjC,GAAa,EAAOkB,MAAKC,MAAOe,KAAgBC,KAASjB,EAAG,CAAAI,EAAAC,KAA5B,IAAgBY,EAAM,IAAA5I,EAAAiI,oBAAAjI,EAAA2C,IAAAqF,GAAA,CAAA,MAAA,qDAEjD,MAAAE,2BAAqBC,mFAC5BU,mBAAcD,EAAM,oCAAmBhH,kCAEvCkH,EAAGC,uBAAHD,EAAG,KAAA,IAAKF,IAAgBhB,MAAA,YALGA,sCAK8BhG,IAAY,oBAArEkH,oDAJYX,aAASa,GAAAR,EAAAS,GAAA,6DAFTvI,EAAYO,uBAAyBxB,OAAeyJ,aA/CxE/B,YAAAA,EAAE,CAAAgC,EAAAC,WAAAC,OAAAA,OAAAA,EAAAA,EAAAA,6BAAAF,EAAAC,IAAA,MAEkBE,SAAQtJ,EAAA2C,IAAExB,sBAF9BgG,EAAE,gBA0EWM,EAAQ,CAAAM,EAAAwB,KACR,MAAAC,EAASxJ,EAAAgB,QAAA,IA1Fd,SACPqC,EACAoG,UAGEC,SAnBAjH,KAAM,aACN+E,WAAUtH,EAAAI,kBACVwF,UAAS5F,EAAA4F,WAkBT6D,SAAQzJ,EAAAkH,WACR/D,OACAuG,UAAW/C,EACX4C,mBAEJ,CA+E0BI,oBADDxG,wBAAMoG,8DAIf,MAAAK,sCAAuBN,kIAE5BO,EAAgBhC,EAAA/H,EAAAgK,aAAA,IAAAhK,EAAA2C,IAAKmH,GAAOG,0CAD1BH,MAAMI,2JAKmBV,8JArBhCtE,OAAM,CACJD,QAAG1D,GAAc8B,KAAK6B,OAAOD,EAAC/E,EAAAkE,MAC9Be,QAAG5D,GAAc8B,KAAK6B,OAAOC,EAACjF,EAAAkE,OAEhCrC,KAAI,CACF8B,YAAOtC,GAAc8B,KAAKtB,KAAK8B,MAAK3D,EAAAkE,MACpCL,aAAQxC,GAAc8B,KAAKtB,KAAKgC,OAAM7D,EAAAkE,UAR3C+F,EAAAA,cAAYpC,EAAA,+DAaDN,qDAdTf,MAAc0D,aA7DpBnD,cAAAA,UAFO,+DC/OJ,IAAAoD,uBAAU,IAQN,MAAAC,+BAAwC,0FAGzBC,SACpBtD,EAAEuD,uBAAFvD,qBAEqBwD,SAAAvK,EAAAwK,QAAA,qGAIC1K,EAAA2C,IAAA4H,GAAErF,OAAOD,EAAC/E,EAAAmD,KAAQ6B,OAAOD,QAAIsF,GAAErF,OAAOD,GAAC/E,EAAAkE,uBACxCpE,EAAA2C,IAAA4H,GAAErF,OAAOC,EAACjF,EAAAmD,KAAQ6B,OAAOC,QAAIoF,GAAErF,OAAOC,GAACjF,EAAAkE,uBAC7CmG,GAAExI,KAAK8B,MAAK3D,EAAAkE,wBACXmG,GAAExI,KAAKgC,OAAM7D,EAAAkE,4BACVkG,eAEc,iBAAApK,EAAAwK,QAAA,OAAS,OACjBC,OAAAzK,EAAAwK,QAAA,UAAY,UACX,UAAAxK,EAAAwK,QAAA,OAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAO5K,EAAA0H,OAAQmD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,qBAfrFhE,0BAHK,0ECTJ,IAAAoD,uBAAU,IAQN,MAAAC,+BAAwC,WACxCY,gBAAqB,EAAChL,EAAAkE,sFAGP+G,SACpBlE,EAAEuD,uBAAFvD,qBAEqBwD,SAAAvK,EAAAwK,QAAA,qGAIC1K,EAAA2C,IAAAwI,GAAEjG,OAAOD,EAAC/E,EAAAmD,KAAQ6B,OAAOD,QAAIkG,GAAEjG,OAAOD,GAAC/E,EAAAkE,uBACxCpE,EAAA2C,IAAAwI,GAAEjG,OAAOC,EAACjF,EAAAmD,KAAQ6B,OAAOC,QAAIgG,GAAEjG,OAAOC,GAACjF,EAAAkE,uBAC7C+G,GAAEpJ,KAAK8B,MAAK3D,EAAAkE,wBACX+G,GAAEpJ,KAAKgC,OAAM7D,EAAAkE,oCAEI,iBAAAlE,EAAAwK,QAAA,OAAS,OACjBC,OAAAzK,EAAAwK,QAAA,UAAY,UACX,UAAAxK,EAAAwK,QAAA,EAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAO5K,EAAA0H,OAAQmD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAA9D,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAiE,EAAA,sEAKcF,IAAS,wBACNZ,qDAvBrBrD,0BAHK,0ECVJ,IAAAoD,uBAAU,IAQN,MAAAC,+BAAwC,WACxCY,gBAAqB,EAAChL,EAAAkE,sFAGP+G,SACpBlE,EAAEuD,uBAAFvD,qBAEqBwD,SAAAvK,EAAAwK,QAAA,qGAIC1K,EAAA2C,IAAAwI,GAAEjG,OAAOD,EAAC/E,EAAAmD,KAAQ6B,OAAOD,QAAIkG,GAAEjG,OAAOD,GAAC/E,EAAAkE,uBACxCpE,EAAA2C,IAAAwI,GAAEjG,OAAOC,EAACjF,EAAAmD,KAAQ6B,OAAOC,QAAIgG,GAAEjG,OAAOC,GAACjF,EAAAkE,uBAC7C+G,GAAEpJ,KAAK8B,MAAK3D,EAAAkE,wBACX+G,GAAEpJ,KAAKgC,OAAM7D,EAAAkE,oCAEI,iBAAAlE,EAAAwK,QAAA,OAAS,OACjBC,OAAAzK,EAAAwK,QAAA,UAAY,UACX,UAAAxK,EAAAwK,QAAA,EAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAO5K,EAAA0H,OAAQmD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAA9D,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAiE,EAAA,qEAKcF,IAAS,wBACNZ,kFAvBrBrD,0BAHK,0ECVJ,IAAAoD,uBAAU,IAQN,MAAAC,+BAAwC,WACxCe,gBAAqB,EAACnL,EAAAkE,OACtBkH,gBAAkB,EAACpL,EAAAkE,OAEnBmH,EAAGvL,EAAAgB,QAAA,IAAA,kDAAAhB,EAAA2C,IACoD2I,eAA+B,EAAzBtL,EAAA2C,IAAa0I,oBAAarL,EAAA2C,IAAkB2I,MAAsB,EAAhBtL,EAAA2C,IAAI0I,2BACvGrL,EAAA2C,IAAA0I,QAASrL,EAAA2C,IAAM2I,GAAS,OAACtL,EAAA2C,IAAM2I,GAAS,KAACtL,EAAA2C,IAAI0I,QAASrL,EAAA2C,IAAM2I,YAAUD,wCACxDrL,EAAA2C,IAAA2H,2BAAgCe,4CAI1DG,EAAUxL,EAAAgB,QAAA,IAAA,gCAA4CyK,mBAAkBzL,EAAA2C,IAAC4I,wFAG1DJ,SACpBlE,EAAEuD,uBAAFvD,qBAEqBwD,SAAAvK,EAAAwK,QAAA,qGAIC1K,EAAA2C,IAAAwI,GAAEjG,OAAOD,EAAC/E,EAAAmD,KAAQ6B,OAAOD,QAAIkG,GAAEjG,OAAOD,GAAC/E,EAAAkE,uBACxCpE,EAAA2C,IAAAwI,GAAEjG,OAAOC,EAACjF,EAAAmD,KAAQ6B,OAAOC,QAAIgG,GAAEjG,OAAOC,GAACjF,EAAAkE,uBAC7C+G,GAAEpJ,KAAK8B,MAAK3D,EAAAkE,wBACX+G,GAAEpJ,KAAKgC,OAAM7D,EAAAkE,oCAEI,iBAAAlE,EAAAwK,QAAA,OAAS,OACjBC,OAAAzK,EAAAwK,QAAA,UAAY,UACX,UAAAxK,EAAAwK,QAAA,EAAI,kBACjBE,OAAOC,YAAYD,OAAOE,QAAO5K,EAAA0H,OAAQmD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAA9D,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAiE,EAAA,sDAKcrH,OAAY,EAAZ/D,EAAA2C,IAAA0I,GAAA,8BACSG,6DAEAF,IAAM,QAAiB,EAAjBtL,EAAA2C,IAAK0I,yDAzBtCpE,0BAHK,wGClBJ,IAAAoD,uBAAU,GAQN,MAAAC,+BAAwC,WAGxCoB,EAAK1L,EAAAgB,QAAA,IAAAd,EAAAyL,QACDZ,IAAG,EAAIa,aACT,IAAAC,EAAI,WACCC,EAAI,EAAGA,EAAIF,EAAOG,OAAQD,IAAK,CAC9B,MAAA7G,EAAAA,EAAAE,EAAGA,GAAMyG,EAAOE,GAGxBD,IAAY,IAANC,EAAU,IAAM,MAFX7G,EAAC/E,EAAAmD,KAAQ6B,OAAOD,GAEO,KADvBE,EAACjF,EAAAmD,KAAQ6B,OAAOC,GACkB,GAC/C,CACO,OAAA0G,EAAEG,UAIPnI,EAAK7D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAK8B,MAAK3D,EAAAkE,OAChCL,EAAM/D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAKgC,OAAM7D,EAAAkE,WAGzCmH,EAAErE,iBAAFqE,EAAE,GAAA,IAAAvL,EAAA2C,IAQM+I,GAAK1L,EAAAiM,MAAA,CAAAlE,EAAI8D,SACbK,EAAG1B,UAAH0B,EAICC,cAAa,YAAAC,+CAJdF,EAKCG,aAAY,YAAAD,sEALbpM,EAAAsM,cAAAJ,YACEL,IADF7L,EAAAsM,cAAAJ,YAGE7B,mBAHF6B,EAAG,GAAAK,EAAA,CAMyB5B,OAAAzK,EAAAkH,WAAA,OAAS,UACD,iBAAAlH,EAAAkH,WAAA,OAAS,6BAC9BkD,kGARf4B,aATJX,wCAAAA,EAAE,2EAAAH,EAAA,CAAAvH,MAAA,GAAA7D,EAAA2C,IAEekB,OAAKE,OAAA,GAAA/D,EAAA2C,IACJoB,SAHlB/D,EAAAsM,cAAAf,gBAIE1H,IAJF7D,EAAAsM,cAAAf,iBAKExH,IALF/D,EAAAsM,cAAAf,0BAMsBxJ,KAAK8B,SAAK3D,EAAAmD,KAAStB,KAAKgC,uBAN9CwH,UAFO,oHCxBJ,IAAA5J,qBAAQ,WAER0I,uBAAU,GAEVmC,EAAWxM,EAAAyM,KAAAvM,EAAA,cAAA,GAAA,IAAGwM,EAAAA,yBAAyBC,OAQS,MAAAC,EAAA5M,EAAAgB,QAAA,WAC1C6L,EAAM3M,EAAAmD,KAAQtB,KAAK8B,MACnBiJ,EAAM5M,EAAAmD,KAAQtB,KAAKgC,cAIvBF,MAHakJ,KAAKC,IAAIH,gBAAsB,GAI5C9I,OAHagJ,KAAKC,IAAIF,gBAAsB,GAI5C7H,gBAAiB,EACjBE,gBAAiB,KATbtB,yBAAAA,OAAOE,yBAAAA,QAAQkB,yBAAAA,GAAGE,yBAAAA,GAapB8H,uBAAqBpJ,GAAK3D,EAAAgN,aAAAhN,EAAAkE,OAC1B+I,uBAAsBpJ,GAAM7D,EAAAgN,aAAAhN,EAAAkE,OAE5BgJ,EAAIpN,EAAAgB,QAAA,WACR,OAAAwL,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAA5L,IAAA6L,sBAAA,EAAA7L,EAAoB8L,KAAK,UAAO,QAIlFhC,EAAErE,UAQA,IAAAsG,UARFjC,SAQEiC,EAOCrB,cAAa,YAAAC,+CAPdoB,EAQCnB,aAAY,YAAAD,uDAhBfb,wCAAAA,EAAE,wDAAAH,EAAA,gBAEe6B,uBACCE,SAHlBnN,EAAAsM,cAAAf,gBAIQ0B,IAJRjN,EAAAsM,cAAAf,iBAKS4B,oBALT5B,EAAE,UAAA,OAAAvL,EAAA2C,IAMekB,GAAK3D,EAAAgN,eAAAlN,EAAA2C,IAAkBoB,GAAM7D,EAAAgN,eAE5ClN,EAAAsM,cAAAkB,YACEvI,IADFjF,EAAAsM,cAAAkB,YAEErI,IAFFnF,EAAAsM,cAAAkB,gBAGE3J,IAHF7D,EAAAsM,cAAAkB,iBAIEzJ,IAJF/D,EAAAsM,cAAAkB,SAKO7L,KALP3B,EAAAsM,cAAAkB,YAMEnD,mBANFmD,EAAG,GAAAjB,EAAA,CASyB5B,OAAAzK,EAAAkH,WAAA,OAAS,wCAEhC,OACU,gBAAVzF,IACE,gBACA,gCACuBA,0DAELyL,kBAzB3B7B,UAFO,0HCvBJ,IAAA5J,qBAAQ,WAER0I,uBAAU,GAEVmC,EAAWxM,EAAAyM,KAAAvM,EAAA,cAAA,GAAA,IAAGwM,EAAAA,yBAAyBC,OAOmB,MAAAC,EAAA5M,EAAAgB,QAAA,WAEpD6L,EAAM3M,EAAAmD,KAAQtB,KAAK8B,MACnBiJ,EAAM5M,EAAAmD,KAAQtB,KAAKgC,OAGnB0J,EAASV,KAAKC,IAAIH,gBAAsB,GACxCa,EAASX,KAAKC,IAAIF,gBAAsB,UAG5CjJ,MAAOgJ,EACP9I,OAAQ+I,EAERa,GAAEzN,EAAAgN,YAAgB,EAAIO,EAAS,EAC/BG,GAAE1N,EAAAgN,YAAgB,EAAIQ,EAAS,EAC/BG,GAAIJ,EAAS,EACbK,GAAIJ,EAAS,KAhBT7J,yBAAAA,OAAOE,yBAAAA,QAAQ4J,yBAAAA,IAAIC,yBAAAA,IAAIC,yBAAAA,IAAIC,yBAAAA,IAoB/B,IAAAb,sBAAoBpJ,GAAK3D,EAAAkE,OACzB+I,sBAAqBpJ,GAAM7D,EAAAkE,OAE3B2J,EAAO/N,EAAAgB,QAAA,IAAAd,EAAAkH,WACI,OAAmB,gBAAVzF,IAA0B,gBAAkB,eAIrE4J,EAAErE,UAUA,IAAA8G,UAVFzC,SAUEyC,EAOC7B,cAAgB8B,qDAAgBA,IAPjCD,EAQC3B,aAAe4B,qDAAgBA,YAlBlC1C,yBAAAvL,EAAAsM,cAAAf,mBAME0B,IANFjN,EAAAsM,cAAAf,oBAOE4B,oBAPF5B,EAAE,UAAA,OAAAvL,EAAA2C,IAQekB,MAAK7D,EAAA2C,IAAIoB,oBAR1BwH,EAAE,GAAAH,EAAA,oCAEe6B,uBACCE,+CAOhBnN,EAAAsM,cAAA0B,aACEL,IADF3N,EAAAsM,cAAA0B,aAEEJ,IAFF5N,EAAAsM,cAAA0B,aAGEH,IAHF7N,EAAAsM,cAAA0B,aAIEF,IAJF9N,EAAAsM,cAAA0B,SAKOrM,KALP3B,EAAAsM,cAAA0B,YAME3D,KANFrK,EAAAsM,cAAA0B,yBAUiBD,IAVjB/N,EAAAsM,cAAA0B,0BAWwBrM,qBAXxBqM,EAAM,eAAA9N,EAAAgN,6BAANc,EAAM,mBAAAE,iBAANF,EAAM,GAAAzB,EAAA,CAAA5B,OAAAzK,EAAAkH,WASsB,OAAS,yBAIlB,OAAAoF,MAAgBE,EAAAA,yBAAyBW,4CACtCE,KAAK,UACtB,gBAzBPhC,UAFO,sLC3CJ,IAAA5J,qBAAQ,eACR0I,uBAAU,GAEV8D,2BAAc,WACd3B,EAAWxM,EAAAyM,KAAAvM,EAAA,cAAA,GAAA,IAAGwM,EAAAA,yBAAyBC,OAWnC,MAAAyB,6BAAyBC,MAAMpJ,EAAC/E,EAAAmD,KAAQ6B,OAAOD,GAC/CqJ,6BAAyBD,MAAMlJ,EAACjF,EAAAmD,KAAQ6B,OAAOC,GAC/CoJ,6BAAyBC,IAAIvJ,EAAC/E,EAAAmD,KAAQ6B,OAAOD,GAC7CwJ,6BAAyBD,IAAIrJ,EAACjF,EAAAmD,KAAQ6B,OAAOC,GAG7CuJ,EAAO1O,EAAAgB,QAAA,mBACL2N,EAAQ5B,KAAK6B,MAAK5O,EAAA2C,IAAC8L,GAAEzO,EAAA2C,IAAG2L,GAAEtO,EAAA2C,IAAE4L,GAAEvO,EAAA2C,IAAGyL,WAErCC,MAAOQ,EAAAA,SAASC,8CAA0BT,MAAKnO,EAAAgN,YAAeyB,EAAQ5B,KAAKgC,GAAE/O,EAAA2C,IAAEyL,SAAIE,IACnFE,IAAKK,EAAAA,SAASC,aAAY,OAAApJ,EAAAxF,EAAA8O,sBAAcR,IAAGtO,EAAAgN,YAAeyB,EAAK3O,EAAA2C,IAAE4L,GAAEvO,EAAA2C,IAAE8L,OAKnE5K,EAAK7D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAK8B,MAAK3D,EAAAkE,OAChCL,EAAM/D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAKgC,OAAM7D,EAAAkE,OAGlCgJ,EAAIpN,EAAAgB,QAAA,WACR,OAAAwL,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAA5L,IAAA6L,sBAAA,EAAA7L,EAAoB8L,KAAK,UAAO,QAIlFhC,EAAErE,UASA,IAAA+H,UATF1D,SASE0D,EAMC9C,cAAa,YAAAC,+CANd6C,EAOC5C,aAAY,YAAAD,+DAPb6C,aAkBE/C,EAAG1B,UAAH0B,EAGCC,cAAa,YAAAC,+CAHdF,EAICG,aAAY,YAAAD,sEAJbpM,EAAAsM,cAAAJ,EAAG,IAAAlM,EAAA2C,IACC+L,GAAQL,MAAMxC,GADlB7L,EAAAsM,cAAAJ,EAAG,YAAAlM,EAAA2C,IAES+L,GAAQL,MAAMa,WAF1BlP,EAAAsM,cAAAJ,WAKSiC,qBALTjC,EAAG,OAAAlM,EAAA2C,IAeI+L,GAAQL,MAAMc,OAASxN,IAAQ,sBAftCuK,EAAG,GAAAkD,EAAA,CAMyBzE,OAAAzK,EAAAkH,WAAA,OAAS,6FAIhC,OACApH,EAAA2C,IAAA+L,GAAQL,MAAMc,OACZ,UACA,yCACkB/B,kBAdzBlB,eADElM,EAAA2C,IAAA+L,GAAQL,SAAKgB,kCAqBfC,EAAGC,UAAHD,EAICnD,cAAa,YAAAC,+CAJdkD,EAKCjD,aAAY,YAAAD,sEALbpM,EAAAsM,cAAAgD,EAAG,IAAAtP,EAAA2C,IACC+L,GAAQF,IAAI3C,GADhB7L,EAAAsM,cAAAgD,EAAG,YAAAtP,EAAA2C,IAES+L,GAAQF,IAAIU,WAFxBlP,EAAAsM,cAAAgD,WAGSnB,qBAHTmB,EAAG,OAAAtP,EAAA2C,IAWI+L,GAAQF,IAAIW,OAASxN,IAAQ,sBAXpC2N,EAAG,GAAAE,EAAA,CAMyB7E,OAAAzK,EAAAkH,WAAA,OAAS,6FAGD,OAASpH,EAAA2C,IAAA+L,GAAQF,IAAIW,OAAS,UAAY,yCACrD/B,kBAVzBkC,eADEtP,EAAA2C,IAAA+L,GAAQF,OAAGjG,aA9CjBgD,wCAAAA,EAAE,2EAAAH,EAAA,CAAAvH,MAAA,GAAA7D,EAAA2C,IAEekB,OAAKE,OAAA,GAAA/D,EAAA2C,IACJoB,SAHlB/D,EAAAsM,cAAAf,gBAIE1H,IAJF7D,EAAAsM,cAAAf,iBAKExH,IALF/D,EAAAsM,cAAAf,0BAMsBxJ,KAAK8B,SAAK3D,EAAAmD,KAAStB,KAAKgC,UAG5C/D,EAAAsM,cAAA2C,aACEb,IADFpO,EAAAsM,cAAA2C,aAEEX,IAFFtO,EAAAsM,cAAA2C,aAGEV,IAHFvO,EAAAsM,cAAA2C,aAIER,IAJFzO,EAAAsM,cAAA2C,YAKE5E,mBALF4E,EAAG,GAAA1C,EAAA,CAQyB5B,OAAAzK,EAAAkH,WAAA,OAAS,UACD,iBAAAlH,EAAAkH,WAAA,OAAS,uBAC9B+G,kFAGUf,kBAtB3B7B,UAFO,sLCrCJ,IAAA5J,qBAAQ,eACRwM,2BAAc,WACd9D,uBAAU,SASNoF,EAAQzP,EAAAgB,QAAA,IAAAd,EAAAoD,SACHyH,IAAG,EAAI9F,IAAGE,QAAC,CAAUF,EAAGA,SAASC,OAAOD,EAAGE,EAAGA,EAACjF,EAAAmD,KAAQ6B,OAAOC,MAInEuK,EAAQ1P,EAAAgB,QAAA,eACPyO,GAAS1D,OAAM,MAAS,SACtB4D,KAAUC,GAAI5P,EAAA2C,IAAI8M,cAElBE,EAAM1K,KAAK0K,EAAMxK,KACtByK,EACG7E,IAAK8E,QAAWA,EAAE5K,KAAK4K,EAAE1K,MACzBoI,KAAK,IACLvB,SAKD0C,EAAO1O,EAAAgB,QAAA,sBACPyO,GAAS1D,OAAS,EAAC,MAAA,CAAWsC,MAAO,KAAaG,IAAK,YACrDsB,EAAO,CAAIC,EAAaxF,IAAgBwC,KAAK6B,MAAMrE,EAAEpF,EAAI4K,EAAE5K,EAAGoF,EAAEtF,EAAI8K,EAAE9K,GAEtE+K,EAAWF,EAAO9P,EAAA2C,IAAC8M,GAAS,GAACzP,EAAA2C,IAAG8M,GAAS,IACzCQ,EAASH,EAAO9P,EAAA2C,IAAC8M,SAASA,GAAS1D,OAAS,GAAC/L,EAAA2C,IAAG8M,GAAQzP,EAAA2C,IAAC8M,GAAS1D,OAAS,IAgBxE,MAAA,CAAAsC,MAdKQ,EAAAA,SAASC,8CACRT,oBAEb2B,EAAWjD,KAAKgC,SAChBU,GAAS,GAAGxK,QACZwK,GAAS,GAAGtK,GASEqJ,IAPJK,EAAAA,SAASC,8CACNN,kBAEbyB,EACAjQ,EAAA2C,IAAA8M,SAASA,GAAS1D,OAAS,GAAG9G,EAC9BjF,EAAA2C,IAAA8M,SAASA,GAAS1D,OAAS,GAAG5G,MAK5BtB,EAAK7D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAK8B,MAAK3D,EAAAkE,OAChCL,EAAM/D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAKgC,OAAM7D,EAAAkE,WAGzCmH,EAAErE,UAQA,IAAAgF,UARFX,SAQEW,EAECC,cAAa,YAAAC,+CAFdF,EAGCG,aAAY,YAAAD,+DAHbF,aAeEoD,EAAG9E,UAAH8E,EAKCnD,cAAa,YAAAC,+CALdkD,EAMCjD,aAAY,YAAAD,sEANbpM,EAAAsM,cAAAgD,EAAG,IAAAtP,EAAA2C,IACC+L,GAAQL,MAAMxC,GADlB7L,EAAAsM,cAAAgD,EAAG,YAAAtP,EAAA2C,IAES+L,GAAQL,MAAMa,WAF1BlP,EAAAsM,cAAAgD,WAGSnB,qBAHTmB,EAAG,OAAAtP,EAAA2C,IAII+L,GAAQL,MAAMc,OAASxN,IAAQ,sBAJtC2N,EAAG,GAAAF,EAAA,CAOyBzE,OAAAzK,EAAAkH,WAAA,OAAS,qEAGhC,OACApH,EAAA2C,IAAA+L,GAAQL,MAAMc,OACZ,UACA,uDAbPG,eADEtP,EAAA2C,IAAA+L,GAAQL,SAAKgB,kCAoBfa,EAAGX,UAAHW,EAKC/D,cAAa,YAAAC,+CALd8D,EAMC7D,aAAY,YAAAD,sEANbpM,EAAAsM,cAAA4D,EAAG,IAAAlQ,EAAA2C,IACC+L,GAAQF,IAAI3C,GADhB7L,EAAAsM,cAAA4D,EAAG,YAAAlQ,EAAA2C,IAES+L,GAAQF,IAAIU,WAFxBlP,EAAAsM,cAAA4D,WAGS/B,qBAHT+B,EAAG,OAAAlQ,EAAA2C,IAII+L,GAAQF,IAAIW,OAASxN,IAAQ,sBAJpCuO,EAAG,GAAAV,EAAA,CAOyB7E,OAAAzK,EAAAkH,WAAA,OAAS,qEAED,OAASpH,EAAA2C,IAAA+L,GAAQF,IAAIW,OAAS,UAAY,uDAT9Ee,eADElQ,EAAA2C,IAAA+L,GAAQF,OAAGjG,aAzCjBgD,wCAAAA,EAAE,8GAAAH,EAAA,CAAA,MAAA,GAAApL,EAAA2C,IAEakB,OAAK,MAAA,GAAA7D,EAAA2C,IACLoB,SAHf/D,EAAAsM,cAAAf,gBAIE1H,IAJF7D,EAAAsM,cAAAf,iBAKExH,IALF/D,EAAAsM,cAAAf,0BAMsBxJ,KAAK8B,SAAK3D,EAAAmD,KAAStB,KAAKgC,UAE5C/D,EAAAsM,cAAAJ,YACIwD,IADJ1P,EAAAsM,cAAAJ,YAIE7B,mBAJF6B,EAAG,GAAAK,EAAA,aAMY4D,OAAAhC,KAAexM,iCAEFgJ,OAAAzK,EAAAkH,WAAA,OAAS,UACD,iBAAAlH,EAAAkH,WAAA,OAAS,iFAjB/CmE,UAFO,kMCpDJ,IAAA5J,qBAAQ,eACRwM,2BAAc,WACd9D,uBAAU,GAEVmC,EAAWxM,EAAAyM,KAAAvM,EAAA,cAAA,GAAA,IAAGwM,EAAAA,yBAAyBC,OAMvC1G,0BAAa,UAITmK,EAASpQ,EAAAgB,QAAA,IAAAd,EAAAmQ,0DAGTZ,EAAQzP,EAAAgB,QAAA,IAAAhB,EAAA2C,IACZyN,GAAUrF,MAAO9F,IAAGE,QAAC,CAAUF,EAAGA,EAAC/E,EAAAmD,KAAQ6B,OAAOD,EAAGE,EAAGA,EAACjF,EAAAmD,KAAQ6B,OAAOC,MAIpEuK,EAAQ1P,EAAAgB,QAAA,eACPyO,GAAS1D,OAAM,MAAS,SACtB4D,KAAUC,GAAI5P,EAAA2C,IAAI8M,GACnBa,IAASpQ,EAAAmQ,cAER,OAAA,KAAAV,EAAM1K,KAAK0K,EAAMxK,KACtByK,EAAK7E,IAAK8E,QAAWA,EAAE5K,KAAK4K,EAAE1K,KAAKoI,KAAK,MACvC+C,EAAY,GAAK,OAClBtE,SAGEuE,EAAYvQ,EAAAgB,QAAA,MAAAd,EAAAmQ,eAAAnQ,EAAAoD,SAAwCyI,OAAS,GAE7DlI,EAAK7D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAK8B,MAAK3D,EAAAkE,OAChCL,EAAM/D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAKgC,OAAM7D,EAAAkE,OAElCgJ,EAAIpN,EAAAgB,QAAA,WACR,OAAAwL,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAA5L,IAAA6L,sBAAA,EAAA7L,EAAoB8L,KAAK,UAAO,QAIlFhC,EAAErE,UAQA,IAAAgF,UARFX,SAQEW,EAECC,cAAa,YAAAC,+CAFdF,EAGCG,aAAY,YAAAD,+DAHbF,aAqBEoD,EAAG9E,iCAAHxK,EAAAsM,cAAAgD,EAAG,IAAA,KAAAtP,EAAA2C,IACM8M,GAAQzP,EAAA2C,IAAC8M,GAAS1D,OAAS,GAAG9G,KAACjF,EAAA2C,IAAI8M,SAASA,GAAS1D,OAAS,GAAG5G,OAACnF,EAAA2C,IAAM8M,GAAS,GAAGxK,KAACjF,EAAA2C,IAAI8M,GAAS,GAAGtK,mBAD9GmK,EAAG,GAAAF,EAAA,QAGYjB,oDAEU,cACT,kBANhBmB,qBADEiB,IAAYrQ,EAAAoD,SAAayI,OAAS,GAACvD,EAAA6G,kCAYrC7B,EAAG+B,IAAHvP,EAAAsM,cAAAkB,YAMU,2CANVA,EAAG,IAAAxN,EAAA2C,IACC8M,GAAS,GAAGxK,EAAIgB,IAAU/F,EAAAkE,MAAW,mBADzCoJ,EAAG,IAAAxN,EAAA2C,IAEC8M,GAAS,GAAGtK,EAAIc,IAAU/F,EAAAkE,MAAW,GAFzCpE,EAAAsM,cAAAkB,UAGQvH,IAAU/F,EAAAkE,OAHlBpE,EAAAsM,cAAAkB,WAISvH,IAAU/F,EAAAkE,OAJnBpE,EAAAsM,cAAAkB,SAKOW,KALPnO,EAAAsM,cAAAkB,WAOSW,KAPTnO,EAAAsM,cAAAkB,+BAQ6B,gBAR7BA,qBADE+C,IAAYrQ,EAAAoD,SAAayI,QAAU,GAACvD,EAAAD,aAvC1CgD,wCAAAA,EAAE,2EAAAH,EAAA,CAAAvH,MAAA,GAAA7D,EAAA2C,IAEekB,OAAKE,OAAA,GAAA/D,EAAA2C,IACJoB,SAHlB/D,EAAAsM,cAAAf,gBAIE1H,IAJF7D,EAAAsM,cAAAf,iBAKExH,IALF/D,EAAAsM,cAAAf,0BAMsBxJ,KAAK8B,SAAK3D,EAAAmD,KAAStB,KAAKgC,UAE5C/D,EAAAsM,cAAAJ,YACIwD,IADJ1P,EAAAsM,cAAAJ,YAIE7B,mBAJF6B,EAAG,GAAAK,EAAA,CAK0BiE,KAAAtQ,EAAAmQ,cAAA,OAAS1O,IACvBwO,OAAAhC,KAAexM,iCAEFgJ,OAAAzK,EAAAkH,WAAA,OAAS,wCAEhC,OACU,gBAAVzF,IACE,gBACA,qFAGkByL,kBAxB3B7B,UAFO,mICvCA,MAAA/K,EAAuBrB,IAGvBiC,EAAkBpB,EAAAgB,QAAA,IACtBR,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAU,YAAe,MAItF,IAAA6P,EAAoC,KACpCC,EAAQ1Q,EAAAI,OAAO,GAGnBJ,EAAAkC,YAAO,6BACcuO,EAAS,OAC5BA,EAAUE,cAEJC,EAAY,OAAAnP,SAAOoP,mBAAP,EAAApP,EAAAqP,KAAAC,YACbH,EAAS,aAERI,EAAQC,SAASC,cACvBF,EAAMG,mBAAmBV,GACzBO,EAAMI,UAAS,GACfR,EAAUS,kBACVT,EAAUU,SAASN,KAIrBhR,EAAAuR,gBAAW,KACL,IACI,MAAAC,EAAMC,UACNC,EACJ,mBAAmBC,KAAKF,UAAUG,YACV,aAAvBH,UAAUI,WAA2B,MAAAL,OAAA,EAAAA,EAAKM,gBAAiB,EAC9D9R,EAAAmC,IAAAuO,EAAQgB,GAAG,EACb,CAAA,MACE1R,EAAAmC,IAAAuO,GAAQ,EACV,UAYIqB,EAAc/R,EAAAgB,QAAA,IAAAd,EAAAsH,WAAuBjH,OAAOyR,SAAQ9R,EAAAkE,OAEpD6N,EAASjS,EAAAgB,QAAA,IAAAhB,EAAA2C,IACb+N,IAAKxQ,EAAAgS,WAAAlS,EAAA2C,IAAiBoP,GAAiB,GAAC/R,EAAA2C,IAAIoP,GAFhB,IAIxBI,EAAcnS,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAYsP,GAJF,SAIsCF,IAC9DK,sBAAqBH,GAASjS,EAAA2C,IAAGoP,GALT,GAKkD,GAC1EM,sBAA2BJ,GAAY,IAAGjS,EAAA2C,IAAGyP,GAAY,KAGzDvF,6BAA6BtM,OAAO8C,KAAKtB,KAAK8B,MAAK3D,EAAAkE,OACnD0I,6BAA6BvM,OAAO8C,KAAKtB,KAAKgC,OAAM7D,EAAAkE,OAEpDkO,6BACO/R,OAAOgS,gBAAkBC,uBAAqBC,IACrD,0BACWlS,OAAOgS,gBAAkBC,EAAAA,qBAAqBE,OACvD,SACA,gBAKTzL,EAAEC,UAAFD,EAOCkF,cAAa,YAAAC,+CAPdnF,EAQCoF,aAAY,YAAAD,+CAGX,IAAAuG,UAXF1L,uBAWE0L,GAAG,WAAHA,eAAAA,EAAGC,GACSnC,EAASmC,EAAA,IAATnC,WAZdxJ,uCAAAA,EAAE,GAAAmE,EAAA,oCAEeyB,uBACCC,iBACF,EAC0BnC,OAAAzK,EAAAkH,aAAAlH,EAAAgS,UAAA,OAAS,UACD,iBAAAhS,EAAAkH,aAAAlH,EAAAgS,UAAA,OAAS,yBAKzDS,EAAG,kBAAAzS,EAAAgS,yBAAHS,EAAG,GAAApG,EAAA2B,GAqB4ClO,EAAA6S,SAAAC,EAAA5S,EAAAsH,WAAAjH,OAAOwS,mFAd9BT,GACC3Q,MAAAzB,EAAAsH,WAAAjH,OAAOyS,+BACXb,qBACDc,EAAAA,gBAAe/S,EAAAsH,WAAYjH,OAAO2S,yBACnCC,EAAAA,mBAAkBjT,EAAAsH,WAAYjH,OAAO6S,WACpB,mBAAAlT,EAAAsH,WAAAjH,OAAOoB,OAAKzB,EAAAsH,WAAejH,OAAO8S,gBAC3ChJ,QAAAnK,EAAAsH,WAAAjH,OAAO8J,oBACpB4H,GAAS,GAAAjS,EAAA2C,IAAM0P,MAAqB,oBACnCJ,GAAS,GAAAjS,EAAA2C,IAAM0P,MAAqB,8CAGxB1H,OAAAzK,EAAAgS,UAAA,OAAS,yCAElBD,GAAS,SAAAjS,EAAA2C,IAAYyP,WAAe,oCApBtDpS,EAAAsC,MAAA,OAAAqQ,EA1CQ,WACF3S,EAAA2C,IAAAvB,IAAuBqP,SAC5BrP,GAAmByE,iBAAgB3F,EAAA4F,UAAA5F,EAAAsH,WAAuBjH,OAAOjB,GAAE,CACjEyT,SAAUtC,EAAU6C,WAExB,cA0BDrM,UAHO,mGC5EJ,IAAAsM,2BAAc,GAEXxT,EAAQC,EAAAC,WAAAC,EAAA,+FAGP,MAAAM,EAAuBrB,QAEzBqU,EAAWxT,EAAAI,MAAsB,MACjCqT,EAAwB,KAEkB,MAAA7G,EAAA5M,EAAAgB,QAAA,IAAAd,EAAAsH,WAAAnE,KAAKtB,6BAA3C8B,8BAAOE,cAGT3C,EAAkBpB,EAAAgB,QAAA,IACtBR,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAU,YAAe,MAmCjF,SAAA8S,IACHD,IACFE,IAAIC,gBAAgBH,GACpBA,EAAS,KAEb,CApCAzT,EAAAkC,YAAO,KACD,GAAAlC,EAAA2C,IAAAvB,GAAoB,OAChByS,EAAI7T,EAAA2C,IAAGvB,GAAmB0S,iBAAgB,CAC9ChO,UAAS5F,EAAA4F,UACT0B,WAAY5B,EAAAA,UAAS1F,EAAAsH,YACrBuM,QAAO,CACLR,YAAAA,IACAS,IAAKjD,OAAOkD,oBAUH,OANbJ,EAAKK,KAAMC,IACH,MAAAC,EAAMT,IAAIU,gBAAgBF,GAChCnU,EAAAmC,IAAAqR,EAAWY,GAAG,GACdX,EAASW,GACRE,EAAAA,QAEU,KACPb,GACFE,IAAIC,gBAAgBH,GACpBA,EAAS,MAETI,EAAKU,MAAK,CACRC,KAAMC,EAAAA,aAAaC,UACnBC,QAAS,yBAIjB,mDAYDC,EAAEpK,uBAAFoK,EAAE,KAAA,kBAEIpB,UACGE,KACJ3T,0FAJL6U,cAAAA,qBADEpB,MAAQnE,0BAFL,sEC1DFwF,EAAc7U,EAAAgB,QAAA,KAAA,iBAA4BT,OAAQjB,GAAEY,EAAAsH,WAAajH,OAAOjB,UAG7E2H,EAAEC,UAAFD,EAICkF,cAAa,YAAAC,+CAJdnF,EAKCoF,aAAY,YAAAD,+CAEX0I,UAPF7N,GAOkB,yGAAsC4N,gDAPxD5N,uCAAAA,EAAE,6DAAAmE,EAAA,CAEkC,iBAAAlL,EAAAkH,WAAA,OAAS,sCAF7CH,UAFO,yNCSJ,IAAAkH,2BAAc,WACdjB,2BAAc,GACdV,EAAWxM,EAAAyM,KAAAvM,EAAA,cAAA,GAAA,IAAGwM,EAAAA,yBAAyBqI,WAKvCC,uBAAS,SAGLnR,EAAK7D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAK8B,OAC3BE,EAAM/D,EAAAgB,QAAA,IAAAd,EAAAmD,KAAiBtB,KAAKgC,QAC5BkJ,sBAAoBpJ,GAAK3D,EAAAkE,OACzB+I,sBAAqBpJ,GAAM7D,EAAAkE,OAG3B6Q,EAASjV,EAAAgB,QAAA,WACT,GAAAwL,MAAgBE,EAAAA,yBAAyBW,OACnB,OAAA,OAAA5L,EAAAvB,EAAAoN,sBAAA,EAAA7L,EAAA8L,KAAK,OAAG,GAAsB,EAAdL,OAAmBA,QAOzDgI,EAAWlV,EAAAgB,QAAA,IAAYwL,MAAgBE,EAAAA,yBAAyBqI,WAEhEI,gBAAyBH,IAAS,UAAS9U,EAAAkH,WAAgB,OAAS,WACpEgO,gBAAgCJ,KAAe9U,EAAAkH,WAAN,OAA+B,eAG/EmE,EAAErE,UAUA,IAAAsG,UAVFjC,SAUEvL,EAAAsM,cAAAkB,MACI,GADJxN,EAAAsM,cAAAkB,MAEI,GAFJA,EAMCrB,cAAa,YAAAC,SAAE,OAAA3K,WAAS,EAASvB,EAAAwK,UAAlBjJ,EAAkB4T,MAAAC,KAAAlJ,IANlCoB,EAOCnB,aAAY,YAAAD,SAAE,OAAA3K,WAAS,EAASvB,EAAAwK,UAAlBjJ,EAAkB4T,MAAAC,KAAAlJ,oBAPjCoB,aAcEyB,EAAGzE,IAAHxK,EAAAsM,cAAA2C,OACK,eADLA,EAAG,GAAA,CAAA,EAAA,CAAA,iBAAA,gDAAHA,EAAG,KAAAjP,EAAA2C,IAEEoB,GAAS,mBAFdkL,EAAG,KAAAjP,EAAA2C,IAGEkB,GAAQ,mBAHboL,EAAG,KAAAjP,EAAA2C,IAIEoB,GAAS,GAJd/D,EAAAsM,cAAA2C,WAKSd,KALTnO,EAAAsM,cAAA2C,iBAMe/B,KANflN,EAAAsM,cAAA2C,2BAOmBgG,iBAPnBhG,cAYAsG,EAAGhG,gBAAHgG,EAAG,GAAA,CAAA,EAAA,CAAA,iBAAA,mDAAHA,EAAG,IACCrI,IAAc,mBADlBqI,EAAG,IAECrI,IAAc,mBAFlBqI,EAAG,QAAArH,mBAAHqH,EAAG,SAAAC,GAAHxV,EAAAsM,cAAAiJ,WAMSpH,KANTnO,EAAAsM,cAAAiJ,iBAOerI,KAPflN,EAAAsM,cAAAiJ,2BAQmBN,MALX,IAAAlI,KAAKC,IAAGhN,EAAA2C,IAACkB,GAAQqJ,IAAa,GAC7B,IAAAH,KAAKC,IAAGhN,EAAA2C,IAACoB,GAASmJ,IAAa,gBAJxCqI,qBAdEL,KAAW7F,GAAA7G,EAAAiN,GAAA,aAtBjBlK,wCAAAA,EAAE,wDAAAH,EAAA,gBAEa6B,IAAQ,uBACPE,IAAS,SAHzBnN,EAAAsM,cAAAf,gBAIQ0B,IAJRjN,EAAAsM,cAAAf,iBAKS4B,oBALT5B,EAAE,UAAA,OAAAvL,EAAA2C,IAMakB,IAAK,MAAA7D,EAAA2C,IAAGoB,IAAM,MAI3B/D,EAAAsM,cAAAkB,gBAGE3J,IAHF7D,EAAAsM,cAAAkB,iBAIEzJ,kBAJFyJ,EAAG,GAAAjB,EAAA,cAQY4I,0BACQC,kBAnBzB7J,UAFO,4MCCJ,IAAAzL,qCAAwB,WACxBF,6BAAgB,GAChBC,sBAAS,KAKL,MAAAY,EAAmBlB,QACrBmW,EAAc1V,EAAAI,MAAoB,MAClCuV,EAAgB3V,EAAAI,OAAO,GACvBwV,EAAgB5V,EAAAI,OAAO,GAGlB,SAAAyV,UACDC,EAAK5V,EAAA6V,oBAAuBhL,IAAKiL,GAAOA,EAAGzV,OAAO8C,MACjD,OAAA4S,EAAAA,oBAAoBH,EAC7B,CAGM,MAAAI,YAAuBL,OAGzBM,EAAkBnW,EAAAI,MAAMJ,EAAAK,MAAOwV,MAGnC7V,EAAAkC,YAAO,eACAyT,KAAa3V,EAAA2C,IAAKiT,GAAe,CAC9B,MAAAQ,QAASF,SAGbC,GAAgBjR,OAAOD,IAAMmR,EAAOlR,OAAOD,SAC3CkR,GAAgBjR,OAAOC,IAAMiR,EAAOlR,OAAOC,GAACnF,EAAA2C,IAC5CwT,GAAgBpU,KAAK8B,QAAUuS,EAAOrU,KAAK8B,OAAK7D,EAAA2C,IAChDwT,GAAgBpU,KAAKgC,SAAWqS,EAAOrU,KAAKgC,QAE5C/D,EAAAmC,IAAAgU,EAAkBC,GAAM,EAE5B,UAII5U,EAAYxB,EAAAgB,QAAA,WAAA,OAAA,OAAAS,EAAAvB,EAAAwB,mBAAsBC,QAAS,YAC3CG,EAAW9B,EAAAgB,QAAA,WAAA,OAAA,OAAAS,EAAAvB,EAAAwB,mBAAsBK,OAAQ,KAGzCkB,EAAqBC,EAAAA,sBAAqB,KAAA,CAC9CC,WAAU,CACRC,cAAS+S,GACT1S,YAAW,CACTC,SAAU,GACVC,UAAW,GACXC,YAAW,CAAIC,MAAK3D,EAAA4D,UAAaC,OAAM7D,EAAA8D,aAEzCC,qBAAqB,EACrBC,aAAYhE,EAAAiE,SACZC,MAAKlE,EAAAkE,MACLC,SAAS,EACTC,SAAWhC,iBACJ,OAAAb,EAAAa,EAAMiC,oBAAN,EAAA9C,EAAqBgB,MAAI,OACzB,IAAAhC,EAAiB2B,OAAM,aAEtBA,EAAS3B,EAAiB2B,OAC1BiU,EAAgB/T,EAAMiC,cAAc9B,KACpC6T,EAA2B,SAAlBD,EACTE,EAA6B,WAAlBF,KAGbC,IAAMpW,EAAAsW,YAAA,OAEU,UAAhBlU,EAAMlC,QACRJ,EAAAmC,IAAAuT,EAAcG,KAAW,GAErBS,GACFtW,EAAAmC,IAAAwT,GAAgB,GAEhBvT,EAAOuC,UAASzE,EAAAU,WAAA,CACdgE,cAAa1E,EAAA6V,oBAAsBhL,IAAKiL,GAAOA,EAAGzV,OAAOjB,IACzDoF,SAAQ,CAAIb,MAAK3D,EAAA4D,UAAaC,OAAM7D,EAAA8D,eAE7BuS,IACTvW,EAAAmC,IAAAyT,GAAgB,GAEhBxT,EAAOyC,YAAW3E,EAAAU,WAAA,CAChBgE,cAAa1E,EAAA6V,oBAAsBhL,IAAKiL,GAAOA,EAAGzV,OAAOjB,IACzDoF,SAAQ,CAAIb,MAAK3D,EAAA4D,UAAaC,OAAM7D,EAAA8D,YACpCc,cAAc,OAAAY,EAAApD,EAAMiC,cAAcE,mBAAUM,SAAU,eAKtDO,EAAItF,EAAA2C,IAAG+S,IAAeG,OAExBS,GAAUhU,EAAMiC,cAAcC,QAAQnB,KAAM,CAExC,MAAAoT,EAAUnU,EAAMiC,cAAcC,QAAQnB,KACtCqT,EAAQ,CACZzR,EAAGwR,EAAQvR,OAAOD,EAAIK,EAAKJ,OAAOD,EAClCE,EAAGsR,EAAQvR,OAAOC,EAAIG,EAAKJ,OAAOC,GAI9BwR,EAAevU,EAAOgD,wBAAuBsR,SAGnDP,MACK7Q,EACHJ,OAAM,CACJD,EAAGK,EAAKJ,OAAOD,EAAI0R,EAAa1R,EAChCE,EAAGG,EAAKJ,OAAOC,EAAIwR,EAAaxR,OAGtC,MAAA,GAAWoR,GAAYjU,EAAMiC,cAAcC,QAAQnB,KAAM,CACjD,MAAAuT,EAActU,EAAMiC,cAAcC,QAAQnB,KAGhDjB,EAAOiD,aAAYnF,EAAAU,WAAagW,GAGhC5W,EAAAmC,IAAAgU,EAAkBS,GAAW,EAC/B,CAEoB,QAAhBtU,EAAMlC,QACRJ,EAAAmC,IAAAuT,EAAc,MAEVY,GAAMtW,EAAA2C,IAAIgT,IACZ3V,EAAAmC,IAAAwT,GAAgB,GAEhBvT,EAAO2D,WAAU7F,EAAAU,aACR2V,GAAQvW,EAAA2C,IAAIiT,KACrB5V,EAAAmC,IAAAyT,GAAgB,GAEhBxT,EAAO4D,aAAY9F,EAAAU,gBAK3Bc,SAAQ,CACNuE,iBAAYnE,GACZoE,QAAStG,IACTuG,WAAY,UACZC,cAAc,EACdvG,OAAQA,IAAS,GAEnBgC,UACEwE,WAAY,EACZxG,OAAQA,KAEVyG,iBAAiB,KAIbC,EAAavG,EAAAgB,QAAA,IAAYiC,EAAmBuD,QAK5CE,EAAc1G,EAAAgB,QAAA,MAAAd,EAAA2W,sBAAA3W,EAAA4W,0EAwBnB7P,EAAGuD,KAEDrD,UAFFF,sBAEEE,EAAE,KAAA,kBAEGlE,EAAmBoE,UACjB,CAAA0P,cAAgB9I,GAAoBA,EAAE+I,6DAE/Bb,GAAgBjR,OAAOD,EAAC/E,EAAAkE,qBACzB+R,GAAgBjR,OAAOC,EAACjF,EAAAkE,uBACtB+R,GAAgBpU,KAAK8B,MAAK3D,EAAAkE,wBACzB+R,GAAgBpU,KAAKgC,OAAM7D,EAAAkE,iCACftE,KAAqB,KACzB,iBAAAF,IAAgB,EAAhB,KACK+K,OAAAzK,EAAAsW,YAAA,OAAS,0CAEtB3W,sBAbhBsH,oEAiBUZ,GAAa,EAAOoB,MAAKC,MAAOC,KAAgBC,KAASH,EAAG,CAAAI,EAAAC,KAA5B,IAAgBF,EAAM,IAAA9H,EAAAiI,oBAAAjI,EAAA2C,IAAAqF,GAAA,CAAA,MAAA,oHAExBF,IAAQuL,gBAAerT,EAAA2C,IAAEnB,iCAAxC2G,UAAS,IAAAnI,EAAA2C,IAAAuL,6BAE1B7F,EAAG4O,uBAAH5O,EAAG,KAAA,IAAKP,IAAgBF,MAAA,YAJGA,sCAI8BpG,IAAY,oBAArE6G,oDAHYF,aAASkH,GAAA7G,EAAAiN,GAAA,6EAlB7BtO,mBAAAA,EAAE,gBA0CWM,EAAQ,CAAAM,EAAAwB,KACR,MAAAC,EAASxJ,EAAAgB,QAAA,IAzDhB,SAAeqC,EAAYoG,UAEhCC,SATAjH,KAAM,QACNyU,YAAWhX,EAAA6V,oBACXjQ,UAAS5F,EAAA4F,WAQT6D,UAAU,EACVtG,OACAuG,UAAS,CAAI9C,YAAY,GACzB2C,mBAEJ,CAiD4BI,oBADDxG,wBAAMoG,8DAIf,MAAAK,2CAA4BN,kIAEjCO,EAAgBhC,EAAA/H,EAAAgK,aAAA,IAAAhK,EAAA2C,IAAKmH,GAAOG,0CAD1BH,MAAMpB,gKAKwBc,wKArBrCtE,OAAM,CACJD,EAACjF,EAAA2C,IAAEwT,GAAgBjR,OAAOD,EAAC/E,EAAAkE,MAC3Be,EAACnF,EAAA2C,IAAEwT,GAAgBjR,OAAOC,EAACjF,EAAAkE,OAE7BrC,KAAI,CACF8B,MAAK7D,EAAA2C,IAAEwT,GAAgBpU,KAAK8B,MAAK3D,EAAAkE,MACjCL,OAAM/D,EAAA2C,IAAEwT,GAAgBpU,KAAKgC,OAAM7D,EAAAkE,UARxC+F,EAAAA,cAAYpC,EAAA,+DAaDN,qDAdTf,MAAcwD,aA9BpBjD,cAAAA,eADsB/G,EAAA6V,oBAAAhK,QAAU,KAACoL,0BAF5B,mEC1JFC,EAAkCpX,EAAAC,WAAAC,EAAA,CAAA,UAAA,WAAA,aAGhC,MAAAM,EAAuBrB,IACvBkY,EAAsBC,EAAAA,yBACtBC,EAAkBC,qBAAkB,CACxC5W,aAA6BA,WAC7BkF,UAAS5F,EAAmB4F,YAI1B,IAAAoR,EAAclX,EAAAI,MAAMJ,EAAAK,MAAA,KACpBoX,EAAiBzX,EAAAI,MAAMJ,EAAAK,MAAA,KACvBqX,EAAY1X,EAAAI,MAAsB,YAGhCgB,EAAkBpB,EAAAgB,QAAA,IACtBR,EAAqBa,SACjBb,EAAqBa,SAASC,cAA6BV,YAC3D,MAIAnB,EAAeO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAY8U,GAAe1L,OAAS,GAGzD/L,EAAAkC,YAAO,eACAd,GAAkB,aAGjBuW,EAAY3X,EAAA2C,IAAGvB,GAAmBwW,WACxC5X,EAAAmC,IAAA+U,EAAcW,EAAAA,0BAA0BF,IAA+B7R,YAAS,SAChF2R,EAAiBK,EAAAA,yBAAyBH,IAAY,GAGhD,MAAAI,QAAM3W,GAAmB4W,cAAe5X,IAC5CJ,EAAAmC,IAAA+U,EAAcW,EAAAA,0BAA0BzX,IAAwB0F,YAAS,SACzE2R,EAAiBK,EAAAA,yBAAyB1X,IAAK,eAEpC,MAAA2X,OAAA,EAAAA,YAITE,EAA+E,CACnFC,cAAa,CAAGC,EAAGC,KACbA,EAAGC,SAAWD,EAAGE,eAAatY,EAAA2C,IAAIvB,KACpCpB,EAAA2C,IAAAvB,GAAmBmX,qBACnBvY,EAAAmC,IAAAuV,EAAY,SAWT,SAAAc,EAAYvK,EAA4BzG,GAE3C,GADJyG,EAAE+I,kBACEhX,EAAA2C,IAAAvB,IAAsBiW,EAAoBhW,SAAU,CACtDgW,EAAoBhW,SAASoX,QAGH,YAAaxK,IAAIA,EAAEyK,SAAWzK,EAAE0K,eAIxDvX,GAAmBwX,gBAAe1Y,EAAkB4F,UAAW0B,EAAWjH,OAAOjB,UAGjF8B,GAAmByX,iBAAgB3Y,EAAkB4F,UAAW0B,EAAWjH,OAAOjB,IAGhFkI,EAAWjH,OAAOjB,KAAEU,EAAA2C,IAAK+U,IAC3B1X,EAAAmC,IAAAuV,EAAY,KAEhB,CACF,CAGS,SAAAoB,EACP7K,EACAzG,MAEAyG,EAAE+I,wBACG5V,IAAuBiW,EAAoBhW,UAK5C,GAHJgW,EAAoBhW,SAASoX,QAGzBjR,EAAWjH,OAAOwY,YAAa,CAC3B,MAAAC,EAAWxR,EAAWjH,OAAOwY,YAC7BE,EAAMjZ,EAAA2C,IAAGuU,GAAYgC,KAAMnJ,GAAMA,EAAExP,OAAOjB,KAAO0Z,GACnD,GAAAC,oBACF7X,GAAmByX,iBAAiBI,EAAO1Y,OAAOuF,UAAWkT,EAGjE,OAGA5X,GAAmByX,iBAAgB3Y,EAAkB4F,UAAW0B,EAAWjH,OAAOjB,GAf1B,CAgB1D,CAjDAU,EAAAkC,YAAO,IACEqV,EAAgB4B,SAASlB,EAAQ,CAAIrX,aAA6BA,cAmDrE,MAAAwY,EAAyBpZ,EAAAgB,QAAA,IAAAhB,EAAA2C,IAC7BuU,GAAYmC,OAAQC,GAAItZ,EAAA2C,IAAK8U,GAAe8B,SAASD,EAAK/Y,OAAOjB,MAI7Dka,EAAuBxZ,EAAAgB,QAAA,MACvBhB,EAAA2C,IAAAyW,GAA0BrN,OAAS,IAEhC/L,EAAA2C,IAAAyW,GAA0BK,MAAOzD,UAChC,MAAA0D,iBAAOtY,aAAoBuY,sBAAsB3D,EAAGzV,eAEnD,MAAAmZ,OAAA,EAAAA,EAAME,YAAYC,oBAAoB,MAAAH,OAAA,EAAAA,EAAME,YAAYpD,eAAe,KAK5EsD,EAAuB9Z,EAAAgB,QAAA,MACvBhB,EAAA2C,IAAAyW,GAA0BrN,OAAS,IAEhC/L,EAAA2C,IAAAyW,GAA0BK,MAAOzD,UAChC,MAAA0D,iBAAOtY,aAAoBuY,sBAAsB3D,EAAGzV,eAEnD,MAAAmZ,OAAA,EAAAA,EAAME,YAAYG,oBAAoB,MAAAL,OAAA,EAAAA,EAAME,YAAYI,eAAe,KAK5EC,EAAqBja,EAAAgB,QAAA,KACpB,IAAAhB,EAAA2C,IAAAvB,UAA2B,EAE5B,GAAApB,EAAA2C,IAAA8U,GAAe1L,OAAS,SAAU,SACrB/L,EAAA2C,IAAGvB,GAAmB8Y,yBACpBT,MAAOzD,GAAOA,EAAGzV,OAAOuF,YAAS5F,EAAsB4F,iEAIvEoR,GAAe1P,GAAYA,EAAWjH,OAAOjB,GAAE,CAAAyI,EAAhCP,WACZJ,EAAUpH,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAG8U,GAAe8B,eAAS/R,GAAWjH,OAAOjB,KACvD4S,sBAAYwF,KAAS1X,EAAA2C,IAAK6E,GAAWjH,OAAOjB,IAC5Coa,6CAAOtY,aAAoBuY,sBAAqB3Z,EAAA2C,IAAC6E,GAAWjH,UAC5D4Z,EAAYna,EAAAgB,QAAA,IAAGoZ,EAAAA,eAAcpa,EAAA2C,IAAC6E,GAAWjH,OAAO8Z,WAAaC,EAAAA,aAAaC,qDAepE,MAAA9S,KAAS+S,EAAGxa,EAAAya,QACnBC,mBACKF,EAAG,+BACNpT,yBACuBhD,OACdsG,QAAAuD,GAAMuK,EAAYvK,QAAGzG,QAfvB,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAU/W,KAC3Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAUva,KACxCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAAMuK,EAAYvK,QAAGzG,+CACR2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DAsBR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBO,mBACKR,EAAG,+BACNpT,yBACuBhD,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAfhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAU/W,KAC3Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAUva,KACxCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,+CACjC2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DAsBR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBQ,mBACKT,EAAG,+BACNpT,yBACuBhD,OACdsG,QAAAuD,GAAiCuK,EAAYvK,QAAGzG,QAflD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAU/W,KAC3Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAUva,KACxCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,+CACjC2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DAuBR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBS,mBACKV,EAAG,sBACiBpW,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAfhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAW/W,KAC5Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAWva,KACzCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,WACjD,6CACgB2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DAsBR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBU,mBACKX,EAAG,sBACiBpW,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAfhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAW/W,KAC5Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAWva,KACzCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,WACjD,6CACgB2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DAsBR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBW,mBACKZ,EAAG,sBACiBpW,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAfhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAW/W,KAC5Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAWva,KACzCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,WACjD,6CACgB2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DAsBR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBY,mBACKb,EAAG,sBACiBpW,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAfhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAW/W,KAC5Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAWva,KACzCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BAGvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sCAC7CwT,EAAAA,eAAcpa,EAAA2C,IAAC6E,GAAWjH,OAAO8Z,WAAaC,EAAAA,aAAagB,WAVpFT,EAAkB9S,EAAA/H,EAAAgK,mDACExC,mJAKRE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,WACjD,6IAIJ4P,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DA4BR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBc,mBACKf,EAAG,+BACNpT,yBACuBhD,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAtBhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAU/W,KAC3Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAWva,KACzCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,kBAEvDhE,gBAAkBuM,GAAC,CAAMA,EAAEyL,WAAWnN,MAAO0B,EAAEyL,WAAWhN,KAC1DhJ,qBAAsBuK,EAAGzM,KAAA,IACpByM,EACHyL,WAAU,CAAInN,MAAO/K,EAAS,GAAIkL,IAAKlL,EAAS,kDAG5B6W,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DA0BR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBgB,mBACKjB,EAAG,+BACNpT,yBACuBhD,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,kCAnB7C/H,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBACvD+T,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAU/W,KAC3Cmb,EAAA5a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAWva,KACzCic,EAAA1b,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,IAC1Cic,EAAA3b,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IAP5Bob,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,kBAEvDhE,gBAAkBuM,GAAMA,EAAEzM,SAC1BkC,qBAAsBuK,EAAGzM,SAAmByM,EAAGzM,yDAEzB6W,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DA0BR,MAAAtT,KAAS+S,EAAGxa,EAAAya,QACnBmB,mBACKpB,EAAG,+BACNpT,yBACuBhD,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAnBhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAU/W,KAC3Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAWva,KACzCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,kBAEvDhE,gBAAkBuM,GAAMA,EAAEzM,SAC1BkC,qBAAsBuK,EAAGzM,SAAmByM,EAAGzM,yDAEzB6W,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DA0BR,MAAAtT,KAASlH,EAAMP,EAAAya,wCAKJjT,GAAYjH,OAAAA,OAJ9Bsb,EAAO9T,EAAA,2BACuBnH,0CAC5BwG,iCACA8K,+DAE2BpM,gCACJ1B,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,QAtBhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,kDACbia,aAAME,YAAYpD,eAAe,KAAIxW,EAAA2C,IAAMuP,KAASlS,EAAA2C,IAAKlD,KACzDkb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAUva,KACxCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sCAE7CwT,EAAAA,eAAcpa,EAAA2C,IAAC6E,GAAWjH,OAAO8Z,WAAaC,EAAAA,aAAaC,SATpFM,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAAMuK,EAAYvK,QAAGzG,yDAEhBsU,cAAA7N,IACdA,EAAE+I,kBACFhX,EAAAmC,IAAAuV,EAAS1X,EAAA2C,IAAG6E,GAAWjH,OAAOjB,IAAE,SAE9B8X,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,0DAyBR,MAAAtT,KAASsU,EAAO/b,EAAAya,QACvBuB,EAAIjU,EAAA,2BAC0BnH,0CAC5BwG,kCACAI,6BAC2B1B,gCACJ1B,OACdsG,QAAAuD,GAA+BuK,EAAYvK,QAAGzG,OAjBhD,IAAA0G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,IACb+V,EAAAxV,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYpD,eAAe,WAAU/W,KAC3Ckb,EAAA3a,EAAAgB,QAAA,WAAAhB,QAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYI,eAAe,WAAUva,KACxCmb,EAAA5a,EAAAgB,QAAA,WAAAhB,OAAAA,OAAAA,EAAAA,EAAA2C,IAAA+W,SAAA1Z,EAAAA,EAAM4Z,YAAYla,mBAAmB,0BACvCD,QAAkB,EAASS,EAAoByG,qCACxClH,QAAkB,EAASS,EAAoB0G,sBAPtEiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,oOAORE,SAAAuG,GAA+BuK,EAAYvK,QAAGzG,+CACjC2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,yDAYZ,MAAA/F,EAAMhV,EAAAgB,QAAA,MAAAhB,EAAA2C,IAAK6E,GAAWjH,OAAOwY,cAsBzB,MAAAtR,KAAS+S,EAAGxa,EAAAya,QACnBwB,mBACKzB,EAAG,+BACNpT,yBACuBhD,OACdsG,QAAAuD,GAA+B6K,EAAgB7K,QAAGzG,8BAC3DwN,QAzBO,IAAA9G,EAAAlO,EAAAgB,QAAA,IAAAhB,EAAA2C,IAAAyE,WAAe3H,0BAKZuV,UAEXvV,QADA,EAEUS,EACSyG,qCACDqO,UAElBvV,QADA,EAEUS,EACS0G,sBAhBxBiU,EAAkB9S,EAAA/H,EAAAgK,mDACExC,yEAElB/H,iBACY,eACA,mBACI,mFAWNiI,SAAAuG,GAA+B6K,EAAgB7K,QAAGzG,+CACrC2S,IAAY,WAChC/C,GAEM3P,WAAQqT,QAAA,CAAAC,SAAA,mBAvBZmB,EAAAA,aAAO1U,OAAU2U,kCAxBjBC,gBAAQ5U,MAAU6U,GAAA7T,EAAAiN,GAAA,kCA7BlB6G,mBAAW9U,MAAU+U,GAAA/T,EAAAC,GAAA,kCA1BrB+T,kBAAUhV,MAAUiV,GAAAjU,EAAAS,GAAA,kCA1BpByT,mBAAWlV,MAAU4C,GAAA5B,EAAAmU,GAAA,kCA7BrBC,eAAOpV,MAAUqV,GAAArU,EAAAsU,GAAA,kCAtBjBC,oBAAYvV,MAAU2P,GAAA3O,EAAAwU,GAAA,kCAtBtBC,mBAAWzV,MAAU0C,GAAA1B,EAAA0U,GAAA,kCAtBrBC,oBAAY3V,MAAU0B,GAAAV,EAAA4U,GAAA,kCAtBtBlI,oBAAY1N,MAAUwB,GAAAR,EAAA6U,GAAA,kCAtBtBC,iBAAS9V,MAAUkB,GAAAF,EAAA+U,GAAA,kCAtBnBC,iBAAShW,MAAUe,GAAAC,EAAAiV,GAAA,kCAtBxBC,cAAMlW,MAAU6H,GAAA7G,EAAAmV,GAAA,gDAsUpBC,GAAgB7V,EAAA,2BACcnH,qCACDkF,gCACJ1B,+BACGD,mCACCL,qCACCE,mDACRoV,mCACRI,mCACAM,4BACcpY,+CACa5B,yDACH+W,6DACOC,yCAd3C9W,EAAA2C,IAAAsX,IAAqBja,EAAA2C,IAAIyW,GAA0BrN,QAAU,GAACvD,EAAAqV,0BA7U3D,uKCvMA,MAAAxG,EAAsBC,EAAAA,yBACtB9W,EAAuBrB,IAEzB,IAAA2W,EAAQ9V,EAAAI,MAAMJ,EAAAK,MAAA,KACdyd,EAAe9d,EAAAI,MAAoB,MACnC2d,EAAa/d,EAAAI,MAA8B,YAGzC4d,EAAiBhe,EAAAgB,QAAA,IACrBqW,EAAoBhW,SAAWgW,EAAoBhW,SAASC,YAAWpB,EAAAU,YAAe,MAElFQ,EAAkBpB,EAAAgB,QAAA,IACtBR,EAAqBa,SAAWb,EAAqBa,SAASC,YAAWpB,EAAAU,YAAe,MAI1FZ,EAAAkC,YAAO,eACA8b,GAAiB,cAEbhe,EAAA2C,IAAGqb,GAAkBC,kBAAiB,WAC7CnI,EAAK9V,EAAA2C,IAAGqb,GAAkBE,yBAAwBhe,EAAA4F,YAAA,SAClDgY,EAAY9d,EAAA2C,IAAGqb,GAAkBG,uBAAsBje,EAAA4F,YAAA,OAM3D9F,EAAAkC,YAAO,eACAd,GAAkB,aAGvB2c,EAAU/d,EAAA2C,IAAGvB,GAAmBgd,iBAAa,gBAEjChd,GAAmBid,mBAAoB3E,IACjD1Z,EAAAmC,IAAA4b,EAAarE,GAAI,OAKf,MAAAS,EAAYna,EAAAgB,QAAA,iBAAAhB,OAAAA,OAAAA,EAAAA,OAAAA,EAAAA,EAAA2C,IAChBob,SADgB/d,EAAAA,EACJse,mBAAUjE,WAClBD,EAAAA,eAAcpa,EAAA2C,IAACob,GAAWO,SAASjE,YACnCra,OAAAA,EAAAA,OAAAA,EAAAA,EAAA2C,IAAAob,aAAYO,eAAZte,EAAAA,EAAsByC,QAAS8b,EAAAA,qBAAqBC,UAClDpE,EAAAA,eAAeE,EAAAA,aAAagB,UAC5BlB,iBAAeE,EAAAA,aAAaC,oGAMjCtT,EAAEsI,yBAAFtI,qDAOgB8W,GAAWO,mBAAUnQ,2DACzB4P,GAAWO,mBAAUjU,UAF/B6Q,EAAQuD,EAAA,mGAGO3I,0CATjB7O,uCAAAA,EAAE,GAAAmE,EAAA,wBACqB+O,uEADvBlT,yDAcAE,EAAEuX,yBAAFvX,qDAOgB4W,GAAWO,mBAAUnQ,2DACzB4P,GAAWO,mBAAUjU,UAF/BgR,EAAQsD,EAAA,mGAGO7I,0CATjB3O,uCAAAA,EAAE,GAAAoF,EAAA,wBACqB4N,uEADvBhT,yDAcAkB,EAAEC,yBAAFD,qDAOgB0V,GAAWO,mBAAUnQ,2DACzB4P,GAAWO,mBAAUjU,UAF/B8Q,EAAQyD,EAAA,mGAGO9I,0CATjBzN,uCAAAA,EAAE,GAAA+G,EAAA,wBACqB+K,uEADvB9R,yDAcAS,EAAE+V,yBAAF/V,qDAOgBiV,GAAWO,mBAAUnQ,2DACzB4P,GAAWO,mBAAUjU,UAF/B+Q,EAAO0D,EAAA,mGAGQhJ,0CATjBhN,uCAAAA,EAAE,GAAA0G,EAAA,wBACqB2K,uEADvBrR,eADO9I,EAAA2C,IAAAob,GAAWO,SAAS7b,OAAS8b,uBAAqBQ,UAAQvW,EAAAQ,kCAd1DhJ,EAAA2C,IAAAob,GAAWO,SAAS7b,OAAS8b,EAAAA,qBAAqBS,UAASxW,EAAAE,GAAAF,EAAAiN,GAAA,kCAd3DzV,EAAA2C,IAAAob,GAAWO,SAAS7b,OAAS8b,EAAAA,qBAAqBC,UAAShW,EAAAD,GAAAC,EAAAC,GAAA,kCAdhEzI,EAAA2C,IAAAob,GAAWO,SAAS7b,OAAS8b,EAAAA,qBAAqBxJ,UAASvM,EAAA6G,GAAA7G,EAAAS,GAAA,+BAD7DjJ,EAAA2C,IAAAmb,IAAY9d,EAAA2C,IAAIob,IAAU/d,EAAA2C,IAAIob,GAAWO,YAAQpV,0BAF9C,kRChDA,MAAA+V,0BAA0BA,QAE1BrX,EAAK5H,EAAAgB,QAAA,KAAA,CACTsG,KAAItH,EAAA2C,IAAEsc,GAAO/Z,OAAOD,EAAC/E,EAAAkE,MACrBmD,IAAGvH,EAAA2C,IAAEsc,GAAO/Z,OAAOC,EAACjF,EAAAkE,MACpBP,MAAK7D,EAAA2C,IAAEsc,GAAOld,KAAK8B,MAAK3D,EAAAkE,MACxBL,OAAM/D,EAAA2C,IAAEsc,GAAOld,KAAKgC,OAAM7D,EAAAkE,wDAK3B6C,EAAEuD,WASAyQ,UATFhU,GASQjH,EAAAgK,0BAAa,6CAA2BkV,eAThDjY,uCAAAA,EAAE,GAAAmE,EAAA,qBAEY9D,KAAA,GAAAtH,EAAA2C,IAAAiF,GAAMN,MAAI,OACXC,IAAA,GAAAvH,EAAA2C,IAAAiF,GAAML,KAAG,OACP1D,MAAA,GAAA7D,EAAA2C,IAAAiF,GAAM/D,OAAK,OACVE,OAAA,GAAA/D,EAAA2C,IAAAiF,GAAM7D,QAAM,4DAL5BkD,yDAYAE,EAAEgY,WASAnE,UATF7T,GASQnH,EAAAgK,0BAAa,6CAA2BkV,eAThD/X,uCAAAA,EAAE,GAAAoF,EAAA,qBAEYjF,KAAA,GAAAtH,EAAA2C,IAAAiF,GAAMN,MAAI,OACXC,IAAA,GAAAvH,EAAA2C,IAAAiF,GAAML,KAAG,OACP1D,MAAA,GAAA7D,EAAA2C,IAAAiF,GAAM/D,OAAK,OACVE,OAAA,GAAA/D,EAAA2C,IAAAiF,GAAM7D,QAAM,4DAL5BoD,yDAYAkB,EAAE4O,WASA2E,UATFvT,GASSrI,EAAAgK,0BAAa,6CAA2BkV,eATjD7W,uCAAAA,EAAE,GAAA+G,EAAA,qBAEY9H,KAAA,GAAAtH,EAAA2C,IAAAiF,GAAMN,MAAI,OACXC,IAAA,GAAAvH,EAAA2C,IAAAiF,GAAML,KAAG,OACP1D,MAAA,GAAA7D,EAAA2C,IAAAiF,GAAM/D,OAAK,OACVE,OAAA,GAAA/D,EAAA2C,IAAAiF,GAAM7D,QAAM,4DAL5BsE,yDAYAS,EAAEsW,WASA3D,UATF3S,GASU9I,EAAAgK,0BAAa,6CAA2BkV,eATlDpW,uCAAAA,EAAE,GAAA0G,EAAA,qBAEYlI,KAAA,GAAAtH,EAAA2C,IAAAiF,GAAMN,MAAI,OACXC,IAAA,GAAAvH,EAAA2C,IAAAiF,GAAML,KAAG,OACP1D,MAAA,GAAA7D,EAAA2C,IAAAiF,GAAM/D,OAAK,OACVE,OAAA,GAAA/D,EAAA2C,IAAAiF,GAAM7D,QAAM,4DAL5B+E,yDAYAuW,EAAEC,WASA/D,UATF8D,GASMrf,EAAAgK,0BAAa,6CAA2BkV,eAT9CG,uCAAAA,EAAE,GAAAE,EAAA,qBAEYjY,KAAA,GAAAtH,EAAA2C,IAAAiF,GAAMN,MAAI,OACXC,IAAA,GAAAvH,EAAA2C,IAAAiF,GAAML,KAAG,OACP1D,MAAA,GAAA7D,EAAA2C,IAAAiF,GAAM/D,OAAK,OACVE,OAAA,GAAA/D,EAAA2C,IAAAiF,GAAM7D,QAAM,4DAL5Bsb,yDAYAG,EAAEC,WASA/E,UATF8E,GASKxf,EAAAgK,0BAAa,6CAA2BkV,eAT7CM,uCAAAA,EAAE,GAAAE,EAAA,qBAEYpY,KAAA,GAAAtH,EAAA2C,IAAAiF,GAAMN,MAAI,OACXC,IAAA,GAAAvH,EAAA2C,IAAAiF,GAAML,KAAG,OACP1D,MAAA,GAAA7D,EAAA2C,IAAAiF,GAAM/D,OAAK,OACVE,OAAA,GAAA/D,EAAA2C,IAAAiF,GAAM7D,QAAM,4DAL5Byb,yDAYAG,EAAEC,WAUA,IAAAC,UAVFF,iBAAAA,wCAAAA,EAAE,GAAAG,EAAA,qBAEYxY,KAAA,GAAAtH,EAAA2C,IAAAiF,GAAMN,MAAI,OACXC,IAAA,GAAAvH,EAAA2C,IAAAiF,GAAML,KAAG,OACP1D,MAAA,GAAA7D,EAAA2C,IAAAiF,GAAM/D,OAAK,OACVE,OAAA,GAAA/D,EAAA2C,IAAAiF,GAAM7D,QAAM,8DAK1B8b,EAAE,GAAAE,EAAA,4DAGiCb,KAAKlM,WAAa,YAAS,qDAbhE2M,yBADeld,OAAS8b,EAAAA,qBAAqByB,YAAQ7I,4CAZtC1U,OAAS8b,EAAAA,qBAAqB0B,MAAG/V,GAAA1B,EAAAiN,GAAA,4CAZjChT,OAAS8b,EAAAA,qBAAqB2B,OAAIhX,GAAAV,EAAAC,GAAA,4CAZlChG,OAAS8b,EAAAA,qBAAqB4B,WAAQnX,GAAAR,EAAAS,GAAA,4CAZtCxG,OAAS8b,EAAAA,qBAAqB6B,UAAO1X,GAAAF,EAAAmU,GAAA,4CAZrCla,OAAS8b,EAAAA,qBAAqB8B,SAAM9X,GAAAC,EAAAsU,GAAA,4CAZzCra,OAAS8b,EAAAA,qBAAqB+B,SAAMjR,GAAA7G,EAAAwU,GAAA,0BAFzC,kGCZA,MAAAvc,EAAmBlB,QACrBghB,EAAWvgB,EAAAI,MAAMJ,EAAAK,MAAA,IAAmCmgB,MAEpDC,EAAwCzgB,EAAAI,MAAO,MAC/CsgB,EAAsC1gB,EAAAI,MAAO,YAE3CugB,EAAyB,CAC7BC,YAAW,EAAKC,SAAQC,uBACjBL,GAAY,OACX,MAAAM,QAAQN,GACdM,EAAMF,OAASA,EACfE,EAAMC,SAAY/S,UACV,MAAAgT,EAAQ,OAAAxf,EAAAwM,EAAEoK,OAA4B6I,YAA9B,EAAAzf,EAAsC,GAChDwf,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,MAAAhN,MAAUiN,MAChBjN,EAAIkN,YAAc,YAClBlN,EAAImN,OAAM,KACF,IAAAC,aAAcne,EAAOoe,cAAele,GAAW6Q,EAI/C,MAAAsN,EAASX,EAAWA,EAAW1d,EAAQ,EACvCse,EAASX,EAAYA,EAAYzd,EAAS,EAC1CwP,EAAcxG,KAAKqV,IAAIF,EAAQC,EAAQ,GAEvCE,EAAaxe,EAAQ0P,EACrB+O,EAAcve,EAASwP,EAE7BmO,EAAO7d,MAAQwe,EACfX,EAAO3d,OAASue,EAChBV,EAAIW,UAAU3N,EAAK,EAAG,EAAGyN,EAAYC,SAE/BE,EAAYZ,EAAIa,aAAa,EAAG,EAAGJ,EAAYC,GAC/B,iBAAXhB,GAAqB3N,IAAIC,gBAAgBgB,EAAI8N,KAExDjB,EAAU,CAAGe,YAAW3e,MAAOwe,EAAYte,OAAQue,KAErD1N,EAAI8N,IAAwB,iBAAXpB,EAAsBA,EAAS3N,IAAIU,gBAAgBiN,KAIxEthB,EAAAkC,YAAO,KACA,GAAAzB,EAAiB2B,cAEf3B,EAAiB2B,OAAOugB,qBAAoBziB,EAAAU,WAAAV,EAAA4F,UAAA5F,EAAAkE,MAAA,CACjDuc,WACAiC,UAAS,CAAGC,EAAQziB,WAClBmgB,EAAQ,IAAOC,IAAGxgB,EAAA2C,IAAC4d,KAAQ,GACvBngB,EACFJ,EAAA2C,IAAA4d,GAASpe,IAAI0gB,EAAQziB,SAErBmgB,GAASuC,OAAOD,mBAQzBE,EAAK/iB,EAAAgjB,YAAAC,eAALF,EAAK,GAAA,CAAA,EAAA,CAAAG,QAAA,qBAALH,EAAKnQ,GAAA5S,EAAAmC,IAAYse,EAAY7N,GAAA,IAAA5S,EAAA2C,IAAZ8d,IACjB,IAAA0C,YADAJ,EAAK,eACLI,EAAM,GAAA,CAAA,EAAA,CAAAD,QAAA,qBAANC,EAAMvQ,GAAA5S,EAAAmC,IAAYue,EAAS9N,GAAA,IAAA5S,EAAA2C,IAAT+d,oBAAlByC,EAAM,mBAGAC,MAAMC,KAAIrjB,EAAA2C,IAAC4d,GAASzV,WAAO,EAAS+X,EAAQ1iB,KAAS0iB,EAAM,CAAA9a,EAAAC,iDAC/Dsb,GAAevb,EAAA,sBADwC/H,EAAA2C,IAAA4gB,GAAA,yDAPlD,mICxBDxjB,EAAQC,EAAAC,WAAAC,EAAA,wPAGP,MAAAsjB,EAAgBC,EAAAA,iBAAgB,IAAAvjB,EAAAU,YAEhC8iB,2BAAgB,OAAA,OAAAC,EAAA,OAAAje,EAAA,OAAAjE,EAAA,MAAA+hB,OAAA,EAAAA,EAAeI,cAAf,EAAAniB,EAAwBwP,eAAxB,EAAAvL,EAAkCme,gBAAK3jB,EAAA4F,aACvDhC,wDAAqB4f,aAAM3hB,eAAM8B,QAAS,IAC1CG,wDAAsB0f,aAAM3hB,eAAMgC,SAAU,IAE5C+f,EAAW9jB,EAAAgB,QAAA,WAAA,YACG,IADHd,EAAAkE,MACYlE,EAAAkE,OAAoB,OAAA3C,EAAA,MAAA+hB,OAAA,EAAAA,EAAeI,kBAASxf,QAAS,IAG5E2f,8DAGC,OAAAtiB,mBAAemiB,cAAf,EAAAniB,EAAwB0C,WAAY6f,EAAAA,SAASC,cAIrDhd,EAAEC,KAAFlH,EAAAkkB,iBAAAjd,qCAGKlH,IAAS,aADD6K,OAAOC,YAAYD,OAAOE,QAAO5K,EAAA0H,OAAQmD,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,wBAFrFhE,GAKEkd,GAAUC,EAAA,oUAOFN,gCACGC,iCACTjgB,kCACAE,6NAMFqgB,GAAUC,EAAA,oGAAiCR,MAC3CS,kBAAoB,oGAAiCT,cAtBvD7c,cAAAA,UAFO,6ZrBtDsBud,IACtB,MAAAC,EAAatlB,QAEfiB,EAAQJ,EAAAI,MAAAJ,EAAAK,MAAgCqkB,EAAAA,yBAGtC,MAAA9jB,YAAsB4jB,GAGtBG,EAAA3kB,EAAAgB,QAAA,IACJyjB,EAAWpjB,gBAAYT,GAAa6jB,EAAWpjB,SAASC,kBAAYV,IAAc,aAGpFZ,EAAAkC,uBACQb,EAAWojB,EAAWpjB,SACtBujB,QAAQhkB,OAETS,IAAaujB,cAChB5kB,EAAAmC,IAAA/B,EAAQskB,EAAAA,wBAAA,GAIJ,MAAAG,EAAQxjB,EAASC,YAAYsjB,GAM5B,aAHPxkB,EAAQykB,EAAMjN,YAAA,GAGPiN,EAAM7M,cAAe8M,IAC1B9kB,EAAAmC,IAAA/B,EAAQ0kB,GAAA,QAKN,YAAAzjB,gBACKsjB,EACT,EACI,SAAAvkB,gBACKA,EACT"}
|