@embedpdf/plugin-annotation 2.15.0 → 3.0.0-next.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 (348) hide show
  1. package/LICENSE +192 -21
  2. package/dist/capability-fghl0JmE.js +2680 -0
  3. package/dist/capability-fghl0JmE.js.map +1 -0
  4. package/dist/capability-hb2AU0f6.cjs +2739 -0
  5. package/dist/capability-hb2AU0f6.cjs.map +1 -0
  6. package/dist/index.cjs +593 -2
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.cts +65 -0
  9. package/dist/index.d.ts +65 -1
  10. package/dist/index.js +562 -6998
  11. package/dist/index.js.map +1 -1
  12. package/dist/internal.cjs +5 -0
  13. package/dist/internal.d.cts +13 -0
  14. package/dist/internal.d.ts +13 -0
  15. package/dist/internal.js +2 -0
  16. package/dist/types-BhWgqgbX.d.cts +879 -0
  17. package/dist/types-Da6JRmhw.d.ts +879 -0
  18. package/package.json +26 -66
  19. package/dist/lib/actions.d.ts +0 -192
  20. package/dist/lib/annotation-plugin.d.ts +0 -310
  21. package/dist/lib/geometry/cloudy-border.d.ts +0 -90
  22. package/dist/lib/geometry/index.d.ts +0 -2
  23. package/dist/lib/geometry/rotation.d.ts +0 -32
  24. package/dist/lib/handlers/callout-free-text.handler.d.ts +0 -3
  25. package/dist/lib/handlers/circle.handler.d.ts +0 -3
  26. package/dist/lib/handlers/click-detector.d.ts +0 -27
  27. package/dist/lib/handlers/free-text.handler.d.ts +0 -3
  28. package/dist/lib/handlers/index.d.ts +0 -14
  29. package/dist/lib/handlers/ink.handler.d.ts +0 -3
  30. package/dist/lib/handlers/insert-text.handler.d.ts +0 -8
  31. package/dist/lib/handlers/line.handler.d.ts +0 -3
  32. package/dist/lib/handlers/link.handler.d.ts +0 -3
  33. package/dist/lib/handlers/polygon.handler.d.ts +0 -3
  34. package/dist/lib/handlers/polyline.handler.d.ts +0 -3
  35. package/dist/lib/handlers/replace-text.handler.d.ts +0 -9
  36. package/dist/lib/handlers/selection-utils.d.ts +0 -7
  37. package/dist/lib/handlers/square.handler.d.ts +0 -3
  38. package/dist/lib/handlers/stamp.handler.d.ts +0 -3
  39. package/dist/lib/handlers/text-markup.handler.d.ts +0 -7
  40. package/dist/lib/handlers/text.handler.d.ts +0 -3
  41. package/dist/lib/handlers/types.d.ts +0 -176
  42. package/dist/lib/helpers.d.ts +0 -46
  43. package/dist/lib/index.d.ts +0 -21
  44. package/dist/lib/manifest.d.ts +0 -4
  45. package/dist/lib/patching/base-patch.d.ts +0 -87
  46. package/dist/lib/patching/index.d.ts +0 -6
  47. package/dist/lib/patching/insert-upright.d.ts +0 -20
  48. package/dist/lib/patching/line-ending-handlers.d.ts +0 -20
  49. package/dist/lib/patching/line-endings.d.ts +0 -13
  50. package/dist/lib/patching/patch-registry.d.ts +0 -40
  51. package/dist/lib/patching/patch-utils.d.ts +0 -97
  52. package/dist/lib/patching/patches/callout-freetext.patch.d.ts +0 -3
  53. package/dist/lib/patching/patches/circle.patch.d.ts +0 -3
  54. package/dist/lib/patching/patches/freetext.patch.d.ts +0 -3
  55. package/dist/lib/patching/patches/index.d.ts +0 -9
  56. package/dist/lib/patching/patches/ink.patch.d.ts +0 -3
  57. package/dist/lib/patching/patches/line.patch.d.ts +0 -3
  58. package/dist/lib/patching/patches/polygon.patch.d.ts +0 -3
  59. package/dist/lib/patching/patches/polyline.patch.d.ts +0 -3
  60. package/dist/lib/patching/patches/square.patch.d.ts +0 -3
  61. package/dist/lib/patching/patches/stamp.patch.d.ts +0 -3
  62. package/dist/lib/reducer.d.ts +0 -6
  63. package/dist/lib/selectors.d.ts +0 -139
  64. package/dist/lib/tools/default-tools.d.ts +0 -521
  65. package/dist/lib/tools/tools-utils.d.ts +0 -453
  66. package/dist/lib/tools/types.d.ts +0 -209
  67. package/dist/lib/types.d.ts +0 -671
  68. package/dist/lib/utils/index.d.ts +0 -1
  69. package/dist/lib/utils/use-state.d.ts +0 -12
  70. package/dist/preact/adapter.d.ts +0 -14
  71. package/dist/preact/core.d.ts +0 -1
  72. package/dist/preact/index.cjs +0 -2
  73. package/dist/preact/index.cjs.map +0 -1
  74. package/dist/preact/index.d.ts +0 -1
  75. package/dist/preact/index.js +0 -4013
  76. package/dist/preact/index.js.map +0 -1
  77. package/dist/preact/interaction-manager.d.ts +0 -1
  78. package/dist/preact/selection.d.ts +0 -1
  79. package/dist/preact/utils.d.ts +0 -1
  80. package/dist/react/adapter.d.ts +0 -6
  81. package/dist/react/core.d.ts +0 -1
  82. package/dist/react/index.cjs +0 -2
  83. package/dist/react/index.cjs.map +0 -1
  84. package/dist/react/index.d.ts +0 -1
  85. package/dist/react/index.js +0 -4014
  86. package/dist/react/index.js.map +0 -1
  87. package/dist/react/interaction-manager.d.ts +0 -1
  88. package/dist/react/selection.d.ts +0 -1
  89. package/dist/react/utils.d.ts +0 -1
  90. package/dist/shared/annotation-bounds.d.ts +0 -14
  91. package/dist/shared/components/annotation-container.d.ts +0 -71
  92. package/dist/shared/components/annotation-layer.d.ts +0 -33
  93. package/dist/shared/components/annotation-navigation-handler.d.ts +0 -1
  94. package/dist/shared/components/annotation-paint-layer.d.ts +0 -7
  95. package/dist/shared/components/annotations/callout-free-text-preview.d.ts +0 -15
  96. package/dist/shared/components/annotations/callout-free-text.d.ts +0 -15
  97. package/dist/shared/components/annotations/caret.d.ts +0 -24
  98. package/dist/shared/components/annotations/circle.d.ts +0 -35
  99. package/dist/shared/components/annotations/free-text.d.ts +0 -17
  100. package/dist/shared/components/annotations/ink.d.ts +0 -27
  101. package/dist/shared/components/annotations/line.d.ts +0 -35
  102. package/dist/shared/components/annotations/link-locked.d.ts +0 -3
  103. package/dist/shared/components/annotations/link.d.ts +0 -28
  104. package/dist/shared/components/annotations/polygon.d.ts +0 -23
  105. package/dist/shared/components/annotations/polyline.d.ts +0 -23
  106. package/dist/shared/components/annotations/square.d.ts +0 -35
  107. package/dist/shared/components/annotations/stamp.d.ts +0 -13
  108. package/dist/shared/components/annotations/text.d.ts +0 -14
  109. package/dist/shared/components/annotations.d.ts +0 -22
  110. package/dist/shared/components/appearance-image.d.ts +0 -12
  111. package/dist/shared/components/built-in-renderers.d.ts +0 -2
  112. package/dist/shared/components/group-selection-box.d.ts +0 -40
  113. package/dist/shared/components/index.d.ts +0 -2
  114. package/dist/shared/components/preview-renderer.d.ts +0 -8
  115. package/dist/shared/components/render-annotation.d.ts +0 -13
  116. package/dist/shared/components/text-markup/highlight.d.ts +0 -16
  117. package/dist/shared/components/text-markup/squiggly.d.ts +0 -16
  118. package/dist/shared/components/text-markup/strikeout.d.ts +0 -16
  119. package/dist/shared/components/text-markup/underline.d.ts +0 -16
  120. package/dist/shared/components/text-markup.d.ts +0 -7
  121. package/dist/shared/components/types.d.ts +0 -253
  122. package/dist/shared/context/index.d.ts +0 -1
  123. package/dist/shared/context/renderer-registry.d.ts +0 -21
  124. package/dist/shared/hooks/index.d.ts +0 -2
  125. package/dist/shared/hooks/use-annotation.d.ts +0 -19
  126. package/dist/shared/hooks/use-ios-zoom-prevention.d.ts +0 -16
  127. package/dist/shared/index.d.ts +0 -6
  128. package/dist/shared/types.d.ts +0 -10
  129. package/dist/shared-preact/annotation-bounds.d.ts +0 -14
  130. package/dist/shared-preact/components/annotation-container.d.ts +0 -71
  131. package/dist/shared-preact/components/annotation-layer.d.ts +0 -33
  132. package/dist/shared-preact/components/annotation-navigation-handler.d.ts +0 -1
  133. package/dist/shared-preact/components/annotation-paint-layer.d.ts +0 -7
  134. package/dist/shared-preact/components/annotations/callout-free-text-preview.d.ts +0 -15
  135. package/dist/shared-preact/components/annotations/callout-free-text.d.ts +0 -15
  136. package/dist/shared-preact/components/annotations/caret.d.ts +0 -24
  137. package/dist/shared-preact/components/annotations/circle.d.ts +0 -35
  138. package/dist/shared-preact/components/annotations/free-text.d.ts +0 -17
  139. package/dist/shared-preact/components/annotations/ink.d.ts +0 -27
  140. package/dist/shared-preact/components/annotations/line.d.ts +0 -35
  141. package/dist/shared-preact/components/annotations/link-locked.d.ts +0 -3
  142. package/dist/shared-preact/components/annotations/link.d.ts +0 -28
  143. package/dist/shared-preact/components/annotations/polygon.d.ts +0 -23
  144. package/dist/shared-preact/components/annotations/polyline.d.ts +0 -23
  145. package/dist/shared-preact/components/annotations/square.d.ts +0 -35
  146. package/dist/shared-preact/components/annotations/stamp.d.ts +0 -13
  147. package/dist/shared-preact/components/annotations/text.d.ts +0 -14
  148. package/dist/shared-preact/components/annotations.d.ts +0 -22
  149. package/dist/shared-preact/components/appearance-image.d.ts +0 -12
  150. package/dist/shared-preact/components/built-in-renderers.d.ts +0 -2
  151. package/dist/shared-preact/components/group-selection-box.d.ts +0 -40
  152. package/dist/shared-preact/components/index.d.ts +0 -2
  153. package/dist/shared-preact/components/preview-renderer.d.ts +0 -8
  154. package/dist/shared-preact/components/render-annotation.d.ts +0 -13
  155. package/dist/shared-preact/components/text-markup/highlight.d.ts +0 -16
  156. package/dist/shared-preact/components/text-markup/squiggly.d.ts +0 -16
  157. package/dist/shared-preact/components/text-markup/strikeout.d.ts +0 -16
  158. package/dist/shared-preact/components/text-markup/underline.d.ts +0 -16
  159. package/dist/shared-preact/components/text-markup.d.ts +0 -7
  160. package/dist/shared-preact/components/types.d.ts +0 -253
  161. package/dist/shared-preact/context/index.d.ts +0 -1
  162. package/dist/shared-preact/context/renderer-registry.d.ts +0 -21
  163. package/dist/shared-preact/hooks/index.d.ts +0 -2
  164. package/dist/shared-preact/hooks/use-annotation.d.ts +0 -19
  165. package/dist/shared-preact/hooks/use-ios-zoom-prevention.d.ts +0 -15
  166. package/dist/shared-preact/index.d.ts +0 -6
  167. package/dist/shared-preact/types.d.ts +0 -10
  168. package/dist/shared-react/annotation-bounds.d.ts +0 -14
  169. package/dist/shared-react/components/annotation-container.d.ts +0 -71
  170. package/dist/shared-react/components/annotation-layer.d.ts +0 -33
  171. package/dist/shared-react/components/annotation-navigation-handler.d.ts +0 -1
  172. package/dist/shared-react/components/annotation-paint-layer.d.ts +0 -7
  173. package/dist/shared-react/components/annotations/callout-free-text-preview.d.ts +0 -15
  174. package/dist/shared-react/components/annotations/callout-free-text.d.ts +0 -15
  175. package/dist/shared-react/components/annotations/caret.d.ts +0 -24
  176. package/dist/shared-react/components/annotations/circle.d.ts +0 -35
  177. package/dist/shared-react/components/annotations/free-text.d.ts +0 -17
  178. package/dist/shared-react/components/annotations/ink.d.ts +0 -27
  179. package/dist/shared-react/components/annotations/line.d.ts +0 -35
  180. package/dist/shared-react/components/annotations/link-locked.d.ts +0 -3
  181. package/dist/shared-react/components/annotations/link.d.ts +0 -28
  182. package/dist/shared-react/components/annotations/polygon.d.ts +0 -23
  183. package/dist/shared-react/components/annotations/polyline.d.ts +0 -23
  184. package/dist/shared-react/components/annotations/square.d.ts +0 -35
  185. package/dist/shared-react/components/annotations/stamp.d.ts +0 -13
  186. package/dist/shared-react/components/annotations/text.d.ts +0 -14
  187. package/dist/shared-react/components/annotations.d.ts +0 -22
  188. package/dist/shared-react/components/appearance-image.d.ts +0 -12
  189. package/dist/shared-react/components/built-in-renderers.d.ts +0 -2
  190. package/dist/shared-react/components/group-selection-box.d.ts +0 -40
  191. package/dist/shared-react/components/index.d.ts +0 -2
  192. package/dist/shared-react/components/preview-renderer.d.ts +0 -8
  193. package/dist/shared-react/components/render-annotation.d.ts +0 -13
  194. package/dist/shared-react/components/text-markup/highlight.d.ts +0 -16
  195. package/dist/shared-react/components/text-markup/squiggly.d.ts +0 -16
  196. package/dist/shared-react/components/text-markup/strikeout.d.ts +0 -16
  197. package/dist/shared-react/components/text-markup/underline.d.ts +0 -16
  198. package/dist/shared-react/components/text-markup.d.ts +0 -7
  199. package/dist/shared-react/components/types.d.ts +0 -253
  200. package/dist/shared-react/context/index.d.ts +0 -1
  201. package/dist/shared-react/context/renderer-registry.d.ts +0 -21
  202. package/dist/shared-react/hooks/index.d.ts +0 -2
  203. package/dist/shared-react/hooks/use-annotation.d.ts +0 -19
  204. package/dist/shared-react/hooks/use-ios-zoom-prevention.d.ts +0 -16
  205. package/dist/shared-react/index.d.ts +0 -6
  206. package/dist/shared-react/types.d.ts +0 -10
  207. package/dist/shared-vue/annotation-bounds.d.ts +0 -14
  208. package/dist/svelte/components/AnnotationContainer.svelte.d.ts +0 -26
  209. package/dist/svelte/components/AnnotationLayer.svelte.d.ts +0 -40
  210. package/dist/svelte/components/AnnotationNavigationHandler.svelte.d.ts +0 -3
  211. package/dist/svelte/components/AnnotationPaintLayer.svelte.d.ts +0 -8
  212. package/dist/svelte/components/Annotations.svelte.d.ts +0 -28
  213. package/dist/svelte/components/AppearanceImage.svelte.d.ts +0 -8
  214. package/dist/svelte/components/GroupSelectionBox.svelte.d.ts +0 -40
  215. package/dist/svelte/components/PreviewRenderer.svelte.d.ts +0 -9
  216. package/dist/svelte/components/RenderAnnotation.svelte.d.ts +0 -14
  217. package/dist/svelte/components/RendererRegistryProvider.svelte.d.ts +0 -7
  218. package/dist/svelte/components/TextMarkup.svelte.d.ts +0 -8
  219. package/dist/svelte/components/annotations/CalloutFreeText.svelte.d.ts +0 -15
  220. package/dist/svelte/components/annotations/CalloutFreeTextPreview.svelte.d.ts +0 -10
  221. package/dist/svelte/components/annotations/Caret.svelte.d.ts +0 -13
  222. package/dist/svelte/components/annotations/Circle.svelte.d.ts +0 -19
  223. package/dist/svelte/components/annotations/CirclePreview.svelte.d.ts +0 -10
  224. package/dist/svelte/components/annotations/FreeText.svelte.d.ts +0 -16
  225. package/dist/svelte/components/annotations/FreeTextPreview.svelte.d.ts +0 -10
  226. package/dist/svelte/components/annotations/Ink.svelte.d.ts +0 -15
  227. package/dist/svelte/components/annotations/InkPreview.svelte.d.ts +0 -10
  228. package/dist/svelte/components/annotations/Line.svelte.d.ts +0 -19
  229. package/dist/svelte/components/annotations/LinePreview.svelte.d.ts +0 -10
  230. package/dist/svelte/components/annotations/Link.svelte.d.ts +0 -24
  231. package/dist/svelte/components/annotations/LinkLockedMode.svelte.d.ts +0 -5
  232. package/dist/svelte/components/annotations/LinkPreview.svelte.d.ts +0 -10
  233. package/dist/svelte/components/annotations/Polygon.svelte.d.ts +0 -21
  234. package/dist/svelte/components/annotations/PolygonPreview.svelte.d.ts +0 -10
  235. package/dist/svelte/components/annotations/Polyline.svelte.d.ts +0 -19
  236. package/dist/svelte/components/annotations/PolylinePreview.svelte.d.ts +0 -10
  237. package/dist/svelte/components/annotations/Square.svelte.d.ts +0 -19
  238. package/dist/svelte/components/annotations/SquarePreview.svelte.d.ts +0 -10
  239. package/dist/svelte/components/annotations/Stamp.svelte.d.ts +0 -13
  240. package/dist/svelte/components/annotations/StampPreview.svelte.d.ts +0 -10
  241. package/dist/svelte/components/annotations/Text.svelte.d.ts +0 -10
  242. package/dist/svelte/components/annotations/index.d.ts +0 -10
  243. package/dist/svelte/components/built-in-renderers.d.ts +0 -2
  244. package/dist/svelte/components/index.d.ts +0 -11
  245. package/dist/svelte/components/renderers/CalloutFreeTextRenderer.svelte.d.ts +0 -5
  246. package/dist/svelte/components/renderers/CaretRenderer.svelte.d.ts +0 -5
  247. package/dist/svelte/components/renderers/CircleRenderer.svelte.d.ts +0 -5
  248. package/dist/svelte/components/renderers/FreeTextRenderer.svelte.d.ts +0 -5
  249. package/dist/svelte/components/renderers/HighlightRenderer.svelte.d.ts +0 -5
  250. package/dist/svelte/components/renderers/InkRenderer.svelte.d.ts +0 -5
  251. package/dist/svelte/components/renderers/LineRenderer.svelte.d.ts +0 -5
  252. package/dist/svelte/components/renderers/LinkRenderer.svelte.d.ts +0 -5
  253. package/dist/svelte/components/renderers/PolygonRenderer.svelte.d.ts +0 -5
  254. package/dist/svelte/components/renderers/PolylineRenderer.svelte.d.ts +0 -5
  255. package/dist/svelte/components/renderers/SquareRenderer.svelte.d.ts +0 -5
  256. package/dist/svelte/components/renderers/SquigglyRenderer.svelte.d.ts +0 -5
  257. package/dist/svelte/components/renderers/StampRenderer.svelte.d.ts +0 -5
  258. package/dist/svelte/components/renderers/StrikeoutRenderer.svelte.d.ts +0 -5
  259. package/dist/svelte/components/renderers/TextRenderer.svelte.d.ts +0 -5
  260. package/dist/svelte/components/renderers/UnderlineRenderer.svelte.d.ts +0 -5
  261. package/dist/svelte/components/text-markup/Highlight.svelte.d.ts +0 -16
  262. package/dist/svelte/components/text-markup/Squiggly.svelte.d.ts +0 -16
  263. package/dist/svelte/components/text-markup/Strikeout.svelte.d.ts +0 -16
  264. package/dist/svelte/components/text-markup/Underline.svelte.d.ts +0 -16
  265. package/dist/svelte/components/text-markup/index.d.ts +0 -4
  266. package/dist/svelte/components/types.d.ts +0 -66
  267. package/dist/svelte/context/index.d.ts +0 -2
  268. package/dist/svelte/context/renderer-registry.svelte.d.ts +0 -20
  269. package/dist/svelte/context/types.d.ts +0 -129
  270. package/dist/svelte/hooks/index.d.ts +0 -2
  271. package/dist/svelte/hooks/use-annotation.svelte.d.ts +0 -21
  272. package/dist/svelte/hooks/use-ios-zoom-prevention.svelte.d.ts +0 -6
  273. package/dist/svelte/index.cjs +0 -2
  274. package/dist/svelte/index.cjs.map +0 -1
  275. package/dist/svelte/index.d.ts +0 -6
  276. package/dist/svelte/index.js +0 -5257
  277. package/dist/svelte/index.js.map +0 -1
  278. package/dist/svelte/types.d.ts +0 -126
  279. package/dist/vue/components/annotation-container.vue.d.ts +0 -134
  280. package/dist/vue/components/annotation-layer.vue.d.ts +0 -99
  281. package/dist/vue/components/annotation-navigation-handler.vue.d.ts +0 -3
  282. package/dist/vue/components/annotation-paint-layer.vue.d.ts +0 -8
  283. package/dist/vue/components/annotations/callout-free-text-preview.vue.d.ts +0 -10
  284. package/dist/vue/components/annotations/callout-free-text.vue.d.ts +0 -25
  285. package/dist/vue/components/annotations/caret.vue.d.ts +0 -24
  286. package/dist/vue/components/annotations/circle-preview.vue.d.ts +0 -10
  287. package/dist/vue/components/annotations/circle.vue.d.ts +0 -37
  288. package/dist/vue/components/annotations/free-text-preview.vue.d.ts +0 -10
  289. package/dist/vue/components/annotations/free-text.vue.d.ts +0 -25
  290. package/dist/vue/components/annotations/index.d.ts +0 -10
  291. package/dist/vue/components/annotations/ink-preview.vue.d.ts +0 -10
  292. package/dist/vue/components/annotations/ink.vue.d.ts +0 -27
  293. package/dist/vue/components/annotations/line-preview.vue.d.ts +0 -10
  294. package/dist/vue/components/annotations/line.vue.d.ts +0 -38
  295. package/dist/vue/components/annotations/link-locked.vue.d.ts +0 -5
  296. package/dist/vue/components/annotations/link-preview.vue.d.ts +0 -10
  297. package/dist/vue/components/annotations/link.vue.d.ts +0 -47
  298. package/dist/vue/components/annotations/polygon-preview.vue.d.ts +0 -10
  299. package/dist/vue/components/annotations/polygon.vue.d.ts +0 -43
  300. package/dist/vue/components/annotations/polyline-preview.vue.d.ts +0 -10
  301. package/dist/vue/components/annotations/polyline.vue.d.ts +0 -38
  302. package/dist/vue/components/annotations/square-preview.vue.d.ts +0 -10
  303. package/dist/vue/components/annotations/square.vue.d.ts +0 -37
  304. package/dist/vue/components/annotations/stamp-preview.vue.d.ts +0 -10
  305. package/dist/vue/components/annotations/stamp.vue.d.ts +0 -19
  306. package/dist/vue/components/annotations/text.vue.d.ts +0 -14
  307. package/dist/vue/components/annotations.vue.d.ts +0 -111
  308. package/dist/vue/components/appearance-image.vue.d.ts +0 -9
  309. package/dist/vue/components/built-in-renderers.d.ts +0 -2
  310. package/dist/vue/components/group-selection-box.vue.d.ts +0 -98
  311. package/dist/vue/components/index.d.ts +0 -11
  312. package/dist/vue/components/preview-renderer.vue.d.ts +0 -9
  313. package/dist/vue/components/render-annotation.vue.d.ts +0 -16
  314. package/dist/vue/components/renderer-registry-provider.vue.d.ts +0 -13
  315. package/dist/vue/components/renderers/callout-free-text-renderer.vue.d.ts +0 -6
  316. package/dist/vue/components/renderers/caret-renderer.vue.d.ts +0 -6
  317. package/dist/vue/components/renderers/circle-renderer.vue.d.ts +0 -6
  318. package/dist/vue/components/renderers/free-text-renderer.vue.d.ts +0 -6
  319. package/dist/vue/components/renderers/highlight-renderer.vue.d.ts +0 -6
  320. package/dist/vue/components/renderers/ink-renderer.vue.d.ts +0 -6
  321. package/dist/vue/components/renderers/line-renderer.vue.d.ts +0 -6
  322. package/dist/vue/components/renderers/link-renderer.vue.d.ts +0 -6
  323. package/dist/vue/components/renderers/polygon-renderer.vue.d.ts +0 -6
  324. package/dist/vue/components/renderers/polyline-renderer.vue.d.ts +0 -6
  325. package/dist/vue/components/renderers/square-renderer.vue.d.ts +0 -6
  326. package/dist/vue/components/renderers/squiggly-renderer.vue.d.ts +0 -6
  327. package/dist/vue/components/renderers/stamp-renderer.vue.d.ts +0 -6
  328. package/dist/vue/components/renderers/strikeout-renderer.vue.d.ts +0 -6
  329. package/dist/vue/components/renderers/text-renderer.vue.d.ts +0 -6
  330. package/dist/vue/components/renderers/underline-renderer.vue.d.ts +0 -6
  331. package/dist/vue/components/text-markup/highlight.vue.d.ts +0 -27
  332. package/dist/vue/components/text-markup/index.d.ts +0 -4
  333. package/dist/vue/components/text-markup/squiggly.vue.d.ts +0 -27
  334. package/dist/vue/components/text-markup/strikeout.vue.d.ts +0 -27
  335. package/dist/vue/components/text-markup/underline.vue.d.ts +0 -27
  336. package/dist/vue/components/text-markup.vue.d.ts +0 -8
  337. package/dist/vue/context/index.d.ts +0 -2
  338. package/dist/vue/context/renderer-registry.d.ts +0 -26
  339. package/dist/vue/context/types.d.ts +0 -129
  340. package/dist/vue/hooks/index.d.ts +0 -2
  341. package/dist/vue/hooks/use-annotation.d.ts +0 -50
  342. package/dist/vue/hooks/use-ios-zoom-prevention.d.ts +0 -7
  343. package/dist/vue/index.cjs +0 -2
  344. package/dist/vue/index.cjs.map +0 -1
  345. package/dist/vue/index.d.ts +0 -6
  346. package/dist/vue/index.js +0 -4984
  347. package/dist/vue/index.js.map +0 -1
  348. package/dist/vue/types.d.ts +0 -94
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/svelte/context/renderer-registry.svelte.ts","../../src/svelte/components/RendererRegistryProvider.svelte","../../src/svelte/hooks/use-annotation.svelte.ts","../../src/svelte/hooks/use-ios-zoom-prevention.svelte.ts","../../src/svelte/components/AnnotationContainer.svelte","../../src/svelte/components/AppearanceImage.svelte","../../src/shared/annotation-bounds.ts","../../src/svelte/components/GroupSelectionBox.svelte","../../src/svelte/components/annotations/Ink.svelte","../../src/svelte/components/annotations/Square.svelte","../../src/svelte/components/annotations/Circle.svelte","../../src/svelte/components/annotations/Line.svelte","../../src/svelte/components/annotations/Polyline.svelte","../../src/svelte/components/annotations/Polygon.svelte","../../src/svelte/components/annotations/FreeText.svelte","../../src/svelte/components/RenderAnnotation.svelte","../../src/svelte/components/annotations/Stamp.svelte","../../src/svelte/components/annotations/Link.svelte","../../src/svelte/components/text-markup/Highlight.svelte","../../src/svelte/components/text-markup/Underline.svelte","../../src/svelte/components/text-markup/Strikeout.svelte","../../src/svelte/components/text-markup/Squiggly.svelte","../../src/svelte/components/annotations/Text.svelte","../../src/svelte/components/built-in-renderers.ts","../../src/svelte/components/renderers/InkRenderer.svelte","../../src/svelte/components/annotations/InkPreview.svelte","../../src/svelte/components/renderers/SquareRenderer.svelte","../../src/svelte/components/annotations/SquarePreview.svelte","../../src/svelte/components/renderers/CircleRenderer.svelte","../../src/svelte/components/annotations/CirclePreview.svelte","../../src/svelte/components/renderers/LineRenderer.svelte","../../src/svelte/components/annotations/LinePreview.svelte","../../src/svelte/components/renderers/PolylineRenderer.svelte","../../src/svelte/components/annotations/PolylinePreview.svelte","../../src/svelte/components/renderers/PolygonRenderer.svelte","../../src/svelte/components/annotations/PolygonPreview.svelte","../../src/svelte/components/renderers/HighlightRenderer.svelte","../../src/svelte/components/renderers/UnderlineRenderer.svelte","../../src/svelte/components/renderers/StrikeoutRenderer.svelte","../../src/svelte/components/renderers/SquigglyRenderer.svelte","../../src/svelte/components/renderers/TextRenderer.svelte","../../src/svelte/components/annotations/Caret.svelte","../../src/svelte/components/renderers/CaretRenderer.svelte","../../src/svelte/components/renderers/CalloutFreeTextRenderer.svelte","../../src/svelte/components/annotations/CalloutFreeText.svelte","../../src/svelte/components/annotations/CalloutFreeTextPreview.svelte","../../src/svelte/components/renderers/FreeTextRenderer.svelte","../../src/svelte/components/annotations/FreeTextPreview.svelte","../../src/svelte/components/renderers/StampRenderer.svelte","../../src/svelte/components/annotations/StampPreview.svelte","../../src/svelte/components/renderers/LinkRenderer.svelte","../../src/svelte/components/annotations/LinkPreview.svelte","../../src/svelte/components/annotations/LinkLockedMode.svelte","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/index.ts","../../src/svelte/components/AnnotationNavigationHandler.svelte","../../src/svelte/components/AnnotationLayer.svelte"],"sourcesContent":["import { getContext, setContext } from 'svelte';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationRendererEntry,\n AnnotationRendererProps,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from './types';\nimport type { PdfAnnotationObject, Rect } from '@embedpdf/models';\nimport type { VertexConfig } from '../../shared/types';\nimport type { Component } from 'svelte';\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 REGISTRY_KEY = Symbol('AnnotationRendererRegistry');\n\nexport function createRendererRegistry(): AnnotationRendererRegistry {\n let renderers = $state<BoxedAnnotationRenderer[]>([]);\n\n return {\n register(entries) {\n const ids = new Set(entries.map((e) => e.id));\n renderers = [...renderers.filter((r) => !ids.has(r.id)), ...entries];\n return () => {\n renderers = renderers.filter((r) => !entries.some((e) => e.id === r.id));\n };\n },\n getAll() {\n return renderers;\n },\n };\n}\n\nexport function provideRendererRegistry(): AnnotationRendererRegistry {\n const registry = createRendererRegistry();\n setContext(REGISTRY_KEY, registry);\n return registry;\n}\n\nexport function getRendererRegistry(): AnnotationRendererRegistry | null {\n return getContext<AnnotationRendererRegistry>(REGISTRY_KEY) ?? null;\n}\n\n/**\n * Factory to create a boxed renderer from a typed entry.\n */\nexport function createRenderer<T extends PdfAnnotationObject, P = never>(\n entry: AnnotationRendererEntry<T, P>,\n): BoxedAnnotationRenderer {\n return {\n id: entry.id,\n matches: entry.matches ?? (() => false),\n component: (entry.component ?? (() => null)) as Component<AnnotationRendererProps>,\n matchesPreview: entry.matchesPreview,\n previewContainerStyle: entry.previewContainerStyle\n ? (props) => entry.previewContainerStyle!(props as { data: P; bounds: Rect; scale: number })\n : undefined,\n vertexConfig: entry.vertexConfig as VertexConfig<PdfAnnotationObject> | undefined,\n zIndex: entry.zIndex,\n defaultBlendMode: entry.defaultBlendMode,\n containerStyle: entry.containerStyle as\n | ((annotation: PdfAnnotationObject) => string)\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 renderPreview: entry.renderPreview as BoxedAnnotationRenderer['renderPreview'],\n hiddenWhenLocked: entry.hiddenWhenLocked,\n renderLocked: entry.renderLocked as BoxedAnnotationRenderer['renderLocked'],\n };\n}\n\n// Re-export types for convenience\nexport type {\n AnnotationRendererProps,\n AnnotationRendererEntry,\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n};\n","<script lang=\"ts\">\n import { provideRendererRegistry } from '../context';\n import type { Snippet } from 'svelte';\n\n let { children }: { children: Snippet } = $props();\n\n provideRendererRegistry();\n</script>\n\n{@render children()}\n","import {\n AnnotationPlugin,\n AnnotationDocumentState,\n initialDocumentState,\n AnnotationScope,\n} from '@embedpdf/plugin-annotation';\nimport { useCapability, usePlugin } from '@embedpdf/core/svelte';\n\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseAnnotationReturn {\n provides: AnnotationScope | null;\n state: AnnotationDocumentState;\n}\n\n/**\n * Hook for annotation state for a specific document\n * @param getDocumentId Document ID getter function\n */\nexport const useAnnotation = (getDocumentId: () => string | null): UseAnnotationReturn => {\n const capability = useAnnotationCapability();\n\n let state = $state<AnnotationDocumentState>(initialDocumentState());\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n state = initialDocumentState();\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Get initial state\n state = scope.getState();\n\n // Subscribe to state changes for THIS docId\n return scope.onStateChange((newState) => {\n state = newState;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return state;\n },\n };\n};\n","const MIN_IOS_FOCUS_FONT_PX = 16;\n\nfunction detectIOS(): boolean {\n try {\n const nav = navigator as any;\n return (\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && nav?.maxTouchPoints > 1)\n );\n } catch {\n return false;\n }\n}\n\nlet _isIOS: boolean | undefined;\nfunction getIsIOS(): boolean {\n if (_isIOS === undefined) {\n _isIOS = detectIOS();\n }\n return _isIOS;\n}\n\nexport function useIOSZoomPrevention(getComputedFontPx: () => number, getActive: () => boolean) {\n const isIOS = getIsIOS();\n\n const needsComp = $derived.by(() => {\n const px = getComputedFontPx();\n return isIOS && getActive() && px > 0 && px < MIN_IOS_FOCUS_FONT_PX;\n });\n\n const adjustedFontPx = $derived(needsComp ? MIN_IOS_FOCUS_FONT_PX : getComputedFontPx());\n const scaleComp = $derived(needsComp ? getComputedFontPx() / MIN_IOS_FOCUS_FONT_PX : 1);\n\n const wrapperStyle = $derived.by(() => {\n if (!needsComp) return '';\n const s = scaleComp;\n return `width: ${100 / s}%; height: ${100 / s}%; transform: scale(${s}); transform-origin: top left;`;\n });\n\n return {\n get needsComp() {\n return needsComp;\n },\n get adjustedFontPx() {\n return adjustedFontPx;\n },\n get scaleComp() {\n return scaleComp;\n },\n get wrapperStyle() {\n return wrapperStyle;\n },\n };\n}\n","<script lang=\"ts\" generics=\"T extends PdfAnnotationObject\">\n import type { PdfAnnotationObject, Rect, CssBlendMode } from '@embedpdf/models';\n import { getCounterRotation } from '@embedpdf/utils';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationCapability, useAnnotationPlugin } from '../hooks';\n import type { AnnotationContainerProps } from './types';\n import {\n useInteractionHandles,\n doublePress,\n CounterRotate,\n deepToRaw,\n type SelectionMenuPlacement,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import type { Snippet } from 'svelte';\n import { untrack } from 'svelte';\n import { type AnnotationSelectionContext, type AnnotationSelectionMenuProps } from '../types';\n import { inferRotationCenterFromRects } from '../../lib/geometry/rotation';\n import AppearanceImage from './AppearanceImage.svelte';\n\n let {\n documentId,\n scale,\n pageIndex,\n rotation,\n pageWidth,\n pageHeight,\n trackedAnnotation,\n children,\n isSelected,\n isEditing = false,\n isMultiSelected = false,\n isDraggable,\n isResizable,\n isRotatable = true,\n lockAspectRatio = false,\n blendMode,\n style: propsStyle,\n class: propsClass = '',\n vertexConfig,\n selectionMenu,\n selectionMenuSnippet,\n structurallyLocked = false,\n contentLocked = false,\n outlineOffset = 1,\n onDoubleClick,\n onSelect,\n appearance,\n zIndex = 1,\n resizeUI,\n vertexUI,\n rotationUI,\n selectionOutlineColor,\n selectionOutline,\n customAnnotationRenderer,\n // Destructure props that shouldn't be passed to DOM elements\n groupSelectionMenu: _groupSelectionMenu,\n groupSelectionOutline: _groupSelectionOutline,\n annotationRenderers: _annotationRenderers,\n ...restProps\n }: AnnotationContainerProps<T> = $props();\n\n let preview = $state<T | null>(null);\n let liveRotation = $state<number | null>(null);\n let cursorScreen = $state<{ x: number; y: number } | null>(null);\n let isHandleHovered = $state(false);\n let gestureActive = $state(false);\n let annotationCapability = useAnnotationCapability();\n const annotationPlugin = useAnnotationPlugin();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBaseRef = $state<T | null>(null);\n let gestureBaseRectRef = $state<Rect | null>(null);\n\n // When multi-selected, disable individual drag/resize - GroupSelectionBox handles it\n const effectiveIsDraggable = $derived(\n permissions.canModifyAnnotations && isDraggable && !isMultiSelected,\n );\n const effectiveIsResizable = $derived(\n permissions.canModifyAnnotations && isResizable && !isMultiSelected,\n );\n const effectiveIsRotatable = $derived(\n permissions.canModifyAnnotations && isRotatable && !isMultiSelected,\n );\n\n // Wrap onDoubleClick to respect permissions\n const guardedOnDoubleClick = $derived(\n permissions.canModifyAnnotations && onDoubleClick ? onDoubleClick : undefined,\n );\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let currentObject = $derived<T>(\n preview ? { ...trackedAnnotation.object, ...preview } : trackedAnnotation.object,\n );\n\n // Annotation flags\n const annoFlags = $derived(trackedAnnotation.object.flags ?? []);\n const hasNoZoom = $derived(annoFlags.includes('noZoom'));\n const hasNoRotate = $derived(annoFlags.includes('noRotate'));\n // noZoom: maintain constant screen-pixel size regardless of zoom level.\n const visualScale = $derived(hasNoZoom ? 1 : scale);\n // noRotate: stay visually upright regardless of page rotation.\n const effectivePageRotation = $derived((hasNoRotate ? 0 : rotation) as typeof rotation);\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const VERTEX_COLOR = $derived(vertexUI?.color ?? '#007ACC');\n const ROTATION_COLOR = $derived(rotationUI?.color ?? 'white');\n const ROTATION_CONNECTOR_COLOR = $derived(rotationUI?.connectorColor ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const VERTEX_SIZE = $derived(vertexUI?.size ?? 12);\n const ROTATION_SIZE = $derived(rotationUI?.size ?? 32);\n const ROTATION_MARGIN = $derived(rotationUI?.margin);\n const ROTATION_ICON_COLOR = $derived(rotationUI?.iconColor ?? '#007ACC');\n const SHOW_CONNECTOR = $derived(rotationUI?.showConnector ?? false);\n const ROTATION_BORDER_COLOR = $derived(rotationUI?.border?.color ?? '#007ACC');\n const ROTATION_BORDER_WIDTH = $derived(rotationUI?.border?.width ?? 1);\n const ROTATION_BORDER_STYLE = $derived(rotationUI?.border?.style ?? 'solid');\n\n // Outline resolution (new object > deprecated props > defaults)\n const outlineColor = $derived(selectionOutline?.color ?? selectionOutlineColor ?? '#007ACC');\n const outlineStyleVal = $derived(selectionOutline?.style ?? 'solid');\n const outlineWidth = $derived(selectionOutline?.width ?? 1);\n const outlineOff = $derived(selectionOutline?.offset ?? outlineOffset ?? 1);\n\n // Get annotation's current rotation (for simple shapes that store rotation)\n // During drag, use liveRotation if available; otherwise use the annotation's rotation\n const annotationRotation = $derived(liveRotation ?? (currentObject as any).rotation ?? 0);\n const rotationDisplay = $derived(liveRotation ?? (currentObject as any).rotation ?? 0);\n const normalizedRotationDisplay = $derived(\n Number.isFinite(rotationDisplay) ? Math.round(rotationDisplay * 10) / 10 : 0,\n );\n const rotationActive = $derived(liveRotation !== null);\n\n // Determine if we should show the outline\n // When multi-selected, don't show individual outlines - GroupSelectionBox shows the group outline\n const showOutline = $derived(isSelected && !isMultiSelected);\n\n // Geometry model:\n // - `rect` is the visible AABB container.\n // - `unrotatedRect` is the local editing frame for resize/vertex operations.\n const explicitUnrotatedRect = $derived((currentObject as any).unrotatedRect as Rect | undefined);\n const effectiveUnrotatedRect = $derived(explicitUnrotatedRect ?? currentObject.rect);\n const rotationPivot = $derived(\n explicitUnrotatedRect && annotationRotation !== 0\n ? inferRotationCenterFromRects(effectiveUnrotatedRect, currentObject.rect, annotationRotation)\n : undefined,\n );\n const controllerElement = $derived(effectiveUnrotatedRect);\n\n // Three-layer model dimensions\n // noZoom: use visualScale (=1) so the annotation keeps a constant screen-pixel size.\n // noRotate: counter-rotate the outer div so the annotation stays upright on rotated pages.\n const aabbWidth = $derived(currentObject.rect.size.width * visualScale);\n const aabbHeight = $derived(currentObject.rect.size.height * visualScale);\n const innerWidth = $derived(effectiveUnrotatedRect.size.width * visualScale);\n const innerHeight = $derived(effectiveUnrotatedRect.size.height * visualScale);\n const usesCustomPivot = $derived(Boolean(explicitUnrotatedRect) && annotationRotation !== 0);\n const innerLeft = $derived(\n usesCustomPivot\n ? (effectiveUnrotatedRect.origin.x - currentObject.rect.origin.x) * visualScale\n : (aabbWidth - innerWidth) / 2,\n );\n const innerTop = $derived(\n usesCustomPivot\n ? (effectiveUnrotatedRect.origin.y - currentObject.rect.origin.y) * visualScale\n : (aabbHeight - innerHeight) / 2,\n );\n const innerTransformOrigin = $derived(\n usesCustomPivot && rotationPivot\n ? `${(rotationPivot.x - effectiveUnrotatedRect.origin.x) * visualScale}px ${(rotationPivot.y - effectiveUnrotatedRect.origin.y) * visualScale}px`\n : 'center center',\n );\n const centerX = $derived(\n rotationPivot ? (rotationPivot.x - currentObject.rect.origin.x) * visualScale : aabbWidth / 2,\n );\n const centerY = $derived(\n rotationPivot ? (rotationPivot.y - currentObject.rect.origin.y) * visualScale : aabbHeight / 2,\n );\n const guideLength = $derived(Math.max(300, Math.max(aabbWidth, aabbHeight) + 80));\n // noRotate: compute counter-rotation to undo page rotation on this annotation's outer div.\n const counterRot = $derived(\n hasNoRotate\n ? getCounterRotation(\n { origin: { x: 0, y: 0 }, size: { width: aabbWidth, height: aabbHeight } },\n rotation,\n )\n : null,\n );\n\n const apActive = $derived(\n !!appearance?.normal && !gestureActive && !isEditing && !trackedAnnotation.dictMode,\n );\n\n // For children, override rect to use unrotatedRect so content renders in unrotated space\n const childObject = $derived.by(() => {\n if (explicitUnrotatedRect) {\n return { ...currentObject, rect: explicitUnrotatedRect };\n }\n return currentObject;\n });\n\n // Sync preview with tracked annotation when it changes\n $effect(() => {\n if (trackedAnnotation.object) {\n preview = 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)\n $effect(() => {\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const id = trackedAnnotation.object.id;\n\n const handleEvent = (event: {\n documentId: string;\n type: string;\n previewPatches?: Record<string, any>;\n }) => {\n if (event.documentId !== documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation = null;\n }\n const patch = event.previewPatches?.[id];\n if (event.type === 'update' && patch) {\n // Use untrack to prevent tracking the read of preview (like Vue's toRaw)\n preview = { ...(untrack(() => preview) ?? trackedAnnotation.object), ...patch } as T;\n } else if (event.type === 'cancel') {\n preview = trackedAnnotation.object;\n }\n };\n\n const unsubs = [\n plugin.onDragChange(handleEvent),\n plugin.onResizeChange(handleEvent),\n plugin.onRotateChange(handleEvent),\n ];\n\n return () => unsubs.forEach((u) => u());\n });\n\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: controllerElement,\n vertices: vertexConfig?.extractVertices(currentObject),\n constraints: {\n minWidth: 10,\n minHeight: 10,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n annotationRotation: annotationRotation,\n rotationCenter: rotationPivot,\n rotationElement: currentObject.rect,\n scale: scale,\n // Disable interaction handles when multi-selected\n enabled: isSelected && !isMultiSelected,\n onUpdate: (event) => {\n if (!event.transformData?.type || isMultiSelected) return;\n\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n\n const { type, changes, metadata } = event.transformData;\n const id = trackedAnnotation.object.id;\n const pageSize = { width: pageWidth, height: pageHeight };\n\n // Gesture start - initialize plugin drag/resize\n if (event.state === 'start') {\n gestureBaseRectRef =\n (trackedAnnotation.object as any).unrotatedRect ?? trackedAnnotation.object.rect;\n gestureBaseRef = trackedAnnotation.object;\n\n if (type === 'resize' || type === 'vertex-edit') {\n gestureActive = true;\n }\n\n if (type === 'move') {\n plugin.startDrag(documentId, { annotationIds: [id], pageSize });\n } else if (type === 'resize') {\n plugin.startResize(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) {\n if (type === 'move') {\n const delta = {\n x: changes.rect.origin.x - gestureBaseRectRef.origin.x,\n y: changes.rect.origin.y - gestureBaseRectRef.origin.y,\n };\n plugin.updateDrag(documentId, delta);\n } else if (type === 'resize') {\n plugin.updateResize(documentId, changes.rect);\n }\n }\n\n // Vertex edit - handle directly (no attached link handling needed)\n if (type === 'vertex-edit' && changes.vertices && vertexConfig) {\n const base = gestureBaseRef ?? trackedAnnotation.object;\n const vertexChanges = vertexConfig.transformAnnotation(base, changes.vertices);\n const patched = annotationCapability.provides?.transformAnnotation<T>(base, {\n type,\n changes: vertexChanges as Partial<T>,\n metadata,\n });\n if (patched) {\n preview = { ...(preview ?? trackedAnnotation.object), ...patched };\n if (event.state === 'end') {\n const sanitized = deepToRaw(patched);\n annotationProvides?.updateAnnotation(pageIndex, id, sanitized);\n }\n }\n }\n\n // Rotation handling\n if (type === 'rotate') {\n const cursorAngle = metadata?.rotationAngle ?? annotationRotation;\n const cursorPos = metadata?.cursorPosition;\n if (cursorPos) cursorScreen = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation = cursorAngle;\n plugin.startRotation(documentId, {\n annotationIds: [id],\n cursorAngle,\n rotationCenter: metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation = cursorAngle;\n plugin.updateRotation(documentId, cursorAngle, metadata?.rotationDelta);\n } else if (event.state === 'end') {\n liveRotation = null;\n cursorScreen = null;\n plugin.commitRotation(documentId);\n }\n return;\n }\n\n // Gesture end - commit\n if (event.state === 'end') {\n gestureActive = false;\n gestureBaseRectRef = null;\n gestureBaseRef = null;\n if (type === 'move') plugin.commitDrag(documentId);\n else if (type === 'resize') plugin.commitResize(documentId);\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOff,\n offsetMode: 'outside',\n includeSides: lockAspectRatio ? false : true,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: VERTEX_SIZE,\n zIndex: zIndex + 2,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE,\n margin: ROTATION_MARGIN,\n zIndex: zIndex + 3,\n showConnector: SHOW_CONNECTOR,\n },\n includeVertices: vertexConfig ? true : false,\n includeRotation: effectiveIsRotatable,\n currentRotation: annotationRotation,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const vertexHandles = $derived(interactionHandles.vertices);\n const rotationHandle = $derived(interactionHandles.rotation);\n\n // --- Selection Menu Logic ---\n\n // Check if we should show menu - hide when multi-selected or rotating\n const shouldShowMenu = $derived(\n isSelected &&\n !isMultiSelected &&\n !rotationActive &&\n (!!selectionMenu || !!selectionMenuSnippet),\n );\n\n // Build context object for selection menu\n function buildContext(): AnnotationSelectionContext {\n return {\n type: 'annotation',\n annotation: trackedAnnotation,\n pageIndex,\n structurallyLocked,\n contentLocked,\n };\n }\n\n // Build menu props\n function buildMenuProps(\n rect: Rect,\n menuWrapperProps: MenuWrapperProps,\n ): AnnotationSelectionMenuProps {\n // The handle's visual angle = annotationRotation + pageRotation (in degrees).\n // `rotation` is in quarter turns (0-3), so multiply by 90 to get degrees.\n // The menu (suggestTop: false) renders at the visual bottom (180deg).\n // Flip the menu to the top when the handle is in the bottom visual hemisphere\n // to prevent it from overlapping with the rotation handle.\n const effectiveAngle = (((annotationRotation + effectivePageRotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide = effectiveIsRotatable && effectiveAngle > 90 && effectiveAngle < 270;\n\n return {\n context: buildContext(),\n selected: isSelected,\n rect,\n placement: {\n suggestTop: handleNearMenuSide,\n spaceAbove: 0,\n spaceBelow: 0,\n },\n menuWrapperProps,\n };\n }\n\n // Svelte action for portaling tooltip to document.body\n function portalToBody(node: HTMLElement) {\n document.body.appendChild(node);\n return {\n destroy() {\n if (node.parentNode === document.body) {\n document.body.removeChild(node);\n }\n },\n };\n }\n</script>\n\n<div data-no-interaction>\n <!-- Visual Layer: blend mode applied here, contains only annotation content -->\n <div\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{counterRot ? counterRot.width : aabbWidth}px\"\n style:height=\"{counterRot ? counterRot.height : aabbHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n style:transform={counterRot ? counterRot.matrix : undefined}\n style:transform-origin={counterRot ? '0 0' : undefined}\n style:mix-blend-mode={blendMode}\n style={propsStyle}\n >\n <!-- Inner div: rotated visual content - no pointer events -->\n <div\n style:position=\"absolute\"\n style:left=\"{innerLeft}px\"\n style:top=\"{innerTop}px\"\n style:width=\"{innerWidth}px\"\n style:height=\"{innerHeight}px\"\n style:transform={annotationRotation !== 0 ? `rotate(${annotationRotation}deg)` : undefined}\n style:transform-origin={innerTransformOrigin}\n style:pointer-events={isEditing ? 'auto' : 'none'}\n >\n <!-- Annotation content - renders in unrotated coordinate space -->\n {#if customAnnotationRenderer}\n {@render customAnnotationRenderer?.({\n annotation: childObject,\n children: children as Snippet,\n isSelected,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n pageIndex,\n onSelect,\n })}\n {:else}\n {@render children(childObject, { appearanceActive: apActive })}\n {/if}\n\n <!-- AP overlay canvas (always in DOM, toggled via display) -->\n {#if appearance?.normal}\n <AppearanceImage\n appearance={appearance.normal}\n style=\"display: {apActive ? 'block' : 'none'};\"\n />\n {/if}\n </div>\n </div>\n\n <!-- Interaction Layer: no blend mode, contains rotation guides, handles, and drag/resize/vertex -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n style:position=\"absolute\"\n style:left=\"{currentObject.rect.origin.x * scale}px\"\n style:top=\"{currentObject.rect.origin.y * scale}px\"\n style:width=\"{counterRot ? counterRot.width : aabbWidth}px\"\n style:height=\"{counterRot ? counterRot.height : aabbHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n style:transform={counterRot ? counterRot.matrix : undefined}\n style:transform-origin={counterRot ? '0 0' : undefined}\n class={propsClass}\n {...restProps}\n >\n <!-- Rotation guide lines - anchored at stable AABB center -->\n {#if rotationActive}\n <!-- Fixed snap lines (cross at 0/90/180/270) -->\n <div\n style:position=\"absolute\"\n style:left=\"{centerX - guideLength / 2}px\"\n style:top=\"{centerY}px\"\n style:width=\"{guideLength}px\"\n style:height=\"1px\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <div\n style:position=\"absolute\"\n style:left=\"{centerX}px\"\n style:top=\"{centerY - guideLength / 2}px\"\n style:width=\"1px\"\n style:height=\"{guideLength}px\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <!-- Rotating indicator line showing current angle -->\n <div\n style:position=\"absolute\"\n style:left=\"{centerX - guideLength / 2}px\"\n style:top=\"{centerY}px\"\n style:width=\"{guideLength}px\"\n style:height=\"1px\"\n style:transform-origin=\"center center\"\n style:transform=\"rotate({annotationRotation}deg)\"\n style:background-color={ROTATION_CONNECTOR_COLOR}\n style:opacity=\"0.8\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n\n <!-- Rotation handle - orbits in AABB space, kept in DOM during rotation -->\n {#if isSelected && effectiveIsRotatable && rotationHandle}\n {#if rotationUI?.component}\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n {@render rotationUI.component({\n ...rotationHandle.handle,\n backgroundColor: ROTATION_COLOR,\n iconColor: ROTATION_ICON_COLOR,\n connectorStyle: `${rotationHandle.connector.style}; background-color: ${ROTATION_CONNECTOR_COLOR}; opacity: ${rotationActive ? 0 : 1};`,\n showConnector: SHOW_CONNECTOR,\n opacity: rotationActive ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR,\n width: ROTATION_BORDER_WIDTH,\n style: ROTATION_BORDER_STYLE,\n },\n })}\n </div>\n {:else}\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n <!-- Connector line -->\n {#if SHOW_CONNECTOR}\n <div\n style=\"{rotationHandle.connector\n .style}; background-color: {ROTATION_CONNECTOR_COLOR}; opacity: {rotationActive\n ? 0\n : 1};\"\n ></div>\n {/if}\n <!-- Rotation handle -->\n <div\n {...{\n onpointerdown: rotationHandle.handle.onpointerdown,\n onpointermove: rotationHandle.handle.onpointermove,\n onpointerup: rotationHandle.handle.onpointerup,\n onpointercancel: rotationHandle.handle.onpointercancel,\n }}\n style=\"{rotationHandle.handle\n .style}; background-color: {ROTATION_COLOR}; border: {ROTATION_BORDER_WIDTH}px {ROTATION_BORDER_STYLE} {ROTATION_BORDER_COLOR}; box-sizing: border-box; display: flex; align-items: center; justify-content: center; pointer-events: auto; opacity: {rotationActive\n ? 0\n : 1};\"\n >\n <svg\n width={Math.round(ROTATION_SIZE * 0.6)}\n height={Math.round(ROTATION_SIZE * 0.6)}\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 {/if}\n {/if}\n\n <!-- Inner div: drag/resize/vertex interaction -->\n <div\n {...effectiveIsDraggable && isSelected ? interactionHandles.dragProps : {}}\n use:doublePress={{ onDouble: guardedOnDoubleClick }}\n style:position=\"absolute\"\n style:left=\"{innerLeft}px\"\n style:top=\"{innerTop}px\"\n style:width=\"{innerWidth}px\"\n style:height=\"{innerHeight}px\"\n style:transform={annotationRotation !== 0 ? `rotate(${annotationRotation}deg)` : undefined}\n style:transform-origin={innerTransformOrigin}\n style:outline={showOutline ? `${outlineWidth}px ${outlineStyleVal} ${outlineColor}` : 'none'}\n style:outline-offset={showOutline ? `${outlineOff}px` : '0px'}\n style:pointer-events={isSelected && !isMultiSelected && !isEditing ? 'auto' : 'none'}\n style:touch-action=\"none\"\n style:cursor={isSelected && effectiveIsDraggable ? 'move' : 'default'}\n >\n <!-- Resize handles - rotate with the shape -->\n {#if isSelected && effectiveIsResizable && !rotationActive}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({\n ...hProps,\n style: handleStyle,\n backgroundColor: HANDLE_COLOR,\n })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n\n <!-- Vertex handles - rotate with the shape -->\n {#if isSelected && permissions.canModifyAnnotations && !isMultiSelected && !rotationActive}\n {#each vertexHandles as { key, style: vertexStyle, ...vProps } (key)}\n {#if vertexUI?.component}\n {@render vertexUI.component({\n ...vProps,\n style: vertexStyle,\n backgroundColor: VERTEX_COLOR,\n })}\n {:else}\n <div {...vProps} style=\"{vertexStyle}; background-color: {VERTEX_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n </div>\n\n <!-- Selection Menu: Supports BOTH render function and snippet - hide when multi-selected or rotating -->\n {#if shouldShowMenu}\n <CounterRotate\n rect={{\n origin: {\n x: currentObject.rect.origin.x * scale,\n y: currentObject.rect.origin.y * scale,\n },\n size: {\n width: currentObject.rect.size.width * visualScale,\n height: currentObject.rect.size.height * visualScale,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if selectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = selectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if selectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render selectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n\n <!-- Cursor-following rotation tooltip - portaled to document.body to escape CSS transform chain -->\n {#if (rotationActive || isHandleHovered) && cursorScreen}\n <div use:portalToBody>\n <div\n style:position=\"fixed\"\n style:left=\"{cursorScreen.x + 16}px\"\n style:top=\"{cursorScreen.y - 16}px\"\n style:background=\"rgba(0,0,0,0.8)\"\n style:color=\"#fff\"\n style:padding=\"4px 8px\"\n style:border-radius=\"4px\"\n style:font-size=\"12px\"\n style:font-family=\"monospace\"\n style:pointer-events=\"none\"\n style:z-index=\"10000\"\n style:white-space=\"nowrap\"\n >\n {normalizedRotationDisplay.toFixed(0)}°\n </div>\n </div>\n {/if}\n</div>\n","<script lang=\"ts\">\n import { type AnnotationAppearanceImage } from '@embedpdf/models';\n\n interface Props {\n appearance: AnnotationAppearanceImage<Blob>;\n style?: string;\n }\n\n let { appearance, style }: Props = $props();\n\n let imageUrl = $state<string | null>(null);\n let currentUrl: string | null = null;\n\n $effect(() => {\n const url = URL.createObjectURL(appearance.data);\n imageUrl = url;\n currentUrl = url;\n\n return () => {\n if (currentUrl) {\n URL.revokeObjectURL(currentUrl);\n currentUrl = null;\n }\n };\n });\n\n function handleLoad() {\n if (currentUrl) {\n URL.revokeObjectURL(currentUrl);\n currentUrl = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n src={imageUrl}\n alt=\"\"\n draggable=\"false\"\n onload={handleLoad}\n style=\"position: absolute; width: 100%; height: 100%; display: block; pointer-events: none; user-select: none; {style ??\n ''}\"\n />\n{/if}\n","import { Rotation } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface ScreenBounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nfunction mapCounterRotatePoint(\n x: number,\n y: number,\n width: number,\n height: number,\n rotation: Rotation,\n): { x: number; y: number } {\n switch (rotation) {\n case 1:\n return { x: y, y: height - x };\n case 2:\n return { x: width - x, y: height - y };\n case 3:\n return { x: width - y, y: x };\n default:\n return { x, y };\n }\n}\n\n/**\n * Compute the screen-space bounding box of an annotation, correctly accounting\n * for `noZoom` (constant pixel size regardless of zoom) and `noRotate`\n * (visually upright regardless of page rotation) annotation flags.\n */\nexport function getAnnotationScreenBounds(\n annotation: TrackedAnnotation,\n scale: number,\n rotation: Rotation,\n): ScreenBounds {\n const flags = annotation.object.flags ?? [];\n const hasNoZoom = flags.includes('noZoom');\n const hasNoRotate = flags.includes('noRotate');\n\n const left = annotation.object.rect.origin.x * scale;\n const top = annotation.object.rect.origin.y * scale;\n const width = annotation.object.rect.size.width * (hasNoZoom ? 1 : scale);\n const height = annotation.object.rect.size.height * (hasNoZoom ? 1 : scale);\n\n if (!hasNoRotate || rotation === 0) {\n return {\n left,\n top,\n right: left + width,\n bottom: top + height,\n };\n }\n\n const corners = [\n mapCounterRotatePoint(0, 0, width, height, rotation),\n mapCounterRotatePoint(width, 0, width, height, rotation),\n mapCounterRotatePoint(0, height, width, height, rotation),\n mapCounterRotatePoint(width, height, width, height, rotation),\n ];\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (const corner of corners) {\n if (corner.x < minX) minX = corner.x;\n if (corner.y < minY) minY = corner.y;\n if (corner.x > maxX) maxX = corner.x;\n if (corner.y > maxY) maxY = corner.y;\n }\n\n return {\n left: left + minX,\n top: top + minY,\n right: left + maxX,\n bottom: top + maxY,\n };\n}\n","<!-- GroupSelectionBox.svelte -->\n<script lang=\"ts\">\n import { boundingRectOrEmpty, type Rect, type Rotation } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { getAnnotationScreenBounds } from '../../shared/annotation-bounds';\n import {\n useInteractionHandles,\n CounterRotate,\n type MenuWrapperProps,\n } from '@embedpdf/utils/svelte';\n import { useDocumentPermissions } from '@embedpdf/core/svelte';\n import { useAnnotationPlugin } from '../hooks';\n import type {\n GroupSelectionContext,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n ResizeHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import type { Snippet } from 'svelte';\n\n interface GroupSelectionBoxProps {\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 /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n }\n\n let {\n documentId,\n pageIndex,\n scale,\n rotation,\n pageWidth,\n pageHeight,\n selectedAnnotations,\n isDraggable,\n isResizable,\n isRotatable = true,\n lockAspectRatio = false,\n resizeUI,\n rotationUI,\n selectionOutlineColor,\n outlineOffset,\n selectionOutline,\n zIndex = 2,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n }: GroupSelectionBoxProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n const permissions = useDocumentPermissions(() => documentId);\n let gestureBase = $state<Rect | null>(null);\n let isDraggingRef = $state(false);\n let isResizingRef = $state(false);\n let liveRotation = $state<number | null>(null);\n let cursorScreen = $state<{ x: number; y: number } | null>(null);\n let isHandleHovered = $state(false);\n\n // Check permissions before allowing drag/resize/rotate\n const effectiveIsDraggable = $derived(permissions.canModifyAnnotations && isDraggable);\n const effectiveIsResizable = $derived(permissions.canModifyAnnotations && isResizable);\n const effectiveIsRotatable = $derived(permissions.canModifyAnnotations && isRotatable);\n\n // Helper to compute group box on demand\n function getGroupBox(): Rect {\n const rects = selectedAnnotations.map((ta) => ta.object.rect);\n return boundingRectOrEmpty(rects);\n }\n\n // Compute the group bounding box from all selected annotations (for reactive bindings)\n const groupBox = $derived.by(getGroupBox);\n\n // Preview state for the group box during drag/resize\n let previewGroupBox = $state<Rect>(getGroupBox());\n\n // Sync preview with actual group box when not dragging/resizing\n $effect(() => {\n if (!isDraggingRef && !isResizingRef) {\n const newBox = groupBox;\n // Only update if values actually changed (not just object reference)\n if (\n previewGroupBox.origin.x !== newBox.origin.x ||\n previewGroupBox.origin.y !== newBox.origin.y ||\n previewGroupBox.size.width !== newBox.size.width ||\n previewGroupBox.size.height !== newBox.size.height\n ) {\n previewGroupBox = newBox;\n }\n }\n });\n\n // Subscribe to rotation end events to clear live rotation\n $effect(() => {\n const plugin = annotationPlugin.plugin;\n if (!plugin) return;\n const unsubscribe = plugin.onRotateChange((event: { documentId: string; type: string }) => {\n if (event.documentId !== documentId) return;\n if (event.type === 'end' || event.type === 'cancel') {\n liveRotation = null;\n }\n });\n return unsubscribe;\n });\n\n // UI constants\n const HANDLE_COLOR = $derived(resizeUI?.color ?? '#007ACC');\n const HANDLE_SIZE = $derived(resizeUI?.size ?? 12);\n const ROTATION_COLOR = $derived(rotationUI?.color ?? 'white');\n const ROTATION_CONNECTOR_COLOR = $derived(rotationUI?.connectorColor ?? '#007ACC');\n const ROTATION_SIZE = $derived(rotationUI?.size ?? 32);\n const ROTATION_MARGIN = $derived(rotationUI?.margin);\n const ROTATION_ICON_COLOR = $derived(rotationUI?.iconColor ?? '#007ACC');\n const SHOW_CONNECTOR = $derived(rotationUI?.showConnector ?? false);\n const ROTATION_BORDER_COLOR = $derived(rotationUI?.border?.color ?? '#007ACC');\n const ROTATION_BORDER_WIDTH = $derived(rotationUI?.border?.width ?? 1);\n const ROTATION_BORDER_STYLE = $derived(rotationUI?.border?.style ?? 'solid');\n\n // Outline resolution (new object > deprecated props > group defaults)\n const outlineColor = $derived(selectionOutline?.color ?? selectionOutlineColor ?? '#007ACC');\n const outlineStyleVal = $derived(selectionOutline?.style ?? 'dashed');\n const outlineWidthVal = $derived(selectionOutline?.width ?? 2);\n const outlineOff = $derived(selectionOutline?.offset ?? outlineOffset ?? 2);\n\n const groupRotationDisplay = $derived(liveRotation ?? 0);\n const rotationActive = $derived(liveRotation !== null);\n const normalizedRotationDisplay = $derived(\n Number.isFinite(groupRotationDisplay) ? Math.round(groupRotationDisplay * 10) / 10 : 0,\n );\n\n // Compute visual bounds in screen pixels, accounting for mixed noZoom/noRotate selections.\n // The correction offsets let us adjust the previewGroupBox position/size during drag/resize\n // without re-running the per-annotation loop.\n const visualBoundsCorrection = $derived.by(() => {\n let visualLeft = Infinity;\n let visualTop = Infinity;\n let visualRight = -Infinity;\n let visualBottom = -Infinity;\n for (const ta of selectedAnnotations) {\n const bounds = getAnnotationScreenBounds(ta, scale, rotation as Rotation);\n if (bounds.left < visualLeft) visualLeft = bounds.left;\n if (bounds.top < visualTop) visualTop = bounds.top;\n if (bounds.right > visualRight) visualRight = bounds.right;\n if (bounds.bottom > visualBottom) visualBottom = bounds.bottom;\n }\n const logicalLeft = groupBox.origin.x * scale;\n const logicalTop = groupBox.origin.y * scale;\n const logicalRight = (groupBox.origin.x + groupBox.size.width) * scale;\n const logicalBottom = (groupBox.origin.y + groupBox.size.height) * scale;\n return {\n left: visualLeft - logicalLeft,\n top: visualTop - logicalTop,\n right: visualRight - logicalRight,\n bottom: visualBottom - logicalBottom,\n };\n });\n\n // Group box dimensions for guide lines and rotation handle positioning\n const groupBoxLeft = $derived(previewGroupBox.origin.x * scale + visualBoundsCorrection.left);\n const groupBoxTop = $derived(previewGroupBox.origin.y * scale + visualBoundsCorrection.top);\n const groupBoxWidth = $derived(\n previewGroupBox.size.width * scale +\n (visualBoundsCorrection.right - visualBoundsCorrection.left),\n );\n const groupBoxHeight = $derived(\n previewGroupBox.size.height * scale +\n (visualBoundsCorrection.bottom - visualBoundsCorrection.top),\n );\n const groupCenterX = $derived(groupBoxWidth / 2);\n const groupCenterY = $derived(groupBoxHeight / 2);\n const groupGuideLength = $derived(Math.max(300, Math.max(groupBoxWidth, groupBoxHeight) + 80));\n\n // Use interaction handles for both drag, resize, and rotation\n const interactionHandles = useInteractionHandles(() => ({\n controller: {\n element: previewGroupBox,\n constraints: {\n minWidth: 20,\n minHeight: 20,\n boundingBox: { width: pageWidth, height: pageHeight },\n },\n maintainAspectRatio: lockAspectRatio,\n pageRotation: rotation,\n scale: scale,\n enabled: true,\n onUpdate: (event) => {\n if (!event.transformData?.type) return;\n if (!annotationPlugin.plugin) return;\n\n const plugin = annotationPlugin.plugin;\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) return;\n\n if (event.state === 'start') {\n gestureBase = getGroupBox();\n\n if (isMove) {\n isDraggingRef = true;\n // Use unified drag API - plugin handles attached links automatically\n plugin.startDrag(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n });\n } else if (isResize) {\n isResizingRef = true;\n // Use unified resize API - plugin handles attached links automatically\n plugin.startResize(documentId, {\n annotationIds: selectedAnnotations.map((ta) => ta.object.id),\n pageSize: { width: pageWidth, height: pageHeight },\n resizeHandle: event.transformData.metadata?.handle ?? 'se',\n });\n }\n }\n\n // Rotation handling\n if (transformType === 'rotate') {\n if (!isRotatable) return;\n const ids = 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 = { x: cursorPos.clientX, y: cursorPos.clientY };\n if (event.state === 'start') {\n liveRotation = cursorAngle;\n plugin.startRotation(documentId, {\n annotationIds: ids,\n cursorAngle,\n rotationCenter: event.transformData.metadata?.rotationCenter,\n });\n } else if (event.state === 'move') {\n liveRotation = cursorAngle;\n plugin.updateRotation(\n documentId,\n cursorAngle,\n event.transformData.metadata?.rotationDelta,\n );\n } else if (event.state === 'end') {\n liveRotation = null;\n cursorScreen = null;\n plugin.commitRotation(documentId);\n }\n return;\n }\n\n const base = gestureBase ?? getGroupBox();\n\n if (isMove && event.transformData.changes.rect) {\n // Calculate delta from original position\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 // Plugin clamps delta and emits events (attached links receive updates too)\n const clampedDelta = plugin.updateDrag(documentId, rawDelta);\n\n // Update preview group box with clamped delta\n previewGroupBox = {\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\n // Plugin computes rects for all participants and emits events\n plugin.updateResize(documentId, newGroupBox);\n\n // Update preview\n previewGroupBox = newGroupBox;\n }\n\n if (event.state === 'end') {\n gestureBase = null;\n\n if (isMove && isDraggingRef) {\n isDraggingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitDrag(documentId);\n } else if (isResize && isResizingRef) {\n isResizingRef = false;\n // Plugin commits all patches (selected + attached links) - no patch building needed!\n plugin.commitResize(documentId);\n }\n }\n },\n },\n resizeUI: {\n handleSize: HANDLE_SIZE,\n spacing: outlineOff,\n offsetMode: 'outside',\n includeSides: !lockAspectRatio,\n zIndex: zIndex + 1,\n },\n vertexUI: {\n vertexSize: 0,\n zIndex: zIndex,\n },\n rotationUI: {\n handleSize: ROTATION_SIZE,\n margin: ROTATION_MARGIN,\n zIndex: zIndex + 2,\n showConnector: SHOW_CONNECTOR,\n },\n includeVertices: false,\n includeRotation: effectiveIsRotatable,\n currentRotation: liveRotation ?? 0,\n }));\n\n // Derived accessors for template\n const resizeHandles = $derived(interactionHandles.resize);\n const rotationHandle = $derived(interactionHandles.rotation);\n\n // --- Group Selection Menu Logic ---\n\n // Check if we should show menu\n const shouldShowMenu = $derived(!!groupSelectionMenu || !!groupSelectionMenuSnippet);\n\n // Build context object for group selection menu\n function buildContext(): GroupSelectionContext {\n return {\n type: 'group',\n annotations: selectedAnnotations,\n pageIndex,\n };\n }\n\n // Build menu props\n function buildMenuProps(rect: Rect, menuWrapperProps: MenuWrapperProps): GroupSelectionMenuProps {\n // The handle's visual angle = groupRotationDisplay + pageRotation (in degrees).\n // `rotation` is in quarter turns (0-3), so multiply by 90 to get degrees.\n // The menu (suggestTop: false) renders at the visual bottom (180deg).\n // Flip the menu to the top when the handle is in the bottom visual hemisphere\n // to prevent it from overlapping with the rotation handle.\n const effectiveAngle = (((groupRotationDisplay + rotation * 90) % 360) + 360) % 360;\n const handleNearMenuSide = effectiveIsRotatable && effectiveAngle > 90 && effectiveAngle < 270;\n\n return {\n context: buildContext(),\n selected: true,\n rect,\n placement: { suggestTop: handleNearMenuSide },\n menuWrapperProps,\n };\n }\n\n // Svelte action for portaling tooltip to document.body\n function portalToBody(node: HTMLElement) {\n document.body.appendChild(node);\n return {\n destroy() {\n if (node.parentNode === document.body) {\n document.body.removeChild(node);\n }\n },\n };\n }\n</script>\n\n{#if selectedAnnotations.length >= 2}\n <div data-group-selection-box data-no-interaction>\n <!-- Outer div: AABB container - stable center for help lines and rotation handle -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupBoxLeft}px\"\n style:top=\"{groupBoxTop}px\"\n style:width=\"{groupBoxWidth}px\"\n style:height=\"{groupBoxHeight}px\"\n style:pointer-events=\"none\"\n style:z-index={zIndex}\n >\n <!-- Rotation guide lines - anchored at stable center -->\n {#if rotationActive}\n <!-- Fixed snap lines (cross at 0/90/180/270) -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX - groupGuideLength / 2}px\"\n style:top=\"{groupCenterY}px\"\n style:width=\"{groupGuideLength}px\"\n style:height=\"1px\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX}px\"\n style:top=\"{groupCenterY - groupGuideLength / 2}px\"\n style:width=\"1px\"\n style:height=\"{groupGuideLength}px\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.35\"\n style:pointer-events=\"none\"\n ></div>\n <!-- Rotating indicator line showing current angle -->\n <div\n style:position=\"absolute\"\n style:left=\"{groupCenterX - groupGuideLength / 2}px\"\n style:top=\"{groupCenterY}px\"\n style:width=\"{groupGuideLength}px\"\n style:height=\"1px\"\n style:transform-origin=\"center center\"\n style:transform=\"rotate({groupRotationDisplay}deg)\"\n style:background-color={HANDLE_COLOR}\n style:opacity=\"0.8\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n\n <!-- Rotation handle - orbits in AABB space -->\n {#if effectiveIsRotatable && rotationHandle}\n {#if rotationUI?.component}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n {@render rotationUI.component({\n ...rotationHandle.handle,\n backgroundColor: ROTATION_COLOR,\n iconColor: ROTATION_ICON_COLOR,\n connectorStyle: `${rotationHandle.connector.style}; background-color: ${ROTATION_CONNECTOR_COLOR}; opacity: ${rotationActive ? 0 : 1};`,\n showConnector: SHOW_CONNECTOR,\n opacity: rotationActive ? 0 : 1,\n border: {\n color: ROTATION_BORDER_COLOR,\n width: ROTATION_BORDER_WIDTH,\n style: ROTATION_BORDER_STYLE,\n },\n })}\n </div>\n {:else}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n onpointerenter={() => (isHandleHovered = true)}\n onpointerleave={() => {\n isHandleHovered = false;\n cursorScreen = null;\n }}\n onpointermove={(e) => {\n if (!rotationActive) cursorScreen = { x: e.clientX, y: e.clientY };\n }}\n style=\"display: contents;\"\n >\n <!-- Connector line -->\n {#if SHOW_CONNECTOR}\n <div\n style=\"{rotationHandle.connector\n .style}; background-color: {ROTATION_CONNECTOR_COLOR}; opacity: {rotationActive\n ? 0\n : 1};\"\n ></div>\n {/if}\n <!-- Rotation handle -->\n <div\n {...{\n onpointerdown: rotationHandle.handle.onpointerdown,\n onpointermove: rotationHandle.handle.onpointermove,\n onpointerup: rotationHandle.handle.onpointerup,\n onpointercancel: rotationHandle.handle.onpointercancel,\n }}\n style=\"{rotationHandle.handle\n .style}; background-color: {ROTATION_COLOR}; border: {ROTATION_BORDER_WIDTH}px {ROTATION_BORDER_STYLE} {ROTATION_BORDER_COLOR}; box-sizing: border-box; display: flex; align-items: center; justify-content: center; pointer-events: auto; opacity: {rotationActive\n ? 0\n : 1};\"\n >\n <svg\n width={Math.round(ROTATION_SIZE * 0.6)}\n height={Math.round(ROTATION_SIZE * 0.6)}\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 {/if}\n {/if}\n\n <!-- Inner div: group content area with outline and resize handles -->\n <div\n {...effectiveIsDraggable\n ? interactionHandles.dragProps\n : { onpointerdown: (e: PointerEvent) => e.stopPropagation() }}\n style:position=\"absolute\"\n style:left=\"0px\"\n style:top=\"0px\"\n style:width=\"{groupBoxWidth}px\"\n style:height=\"{groupBoxHeight}px\"\n style:outline={rotationActive\n ? 'none'\n : `${outlineWidthVal}px ${outlineStyleVal} ${outlineColor}`}\n style:outline-offset=\"{outlineOff - 1}px\"\n style:cursor={effectiveIsDraggable ? 'move' : 'default'}\n style:touch-action=\"none\"\n style:pointer-events=\"auto\"\n >\n <!-- Resize handles -->\n {#if effectiveIsResizable && !rotationActive}\n {#each resizeHandles as { key, style: handleStyle, ...hProps } (key)}\n {#if resizeUI?.component}\n {@render resizeUI.component({\n ...hProps,\n style: handleStyle,\n backgroundColor: HANDLE_COLOR,\n })}\n {:else}\n <div {...hProps} style=\"{handleStyle}; background-color: {HANDLE_COLOR};\"></div>\n {/if}\n {/each}\n {/if}\n </div>\n </div>\n\n <!-- Cursor-following rotation tooltip -->\n {#if (rotationActive || isHandleHovered) && cursorScreen}\n <div use:portalToBody>\n <div\n style:position=\"fixed\"\n style:left=\"{cursorScreen.x + 16}px\"\n style:top=\"{cursorScreen.y - 16}px\"\n style:background=\"rgba(0,0,0,0.8)\"\n style:color=\"#fff\"\n style:padding=\"4px 8px\"\n style:border-radius=\"4px\"\n style:font-size=\"12px\"\n style:font-family=\"monospace\"\n style:pointer-events=\"none\"\n style:z-index=\"10000\"\n style:white-space=\"nowrap\"\n >\n {normalizedRotationDisplay.toFixed(0)}°\n </div>\n </div>\n {/if}\n\n <!-- Group selection menu -->\n {#if shouldShowMenu && !rotationActive}\n <CounterRotate\n rect={{\n origin: {\n x: groupBoxLeft,\n y: groupBoxTop,\n },\n size: {\n width: groupBoxWidth,\n height: groupBoxHeight,\n },\n }}\n {rotation}\n >\n {#snippet children({ rect, menuWrapperProps })}\n {@const menuProps = buildMenuProps(rect, menuWrapperProps)}\n {#if groupSelectionMenu}\n <!-- Priority 1: Render function (schema-driven) -->\n {@const result = groupSelectionMenu(menuProps)}\n {#if result}\n <result.component {...result.props} />\n {/if}\n {:else if groupSelectionMenuSnippet}\n <!-- Priority 2: Snippet (manual customization) -->\n {@render groupSelectionMenuSnippet(menuProps)}\n {/if}\n {/snippet}\n </CounterRotate>\n {/if}\n </div>\n{/if}\n","<script lang=\"ts\">\n import type { PdfInkListObject, Rect } from '@embedpdf/models';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface InkProps {\n isSelected: boolean;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n inkList: PdfInkListObject[];\n rect: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n strokeColor,\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n }: InkProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#000000');\n\n const paths = $derived.by(() =>\n inkList.map(({ points }) => {\n let d = '';\n for (let i = 0; i < points.length; i++) {\n const { x, y } = points[i];\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n }\n return d.trim();\n }),\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n {#each paths as d, i (`hit-${i}`)}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n {d}\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick ? 'none' : isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#each paths as d, i (`vis-${i}`)}\n <path\n {d}\n fill=\"none\"\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={resolvedColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"round\"\n style:stroke-linejoin=\"round\"\n />\n {/each}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, PdfRectDifferences } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { generateCloudyRectanglePath } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface SquareProps {\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: MouseEvent) => void;\n appearanceActive?: boolean;\n cloudyBorderIntensity?: number;\n rectangleDifferences?: PdfRectDifferences;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n cloudyBorderIntensity,\n rectangleDifferences,\n }: SquareProps = $props();\n\n const isCloudy = $derived((cloudyBorderIntensity ?? 0) > 0);\n\n const { width, height, x, y } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n return {\n width: innerW,\n height: innerH,\n x: strokeWidth / 2,\n y: strokeWidth / 2,\n };\n });\n\n const cloudyPath = $derived.by(() => {\n if (!isCloudy) return null;\n return generateCloudyRectanglePath(\n { x: 0, y: 0, width: rect.size.width, height: rect.size.height },\n rectangleDifferences,\n cloudyBorderIntensity!,\n strokeWidth,\n );\n });\n\n const svgWidth = $derived((width + strokeWidth) * scale);\n const svgHeight = $derived((height + strokeWidth) * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; pointer-events: none; z-index: 2;\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width + strokeWidth} ${height + strokeWidth}`}\n overflow=\"visible\"\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n />\n {:else}\n <rect\n {x}\n {y}\n {width}\n {height}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n />\n {/if}\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n stroke-linejoin=\"round\"\n />\n {:else}\n <rect\n {x}\n {y}\n {width}\n {height}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type PdfRectDifferences, type Rect } from '@embedpdf/models';\n import { generateCloudyEllipsePath } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface 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) => void;\n appearanceActive?: boolean;\n cloudyBorderIntensity?: number;\n rectangleDifferences?: PdfRectDifferences;\n }\n\n let {\n isSelected,\n color = '#000000',\n strokeColor,\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n cloudyBorderIntensity,\n rectangleDifferences,\n }: CircleProps = $props();\n\n const isCloudy = $derived((cloudyBorderIntensity ?? 0) > 0);\n\n const { width, height, cx, cy, rx, ry } = $derived.by(() => {\n const outerW = rect.size.width;\n const outerH = rect.size.height;\n const innerW = Math.max(outerW - strokeWidth, 0);\n const innerH = Math.max(outerH - strokeWidth, 0);\n\n return {\n width: outerW,\n height: outerH,\n cx: strokeWidth / 2 + innerW / 2,\n cy: strokeWidth / 2 + innerH / 2,\n rx: innerW / 2,\n ry: innerH / 2,\n };\n });\n\n const cloudyPath = $derived.by(() => {\n if (!isCloudy) return null;\n return generateCloudyEllipsePath(\n { x: 0, y: 0, width: rect.size.width, height: rect.size.height },\n rectangleDifferences,\n cloudyBorderIntensity!,\n strokeWidth,\n );\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n let hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n\n let peValue = $derived(\n !onClick ? 'none' : isSelected ? 'none' : color === 'transparent' ? 'visibleStroke' : 'visible',\n );\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n overflow=\"visible\"\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n pointer-events={peValue}\n />\n {:else}\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n pointer-events={peValue}\n />\n {/if}\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-linejoin=\"round\"\n />\n {:else}\n <ellipse\n {cx}\n {cy}\n {rx}\n {ry}\n fill={color}\n {opacity}\n style:pointer-events=\"none\"\n stroke={strokeColor ?? color}\n stroke-width={strokeWidth}\n stroke-dasharray={strokeStyle === PdfAnnotationBorderStyle.DASHED\n ? strokeDashArray?.join(',')\n : undefined}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, LinePoints, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface LineProps {\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: MouseEvent) => void;\n isSelected: boolean;\n appearanceActive?: boolean;\n }\n\n let {\n color = 'transparent',\n opacity = 1,\n strokeWidth,\n strokeColor = '#000000',\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n rect,\n linePoints,\n lineEndings,\n scale,\n onClick,\n isSelected,\n appearanceActive = false,\n }: LineProps = $props();\n\n const x1 = $derived(linePoints.start.x - rect.origin.x);\n const y1 = $derived(linePoints.start.y - rect.origin.y);\n const x2 = $derived(linePoints.end.x - rect.origin.x);\n const y2 = $derived(linePoints.end.y - rect.origin.y);\n\n const endings = $derived.by(() => {\n const angle = Math.atan2(y2 - y1, x2 - x1);\n return {\n start: patching.createEnding(lineEndings?.start, strokeWidth, angle + Math.PI, x1, y1),\n end: patching.createEnding(lineEndings?.end, strokeWidth, angle, x2, y2),\n };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick ? 'none' : isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {#if endings.start}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n {#if endings.end}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : endings.end.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <line\n {x1}\n {y1}\n {x2}\n {y2}\n {opacity}\n style:pointer-events=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, Position, LineEndings } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { patching } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface PolylineProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent) => void;\n lineEndings?: LineEndings;\n appearanceActive?: boolean;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n lineEndings,\n appearanceActive = false,\n }: PolylineProps = $props();\n\n const localPts = $derived(\n vertices.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n return (\n `M ${first.x} ${first.y} ` +\n rest\n .map((p) => `L ${p.x} ${p.y} `)\n .join('')\n .trim()\n );\n });\n\n const endings = $derived.by(() => {\n if (localPts.length < 2) return { start: null as any, end: null as any };\n const toAngle = (a: Position, b: Position) => Math.atan2(b.y - a.y, b.x - a.x);\n\n const startRad = toAngle(localPts[0], localPts[1]);\n const endRad = toAngle(localPts[localPts.length - 2], localPts[localPts.length - 1]);\n\n const start = patching.createEnding(\n lineEndings?.start,\n strokeWidth,\n startRad + Math.PI,\n localPts[0].x,\n localPts[0].y,\n );\n const end = patching.createEnding(\n lineEndings?.end,\n strokeWidth,\n endRad,\n localPts[localPts.length - 1].x,\n localPts[localPts.length - 1].y,\n );\n return { start, end };\n });\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; width: var(--w); height: var(--h); pointer-events: none; z-index: 2; overflow: visible;\"\n style:--w={`${width}px`}\n style:--h={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={pathData}\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick ? 'none' : isSelected ? 'none' : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n {#if endings.start}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : endings.start.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n {#if endings.end}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : endings.end.filled\n ? 'visible'\n : 'visibleStroke'}\n style:stroke-linecap=\"butt\"\n />\n {/if}\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <path\n d={pathData}\n {opacity}\n style:fill=\"none\"\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n {#if endings.start}\n <path\n d={endings.start.d}\n transform={endings.start.transform}\n stroke={strokeColor}\n fill={endings.start.filled ? color : 'none'}\n style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {#if endings.end}\n <path\n d={endings.end.d}\n transform={endings.end.transform}\n stroke={strokeColor}\n fill={endings.end.filled ? color : 'none'}\n style:pointer-events=\"none\"\n style:stroke-width={strokeWidth}\n style:stroke-linecap=\"butt\"\n style:stroke-dasharray={dash}\n />\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect, Position } from '@embedpdf/models';\n import { PdfAnnotationBorderStyle } from '@embedpdf/models';\n import { generateCloudyPolygonPath } from '@embedpdf/plugin-annotation';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface PolygonProps {\n rect: Rect;\n vertices: Position[];\n color?: string;\n strokeColor?: string;\n opacity?: number;\n strokeWidth: number;\n strokeStyle?: PdfAnnotationBorderStyle;\n strokeDashArray?: number[];\n scale: number;\n isSelected: boolean;\n onClick?: (e: MouseEvent) => void;\n currentVertex?: Position;\n handleSize?: number;\n appearanceActive?: boolean;\n cloudyBorderIntensity?: number;\n }\n\n let {\n rect,\n vertices,\n color = 'transparent',\n strokeColor = '#000000',\n opacity = 1,\n strokeWidth,\n strokeStyle = PdfAnnotationBorderStyle.SOLID,\n strokeDashArray,\n scale,\n isSelected,\n onClick,\n currentVertex,\n handleSize = 14,\n appearanceActive = false,\n cloudyBorderIntensity,\n }: PolygonProps = $props();\n\n const isCloudy = $derived((cloudyBorderIntensity ?? 0) > 0);\n\n const allPoints = $derived(currentVertex ? [...vertices, currentVertex] : vertices);\n\n const localPts = $derived(\n allPoints.map(({ x, y }) => ({ x: x - rect.origin.x, y: y - rect.origin.y })),\n );\n\n const pathData = $derived.by(() => {\n if (!localPts.length) return '';\n const [first, ...rest] = localPts;\n const isPreview = !!currentVertex;\n return (\n `M ${first.x} ${first.y} ` +\n rest.map((p) => `L ${p.x} ${p.y}`).join(' ') +\n (isPreview ? '' : ' Z')\n ).trim();\n });\n\n const cloudyPath = $derived.by(() => {\n if (!isCloudy || allPoints.length < 3) return null;\n return generateCloudyPolygonPath(allPoints, rect.origin, cloudyBorderIntensity!, strokeWidth);\n });\n\n const isPreviewing = $derived(!!currentVertex && vertices.length > 0);\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n\n const dash = $derived(\n strokeStyle === PdfAnnotationBorderStyle.DASHED ? strokeDashArray?.join(',') : undefined,\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; overflow: visible; pointer-events: none;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n>\n <!-- Hit area -- always rendered, transparent, wider stroke for mobile -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={isCloudy && cloudyPath ? cloudyPath.path : pathData}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : color === 'transparent'\n ? 'visibleStroke'\n : 'visible'}\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n />\n\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n {#if isCloudy && cloudyPath}\n <path\n d={cloudyPath.path}\n {opacity}\n style:fill={color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linejoin=\"round\"\n />\n {:else}\n <path\n d={pathData}\n {opacity}\n style:fill={currentVertex ? 'none' : color}\n style:stroke={strokeColor ?? color}\n style:stroke-width={strokeWidth}\n style:pointer-events=\"none\"\n style:stroke-linecap=\"butt\"\n style:stroke-linejoin=\"miter\"\n style:stroke-dasharray={dash}\n />\n\n {#if isPreviewing && vertices.length > 1}\n <path\n d={`M ${localPts[localPts.length - 1].x} ${localPts[localPts.length - 1].y} L ${localPts[0].x} ${localPts[0].y}`}\n fill=\"none\"\n style:stroke={strokeColor}\n style:stroke-width={strokeWidth}\n style:stroke-dasharray={'4,4'}\n style:opacity={0.7}\n style:pointer-events=\"none\"\n />\n {/if}\n\n {#if isPreviewing && vertices.length >= 2}\n <rect\n x={localPts[0].x - handleSize / scale / 2}\n y={localPts[0].y - handleSize / scale / 2}\n width={handleSize / scale}\n height={handleSize / scale}\n fill={strokeColor}\n opacity={0.4}\n stroke={strokeColor}\n stroke-width={strokeWidth / 2}\n style:pointer-events=\"none\"\n />\n {/if}\n {/if}\n {/if}\n</svg>\n","<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCssProperties,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability, useIOSZoomPrevention } from '../../hooks';\n\n interface FreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n onDoubleClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n documentId,\n isSelected,\n isEditing,\n annotation,\n pageIndex,\n scale,\n onClick,\n appearanceActive = false,\n }: FreeTextProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let editorRef: HTMLSpanElement | null = null;\n let editingRef = false;\n\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editingRef = true;\n editorRef.focus();\n\n const tool = annotationProvides?.findToolForAnnotation(annotation.object);\n const isDefaultContent =\n tool?.defaults?.contents != null && annotation.object.contents === tool.defaults.contents;\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n if (!isDefaultContent) {\n range.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n function handleBlur() {\n if (!editingRef) return;\n editingRef = false;\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, annotation.object.id, {\n contents: editorRef.innerText.replace(/\\u00A0/g, ' '),\n });\n }\n\n const ios = useIOSZoomPrevention(\n () => annotation.object.fontSize * scale,\n () => isEditing,\n );\n const invScalePercent = $derived(ios.needsComp ? 100 / ios.scaleComp : 100);\n\n const outerW = $derived(annotation.object.rect.size.width * scale);\n const outerH = $derived(annotation.object.rect.size.height * scale);\n\n const justify = $derived(\n annotation.object.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : annotation.object.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n\n const fontCss = $derived(standardFontCssProperties(annotation.object.fontFamily));\n</script>\n\n<div\n role=\"button\"\n tabindex={-1}\n style:position=\"absolute\"\n style:width={`${outerW}px`}\n style:height={`${outerH}px`}\n style:z-index={2}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events={!onClick ? 'none' : isSelected && !isEditing ? 'none' : 'auto'}\n style:opacity={appearanceActive ? 0 : 1}\n onpointerdown={onClick}\n>\n <span\n bind:this={editorRef}\n role=\"textbox\"\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:display=\"flex\"\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:color={annotation.object.fontColor}\n style:font-size={`${ios.adjustedFontPx}px`}\n style:font-family={fontCss.fontFamily}\n style:font-weight={fontCss.fontWeight}\n style:font-style={fontCss.fontStyle}\n style:text-align={textAlignmentToCss(annotation.object.textAlign)}\n style:background-color={annotation.object.color ?? annotation.object.backgroundColor}\n style:opacity={annotation.object.opacity}\n style:width={ios.needsComp ? `${invScalePercent}%` : '100%'}\n style:height={ios.needsComp ? `${invScalePercent}%` : '100%'}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : onClick ? 'pointer' : 'default'}\n style:outline=\"none\"\n style:transform={ios.needsComp ? `scale(${ios.scaleComp})` : undefined}\n style:transform-origin=\"top left\">{annotation.object.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import { ignore, type PdfAnnotationObject, PdfErrorCode } from '@embedpdf/models';\n import type { HTMLImgAttributes } from 'svelte/elements';\n import { useAnnotationCapability } from '../hooks';\n import { deepToRaw } from '@embedpdf/utils/svelte';\n\n interface RenderAnnotationProps extends Omit<HTMLImgAttributes, 'style'> {\n documentId: string;\n pageIndex: number;\n annotation: PdfAnnotationObject;\n scaleFactor?: number;\n dpr?: number;\n unrotated?: boolean;\n style?: Record<string, string | number | undefined>;\n }\n\n let {\n documentId,\n pageIndex,\n annotation,\n scaleFactor = 1,\n unrotated = false,\n style,\n ...restProps\n }: RenderAnnotationProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n\n let imageUrl = $state<string | null>(null);\n let urlRef: string | null = null;\n\n const { width, height } = $derived(annotation.rect.size);\n\n // Get scoped API for this document\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Effect to render annotation\n $effect(() => {\n if (annotationProvides) {\n const task = annotationProvides.renderAnnotation({\n pageIndex,\n annotation: deepToRaw(annotation),\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n unrotated,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n imageUrl = url;\n urlRef = url;\n }, ignore);\n\n return () => {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n } else {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n }\n };\n }\n });\n\n function handleImageLoad() {\n if (urlRef) {\n URL.revokeObjectURL(urlRef);\n urlRef = null;\n }\n }\n</script>\n\n{#if imageUrl}\n <img\n alt=\"\"\n src={imageUrl}\n onload={handleImageLoad}\n {...restProps}\n style:width=\"100%\"\n style:height=\"100%\"\n style:display=\"block\"\n {style}\n />\n{/if}\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import RenderAnnotation from '../RenderAnnotation.svelte';\n\n interface StampProps {\n documentId: string;\n isSelected: boolean;\n annotation: TrackedAnnotation<PdfStampAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n }\n\n let { documentId, isSelected, annotation, pageIndex, scale, onClick }: StampProps = $props();\n\n let annotationProp = $derived({ ...annotation.object, id: annotation.object.id });\n const unrotated = $derived(!!annotation.object.rotation && !!annotation.object.unrotatedRect);\n</script>\n\n<div\n role=\"button\"\n tabindex={-1}\n style=\"position: absolute; width: 100%; height: 100%; z-index: 2;\"\n style:pointer-events={!onClick ? 'none' : isSelected ? 'none' : 'auto'}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n onpointerdown={onClick}\n>\n <RenderAnnotation\n {documentId}\n {pageIndex}\n annotation={annotationProp}\n scaleFactor={scale}\n {unrotated}\n />\n</div>\n","<script lang=\"ts\">\n import { PdfAnnotationBorderStyle, type Rect } from '@embedpdf/models';\n\n interface LinkProps {\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) => void;\n /** Whether this link has an IRT (In Reply To) reference - disables direct interaction */\n hasIRT?: boolean;\n }\n\n let {\n isSelected,\n strokeColor = '#0000FF',\n strokeWidth = 2,\n strokeStyle = PdfAnnotationBorderStyle.UNDERLINE,\n strokeDashArray,\n rect,\n scale,\n onClick,\n hasIRT = false,\n }: LinkProps = $props();\n\n const width = $derived(rect.size.width);\n const height = $derived(rect.size.height);\n const svgWidth = $derived(width * scale);\n const svgHeight = $derived(height * scale);\n\n // Calculate dash array for SVG\n const dashArray = $derived.by(() => {\n if (strokeStyle === PdfAnnotationBorderStyle.DASHED) {\n return strokeDashArray?.join(',') ?? `${strokeWidth * 3},${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\n const isUnderline = $derived(strokeStyle === PdfAnnotationBorderStyle.UNDERLINE);\n\n const hitAreaCursor = $derived(hasIRT || !onClick ? 'default' : isSelected ? 'move' : 'pointer');\n const hitAreaPointerEvents = $derived(\n hasIRT || !onClick ? 'none' : isSelected ? 'none' : 'visible',\n );\n</script>\n\n<svg\n style=\"position: absolute; z-index: 2; pointer-events: none;\"\n style:width=\"{svgWidth}px\"\n style:height=\"{svgHeight}px\"\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 <!-- svelte-ignore a11y_no_static_element_interactions -->\n <rect\n x={0}\n y={0}\n {width}\n {height}\n fill=\"transparent\"\n onpointerdown={hasIRT ? undefined : onClick}\n style:cursor={hitAreaCursor}\n style:pointer-events={hitAreaPointerEvents}\n />\n\n {#if isUnderline}\n <!-- Underline style: line at bottom of rect -->\n <line\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 {:else}\n <!-- Solid/Dashed style: rectangle border -->\n <rect\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 {/if}\n</svg>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface HighlightProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: HighlightProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n</script>\n\n{#each segmentRects as b, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? b.origin.x - rect.origin.x : b.origin.x) * scale}px\"\n style:top=\"{(rect ? b.origin.y - rect.origin.y : b.origin.y) * scale}px\"\n style:width=\"{b.size.width * scale}px\"\n style:height=\"{b.size.height * scale}px\"\n style:background={appearanceActive ? 'transparent' : resolvedColor}\n style:opacity={appearanceActive ? undefined : opacity}\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : undefined}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n ></div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface UnderlineProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: UnderlineProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n const thickness = $derived(2 * scale); // 2 CSS px at 100% zoom\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={resolvedColor}\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface StrikeoutProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: StrikeoutProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n const thickness = $derived(2 * scale);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"50%\"\n style:width=\"100%\"\n style:height=\"{thickness}px\"\n style:background={resolvedColor}\n style:opacity\n style:transform=\"translateY(-50%)\"\n style:pointer-events=\"none\"\n ></div>\n {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface SquigglyProps {\n /** Stroke/markup color */\n strokeColor?: string;\n opacity?: number;\n segmentRects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: Record<string, string | number | undefined>;\n /** When true, AP image provides the visual; only render hit area */\n appearanceActive?: boolean;\n }\n\n let {\n strokeColor,\n opacity = 0.5,\n segmentRects,\n rect,\n scale,\n onClick,\n style,\n appearanceActive = false,\n }: SquigglyProps = $props();\n\n const resolvedColor = $derived(strokeColor ?? '#FFFF00');\n const amplitude = $derived(2 * scale); // wave height\n const period = $derived(6 * scale); // wave length\n\n const svg =\n $derived(`<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${resolvedColor}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`);\n\n // Completely escape the SVG markup\n const svgDataUri = $derived(`url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`);\n</script>\n\n{#each segmentRects as r, i (i)}\n <div\n role=\"button\"\n tabindex={onClick ? 0 : -1}\n onpointerdown={onClick}\n style:position=\"absolute\"\n style:left=\"{(rect ? r.origin.x - rect.origin.x : r.origin.x) * scale}px\"\n style:top=\"{(rect ? r.origin.y - rect.origin.y : r.origin.y) * scale}px\"\n style:width=\"{r.size.width * scale}px\"\n style:height=\"{r.size.height * scale}px\"\n style:background=\"transparent\"\n style:pointer-events={onClick ? 'auto' : 'none'}\n style:cursor={onClick ? 'pointer' : 'default'}\n style:z-index={onClick ? 1 : 0}\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n >\n <!-- Visual -- hidden when AP active, never interactive -->\n {#if !appearanceActive}\n <div\n style:position=\"absolute\"\n style:left=\"0\"\n style:bottom=\"0\"\n style:width=\"100%\"\n style:height=\"{amplitude * 2}px\"\n style:background-image={svgDataUri}\n style:background-repeat=\"repeat-x\"\n style:background-size=\"{period}px {amplitude * 2}px\"\n style:opacity\n style:pointer-events=\"none\"\n ></div>\n {/if}\n </div>\n{/each}\n","<script lang=\"ts\">\n import { getContrastStrokeColor } from '@embedpdf/models';\n\n interface TextProps {\n isSelected: boolean;\n color?: string;\n opacity?: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n color = '#facc15',\n opacity = 1,\n onClick,\n appearanceActive = false,\n }: TextProps = $props();\n\n const lineColor = $derived(getContrastStrokeColor(color));\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div\n style:position=\"absolute\"\n style:inset=\"0\"\n style:z-index=\"2\"\n style:pointer-events={!onClick ? 'none' : isSelected ? 'none' : 'auto'}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n onpointerdown={onClick}\n>\n {#if !appearanceActive}\n <svg\n style:position=\"absolute\"\n style:inset=\"0\"\n style:pointer-events=\"none\"\n viewBox=\"0 0 20 20\"\n width=\"100%\"\n height=\"100%\"\n >\n <path\n d=\"M 0.5 15.5 L 0.5 0.5 L 19.5 0.5 L 19.5 15.5 L 8.5 15.5 L 6.5 19.5 L 4.5 15.5 Z\"\n fill={color}\n {opacity}\n stroke={lineColor}\n stroke-width=\"1\"\n stroke-linejoin=\"miter\"\n />\n <line x1=\"2.5\" y1=\"4.25\" x2=\"17.5\" y2=\"4.25\" stroke={lineColor} stroke-width=\"1\" />\n <line x1=\"2.5\" y1=\"8\" x2=\"17.5\" y2=\"8\" stroke={lineColor} stroke-width=\"1\" />\n <line x1=\"2.5\" y1=\"11.75\" x2=\"17.5\" y2=\"11.75\" stroke={lineColor} stroke-width=\"1\" />\n </svg>\n {/if}\n</div>\n","import {\n PdfAnnotationSubtype,\n PdfAnnotationObject,\n PdfBlendMode,\n blendModeToCss,\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 PdfCaretAnnoObject,\n PdfTextAnnoObject,\n} from '@embedpdf/models';\nimport type {\n LinkPreviewData,\n InkPreviewData,\n CirclePreviewData,\n SquarePreviewData,\n LinePreviewData,\n PolylinePreviewData,\n PolygonPreviewData,\n FreeTextPreviewData,\n StampPreviewData,\n} from '@embedpdf/plugin-annotation';\nimport { patching } from '@embedpdf/plugin-annotation';\nimport type {\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n} from '../context';\nimport { createRenderer } from '../context/renderer-registry.svelte';\nimport LinkLockedMode from './annotations/LinkLockedMode.svelte';\nimport LinkPreview from './annotations/LinkPreview.svelte';\nimport InkPreview from './annotations/InkPreview.svelte';\nimport SquarePreview from './annotations/SquarePreview.svelte';\nimport CirclePreview from './annotations/CirclePreview.svelte';\nimport LinePreview from './annotations/LinePreview.svelte';\nimport PolylinePreview from './annotations/PolylinePreview.svelte';\nimport PolygonPreview from './annotations/PolygonPreview.svelte';\nimport FreeTextPreview from './annotations/FreeTextPreview.svelte';\nimport CalloutFreeTextPreview from './annotations/CalloutFreeTextPreview.svelte';\nimport StampPreview from './annotations/StampPreview.svelte';\n\nimport InkWrapper from './renderers/InkRenderer.svelte';\nimport SquareWrapper from './renderers/SquareRenderer.svelte';\nimport CircleWrapper from './renderers/CircleRenderer.svelte';\nimport LineWrapper from './renderers/LineRenderer.svelte';\nimport PolylineWrapper from './renderers/PolylineRenderer.svelte';\nimport PolygonWrapper from './renderers/PolygonRenderer.svelte';\nimport FreeTextWrapper from './renderers/FreeTextRenderer.svelte';\nimport CalloutFreeTextWrapper from './renderers/CalloutFreeTextRenderer.svelte';\nimport StampWrapper from './renderers/StampRenderer.svelte';\nimport LinkWrapper from './renderers/LinkRenderer.svelte';\nimport HighlightWrapper from './renderers/HighlightRenderer.svelte';\nimport UnderlineWrapper from './renderers/UnderlineRenderer.svelte';\nimport StrikeoutWrapper from './renderers/StrikeoutRenderer.svelte';\nimport SquigglyWrapper from './renderers/SquigglyRenderer.svelte';\nimport CaretWrapper from './renderers/CaretRenderer.svelte';\nimport TextWrapper from './renderers/TextRenderer.svelte';\n\nexport const builtInRenderers: BoxedAnnotationRenderer[] = [\n createRenderer<PdfInkAnnoObject, InkPreviewData>({\n id: 'ink',\n matches: (a): a is PdfInkAnnoObject => a.type === PdfAnnotationSubtype.INK,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.INK,\n component: InkWrapper,\n renderPreview: InkPreview,\n previewContainerStyle: ({ data }) =>\n `mix-blend-mode:${blendModeToCss(data.blendMode ?? PdfBlendMode.Normal)}`,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfSquareAnnoObject, SquarePreviewData>({\n id: 'square',\n matches: (a): a is PdfSquareAnnoObject => a.type === PdfAnnotationSubtype.SQUARE,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.SQUARE,\n component: SquareWrapper,\n renderPreview: SquarePreview,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfCircleAnnoObject, CirclePreviewData>({\n id: 'circle',\n matches: (a): a is PdfCircleAnnoObject => a.type === PdfAnnotationSubtype.CIRCLE,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.CIRCLE,\n component: CircleWrapper,\n renderPreview: CirclePreview,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLineAnnoObject, LinePreviewData>({\n id: 'line',\n matches: (a): a is PdfLineAnnoObject => a.type === PdfAnnotationSubtype.LINE,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.LINE,\n component: LineWrapper,\n renderPreview: LinePreview,\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, PolylinePreviewData>({\n id: 'polyline',\n matches: (a): a is PdfPolylineAnnoObject => a.type === PdfAnnotationSubtype.POLYLINE,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.POLYLINE,\n component: PolylineWrapper,\n renderPreview: PolylinePreview,\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, PolygonPreviewData>({\n id: 'polygon',\n matches: (a): a is PdfPolygonAnnoObject => a.type === PdfAnnotationSubtype.POLYGON,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.POLYGON,\n component: PolygonWrapper,\n renderPreview: PolygonPreview,\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: HighlightWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n defaultBlendMode: PdfBlendMode.Multiply,\n }),\n\n createRenderer<PdfUnderlineAnnoObject>({\n id: 'underline',\n matches: (a): a is PdfUnderlineAnnoObject => a.type === PdfAnnotationSubtype.UNDERLINE,\n component: UnderlineWrapper,\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: StrikeoutWrapper,\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: SquigglyWrapper,\n zIndex: 0,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfTextAnnoObject>({\n id: 'text',\n matches: (a): a is PdfTextAnnoObject => a.type === PdfAnnotationSubtype.TEXT && !a.inReplyToId,\n component: TextWrapper,\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfCaretAnnoObject>({\n id: 'caret',\n matches: (a): a is PdfCaretAnnoObject => a.type === PdfAnnotationSubtype.CARET,\n component: CaretWrapper,\n interactionDefaults: { isDraggable: false, isResizable: false, isRotatable: false },\n }),\n\n createRenderer<PdfFreeTextAnnoObject, FreeTextPreviewData>({\n id: 'freeTextCallout',\n matches: (a): a is PdfFreeTextAnnoObject =>\n a.type === PdfAnnotationSubtype.FREETEXT && a.intent === 'FreeTextCallout',\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.FREETEXT && !!p.data.calloutLine,\n component: CalloutFreeTextWrapper,\n renderPreview: CalloutFreeTextPreview,\n vertexConfig: patching.calloutVertexConfig,\n interactionDefaults: { isDraggable: true, isResizable: false, isRotatable: false },\n isDraggable: (toolDraggable, { isEditing }) => toolDraggable && !isEditing,\n onDoubleClick: (id, setEditingId) => setEditingId(id),\n }),\n\n createRenderer<PdfFreeTextAnnoObject, FreeTextPreviewData>({\n id: 'freeText',\n matches: (a): a is PdfFreeTextAnnoObject =>\n a.type === PdfAnnotationSubtype.FREETEXT && a.intent !== 'FreeTextCallout',\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.FREETEXT && !p.data.calloutLine,\n component: FreeTextWrapper,\n renderPreview: FreeTextPreview,\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, StampPreviewData>({\n id: 'stamp',\n matches: (a): a is PdfStampAnnoObject => a.type === PdfAnnotationSubtype.STAMP,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.STAMP,\n component: StampWrapper,\n renderPreview: StampPreview,\n useAppearanceStream: false,\n interactionDefaults: { isDraggable: true, isResizable: true, isRotatable: true },\n }),\n\n createRenderer<PdfLinkAnnoObject, LinkPreviewData>({\n id: 'link',\n matches: (a): a is PdfLinkAnnoObject => a.type === PdfAnnotationSubtype.LINK,\n matchesPreview: (p) => p.type === PdfAnnotationSubtype.LINK,\n component: LinkWrapper,\n renderPreview: LinkPreview,\n interactionDefaults: { isDraggable: true, isResizable: true, 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 renderLocked: LinkLockedMode,\n }),\n];\n","<script lang=\"ts\">\n import type { PdfInkAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Ink from '../annotations/Ink.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfInkAnnoObject> = $props();\n</script>\n\n<Ink {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { InkPreviewData } from '@embedpdf/plugin-annotation';\n import Ink from './Ink.svelte';\n\n interface InkPreviewProps {\n data: InkPreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, scale }: InkPreviewProps = $props();\n</script>\n\n<Ink isSelected={false} {scale} {...data} />\n","<script lang=\"ts\">\n import type { PdfSquareAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Square from '../annotations/Square.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfSquareAnnoObject> = $props();\n</script>\n\n<Square {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { SquarePreviewData } from '@embedpdf/plugin-annotation';\n import Square from './Square.svelte';\n\n interface SquarePreviewProps {\n data: SquarePreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, scale }: SquarePreviewProps = $props();\n</script>\n\n<Square isSelected={false} {scale} {...data} />\n","<script lang=\"ts\">\n import type { PdfCircleAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Circle from '../annotations/Circle.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfCircleAnnoObject> = $props();\n</script>\n\n<Circle {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { CirclePreviewData } from '@embedpdf/plugin-annotation';\n import Circle from './Circle.svelte';\n\n interface CirclePreviewProps {\n data: CirclePreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, scale }: CirclePreviewProps = $props();\n</script>\n\n<Circle isSelected={false} {scale} {...data} />\n","<script lang=\"ts\">\n import type { PdfLineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Line from '../annotations/Line.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfLineAnnoObject> = $props();\n</script>\n\n<Line {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { LinePreviewData } from '@embedpdf/plugin-annotation';\n import Line from './Line.svelte';\n\n interface LinePreviewProps {\n data: LinePreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, scale }: LinePreviewProps = $props();\n</script>\n\n<Line isSelected={false} {scale} {...data} />\n","<script lang=\"ts\">\n import type { PdfPolylineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Polyline from '../annotations/Polyline.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfPolylineAnnoObject> = $props();\n</script>\n\n<Polyline {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { PolylinePreviewData } from '@embedpdf/plugin-annotation';\n import Polyline from './Polyline.svelte';\n\n interface PolylinePreviewProps {\n data: PolylinePreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, scale }: PolylinePreviewProps = $props();\n</script>\n\n<Polyline isSelected={false} {scale} {...data} />\n","<script lang=\"ts\">\n import type { PdfPolygonAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Polygon from '../annotations/Polygon.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfPolygonAnnoObject> = $props();\n</script>\n\n<Polygon {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { PolygonPreviewData } from '@embedpdf/plugin-annotation';\n import Polygon from './Polygon.svelte';\n\n interface PolygonPreviewProps {\n data: PolygonPreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, scale }: PolygonPreviewProps = $props();\n</script>\n\n<Polygon isSelected={false} {scale} {...data} />\n","<script lang=\"ts\">\n import type { PdfHighlightAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Highlight from '../text-markup/Highlight.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfHighlightAnnoObject> = $props();\n</script>\n\n<Highlight {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfUnderlineAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Underline from '../text-markup/Underline.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfUnderlineAnnoObject> = $props();\n</script>\n\n<Underline {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfStrikeOutAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Strikeout from '../text-markup/Strikeout.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfStrikeOutAnnoObject> = $props();\n</script>\n\n<Strikeout {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfSquigglyAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Squiggly from '../text-markup/Squiggly.svelte';\n\n let {\n currentObject,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfSquigglyAnnoObject> = $props();\n</script>\n\n<Squiggly {...currentObject} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfTextAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Text from '../annotations/Text.svelte';\n\n let {\n currentObject,\n isSelected,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfTextAnnoObject> = $props();\n</script>\n\n<Text\n {isSelected}\n color={currentObject.strokeColor ?? currentObject.color}\n opacity={currentObject.opacity}\n {onClick}\n {appearanceActive}\n/>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n\n interface CaretProps {\n isSelected: boolean;\n strokeColor?: string;\n opacity?: number;\n rect: Rect;\n scale: number;\n onClick?: (e: PointerEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n isSelected,\n strokeColor = '#000000',\n opacity = 1,\n rect,\n scale,\n onClick,\n appearanceActive = false,\n }: CaretProps = $props();\n\n const { width, height, path } = $derived.by(() => {\n const w = rect.size.width;\n const h = rect.size.height;\n const midX = w / 2;\n\n const d = [\n `M 0 ${h}`,\n `C ${w * 0.27} ${h} ${midX} ${h - h * 0.44} ${midX} 0`,\n `C ${midX} ${h - h * 0.44} ${w - w * 0.27} ${h} ${w} ${h}`,\n 'Z',\n ].join(' ');\n\n return { width: w, height: h, path: d };\n });\n\n let svgWidth = $derived(width * scale);\n let svgHeight = $derived(height * scale);\n</script>\n\n<svg\n style:position=\"absolute\"\n style:width={`${svgWidth}px`}\n style:height={`${svgHeight}px`}\n style:pointer-events=\"none\"\n style:z-index=\"2\"\n width={svgWidth}\n height={svgHeight}\n viewBox={`0 0 ${width} ${height}`}\n overflow=\"visible\"\n>\n <!-- Hit area -->\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={path}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={4}\n onpointerdown={(e) => onClick?.(e)}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n pointer-events={!onClick ? 'none' : isSelected ? 'none' : 'visible'}\n />\n <!-- Visual -->\n {#if !appearanceActive}\n <path\n d={path}\n fill={strokeColor}\n stroke={strokeColor}\n stroke-width={0.5}\n {opacity}\n fill-rule=\"evenodd\"\n style:pointer-events=\"none\"\n />\n {/if}\n</svg>\n","<script lang=\"ts\">\n import type { PdfCaretAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Caret from '../annotations/Caret.svelte';\n\n let {\n currentObject,\n isSelected,\n scale,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfCaretAnnoObject> = $props();\n</script>\n\n<Caret {...currentObject} {isSelected} {scale} {onClick} {appearanceActive} />\n","<script lang=\"ts\">\n import type { PdfFreeTextAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import CalloutFreeText from '../annotations/CalloutFreeText.svelte';\n\n let {\n annotation,\n currentObject,\n isSelected,\n isEditing,\n scale,\n pageIndex,\n documentId,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfFreeTextAnnoObject> = $props();\n</script>\n\n<CalloutFreeText\n {documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object: currentObject }}\n {pageIndex}\n {scale}\n {onClick}\n {appearanceActive}\n/>\n","<script lang=\"ts\">\n import {\n type PdfFreeTextAnnoObject,\n PdfVerticalAlignment,\n standardFontCssProperties,\n textAlignmentToCss,\n } from '@embedpdf/models';\n import type { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n import { patching } from '@embedpdf/plugin-annotation';\n import { useAnnotationCapability, useIOSZoomPrevention } from '../../hooks';\n\n const MIN_HIT_AREA_SCREEN_PX = 20;\n\n interface CalloutFreeTextProps {\n documentId: string;\n isSelected: boolean;\n isEditing: boolean;\n annotation: TrackedAnnotation<PdfFreeTextAnnoObject>;\n pageIndex: number;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n appearanceActive?: boolean;\n }\n\n let {\n documentId,\n isSelected,\n isEditing,\n annotation,\n pageIndex,\n scale,\n onClick,\n appearanceActive = false,\n }: CalloutFreeTextProps = $props();\n\n const annotationCapability = useAnnotationCapability();\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n let editorRef: HTMLSpanElement | null = null;\n let editingRef = false;\n\n const obj = $derived(annotation.object);\n const rect = $derived(obj.rect);\n const strokeWidth = $derived(obj.strokeWidth ?? 1);\n const strokeColor = $derived(obj.strokeColor ?? '#000000');\n\n const textBox = $derived(patching.computeTextBoxFromRD(rect, obj.rectangleDifferences));\n\n const textBoxRelative = $derived({\n left: (textBox.origin.x - rect.origin.x + strokeWidth / 2) * scale,\n top: (textBox.origin.y - rect.origin.y + strokeWidth / 2) * scale,\n width: (textBox.size.width - strokeWidth) * scale,\n height: (textBox.size.height - strokeWidth) * scale,\n });\n\n const lineCoords = $derived.by(() => {\n const cl = obj.calloutLine;\n if (!cl || cl.length < 3) return null;\n return cl.map((p) => ({ x: p.x - rect.origin.x, y: p.y - rect.origin.y }));\n });\n\n const ending = $derived.by(() => {\n if (!lineCoords || lineCoords.length < 2) return null;\n const angle = Math.atan2(lineCoords[1].y - lineCoords[0].y, lineCoords[1].x - lineCoords[0].x);\n return patching.createEnding(\n obj.lineEnding,\n strokeWidth,\n angle + Math.PI,\n lineCoords[0].x,\n lineCoords[0].y,\n );\n });\n\n const visualLineCoords = $derived.by(() => {\n if (!lineCoords || lineCoords.length < 2) return lineCoords;\n const pts = lineCoords.map((p) => ({ ...p }));\n const last = pts.length - 1;\n const prev = last - 1;\n const dx = pts[last].x - pts[prev].x;\n const dy = pts[last].y - pts[prev].y;\n const len = Math.sqrt(dx * dx + dy * dy);\n if (len > 0) {\n const halfBw = strokeWidth / 2;\n pts[last].x += (dx / len) * halfBw;\n pts[last].y += (dy / len) * halfBw;\n }\n return pts;\n });\n\n const ios = useIOSZoomPrevention(\n () => obj.fontSize * scale,\n () => isEditing,\n );\n\n const width = $derived(rect.size.width * scale);\n const height = $derived(rect.size.height * scale);\n const hitStrokeWidth = $derived(Math.max(strokeWidth, MIN_HIT_AREA_SCREEN_PX / scale));\n const fontCss = $derived(standardFontCssProperties(obj.fontFamily));\n\n const justify = $derived(\n obj.verticalAlign === PdfVerticalAlignment.Top\n ? 'flex-start'\n : obj.verticalAlign === PdfVerticalAlignment.Middle\n ? 'center'\n : 'flex-end',\n );\n\n $effect(() => {\n if (!isEditing || !editorRef) return;\n editingRef = true;\n editorRef.focus();\n\n const tool = annotationProvides?.findToolForAnnotation(obj);\n const isDefaultContent =\n tool?.defaults?.contents != null && obj.contents === tool.defaults.contents;\n\n const selection = window.getSelection?.();\n if (!selection) return;\n\n const range = document.createRange();\n range.selectNodeContents(editorRef);\n if (!isDefaultContent) {\n range.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n });\n\n function handleBlur() {\n if (!editingRef) return;\n editingRef = false;\n if (!annotationProvides || !editorRef) return;\n annotationProvides.updateAnnotation(pageIndex, obj.id, {\n contents: editorRef.innerText.replace(/\\u00A0/g, ' '),\n });\n }\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div\n style:position=\"absolute\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n style:cursor={isSelected && !isEditing ? 'move' : 'default'}\n style:pointer-events=\"none\"\n style:z-index={2}\n style:opacity={appearanceActive ? 0 : 1}\n>\n <svg\n style=\"position: absolute; pointer-events: none; overflow: visible;\"\n style:width={`${width}px`}\n style:height={`${height}px`}\n {width}\n {height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n >\n {#if lineCoords}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <polyline\n points={lineCoords.map((p) => `${p.x},${p.y}`).join(' ')}\n fill=\"none\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick ? (e) => onClick(e) : undefined}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick ? 'none' : isSelected ? 'none' : 'visibleStroke'}\n />\n {#if ending}\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <path\n d={ending.d}\n transform={ending.transform}\n fill=\"transparent\"\n stroke=\"transparent\"\n stroke-width={hitStrokeWidth}\n onpointerdown={onClick ? (e) => onClick(e) : undefined}\n style:cursor={isSelected ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick\n ? 'none'\n : isSelected\n ? 'none'\n : ending.filled\n ? 'visible'\n : 'visibleStroke'}\n />\n {/if}\n {/if}\n\n {#if !appearanceActive}\n {#if visualLineCoords}\n <polyline\n points={visualLineCoords.map((p) => `${p.x},${p.y}`).join(' ')}\n fill=\"none\"\n stroke={strokeColor}\n stroke-width={strokeWidth}\n opacity={obj.opacity}\n style:pointer-events=\"none\"\n />\n {#if ending}\n <path\n d={ending.d}\n transform={ending.transform}\n stroke={strokeColor}\n fill={ending.filled ? (obj.color ?? 'transparent') : 'none'}\n stroke-width={strokeWidth}\n opacity={obj.opacity}\n style:pointer-events=\"none\"\n />\n {/if}\n {/if}\n <rect\n x={textBox.origin.x - rect.origin.x + strokeWidth / 2}\n y={textBox.origin.y - rect.origin.y + strokeWidth / 2}\n width={textBox.size.width - strokeWidth}\n height={textBox.size.height - strokeWidth}\n fill={obj.color ?? obj.backgroundColor ?? 'transparent'}\n stroke={strokeColor}\n stroke-width={strokeWidth}\n opacity={obj.opacity}\n style:pointer-events=\"none\"\n />\n {/if}\n </svg>\n\n <!-- svelte-ignore a11y_no_static_element_interactions -->\n <div\n onpointerdown={onClick ? (e) => onClick(e) : undefined}\n style:position=\"absolute\"\n style:left={`${(textBox.origin.x - rect.origin.x) * scale}px`}\n style:top={`${(textBox.origin.y - rect.origin.y) * scale}px`}\n style:width={`${textBox.size.width * scale}px`}\n style:height={`${textBox.size.height * scale}px`}\n style:cursor={isSelected && !isEditing ? 'move' : onClick ? 'pointer' : 'default'}\n style:pointer-events={!onClick ? 'none' : isSelected && !isEditing ? 'none' : 'auto'}\n ></div>\n\n <span\n bind:this={editorRef}\n role=\"textbox\"\n tabindex=\"0\"\n contenteditable={isEditing}\n onblur={handleBlur}\n style:position=\"absolute\"\n style:left={`${textBoxRelative.left}px`}\n style:top={`${textBoxRelative.top}px`}\n style:width={`${textBoxRelative.width}px`}\n style:height={`${textBoxRelative.height}px`}\n style:color={obj.fontColor}\n style:font-size={`${ios.adjustedFontPx}px`}\n style:font-family={fontCss.fontFamily}\n style:font-weight={fontCss.fontWeight}\n style:font-style={fontCss.fontStyle}\n style:text-align={textAlignmentToCss(obj.textAlign)}\n style:flex-direction=\"column\"\n style:justify-content={justify}\n style:display=\"flex\"\n style:padding={`${(strokeWidth * scale) / 2 + 2 * scale}px`}\n style:opacity={obj.opacity}\n style:line-height=\"1.18\"\n style:overflow=\"hidden\"\n style:cursor={isEditing ? 'text' : 'default'}\n style:outline=\"none\"\n style:pointer-events={isEditing ? 'auto' : 'none'}>{obj.contents}</span\n >\n</div>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { FreeTextPreviewData } from '@embedpdf/plugin-annotation';\n import { patching } from '@embedpdf/plugin-annotation';\n\n interface CalloutFreeTextPreviewProps {\n data: FreeTextPreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, bounds, scale }: CalloutFreeTextPreviewProps = $props();\n\n const cl = $derived(data.calloutLine);\n const sw = $derived(data.strokeWidth ?? 1);\n const sc = $derived(data.strokeColor ?? '#000000');\n const op = $derived(data.opacity ?? 1);\n const w = $derived(bounds.size.width);\n const h = $derived(bounds.size.height);\n const ox = $derived(bounds.origin.x);\n const oy = $derived(bounds.origin.y);\n\n const lineCoords = $derived.by(() => {\n if (!cl || cl.length < 2) return null;\n return cl.map((p) => ({ x: p.x - ox, y: p.y - oy }));\n });\n\n const ending = $derived.by(() => {\n if (!lineCoords || lineCoords.length < 2) return null;\n const angle = Math.atan2(lineCoords[1].y - lineCoords[0].y, lineCoords[1].x - lineCoords[0].x);\n return patching.createEnding(\n data.lineEnding,\n sw,\n angle + Math.PI,\n lineCoords[0].x,\n lineCoords[0].y,\n );\n });\n\n const halfSw = $derived(sw / 2);\n const tb = $derived(data.textBox);\n</script>\n\n{#if lineCoords}\n <svg\n style=\"position: absolute; pointer-events: none; overflow: visible;\"\n style:width={`${w * scale}px`}\n style:height={`${h * scale}px`}\n width={w * scale}\n height={h * scale}\n viewBox={`0 0 ${w} ${h}`}\n >\n <polyline\n points={lineCoords.map((p) => `${p.x},${p.y}`).join(' ')}\n fill=\"none\"\n stroke={sc}\n stroke-width={sw}\n opacity={op}\n />\n {#if ending}\n <path\n d={ending.d}\n transform={ending.transform}\n stroke={sc}\n fill={ending.filled ? (data.color ?? 'transparent') : 'none'}\n stroke-width={sw}\n opacity={op}\n />\n {/if}\n {#if tb}\n <rect\n x={tb.origin.x - ox + halfSw}\n y={tb.origin.y - oy + halfSw}\n width={tb.size.width - sw}\n height={tb.size.height - sw}\n fill={data.color ?? data.backgroundColor ?? 'transparent'}\n stroke={sc}\n stroke-width={sw}\n opacity={op}\n />\n {/if}\n </svg>\n{/if}\n","<script lang=\"ts\">\n import type { PdfFreeTextAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import FreeText from '../annotations/FreeText.svelte';\n\n let {\n annotation,\n currentObject,\n isSelected,\n isEditing,\n scale,\n pageIndex,\n documentId,\n onClick,\n appearanceActive,\n }: AnnotationRendererProps<PdfFreeTextAnnoObject> = $props();\n</script>\n\n<FreeText\n {documentId}\n {isSelected}\n {isEditing}\n annotation={{ ...annotation, object: currentObject }}\n {pageIndex}\n {scale}\n {onClick}\n {appearanceActive}\n/>\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { FreeTextPreviewData } from '@embedpdf/plugin-annotation';\n\n interface FreeTextPreviewProps {\n data: FreeTextPreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data }: FreeTextPreviewProps = $props();\n</script>\n\n<div\n style:width=\"100%\"\n style:height=\"100%\"\n style:border=\"1px dashed {data.fontColor || '#000000'}\"\n style:background-color=\"transparent\"\n></div>\n","<script lang=\"ts\">\n import type { PdfStampAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Stamp from '../annotations/Stamp.svelte';\n\n let {\n annotation,\n isSelected,\n documentId,\n pageIndex,\n scale,\n onClick,\n }: AnnotationRendererProps<PdfStampAnnoObject> = $props();\n</script>\n\n<Stamp {documentId} {isSelected} {annotation} {pageIndex} {scale} {onClick} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { StampPreviewData } from '@embedpdf/plugin-annotation';\n\n interface StampPreviewProps {\n data: StampPreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data }: StampPreviewProps = $props();\n\n const rotationDeg = $derived(((4 - data.pageRotation) % 4) * 90);\n</script>\n\n<img\n src={data.ghostUrl}\n style:width=\"100%\"\n style:height=\"100%\"\n style:opacity=\"0.6\"\n style:object-fit=\"contain\"\n style:pointer-events=\"none\"\n style:transform={rotationDeg ? `rotate(${rotationDeg}deg)` : undefined}\n alt=\"\"\n/>\n","<script lang=\"ts\">\n import type { PdfLinkAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import Link from '../annotations/Link.svelte';\n\n let { currentObject, isSelected, scale, onClick }: AnnotationRendererProps<PdfLinkAnnoObject> =\n $props();\n</script>\n\n<Link {...currentObject} {isSelected} {scale} {onClick} hasIRT={!!currentObject.inReplyToId} />\n","<script lang=\"ts\">\n import type { Rect } from '@embedpdf/models';\n import type { LinkPreviewData } from '@embedpdf/plugin-annotation';\n\n interface LinkPreviewProps {\n data: LinkPreviewData;\n bounds: Rect;\n scale: number;\n }\n\n let { data, bounds, scale }: LinkPreviewProps = $props();\n</script>\n\n<div\n style:position=\"absolute\"\n style:left=\"0\"\n style:top=\"0\"\n style:width=\"{bounds.size.width * scale}px\"\n style:height=\"{bounds.size.height * scale}px\"\n style:border-bottom=\"{data.strokeWidth * scale}px solid {data.strokeColor}\"\n style:background-color=\"rgba(0, 0, 255, 0.05)\"\n style:box-sizing=\"border-box\"\n></div>\n","<script lang=\"ts\">\n import type { PdfLinkAnnoObject } from '@embedpdf/models';\n import type { AnnotationRendererProps } from '../../context/types';\n import { useAnnotationCapability } from '../../hooks';\n\n let { annotation, documentId }: AnnotationRendererProps<PdfLinkAnnoObject> = $props();\n\n const { provides } = useAnnotationCapability();\n\n function handleClick() {\n const target = annotation.object.target;\n if (!target || !provides) return;\n provides.forDocument(documentId).navigateTarget(target);\n }\n</script>\n\n<div\n role=\"link\"\n tabindex=\"-1\"\n onclick={handleClick}\n onkeydown={(e) => {\n if (e.key === 'Enter') handleClick();\n }}\n style:width=\"100%\"\n style:height=\"100%\"\n style:cursor=\"pointer\"\n style:pointer-events=\"auto\"\n></div>\n","<!-- Annotations.svelte -->\n<script lang=\"ts\">\n import {\n blendModeToCss,\n type PdfAnnotationObject,\n PdfBlendMode,\n type AnnotationAppearanceMap,\n type AnnotationAppearances,\n } from '@embedpdf/models';\n import {\n getAnnotationsByPageIndex,\n getSelectedAnnotationIds,\n hasNoViewFlag,\n hasHiddenFlag,\n type LockMode,\n LockModeType,\n type TrackedAnnotation,\n resolveInteractionProp,\n } from '@embedpdf/plugin-annotation';\n\n import {\n type PointerEventHandlersWithLifecycle,\n type EmbedPdfPointerEvent,\n } from '@embedpdf/plugin-interaction-manager';\n import { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/svelte';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n import type {\n BoxedAnnotationRenderer,\n AnnotationInteractionEvent,\n SelectOverrideHelpers,\n } from '../context';\n\n import GroupSelectionBox from './GroupSelectionBox.svelte';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import AnnotationContainer from './AnnotationContainer.svelte';\n import type { Snippet } from 'svelte';\n import { builtInRenderers } from './built-in-renderers';\n\n // ---------- props ----------\n interface AnnotationsProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n rotation: number;\n pageWidth: number;\n pageHeight: number;\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n resizeUI?: ResizeHandleUI;\n vertexUI?: VertexHandleUI;\n rotationUI?: RotationHandleUI;\n /** @deprecated Use `selectionOutline` instead */\n selectionOutlineColor?: string;\n selectionOutline?: SelectionOutline;\n groupSelectionOutline?: SelectionOutline;\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n annotationRenderers?: BoxedAnnotationRenderer[];\n }\n let annotationsProps: AnnotationsProps = $props();\n\n // ---------- capabilities / handlers ----------\n const annotationCapability = useAnnotationCapability();\n const selectionCapability = useSelectionCapability();\n const pointerHandlers = usePointerHandlers({\n documentId: () => annotationsProps.documentId,\n pageIndex: annotationsProps.pageIndex,\n });\n\n // ---------- local state ----------\n let annotations = $state<TrackedAnnotation[]>([]);\n let allSelectedIds = $state<string[]>([]);\n let editingId = $state<string | null>(null);\n let appearanceMap = $state<AnnotationAppearanceMap<Blob>>({});\n // Locked mode is tracked to force re-renders when it changes; the predicates on\n // `annotationProvides` (isAnnotationInteractive/StructurallyLocked/ContentLocked)\n // read document state internally.\n let lockedMode = $state<LockMode>({ type: LockModeType.None });\n let prevScale: number = annotationsProps.scale;\n\n const annotationProvides = $derived(\n annotationCapability.provides\n ? annotationCapability.provides.forDocument(annotationsProps.documentId)\n : null,\n );\n\n const isMultiSelected = $derived(allSelectedIds.length > 1);\n\n // Merge renderers: external renderers override built-ins by ID\n const allRenderers = $derived.by(() => {\n const external = annotationsProps.annotationRenderers ?? [];\n const externalIds = new Set(external.map((r) => r.id));\n return [...external, ...builtInRenderers.filter((r) => !externalIds.has(r.id))];\n });\n\n function resolveRenderer(annotation: TrackedAnnotation): BoxedAnnotationRenderer | null {\n return allRenderers.find((r) => r.matches(annotation.object)) ?? null;\n }\n\n function 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[ta.object.id];\n if (!appearances?.normal) return null;\n return appearances;\n }\n\n // Subscribe to annotation state\n $effect(() => {\n if (!annotationProvides) return;\n\n const currentState = annotationProvides.getState();\n annotations = getAnnotationsByPageIndex(currentState, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(currentState);\n lockedMode = currentState.locked;\n\n const off = annotationProvides.onStateChange((state) => {\n annotations = getAnnotationsByPageIndex(state, annotationsProps.pageIndex);\n allSelectedIds = getSelectedAnnotationIds(state);\n lockedMode = state.locked;\n });\n return () => off?.();\n });\n\n $effect(() => {\n if (!annotationProvides) return;\n return annotationProvides.onAnnotationEvent((event) => {\n if (event.type === 'create' && event.editAfterCreate) {\n editingId = event.annotation.id;\n }\n });\n });\n\n // Fetch appearance map, invalidate on scale change\n $effect(() => {\n if (!annotationProvides) return;\n\n if (prevScale !== annotationsProps.scale) {\n annotationProvides.invalidatePageAppearances(annotationsProps.pageIndex);\n prevScale = annotationsProps.scale;\n }\n\n const task = annotationProvides.getPageAppearances(annotationsProps.pageIndex, {\n scaleFactor: annotationsProps.scale,\n dpr: typeof window !== 'undefined' ? window.devicePixelRatio : 1,\n });\n task.wait(\n (map) => (appearanceMap = map),\n () => (appearanceMap = {}),\n );\n });\n\n // Pointer handlers\n const handlers: PointerEventHandlersWithLifecycle<EmbedPdfPointerEvent<PointerEvent>> = {\n onPointerDown: (_, pe) => {\n if (pe.target === pe.currentTarget && annotationProvides) {\n if (editingId && annotations.some((a) => a.object.id === editingId)) {\n pe.stopImmediatePropagation();\n }\n annotationProvides.deselectAnnotation();\n editingId = null;\n }\n },\n };\n\n $effect(() => {\n return pointerHandlers.register(handlers, { documentId: annotationsProps.documentId });\n });\n\n function handleClick(e: AnnotationInteractionEvent, annotation: TrackedAnnotation) {\n e.stopPropagation();\n if (annotationProvides && selectionCapability.provides) {\n selectionCapability.provides.clear();\n\n const isModifierPressed = 'metaKey' in e ? e.metaKey || e.ctrlKey : false;\n\n if (isModifierPressed) {\n annotationProvides.toggleSelection(annotationsProps.pageIndex, annotation.object.id);\n } else {\n annotationProvides.selectAnnotation(annotationsProps.pageIndex, annotation.object.id);\n }\n\n if (annotation.object.id !== editingId) {\n editingId = null;\n }\n }\n }\n\n function setEditingId(id: string) {\n editingId = id;\n }\n\n const selectedAnnotationsOnPage = $derived(\n annotations.filter((anno) => allSelectedIds.includes(anno.object.id)),\n );\n\n const areAllSelectedDraggable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupDraggable = resolveInteractionProp(\n tool?.interaction.isGroupDraggable,\n ta.object,\n true,\n );\n const singleDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupDraggable !== undefined ? groupDraggable : singleDraggable;\n });\n });\n\n const areAllSelectedResizable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupResizable = resolveInteractionProp(\n tool?.interaction.isGroupResizable,\n ta.object,\n true,\n );\n const singleResizable = resolveInteractionProp(\n tool?.interaction.isResizable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupResizable !== undefined ? groupResizable : singleResizable;\n });\n });\n\n const areAllSelectedRotatable = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.every((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupRotatable = resolveInteractionProp(\n tool?.interaction.isGroupRotatable,\n ta.object,\n true,\n );\n const singleRotatable = resolveInteractionProp(\n tool?.interaction.isRotatable,\n ta.object,\n true,\n );\n return tool?.interaction.isGroupRotatable !== undefined ? groupRotatable : singleRotatable;\n });\n });\n\n const shouldLockGroupAspectRatio = $derived.by(() => {\n if (selectedAnnotationsOnPage.length < 2) return false;\n\n return selectedAnnotationsOnPage.some((ta) => {\n const tool = annotationProvides?.findToolForAnnotation(ta.object);\n const groupLock = resolveInteractionProp(\n tool?.interaction.lockGroupAspectRatio,\n ta.object,\n false,\n );\n const singleLock = resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n ta.object,\n false,\n );\n return tool?.interaction.lockGroupAspectRatio !== undefined ? groupLock : singleLock;\n });\n });\n\n const allSelectedOnSamePage = $derived.by(() => {\n if (!annotationProvides) return false;\n if (allSelectedIds.length < 2) return false;\n const allSelected = annotationProvides.getSelectedAnnotations();\n return allSelected.every((ta) => ta.object.pageIndex === annotationsProps.pageIndex);\n });\n</script>\n\n{#each annotations as annotation (annotation.object.id)}\n {@const renderer = resolveRenderer(annotation)}\n {#if renderer && !hasNoViewFlag(annotation.object) && !hasHiddenFlag(annotation.object)}\n {@const tool = annotationProvides?.findToolForAnnotation(annotation.object) ?? null}\n {@const nonInteractive = annotationProvides\n ? !annotationProvides.isAnnotationInteractive(annotation.object)\n : false}\n {@const structurallyLocked = annotationProvides\n ? annotationProvides.isAnnotationStructurallyLocked(annotation.object)\n : false}\n {@const contentLocked = annotationProvides\n ? annotationProvides.isAnnotationContentLocked(annotation.object)\n : false}\n {#if !(nonInteractive && renderer.hiddenWhenLocked)}\n {@const hasRenderLocked = nonInteractive && !!renderer.renderLocked}\n {@const isSelected = nonInteractive ? false : allSelectedIds.includes(annotation.object.id)}\n {@const isEditing = nonInteractive ? false : editingId === annotation.object.id}\n {@const defaults = renderer.interactionDefaults}\n {@const resolvedDraggable = resolveInteractionProp(\n tool?.interaction.isDraggable,\n annotation.object,\n defaults?.isDraggable ?? true,\n )}\n {@const finalDraggable = structurallyLocked\n ? false\n : renderer.isDraggable\n ? renderer.isDraggable(resolvedDraggable, { isEditing })\n : resolvedDraggable}\n {@const useAP = tool?.behavior?.useAppearanceStream ?? renderer.useAppearanceStream ?? true}\n {@const appearance = hasRenderLocked\n ? undefined\n : useAP\n ? getAppearanceForAnnotation(annotation)\n : undefined}\n {@const selectHelpers = {\n defaultSelect: handleClick,\n selectAnnotation: (pi: number, id: string) => annotationProvides?.selectAnnotation(pi, id),\n clearSelection: () => selectionCapability.provides?.clear(),\n allAnnotations: annotations,\n pageIndex: annotationsProps.pageIndex,\n }}\n {@const noopSelect = (e: AnnotationInteractionEvent) => {\n e.stopPropagation();\n }}\n {@const onSelect = nonInteractive\n ? noopSelect\n : renderer.selectOverride\n ? (e: AnnotationInteractionEvent) =>\n renderer.selectOverride!(e, annotation, selectHelpers)\n : (e: AnnotationInteractionEvent) => handleClick(e, annotation)}\n {@const RendererComponent = hasRenderLocked ? renderer.renderLocked! : renderer.component}\n\n <AnnotationContainer\n trackedAnnotation={annotation}\n {isSelected}\n {isEditing}\n isMultiSelected={nonInteractive ? false : isMultiSelected}\n isDraggable={finalDraggable}\n isResizable={structurallyLocked\n ? false\n : resolveInteractionProp(\n tool?.interaction.isResizable,\n annotation.object,\n defaults?.isResizable ?? false,\n )}\n lockAspectRatio={resolveInteractionProp(\n tool?.interaction.lockAspectRatio,\n annotation.object,\n defaults?.lockAspectRatio ?? false,\n )}\n isRotatable={structurallyLocked\n ? false\n : resolveInteractionProp(\n tool?.interaction.isRotatable,\n annotation.object,\n defaults?.isRotatable ?? false,\n )}\n vertexConfig={structurallyLocked ? undefined : renderer.vertexConfig}\n selectionMenu={nonInteractive\n ? undefined\n : renderer.hideSelectionMenu?.(annotation.object)\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenu}\n selectionMenuSnippet={nonInteractive\n ? undefined\n : renderer.hideSelectionMenu?.(annotation.object)\n ? undefined\n : isMultiSelected\n ? undefined\n : annotationsProps.selectionMenuSnippet}\n {structurallyLocked}\n {contentLocked}\n {onSelect}\n onDoubleClick={nonInteractive || contentLocked\n ? undefined\n : renderer.onDoubleClick\n ? (e) => {\n e.stopPropagation();\n renderer.onDoubleClick!(annotation.object.id, setEditingId);\n }\n : undefined}\n zIndex={renderer.zIndex}\n blendMode={blendModeToCss(\n annotation.object.blendMode ?? renderer.defaultBlendMode ?? PdfBlendMode.Normal,\n )}\n style={renderer.containerStyle?.(annotation.object)}\n {appearance}\n {...annotationsProps}\n >\n {#snippet children(currentObject, { appearanceActive })}\n <RendererComponent\n {annotation}\n {currentObject}\n {isSelected}\n {isEditing}\n scale={annotationsProps.scale}\n pageIndex={annotationsProps.pageIndex}\n documentId={annotationsProps.documentId}\n onClick={nonInteractive ? undefined : onSelect}\n {appearanceActive}\n />\n {/snippet}\n </AnnotationContainer>\n {/if}\n {/if}\n{/each}\n\n<!-- Group Selection Box -->\n{#if allSelectedOnSamePage && selectedAnnotationsOnPage.length >= 2}\n <GroupSelectionBox\n documentId={annotationsProps.documentId}\n pageIndex={annotationsProps.pageIndex}\n scale={annotationsProps.scale}\n rotation={annotationsProps.rotation}\n pageWidth={annotationsProps.pageWidth}\n pageHeight={annotationsProps.pageHeight}\n selectedAnnotations={selectedAnnotationsOnPage}\n isDraggable={areAllSelectedDraggable}\n isResizable={areAllSelectedResizable}\n isRotatable={areAllSelectedRotatable}\n lockAspectRatio={shouldLockGroupAspectRatio}\n resizeUI={annotationsProps.resizeUI}\n rotationUI={annotationsProps.rotationUI}\n selectionOutlineColor={annotationsProps.selectionOutlineColor}\n selectionOutline={annotationsProps.groupSelectionOutline ?? annotationsProps.selectionOutline}\n groupSelectionMenu={annotationsProps.groupSelectionMenu}\n groupSelectionMenuSnippet={annotationsProps.groupSelectionMenuSnippet}\n />\n{/if}\n","<script lang=\"ts\">\n import { blendModeToCss, PdfAnnotationSubtype, PdfBlendMode, type Rect } from '@embedpdf/models';\n import type { AnnotationTool } from '@embedpdf/plugin-annotation';\n import { useSelectionCapability } from '@embedpdf/plugin-selection/svelte';\n\n import { useAnnotationCapability } from '../hooks';\n import Highlight from './text-markup/Highlight.svelte';\n import Squiggly from './text-markup/Squiggly.svelte';\n import Underline from './text-markup/Underline.svelte';\n import Strikeout from './text-markup/Strikeout.svelte';\n\n interface TextMarkupProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: TextMarkupProps = $props();\n\n const selectionCapability = useSelectionCapability();\n const annotationCapability = useAnnotationCapability();\n\n let rects = $state<Rect[]>([]);\n let boundingRect = $state<Rect | null>(null);\n let activeTool = $state<AnnotationTool | null>(null);\n\n // Get scoped APIs for this document\n const selectionProvides = $derived(\n selectionCapability.provides ? selectionCapability.provides.forDocument(documentId) : null,\n );\n const annotationProvides = $derived(\n annotationCapability.provides ? annotationCapability.provides.forDocument(documentId) : null,\n );\n\n // Subscribe to selection changes\n $effect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n rects = selectionProvides.getHighlightRectsForPage(pageIndex);\n boundingRect = selectionProvides.getBoundingRectForPage(pageIndex);\n });\n return off;\n });\n\n // Subscribe to active tool changes\n $effect(() => {\n if (!annotationProvides) return;\n\n // Initialize with current active tool\n activeTool = annotationProvides.getActiveTool();\n\n const off = annotationProvides.onActiveToolChange((tool) => {\n activeTool = tool;\n });\n return off;\n });\n\n const mixBlendMode = $derived(\n activeTool?.defaults?.blendMode\n ? blendModeToCss(activeTool.defaults.blendMode)\n : activeTool?.defaults?.type === PdfAnnotationSubtype.HIGHLIGHT\n ? blendModeToCss(PdfBlendMode.Multiply)\n : blendModeToCss(PdfBlendMode.Normal),\n );\n</script>\n\n{#if boundingRect && activeTool && activeTool.defaults}\n {#if activeTool.defaults.type === PdfAnnotationSubtype.UNDERLINE}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Underline\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.HIGHLIGHT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Highlight\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.STRIKEOUT}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Strikeout\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {:else if activeTool.defaults.type === PdfAnnotationSubtype.SQUIGGLY}\n <div\n style:mix-blend-mode={mixBlendMode}\n style:pointer-events=\"none\"\n style:position=\"absolute\"\n style:inset=\"0\"\n >\n <Squiggly\n strokeColor={activeTool.defaults?.strokeColor}\n opacity={activeTool.defaults?.opacity}\n segmentRects={rects}\n {scale}\n />\n </div>\n {/if}\n{/if}\n","<script lang=\"ts\">\n import type { PreviewState } from '@embedpdf/plugin-annotation';\n import { getRendererRegistry } from '../context/renderer-registry.svelte';\n import { builtInRenderers } from './built-in-renderers';\n\n interface PreviewRendererProps {\n toolId: string;\n preview: PreviewState;\n scale: number;\n }\n\n let { toolId, preview, scale }: PreviewRendererProps = $props();\n\n const registry = getRendererRegistry();\n\n const bounds = $derived(preview.bounds);\n\n const style = $derived({\n left: bounds.origin.x * scale,\n top: bounds.origin.y * scale,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n });\n\n const allRenderers = $derived.by(() => {\n const external = registry?.getAll() ?? [];\n const externalIds = new Set(external.map((r) => r.id));\n return [...external, ...builtInRenderers.filter((r) => !externalIds.has(r.id))];\n });\n\n const match = $derived(\n allRenderers.find((r) => r.matchesPreview?.(preview) && r.renderPreview) ??\n allRenderers.find((r) => r.id === toolId && r.renderPreview) ??\n null,\n );\n\n const extraStyle = $derived(\n match?.previewContainerStyle?.({ data: preview.data, bounds: preview.bounds, scale }) ?? '',\n );\n</script>\n\n{#if match?.renderPreview}\n {@const PreviewComponent = match.renderPreview}\n <div\n style=\"position:absolute;left:{style.left}px;top:{style.top}px;width:{style.width}px;height:{style.height}px;pointer-events:none;z-index:10;{extraStyle}\"\n >\n <PreviewComponent data={preview.data} bounds={preview.bounds} {scale} />\n </div>\n{/if}\n","<script lang=\"ts\">\n import { useAnnotationPlugin } from '../hooks';\n import type { PreviewState, HandlerServices } from '@embedpdf/plugin-annotation';\n import PreviewRenderer from './PreviewRenderer.svelte';\n\n interface AnnotationPaintLayerProps {\n documentId: string;\n pageIndex: number;\n scale: number;\n }\n\n let { documentId, pageIndex, scale }: AnnotationPaintLayerProps = $props();\n\n const annotationPlugin = useAnnotationPlugin();\n let previews = $state<Map<string, PreviewState>>(new Map());\n\n let fileInputRef: HTMLInputElement | null = $state(null);\n\n const services: HandlerServices = {\n requestFile: ({ accept, onFile }) => {\n if (!fileInputRef) return;\n const input = fileInputRef;\n input.accept = accept;\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n onFile(file);\n input.value = '';\n }\n };\n input.click();\n },\n };\n\n $effect(() => {\n if (!annotationPlugin.plugin) return;\n\n return annotationPlugin.plugin.registerPageHandlers(documentId, pageIndex, scale, {\n services,\n onPreview: (toolId, state) => {\n previews = new Map(previews);\n if (state) {\n previews.set(toolId, state);\n } else {\n previews.delete(toolId);\n }\n },\n });\n });\n</script>\n\n<input bind:this={fileInputRef} type=\"file\" style:display=\"none\" />\n\n<!-- Render any active previews from any tool -->\n{#each Array.from(previews.entries()) as [toolId, preview] (toolId)}\n <PreviewRenderer {toolId} {preview} {scale} />\n{/each}\n","import { createPluginPackage } from '@embedpdf/core';\nimport { AnnotationPluginPackage as BaseAnnotationPackage } from '@embedpdf/plugin-annotation';\nimport RendererRegistryProvider from './components/RendererRegistryProvider.svelte';\nimport AnnotationNavigationHandler from './components/AnnotationNavigationHandler.svelte';\n\nexport * from './hooks';\nexport * from './components';\nexport * from './types';\nexport * from './context';\nexport * from '@embedpdf/plugin-annotation';\n\nexport const AnnotationPluginPackage = createPluginPackage(BaseAnnotationPackage)\n .addWrapper(RendererRegistryProvider)\n .addUtility(AnnotationNavigationHandler)\n .build();\n","<script lang=\"ts\">\n import { useAnnotationPlugin, useAnnotationCapability } from '../hooks';\n\n const { plugin } = useAnnotationPlugin();\n const { provides } = useAnnotationCapability();\n\n $effect(() => {\n const p = provides;\n const pl = plugin;\n if (!p || !pl) return;\n\n return p.onNavigate((event) => {\n if (event.result.outcome === 'uri' && pl.config.autoOpenLinks !== false) {\n window.open(event.result.uri, '_blank', 'noopener,noreferrer');\n }\n });\n });\n</script>\n","<script lang=\"ts\">\n import { type Rotation, type PdfAnnotationObject } from '@embedpdf/models';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import type { HTMLAttributes } from 'svelte/elements';\n import type {\n AnnotationSelectionMenuProps,\n AnnotationSelectionMenuRenderFn,\n GroupSelectionMenuProps,\n GroupSelectionMenuRenderFn,\n CustomAnnotationRenderer,\n ResizeHandleUI,\n VertexHandleUI,\n RotationHandleUI,\n SelectionOutline,\n } from '../types';\n import { getRendererRegistry, type BoxedAnnotationRenderer } from '../context';\n import Annotations from './Annotations.svelte';\n import TextMarkup from './TextMarkup.svelte';\n import AnnotationPaintLayer from './AnnotationPaintLayer.svelte';\n import type { Snippet } from 'svelte';\n\n type AnnotationLayerProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n /** The ID of the document that this layer displays annotations for */\n documentId: string;\n pageIndex: number;\n scale?: number;\n rotation?: number;\n /** Render function for selection menu (schema-driven approach) */\n selectionMenu?: AnnotationSelectionMenuRenderFn;\n /** Snippet for custom selection menu (slot-based approach) */\n selectionMenuSnippet?: Snippet<[AnnotationSelectionMenuProps]>;\n /** Render function for group selection menu (schema-driven approach) */\n groupSelectionMenu?: GroupSelectionMenuRenderFn;\n /** Snippet for custom group selection menu (slot-based approach) */\n groupSelectionMenuSnippet?: Snippet<[GroupSelectionMenuProps]>;\n style?: Record<string, string | number | undefined>;\n /** Customize resize handles */\n resizeUI?: ResizeHandleUI;\n /** Customize vertex handles */\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 annotation renderer */\n customAnnotationRenderer?: CustomAnnotationRenderer<PdfAnnotationObject>;\n /** Custom annotation renderers from props */\n annotationRenderers?: BoxedAnnotationRenderer[];\n };\n\n let {\n style,\n documentId,\n pageIndex,\n scale: overrideScale,\n rotation: overrideRotation,\n selectionMenu,\n selectionMenuSnippet,\n groupSelectionMenu,\n groupSelectionMenuSnippet,\n resizeUI,\n vertexUI,\n rotationUI,\n selectionOutlineColor,\n selectionOutline,\n groupSelectionOutline,\n customAnnotationRenderer,\n annotationRenderers,\n ...restProps\n }: AnnotationLayerProps = $props();\n\n // Get registry and merge with props\n const registry = getRendererRegistry();\n\n const allRenderers = $derived.by(() => {\n const fromRegistry = registry?.getAll() ?? [];\n const fromProps = 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\n const documentState = useDocumentState(() => documentId);\n\n const page = $derived(documentState?.current?.document?.pages?.[pageIndex]);\n const pageWidth = $derived(page?.size?.width ?? 0);\n const pageHeight = $derived(page?.size?.height ?? 0);\n\n const actualScale = $derived(\n overrideScale !== undefined ? overrideScale : (documentState?.current?.scale ?? 1),\n );\n\n const actualRotation = $derived.by(() => {\n if (overrideRotation !== undefined) return overrideRotation;\n // Combine page intrinsic rotation with document rotation\n const pageRotation = page?.rotation ?? 0;\n const docRotation = documentState?.current?.rotation ?? 0;\n return ((pageRotation + docRotation) % 4) as Rotation;\n });\n</script>\n\n<div\n id=\"annotation-layer\"\n {...style ? Object.fromEntries(Object.entries(style).map(([k, v]) => [`style:${k}`, v])) : {}}\n {...restProps}\n>\n <Annotations\n {documentId}\n {selectionMenu}\n {selectionMenuSnippet}\n {groupSelectionMenu}\n {groupSelectionMenuSnippet}\n {pageIndex}\n scale={actualScale}\n rotation={actualRotation}\n {pageWidth}\n {pageHeight}\n {resizeUI}\n {vertexUI}\n {rotationUI}\n {selectionOutlineColor}\n {selectionOutline}\n {groupSelectionOutline}\n {customAnnotationRenderer}\n annotationRenderers={allRenderers}\n />\n <TextMarkup {documentId} {pageIndex} scale={actualScale} />\n <AnnotationPaintLayer {documentId} {pageIndex} scale={actualScale} />\n</div>\n"],"names":["REGISTRY_KEY","Symbol","createRendererRegistry","renderers","$","state","proxy","register","entries","ids","Set","map","e","id","filter","r","has","set","some","getAll","provideRendererRegistry","registry","setContext","getRendererRegistry","getContext","createRenderer","entry","matches","component","matchesPreview","previewContainerStyle","props","vertexConfig","zIndex","defaultBlendMode","containerStyle","interactionDefaults","useAppearanceStream","isDraggable","onDoubleClick","selectOverride","hideSelectionMenu","renderPreview","hiddenWhenLocked","renderLocked","useAnnotationCapability","useCapability","AnnotationPlugin","useAnnotationPlugin","usePlugin","_isIOS","getIsIOS","nav","navigator","test","userAgent","platform","maxTouchPoints","detectIOS","useIOSZoomPrevention","getComputedFontPx","getActive","isIOS","needsComp","px","adjustedFontPx","derived","get","scaleComp","wrapperStyle","s","isEditing","isMultiSelected","isRotatable","lockAspectRatio","propsClass","structurallyLocked","contentLocked","outlineOffset","restProps","$$rest_props_compat","$$props","preview","liveRotation","cursorScreen","isHandleHovered","gestureActive","annotationCapability","annotationPlugin","permissions","useDocumentPermissions","documentId","gestureBaseRef","gestureBaseRectRef","effectiveIsDraggable","canModifyAnnotations","effectiveIsResizable","effectiveIsRotatable","guardedOnDoubleClick","annotationProvides","provides","forDocument","currentObject","trackedAnnotation","object","annoFlags","flags","hasNoZoom","includes","hasNoRotate","visualScale","scale","effectivePageRotation","rotation","HANDLE_COLOR","_a","resizeUI","color","VERTEX_COLOR","vertexUI","ROTATION_COLOR","rotationUI","ROTATION_CONNECTOR_COLOR","connectorColor","HANDLE_SIZE","size","VERTEX_SIZE","ROTATION_SIZE","ROTATION_MARGIN","margin","ROTATION_ICON_COLOR","iconColor","SHOW_CONNECTOR","showConnector","ROTATION_BORDER_COLOR","_b","border","ROTATION_BORDER_WIDTH","width","ROTATION_BORDER_STYLE","style","outlineColor","selectionOutline","selectionOutlineColor","outlineStyleVal","outlineWidth","outlineOff","offset","annotationRotation","rotationDisplay","normalizedRotationDisplay","Number","isFinite","Math","round","rotationActive","showOutline","explicitUnrotatedRect","unrotatedRect","effectiveUnrotatedRect","rect","rotationPivot","inferRotationCenterFromRects","controllerElement","aabbWidth","aabbHeight","height","innerWidth","innerHeight","usesCustomPivot","Boolean","innerLeft","origin","x","innerTop","y","innerTransformOrigin","centerX","centerY","guideLength","max","counterRot","getCounterRotation","apActive","normal","dictMode","childObject","user_effect","plugin","handleEvent","event","type","patch","previewPatches","untrack","unsubs","onDragChange","onResizeChange","onRotateChange","forEach","u","interactionHandles","useInteractionHandles","controller","element","vertices","extractVertices","constraints","minWidth","minHeight","boundingBox","pageWidth","pageHeight","maintainAspectRatio","pageRotation","rotationCenter","rotationElement","enabled","onUpdate","transformData","changes","metadata","pageSize","startDrag","annotationIds","startResize","resizeHandle","handle","delta","updateDrag","updateResize","base","vertexChanges","transformAnnotation","patched","sanitized","deepToRaw","updateAnnotation","pageIndex","cursorAngle","rotationAngle","cursorPos","cursorPosition","clientX","clientY","startRotation","updateRotation","rotationDelta","commitRotation","commitDrag","commitResize","handleSize","spacing","offsetMode","includeSides","vertexSize","includeVertices","includeRotation","currentRotation","resizeHandles","resize","vertexHandles","rotationHandle","shouldShowMenu","isSelected","selectionMenu","selectionMenuSnippet","portalToBody","node","document","body","appendChild","destroy","parentNode","removeChild","div","root","div_1","div_2","annotation","children","onSelect","appearanceActive","imageUrl","currentUrl","handleLoad","URL","revokeObjectURL","url","createObjectURL","data","img","root_1","set_attribute","set_style","consequent","AppearanceImage","$$anchor","consequent_1","div_3","left","top","transform","matrix","div_4","first_child","fragment_3","div_5","div_6","styles_2","styles_3","styles_4","consequent_2","div_7","root_6","__pointermove","backgroundColor","connectorStyle","connector","opacity","$0","div_8","root_7","div_9","root_8","template_effect","consequent_4","div_10","sibling","node_9","onpointerdown","onpointermove","onpointerup","onpointercancel","svg","$1","consequent_3","$$render","alternate_1","consequent_5","div_11","node_6","dragProps","key","handleStyle","hProps","$$item","exclude_from_object","div_12","root_12","consequent_6","alternate_2","consequent_7","vertexStyle","vProps","div_13","root_16","consequent_8","alternate_3","consequent_9","$$node","$$action_arg","doublePress","onDouble","$$arg0","menuProps","menuWrapperProps","effectiveAngle","handleNearMenuSide","context","selected","placement","suggestTop","spaceAbove","spaceBelow","buildMenuProps","result","result_component","spread_props","consequent_10","CounterRotate","consequent_13","div_14","root_23","div_15","styles_5","toFixed","consequent_14","styles","styles_1","mapCounterRotatePoint","getAnnotationScreenBounds","right","bottom","corners","minX","Infinity","minY","maxX","maxY","corner","gestureBase","isDraggingRef","isResizingRef","isResizable","getGroupBox","rects","selectedAnnotations","ta","boundingRectOrEmpty","groupBox","previewGroupBox","newBox","outlineWidthVal","groupRotationDisplay","visualBoundsCorrection","visualLeft","visualTop","visualRight","visualBottom","bounds","groupBoxLeft","groupBoxTop","groupBoxWidth","groupBoxHeight","groupCenterX","groupCenterY","groupGuideLength","transformType","isMove","isResize","_c","_d","_e","_f","newRect","rawDelta","clampedDelta","newGroupBox","groupSelectionMenu","groupSelectionMenuSnippet","fragment_1","root_4","root_5","alternate","node_3","stopPropagation","root_10","root_11","annotations","length","consequent_11","resolvedColor","paths","inkList","points","d","i","trim","hitStrokeWidth","each","path","__pointerdown","$$args","onClick","node_2","path_1","root_3","strokeStyle","prop","PdfAnnotationBorderStyle","SOLID","isCloudy","cloudyBorderIntensity","$$d","outerW","outerH","cloudyPath","generateCloudyRectanglePath","svgWidth","strokeWidth","svgHeight","dash","DASHED","strokeDashArray","join","rect_1","root_2","rect_2","innerW","innerH","cx","cy","rx","ry","generateCloudyEllipsePath","peValue","ellipse","ellipse_1","strokeColor","x1","start","y1","x2","end","y2","endings","angle","atan2","patching","createEnding","PI","lineEndings","line","filled","line_1","fragment","path_2","path_3","styles_6","localPts","pathData","first","rest","p","toAngle","a","b","startRad","endRad","path_4","path_5","stroke","allPoints","currentVertex","isPreview","generateCloudyPolygonPath","isPreviewing","fill","editorRef","editingRef","focus","tool","findToolForAnnotation","isDefaultContent","defaults","contents","selection","getSelection","call","window","range","createRange","selectNodeContents","collapse","removeAllRanges","addRange","ios","fontSize","invScalePercent","justify","verticalAlign","PdfVerticalAlignment","Top","Middle","fontCss","standardFontCssProperties","fontFamily","span","$$value","cursor","set_text","text","fontColor","fontWeight","fontStyle","textAlignmentToCss","textAlign","innerText","replace","scaleFactor","unrotated","urlRef","handleImageLoad","task","renderAnnotation","options","dpr","devicePixelRatio","wait","blob","ignore","abort","code","PdfErrorCode","Cancelled","message","annotationProp","RenderAnnotation","UNDERLINE","hasIRT","dashArray","isUnderline","hitAreaCursor","hitAreaPointerEvents","apply","this","tabindex","Object","fromEntries","k","v","thickness","amplitude","period","svgDataUri","encodeURIComponent","lineColor","getContrastStrokeColor","position","inset","line_2","builtInRenderers","PdfAnnotationSubtype","INK","Ink","blendModeToCss","blendMode","PdfBlendMode","Normal","SQUARE","Square","CIRCLE","Circle","LINE","Line","linePoints","POLYLINE","Polyline","POLYGON","Polygon","HIGHLIGHT","Highlight","Multiply","Underline","STRIKEOUT","Strikeout","SQUIGGLY","Squiggly","TEXT","inReplyToId","Text","CARET","w","h","midX","Caret","FREETEXT","intent","calloutLine","obj","textBox","computeTextBoxFromRD","rectangleDifferences","textBoxRelative","lineCoords","cl","ending","lineEnding","visualLineCoords","pts","last","prev","dx","dy","len","sqrt","halfBw","polyline","polyline_1","fragment_2","CalloutFreeText","sw","sc","op","ox","oy","halfSw","tb","calloutVertexConfig","toolDraggable","setEditingId","FreeText","STAMP","Stamp","rotationDeg","ghostUrl","LINK","Link","helpers","clearSelection","parent","allAnnotations","find","selectAnnotation","handleClick","target","navigateTarget","__click","__keydown","annotationsProps","selectionCapability","useSelectionCapability","pointerHandlers","usePointerHandlers","allSelectedIds","editingId","appearanceMap","lockedMode","LockModeType","None","prevScale","allRenderers","external","annotationRenderers","externalIds","currentState","getState","getAnnotationsByPageIndex","getSelectedAnnotationIds","locked","off","onStateChange","onAnnotationEvent","editAfterCreate","invalidatePageAppearances","getPageAppearances","handlers","onPointerDown","_","pe","currentTarget","stopImmediatePropagation","deselectAnnotation","clear","metaKey","ctrlKey","toggleSelection","selectedAnnotationsOnPage","anno","areAllSelectedDraggable","every","groupDraggable","resolveInteractionProp","interaction","isGroupDraggable","singleDraggable","areAllSelectedResizable","groupResizable","isGroupResizable","singleResizable","areAllSelectedRotatable","groupRotatable","isGroupRotatable","singleRotatable","shouldLockGroupAspectRatio","groupLock","lockGroupAspectRatio","singleLock","allSelectedOnSamePage","getSelectedAnnotations","renderer","resolveRenderer","nonInteractive","isAnnotationInteractive","isAnnotationStructurallyLocked","isAnnotationContentLocked","hasRenderLocked","resolvedDraggable","finalDraggable","useAP","behavior","appearance","appearances","getAppearanceForAnnotation","selectHelpers","defaultSelect","pi","noopSelect","RendererComponent","noop","$$arg1","RendererComponent_1","$2","$4","$7","$8","$9","AnnotationContainer","$$slots","default","hasNoViewFlag","hasHiddenFlag","groupSelectionOutline","GroupSelectionBox","boundingRect","activeTool","selectionProvides","onSelectionChange","getHighlightRectsForPage","getBoundingRectForPage","getActiveTool","onActiveToolChange","mixBlendMode","node_4","node_8","match","toolId","extraStyle","PreviewComponent","PreviewComponent_1","previews","Map","fileInputRef","services","requestFile","accept","onFile","input","onchange","file","files","value","click","registerPageHandlers","onPreview","delete","input_1","display","Array","from","PreviewRenderer","$$array","AnnotationPluginPackage","createPluginPackage","BaseAnnotationPackage","addWrapper","RendererRegistryProvider","addUtility","pl","onNavigate","outcome","config","autoOpenLinks","open","uri","build","fromRegistry","fromProps","merged","idx","findIndex","m","push","documentState","useDocumentState","page","current","pages","actualScale","actualRotation","attribute_effect","Annotations","TextMarkup","node_1","AnnotationPaintLayer","getDocumentId","capability","initialDocumentState","scopedProvides","docId","scope","newState"],"mappings":"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"}