@embedpdf/plugin-annotation 2.0.0-next.3 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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","object","annotationCapability","gestureBaseRef","annotationProvides","derived","provides","forDocument","documentId","currentObject","trackedAnnotation","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","HANDLE_SIZE","size","VERTEX_SIZE","user_effect","set","interactionHandles","useInteractionHandles","controller","element","get","rect","vertices","vertexConfig","extractVertices","constraints","minWidth","minHeight","boundingBox","width","pageWidth","height","pageHeight","maintainAspectRatio","pageRotation","rotation","scale","enabled","isSelected","onUpdate","event","transformData","type","state","transformType","base","changes","transformAnnotation","patched","_c","metadata","sanitized","deepToRaw","updateAnnotation","pageIndex","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","resizeHandles","resize","vertexHandles","shouldShowMenu","selectionMenu","selectionMenuSnippet","menuPlacement","suggestTop","spaceAbove","spaceBelow","isDraggable","dragProps","left","origin","x","top","y","outline","cursor","annotation","children","onSelect","key","style","handleStyle","hProps","$$anchor","$$item","exclude_from_object","Component","component","consequent_1","$$render","alternate_1","vertexStyle","vProps","consequent_3","alternate_2","onDouble","onDoubleClick","menuProps","menuWrapperProps","context","selected","placement","buildMenuProps","result","result_component","spread_props","props","consequent_5","consequent_8","opacity","b","tabindex","onClick","Object","fromEntries","entries","map","k","v","thickness","r","amplitude","period","svg","svgDataUri","encodeURIComponent","paths","inkList","points","d","i","length","trim","each","styles","set_style","set_attribute","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","$$d","outerW","outerH","Math","max","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","innerW","innerH","cx","cy","rx","ry","peValue","ellipse","__pointerdown","e","__touchstart","styles_1","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","_b","lineEndings","transform","path","filled","consequent","path_1","localPts","pathData","first","rest","p","toAngle","a","startRad","endRad","path_2","stroke","allPoints","currentVertex","isPreview","isPreviewing","rect_1","fill","editorRef","isIOS","focus","selection","getSelection","call","window","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","user_pre_effect","nav","navigator","ios","test","userAgent","platform","maxTouchPoints","computedFontPx","fontSize","needsComp","isEditing","adjustedFontPx","scaleComp","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","bind_this","span","$$value","set_text","text","contents","fontColor","standardFontCss","fontFamily","textAlignmentToCss","textAlign","backgroundColor","innerText","scaleFactor","imageUrl","urlRef","handleImageLoad","URL","revokeObjectURL","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","annotationProp","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","annotations","proxy","selectionState","editingId","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationByPageIndex","off","onStateChange","handlers","onPointerDown","_","pe","target","currentTarget","deselectAnnotation","handleClick","stopPropagation","selectAnnotation","clear","register","tool","findToolForAnnotation","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","obj","noop","$0","interaction","$1","isResizable","$2","Multiply","linePoints","_object","isStamp","consequent_11","isFreeText","consequent_10","alternate","isPolygon","consequent_9","isPolyline","isLine","consequent_7","alternate_3","isHighlight","consequent_6","alternate_4","isSquiggly","alternate_5","isStrikeout","consequent_4","alternate_6","isUnderline","alternate_7","isCircle","consequent_2","alternate_8","isSquare","alternate_9","isInk","alternate_10","rects","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","defaults","PdfAnnotationSubtype","HIGHLIGHT","SQUIGGLY","STRIKEOUT","UNDERLINE","bounds","data","FREETEXT","INK","LINE","POLYLINE","POLYGON","SQUARE","CIRCLE","annotationPlugin","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","img","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","src","plugin","registerPageHandlers","onPreview","toolId","delete","input_1","canvas_1","Array","from","$$array","documentState","useDocumentState","page","current","pages","actualScale","actualRotation","Rotation","Degree0","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"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"}
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":"0rBAQaA,EAAA,IAAgCC,gBAAgCC,EAAAA,iBAAiBC,IACjFC,EAAA,IAA4BC,YAA4BH,EAAAA,iBAAiBC,6KCkBlF,IAAAG,gCAAkB,GAEXC,qBAAa,IAIpBC,6BAAgB,GAGhBC,sBAAS,IAGTC,qCAAwB,WAErBC,EAAQC,EAAAC,WAAAC,EAAA,qYAGTC,EAAUH,EAAAI,MAAMJ,EAAAK,MAAAH,EAAAI,kBAAsBC,SACtCC,EAAuBpB,IACvBqB,EAAiBT,EAAAI,MAAiB,YAGhCM,EAAkBV,EAAAW,QAAA,IACtBH,EAAqBI,SAAWJ,EAAqBI,SAASC,YAAWX,EAAAY,YAAe,MAGtF,IAAAC,sBACFZ,GAAiC,IAAAD,EAAAI,kBAAAC,gBAAWJ,wBAA8BI,cAItES,EAAYhB,EAAAW,QAAA,WAAA,OAAA,OAAAM,EAAAf,EAAAgB,mBAAsBC,QAAS,YAC3CC,EAAYpB,EAAAW,QAAA,WAAA,OAAA,OAAAM,EAAAf,EAAAmB,mBAAsBF,QAAS,YAC3CG,EAAWtB,EAAAW,QAAA,WAAA,OAAA,OAAAM,EAAAf,EAAAgB,mBAAsBK,OAAQ,KACzCC,EAAWxB,EAAAW,QAAA,WAAA,OAAA,OAAAM,EAAAf,EAAAmB,mBAAsBE,OAAQ,KAE/CvB,EAAAyB,YAAO,KACiBvB,EAAAI,kBAAAC,QACpBP,EAAA0B,IAAAvB,sBAA4BI,QAAM,KAIhC,MAAAoB,EAAqBC,EAAAA,sBAAqB,WAAA,MAAA,CAC9CC,WAAU,CACRC,QAAO9B,EAAA+B,IAAEhB,GAAciB,KACvBC,SAAQ,OAAAhB,EAAAf,EAAAgC,uBAAgBC,gBAAenC,EAAA+B,IAAChB,IACxCqB,YAAW,CACTC,SAAU,GACVC,UAAW,GACXC,YAAW,CAAIC,MAAKtC,EAAAuC,UAAaC,OAAMxC,EAAAyC,aAEzCC,oBAAqBlD,IACrBmD,aAAY3C,EAAA4C,SACZC,MAAK7C,EAAA6C,MACLC,QAAO9C,EAAA+C,WACPC,SAAWC,qBACJ,OAAAlC,EAAAkC,EAAMC,oBAAN,EAAAnC,EAAqBoC,MAAI,OAEV,UAAhBF,EAAM/C,OACRJ,EAAA0B,IAAAjB,QAAiBM,IAAa,GAG1B,MAAAuC,EAAgBH,EAAMC,cAAcC,KACpCE,EAAIvD,EAAA+B,IAAGtB,IAAcT,EAAA+B,IAAIhB,GAEzByC,EAAUL,EAAMC,cAAcI,QAAQvB,2CAC1BwB,oBAAoBF,EAAMJ,EAAMC,cAAcI,QAAQvB,UAClE,CAAAD,KAAMmB,EAAMC,cAAcI,QAAQxB,MAElC0B,EAAU,OAAAC,EAAAnD,EAAqBI,eAArB,EAAA+C,EAA+BF,oBAAuBF,EAAI,CACxEF,KAAMC,EACGE,UACTI,SAAUT,EAAMC,cAAcQ,WAS5B,GANAF,SACFvD,EAAO,IAAAH,EAAA+B,IACF5B,MACAuD,IAAO,GAGM,QAAhBP,EAAM/C,OAAmBsD,EAAS,CACpC1D,EAAA0B,IAAAjB,EAAiB,YAGXoD,EAAYC,EAAAA,UAAUJ,GAC5B1D,OAAAA,EAAAA,EAAA+B,IAAArB,KAAAV,EAAoB+D,iBAAgB7D,EAAA8D,UAAA9D,EAAAI,kBAA8BC,OAAOhB,GAAIsE,EAC/E,IAGJ3C,SAAQ,CACN+C,iBAAY3C,GACZ4C,QAAStE,IACTuE,WAAY,UACZC,cAAc1E,IACdG,OAAQA,IAAS,GAEnBwB,SAAQ,CACNgD,WAAUrE,EAAA+B,IAAEP,GACZ3B,OAAQA,IAAS,GAEnByE,kBAAepE,EAAAgC,gBAIXqC,EAAavE,EAAAW,QAAA,IAAYgB,EAAmB6C,QAC5CC,EAAazE,EAAAW,QAAA,IAAYgB,EAAmBM,UAK5CyC,EAAc1E,EAAAW,QAAA,IAAAT,EAAA+C,eAAA/C,EAAAyE,iBAAAzE,EAAA0E,6BAYdC,EAAqC,CACzCC,YAAY,EACZC,WAAY,EACZC,WAAY,OAkBfC,EAAGC,IACDC,UADFF,sBACEE,EAAE,KAAA,IAC+BjF,EAAAkF,aAAAlF,EAAA+C,WAAAtB,EAAmB0D,UAAS,CAAA,iBAa5C,SACT1F,OACHI,iCAZSuF,KAAAtF,EAAA+B,IAAAhB,GAAciB,KAAKuD,OAAOC,EAACtF,EAAA6C,MAA3B,KACD0C,IAAAzF,EAAA+B,IAAAhB,GAAciB,KAAKuD,OAAOG,EAACxF,EAAA6C,MAA3B,KACEP,MAAAxC,EAAA+B,IAAAhB,GAAciB,KAAKT,KAAKiB,MAAKtC,EAAA6C,MAA7B,KACCL,OAAA1C,EAAA+B,IAAAhB,GAAciB,KAAKT,KAAKmB,OAAMxC,EAAA6C,MAA9B,KAC0B4C,QAAAzF,EAAA+C,WAAA,aAAAnD,MAA0B,OAC7B,iBAAAI,EAAA+C,WAAA,GAAArD,QAAoB,MACvB,iBAAAM,EAAA+C,WAAA,OAAS,6BAEF2C,OAAA1F,EAAA+C,YAAA/C,EAAAkF,YAAA,OAAS,oBACpCvF,sBAbhBsF,uGAoBKU,iBAAY9E,GACZ+E,SAAQ5F,EAAA4F,SACR7C,WAAU/C,EAAA+C,WACVF,MAAK7C,EAAA6C,MACLD,SAAQ5C,EAAA4C,SACRL,UAASvC,EAAAuC,UACTE,WAAUzC,EAAAyC,WACVqB,UAAS9D,EAAA8D,UACT+B,SAAQ7F,EAAA6F,2GAGQhF,8JAIXwD,GAAa,EAAOyB,MAAKC,MAAOC,KAAgBC,KAASH,EAAG,CAAAI,EAAAC,KAA5B,IAAgBF,EAAM,IAAAnG,EAAAsG,oBAAAtG,EAAA+B,IAAAsE,GAAA,CAAA,MAAA,qDAEjD,MAAAE,2BAAqBC,mFAC5BC,mBAAcN,EAAM,oCAAmBnF,kCAEvC0F,EAAGC,uBAAHD,EAAG,KAAA,IAAKP,IAAgBF,MAAA,YALGA,sCAK8BjF,IAAY,oBAArE0F,oDAJYF,aAASI,GAAAC,EAAAC,GAAA,yKAUnBrC,GAAa,EAAOuB,MAAKC,MAAOc,KAAgBC,KAAShB,EAAG,CAAAI,EAAAC,KAA5B,IAAgBW,EAAM,IAAAhH,EAAAsG,oBAAAtG,EAAA+B,IAAAsE,GAAA,CAAA,MAAA,qDAEjD,MAAAE,2BAAqBC,mFAC5BS,mBAAcD,EAAM,oCAAmB5F,kCAEvC8F,EAAGC,uBAAHD,EAAG,KAAA,IAAKF,IAAgBf,MAAA,YALGA,sCAK8B7E,IAAY,oBAArE8F,oDAJYV,aAASY,GAAAP,EAAAQ,GAAA,4EA/C7BlC,GAAAnF,EAAAsH,OAAAnC,2EAEoBoC,SAAQrH,EAAAsH,iCAF5BrC,EAAE,gBAwEWW,EAAQ,CAAAM,EAAAqB,KACR,MAAAC,EAAS1H,EAAAW,QAAA,IAxFd,SACPqB,EACA2F,UAGEC,SAnBAvE,KAAM,aACNwC,WAAU3F,EAAAI,kBACV0D,UAAS9D,EAAA8D,WAkBT6D,SAAQ3H,EAAA+C,WACRjB,OACA8F,UAAWjD,EACX8C,mBAEJ,CA6E0BI,oBADD/F,wBAAM2F,8DAIf,MAAAK,sCAAuBN,kIAE5BO,EAAgB7B,EAAApG,EAAAkI,aAAA,IAAAlI,EAAA+B,IAAKiG,GAAOG,0CAD1BH,MAAMI,2JAKmBV,8JArBhCnC,OAAM,CACJC,QAAGzE,GAAciB,KAAKuD,OAAOC,EAACtF,EAAA6C,MAC9B2C,QAAG3E,GAAciB,KAAKuD,OAAOG,EAACxF,EAAA6C,OAEhCxB,KAAI,CACFiB,YAAOzB,GAAciB,KAAKT,KAAKiB,MAAKtC,EAAA6C,MACpCL,aAAQ3B,GAAciB,KAAKT,KAAKmB,OAAMxC,EAAA6C,UAR3CsF,EAAAA,cAAYjC,EAAA,+DAaDN,qDAdTpB,MAAc4D,aA3DpBrD,cAAAA,UAFD,+DC3JI,IAAA9D,qBAAQ,WACRoH,uBAAU,mFASSC,SACpBvD,EAAEwD,uBAAFxD,qBAEqByD,SAAAxI,EAAAyI,QAAA,qGAIC3I,EAAA+B,IAAAyG,GAAEjD,OAAOC,EAACtF,EAAA8B,KAAQuD,OAAOC,QAAIgD,GAAEjD,OAAOC,GAACtF,EAAA6C,uBACxC/C,EAAA+B,IAAAyG,GAAEjD,OAAOG,EAACxF,EAAA8B,KAAQuD,OAAOG,QAAI8C,GAAEjD,OAAOG,GAACxF,EAAA6C,uBAC7CyF,GAAEjH,KAAKiB,MAAKtC,EAAA6C,wBACXyF,GAAEjH,KAAKmB,OAAMxC,EAAA6C,sBACV5B,gBAEc,iBAAAjB,EAAAyI,QAAA,OAAS,OACjB/C,OAAA1F,EAAAyI,QAAA,UAAY,UACX,UAAAzI,EAAAyI,QAAA,OAAI,kBACjBC,OAAOC,YAAYD,OAAOE,QAAO5I,EAAA+F,OAAQ8C,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,qBAfrFhE,0BAHH,0ECRI,IAAA9D,qBAAQ,WACRoH,uBAAU,IAQN,MAAAW,gBAAqB,EAAChJ,EAAA6C,sFAGPoG,SACpBlE,EAAEwD,uBAAFxD,qBAEqByD,SAAAxI,EAAAyI,QAAA,qGAIC3I,EAAA+B,IAAAoH,GAAE5D,OAAOC,EAACtF,EAAA8B,KAAQuD,OAAOC,QAAI2D,GAAE5D,OAAOC,GAACtF,EAAA6C,uBACxC/C,EAAA+B,IAAAoH,GAAE5D,OAAOG,EAACxF,EAAA8B,KAAQuD,OAAOG,QAAIyD,GAAE5D,OAAOG,GAACxF,EAAA6C,uBAC7CoG,GAAE5H,KAAKiB,MAAKtC,EAAA6C,wBACXoG,GAAE5H,KAAKmB,OAAMxC,EAAA6C,oCAEI,iBAAA7C,EAAAyI,QAAA,OAAS,OACjB/C,OAAA1F,EAAAyI,QAAA,UAAY,UACX,UAAAzI,EAAAyI,QAAA,EAAI,kBACjBC,OAAOC,YAAYD,OAAOE,QAAO5I,EAAA+F,OAAQ8C,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAA9D,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAiE,EAAA,sEAKcF,IAAS,kBACN/H,sDAvBrB8D,0BAHH,0ECVI,IAAA9D,qBAAQ,WACRoH,uBAAU,IAQN,MAAAW,gBAAqB,EAAChJ,EAAA6C,sFAGPoG,SACpBlE,EAAEwD,uBAAFxD,qBAEqByD,SAAAxI,EAAAyI,QAAA,qGAIC3I,EAAA+B,IAAAoH,GAAE5D,OAAOC,EAACtF,EAAA8B,KAAQuD,OAAOC,QAAI2D,GAAE5D,OAAOC,GAACtF,EAAA6C,uBACxC/C,EAAA+B,IAAAoH,GAAE5D,OAAOG,EAACxF,EAAA8B,KAAQuD,OAAOG,QAAIyD,GAAE5D,OAAOG,GAACxF,EAAA6C,uBAC7CoG,GAAE5H,KAAKiB,MAAKtC,EAAA6C,wBACXoG,GAAE5H,KAAKmB,OAAMxC,EAAA6C,oCAEI,iBAAA7C,EAAAyI,QAAA,OAAS,OACjB/C,OAAA1F,EAAAyI,QAAA,UAAY,UACX,UAAAzI,EAAAyI,QAAA,EAAI,kBACjBC,OAAOC,YAAYD,OAAOE,QAAO5I,EAAA+F,OAAQ8C,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAA9D,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAiE,EAAA,qEAKcF,IAAS,kBACN/H,mFAvBrB8D,0BAHH,0ECVI,IAAA9D,qBAAQ,WACRoH,uBAAU,IAQN,MAAAc,gBAAqB,EAACnJ,EAAA6C,OACtBuG,gBAAkB,EAACpJ,EAAA6C,OAEnBwG,EAAGvJ,EAAAW,QAAA,IAAA,kDAAAX,EAAA+B,IACoDuH,eAA+B,EAAzBtJ,EAAA+B,IAAasH,oBAAarJ,EAAA+B,IAAkBuH,MAAsB,EAAhBtJ,EAAA+B,IAAIsH,2BACvGrJ,EAAA+B,IAAAsH,QAASrJ,EAAA+B,IAAMuH,GAAS,OAACtJ,EAAA+B,IAAMuH,GAAS,KAACtJ,EAAA+B,IAAIsH,QAASrJ,EAAA+B,IAAMuH,YAAUD,wCACxDlI,4BAAwBkI,4CAIlDG,EAAUxJ,EAAAW,QAAA,IAAA,gCAA4C8I,mBAAkBzJ,EAAA+B,IAACwH,wFAG1DJ,SACpBlE,EAAEwD,uBAAFxD,qBAEqByD,SAAAxI,EAAAyI,QAAA,qGAIC3I,EAAA+B,IAAAoH,GAAE5D,OAAOC,EAACtF,EAAA8B,KAAQuD,OAAOC,QAAI2D,GAAE5D,OAAOC,GAACtF,EAAA6C,uBACxC/C,EAAA+B,IAAAoH,GAAE5D,OAAOG,EAACxF,EAAA8B,KAAQuD,OAAOG,QAAIyD,GAAE5D,OAAOG,GAACxF,EAAA6C,uBAC7CoG,GAAE5H,KAAKiB,MAAKtC,EAAA6C,wBACXoG,GAAE5H,KAAKmB,OAAMxC,EAAA6C,oCAEI,iBAAA7C,EAAAyI,QAAA,OAAS,OACjB/C,OAAA1F,EAAAyI,QAAA,UAAY,UACX,UAAAzI,EAAAyI,QAAA,EAAI,kBACjBC,OAAOC,YAAYD,OAAOE,QAAO5I,EAAA+F,OAAQ8C,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,UAGnF,IAAA9D,UAjBFF,iBAAAA,uCAiBEE,EAAE,GAAAiE,EAAA,sDAKc1G,OAAY,EAAZ1C,EAAA+B,IAAAsH,GAAA,8BACSG,6DAEAF,IAAM,QAAiB,EAAjBtJ,EAAA+B,IAAKsH,yDAzBtCpE,0BAHH,wGClBI,IAAA9D,qBAAQ,WACRoH,uBAAU,GASN,MAAAmB,EAAK1J,EAAAW,QAAA,IAAAT,EAAAyJ,QACDZ,IAAG,EAAIa,aACT,IAAAC,EAAI,WACCC,EAAI,EAAGA,EAAIF,EAAOG,OAAQD,IAAK,CAC9B,MAAAtE,EAAAA,EAAAE,EAAGA,GAAMkE,EAAOE,GAGxBD,IAAY,IAANC,EAAU,IAAM,MAFXtE,EAACtF,EAAA8B,KAAQuD,OAAOC,GAEO,KADvBE,EAACxF,EAAA8B,KAAQuD,OAAOG,GACkB,GAC/C,CACO,OAAAmE,EAAEG,UAIPxH,EAAKxC,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKiB,MAAKtC,EAAA6C,OAChCL,EAAM1C,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKmB,OAAMxC,EAAA6C,WAGzCwG,EAAErE,iBAAFqE,EAAE,GAAA,IAAAvJ,EAAA+B,IAQM2H,GAAK1J,EAAAiK,MAAA,CAAA7D,EAAIyD,SACbK,EAAGzB,UAAHyB,EAICC,cAAa,YAAAC,+CAJdF,EAKCG,aAAY,YAAAD,sEALbpK,EAAAsK,cAAAJ,YACEL,IADF7J,EAAAsK,cAAAJ,YAGE3B,mBAHF2B,EAAG,GAAAK,EAAA,CAMyB3E,OAAA1F,EAAA+C,WAAA,OAAS,UACD,iBAAA/C,EAAA+C,WAAA,OAAS,uBAC9B9B,mGARf+I,aATJX,wCAAAA,EAAE,2EAAAH,EAAA,CAAA5G,MAAA,GAAAxC,EAAA+B,IAEeS,OAAKE,OAAA,GAAA1C,EAAA+B,IACJW,SAHlB1C,EAAAsK,cAAAf,gBAIE/G,IAJFxC,EAAAsK,cAAAf,iBAKE7G,IALF1C,EAAAsK,cAAAf,0BAMsBhI,KAAKiB,SAAKtC,EAAA8B,KAAST,KAAKmB,uBAN9C6G,UAFD,oHCrBI,IAAApI,qBAAQ,WAERoH,uBAAU,GAEViC,EAAWxK,EAAAyK,KAAAvK,EAAA,cAAA,GAAA,IAAGwK,EAAAA,yBAAyBC,OAQS,MAAAC,EAAA5K,EAAAW,QAAA,WAC1CkK,EAAM3K,EAAA8B,KAAQT,KAAKiB,MACnBsI,EAAM5K,EAAA8B,KAAQT,KAAKmB,cAIvBF,MAHauI,KAAKC,IAAIH,gBAAsB,GAI5CnI,OAHaqI,KAAKC,IAAIF,gBAAsB,GAI5CtF,gBAAiB,EACjBE,gBAAiB,KATblD,yBAAAA,OAAOE,yBAAAA,QAAQ8C,yBAAAA,GAAGE,yBAAAA,GAapBuF,uBAAqBzI,GAAKtC,EAAAgL,aAAAhL,EAAA6C,OAC1BoI,uBAAsBzI,GAAMxC,EAAAgL,aAAAhL,EAAA6C,OAE5BqI,EAAIpL,EAAAW,QAAA,WACR,OAAA6J,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAApK,IAAAqK,sBAAA,EAAArK,EAAoBsK,KAAK,UAAO,QAIlFhC,EAAErE,UAQA,IAAAsG,UARFjC,SAQEiC,EAOCrB,cAAa,YAAAC,+CAPdoB,EAQCnB,aAAY,YAAAD,uDAhBfb,wCAAAA,EAAE,wDAAAH,EAAA,gBAEe6B,uBACCE,SAHlBnL,EAAAsK,cAAAf,gBAIQ0B,IAJRjL,EAAAsK,cAAAf,iBAKS4B,oBALT5B,EAAE,UAAA,OAAAvJ,EAAA+B,IAMeS,GAAKtC,EAAAgL,eAAAlL,EAAA+B,IAAkBW,GAAMxC,EAAAgL,eAE5ClL,EAAAsK,cAAAkB,YACEhG,IADFxF,EAAAsK,cAAAkB,YAEE9F,IAFF1F,EAAAsK,cAAAkB,gBAGEhJ,IAHFxC,EAAAsK,cAAAkB,iBAIE9I,IAJF1C,EAAAsK,cAAAkB,SAKOrK,KALPnB,EAAAsK,cAAAkB,YAMEjD,mBANFiD,EAAG,GAAAjB,EAAA,CASyB3E,OAAA1F,EAAA+C,WAAA,OAAS,wCAEhC,OACU,gBAAV9B,IACE,gBACA,gCACuBA,0DAELiK,kBAzB3B7B,UAFD,0HCvBI,IAAApI,qBAAQ,WAERoH,uBAAU,GAEViC,EAAWxK,EAAAyK,KAAAvK,EAAA,cAAA,GAAA,IAAGwK,EAAAA,yBAAyBC,OAOmB,MAAAC,EAAA5K,EAAAW,QAAA,WAEpDkK,EAAM3K,EAAA8B,KAAQT,KAAKiB,MACnBsI,EAAM5K,EAAA8B,KAAQT,KAAKmB,OAGnB+I,EAASV,KAAKC,IAAIH,gBAAsB,GACxCa,EAASX,KAAKC,IAAIF,gBAAsB,UAG5CtI,MAAOqI,EACPnI,OAAQoI,EAERa,GAAEzL,EAAAgL,YAAgB,EAAIO,EAAS,EAC/BG,GAAE1L,EAAAgL,YAAgB,EAAIQ,EAAS,EAC/BG,GAAIJ,EAAS,EACbK,GAAIJ,EAAS,KAhBTlJ,yBAAAA,OAAOE,yBAAAA,QAAQiJ,yBAAAA,IAAIC,yBAAAA,IAAIC,yBAAAA,IAAIC,yBAAAA,IAoB/B,IAAAb,sBAAoBzI,GAAKtC,EAAA6C,OACzBoI,sBAAqBzI,GAAMxC,EAAA6C,OAE3BgJ,EAAO/L,EAAAW,QAAA,IAAAT,EAAA+C,WACI,OAAmB,gBAAV9B,IAA0B,gBAAkB,eAIrEoI,EAAErE,UAUA,IAAA8G,UAVFzC,SAUEyC,EAOC7B,cAAgB8B,qDAAgBA,IAPjCD,EAQC3B,aAAe4B,qDAAgBA,YAlBlC1C,yBAAAvJ,EAAAsK,cAAAf,mBAME0B,IANFjL,EAAAsK,cAAAf,oBAOE4B,oBAPF5B,EAAE,UAAA,OAAAvJ,EAAA+B,IAQeS,MAAKxC,EAAA+B,IAAIW,oBAR1B6G,EAAE,GAAAH,EAAA,oCAEe6B,uBACCE,+CAOhBnL,EAAAsK,cAAA0B,aACEL,IADF3L,EAAAsK,cAAA0B,aAEEJ,IAFF5L,EAAAsK,cAAA0B,aAGEH,IAHF7L,EAAAsK,cAAA0B,aAIEF,IAJF9L,EAAAsK,cAAA0B,SAKO7K,KALPnB,EAAAsK,cAAA0B,YAMEzD,KANFvI,EAAAsK,cAAA0B,yBAUiBD,IAVjB/L,EAAAsK,cAAA0B,0BAWwB7K,qBAXxB6K,EAAM,eAAA9L,EAAAgL,6BAANc,EAAM,mBAAAE,iBAANF,EAAM,GAAAzB,EAAA,CAAA3E,OAAA1F,EAAA+C,WASsB,OAAS,yBAIlB,OAAAuH,MAAgBE,EAAAA,yBAAyBW,4CACtCE,KAAK,UACtB,gBAzBPhC,UAFD,sLC3CI,IAAApI,qBAAQ,eACRoH,uBAAU,GAEV4D,2BAAc,WACd3B,EAAWxK,EAAAyK,KAAAvK,EAAA,cAAA,GAAA,IAAGwK,EAAAA,yBAAyBC,OAWnC,MAAAyB,6BAAyBC,MAAM7G,EAACtF,EAAA8B,KAAQuD,OAAOC,GAC/C8G,6BAAyBD,MAAM3G,EAACxF,EAAA8B,KAAQuD,OAAOG,GAC/C6G,6BAAyBC,IAAIhH,EAACtF,EAAA8B,KAAQuD,OAAOC,GAC7CiH,6BAAyBD,IAAI9G,EAACxF,EAAA8B,KAAQuD,OAAOG,GAG7CgH,EAAO1M,EAAAW,QAAA,mBACLgM,EAAQ5B,KAAK6B,MAAK5M,EAAA+B,IAAC0K,GAAEzM,EAAA+B,IAAGuK,GAAEtM,EAAA+B,IAAEwK,GAAEvM,EAAA+B,IAAGqK,WAErCC,MAAOQ,EAAAA,SAASC,8CAA0BT,MAAKnM,EAAAgL,YAAeyB,EAAQ5B,KAAKgC,GAAE/M,EAAA+B,IAAEqK,SAAIE,IACnFE,IAAKK,EAAAA,SAASC,aAAY,OAAAE,EAAA9M,EAAA+M,sBAAcT,IAAGtM,EAAAgL,YAAeyB,EAAK3M,EAAA+B,IAAEwK,GAAEvM,EAAA+B,IAAE0K,OAKnEjK,EAAKxC,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKiB,MAAKtC,EAAA6C,OAChCL,EAAM1C,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKmB,OAAMxC,EAAA6C,OAGlCqI,EAAIpL,EAAAW,QAAA,WACR,OAAA6J,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAApK,IAAAqK,sBAAA,EAAArK,EAAoBsK,KAAK,UAAO,QAIlFhC,EAAErE,UASA,IAAAgI,UATF3D,SASE2D,EAMC/C,cAAa,YAAAC,+CANd8C,EAOC7C,aAAY,YAAAD,+DAPb8C,aAkBEhD,EAAGzB,UAAHyB,EAGCC,cAAa,YAAAC,+CAHdF,EAICG,aAAY,YAAAD,sEAJbpK,EAAAsK,cAAAJ,EAAG,IAAAlK,EAAA+B,IACC2K,GAAQL,MAAMxC,GADlB7J,EAAAsK,cAAAJ,EAAG,YAAAlK,EAAA+B,IAES2K,GAAQL,MAAMc,WAF1BnN,EAAAsK,cAAAJ,WAKSiC,qBALTjC,EAAG,OAAAlK,EAAA+B,IAeI2K,GAAQL,MAAMe,OAASjM,IAAQ,sBAftC+I,EAAG,GAAAmD,EAAA,CAMyBzH,OAAA1F,EAAA+C,WAAA,OAAS,6FAIhC,OACAjD,EAAA+B,IAAA2K,GAAQL,MAAMe,OACZ,UACA,yCACkBhC,kBAdzBlB,eADElK,EAAA+B,IAAA2K,GAAQL,SAAKiB,kCAqBfC,EAAGC,UAAHD,EAICpD,cAAa,YAAAC,+CAJdmD,EAKClD,aAAY,YAAAD,sEALbpK,EAAAsK,cAAAiD,EAAG,IAAAvN,EAAA+B,IACC2K,GAAQF,IAAI3C,GADhB7J,EAAAsK,cAAAiD,EAAG,YAAAvN,EAAA+B,IAES2K,GAAQF,IAAIW,WAFxBnN,EAAAsK,cAAAiD,WAGSpB,qBAHToB,EAAG,OAAAvN,EAAA+B,IAWI2K,GAAQF,IAAIY,OAASjM,IAAQ,sBAXpCoM,EAAG,GAAAE,EAAA,CAMyB7H,OAAA1F,EAAA+C,WAAA,OAAS,6FAGD,OAASjD,EAAA+B,IAAA2K,GAAQF,IAAIY,OAAS,UAAY,yCACrDhC,kBAVzBmC,eADEvN,EAAA+B,IAAA2K,GAAQF,OAAG5F,aA9CjB2C,wCAAAA,EAAE,2EAAAH,EAAA,CAAA5G,MAAA,GAAAxC,EAAA+B,IAEeS,OAAKE,OAAA,GAAA1C,EAAA+B,IACJW,SAHlB1C,EAAAsK,cAAAf,gBAIE/G,IAJFxC,EAAAsK,cAAAf,iBAKE7G,IALF1C,EAAAsK,cAAAf,0BAMsBhI,KAAKiB,SAAKtC,EAAA8B,KAAST,KAAKmB,UAG5C1C,EAAAsK,cAAA4C,aACEd,IADFpM,EAAAsK,cAAA4C,aAEEZ,IAFFtM,EAAAsK,cAAA4C,aAGEX,IAHFvM,EAAAsK,cAAA4C,aAIET,IAJFzM,EAAAsK,cAAA4C,YAKE3E,mBALF2E,EAAG,GAAA3C,EAAA,CAQyB3E,OAAA1F,EAAA+C,WAAA,OAAS,UACD,iBAAA/C,EAAA+C,WAAA,OAAS,uBAC9BkJ,kFAGUf,kBAtB3B7B,UAFD,sLCrCI,IAAApI,qBAAQ,eACRgL,2BAAc,WACd5D,uBAAU,SASNmF,EAAQ1N,EAAAW,QAAA,IAAAT,EAAA+B,SACH8G,IAAG,EAAIvD,IAAGE,QAAC,CAAUF,EAAGA,SAASD,OAAOC,EAAGE,EAAGA,EAACxF,EAAA8B,KAAQuD,OAAOG,MAInEiI,EAAQ3N,EAAAW,QAAA,eACP+M,GAAS3D,OAAM,MAAS,SACtB6D,KAAUC,GAAI7N,EAAA+B,IAAI2L,cAElBE,EAAMpI,KAAKoI,EAAMlI,KACtBmI,EACG9E,IAAK+E,QAAWA,EAAEtI,KAAKsI,EAAEpI,MACzB6F,KAAK,IACLvB,SAKD0C,EAAO1M,EAAAW,QAAA,sBACP+M,GAAS3D,OAAS,EAAC,MAAA,CAAWsC,MAAO,KAAaG,IAAK,YACrDuB,EAAO,CAAIC,EAAaxF,IAAgBuC,KAAK6B,MAAMpE,EAAE9C,EAAIsI,EAAEtI,EAAG8C,EAAEhD,EAAIwI,EAAExI,GAEtEyI,EAAWF,EAAO/N,EAAA+B,IAAC2L,GAAS,GAAC1N,EAAA+B,IAAG2L,GAAS,IACzCQ,EAASH,EAAO/N,EAAA+B,IAAC2L,SAASA,GAAS3D,OAAS,GAAC/J,EAAA+B,IAAG2L,GAAQ1N,EAAA+B,IAAC2L,GAAS3D,OAAS,IAgBxE,MAAA,CAAAsC,MAdKQ,EAAAA,SAASC,8CACRT,oBAEb4B,EAAWlD,KAAKgC,SAChBW,GAAS,GAAGlI,QACZkI,GAAS,GAAGhI,GASE8G,IAPJK,EAAAA,SAASC,8CACNN,kBAEb0B,EACAlO,EAAA+B,IAAA2L,SAASA,GAAS3D,OAAS,GAAGvE,EAC9BxF,EAAA+B,IAAA2L,SAASA,GAAS3D,OAAS,GAAGrE,MAK5BlD,EAAKxC,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKiB,MAAKtC,EAAA6C,OAChCL,EAAM1C,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKmB,OAAMxC,EAAA6C,WAGzCwG,EAAErE,UAQA,IAAAgF,UARFX,SAQEW,EAECC,cAAa,YAAAC,+CAFdF,EAGCG,aAAY,YAAAD,+DAHbF,aAeEqD,EAAG9E,UAAH8E,EAKCpD,cAAa,YAAAC,+CALdmD,EAMClD,aAAY,YAAAD,sEANbpK,EAAAsK,cAAAiD,EAAG,IAAAvN,EAAA+B,IACC2K,GAAQL,MAAMxC,GADlB7J,EAAAsK,cAAAiD,EAAG,YAAAvN,EAAA+B,IAES2K,GAAQL,MAAMc,WAF1BnN,EAAAsK,cAAAiD,WAGSpB,qBAHToB,EAAG,OAAAvN,EAAA+B,IAII2K,GAAQL,MAAMe,OAASjM,IAAQ,sBAJtCoM,EAAG,GAAAF,EAAA,CAOyBzH,OAAA1F,EAAA+C,WAAA,OAAS,qEAGhC,OACAjD,EAAA+B,IAAA2K,GAAQL,MAAMe,OACZ,UACA,uDAbPG,eADEvN,EAAA+B,IAAA2K,GAAQL,SAAKiB,kCAoBfa,EAAGX,UAAHW,EAKChE,cAAa,YAAAC,+CALd+D,EAMC9D,aAAY,YAAAD,sEANbpK,EAAAsK,cAAA6D,EAAG,IAAAnO,EAAA+B,IACC2K,GAAQF,IAAI3C,GADhB7J,EAAAsK,cAAA6D,EAAG,YAAAnO,EAAA+B,IAES2K,GAAQF,IAAIW,WAFxBnN,EAAAsK,cAAA6D,WAGShC,qBAHTgC,EAAG,OAAAnO,EAAA+B,IAII2K,GAAQF,IAAIY,OAASjM,IAAQ,sBAJpCgN,EAAG,GAAAV,EAAA,CAOyB7H,OAAA1F,EAAA+C,WAAA,OAAS,qEAED,OAASjD,EAAA+B,IAAA2K,GAAQF,IAAIY,OAAS,UAAY,uDAT9Ee,eADEnO,EAAA+B,IAAA2K,GAAQF,OAAG5F,aAzCjB2C,wCAAAA,EAAE,8GAAAH,EAAA,CAAA,MAAA,GAAApJ,EAAA+B,IAEaS,OAAK,MAAA,GAAAxC,EAAA+B,IACLW,SAHf1C,EAAAsK,cAAAf,gBAIE/G,IAJFxC,EAAAsK,cAAAf,iBAKE7G,IALF1C,EAAAsK,cAAAf,0BAMsBhI,KAAKiB,SAAKtC,EAAA8B,KAAST,KAAKmB,UAE5C1C,EAAAsK,cAAAJ,YACIyD,IADJ3N,EAAAsK,cAAAJ,YAIE3B,mBAJF2B,EAAG,GAAAK,EAAA,aAMY6D,OAAAjC,KAAehL,iCAEFyE,OAAA1F,EAAA+C,WAAA,OAAS,UACD,iBAAA/C,EAAA+C,WAAA,OAAS,iFAjB/CsG,UAFD,kMCpDI,IAAApI,qBAAQ,eACRgL,2BAAc,WACd5D,uBAAU,GAEViC,EAAWxK,EAAAyK,KAAAvK,EAAA,cAAA,GAAA,IAAGwK,EAAAA,yBAAyBC,OAMvC1G,0BAAa,UAIToK,EAASrO,EAAAW,QAAA,IAAAT,EAAAoO,0DAGTZ,EAAQ1N,EAAAW,QAAA,IAAAX,EAAA+B,IACZsM,GAAUtF,MAAOvD,IAAGE,QAAC,CAAUF,EAAGA,EAACtF,EAAA8B,KAAQuD,OAAOC,EAAGE,EAAGA,EAACxF,EAAA8B,KAAQuD,OAAOG,MAIpEiI,EAAQ3N,EAAAW,QAAA,eACP+M,GAAS3D,OAAM,MAAS,SACtB6D,KAAUC,GAAI7N,EAAA+B,IAAI2L,GACnBa,IAASrO,EAAAoO,cAER,OAAA,KAAAV,EAAMpI,KAAKoI,EAAMlI,KACtBmI,EAAK9E,IAAK+E,QAAWA,EAAEtI,KAAKsI,EAAEpI,KAAK6F,KAAK,MACvCgD,EAAY,GAAK,OAClBvE,SAGEwE,EAAYxO,EAAAW,QAAA,MAAAT,EAAAoO,eAAApO,EAAA+B,SAAwC8H,OAAS,GAE7DvH,EAAKxC,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKiB,MAAKtC,EAAA6C,OAChCL,EAAM1C,EAAAW,QAAA,IAAAT,EAAA8B,KAAiBT,KAAKmB,OAAMxC,EAAA6C,OAElCqI,EAAIpL,EAAAW,QAAA,WACR,OAAA6J,MAAgBE,EAAAA,yBAAyBW,OAAM,OAAApK,IAAAqK,sBAAA,EAAArK,EAAoBsK,KAAK,UAAO,QAIlFhC,EAAErE,UAQA,IAAAgF,UARFX,SAQEW,EAECC,cAAa,YAAAC,+CAFdF,EAGCG,aAAY,YAAAD,+DAHbF,aAqBEqD,EAAG9E,iCAAHzI,EAAAsK,cAAAiD,EAAG,IAAA,KAAAvN,EAAA+B,IACM2L,GAAQ1N,EAAA+B,IAAC2L,GAAS3D,OAAS,GAAGvE,KAACxF,EAAA+B,IAAI2L,SAASA,GAAS3D,OAAS,GAAGrE,OAAC1F,EAAA+B,IAAM2L,GAAS,GAAGlI,KAACxF,EAAA+B,IAAI2L,GAAS,GAAGhI,mBAD9G6H,EAAG,GAAAF,EAAA,QAGYlB,oDAEU,cACT,kBANhBoB,qBADEiB,IAAYtO,EAAA+B,SAAa8H,OAAS,GAAClD,EAAAyG,kCAYrC9B,EAAGgC,IAAHxN,EAAAsK,cAAAkB,YAMU,2CANVA,EAAG,IAAAxL,EAAA+B,IACC2L,GAAS,GAAGlI,EAAIvB,IAAU/D,EAAA6C,MAAW,mBADzCyI,EAAG,IAAAxL,EAAA+B,IAEC2L,GAAS,GAAGhI,EAAIzB,IAAU/D,EAAA6C,MAAW,GAFzC/C,EAAAsK,cAAAkB,UAGQvH,IAAU/D,EAAA6C,OAHlB/C,EAAAsK,cAAAkB,WAISvH,IAAU/D,EAAA6C,OAJnB/C,EAAAsK,cAAAkB,SAKOW,KALPnM,EAAAsK,cAAAkB,WAOSW,KAPTnM,EAAAsK,cAAAkB,+BAQ6B,gBAR7BA,qBADEgD,IAAYtO,EAAA+B,SAAa8H,QAAU,GAAClD,EAAAD,aAvC1C2C,wCAAAA,EAAE,2EAAAH,EAAA,CAAA5G,MAAA,GAAAxC,EAAA+B,IAEeS,OAAKE,OAAA,GAAA1C,EAAA+B,IACJW,SAHlB1C,EAAAsK,cAAAf,gBAIE/G,IAJFxC,EAAAsK,cAAAf,iBAKE7G,IALF1C,EAAAsK,cAAAf,0BAMsBhI,KAAKiB,SAAKtC,EAAA8B,KAAST,KAAKmB,UAE5C1C,EAAAsK,cAAAJ,YACIyD,IADJ3N,EAAAsK,cAAAJ,YAIE3B,mBAJF2B,EAAG,GAAAK,EAAA,CAK0BkE,KAAAvO,EAAAoO,cAAA,OAASnN,IACvBiN,OAAAjC,KAAehL,iCAEFyE,OAAA1F,EAAA+C,WAAA,OAAS,wCAEhC,OACU,gBAAV9B,IACE,gBACA,qFAGkBiK,kBAxB3B7B,UAFD,mICvCQ,MAAA/I,EAAuBpB,IAGvBsB,EAAkBV,EAAAW,QAAA,IACtBH,EAAqBI,SAAWJ,EAAqBI,SAASC,YAAWX,EAAAY,YAAe,MAItF,IAAA4N,EAAoC,KACpCC,EAAQ3O,EAAAI,OAAO,GAGnBJ,EAAAyB,YAAO,6BACciN,EAAS,OAC5BA,EAAUE,cAEJC,EAAY,OAAA5N,SAAO6N,mBAAP,EAAA7N,EAAA8N,KAAAC,YACbH,EAAS,aAERI,EAAQC,SAASC,cACvBF,EAAMG,mBAAmBV,GACzBO,EAAMI,UAAS,GACfR,EAAUS,kBACVT,EAAUU,SAASN,KAIrBjP,EAAAwP,gBAAW,KACL,IACI,MAAAC,EAAMC,UACNC,EACJ,mBAAmBC,KAAKF,UAAUG,YACV,aAAvBH,UAAUI,WAA2B,MAAAL,OAAA,EAAAA,EAAKM,gBAAiB,EAC9D/P,EAAA0B,IAAAiN,EAAQgB,GAAG,EACb,CAAA,MACE3P,EAAA0B,IAAAiN,GAAQ,EACV,UAYIqB,EAAchQ,EAAAW,QAAA,IAAAT,EAAA2F,WAAuBtF,OAAO0P,SAAQ/P,EAAA6C,OAEpDmN,EAASlQ,EAAAW,QAAA,IAAAX,EAAA+B,IACb4M,IAAKzO,EAAAiQ,WAAAnQ,EAAA+B,IAAiBiO,GAAiB,GAAChQ,EAAA+B,IAAIiO,GAFhB,IAIxBI,EAAcpQ,EAAAW,QAAA,IAAAX,EAAA+B,IAAYmO,GAJF,SAIsCF,IAC9DK,sBAAqBH,GAASlQ,EAAA+B,IAAGiO,GALT,GAKkD,GAC1EM,sBAA2BJ,GAAY,IAAGlQ,EAAA+B,IAAGsO,GAAY,KAGzDxF,6BAA6BtK,OAAOyB,KAAKT,KAAKiB,MAAKtC,EAAA6C,OACnD+H,6BAA6BvK,OAAOyB,KAAKT,KAAKmB,OAAMxC,EAAA6C,OAEpDwN,6BACOhQ,OAAOiQ,gBAAkBC,uBAAqBC,IACrD,0BACWnQ,OAAOiQ,gBAAkBC,EAAAA,qBAAqBE,OACvD,SACA,gBAKT1L,EAAEC,UAAFD,EAOCkF,cAAa,YAAAC,+CAPdnF,EAQCoF,aAAY,YAAAD,+CAGX,IAAAwG,UAXF3L,uBAWE2L,GAAG,WAAHA,eAAAA,EAAGC,GACSnC,EAASmC,EAAA,IAATnC,WAZdzJ,uCAAAA,EAAE,GAAAmE,EAAA,oCAEeyB,uBACCC,iBACF,EAC0BlF,OAAA1F,EAAA+C,aAAA/C,EAAAiQ,UAAA,OAAS,UACD,iBAAAjQ,EAAA+C,aAAA/C,EAAAiQ,UAAA,OAAS,yBAKzDS,EAAG,kBAAA1Q,EAAAiQ,yBAAHS,EAAG,GAAArG,EAAA2B,GAqB4ClM,EAAA8Q,SAAAC,EAAA7Q,EAAA2F,WAAAtF,OAAOyQ,mFAd9BT,GACCpP,MAAAjB,EAAA2F,WAAAtF,OAAO0Q,+BACXb,qBACDc,EAAAA,gBAAehR,EAAA2F,WAAYtF,OAAO4Q,yBACnCC,EAAAA,mBAAkBlR,EAAA2F,WAAYtF,OAAO8Q,WACpB,mBAAAnR,EAAA2F,WAAAtF,OAAO+Q,gBAChB/I,QAAArI,EAAA2F,WAAAtF,OAAOgI,oBACpB2H,GAAS,GAAAlQ,EAAA+B,IAAMuO,MAAqB,oBACnCJ,GAAS,GAAAlQ,EAAA+B,IAAMuO,MAAqB,8CAGxB1K,OAAA1F,EAAAiQ,UAAA,OAAS,yCAElBD,GAAS,SAAAlQ,EAAA+B,IAAYsO,WAAe,oCApBtDrQ,EAAAmD,MAAA,OAAAyN,EA1CQ,WACF5Q,EAAA+B,IAAArB,IAAuBgO,SAC5BhO,GAAmBqD,iBAAgB7D,EAAA8D,UAAA9D,EAAA2F,WAAuBtF,OAAOhB,GAAE,CACjEyR,SAAUtC,EAAU6C,WAExB,cA0BDtM,UAHD,mGC5EI,IAAAuM,2BAAc,GAEXzR,EAAQC,EAAAC,WAAAC,EAAA,+FAGP,MAAAM,EAAuBpB,QAEzBqS,EAAWzR,EAAAI,MAAsB,MACjCsR,EAAwB,KAEkB,MAAA9G,EAAA5K,EAAAW,QAAA,IAAAT,EAAA2F,WAAA7D,KAAKT,6BAA3CiB,8BAAOE,cAGThC,EAAkBV,EAAAW,QAAA,IACtBH,EAAqBI,SAAWJ,EAAqBI,SAASC,YAAWX,EAAAY,YAAe,MAmCjF,SAAA6Q,IACHD,IACFE,IAAIC,gBAAgBH,GACpBA,EAAS,KAEb,CApCA1R,EAAAyB,YAAO,KACD,GAAAzB,EAAA+B,IAAArB,GAAoB,OAChBoR,EAAI9R,EAAA+B,IAAGrB,GAAmBqR,iBAAgB,CAC9C/N,UAAS9D,EAAA8D,UACT6B,WAAY/B,EAAAA,UAAS5D,EAAA2F,YACrBmM,QAAO,CACLR,YAAAA,IACAS,IAAKjD,OAAOkD,oBAUH,OANbJ,EAAKK,KAAMC,IACH,MAAAC,EAAMT,IAAIU,gBAAgBF,GAChCpS,EAAA0B,IAAA+P,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,KACJ5R,0FAJL8S,cAAAA,qBADEpB,MAAQnE,0BAFb,sEC1DMwF,EAAc9S,EAAAW,QAAA,KAAA,iBAA4BJ,OAAQhB,GAAEW,EAAA2F,WAAatF,OAAOhB,UAG7E0F,EAAEC,UAAFD,EAICkF,cAAa,YAAAC,+CAJdnF,EAKCoF,aAAY,YAAAD,+CAEX2I,UAPF9N,GAOkB,yGAAsC6N,gDAPxD7N,uCAAAA,EAAE,6DAAAmE,EAAA,CAEkC,iBAAAlJ,EAAA+C,WAAA,OAAS,sCAF7CgC,UAFD,kCCiDM+N,EAAkChT,EAAAC,WAAAC,EAAA,CAAA,UAAA,WAAA,aAGhC,MAAAM,EAAuBpB,IACvB6T,EAAsBC,EAAAA,yBACtBC,EAAkBC,qBAAkB,CACxCtS,aAA6BA,WAC7BkD,UAAS9D,EAAmB8D,YAI1B,IAAAqP,EAAcrT,EAAAI,MAAMJ,EAAAK,MAAA,KACpBiT,EAAiBtT,EAAAI,MAAiC,MAClDmT,EAAYvT,EAAAI,MAAsB,YAGhCM,EAAkBV,EAAAW,QAAA,IACtBH,EAAqBI,SACjBJ,EAAqBI,SAASC,cAA6BC,YAC3D,MAINd,EAAAyB,YAAO,eACAf,GAAkB,aAGjB8S,EAAYxT,EAAA+B,IAAGrB,GAAmB+S,WACxCzT,EAAA0B,IAAA2R,EAAcK,EAAAA,0BAA0BF,IAA+BxP,YAAS,GAChFhE,EAAA0B,IAAA4R,EAAiBK,EAAAA,iCAAiCH,IAA+BxP,YAAS,GAGpF,MAAA4P,QAAMlT,GAAmBmT,cAAezT,IAC5CJ,EAAA0B,IAAA2R,EAAcK,EAAAA,0BAA0BtT,IAAwB4D,YAAS,GACzEhE,EAAA0B,IAAA4R,EAAiBK,EAAAA,iCAAiCvT,IAAwB4D,YAAS,eAExE,MAAA4P,OAAA,EAAAA,YAITE,EAA2C,CAC/CC,cAAa,CAAGC,EAAYC,KACtBA,EAAGC,SAAWD,EAAGE,eAAanU,EAAA+B,IAAIrB,KACpCV,EAAA+B,IAAArB,GAAmB0T,qBACnBpU,EAAA0B,IAAA6R,EAAY,SAWT,SAAAc,EAAYpI,EAA4BpG,GAC/CoG,EAAEqI,kBACEtU,EAAA+B,IAAArB,IAAsBuS,EAAoBrS,iBAC5CF,GAAmB6T,iBAAgBrU,EAAkB8D,UAAW6B,EAAWtF,OAAOhB,IAClF0T,EAAoBrS,SAAS4T,QACzB3O,EAAWtF,OAAOhB,KAAES,EAAA+B,IAAKwR,IAC3BvT,EAAA0B,IAAA6R,EAAY,MAGlB,CAdAvT,EAAAyB,YAAO,IACE0R,EAAgBsB,SAASX,EAAQ,CAAIhT,aAA6BA,yEAgBtEuS,GAAexN,GAAYA,EAAWtF,OAAOhB,GAAE,CAAA6G,EAAhCP,WACZ5C,EAAUjD,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAGuR,SAAHtT,EAAAA,EAAmBO,OAAOhB,MAAES,EAAA+B,IAAK8D,GAAWtF,OAAOhB,KAC7D4Q,sBAAYoD,KAASvT,EAAA+B,IAAK8D,GAAWtF,OAAOhB,IAC5CmV,6CAAOhU,aAAoBiU,sBAAqB3U,EAAA+B,IAAC8D,GAAWtF,UAC5DqU,EAAY5U,EAAAW,QAAA,IAAGkU,EAAAA,eAAc7U,EAAA+B,IAAC8D,GAAWtF,OAAOuU,WAAaC,EAAAA,aAAaC,qDAepE,MAAAlP,KAASmP,EAAGjV,EAAAkV,QACnBC,mBACKF,EAAG,+BACNhS,yBACuBF,OACd4F,QAAAsD,GAAMoI,EAAYpI,QAAGpG,QAdtB,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAAMoI,EAAYpI,QAAGpG,+CACR+O,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DAsBR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBS,mBACKV,EAAG,+BACNhS,yBACuBF,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QAd/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,+CACjC+O,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DAsBR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBU,mBACKX,EAAG,+BACNhS,yBACuBF,OACd4F,QAAAsD,GAAiCoI,EAAYpI,QAAGpG,QAdjD,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,+CACjC+O,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DAuBR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBW,mBACKZ,EAAG,sBACiBlS,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QAd/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,WACjD,6CACgB+O,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DAsBR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBY,mBACKb,EAAG,sBACiBlS,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QAd/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,WACjD,6CACgB+O,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DAsBR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBa,mBACKd,EAAG,sBACiBlS,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QAd/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,WACjD,6CACgB+O,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DAsBR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBc,mBACKf,EAAG,sBACiBlS,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QAd/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,oBAK9BmV,EAAAA,eAAc7U,EAAA+B,IAAC8D,GAAWtF,OAAOuU,WAAaC,EAAAA,aAAakB,WAVpFT,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,iHAIU8C,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,WACjD,+BACwBlB,mDACOC,gFAEnCoO,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DA4BR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBgB,mBACKjB,EAAG,+BACNhS,yBACuBF,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QArB/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,kBAEvD1D,gBAAkB6L,GAAC,CAAMA,EAAEmI,WAAW9J,MAAO2B,EAAEmI,WAAW3J,KAC1D/I,qBAAsBuK,EAAG/L,KAAA,IACpB+L,EACHmI,WAAU,CAAI9J,MAAOpK,EAAS,GAAIuK,IAAKvK,EAAS,kDAG5B2S,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DA0BR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBkB,mBACKnB,EAAG,+BACNhS,yBACuBF,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QAjB/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IANvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,iCACalB,mDACOC,iKAItC3B,IACU8C,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,kBAEvD1D,gBAAkB6L,GAAMA,EAAE/L,SAC1BwB,qBAAsBuK,EAAG/L,SAAmB+L,EAAG/L,yDAEzB2S,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DA0BR,MAAA5P,KAASmP,EAAGjV,EAAAkV,QACnBmB,mBACKpB,EAAG,+BACNhS,yBACuBF,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QAlB/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,kBAEvD1D,gBAAkB6L,GAAMA,EAAE/L,SAC1BwB,qBAAsBuK,EAAG/L,SAAmB+L,EAAG/L,yDAEzB2S,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DA0BR,MAAA5P,KAASvF,EAAMP,EAAAkV,wCAKJrP,GAAYtF,OAAAA,OAJ9B+V,EAAOlQ,EAAA,2BACuBtF,0CAC5BmC,iCACAkN,+DAE2BnM,gCACJjB,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,QArB9C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,QAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,WAAU+K,KAC5CkF,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,oBAI9BmV,EAAAA,eAAc7U,EAAA+B,IAAC8D,GAAWtF,OAAOuU,WAAaC,EAAAA,aAAaC,SATpFQ,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAAMoI,EAAYpI,QAAGpG,yDAEhB2B,cAAAyE,IACdA,EAAEqI,kBACFtU,EAAA0B,IAAA6R,EAASvT,EAAA+B,IAAG8D,GAAWtF,OAAOhB,IAAE,SAE9ByT,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,0DAyBR,MAAA5P,KAASyQ,EAAOvW,EAAAkV,QACvBsB,EAAIpQ,EAAA,2BAC0BtF,0CAC5BmC,kCACA4C,6BAC2B7B,gCACJjB,OACd4F,QAAAsD,GAA+BoI,EAAYpI,QAAGpG,OAhB/C,IAAAqG,EAAAlM,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYhQ,eAAe,IACjCiQ,EAAArV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAYE,eAAe,IAC7BC,EAAAvV,EAAAW,QAAA,WAAAX,OAAAA,OAAAA,EAAAA,EAAA+B,IAAA2S,SAAA1U,EAAAA,EAAMoV,YAAY1V,mBAAmB,IALvD8V,EAAkBpP,EAAApG,EAAAkI,mDACErC,kCAClB5C,8IAI+B0B,mDACOC,sBAC5BmB,SAAAkG,GAA+BoI,EAAYpI,QAAGpG,+CACjC+O,IAAY,WAChC5B,GAEMlN,WAAQ2P,QAAA,CAAAC,SAAA,mBAbZe,EAAAA,cAAQ5Q,OAAU6Q,kCA7BlBC,mBAAW9Q,MAAU+Q,GAAA/P,EAAAgQ,GAAA,kCA1BrBC,kBAAUjR,MAAUkR,GAAAlQ,EAAAC,GAAA,kCA1BpBkQ,mBAAWnR,MAAUyC,GAAAzB,EAAAQ,GAAA,kCA7BrB4P,eAAOpR,MAAUqR,GAAArQ,EAAAsQ,GAAA,kCAtBjBC,oBAAYvR,MAAUwR,GAAAxQ,EAAAyQ,GAAA,kCAtBtBC,mBAAW1R,MAAUuC,GAAAvB,EAAA2Q,GAAA,kCAtBrBC,oBAAY5R,MAAU6R,GAAA7Q,EAAA8Q,GAAA,kCAtBtBC,oBAAY/R,MAAUuB,GAAAP,EAAAgR,GAAA,kCAtBtBC,iBAASjS,MAAUkS,GAAAlR,EAAAmR,GAAA,kCAtBnBC,iBAASpS,MAAUe,GAAAC,EAAAqR,GAAA,kCAtBxBC,cAAMtS,MAAUyH,GAAAzG,EAAAuR,GAAA,0CARvB,2MChHQ,MAAAnF,EAAsBC,EAAAA,yBACtB1S,EAAuBpB,IAEzB,IAAAiZ,EAAQrY,EAAAI,MAAMJ,EAAAK,MAAA,KACdiY,EAAetY,EAAAI,MAAoB,MACnCmY,EAAavY,EAAAI,MAA8B,YAGzCoY,EAAiBxY,EAAAW,QAAA,IACrBsS,EAAoBrS,SAAWqS,EAAoBrS,SAASC,YAAWX,EAAAY,YAAe,MAElFJ,EAAkBV,EAAAW,QAAA,IACtBH,EAAqBI,SAAWJ,EAAqBI,SAASC,YAAWX,EAAAY,YAAe,MAI1Fd,EAAAyB,YAAO,eACA+W,GAAiB,cAEbxY,EAAA+B,IAAGyW,GAAkBC,kBAAiB,WAC7CJ,EAAKrY,EAAA+B,IAAGyW,GAAkBE,yBAAwBxY,EAAA8D,YAAA,SAClDsU,EAAYtY,EAAA+B,IAAGyW,GAAkBG,uBAAsBzY,EAAA8D,YAAA,OAM3DhE,EAAAyB,YAAO,eACAf,GAAkB,aAGvB6X,EAAUvY,EAAA+B,IAAGrB,GAAmBkY,iBAAa,gBAEjClY,GAAmBmY,mBAAoBnE,IACjD1U,EAAA0B,IAAA6W,EAAa7D,GAAI,OAKf,MAAAE,EAAY5U,EAAAW,QAAA,iBAAAX,OAAAA,OAAAA,EAAAA,OAAAA,EAAAA,EAAA+B,IAChBwW,SADgBvY,EAAAA,EACJ8Y,mBAAUhE,WAClBD,EAAAA,eAAc7U,EAAA+B,IAACwW,GAAWO,SAAShE,YACnC9U,OAAAA,EAAAA,OAAAA,EAAAA,EAAA+B,IAAAwW,aAAYO,eAAZ9Y,EAAAA,EAAsBqD,QAAS0V,EAAAA,qBAAqBC,UAClDnE,EAAAA,eAAeE,EAAAA,aAAakB,UAC5BpB,iBAAeE,EAAAA,aAAaC,oGAMjC/P,EAAEuI,wBAAFvI,qDAOUsT,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUvQ,UAF/BsN,EAAQoD,EAAA,6FAGOZ,0CATjBpT,uCAAAA,EAAE,GAAAmE,EAAA,wBACqBwL,uEADvB3P,yDAcAE,EAAE+T,wBAAF/T,qDAOUoT,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUvQ,UAF/ByN,EAAQmD,EAAA,6FAGOd,0CATjBlT,uCAAAA,EAAE,GAAAoF,EAAA,wBACqBqK,uEADvBzP,yDAcAuB,EAAEC,wBAAFD,qDAOU6R,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUvQ,UAF/BuN,EAAQsD,EAAA,6FAGOf,0CATjB3R,uCAAAA,EAAE,GAAA2G,EAAA,wBACqBuH,uEADvBlO,yDAcAQ,EAAEmS,wBAAFnS,qDAOUqR,GAAWO,mBAAU3X,qDACnBoX,GAAWO,mBAAUvQ,UAF/BwN,EAAOuD,EAAA,6FAGQjB,0CATjBnR,uCAAAA,EAAE,GAAAuG,EAAA,wBACqBmH,uEADvB1N,eADOlH,EAAA+B,IAAAwW,GAAWO,SAASzV,OAAS0V,uBAAqBQ,UAAQ1S,EAAAO,kCAd1DpH,EAAA+B,IAAAwW,GAAWO,SAASzV,OAAS0V,EAAAA,qBAAqBS,UAAS3S,EAAAkR,GAAAlR,EAAAgQ,GAAA,kCAd3D7W,EAAA+B,IAAAwW,GAAWO,SAASzV,OAAS0V,EAAAA,qBAAqBC,UAASnS,EAAAD,GAAAC,EAAAC,GAAA,kCAdhE9G,EAAA+B,IAAAwW,GAAWO,SAASzV,OAAS0V,EAAAA,qBAAqBU,UAAS5S,EAAAyG,GAAAzG,EAAAQ,GAAA,+BAD7DrH,EAAA+B,IAAAuW,IAAYtY,EAAA+B,IAAIwW,IAAUvY,EAAA+B,IAAIwW,GAAWO,YAAQpB,0BAFtD,kRChDQ,MAAAgC,0BAA0BA,QAE1BzT,EAAKjG,EAAAW,QAAA,KAAA,CACT2E,KAAItF,EAAA+B,IAAE2X,GAAOnU,OAAOC,EAACtF,EAAA6C,MACrB0C,IAAGzF,EAAA+B,IAAE2X,GAAOnU,OAAOG,EAACxF,EAAA6C,MACpBP,MAAKxC,EAAA+B,IAAE2X,GAAOnY,KAAKiB,MAAKtC,EAAA6C,MACxBL,OAAM1C,EAAA+B,IAAE2X,GAAOnY,KAAKmB,OAAMxC,EAAA6C,wDAK3BkC,EAAEwD,WASAmN,UATF3Q,GASQjF,EAAAkI,0BAAa,6CAA2ByR,eAThD1U,uCAAAA,EAAE,GAAAmE,EAAA,qBAEY9D,KAAA,GAAAtF,EAAA+B,IAAAkE,GAAMX,MAAI,OACXG,IAAA,GAAAzF,EAAA+B,IAAAkE,GAAMR,KAAG,OACPjD,MAAA,GAAAxC,EAAA+B,IAAAkE,GAAMzD,OAAK,OACVE,OAAA,GAAA1C,EAAA+B,IAAAkE,GAAMvD,QAAM,4DAL5BuC,yDAYAE,EAAEyU,WASAjE,UATFxQ,GASQnF,EAAAkI,0BAAa,6CAA2ByR,eAThDxU,uCAAAA,EAAE,GAAAoF,EAAA,qBAEYjF,KAAA,GAAAtF,EAAA+B,IAAAkE,GAAMX,MAAI,OACXG,IAAA,GAAAzF,EAAA+B,IAAAkE,GAAMR,KAAG,OACPjD,MAAA,GAAAxC,EAAA+B,IAAAkE,GAAMzD,OAAK,OACVE,OAAA,GAAA1C,EAAA+B,IAAAkE,GAAMvD,QAAM,4DAL5ByC,yDAYAuB,EAAEmT,WASAxD,UATF3P,GASS1G,EAAAkI,0BAAa,6CAA2ByR,eATjDjT,uCAAAA,EAAE,GAAA2G,EAAA,qBAEY/H,KAAA,GAAAtF,EAAA+B,IAAAkE,GAAMX,MAAI,OACXG,IAAA,GAAAzF,EAAA+B,IAAAkE,GAAMR,KAAG,OACPjD,MAAA,GAAAxC,EAAA+B,IAAAkE,GAAMzD,OAAK,OACVE,OAAA,GAAA1C,EAAA+B,IAAAkE,GAAMvD,QAAM,4DAL5BgE,yDAYAQ,EAAE4S,WASA1D,UATFlP,GASUlH,EAAAkI,0BAAa,6CAA2ByR,eATlDzS,uCAAAA,EAAE,GAAAuG,EAAA,qBAEYnI,KAAA,GAAAtF,EAAA+B,IAAAkE,GAAMX,MAAI,OACXG,IAAA,GAAAzF,EAAA+B,IAAAkE,GAAMR,KAAG,OACPjD,MAAA,GAAAxC,EAAA+B,IAAAkE,GAAMzD,OAAK,OACVE,OAAA,GAAA1C,EAAA+B,IAAAkE,GAAMvD,QAAM,4DAL5BwE,yDAYA6S,EAAEC,WASA9D,UATF6D,GASM/Z,EAAAkI,0BAAa,6CAA2ByR,eAT9CI,uCAAAA,EAAE,GAAAE,EAAA,qBAEY3U,KAAA,GAAAtF,EAAA+B,IAAAkE,GAAMX,MAAI,OACXG,IAAA,GAAAzF,EAAA+B,IAAAkE,GAAMR,KAAG,OACPjD,MAAA,GAAAxC,EAAA+B,IAAAkE,GAAMzD,OAAK,OACVE,OAAA,GAAA1C,EAAA+B,IAAAkE,GAAMvD,QAAM,4DAL5BqX,yDAYAG,EAAEC,WASAhF,UATF+E,GASKla,EAAAkI,0BAAa,6CAA2ByR,eAT7CO,uCAAAA,EAAE,GAAAE,EAAA,qBAEY9U,KAAA,GAAAtF,EAAA+B,IAAAkE,GAAMX,MAAI,OACXG,IAAA,GAAAzF,EAAA+B,IAAAkE,GAAMR,KAAG,OACPjD,MAAA,GAAAxC,EAAA+B,IAAAkE,GAAMzD,OAAK,OACVE,OAAA,GAAA1C,EAAA+B,IAAAkE,GAAMvD,QAAM,4DAL5BwX,yDAYAG,EAAEC,WAUA,IAAAC,UAVFF,iBAAAA,wCAAAA,EAAE,GAAAG,EAAA,qBAEYlV,KAAA,GAAAtF,EAAA+B,IAAAkE,GAAMX,MAAI,OACXG,IAAA,GAAAzF,EAAA+B,IAAAkE,GAAMR,KAAG,OACPjD,MAAA,GAAAxC,EAAA+B,IAAAkE,GAAMzD,OAAK,OACVE,OAAA,GAAA1C,EAAA+B,IAAAkE,GAAMvD,QAAM,8DAK1B6X,EAAE,GAAAE,EAAA,4DAGiCd,KAAK1I,WAAa,YAAS,qDAbhEoJ,yBADehX,OAAS0V,EAAAA,qBAAqB2B,YAAQrD,4CAZtChU,OAAS0V,EAAAA,qBAAqB4B,MAAGvS,GAAAvB,EAAAgQ,GAAA,4CAZjCxT,OAAS0V,EAAAA,qBAAqB6B,OAAIlD,GAAA7Q,EAAAC,GAAA,4CAZlCzD,OAAS0V,EAAAA,qBAAqB8B,WAAQzT,GAAAP,EAAAQ,GAAA,4CAZtChE,OAAS0V,EAAAA,qBAAqB+B,UAAO/C,GAAAlR,EAAAsQ,GAAA,4CAZrC9T,OAAS0V,EAAAA,qBAAqBgC,SAAMnU,GAAAC,EAAAyQ,GAAA,4CAZzCjU,OAAS0V,EAAAA,qBAAqBiC,SAAM1N,GAAAzG,EAAA2Q,GAAA,0BAFjD,kGCZQ,MAAAyD,EAAmBzb,QACrB0b,EAAWlb,EAAAI,MAAMJ,EAAAK,MAAA,IAAmC8a,MAEpDC,EAAwCpb,EAAAI,MAAO,MAC/Cib,EAAsCrb,EAAAI,MAAO,YAE3Ckb,EAAyB,CAC7BC,YAAW,EAAKC,SAAQC,uBACjBL,GAAY,OACX,MAAAM,QAAQN,GACdM,EAAMF,OAASA,EACfE,EAAMC,SAAY1P,UACV,MAAA2P,EAAQ,OAAA3a,EAAAgL,EAAEiI,OAA4B2H,YAA9B,EAAA5a,EAAsC,GAChD2a,IACFH,EAAOG,GACPF,EAAMI,MAAQ,KAGlBJ,EAAMK,SAERC,aAAY,EAAKC,SAAQC,WAAUC,YAAWC,iBACtC,MAAAC,QAAShB,OACVgB,IAAWA,EAAOC,WAAU,OAC3B,MAAAC,EAAMF,EAAOC,WAAW,UACzBC,EAAG,OAEF,MAAA1J,MAAU2J,MAChB3J,EAAI4J,YAAc,YAClB5J,EAAI6J,OAAM,KACF,IAAAC,aAAcna,EAAOoa,cAAela,GAAWmQ,EAI/C,MAAAgK,EAASX,EAAWA,EAAW1Z,EAAQ,EACvCsa,EAASX,EAAYA,EAAYzZ,EAAS,EAC1C8O,EAAczG,KAAKgS,IAAIF,EAAQC,EAAQ,GAEvCE,EAAaxa,EAAQgP,EACrByL,EAAcva,EAAS8O,EAE7B6K,EAAO7Z,MAAQwa,EACfX,EAAO3Z,OAASua,EAChBV,EAAIW,UAAUrK,EAAK,EAAG,EAAGmK,EAAYC,SAE/BE,EAAYZ,EAAIa,aAAa,EAAG,EAAGJ,EAAYC,GAC/B,iBAAXhB,GAAqBrK,IAAIC,gBAAgBgB,EAAIwK,KAExDjB,EAAU,CAAGe,YAAW3a,MAAOwa,EAAYta,OAAQua,KAErDpK,EAAIwK,IAAwB,iBAAXpB,EAAsBA,EAASrK,IAAIU,gBAAgB2J,KAIxEjc,EAAAyB,YAAO,KACA,GAAAwZ,EAAiBqC,cAEfrC,EAAiBqC,OAAOC,qBAAoBrd,EAAAY,WAAAZ,EAAA8D,UAAA9D,EAAA6C,MAAA,CACjDuY,WACAkC,UAAS,CAAGC,EAAQrd,WAClB8a,EAAQ,IAAOC,IAAGnb,EAAA+B,IAACmZ,KAAQ,GACvB9a,EACFJ,EAAA+B,IAAAmZ,GAASxZ,IAAI+b,EAAQrd,SAErB8a,GAASwC,OAAOD,mBAQzBE,EAAK3d,EAAA4d,YAAAC,eAALF,EAAK,GAAA,CAAA,EAAA,CAAAG,QAAA,qBAALH,EAAK9M,GAAA7Q,EAAA0B,IAAY0Z,EAAYvK,GAAA,IAAA7Q,EAAA+B,IAAZqZ,IACjB,IAAA2C,YADAJ,EAAK,eACLI,EAAM,GAAA,CAAA,EAAA,CAAAD,QAAA,qBAANC,EAAMlN,GAAA7Q,EAAA0B,IAAY2Z,EAASxK,GAAA,IAAA7Q,EAAA+B,IAATsZ,oBAAlB0C,EAAM,mBAGAC,MAAMC,KAAIje,EAAA+B,IAACmZ,GAASpS,WAAO,EAAS2U,EAAQtd,KAASsd,EAAM,CAAArX,EAAAC,iDAC/D6X,GAAe9X,EAAA,sBADwCpG,EAAA+B,IAAAoc,GAAA,yDAP1D,mIChCOpe,EAAQC,EAAAC,WAAAC,EAAA,uMAGP,MAAAke,EAAgBC,EAAAA,iBAAgB,IAAAne,EAAAY,YAEhCwd,2BAAgB,OAAA,OAAA3a,EAAA,OAAAqJ,EAAA,OAAA/L,EAAA,MAAAmd,OAAA,EAAAA,EAAeG,cAAf,EAAAtd,EAAwBiO,eAAxB,EAAAlC,EAAkCwR,gBAAKte,EAAA8D,aACvDvB,wDAAqB6b,aAAM/c,eAAMiB,QAAS,IAC1CG,wDAAsB2b,aAAM/c,eAAMmB,SAAU,IAE5C+b,EAAWze,EAAAW,QAAA,WAAA,YACG,IADHT,EAAA6C,MACY7C,EAAA6C,OAAoB,OAAA9B,EAAA,MAAAmd,OAAA,EAAAA,EAAeG,kBAASxb,QAAS,IAG5E2b,mCACiB,2BAEhB,OAAAzd,mBAAesd,cAAf,EAAAtd,EAAwB6B,WAAY6b,EAAAA,SAASC,cAIrD3Z,EAAEC,KAAFlF,EAAA6e,iBAAA5Z,qCAGKlF,IAAS,aADD6I,OAAOC,YAAYD,OAAOE,QAAO5I,EAAA+F,OAAQ8C,IAAG,EAAGC,EAAGC,KAAC,CAAA,SAAgBD,IAAKC,wBAFrFhE,GAKE6Z,EAAUC,EAAA,0MAKFN,gCACGC,iCACTjc,kCACAE,6NAMFqc,EAAUC,EAAA,oGAAiCR,MAC3CS,kBAAoB,oGAAiCT,cApBvDxZ,cAAAA,UAFD,+WnB9C8Bka,IACtB,MAAAC,EAAahgB,QAEfgB,EAAQJ,EAAAI,MAAAJ,EAAAK,MAAgCgf,EAAAA,yBAGtC,MAAAve,YAAsBqe,GAGtBG,EAAAtf,EAAAW,QAAA,IACJye,EAAWxe,gBAAYE,GAAase,EAAWxe,SAASC,kBAAYC,IAAc,aAGpFd,EAAAyB,uBACQb,EAAWwe,EAAWxe,SACtB2e,QAAQze,OAETF,IAAa2e,cAChBvf,EAAA0B,IAAAtB,EAAQif,EAAAA,wBAAA,GAIJ,MAAAG,EAAQ5e,EAASC,YAAY0e,GAM5B,aAHPnf,EAAQof,EAAM/L,YAAA,GAGP+L,EAAM3L,cAAe4L,IAC1Bzf,EAAA0B,IAAAtB,EAAQqf,GAAA,QAKN,YAAA7e,gBACK0e,EACT,EACI,SAAAlf,gBACKA,EACT"}