@docmentis/udoc-viewer 0.1.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 (434) hide show
  1. package/README.md +180 -0
  2. package/dist/UDocClient.d.ts +197 -0
  3. package/dist/UDocClient.d.ts.map +1 -0
  4. package/dist/UDocClient.js +170 -0
  5. package/dist/UDocClient.js.map +1 -0
  6. package/dist/UDocViewer.d.ts +196 -0
  7. package/dist/UDocViewer.d.ts.map +1 -0
  8. package/dist/UDocViewer.js +427 -0
  9. package/dist/UDocViewer.js.map +1 -0
  10. package/dist/WorkerClient.d.ts +36 -0
  11. package/dist/WorkerClient.d.ts.map +1 -0
  12. package/dist/WorkerClient.js +121 -0
  13. package/dist/WorkerClient.js.map +1 -0
  14. package/dist/annotation/AnnotationLayer.d.ts +166 -0
  15. package/dist/annotation/AnnotationLayer.d.ts.map +1 -0
  16. package/dist/annotation/AnnotationLayer.js +1090 -0
  17. package/dist/annotation/AnnotationLayer.js.map +1 -0
  18. package/dist/annotation/index.d.ts +6 -0
  19. package/dist/annotation/index.d.ts.map +1 -0
  20. package/dist/annotation/index.js +6 -0
  21. package/dist/annotation/index.js.map +1 -0
  22. package/dist/components/FloatingBar.d.ts +102 -0
  23. package/dist/components/FloatingBar.d.ts.map +1 -0
  24. package/dist/components/FloatingBar.js +513 -0
  25. package/dist/components/FloatingBar.js.map +1 -0
  26. package/dist/components/Header.d.ts +46 -0
  27. package/dist/components/Header.d.ts.map +1 -0
  28. package/dist/components/Header.js +93 -0
  29. package/dist/components/Header.js.map +1 -0
  30. package/dist/components/index.d.ts +6 -0
  31. package/dist/components/index.d.ts.map +1 -0
  32. package/dist/components/index.js +4 -0
  33. package/dist/components/index.js.map +1 -0
  34. package/dist/components/panels/CommentsPanel.d.ts +33 -0
  35. package/dist/components/panels/CommentsPanel.d.ts.map +1 -0
  36. package/dist/components/panels/CommentsPanel.js +176 -0
  37. package/dist/components/panels/CommentsPanel.js.map +1 -0
  38. package/dist/components/panels/OutlinePanel.d.ts +30 -0
  39. package/dist/components/panels/OutlinePanel.d.ts.map +1 -0
  40. package/dist/components/panels/OutlinePanel.js +144 -0
  41. package/dist/components/panels/OutlinePanel.js.map +1 -0
  42. package/dist/components/panels/ThumbnailsPanel.d.ts +51 -0
  43. package/dist/components/panels/ThumbnailsPanel.d.ts.map +1 -0
  44. package/dist/components/panels/ThumbnailsPanel.js +160 -0
  45. package/dist/components/panels/ThumbnailsPanel.js.map +1 -0
  46. package/dist/components/panels/index.d.ts +7 -0
  47. package/dist/components/panels/index.d.ts.map +1 -0
  48. package/dist/components/panels/index.js +4 -0
  49. package/dist/components/panels/index.js.map +1 -0
  50. package/dist/constants.d.ts +25 -0
  51. package/dist/constants.d.ts.map +1 -0
  52. package/dist/constants.js +46 -0
  53. package/dist/constants.js.map +1 -0
  54. package/dist/core/NavigationController.d.ts +54 -0
  55. package/dist/core/NavigationController.d.ts.map +1 -0
  56. package/dist/core/NavigationController.js +145 -0
  57. package/dist/core/NavigationController.js.map +1 -0
  58. package/dist/core/PerfTimer.d.ts +12 -0
  59. package/dist/core/PerfTimer.d.ts.map +1 -0
  60. package/dist/core/PerfTimer.js +32 -0
  61. package/dist/core/PerfTimer.js.map +1 -0
  62. package/dist/core/ViewerState.d.ts +108 -0
  63. package/dist/core/ViewerState.d.ts.map +1 -0
  64. package/dist/core/ViewerState.js +179 -0
  65. package/dist/core/ViewerState.js.map +1 -0
  66. package/dist/core/constants.d.ts +24 -0
  67. package/dist/core/constants.d.ts.map +1 -0
  68. package/dist/core/constants.js +42 -0
  69. package/dist/core/constants.js.map +1 -0
  70. package/dist/core/index.d.ts +8 -0
  71. package/dist/core/index.d.ts.map +1 -0
  72. package/dist/core/index.js +11 -0
  73. package/dist/core/index.js.map +1 -0
  74. package/dist/core/types.d.ts +573 -0
  75. package/dist/core/types.d.ts.map +1 -0
  76. package/dist/core/types.js +5 -0
  77. package/dist/core/types.js.map +1 -0
  78. package/dist/icons/icons.d.ts +41 -0
  79. package/dist/icons/icons.d.ts.map +1 -0
  80. package/dist/icons/icons.js +51 -0
  81. package/dist/icons/icons.js.map +1 -0
  82. package/dist/icons/index.d.ts +3 -0
  83. package/dist/icons/index.d.ts.map +1 -0
  84. package/dist/icons/index.js +2 -0
  85. package/dist/icons/index.js.map +1 -0
  86. package/dist/index.d.ts +7 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +6 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/layout/BandManager.d.ts +87 -0
  91. package/dist/layout/BandManager.d.ts.map +1 -0
  92. package/dist/layout/BandManager.js +185 -0
  93. package/dist/layout/BandManager.js.map +1 -0
  94. package/dist/layout/LayoutCalculator.d.ts +42 -0
  95. package/dist/layout/LayoutCalculator.d.ts.map +1 -0
  96. package/dist/layout/LayoutCalculator.js +180 -0
  97. package/dist/layout/LayoutCalculator.js.map +1 -0
  98. package/dist/layout/LayoutState.d.ts +46 -0
  99. package/dist/layout/LayoutState.d.ts.map +1 -0
  100. package/dist/layout/LayoutState.js +109 -0
  101. package/dist/layout/LayoutState.js.map +1 -0
  102. package/dist/layout/TransitionCoordinator.d.ts +11 -0
  103. package/dist/layout/TransitionCoordinator.d.ts.map +1 -0
  104. package/dist/layout/TransitionCoordinator.js +22 -0
  105. package/dist/layout/TransitionCoordinator.js.map +1 -0
  106. package/dist/layout/index.d.ts +7 -0
  107. package/dist/layout/index.d.ts.map +1 -0
  108. package/dist/layout/index.js +4 -0
  109. package/dist/layout/index.js.map +1 -0
  110. package/dist/rendering/BandManager.d.ts +87 -0
  111. package/dist/rendering/BandManager.d.ts.map +1 -0
  112. package/dist/rendering/BandManager.js +185 -0
  113. package/dist/rendering/BandManager.js.map +1 -0
  114. package/dist/rendering/PageCache.d.ts +75 -0
  115. package/dist/rendering/PageCache.d.ts.map +1 -0
  116. package/dist/rendering/PageCache.js +122 -0
  117. package/dist/rendering/PageCache.js.map +1 -0
  118. package/dist/rendering/RenderQueue.d.ts +75 -0
  119. package/dist/rendering/RenderQueue.d.ts.map +1 -0
  120. package/dist/rendering/RenderQueue.js +105 -0
  121. package/dist/rendering/RenderQueue.js.map +1 -0
  122. package/dist/rendering/ThumbnailQueue.d.ts +57 -0
  123. package/dist/rendering/ThumbnailQueue.d.ts.map +1 -0
  124. package/dist/rendering/ThumbnailQueue.js +85 -0
  125. package/dist/rendering/ThumbnailQueue.js.map +1 -0
  126. package/dist/rendering/index.d.ts +13 -0
  127. package/dist/rendering/index.d.ts.map +1 -0
  128. package/dist/rendering/index.js +10 -0
  129. package/dist/rendering/index.js.map +1 -0
  130. package/dist/rendering/types.d.ts +72 -0
  131. package/dist/rendering/types.d.ts.map +1 -0
  132. package/dist/rendering/types.js +5 -0
  133. package/dist/rendering/types.js.map +1 -0
  134. package/dist/styles/index.d.ts +6 -0
  135. package/dist/styles/index.d.ts.map +1 -0
  136. package/dist/styles/index.js +1221 -0
  137. package/dist/styles/index.js.map +1 -0
  138. package/dist/types.d.ts +6 -0
  139. package/dist/types.d.ts.map +1 -0
  140. package/dist/types.js +6 -0
  141. package/dist/types.js.map +1 -0
  142. package/dist/ui/Component.d.ts +127 -0
  143. package/dist/ui/Component.d.ts.map +1 -0
  144. package/dist/ui/Component.js +201 -0
  145. package/dist/ui/Component.js.map +1 -0
  146. package/dist/ui/annotation/AnnotationLayer.d.ts +90 -0
  147. package/dist/ui/annotation/AnnotationLayer.d.ts.map +1 -0
  148. package/dist/ui/annotation/AnnotationLayer.js +322 -0
  149. package/dist/ui/annotation/AnnotationLayer.js.map +1 -0
  150. package/dist/ui/annotation/LinkRenderer.d.ts +32 -0
  151. package/dist/ui/annotation/LinkRenderer.d.ts.map +1 -0
  152. package/dist/ui/annotation/LinkRenderer.js +74 -0
  153. package/dist/ui/annotation/LinkRenderer.js.map +1 -0
  154. package/dist/ui/annotation/MarkupRenderer.d.ts +40 -0
  155. package/dist/ui/annotation/MarkupRenderer.d.ts.map +1 -0
  156. package/dist/ui/annotation/MarkupRenderer.js +154 -0
  157. package/dist/ui/annotation/MarkupRenderer.js.map +1 -0
  158. package/dist/ui/annotation/ShapeRenderer.d.ts +46 -0
  159. package/dist/ui/annotation/ShapeRenderer.d.ts.map +1 -0
  160. package/dist/ui/annotation/ShapeRenderer.js +376 -0
  161. package/dist/ui/annotation/ShapeRenderer.js.map +1 -0
  162. package/dist/ui/annotation/TextRenderer.d.ts +36 -0
  163. package/dist/ui/annotation/TextRenderer.d.ts.map +1 -0
  164. package/dist/ui/annotation/TextRenderer.js +199 -0
  165. package/dist/ui/annotation/TextRenderer.js.map +1 -0
  166. package/dist/ui/annotation/index.d.ts +17 -0
  167. package/dist/ui/annotation/index.d.ts.map +1 -0
  168. package/dist/ui/annotation/index.js +13 -0
  169. package/dist/ui/annotation/index.js.map +1 -0
  170. package/dist/ui/annotation/utils.d.ts +40 -0
  171. package/dist/ui/annotation/utils.d.ts.map +1 -0
  172. package/dist/ui/annotation/utils.js +62 -0
  173. package/dist/ui/annotation/utils.js.map +1 -0
  174. package/dist/ui/components/CommentsContent.d.ts +35 -0
  175. package/dist/ui/components/CommentsContent.d.ts.map +1 -0
  176. package/dist/ui/components/CommentsContent.js +203 -0
  177. package/dist/ui/components/CommentsContent.js.map +1 -0
  178. package/dist/ui/components/FloatingBar.d.ts +55 -0
  179. package/dist/ui/components/FloatingBar.d.ts.map +1 -0
  180. package/dist/ui/components/FloatingBar.js +585 -0
  181. package/dist/ui/components/FloatingBar.js.map +1 -0
  182. package/dist/ui/components/Header.d.ts +29 -0
  183. package/dist/ui/components/Header.d.ts.map +1 -0
  184. package/dist/ui/components/Header.js +127 -0
  185. package/dist/ui/components/Header.js.map +1 -0
  186. package/dist/ui/components/LeftPanel.d.ts +54 -0
  187. package/dist/ui/components/LeftPanel.d.ts.map +1 -0
  188. package/dist/ui/components/LeftPanel.js +202 -0
  189. package/dist/ui/components/LeftPanel.js.map +1 -0
  190. package/dist/ui/components/OutlineContent.d.ts +34 -0
  191. package/dist/ui/components/OutlineContent.d.ts.map +1 -0
  192. package/dist/ui/components/OutlineContent.js +147 -0
  193. package/dist/ui/components/OutlineContent.js.map +1 -0
  194. package/dist/ui/components/RightPanel.d.ts +52 -0
  195. package/dist/ui/components/RightPanel.d.ts.map +1 -0
  196. package/dist/ui/components/RightPanel.js +142 -0
  197. package/dist/ui/components/RightPanel.js.map +1 -0
  198. package/dist/ui/components/Viewport.d.ts +70 -0
  199. package/dist/ui/components/Viewport.d.ts.map +1 -0
  200. package/dist/ui/components/Viewport.js +173 -0
  201. package/dist/ui/components/Viewport.js.map +1 -0
  202. package/dist/ui/components/index.d.ts +11 -0
  203. package/dist/ui/components/index.d.ts.map +1 -0
  204. package/dist/ui/components/index.js +10 -0
  205. package/dist/ui/components/index.js.map +1 -0
  206. package/dist/ui/framework/component.d.ts +68 -0
  207. package/dist/ui/framework/component.d.ts.map +1 -0
  208. package/dist/ui/framework/component.js +87 -0
  209. package/dist/ui/framework/component.js.map +1 -0
  210. package/dist/ui/framework/dom.d.ts +19 -0
  211. package/dist/ui/framework/dom.d.ts.map +1 -0
  212. package/dist/ui/framework/dom.js +29 -0
  213. package/dist/ui/framework/dom.js.map +1 -0
  214. package/dist/ui/framework/events.d.ts +18 -0
  215. package/dist/ui/framework/events.d.ts.map +1 -0
  216. package/dist/ui/framework/events.js +23 -0
  217. package/dist/ui/framework/events.js.map +1 -0
  218. package/dist/ui/framework/index.d.ts +15 -0
  219. package/dist/ui/framework/index.d.ts.map +1 -0
  220. package/dist/ui/framework/index.js +15 -0
  221. package/dist/ui/framework/index.js.map +1 -0
  222. package/dist/ui/framework/selectors.d.ts +51 -0
  223. package/dist/ui/framework/selectors.d.ts.map +1 -0
  224. package/dist/ui/framework/selectors.js +30 -0
  225. package/dist/ui/framework/selectors.js.map +1 -0
  226. package/dist/ui/framework/store.d.ts +37 -0
  227. package/dist/ui/framework/store.d.ts.map +1 -0
  228. package/dist/ui/framework/store.js +54 -0
  229. package/dist/ui/framework/store.js.map +1 -0
  230. package/dist/ui/icons/icons.d.ts +43 -0
  231. package/dist/ui/icons/icons.d.ts.map +1 -0
  232. package/dist/ui/icons/icons.js +46 -0
  233. package/dist/ui/icons/icons.js.map +1 -0
  234. package/dist/ui/icons/index.d.ts +11 -0
  235. package/dist/ui/icons/index.d.ts.map +1 -0
  236. package/dist/ui/icons/index.js +18 -0
  237. package/dist/ui/icons/index.js.map +1 -0
  238. package/dist/ui/index.d.ts +7 -0
  239. package/dist/ui/index.d.ts.map +1 -0
  240. package/dist/ui/index.js +9 -0
  241. package/dist/ui/index.js.map +1 -0
  242. package/dist/ui/styles/base.css.d.ts +5 -0
  243. package/dist/ui/styles/base.css.d.ts.map +1 -0
  244. package/dist/ui/styles/base.css.js +49 -0
  245. package/dist/ui/styles/base.css.js.map +1 -0
  246. package/dist/ui/styles/floating-bar.css.d.ts +5 -0
  247. package/dist/ui/styles/floating-bar.css.d.ts.map +1 -0
  248. package/dist/ui/styles/floating-bar.css.js +417 -0
  249. package/dist/ui/styles/floating-bar.css.js.map +1 -0
  250. package/dist/ui/styles/header.css.d.ts +5 -0
  251. package/dist/ui/styles/header.css.d.ts.map +1 -0
  252. package/dist/ui/styles/header.css.js +49 -0
  253. package/dist/ui/styles/header.css.js.map +1 -0
  254. package/dist/ui/styles/index.d.ts +21 -0
  255. package/dist/ui/styles/index.d.ts.map +1 -0
  256. package/dist/ui/styles/index.js +48 -0
  257. package/dist/ui/styles/index.js.map +1 -0
  258. package/dist/ui/styles/panels.css.d.ts +5 -0
  259. package/dist/ui/styles/panels.css.d.ts.map +1 -0
  260. package/dist/ui/styles/panels.css.js +446 -0
  261. package/dist/ui/styles/panels.css.js.map +1 -0
  262. package/dist/ui/styles/responsive.css.d.ts +5 -0
  263. package/dist/ui/styles/responsive.css.d.ts.map +1 -0
  264. package/dist/ui/styles/responsive.css.js +201 -0
  265. package/dist/ui/styles/responsive.css.js.map +1 -0
  266. package/dist/ui/styles/variables.css.d.ts +6 -0
  267. package/dist/ui/styles/variables.css.d.ts.map +1 -0
  268. package/dist/ui/styles/variables.css.js +75 -0
  269. package/dist/ui/styles/variables.css.js.map +1 -0
  270. package/dist/ui/styles/viewport.css.d.ts +5 -0
  271. package/dist/ui/styles/viewport.css.d.ts.map +1 -0
  272. package/dist/ui/styles/viewport.css.js +87 -0
  273. package/dist/ui/styles/viewport.css.js.map +1 -0
  274. package/dist/ui/viewer/actions.d.ts +103 -0
  275. package/dist/ui/viewer/actions.d.ts.map +1 -0
  276. package/dist/ui/viewer/actions.js +2 -0
  277. package/dist/ui/viewer/actions.js.map +1 -0
  278. package/dist/ui/viewer/annotation/LinkRenderer.d.ts +9 -0
  279. package/dist/ui/viewer/annotation/LinkRenderer.d.ts.map +1 -0
  280. package/dist/ui/viewer/annotation/LinkRenderer.js +17 -0
  281. package/dist/ui/viewer/annotation/LinkRenderer.js.map +1 -0
  282. package/dist/ui/viewer/annotation/MarkupRenderer.d.ts +21 -0
  283. package/dist/ui/viewer/annotation/MarkupRenderer.d.ts.map +1 -0
  284. package/dist/ui/viewer/annotation/MarkupRenderer.js +138 -0
  285. package/dist/ui/viewer/annotation/MarkupRenderer.js.map +1 -0
  286. package/dist/ui/viewer/annotation/ShapeRenderer.d.ts +33 -0
  287. package/dist/ui/viewer/annotation/ShapeRenderer.d.ts.map +1 -0
  288. package/dist/ui/viewer/annotation/ShapeRenderer.js +378 -0
  289. package/dist/ui/viewer/annotation/ShapeRenderer.js.map +1 -0
  290. package/dist/ui/viewer/annotation/TextRenderer.d.ts +23 -0
  291. package/dist/ui/viewer/annotation/TextRenderer.d.ts.map +1 -0
  292. package/dist/ui/viewer/annotation/TextRenderer.js +196 -0
  293. package/dist/ui/viewer/annotation/TextRenderer.js.map +1 -0
  294. package/dist/ui/viewer/annotation/index.d.ts +8 -0
  295. package/dist/ui/viewer/annotation/index.d.ts.map +1 -0
  296. package/dist/ui/viewer/annotation/index.js +8 -0
  297. package/dist/ui/viewer/annotation/index.js.map +1 -0
  298. package/dist/ui/viewer/annotation/render.d.ts +24 -0
  299. package/dist/ui/viewer/annotation/render.d.ts.map +1 -0
  300. package/dist/ui/viewer/annotation/render.js +184 -0
  301. package/dist/ui/viewer/annotation/render.js.map +1 -0
  302. package/dist/ui/viewer/annotation/types.d.ts +239 -0
  303. package/dist/ui/viewer/annotation/types.d.ts.map +1 -0
  304. package/dist/ui/viewer/annotation/types.js +7 -0
  305. package/dist/ui/viewer/annotation/types.js.map +1 -0
  306. package/dist/ui/viewer/annotation/utils.d.ts +37 -0
  307. package/dist/ui/viewer/annotation/utils.d.ts.map +1 -0
  308. package/dist/ui/viewer/annotation/utils.js +82 -0
  309. package/dist/ui/viewer/annotation/utils.js.map +1 -0
  310. package/dist/ui/viewer/components/AnnotationPanel.d.ts +19 -0
  311. package/dist/ui/viewer/components/AnnotationPanel.d.ts.map +1 -0
  312. package/dist/ui/viewer/components/AnnotationPanel.js +284 -0
  313. package/dist/ui/viewer/components/AnnotationPanel.js.map +1 -0
  314. package/dist/ui/viewer/components/FloatingToolbar.d.ts +9 -0
  315. package/dist/ui/viewer/components/FloatingToolbar.d.ts.map +1 -0
  316. package/dist/ui/viewer/components/FloatingToolbar.js +305 -0
  317. package/dist/ui/viewer/components/FloatingToolbar.js.map +1 -0
  318. package/dist/ui/viewer/components/LeftPanel.d.ts +10 -0
  319. package/dist/ui/viewer/components/LeftPanel.d.ts.map +1 -0
  320. package/dist/ui/viewer/components/LeftPanel.js +165 -0
  321. package/dist/ui/viewer/components/LeftPanel.js.map +1 -0
  322. package/dist/ui/viewer/components/OutlinePanel.d.ts +10 -0
  323. package/dist/ui/viewer/components/OutlinePanel.d.ts.map +1 -0
  324. package/dist/ui/viewer/components/OutlinePanel.js +169 -0
  325. package/dist/ui/viewer/components/OutlinePanel.js.map +1 -0
  326. package/dist/ui/viewer/components/RightPanel.d.ts +9 -0
  327. package/dist/ui/viewer/components/RightPanel.d.ts.map +1 -0
  328. package/dist/ui/viewer/components/RightPanel.js +102 -0
  329. package/dist/ui/viewer/components/RightPanel.js.map +1 -0
  330. package/dist/ui/viewer/components/Spread.d.ts +41 -0
  331. package/dist/ui/viewer/components/Spread.d.ts.map +1 -0
  332. package/dist/ui/viewer/components/Spread.js +278 -0
  333. package/dist/ui/viewer/components/Spread.js.map +1 -0
  334. package/dist/ui/viewer/components/ThumbnailPanel.d.ts +11 -0
  335. package/dist/ui/viewer/components/ThumbnailPanel.d.ts.map +1 -0
  336. package/dist/ui/viewer/components/ThumbnailPanel.js +206 -0
  337. package/dist/ui/viewer/components/ThumbnailPanel.js.map +1 -0
  338. package/dist/ui/viewer/components/Toolbar.d.ts +9 -0
  339. package/dist/ui/viewer/components/Toolbar.d.ts.map +1 -0
  340. package/dist/ui/viewer/components/Toolbar.js +93 -0
  341. package/dist/ui/viewer/components/Toolbar.js.map +1 -0
  342. package/dist/ui/viewer/components/ViewModeMenu.d.ts +9 -0
  343. package/dist/ui/viewer/components/ViewModeMenu.d.ts.map +1 -0
  344. package/dist/ui/viewer/components/ViewModeMenu.js +169 -0
  345. package/dist/ui/viewer/components/ViewModeMenu.js.map +1 -0
  346. package/dist/ui/viewer/components/Viewport.d.ts +10 -0
  347. package/dist/ui/viewer/components/Viewport.d.ts.map +1 -0
  348. package/dist/ui/viewer/components/Viewport.js +793 -0
  349. package/dist/ui/viewer/components/Viewport.js.map +1 -0
  350. package/dist/ui/viewer/effects.d.ts +9 -0
  351. package/dist/ui/viewer/effects.d.ts.map +1 -0
  352. package/dist/ui/viewer/effects.js +179 -0
  353. package/dist/ui/viewer/effects.js.map +1 -0
  354. package/dist/ui/viewer/icons.d.ts +32 -0
  355. package/dist/ui/viewer/icons.d.ts.map +1 -0
  356. package/dist/ui/viewer/icons.js +44 -0
  357. package/dist/ui/viewer/icons.js.map +1 -0
  358. package/dist/ui/viewer/index.d.ts +6 -0
  359. package/dist/ui/viewer/index.d.ts.map +1 -0
  360. package/dist/ui/viewer/index.js +6 -0
  361. package/dist/ui/viewer/index.js.map +1 -0
  362. package/dist/ui/viewer/layout/index.d.ts +3 -0
  363. package/dist/ui/viewer/layout/index.d.ts.map +1 -0
  364. package/dist/ui/viewer/layout/index.js +3 -0
  365. package/dist/ui/viewer/layout/index.js.map +1 -0
  366. package/dist/ui/viewer/layout/pixelAlign.d.ts +7 -0
  367. package/dist/ui/viewer/layout/pixelAlign.d.ts.map +1 -0
  368. package/dist/ui/viewer/layout/pixelAlign.js +22 -0
  369. package/dist/ui/viewer/layout/pixelAlign.js.map +1 -0
  370. package/dist/ui/viewer/layout/spreadLayout.d.ts +93 -0
  371. package/dist/ui/viewer/layout/spreadLayout.d.ts.map +1 -0
  372. package/dist/ui/viewer/layout/spreadLayout.js +303 -0
  373. package/dist/ui/viewer/layout/spreadLayout.js.map +1 -0
  374. package/dist/ui/viewer/navigation.d.ts +80 -0
  375. package/dist/ui/viewer/navigation.d.ts.map +1 -0
  376. package/dist/ui/viewer/navigation.js +59 -0
  377. package/dist/ui/viewer/navigation.js.map +1 -0
  378. package/dist/ui/viewer/reducer.d.ts +4 -0
  379. package/dist/ui/viewer/reducer.d.ts.map +1 -0
  380. package/dist/ui/viewer/reducer.js +229 -0
  381. package/dist/ui/viewer/reducer.js.map +1 -0
  382. package/dist/ui/viewer/rendering/RenderManager.d.ts +76 -0
  383. package/dist/ui/viewer/rendering/RenderManager.d.ts.map +1 -0
  384. package/dist/ui/viewer/rendering/RenderManager.js +236 -0
  385. package/dist/ui/viewer/rendering/RenderManager.js.map +1 -0
  386. package/dist/ui/viewer/shell.d.ts +29 -0
  387. package/dist/ui/viewer/shell.d.ts.map +1 -0
  388. package/dist/ui/viewer/shell.js +70 -0
  389. package/dist/ui/viewer/shell.js.map +1 -0
  390. package/dist/ui/viewer/state.d.ts +72 -0
  391. package/dist/ui/viewer/state.d.ts.map +1 -0
  392. package/dist/ui/viewer/state.js +47 -0
  393. package/dist/ui/viewer/state.js.map +1 -0
  394. package/dist/view/LayoutCalculator.d.ts +42 -0
  395. package/dist/view/LayoutCalculator.d.ts.map +1 -0
  396. package/dist/view/LayoutCalculator.js +180 -0
  397. package/dist/view/LayoutCalculator.js.map +1 -0
  398. package/dist/view/TransitionCoordinator.d.ts +11 -0
  399. package/dist/view/TransitionCoordinator.d.ts.map +1 -0
  400. package/dist/view/TransitionCoordinator.js +22 -0
  401. package/dist/view/TransitionCoordinator.js.map +1 -0
  402. package/dist/view/ViewState.d.ts +46 -0
  403. package/dist/view/ViewState.d.ts.map +1 -0
  404. package/dist/view/ViewState.js +109 -0
  405. package/dist/view/ViewState.js.map +1 -0
  406. package/dist/view/index.d.ts +7 -0
  407. package/dist/view/index.d.ts.map +1 -0
  408. package/dist/view/index.js +4 -0
  409. package/dist/view/index.js.map +1 -0
  410. package/dist/wasm/udoc.d.ts +202 -0
  411. package/dist/wasm/udoc.js +929 -0
  412. package/dist/wasm/udoc_bg.wasm +0 -0
  413. package/dist/wasm/udoc_bg.wasm.d.ts +28 -0
  414. package/dist/worker/WorkerClient.d.ts +103 -0
  415. package/dist/worker/WorkerClient.d.ts.map +1 -0
  416. package/dist/worker/WorkerClient.js +182 -0
  417. package/dist/worker/WorkerClient.js.map +1 -0
  418. package/dist/worker/index.d.ts +4 -0
  419. package/dist/worker/index.d.ts.map +1 -0
  420. package/dist/worker/index.js +2 -0
  421. package/dist/worker/index.js.map +1 -0
  422. package/dist/worker/types.d.ts +81 -0
  423. package/dist/worker/types.d.ts.map +1 -0
  424. package/dist/worker/types.js +6 -0
  425. package/dist/worker/types.js.map +1 -0
  426. package/dist/worker/worker.d.ts +191 -0
  427. package/dist/worker/worker.d.ts.map +1 -0
  428. package/dist/worker/worker.js +127 -0
  429. package/dist/worker/worker.js.map +1 -0
  430. package/dist/worker.d.ts +2 -0
  431. package/dist/worker.d.ts.map +1 -0
  432. package/dist/worker.js +205 -0
  433. package/dist/worker.js.map +1 -0
  434. package/package.json +32 -0
@@ -0,0 +1,322 @@
1
+ import { MarkupRenderer } from './MarkupRenderer';
2
+ import { LinkRenderer } from './LinkRenderer';
3
+ import { ShapeRenderer } from './ShapeRenderer';
4
+ import { TextRenderer } from './TextRenderer';
5
+ /**
6
+ * Manages annotation rendering and interaction for a document viewer.
7
+ */
8
+ export class AnnotationLayer {
9
+ /** Annotations indexed by page index */
10
+ pageAnnotations = new Map();
11
+ /** Overlay elements indexed by page index */
12
+ overlays = new Map();
13
+ /** Current zoom level */
14
+ zoom = 1;
15
+ /** Currently active popup element */
16
+ activePopup = null;
17
+ /** Bound handler for clicking outside popup */
18
+ boundHandleDocumentClick = null;
19
+ /** Bound handler for escape key */
20
+ boundHandleEscapeKey = null;
21
+ // Specialized renderers
22
+ markupRenderer;
23
+ linkRenderer;
24
+ shapeRenderer;
25
+ textRenderer;
26
+ constructor() {
27
+ // Initialize renderers with default zoom
28
+ const showPopup = this.showPopup.bind(this);
29
+ this.markupRenderer = new MarkupRenderer(this.zoom, showPopup);
30
+ this.linkRenderer = new LinkRenderer(this.zoom);
31
+ this.shapeRenderer = new ShapeRenderer(this.zoom);
32
+ this.textRenderer = new TextRenderer(this.zoom, showPopup);
33
+ }
34
+ /**
35
+ * Set the callback for internal link navigation.
36
+ */
37
+ setNavigateCallback(callback) {
38
+ this.linkRenderer.setNavigateCallback(callback);
39
+ }
40
+ /**
41
+ * Set the callback for external URI links.
42
+ */
43
+ setOpenUriCallback(callback) {
44
+ this.linkRenderer.setOpenUriCallback(callback);
45
+ }
46
+ /**
47
+ * Set annotations for a specific page.
48
+ */
49
+ setPageAnnotations(pageIndex, annotations) {
50
+ this.pageAnnotations.set(pageIndex, annotations);
51
+ }
52
+ /**
53
+ * Get annotations for a specific page.
54
+ */
55
+ getPageAnnotations(pageIndex) {
56
+ return this.pageAnnotations.get(pageIndex) ?? [];
57
+ }
58
+ /**
59
+ * Get all annotations with metadata, grouped by page.
60
+ * Returns only annotations that have metadata (comments).
61
+ */
62
+ getAllAnnotationsWithMetadata() {
63
+ const result = new Map();
64
+ for (const [pageIndex, annotations] of this.pageAnnotations) {
65
+ const withMetadata = annotations.filter(a => a.metadata);
66
+ if (withMetadata.length > 0) {
67
+ result.set(pageIndex, withMetadata);
68
+ }
69
+ }
70
+ return result;
71
+ }
72
+ /**
73
+ * Clear all annotations and overlays.
74
+ */
75
+ clear() {
76
+ this.hidePopup();
77
+ this.pageAnnotations.clear();
78
+ for (const overlay of this.overlays.values()) {
79
+ overlay.remove();
80
+ }
81
+ this.overlays.clear();
82
+ }
83
+ /**
84
+ * Set the current zoom level.
85
+ */
86
+ setZoom(zoom) {
87
+ this.zoom = zoom;
88
+ this.markupRenderer.setZoom(zoom);
89
+ this.linkRenderer.setZoom(zoom);
90
+ this.shapeRenderer.setZoom(zoom);
91
+ this.textRenderer.setZoom(zoom);
92
+ }
93
+ /**
94
+ * Show a popup for an annotation.
95
+ * @param anchorElement The element to anchor the popup to
96
+ * @param metadata The annotation metadata to display
97
+ * @param color The annotation color for styling
98
+ */
99
+ showPopup(anchorElement, metadata, color) {
100
+ // Hide any existing popup first
101
+ this.hidePopup();
102
+ // Create popup container
103
+ const popup = document.createElement('div');
104
+ popup.className = 'udoc-annotation-popup';
105
+ popup.style.cssText = `
106
+ position: absolute;
107
+ background: white;
108
+ border: 1px solid ${color};
109
+ border-radius: 4px;
110
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
111
+ max-width: 300px;
112
+ min-width: 150px;
113
+ font-size: 13px;
114
+ line-height: 1.4;
115
+ color: #333;
116
+ z-index: 1000;
117
+ pointer-events: auto;
118
+ overflow: hidden;
119
+ `;
120
+ // Create header section - show author if exists, otherwise fallback to subject
121
+ const headerText = metadata.author || metadata.subject;
122
+ if (headerText) {
123
+ const header = document.createElement('div');
124
+ header.style.cssText = `
125
+ background: ${color};
126
+ padding: 6px 10px;
127
+ color: white;
128
+ font-weight: 500;
129
+ font-size: 12px;
130
+ text-shadow: 0 1px 1px rgba(0,0,0,0.2);
131
+ `;
132
+ header.textContent = headerText;
133
+ popup.appendChild(header);
134
+ }
135
+ // Create body section (contents) if exists
136
+ if (metadata.contents) {
137
+ const body = document.createElement('div');
138
+ body.style.cssText = `
139
+ padding: 8px 10px;
140
+ word-wrap: break-word;
141
+ white-space: pre-wrap;
142
+ `;
143
+ body.textContent = metadata.contents;
144
+ popup.appendChild(body);
145
+ }
146
+ // Position the popup relative to the anchor element
147
+ const anchorRect = anchorElement.getBoundingClientRect();
148
+ const overlay = anchorElement.closest('.udoc-annotation-overlay');
149
+ if (!overlay)
150
+ return;
151
+ const overlayRect = overlay.getBoundingClientRect();
152
+ // Position popup below and to the right of the icon
153
+ const popupX = anchorRect.left - overlayRect.left + anchorRect.width + 4;
154
+ const popupY = anchorRect.top - overlayRect.top;
155
+ popup.style.left = `${popupX}px`;
156
+ popup.style.top = `${popupY}px`;
157
+ overlay.appendChild(popup);
158
+ this.activePopup = popup;
159
+ // Adjust position if popup goes off-screen
160
+ requestAnimationFrame(() => {
161
+ const popupRect = popup.getBoundingClientRect();
162
+ const viewportWidth = window.innerWidth;
163
+ const viewportHeight = window.innerHeight;
164
+ // If popup extends beyond right edge, position to the left of the icon
165
+ if (popupRect.right > viewportWidth - 10) {
166
+ const newX = anchorRect.left - overlayRect.left - popupRect.width - 4;
167
+ popup.style.left = `${Math.max(0, newX)}px`;
168
+ }
169
+ // If popup extends beyond bottom edge, adjust upward
170
+ if (popupRect.bottom > viewportHeight - 10) {
171
+ const newY = popupY - (popupRect.bottom - viewportHeight) - 10;
172
+ popup.style.top = `${Math.max(0, newY)}px`;
173
+ }
174
+ });
175
+ // Set up event handlers for closing
176
+ this.boundHandleDocumentClick = (e) => {
177
+ if (!popup.contains(e.target) && !anchorElement.contains(e.target)) {
178
+ this.hidePopup();
179
+ }
180
+ };
181
+ this.boundHandleEscapeKey = (e) => {
182
+ if (e.key === 'Escape') {
183
+ this.hidePopup();
184
+ }
185
+ };
186
+ // Delay adding click listener to avoid immediate close
187
+ setTimeout(() => {
188
+ document.addEventListener('click', this.boundHandleDocumentClick);
189
+ }, 0);
190
+ document.addEventListener('keydown', this.boundHandleEscapeKey);
191
+ }
192
+ /**
193
+ * Hide the currently active popup.
194
+ */
195
+ hidePopup() {
196
+ if (this.activePopup) {
197
+ this.activePopup.remove();
198
+ this.activePopup = null;
199
+ }
200
+ if (this.boundHandleDocumentClick) {
201
+ document.removeEventListener('click', this.boundHandleDocumentClick);
202
+ this.boundHandleDocumentClick = null;
203
+ }
204
+ if (this.boundHandleEscapeKey) {
205
+ document.removeEventListener('keydown', this.boundHandleEscapeKey);
206
+ this.boundHandleEscapeKey = null;
207
+ }
208
+ }
209
+ /**
210
+ * Create or get an annotation overlay for a slot element.
211
+ * The overlay is positioned absolutely within the slot.
212
+ *
213
+ * @param slotEl The slot element to attach the overlay to
214
+ * @param pageIndex The page index for this slot
215
+ * @returns The overlay element
216
+ */
217
+ getOrCreateOverlay(slotEl, pageIndex) {
218
+ let overlay = this.overlays.get(pageIndex);
219
+ if (overlay && overlay.parentElement === slotEl) {
220
+ return overlay;
221
+ }
222
+ // Create new overlay
223
+ overlay = document.createElement('div');
224
+ overlay.className = 'udoc-annotation-overlay';
225
+ overlay.style.cssText = `
226
+ position: absolute;
227
+ top: 0;
228
+ left: 0;
229
+ width: 100%;
230
+ height: 100%;
231
+ pointer-events: none;
232
+ `;
233
+ slotEl.appendChild(overlay);
234
+ this.overlays.set(pageIndex, overlay);
235
+ return overlay;
236
+ }
237
+ /**
238
+ * Render annotations for a specific page into its slot overlay.
239
+ *
240
+ * @param slotEl The slot element containing the page
241
+ * @param pageIndex The page index
242
+ */
243
+ renderPageAnnotations(slotEl, pageIndex) {
244
+ const annotations = this.pageAnnotations.get(pageIndex);
245
+ if (!annotations || annotations.length === 0) {
246
+ // Remove overlay if no annotations
247
+ const existing = this.overlays.get(pageIndex);
248
+ if (existing) {
249
+ existing.remove();
250
+ this.overlays.delete(pageIndex);
251
+ }
252
+ return;
253
+ }
254
+ const overlay = this.getOrCreateOverlay(slotEl, pageIndex);
255
+ overlay.innerHTML = '';
256
+ for (const annotation of annotations) {
257
+ if (!annotation.bounds)
258
+ continue;
259
+ this.renderAnnotation(overlay, annotation);
260
+ }
261
+ }
262
+ /**
263
+ * Render a single annotation using the appropriate renderer.
264
+ */
265
+ renderAnnotation(overlay, annotation) {
266
+ switch (annotation.type) {
267
+ // Link annotations
268
+ case 'link':
269
+ this.linkRenderer.render(overlay, annotation);
270
+ break;
271
+ // Markup annotations (text highlighting)
272
+ case 'highlight':
273
+ this.markupRenderer.renderHighlight(overlay, annotation);
274
+ break;
275
+ case 'underline':
276
+ this.markupRenderer.renderUnderline(overlay, annotation);
277
+ break;
278
+ case 'strikeOut':
279
+ this.markupRenderer.renderStrikeOut(overlay, annotation);
280
+ break;
281
+ case 'squiggly':
282
+ this.markupRenderer.renderSquiggly(overlay, annotation);
283
+ break;
284
+ // Text annotations
285
+ case 'text':
286
+ this.textRenderer.renderText(overlay, annotation);
287
+ break;
288
+ case 'freeText':
289
+ this.textRenderer.renderFreeText(overlay, annotation);
290
+ break;
291
+ case 'stamp':
292
+ this.textRenderer.renderStamp(overlay, annotation);
293
+ break;
294
+ case 'caret':
295
+ this.textRenderer.renderCaret(overlay, annotation);
296
+ break;
297
+ // Shape annotations
298
+ case 'line':
299
+ this.shapeRenderer.renderLine(overlay, annotation);
300
+ break;
301
+ case 'square':
302
+ this.shapeRenderer.renderSquare(overlay, annotation);
303
+ break;
304
+ case 'circle':
305
+ this.shapeRenderer.renderCircle(overlay, annotation);
306
+ break;
307
+ case 'polygon':
308
+ this.shapeRenderer.renderPolygon(overlay, annotation);
309
+ break;
310
+ case 'polyLine':
311
+ this.shapeRenderer.renderPolyLine(overlay, annotation);
312
+ break;
313
+ case 'ink':
314
+ this.shapeRenderer.renderInk(overlay, annotation);
315
+ break;
316
+ case 'redact':
317
+ this.shapeRenderer.renderRedact(overlay, annotation);
318
+ break;
319
+ }
320
+ }
321
+ }
322
+ //# sourceMappingURL=AnnotationLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnnotationLayer.js","sourceRoot":"","sources":["../../../src/ui/annotation/AnnotationLayer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Renderer for link annotations.
3
+ */
4
+ import type { Annotation, Destination } from '../../core/types';
5
+ /**
6
+ * Callback types for link actions.
7
+ */
8
+ export type NavigateCallback = (destination: Destination) => void;
9
+ export type OpenUriCallback = (uri: string) => void;
10
+ /**
11
+ * Renders link annotations as clickable overlays.
12
+ */
13
+ export declare class LinkRenderer {
14
+ private zoom;
15
+ private onNavigate?;
16
+ private onOpenUri?;
17
+ constructor(zoom: number, onNavigate?: NavigateCallback, onOpenUri?: OpenUriCallback);
18
+ setZoom(zoom: number): void;
19
+ setNavigateCallback(callback: NavigateCallback): void;
20
+ setOpenUriCallback(callback: OpenUriCallback): void;
21
+ /**
22
+ * Render a link annotation as a clickable box.
23
+ */
24
+ render(overlay: HTMLDivElement, annotation: Annotation & {
25
+ type: 'link';
26
+ }): void;
27
+ /**
28
+ * Handle a link action (navigation or URI).
29
+ */
30
+ private handleLinkAction;
31
+ }
32
+ //# sourceMappingURL=LinkRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkRenderer.d.ts","sourceRoot":"","sources":["../../../src/ui/annotation/LinkRenderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAG5E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpD;;GAEG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAkB;gBAGhC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,gBAAgB,EAC7B,SAAS,CAAC,EAAE,eAAe;IAO/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIrD,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAInD;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA4BhF;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAkB3B"}
@@ -0,0 +1,74 @@
1
+ import { scaleBounds } from './utils';
2
+ /**
3
+ * Renders link annotations as clickable overlays.
4
+ */
5
+ export class LinkRenderer {
6
+ zoom;
7
+ onNavigate;
8
+ onOpenUri;
9
+ constructor(zoom, onNavigate, onOpenUri) {
10
+ this.zoom = zoom;
11
+ this.onNavigate = onNavigate;
12
+ this.onOpenUri = onOpenUri;
13
+ }
14
+ setZoom(zoom) {
15
+ this.zoom = zoom;
16
+ }
17
+ setNavigateCallback(callback) {
18
+ this.onNavigate = callback;
19
+ }
20
+ setOpenUriCallback(callback) {
21
+ this.onOpenUri = callback;
22
+ }
23
+ /**
24
+ * Render a link annotation as a clickable box.
25
+ */
26
+ render(overlay, annotation) {
27
+ if (!annotation.bounds)
28
+ return;
29
+ const scaled = scaleBounds(annotation.bounds, this.zoom);
30
+ const box = document.createElement('div');
31
+ box.className = 'udoc-annotation-box udoc-annotation-link';
32
+ box.style.cssText = `
33
+ position: absolute;
34
+ left: ${scaled.x}px;
35
+ top: ${scaled.y}px;
36
+ width: ${scaled.width}px;
37
+ height: ${scaled.height}px;
38
+ pointer-events: auto;
39
+ cursor: pointer;
40
+ `;
41
+ box.addEventListener('click', (e) => {
42
+ e.preventDefault();
43
+ e.stopPropagation();
44
+ if (annotation.action) {
45
+ this.handleLinkAction(annotation.action);
46
+ }
47
+ });
48
+ overlay.appendChild(box);
49
+ }
50
+ /**
51
+ * Handle a link action (navigation or URI).
52
+ */
53
+ handleLinkAction(action) {
54
+ if (action.actionType === 'goTo') {
55
+ if (this.onNavigate) {
56
+ this.onNavigate(action.destination);
57
+ return true;
58
+ }
59
+ }
60
+ else if (action.actionType === 'uri') {
61
+ if (this.onOpenUri) {
62
+ this.onOpenUri(action.uri);
63
+ return true;
64
+ }
65
+ else {
66
+ // Default behavior: open in new tab
67
+ window.open(action.uri, '_blank', 'noopener,noreferrer');
68
+ return true;
69
+ }
70
+ }
71
+ return false;
72
+ }
73
+ }
74
+ //# sourceMappingURL=LinkRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkRenderer.js","sourceRoot":"","sources":["../../../src/ui/annotation/LinkRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQtC;;GAEG;AACH,MAAM,OAAO,YAAY;IACb,IAAI,CAAS;IACb,UAAU,CAAoB;IAC9B,SAAS,CAAmB;IAEpC,YACI,IAAY,EACZ,UAA6B,EAC7B,SAA2B;QAE3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,mBAAmB,CAAC,QAA0B;QAC1C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;IAC/B,CAAC;IAED,kBAAkB,CAAC,QAAyB;QACxC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAuB,EAAE,UAAyC;QACrE,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO;QAE/B,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,SAAS,GAAG,0CAA0C,CAAC;QAC3D,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG;;oBAER,MAAM,CAAC,CAAC;mBACT,MAAM,CAAC,CAAC;qBACN,MAAM,CAAC,KAAK;sBACX,MAAM,CAAC,MAAM;;;SAG1B,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAChC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,MAAkB;QACvC,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,oCAAoC;gBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;gBACzD,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Renderer for text markup annotations: highlight, underline, strikeout, squiggly.
3
+ */
4
+ import type { HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation, SquigglyAnnotation, MarkupMetadata } from '../../core/types';
5
+ export type MarkupAnnotation = HighlightAnnotation | UnderlineAnnotation | StrikeOutAnnotation | SquigglyAnnotation;
6
+ /**
7
+ * Callback type for showing popup with annotation metadata.
8
+ */
9
+ export type ShowPopupCallback = (anchor: HTMLElement, metadata: MarkupMetadata, color: string) => void;
10
+ /**
11
+ * Renders text markup annotations (highlight, underline, strikeout, squiggly).
12
+ */
13
+ export declare class MarkupRenderer {
14
+ private zoom;
15
+ private onShowPopup?;
16
+ constructor(zoom: number, onShowPopup?: ShowPopupCallback);
17
+ setZoom(zoom: number): void;
18
+ setShowPopupCallback(callback: ShowPopupCallback): void;
19
+ /**
20
+ * Render a highlight annotation as a colored overlay.
21
+ */
22
+ renderHighlight(overlay: HTMLDivElement, annotation: HighlightAnnotation): void;
23
+ /**
24
+ * Render an underline annotation as lines along the bottom of text.
25
+ */
26
+ renderUnderline(overlay: HTMLDivElement, annotation: UnderlineAnnotation): void;
27
+ /**
28
+ * Render a strikeout annotation as lines through the middle of text.
29
+ */
30
+ renderStrikeOut(overlay: HTMLDivElement, annotation: StrikeOutAnnotation): void;
31
+ /**
32
+ * Render a squiggly annotation as wavy lines under text.
33
+ */
34
+ renderSquiggly(overlay: HTMLDivElement, annotation: SquigglyAnnotation): void;
35
+ /**
36
+ * Add a clickable overlay for text markup annotations when metadata exists.
37
+ */
38
+ private addTextMarkupClickHandler;
39
+ }
40
+ //# sourceMappingURL=MarkupRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkupRenderer.d.ts","sourceRoot":"","sources":["../../../src/ui/annotation/MarkupRenderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACR,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACjB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,gBAAgB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC5B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,MAAM,KACZ,IAAI,CAAC;AAEV;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAC,CAAoB;gBAE5B,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,iBAAiB;IAKzD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIvD;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAqB/E;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAwB/E;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IA2B/E;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI;IA8C7E;;OAEG;IACH,OAAO,CAAC,yBAAyB;CA8BpC"}
@@ -0,0 +1,154 @@
1
+ import { colorToRgb, scaleQuadPoints, createSvgOverlay, scaleBounds } from './utils';
2
+ /**
3
+ * Renders text markup annotations (highlight, underline, strikeout, squiggly).
4
+ */
5
+ export class MarkupRenderer {
6
+ zoom;
7
+ onShowPopup;
8
+ constructor(zoom, onShowPopup) {
9
+ this.zoom = zoom;
10
+ this.onShowPopup = onShowPopup;
11
+ }
12
+ setZoom(zoom) {
13
+ this.zoom = zoom;
14
+ }
15
+ setShowPopupCallback(callback) {
16
+ this.onShowPopup = callback;
17
+ }
18
+ /**
19
+ * Render a highlight annotation as a colored overlay.
20
+ */
21
+ renderHighlight(overlay, annotation) {
22
+ const svg = createSvgOverlay();
23
+ const color = colorToRgb(annotation.color, 'rgb(255, 255, 0)'); // Default yellow
24
+ const opacity = annotation.opacity ?? 0.4;
25
+ for (const quad of annotation.quads) {
26
+ const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
27
+ const polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
28
+ polygon.setAttribute('points', scaledPoints.map((p) => `${p.x},${p.y}`).join(' '));
29
+ polygon.setAttribute('fill', color);
30
+ polygon.setAttribute('fill-opacity', String(opacity));
31
+ polygon.setAttribute('style', 'mix-blend-mode: multiply;');
32
+ svg.appendChild(polygon);
33
+ }
34
+ overlay.appendChild(svg);
35
+ // Add clickable overlay when metadata exists
36
+ this.addTextMarkupClickHandler(overlay, annotation, color);
37
+ }
38
+ /**
39
+ * Render an underline annotation as lines along the bottom of text.
40
+ */
41
+ renderUnderline(overlay, annotation) {
42
+ const svg = createSvgOverlay();
43
+ const color = colorToRgb(annotation.color, 'rgb(0, 128, 0)'); // Default green
44
+ const strokeWidth = Math.max(1, 1 * this.zoom);
45
+ for (const quad of annotation.quads) {
46
+ const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
47
+ // Draw line along bottom edge (from bottom-left to bottom-right)
48
+ const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
49
+ line.setAttribute('x1', String(scaledPoints[0].x));
50
+ line.setAttribute('y1', String(scaledPoints[0].y));
51
+ line.setAttribute('x2', String(scaledPoints[1].x));
52
+ line.setAttribute('y2', String(scaledPoints[1].y));
53
+ line.setAttribute('stroke', color);
54
+ line.setAttribute('stroke-width', String(strokeWidth));
55
+ svg.appendChild(line);
56
+ }
57
+ overlay.appendChild(svg);
58
+ // Add clickable overlay when metadata exists
59
+ this.addTextMarkupClickHandler(overlay, annotation, color);
60
+ }
61
+ /**
62
+ * Render a strikeout annotation as lines through the middle of text.
63
+ */
64
+ renderStrikeOut(overlay, annotation) {
65
+ const svg = createSvgOverlay();
66
+ const color = colorToRgb(annotation.color, 'rgb(255, 0, 0)'); // Default red
67
+ const strokeWidth = Math.max(1, 1 * this.zoom);
68
+ for (const quad of annotation.quads) {
69
+ const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
70
+ // Calculate middle Y between top and bottom
71
+ const midLeftY = (scaledPoints[0].y + scaledPoints[3].y) / 2;
72
+ const midRightY = (scaledPoints[1].y + scaledPoints[2].y) / 2;
73
+ const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
74
+ line.setAttribute('x1', String(scaledPoints[0].x));
75
+ line.setAttribute('y1', String(midLeftY));
76
+ line.setAttribute('x2', String(scaledPoints[1].x));
77
+ line.setAttribute('y2', String(midRightY));
78
+ line.setAttribute('stroke', color);
79
+ line.setAttribute('stroke-width', String(strokeWidth));
80
+ svg.appendChild(line);
81
+ }
82
+ overlay.appendChild(svg);
83
+ // Add clickable overlay when metadata exists
84
+ this.addTextMarkupClickHandler(overlay, annotation, color);
85
+ }
86
+ /**
87
+ * Render a squiggly annotation as wavy lines under text.
88
+ */
89
+ renderSquiggly(overlay, annotation) {
90
+ const svg = createSvgOverlay();
91
+ const color = colorToRgb(annotation.color, 'rgb(255, 0, 0)'); // Default red
92
+ const strokeWidth = Math.max(1, 1 * this.zoom);
93
+ const wavelength = 4 * this.zoom;
94
+ const amplitude = 2 * this.zoom;
95
+ for (const quad of annotation.quads) {
96
+ const scaledPoints = scaleQuadPoints(quad.points, this.zoom);
97
+ const startX = scaledPoints[0].x;
98
+ const endX = scaledPoints[1].x;
99
+ const startY = scaledPoints[0].y;
100
+ const endY = scaledPoints[1].y;
101
+ // Generate wavy path
102
+ let path = `M ${startX} ${startY}`;
103
+ const totalLength = Math.sqrt((endX - startX) ** 2 + (endY - startY) ** 2);
104
+ const steps = Math.ceil(totalLength / wavelength);
105
+ for (let i = 0; i < steps; i++) {
106
+ const t1 = (i + 0.5) / steps;
107
+ const t2 = (i + 1) / steps;
108
+ const midX = startX + (endX - startX) * t1;
109
+ const midY = startY + (endY - startY) * t1;
110
+ const nextX = startX + (endX - startX) * t2;
111
+ const nextY = startY + (endY - startY) * t2;
112
+ // Alternate up and down
113
+ const direction = i % 2 === 0 ? -1 : 1;
114
+ path += ` Q ${midX} ${midY + amplitude * direction}, ${nextX} ${nextY}`;
115
+ }
116
+ const pathEl = document.createElementNS('http://www.w3.org/2000/svg', 'path');
117
+ pathEl.setAttribute('d', path);
118
+ pathEl.setAttribute('stroke', color);
119
+ pathEl.setAttribute('stroke-width', String(strokeWidth));
120
+ pathEl.setAttribute('fill', 'none');
121
+ svg.appendChild(pathEl);
122
+ }
123
+ overlay.appendChild(svg);
124
+ // Add clickable overlay when metadata exists
125
+ this.addTextMarkupClickHandler(overlay, annotation, color);
126
+ }
127
+ /**
128
+ * Add a clickable overlay for text markup annotations when metadata exists.
129
+ */
130
+ addTextMarkupClickHandler(overlay, annotation, color) {
131
+ if (!annotation.metadata || !this.onShowPopup)
132
+ return;
133
+ const scaled = scaleBounds(annotation.bounds, this.zoom);
134
+ const clickArea = document.createElement('div');
135
+ clickArea.className = 'udoc-annotation-click-area';
136
+ clickArea.style.cssText = `
137
+ position: absolute;
138
+ left: ${scaled.x}px;
139
+ top: ${scaled.y}px;
140
+ width: ${scaled.width}px;
141
+ height: ${scaled.height}px;
142
+ pointer-events: auto;
143
+ cursor: pointer;
144
+ `;
145
+ const showPopup = this.onShowPopup;
146
+ const metadata = annotation.metadata;
147
+ clickArea.addEventListener('click', (e) => {
148
+ e.stopPropagation();
149
+ showPopup(clickArea, metadata, color);
150
+ });
151
+ overlay.appendChild(clickArea);
152
+ }
153
+ }
154
+ //# sourceMappingURL=MarkupRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkupRenderer.js","sourceRoot":"","sources":["../../../src/ui/annotation/MarkupRenderer.ts"],"names":[],"mappings":"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"}