@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.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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":["useAnnotationPlugin","usePlugin","AnnotationPlugin","id","useAnnotationCapability","useCapability","HANDLE_COLOR","VERTEX_COLOR","props","__props","preview","shallowRef","toRaw","trackedAnnotation","object","provides","annotationCapability","gestureBaseRef","ref","annotationProvides","computed","value","forDocument","documentId","currentObject","shouldShowMenu","isSelected","selectionMenu","slots","menuRect","origin","x","rect","scale","y","size","width","height","menuContext","type","annotation","pageIndex","menuPlacement","suggestTop","spaceAbove","spaceBelow","renderSelectionMenu","menuWrapperProps","selected","placement","context","elementSnapshot","verticesSnapshot","obj","_a","vertexConfig","extractVertices","constraintsSnapshot","minWidth","minHeight","boundingBox","pageWidth","pageHeight","dragProps","vertices","resize","useInteractionHandles","controller","element","constraints","maintainAspectRatio","lockAspectRatio","pageRotation","rotation","enabled","onUpdate","event","transformData","state","base","changes","_b","transformAnnotation","patched","_c","metadata","_d","updateAnnotation","resizeUI","handleSize","spacing","outlineOffset","offsetMode","includeSides","zIndex","vertexUI","vertexSize","includeVertices","doubleProps","useDoublePressProps","onDoubleClick","watch","newObject","deep","containerStyle","position","left","top","outline","selectionOutlineColor","pointerEvents","touchAction","cursor","isDraggable","useSlots","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_mergeProps","_unref","style","_renderSlot","_ctx","$slots","isResizable","_Fragment","key","handle","backgroundColor","ref_for","length","vertex","_createBlock","CounterRotate","default","_withCtx","_resolveDynamicComponent","geometry","outerW","outerH","innerW","Math","max","strokeWidth","innerH","cx","cy","rx","ry","svgWidth","svgHeight","_normalizeStyle","viewBox","fill","color","opacity","onPointerdown","_cache","onClick","args","onTouchstart","stroke","strokeColor","strokeStyle","PdfAnnotationBorderStyle","DASHED","strokeDasharray","strokeDashArray","join","editorRef","isIOS","onMounted","nav","navigator","test","userAgent","platform","maxTouchPoints","isEditing","editing","editor","focus","selection","window","getSelection","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","handleBlur","contents","innerText","editorStyle","anno","computedFontPx","fontSize","needsComp","adjustedFontPx","scaleComp","invScalePercent","fontColor","fontFamily","standardFontCss","textAlign","textAlignmentToCss","flexDirection","justifyContent","verticalAlign","PdfVerticalAlignment","Top","Middle","display","lineHeight","overflow","transform","transformOrigin","onBlur","tabindex","contenteditable","paths","inkList","map","points","d","forEach","i","lx","ly","trim","_renderList","localLine","x1","linePoints","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","lineEndings","PI","getEndingStyle","ending","strokeLinecap","filled","allPoints","currentVertex","localPts","pathData","first","rest","isPreview","p","isPreviewing","toAngle","a","b","startRad","endRad","imageUrl","urlRef","currentTask","annotationId","rectWidth","rectHeight","scaleFactor","_","__","onCleanup","URL","revokeObjectURL","task","renderAnnotation","deepToRaw","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","immediate","onUnmounted","handleImageLoad","src","onLoad","_createVNode","RenderAnnotation","segmentRects","amplitude","period","svgDataUri","amp","per","svg","encodeURIComponent","r","backgroundSize","thickness","selectionProvides","useSelectionCapability","annotations","register","usePointerHandlers","selectionState","editingId","watchEffect","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationByPageIndex","onStateChange","handlePointerDown","_pos","pe","target","currentTarget","deselectAnnotation","handleClick","e","stopPropagation","selectAnnotation","clear","unregister","onPointerDown","getTool","findToolForAnnotation","isFreeText","interaction","getVertexConfig","isLine","isPolyline","isPolygon","isInk","AnnotationContainer","onSelect","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","AnnoComponents.Ink","slotProps","isSquare","AnnoComponents.Square","isCircle","AnnoComponents.Circle","AnnoComponents.Line","_e","AnnoComponents.Polyline","_f","AnnoComponents.Polygon","_g","handleDoubleClick","find","AnnoComponents.FreeText","isStamp","_h","AnnoComponents.Stamp","isUnderline","_i","TextMarkupComponents.Underline","isStrikeout","_j","TextMarkupComponents.Strikeout","isSquiggly","_k","TextMarkupComponents.Squiggly","isHighlight","_l","Multiply","TextMarkupComponents.Highlight","rects","boundingRect","activeTool","unsubscribers","scoped","off","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","push","getActiveTool","onActiveToolChange","unsub","defaultMode","defaults","PdfAnnotationSubtype","HIGHLIGHT","Highlight","UNDERLINE","Underline","STRIKEOUT","Strikeout","SQUIGGLY","Squiggly","bounds","CIRCLE","data","SQUARE","POLYGON","POLYLINE","LINE","INK","FREETEXT","plugin","annotationPlugin","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","img","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","registerPageHandlers","onPreview","toolId","next","set","delete","entries","PreviewRenderer","documentState","useDocumentState","page","pages","actualScale","actualRotation","Rotation","Degree0","Annotations","TextMarkup","AnnotationPaintLayer","toValue","initialDocumentState","providesValue","docId","scope","newState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","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":["useAnnotationPlugin","usePlugin","AnnotationPlugin","id","useAnnotationCapability","useCapability","inheritAttrs","props","__props","HANDLE_COLOR","VERTEX_COLOR","preview","shallowRef","toRaw","trackedAnnotation","object","provides","annotationCapability","gestureBaseRef","ref","annotationProvides","computed","value","forDocument","documentId","currentObject","shouldShowMenu","isSelected","selectionMenu","slots","menuRect","origin","x","rect","scale","y","size","width","height","menuContext","type","annotation","pageIndex","menuPlacement","suggestTop","spaceAbove","spaceBelow","renderSelectionMenu","menuWrapperProps","selected","placement","context","elementSnapshot","verticesSnapshot","obj","_a","vertexConfig","extractVertices","constraintsSnapshot","minWidth","minHeight","boundingBox","pageWidth","pageHeight","dragProps","vertices","resize","useInteractionHandles","controller","element","constraints","maintainAspectRatio","lockAspectRatio","pageRotation","rotation","enabled","onUpdate","event","transformData","state","base","changes","_b","transformAnnotation","patched","_c","metadata","_d","updateAnnotation","resizeUI","handleSize","spacing","outlineOffset","offsetMode","includeSides","zIndex","vertexUI","vertexSize","includeVertices","doubleProps","useDoublePressProps","onDoubleClick","watch","newObject","deep","containerStyle","position","left","top","outline","selectionOutlineColor","pointerEvents","touchAction","cursor","isDraggable","mergedContainerStyle","style","useSlots","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_mergeProps","_unref","_renderSlot","_ctx","$slots","isResizable","_Fragment","key","handle","backgroundColor","ref_for","length","vertex","_createBlock","CounterRotate","default","_withCtx","_resolveDynamicComponent","geometry","outerW","outerH","innerW","Math","max","strokeWidth","innerH","cx","cy","rx","ry","svgWidth","svgHeight","_normalizeStyle","viewBox","fill","color","opacity","onPointerdown","_cache","onClick","args","onTouchstart","stroke","strokeColor","strokeStyle","PdfAnnotationBorderStyle","DASHED","strokeDasharray","strokeDashArray","join","editorRef","isIOS","onMounted","nav","navigator","test","userAgent","platform","maxTouchPoints","isEditing","editing","editor","focus","selection","window","getSelection","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","handleBlur","contents","innerText","editorStyle","anno","computedFontPx","fontSize","needsComp","adjustedFontPx","scaleComp","invScalePercent","fontColor","fontFamily","standardFontCss","textAlign","textAlignmentToCss","flexDirection","justifyContent","verticalAlign","PdfVerticalAlignment","Top","Middle","display","lineHeight","overflow","transform","transformOrigin","onBlur","tabindex","contenteditable","paths","inkList","map","points","d","forEach","i","lx","ly","trim","_renderList","localLine","x1","linePoints","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","lineEndings","PI","getEndingStyle","ending","strokeLinecap","filled","allPoints","currentVertex","localPts","pathData","first","rest","isPreview","p","isPreviewing","toAngle","a","b","startRad","endRad","imageUrl","urlRef","currentTask","annotationId","rectWidth","rectHeight","scaleFactor","_","__","onCleanup","URL","revokeObjectURL","task","renderAnnotation","deepToRaw","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","immediate","onUnmounted","handleImageLoad","src","onLoad","_createVNode","RenderAnnotation","segmentRects","amplitude","period","svgDataUri","amp","per","svg","encodeURIComponent","r","backgroundSize","thickness","selectionProvides","useSelectionCapability","annotations","register","usePointerHandlers","selectionState","editingId","watchEffect","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationByPageIndex","onStateChange","handlePointerDown","_pos","pe","target","currentTarget","deselectAnnotation","handleClick","e","stopPropagation","selectAnnotation","clear","unregister","onPointerDown","getTool","findToolForAnnotation","isFreeText","interaction","getVertexConfig","isLine","isPolyline","isPolygon","isInk","AnnotationContainer","onSelect","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Normal","AnnoComponents.Ink","slotProps","isSquare","AnnoComponents.Square","isCircle","AnnoComponents.Circle","AnnoComponents.Line","_e","AnnoComponents.Polyline","_f","AnnoComponents.Polygon","_g","handleDoubleClick","find","AnnoComponents.FreeText","isStamp","_h","AnnoComponents.Stamp","isUnderline","_i","TextMarkupComponents.Underline","isStrikeout","_j","TextMarkupComponents.Strikeout","isSquiggly","_k","TextMarkupComponents.Squiggly","isHighlight","_l","Multiply","TextMarkupComponents.Highlight","rects","boundingRect","activeTool","unsubscribers","scoped","off","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","push","getActiveTool","onActiveToolChange","unsub","defaultMode","defaults","PdfAnnotationSubtype","HIGHLIGHT","Highlight","UNDERLINE","Underline","STRIKEOUT","Strikeout","SQUIGGLY","Squiggly","bounds","CIRCLE","data","SQUARE","POLYGON","POLYLINE","LINE","INK","FREETEXT","plugin","annotationPlugin","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","img","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","registerPageHandlers","onPreview","toolId","next","set","delete","entries","PreviewRenderer","documentState","useDocumentState","page","pages","actualScale","actualRotation","Rotation","Degree0","Annotations","TextMarkup","AnnotationPaintLayer","toValue","initialDocumentState","providesValue","docId","scope","newState"],"mappings":"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"}
|