@embedpdf/plugin-annotation 2.6.1 → 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.cjs","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":["useAnnotationPlugin","usePlugin","AnnotationPlugin","id","useAnnotationCapability","useCapability","inheritAttrs","props","__props","HANDLE_COLOR","computed","_a","resizeUi","color","VERTEX_COLOR","vertexUi","HANDLE_SIZE","size","VERTEX_SIZE","ROTATION_SIZE","rotationUi","ROTATION_COLOR","ROTATION_CONNECTOR_COLOR","connectorColor","ROTATION_ICON_COLOR","iconColor","SHOW_CONNECTOR","showConnector","ROTATION_MARGIN","margin","ROTATION_BORDER_COLOR","_b","border","ROTATION_BORDER_WIDTH","width","ROTATION_BORDER_STYLE","style","outlineColor","selectionOutline","selectionOutlineColor","outlineStyle","outlineWidth","outlineOff","offset","outlineOffset","preview","shallowRef","toRaw","trackedAnnotation","object","liveRotation","ref","cursorScreen","isHandleHovered","provides","annotationCapability","plugin","annotationPlugin","permissions","useDocumentPermissions","documentId","gestureBaseRef","gestureBaseRectRef","effectiveIsDraggable","value","canModifyAnnotations","isDraggable","isMultiSelected","effectiveIsResizable","isResizable","effectiveIsRotatable","isRotatable","guardedOnDoubleClick","onDoubleClick","e","call","annotationProvides","forDocument","currentObject","annotationRotation","rotation","rotationDisplay","normalizedRotationDisplay","val","Number","isFinite","Math","round","rotationActive","explicitUnrotatedRect","unrotatedRect","effectiveUnrotatedRect","rect","rotationPivot","inferRotationCenterFromRects","controllerElement","childObject","showOutline","isSelected","shouldShowMenu","selectionMenu","slots","menuRect","origin","x","scale","y","height","menuContext","type","annotation","pageIndex","menuPlacement","effectiveAngle","suggestTop","renderSelectionMenu","menuWrapperProps","selected","placement","context","verticesSnapshot","obj","vertexConfig","extractVertices","constraintsSnapshot","minWidth","minHeight","boundingBox","pageWidth","pageHeight","dragProps","vertices","resize","rotationHandleData","useInteractionHandles","controller","element","constraints","maintainAspectRatio","lockAspectRatio","pageRotation","rotationCenter","rotationElement","enabled","onUpdate","event","transformData","changes","metadata","pageSize","state","startDrag","annotationIds","startResize","resizeHandle","handle","delta","updateDrag","updateResize","base","vertexChanges","transformAnnotation","patched","_c","updateAnnotation","cursorAngle","rotationAngle","cursorPos","cursorPosition","clientX","clientY","startRotation","updateRotation","rotationDelta","commitRotation","commitDrag","commitResize","resizeUI","handleSize","spacing","offsetMode","includeSides","zIndex","vertexUI","vertexSize","rotationUI","includeVertices","includeRotation","currentRotation","doubleProps","useDoublePressProps","onHandlePointerMove","watchEffect","onCleanup","handleEvent","patch","previewPatches","unsubs","onDragChange","onResizeChange","onRotateChange","forEach","u","aabbWidth","aabbHeight","innerWidth","innerHeight","usesCustomPivot","Boolean","innerLeft","innerTop","innerTransformOrigin","centerX","centerY","guideLength","max","rotationIconSize","contentsStyle","display","outerAABBStyle","position","left","top","pointerEvents","innerRotatedStyle","transform","transformOrigin","outline","touchAction","cursor","guideHorizontalStyle","backgroundColor","opacity","guideVerticalStyle","guideAngleStyle","connectorLineStyle","connector","rotationHandleStyle","boxSizing","alignItems","justifyContent","rotationHandleBindings","_s","rest","rotationHandleSlotProps","connectorStyle","tooltipStyle","background","padding","borderRadius","fontSize","fontFamily","whiteSpace","useSlots","_createElementBlock","_createElementVNode","_Fragment","key","_unref","onPointerenter","onPointerleave","_cache","$event","onPointermove","_renderSlot","_ctx","$slots","_normalizeProps","_mergeProps","viewBox","fill","stroke","d","_openBlock","ref_for","length","vertex","_createBlock","CounterRotate","default","_withCtx","_resolveDynamicComponent","_Teleport","to","toFixed","gestureBase","isDraggingRef","isResizingRef","outlineStyleVal","groupRotationDisplay","groupBox","rects","selectedAnnotations","map","ta","boundingRectOrEmpty","previewGroupBox","watch","newGroupBox","immediate","_old","groupBoxWidth","groupBoxHeight","groupCenterX","groupCenterY","groupGuideLength","outerStyle","boxStyle","annotations","groupSelectionMenu","renderGroupMenu","elementSnapshot","transformType","isMove","isResize","ids","_d","_e","_f","newRect","rawDelta","clampedDelta","_hoisted_1","stopPropagation","geometry","outerW","outerH","innerW","strokeWidth","innerH","cx","cy","rx","ry","svgWidth","svgHeight","_normalizeStyle","onPointerdown","onClick","args","onTouchstart","strokeColor","strokeStyle","PdfAnnotationBorderStyle","DASHED","strokeDasharray","strokeDashArray","join","editorRef","isIOS","onMounted","nav","navigator","test","userAgent","platform","maxTouchPoints","isEditing","editing","editor","focus","selection","window","getSelection","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","handleBlur","contents","innerText","editorStyle","anno","computedFontPx","needsComp","adjustedFontPx","scaleComp","invScalePercent","fontColor","standardFontCssProperties","textAlign","textAlignmentToCss","flexDirection","verticalAlign","PdfVerticalAlignment","Top","Middle","lineHeight","overflow","onBlur","tabindex","contenteditable","resolvedColor","paths","inkList","points","i","lx","ly","trim","_renderList","localLine","x1","linePoints","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","lineEndings","PI","getEndingStyle","ending","strokeLinecap","filled","dashArray","isUnderline","UNDERLINE","hitAreaCursor","hasIRT","hitAreaPointerEvents","allPoints","currentVertex","localPts","pathData","first","isPreview","p","isPreviewing","toAngle","a","b","startRad","endRad","imageUrl","urlRef","currentTask","annotationId","rectWidth","rectHeight","scaleFactor","unrotated","_","__","URL","revokeObjectURL","task","renderAnnotation","deepToRaw","options","dpr","devicePixelRatio","wait","blob","url","createObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","onUnmounted","handleImageLoad","src","onLoad","_createVNode","RenderAnnotation","segmentRects","amplitude","period","svgDataUri","amp","per","svg","encodeURIComponent","r","backgroundSize","thickness","blendStyle","defaultBlend","PdfBlendMode","Normal","mixBlendMode","blendModeToCss","blendMode","findCustomRenderer","annotationRenderers","find","matches","selectionProvides","useSelectionCapability","allSelectedIds","register","usePointerHandlers","editingId","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationIds","onStateChange","handlePointerDown","_pos","pe","target","currentTarget","deselectAnnotation","handleClick","clear","metaKey","ctrlKey","toggleSelection","selectAnnotation","handleLinkClick","inReplyToId","parentId","parent","unregister","onPointerDown","includes","selectedAnnotationsOnPage","filter","areAllSelectedDraggable","every","tool","findToolForAnnotation","groupDraggable","resolveInteractionProp","interaction","isGroupDraggable","singleDraggable","areAllSelectedResizable","groupResizable","isGroupResizable","singleResizable","areAllSelectedRotatable","groupRotatable","isGroupRotatable","singleRotatable","shouldLockGroupAspectRatio","some","groupLock","lockGroupAspectRatio","singleLock","allSelectedOnSamePage","getSelectedAnnotations","getTool","isFreeText","isRotatableFor","fallback","showIndividualSelection","containerProps","_sm","_gsm","groupSelectionOutline","_gso","getVertexConfig","isLine","isPolyline","isPolygon","AnnotationContainer","onSelect","_createSlots","component","slotProps","fn","isInk","AnnoComponents.Ink","isSquare","AnnoComponents.Square","isCircle","AnnoComponents.Circle","AnnoComponents.Line","AnnoComponents.Polyline","AnnoComponents.Polygon","handleDoubleClick","AnnoComponents.FreeText","isStamp","AnnoComponents.Stamp","TextMarkupComponents.Underline","isStrikeout","TextMarkupComponents.Strikeout","isSquiggly","TextMarkupComponents.Squiggly","isHighlight","Multiply","TextMarkupComponents.Highlight","isLink","AnnoComponents.Link","GroupSelectionBox","boundingRect","activeTool","unsubscribers","scoped","off","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","push","getActiveTool","onActiveToolChange","unsub","defaultMode","defaults","PdfAnnotationSubtype","HIGHLIGHT","Highlight","Underline","STRIKEOUT","Strikeout","SQUIGGLY","Squiggly","bounds","CIRCLE","data","SQUARE","POLYGON","POLYLINE","LINE","INK","FREETEXT","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","img","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","registerPageHandlers","onPreview","toolId","next","set","delete","entries","PreviewRenderer","RendererRegistryKey","Symbol","createRendererRegistry","renderers","Set","has","getAll","provideRendererRegistry","registry","provide","useRendererRegistry","inject","resolvedResizeUi","resolvedVertexUi","console","warn","allRenderers","fromRegistry","fromProps","merged","idx","findIndex","m","documentState","useDocumentState","page","pages","actualScale","actualRotation","Annotations","TextMarkup","AnnotationPaintLayer","AnnotationPluginPackage","createPluginPackage","BaseAnnotationPackage","addWrapper","RendererRegistryProvider","build","entry","markRaw","toValue","initialDocumentState","providesValue","docId","scope","newState"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","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":["props","__props","imageUrl","ref","urlRef","watchEffect","onCleanup","url","URL","createObjectURL","appearance","data","value","revokeObjectURL","handleImageLoad","_createElementBlock","src","alt","draggable","onLoad","style","_normalizeStyle","useAnnotationPlugin","usePlugin","AnnotationPlugin","id","useAnnotationCapability","useCapability","inheritAttrs","HANDLE_COLOR","computed","_a","resizeUi","color","VERTEX_COLOR","vertexUi","HANDLE_SIZE","size","VERTEX_SIZE","ROTATION_SIZE","rotationUi","ROTATION_COLOR","ROTATION_CONNECTOR_COLOR","connectorColor","ROTATION_ICON_COLOR","iconColor","SHOW_CONNECTOR","showConnector","ROTATION_MARGIN","margin","ROTATION_BORDER_COLOR","_b","border","ROTATION_BORDER_WIDTH","width","ROTATION_BORDER_STYLE","outlineColor","selectionOutline","selectionOutlineColor","outlineStyle","outlineWidth","outlineOff","offset","outlineOffset","preview","shallowRef","toRaw","trackedAnnotation","object","liveRotation","cursorScreen","isHandleHovered","gestureActive","provides","annotationCapability","plugin","annotationPlugin","permissions","useDocumentPermissions","documentId","gestureBaseRef","gestureBaseRectRef","effectiveIsDraggable","canModifyAnnotations","isDraggable","isMultiSelected","effectiveIsResizable","isResizable","effectiveIsRotatable","isRotatable","guardedOnDoubleClick","onDoubleClick","e","call","annotationProvides","forDocument","currentObject","annotationRotation","rotation","rotationDisplay","normalizedRotationDisplay","val","Number","isFinite","Math","round","rotationActive","explicitUnrotatedRect","unrotatedRect","effectiveUnrotatedRect","rect","rotationPivot","inferRotationCenterFromRects","controllerElement","childObject","showOutline","isSelected","shouldShowMenu","selectionMenu","slots","menuRect","origin","x","scale","y","height","menuContext","type","annotation","pageIndex","menuPlacement","effectiveAngle","suggestTop","renderSelectionMenu","menuWrapperProps","selected","placement","context","verticesSnapshot","obj","vertexConfig","extractVertices","constraintsSnapshot","minWidth","minHeight","boundingBox","pageWidth","pageHeight","dragProps","vertices","resize","rotationHandleData","useInteractionHandles","controller","element","constraints","maintainAspectRatio","lockAspectRatio","pageRotation","rotationCenter","rotationElement","enabled","onUpdate","event","transformData","changes","metadata","pageSize","state","startDrag","annotationIds","startResize","resizeHandle","handle","delta","updateDrag","updateResize","base","vertexChanges","transformAnnotation","patched","_c","updateAnnotation","cursorAngle","rotationAngle","cursorPos","cursorPosition","clientX","clientY","startRotation","updateRotation","rotationDelta","commitRotation","commitDrag","commitResize","resizeUI","handleSize","spacing","offsetMode","includeSides","zIndex","vertexUI","vertexSize","rotationUI","includeVertices","includeRotation","currentRotation","doubleProps","useDoublePressProps","onHandlePointerMove","handleEvent","patch","previewPatches","unsubs","onDragChange","onResizeChange","onRotateChange","forEach","u","aabbWidth","aabbHeight","innerWidth","innerHeight","usesCustomPivot","Boolean","innerLeft","innerTop","innerTransformOrigin","centerX","centerY","guideLength","max","rotationIconSize","apActive","normal","isEditing","dictMode","contentsStyle","display","outerAABBStyle","position","left","top","pointerEvents","innerRotatedStyle","transform","transformOrigin","outline","touchAction","cursor","guideHorizontalStyle","backgroundColor","opacity","guideVerticalStyle","guideAngleStyle","connectorLineStyle","connector","rotationHandleStyle","boxSizing","alignItems","justifyContent","rotationHandleBindings","_s","rest","rotationHandleSlotProps","connectorStyle","tooltipStyle","background","padding","borderRadius","fontSize","fontFamily","whiteSpace","useSlots","_createElementVNode","_Fragment","key","_unref","onPointerenter","onPointerleave","_cache","$event","onPointermove","_renderSlot","_ctx","$slots","_normalizeProps","_mergeProps","viewBox","fill","stroke","d","_openBlock","appearanceActive","_createBlock","AppearanceImageVue","ref_for","length","vertex","CounterRotate","default","_withCtx","_resolveDynamicComponent","_Teleport","to","toFixed","gestureBase","isDraggingRef","isResizingRef","outlineStyleVal","groupRotationDisplay","groupBox","rects","selectedAnnotations","map","ta","boundingRectOrEmpty","previewGroupBox","watch","newGroupBox","immediate","_old","groupBoxWidth","groupBoxHeight","groupCenterX","groupCenterY","groupGuideLength","outerStyle","boxStyle","annotations","groupSelectionMenu","renderGroupMenu","elementSnapshot","transformType","isMove","isResize","ids","_d","_e","_f","newRect","rawDelta","clampedDelta","_hoisted_1","stopPropagation","RendererRegistryKey","Symbol","createRendererRegistry","renderers","register","entries","Set","filter","r","has","some","getAll","provideRendererRegistry","registry","provide","useRendererRegistry","inject","createRenderer","entry","matches","component","markRaw","containerStyle","interactionDefaults","useAppearanceStream","selectOverride","hideSelectionMenu","resolvedColor","strokeColor","paths","inkList","points","i","lx","ly","trim","hitStrokeWidth","strokeWidth","_renderList","onPointerdown","onClick","args","onTouchstart","InkVue","geometry","outerW","outerH","svgWidth","svgHeight","overflow","strokeStyle","PdfAnnotationBorderStyle","DASHED","strokeDasharray","strokeDashArray","join","SquareVue","innerW","innerH","cx","cy","rx","ry","CircleVue","localLine","x1","linePoints","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","lineEndings","PI","filled","LineVue","localPts","pathData","first","p","toAngle","a","b","startRad","endRad","PolylineVue","allPoints","currentVertex","isPreview","isPreviewing","PolygonVue","editorRef","editingRef","isIOS","onMounted","nav","navigator","test","userAgent","platform","maxTouchPoints","editing","editor","focus","selection","window","getSelection","range","document","createRange","selectNodeContents","collapse","removeAllRanges","addRange","handleBlur","contents","innerText","editorStyle","anno","computedFontPx","needsComp","adjustedFontPx","scaleComp","invScalePercent","fontColor","standardFontCssProperties","textAlign","textAlignmentToCss","flexDirection","verticalAlign","PdfVerticalAlignment","Top","Middle","lineHeight","onBlur","tabindex","contenteditable","FreeTextVue","currentTask","annotationId","rectWidth","rectHeight","scaleFactor","unrotated","_","__","task","renderAnnotation","deepToRaw","options","dpr","devicePixelRatio","wait","blob","ignore","abort","code","PdfErrorCode","Cancelled","message","onUnmounted","_createVNode","RenderAnnotation","StampVue","dashArray","isUnderline","UNDERLINE","hitAreaCursor","hasIRT","hitAreaPointerEvents","LinkVue","inReplyToId","segmentRects","HighlightVue","thickness","UnderlineVue","StrikeoutVue","amplitude","period","svgDataUri","amp","per","svg","encodeURIComponent","backgroundSize","SquigglyVue","builtInRenderers","PdfAnnotationSubtype","INK","InkRenderer","SQUARE","SquareRenderer","CIRCLE","CircleRenderer","LINE","LineRenderer","v","POLYLINE","PolylineRenderer","POLYGON","PolygonRenderer","HIGHLIGHT","HighlightRenderer","mixBlendMode","blendModeToCss","blendMode","PdfBlendMode","Multiply","UnderlineRenderer","STRIKEOUT","StrikeoutRenderer","SQUIGGLY","SquigglyRenderer","FREETEXT","FreeTextRenderer","toolDraggable","setEditingId","STAMP","StampRenderer","LINK","LinkRenderer","helpers","clearSelection","parent","allAnnotations","find","selectAnnotation","selectionProvides","useSelectionCapability","allSelectedIds","usePointerHandlers","editingId","appearanceMap","prevScale","allRenderers","external","annotationRenderers","externalIds","resolveRenderer","_prev","syncState","getAnnotationsByPageIndex","getSelectedAnnotationIds","getState","onStateChange","invalidatePageAppearances","cancelled","getPageAppearances","resolvedAnnotations","renderer","getFinalDraggable","tool","findToolForAnnotation","defaults","resolvedDraggable","resolveInteractionProp","interaction","getResolvedResizable","getResolvedLockAspectRatio","getResolvedRotatable","getSelectionMenu","getOnSelect","selectHelpers","defaultSelect","handleClick","pi","clear","metaKey","ctrlKey","toggleSelection","pointerHandlers","onPointerDown","_pos","pe","target","currentTarget","deselectAnnotation","unregister","selectedAnnotationsOnPage","includes","areAllSelectedDraggable","every","groupDraggable","isGroupDraggable","singleDraggable","areAllSelectedResizable","groupResizable","isGroupResizable","singleResizable","areAllSelectedRotatable","groupRotatable","isGroupRotatable","singleRotatable","shouldLockGroupAspectRatio","groupLock","lockGroupAspectRatio","singleLock","allSelectedOnSamePage","getSelectedAnnotations","getOnDoubleClick","getContainerStyle","Normal","getAppearance","behavior","appearances","getAppearanceForAnnotation","containerProps","_sm","_gsm","groupSelectionOutline","_gso","_ar","AnnotationContainer","onSelect","_createSlots","slotProps","fn","GroupSelectionBox","boundingRect","activeTool","unsubscribers","scoped","off","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","push","getActiveTool","onActiveToolChange","unsub","defaultMode","Highlight","Underline","Strikeout","Squiggly","bounds","previews","Map","fileInputRef","canvasRef","services","requestFile","accept","onFile","input","onchange","file","files","click","processImage","source","maxWidth","maxHeight","onComplete","canvas","getContext","ctx","img","Image","crossOrigin","onload","naturalWidth","naturalHeight","scaleX","scaleY","min","finalWidth","finalHeight","drawImage","imageData","getImageData","registerPageHandlers","onPreview","toolId","next","set","delete","PreviewRenderer","resolvedResizeUi","resolvedVertexUi","console","warn","fromRegistry","fromProps","merged","idx","findIndex","m","documentState","useDocumentState","page","pages","actualScale","actualRotation","Annotations","TextMarkup","AnnotationPaintLayer","AnnotationPluginPackage","createPluginPackage","BaseAnnotationPackage","addWrapper","RendererRegistryProvider","build","toValue","initialDocumentState","providesValue","docId","scope","newState"],"mappings":"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"}