@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.js","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/AnnotationNavigationHandler.svelte","../../src/svelte/components/AppearanceImage.svelte","../../src/svelte/components/AnnotationContainer.svelte","../../src/shared/annotation-bounds.ts","../../src/svelte/components/GroupSelectionBox.svelte","../../src/svelte/components/annotations/LinkLockedMode.svelte","../../src/svelte/components/annotations/LinkPreview.svelte","../../src/svelte/components/annotations/Ink.svelte","../../src/svelte/components/annotations/InkPreview.svelte","../../src/svelte/components/annotations/Square.svelte","../../src/svelte/components/annotations/SquarePreview.svelte","../../src/svelte/components/annotations/Circle.svelte","../../src/svelte/components/annotations/CirclePreview.svelte","../../src/svelte/components/annotations/Line.svelte","../../src/svelte/components/annotations/LinePreview.svelte","../../src/svelte/components/annotations/Polyline.svelte","../../src/svelte/components/annotations/PolylinePreview.svelte","../../src/svelte/components/annotations/Polygon.svelte","../../src/svelte/components/annotations/PolygonPreview.svelte","../../src/svelte/components/annotations/FreeTextPreview.svelte","../../src/svelte/components/annotations/CalloutFreeTextPreview.svelte","../../src/svelte/components/annotations/StampPreview.svelte","../../src/svelte/components/renderers/InkRenderer.svelte","../../src/svelte/components/renderers/SquareRenderer.svelte","../../src/svelte/components/renderers/CircleRenderer.svelte","../../src/svelte/components/renderers/LineRenderer.svelte","../../src/svelte/components/renderers/PolylineRenderer.svelte","../../src/svelte/components/renderers/PolygonRenderer.svelte","../../src/svelte/components/annotations/FreeText.svelte","../../src/svelte/components/renderers/FreeTextRenderer.svelte","../../src/svelte/components/annotations/CalloutFreeText.svelte","../../src/svelte/components/renderers/CalloutFreeTextRenderer.svelte","../../src/svelte/components/RenderAnnotation.svelte","../../src/svelte/components/annotations/Stamp.svelte","../../src/svelte/components/renderers/StampRenderer.svelte","../../src/svelte/components/annotations/Link.svelte","../../src/svelte/components/renderers/LinkRenderer.svelte","../../src/svelte/components/text-markup/Highlight.svelte","../../src/svelte/components/renderers/HighlightRenderer.svelte","../../src/svelte/components/text-markup/Underline.svelte","../../src/svelte/components/renderers/UnderlineRenderer.svelte","../../src/svelte/components/text-markup/Strikeout.svelte","../../src/svelte/components/renderers/StrikeoutRenderer.svelte","../../src/svelte/components/text-markup/Squiggly.svelte","../../src/svelte/components/renderers/SquigglyRenderer.svelte","../../src/svelte/components/annotations/Caret.svelte","../../src/svelte/components/renderers/CaretRenderer.svelte","../../src/svelte/components/annotations/Text.svelte","../../src/svelte/components/renderers/TextRenderer.svelte","../../src/svelte/components/built-in-renderers.ts","../../src/svelte/components/Annotations.svelte","../../src/svelte/components/TextMarkup.svelte","../../src/svelte/components/PreviewRenderer.svelte","../../src/svelte/components/AnnotationPaintLayer.svelte","../../src/svelte/components/AnnotationLayer.svelte","../../src/svelte/index.ts"],"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\">\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 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","<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","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 { 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","<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 { 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 } 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 { 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 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 { 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 } 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 { 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 } 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 { 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 } 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 { 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 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 {\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 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 {\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 { 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 { 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 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 { 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 { 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\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 { 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 { 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 { 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 { 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 { 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 { 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 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 { 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 { 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","<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","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","<!-- 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","<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","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"],"names":["root_1","$$rest_props_compat","_a","root","$$anchor","root_6","root_8","root_4","root_5","root_3","root_2","InkWrapper","SquareWrapper","CircleWrapper","LineWrapper","PolylineWrapper","PolygonWrapper","HighlightWrapper","UnderlineWrapper","StrikeoutWrapper","SquigglyWrapper","TextWrapper","CaretWrapper","CalloutFreeTextWrapper","FreeTextWrapper","StampWrapper","LinkWrapper","BaseAnnotationPackage"],"mappings":"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"}