@embedpdf/plugin-annotation 2.0.0-next.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/vue/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-annotation.ts","../../src/vue/components/annotation-container.vue","../../src/vue/components/annotations/circle.vue","../../src/vue/components/annotations/free-text.vue","../../src/vue/components/annotations/ink.vue","../../src/vue/components/annotations/line.vue","../../src/vue/components/annotations/polygon.vue","../../src/vue/components/annotations/polyline.vue","../../src/vue/components/annotations/square.vue","../../src/vue/components/render-annotation.vue","../../src/vue/components/annotations/stamp.vue","../../src/vue/components/text-markup/highlight.vue","../../src/vue/components/text-markup/squiggly.vue","../../src/vue/components/text-markup/strikeout.vue","../../src/vue/components/text-markup/underline.vue","../../src/vue/components/annotations.vue","../../src/vue/components/text-markup.vue","../../src/vue/components/preview-renderer.vue","../../src/vue/components/annotation-paint-layer.vue","../../src/vue/components/annotation-layer.vue"],"sourcesContent":["import { ref, watch, computed, toValue, type MaybeRefOrGetter } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n} from '@embedpdf/plugin-annotation';\n\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\n\n/**\n * Hook for annotation state for a specific document\n * @param documentId Document ID (can be ref, computed, getter, or plain value)\n */\nexport const useAnnotation = (documentId: MaybeRefOrGetter<string>) => {\n const { provides } = useAnnotationCapability();\n const state = ref<AnnotationDocumentState>(\n provides?.value?.forDocument(toValue(documentId))?.getState() ?? initialDocumentState(),\n );\n\n watch(\n [provides, () => toValue(documentId)],\n ([providesValue, docId], _, onCleanup) => {\n if (providesValue && docId) {\n const scope = providesValue.forDocument(docId);\n state.value = scope.getState();\n\n const unsubscribe = scope.onStateChange((newState) => {\n state.value = newState;\n });\n onCleanup(unsubscribe);\n }\n },\n { immediate: true },\n );\n\n return {\n state,\n provides: computed(() => provides.value?.forDocument(toValue(documentId)) ?? null),\n };\n};\n","<template>\n <div data-no-interaction>\n <div v-bind=\"{ ...dragProps, ...doubleProps }\" :style=\"containerStyle\">\n <slot :annotation=\"currentObject\"></slot>\n\n <template v-if=\"isSelected && isResizable\">\n <template v-for=\"{ key, style, ...handle } in resize\" :key=\"key\">\n <slot\n v-if=\"slots['resize-handle']\"\n name=\"resize-handle\"\n v-bind=\"{ key, style, ...handle, backgroundColor: HANDLE_COLOR }\"\n >\n <!-- Fallback content if slot is provided but empty -->\n <div v-bind=\"handle\" :style=\"[style, { backgroundColor: HANDLE_COLOR }]\" />\n </slot>\n <div v-else v-bind=\"handle\" :style=\"[style, { backgroundColor: HANDLE_COLOR }]\" />\n </template>\n </template>\n\n <template v-if=\"isSelected && vertices.length > 0\">\n <template v-for=\"{ key, style, ...vertex } in vertices\" :key=\"key\">\n <slot\n v-if=\"slots['vertex-handle']\"\n name=\"vertex-handle\"\n v-bind=\"{ key, style, ...vertex, backgroundColor: VERTEX_COLOR }\"\n >\n <!-- Fallback content if slot is provided but empty -->\n <div v-bind=\"vertex\" :style=\"[style, { backgroundColor: VERTEX_COLOR }]\" />\n </slot>\n <div v-else v-bind=\"vertex\" :style=\"[style, { backgroundColor: VERTEX_COLOR }]\" />\n </template>\n </template>\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and slot -->\n <CounterRotate v-if=\"shouldShowMenu\" :rect=\"menuRect\" :rotation=\"rotation\">\n <template #default=\"{ rect, menuWrapperProps }\">\n <!-- Priority 1: Render function prop (schema-driven) -->\n <component v-if=\"selectionMenu\" :is=\"renderSelectionMenu(rect, menuWrapperProps)\" />\n\n <!-- Priority 2: Slot (manual customization) -->\n <slot\n v-else\n name=\"selection-menu\"\n :context=\"menuContext\"\n :selected=\"isSelected\"\n :rect=\"rect\"\n :placement=\"menuPlacement\"\n :menuWrapperProps=\"menuWrapperProps\"\n />\n </template>\n </CounterRotate>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"T extends PdfAnnotationObject\">\nimport { ref, computed, watch, useSlots, toRaw, shallowRef, VNode } from 'vue';\nimport { PdfAnnotationObject, Rect } from '@embedpdf/models';\nimport {\n CounterRotate,\n MenuWrapperProps,\n SelectionMenuPlacement,\n useDoublePressProps,\n useInteractionHandles,\n} from '@embedpdf/utils/vue';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { VertexConfig } from '../../shared/types';\nimport { useAnnotationCapability } from '../hooks';\nimport { AnnotationSelectionContext, AnnotationSelectionMenuRenderFn } from '../types';\n\nconst props = withDefaults(\n defineProps<{\n scale: number;\n documentId: string;\n pageIndex: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n trackedAnnotation: TrackedAnnotation<T>;\n isSelected: boolean;\n isDraggable: boolean;\n isResizable: boolean;\n lockAspectRatio?: boolean;\n vertexConfig?: VertexConfig<T>;\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n outlineOffset?: number;\n onDoubleClick?: (event: PointerEvent | MouseEvent) => void;\n onSelect: (event: TouchEvent | MouseEvent) => void;\n zIndex?: number;\n selectionOutlineColor?: string;\n }>(),\n {\n lockAspectRatio: false,\n outlineOffset: 1,\n zIndex: 1,\n selectionOutlineColor: '#007ACC',\n },\n);\n\nconst HANDLE_COLOR = '#007ACC';\nconst VERTEX_COLOR = '#007ACC';\nconst HANDLE_SIZE = 12;\nconst VERTEX_SIZE = 12;\n\nconst preview = shallowRef<Partial<T>>(toRaw(props.trackedAnnotation.object));\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst gestureBaseRef = ref<T | null>(null);\n\n// Get scoped API for this document (similar to React's useMemo)\nconst annotationProvides = computed(() =>\n annotationCapability.value ? annotationCapability.value.forDocument(props.documentId) : null,\n);\n\nconst currentObject = computed<T>(\n () => ({ ...toRaw(props.trackedAnnotation.object), ...toRaw(preview.value) }) as T,\n);\n\n// --- Selection Menu Logic ---\n\n// Check if we should show any menu at all\nconst shouldShowMenu = computed(() => {\n return props.isSelected && (props.selectionMenu || slots['selection-menu']);\n});\n\n// Computed rect for menu positioning\nconst menuRect = computed<Rect>(() => ({\n origin: {\n x: currentObject.value.rect.origin.x * props.scale,\n y: currentObject.value.rect.origin.y * props.scale,\n },\n size: {\n width: currentObject.value.rect.size.width * props.scale,\n height: currentObject.value.rect.size.height * props.scale,\n },\n}));\n\n// Build the context object for selection menu\nconst menuContext = computed<AnnotationSelectionContext>(() => ({\n type: 'annotation',\n annotation: props.trackedAnnotation,\n pageIndex: props.pageIndex,\n}));\n\n// Placement hints\nconst menuPlacement = computed<SelectionMenuPlacement>(() => ({\n suggestTop: false, // Could calculate based on position in viewport\n spaceAbove: 0,\n spaceBelow: 0,\n}));\n\n// Render via function (for schema-driven approach)\nconst renderSelectionMenu = (rect: Rect, menuWrapperProps: MenuWrapperProps): VNode | null => {\n if (!props.selectionMenu) return null;\n\n return props.selectionMenu({\n rect,\n menuWrapperProps,\n selected: props.isSelected,\n placement: menuPlacement.value,\n context: menuContext.value,\n });\n};\n\nconst elementSnapshot = computed(() => {\n const obj = toRaw(currentObject.value);\n return obj.rect; // plain-ish; composable will normalize fully\n});\n\nconst verticesSnapshot = computed(() => {\n const obj = toRaw(currentObject.value);\n return props.vertexConfig?.extractVertices(obj) ?? [];\n});\n\nconst constraintsSnapshot = computed(() => ({\n minWidth: 10,\n minHeight: 10,\n boundingBox: {\n width: props.pageWidth,\n height: props.pageHeight,\n },\n}));\n\nconst { dragProps, vertices, resize } = useInteractionHandles({\n controller: {\n element: elementSnapshot,\n vertices: verticesSnapshot,\n constraints: constraintsSnapshot,\n maintainAspectRatio: computed(() => props.lockAspectRatio),\n pageRotation: computed(() => props.rotation),\n scale: computed(() => props.scale),\n enabled: computed(() => props.isSelected),\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n\n if (event.state === 'start') {\n gestureBaseRef.value = currentObject.value;\n }\n\n const base = gestureBaseRef.value ?? currentObject.value;\n\n const changes = event.transformData.changes.vertices\n ? props.vertexConfig?.transformAnnotation(toRaw(base), event.transformData.changes.vertices)\n : { rect: event.transformData.changes.rect };\n\n const patched = annotationCapability.value?.transformAnnotation<T>(base, {\n type: event.transformData.type,\n changes: changes as Partial<T>,\n metadata: event.transformData.metadata,\n });\n\n if (patched) {\n preview.value = { ...toRaw(preview.value), ...patched };\n }\n\n if (event.state === 'end' && patched) {\n gestureBaseRef.value = null;\n annotationProvides.value?.updateAnnotation(\n props.pageIndex,\n props.trackedAnnotation.object.id,\n patched,\n );\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: props.outlineOffset,\n offsetMode: 'outside',\n includeSides: !props.lockAspectRatio,\n zIndex: props.zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: props.zIndex + 2,\n },\n includeVertices: !!props.vertexConfig,\n});\n\nconst doubleProps = useDoublePressProps(props.onDoubleClick);\n\nwatch(\n () => props.trackedAnnotation.object,\n (newObject) => {\n preview.value = newObject;\n },\n { deep: true },\n);\n\nconst containerStyle = computed(() => ({\n position: 'absolute' as 'absolute',\n left: `${currentObject.value.rect.origin.x * props.scale}px`,\n top: `${currentObject.value.rect.origin.y * props.scale}px`,\n width: `${currentObject.value.rect.size.width * props.scale}px`,\n height: `${currentObject.value.rect.size.height * props.scale}px`,\n outline: props.isSelected ? `1px solid ${props.selectionOutlineColor}` : 'none',\n outlineOffset: props.isSelected ? `${props.outlineOffset}px` : '0px',\n pointerEvents: props.isSelected ? 'auto' : ('none' as 'auto' | 'none'),\n touchAction: 'none',\n cursor: props.isSelected && props.isDraggable ? 'move' : 'default',\n zIndex: props.zIndex,\n}));\n\n// Add useSlots to access slot information\nconst slots = useSlots();\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: svgWidth,\n height: svgHeight,\n pointerEvents: 'none',\n zIndex: 2,\n }\"\n :width=\"svgWidth\"\n :height=\"svgHeight\"\n :viewBox=\"`0 0 ${geometry.width} ${geometry.height}`\"\n >\n <ellipse\n :cx=\"geometry.cx\"\n :cy=\"geometry.cy\"\n :rx=\"geometry.rx\"\n :ry=\"geometry.ry\"\n :fill=\"color\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n stroke: strokeColor ?? color,\n strokeWidth: strokeWidth,\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfAnnotationBorderStyle, Rect } from '@embedpdf/models';\n\ninterface CircleProps {\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n}\n\nconst props = withDefaults(defineProps<CircleProps>(), {\n color: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n});\n\nconst geometry = computed(() => {\n const outerW = props.rect.size.width;\n const outerH = props.rect.size.height;\n const innerW = Math.max(outerW - props.strokeWidth, 0);\n const innerH = Math.max(outerH - props.strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n cx: props.strokeWidth / 2 + innerW / 2,\n cy: props.strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n});\n\nconst svgWidth = computed(() => geometry.value.width * props.scale);\nconst svgHeight = computed(() => geometry.value.height * props.scale);\n</script>\n","<template>\n <div\n :style=\"{\n position: 'absolute',\n width: `${annotation.object.rect.size.width * scale}px`,\n height: `${annotation.object.rect.size.height * scale}px`,\n cursor: isSelected && !isEditing ? 'move' : 'default',\n pointerEvents: isSelected && !isEditing ? 'none' : 'auto',\n zIndex: 2,\n }\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n >\n <span\n ref=\"editorRef\"\n @blur=\"handleBlur\"\n tabindex=\"0\"\n :style=\"editorStyle\"\n :contenteditable=\"isEditing\"\n >{{ annotation.object.contents }}</span\n >\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, computed, onMounted } from 'vue';\nimport {\n PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n} from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { useAnnotationCapability } from '../../hooks';\n\nconst props = defineProps<{\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n}>();\n\nconst editorRef = ref<HTMLSpanElement | null>(null);\nconst { provides: annotationProvides } = useAnnotationCapability();\nconst isIOS = ref(false);\n\nonMounted(() => {\n try {\n const nav = navigator as any;\n isIOS.value =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n } catch {\n isIOS.value = false;\n }\n});\n\nwatch(\n () => props.isEditing,\n (editing) => {\n if (editing && editorRef.value) {\n const editor = editorRef.value;\n editor.focus();\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(editor);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n },\n);\n\nconst handleBlur = () => {\n if (!annotationProvides.value || !editorRef.value) return;\n annotationProvides.value.updateAnnotation(props.pageIndex, props.annotation.object.id, {\n contents: editorRef.value.innerText,\n });\n};\n\nconst editorStyle = computed(() => {\n const { object: anno } = props.annotation;\n const computedFontPx = anno.fontSize * props.scale;\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp =\n isIOS.value && props.isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX;\n const adjustedFontPx = needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx;\n const scaleComp = needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1;\n const invScalePercent = needsComp ? 100 / scaleComp : 100;\n\n return {\n color: anno.fontColor,\n fontSize: `${adjustedFontPx}px`,\n fontFamily: standardFontCss(anno.fontFamily),\n textAlign: textAlignmentToCss(anno.textAlign),\n flexDirection: 'column' as 'column',\n justifyContent:\n anno.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : anno.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n display: 'flex',\n backgroundColor: anno.backgroundColor,\n opacity: anno.opacity,\n width: needsComp ? `${invScalePercent}%` : '100%',\n height: needsComp ? `${invScalePercent}%` : '100%',\n lineHeight: '1.18',\n overflow: 'hidden',\n cursor: props.isEditing ? 'text' : 'pointer',\n outline: 'none',\n transform: needsComp ? `scale(${scaleComp})` : undefined,\n transformOrigin: 'top left',\n };\n});\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <path\n v-for=\"(d, i) in paths\"\n :key=\"i\"\n :d=\"d\"\n fill=\"none\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n stroke: color,\n strokeWidth: strokeWidth,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n }\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfInkListObject, Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n isSelected: boolean;\n color?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#000000',\n opacity: 1,\n },\n);\n\nconst paths = computed(() => {\n return props.inkList.map(({ points }) => {\n let d = '';\n points.forEach(({ x, y }, i) => {\n const lx = x - props.rect.origin.x;\n const ly = y - props.rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + `${lx} ${ly} `;\n });\n return d.trim();\n });\n});\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <line\n :x1=\"localLine.x1\"\n :y1=\"localLine.y1\"\n :x2=\"localLine.x2\"\n :y2=\"localLine.y2\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n stroke: strokeColor,\n strokeWidth: strokeWidth,\n strokeLinecap: 'butt',\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n <path\n v-if=\"endings.start\"\n :d=\"endings.start.d\"\n :transform=\"endings.start.transform\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :stroke=\"strokeColor\"\n :style=\"getEndingStyle(endings.start)\"\n :fill=\"endings.start.filled ? color : 'none'\"\n />\n <path\n v-if=\"endings.end\"\n :d=\"endings.end.d\"\n :transform=\"endings.end.transform\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :stroke=\"strokeColor\"\n :style=\"getEndingStyle(endings.end)\"\n :fill=\"endings.end.filled ? color : 'none'\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect, LinePoints, LineEndings, PdfAnnotationBorderStyle } from '@embedpdf/models';\nimport { patching } from '@embedpdf/plugin-annotation';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n strokeWidth: number;\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n isSelected: boolean;\n }>(),\n {\n color: 'transparent',\n opacity: 1,\n strokeColor: '#000000',\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n },\n);\n\nconst localLine = computed(() => ({\n x1: props.linePoints.start.x - props.rect.origin.x,\n y1: props.linePoints.start.y - props.rect.origin.y,\n x2: props.linePoints.end.x - props.rect.origin.x,\n y2: props.linePoints.end.y - props.rect.origin.y,\n}));\n\nconst endings = computed(() => {\n const { x1, y1, x2, y2 } = localLine.value;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(\n props.lineEndings?.start,\n props.strokeWidth,\n angle + Math.PI,\n x1,\n y1,\n ),\n end: patching.createEnding(props.lineEndings?.end, props.strokeWidth, angle, x2, y2),\n };\n});\n\nconst getEndingStyle = (ending: patching.SvgEnding) => ({\n cursor: props.isSelected ? 'move' : 'pointer',\n strokeWidth: props.strokeWidth,\n strokeLinecap: 'butt' as 'butt',\n pointerEvents: (props.isSelected ? 'none' : ending.filled ? 'visible' : 'visibleStroke') as\n | 'none'\n | 'visible'\n | 'visibleStroke',\n ...(props.strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: props.strokeDashArray?.join(','),\n }),\n});\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <path\n :d=\"pathData\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :opacity=\"opacity\"\n :style=\"{\n fill: currentVertex ? 'none' : color,\n stroke: strokeColor ?? color,\n strokeWidth,\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n strokeLinecap: 'butt',\n strokeLinejoin: 'miter',\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n <path\n v-if=\"isPreviewing && localPts.length > 1\"\n :d=\"`M ${localPts[localPts.length - 1].x} ${\n localPts[localPts.length - 1].y\n } L ${localPts[0].x} ${localPts[0].y}`\"\n fill=\"none\"\n :style=\"{\n stroke: strokeColor,\n strokeWidth,\n strokeDasharray: '4,4',\n opacity: 0.7,\n }\"\n />\n <rect\n v-if=\"isPreviewing && localPts.length >= 2\"\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 </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect, Position, PdfAnnotationBorderStyle } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\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: PointerEvent | TouchEvent) => void;\n currentVertex?: Position;\n handleSize?: number;\n }>(),\n {\n color: 'transparent',\n strokeColor: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n handleSize: 14,\n },\n);\n\nconst allPoints = computed(() =>\n props.currentVertex ? [...props.vertices, props.currentVertex] : props.vertices,\n);\n\nconst localPts = computed(() =>\n allPoints.value.map(({ x, y }) => ({\n x: x - props.rect.origin.x,\n y: y - props.rect.origin.y,\n })),\n);\n\nconst pathData = computed(() => {\n if (!localPts.value.length) return '';\n const [first, ...rest] = localPts.value;\n const isPreview = !!props.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\nconst isPreviewing = computed(() => props.currentVertex && props.vertices.length > 0);\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <path\n :d=\"pathData\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :opacity=\"opacity\"\n :style=\"{\n fill: 'none',\n stroke: strokeColor ?? color,\n strokeWidth,\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n strokeLinecap: 'butt',\n strokeLinejoin: 'miter',\n }\"\n />\n <path\n v-if=\"endings.start\"\n :d=\"endings.start.d\"\n :transform=\"endings.start.transform\"\n :stroke=\"strokeColor\"\n :fill=\"endings.start.filled ? color : 'none'\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"getEndingStyle(endings.start)\"\n />\n <path\n v-if=\"endings.end\"\n :d=\"endings.end.d\"\n :transform=\"endings.end.transform\"\n :stroke=\"strokeColor\"\n :fill=\"endings.end.filled ? color : 'none'\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"getEndingStyle(endings.end)\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect, Position, LineEndings } from '@embedpdf/models';\nimport { patching } from '@embedpdf/plugin-annotation';\n\nconst props = withDefaults(\n defineProps<{\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: PointerEvent | TouchEvent) => void;\n lineEndings?: LineEndings;\n }>(),\n {\n color: 'transparent',\n strokeColor: '#000000',\n opacity: 1,\n },\n);\n\nconst localPts = computed(() =>\n props.vertices.map(({ x, y }) => ({\n x: x - props.rect.origin.x,\n y: y - props.rect.origin.y,\n })),\n);\n\nconst pathData = computed(() => {\n if (localPts.value.length === 0) return '';\n const [first, ...rest] = localPts.value;\n return (`M ${first.x} ${first.y} ` + rest.map((p) => `L ${p.x} ${p.y} `).join('')).trim();\n});\n\nconst endings = computed(() => {\n if (localPts.value.length < 2) return { start: null, end: null };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts.value[0], localPts.value[1]);\n const endRad = toAngle(\n localPts.value[localPts.value.length - 2],\n localPts.value[localPts.value.length - 1],\n );\n\n return {\n start: patching.createEnding(\n props.lineEndings?.start,\n props.strokeWidth,\n startRad + Math.PI,\n localPts.value[0].x,\n localPts.value[0].y,\n ),\n end: patching.createEnding(\n props.lineEndings?.end,\n props.strokeWidth,\n endRad,\n localPts.value[localPts.value.length - 1].x,\n localPts.value[localPts.value.length - 1].y,\n ),\n };\n});\n\nconst getEndingStyle = (ending: patching.SvgEnding) => ({\n cursor: props.isSelected ? 'move' : 'pointer',\n strokeWidth: props.strokeWidth,\n pointerEvents: (props.isSelected ? 'none' : ending.filled ? 'visible' : 'visibleStroke') as\n | 'none'\n | 'visible'\n | 'visibleStroke',\n strokeLinecap: 'butt' as 'butt',\n});\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: svgWidth,\n height: svgHeight,\n pointerEvents: 'none',\n zIndex: 2,\n }\"\n :width=\"svgWidth\"\n :height=\"svgHeight\"\n :viewBox=\"`0 0 ${geometry.width + strokeWidth} ${geometry.height + strokeWidth}`\"\n >\n <rect\n :x=\"geometry.x\"\n :y=\"geometry.y\"\n :width=\"geometry.width\"\n :height=\"geometry.height\"\n :fill=\"color\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n stroke: strokeColor ?? color,\n strokeWidth: strokeWidth,\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfAnnotationBorderStyle, Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n },\n);\n\nconst geometry = computed(() => {\n const outerW = props.rect.size.width;\n const outerH = props.rect.size.height;\n const innerW = Math.max(outerW - props.strokeWidth, 0);\n const innerH = Math.max(outerH - props.strokeWidth, 0);\n\n return {\n width: innerW,\n height: innerH,\n x: props.strokeWidth / 2,\n y: props.strokeWidth / 2,\n };\n});\n\nconst svgWidth = computed(() => (geometry.value.width + props.strokeWidth) * props.scale);\nconst svgHeight = computed(() => (geometry.value.height + props.strokeWidth) * props.scale);\n</script>\n","<template>\n <img\n v-if=\"imageUrl\"\n :src=\"imageUrl\"\n @load=\"handleImageLoad\"\n :style=\"{\n width: '100%',\n height: '100%',\n display: 'block',\n ...style,\n }\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onUnmounted, CSSProperties, computed } from 'vue';\nimport { ignore, PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\nimport { useAnnotationCapability } from '../hooks';\nimport { deepToRaw } from '@embedpdf/utils/vue';\n\nconst props = withDefaults(\n defineProps<{\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n style?: CSSProperties;\n }>(),\n {\n scaleFactor: 1,\n },\n);\n\nconst { provides: annotationProvides } = useAnnotationCapability();\nconst imageUrl = ref<string | null>(null);\nconst urlRef = ref<string | null>(null);\nconst currentTask = ref<any>(null);\n\n// Extract primitive values to avoid unnecessary re-renders\nconst annotationId = computed(() => props.annotation.id);\nconst rectWidth = computed(() => props.annotation.rect.size.width);\nconst rectHeight = computed(() => props.annotation.rect.size.height);\n\nwatch(\n () => [\n props.pageIndex,\n props.scaleFactor,\n props.documentId,\n annotationId.value,\n rectWidth.value,\n rectHeight.value,\n annotationProvides.value,\n ],\n (_, __, onCleanup) => {\n if (annotationProvides.value) {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n\n const task = annotationProvides.value.forDocument(props.documentId).renderAnnotation({\n pageIndex: props.pageIndex,\n annotation: deepToRaw(props.annotation),\n options: {\n scaleFactor: props.scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n currentTask.value = task;\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl.value = url;\n urlRef.value = url;\n }, ignore);\n\n onCleanup(() => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n });\n }\n },\n { immediate: true },\n);\n\nonUnmounted(() => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n if (currentTask.value) {\n currentTask.value.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task on unmount',\n });\n }\n});\n\nconst handleImageLoad = () => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n};\n</script>\n","<template>\n <div\n :style=\"{\n position: 'absolute',\n width: '100%',\n height: '100%',\n zIndex: 2,\n pointerEvents: isSelected ? 'none' : 'auto',\n cursor: 'pointer',\n }\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n >\n <RenderAnnotation\n :documentId=\"documentId\"\n :pageIndex=\"pageIndex\"\n :annotation=\"{ ...annotation.object, id: annotation.object.id }\"\n :scaleFactor=\"scale\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfStampAnnoObject } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport RenderAnnotation from '../render-annotation.vue';\n\ndefineProps<{\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n documentId: string;\n pageIndex: number;\n scale: number;\n onClick: (e: PointerEvent | TouchEvent) => void;\n}>();\n</script>\n","<template>\n <div\n v-for=\"(b, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px`,\n top: `${(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px`,\n width: `${b.size.width * scale}px`,\n height: `${b.size.height * scale}px`,\n background: color,\n opacity: opacity,\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : undefined,\n }\"\n ></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Rect } from '@embedpdf/models';\n\nwithDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n</script>\n","<template>\n <div\n v-for=\"(r, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px`,\n top: `${(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px`,\n width: `${r.size.width * scale}px`,\n height: `${r.size.height * scale}px`,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n }\"\n >\n <div\n :style=\"{\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n height: `${amplitude * 2}px`,\n backgroundImage: svgDataUri,\n backgroundRepeat: 'repeat-x',\n backgroundSize: `${period}px ${amplitude * 2}px`,\n opacity: opacity,\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n\nconst amplitude = computed(() => 2 * props.scale);\nconst period = computed(() => 6 * props.scale);\n\nconst svgDataUri = computed(() => {\n const amp = amplitude.value;\n const per = period.value;\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${per}\" height=\"${\n amp * 2\n }\" viewBox=\"0 0 ${per} ${amp * 2}\">\n <path d=\"M0 ${amp} Q ${per / 4} 0 ${per / 2} ${amp} T ${per} ${amp}\"\n fill=\"none\" stroke=\"${props.color}\" stroke-width=\"${amp}\" stroke-linecap=\"round\"/>\n </svg>`;\n return `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n});\n</script>\n","<template>\n <div\n v-for=\"(r, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px`,\n top: `${(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px`,\n width: `${r.size.width * scale}px`,\n height: `${r.size.height * scale}px`,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n }\"\n >\n <div\n :style=\"{\n position: 'absolute',\n left: 0,\n top: '50%',\n width: '100%',\n height: `${thickness}px`,\n background: color,\n opacity: opacity,\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n\nconst thickness = computed(() => 2 * props.scale);\n</script>\n","<template>\n <div\n v-for=\"(r, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px`,\n top: `${(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px`,\n width: `${r.size.width * scale}px`,\n height: `${r.size.height * scale}px`,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n }\"\n >\n <div\n :style=\"{\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n height: `${thickness}px`,\n background: color,\n opacity: opacity,\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n\nconst thickness = computed(() => 2 * props.scale);\n</script>\n","<template>\n <template v-for=\"annotation in annotations\" :key=\"annotation.object.id\">\n <!-- Ink -->\n <AnnotationContainer\n v-if=\"isInk(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Ink\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Square -->\n <AnnotationContainer\n v-else-if=\"isSquare(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Square\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Circle -->\n <AnnotationContainer\n v-else-if=\"isCircle(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Circle\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Line -->\n <AnnotationContainer\n v-else-if=\"isLine(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Line\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Polyline -->\n <AnnotationContainer\n v-else-if=\"isPolyline(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Polyline\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Polygon -->\n <AnnotationContainer\n v-else-if=\"isPolygon(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Polygon\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- FreeText -->\n <AnnotationContainer\n v-else-if=\"isFreeText(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :onDoubleClick=\"(e) => handleDoubleClick(e, annotation.object.id)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.FreeText\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isEditing=\"editingId === annotation.object.id\"\n :annotation=\"{ ...annotation, object: currentObject }\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Stamp -->\n <AnnotationContainer\n v-else-if=\"isStamp(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default>\n <AnnoComponents.Stamp\n :documentId=\"documentId\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :annotation=\"annotation\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Text Markup: Underline, StrikeOut, Squiggly, Highlight -->\n <AnnotationContainer\n v-else-if=\"isUnderline(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Underline\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <AnnotationContainer\n v-else-if=\"isStrikeout(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Strikeout\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <AnnotationContainer\n v-else-if=\"isSquiggly(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Squiggly\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <AnnotationContainer\n v-else-if=\"isHighlight(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{\n mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply),\n }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Highlight\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed } from 'vue';\nimport { blendModeToCss, PdfBlendMode, Position } from '@embedpdf/models';\nimport {\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 TrackedAnnotation,\n} from '@embedpdf/plugin-annotation';\nimport { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/vue';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/vue';\nimport { useAnnotationCapability } from '../hooks';\nimport AnnotationContainer from './annotation-container.vue';\nimport * as AnnoComponents from './annotations';\nimport * as TextMarkupComponents from './text-markup';\nimport { VertexConfig } from '../../shared/types';\nimport { AnnotationSelectionMenuRenderFn, ResizeHandleUI, VertexHandleUI } from '../types';\n\nconst props = defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n}>();\n\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst { provides: selectionProvides } = useSelectionCapability();\nconst annotations = ref<TrackedAnnotation[]>([]);\nconst { register } = usePointerHandlers({\n documentId: () => props.documentId,\n pageIndex: props.pageIndex,\n});\nconst selectionState = ref<TrackedAnnotation | null>(null);\nconst editingId = ref<string | null>(null);\n\n// Get scoped API for this document\nconst annotationProvides = computed(() =>\n annotationCapability.value ? annotationCapability.value.forDocument(props.documentId) : null,\n);\n\nwatchEffect((onCleanup) => {\n if (annotationProvides.value) {\n // Initialize with current state immediately (like React)\n const currentState = annotationProvides.value.getState();\n annotations.value = getAnnotationsByPageIndex(currentState, props.pageIndex);\n selectionState.value = getSelectedAnnotationByPageIndex(currentState, props.pageIndex);\n\n // Then subscribe to changes\n const off = annotationProvides.value.onStateChange((state) => {\n annotations.value = getAnnotationsByPageIndex(state, props.pageIndex);\n selectionState.value = getSelectedAnnotationByPageIndex(state, props.pageIndex);\n });\n onCleanup(off);\n }\n});\n\nconst handlePointerDown = (_pos: Position, pe: PointerEvent) => {\n if (pe.target === pe.currentTarget && annotationProvides.value) {\n annotationProvides.value.deselectAnnotation();\n editingId.value = null;\n }\n};\n\nconst handleClick = (e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) => {\n e.stopPropagation();\n if (annotationProvides.value && selectionProvides.value) {\n annotationProvides.value.selectAnnotation(props.pageIndex, annotation.object.id);\n selectionProvides.value.clear();\n if (annotation.object.id !== editingId.value) {\n editingId.value = null;\n }\n }\n};\n\nconst handleDoubleClick = (_e: MouseEvent | PointerEvent, id: string) => {\n if (isFreeText(annotations.value.find((a) => a.object.id === id)!)) {\n editingId.value = id;\n }\n};\n\nwatchEffect((onCleanup) => {\n if (annotationProvides.value) {\n const unregister = register({ onPointerDown: handlePointerDown });\n if (unregister) {\n onCleanup(unregister);\n }\n }\n});\n\n// --- Component Logic ---\nconst getTool = (annotation: TrackedAnnotation) =>\n annotationProvides.value?.findToolForAnnotation(annotation.object);\n\nconst isDraggable = (anno: TrackedAnnotation) => {\n if (isFreeText(anno) && editingId.value === anno.object.id) return false;\n return getTool(anno)?.interaction.isDraggable ?? false;\n};\nconst isResizable = (anno: TrackedAnnotation) => getTool(anno)?.interaction.isResizable ?? false;\nconst lockAspectRatio = (anno: TrackedAnnotation) =>\n getTool(anno)?.interaction.lockAspectRatio ?? false;\n\nconst getVertexConfig = (annotation: TrackedAnnotation): VertexConfig<any> | undefined => {\n if (isLine(annotation)) {\n return {\n extractVertices: (anno) => [anno.linePoints.start, anno.linePoints.end],\n transformAnnotation: (anno, vertices) => ({\n ...anno,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n };\n }\n if (isPolyline(annotation) || isPolygon(annotation)) {\n return {\n extractVertices: (anno) => anno.vertices,\n transformAnnotation: (anno, vertices) => ({ ...anno, vertices }),\n };\n }\n return undefined;\n};\n</script>\n","<template>\n <div\n v-if=\"boundingRect && activeTool\"\n :style=\"{\n mixBlendMode: blendMode,\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n }\"\n >\n <Highlight\n v-if=\"activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Underline\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Strikeout\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Squiggly\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onUnmounted, watchEffect, computed } from 'vue';\nimport { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, Rect } from '@embedpdf/models';\nimport { AnnotationTool } from '@embedpdf/plugin-annotation';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/vue';\nimport { useAnnotationCapability } from '../hooks';\nimport Highlight from './text-markup/highlight.vue';\nimport Underline from './text-markup/underline.vue';\nimport Strikeout from './text-markup/strikeout.vue';\nimport Squiggly from './text-markup/squiggly.vue';\n\nconst props = defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n}>();\n\nconst { provides: selectionProvides } = useSelectionCapability();\nconst { provides: annotationProvides } = useAnnotationCapability();\nconst rects = ref<Rect[]>([]);\nconst boundingRect = ref<Rect | null>(null);\nconst activeTool = ref<AnnotationTool | null>(null);\n\nwatchEffect((onCleanup) => {\n const unsubscribers: (() => void)[] = [];\n\n if (selectionProvides.value) {\n const scoped = selectionProvides.value.forDocument(props.documentId);\n const off = scoped.onSelectionChange(() => {\n rects.value = scoped.getHighlightRectsForPage(props.pageIndex);\n boundingRect.value = scoped.getBoundingRectForPage(props.pageIndex);\n });\n unsubscribers.push(off);\n }\n\n if (annotationProvides.value) {\n const scoped = annotationProvides.value.forDocument(props.documentId);\n // Initialize with current active tool\n activeTool.value = scoped.getActiveTool();\n\n const off = scoped.onActiveToolChange((event) => (activeTool.value = event));\n unsubscribers.push(off);\n }\n\n onCleanup(() => {\n unsubscribers.forEach((unsub) => unsub());\n });\n});\n\nconst blendMode = computed(() => {\n if (!activeTool.value) return blendModeToCss(PdfBlendMode.Normal);\n const defaultMode =\n activeTool.value.defaults.type === PdfAnnotationSubtype.HIGHLIGHT\n ? PdfBlendMode.Multiply\n : PdfBlendMode.Normal;\n return blendModeToCss(activeTool.value.defaults.blendMode ?? defaultMode);\n});\n</script>\n","<template>\n <div :style=\"style\">\n <Circle\n v-if=\"preview.type === PdfAnnotationSubtype.CIRCLE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Square\n v-else-if=\"preview.type === PdfAnnotationSubtype.SQUARE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Polygon\n v-else-if=\"preview.type === PdfAnnotationSubtype.POLYGON\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Polyline\n v-else-if=\"preview.type === PdfAnnotationSubtype.POLYLINE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Line\n v-else-if=\"preview.type === PdfAnnotationSubtype.LINE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Ink\n v-else-if=\"preview.type === PdfAnnotationSubtype.INK\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <div\n v-else-if=\"preview.type === PdfAnnotationSubtype.FREETEXT\"\n :style=\"{\n width: '100%',\n height: '100%',\n border: `1px dashed ${preview.data.fontColor || '#000000'}`,\n backgroundColor: 'transparent',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, CSSProperties } from 'vue';\nimport { AnyPreviewState } from '@embedpdf/plugin-annotation';\nimport { PdfAnnotationSubtype } from '@embedpdf/models';\nimport { Circle, Square, Polygon, Polyline, Line, Ink } from './annotations';\n\nconst props = defineProps<{\n preview: AnyPreviewState;\n scale: number;\n}>();\n\nconst style = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${props.preview.bounds.origin.x * props.scale}px`,\n top: `${props.preview.bounds.origin.y * props.scale}px`,\n width: `${props.preview.bounds.size.width * props.scale}px`,\n height: `${props.preview.bounds.size.height * props.scale}px`,\n pointerEvents: 'none',\n zIndex: 10,\n}));\n</script>\n","<template>\n <input ref=\"fileInputRef\" type=\"file\" style=\"display: none\" />\n <canvas ref=\"canvasRef\" style=\"display: none\"></canvas>\n <PreviewRenderer\n v-for=\"[toolId, preview] in previews.entries()\"\n :key=\"toolId\"\n :preview=\"preview\"\n :scale=\"scale\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed } from 'vue';\nimport { useAnnotationPlugin } from '../hooks';\nimport { AnyPreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\nimport PreviewRenderer from './preview-renderer.vue';\n\nconst props = defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n}>();\n\nconst { plugin: annotationPlugin } = useAnnotationPlugin();\nconst previews = ref<Map<string, AnyPreviewState>>(new Map());\nconst fileInputRef = ref<HTMLInputElement | null>(null);\nconst canvasRef = ref<HTMLCanvasElement | null>(null);\n\nconst services = computed<HandlerServices>(() => ({\n requestFile: ({ accept, onFile }) => {\n const input = fileInputRef.value;\n if (!input) return;\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.value;\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 const scaleX = maxWidth ? maxWidth / width : 1;\n const scaleY = maxHeight ? maxHeight / height : 1;\n const scaleFactor = Math.min(scaleX, scaleY, 1);\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\nlet unregister: (() => void) | undefined;\n\nwatchEffect((onCleanup) => {\n if (annotationPlugin.value) {\n unregister = annotationPlugin.value.registerPageHandlers(\n props.documentId,\n props.pageIndex,\n props.scale,\n {\n services: services.value,\n onPreview: (toolId, state) => {\n const next = new Map(previews.value);\n if (state) {\n next.set(toolId, state);\n } else {\n next.delete(toolId);\n }\n previews.value = next;\n },\n },\n );\n }\n\n onCleanup(() => {\n unregister?.();\n });\n});\n</script>\n","<template>\n <div>\n <Annotations\n :documentId=\"documentId\"\n :pageIndex=\"pageIndex\"\n :scale=\"actualScale\"\n :rotation=\"actualRotation\"\n :pageWidth=\"pageWidth\"\n :pageHeight=\"pageHeight\"\n :resizeUI=\"resizeUI\"\n :vertexUI=\"vertexUI\"\n :selectionOutlineColor=\"selectionOutlineColor\"\n :selectionMenu=\"selectionMenu\"\n >\n <!-- Forward slots for manual customization (only used if selectionMenu prop not provided) -->\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\"></slot>\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\"></slot>\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\"></slot>\n </template>\n </Annotations>\n <TextMarkup :documentId=\"documentId\" :pageIndex=\"pageIndex\" :scale=\"actualScale\" />\n <AnnotationPaintLayer :documentId=\"documentId\" :pageIndex=\"pageIndex\" :scale=\"actualScale\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useDocumentState } from '@embedpdf/core/vue';\nimport { Rotation } from '@embedpdf/models';\nimport Annotations from './annotations.vue';\nimport TextMarkup from './text-markup.vue';\nimport AnnotationPaintLayer from './annotation-paint-layer.vue';\nimport { AnnotationSelectionMenuRenderFn, ResizeHandleUI, VertexHandleUI } from '../types';\n\nconst props = defineProps<{\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 /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize selection menu */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n}>();\n\nconst documentState = useDocumentState(() => props.documentId);\nconst page = computed(() => documentState.value?.document?.pages?.[props.pageIndex]);\nconst pageWidth = computed(() => page.value?.size?.width ?? 0);\nconst pageHeight = computed(() => page.value?.size?.height ?? 0);\n\nconst actualScale = computed(() => {\n if (props.scale !== undefined) return props.scale;\n return documentState.value?.scale ?? 1;\n});\n\nconst actualRotation = computed(() => {\n if (props.rotation !== undefined) return props.rotation;\n return documentState.value?.rotation ?? Rotation.Degree0;\n});\n</script>\n"],"names":["_a","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_mergeProps","_unref","_renderSlot","_Fragment","_createBlock","_withCtx","_resolveDynamicComponent","_normalizeStyle","_renderList","_createVNode","RenderAnnotation","AnnotationContainer","AnnoComponents.Ink","AnnoComponents.Square","AnnoComponents.Circle","AnnoComponents.Line","AnnoComponents.Polyline","AnnoComponents.Polygon","AnnoComponents.FreeText","AnnoComponents.Stamp","TextMarkupComponents.Underline","TextMarkupComponents.Strikeout","TextMarkupComponents.Squiggly","TextMarkupComponents.Highlight","Highlight","Underline","Strikeout","Squiggly","PreviewRenderer","Annotations","TextMarkup","AnnotationPaintLayer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-annotation.ts","../../src/vue/components/annotation-container.vue","../../src/vue/components/annotations/circle.vue","../../src/vue/components/annotations/free-text.vue","../../src/vue/components/annotations/ink.vue","../../src/vue/components/annotations/line.vue","../../src/vue/components/annotations/polygon.vue","../../src/vue/components/annotations/polyline.vue","../../src/vue/components/annotations/square.vue","../../src/vue/components/render-annotation.vue","../../src/vue/components/annotations/stamp.vue","../../src/vue/components/text-markup/highlight.vue","../../src/vue/components/text-markup/squiggly.vue","../../src/vue/components/text-markup/strikeout.vue","../../src/vue/components/text-markup/underline.vue","../../src/vue/components/annotations.vue","../../src/vue/components/text-markup.vue","../../src/vue/components/preview-renderer.vue","../../src/vue/components/annotation-paint-layer.vue","../../src/vue/components/annotation-layer.vue"],"sourcesContent":["import { ref, watch, computed, toValue, type MaybeRefOrGetter } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n} from '@embedpdf/plugin-annotation';\n\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\n\n/**\n * Hook for annotation state for a specific document\n * @param documentId Document ID (can be ref, computed, getter, or plain value)\n */\nexport const useAnnotation = (documentId: MaybeRefOrGetter<string>) => {\n const { provides } = useAnnotationCapability();\n const state = ref<AnnotationDocumentState>(\n provides?.value?.forDocument(toValue(documentId))?.getState() ?? initialDocumentState(),\n );\n\n watch(\n [provides, () => toValue(documentId)],\n ([providesValue, docId], _, onCleanup) => {\n if (providesValue && docId) {\n const scope = providesValue.forDocument(docId);\n state.value = scope.getState();\n\n const unsubscribe = scope.onStateChange((newState) => {\n state.value = newState;\n });\n onCleanup(unsubscribe);\n }\n },\n { immediate: true },\n );\n\n return {\n state,\n provides: computed(() => provides.value?.forDocument(toValue(documentId)) ?? null),\n };\n};\n","<template>\n <div data-no-interaction :style=\"{ display: 'contents' }\">\n <div v-bind=\"{ ...dragProps, ...doubleProps }\" :style=\"mergedContainerStyle\">\n <slot :annotation=\"currentObject\"></slot>\n\n <template v-if=\"isSelected && isResizable\">\n <template v-for=\"{ key, style, ...handle } in resize\" :key=\"key\">\n <slot\n v-if=\"slots['resize-handle']\"\n name=\"resize-handle\"\n v-bind=\"{ key, style, ...handle, backgroundColor: HANDLE_COLOR }\"\n >\n <!-- Fallback content if slot is provided but empty -->\n <div v-bind=\"handle\" :style=\"[style, { backgroundColor: HANDLE_COLOR }]\" />\n </slot>\n <div v-else v-bind=\"handle\" :style=\"[style, { backgroundColor: HANDLE_COLOR }]\" />\n </template>\n </template>\n\n <template v-if=\"isSelected && vertices.length > 0\">\n <template v-for=\"{ key, style, ...vertex } in vertices\" :key=\"key\">\n <slot\n v-if=\"slots['vertex-handle']\"\n name=\"vertex-handle\"\n v-bind=\"{ key, style, ...vertex, backgroundColor: VERTEX_COLOR }\"\n >\n <!-- Fallback content if slot is provided but empty -->\n <div v-bind=\"vertex\" :style=\"[style, { backgroundColor: VERTEX_COLOR }]\" />\n </slot>\n <div v-else v-bind=\"vertex\" :style=\"[style, { backgroundColor: VERTEX_COLOR }]\" />\n </template>\n </template>\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and slot -->\n <CounterRotate v-if=\"shouldShowMenu\" :rect=\"menuRect\" :rotation=\"rotation\">\n <template #default=\"{ rect, menuWrapperProps }\">\n <!-- Priority 1: Render function prop (schema-driven) -->\n <component v-if=\"selectionMenu\" :is=\"renderSelectionMenu(rect, menuWrapperProps)\" />\n\n <!-- Priority 2: Slot (manual customization) -->\n <slot\n v-else\n name=\"selection-menu\"\n :context=\"menuContext\"\n :selected=\"isSelected\"\n :rect=\"rect\"\n :placement=\"menuPlacement\"\n :menuWrapperProps=\"menuWrapperProps\"\n />\n </template>\n </CounterRotate>\n </div>\n</template>\n\n<script lang=\"ts\">\n// Disable attribute inheritance so style doesn't fall through to root element\nexport default {\n inheritAttrs: false,\n};\n</script>\n\n<script setup lang=\"ts\" generic=\"T extends PdfAnnotationObject\">\nimport { ref, computed, watch, useSlots, toRaw, shallowRef, VNode } from 'vue';\nimport { PdfAnnotationObject, Rect } from '@embedpdf/models';\nimport {\n CounterRotate,\n MenuWrapperProps,\n SelectionMenuPlacement,\n useDoublePressProps,\n useInteractionHandles,\n} from '@embedpdf/utils/vue';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { VertexConfig } from '../../shared/types';\nimport { useAnnotationCapability } from '../hooks';\nimport { AnnotationSelectionContext, AnnotationSelectionMenuRenderFn } from '../types';\n\nconst props = withDefaults(\n defineProps<{\n scale: number;\n documentId: string;\n pageIndex: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n trackedAnnotation: TrackedAnnotation<T>;\n isSelected: boolean;\n isDraggable: boolean;\n isResizable: boolean;\n lockAspectRatio?: boolean;\n vertexConfig?: VertexConfig<T>;\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n outlineOffset?: number;\n onDoubleClick?: (event: PointerEvent | MouseEvent) => void;\n onSelect: (event: TouchEvent | MouseEvent) => void;\n zIndex?: number;\n selectionOutlineColor?: string;\n style?: Record<string, string | number>;\n }>(),\n {\n lockAspectRatio: false,\n outlineOffset: 1,\n zIndex: 1,\n selectionOutlineColor: '#007ACC',\n },\n);\n\nconst HANDLE_COLOR = '#007ACC';\nconst VERTEX_COLOR = '#007ACC';\nconst HANDLE_SIZE = 12;\nconst VERTEX_SIZE = 12;\n\nconst preview = shallowRef<Partial<T>>(toRaw(props.trackedAnnotation.object));\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst gestureBaseRef = ref<T | null>(null);\n\n// Get scoped API for this document (similar to React's useMemo)\nconst annotationProvides = computed(() =>\n annotationCapability.value ? annotationCapability.value.forDocument(props.documentId) : null,\n);\n\nconst currentObject = computed<T>(\n () => ({ ...toRaw(props.trackedAnnotation.object), ...toRaw(preview.value) }) as T,\n);\n\n// --- Selection Menu Logic ---\n\n// Check if we should show any menu at all\nconst shouldShowMenu = computed(() => {\n return props.isSelected && (props.selectionMenu || slots['selection-menu']);\n});\n\n// Computed rect for menu positioning\nconst menuRect = computed<Rect>(() => ({\n origin: {\n x: currentObject.value.rect.origin.x * props.scale,\n y: currentObject.value.rect.origin.y * props.scale,\n },\n size: {\n width: currentObject.value.rect.size.width * props.scale,\n height: currentObject.value.rect.size.height * props.scale,\n },\n}));\n\n// Build the context object for selection menu\nconst menuContext = computed<AnnotationSelectionContext>(() => ({\n type: 'annotation',\n annotation: props.trackedAnnotation,\n pageIndex: props.pageIndex,\n}));\n\n// Placement hints\nconst menuPlacement = computed<SelectionMenuPlacement>(() => ({\n suggestTop: false, // Could calculate based on position in viewport\n spaceAbove: 0,\n spaceBelow: 0,\n}));\n\n// Render via function (for schema-driven approach)\nconst renderSelectionMenu = (rect: Rect, menuWrapperProps: MenuWrapperProps): VNode | null => {\n if (!props.selectionMenu) return null;\n\n return props.selectionMenu({\n rect,\n menuWrapperProps,\n selected: props.isSelected,\n placement: menuPlacement.value,\n context: menuContext.value,\n });\n};\n\nconst elementSnapshot = computed(() => {\n const obj = toRaw(currentObject.value);\n return obj.rect; // plain-ish; composable will normalize fully\n});\n\nconst verticesSnapshot = computed(() => {\n const obj = toRaw(currentObject.value);\n return props.vertexConfig?.extractVertices(obj) ?? [];\n});\n\nconst constraintsSnapshot = computed(() => ({\n minWidth: 10,\n minHeight: 10,\n boundingBox: {\n width: props.pageWidth,\n height: props.pageHeight,\n },\n}));\n\nconst { dragProps, vertices, resize } = useInteractionHandles({\n controller: {\n element: elementSnapshot,\n vertices: verticesSnapshot,\n constraints: constraintsSnapshot,\n maintainAspectRatio: computed(() => props.lockAspectRatio),\n pageRotation: computed(() => props.rotation),\n scale: computed(() => props.scale),\n enabled: computed(() => props.isSelected),\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n\n if (event.state === 'start') {\n gestureBaseRef.value = currentObject.value;\n }\n\n const base = gestureBaseRef.value ?? currentObject.value;\n\n const changes = event.transformData.changes.vertices\n ? props.vertexConfig?.transformAnnotation(toRaw(base), event.transformData.changes.vertices)\n : { rect: event.transformData.changes.rect };\n\n const patched = annotationCapability.value?.transformAnnotation<T>(base, {\n type: event.transformData.type,\n changes: changes as Partial<T>,\n metadata: event.transformData.metadata,\n });\n\n if (patched) {\n preview.value = { ...toRaw(preview.value), ...patched };\n }\n\n if (event.state === 'end' && patched) {\n gestureBaseRef.value = null;\n annotationProvides.value?.updateAnnotation(\n props.pageIndex,\n props.trackedAnnotation.object.id,\n patched,\n );\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: props.outlineOffset,\n offsetMode: 'outside',\n includeSides: !props.lockAspectRatio,\n zIndex: props.zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: props.zIndex + 2,\n },\n includeVertices: !!props.vertexConfig,\n});\n\nconst doubleProps = useDoublePressProps(props.onDoubleClick);\n\nwatch(\n () => props.trackedAnnotation.object,\n (newObject) => {\n preview.value = newObject;\n },\n { deep: true },\n);\n\nconst containerStyle = computed(() => ({\n position: 'absolute' as 'absolute',\n left: `${currentObject.value.rect.origin.x * props.scale}px`,\n top: `${currentObject.value.rect.origin.y * props.scale}px`,\n width: `${currentObject.value.rect.size.width * props.scale}px`,\n height: `${currentObject.value.rect.size.height * props.scale}px`,\n outline: props.isSelected ? `1px solid ${props.selectionOutlineColor}` : 'none',\n outlineOffset: props.isSelected ? `${props.outlineOffset}px` : '0px',\n pointerEvents: props.isSelected ? 'auto' : ('none' as 'auto' | 'none'),\n touchAction: 'none',\n cursor: props.isSelected && props.isDraggable ? 'move' : 'default',\n zIndex: props.zIndex,\n}));\n\n// Merge container style with passed style prop (for mixBlendMode, etc.)\nconst mergedContainerStyle = computed(() => ({\n ...containerStyle.value,\n ...(props.style ?? {}),\n}));\n\n// Add useSlots to access slot information\nconst slots = useSlots();\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: svgWidth,\n height: svgHeight,\n pointerEvents: 'none',\n zIndex: 2,\n }\"\n :width=\"svgWidth\"\n :height=\"svgHeight\"\n :viewBox=\"`0 0 ${geometry.width} ${geometry.height}`\"\n >\n <ellipse\n :cx=\"geometry.cx\"\n :cy=\"geometry.cy\"\n :rx=\"geometry.rx\"\n :ry=\"geometry.ry\"\n :fill=\"color\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n stroke: strokeColor ?? color,\n strokeWidth: strokeWidth,\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfAnnotationBorderStyle, Rect } from '@embedpdf/models';\n\ninterface CircleProps {\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n}\n\nconst props = withDefaults(defineProps<CircleProps>(), {\n color: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n});\n\nconst geometry = computed(() => {\n const outerW = props.rect.size.width;\n const outerH = props.rect.size.height;\n const innerW = Math.max(outerW - props.strokeWidth, 0);\n const innerH = Math.max(outerH - props.strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n cx: props.strokeWidth / 2 + innerW / 2,\n cy: props.strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n});\n\nconst svgWidth = computed(() => geometry.value.width * props.scale);\nconst svgHeight = computed(() => geometry.value.height * props.scale);\n</script>\n","<template>\n <div\n :style=\"{\n position: 'absolute',\n width: `${annotation.object.rect.size.width * scale}px`,\n height: `${annotation.object.rect.size.height * scale}px`,\n cursor: isSelected && !isEditing ? 'move' : 'default',\n pointerEvents: isSelected && !isEditing ? 'none' : 'auto',\n zIndex: 2,\n }\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n >\n <span\n ref=\"editorRef\"\n @blur=\"handleBlur\"\n tabindex=\"0\"\n :style=\"editorStyle\"\n :contenteditable=\"isEditing\"\n >{{ annotation.object.contents }}</span\n >\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, computed, onMounted } from 'vue';\nimport {\n PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCss,\n textAlignmentToCss,\n} from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { useAnnotationCapability } from '../../hooks';\n\nconst props = defineProps<{\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n}>();\n\nconst editorRef = ref<HTMLSpanElement | null>(null);\nconst { provides: annotationProvides } = useAnnotationCapability();\nconst isIOS = ref(false);\n\nonMounted(() => {\n try {\n const nav = navigator as any;\n isIOS.value =\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1);\n } catch {\n isIOS.value = false;\n }\n});\n\nwatch(\n () => props.isEditing,\n (editing) => {\n if (editing && editorRef.value) {\n const editor = editorRef.value;\n editor.focus();\n const selection = window.getSelection();\n if (selection) {\n const range = document.createRange();\n range.selectNodeContents(editor);\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n },\n);\n\nconst handleBlur = () => {\n if (!annotationProvides.value || !editorRef.value) return;\n annotationProvides.value.updateAnnotation(props.pageIndex, props.annotation.object.id, {\n contents: editorRef.value.innerText,\n });\n};\n\nconst editorStyle = computed(() => {\n const { object: anno } = props.annotation;\n const computedFontPx = anno.fontSize * props.scale;\n const MIN_IOS_FOCUS_FONT_PX = 16;\n const needsComp =\n isIOS.value && props.isEditing && computedFontPx > 0 && computedFontPx < MIN_IOS_FOCUS_FONT_PX;\n const adjustedFontPx = needsComp ? MIN_IOS_FOCUS_FONT_PX : computedFontPx;\n const scaleComp = needsComp ? computedFontPx / MIN_IOS_FOCUS_FONT_PX : 1;\n const invScalePercent = needsComp ? 100 / scaleComp : 100;\n\n return {\n color: anno.fontColor,\n fontSize: `${adjustedFontPx}px`,\n fontFamily: standardFontCss(anno.fontFamily),\n textAlign: textAlignmentToCss(anno.textAlign),\n flexDirection: 'column' as 'column',\n justifyContent:\n anno.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : anno.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n display: 'flex',\n backgroundColor: anno.backgroundColor,\n opacity: anno.opacity,\n width: needsComp ? `${invScalePercent}%` : '100%',\n height: needsComp ? `${invScalePercent}%` : '100%',\n lineHeight: '1.18',\n overflow: 'hidden',\n cursor: props.isEditing ? 'text' : 'pointer',\n outline: 'none',\n transform: needsComp ? `scale(${scaleComp})` : undefined,\n transformOrigin: 'top left',\n };\n});\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <path\n v-for=\"(d, i) in paths\"\n :key=\"i\"\n :d=\"d\"\n fill=\"none\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n stroke: color,\n strokeWidth: strokeWidth,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n }\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfInkListObject, Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n isSelected: boolean;\n color?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#000000',\n opacity: 1,\n },\n);\n\nconst paths = computed(() => {\n return props.inkList.map(({ points }) => {\n let d = '';\n points.forEach(({ x, y }, i) => {\n const lx = x - props.rect.origin.x;\n const ly = y - props.rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + `${lx} ${ly} `;\n });\n return d.trim();\n });\n});\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <line\n :x1=\"localLine.x1\"\n :y1=\"localLine.y1\"\n :x2=\"localLine.x2\"\n :y2=\"localLine.y2\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n stroke: strokeColor,\n strokeWidth: strokeWidth,\n strokeLinecap: 'butt',\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n <path\n v-if=\"endings.start\"\n :d=\"endings.start.d\"\n :transform=\"endings.start.transform\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :stroke=\"strokeColor\"\n :style=\"getEndingStyle(endings.start)\"\n :fill=\"endings.start.filled ? color : 'none'\"\n />\n <path\n v-if=\"endings.end\"\n :d=\"endings.end.d\"\n :transform=\"endings.end.transform\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :stroke=\"strokeColor\"\n :style=\"getEndingStyle(endings.end)\"\n :fill=\"endings.end.filled ? color : 'none'\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect, LinePoints, LineEndings, PdfAnnotationBorderStyle } from '@embedpdf/models';\nimport { patching } from '@embedpdf/plugin-annotation';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n strokeWidth: number;\n strokeColor?: string;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n linePoints: LinePoints;\n lineEndings?: LineEndings;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n isSelected: boolean;\n }>(),\n {\n color: 'transparent',\n opacity: 1,\n strokeColor: '#000000',\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n },\n);\n\nconst localLine = computed(() => ({\n x1: props.linePoints.start.x - props.rect.origin.x,\n y1: props.linePoints.start.y - props.rect.origin.y,\n x2: props.linePoints.end.x - props.rect.origin.x,\n y2: props.linePoints.end.y - props.rect.origin.y,\n}));\n\nconst endings = computed(() => {\n const { x1, y1, x2, y2 } = localLine.value;\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(\n props.lineEndings?.start,\n props.strokeWidth,\n angle + Math.PI,\n x1,\n y1,\n ),\n end: patching.createEnding(props.lineEndings?.end, props.strokeWidth, angle, x2, y2),\n };\n});\n\nconst getEndingStyle = (ending: patching.SvgEnding) => ({\n cursor: props.isSelected ? 'move' : 'pointer',\n strokeWidth: props.strokeWidth,\n strokeLinecap: 'butt' as 'butt',\n pointerEvents: (props.isSelected ? 'none' : ending.filled ? 'visible' : 'visibleStroke') as\n | 'none'\n | 'visible'\n | 'visibleStroke',\n ...(props.strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: props.strokeDashArray?.join(','),\n }),\n});\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <path\n :d=\"pathData\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :opacity=\"opacity\"\n :style=\"{\n fill: currentVertex ? 'none' : color,\n stroke: strokeColor ?? color,\n strokeWidth,\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n strokeLinecap: 'butt',\n strokeLinejoin: 'miter',\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n <path\n v-if=\"isPreviewing && localPts.length > 1\"\n :d=\"`M ${localPts[localPts.length - 1].x} ${\n localPts[localPts.length - 1].y\n } L ${localPts[0].x} ${localPts[0].y}`\"\n fill=\"none\"\n :style=\"{\n stroke: strokeColor,\n strokeWidth,\n strokeDasharray: '4,4',\n opacity: 0.7,\n }\"\n />\n <rect\n v-if=\"isPreviewing && localPts.length >= 2\"\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 </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect, Position, PdfAnnotationBorderStyle } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\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: PointerEvent | TouchEvent) => void;\n currentVertex?: Position;\n handleSize?: number;\n }>(),\n {\n color: 'transparent',\n strokeColor: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n handleSize: 14,\n },\n);\n\nconst allPoints = computed(() =>\n props.currentVertex ? [...props.vertices, props.currentVertex] : props.vertices,\n);\n\nconst localPts = computed(() =>\n allPoints.value.map(({ x, y }) => ({\n x: x - props.rect.origin.x,\n y: y - props.rect.origin.y,\n })),\n);\n\nconst pathData = computed(() => {\n if (!localPts.value.length) return '';\n const [first, ...rest] = localPts.value;\n const isPreview = !!props.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\nconst isPreviewing = computed(() => props.currentVertex && props.vertices.length > 0);\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${width}px`,\n height: `${height}px`,\n pointerEvents: 'none',\n zIndex: 2,\n overflow: 'visible',\n }\"\n :width=\"width\"\n :height=\"height\"\n :viewBox=\"`0 0 ${rect.size.width} ${rect.size.height}`\"\n >\n <path\n :d=\"pathData\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :opacity=\"opacity\"\n :style=\"{\n fill: 'none',\n stroke: strokeColor ?? color,\n strokeWidth,\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n strokeLinecap: 'butt',\n strokeLinejoin: 'miter',\n }\"\n />\n <path\n v-if=\"endings.start\"\n :d=\"endings.start.d\"\n :transform=\"endings.start.transform\"\n :stroke=\"strokeColor\"\n :fill=\"endings.start.filled ? color : 'none'\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"getEndingStyle(endings.start)\"\n />\n <path\n v-if=\"endings.end\"\n :d=\"endings.end.d\"\n :transform=\"endings.end.transform\"\n :stroke=\"strokeColor\"\n :fill=\"endings.end.filled ? color : 'none'\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"getEndingStyle(endings.end)\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect, Position, LineEndings } from '@embedpdf/models';\nimport { patching } from '@embedpdf/plugin-annotation';\n\nconst props = withDefaults(\n defineProps<{\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: PointerEvent | TouchEvent) => void;\n lineEndings?: LineEndings;\n }>(),\n {\n color: 'transparent',\n strokeColor: '#000000',\n opacity: 1,\n },\n);\n\nconst localPts = computed(() =>\n props.vertices.map(({ x, y }) => ({\n x: x - props.rect.origin.x,\n y: y - props.rect.origin.y,\n })),\n);\n\nconst pathData = computed(() => {\n if (localPts.value.length === 0) return '';\n const [first, ...rest] = localPts.value;\n return (`M ${first.x} ${first.y} ` + rest.map((p) => `L ${p.x} ${p.y} `).join('')).trim();\n});\n\nconst endings = computed(() => {\n if (localPts.value.length < 2) return { start: null, end: null };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts.value[0], localPts.value[1]);\n const endRad = toAngle(\n localPts.value[localPts.value.length - 2],\n localPts.value[localPts.value.length - 1],\n );\n\n return {\n start: patching.createEnding(\n props.lineEndings?.start,\n props.strokeWidth,\n startRad + Math.PI,\n localPts.value[0].x,\n localPts.value[0].y,\n ),\n end: patching.createEnding(\n props.lineEndings?.end,\n props.strokeWidth,\n endRad,\n localPts.value[localPts.value.length - 1].x,\n localPts.value[localPts.value.length - 1].y,\n ),\n };\n});\n\nconst getEndingStyle = (ending: patching.SvgEnding) => ({\n cursor: props.isSelected ? 'move' : 'pointer',\n strokeWidth: props.strokeWidth,\n pointerEvents: (props.isSelected ? 'none' : ending.filled ? 'visible' : 'visibleStroke') as\n | 'none'\n | 'visible'\n | 'visibleStroke',\n strokeLinecap: 'butt' as 'butt',\n});\n\nconst width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: svgWidth,\n height: svgHeight,\n pointerEvents: 'none',\n zIndex: 2,\n }\"\n :width=\"svgWidth\"\n :height=\"svgHeight\"\n :viewBox=\"`0 0 ${geometry.width + strokeWidth} ${geometry.height + strokeWidth}`\"\n >\n <rect\n :x=\"geometry.x\"\n :y=\"geometry.y\"\n :width=\"geometry.width\"\n :height=\"geometry.height\"\n :fill=\"color\"\n :opacity=\"opacity\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n stroke: strokeColor ?? color,\n strokeWidth: strokeWidth,\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfAnnotationBorderStyle, Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n isSelected: boolean;\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n },\n);\n\nconst geometry = computed(() => {\n const outerW = props.rect.size.width;\n const outerH = props.rect.size.height;\n const innerW = Math.max(outerW - props.strokeWidth, 0);\n const innerH = Math.max(outerH - props.strokeWidth, 0);\n\n return {\n width: innerW,\n height: innerH,\n x: props.strokeWidth / 2,\n y: props.strokeWidth / 2,\n };\n});\n\nconst svgWidth = computed(() => (geometry.value.width + props.strokeWidth) * props.scale);\nconst svgHeight = computed(() => (geometry.value.height + props.strokeWidth) * props.scale);\n</script>\n","<template>\n <img\n v-if=\"imageUrl\"\n :src=\"imageUrl\"\n @load=\"handleImageLoad\"\n :style=\"{\n width: '100%',\n height: '100%',\n display: 'block',\n ...style,\n }\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onUnmounted, CSSProperties, computed } from 'vue';\nimport { ignore, PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\nimport { useAnnotationCapability } from '../hooks';\nimport { deepToRaw } from '@embedpdf/utils/vue';\n\nconst props = withDefaults(\n defineProps<{\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n style?: CSSProperties;\n }>(),\n {\n scaleFactor: 1,\n },\n);\n\nconst { provides: annotationProvides } = useAnnotationCapability();\nconst imageUrl = ref<string | null>(null);\nconst urlRef = ref<string | null>(null);\nconst currentTask = ref<any>(null);\n\n// Extract primitive values to avoid unnecessary re-renders\nconst annotationId = computed(() => props.annotation.id);\nconst rectWidth = computed(() => props.annotation.rect.size.width);\nconst rectHeight = computed(() => props.annotation.rect.size.height);\n\nwatch(\n () => [\n props.pageIndex,\n props.scaleFactor,\n props.documentId,\n annotationId.value,\n rectWidth.value,\n rectHeight.value,\n annotationProvides.value,\n ],\n (_, __, onCleanup) => {\n if (annotationProvides.value) {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n\n const task = annotationProvides.value.forDocument(props.documentId).renderAnnotation({\n pageIndex: props.pageIndex,\n annotation: deepToRaw(props.annotation),\n options: {\n scaleFactor: props.scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n currentTask.value = task;\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl.value = url;\n urlRef.value = url;\n }, ignore);\n\n onCleanup(() => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n });\n }\n },\n { immediate: true },\n);\n\nonUnmounted(() => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n if (currentTask.value) {\n currentTask.value.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task on unmount',\n });\n }\n});\n\nconst handleImageLoad = () => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n};\n</script>\n","<template>\n <div\n :style=\"{\n position: 'absolute',\n width: '100%',\n height: '100%',\n zIndex: 2,\n pointerEvents: isSelected ? 'none' : 'auto',\n cursor: 'pointer',\n }\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n >\n <RenderAnnotation\n :documentId=\"documentId\"\n :pageIndex=\"pageIndex\"\n :annotation=\"{ ...annotation.object, id: annotation.object.id }\"\n :scaleFactor=\"scale\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfStampAnnoObject } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport RenderAnnotation from '../render-annotation.vue';\n\ndefineProps<{\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n documentId: string;\n pageIndex: number;\n scale: number;\n onClick: (e: PointerEvent | TouchEvent) => void;\n}>();\n</script>\n","<template>\n <div\n v-for=\"(b, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px`,\n top: `${(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px`,\n width: `${b.size.width * scale}px`,\n height: `${b.size.height * scale}px`,\n background: color,\n opacity: opacity,\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : undefined,\n }\"\n ></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Rect } from '@embedpdf/models';\n\nwithDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n</script>\n","<template>\n <div\n v-for=\"(r, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px`,\n top: `${(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px`,\n width: `${r.size.width * scale}px`,\n height: `${r.size.height * scale}px`,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n }\"\n >\n <div\n :style=\"{\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n height: `${amplitude * 2}px`,\n backgroundImage: svgDataUri,\n backgroundRepeat: 'repeat-x',\n backgroundSize: `${period}px ${amplitude * 2}px`,\n opacity: opacity,\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n\nconst amplitude = computed(() => 2 * props.scale);\nconst period = computed(() => 6 * props.scale);\n\nconst svgDataUri = computed(() => {\n const amp = amplitude.value;\n const per = period.value;\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${per}\" height=\"${\n amp * 2\n }\" viewBox=\"0 0 ${per} ${amp * 2}\">\n <path d=\"M0 ${amp} Q ${per / 4} 0 ${per / 2} ${amp} T ${per} ${amp}\"\n fill=\"none\" stroke=\"${props.color}\" stroke-width=\"${amp}\" stroke-linecap=\"round\"/>\n </svg>`;\n return `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n});\n</script>\n","<template>\n <div\n v-for=\"(r, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px`,\n top: `${(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px`,\n width: `${r.size.width * scale}px`,\n height: `${r.size.height * scale}px`,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n }\"\n >\n <div\n :style=\"{\n position: 'absolute',\n left: 0,\n top: '50%',\n width: '100%',\n height: `${thickness}px`,\n background: color,\n opacity: opacity,\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n\nconst thickness = computed(() => 2 * props.scale);\n</script>\n","<template>\n <div\n v-for=\"(r, i) in segmentRects\"\n :key=\"i\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n position: 'absolute',\n left: `${(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px`,\n top: `${(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px`,\n width: `${r.size.width * scale}px`,\n height: `${r.size.height * scale}px`,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n }\"\n >\n <div\n :style=\"{\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n height: `${thickness}px`,\n background: color,\n opacity: opacity,\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n color?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n color: '#FFFF00',\n opacity: 0.5,\n },\n);\n\nconst thickness = computed(() => 2 * props.scale);\n</script>\n","<template>\n <template v-for=\"annotation in annotations\" :key=\"annotation.object.id\">\n <!-- Ink -->\n <AnnotationContainer\n v-if=\"isInk(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Ink\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Square -->\n <AnnotationContainer\n v-else-if=\"isSquare(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Square\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Circle -->\n <AnnotationContainer\n v-else-if=\"isCircle(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Circle\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Line -->\n <AnnotationContainer\n v-else-if=\"isLine(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Line\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Polyline -->\n <AnnotationContainer\n v-else-if=\"isPolyline(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Polyline\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Polygon -->\n <AnnotationContainer\n v-else-if=\"isPolygon(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Polygon\n v-bind=\"currentObject\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :scale=\"scale\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- FreeText -->\n <AnnotationContainer\n v-else-if=\"isFreeText(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :onDoubleClick=\"(e) => handleDoubleClick(e, annotation.object.id)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.FreeText\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isEditing=\"editingId === annotation.object.id\"\n :annotation=\"{ ...annotation, object: currentObject }\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Stamp -->\n <AnnotationContainer\n v-else-if=\"isStamp(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default>\n <AnnoComponents.Stamp\n :documentId=\"documentId\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :annotation=\"annotation\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Text Markup: Underline, StrikeOut, Squiggly, Highlight -->\n <AnnotationContainer\n v-else-if=\"isUnderline(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Underline\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <AnnotationContainer\n v-else-if=\"isStrikeout(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Strikeout\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <AnnotationContainer\n v-else-if=\"isSquiggly(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{ mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal) }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Squiggly\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <AnnotationContainer\n v-else-if=\"isHighlight(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"selectionState?.object.id === annotation.object.id\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :zIndex=\"0\"\n :style=\"{\n mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Multiply),\n }\"\n v-bind=\"props\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <TextMarkupComponents.Highlight\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed } from 'vue';\nimport { blendModeToCss, PdfBlendMode, Position } from '@embedpdf/models';\nimport {\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 TrackedAnnotation,\n} from '@embedpdf/plugin-annotation';\nimport { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/vue';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/vue';\nimport { useAnnotationCapability } from '../hooks';\nimport AnnotationContainer from './annotation-container.vue';\nimport * as AnnoComponents from './annotations';\nimport * as TextMarkupComponents from './text-markup';\nimport { VertexConfig } from '../../shared/types';\nimport { AnnotationSelectionMenuRenderFn, ResizeHandleUI, VertexHandleUI } from '../types';\n\nconst props = defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n selectionOutlineColor?: string;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n}>();\n\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst { provides: selectionProvides } = useSelectionCapability();\nconst annotations = ref<TrackedAnnotation[]>([]);\nconst { register } = usePointerHandlers({\n documentId: () => props.documentId,\n pageIndex: props.pageIndex,\n});\nconst selectionState = ref<TrackedAnnotation | null>(null);\nconst editingId = ref<string | null>(null);\n\n// Get scoped API for this document\nconst annotationProvides = computed(() =>\n annotationCapability.value ? annotationCapability.value.forDocument(props.documentId) : null,\n);\n\nwatchEffect((onCleanup) => {\n if (annotationProvides.value) {\n // Initialize with current state immediately (like React)\n const currentState = annotationProvides.value.getState();\n annotations.value = getAnnotationsByPageIndex(currentState, props.pageIndex);\n selectionState.value = getSelectedAnnotationByPageIndex(currentState, props.pageIndex);\n\n // Then subscribe to changes\n const off = annotationProvides.value.onStateChange((state) => {\n annotations.value = getAnnotationsByPageIndex(state, props.pageIndex);\n selectionState.value = getSelectedAnnotationByPageIndex(state, props.pageIndex);\n });\n onCleanup(off);\n }\n});\n\nconst handlePointerDown = (_pos: Position, pe: PointerEvent) => {\n if (pe.target === pe.currentTarget && annotationProvides.value) {\n annotationProvides.value.deselectAnnotation();\n editingId.value = null;\n }\n};\n\nconst handleClick = (e: MouseEvent | TouchEvent, annotation: TrackedAnnotation) => {\n e.stopPropagation();\n if (annotationProvides.value && selectionProvides.value) {\n annotationProvides.value.selectAnnotation(props.pageIndex, annotation.object.id);\n selectionProvides.value.clear();\n if (annotation.object.id !== editingId.value) {\n editingId.value = null;\n }\n }\n};\n\nconst handleDoubleClick = (_e: MouseEvent | PointerEvent, id: string) => {\n if (isFreeText(annotations.value.find((a) => a.object.id === id)!)) {\n editingId.value = id;\n }\n};\n\nwatchEffect((onCleanup) => {\n if (annotationProvides.value) {\n const unregister = register({ onPointerDown: handlePointerDown });\n if (unregister) {\n onCleanup(unregister);\n }\n }\n});\n\n// --- Component Logic ---\nconst getTool = (annotation: TrackedAnnotation) =>\n annotationProvides.value?.findToolForAnnotation(annotation.object);\n\nconst isDraggable = (anno: TrackedAnnotation) => {\n if (isFreeText(anno) && editingId.value === anno.object.id) return false;\n return getTool(anno)?.interaction.isDraggable ?? false;\n};\nconst isResizable = (anno: TrackedAnnotation) => getTool(anno)?.interaction.isResizable ?? false;\nconst lockAspectRatio = (anno: TrackedAnnotation) =>\n getTool(anno)?.interaction.lockAspectRatio ?? false;\n\nconst getVertexConfig = (annotation: TrackedAnnotation): VertexConfig<any> | undefined => {\n if (isLine(annotation)) {\n return {\n extractVertices: (anno) => [anno.linePoints.start, anno.linePoints.end],\n transformAnnotation: (anno, vertices) => ({\n ...anno,\n linePoints: { start: vertices[0], end: vertices[1] },\n }),\n };\n }\n if (isPolyline(annotation) || isPolygon(annotation)) {\n return {\n extractVertices: (anno) => anno.vertices,\n transformAnnotation: (anno, vertices) => ({ ...anno, vertices }),\n };\n }\n return undefined;\n};\n</script>\n","<template>\n <div\n v-if=\"boundingRect && activeTool\"\n :style=\"{\n mixBlendMode: blendMode,\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n }\"\n >\n <Highlight\n v-if=\"activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Underline\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Strikeout\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Squiggly\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY\"\n :color=\"activeTool.defaults.color\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, onUnmounted, watchEffect, computed } from 'vue';\nimport { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, Rect } from '@embedpdf/models';\nimport { AnnotationTool } from '@embedpdf/plugin-annotation';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/vue';\nimport { useAnnotationCapability } from '../hooks';\nimport Highlight from './text-markup/highlight.vue';\nimport Underline from './text-markup/underline.vue';\nimport Strikeout from './text-markup/strikeout.vue';\nimport Squiggly from './text-markup/squiggly.vue';\n\nconst props = defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n}>();\n\nconst { provides: selectionProvides } = useSelectionCapability();\nconst { provides: annotationProvides } = useAnnotationCapability();\nconst rects = ref<Rect[]>([]);\nconst boundingRect = ref<Rect | null>(null);\nconst activeTool = ref<AnnotationTool | null>(null);\n\nwatchEffect((onCleanup) => {\n const unsubscribers: (() => void)[] = [];\n\n if (selectionProvides.value) {\n const scoped = selectionProvides.value.forDocument(props.documentId);\n const off = scoped.onSelectionChange(() => {\n rects.value = scoped.getHighlightRectsForPage(props.pageIndex);\n boundingRect.value = scoped.getBoundingRectForPage(props.pageIndex);\n });\n unsubscribers.push(off);\n }\n\n if (annotationProvides.value) {\n const scoped = annotationProvides.value.forDocument(props.documentId);\n // Initialize with current active tool\n activeTool.value = scoped.getActiveTool();\n\n const off = scoped.onActiveToolChange((event) => (activeTool.value = event));\n unsubscribers.push(off);\n }\n\n onCleanup(() => {\n unsubscribers.forEach((unsub) => unsub());\n });\n});\n\nconst blendMode = computed(() => {\n if (!activeTool.value) return blendModeToCss(PdfBlendMode.Normal);\n const defaultMode =\n activeTool.value.defaults.type === PdfAnnotationSubtype.HIGHLIGHT\n ? PdfBlendMode.Multiply\n : PdfBlendMode.Normal;\n return blendModeToCss(activeTool.value.defaults.blendMode ?? defaultMode);\n});\n</script>\n","<template>\n <div :style=\"style\">\n <Circle\n v-if=\"preview.type === PdfAnnotationSubtype.CIRCLE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Square\n v-else-if=\"preview.type === PdfAnnotationSubtype.SQUARE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Polygon\n v-else-if=\"preview.type === PdfAnnotationSubtype.POLYGON\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Polyline\n v-else-if=\"preview.type === PdfAnnotationSubtype.POLYLINE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Line\n v-else-if=\"preview.type === PdfAnnotationSubtype.LINE\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <Ink\n v-else-if=\"preview.type === PdfAnnotationSubtype.INK\"\n :isSelected=\"false\"\n :scale=\"scale\"\n v-bind=\"preview.data\"\n />\n <div\n v-else-if=\"preview.type === PdfAnnotationSubtype.FREETEXT\"\n :style=\"{\n width: '100%',\n height: '100%',\n border: `1px dashed ${preview.data.fontColor || '#000000'}`,\n backgroundColor: 'transparent',\n }\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, CSSProperties } from 'vue';\nimport { AnyPreviewState } from '@embedpdf/plugin-annotation';\nimport { PdfAnnotationSubtype } from '@embedpdf/models';\nimport { Circle, Square, Polygon, Polyline, Line, Ink } from './annotations';\n\nconst props = defineProps<{\n preview: AnyPreviewState;\n scale: number;\n}>();\n\nconst style = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${props.preview.bounds.origin.x * props.scale}px`,\n top: `${props.preview.bounds.origin.y * props.scale}px`,\n width: `${props.preview.bounds.size.width * props.scale}px`,\n height: `${props.preview.bounds.size.height * props.scale}px`,\n pointerEvents: 'none',\n zIndex: 10,\n}));\n</script>\n","<template>\n <input ref=\"fileInputRef\" type=\"file\" style=\"display: none\" />\n <canvas ref=\"canvasRef\" style=\"display: none\"></canvas>\n <PreviewRenderer\n v-for=\"[toolId, preview] in previews.entries()\"\n :key=\"toolId\"\n :preview=\"preview\"\n :scale=\"scale\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed } from 'vue';\nimport { useAnnotationPlugin } from '../hooks';\nimport { AnyPreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\nimport PreviewRenderer from './preview-renderer.vue';\n\nconst props = defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n}>();\n\nconst { plugin: annotationPlugin } = useAnnotationPlugin();\nconst previews = ref<Map<string, AnyPreviewState>>(new Map());\nconst fileInputRef = ref<HTMLInputElement | null>(null);\nconst canvasRef = ref<HTMLCanvasElement | null>(null);\n\nconst services = computed<HandlerServices>(() => ({\n requestFile: ({ accept, onFile }) => {\n const input = fileInputRef.value;\n if (!input) return;\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.value;\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 const scaleX = maxWidth ? maxWidth / width : 1;\n const scaleY = maxHeight ? maxHeight / height : 1;\n const scaleFactor = Math.min(scaleX, scaleY, 1);\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\nlet unregister: (() => void) | undefined;\n\nwatchEffect((onCleanup) => {\n if (annotationPlugin.value) {\n unregister = annotationPlugin.value.registerPageHandlers(\n props.documentId,\n props.pageIndex,\n props.scale,\n {\n services: services.value,\n onPreview: (toolId, state) => {\n const next = new Map(previews.value);\n if (state) {\n next.set(toolId, state);\n } else {\n next.delete(toolId);\n }\n previews.value = next;\n },\n },\n );\n }\n\n onCleanup(() => {\n unregister?.();\n });\n});\n</script>\n","<template>\n <div>\n <Annotations\n :documentId=\"documentId\"\n :pageIndex=\"pageIndex\"\n :scale=\"actualScale\"\n :rotation=\"actualRotation\"\n :pageWidth=\"pageWidth\"\n :pageHeight=\"pageHeight\"\n :resizeUI=\"resizeUI\"\n :vertexUI=\"vertexUI\"\n :selectionOutlineColor=\"selectionOutlineColor\"\n :selectionMenu=\"selectionMenu\"\n >\n <!-- Forward slots for manual customization (only used if selectionMenu prop not provided) -->\n <template #selection-menu=\"slotProps\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\"></slot>\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\"></slot>\n </template>\n <template #vertex-handle=\"slotProps\">\n <slot name=\"vertex-handle\" v-bind=\"slotProps\"></slot>\n </template>\n </Annotations>\n <TextMarkup :documentId=\"documentId\" :pageIndex=\"pageIndex\" :scale=\"actualScale\" />\n <AnnotationPaintLayer :documentId=\"documentId\" :pageIndex=\"pageIndex\" :scale=\"actualScale\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useDocumentState } from '@embedpdf/core/vue';\nimport { Rotation } from '@embedpdf/models';\nimport Annotations from './annotations.vue';\nimport TextMarkup from './text-markup.vue';\nimport AnnotationPaintLayer from './annotation-paint-layer.vue';\nimport { AnnotationSelectionMenuRenderFn, ResizeHandleUI, VertexHandleUI } from '../types';\n\nconst props = defineProps<{\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 /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUI?: VertexHandleUI;\n /** Customize selection outline color */\n selectionOutlineColor?: string;\n /** Customize selection menu */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n}>();\n\nconst documentState = useDocumentState(() => props.documentId);\nconst page = computed(() => documentState.value?.document?.pages?.[props.pageIndex]);\nconst pageWidth = computed(() => page.value?.size?.width ?? 0);\nconst pageHeight = computed(() => page.value?.size?.height ?? 0);\n\nconst actualScale = computed(() => {\n if (props.scale !== undefined) return props.scale;\n return documentState.value?.scale ?? 1;\n});\n\nconst actualRotation = computed(() => {\n if (props.rotation !== undefined) return props.rotation;\n return documentState.value?.rotation ?? Rotation.Degree0;\n});\n</script>\n"],"names":["_a","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_mergeProps","_unref","_renderSlot","_Fragment","_createBlock","_withCtx","_resolveDynamicComponent","_normalizeStyle","_renderList","_createVNode","RenderAnnotation","AnnotationContainer","AnnoComponents.Ink","AnnoComponents.Square","AnnoComponents.Circle","AnnoComponents.Line","AnnoComponents.Polyline","AnnoComponents.Polygon","AnnoComponents.FreeText","AnnoComponents.Stamp","TextMarkupComponents.Underline","TextMarkupComponents.Strikeout","TextMarkupComponents.Squiggly","TextMarkupComponents.Highlight","Highlight","Underline","Strikeout","Squiggly","PreviewRenderer","Annotations","TextMarkup","AnnotationPaintLayer"],"mappings":";;;;;;;;AAQO,MAAM,sBAAsB,MAAM,UAA4B,iBAAiB,EAAE;AACjF,MAAM,0BAA0B,MAAM,cAAgC,iBAAiB,EAAE;AAMzF,MAAM,gBAAgB,CAAC,eAAyC;;AACrE,QAAM,EAAE,SAAA,IAAa,wBAAA;AACrB,QAAM,QAAQ;AAAA,MACZ,gDAAU,UAAV,mBAAiB,YAAY,QAAQ,UAAU,OAA/C,mBAAmD,eAAc,qBAAA;AAAA,EAAqB;AAGxF;AAAA,IACE,CAAC,UAAU,MAAM,QAAQ,UAAU,CAAC;AAAA,IACpC,CAAC,CAAC,eAAe,KAAK,GAAG,GAAG,cAAc;AACxC,UAAI,iBAAiB,OAAO;AAC1B,cAAM,QAAQ,cAAc,YAAY,KAAK;AAC7C,cAAM,QAAQ,MAAM,SAAA;AAEpB,cAAM,cAAc,MAAM,cAAc,CAAC,aAAa;AACpD,gBAAM,QAAQ;AAAA,QAChB,CAAC;AACD,kBAAU,WAAW;AAAA,MACvB;AAAA,IACF;AAAA,IACA,EAAE,WAAW,KAAA;AAAA,EAAK;AAGpB,SAAO;AAAA,IACL;AAAA,IACA,UAAU,SAAS,MAAA;;AAAM,eAAAA,MAAA,SAAS,UAAT,gBAAAA,IAAgB,YAAY,QAAQ,UAAU,OAAM;AAAA,KAAI;AAAA,EAAA;AAErF;;;;;ACgBA,MAAA,cAAe;AAAA,EACb,cAAc;AAChB;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,UAAM,QAAQ;AA8Bd,UAAM,eAAe;AACrB,UAAM,eAAe;AACrB,UAAM,cAAc;AACpB,UAAM,cAAc;AAEpB,UAAM,UAAU,WAAuB,MAAM,MAAM,kBAAkB,MAAM,CAAC;AAC5E,UAAM,EAAE,UAAU,qBAAA,IAAyB,wBAAA;AAC3C,UAAM,iBAAiB,IAAc,IAAI;AAGzC,UAAM,qBAAqB;AAAA,MAAS,MAClC,qBAAqB,QAAQ,qBAAqB,MAAM,YAAY,MAAM,UAAU,IAAI;AAAA,IAAA;AAG1F,UAAM,gBAAgB;AAAA,MACpB,OAAO,EAAE,GAAG,MAAM,MAAM,kBAAkB,MAAM,GAAG,GAAG,MAAM,QAAQ,KAAK,EAAA;AAAA,IAAE;AAM7E,UAAM,iBAAiB,SAAS,MAAM;AACpC,aAAO,MAAM,eAAe,MAAM,iBAAiB,MAAM,gBAAgB;AAAA,IAC3E,CAAC;AAGD,UAAM,WAAW,SAAe,OAAO;AAAA,MACrC,QAAQ;AAAA,QACN,GAAG,cAAc,MAAM,KAAK,OAAO,IAAI,MAAM;AAAA,QAC7C,GAAG,cAAc,MAAM,KAAK,OAAO,IAAI,MAAM;AAAA,MAAA;AAAA,MAE/C,MAAM;AAAA,QACJ,OAAO,cAAc,MAAM,KAAK,KAAK,QAAQ,MAAM;AAAA,QACnD,QAAQ,cAAc,MAAM,KAAK,KAAK,SAAS,MAAM;AAAA,MAAA;AAAA,IACvD,EACA;AAGF,UAAM,cAAc,SAAqC,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,YAAY,MAAM;AAAA,MAClB,WAAW,MAAM;AAAA,IAAA,EACjB;AAGF,UAAM,gBAAgB,SAAiC,OAAO;AAAA,MAC5D,YAAY;AAAA;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,IAAA,EACZ;AAGF,UAAM,sBAAsB,CAAC,MAAY,qBAAqD;AAC5F,UAAI,CAAC,MAAM,cAAe,QAAO;AAEjC,aAAO,MAAM,cAAc;AAAA,QACzB;AAAA,QACA;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,WAAW,cAAc;AAAA,QACzB,SAAS,YAAY;AAAA,MAAA,CACtB;AAAA,IACH;AAEA,UAAM,kBAAkB,SAAS,MAAM;AACrC,YAAM,MAAM,MAAM,cAAc,KAAK;AACrC,aAAO,IAAI;AAAA,IACb,CAAC;AAED,UAAM,mBAAmB,SAAS,MAAM;;AACtC,YAAM,MAAM,MAAM,cAAc,KAAK;AACrC,eAAO,WAAM,iBAAN,mBAAoB,gBAAgB,SAAQ,CAAA;AAAA,IACrD,CAAC;AAED,UAAM,sBAAsB,SAAS,OAAO;AAAA,MAC1C,UAAU;AAAA,MACV,WAAW;AAAA,MACX,aAAa;AAAA,QACX,OAAO,MAAM;AAAA,QACb,QAAQ,MAAM;AAAA,MAAA;AAAA,IAChB,EACA;AAEF,UAAM,EAAE,WAAW,UAAU,OAAA,IAAW,sBAAsB;AAAA,MAC5D,YAAY;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,QACV,aAAa;AAAA,QACb,qBAAqB,SAAS,MAAM,MAAM,eAAe;AAAA,QACzD,cAAc,SAAS,MAAM,MAAM,QAAQ;AAAA,QAC3C,OAAO,SAAS,MAAM,MAAM,KAAK;AAAA,QACjC,SAAS,SAAS,MAAM,MAAM,UAAU;AAAA,QACxC,UAAU,CAAC,UAAU;;AACnB,cAAI,GAAC,WAAM,kBAAN,mBAAqB,MAAM;AAEhC,cAAI,MAAM,UAAU,SAAS;AAC3B,2BAAe,QAAQ,cAAc;AAAA,UACvC;AAEA,gBAAM,OAAO,eAAe,SAAS,cAAc;AAEnD,gBAAM,UAAU,MAAM,cAAc,QAAQ,YACxC,WAAM,iBAAN,mBAAoB,oBAAoB,MAAM,IAAI,GAAG,MAAM,cAAc,QAAQ,YACjF,EAAE,MAAM,MAAM,cAAc,QAAQ,KAAA;AAExC,gBAAM,WAAU,0BAAqB,UAArB,mBAA4B,oBAAuB,MAAM;AAAA,YACvE,MAAM,MAAM,cAAc;AAAA,YAC1B;AAAA,YACA,UAAU,MAAM,cAAc;AAAA,UAAA;AAGhC,cAAI,SAAS;AACX,oBAAQ,QAAQ,EAAE,GAAG,MAAM,QAAQ,KAAK,GAAG,GAAG,QAAA;AAAA,UAChD;AAEA,cAAI,MAAM,UAAU,SAAS,SAAS;AACpC,2BAAe,QAAQ;AACvB,qCAAmB,UAAnB,mBAA0B;AAAA,cACxB,MAAM;AAAA,cACN,MAAM,kBAAkB,OAAO;AAAA,cAC/B;AAAA;AAAA,UAEJ;AAAA,QACF;AAAA,MAAA;AAAA,MAEF,UAAU;AAAA,QACR,YAAY;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,YAAY;AAAA,QACZ,cAAc,CAAC,MAAM;AAAA,QACrB,QAAQ,MAAM,SAAS;AAAA,MAAA;AAAA,MAEzB,UAAU;AAAA,QACR,YAAY;AAAA,QACZ,QAAQ,MAAM,SAAS;AAAA,MAAA;AAAA,MAEzB,iBAAiB,CAAC,CAAC,MAAM;AAAA,IAAA,CAC1B;AAED,UAAM,cAAc,oBAAoB,MAAM,aAAa;AAE3D;AAAA,MACE,MAAM,MAAM,kBAAkB;AAAA,MAC9B,CAAC,cAAc;AACb,gBAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,EAAE,MAAM,KAAA;AAAA,IAAK;AAGf,UAAM,iBAAiB,SAAS,OAAO;AAAA,MACrC,UAAU;AAAA,MACV,MAAM,GAAG,cAAc,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK;AAAA,MACxD,KAAK,GAAG,cAAc,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK;AAAA,MACvD,OAAO,GAAG,cAAc,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK;AAAA,MAC3D,QAAQ,GAAG,cAAc,MAAM,KAAK,KAAK,SAAS,MAAM,KAAK;AAAA,MAC7D,SAAS,MAAM,aAAa,aAAa,MAAM,qBAAqB,KAAK;AAAA,MACzE,eAAe,MAAM,aAAa,GAAG,MAAM,aAAa,OAAO;AAAA,MAC/D,eAAe,MAAM,aAAa,SAAU;AAAA,MAC5C,aAAa;AAAA,MACb,QAAQ,MAAM,cAAc,MAAM,cAAc,SAAS;AAAA,MACzD,QAAQ,MAAM;AAAA,IAAA,EACd;AAGF,UAAM,uBAAuB,SAAS,OAAO;AAAA,MAC3C,GAAG,eAAe;AAAA,MAClB,GAAI,MAAM,SAAS,CAAA;AAAA,IAAC,EACpB;AAGF,UAAM,QAAQ,SAAA;;AApRZ,aAAAC,UAAA,GAAAC,mBAmDM,OAnDNC,cAmDM;AAAA,QAlDJC,mBA8BM,OA9BNC,WA8BM,EAAA,GA9BYC,MAAA,SAAA,MAAcA,MAAA,WAAA,KAAW,EAAK,OAAO,qBAAA,MAAA,CAAoB,GAAA;AAAA,UACzEC,WAAyC,KAAA,QAAA,WAAA,EAAlC,YAAY,cAAA,OAAa;AAAA,UAEhB,QAAA,cAAc,QAAA,eAC5BN,UAAA,IAAA,GAAAC,mBAUWM,iCAVmCF,MAAA,MAAA,GAAM,CAAA,EAAjC,KAAK,UAAU,aAAM;sEAAuB;AAAA,cAErDA,MAAA,KAAA,EAAK,eAAA,IADbC,WAOO,8BAPPF,WAOO;AAAA;;iBAJK,EAAA,KAAK,OAAK,GAAK,QAAM,iBAAmB,aAAA,IAHpD,MAOO;AAAA,gBADLD,mBAA2E,OAA3EC,WAA2E,EAAA,SAAA,KAAA,GAA9D,QAAM;AAAA,kBAAG,OAAK,CAAG,OAAK,EAAA,iBAAqB,cAAY;AAAA,gBAAA;oBAEtEJ,UAAA,GAAAC,mBAAkF,OAAlFG,WAAkF;AAAA;;iBAA9D,QAAM;AAAA,gBAAG,OAAK,CAAG,OAAK,EAAA,iBAAqB,cAAY;AAAA,cAAA;;;UAI/D,QAAA,cAAcC,MAAA,QAAA,EAAS,SAAM,KAC3CL,UAAA,IAAA,GAAAC,mBAUWM,iCAVmCF,MAAA,QAAA,GAAQ,CAAA,EAAnC,KAAK,UAAU,aAAM;sEAAyB;AAAA,cAEvDA,MAAA,KAAA,EAAK,eAAA,IADbC,WAOO,8BAPPF,WAOO;AAAA;;iBAJK,EAAA,KAAK,OAAK,GAAK,QAAM,iBAAmB,aAAA,IAHpD,MAOO;AAAA,gBADLD,mBAA2E,OAA3EC,WAA2E,EAAA,SAAA,KAAA,GAA9D,QAAM;AAAA,kBAAG,OAAK,CAAG,OAAK,EAAA,iBAAqB,cAAY;AAAA,gBAAA;oBAEtEJ,UAAA,GAAAC,mBAAkF,OAAlFG,WAAkF;AAAA;;iBAA9D,QAAM;AAAA,gBAAG,OAAK,CAAG,OAAK,EAAA,iBAAqB,cAAY;AAAA,cAAA;;;;QAM5D,eAAA,sBAArBI,YAgBgBH,MAAA,aAAA,GAAA;AAAA;UAhBsB,MAAM,SAAA;AAAA,UAAW,UAAU,QAAA;AAAA,QAAA;UACpD,SAAOI,QAEhB,CAAoF,EAFhE,MAAM,uBAAgB;AAAA,YAEzB,QAAA,iBAAjBT,UAAA,GAAAQ,YAAoFE,wBAA/C,oBAAoB,MAAM,gBAAgB,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA,KAG/EJ,WAQE,KAAA,QAAA,kBAAA;AAAA;cALC,SAAS,YAAA;AAAA,cACT,UAAU,QAAA;AAAA,cACV;AAAA,cACA,WAAW,cAAA;AAAA,cACX;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACIX,UAAM,QAAQ;AAMd,UAAM,WAAW,SAAS,MAAM;AAC9B,YAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,YAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,YAAM,SAAS,KAAK,IAAI,SAAS,MAAM,aAAa,CAAC;AACrD,YAAM,SAAS,KAAK,IAAI,SAAS,MAAM,aAAa,CAAC;AAErD,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,IAAI,MAAM,cAAc,IAAI,SAAS;AAAA,QACrC,IAAI,MAAM,cAAc,IAAI,SAAS;AAAA,QACrC,IAAI,SAAS;AAAA,QACb,IAAI,SAAS;AAAA,MAAA;AAAA,IAEjB,CAAC;AAED,UAAM,WAAW,SAAS,MAAM,SAAS,MAAM,QAAQ,MAAM,KAAK;AAClE,UAAM,YAAY,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,KAAK;;;0BA1ElEL,mBA+BM,OAAA;AAAA,QA9BH,OAAKU,eAAA;AAAA;iBAA6C,SAAA;AAAA,kBAAwB,UAAA;AAAA;;;QAO1E,OAAO,SAAA;AAAA,QACP,QAAQ,UAAA;AAAA,QACR,gBAAgB,SAAA,MAAS,KAAK,IAAI,SAAA,MAAS,MAAM;AAAA,MAAA;QAElDR,mBAkBE,WAAA;AAAA,UAjBC,IAAI,SAAA,MAAS;AAAA,UACb,IAAI,SAAA,MAAS;AAAA,UACb,IAAI,SAAA,MAAS;AAAA,UACb,IAAI,SAAA,MAAS;AAAA,UACb,MAAM,QAAA;AAAA,UACN,SAAS,QAAA;AAAA,UACT,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKQ,eAAA;AAAA,oBAAoB,QAAA,aAAU,SAAA;AAAA,YAA8C,eAAA,QAAA,sBAAsB,QAAA,UAAK,gBAAA,kBAAA;AAAA,YAAkE,QAAA,QAAA,eAAe,QAAA;AAAA,yBAA4B,QAAA;AAAA,eAAyB,QAAA,gBAAgBN,MAAA,wBAAA,EAAyB,UAAM;AAAA,cAAiC,kBAAA,aAAA,oBAAA,mBAAiB,KAAI;AAAA,YAAA;AAAA;;;;;;;;;;;;;;;;;;ACa9V,UAAM,QAAQ;AASd,UAAM,YAAY,IAA4B,IAAI;AAClD,UAAM,EAAE,UAAU,mBAAA,IAAuB,wBAAA;AACzC,UAAM,QAAQ,IAAI,KAAK;AAEvB,cAAU,MAAM;AACd,UAAI;AACF,cAAM,MAAM;AACZ,cAAM,QACJ,mBAAmB,KAAK,UAAU,SAAS,KAC1C,UAAU,aAAa,eAAc,2BAAK,kBAAiB;AAAA,MAChE,QAAQ;AACN,cAAM,QAAQ;AAAA,MAChB;AAAA,IACF,CAAC;AAED;AAAA,MACE,MAAM,MAAM;AAAA,MACZ,CAAC,YAAY;AACX,YAAI,WAAW,UAAU,OAAO;AAC9B,gBAAM,SAAS,UAAU;AACzB,iBAAO,MAAA;AACP,gBAAM,YAAY,OAAO,aAAA;AACzB,cAAI,WAAW;AACb,kBAAM,QAAQ,SAAS,YAAA;AACvB,kBAAM,mBAAmB,MAAM;AAC/B,kBAAM,SAAS,KAAK;AACpB,sBAAU,gBAAA;AACV,sBAAU,SAAS,KAAK;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAGF,UAAM,aAAa,MAAM;AACvB,UAAI,CAAC,mBAAmB,SAAS,CAAC,UAAU,MAAO;AACnD,yBAAmB,MAAM,iBAAiB,MAAM,WAAW,MAAM,WAAW,OAAO,IAAI;AAAA,QACrF,UAAU,UAAU,MAAM;AAAA,MAAA,CAC3B;AAAA,IACH;AAEA,UAAM,cAAc,SAAS,MAAM;AACjC,YAAM,EAAE,QAAQ,KAAA,IAAS,MAAM;AAC/B,YAAM,iBAAiB,KAAK,WAAW,MAAM;AAC7C,YAAM,wBAAwB;AAC9B,YAAM,YACJ,MAAM,SAAS,MAAM,aAAa,iBAAiB,KAAK,iBAAiB;AAC3E,YAAM,iBAAiB,YAAY,wBAAwB;AAC3D,YAAM,YAAY,YAAY,iBAAiB,wBAAwB;AACvE,YAAM,kBAAkB,YAAY,MAAM,YAAY;AAEtD,aAAO;AAAA,QACL,OAAO,KAAK;AAAA,QACZ,UAAU,GAAG,cAAc;AAAA,QAC3B,YAAY,gBAAgB,KAAK,UAAU;AAAA,QAC3C,WAAW,mBAAmB,KAAK,SAAS;AAAA,QAC5C,eAAe;AAAA,QACf,gBACE,KAAK,kBAAkB,qBAAqB,MACxC,eACA,KAAK,kBAAkB,qBAAqB,SAC1C,WACA;AAAA,QACR,SAAS;AAAA,QACT,iBAAiB,KAAK;AAAA,QACtB,SAAS,KAAK;AAAA,QACd,OAAO,YAAY,GAAG,eAAe,MAAM;AAAA,QAC3C,QAAQ,YAAY,GAAG,eAAe,MAAM;AAAA,QAC5C,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,QAAQ,MAAM,YAAY,SAAS;AAAA,QACnC,SAAS;AAAA,QACT,WAAW,YAAY,SAAS,SAAS,MAAM;AAAA,QAC/C,iBAAiB;AAAA,MAAA;AAAA,IAErB,CAAC;;0BArHCJ,mBAoBM,OAAA;AAAA,QAnBH,OAAKU,eAAA;AAAA;oBAAgD,QAAA,WAAW,OAAO,KAAK,KAAK,QAAQ,QAAA,KAAK;AAAA,qBAAuB,QAAA,WAAW,OAAO,KAAK,KAAK,SAAS,QAAA,KAAK;AAAA,UAAoB,QAAA,QAAA,eAAe,QAAA,YAAS,SAAA;AAAA,UAA4C,eAAA,QAAA,eAAe,QAAA,YAAS,SAAA;AAAA;;QAQ/Q,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,qBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,QACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,qBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,MAAA;QAEbR,mBAOC,QAAA;AAAA,mBANK;AAAA,UAAJ,KAAI;AAAA,UACH,QAAM;AAAA,UACP,UAAS;AAAA,UACR,sBAAO,YAAA,KAAW;AAAA,UAClB,iBAAiB,QAAA;AAAA,QAAA,mBACd,QAAA,WAAW,OAAO,QAAQ,GAAA,IAAAD,YAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;ACmBpC,UAAM,QAAQ;AAiBd,UAAM,QAAQ,SAAS,MAAM;AAC3B,aAAO,MAAM,QAAQ,IAAI,CAAC,EAAE,aAAa;AACvC,YAAI,IAAI;AACR,eAAO,QAAQ,CAAC,EAAE,GAAG,EAAA,GAAK,MAAM;AAC9B,gBAAM,KAAK,IAAI,MAAM,KAAK,OAAO;AACjC,gBAAM,KAAK,IAAI,MAAM,KAAK,OAAO;AACjC,gBAAM,MAAM,IAAI,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE;AAAA,QAC1C,CAAC;AACD,eAAO,EAAE,KAAA;AAAA,MACX,CAAC;AAAA,IACH,CAAC;AAED,UAAM,QAAQ,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK;AAChE,UAAM,SAAS,SAAS,MAAM,MAAM,KAAK,KAAK,SAAS,MAAM,KAAK;;0BAnEhED,mBA8BM,OAAA;AAAA,QA7BH,OAAKU,eAAA;AAAA;oBAAgD,MAAA,KAAK;AAAA,qBAAuB,OAAA,KAAM;AAAA;;;;QAQvF,OAAO,MAAA;AAAA,QACP,QAAQ,OAAA;AAAA,QACR,SAAO,OAAS,QAAA,KAAK,KAAK,KAAK,IAAI,QAAA,KAAK,KAAK,MAAM;AAAA,MAAA;SAEpDX,UAAA,IAAA,GAAAC,mBAgBEM,UAAA,MAAAK,WAfiB,MAAA,OAAK,CAAd,GAAG,MAAC;8BADdX,mBAgBE,QAAA;AAAA,YAdC,KAAK;AAAA,YACL;AAAA,YACD,MAAK;AAAA,YACJ,SAAS,QAAA;AAAA,YACT,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,yBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,YACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,yBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,YACZ,OAAKU,eAAA;AAAA,sBAAoB,QAAA,aAAU,SAAA;AAAA,6BAA8C,QAAA,aAAU,SAAA;AAAA,sBAA6C,QAAA;AAAA,2BAA4B,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACuC3K,UAAM,QAAQ;AAuBd,UAAM,YAAY,SAAS,OAAO;AAAA,MAChC,IAAI,MAAM,WAAW,MAAM,IAAI,MAAM,KAAK,OAAO;AAAA,MACjD,IAAI,MAAM,WAAW,MAAM,IAAI,MAAM,KAAK,OAAO;AAAA,MACjD,IAAI,MAAM,WAAW,IAAI,IAAI,MAAM,KAAK,OAAO;AAAA,MAC/C,IAAI,MAAM,WAAW,IAAI,IAAI,MAAM,KAAK,OAAO;AAAA,IAAA,EAC/C;AAEF,UAAM,UAAU,SAAS,MAAM;;AAC7B,YAAM,EAAE,IAAI,IAAI,IAAI,GAAA,IAAO,UAAU;AACrC,YAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;AACzC,aAAO;AAAA,QACL,OAAO,SAAS;AAAA,WACd,WAAM,gBAAN,mBAAmB;AAAA,UACnB,MAAM;AAAA,UACN,QAAQ,KAAK;AAAA,UACb;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,KAAK,SAAS,cAAa,WAAM,gBAAN,mBAAmB,KAAK,MAAM,aAAa,OAAO,IAAI,EAAE;AAAA,MAAA;AAAA,IAEvF,CAAC;AAED,UAAM,iBAAiB,CAAC,WAAA;;AAAgC;AAAA,QACtD,QAAQ,MAAM,aAAa,SAAS;AAAA,QACpC,aAAa,MAAM;AAAA,QACnB,eAAe;AAAA,QACf,eAAgB,MAAM,aAAa,SAAS,OAAO,SAAS,YAAY;AAAA,QAIxE,GAAI,MAAM,gBAAgB,yBAAyB,UAAU;AAAA,UAC3D,kBAAiB,WAAM,oBAAN,mBAAuB,KAAK;AAAA,QAAG;AAAA,MAClD;AAAA;AAGF,UAAM,QAAQ,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK;AAChE,UAAM,SAAS,SAAS,MAAM,MAAM,KAAK,KAAK,SAAS,MAAM,KAAK;;;0BAvHhEV,mBAoDM,OAAA;AAAA,QAnDH,OAAKU,eAAA;AAAA;oBAAgD,MAAA,KAAK;AAAA,qBAAuB,OAAA,KAAM;AAAA;;;;QAQvF,OAAO,MAAA;AAAA,QACP,QAAQ,OAAA;AAAA,QACR,SAAO,OAAS,QAAA,KAAK,KAAK,KAAK,IAAI,QAAA,KAAK,KAAK,MAAM;AAAA,MAAA;QAEpDR,mBAkBE,QAAA;AAAA,UAjBC,IAAI,UAAA,MAAU;AAAA,UACd,IAAI,UAAA,MAAU;AAAA,UACd,IAAI,UAAA,MAAU;AAAA,UACd,IAAI,UAAA,MAAU;AAAA,UACd,SAAS,QAAA;AAAA,UACT,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKQ,eAAA;AAAA,oBAAoB,QAAA,aAAU,SAAA;AAAA,2BAA8C,QAAA,aAAU,SAAA;AAAA,oBAA6C,QAAA;AAAA,yBAAkC,QAAA;AAAA;eAAwD,QAAA,gBAAgBN,MAAA,wBAAA,EAAyB,UAAM;AAAA,cAAiC,kBAAA,aAAA,oBAAA,mBAAiB,KAAI;AAAA,YAAA;AAAA;;QAYlU,QAAA,MAAQ,sBADhBJ,mBASE,QAAA;AAAA;UAPC,GAAG,QAAA,MAAQ,MAAM;AAAA,UACjB,WAAW,QAAA,MAAQ,MAAM;AAAA,UACzB,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,QAAQ,QAAA;AAAA,UACR,OAAKU,eAAE,eAAe,QAAA,MAAQ,KAAK,CAAA;AAAA,UACnC,MAAM,QAAA,MAAQ,MAAM,SAAS,QAAA,QAAK;AAAA,QAAA;QAG7B,QAAA,MAAQ,oBADhBV,mBASE,QAAA;AAAA;UAPC,GAAG,QAAA,MAAQ,IAAI;AAAA,UACf,WAAW,QAAA,MAAQ,IAAI;AAAA,UACvB,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,QAAQ,QAAA;AAAA,UACR,OAAKU,eAAE,eAAe,QAAA,MAAQ,GAAG,CAAA;AAAA,UACjC,MAAM,QAAA,MAAQ,IAAI,SAAS,QAAA,QAAK;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACYvC,UAAM,QAAQ;AAyBd,UAAM,YAAY;AAAA,MAAS,MACzB,MAAM,gBAAgB,CAAC,GAAG,MAAM,UAAU,MAAM,aAAa,IAAI,MAAM;AAAA,IAAA;AAGzE,UAAM,WAAW;AAAA,MAAS,MACxB,UAAU,MAAM,IAAI,CAAC,EAAE,GAAG,SAAS;AAAA,QACjC,GAAG,IAAI,MAAM,KAAK,OAAO;AAAA,QACzB,GAAG,IAAI,MAAM,KAAK,OAAO;AAAA,MAAA,EACzB;AAAA,IAAA;AAGJ,UAAM,WAAW,SAAS,MAAM;AAC9B,UAAI,CAAC,SAAS,MAAM,OAAQ,QAAO;AACnC,YAAM,CAAC,OAAO,GAAG,IAAI,IAAI,SAAS;AAClC,YAAM,YAAY,CAAC,CAAC,MAAM;AAC1B,cACE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MACvB,KAAK,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,KAC1C,YAAY,KAAK,OAClB,KAAA;AAAA,IACJ,CAAC;AAED,UAAM,eAAe,SAAS,MAAM,MAAM,iBAAiB,MAAM,SAAS,SAAS,CAAC;AAEpF,UAAM,QAAQ,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK;AAChE,UAAM,SAAS,SAAS,MAAM,MAAM,KAAK,KAAK,SAAS,MAAM,KAAK;;;0BAhHhEV,mBAuDM,OAAA;AAAA,QAtDH,OAAKU,eAAA;AAAA;oBAAgD,MAAA,KAAK;AAAA,qBAAuB,OAAA,KAAM;AAAA;;;;QAQvF,OAAO,MAAA;AAAA,QACP,QAAQ,OAAA;AAAA,QACR,SAAO,OAAS,QAAA,KAAK,KAAK,KAAK,IAAI,QAAA,KAAK,KAAK,MAAM;AAAA,MAAA;QAEpDR,mBAiBE,QAAA;AAAA,UAhBC,GAAG,SAAA;AAAA,UACH,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,SAAS,QAAA;AAAA,UACT,OAAKQ,eAAA;AAAA,YAAkB,MAAA,QAAA,yBAAyB,QAAA;AAAA,YAAuB,QAAA,QAAA,eAAe,QAAA;AAAA,yBAAe,QAAA;AAAA,oBAA6B,QAAA,aAAU,SAAA;AAAA,YAA8C,eAAA,QAAA,sBAAsB,QAAA,UAAK,gBAAA,kBAAA;AAAA;;eAA8H,QAAA,gBAAgBN,MAAA,wBAAA,EAAyB,UAAM;AAAA,cAAiC,kBAAA,aAAA,oBAAA,mBAAiB,KAAI;AAAA,YAAA;AAAA;;QAcnb,aAAA,SAAgB,SAAA,MAAS,SAAM,kBADvCJ,mBAYE,QAAA;AAAA;UAVC,QAAQ,SAAA,MAAS,eAAS,YAAY,CAAC,IAAa,SAAA,MAAS,SAAA,MAAS,YAAY,CAAc,MAAA,SAAA,MAAQ,CAAA,EAAI,CAAC,IAAI,SAAA,SAAY,CAAC;AAAA,UAG/H,MAAK;AAAA,UACJ,OAAKU,eAAA;AAAA,oBAAoB,QAAA;AAAA,yBAAqB,QAAA;AAAA;;;;QAQzC,aAAA,SAAgB,SAAA,MAAS,UAAM,kBADvCV,mBAUE,QAAA;AAAA;UARC,GAAG,SAAA,MAAQ,CAAA,EAAI,IAAI,QAAA,aAAa,QAAA,QAAK;AAAA,UACrC,GAAG,SAAA,MAAQ,CAAA,EAAI,IAAI,QAAA,aAAa,QAAA,QAAK;AAAA,UACrC,OAAO,QAAA,aAAa,QAAA;AAAA,UACpB,QAAQ,QAAA,aAAa,QAAA;AAAA,UACrB,MAAM,QAAA;AAAA,UACN,SAAS;AAAA,UACT,QAAQ,QAAA;AAAA,UACR,gBAAc,QAAA,cAAW;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;ACGhC,UAAM,QAAQ;AAoBd,UAAM,WAAW;AAAA,MAAS,MACxB,MAAM,SAAS,IAAI,CAAC,EAAE,GAAG,SAAS;AAAA,QAChC,GAAG,IAAI,MAAM,KAAK,OAAO;AAAA,QACzB,GAAG,IAAI,MAAM,KAAK,OAAO;AAAA,MAAA,EACzB;AAAA,IAAA;AAGJ,UAAM,WAAW,SAAS,MAAM;AAC9B,UAAI,SAAS,MAAM,WAAW,EAAG,QAAO;AACxC,YAAM,CAAC,OAAO,GAAG,IAAI,IAAI,SAAS;AAClC,cAAQ,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,KAAA;AAAA,IACrF,CAAC;AAED,UAAM,UAAU,SAAS,MAAM;;AAC7B,UAAI,SAAS,MAAM,SAAS,UAAU,EAAE,OAAO,MAAM,KAAK,KAAA;AAC1D,YAAM,UAAU,CAAC,GAAa,MAAgB,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAE7E,YAAM,WAAW,QAAQ,SAAS,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC;AAC7D,YAAM,SAAS;AAAA,QACb,SAAS,MAAM,SAAS,MAAM,SAAS,CAAC;AAAA,QACxC,SAAS,MAAM,SAAS,MAAM,SAAS,CAAC;AAAA,MAAA;AAG1C,aAAO;AAAA,QACL,OAAO,SAAS;AAAA,WACd,WAAM,gBAAN,mBAAmB;AAAA,UACnB,MAAM;AAAA,UACN,WAAW,KAAK;AAAA,UAChB,SAAS,MAAM,CAAC,EAAE;AAAA,UAClB,SAAS,MAAM,CAAC,EAAE;AAAA,QAAA;AAAA,QAEpB,KAAK,SAAS;AAAA,WACZ,WAAM,gBAAN,mBAAmB;AAAA,UACnB,MAAM;AAAA,UACN;AAAA,UACA,SAAS,MAAM,SAAS,MAAM,SAAS,CAAC,EAAE;AAAA,UAC1C,SAAS,MAAM,SAAS,MAAM,SAAS,CAAC,EAAE;AAAA,QAAA;AAAA,MAC5C;AAAA,IAEJ,CAAC;AAED,UAAM,iBAAiB,CAAC,YAAgC;AAAA,MACtD,QAAQ,MAAM,aAAa,SAAS;AAAA,MACpC,aAAa,MAAM;AAAA,MACnB,eAAgB,MAAM,aAAa,SAAS,OAAO,SAAS,YAAY;AAAA,MAIxE,eAAe;AAAA,IAAA;AAGjB,UAAM,QAAQ,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK;AAChE,UAAM,SAAS,SAAS,MAAM,MAAM,KAAK,KAAK,SAAS,MAAM,KAAK;;0BAhIhEA,mBAgDM,OAAA;AAAA,QA/CH,OAAKU,eAAA;AAAA;oBAAgD,MAAA,KAAK;AAAA,qBAAuB,OAAA,KAAM;AAAA;;;;QAQvF,OAAO,MAAA;AAAA,QACP,QAAQ,OAAA;AAAA,QACR,SAAO,OAAS,QAAA,KAAK,KAAK,KAAK,IAAI,QAAA,KAAK,KAAK,MAAM;AAAA,MAAA;QAEpDR,mBAcE,QAAA;AAAA,UAbC,GAAG,SAAA;AAAA,UACH,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,SAAS,QAAA;AAAA,UACT,OAAKQ,eAAA;AAAA;YAA0C,QAAA,QAAA,eAAe,QAAA;AAAA,yBAAe,QAAA;AAAA,oBAA6B,QAAA,aAAU,SAAA;AAAA,2BAA8C,QAAA,aAAU,SAAA;AAAA;;;;QAWvK,QAAA,MAAQ,sBADhBV,mBASE,QAAA;AAAA;UAPC,GAAG,QAAA,MAAQ,MAAM;AAAA,UACjB,WAAW,QAAA,MAAQ,MAAM;AAAA,UACzB,QAAQ,QAAA;AAAA,UACR,MAAM,QAAA,MAAQ,MAAM,SAAS,QAAA,QAAK;AAAA,UAClC,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKU,eAAE,eAAe,QAAA,MAAQ,KAAK,CAAA;AAAA,QAAA;QAG9B,QAAA,MAAQ,oBADhBV,mBASE,QAAA;AAAA;UAPC,GAAG,QAAA,MAAQ,IAAI;AAAA,UACf,WAAW,QAAA,MAAQ,IAAI;AAAA,UACvB,QAAQ,QAAA;AAAA,UACR,MAAM,QAAA,MAAQ,IAAI,SAAS,QAAA,QAAK;AAAA,UAChC,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKU,eAAE,eAAe,QAAA,MAAQ,GAAG,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;ACRxC,UAAM,QAAQ;AAoBd,UAAM,WAAW,SAAS,MAAM;AAC9B,YAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,YAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,YAAM,SAAS,KAAK,IAAI,SAAS,MAAM,aAAa,CAAC;AACrD,YAAM,SAAS,KAAK,IAAI,SAAS,MAAM,aAAa,CAAC;AAErD,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,GAAG,MAAM,cAAc;AAAA,QACvB,GAAG,MAAM,cAAc;AAAA,MAAA;AAAA,IAE3B,CAAC;AAED,UAAM,WAAW,SAAS,OAAO,SAAS,MAAM,QAAQ,MAAM,eAAe,MAAM,KAAK;AACxF,UAAM,YAAY,SAAS,OAAO,SAAS,MAAM,SAAS,MAAM,eAAe,MAAM,KAAK;;;0BAzExFV,mBA+BM,OAAA;AAAA,QA9BH,OAAKU,eAAA;AAAA;iBAA6C,SAAA;AAAA,kBAAwB,UAAA;AAAA;;;QAO1E,OAAO,SAAA;AAAA,QACP,QAAQ,UAAA;AAAA,QACR,SAAO,OAAS,SAAA,MAAS,QAAQ,QAAA,WAAW,IAAI,SAAA,MAAS,SAAS,QAAA,WAAW;AAAA,MAAA;QAE9ER,mBAkBE,QAAA;AAAA,UAjBC,GAAG,SAAA,MAAS;AAAA,UACZ,GAAG,SAAA,MAAS;AAAA,UACZ,OAAO,SAAA,MAAS;AAAA,UAChB,QAAQ,SAAA,MAAS;AAAA,UACjB,MAAM,QAAA;AAAA,UACN,SAAS,QAAA;AAAA,UACT,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKQ,eAAA;AAAA,oBAAoB,QAAA,aAAU,SAAA;AAAA,YAA8C,eAAA,QAAA,sBAAsB,QAAA,UAAK,gBAAA,kBAAA;AAAA,YAAkE,QAAA,QAAA,eAAe,QAAA;AAAA,yBAA4B,QAAA;AAAA,eAAyB,QAAA,gBAAgBN,MAAA,wBAAA,EAAyB,UAAM;AAAA,cAAiC,kBAAA,aAAA,oBAAA,mBAAiB,KAAI;AAAA,YAAA;AAAA;;;;;;;;;;;;;;;;;ACF9V,UAAM,QAAQ;AAad,UAAM,EAAE,UAAU,mBAAA,IAAuB,wBAAA;AACzC,UAAM,WAAW,IAAmB,IAAI;AACxC,UAAM,SAAS,IAAmB,IAAI;AACtC,UAAM,cAAc,IAAS,IAAI;AAGjC,UAAM,eAAe,SAAS,MAAM,MAAM,WAAW,EAAE;AACvD,UAAM,YAAY,SAAS,MAAM,MAAM,WAAW,KAAK,KAAK,KAAK;AACjE,UAAM,aAAa,SAAS,MAAM,MAAM,WAAW,KAAK,KAAK,MAAM;AAEnE;AAAA,MACE,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,WAAW;AAAA,QACX,mBAAmB;AAAA,MAAA;AAAA,MAErB,CAAC,GAAG,IAAI,cAAc;AACpB,YAAI,mBAAmB,OAAO;AAC5B,cAAI,OAAO,OAAO;AAChB,gBAAI,gBAAgB,OAAO,KAAK;AAChC,mBAAO,QAAQ;AAAA,UACjB;AAEA,gBAAM,OAAO,mBAAmB,MAAM,YAAY,MAAM,UAAU,EAAE,iBAAiB;AAAA,YACnF,WAAW,MAAM;AAAA,YACjB,YAAY,UAAU,MAAM,UAAU;AAAA,YACtC,SAAS;AAAA,cACP,aAAa,MAAM;AAAA,cACnB,KAAK,OAAO;AAAA,YAAA;AAAA,UACd,CACD;AAED,sBAAY,QAAQ;AAEpB,eAAK,KAAK,CAAC,SAAS;AAClB,kBAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,qBAAS,QAAQ;AACjB,mBAAO,QAAQ;AAAA,UACjB,GAAG,MAAM;AAET,oBAAU,MAAM;AACd,gBAAI,OAAO,OAAO;AAChB,kBAAI,gBAAgB,OAAO,KAAK;AAChC,qBAAO,QAAQ;AAAA,YACjB,OAAO;AACL,mBAAK,MAAM;AAAA,gBACT,MAAM,aAAa;AAAA,gBACnB,SAAS;AAAA,cAAA,CACV;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAA;AAAA,IAAK;AAGpB,gBAAY,MAAM;AAChB,UAAI,OAAO,OAAO;AAChB,YAAI,gBAAgB,OAAO,KAAK;AAChC,eAAO,QAAQ;AAAA,MACjB;AACA,UAAI,YAAY,OAAO;AACrB,oBAAY,MAAM,MAAM;AAAA,UACtB,MAAM,aAAa;AAAA,UACnB,SAAS;AAAA,QAAA,CACV;AAAA,MACH;AAAA,IACF,CAAC;AAED,UAAM,kBAAkB,MAAM;AAC5B,UAAI,OAAO,OAAO;AAChB,YAAI,gBAAgB,OAAO,KAAK;AAChC,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;;aA7GU,SAAA,sBADRJ,mBAUE,OAAA;AAAA;QARC,KAAK,SAAA;AAAA,QACL,QAAM;AAAA,QACN,OAAKU,eAAA;AAAA;;;aAAgF,QAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;0BCJxFV,mBAkBM,OAAA;AAAA,QAjBH,OAAKU,eAAA;AAAA;;;;yBAAiH,QAAA,aAAU,SAAA;AAAA;;QAQhI,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,qBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,QACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,qBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,MAAA;QAEbE,YAKEC,aAAA;AAAA,UAJC,YAAY,QAAA;AAAA,UACZ,WAAW,QAAA;AAAA,UACX,YAAU,EAAA,GAAO,mBAAW,YAAY,QAAA,WAAW,OAAO,GAAA;AAAA,UAC1D,aAAa,QAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;AChBlB,aAAAd,UAAA,IAAA,GAAAC,mBAiBOM,UAAA,MAAAK,WAhBY,QAAA,cAAY,CAArB,GAAG,MAAC;4BADdX,mBAiBO,OAAA;AAAA,UAfJ,KAAK;AAAA,UACL,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKU,eAAA;AAAA;YAAgD,MAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAqB,KAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAsB,OAAA,GAAA,EAAE,KAAK,QAAQ,QAAA,KAAK;AAAA,YAAuB,QAAA,GAAA,EAAE,KAAK,SAAS,QAAA,KAAK;AAAA,wBAAwB,QAAA;AAAA,qBAAsB,QAAA;AAAA,2BAA8B,QAAA,UAAO,SAAA;AAAA,oBAAkC,QAAA,UAAO,YAAA;AAAA,YAAwC,QAAA,QAAA,cAAc;AAAA,UAAA;;;;;;;;;;;;;;;;;ACiCrc,UAAM,QAAQ;AAed,UAAM,YAAY,SAAS,MAAM,IAAI,MAAM,KAAK;AAChD,UAAM,SAAS,SAAS,MAAM,IAAI,MAAM,KAAK;AAE7C,UAAM,aAAa,SAAS,MAAM;AAChC,YAAM,MAAM,UAAU;AACtB,YAAM,MAAM,OAAO;AACnB,YAAM,MAAM,kDAAkD,GAAG,aAC/D,MAAM,CACR,kBAAkB,GAAG,IAAI,MAAM,CAAC;AAAA,kBAChB,GAAG,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG;AAAA,gCACtC,MAAM,KAAK,mBAAmB,GAAG;AAAA;AAE/D,aAAO,gCAAgC,mBAAmB,GAAG,CAAC;AAAA,IAChE,CAAC;;AAlEC,aAAAX,UAAA,IAAA,GAAAC,mBA+BMM,UAAA,MAAAK,WA9Ba,QAAA,cAAY,CAArB,GAAG,MAAC;4BADdX,mBA+BM,OAAA;AAAA,UA7BH,KAAK;AAAA,UACL,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKU,eAAA;AAAA;YAAgD,MAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAqB,KAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAsB,OAAA,GAAA,EAAE,KAAK,QAAQ,QAAA,KAAK;AAAA,YAAuB,QAAA,GAAA,EAAE,KAAK,SAAS,QAAA,KAAK;AAAA;2BAA4D,QAAA,UAAO,SAAA;AAAA,oBAAkC,QAAA,UAAO,YAAA;AAAA,oBAAwC,QAAA,UAAO,IAAA;AAAA,UAAA;;UAY1aR,mBAaE,OAAA;AAAA,YAZC,OAAKQ,eAAA;AAAA;;;;yBAAgH,UAAA,QAAS,CAAA;AAAA,+BAAmC,WAAA;AAAA;cAA6E,gBAAA,GAAA,OAAA,KAAM,MAAM,UAAA,QAAS,CAAA;AAAA,uBAA2B,QAAA;AAAA;;;;;;;;;;;;;;;;;;;ACmBrS,UAAM,QAAQ;AAed,UAAM,YAAY,SAAS,MAAM,IAAI,MAAM,KAAK;;AApD9C,aAAAX,UAAA,IAAA,GAAAC,mBA8BMM,UAAA,MAAAK,WA7Ba,QAAA,cAAY,CAArB,GAAG,MAAC;4BADdX,mBA8BM,OAAA;AAAA,UA5BH,KAAK;AAAA,UACL,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKU,eAAA;AAAA;YAAgD,MAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAqB,KAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAsB,OAAA,GAAA,EAAE,KAAK,QAAQ,QAAA,KAAK;AAAA,YAAuB,QAAA,GAAA,EAAE,KAAK,SAAS,QAAA,KAAK;AAAA;2BAA4D,QAAA,UAAO,SAAA;AAAA,oBAAkC,QAAA,UAAO,YAAA;AAAA,oBAAwC,QAAA,UAAO,IAAA;AAAA,UAAA;;UAY1aR,mBAYE,OAAA;AAAA,YAXC,OAAKQ,eAAA;AAAA;;;;yBAAiH,UAAA,KAAS;AAAA,0BAA0B,QAAA;AAAA,uBAAwB,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;ACkBxL,UAAM,QAAQ;AAed,UAAM,YAAY,SAAS,MAAM,IAAI,MAAM,KAAK;;AAnD9C,aAAAX,UAAA,IAAA,GAAAC,mBA6BMM,UAAA,MAAAK,WA5Ba,QAAA,cAAY,CAArB,GAAG,MAAC;4BADdX,mBA6BM,OAAA;AAAA,UA3BH,KAAK;AAAA,UACL,eAAW,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACb,cAAU,OAAA,CAAA,MAAA,OAAA,CAAA;AAAA,uBAAE,QAAA,WAAA,QAAA,QAAA,GAAA,IAAA;AAAA,UACZ,OAAKU,eAAA;AAAA;YAAgD,MAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAqB,KAAA,IAAA,QAAA,OAAO,EAAE,OAAO,IAAI,QAAA,KAAK,OAAO,IAAI,EAAE,OAAO,KAAK,QAAA,KAAK;AAAA,YAAsB,OAAA,GAAA,EAAE,KAAK,QAAQ,QAAA,KAAK;AAAA,YAAuB,QAAA,GAAA,EAAE,KAAK,SAAS,QAAA,KAAK;AAAA;2BAA4D,QAAA,UAAO,SAAA;AAAA,oBAAkC,QAAA,UAAO,YAAA;AAAA,oBAAwC,QAAA,UAAO,IAAA;AAAA,UAAA;;UAY1aR,mBAWE,OAAA;AAAA,YAVC,OAAKQ,eAAA;AAAA;;;;yBAAgH,UAAA,KAAS;AAAA,0BAA0B,QAAA;AAAA,uBAAwB,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC0XvL,UAAM,QAAQ;AAcd,UAAM,EAAE,UAAU,qBAAA,IAAyB,wBAAA;AAC3C,UAAM,EAAE,UAAU,kBAAA,IAAsB,uBAAA;AACxC,UAAM,cAAc,IAAyB,EAAE;AAC/C,UAAM,EAAE,SAAA,IAAa,mBAAmB;AAAA,MACtC,YAAY,MAAM,MAAM;AAAA,MACxB,WAAW,MAAM;AAAA,IAAA,CAClB;AACD,UAAM,iBAAiB,IAA8B,IAAI;AACzD,UAAM,YAAY,IAAmB,IAAI;AAGzC,UAAM,qBAAqB;AAAA,MAAS,MAClC,qBAAqB,QAAQ,qBAAqB,MAAM,YAAY,MAAM,UAAU,IAAI;AAAA,IAAA;AAG1F,gBAAY,CAAC,cAAc;AACzB,UAAI,mBAAmB,OAAO;AAE5B,cAAM,eAAe,mBAAmB,MAAM,SAAA;AAC9C,oBAAY,QAAQ,0BAA0B,cAAc,MAAM,SAAS;AAC3E,uBAAe,QAAQ,iCAAiC,cAAc,MAAM,SAAS;AAGrF,cAAM,MAAM,mBAAmB,MAAM,cAAc,CAAC,UAAU;AAC5D,sBAAY,QAAQ,0BAA0B,OAAO,MAAM,SAAS;AACpE,yBAAe,QAAQ,iCAAiC,OAAO,MAAM,SAAS;AAAA,QAChF,CAAC;AACD,kBAAU,GAAG;AAAA,MACf;AAAA,IACF,CAAC;AAED,UAAM,oBAAoB,CAAC,MAAgB,OAAqB;AAC9D,UAAI,GAAG,WAAW,GAAG,iBAAiB,mBAAmB,OAAO;AAC9D,2BAAmB,MAAM,mBAAA;AACzB,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,cAAc,CAAC,GAA4B,eAAkC;AACjF,QAAE,gBAAA;AACF,UAAI,mBAAmB,SAAS,kBAAkB,OAAO;AACvD,2BAAmB,MAAM,iBAAiB,MAAM,WAAW,WAAW,OAAO,EAAE;AAC/E,0BAAkB,MAAM,MAAA;AACxB,YAAI,WAAW,OAAO,OAAO,UAAU,OAAO;AAC5C,oBAAU,QAAQ;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,oBAAoB,CAAC,IAA+B,OAAe;AACvE,UAAI,WAAW,YAAY,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE,CAAE,GAAG;AAClE,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAEA,gBAAY,CAAC,cAAc;AACzB,UAAI,mBAAmB,OAAO;AAC5B,cAAM,aAAa,SAAS,EAAE,eAAe,mBAAmB;AAChE,YAAI,YAAY;AACd,oBAAU,UAAU;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAGD,UAAM,UAAU,CAAC,eAAA;;AACf,sCAAmB,UAAnB,mBAA0B,sBAAsB,WAAW;AAAA;AAE7D,UAAM,cAAc,CAAC,SAA4B;;AAC/C,UAAI,WAAW,IAAI,KAAK,UAAU,UAAU,KAAK,OAAO,GAAI,QAAO;AACnE,eAAO,aAAQ,IAAI,MAAZ,mBAAe,YAAY,gBAAe;AAAA,IACnD;AACA,UAAM,cAAc,CAAC,SAAA;;AAA4B,4BAAQ,IAAI,MAAZ,mBAAe,YAAY,gBAAe;AAAA;AAC3F,UAAM,kBAAkB,CAAC,SAAA;;AACvB,4BAAQ,IAAI,MAAZ,mBAAe,YAAY,oBAAmB;AAAA;AAEhD,UAAM,kBAAkB,CAAC,eAAiE;AACxF,UAAI,OAAO,UAAU,GAAG;AACtB,eAAO;AAAA,UACL,iBAAiB,CAAC,SAAS,CAAC,KAAK,WAAW,OAAO,KAAK,WAAW,GAAG;AAAA,UACtE,qBAAqB,CAAC,MAAM,cAAc;AAAA,YACxC,GAAG;AAAA,YACH,YAAY,EAAE,OAAO,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,EAAA;AAAA,UAAE;AAAA,QACrD;AAAA,MAEJ;AACA,UAAI,WAAW,UAAU,KAAK,UAAU,UAAU,GAAG;AACnD,eAAO;AAAA,UACL,iBAAiB,CAAC,SAAS,KAAK;AAAA,UAChC,qBAAqB,CAAC,MAAM,cAAc,EAAE,GAAG,MAAM,SAAA;AAAA,QAAS;AAAA,MAElE;AACA,aAAO;AAAA,IACT;;8BAvfEV,mBA4WWM,UAAA,MAAAK,WA5WoB,YAAA,OAAW,CAAzB,eAAU;;;eAAuB,WAAW,OAAO;AAAA,QAAA;UAG1DP,MAAA,KAAA,EAAM,UAAU,KADxBL,UAAA,GAAAQ,YA6BsBO,aA7BtBX,WA6BsB;AAAA;YA3BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAKE,EAAA,YAN8B,oBAAa;;AAAA;AAAA,gBAC7CI,YAKEG,aALFZ,WAKE,EAAA,SAAA,KAAA,GAJQ,eAAa;AAAA,kBACpB,cAAYL,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D,OAAO,QAAA;AAAA,kBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG/C,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAMnCC,MAAA,QAAA,EAAS,UAAU,KADhCL,aAAAQ,YA6BsBO,aA7BtBX,WA6BsB;AAAA;YA3BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAKE,EAAA,YAN8B,oBAAa;;AAAA;AAAA,gBAC7CI,YAKEI,aALFb,WAKE,EAAA,SAAA,KAAA,GAJQ,eAAa;AAAA,kBACpB,cAAYL,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D,OAAO,QAAA;AAAA,kBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG/C,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAMnCC,MAAA,QAAA,EAAS,UAAU,KADhCL,aAAAQ,YA6BsBO,aA7BtBX,WA6BsB;AAAA;YA3BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAKE,EAAA,YAN8B,oBAAa;;AAAA;AAAA,gBAC7CI,YAKEK,aALFd,WAKE,EAAA,SAAA,KAAA,GAJQ,eAAa;AAAA,kBACpB,cAAYL,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D,OAAO,QAAA;AAAA,kBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG/C,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAMnCC,MAAA,MAAA,EAAO,UAAU,KAD9BL,aAAAQ,YA6BsBO,aA7BtBX,WA6BsB;AAAA;YA3BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAKE,EAAA,YAN8B,oBAAa;;AAAA;AAAA,gBAC7CI,YAKEM,aALFf,WAKE,EAAA,SAAA,KAAA,GAJQ,eAAa;AAAA,kBACpB,cAAYL,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D,OAAO,QAAA;AAAA,kBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG/C,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAMnCC,MAAA,UAAA,EAAW,UAAU,KADlCL,aAAAQ,YA6BsBO,aA7BtBX,WA6BsB;AAAA;YA3BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAKE,EAAA,YAN8B,oBAAa;;AAAA;AAAA,gBAC7CI,YAKEO,aALFhB,WAKE,EAAA,SAAA,KAAA,GAJQ,eAAa;AAAA,kBACpB,cAAYL,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D,OAAO,QAAA;AAAA,kBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG/C,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAMnCC,MAAA,SAAA,EAAU,UAAU,KADjCL,aAAAQ,YA6BsBO,aA7BtBX,WA6BsB;AAAA;YA3BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAKE,EAAA,YAN8B,oBAAa;;AAAA;AAAA,gBAC7CI,YAKEQ,aALFjB,WAKE,EAAA,SAAA,KAAA,GAJQ,eAAa;AAAA,kBACpB,cAAYL,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D,OAAO,QAAA;AAAA,kBACP,UAAU,MAAiC,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG9D,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAMnCC,MAAA,UAAA,EAAW,UAAU,KADlCL,aAAAQ,YAgCsBO,aAhCtBX,WAgCsB;AAAA;YA9BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,eAAa,CAAG,MAAM,kBAAkB,GAAG,WAAW,OAAO,EAAE;AAAA,YAC/D,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAOE,EAAA,YAR8B,oBAAa;;AAAA;AAAA,gBAC7CI,YAOES,aAAA;AAAA,kBANC,cAAYvB,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D,WAAW,UAAA,UAAc,WAAW,OAAO;AAAA,kBAC3C,YAAU,EAAA,GAAO,YAAU,QAAU,cAAA;AAAA,kBACrC,WAAW,QAAA;AAAA,kBACX,OAAO,QAAA;AAAA,kBACP,UAAU,MAAiC,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG9D,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;kKAMnCC,MAAA,OAAA,EAAQ,UAAU,KAD/BL,aAAAQ,YA+BsBO,aA/BtBX,WA+BsB;AAAA;YA7BnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,iBACT,MAAA;;AAOE;AAAA,gBAPFQ,YAOEU,aAAA;AAAA,kBANC,YAAY,QAAA;AAAA,kBACZ,cAAYxB,MAAA,eAAA,UAAA,gBAAAA,IAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,kBAC5D;AAAA,kBACA,WAAW,QAAA;AAAA,kBACX,OAAO,QAAA;AAAA,kBACP,UAAU,MAAiC,YAAY,GAAG,UAAU;AAAA,gBAAA;;;YAG9D,kBAAcU,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEpC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;YAEnC,iBAAaK,QACtB,CAAgD,cADf;AAAA,cACjCH,WAAgD,KAAA,QAAA,iBAAhDF,WAAgD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAMnCC,MAAA,WAAA,EAAY,UAAU,KADnCL,aAAAQ,YAuBsBO,aAvBtBX,WAuBsB;AAAA;YArBnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,QAAQ;AAAA,YACR,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAIE,EAAA,YAL8B,oBAAa;AAAA,cAC7CI,YAIEW,aAJFpB,WAIE,EAAA,SAAA,KAAA,GAHQ,eAAa;AAAA,gBACpB,OAAO,QAAA;AAAA,gBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,cAAA;;YAG/C,kBAAcK,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAKpCC,MAAA,WAAA,EAAY,UAAU,KADnCL,aAAAQ,YAuBsBO,aAvBtBX,WAuBsB;AAAA;YArBnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,QAAQ;AAAA,YACR,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAIE,EAAA,YAL8B,oBAAa;AAAA,cAC7CI,YAIEY,aAJFrB,WAIE,EAAA,SAAA,KAAA,GAHQ,eAAa;AAAA,gBACpB,OAAO,QAAA;AAAA,gBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,cAAA;;YAG/C,kBAAcK,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAKpCC,MAAA,UAAA,EAAW,UAAU,KADlCL,aAAAQ,YAuBsBO,aAvBtBX,WAuBsB;AAAA;YArBnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,QAAQ;AAAA,YACR,OAAK,EAAA,cAAkBC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,MAAM,EAAA;AAAA,UAAA,sBACjF,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAIE,EAAA,YAL8B,oBAAa;AAAA,cAC7CI,YAIEa,aAJFtB,WAIE,EAAA,SAAA,KAAA,GAHQ,eAAa;AAAA,gBACpB,OAAO,QAAA;AAAA,gBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,cAAA;;YAG/C,kBAAcK,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;iJAKpCC,MAAA,WAAA,EAAY,UAAU,KADnCL,aAAAQ,YAyBsBO,aAzBtBX,WAyBsB;AAAA;YAvBnB,mBAAmB;AAAA,YACnB,cAAY,oBAAA,UAAA,mBAAgB,OAAO,QAAO,WAAW,OAAO;AAAA,YAC5D,aAAa,YAAY,UAAU;AAAA,YACnC,aAAa,YAAY,UAAU;AAAA,YACnC,iBAAiB,gBAAgB,UAAU;AAAA,YAC3C,WAAW,MAAM,YAAY,GAAG,UAAU;AAAA,YAC1C,cAAc,gBAAgB,UAAU;AAAA,YACxC,QAAQ;AAAA,YACR,OAAK;AAAA,4BAA0BC,MAAA,cAAA,EAAe,WAAW,OAAO,aAAaA,MAAA,YAAA,EAAa,QAAQ;AAAA,YAAA;AAAA,gCAG3F,KAAK,GAAA;AAAA,YAEF,SAAOI,QAChB,CAIE,EAAA,YAL8B,oBAAa;AAAA,cAC7CI,YAIEc,aAJFvB,WAIE,EAAA,SAAA,KAAA,GAHQ,eAAa;AAAA,gBACpB,OAAO,QAAA;AAAA,gBACP,UAAU,MAAkB,YAAY,GAAG,UAAU;AAAA,cAAA;;YAG/C,kBAAcK,QACvB,CAAiD,cADf;AAAA,cAClCH,WAAiD,KAAA,QAAA,kBAAjDF,WAAiD,EAAA,SAAA,KAAA,GAAb,SAAS,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;ACtTrD,UAAM,QAAQ;AAMd,UAAM,EAAE,UAAU,kBAAA,IAAsB,uBAAA;AACxC,UAAM,EAAE,UAAU,mBAAA,IAAuB,wBAAA;AACzC,UAAM,QAAQ,IAAY,EAAE;AAC5B,UAAM,eAAe,IAAiB,IAAI;AAC1C,UAAM,aAAa,IAA2B,IAAI;AAElD,gBAAY,CAAC,cAAc;AACzB,YAAM,gBAAgC,CAAA;AAEtC,UAAI,kBAAkB,OAAO;AAC3B,cAAM,SAAS,kBAAkB,MAAM,YAAY,MAAM,UAAU;AACnE,cAAM,MAAM,OAAO,kBAAkB,MAAM;AACzC,gBAAM,QAAQ,OAAO,yBAAyB,MAAM,SAAS;AAC7D,uBAAa,QAAQ,OAAO,uBAAuB,MAAM,SAAS;AAAA,QACpE,CAAC;AACD,sBAAc,KAAK,GAAG;AAAA,MACxB;AAEA,UAAI,mBAAmB,OAAO;AAC5B,cAAM,SAAS,mBAAmB,MAAM,YAAY,MAAM,UAAU;AAEpE,mBAAW,QAAQ,OAAO,cAAA;AAE1B,cAAM,MAAM,OAAO,mBAAmB,CAAC,UAAW,WAAW,QAAQ,KAAM;AAC3E,sBAAc,KAAK,GAAG;AAAA,MACxB;AAEA,gBAAU,MAAM;AACd,sBAAc,QAAQ,CAAC,UAAU,MAAA,CAAO;AAAA,MAC1C,CAAC;AAAA,IACH,CAAC;AAED,UAAM,YAAY,SAAS,MAAM;AAC/B,UAAI,CAAC,WAAW,MAAO,QAAO,eAAe,aAAa,MAAM;AAChE,YAAM,cACJ,WAAW,MAAM,SAAS,SAAS,qBAAqB,YACpD,aAAa,WACb,aAAa;AACnB,aAAO,eAAe,WAAW,MAAM,SAAS,aAAa,WAAW;AAAA,IAC1E,CAAC;;AA/FS,aAAA,aAAA,SAAgB,WAAA,sBADxBH,mBAqCM,OAAA;AAAA;QAnCH,OAAKU,eAAA;AAAA,wBAAwB,UAAA;AAAA;;;;;QAQtB,WAAA,MAAW,SAAS,SAASN,MAAA,oBAAA,EAAqB,0BAD1DG,YAMEoB,aAAA;AAAA;UAJC,OAAO,WAAA,MAAW,SAAS;AAAA,UAC3B,SAAS,WAAA,MAAW,SAAS;AAAA,UAC7B,cAAc,MAAA;AAAA,UACd,OAAO,QAAA;AAAA,QAAA,8DAGG,WAAA,MAAW,SAAS,SAASvB,MAAA,oBAAA,EAAqB,0BAD/DG,YAMEqB,aAAA;AAAA;UAJC,OAAO,WAAA,MAAW,SAAS;AAAA,UAC3B,SAAS,WAAA,MAAW,SAAS;AAAA,UAC7B,cAAc,MAAA;AAAA,UACd,OAAO,QAAA;AAAA,QAAA,8DAGG,WAAA,MAAW,SAAS,SAASxB,MAAA,oBAAA,EAAqB,0BAD/DG,YAMEsB,aAAA;AAAA;UAJC,OAAO,WAAA,MAAW,SAAS;AAAA,UAC3B,SAAS,WAAA,MAAW,SAAS;AAAA,UAC7B,cAAc,MAAA;AAAA,UACd,OAAO,QAAA;AAAA,QAAA,8DAGG,WAAA,MAAW,SAAS,SAASzB,MAAA,oBAAA,EAAqB,yBAD/DG,YAMEuB,aAAA;AAAA;UAJC,OAAO,WAAA,MAAW,SAAS;AAAA,UAC3B,SAAS,WAAA,MAAW,SAAS;AAAA,UAC7B,cAAc,MAAA;AAAA,UACd,OAAO,QAAA;AAAA,QAAA;;;;;;;;;;;;ACoBd,UAAM,QAAQ;AAKd,UAAM,QAAQ,SAAwB,OAAO;AAAA,MAC3C,UAAU;AAAA,MACV,MAAM,GAAG,MAAM,QAAQ,OAAO,OAAO,IAAI,MAAM,KAAK;AAAA,MACpD,KAAK,GAAG,MAAM,QAAQ,OAAO,OAAO,IAAI,MAAM,KAAK;AAAA,MACnD,OAAO,GAAG,MAAM,QAAQ,OAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,MACvD,QAAQ,GAAG,MAAM,QAAQ,OAAO,KAAK,SAAS,MAAM,KAAK;AAAA,MACzD,eAAe;AAAA,MACf,QAAQ;AAAA,IAAA,EACR;;0BApEA9B,mBA8CM,OAAA;AAAA,QA9CA,sBAAO,MAAA,KAAK;AAAA,MAAA;QAER,QAAA,QAAQ,SAASI,MAAA,oBAAA,EAAqB,UAD9CL,UAAA,GAAAQ,YAKEH,oBALFD,WAKE;AAAA;UAHC,YAAY;AAAA,UACZ,OAAO,QAAA;AAAA,QAAA,GACA,QAAA,QAAQ,IAAI,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA,KAGT,QAAA,QAAQ,SAASC,MAAA,oBAAA,EAAqB,UADnDL,aAAAQ,YAKEH,oBALFD,WAKE;AAAA;UAHC,YAAY;AAAA,UACZ,OAAO,QAAA;AAAA,QAAA,GACA,QAAA,QAAQ,IAAI,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA,KAGT,QAAA,QAAQ,SAASC,MAAA,oBAAA,EAAqB,WADnDL,aAAAQ,YAKEH,oBALFD,WAKE;AAAA;UAHC,YAAY;AAAA,UACZ,OAAO,QAAA;AAAA,QAAA,GACA,QAAA,QAAQ,IAAI,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA,KAGT,QAAA,QAAQ,SAASC,MAAA,oBAAA,EAAqB,YADnDL,aAAAQ,YAKEH,oBALFD,WAKE;AAAA;UAHC,YAAY;AAAA,UACZ,OAAO,QAAA;AAAA,QAAA,GACA,QAAA,QAAQ,IAAI,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA,KAGT,QAAA,QAAQ,SAASC,MAAA,oBAAA,EAAqB,QADnDL,aAAAQ,YAKEH,oBALFD,WAKE;AAAA;UAHC,YAAY;AAAA,UACZ,OAAO,QAAA;AAAA,QAAA,GACA,QAAA,QAAQ,IAAI,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA,KAGT,QAAA,QAAQ,SAASC,MAAA,oBAAA,EAAqB,OADnDL,aAAAQ,YAKEH,oBALFD,WAKE;AAAA;UAHC,YAAY;AAAA,UACZ,OAAO,QAAA;AAAA,QAAA,GACA,QAAA,QAAQ,IAAI,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA,KAGT,QAAA,QAAQ,SAASC,MAAA,oBAAA,EAAqB,yBADnDJ,mBAQE,OAAA;AAAA;UANC,OAAKU,eAAA;AAAA;;kCAAiF,QAAA,QAAQ,KAAK,aAAS,SAAA;AAAA;;;;;;;;;;;;;;;ACvBnH,UAAM,QAAQ;AAMd,UAAM,EAAE,QAAQ,iBAAA,IAAqB,oBAAA;AACrC,UAAM,WAAW,IAAkC,oBAAI,KAAK;AAC5D,UAAM,eAAe,IAA6B,IAAI;AACtD,UAAM,YAAY,IAA8B,IAAI;AAEpD,UAAM,WAAW,SAA0B,OAAO;AAAA,MAChD,aAAa,CAAC,EAAE,QAAQ,aAAa;AACnC,cAAM,QAAQ,aAAa;AAC3B,YAAI,CAAC,MAAO;AACZ,cAAM,SAAS;AACf,cAAM,WAAW,CAAC,MAAM;;AACtB,gBAAM,QAAQ,OAAE,OAA4B,UAA9B,mBAAsC;AACpD,cAAI,MAAM;AACR,mBAAO,IAAI;AACX,kBAAM,QAAQ;AAAA,UAChB;AAAA,QACF;AACA,cAAM,MAAA;AAAA,MACR;AAAA,MACA,cAAc,CAAC,EAAE,QAAQ,UAAU,WAAW,iBAAiB;AAC7D,cAAM,SAAS,UAAU;AACzB,YAAI,CAAC,UAAU,CAAC,OAAO,WAAY;AACnC,cAAM,MAAM,OAAO,WAAW,IAAI;AAClC,YAAI,CAAC,IAAK;AAEV,cAAM,MAAM,IAAI,MAAA;AAChB,YAAI,cAAc;AAClB,YAAI,SAAS,MAAM;AACjB,cAAI,EAAE,cAAc,OAAO,eAAe,WAAW;AACrD,gBAAM,SAAS,WAAW,WAAW,QAAQ;AAC7C,gBAAM,SAAS,YAAY,YAAY,SAAS;AAChD,gBAAM,cAAc,KAAK,IAAI,QAAQ,QAAQ,CAAC;AAC9C,gBAAM,aAAa,QAAQ;AAC3B,gBAAM,cAAc,SAAS;AAE7B,iBAAO,QAAQ;AACf,iBAAO,SAAS;AAChB,cAAI,UAAU,KAAK,GAAG,GAAG,YAAY,WAAW;AAEhD,gBAAM,YAAY,IAAI,aAAa,GAAG,GAAG,YAAY,WAAW;AAChE,cAAI,OAAO,WAAW,SAAU,KAAI,gBAAgB,IAAI,GAAG;AAE3D,qBAAW,EAAE,WAAW,OAAO,YAAY,QAAQ,aAAa;AAAA,QAClE;AACA,YAAI,MAAM,OAAO,WAAW,WAAW,SAAS,IAAI,gBAAgB,MAAM;AAAA,MAC5E;AAAA,IAAA,EACA;AAEF,QAAI;AAEJ,gBAAY,CAAC,cAAc;AACzB,UAAI,iBAAiB,OAAO;AAC1B,qBAAa,iBAAiB,MAAM;AAAA,UAClC,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,YACE,UAAU,SAAS;AAAA,YACnB,WAAW,CAAC,QAAQ,UAAU;AAC5B,oBAAM,OAAO,IAAI,IAAI,SAAS,KAAK;AACnC,kBAAI,OAAO;AACT,qBAAK,IAAI,QAAQ,KAAK;AAAA,cACxB,OAAO;AACL,qBAAK,OAAO,MAAM;AAAA,cACpB;AACA,uBAAS,QAAQ;AAAA,YACnB;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAEA,gBAAU,MAAM;AACd;AAAA,MACF,CAAC;AAAA,IACH,CAAC;;;QAhGCR,mBAA8D,SAAA;AAAA,mBAAnD;AAAA,UAAJ,KAAI;AAAA,UAAe,MAAK;AAAA,UAAO,OAAA,EAAA,WAAA,OAAA;AAAA,QAAA;QACtCA,mBAAuD,UAAA;AAAA,mBAA3C;AAAA,UAAJ,KAAI;AAAA,UAAY,OAAA,EAAA,WAAA,OAAA;AAAA,QAAA;SACxBH,UAAA,IAAA,GAAAC,mBAKEM,2BAJ4B,SAAA,MAAS,WAAO,CAAA,CAApC,QAAQ,OAAO,MAAA;8BADzBC,YAKEwB,aAAA;AAAA,YAHC,KAAK;AAAA,YACL;AAAA,YACA,OAAO,QAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;ACgCZ,UAAM,QAAQ;AAgBd,UAAM,gBAAgB,iBAAiB,MAAM,MAAM,UAAU;AAC7D,UAAM,OAAO,SAAS,MAAA;;AAAM,6CAAc,UAAd,mBAAqB,aAArB,mBAA+B,UAA/B,mBAAuC,MAAM;AAAA,KAAU;AACnF,UAAM,YAAY,SAAS,MAAA;;AAAM,+BAAK,UAAL,mBAAY,SAAZ,mBAAkB,UAAS;AAAA,KAAC;AAC7D,UAAM,aAAa,SAAS,MAAA;;AAAM,+BAAK,UAAL,mBAAY,SAAZ,mBAAkB,WAAU;AAAA,KAAC;AAE/D,UAAM,cAAc,SAAS,MAAM;;AACjC,UAAI,MAAM,UAAU,OAAW,QAAO,MAAM;AAC5C,eAAO,mBAAc,UAAd,mBAAqB,UAAS;AAAA,IACvC,CAAC;AAED,UAAM,iBAAiB,SAAS,MAAM;;AACpC,UAAI,MAAM,aAAa,OAAW,QAAO,MAAM;AAC/C,eAAO,mBAAc,UAAd,mBAAqB,aAAY,SAAS;AAAA,IACnD,CAAC;;0BAnEC/B,mBA0BM,OAAA,MAAA;AAAA,QAzBJY,YAsBcoB,aAAA;AAAA,UArBX,YAAY,QAAA;AAAA,UACZ,WAAW,QAAA;AAAA,UACX,OAAO,YAAA;AAAA,UACP,UAAU,eAAA;AAAA,UACV,WAAW,UAAA;AAAA,UACX,YAAY,WAAA;AAAA,UACZ,UAAU,QAAA;AAAA,UACV,UAAU,QAAA;AAAA,UACV,uBAAuB,QAAA;AAAA,UACvB,eAAe,QAAA;AAAA,QAAA;UAGL,kBAAcxB,QACvB,CAAsD,cADpB;AAAA,YAClCH,WAAsD,iEAAlB,SAAS,CAAA,CAAA;AAAA,UAAA;UAEpC,iBAAaG,QACtB,CAAqD,cADpB;AAAA,YACjCH,WAAqD,gEAAlB,SAAS,CAAA,CAAA;AAAA,UAAA;UAEnC,iBAAaG,QACtB,CAAqD,cADpB;AAAA,YACjCH,WAAqD,gEAAlB,SAAS,CAAA,CAAA;AAAA,UAAA;;;QAGhDO,YAAmFqB,aAAA;AAAA,UAAtE,YAAY,QAAA;AAAA,UAAa,WAAW,QAAA;AAAA,UAAY,OAAO,YAAA;AAAA,QAAA;QACpErB,YAA6FsB,aAAA;AAAA,UAAtE,YAAY,QAAA;AAAA,UAAa,WAAW,QAAA;AAAA,UAAY,OAAO,YAAA;AAAA,QAAA;;;;;"}
|