@embedpdf/plugin-annotation 2.6.2 → 2.7.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.
Files changed (138) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +203 -8
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/actions.d.ts +12 -1
  6. package/dist/lib/annotation-plugin.d.ts +17 -0
  7. package/dist/lib/tools/default-tools.d.ts +2 -0
  8. package/dist/lib/tools/types.d.ts +2 -0
  9. package/dist/lib/types.d.ts +18 -2
  10. package/dist/preact/index.cjs +1 -1
  11. package/dist/preact/index.cjs.map +1 -1
  12. package/dist/preact/index.js +1008 -1058
  13. package/dist/preact/index.js.map +1 -1
  14. package/dist/react/index.cjs +1 -1
  15. package/dist/react/index.cjs.map +1 -1
  16. package/dist/react/index.js +1008 -1058
  17. package/dist/react/index.js.map +1 -1
  18. package/dist/shared/components/annotation-container.d.ts +11 -5
  19. package/dist/shared/components/annotations/circle.d.ts +4 -2
  20. package/dist/shared/components/annotations/free-text.d.ts +4 -1
  21. package/dist/shared/components/annotations/ink.d.ts +3 -1
  22. package/dist/shared/components/annotations/line.d.ts +3 -1
  23. package/dist/shared/components/annotations/polygon.d.ts +3 -2
  24. package/dist/shared/components/annotations/polyline.d.ts +3 -1
  25. package/dist/shared/components/annotations/square.d.ts +4 -2
  26. package/dist/shared/components/annotations.d.ts +0 -1
  27. package/dist/shared/components/appearance-image.d.ts +12 -0
  28. package/dist/shared/components/built-in-renderers.d.ts +2 -0
  29. package/dist/shared/components/text-markup/highlight.d.ts +3 -1
  30. package/dist/shared/components/text-markup/squiggly.d.ts +3 -1
  31. package/dist/shared/components/text-markup/strikeout.d.ts +3 -1
  32. package/dist/shared/components/text-markup/underline.d.ts +3 -1
  33. package/dist/shared/components/types.d.ts +66 -10
  34. package/dist/shared-preact/components/annotation-container.d.ts +11 -5
  35. package/dist/shared-preact/components/annotations/circle.d.ts +4 -2
  36. package/dist/shared-preact/components/annotations/free-text.d.ts +4 -1
  37. package/dist/shared-preact/components/annotations/ink.d.ts +3 -1
  38. package/dist/shared-preact/components/annotations/line.d.ts +3 -1
  39. package/dist/shared-preact/components/annotations/polygon.d.ts +3 -2
  40. package/dist/shared-preact/components/annotations/polyline.d.ts +3 -1
  41. package/dist/shared-preact/components/annotations/square.d.ts +4 -2
  42. package/dist/shared-preact/components/annotations.d.ts +0 -1
  43. package/dist/shared-preact/components/appearance-image.d.ts +12 -0
  44. package/dist/shared-preact/components/built-in-renderers.d.ts +2 -0
  45. package/dist/shared-preact/components/text-markup/highlight.d.ts +3 -1
  46. package/dist/shared-preact/components/text-markup/squiggly.d.ts +3 -1
  47. package/dist/shared-preact/components/text-markup/strikeout.d.ts +3 -1
  48. package/dist/shared-preact/components/text-markup/underline.d.ts +3 -1
  49. package/dist/shared-preact/components/types.d.ts +66 -10
  50. package/dist/shared-react/components/annotation-container.d.ts +11 -5
  51. package/dist/shared-react/components/annotations/circle.d.ts +4 -2
  52. package/dist/shared-react/components/annotations/free-text.d.ts +4 -1
  53. package/dist/shared-react/components/annotations/ink.d.ts +3 -1
  54. package/dist/shared-react/components/annotations/line.d.ts +3 -1
  55. package/dist/shared-react/components/annotations/polygon.d.ts +3 -2
  56. package/dist/shared-react/components/annotations/polyline.d.ts +3 -1
  57. package/dist/shared-react/components/annotations/square.d.ts +4 -2
  58. package/dist/shared-react/components/annotations.d.ts +0 -1
  59. package/dist/shared-react/components/appearance-image.d.ts +12 -0
  60. package/dist/shared-react/components/built-in-renderers.d.ts +2 -0
  61. package/dist/shared-react/components/text-markup/highlight.d.ts +3 -1
  62. package/dist/shared-react/components/text-markup/squiggly.d.ts +3 -1
  63. package/dist/shared-react/components/text-markup/strikeout.d.ts +3 -1
  64. package/dist/shared-react/components/text-markup/underline.d.ts +3 -1
  65. package/dist/shared-react/components/types.d.ts +66 -10
  66. package/dist/svelte/components/Annotations.svelte.d.ts +0 -7
  67. package/dist/svelte/components/AppearanceImage.svelte.d.ts +8 -0
  68. package/dist/svelte/components/annotations/Circle.svelte.d.ts +1 -10
  69. package/dist/svelte/components/annotations/FreeText.svelte.d.ts +1 -0
  70. package/dist/svelte/components/annotations/Ink.svelte.d.ts +1 -1
  71. package/dist/svelte/components/annotations/Line.svelte.d.ts +1 -0
  72. package/dist/svelte/components/annotations/Polygon.svelte.d.ts +1 -0
  73. package/dist/svelte/components/annotations/Polyline.svelte.d.ts +1 -1
  74. package/dist/svelte/components/annotations/Square.svelte.d.ts +1 -0
  75. package/dist/svelte/components/built-in-renderers.d.ts +2 -0
  76. package/dist/svelte/components/renderers/CircleRenderer.svelte.d.ts +5 -0
  77. package/dist/svelte/components/renderers/FreeTextRenderer.svelte.d.ts +5 -0
  78. package/dist/svelte/components/renderers/HighlightRenderer.svelte.d.ts +5 -0
  79. package/dist/svelte/components/renderers/InkRenderer.svelte.d.ts +5 -0
  80. package/dist/svelte/components/renderers/LineRenderer.svelte.d.ts +5 -0
  81. package/dist/svelte/components/renderers/LinkRenderer.svelte.d.ts +5 -0
  82. package/dist/svelte/components/renderers/PolygonRenderer.svelte.d.ts +5 -0
  83. package/dist/svelte/components/renderers/PolylineRenderer.svelte.d.ts +5 -0
  84. package/dist/svelte/components/renderers/SquareRenderer.svelte.d.ts +5 -0
  85. package/dist/svelte/components/renderers/SquigglyRenderer.svelte.d.ts +5 -0
  86. package/dist/svelte/components/renderers/StampRenderer.svelte.d.ts +5 -0
  87. package/dist/svelte/components/renderers/StrikeoutRenderer.svelte.d.ts +5 -0
  88. package/dist/svelte/components/renderers/UnderlineRenderer.svelte.d.ts +5 -0
  89. package/dist/svelte/components/text-markup/Highlight.svelte.d.ts +2 -0
  90. package/dist/svelte/components/text-markup/Squiggly.svelte.d.ts +2 -0
  91. package/dist/svelte/components/text-markup/Strikeout.svelte.d.ts +2 -0
  92. package/dist/svelte/components/text-markup/Underline.svelte.d.ts +2 -0
  93. package/dist/svelte/components/types.d.ts +8 -2
  94. package/dist/svelte/context/renderer-registry.svelte.d.ts +2 -2
  95. package/dist/svelte/context/types.d.ts +63 -2
  96. package/dist/svelte/index.cjs +1 -1
  97. package/dist/svelte/index.cjs.map +1 -1
  98. package/dist/svelte/index.js +2509 -2864
  99. package/dist/svelte/index.js.map +1 -1
  100. package/dist/vue/components/annotation-container.vue.d.ts +8 -3
  101. package/dist/vue/components/annotation-layer.vue.d.ts +1 -20
  102. package/dist/vue/components/annotations/circle.vue.d.ts +18 -5
  103. package/dist/vue/components/annotations/free-text.vue.d.ts +17 -5
  104. package/dist/vue/components/annotations/ink.vue.d.ts +16 -6
  105. package/dist/vue/components/annotations/line.vue.d.ts +20 -5
  106. package/dist/vue/components/annotations/link.vue.d.ts +24 -6
  107. package/dist/vue/components/annotations/polygon.vue.d.ts +21 -5
  108. package/dist/vue/components/annotations/polyline.vue.d.ts +18 -5
  109. package/dist/vue/components/annotations/square.vue.d.ts +18 -5
  110. package/dist/vue/components/annotations/stamp.vue.d.ts +11 -5
  111. package/dist/vue/components/annotations.vue.d.ts +8 -575
  112. package/dist/vue/components/appearance-image.vue.d.ts +9 -0
  113. package/dist/vue/components/built-in-renderers.d.ts +2 -0
  114. package/dist/vue/components/group-selection-box.vue.d.ts +2 -2
  115. package/dist/vue/components/renderers/circle-renderer.vue.d.ts +6 -0
  116. package/dist/vue/components/renderers/free-text-renderer.vue.d.ts +6 -0
  117. package/dist/vue/components/renderers/highlight-renderer.vue.d.ts +6 -0
  118. package/dist/vue/components/renderers/ink-renderer.vue.d.ts +6 -0
  119. package/dist/vue/components/renderers/line-renderer.vue.d.ts +6 -0
  120. package/dist/vue/components/renderers/link-renderer.vue.d.ts +6 -0
  121. package/dist/vue/components/renderers/polygon-renderer.vue.d.ts +6 -0
  122. package/dist/vue/components/renderers/polyline-renderer.vue.d.ts +6 -0
  123. package/dist/vue/components/renderers/square-renderer.vue.d.ts +6 -0
  124. package/dist/vue/components/renderers/squiggly-renderer.vue.d.ts +6 -0
  125. package/dist/vue/components/renderers/stamp-renderer.vue.d.ts +6 -0
  126. package/dist/vue/components/renderers/strikeout-renderer.vue.d.ts +6 -0
  127. package/dist/vue/components/renderers/underline-renderer.vue.d.ts +6 -0
  128. package/dist/vue/components/text-markup/highlight.vue.d.ts +17 -5
  129. package/dist/vue/components/text-markup/squiggly.vue.d.ts +17 -5
  130. package/dist/vue/components/text-markup/strikeout.vue.d.ts +17 -5
  131. package/dist/vue/components/text-markup/underline.vue.d.ts +17 -5
  132. package/dist/vue/context/renderer-registry.d.ts +2 -2
  133. package/dist/vue/context/types.d.ts +63 -2
  134. package/dist/vue/index.cjs +1 -1
  135. package/dist/vue/index.cjs.map +1 -1
  136. package/dist/vue/index.js +1651 -1278
  137. package/dist/vue/index.js.map +1 -1
  138. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-annotation.ts","../../src/vue/components/annotation-container.vue","../../src/vue/components/group-selection-box.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/link.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/context/renderer-registry.ts","../../src/vue/components/annotation-layer.vue","../../src/vue/components/renderer-registry-provider.vue","../../src/vue/index.ts"],"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=\"contentsStyle\">\n <!-- Outer div: AABB container - stable center for guide lines and rotation handle -->\n <div :style=\"outerAABBStyle\">\n <!-- Rotation guide lines - anchored at stable AABB center -->\n <template v-if=\"rotationActive\">\n <div :style=\"guideHorizontalStyle\" />\n <div :style=\"guideVerticalStyle\" />\n <div :style=\"guideAngleStyle\" />\n </template>\n\n <!-- Rotation handle - orbits in AABB space -->\n <template v-if=\"isSelected && effectiveIsRotatable && rotationHandleData\">\n <div\n @pointerenter=\"isHandleHovered = true\"\n @pointerleave=\"\n isHandleHovered = false;\n cursorScreen = null;\n \"\n @pointermove=\"onHandlePointerMove\"\n :style=\"contentsStyle\"\n >\n <!-- Connector line -->\n <div v-if=\"SHOW_CONNECTOR\" :style=\"connectorLineStyle\" />\n <!-- Rotation handle element -->\n <slot\n v-if=\"slots['rotation-handle']\"\n name=\"rotation-handle\"\n v-bind=\"rotationHandleSlotProps\"\n >\n <div v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </slot>\n <div v-else v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n </template>\n\n <!-- Inner div: rotated content area - holds content, resize handles, vertex handles -->\n <div\n v-bind=\"{ ...(effectiveIsDraggable && isSelected ? dragProps : {}), ...doubleProps }\"\n :style=\"innerRotatedStyle\"\n >\n <!-- Annotation content - renders in unrotated coordinate space -->\n <slot :annotation=\"childObject\"></slot>\n\n <!-- Resize handles - rotate with the shape -->\n <template v-if=\"isSelected && effectiveIsResizable && !rotationActive\">\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 <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 <!-- Vertex handles - rotate with the shape -->\n <template\n v-if=\"\n isSelected &&\n permissions.canModifyAnnotations &&\n !isMultiSelected &&\n !rotationActive &&\n vertices.length > 0\n \"\n >\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 <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 </div>\n\n <!-- Selection Menu: Supports BOTH render function and slot - hide when multi-selected or rotating -->\n <CounterRotate v-if=\"shouldShowMenu && !rotationActive\" :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\n <!-- Cursor-following rotation tooltip - portaled to body to escape CSS transform chain -->\n <Teleport to=\"body\" v-if=\"(rotationActive || isHandleHovered) && cursorScreen\">\n <div :style=\"tooltipStyle\">{{ normalizedRotationDisplay.toFixed(0) }}°</div>\n </Teleport>\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 {\n ref,\n computed,\n watchEffect,\n useSlots,\n toRaw,\n shallowRef,\n Teleport,\n type CSSProperties,\n type VNode,\n} from 'vue';\nimport { PdfAnnotationObject, Rect } from '@embedpdf/models';\nimport { inferRotationCenterFromRects } from '@embedpdf/plugin-annotation';\nimport {\n CounterRotate,\n MenuWrapperProps,\n SelectionMenuPlacement,\n useDoublePressProps,\n useInteractionHandles,\n} from '@embedpdf/utils/vue';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { useDocumentPermissions } from '@embedpdf/core/vue';\nimport { VertexConfig } from '../../shared/types';\nimport { useAnnotationCapability, useAnnotationPlugin } from '../hooks';\nimport {\n AnnotationSelectionContext,\n AnnotationSelectionMenuRenderFn,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n RotationHandleSlotProps,\n SelectionOutline,\n} 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 /** Whether multiple annotations are selected (container becomes passive) */\n isMultiSelected?: boolean;\n isDraggable: boolean;\n isResizable: boolean;\n isRotatable?: boolean;\n lockAspectRatio?: boolean;\n vertexConfig?: VertexConfig<T>;\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** @deprecated Use `selectionOutline.offset` instead */\n outlineOffset?: number;\n onDoubleClick?: (event: PointerEvent | MouseEvent) => void;\n onSelect: (event: TouchEvent | MouseEvent) => void;\n zIndex?: number;\n /** @deprecated Use `selectionOutline.color` instead */\n selectionOutlineColor?: string;\n /** Customize the selection outline (color, style, width, offset) */\n selectionOutline?: SelectionOutline;\n /** Customize resize handle appearance */\n resizeUi?: ResizeHandleUI;\n /** Customize vertex handle appearance */\n vertexUi?: VertexHandleUI;\n /** Customize rotation handle appearance */\n rotationUi?: RotationHandleUI;\n style?: CSSProperties;\n }>(),\n {\n lockAspectRatio: false,\n isMultiSelected: false,\n isRotatable: true,\n outlineOffset: 1,\n zIndex: 1,\n selectionOutlineColor: '#007ACC',\n },\n);\n\n// UI constants\nconst HANDLE_COLOR = computed(() => props.resizeUi?.color ?? '#007ACC');\nconst VERTEX_COLOR = computed(() => props.vertexUi?.color ?? '#007ACC');\nconst HANDLE_SIZE = computed(() => props.resizeUi?.size ?? 12);\nconst VERTEX_SIZE = computed(() => props.vertexUi?.size ?? 12);\nconst ROTATION_SIZE = computed(() => props.rotationUi?.size ?? 32);\nconst ROTATION_COLOR = computed(() => props.rotationUi?.color ?? 'white');\nconst ROTATION_CONNECTOR_COLOR = computed(() => props.rotationUi?.connectorColor ?? '#007ACC');\nconst ROTATION_ICON_COLOR = computed(() => props.rotationUi?.iconColor ?? '#007ACC');\nconst SHOW_CONNECTOR = computed(() => props.rotationUi?.showConnector ?? false);\nconst ROTATION_MARGIN = computed(() => props.rotationUi?.margin);\nconst ROTATION_BORDER_COLOR = computed(() => props.rotationUi?.border?.color ?? '#007ACC');\nconst ROTATION_BORDER_WIDTH = computed(() => props.rotationUi?.border?.width ?? 1);\nconst ROTATION_BORDER_STYLE = computed(() => props.rotationUi?.border?.style ?? 'solid');\n\n// Outline resolution (new object > deprecated props > defaults)\nconst outlineColor = computed(\n () => props.selectionOutline?.color ?? props.selectionOutlineColor ?? '#007ACC',\n);\nconst outlineStyle = computed(() => props.selectionOutline?.style ?? 'solid');\nconst outlineWidth = computed(() => props.selectionOutline?.width ?? 1);\nconst outlineOff = computed(() => props.selectionOutline?.offset ?? props.outlineOffset ?? 1);\n\nconst preview = shallowRef<Partial<T>>(toRaw(props.trackedAnnotation.object));\nconst liveRotation = ref<number | null>(null);\nconst cursorScreen = ref<{ x: number; y: number } | null>(null);\nconst isHandleHovered = ref(false);\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst { plugin: annotationPlugin } = useAnnotationPlugin();\nconst permissions = useDocumentPermissions(props.documentId);\nconst gestureBaseRef = ref<T | null>(null);\nconst gestureBaseRectRef = shallowRef<Rect | null>(null);\n\n// When multi-selected, disable individual drag/resize/rotate - GroupSelectionBox handles it\nconst effectiveIsDraggable = computed(\n () => permissions.value.canModifyAnnotations && props.isDraggable && !props.isMultiSelected,\n);\nconst effectiveIsResizable = computed(\n () => permissions.value.canModifyAnnotations && props.isResizable && !props.isMultiSelected,\n);\nconst effectiveIsRotatable = computed(\n () => permissions.value.canModifyAnnotations && props.isRotatable && !props.isMultiSelected,\n);\n\n// Wrap onDoubleClick to respect permissions - check at call time\nconst guardedOnDoubleClick = props.onDoubleClick\n ? (e: PointerEvent | MouseEvent) => {\n if (permissions.value.canModifyAnnotations) {\n props.onDoubleClick?.(e);\n }\n }\n : undefined;\n\n// Get scoped API for this document\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// Get annotation's current rotation\n// During drag, use liveRotation if available; otherwise use the annotation's rotation\nconst annotationRotation = computed(\n () => liveRotation.value ?? (currentObject.value as any).rotation ?? 0,\n);\nconst rotationDisplay = computed(\n () => liveRotation.value ?? (currentObject.value as any).rotation ?? 0,\n);\nconst normalizedRotationDisplay = computed(() => {\n const val = rotationDisplay.value;\n return Number.isFinite(val) ? Math.round(val * 10) / 10 : 0;\n});\nconst rotationActive = computed(() => liveRotation.value !== null);\n\n// Geometry model:\n// - `rect` is the visible AABB container.\n// - `unrotatedRect` is the local editing frame for resize/vertex operations.\nconst explicitUnrotatedRect = computed(\n () => (currentObject.value as any).unrotatedRect as Rect | undefined,\n);\nconst effectiveUnrotatedRect = computed(\n () => explicitUnrotatedRect.value ?? currentObject.value.rect,\n);\nconst rotationPivot = computed(() => {\n if (explicitUnrotatedRect.value && annotationRotation.value !== 0) {\n return inferRotationCenterFromRects(\n effectiveUnrotatedRect.value,\n currentObject.value.rect,\n annotationRotation.value,\n );\n }\n return undefined;\n});\nconst controllerElement = computed(() => effectiveUnrotatedRect.value);\n\n// For children, override rect to use unrotatedRect so content renders in unrotated space\nconst childObject = computed<T>(() => {\n if (explicitUnrotatedRect.value) {\n return { ...currentObject.value, rect: explicitUnrotatedRect.value };\n }\n return currentObject.value;\n});\n\n// Determine if we should show the outline\n// When multi-selected, don't show individual outlines - GroupSelectionBox shows the group outline\nconst showOutline = computed(() => props.isSelected && !props.isMultiSelected);\n\n// --- Selection Menu Logic ---\n\n// Check if we should show any menu at all - hide when multi-selected\nconst shouldShowMenu = computed(() => {\n return (\n props.isSelected && !props.isMultiSelected && (props.selectionMenu || slots['selection-menu'])\n );\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 - calculate suggestTop based on rotation handle position\nconst menuPlacement = computed<SelectionMenuPlacement>(() => {\n const effectiveAngle = (((annotationRotation.value + props.rotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide =\n effectiveIsRotatable.value && effectiveAngle > 90 && effectiveAngle < 270;\n return {\n suggestTop: handleNearMenuSide,\n };\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 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 {\n dragProps,\n vertices,\n resize,\n rotation: rotationHandleData,\n} = useInteractionHandles({\n controller: {\n element: controllerElement,\n vertices: verticesSnapshot,\n constraints: constraintsSnapshot,\n maintainAspectRatio: computed(() => props.lockAspectRatio),\n pageRotation: computed(() => props.rotation),\n annotationRotation: computed(() => annotationRotation.value),\n rotationCenter: computed(() => rotationPivot.value),\n rotationElement: computed(() => currentObject.value.rect),\n scale: computed(() => props.scale),\n // Disable interaction handles when multi-selected\n enabled: computed(() => props.isSelected && !props.isMultiSelected),\n onUpdate: (event) => {\n if (!event.transformData?.type || props.isMultiSelected) return;\n\n const plugin = annotationPlugin.value;\n if (!plugin) return;\n\n const { type, changes, metadata } = event.transformData;\n const id = props.trackedAnnotation.object.id;\n const pageSize = { width: props.pageWidth, height: props.pageHeight };\n\n // Gesture start - initialize plugin drag/resize\n if (event.state === 'start') {\n // Use unrotatedRect as gesture base so deltas are computed in unrotated space\n gestureBaseRectRef.value =\n (props.trackedAnnotation.object as any).unrotatedRect ??\n props.trackedAnnotation.object.rect;\n gestureBaseRef.value = currentObject.value; // For vertex edit\n\n if (type === 'move') {\n plugin.startDrag(props.documentId, { annotationIds: [id], pageSize });\n } else if (type === 'resize') {\n plugin.startResize(props.documentId, {\n annotationIds: [id],\n pageSize,\n resizeHandle: metadata?.handle ?? 'se',\n });\n }\n }\n\n // Gesture update - call plugin, preview comes from subscription\n if (changes.rect && gestureBaseRectRef.value) {\n if (type === 'move') {\n const delta = {\n x: changes.rect.origin.x - gestureBaseRectRef.value.origin.x,\n y: changes.rect.origin.y - gestureBaseRectRef.value.origin.y,\n };\n plugin.updateDrag(props.documentId, delta);\n } else if (type === 'resize') {\n plugin.updateResize(props.documentId, changes.rect);\n }\n }\n\n // Vertex edit - handle directly (no attached link handling needed)\n if (type === 'vertex-edit' && changes.vertices && props.vertexConfig) {\n const base = gestureBaseRef.value ?? currentObject.value;\n const vertexChanges = props.vertexConfig.transformAnnotation(toRaw(base), changes.vertices);\n const patched = annotationCapability.value?.transformAnnotation<T>(base, {\n type,\n changes: vertexChanges as Partial<T>,\n metadata,\n });\n if (patched) {\n preview.value = { ...toRaw(preview.value), ...patched };\n if (event.state === 'end') {\n annotationProvides.value?.updateAnnotation(props.pageIndex, id, patched);\n }\n }\n }\n\n // Rotation - handle via plugin rotation API\n if (type === 'rotate') {\n const cursorAngle = metadata?.rotationAngle ?? annotationRotation.value;\n const cursorPos = metadata?.cursorPosition;\n if (cursorPos) cursorScreen.value = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation.value = cursorAngle;\n plugin.startRotation(props.documentId, {\n annotationIds: [id],\n cursorAngle,\n rotationCenter: metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation.value = cursorAngle;\n plugin.updateRotation(props.documentId, cursorAngle, metadata?.rotationDelta);\n } else if (event.state === 'end') {\n liveRotation.value = null;\n cursorScreen.value = null;\n plugin.commitRotation(props.documentId);\n }\n return;\n }\n\n // Gesture end - commit\n if (event.state === 'end') {\n gestureBaseRectRef.value = null;\n gestureBaseRef.value = null;\n if (type === 'move') plugin.commitDrag(props.documentId);\n else if (type === 'resize') plugin.commitResize(props.documentId);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE.value,\n spacing: outlineOff.value,\n offsetMode: 'outside',\n includeSides: props.lockAspectRatio ? false : true,\n zIndex: props.zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE.value,\n zIndex: props.zIndex + 2,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE.value,\n margin: ROTATION_MARGIN.value,\n zIndex: props.zIndex + 3,\n showConnector: SHOW_CONNECTOR.value,\n },\n includeVertices: !!props.vertexConfig,\n includeRotation: effectiveIsRotatable,\n currentRotation: annotationRotation,\n});\n\nconst doubleProps = useDoublePressProps(guardedOnDoubleClick);\n\n// Handle pointer move on the rotation handle wrapper (for cursor tooltip when not rotating)\nconst onHandlePointerMove = (e: PointerEvent) => {\n if (!rotationActive.value) {\n cursorScreen.value = { x: e.clientX, y: e.clientY };\n }\n};\n\n// Sync preview with tracked annotation when it changes\nwatchEffect(() => {\n if (props.trackedAnnotation.object) {\n preview.value = props.trackedAnnotation.object;\n }\n});\n\n// Subscribe to unified drag/resize/rotate changes - plugin sends pre-computed patches!\n// ALL preview updates come through here (primary, attached links, multi-select)\nwatchEffect((onCleanup) => {\n const plugin = annotationPlugin.value;\n if (!plugin) return;\n\n const id = props.trackedAnnotation.object.id;\n\n const handleEvent = (event: {\n documentId: string;\n type: string;\n previewPatches?: Record<string, any>;\n }) => {\n if (event.documentId !== props.documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation.value = null;\n }\n const patch = event.previewPatches?.[id];\n if (event.type === 'update' && patch) {\n preview.value = { ...toRaw(preview.value), ...patch } as T;\n } else if (event.type === 'cancel') {\n preview.value = props.trackedAnnotation.object;\n }\n };\n\n const unsubs = [\n plugin.onDragChange(handleEvent),\n plugin.onResizeChange(handleEvent),\n plugin.onRotateChange(handleEvent),\n ];\n\n onCleanup(() => unsubs.forEach((u) => u()));\n});\n\n// ─── Layout computations ───────────────────────────────────────────────\nconst aabbWidth = computed(() => currentObject.value.rect.size.width * props.scale);\nconst aabbHeight = computed(() => currentObject.value.rect.size.height * props.scale);\nconst innerWidth = computed(() => effectiveUnrotatedRect.value.size.width * props.scale);\nconst innerHeight = computed(() => effectiveUnrotatedRect.value.size.height * props.scale);\nconst usesCustomPivot = computed(\n () => Boolean(explicitUnrotatedRect.value) && annotationRotation.value !== 0,\n);\nconst innerLeft = computed(() =>\n usesCustomPivot.value\n ? (effectiveUnrotatedRect.value.origin.x - currentObject.value.rect.origin.x) * props.scale\n : (aabbWidth.value - innerWidth.value) / 2,\n);\nconst innerTop = computed(() =>\n usesCustomPivot.value\n ? (effectiveUnrotatedRect.value.origin.y - currentObject.value.rect.origin.y) * props.scale\n : (aabbHeight.value - innerHeight.value) / 2,\n);\nconst innerTransformOrigin = computed(() => {\n if (usesCustomPivot.value && rotationPivot.value) {\n return `${(rotationPivot.value.x - effectiveUnrotatedRect.value.origin.x) * props.scale}px ${(rotationPivot.value.y - effectiveUnrotatedRect.value.origin.y) * props.scale}px`;\n }\n return 'center center';\n});\nconst centerX = computed(() =>\n rotationPivot.value\n ? (rotationPivot.value.x - currentObject.value.rect.origin.x) * props.scale\n : aabbWidth.value / 2,\n);\nconst centerY = computed(() =>\n rotationPivot.value\n ? (rotationPivot.value.y - currentObject.value.rect.origin.y) * props.scale\n : aabbHeight.value / 2,\n);\nconst guideLength = computed(() => Math.max(300, Math.max(aabbWidth.value, aabbHeight.value) + 80));\nconst rotationIconSize = computed(() => Math.round(ROTATION_SIZE.value * 0.6));\n\n// ─── Extracted style computations ──────────────────────────────────────\nconst contentsStyle: CSSProperties = { display: 'contents' };\n\nconst outerAABBStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${currentObject.value.rect.origin.x * props.scale}px`,\n top: `${currentObject.value.rect.origin.y * props.scale}px`,\n width: `${aabbWidth.value}px`,\n height: `${aabbHeight.value}px`,\n pointerEvents: 'none',\n zIndex: props.zIndex,\n ...(props.style ?? {}),\n}));\n\nconst innerRotatedStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${innerLeft.value}px`,\n top: `${innerTop.value}px`,\n width: `${innerWidth.value}px`,\n height: `${innerHeight.value}px`,\n transform: annotationRotation.value !== 0 ? `rotate(${annotationRotation.value}deg)` : undefined,\n transformOrigin: innerTransformOrigin.value,\n outline: showOutline.value\n ? `${outlineWidth.value}px ${outlineStyle.value} ${outlineColor.value}`\n : 'none',\n outlineOffset: showOutline.value ? `${outlineOff.value}px` : '0px',\n pointerEvents: props.isSelected && !props.isMultiSelected ? 'auto' : 'none',\n touchAction: 'none',\n cursor: props.isSelected && effectiveIsDraggable.value ? 'move' : 'default',\n}));\n\nconst guideHorizontalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${centerX.value - guideLength.value / 2}px`,\n top: `${centerY.value}px`,\n width: `${guideLength.value}px`,\n height: '1px',\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideVerticalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${centerX.value}px`,\n top: `${centerY.value - guideLength.value / 2}px`,\n width: '1px',\n height: `${guideLength.value}px`,\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideAngleStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${centerX.value - guideLength.value / 2}px`,\n top: `${centerY.value}px`,\n width: `${guideLength.value}px`,\n height: '1px',\n transformOrigin: 'center center',\n transform: `rotate(${annotationRotation.value}deg)`,\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: 0.8,\n pointerEvents: 'none',\n}));\n\nconst connectorLineStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.connector.style ?? {}),\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: rotationActive.value ? 0 : 1,\n}));\n\nconst rotationHandleStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.handle.style ?? {}),\n backgroundColor: ROTATION_COLOR.value,\n border: `${ROTATION_BORDER_WIDTH.value}px ${ROTATION_BORDER_STYLE.value} ${ROTATION_BORDER_COLOR.value}`,\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'auto',\n opacity: rotationActive.value ? 0 : 1,\n}));\n\n// Event handlers from the rotation handle (without style - style is applied separately)\nconst rotationHandleBindings = computed(() => {\n if (!rotationHandleData.value) return {};\n const { style: _s, ...rest } = rotationHandleData.value.handle;\n return rest;\n});\n\nconst rotationHandleSlotProps = computed<RotationHandleSlotProps | Record<string, never>>(() => {\n if (!rotationHandleData.value) return {} as Record<string, never>;\n return {\n ...rotationHandleData.value.handle,\n backgroundColor: ROTATION_COLOR.value,\n iconColor: ROTATION_ICON_COLOR.value,\n connectorStyle: connectorLineStyle.value,\n showConnector: SHOW_CONNECTOR.value,\n opacity: rotationActive.value ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR.value,\n width: ROTATION_BORDER_WIDTH.value,\n style: ROTATION_BORDER_STYLE.value,\n },\n };\n});\n\nconst tooltipStyle = computed<CSSProperties>(() => ({\n position: 'fixed',\n left: cursorScreen.value ? `${cursorScreen.value.x + 16}px` : '0',\n top: cursorScreen.value ? `${cursorScreen.value.y - 16}px` : '0',\n background: 'rgba(0,0,0,0.8)',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n fontFamily: 'monospace',\n pointerEvents: 'none',\n zIndex: 10000,\n whiteSpace: 'nowrap',\n}));\n\n// Add useSlots to access slot information\nconst slots = useSlots();\n</script>\n","<template>\n <div v-if=\"selectedAnnotations.length >= 2\" data-group-selection-box data-no-interaction>\n <!-- Outer div: AABB container - stable center for guide lines and rotation handle -->\n <div :style=\"outerStyle\">\n <!-- Rotation guide lines - anchored at stable center -->\n <template v-if=\"rotationActive\">\n <div :style=\"guideHorizontalStyle\" />\n <div :style=\"guideVerticalStyle\" />\n <div :style=\"guideAngleStyle\" />\n </template>\n\n <!-- Rotation handle - orbits in AABB space -->\n <template v-if=\"effectiveIsRotatable && rotationHandleData\">\n <div\n @pointerenter=\"isHandleHovered = true\"\n @pointerleave=\"\n isHandleHovered = false;\n cursorScreen = null;\n \"\n @pointermove=\"onHandlePointerMove\"\n :style=\"contentsStyle\"\n >\n <!-- Connector line -->\n <div v-if=\"SHOW_CONNECTOR\" :style=\"connectorLineStyle\" />\n <!-- Rotation handle element -->\n <slot\n v-if=\"slots['rotation-handle']\"\n name=\"rotation-handle\"\n v-bind=\"rotationHandleSlotProps\"\n >\n <div v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </slot>\n <div v-else v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n </template>\n\n <!-- Inner div: group content area with outline and resize handles -->\n <div\n v-bind=\"\n effectiveIsDraggable\n ? dragProps\n : { onPointerdown: (e: PointerEvent) => e.stopPropagation() }\n \"\n :style=\"boxStyle\"\n >\n <!-- Resize handles -->\n <template v-if=\"effectiveIsResizable && !rotationActive\">\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 <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 </div>\n </div>\n\n <!-- Group selection menu -->\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=\"groupSelectionMenu\" :is=\"renderGroupMenu(rect, menuWrapperProps)\" />\n\n <!-- Priority 2: Slot (manual customization) -->\n <slot\n v-else\n name=\"group-selection-menu\"\n :context=\"menuContext\"\n :selected=\"true\"\n :rect=\"rect\"\n :placement=\"menuPlacement\"\n :menuWrapperProps=\"menuWrapperProps\"\n />\n </template>\n </CounterRotate>\n\n <!-- Cursor-following rotation tooltip - portaled to body to escape CSS transform chain -->\n <Teleport to=\"body\" v-if=\"(rotationActive || isHandleHovered) && cursorScreen\">\n <div :style=\"tooltipStyle\">{{ normalizedRotationDisplay.toFixed(0) }}°</div>\n </Teleport>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n computed,\n useSlots,\n type CSSProperties,\n type VNode,\n shallowRef,\n watch,\n Teleport,\n} from 'vue';\nimport { Rect, boundingRectOrEmpty } from '@embedpdf/models';\nimport {\n CounterRotate,\n MenuWrapperProps,\n SelectionMenuPlacement,\n useInteractionHandles,\n} from '@embedpdf/utils/vue';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { useDocumentPermissions } from '@embedpdf/core/vue';\nimport { useAnnotationPlugin } from '../hooks';\nimport {\n GroupSelectionContext,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n RotationHandleUI,\n RotationHandleSlotProps,\n SelectionOutline,\n} from '../types';\n\nconst props = withDefaults(\n defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** All selected annotations on this page */\n selectedAnnotations: TrackedAnnotation[];\n /** Whether the group is draggable (all annotations must be group-draggable) */\n isDraggable: boolean;\n /** Whether the group is resizable (all annotations must be group-resizable) */\n isResizable: boolean;\n /** Whether the group can be rotated */\n isRotatable?: boolean;\n /** Whether to lock aspect ratio during group resize */\n lockAspectRatio?: boolean;\n /** Resize handle UI customization */\n resizeUi?: ResizeHandleUI;\n /** Rotation handle UI customization */\n rotationUi?: RotationHandleUI;\n /** @deprecated Use `selectionOutline.color` instead */\n selectionOutlineColor?: string;\n /** @deprecated Use `selectionOutline.offset` instead */\n outlineOffset?: number;\n /** Customize the selection outline (color, style, width, offset) */\n selectionOutline?: SelectionOutline;\n /** Z-index for the group box */\n zIndex?: number;\n /** Group selection menu render function */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n }>(),\n {\n selectionOutlineColor: '#007ACC',\n outlineOffset: 2,\n zIndex: 100,\n isRotatable: true,\n lockAspectRatio: false,\n },\n);\n\nconst slots = useSlots();\nconst { plugin: annotationPlugin } = useAnnotationPlugin();\nconst permissions = useDocumentPermissions(() => props.documentId);\nconst gestureBase = shallowRef<Rect | null>(null);\nconst isDraggingRef = ref(false);\nconst isResizingRef = ref(false);\nconst liveRotation = ref<number | null>(null);\nconst cursorScreen = ref<{ x: number; y: number } | null>(null);\nconst isHandleHovered = ref(false);\n\n// Check permissions before allowing drag/resize/rotate\nconst effectiveIsDraggable = computed(\n () => permissions.value.canModifyAnnotations && props.isDraggable,\n);\nconst effectiveIsResizable = computed(\n () => permissions.value.canModifyAnnotations && props.isResizable,\n);\nconst effectiveIsRotatable = computed(\n () => permissions.value.canModifyAnnotations && props.isRotatable,\n);\n\n// UI constants\nconst HANDLE_COLOR = computed(() => props.resizeUi?.color ?? '#007ACC');\nconst HANDLE_SIZE = computed(() => props.resizeUi?.size ?? 12);\nconst ROTATION_SIZE = computed(() => props.rotationUi?.size ?? 32);\nconst ROTATION_COLOR = computed(() => props.rotationUi?.color ?? 'white');\nconst ROTATION_CONNECTOR_COLOR = computed(() => props.rotationUi?.connectorColor ?? '#007ACC');\nconst ROTATION_ICON_COLOR = computed(() => props.rotationUi?.iconColor ?? '#007ACC');\nconst SHOW_CONNECTOR = computed(() => props.rotationUi?.showConnector ?? false);\nconst ROTATION_MARGIN = computed(() => props.rotationUi?.margin);\nconst ROTATION_BORDER_COLOR = computed(() => props.rotationUi?.border?.color ?? '#007ACC');\nconst ROTATION_BORDER_WIDTH = computed(() => props.rotationUi?.border?.width ?? 1);\nconst ROTATION_BORDER_STYLE = computed(() => props.rotationUi?.border?.style ?? 'solid');\n\n// Outline resolution (new object > deprecated props > group defaults)\nconst outlineColor = computed(\n () => props.selectionOutline?.color ?? props.selectionOutlineColor ?? '#007ACC',\n);\nconst outlineStyleVal = computed(() => props.selectionOutline?.style ?? 'dashed');\nconst outlineWidth = computed(() => props.selectionOutline?.width ?? 2);\nconst outlineOff = computed(() => props.selectionOutline?.offset ?? props.outlineOffset ?? 2);\n\n// Rotation display\nconst groupRotationDisplay = computed(() => liveRotation.value ?? 0);\nconst rotationActive = computed(() => liveRotation.value !== null);\nconst normalizedRotationDisplay = computed(() => {\n const val = groupRotationDisplay.value;\n return Number.isFinite(val) ? Math.round(val * 10) / 10 : 0;\n});\nconst rotationIconSize = computed(() => Math.round(ROTATION_SIZE.value * 0.6));\n\n// Compute the group bounding box from all selected annotations\nconst groupBox = computed(() => {\n const rects = props.selectedAnnotations.map((ta) => ta.object.rect);\n return boundingRectOrEmpty(rects);\n});\n\n// Preview state for the group box during drag/resize\nconst previewGroupBox = shallowRef<Rect>(groupBox.value);\n\n// Watch for groupBox changes and sync previewGroupBox when not dragging/resizing\nwatch(\n () => groupBox.value,\n (newGroupBox) => {\n if (!isDraggingRef.value && !isResizingRef.value) {\n previewGroupBox.value = newGroupBox;\n }\n },\n { immediate: true },\n);\n\n// Subscribe to rotation end/cancel events\nwatch(\n () => annotationPlugin.value,\n (plugin, _old, onCleanup) => {\n if (!plugin) return;\n const unsub = plugin.onRotateChange((event: { documentId: string; type: string }) => {\n if (event.documentId !== props.documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation.value = null;\n }\n });\n onCleanup(unsub);\n },\n { immediate: true },\n);\n\n// Layout computations\nconst groupBoxWidth = computed(() => previewGroupBox.value.size.width * props.scale);\nconst groupBoxHeight = computed(() => previewGroupBox.value.size.height * props.scale);\nconst groupCenterX = computed(() => groupBoxWidth.value / 2);\nconst groupCenterY = computed(() => groupBoxHeight.value / 2);\nconst groupGuideLength = computed(() =>\n Math.max(300, Math.max(groupBoxWidth.value, groupBoxHeight.value) + 80),\n);\n\n// ─── Extracted style computations ──────────────────────────────────────\nconst contentsStyle: CSSProperties = { display: 'contents' };\n\nconst outerStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${previewGroupBox.value.origin.x * props.scale}px`,\n top: `${previewGroupBox.value.origin.y * props.scale}px`,\n width: `${groupBoxWidth.value}px`,\n height: `${groupBoxHeight.value}px`,\n pointerEvents: 'none',\n zIndex: props.zIndex,\n}));\n\nconst boxStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: 0,\n top: 0,\n width: `${groupBoxWidth.value}px`,\n height: `${groupBoxHeight.value}px`,\n outline: rotationActive.value\n ? 'none'\n : `${outlineWidth.value}px ${outlineStyleVal.value} ${outlineColor.value}`,\n outlineOffset: `${outlineOff.value - 1}px`,\n cursor: effectiveIsDraggable.value ? 'move' : 'default',\n touchAction: 'none',\n pointerEvents: 'auto',\n}));\n\nconst guideHorizontalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${groupCenterX.value - groupGuideLength.value / 2}px`,\n top: `${groupCenterY.value}px`,\n width: `${groupGuideLength.value}px`,\n height: '1px',\n backgroundColor: HANDLE_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideVerticalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${groupCenterX.value}px`,\n top: `${groupCenterY.value - groupGuideLength.value / 2}px`,\n width: '1px',\n height: `${groupGuideLength.value}px`,\n backgroundColor: HANDLE_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideAngleStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${groupCenterX.value - groupGuideLength.value / 2}px`,\n top: `${groupCenterY.value}px`,\n width: `${groupGuideLength.value}px`,\n height: '1px',\n transformOrigin: 'center center',\n transform: `rotate(${groupRotationDisplay.value}deg)`,\n backgroundColor: HANDLE_COLOR.value,\n opacity: 0.8,\n pointerEvents: 'none',\n}));\n\nconst connectorLineStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.connector.style ?? {}),\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: rotationActive.value ? 0 : 1,\n}));\n\nconst rotationHandleStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.handle.style ?? {}),\n backgroundColor: ROTATION_COLOR.value,\n border: `${ROTATION_BORDER_WIDTH.value}px ${ROTATION_BORDER_STYLE.value} ${ROTATION_BORDER_COLOR.value}`,\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'auto',\n opacity: rotationActive.value ? 0 : 1,\n}));\n\nconst rotationHandleBindings = computed(() => {\n if (!rotationHandleData.value) return {};\n const { style: _s, ...rest } = rotationHandleData.value.handle;\n return rest;\n});\n\nconst rotationHandleSlotProps = computed<RotationHandleSlotProps | Record<string, never>>(() => {\n if (!rotationHandleData.value) return {} as Record<string, never>;\n return {\n ...rotationHandleData.value.handle,\n backgroundColor: ROTATION_COLOR.value,\n iconColor: ROTATION_ICON_COLOR.value,\n connectorStyle: connectorLineStyle.value,\n showConnector: SHOW_CONNECTOR.value,\n opacity: rotationActive.value ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR.value,\n width: ROTATION_BORDER_WIDTH.value,\n style: ROTATION_BORDER_STYLE.value,\n },\n };\n});\n\nconst tooltipStyle = computed<CSSProperties>(() => ({\n position: 'fixed',\n left: cursorScreen.value ? `${cursorScreen.value.x + 16}px` : '0',\n top: cursorScreen.value ? `${cursorScreen.value.y - 16}px` : '0',\n background: 'rgba(0,0,0,0.8)',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n fontFamily: 'monospace',\n pointerEvents: 'none',\n zIndex: 10000,\n whiteSpace: 'nowrap',\n}));\n\n// Menu rect for counter-rotate component\nconst menuRect = computed<Rect>(() => ({\n origin: {\n x: previewGroupBox.value.origin.x * props.scale,\n y: previewGroupBox.value.origin.y * props.scale,\n },\n size: {\n width: previewGroupBox.value.size.width * props.scale,\n height: previewGroupBox.value.size.height * props.scale,\n },\n}));\n\n// Menu context\nconst menuContext = computed<GroupSelectionContext>(() => ({\n type: 'group',\n annotations: props.selectedAnnotations,\n pageIndex: props.pageIndex,\n}));\n\n// Placement hints - calculate suggestTop based on rotation handle position\nconst menuPlacement = computed<SelectionMenuPlacement>(() => {\n const effectiveAngle = (((groupRotationDisplay.value + props.rotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide =\n effectiveIsRotatable.value && effectiveAngle > 90 && effectiveAngle < 270;\n return {\n suggestTop: handleNearMenuSide,\n };\n});\n\n// Check if we should show menu\nconst shouldShowMenu = computed(() => {\n return props.groupSelectionMenu || slots['group-selection-menu'];\n});\n\n// Render menu via function\nconst renderGroupMenu = (rect: Rect, menuWrapperProps: MenuWrapperProps): VNode | null => {\n if (!props.groupSelectionMenu) return null;\n\n return props.groupSelectionMenu({\n rect,\n menuWrapperProps,\n selected: true,\n placement: menuPlacement.value,\n context: menuContext.value,\n });\n};\n\n// Handle pointer move on the rotation handle wrapper (for cursor tooltip when not rotating)\nconst onHandlePointerMove = (e: PointerEvent) => {\n if (!rotationActive.value) {\n cursorScreen.value = { x: e.clientX, y: e.clientY };\n }\n};\n\n// Element snapshot for interaction handles\nconst elementSnapshot = computed(() => previewGroupBox.value);\n\n// Constraints\nconst constraintsSnapshot = computed(() => ({\n minWidth: 20,\n minHeight: 20,\n boundingBox: {\n width: props.pageWidth,\n height: props.pageHeight,\n },\n}));\n\n// Use interaction handles for drag, resize, and rotation\nconst {\n dragProps,\n resize,\n rotation: rotationHandleData,\n} = useInteractionHandles({\n controller: {\n element: elementSnapshot,\n vertices: computed(() => []),\n constraints: constraintsSnapshot,\n maintainAspectRatio: computed(() => props.lockAspectRatio),\n pageRotation: computed(() => props.rotation),\n scale: computed(() => props.scale),\n enabled: computed(() => true),\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n if (!annotationPlugin.value) return;\n\n const plugin = annotationPlugin.value;\n const transformType = event.transformData.type;\n const isMove = transformType === 'move';\n const isResize = transformType === 'resize';\n\n // Skip drag operations if group is not draggable\n if (isMove && !effectiveIsDraggable.value) return;\n\n if (event.state === 'start') {\n gestureBase.value = groupBox.value;\n\n if (isMove) {\n isDraggingRef.value = true;\n plugin.startDrag(props.documentId, {\n annotationIds: props.selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: props.pageWidth, height: props.pageHeight },\n });\n } else if (isResize) {\n isResizingRef.value = true;\n plugin.startResize(props.documentId, {\n annotationIds: props.selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: props.pageWidth, height: props.pageHeight },\n resizeHandle: event.transformData.metadata?.handle ?? 'se',\n });\n }\n }\n\n // Handle rotation\n if (transformType === 'rotate') {\n if (!props.isRotatable) return;\n const ids = props.selectedAnnotations.map((ta) => ta.object.id);\n const cursorAngle = event.transformData.metadata?.rotationAngle ?? 0;\n const cursorPos = event.transformData.metadata?.cursorPosition;\n if (cursorPos) cursorScreen.value = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation.value = cursorAngle;\n plugin.startRotation(props.documentId, {\n annotationIds: ids,\n cursorAngle,\n rotationCenter: event.transformData.metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation.value = cursorAngle;\n plugin.updateRotation(\n props.documentId,\n cursorAngle,\n event.transformData.metadata?.rotationDelta,\n );\n } else if (event.state === 'end') {\n liveRotation.value = null;\n cursorScreen.value = null;\n plugin.commitRotation(props.documentId);\n }\n return;\n }\n\n const base = gestureBase.value ?? groupBox.value;\n\n if (isMove && event.transformData.changes.rect) {\n const newRect = event.transformData.changes.rect;\n const rawDelta = {\n x: newRect.origin.x - base.origin.x,\n y: newRect.origin.y - base.origin.y,\n };\n\n const clampedDelta = plugin.updateDrag(props.documentId, rawDelta);\n\n previewGroupBox.value = {\n ...base,\n origin: {\n x: base.origin.x + clampedDelta.x,\n y: base.origin.y + clampedDelta.y,\n },\n };\n } else if (isResize && event.transformData.changes.rect) {\n const newGroupBox = event.transformData.changes.rect;\n plugin.updateResize(props.documentId, newGroupBox);\n previewGroupBox.value = newGroupBox;\n }\n\n if (event.state === 'end') {\n gestureBase.value = null;\n\n if (isMove && isDraggingRef.value) {\n isDraggingRef.value = false;\n plugin.commitDrag(props.documentId);\n } else if (isResize && isResizingRef.value) {\n isResizingRef.value = false;\n plugin.commitResize(props.documentId);\n }\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE.value,\n spacing: outlineOff.value,\n offsetMode: 'outside',\n includeSides: !props.lockAspectRatio,\n zIndex: props.zIndex + 1,\n },\n vertexUI: {\n vertexSize: 0,\n zIndex: props.zIndex,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE.value,\n margin: ROTATION_MARGIN.value,\n zIndex: props.zIndex + 2,\n showConnector: SHOW_CONNECTOR.value,\n },\n includeVertices: false,\n includeRotation: effectiveIsRotatable,\n currentRotation: computed(() => liveRotation.value ?? 0),\n});\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 standardFontCssProperties,\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 ...standardFontCssProperties(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.color ?? 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: resolvedColor,\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 /** Stroke color */\n strokeColor?: 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 opacity: 1,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#000000');\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: `${svgWidth}px`,\n height: `${svgHeight}px`,\n pointerEvents: 'none',\n zIndex: 2,\n }\"\n :width=\"svgWidth\"\n :height=\"svgHeight\"\n :viewBox=\"`0 0 ${width} ${height}`\"\n >\n <!-- Invisible hit area for the entire link region -->\n <!-- IRT links are not directly clickable - interaction goes through parent -->\n <rect\n :x=\"0\"\n :y=\"0\"\n :width=\"width\"\n :height=\"height\"\n fill=\"transparent\"\n @pointerdown=\"hasIRT ? undefined : onClick\"\n @touchstart=\"hasIRT ? undefined : onClick\"\n :style=\"{\n cursor: hitAreaCursor,\n pointerEvents: hitAreaPointerEvents,\n }\"\n />\n\n <!-- Underline style: line at bottom of rect -->\n <line\n v-if=\"isUnderline\"\n :x1=\"1\"\n :y1=\"height - 1\"\n :x2=\"width - 1\"\n :y2=\"height - 1\"\n :stroke=\"strokeColor\"\n :stroke-width=\"strokeWidth\"\n :stroke-dasharray=\"dashArray\"\n style=\"pointer-events: none\"\n />\n\n <!-- Solid/Dashed style: rectangle border -->\n <rect\n v-else\n :x=\"strokeWidth / 2\"\n :y=\"strokeWidth / 2\"\n :width=\"Math.max(width - strokeWidth, 0)\"\n :height=\"Math.max(height - strokeWidth, 0)\"\n fill=\"transparent\"\n :stroke=\"strokeColor\"\n :stroke-width=\"strokeWidth\"\n :stroke-dasharray=\"dashArray\"\n style=\"pointer-events: none\"\n />\n </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 /** Whether the annotation is selected */\n isSelected: boolean;\n /** Stroke colour – defaults to blue when omitted */\n strokeColor?: string;\n /** Stroke width in PDF units */\n strokeWidth?: number;\n /** Stroke type – defaults to underline when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – for dashed style */\n strokeDashArray?: number[];\n /** Bounding box of the annotation (PDF units) */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Click handler (used for selection) */\n onClick?: (e: MouseEvent | TouchEvent) => void;\n /** Whether this link has an IRT (In Reply To) reference - disables direct interaction */\n hasIRT?: boolean;\n }>(),\n {\n strokeColor: '#0000FF',\n strokeWidth: 2,\n strokeStyle: PdfAnnotationBorderStyle.UNDERLINE,\n hasIRT: false,\n },\n);\n\nconst width = computed(() => props.rect.size.width);\nconst height = computed(() => props.rect.size.height);\nconst svgWidth = computed(() => width.value * props.scale);\nconst svgHeight = computed(() => height.value * props.scale);\n\n// Calculate dash array for SVG\nconst dashArray = computed(() => {\n if (props.strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n return props.strokeDashArray?.join(',') ?? `${props.strokeWidth * 3},${props.strokeWidth}`;\n }\n return undefined;\n});\n\n// For underline style, render a line at the bottom\n// For solid/dashed, render a rectangle border\nconst isUnderline = computed(() => props.strokeStyle === PdfAnnotationBorderStyle.UNDERLINE);\n\nconst hitAreaCursor = computed(() =>\n props.hasIRT ? 'default' : props.isSelected ? 'move' : 'pointer',\n);\nconst hitAreaPointerEvents = computed(() =>\n props.hasIRT ? 'none' : props.isSelected ? 'none' : 'visible',\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 :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 unrotated?: boolean;\n style?: CSSProperties;\n }>(),\n {\n scaleFactor: 1,\n unrotated: false,\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.unrotated,\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 unrotated: props.unrotated,\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 :unrotated=\"unrotated\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfStampAnnoObject } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport RenderAnnotation from '../render-annotation.vue';\n\nconst props = defineProps<{\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n documentId: string;\n pageIndex: number;\n scale: number;\n onClick: (e: PointerEvent | TouchEvent) => void;\n}>();\n\nconst unrotated = computed(\n () =>\n !!(props.annotation.object as any).rotation && !!(props.annotation.object as any).unrotatedRect,\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: resolvedColor,\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 { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n opacity: 0.5,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\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 /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n opacity: 0.5,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\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=\"${resolvedColor.value}\" 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: resolvedColor,\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 /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n opacity: 0.5,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\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: resolvedColor,\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 /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n }>(),\n {\n opacity: 0.5,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\nconst thickness = computed(() => 2 * props.scale);\n</script>\n","<template>\n <template v-for=\"annotation in annotations\" :key=\"annotation.object.id\">\n <!-- Custom Renderer (from external plugins like redaction) -->\n <AnnotationContainer\n v-if=\"findCustomRenderer(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, false)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default>\n <component\n :is=\"findCustomRenderer(annotation)!.component\"\n :annotation=\"annotation\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :pageIndex=\"pageIndex\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Ink -->\n <AnnotationContainer\n v-else-if=\"isInk(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Ink\n v-bind=\"currentObject\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Square -->\n <AnnotationContainer\n v-else-if=\"isSquare(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Square\n v-bind=\"currentObject\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Circle -->\n <AnnotationContainer\n v-else-if=\"isCircle(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Circle\n v-bind=\"currentObject\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Line -->\n <AnnotationContainer\n v-else-if=\"isLine(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Line\n v-bind=\"currentObject\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Polyline -->\n <AnnotationContainer\n v-else-if=\"isPolyline(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Polyline\n v-bind=\"currentObject\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Polygon -->\n <AnnotationContainer\n v-else-if=\"isPolygon(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Polygon\n v-bind=\"currentObject\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :onClick=\"(e: PointerEvent | TouchEvent) => handleClick(e, annotation)\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- FreeText -->\n <AnnotationContainer\n v-else-if=\"isFreeText(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :onDoubleClick=\"(e) => handleDoubleClick(e, annotation.object.id)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.FreeText\n :isSelected=\"isSelected(annotation)\"\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\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Stamp -->\n <AnnotationContainer\n v-else-if=\"isStamp(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, true)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default>\n <AnnoComponents.Stamp\n :documentId=\"documentId\"\n :isSelected=\"isSelected(annotation)\"\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\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-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=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, false)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :zIndex=\"0\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\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\" v-if=\"!isMultiSelected\">\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=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, false)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :zIndex=\"0\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\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\" v-if=\"!isMultiSelected\">\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=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, false)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :zIndex=\"0\"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\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\" v-if=\"!isMultiSelected\">\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=\"showIndividualSelection(annotation)\"\n :isDraggable=\"isDraggable(annotation)\"\n :isResizable=\"isResizable(annotation)\"\n :isRotatable=\"isRotatableFor(annotation, false)\"\n :lockAspectRatio=\"lockAspectRatio(annotation)\"\n :onSelect=\"(e) => handleClick(e, annotation)\"\n :vertexConfig=\"getVertexConfig(annotation)\"\n :selectionMenu=\"isMultiSelected ? undefined : selectionMenu\"\n :zIndex=\"0\"\n :style=\"blendStyle(annotation, PdfBlendMode.Multiply)\"\n v-bind=\"containerProps\"\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\" v-if=\"!isMultiSelected\">\n <slot name=\"selection-menu\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n\n <!-- Link -->\n <AnnotationContainer\n v-else-if=\"isLink(annotation)\"\n :trackedAnnotation=\"annotation\"\n :isSelected=\"showIndividualSelection(annotation)\"\n :isMultiSelected=\"isMultiSelected\"\n :isDraggable=\"false\"\n :isResizable=\"false\"\n :isRotatable=\"false\"\n :lockAspectRatio=\"false\"\n :onSelect=\"(e) => handleLinkClick(e, annotation)\"\n :selectionMenu=\"\n annotation.object.inReplyToId ? undefined : isMultiSelected ? undefined : selectionMenu\n \"\n :style=\"blendStyle(annotation)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject }\">\n <AnnoComponents.Link\n v-bind=\"currentObject\"\n :isSelected=\"isSelected(annotation)\"\n :scale=\"scale\"\n :onClick=\"(e: MouseEvent | TouchEvent) => handleLinkClick(e, annotation)\"\n :hasIRT=\"!!annotation.object.inReplyToId\"\n />\n </template>\n <template\n #selection-menu=\"slotProps\"\n v-if=\"!isMultiSelected && !annotation.object.inReplyToId\"\n >\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 </AnnotationContainer>\n </template>\n\n <!-- Group Selection Box (shown when multiple annotations are selected on this page) -->\n <GroupSelectionBox\n v-if=\"allSelectedOnSamePage && selectedAnnotationsOnPage.length >= 2\"\n :documentId=\"documentId\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :rotation=\"rotation\"\n :pageWidth=\"pageWidth\"\n :pageHeight=\"pageHeight\"\n :selectedAnnotations=\"selectedAnnotationsOnPage\"\n :isDraggable=\"areAllSelectedDraggable\"\n :isResizable=\"areAllSelectedResizable\"\n :isRotatable=\"areAllSelectedRotatable\"\n :lockAspectRatio=\"shouldLockGroupAspectRatio\"\n :resizeUi=\"resizeUi\"\n :rotationUi=\"rotationUi\"\n :selectionOutlineColor=\"selectionOutlineColor\"\n :selectionOutline=\"groupSelectionOutline ?? selectionOutline\"\n :groupSelectionMenu=\"groupSelectionMenu\"\n >\n <template #group-selection-menu=\"slotProps\">\n <slot name=\"group-selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </GroupSelectionBox>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed, type CSSProperties } from 'vue';\nimport { blendModeToCss, PdfBlendMode, Position } from '@embedpdf/models';\nimport {\n getAnnotationsByPageIndex,\n getSelectedAnnotationIds,\n isCircle,\n isFreeText,\n isHighlight,\n isInk,\n isLine,\n isLink,\n isPolygon,\n isPolyline,\n isSquare,\n isSquiggly,\n isStamp,\n isStrikeout,\n isUnderline,\n TrackedAnnotation,\n resolveInteractionProp,\n} from '@embedpdf/plugin-annotation';\nimport type { PdfLinkAnnoObject } from '@embedpdf/models';\nimport { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/vue';\nimport type { EmbedPdfPointerEvent } from '@embedpdf/plugin-interaction-manager';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/vue';\nimport { useAnnotationCapability } from '../hooks';\nimport AnnotationContainer from './annotation-container.vue';\nimport GroupSelectionBox from './group-selection-box.vue';\nimport * as AnnoComponents from './annotations';\nimport * as TextMarkupComponents from './text-markup';\nimport { VertexConfig } from '../../shared/types';\nimport {\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n} from '../types';\nimport type { BoxedAnnotationRenderer } from '../context';\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 rotationUi?: RotationHandleUI;\n selectionOutlineColor?: string;\n selectionOutline?: SelectionOutline;\n groupSelectionOutline?: SelectionOutline;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Render function for group selection menu (schema-driven approach) */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Custom renderers for specific annotation types (provided by external plugins) */\n annotationRenderers?: BoxedAnnotationRenderer[];\n}>();\n\n// Typed helper to avoid inline CSS objects in template (prevents TS2742 csstype errors in .d.ts output)\nconst blendStyle = (\n annotation: TrackedAnnotation,\n defaultBlend = PdfBlendMode.Normal,\n): CSSProperties => ({\n mixBlendMode: blendModeToCss(annotation.object.blendMode ?? defaultBlend),\n});\n\n// Find a custom renderer for the given annotation\nconst findCustomRenderer = (annotation: TrackedAnnotation) => {\n return props.annotationRenderers?.find((r) => r.matches(annotation.object));\n};\n\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst { provides: selectionProvides } = useSelectionCapability();\nconst annotations = ref<TrackedAnnotation[]>([]);\nconst allSelectedIds = ref<string[]>([]);\nconst { register } = usePointerHandlers({\n documentId: () => props.documentId,\n pageIndex: props.pageIndex,\n});\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\n// Check if multiple annotations are selected\nconst isMultiSelected = computed(() => allSelectedIds.value.length > 1);\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 allSelectedIds.value = getSelectedAnnotationIds(currentState);\n\n // Then subscribe to changes\n const off = annotationProvides.value.onStateChange((state) => {\n annotations.value = getAnnotationsByPageIndex(state, props.pageIndex);\n allSelectedIds.value = getSelectedAnnotationIds(state);\n });\n onCleanup(off);\n }\n});\n\nconst handlePointerDown = (_pos: Position, pe: EmbedPdfPointerEvent<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 selectionProvides.value.clear();\n\n // Check for modifier key (Cmd on Mac, Ctrl on Windows/Linux)\n const isModifierPressed = 'metaKey' in e ? e.metaKey || e.ctrlKey : false;\n\n if (isModifierPressed) {\n // Toggle selection: add or remove from current selection\n annotationProvides.value.toggleSelection(props.pageIndex, annotation.object.id);\n } else {\n // Exclusive select: clear and select only this one\n annotationProvides.value.selectAnnotation(props.pageIndex, annotation.object.id);\n }\n\n if (annotation.object.id !== editingId.value) {\n editingId.value = null;\n }\n }\n};\n\n// Special handler for link annotations - if IRT exists, select the parent\nconst handleLinkClick = (\n e: MouseEvent | TouchEvent,\n annotation: TrackedAnnotation<PdfLinkAnnoObject>,\n) => {\n e.stopPropagation();\n if (!annotationProvides.value || !selectionProvides.value) return;\n\n selectionProvides.value.clear();\n\n // If link has IRT, select the parent annotation instead\n if (annotation.object.inReplyToId) {\n const parentId = annotation.object.inReplyToId;\n const parent = annotations.value.find((a) => a.object.id === parentId);\n if (parent) {\n annotationProvides.value.selectAnnotation(parent.object.pageIndex, parentId);\n return;\n }\n }\n\n // Standalone link - select it directly\n annotationProvides.value.selectAnnotation(props.pageIndex, annotation.object.id);\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// Check if an annotation is selected\nconst isSelected = (annotation: TrackedAnnotation) =>\n allSelectedIds.value.includes(annotation.object.id);\n\n// Get selected annotations that are on THIS page (for group selection box)\nconst selectedAnnotationsOnPage = computed(() =>\n annotations.value.filter((anno) => allSelectedIds.value.includes(anno.object.id)),\n);\n\n// Check if all selected annotations on this page are draggable in group context\nconst areAllSelectedDraggable = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n\n return selectedAnnotationsOnPage.value.every((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n // Use group-specific property, falling back to single-annotation property\n const groupDraggable = resolveInteractionProp(\n tool?.interaction.isGroupDraggable,\n ta.object,\n true,\n );\n const singleDraggable = resolveInteractionProp(tool?.interaction.isDraggable, ta.object, true);\n return tool?.interaction.isGroupDraggable !== undefined ? groupDraggable : singleDraggable;\n });\n});\n\n// Check if all selected annotations on this page are resizable in group context\nconst areAllSelectedResizable = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n\n return selectedAnnotationsOnPage.value.every((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n // Use group-specific property, falling back to single-annotation property\n const groupResizable = resolveInteractionProp(\n tool?.interaction.isGroupResizable,\n ta.object,\n true,\n );\n const singleResizable = resolveInteractionProp(tool?.interaction.isResizable, ta.object, true);\n return tool?.interaction.isGroupResizable !== undefined ? groupResizable : singleResizable;\n });\n});\n\n// Check if all selected annotations on this page are rotatable in group context\nconst areAllSelectedRotatable = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n\n return selectedAnnotationsOnPage.value.every((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n const groupRotatable = resolveInteractionProp(\n tool?.interaction.isGroupRotatable,\n ta.object,\n true,\n );\n const singleRotatable = resolveInteractionProp(tool?.interaction.isRotatable, ta.object, true);\n return tool?.interaction.isGroupRotatable !== undefined ? groupRotatable : singleRotatable;\n });\n});\n\n// Check if any selected annotation on this page needs aspect ratio locked during group resize\nconst shouldLockGroupAspectRatio = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n\n return selectedAnnotationsOnPage.value.some((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n const groupLock = resolveInteractionProp(\n tool?.interaction.lockGroupAspectRatio,\n ta.object,\n false,\n );\n const singleLock = resolveInteractionProp(tool?.interaction.lockAspectRatio, ta.object, false);\n return tool?.interaction.lockGroupAspectRatio !== undefined ? groupLock : singleLock;\n });\n});\n\n// Check if all selected annotations are on the same page (this page)\nconst allSelectedOnSamePage = computed(() => {\n if (!annotationProvides.value) return false;\n // Early return if not enough selections (also creates reactive dependency on allSelectedIds)\n if (allSelectedIds.value.length < 2) return false;\n const allSelected = annotationProvides.value.getSelectedAnnotations();\n // All selected must be on this page\n return allSelected.every((ta) => ta.object.pageIndex === props.pageIndex);\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 if (isMultiSelected.value) return false;\n return resolveInteractionProp(getTool(anno)?.interaction.isDraggable, anno.object, false);\n};\nconst isResizable = (anno: TrackedAnnotation) => {\n if (isMultiSelected.value) return false;\n return resolveInteractionProp(getTool(anno)?.interaction.isResizable, anno.object, false);\n};\nconst lockAspectRatio = (anno: TrackedAnnotation) =>\n resolveInteractionProp(getTool(anno)?.interaction.lockAspectRatio, anno.object, false);\nconst isRotatableFor = (anno: TrackedAnnotation, fallback: boolean) => {\n if (isMultiSelected.value) return false;\n return resolveInteractionProp(getTool(anno)?.interaction.isRotatable, anno.object, fallback);\n};\n\n// Should show individual selection UI (not when multi-selected)\nconst showIndividualSelection = (anno: TrackedAnnotation) =>\n isSelected(anno) && !isMultiSelected.value;\n\n// Props to pass to AnnotationContainer (excluding props that are handled explicitly or are group-only)\nconst containerProps = computed(() => {\n const {\n selectionMenu: _sm,\n groupSelectionMenu: _gsm,\n groupSelectionOutline: _gso,\n ...rest\n } = props;\n return rest;\n});\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 :strokeColor=\"activeTool.defaults.strokeColor\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Underline\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE\"\n :strokeColor=\"activeTool.defaults.strokeColor\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Strikeout\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT\"\n :strokeColor=\"activeTool.defaults.strokeColor\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Squiggly\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY\"\n :strokeColor=\"activeTool.defaults.strokeColor\"\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","import {\n inject,\n provide,\n markRaw,\n onUnmounted,\n shallowRef,\n type InjectionKey,\n type ShallowRef,\n} from 'vue';\nimport type { BoxedAnnotationRenderer, AnnotationRendererEntry } from './types';\nimport type { PdfAnnotationObject } from '@embedpdf/models';\n\n/**\n * Annotation Renderer Registry\n *\n * Allows external plugins to register custom annotation renderers\n * that integrate with the annotation layer.\n */\nexport interface AnnotationRendererRegistry {\n register(entries: BoxedAnnotationRenderer[]): () => void;\n getAll(): BoxedAnnotationRenderer[];\n}\n\nconst RendererRegistryKey: InjectionKey<AnnotationRendererRegistry> = Symbol(\n 'AnnotationRendererRegistry',\n);\n\nexport function createRendererRegistry(): AnnotationRendererRegistry {\n const renderers: ShallowRef<BoxedAnnotationRenderer[]> = shallowRef([]);\n\n return {\n register(entries: BoxedAnnotationRenderer[]) {\n const ids = new Set(entries.map((e) => e.id));\n // Add new, replace existing by id\n renderers.value = [...renderers.value.filter((r) => !ids.has(r.id)), ...entries];\n // Return cleanup function\n return () => {\n renderers.value = renderers.value.filter((r) => !entries.some((e) => e.id === r.id));\n };\n },\n getAll() {\n return renderers.value;\n },\n };\n}\n\nexport function provideRendererRegistry(): AnnotationRendererRegistry {\n const registry = createRendererRegistry();\n provide(RendererRegistryKey, registry);\n return registry;\n}\n\nexport function useRendererRegistry(): AnnotationRendererRegistry | null {\n return inject(RendererRegistryKey, null);\n}\n\n/**\n * Composable for plugins to register renderers.\n * Automatically cleans up on unmount.\n */\nexport function useRegisterRenderers(entries: BoxedAnnotationRenderer[]) {\n const registry = useRendererRegistry();\n if (!registry) return;\n\n const unregister = registry.register(entries);\n onUnmounted(unregister);\n}\n\n/**\n * Factory to create a boxed renderer from a typed entry.\n * Wraps component in markRaw to prevent reactivity overhead.\n */\nexport function createRenderer<T extends PdfAnnotationObject>(\n entry: AnnotationRendererEntry<T>,\n): BoxedAnnotationRenderer {\n return {\n id: entry.id,\n matches: entry.matches,\n component: markRaw(entry.component) as Component<AnnotationRendererProps>,\n };\n}\n\n// Re-export types for convenience\nimport type { Component } from 'vue';\nimport type { AnnotationRendererProps } from './types';\nexport type { AnnotationRendererProps, AnnotationRendererEntry, BoxedAnnotationRenderer };\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=\"resolvedResizeUi\"\n :vertexUi=\"resolvedVertexUi\"\n :rotationUi=\"rotationUi\"\n :selectionOutlineColor=\"selectionOutlineColor\"\n :selectionOutline=\"selectionOutline\"\n :groupSelectionOutline=\"groupSelectionOutline\"\n :selectionMenu=\"selectionMenu\"\n :groupSelectionMenu=\"groupSelectionMenu\"\n :annotationRenderers=\"allRenderers\"\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 #group-selection-menu=\"slotProps\">\n <slot name=\"group-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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-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, onMounted } 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 {\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n} from '../types';\nimport { useRendererRegistry, type BoxedAnnotationRenderer } from '../context';\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 /** @deprecated Use `resizeUi` (or `:resize-ui` in templates) instead */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUi?: VertexHandleUI;\n /** @deprecated Use `vertexUi` (or `:vertex-ui` in templates) instead */\n vertexUI?: VertexHandleUI;\n /** Customize rotation handle */\n rotationUi?: RotationHandleUI;\n /** @deprecated Use `selectionOutline` instead */\n selectionOutlineColor?: string;\n /** Customize the selection outline for individual annotations */\n selectionOutline?: SelectionOutline;\n /** Customize the selection outline for the group selection box (falls back to selectionOutline) */\n groupSelectionOutline?: SelectionOutline;\n /** Customize selection menu */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Customize group selection menu */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Custom renderers for specific annotation types (provided by external plugins) */\n annotationRenderers?: BoxedAnnotationRenderer[];\n}>();\n\n// Resolve deprecated prop aliases (resizeUI -> resizeUi, vertexUI -> vertexUi)\nconst resolvedResizeUi = computed(() => props.resizeUi ?? props.resizeUI);\nconst resolvedVertexUi = computed(() => props.vertexUi ?? props.vertexUI);\n\nonMounted(() => {\n if (props.resizeUI) {\n console.warn(\n '[AnnotationLayer] The \"resizeUI\" prop is deprecated. Use :resize-ui in templates instead.',\n );\n }\n if (props.vertexUI) {\n console.warn(\n '[AnnotationLayer] The \"vertexUI\" prop is deprecated. Use :vertex-ui in templates instead.',\n );\n }\n});\n\n// Get renderers from registry (provided by parent)\nconst registry = useRendererRegistry();\n\n// Merge: registry + explicit props (props take precedence by id)\nconst allRenderers = computed(() => {\n const fromRegistry = registry?.getAll() ?? [];\n const fromProps = props.annotationRenderers ?? [];\n const merged = [...fromRegistry];\n for (const r of fromProps) {\n const idx = merged.findIndex((m) => m.id === r.id);\n if (idx >= 0) merged[idx] = r;\n else merged.push(r);\n }\n return merged;\n});\n\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 // Combine page intrinsic rotation with document rotation\n const pageRotation = page.value?.rotation ?? 0;\n const docRotation = documentState.value?.rotation ?? 0;\n return ((pageRotation + docRotation) % 4) as Rotation;\n});\n</script>\n","<script setup lang=\"ts\">\nimport { provideRendererRegistry } from '../context';\n\n/**\n * Provider component that sets up the annotation renderer registry.\n * Used as a wrapper via createPluginPackage().addWrapper().\n */\nprovideRendererRegistry();\n</script>\n\n<template>\n <slot />\n</template>\n","import { createPluginPackage } from '@embedpdf/core';\nimport { AnnotationPluginPackage as BaseAnnotationPackage } from '@embedpdf/plugin-annotation';\nimport { RendererRegistryProvider } from './components';\n\nexport * from './hooks';\nexport * from './components';\nexport * from './types';\nexport * from './context';\nexport * from '@embedpdf/plugin-annotation';\n\n// Automatically wrap with RendererRegistryProvider\nexport const AnnotationPluginPackage = createPluginPackage(BaseAnnotationPackage)\n .addWrapper(RendererRegistryProvider)\n .build();\n"],"names":["_a","_createElementBlock","_createElementVNode","_Fragment","_unref","_renderSlot","_normalizeProps","_mergeProps","_openBlock","_createBlock","_withCtx","_resolveDynamicComponent","_Teleport","_hoisted_1","_normalizeStyle","_renderList","isUnderline","_createVNode","RenderAnnotation","AnnotationContainer","_createSlots","AnnoComponents.Ink","AnnoComponents.Square","AnnoComponents.Circle","AnnoComponents.Line","AnnoComponents.Polyline","AnnoComponents.Polygon","AnnoComponents.FreeText","AnnoComponents.Stamp","TextMarkupComponents.Underline","TextMarkupComponents.Strikeout","TextMarkupComponents.Squiggly","TextMarkupComponents.Highlight","AnnoComponents.Link","GroupSelectionBox","Highlight","Underline","Strikeout","Squiggly","PreviewRenderer","Annotations","TextMarkup","AnnotationPaintLayer","BaseAnnotationPackage","RendererRegistryProvider"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/vue/components/appearance-image.vue","../../src/vue/hooks/use-annotation.ts","../../src/vue/components/annotation-container.vue","../../src/vue/components/group-selection-box.vue","../../src/vue/context/renderer-registry.ts","../../src/vue/components/annotations/ink.vue","../../src/vue/components/renderers/ink-renderer.vue","../../src/vue/components/annotations/square.vue","../../src/vue/components/renderers/square-renderer.vue","../../src/vue/components/annotations/circle.vue","../../src/vue/components/renderers/circle-renderer.vue","../../src/vue/components/annotations/line.vue","../../src/vue/components/renderers/line-renderer.vue","../../src/vue/components/annotations/polyline.vue","../../src/vue/components/renderers/polyline-renderer.vue","../../src/vue/components/annotations/polygon.vue","../../src/vue/components/renderers/polygon-renderer.vue","../../src/vue/components/annotations/free-text.vue","../../src/vue/components/renderers/free-text-renderer.vue","../../src/vue/components/render-annotation.vue","../../src/vue/components/annotations/stamp.vue","../../src/vue/components/renderers/stamp-renderer.vue","../../src/vue/components/annotations/link.vue","../../src/vue/components/renderers/link-renderer.vue","../../src/vue/components/text-markup/highlight.vue","../../src/vue/components/renderers/highlight-renderer.vue","../../src/vue/components/text-markup/underline.vue","../../src/vue/components/renderers/underline-renderer.vue","../../src/vue/components/text-markup/strikeout.vue","../../src/vue/components/renderers/strikeout-renderer.vue","../../src/vue/components/text-markup/squiggly.vue","../../src/vue/components/renderers/squiggly-renderer.vue","../../src/vue/components/built-in-renderers.ts","../../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","../../src/vue/components/renderer-registry-provider.vue","../../src/vue/index.ts"],"sourcesContent":["<template>\n <img\n v-if=\"imageUrl\"\n :src=\"imageUrl\"\n alt=\"\"\n draggable=\"false\"\n @load=\"handleImageLoad\"\n :style=\"{\n position: 'absolute',\n width: '100%',\n height: '100%',\n display: 'block',\n pointerEvents: 'none',\n userSelect: 'none',\n ...style,\n }\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, type CSSProperties } from 'vue';\nimport type { AnnotationAppearanceImage } from '@embedpdf/models';\n\nconst props = defineProps<{\n appearance: AnnotationAppearanceImage<Blob>;\n style?: CSSProperties;\n}>();\n\nconst imageUrl = ref<string | null>(null);\nconst urlRef = ref<string | null>(null);\n\nwatchEffect((onCleanup) => {\n const url = URL.createObjectURL(props.appearance.data);\n imageUrl.value = url;\n urlRef.value = url;\n\n onCleanup(() => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n });\n});\n\nconst handleImageLoad = () => {\n if (urlRef.value) {\n URL.revokeObjectURL(urlRef.value);\n urlRef.value = null;\n }\n};\n</script>\n","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=\"contentsStyle\">\n <!-- Outer div: AABB container - stable center for guide lines and rotation handle -->\n <div :style=\"outerAABBStyle\">\n <!-- Rotation guide lines - anchored at stable AABB center -->\n <template v-if=\"rotationActive\">\n <div :style=\"guideHorizontalStyle\" />\n <div :style=\"guideVerticalStyle\" />\n <div :style=\"guideAngleStyle\" />\n </template>\n\n <!-- Rotation handle - orbits in AABB space -->\n <template v-if=\"isSelected && effectiveIsRotatable && rotationHandleData\">\n <div\n @pointerenter=\"isHandleHovered = true\"\n @pointerleave=\"\n isHandleHovered = false;\n cursorScreen = null;\n \"\n @pointermove=\"onHandlePointerMove\"\n :style=\"contentsStyle\"\n >\n <!-- Connector line -->\n <div v-if=\"SHOW_CONNECTOR\" :style=\"connectorLineStyle\" />\n <!-- Rotation handle element -->\n <slot\n v-if=\"slots['rotation-handle']\"\n name=\"rotation-handle\"\n v-bind=\"rotationHandleSlotProps\"\n >\n <div v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </slot>\n <div v-else v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n </template>\n\n <!-- Inner div: rotated content area - holds content, resize handles, vertex handles -->\n <div\n v-bind=\"{ ...(effectiveIsDraggable && isSelected ? dragProps : {}), ...doubleProps }\"\n :style=\"innerRotatedStyle\"\n >\n <!-- Annotation content - renders in unrotated coordinate space -->\n <slot :annotation=\"childObject\" :appearanceActive=\"apActive\"></slot>\n\n <!-- AP overlay canvas (always in DOM, toggled via display) -->\n <AppearanceImageVue\n v-if=\"appearance?.normal\"\n :appearance=\"appearance.normal\"\n :style=\"{ display: apActive ? 'block' : 'none' }\"\n />\n\n <!-- Resize handles - rotate with the shape -->\n <template v-if=\"isSelected && effectiveIsResizable && !rotationActive\">\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 <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 <!-- Vertex handles - rotate with the shape -->\n <template\n v-if=\"\n isSelected &&\n permissions.canModifyAnnotations &&\n !isMultiSelected &&\n !rotationActive &&\n vertices.length > 0\n \"\n >\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 <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 </div>\n\n <!-- Selection Menu: Supports BOTH render function and slot - hide when multi-selected or rotating -->\n <CounterRotate v-if=\"shouldShowMenu && !rotationActive\" :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\n <!-- Cursor-following rotation tooltip - portaled to body to escape CSS transform chain -->\n <Teleport to=\"body\" v-if=\"(rotationActive || isHandleHovered) && cursorScreen\">\n <div :style=\"tooltipStyle\">{{ normalizedRotationDisplay.toFixed(0) }}°</div>\n </Teleport>\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 {\n ref,\n computed,\n watchEffect,\n useSlots,\n toRaw,\n shallowRef,\n Teleport,\n type CSSProperties,\n type VNode,\n} from 'vue';\nimport { PdfAnnotationObject, Rect, AnnotationAppearances } from '@embedpdf/models';\nimport AppearanceImageVue from './appearance-image.vue';\nimport { inferRotationCenterFromRects } from '@embedpdf/plugin-annotation';\nimport {\n CounterRotate,\n MenuWrapperProps,\n SelectionMenuPlacement,\n useDoublePressProps,\n useInteractionHandles,\n} from '@embedpdf/utils/vue';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { useDocumentPermissions } from '@embedpdf/core/vue';\nimport { VertexConfig } from '../../shared/types';\nimport { useAnnotationCapability, useAnnotationPlugin } from '../hooks';\nimport {\n AnnotationSelectionContext,\n AnnotationSelectionMenuRenderFn,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n RotationHandleSlotProps,\n SelectionOutline,\n} 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 /** Whether the annotation is in editing mode */\n isEditing?: boolean;\n /** Whether multiple annotations are selected (container becomes passive) */\n isMultiSelected?: boolean;\n isDraggable: boolean;\n isResizable: boolean;\n isRotatable?: boolean;\n lockAspectRatio?: boolean;\n vertexConfig?: VertexConfig<T>;\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** @deprecated Use `selectionOutline.offset` instead */\n outlineOffset?: number;\n onDoubleClick?: (event: PointerEvent | MouseEvent | TouchEvent) => void;\n onSelect: (event: PointerEvent | MouseEvent | TouchEvent) => void;\n /** Pre-rendered appearance stream images for AP mode rendering */\n appearance?: AnnotationAppearances<Blob> | null;\n zIndex?: number;\n /** @deprecated Use `selectionOutline.color` instead */\n selectionOutlineColor?: string;\n /** Customize the selection outline (color, style, width, offset) */\n selectionOutline?: SelectionOutline;\n /** Customize resize handle appearance */\n resizeUi?: ResizeHandleUI;\n /** Customize vertex handle appearance */\n vertexUi?: VertexHandleUI;\n /** Customize rotation handle appearance */\n rotationUi?: RotationHandleUI;\n style?: CSSProperties;\n }>(),\n {\n lockAspectRatio: false,\n isEditing: false,\n isMultiSelected: false,\n isRotatable: true,\n outlineOffset: 1,\n zIndex: 1,\n selectionOutlineColor: '#007ACC',\n },\n);\n\n// UI constants\nconst HANDLE_COLOR = computed(() => props.resizeUi?.color ?? '#007ACC');\nconst VERTEX_COLOR = computed(() => props.vertexUi?.color ?? '#007ACC');\nconst HANDLE_SIZE = computed(() => props.resizeUi?.size ?? 12);\nconst VERTEX_SIZE = computed(() => props.vertexUi?.size ?? 12);\nconst ROTATION_SIZE = computed(() => props.rotationUi?.size ?? 32);\nconst ROTATION_COLOR = computed(() => props.rotationUi?.color ?? 'white');\nconst ROTATION_CONNECTOR_COLOR = computed(() => props.rotationUi?.connectorColor ?? '#007ACC');\nconst ROTATION_ICON_COLOR = computed(() => props.rotationUi?.iconColor ?? '#007ACC');\nconst SHOW_CONNECTOR = computed(() => props.rotationUi?.showConnector ?? false);\nconst ROTATION_MARGIN = computed(() => props.rotationUi?.margin);\nconst ROTATION_BORDER_COLOR = computed(() => props.rotationUi?.border?.color ?? '#007ACC');\nconst ROTATION_BORDER_WIDTH = computed(() => props.rotationUi?.border?.width ?? 1);\nconst ROTATION_BORDER_STYLE = computed(() => props.rotationUi?.border?.style ?? 'solid');\n\n// Outline resolution (new object > deprecated props > defaults)\nconst outlineColor = computed(\n () => props.selectionOutline?.color ?? props.selectionOutlineColor ?? '#007ACC',\n);\nconst outlineStyle = computed(() => props.selectionOutline?.style ?? 'solid');\nconst outlineWidth = computed(() => props.selectionOutline?.width ?? 1);\nconst outlineOff = computed(() => props.selectionOutline?.offset ?? props.outlineOffset ?? 1);\n\nconst preview = shallowRef<Partial<T>>(toRaw(props.trackedAnnotation.object));\nconst liveRotation = ref<number | null>(null);\nconst cursorScreen = ref<{ x: number; y: number } | null>(null);\nconst isHandleHovered = ref(false);\nconst gestureActive = ref(false);\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst { plugin: annotationPlugin } = useAnnotationPlugin();\nconst permissions = useDocumentPermissions(props.documentId);\nconst gestureBaseRef = ref<T | null>(null);\nconst gestureBaseRectRef = shallowRef<Rect | null>(null);\n\n// When multi-selected, disable individual drag/resize/rotate - GroupSelectionBox handles it\nconst effectiveIsDraggable = computed(\n () => permissions.value.canModifyAnnotations && props.isDraggable && !props.isMultiSelected,\n);\nconst effectiveIsResizable = computed(\n () => permissions.value.canModifyAnnotations && props.isResizable && !props.isMultiSelected,\n);\nconst effectiveIsRotatable = computed(\n () => permissions.value.canModifyAnnotations && props.isRotatable && !props.isMultiSelected,\n);\n\n// Wrap onDoubleClick to respect permissions - check at call time\nconst guardedOnDoubleClick = props.onDoubleClick\n ? (e: PointerEvent | MouseEvent) => {\n if (permissions.value.canModifyAnnotations) {\n props.onDoubleClick?.(e);\n }\n }\n : undefined;\n\n// Get scoped API for this document\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// Get annotation's current rotation\n// During drag, use liveRotation if available; otherwise use the annotation's rotation\nconst annotationRotation = computed(\n () => liveRotation.value ?? (currentObject.value as any).rotation ?? 0,\n);\nconst rotationDisplay = computed(\n () => liveRotation.value ?? (currentObject.value as any).rotation ?? 0,\n);\nconst normalizedRotationDisplay = computed(() => {\n const val = rotationDisplay.value;\n return Number.isFinite(val) ? Math.round(val * 10) / 10 : 0;\n});\nconst rotationActive = computed(() => liveRotation.value !== null);\n\n// Geometry model:\n// - `rect` is the visible AABB container.\n// - `unrotatedRect` is the local editing frame for resize/vertex operations.\nconst explicitUnrotatedRect = computed(\n () => (currentObject.value as any).unrotatedRect as Rect | undefined,\n);\nconst effectiveUnrotatedRect = computed(\n () => explicitUnrotatedRect.value ?? currentObject.value.rect,\n);\nconst rotationPivot = computed(() => {\n if (explicitUnrotatedRect.value && annotationRotation.value !== 0) {\n return inferRotationCenterFromRects(\n effectiveUnrotatedRect.value,\n currentObject.value.rect,\n annotationRotation.value,\n );\n }\n return undefined;\n});\nconst controllerElement = computed(() => effectiveUnrotatedRect.value);\n\n// For children, override rect to use unrotatedRect so content renders in unrotated space\nconst childObject = computed<T>(() => {\n if (explicitUnrotatedRect.value) {\n return { ...currentObject.value, rect: explicitUnrotatedRect.value };\n }\n return currentObject.value;\n});\n\n// Determine if we should show the outline\n// When multi-selected, don't show individual outlines - GroupSelectionBox shows the group outline\nconst showOutline = computed(() => props.isSelected && !props.isMultiSelected);\n\n// --- Selection Menu Logic ---\n\n// Check if we should show any menu at all - hide when multi-selected\nconst shouldShowMenu = computed(() => {\n return (\n props.isSelected && !props.isMultiSelected && (props.selectionMenu || slots['selection-menu'])\n );\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 - calculate suggestTop based on rotation handle position\nconst menuPlacement = computed<SelectionMenuPlacement>(() => {\n const effectiveAngle = (((annotationRotation.value + props.rotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide =\n effectiveIsRotatable.value && effectiveAngle > 90 && effectiveAngle < 270;\n return {\n suggestTop: handleNearMenuSide,\n };\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 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 {\n dragProps,\n vertices,\n resize,\n rotation: rotationHandleData,\n} = useInteractionHandles({\n controller: {\n element: controllerElement,\n vertices: verticesSnapshot,\n constraints: constraintsSnapshot,\n maintainAspectRatio: computed(() => props.lockAspectRatio),\n pageRotation: computed(() => props.rotation),\n annotationRotation: computed(() => annotationRotation.value),\n rotationCenter: computed(() => rotationPivot.value),\n rotationElement: computed(() => currentObject.value.rect),\n scale: computed(() => props.scale),\n // Disable interaction handles when multi-selected\n enabled: computed(() => props.isSelected && !props.isMultiSelected),\n onUpdate: (event) => {\n if (!event.transformData?.type || props.isMultiSelected) return;\n\n const plugin = annotationPlugin.value;\n if (!plugin) return;\n\n const { type, changes, metadata } = event.transformData;\n const id = props.trackedAnnotation.object.id;\n const pageSize = { width: props.pageWidth, height: props.pageHeight };\n\n // Gesture start - initialize plugin drag/resize\n if (event.state === 'start') {\n gestureBaseRectRef.value =\n (props.trackedAnnotation.object as any).unrotatedRect ??\n props.trackedAnnotation.object.rect;\n gestureBaseRef.value = currentObject.value;\n\n if (type === 'resize' || type === 'vertex-edit') {\n gestureActive.value = true;\n }\n\n if (type === 'move') {\n plugin.startDrag(props.documentId, { annotationIds: [id], pageSize });\n } else if (type === 'resize') {\n plugin.startResize(props.documentId, {\n annotationIds: [id],\n pageSize,\n resizeHandle: metadata?.handle ?? 'se',\n });\n }\n }\n\n // Gesture update - call plugin, preview comes from subscription\n if (changes.rect && gestureBaseRectRef.value) {\n if (type === 'move') {\n const delta = {\n x: changes.rect.origin.x - gestureBaseRectRef.value.origin.x,\n y: changes.rect.origin.y - gestureBaseRectRef.value.origin.y,\n };\n plugin.updateDrag(props.documentId, delta);\n } else if (type === 'resize') {\n plugin.updateResize(props.documentId, changes.rect);\n }\n }\n\n // Vertex edit - handle directly (no attached link handling needed)\n if (type === 'vertex-edit' && changes.vertices && props.vertexConfig) {\n const base = gestureBaseRef.value ?? currentObject.value;\n const vertexChanges = props.vertexConfig.transformAnnotation(toRaw(base), changes.vertices);\n const patched = annotationCapability.value?.transformAnnotation<T>(base, {\n type,\n changes: vertexChanges as Partial<T>,\n metadata,\n });\n if (patched) {\n preview.value = { ...toRaw(preview.value), ...patched };\n if (event.state === 'end') {\n annotationProvides.value?.updateAnnotation(props.pageIndex, id, patched);\n }\n }\n }\n\n // Rotation - handle via plugin rotation API\n if (type === 'rotate') {\n const cursorAngle = metadata?.rotationAngle ?? annotationRotation.value;\n const cursorPos = metadata?.cursorPosition;\n if (cursorPos) cursorScreen.value = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation.value = cursorAngle;\n plugin.startRotation(props.documentId, {\n annotationIds: [id],\n cursorAngle,\n rotationCenter: metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation.value = cursorAngle;\n plugin.updateRotation(props.documentId, cursorAngle, metadata?.rotationDelta);\n } else if (event.state === 'end') {\n liveRotation.value = null;\n cursorScreen.value = null;\n plugin.commitRotation(props.documentId);\n }\n return;\n }\n\n // Gesture end - commit\n if (event.state === 'end') {\n gestureActive.value = false;\n gestureBaseRectRef.value = null;\n gestureBaseRef.value = null;\n if (type === 'move') plugin.commitDrag(props.documentId);\n else if (type === 'resize') plugin.commitResize(props.documentId);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE.value,\n spacing: outlineOff.value,\n offsetMode: 'outside',\n includeSides: props.lockAspectRatio ? false : true,\n zIndex: props.zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE.value,\n zIndex: props.zIndex + 2,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE.value,\n margin: ROTATION_MARGIN.value,\n zIndex: props.zIndex + 3,\n showConnector: SHOW_CONNECTOR.value,\n },\n includeVertices: !!props.vertexConfig,\n includeRotation: effectiveIsRotatable,\n currentRotation: annotationRotation,\n});\n\nconst doubleProps = useDoublePressProps(guardedOnDoubleClick);\n\n// Handle pointer move on the rotation handle wrapper (for cursor tooltip when not rotating)\nconst onHandlePointerMove = (e: PointerEvent) => {\n if (!rotationActive.value) {\n cursorScreen.value = { x: e.clientX, y: e.clientY };\n }\n};\n\n// Sync preview with tracked annotation when it changes\nwatchEffect(() => {\n if (props.trackedAnnotation.object) {\n preview.value = props.trackedAnnotation.object;\n }\n});\n\n// Subscribe to unified drag/resize/rotate changes - plugin sends pre-computed patches!\n// ALL preview updates come through here (primary, attached links, multi-select)\nwatchEffect((onCleanup) => {\n const plugin = annotationPlugin.value;\n if (!plugin) return;\n\n const id = props.trackedAnnotation.object.id;\n\n const handleEvent = (event: {\n documentId: string;\n type: string;\n previewPatches?: Record<string, any>;\n }) => {\n if (event.documentId !== props.documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation.value = null;\n }\n const patch = event.previewPatches?.[id];\n if (event.type === 'update' && patch) {\n preview.value = { ...toRaw(preview.value), ...patch } as T;\n } else if (event.type === 'cancel') {\n preview.value = props.trackedAnnotation.object;\n }\n };\n\n const unsubs = [\n plugin.onDragChange(handleEvent),\n plugin.onResizeChange(handleEvent),\n plugin.onRotateChange(handleEvent),\n ];\n\n onCleanup(() => unsubs.forEach((u) => u()));\n});\n\n// ─── Layout computations ───────────────────────────────────────────────\nconst aabbWidth = computed(() => currentObject.value.rect.size.width * props.scale);\nconst aabbHeight = computed(() => currentObject.value.rect.size.height * props.scale);\nconst innerWidth = computed(() => effectiveUnrotatedRect.value.size.width * props.scale);\nconst innerHeight = computed(() => effectiveUnrotatedRect.value.size.height * props.scale);\nconst usesCustomPivot = computed(\n () => Boolean(explicitUnrotatedRect.value) && annotationRotation.value !== 0,\n);\nconst innerLeft = computed(() =>\n usesCustomPivot.value\n ? (effectiveUnrotatedRect.value.origin.x - currentObject.value.rect.origin.x) * props.scale\n : (aabbWidth.value - innerWidth.value) / 2,\n);\nconst innerTop = computed(() =>\n usesCustomPivot.value\n ? (effectiveUnrotatedRect.value.origin.y - currentObject.value.rect.origin.y) * props.scale\n : (aabbHeight.value - innerHeight.value) / 2,\n);\nconst innerTransformOrigin = computed(() => {\n if (usesCustomPivot.value && rotationPivot.value) {\n return `${(rotationPivot.value.x - effectiveUnrotatedRect.value.origin.x) * props.scale}px ${(rotationPivot.value.y - effectiveUnrotatedRect.value.origin.y) * props.scale}px`;\n }\n return 'center center';\n});\nconst centerX = computed(() =>\n rotationPivot.value\n ? (rotationPivot.value.x - currentObject.value.rect.origin.x) * props.scale\n : aabbWidth.value / 2,\n);\nconst centerY = computed(() =>\n rotationPivot.value\n ? (rotationPivot.value.y - currentObject.value.rect.origin.y) * props.scale\n : aabbHeight.value / 2,\n);\nconst guideLength = computed(() => Math.max(300, Math.max(aabbWidth.value, aabbHeight.value) + 80));\nconst rotationIconSize = computed(() => Math.round(ROTATION_SIZE.value * 0.6));\n\nconst apActive = computed(\n () =>\n !!props.appearance?.normal &&\n !gestureActive.value &&\n !props.isEditing &&\n !props.trackedAnnotation.dictMode,\n);\n\n// ─── Extracted style computations ──────────────────────────────────────\nconst contentsStyle: CSSProperties = { display: 'contents' };\n\nconst outerAABBStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${currentObject.value.rect.origin.x * props.scale}px`,\n top: `${currentObject.value.rect.origin.y * props.scale}px`,\n width: `${aabbWidth.value}px`,\n height: `${aabbHeight.value}px`,\n pointerEvents: 'none',\n zIndex: props.zIndex,\n ...(props.style ?? {}),\n}));\n\nconst innerRotatedStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${innerLeft.value}px`,\n top: `${innerTop.value}px`,\n width: `${innerWidth.value}px`,\n height: `${innerHeight.value}px`,\n transform: annotationRotation.value !== 0 ? `rotate(${annotationRotation.value}deg)` : undefined,\n transformOrigin: innerTransformOrigin.value,\n outline: showOutline.value\n ? `${outlineWidth.value}px ${outlineStyle.value} ${outlineColor.value}`\n : 'none',\n outlineOffset: showOutline.value ? `${outlineOff.value}px` : '0px',\n pointerEvents: props.isSelected && !props.isMultiSelected ? 'auto' : 'none',\n touchAction: 'none',\n cursor: props.isSelected && effectiveIsDraggable.value ? 'move' : 'default',\n}));\n\nconst guideHorizontalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${centerX.value - guideLength.value / 2}px`,\n top: `${centerY.value}px`,\n width: `${guideLength.value}px`,\n height: '1px',\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideVerticalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${centerX.value}px`,\n top: `${centerY.value - guideLength.value / 2}px`,\n width: '1px',\n height: `${guideLength.value}px`,\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideAngleStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${centerX.value - guideLength.value / 2}px`,\n top: `${centerY.value}px`,\n width: `${guideLength.value}px`,\n height: '1px',\n transformOrigin: 'center center',\n transform: `rotate(${annotationRotation.value}deg)`,\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: 0.8,\n pointerEvents: 'none',\n}));\n\nconst connectorLineStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.connector.style ?? {}),\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: rotationActive.value ? 0 : 1,\n}));\n\nconst rotationHandleStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.handle.style ?? {}),\n backgroundColor: ROTATION_COLOR.value,\n border: `${ROTATION_BORDER_WIDTH.value}px ${ROTATION_BORDER_STYLE.value} ${ROTATION_BORDER_COLOR.value}`,\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'auto',\n opacity: rotationActive.value ? 0 : 1,\n}));\n\n// Event handlers from the rotation handle (without style - style is applied separately)\nconst rotationHandleBindings = computed(() => {\n if (!rotationHandleData.value) return {};\n const { style: _s, ...rest } = rotationHandleData.value.handle;\n return rest;\n});\n\nconst rotationHandleSlotProps = computed<RotationHandleSlotProps | Record<string, never>>(() => {\n if (!rotationHandleData.value) return {} as Record<string, never>;\n return {\n ...rotationHandleData.value.handle,\n backgroundColor: ROTATION_COLOR.value,\n iconColor: ROTATION_ICON_COLOR.value,\n connectorStyle: connectorLineStyle.value,\n showConnector: SHOW_CONNECTOR.value,\n opacity: rotationActive.value ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR.value,\n width: ROTATION_BORDER_WIDTH.value,\n style: ROTATION_BORDER_STYLE.value,\n },\n };\n});\n\nconst tooltipStyle = computed<CSSProperties>(() => ({\n position: 'fixed',\n left: cursorScreen.value ? `${cursorScreen.value.x + 16}px` : '0',\n top: cursorScreen.value ? `${cursorScreen.value.y - 16}px` : '0',\n background: 'rgba(0,0,0,0.8)',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n fontFamily: 'monospace',\n pointerEvents: 'none',\n zIndex: 10000,\n whiteSpace: 'nowrap',\n}));\n\n// Add useSlots to access slot information\nconst slots = useSlots();\n</script>\n","<template>\n <div v-if=\"selectedAnnotations.length >= 2\" data-group-selection-box data-no-interaction>\n <!-- Outer div: AABB container - stable center for guide lines and rotation handle -->\n <div :style=\"outerStyle\">\n <!-- Rotation guide lines - anchored at stable center -->\n <template v-if=\"rotationActive\">\n <div :style=\"guideHorizontalStyle\" />\n <div :style=\"guideVerticalStyle\" />\n <div :style=\"guideAngleStyle\" />\n </template>\n\n <!-- Rotation handle - orbits in AABB space -->\n <template v-if=\"effectiveIsRotatable && rotationHandleData\">\n <div\n @pointerenter=\"isHandleHovered = true\"\n @pointerleave=\"\n isHandleHovered = false;\n cursorScreen = null;\n \"\n @pointermove=\"onHandlePointerMove\"\n :style=\"contentsStyle\"\n >\n <!-- Connector line -->\n <div v-if=\"SHOW_CONNECTOR\" :style=\"connectorLineStyle\" />\n <!-- Rotation handle element -->\n <slot\n v-if=\"slots['rotation-handle']\"\n name=\"rotation-handle\"\n v-bind=\"rotationHandleSlotProps\"\n >\n <div v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </slot>\n <div v-else v-bind=\"rotationHandleBindings\" :style=\"rotationHandleStyle\">\n <svg\n :width=\"rotationIconSize\"\n :height=\"rotationIconSize\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n :stroke=\"ROTATION_ICON_COLOR\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </svg>\n </div>\n </div>\n </template>\n\n <!-- Inner div: group content area with outline and resize handles -->\n <div\n v-bind=\"\n effectiveIsDraggable\n ? dragProps\n : { onPointerdown: (e: PointerEvent) => e.stopPropagation() }\n \"\n :style=\"boxStyle\"\n >\n <!-- Resize handles -->\n <template v-if=\"effectiveIsResizable && !rotationActive\">\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 <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 </div>\n </div>\n\n <!-- Group selection menu -->\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=\"groupSelectionMenu\" :is=\"renderGroupMenu(rect, menuWrapperProps)\" />\n\n <!-- Priority 2: Slot (manual customization) -->\n <slot\n v-else\n name=\"group-selection-menu\"\n :context=\"menuContext\"\n :selected=\"true\"\n :rect=\"rect\"\n :placement=\"menuPlacement\"\n :menuWrapperProps=\"menuWrapperProps\"\n />\n </template>\n </CounterRotate>\n\n <!-- Cursor-following rotation tooltip - portaled to body to escape CSS transform chain -->\n <Teleport to=\"body\" v-if=\"(rotationActive || isHandleHovered) && cursorScreen\">\n <div :style=\"tooltipStyle\">{{ normalizedRotationDisplay.toFixed(0) }}°</div>\n </Teleport>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n computed,\n useSlots,\n type CSSProperties,\n type VNode,\n shallowRef,\n watch,\n Teleport,\n} from 'vue';\nimport { Rect, boundingRectOrEmpty } from '@embedpdf/models';\nimport {\n CounterRotate,\n MenuWrapperProps,\n SelectionMenuPlacement,\n useInteractionHandles,\n} from '@embedpdf/utils/vue';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { useDocumentPermissions } from '@embedpdf/core/vue';\nimport { useAnnotationPlugin } from '../hooks';\nimport {\n GroupSelectionContext,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n RotationHandleUI,\n RotationHandleSlotProps,\n SelectionOutline,\n} from '../types';\n\nconst props = withDefaults(\n defineProps<{\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n /** All selected annotations on this page */\n selectedAnnotations: TrackedAnnotation[];\n /** Whether the group is draggable (all annotations must be group-draggable) */\n isDraggable: boolean;\n /** Whether the group is resizable (all annotations must be group-resizable) */\n isResizable: boolean;\n /** Whether the group can be rotated */\n isRotatable?: boolean;\n /** Whether to lock aspect ratio during group resize */\n lockAspectRatio?: boolean;\n /** Resize handle UI customization */\n resizeUi?: ResizeHandleUI;\n /** Rotation handle UI customization */\n rotationUi?: RotationHandleUI;\n /** @deprecated Use `selectionOutline.color` instead */\n selectionOutlineColor?: string;\n /** @deprecated Use `selectionOutline.offset` instead */\n outlineOffset?: number;\n /** Customize the selection outline (color, style, width, offset) */\n selectionOutline?: SelectionOutline;\n /** Z-index for the group box */\n zIndex?: number;\n /** Group selection menu render function */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n }>(),\n {\n selectionOutlineColor: '#007ACC',\n outlineOffset: 2,\n zIndex: 100,\n isRotatable: true,\n lockAspectRatio: false,\n },\n);\n\nconst slots = useSlots();\nconst { plugin: annotationPlugin } = useAnnotationPlugin();\nconst permissions = useDocumentPermissions(() => props.documentId);\nconst gestureBase = shallowRef<Rect | null>(null);\nconst isDraggingRef = ref(false);\nconst isResizingRef = ref(false);\nconst liveRotation = ref<number | null>(null);\nconst cursorScreen = ref<{ x: number; y: number } | null>(null);\nconst isHandleHovered = ref(false);\n\n// Check permissions before allowing drag/resize/rotate\nconst effectiveIsDraggable = computed(\n () => permissions.value.canModifyAnnotations && props.isDraggable,\n);\nconst effectiveIsResizable = computed(\n () => permissions.value.canModifyAnnotations && props.isResizable,\n);\nconst effectiveIsRotatable = computed(\n () => permissions.value.canModifyAnnotations && props.isRotatable,\n);\n\n// UI constants\nconst HANDLE_COLOR = computed(() => props.resizeUi?.color ?? '#007ACC');\nconst HANDLE_SIZE = computed(() => props.resizeUi?.size ?? 12);\nconst ROTATION_SIZE = computed(() => props.rotationUi?.size ?? 32);\nconst ROTATION_COLOR = computed(() => props.rotationUi?.color ?? 'white');\nconst ROTATION_CONNECTOR_COLOR = computed(() => props.rotationUi?.connectorColor ?? '#007ACC');\nconst ROTATION_ICON_COLOR = computed(() => props.rotationUi?.iconColor ?? '#007ACC');\nconst SHOW_CONNECTOR = computed(() => props.rotationUi?.showConnector ?? false);\nconst ROTATION_MARGIN = computed(() => props.rotationUi?.margin);\nconst ROTATION_BORDER_COLOR = computed(() => props.rotationUi?.border?.color ?? '#007ACC');\nconst ROTATION_BORDER_WIDTH = computed(() => props.rotationUi?.border?.width ?? 1);\nconst ROTATION_BORDER_STYLE = computed(() => props.rotationUi?.border?.style ?? 'solid');\n\n// Outline resolution (new object > deprecated props > group defaults)\nconst outlineColor = computed(\n () => props.selectionOutline?.color ?? props.selectionOutlineColor ?? '#007ACC',\n);\nconst outlineStyleVal = computed(() => props.selectionOutline?.style ?? 'dashed');\nconst outlineWidth = computed(() => props.selectionOutline?.width ?? 2);\nconst outlineOff = computed(() => props.selectionOutline?.offset ?? props.outlineOffset ?? 2);\n\n// Rotation display\nconst groupRotationDisplay = computed(() => liveRotation.value ?? 0);\nconst rotationActive = computed(() => liveRotation.value !== null);\nconst normalizedRotationDisplay = computed(() => {\n const val = groupRotationDisplay.value;\n return Number.isFinite(val) ? Math.round(val * 10) / 10 : 0;\n});\nconst rotationIconSize = computed(() => Math.round(ROTATION_SIZE.value * 0.6));\n\n// Compute the group bounding box from all selected annotations\nconst groupBox = computed(() => {\n const rects = props.selectedAnnotations.map((ta) => ta.object.rect);\n return boundingRectOrEmpty(rects);\n});\n\n// Preview state for the group box during drag/resize\nconst previewGroupBox = shallowRef<Rect>(groupBox.value);\n\n// Watch for groupBox changes and sync previewGroupBox when not dragging/resizing\nwatch(\n () => groupBox.value,\n (newGroupBox) => {\n if (!isDraggingRef.value && !isResizingRef.value) {\n previewGroupBox.value = newGroupBox;\n }\n },\n { immediate: true },\n);\n\n// Subscribe to rotation end/cancel events\nwatch(\n () => annotationPlugin.value,\n (plugin, _old, onCleanup) => {\n if (!plugin) return;\n const unsub = plugin.onRotateChange((event: { documentId: string; type: string }) => {\n if (event.documentId !== props.documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation.value = null;\n }\n });\n onCleanup(unsub);\n },\n { immediate: true },\n);\n\n// Layout computations\nconst groupBoxWidth = computed(() => previewGroupBox.value.size.width * props.scale);\nconst groupBoxHeight = computed(() => previewGroupBox.value.size.height * props.scale);\nconst groupCenterX = computed(() => groupBoxWidth.value / 2);\nconst groupCenterY = computed(() => groupBoxHeight.value / 2);\nconst groupGuideLength = computed(() =>\n Math.max(300, Math.max(groupBoxWidth.value, groupBoxHeight.value) + 80),\n);\n\n// ─── Extracted style computations ──────────────────────────────────────\nconst contentsStyle: CSSProperties = { display: 'contents' };\n\nconst outerStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${previewGroupBox.value.origin.x * props.scale}px`,\n top: `${previewGroupBox.value.origin.y * props.scale}px`,\n width: `${groupBoxWidth.value}px`,\n height: `${groupBoxHeight.value}px`,\n pointerEvents: 'none',\n zIndex: props.zIndex,\n}));\n\nconst boxStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: 0,\n top: 0,\n width: `${groupBoxWidth.value}px`,\n height: `${groupBoxHeight.value}px`,\n outline: rotationActive.value\n ? 'none'\n : `${outlineWidth.value}px ${outlineStyleVal.value} ${outlineColor.value}`,\n outlineOffset: `${outlineOff.value - 1}px`,\n cursor: effectiveIsDraggable.value ? 'move' : 'default',\n touchAction: 'none',\n pointerEvents: 'auto',\n}));\n\nconst guideHorizontalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${groupCenterX.value - groupGuideLength.value / 2}px`,\n top: `${groupCenterY.value}px`,\n width: `${groupGuideLength.value}px`,\n height: '1px',\n backgroundColor: HANDLE_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideVerticalStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${groupCenterX.value}px`,\n top: `${groupCenterY.value - groupGuideLength.value / 2}px`,\n width: '1px',\n height: `${groupGuideLength.value}px`,\n backgroundColor: HANDLE_COLOR.value,\n opacity: 0.35,\n pointerEvents: 'none',\n}));\n\nconst guideAngleStyle = computed<CSSProperties>(() => ({\n position: 'absolute',\n left: `${groupCenterX.value - groupGuideLength.value / 2}px`,\n top: `${groupCenterY.value}px`,\n width: `${groupGuideLength.value}px`,\n height: '1px',\n transformOrigin: 'center center',\n transform: `rotate(${groupRotationDisplay.value}deg)`,\n backgroundColor: HANDLE_COLOR.value,\n opacity: 0.8,\n pointerEvents: 'none',\n}));\n\nconst connectorLineStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.connector.style ?? {}),\n backgroundColor: ROTATION_CONNECTOR_COLOR.value,\n opacity: rotationActive.value ? 0 : 1,\n}));\n\nconst rotationHandleStyle = computed<CSSProperties>(() => ({\n ...(rotationHandleData.value?.handle.style ?? {}),\n backgroundColor: ROTATION_COLOR.value,\n border: `${ROTATION_BORDER_WIDTH.value}px ${ROTATION_BORDER_STYLE.value} ${ROTATION_BORDER_COLOR.value}`,\n boxSizing: 'border-box',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'auto',\n opacity: rotationActive.value ? 0 : 1,\n}));\n\nconst rotationHandleBindings = computed(() => {\n if (!rotationHandleData.value) return {};\n const { style: _s, ...rest } = rotationHandleData.value.handle;\n return rest;\n});\n\nconst rotationHandleSlotProps = computed<RotationHandleSlotProps | Record<string, never>>(() => {\n if (!rotationHandleData.value) return {} as Record<string, never>;\n return {\n ...rotationHandleData.value.handle,\n backgroundColor: ROTATION_COLOR.value,\n iconColor: ROTATION_ICON_COLOR.value,\n connectorStyle: connectorLineStyle.value,\n showConnector: SHOW_CONNECTOR.value,\n opacity: rotationActive.value ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR.value,\n width: ROTATION_BORDER_WIDTH.value,\n style: ROTATION_BORDER_STYLE.value,\n },\n };\n});\n\nconst tooltipStyle = computed<CSSProperties>(() => ({\n position: 'fixed',\n left: cursorScreen.value ? `${cursorScreen.value.x + 16}px` : '0',\n top: cursorScreen.value ? `${cursorScreen.value.y - 16}px` : '0',\n background: 'rgba(0,0,0,0.8)',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n fontFamily: 'monospace',\n pointerEvents: 'none',\n zIndex: 10000,\n whiteSpace: 'nowrap',\n}));\n\n// Menu rect for counter-rotate component\nconst menuRect = computed<Rect>(() => ({\n origin: {\n x: previewGroupBox.value.origin.x * props.scale,\n y: previewGroupBox.value.origin.y * props.scale,\n },\n size: {\n width: previewGroupBox.value.size.width * props.scale,\n height: previewGroupBox.value.size.height * props.scale,\n },\n}));\n\n// Menu context\nconst menuContext = computed<GroupSelectionContext>(() => ({\n type: 'group',\n annotations: props.selectedAnnotations,\n pageIndex: props.pageIndex,\n}));\n\n// Placement hints - calculate suggestTop based on rotation handle position\nconst menuPlacement = computed<SelectionMenuPlacement>(() => {\n const effectiveAngle = (((groupRotationDisplay.value + props.rotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide =\n effectiveIsRotatable.value && effectiveAngle > 90 && effectiveAngle < 270;\n return {\n suggestTop: handleNearMenuSide,\n };\n});\n\n// Check if we should show menu\nconst shouldShowMenu = computed(() => {\n return props.groupSelectionMenu || slots['group-selection-menu'];\n});\n\n// Render menu via function\nconst renderGroupMenu = (rect: Rect, menuWrapperProps: MenuWrapperProps): VNode | null => {\n if (!props.groupSelectionMenu) return null;\n\n return props.groupSelectionMenu({\n rect,\n menuWrapperProps,\n selected: true,\n placement: menuPlacement.value,\n context: menuContext.value,\n });\n};\n\n// Handle pointer move on the rotation handle wrapper (for cursor tooltip when not rotating)\nconst onHandlePointerMove = (e: PointerEvent) => {\n if (!rotationActive.value) {\n cursorScreen.value = { x: e.clientX, y: e.clientY };\n }\n};\n\n// Element snapshot for interaction handles\nconst elementSnapshot = computed(() => previewGroupBox.value);\n\n// Constraints\nconst constraintsSnapshot = computed(() => ({\n minWidth: 20,\n minHeight: 20,\n boundingBox: {\n width: props.pageWidth,\n height: props.pageHeight,\n },\n}));\n\n// Use interaction handles for drag, resize, and rotation\nconst {\n dragProps,\n resize,\n rotation: rotationHandleData,\n} = useInteractionHandles({\n controller: {\n element: elementSnapshot,\n vertices: computed(() => []),\n constraints: constraintsSnapshot,\n maintainAspectRatio: computed(() => props.lockAspectRatio),\n pageRotation: computed(() => props.rotation),\n scale: computed(() => props.scale),\n enabled: computed(() => true),\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n if (!annotationPlugin.value) return;\n\n const plugin = annotationPlugin.value;\n const transformType = event.transformData.type;\n const isMove = transformType === 'move';\n const isResize = transformType === 'resize';\n\n // Skip drag operations if group is not draggable\n if (isMove && !effectiveIsDraggable.value) return;\n\n if (event.state === 'start') {\n gestureBase.value = groupBox.value;\n\n if (isMove) {\n isDraggingRef.value = true;\n plugin.startDrag(props.documentId, {\n annotationIds: props.selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: props.pageWidth, height: props.pageHeight },\n });\n } else if (isResize) {\n isResizingRef.value = true;\n plugin.startResize(props.documentId, {\n annotationIds: props.selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: props.pageWidth, height: props.pageHeight },\n resizeHandle: event.transformData.metadata?.handle ?? 'se',\n });\n }\n }\n\n // Handle rotation\n if (transformType === 'rotate') {\n if (!props.isRotatable) return;\n const ids = props.selectedAnnotations.map((ta) => ta.object.id);\n const cursorAngle = event.transformData.metadata?.rotationAngle ?? 0;\n const cursorPos = event.transformData.metadata?.cursorPosition;\n if (cursorPos) cursorScreen.value = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation.value = cursorAngle;\n plugin.startRotation(props.documentId, {\n annotationIds: ids,\n cursorAngle,\n rotationCenter: event.transformData.metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation.value = cursorAngle;\n plugin.updateRotation(\n props.documentId,\n cursorAngle,\n event.transformData.metadata?.rotationDelta,\n );\n } else if (event.state === 'end') {\n liveRotation.value = null;\n cursorScreen.value = null;\n plugin.commitRotation(props.documentId);\n }\n return;\n }\n\n const base = gestureBase.value ?? groupBox.value;\n\n if (isMove && event.transformData.changes.rect) {\n const newRect = event.transformData.changes.rect;\n const rawDelta = {\n x: newRect.origin.x - base.origin.x,\n y: newRect.origin.y - base.origin.y,\n };\n\n const clampedDelta = plugin.updateDrag(props.documentId, rawDelta);\n\n previewGroupBox.value = {\n ...base,\n origin: {\n x: base.origin.x + clampedDelta.x,\n y: base.origin.y + clampedDelta.y,\n },\n };\n } else if (isResize && event.transformData.changes.rect) {\n const newGroupBox = event.transformData.changes.rect;\n plugin.updateResize(props.documentId, newGroupBox);\n previewGroupBox.value = newGroupBox;\n }\n\n if (event.state === 'end') {\n gestureBase.value = null;\n\n if (isMove && isDraggingRef.value) {\n isDraggingRef.value = false;\n plugin.commitDrag(props.documentId);\n } else if (isResize && isResizingRef.value) {\n isResizingRef.value = false;\n plugin.commitResize(props.documentId);\n }\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE.value,\n spacing: outlineOff.value,\n offsetMode: 'outside',\n includeSides: !props.lockAspectRatio,\n zIndex: props.zIndex + 1,\n },\n vertexUI: {\n vertexSize: 0,\n zIndex: props.zIndex,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE.value,\n margin: ROTATION_MARGIN.value,\n zIndex: props.zIndex + 2,\n showConnector: SHOW_CONNECTOR.value,\n },\n includeVertices: false,\n includeRotation: effectiveIsRotatable,\n currentRotation: computed(() => liveRotation.value ?? 0),\n});\n</script>\n","import {\n inject,\n provide,\n markRaw,\n onUnmounted,\n shallowRef,\n type InjectionKey,\n type ShallowRef,\n type Component,\n type CSSProperties,\n} from 'vue';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationRendererEntry,\n AnnotationRendererProps,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from './types';\nimport type { PdfAnnotationObject } from '@embedpdf/models';\nimport type { VertexConfig } from '../../shared/types';\n\n/**\n * Annotation Renderer Registry\n *\n * Allows external plugins to register custom annotation renderers\n * that integrate with the annotation layer.\n */\nexport interface AnnotationRendererRegistry {\n register(entries: BoxedAnnotationRenderer[]): () => void;\n getAll(): BoxedAnnotationRenderer[];\n}\n\nconst RendererRegistryKey: InjectionKey<AnnotationRendererRegistry> = Symbol(\n 'AnnotationRendererRegistry',\n);\n\nexport function createRendererRegistry(): AnnotationRendererRegistry {\n const renderers: ShallowRef<BoxedAnnotationRenderer[]> = shallowRef([]);\n\n return {\n register(entries: BoxedAnnotationRenderer[]) {\n const ids = new Set(entries.map((e) => e.id));\n renderers.value = [...renderers.value.filter((r) => !ids.has(r.id)), ...entries];\n return () => {\n renderers.value = renderers.value.filter((r) => !entries.some((e) => e.id === r.id));\n };\n },\n getAll() {\n return renderers.value;\n },\n };\n}\n\nexport function provideRendererRegistry(): AnnotationRendererRegistry {\n const registry = createRendererRegistry();\n provide(RendererRegistryKey, registry);\n return registry;\n}\n\nexport function useRendererRegistry(): AnnotationRendererRegistry | null {\n return inject(RendererRegistryKey, null);\n}\n\n/**\n * Composable for plugins to register renderers.\n * Automatically cleans up on unmount.\n */\nexport function useRegisterRenderers(entries: BoxedAnnotationRenderer[]) {\n const registry = useRendererRegistry();\n if (!registry) return;\n\n const unregister = registry.register(entries);\n onUnmounted(unregister);\n}\n\n/**\n * Factory to create a boxed renderer from a typed entry.\n * Wraps component in markRaw to prevent reactivity overhead.\n */\nexport function createRenderer<T extends PdfAnnotationObject>(\n entry: AnnotationRendererEntry<T>,\n): BoxedAnnotationRenderer {\n return {\n id: entry.id,\n matches: entry.matches,\n component: markRaw(entry.component) as Component<AnnotationRendererProps>,\n vertexConfig: entry.vertexConfig as VertexConfig<PdfAnnotationObject> | undefined,\n zIndex: entry.zIndex,\n containerStyle: entry.containerStyle as\n | ((annotation: PdfAnnotationObject) => CSSProperties)\n | undefined,\n interactionDefaults: entry.interactionDefaults,\n useAppearanceStream: entry.useAppearanceStream,\n isDraggable: entry.isDraggable,\n onDoubleClick: entry.onDoubleClick,\n selectOverride: entry.selectOverride as BoxedAnnotationRenderer['selectOverride'],\n hideSelectionMenu: entry.hideSelectionMenu as\n | ((annotation: PdfAnnotationObject) => boolean)\n | undefined,\n };\n}\n\n// Re-export types for convenience\nexport type {\n AnnotationRendererProps,\n AnnotationRendererEntry,\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n};\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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <path\n v-for=\"(d, i) in paths\"\n :key=\"`hit-${i}`\"\n :d=\"d\"\n fill=\"none\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n }\"\n />\n <!-- Visual -- hidden when AP active, never interactive -->\n <template v-if=\"!appearanceActive\">\n <path\n v-for=\"(d, i) in paths\"\n :key=\"`vis-${i}`\"\n :d=\"d\"\n fill=\"none\"\n :opacity=\"opacity\"\n :style=\"{\n pointerEvents: 'none',\n stroke: resolvedColor,\n strokeWidth: strokeWidth,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n }\"\n />\n </template>\n </svg>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfInkListObject, Rect } from '@embedpdf/models';\n\nconst MIN_HIT_AREA_SCREEN_PX = 20;\n\nconst props = withDefaults(\n defineProps<{\n isSelected: boolean;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n appearanceActive?: boolean;\n }>(),\n {\n opacity: 1,\n appearanceActive: false,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#000000');\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);\nconst hitStrokeWidth = computed(() =>\n Math.max(props.strokeWidth, MIN_HIT_AREA_SCREEN_PX / props.scale),\n);\n</script>\n","<template>\n <InkVue\n v-bind=\"currentObject\"\n :isSelected=\"isSelected\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfInkAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport InkVue from '../annotations/ink.vue';\n\nconst { currentObject, isSelected, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfInkAnnoObject>>();\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 overflow=\"visible\"\n >\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <rect\n :x=\"geometry.x\"\n :y=\"geometry.y\"\n :width=\"geometry.width\"\n :height=\"geometry.height\"\n fill=\"transparent\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n }\"\n />\n <!-- Visual -- hidden when AP active, never interactive -->\n <rect\n v-if=\"!appearanceActive\"\n :x=\"geometry.x\"\n :y=\"geometry.y\"\n :width=\"geometry.width\"\n :height=\"geometry.height\"\n :fill=\"color\"\n :opacity=\"opacity\"\n :style=\"{\n pointerEvents: 'none',\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 lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfAnnotationBorderStyle, Rect } from '@embedpdf/models';\n\nconst MIN_HIT_AREA_SCREEN_PX = 20;\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 appearanceActive?: boolean;\n }>(),\n {\n color: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n appearanceActive: false,\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);\nconst hitStrokeWidth = computed(() =>\n Math.max(props.strokeWidth, MIN_HIT_AREA_SCREEN_PX / props.scale),\n);\n</script>\n","<template>\n <SquareVue\n v-bind=\"currentObject\"\n :isSelected=\"isSelected\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfSquareAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport SquareVue from '../annotations/square.vue';\n\nconst { currentObject, isSelected, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfSquareAnnoObject>>();\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 overflow=\"visible\"\n >\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <ellipse\n :cx=\"geometry.cx\"\n :cy=\"geometry.cy\"\n :rx=\"geometry.rx\"\n :ry=\"geometry.ry\"\n fill=\"transparent\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n }\"\n />\n <!-- Visual -- hidden when AP active, never interactive -->\n <ellipse\n v-if=\"!appearanceActive\"\n :cx=\"geometry.cx\"\n :cy=\"geometry.cy\"\n :rx=\"geometry.rx\"\n :ry=\"geometry.ry\"\n :fill=\"color\"\n :opacity=\"opacity\"\n :style=\"{\n pointerEvents: 'none',\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 lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfAnnotationBorderStyle, Rect } from '@embedpdf/models';\n\nconst MIN_HIT_AREA_SCREEN_PX = 20;\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 appearanceActive?: boolean;\n }>(),\n {\n color: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n appearanceActive: false,\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: 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);\nconst hitStrokeWidth = computed(() =>\n Math.max(props.strokeWidth, MIN_HIT_AREA_SCREEN_PX / props.scale),\n);\n</script>\n","<template>\n <CircleVue\n v-bind=\"currentObject\"\n :isSelected=\"isSelected\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfCircleAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport CircleVue from '../annotations/circle.vue';\n\nconst { currentObject, isSelected, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfCircleAnnoObject>>();\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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <line\n :x1=\"localLine.x1\"\n :y1=\"localLine.y1\"\n :x2=\"localLine.x2\"\n :y2=\"localLine.y2\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : 'visibleStroke',\n strokeLinecap: 'butt',\n }\"\n />\n <path\n v-if=\"endings.start\"\n :d=\"endings.start.d\"\n :transform=\"endings.start.transform\"\n fill=\"transparent\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : endings.start.filled ? 'visible' : 'visibleStroke',\n strokeLinecap: 'butt',\n }\"\n />\n <path\n v-if=\"endings.end\"\n :d=\"endings.end.d\"\n :transform=\"endings.end.transform\"\n fill=\"transparent\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke',\n strokeLinecap: 'butt',\n }\"\n />\n\n <!-- Visual -- hidden when AP active, never interactive -->\n <template v-if=\"!appearanceActive\">\n <line\n :x1=\"localLine.x1\"\n :y1=\"localLine.y1\"\n :x2=\"localLine.x2\"\n :y2=\"localLine.y2\"\n :opacity=\"opacity\"\n :style=\"{\n pointerEvents: 'none',\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 :stroke=\"strokeColor\"\n :fill=\"endings.start.filled ? color : 'none'\"\n :style=\"{\n pointerEvents: 'none',\n strokeWidth: strokeWidth,\n strokeLinecap: 'butt',\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\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 :style=\"{\n pointerEvents: 'none',\n strokeWidth: strokeWidth,\n strokeLinecap: 'butt',\n ...(strokeStyle === PdfAnnotationBorderStyle.DASHED && {\n strokeDasharray: strokeDashArray?.join(','),\n }),\n }\"\n />\n </template>\n </svg>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\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 MIN_HIT_AREA_SCREEN_PX = 20;\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 appearanceActive?: boolean;\n }>(),\n {\n color: 'transparent',\n opacity: 1,\n strokeColor: '#000000',\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n appearanceActive: false,\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 width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\nconst hitStrokeWidth = computed(() =>\n Math.max(props.strokeWidth, MIN_HIT_AREA_SCREEN_PX / props.scale),\n);\n</script>\n","<template>\n <LineVue\n v-bind=\"currentObject\"\n :isSelected=\"isSelected\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfLineAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport LineVue from '../annotations/line.vue';\n\nconst { currentObject, isSelected, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfLineAnnoObject>>();\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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <path\n :d=\"pathData\"\n fill=\"none\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\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 fill=\"transparent\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : endings.start.filled ? 'visible' : 'visibleStroke',\n strokeLinecap: 'butt',\n }\"\n />\n <path\n v-if=\"endings.end\"\n :d=\"endings.end.d\"\n :transform=\"endings.end.transform\"\n fill=\"transparent\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : endings.end.filled ? 'visible' : 'visibleStroke',\n strokeLinecap: 'butt',\n }\"\n />\n\n <!-- Visual -- hidden when AP active, never interactive -->\n <template v-if=\"!appearanceActive\">\n <path\n :d=\"pathData\"\n :opacity=\"opacity\"\n :style=\"{\n fill: 'none',\n stroke: strokeColor ?? color,\n strokeWidth,\n pointerEvents: 'none',\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 :style=\"{\n pointerEvents: 'none',\n strokeWidth,\n strokeLinecap: 'butt',\n }\"\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 :style=\"{\n pointerEvents: 'none',\n strokeWidth,\n strokeLinecap: 'butt',\n }\"\n />\n </template>\n </svg>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\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 MIN_HIT_AREA_SCREEN_PX = 20;\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 appearanceActive?: boolean;\n }>(),\n {\n color: 'transparent',\n strokeColor: '#000000',\n opacity: 1,\n appearanceActive: false,\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 width = computed(() => props.rect.size.width * props.scale);\nconst height = computed(() => props.rect.size.height * props.scale);\nconst hitStrokeWidth = computed(() =>\n Math.max(props.strokeWidth, MIN_HIT_AREA_SCREEN_PX / props.scale),\n);\n</script>\n","<template>\n <PolylineVue\n v-bind=\"currentObject\"\n :isSelected=\"isSelected\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfPolylineAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport PolylineVue from '../annotations/polyline.vue';\n\nconst { currentObject, isSelected, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfPolylineAnnoObject>>();\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 <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <path\n :d=\"pathData\"\n fill=\"transparent\"\n stroke=\"transparent\"\n :stroke-width=\"hitStrokeWidth\"\n @pointerdown=\"onClick\"\n @touchstart=\"onClick\"\n :style=\"{\n cursor: isSelected ? 'move' : 'pointer',\n pointerEvents: isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n strokeLinecap: 'butt',\n strokeLinejoin: 'miter',\n }\"\n />\n\n <!-- Visual -- hidden when AP active, never interactive -->\n <template v-if=\"!appearanceActive\">\n <path\n :d=\"pathData\"\n :opacity=\"opacity\"\n :style=\"{\n fill: currentVertex ? 'none' : color,\n stroke: strokeColor ?? color,\n strokeWidth,\n pointerEvents: 'none',\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 pointerEvents: 'none',\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 style=\"pointer-events: none\"\n />\n </template>\n </svg>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect, Position, PdfAnnotationBorderStyle } from '@embedpdf/models';\n\nconst MIN_HIT_AREA_SCREEN_PX = 20;\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 appearanceActive?: boolean;\n }>(),\n {\n color: 'transparent',\n strokeColor: '#000000',\n opacity: 1,\n strokeStyle: PdfAnnotationBorderStyle.SOLID,\n handleSize: 14,\n appearanceActive: false,\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);\nconst hitStrokeWidth = computed(() =>\n Math.max(props.strokeWidth, MIN_HIT_AREA_SCREEN_PX / props.scale),\n);\n</script>\n","<template>\n <PolygonVue\n v-bind=\"currentObject\"\n :isSelected=\"isSelected\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfPolygonAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport PolygonVue from '../annotations/polygon.vue';\n\nconst { currentObject, isSelected, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfPolygonAnnoObject>>();\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 opacity: appearanceActive ? 0 : 1,\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 lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, watch, computed, onMounted } from 'vue';\nimport {\n PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCssProperties,\n textAlignmentToCss,\n} from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { useAnnotationCapability } from '../../hooks';\n\nconst props = withDefaults(\n defineProps<{\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n appearanceActive?: boolean;\n }>(),\n {\n appearanceActive: false,\n },\n);\n\nconst editorRef = ref<HTMLSpanElement | null>(null);\nconst editingRef = ref(false);\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst annotationProvides = computed(\n () => annotationCapability.value?.forDocument(props.documentId) ?? null,\n);\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 editingRef.value = true;\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 (!editingRef.value) return;\n editingRef.value = false;\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 ...standardFontCssProperties(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.color ?? 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 <FreeTextVue\n :documentId=\"documentId\"\n :isSelected=\"isSelected\"\n :isEditing=\"isEditing\"\n :annotation=\"{ ...annotation, object: currentObject }\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfFreeTextAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport FreeTextVue from '../annotations/free-text.vue';\n\nconst {\n annotation,\n currentObject,\n isSelected,\n isEditing,\n scale,\n pageIndex,\n documentId,\n onClick,\n appearanceActive,\n} = defineProps<AnnotationRendererProps<PdfFreeTextAnnoObject>>();\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 unrotated?: boolean;\n style?: CSSProperties;\n }>(),\n {\n scaleFactor: 1,\n unrotated: false,\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.unrotated,\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 unrotated: props.unrotated,\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 :unrotated=\"unrotated\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfStampAnnoObject } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport RenderAnnotation from '../render-annotation.vue';\n\nconst props = defineProps<{\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n documentId: string;\n pageIndex: number;\n scale: number;\n onClick: (e: PointerEvent | TouchEvent) => void;\n}>();\n\nconst unrotated = computed(\n () => !!props.annotation.object.rotation && !!props.annotation.object.unrotatedRect,\n);\n</script>\n","<template>\n <StampVue\n :isSelected=\"isSelected\"\n :annotation=\"annotation\"\n :documentId=\"documentId\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfStampAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport StampVue from '../annotations/stamp.vue';\n\nconst { annotation, isSelected, documentId, pageIndex, scale, onClick } =\n defineProps<AnnotationRendererProps<PdfStampAnnoObject>>();\n</script>\n","<template>\n <svg\n :style=\"{\n position: 'absolute',\n width: `${svgWidth}px`,\n height: `${svgHeight}px`,\n pointerEvents: 'none',\n zIndex: 2,\n }\"\n :width=\"svgWidth\"\n :height=\"svgHeight\"\n :viewBox=\"`0 0 ${width} ${height}`\"\n >\n <!-- Invisible hit area for the entire link region -->\n <!-- IRT links are not directly clickable - interaction goes through parent -->\n <rect\n :x=\"0\"\n :y=\"0\"\n :width=\"width\"\n :height=\"height\"\n fill=\"transparent\"\n @pointerdown=\"hasIRT ? undefined : onClick\"\n @touchstart=\"hasIRT ? undefined : onClick\"\n :style=\"{\n cursor: hitAreaCursor,\n pointerEvents: hitAreaPointerEvents,\n }\"\n />\n\n <!-- Underline style: line at bottom of rect -->\n <line\n v-if=\"isUnderline\"\n :x1=\"1\"\n :y1=\"height - 1\"\n :x2=\"width - 1\"\n :y2=\"height - 1\"\n :stroke=\"strokeColor\"\n :stroke-width=\"strokeWidth\"\n :stroke-dasharray=\"dashArray\"\n style=\"pointer-events: none\"\n />\n\n <!-- Solid/Dashed style: rectangle border -->\n <rect\n v-else\n :x=\"strokeWidth / 2\"\n :y=\"strokeWidth / 2\"\n :width=\"Math.max(width - strokeWidth, 0)\"\n :height=\"Math.max(height - strokeWidth, 0)\"\n fill=\"transparent\"\n :stroke=\"strokeColor\"\n :stroke-width=\"strokeWidth\"\n :stroke-dasharray=\"dashArray\"\n style=\"pointer-events: none\"\n />\n </svg>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { PdfAnnotationBorderStyle, Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n /** Whether the annotation is selected */\n isSelected: boolean;\n /** Stroke colour – defaults to blue when omitted */\n strokeColor?: string;\n /** Stroke width in PDF units */\n strokeWidth?: number;\n /** Stroke type – defaults to underline when omitted */\n strokeStyle?: PdfAnnotationBorderStyle;\n /** Stroke dash array – for dashed style */\n strokeDashArray?: number[];\n /** Bounding box of the annotation (PDF units) */\n rect: Rect;\n /** Current page zoom factor */\n scale: number;\n /** Click handler (used for selection) */\n onClick?: (e: PointerEvent | MouseEvent | TouchEvent) => void;\n /** Whether this link has an IRT (In Reply To) reference - disables direct interaction */\n hasIRT?: boolean;\n }>(),\n {\n strokeColor: '#0000FF',\n strokeWidth: 2,\n strokeStyle: PdfAnnotationBorderStyle.UNDERLINE,\n hasIRT: false,\n },\n);\n\nconst width = computed(() => props.rect.size.width);\nconst height = computed(() => props.rect.size.height);\nconst svgWidth = computed(() => width.value * props.scale);\nconst svgHeight = computed(() => height.value * props.scale);\n\n// Calculate dash array for SVG\nconst dashArray = computed(() => {\n if (props.strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n return props.strokeDashArray?.join(',') ?? `${props.strokeWidth * 3},${props.strokeWidth}`;\n }\n return undefined;\n});\n\n// For underline style, render a line at the bottom\n// For solid/dashed, render a rectangle border\nconst isUnderline = computed(() => props.strokeStyle === PdfAnnotationBorderStyle.UNDERLINE);\n\nconst hitAreaCursor = computed(() =>\n props.hasIRT ? 'default' : props.isSelected ? 'move' : 'pointer',\n);\nconst hitAreaPointerEvents = computed(() =>\n props.hasIRT ? 'none' : props.isSelected ? 'none' : 'visible',\n);\n</script>\n","<template>\n <LinkVue\n v-bind=\"currentObject\"\n :isSelected=\"isSelected\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :hasIRT=\"!!currentObject.inReplyToId\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfLinkAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport LinkVue from '../annotations/link.vue';\n\nconst { currentObject, isSelected, scale, onClick } =\n defineProps<AnnotationRendererProps<PdfLinkAnnoObject>>();\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: appearanceActive ? 'transparent' : resolvedColor,\n opacity: appearanceActive ? undefined : opacity,\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : undefined,\n }\"\n ></div>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }>(),\n {\n opacity: 0.5,\n appearanceActive: false,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\n</script>\n","<template>\n <HighlightVue\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfHighlightAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport HighlightVue from '../text-markup/highlight.vue';\n\nconst { currentObject, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfHighlightAnnoObject>>();\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 <!-- Visual -- hidden when AP active, never interactive -->\n <div\n v-if=\"!appearanceActive\"\n :style=\"{\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n height: `${thickness}px`,\n background: resolvedColor,\n opacity: opacity,\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }>(),\n {\n opacity: 0.5,\n appearanceActive: false,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\nconst thickness = computed(() => 2 * props.scale);\n</script>\n","<template>\n <UnderlineVue\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfUnderlineAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport UnderlineVue from '../text-markup/underline.vue';\n\nconst { currentObject, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfUnderlineAnnoObject>>();\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 <!-- Visual -- hidden when AP active, never interactive -->\n <div\n v-if=\"!appearanceActive\"\n :style=\"{\n position: 'absolute',\n left: 0,\n top: '50%',\n width: '100%',\n height: `${thickness}px`,\n background: resolvedColor,\n opacity: opacity,\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n }\"\n />\n </div>\n</template>\n\n<script lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }>(),\n {\n opacity: 0.5,\n appearanceActive: false,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\nconst thickness = computed(() => 2 * props.scale);\n</script>\n","<template>\n <StrikeoutVue\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfStrikeOutAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport StrikeoutVue from '../text-markup/strikeout.vue';\n\nconst { currentObject, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfStrikeOutAnnoObject>>();\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 <!-- Visual -- hidden when AP active, never interactive -->\n <div\n v-if=\"!appearanceActive\"\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 lang=\"ts\">\nexport default { inheritAttrs: false };\n</script>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { Rect } from '@embedpdf/models';\n\nconst props = withDefaults(\n defineProps<{\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: PointerEvent | TouchEvent) => void;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }>(),\n {\n opacity: 0.5,\n appearanceActive: false,\n },\n);\n\nconst resolvedColor = computed(() => props.strokeColor ?? '#FFFF00');\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=\"${resolvedColor.value}\" stroke-width=\"${amp}\" stroke-linecap=\"round\"/>\n </svg>`;\n return `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n});\n</script>\n","<template>\n <SquigglyVue\n v-bind=\"currentObject\"\n :scale=\"scale\"\n :onClick=\"onClick\"\n :appearanceActive=\"appearanceActive\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { PdfSquigglyAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '../../context/types';\nimport SquigglyVue from '../text-markup/squiggly.vue';\n\nconst { currentObject, scale, onClick, appearanceActive } =\n defineProps<AnnotationRendererProps<PdfSquigglyAnnoObject>>();\n</script>\n","import {\n PdfAnnotationSubtype,\n PdfBlendMode,\n PdfInkAnnoObject,\n PdfSquareAnnoObject,\n PdfCircleAnnoObject,\n PdfLineAnnoObject,\n PdfPolylineAnnoObject,\n PdfPolygonAnnoObject,\n PdfFreeTextAnnoObject,\n PdfStampAnnoObject,\n PdfLinkAnnoObject,\n PdfHighlightAnnoObject,\n PdfUnderlineAnnoObject,\n PdfStrikeOutAnnoObject,\n PdfSquigglyAnnoObject,\n blendModeToCss,\n} from '@embedpdf/models';\nimport type { CSSProperties } from 'vue';\nimport type { BoxedAnnotationRenderer } from '../context';\nimport { createRenderer } from '../context/renderer-registry';\n\nimport InkRenderer from './renderers/ink-renderer.vue';\nimport SquareRenderer from './renderers/square-renderer.vue';\nimport CircleRenderer from './renderers/circle-renderer.vue';\nimport LineRenderer from './renderers/line-renderer.vue';\nimport PolylineRenderer from './renderers/polyline-renderer.vue';\nimport PolygonRenderer from './renderers/polygon-renderer.vue';\nimport FreeTextRenderer from './renderers/free-text-renderer.vue';\nimport StampRenderer from './renderers/stamp-renderer.vue';\nimport LinkRenderer from './renderers/link-renderer.vue';\nimport HighlightRenderer from './renderers/highlight-renderer.vue';\nimport UnderlineRenderer from './renderers/underline-renderer.vue';\nimport StrikeoutRenderer from './renderers/strikeout-renderer.vue';\nimport SquigglyRenderer from './renderers/squiggly-renderer.vue';\n\nexport const builtInRenderers: BoxedAnnotationRenderer[] = [\n createRenderer<PdfInkAnnoObject>({\n id: 'ink',\n matches: (a): a is PdfInkAnnoObject => a.type === PdfAnnotationSubtype.INK,\n component: InkRenderer,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfSquareAnnoObject>({\n id: 'square',\n matches: (a): a is PdfSquareAnnoObject => a.type === PdfAnnotationSubtype.SQUARE,\n component: SquareRenderer,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfCircleAnnoObject>({\n id: 'circle',\n matches: (a): a is PdfCircleAnnoObject => a.type === PdfAnnotationSubtype.CIRCLE,\n component: CircleRenderer,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLineAnnoObject>({\n id: 'line',\n matches: (a): a is PdfLineAnnoObject => a.type === PdfAnnotationSubtype.LINE,\n component: LineRenderer,\n vertexConfig: {\n extractVertices: (a) => [a.linePoints.start, a.linePoints.end],\n transformAnnotation: (a, v) => ({\n ...a,\n linePoints: { start: v[0], end: v[1] },\n }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfPolylineAnnoObject>({\n id: 'polyline',\n matches: (a): a is PdfPolylineAnnoObject => a.type === PdfAnnotationSubtype.POLYLINE,\n component: PolylineRenderer,\n vertexConfig: {\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfPolygonAnnoObject>({\n id: 'polygon',\n matches: (a): a is PdfPolygonAnnoObject => a.type === PdfAnnotationSubtype.POLYGON,\n component: PolygonRenderer,\n vertexConfig: {\n extractVertices: (a) => a.vertices,\n transformAnnotation: (a, vertices) => ({ ...a, vertices }),\n },\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: true },\n }),\n\n createRenderer<PdfHighlightAnnoObject>({\n id: 'highlight',\n matches: (a): a is PdfHighlightAnnoObject => a.type === PdfAnnotationSubtype.HIGHLIGHT,\n component: HighlightRenderer,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n containerStyle: (a) => ({\n mixBlendMode: blendModeToCss(a.blendMode ?? PdfBlendMode.Multiply),\n }),\n }),\n\n createRenderer<PdfUnderlineAnnoObject>({\n id: 'underline',\n matches: (a): a is PdfUnderlineAnnoObject => a.type === PdfAnnotationSubtype.UNDERLINE,\n component: UnderlineRenderer,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfStrikeOutAnnoObject>({\n id: 'strikeout',\n matches: (a): a is PdfStrikeOutAnnoObject => a.type === PdfAnnotationSubtype.STRIKEOUT,\n component: StrikeoutRenderer,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfSquigglyAnnoObject>({\n id: 'squiggly',\n matches: (a): a is PdfSquigglyAnnoObject => a.type === PdfAnnotationSubtype.SQUIGGLY,\n component: SquigglyRenderer,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfFreeTextAnnoObject>({\n id: 'freeText',\n matches: (a): a is PdfFreeTextAnnoObject => a.type === PdfAnnotationSubtype.FREETEXT,\n component: FreeTextRenderer,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n isDraggable: (toolDraggable, { isEditing }) => toolDraggable && !isEditing,\n onDoubleClick: (id, setEditingId) => setEditingId(id),\n }),\n\n createRenderer<PdfStampAnnoObject>({\n id: 'stamp',\n matches: (a): a is PdfStampAnnoObject => a.type === PdfAnnotationSubtype.STAMP,\n component: StampRenderer,\n useAppearanceStream: false,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLinkAnnoObject>({\n id: 'link',\n matches: (a): a is PdfLinkAnnoObject => a.type === PdfAnnotationSubtype.LINK,\n component: LinkRenderer,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n useAppearanceStream: false,\n selectOverride: (e, annotation, helpers) => {\n e.stopPropagation();\n helpers.clearSelection();\n if (annotation.object.inReplyToId) {\n const parent = helpers.allAnnotations.find(\n (a) => a.object.id === annotation.object.inReplyToId,\n );\n if (parent) {\n helpers.selectAnnotation(parent.object.pageIndex, parent.object.id);\n return;\n }\n }\n helpers.selectAnnotation(helpers.pageIndex, annotation.object.id);\n },\n hideSelectionMenu: (a) => !!a.inReplyToId,\n }),\n];\n","<template>\n <template v-for=\"{ annotation, renderer } in resolvedAnnotations\" :key=\"annotation.object.id\">\n <template v-if=\"renderer\">\n <AnnotationContainer\n :trackedAnnotation=\"annotation\"\n :isSelected=\"allSelectedIds.includes(annotation.object.id)\"\n :isEditing=\"editingId === annotation.object.id\"\n :isMultiSelected=\"isMultiSelected\"\n :isDraggable=\"getFinalDraggable(annotation, renderer)\"\n :isResizable=\"getResolvedResizable(annotation, renderer)\"\n :lockAspectRatio=\"getResolvedLockAspectRatio(annotation, renderer)\"\n :isRotatable=\"getResolvedRotatable(annotation, renderer)\"\n :vertexConfig=\"renderer.vertexConfig\"\n :selectionMenu=\"getSelectionMenu(annotation, renderer)\"\n :onSelect=\"getOnSelect(annotation, renderer)\"\n :onDoubleClick=\"getOnDoubleClick(renderer, annotation)\"\n :zIndex=\"renderer.zIndex\"\n :style=\"getContainerStyle(annotation, renderer)\"\n :appearance=\"getAppearance(annotation, renderer)\"\n v-bind=\"containerProps\"\n >\n <template #default=\"{ annotation: currentObject, appearanceActive }\">\n <component\n :is=\"renderer.component\"\n :annotation=\"annotation\"\n :currentObject=\"currentObject\"\n :isSelected=\"allSelectedIds.includes(annotation.object.id)\"\n :isEditing=\"editingId === annotation.object.id\"\n :scale=\"scale\"\n :pageIndex=\"pageIndex\"\n :documentId=\"documentId\"\n :onClick=\"getOnSelect(annotation, renderer)\"\n :appearanceActive=\"appearanceActive\"\n />\n </template>\n <template #selection-menu=\"slotProps\" v-if=\"!isMultiSelected\">\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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </AnnotationContainer>\n </template>\n </template>\n\n <!-- Group Selection Box -->\n <GroupSelectionBox\n v-if=\"allSelectedOnSamePage && selectedAnnotationsOnPage.length >= 2\"\n :documentId=\"documentId\"\n :pageIndex=\"pageIndex\"\n :scale=\"scale\"\n :rotation=\"rotation\"\n :pageWidth=\"pageWidth\"\n :pageHeight=\"pageHeight\"\n :selectedAnnotations=\"selectedAnnotationsOnPage\"\n :isDraggable=\"areAllSelectedDraggable\"\n :isResizable=\"areAllSelectedResizable\"\n :isRotatable=\"areAllSelectedRotatable\"\n :lockAspectRatio=\"shouldLockGroupAspectRatio\"\n :resizeUi=\"resizeUi\"\n :rotationUi=\"rotationUi\"\n :selectionOutlineColor=\"selectionOutlineColor\"\n :selectionOutline=\"groupSelectionOutline ?? selectionOutline\"\n :groupSelectionMenu=\"groupSelectionMenu\"\n >\n <template #selection-menu=\"slotProps\">\n <slot name=\"group-selection-menu\" v-bind=\"slotProps\" />\n </template>\n <template #resize-handle=\"slotProps\">\n <slot name=\"resize-handle\" v-bind=\"slotProps\" />\n </template>\n <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-handle\" v-bind=\"slotProps\" />\n </template>\n </GroupSelectionBox>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, shallowRef, computed, watch, type CSSProperties } from 'vue';\nimport {\n blendModeToCss,\n PdfAnnotationObject,\n PdfBlendMode,\n Position,\n AnnotationAppearanceMap,\n AnnotationAppearances,\n} from '@embedpdf/models';\nimport {\n getAnnotationsByPageIndex,\n getSelectedAnnotationIds,\n TrackedAnnotation,\n resolveInteractionProp,\n} from '@embedpdf/plugin-annotation';\nimport type { EmbedPdfPointerEvent } from '@embedpdf/plugin-interaction-manager';\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 GroupSelectionBox from './group-selection-box.vue';\nimport {\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n} from '../types';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from '../context';\nimport { builtInRenderers } from './built-in-renderers';\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 rotationUi?: RotationHandleUI;\n selectionOutlineColor?: string;\n selectionOutline?: SelectionOutline;\n groupSelectionOutline?: SelectionOutline;\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n annotationRenderers?: BoxedAnnotationRenderer[];\n}>();\n\nconst { provides: annotationCapability } = useAnnotationCapability();\nconst { provides: selectionProvides } = useSelectionCapability();\nconst annotations = shallowRef<TrackedAnnotation[]>([]);\nconst allSelectedIds = shallowRef<string[]>([]);\nconst { register } = usePointerHandlers({\n documentId: () => props.documentId,\n pageIndex: props.pageIndex,\n});\nconst editingId = ref<string | null>(null);\nconst appearanceMap = shallowRef<AnnotationAppearanceMap<Blob>>({});\nlet prevScale = props.scale;\n\nconst annotationProvides = computed(() =>\n annotationCapability.value ? annotationCapability.value.forDocument(props.documentId) : null,\n);\n\nconst isMultiSelected = computed(() => allSelectedIds.value.length > 1);\n\n// Merge renderers: external renderers override built-ins by ID\nconst allRenderers = computed(() => {\n const external = props.annotationRenderers ?? [];\n const externalIds = new Set(external.map((r) => r.id));\n return [...external, ...builtInRenderers.filter((r) => !externalIds.has(r.id))];\n});\n\nconst resolveRenderer = (annotation: TrackedAnnotation): BoxedAnnotationRenderer | null => {\n return allRenderers.value.find((r) => r.matches(annotation.object)) ?? null;\n};\n\nconst getAppearanceForAnnotation = (ta: TrackedAnnotation): AnnotationAppearances<Blob> | null => {\n if (ta.dictMode) return null;\n if (ta.object.rotation && ta.object.unrotatedRect) return null;\n const appearances = appearanceMap.value[ta.object.id];\n if (!appearances?.normal) return null;\n return appearances;\n};\n\n// Subscribe to annotation state. Explicit watch dependencies avoid accidental\n// reactive tracking inside provider methods that can create update loops.\nwatch(\n [annotationProvides, () => props.pageIndex],\n ([provides, pageIndex], _prev, onCleanup) => {\n if (!provides) {\n annotations.value = [];\n allSelectedIds.value = [];\n return;\n }\n\n const syncState = (state: ReturnType<typeof provides.getState>) => {\n annotations.value = getAnnotationsByPageIndex(state, pageIndex);\n allSelectedIds.value = getSelectedAnnotationIds(state);\n };\n\n syncState(provides.getState());\n const off = provides.onStateChange(syncState);\n onCleanup(off);\n },\n { immediate: true },\n);\n\n// Fetch appearance map, invalidate on scale change\nwatch(\n [annotationProvides, () => props.pageIndex, () => props.scale],\n ([provides, pageIndex, scale], _prev, onCleanup) => {\n if (!provides) {\n appearanceMap.value = {};\n return;\n }\n\n if (prevScale !== scale) {\n provides.invalidatePageAppearances(pageIndex);\n prevScale = scale;\n }\n\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n\n const task = provides.getPageAppearances(pageIndex, {\n scaleFactor: scale,\n dpr: typeof window !== 'undefined' ? window.devicePixelRatio : 1,\n });\n task.wait(\n (map) => {\n if (!cancelled) appearanceMap.value = map;\n },\n () => {\n if (!cancelled) appearanceMap.value = {};\n },\n );\n },\n { immediate: true },\n);\n\nconst resolvedAnnotations = computed(() =>\n annotations.value.map((annotation) => ({\n annotation,\n renderer: resolveRenderer(annotation),\n })),\n);\n\nconst getFinalDraggable = (annotation: TrackedAnnotation, renderer: BoxedAnnotationRenderer) => {\n const tool = annotationProvides.value?.findToolForAnnotation(annotation.object);\n const defaults = renderer.interactionDefaults;\n const isEditing = editingId.value === annotation.object.id;\n const resolvedDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n defaults?.isDraggable ?? true,\n );\n return renderer.isDraggable\n ? renderer.isDraggable(resolvedDraggable, { isEditing })\n : resolvedDraggable;\n};\n\nconst getResolvedResizable = (annotation: TrackedAnnotation, renderer: BoxedAnnotationRenderer) => {\n const tool = annotationProvides.value?.findToolForAnnotation(annotation.object);\n return resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n renderer.interactionDefaults?.isResizable ?? false,\n );\n};\n\nconst getResolvedLockAspectRatio = (\n annotation: TrackedAnnotation,\n renderer: BoxedAnnotationRenderer,\n) => {\n const tool = annotationProvides.value?.findToolForAnnotation(annotation.object);\n return resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n renderer.interactionDefaults?.lockAspectRatio ?? false,\n );\n};\n\nconst getResolvedRotatable = (annotation: TrackedAnnotation, renderer: BoxedAnnotationRenderer) => {\n const tool = annotationProvides.value?.findToolForAnnotation(annotation.object);\n return resolveInteractionProp(\n tool?.interaction.isRotatable,\n annotation.object,\n renderer.interactionDefaults?.isRotatable ?? false,\n );\n};\n\nconst getSelectionMenu = (annotation: TrackedAnnotation, renderer: BoxedAnnotationRenderer) => {\n if (renderer.hideSelectionMenu?.(annotation.object)) return undefined;\n if (isMultiSelected.value) return undefined;\n return props.selectionMenu;\n};\n\nconst getOnSelect = (annotation: TrackedAnnotation, renderer: BoxedAnnotationRenderer) => {\n if (renderer.selectOverride) {\n const selectHelpers: SelectOverrideHelpers = {\n defaultSelect: handleClick,\n selectAnnotation: (pi: number, id: string) =>\n annotationProvides.value?.selectAnnotation(pi, id),\n clearSelection: () => selectionProvides.value?.clear(),\n allAnnotations: annotations.value,\n pageIndex: props.pageIndex,\n };\n return (e: AnnotationInteractionEvent) =>\n renderer.selectOverride!(e, annotation, selectHelpers);\n }\n return (e: AnnotationInteractionEvent) => handleClick(e, annotation);\n};\n\nconst handlePointerDown = (_pos: Position, pe: EmbedPdfPointerEvent<PointerEvent>) => {\n if (pe.target === pe.currentTarget && annotationProvides.value) {\n annotationProvides.value.deselectAnnotation();\n editingId.value = null;\n }\n};\n\nconst handleClick = (e: AnnotationInteractionEvent, annotation: TrackedAnnotation) => {\n e.stopPropagation();\n if (annotationProvides.value && selectionProvides.value) {\n selectionProvides.value.clear();\n\n const isModifierPressed = 'metaKey' in e ? e.metaKey || e.ctrlKey : false;\n\n if (isModifierPressed) {\n annotationProvides.value.toggleSelection(props.pageIndex, annotation.object.id);\n } else {\n annotationProvides.value.selectAnnotation(props.pageIndex, annotation.object.id);\n }\n\n if (annotation.object.id !== editingId.value) {\n editingId.value = null;\n }\n }\n};\n\nconst setEditingId = (id: string) => {\n editingId.value = id;\n};\n\nconst pointerHandlers = { onPointerDown: handlePointerDown };\n\nwatch(\n annotationProvides,\n (provides, _prev, onCleanup) => {\n if (!provides) return;\n const unregister = register(pointerHandlers);\n if (unregister) {\n onCleanup(unregister);\n }\n },\n { immediate: true },\n);\n\nconst selectedAnnotationsOnPage = computed(() =>\n annotations.value.filter((anno) => allSelectedIds.value.includes(anno.object.id)),\n);\n\nconst areAllSelectedDraggable = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n return selectedAnnotationsOnPage.value.every((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n const groupDraggable = resolveInteractionProp(\n tool?.interaction.isGroupDraggable,\n ta.object,\n true,\n );\n const singleDraggable = resolveInteractionProp(tool?.interaction.isDraggable, ta.object, true);\n return tool?.interaction.isGroupDraggable !== undefined ? groupDraggable : singleDraggable;\n });\n});\n\nconst areAllSelectedResizable = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n return selectedAnnotationsOnPage.value.every((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n const groupResizable = resolveInteractionProp(\n tool?.interaction.isGroupResizable,\n ta.object,\n true,\n );\n const singleResizable = resolveInteractionProp(tool?.interaction.isResizable, ta.object, true);\n return tool?.interaction.isGroupResizable !== undefined ? groupResizable : singleResizable;\n });\n});\n\nconst areAllSelectedRotatable = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n return selectedAnnotationsOnPage.value.every((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n const groupRotatable = resolveInteractionProp(\n tool?.interaction.isGroupRotatable,\n ta.object,\n true,\n );\n const singleRotatable = resolveInteractionProp(tool?.interaction.isRotatable, ta.object, true);\n return tool?.interaction.isGroupRotatable !== undefined ? groupRotatable : singleRotatable;\n });\n});\n\nconst shouldLockGroupAspectRatio = computed(() => {\n if (selectedAnnotationsOnPage.value.length < 2) return false;\n return selectedAnnotationsOnPage.value.some((ta) => {\n const tool = annotationProvides.value?.findToolForAnnotation(ta.object);\n const groupLock = resolveInteractionProp(\n tool?.interaction.lockGroupAspectRatio,\n ta.object,\n false,\n );\n const singleLock = resolveInteractionProp(tool?.interaction.lockAspectRatio, ta.object, false);\n return tool?.interaction.lockGroupAspectRatio !== undefined ? groupLock : singleLock;\n });\n});\n\nconst allSelectedOnSamePage = computed(() => {\n if (!annotationProvides.value) return false;\n if (allSelectedIds.value.length < 2) return false;\n const allSelected = annotationProvides.value.getSelectedAnnotations();\n return allSelected.every((ta) => ta.object.pageIndex === props.pageIndex);\n});\n\n// --- Renderer resolution helpers ---\n\nconst getOnDoubleClick = (renderer: BoxedAnnotationRenderer, annotation: TrackedAnnotation) => {\n if (!renderer.onDoubleClick) return undefined;\n return (e: AnnotationInteractionEvent) => {\n e.stopPropagation();\n renderer.onDoubleClick!(annotation.object.id, setEditingId);\n };\n};\n\nconst getContainerStyle = (\n annotation: TrackedAnnotation,\n renderer: BoxedAnnotationRenderer,\n): CSSProperties => {\n return (\n renderer.containerStyle?.(annotation.object) ?? {\n mixBlendMode: blendModeToCss(annotation.object.blendMode ?? PdfBlendMode.Normal),\n }\n );\n};\n\nconst getAppearance = (\n annotation: TrackedAnnotation,\n renderer: BoxedAnnotationRenderer,\n): AnnotationAppearances<Blob> | null | undefined => {\n const tool = annotationProvides.value?.findToolForAnnotation(annotation.object);\n const useAP = tool?.behavior?.useAppearanceStream ?? renderer.useAppearanceStream ?? true;\n return useAP ? getAppearanceForAnnotation(annotation) : undefined;\n};\n\nconst containerProps = computed(() => {\n const {\n selectionMenu: _sm,\n groupSelectionMenu: _gsm,\n groupSelectionOutline: _gso,\n annotationRenderers: _ar,\n ...rest\n } = props;\n return rest;\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 :strokeColor=\"activeTool.defaults.strokeColor\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Underline\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE\"\n :strokeColor=\"activeTool.defaults.strokeColor\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Strikeout\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT\"\n :strokeColor=\"activeTool.defaults.strokeColor\"\n :opacity=\"activeTool.defaults.opacity\"\n :segmentRects=\"rects\"\n :scale=\"scale\"\n />\n <Squiggly\n v-else-if=\"activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY\"\n :strokeColor=\"activeTool.defaults.strokeColor\"\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=\"resolvedResizeUi\"\n :vertexUi=\"resolvedVertexUi\"\n :rotationUi=\"rotationUi\"\n :selectionOutlineColor=\"selectionOutlineColor\"\n :selectionOutline=\"selectionOutline\"\n :groupSelectionOutline=\"groupSelectionOutline\"\n :selectionMenu=\"selectionMenu\"\n :groupSelectionMenu=\"groupSelectionMenu\"\n :annotationRenderers=\"allRenderers\"\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 #group-selection-menu=\"slotProps\">\n <slot name=\"group-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 <template #rotation-handle=\"slotProps\">\n <slot name=\"rotation-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, onMounted } 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 {\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n} from '../types';\nimport { useRendererRegistry, type BoxedAnnotationRenderer } from '../context';\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 /** @deprecated Use `resizeUi` (or `:resize-ui` in templates) instead */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\n vertexUi?: VertexHandleUI;\n /** @deprecated Use `vertexUi` (or `:vertex-ui` in templates) instead */\n vertexUI?: VertexHandleUI;\n /** Customize rotation handle */\n rotationUi?: RotationHandleUI;\n /** @deprecated Use `selectionOutline` instead */\n selectionOutlineColor?: string;\n /** Customize the selection outline for individual annotations */\n selectionOutline?: SelectionOutline;\n /** Customize the selection outline for the group selection box (falls back to selectionOutline) */\n groupSelectionOutline?: SelectionOutline;\n /** Customize selection menu */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Customize group selection menu */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Custom renderers for specific annotation types (provided by external plugins) */\n annotationRenderers?: BoxedAnnotationRenderer[];\n}>();\n\n// Resolve deprecated prop aliases (resizeUI -> resizeUi, vertexUI -> vertexUi)\nconst resolvedResizeUi = computed(() => props.resizeUi ?? props.resizeUI);\nconst resolvedVertexUi = computed(() => props.vertexUi ?? props.vertexUI);\n\nonMounted(() => {\n if (props.resizeUI) {\n console.warn(\n '[AnnotationLayer] The \"resizeUI\" prop is deprecated. Use :resize-ui in templates instead.',\n );\n }\n if (props.vertexUI) {\n console.warn(\n '[AnnotationLayer] The \"vertexUI\" prop is deprecated. Use :vertex-ui in templates instead.',\n );\n }\n});\n\n// Get renderers from registry (provided by parent)\nconst registry = useRendererRegistry();\n\n// Merge: registry + explicit props (props take precedence by id)\nconst allRenderers = computed(() => {\n const fromRegistry = registry?.getAll() ?? [];\n const fromProps = props.annotationRenderers ?? [];\n const merged = [...fromRegistry];\n for (const r of fromProps) {\n const idx = merged.findIndex((m) => m.id === r.id);\n if (idx >= 0) merged[idx] = r;\n else merged.push(r);\n }\n return merged;\n});\n\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 // Combine page intrinsic rotation with document rotation\n const pageRotation = page.value?.rotation ?? 0;\n const docRotation = documentState.value?.rotation ?? 0;\n return ((pageRotation + docRotation) % 4) as Rotation;\n});\n</script>\n","<script setup lang=\"ts\">\nimport { provideRendererRegistry } from '../context';\n\n/**\n * Provider component that sets up the annotation renderer registry.\n * Used as a wrapper via createPluginPackage().addWrapper().\n */\nprovideRendererRegistry();\n</script>\n\n<template>\n <slot />\n</template>\n","import { createPluginPackage } from '@embedpdf/core';\nimport { AnnotationPluginPackage as BaseAnnotationPackage } from '@embedpdf/plugin-annotation';\nimport { RendererRegistryProvider } from './components';\n\nexport * from './hooks';\nexport * from './components';\nexport * from './types';\nexport * from './context';\nexport * from '@embedpdf/plugin-annotation';\n\n// Automatically wrap with RendererRegistryProvider\nexport const AnnotationPluginPackage = createPluginPackage(BaseAnnotationPackage)\n .addWrapper(RendererRegistryProvider)\n .build();\n"],"names":["_createElementBlock","_normalizeStyle","_a","__default__","_createElementVNode","_Fragment","_unref","_renderSlot","_normalizeProps","_mergeProps","_openBlock","_createBlock","AppearanceImageVue","_withCtx","_resolveDynamicComponent","_Teleport","_hoisted_1","_renderList","InkVue","SquareVue","CircleVue","LineVue","PolylineVue","PolygonVue","FreeTextVue","_createVNode","RenderAnnotation","StampVue","LinkVue","HighlightVue","UnderlineVue","StrikeoutVue","SquigglyVue","InkRenderer","SquareRenderer","CircleRenderer","LineRenderer","PolylineRenderer","PolygonRenderer","HighlightRenderer","UnderlineRenderer","StrikeoutRenderer","SquigglyRenderer","FreeTextRenderer","StampRenderer","LinkRenderer","AnnotationContainer","_createSlots","GroupSelectionBox","Highlight","Underline","Strikeout","Squiggly","PreviewRenderer","Annotations","TextMarkup","AnnotationPaintLayer","BaseAnnotationPackage","RendererRegistryProvider"],"mappings":"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"}