@docmentis/udoc-viewer 0.1.0 → 0.1.2

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 (264) hide show
  1. package/dist/styles.css +1331 -0
  2. package/dist/wasm/udoc_bg.wasm +0 -0
  3. package/dist/worker/WorkerClient.js +1 -1
  4. package/package.json +15 -6
  5. package/dist/WorkerClient.d.ts +0 -36
  6. package/dist/WorkerClient.d.ts.map +0 -1
  7. package/dist/WorkerClient.js +0 -121
  8. package/dist/WorkerClient.js.map +0 -1
  9. package/dist/annotation/AnnotationLayer.d.ts +0 -166
  10. package/dist/annotation/AnnotationLayer.d.ts.map +0 -1
  11. package/dist/annotation/AnnotationLayer.js +0 -1090
  12. package/dist/annotation/AnnotationLayer.js.map +0 -1
  13. package/dist/annotation/index.d.ts +0 -6
  14. package/dist/annotation/index.d.ts.map +0 -1
  15. package/dist/annotation/index.js +0 -6
  16. package/dist/annotation/index.js.map +0 -1
  17. package/dist/components/FloatingBar.d.ts +0 -102
  18. package/dist/components/FloatingBar.d.ts.map +0 -1
  19. package/dist/components/FloatingBar.js +0 -513
  20. package/dist/components/FloatingBar.js.map +0 -1
  21. package/dist/components/Header.d.ts +0 -46
  22. package/dist/components/Header.d.ts.map +0 -1
  23. package/dist/components/Header.js +0 -93
  24. package/dist/components/Header.js.map +0 -1
  25. package/dist/components/index.d.ts +0 -6
  26. package/dist/components/index.d.ts.map +0 -1
  27. package/dist/components/index.js +0 -4
  28. package/dist/components/index.js.map +0 -1
  29. package/dist/components/panels/CommentsPanel.d.ts +0 -33
  30. package/dist/components/panels/CommentsPanel.d.ts.map +0 -1
  31. package/dist/components/panels/CommentsPanel.js +0 -176
  32. package/dist/components/panels/CommentsPanel.js.map +0 -1
  33. package/dist/components/panels/OutlinePanel.d.ts +0 -30
  34. package/dist/components/panels/OutlinePanel.d.ts.map +0 -1
  35. package/dist/components/panels/OutlinePanel.js +0 -144
  36. package/dist/components/panels/OutlinePanel.js.map +0 -1
  37. package/dist/components/panels/ThumbnailsPanel.d.ts +0 -51
  38. package/dist/components/panels/ThumbnailsPanel.d.ts.map +0 -1
  39. package/dist/components/panels/ThumbnailsPanel.js +0 -160
  40. package/dist/components/panels/ThumbnailsPanel.js.map +0 -1
  41. package/dist/components/panels/index.d.ts +0 -7
  42. package/dist/components/panels/index.d.ts.map +0 -1
  43. package/dist/components/panels/index.js +0 -4
  44. package/dist/components/panels/index.js.map +0 -1
  45. package/dist/constants.d.ts +0 -25
  46. package/dist/constants.d.ts.map +0 -1
  47. package/dist/constants.js +0 -46
  48. package/dist/constants.js.map +0 -1
  49. package/dist/core/NavigationController.d.ts +0 -54
  50. package/dist/core/NavigationController.d.ts.map +0 -1
  51. package/dist/core/NavigationController.js +0 -145
  52. package/dist/core/NavigationController.js.map +0 -1
  53. package/dist/core/PerfTimer.d.ts +0 -12
  54. package/dist/core/PerfTimer.d.ts.map +0 -1
  55. package/dist/core/PerfTimer.js +0 -32
  56. package/dist/core/PerfTimer.js.map +0 -1
  57. package/dist/core/ViewerState.d.ts +0 -108
  58. package/dist/core/ViewerState.d.ts.map +0 -1
  59. package/dist/core/ViewerState.js +0 -179
  60. package/dist/core/ViewerState.js.map +0 -1
  61. package/dist/core/constants.d.ts +0 -24
  62. package/dist/core/constants.d.ts.map +0 -1
  63. package/dist/core/constants.js +0 -42
  64. package/dist/core/constants.js.map +0 -1
  65. package/dist/core/index.d.ts +0 -8
  66. package/dist/core/index.d.ts.map +0 -1
  67. package/dist/core/index.js +0 -11
  68. package/dist/core/index.js.map +0 -1
  69. package/dist/core/types.d.ts +0 -573
  70. package/dist/core/types.d.ts.map +0 -1
  71. package/dist/core/types.js +0 -5
  72. package/dist/core/types.js.map +0 -1
  73. package/dist/icons/icons.d.ts +0 -41
  74. package/dist/icons/icons.d.ts.map +0 -1
  75. package/dist/icons/icons.js +0 -51
  76. package/dist/icons/icons.js.map +0 -1
  77. package/dist/icons/index.d.ts +0 -3
  78. package/dist/icons/index.d.ts.map +0 -1
  79. package/dist/icons/index.js +0 -2
  80. package/dist/icons/index.js.map +0 -1
  81. package/dist/layout/BandManager.d.ts +0 -87
  82. package/dist/layout/BandManager.d.ts.map +0 -1
  83. package/dist/layout/BandManager.js +0 -185
  84. package/dist/layout/BandManager.js.map +0 -1
  85. package/dist/layout/LayoutCalculator.d.ts +0 -42
  86. package/dist/layout/LayoutCalculator.d.ts.map +0 -1
  87. package/dist/layout/LayoutCalculator.js +0 -180
  88. package/dist/layout/LayoutCalculator.js.map +0 -1
  89. package/dist/layout/LayoutState.d.ts +0 -46
  90. package/dist/layout/LayoutState.d.ts.map +0 -1
  91. package/dist/layout/LayoutState.js +0 -109
  92. package/dist/layout/LayoutState.js.map +0 -1
  93. package/dist/layout/TransitionCoordinator.d.ts +0 -11
  94. package/dist/layout/TransitionCoordinator.d.ts.map +0 -1
  95. package/dist/layout/TransitionCoordinator.js +0 -22
  96. package/dist/layout/TransitionCoordinator.js.map +0 -1
  97. package/dist/layout/index.d.ts +0 -7
  98. package/dist/layout/index.d.ts.map +0 -1
  99. package/dist/layout/index.js +0 -4
  100. package/dist/layout/index.js.map +0 -1
  101. package/dist/rendering/BandManager.d.ts +0 -87
  102. package/dist/rendering/BandManager.d.ts.map +0 -1
  103. package/dist/rendering/BandManager.js +0 -185
  104. package/dist/rendering/BandManager.js.map +0 -1
  105. package/dist/rendering/PageCache.d.ts +0 -75
  106. package/dist/rendering/PageCache.d.ts.map +0 -1
  107. package/dist/rendering/PageCache.js +0 -122
  108. package/dist/rendering/PageCache.js.map +0 -1
  109. package/dist/rendering/RenderQueue.d.ts +0 -75
  110. package/dist/rendering/RenderQueue.d.ts.map +0 -1
  111. package/dist/rendering/RenderQueue.js +0 -105
  112. package/dist/rendering/RenderQueue.js.map +0 -1
  113. package/dist/rendering/ThumbnailQueue.d.ts +0 -57
  114. package/dist/rendering/ThumbnailQueue.d.ts.map +0 -1
  115. package/dist/rendering/ThumbnailQueue.js +0 -85
  116. package/dist/rendering/ThumbnailQueue.js.map +0 -1
  117. package/dist/rendering/index.d.ts +0 -13
  118. package/dist/rendering/index.d.ts.map +0 -1
  119. package/dist/rendering/index.js +0 -10
  120. package/dist/rendering/index.js.map +0 -1
  121. package/dist/rendering/types.d.ts +0 -72
  122. package/dist/rendering/types.d.ts.map +0 -1
  123. package/dist/rendering/types.js +0 -5
  124. package/dist/rendering/types.js.map +0 -1
  125. package/dist/styles/index.d.ts +0 -6
  126. package/dist/styles/index.d.ts.map +0 -1
  127. package/dist/styles/index.js +0 -1221
  128. package/dist/styles/index.js.map +0 -1
  129. package/dist/types.d.ts +0 -6
  130. package/dist/types.d.ts.map +0 -1
  131. package/dist/types.js +0 -6
  132. package/dist/types.js.map +0 -1
  133. package/dist/ui/Component.d.ts +0 -127
  134. package/dist/ui/Component.d.ts.map +0 -1
  135. package/dist/ui/Component.js +0 -201
  136. package/dist/ui/Component.js.map +0 -1
  137. package/dist/ui/annotation/AnnotationLayer.d.ts +0 -90
  138. package/dist/ui/annotation/AnnotationLayer.d.ts.map +0 -1
  139. package/dist/ui/annotation/AnnotationLayer.js +0 -322
  140. package/dist/ui/annotation/AnnotationLayer.js.map +0 -1
  141. package/dist/ui/annotation/LinkRenderer.d.ts +0 -32
  142. package/dist/ui/annotation/LinkRenderer.d.ts.map +0 -1
  143. package/dist/ui/annotation/LinkRenderer.js +0 -74
  144. package/dist/ui/annotation/LinkRenderer.js.map +0 -1
  145. package/dist/ui/annotation/MarkupRenderer.d.ts +0 -40
  146. package/dist/ui/annotation/MarkupRenderer.d.ts.map +0 -1
  147. package/dist/ui/annotation/MarkupRenderer.js +0 -154
  148. package/dist/ui/annotation/MarkupRenderer.js.map +0 -1
  149. package/dist/ui/annotation/ShapeRenderer.d.ts +0 -46
  150. package/dist/ui/annotation/ShapeRenderer.d.ts.map +0 -1
  151. package/dist/ui/annotation/ShapeRenderer.js +0 -376
  152. package/dist/ui/annotation/ShapeRenderer.js.map +0 -1
  153. package/dist/ui/annotation/TextRenderer.d.ts +0 -36
  154. package/dist/ui/annotation/TextRenderer.d.ts.map +0 -1
  155. package/dist/ui/annotation/TextRenderer.js +0 -199
  156. package/dist/ui/annotation/TextRenderer.js.map +0 -1
  157. package/dist/ui/annotation/index.d.ts +0 -17
  158. package/dist/ui/annotation/index.d.ts.map +0 -1
  159. package/dist/ui/annotation/index.js +0 -13
  160. package/dist/ui/annotation/index.js.map +0 -1
  161. package/dist/ui/annotation/utils.d.ts +0 -40
  162. package/dist/ui/annotation/utils.d.ts.map +0 -1
  163. package/dist/ui/annotation/utils.js +0 -62
  164. package/dist/ui/annotation/utils.js.map +0 -1
  165. package/dist/ui/components/CommentsContent.d.ts +0 -35
  166. package/dist/ui/components/CommentsContent.d.ts.map +0 -1
  167. package/dist/ui/components/CommentsContent.js +0 -203
  168. package/dist/ui/components/CommentsContent.js.map +0 -1
  169. package/dist/ui/components/FloatingBar.d.ts +0 -55
  170. package/dist/ui/components/FloatingBar.d.ts.map +0 -1
  171. package/dist/ui/components/FloatingBar.js +0 -585
  172. package/dist/ui/components/FloatingBar.js.map +0 -1
  173. package/dist/ui/components/Header.d.ts +0 -29
  174. package/dist/ui/components/Header.d.ts.map +0 -1
  175. package/dist/ui/components/Header.js +0 -127
  176. package/dist/ui/components/Header.js.map +0 -1
  177. package/dist/ui/components/LeftPanel.d.ts +0 -54
  178. package/dist/ui/components/LeftPanel.d.ts.map +0 -1
  179. package/dist/ui/components/LeftPanel.js +0 -202
  180. package/dist/ui/components/LeftPanel.js.map +0 -1
  181. package/dist/ui/components/OutlineContent.d.ts +0 -34
  182. package/dist/ui/components/OutlineContent.d.ts.map +0 -1
  183. package/dist/ui/components/OutlineContent.js +0 -147
  184. package/dist/ui/components/OutlineContent.js.map +0 -1
  185. package/dist/ui/components/RightPanel.d.ts +0 -52
  186. package/dist/ui/components/RightPanel.d.ts.map +0 -1
  187. package/dist/ui/components/RightPanel.js +0 -142
  188. package/dist/ui/components/RightPanel.js.map +0 -1
  189. package/dist/ui/components/Viewport.d.ts +0 -70
  190. package/dist/ui/components/Viewport.d.ts.map +0 -1
  191. package/dist/ui/components/Viewport.js +0 -173
  192. package/dist/ui/components/Viewport.js.map +0 -1
  193. package/dist/ui/components/index.d.ts +0 -11
  194. package/dist/ui/components/index.d.ts.map +0 -1
  195. package/dist/ui/components/index.js +0 -10
  196. package/dist/ui/components/index.js.map +0 -1
  197. package/dist/ui/icons/icons.d.ts +0 -43
  198. package/dist/ui/icons/icons.d.ts.map +0 -1
  199. package/dist/ui/icons/icons.js +0 -46
  200. package/dist/ui/icons/icons.js.map +0 -1
  201. package/dist/ui/icons/index.d.ts +0 -11
  202. package/dist/ui/icons/index.d.ts.map +0 -1
  203. package/dist/ui/icons/index.js +0 -18
  204. package/dist/ui/icons/index.js.map +0 -1
  205. package/dist/ui/index.d.ts +0 -7
  206. package/dist/ui/index.d.ts.map +0 -1
  207. package/dist/ui/index.js +0 -9
  208. package/dist/ui/index.js.map +0 -1
  209. package/dist/ui/styles/base.css.d.ts +0 -5
  210. package/dist/ui/styles/base.css.d.ts.map +0 -1
  211. package/dist/ui/styles/base.css.js +0 -49
  212. package/dist/ui/styles/base.css.js.map +0 -1
  213. package/dist/ui/styles/floating-bar.css.d.ts +0 -5
  214. package/dist/ui/styles/floating-bar.css.d.ts.map +0 -1
  215. package/dist/ui/styles/floating-bar.css.js +0 -417
  216. package/dist/ui/styles/floating-bar.css.js.map +0 -1
  217. package/dist/ui/styles/header.css.d.ts +0 -5
  218. package/dist/ui/styles/header.css.d.ts.map +0 -1
  219. package/dist/ui/styles/header.css.js +0 -49
  220. package/dist/ui/styles/header.css.js.map +0 -1
  221. package/dist/ui/styles/index.d.ts +0 -21
  222. package/dist/ui/styles/index.d.ts.map +0 -1
  223. package/dist/ui/styles/index.js +0 -48
  224. package/dist/ui/styles/index.js.map +0 -1
  225. package/dist/ui/styles/panels.css.d.ts +0 -5
  226. package/dist/ui/styles/panels.css.d.ts.map +0 -1
  227. package/dist/ui/styles/panels.css.js +0 -446
  228. package/dist/ui/styles/panels.css.js.map +0 -1
  229. package/dist/ui/styles/responsive.css.d.ts +0 -5
  230. package/dist/ui/styles/responsive.css.d.ts.map +0 -1
  231. package/dist/ui/styles/responsive.css.js +0 -201
  232. package/dist/ui/styles/responsive.css.js.map +0 -1
  233. package/dist/ui/styles/variables.css.d.ts +0 -6
  234. package/dist/ui/styles/variables.css.d.ts.map +0 -1
  235. package/dist/ui/styles/variables.css.js +0 -75
  236. package/dist/ui/styles/variables.css.js.map +0 -1
  237. package/dist/ui/styles/viewport.css.d.ts +0 -5
  238. package/dist/ui/styles/viewport.css.d.ts.map +0 -1
  239. package/dist/ui/styles/viewport.css.js +0 -87
  240. package/dist/ui/styles/viewport.css.js.map +0 -1
  241. package/dist/view/LayoutCalculator.d.ts +0 -42
  242. package/dist/view/LayoutCalculator.d.ts.map +0 -1
  243. package/dist/view/LayoutCalculator.js +0 -180
  244. package/dist/view/LayoutCalculator.js.map +0 -1
  245. package/dist/view/TransitionCoordinator.d.ts +0 -11
  246. package/dist/view/TransitionCoordinator.d.ts.map +0 -1
  247. package/dist/view/TransitionCoordinator.js +0 -22
  248. package/dist/view/TransitionCoordinator.js.map +0 -1
  249. package/dist/view/ViewState.d.ts +0 -46
  250. package/dist/view/ViewState.d.ts.map +0 -1
  251. package/dist/view/ViewState.js +0 -109
  252. package/dist/view/ViewState.js.map +0 -1
  253. package/dist/view/index.d.ts +0 -7
  254. package/dist/view/index.d.ts.map +0 -1
  255. package/dist/view/index.js +0 -4
  256. package/dist/view/index.js.map +0 -1
  257. package/dist/worker/types.d.ts +0 -81
  258. package/dist/worker/types.d.ts.map +0 -1
  259. package/dist/worker/types.js +0 -6
  260. package/dist/worker/types.js.map +0 -1
  261. package/dist/worker.d.ts +0 -2
  262. package/dist/worker.d.ts.map +0 -1
  263. package/dist/worker.js +0 -205
  264. package/dist/worker.js.map +0 -1
@@ -1,51 +0,0 @@
1
- /**
2
- * SVG icons used by the document viewer.
3
- * All icons use currentColor for fill/stroke to inherit text color.
4
- */
5
- export const ICONS = {
6
- // Navigation
7
- menu: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg>`,
8
- chevronLeft: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/></svg>`,
9
- chevronRight: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>`,
10
- chevronDown: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"/></svg>`,
11
- // Fullscreen
12
- fullscreen: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>`,
13
- fullscreenExit: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/></svg>`,
14
- // Zoom
15
- zoomIn: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>`,
16
- zoomOut: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M19 13H5v-2h14v2z"/></svg>`,
17
- // Settings
18
- settings: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/></svg>`,
19
- // Display mode icons
20
- displaySingle: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="5" y="4" width="14" height="16" rx="1"/></svg>`,
21
- displayScroll: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 2 L5 11 L19 11 L19 2"/><path d="M5 24 L5 15 L19 15 L19 24"/></svg>`,
22
- // Layout mode icons
23
- layout1up: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="6" y="3" width="12" height="18" rx="1"/></svg>`,
24
- layout2up: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="4" width="8" height="16" rx="1"/><rect x="14" y="4" width="8" height="16" rx="1"/></svg>`,
25
- layout2upCover: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="4" width="8" height="16" rx="1" stroke-dasharray="3 2"/><rect x="14" y="4" width="8" height="16" rx="1"/></svg>`,
26
- layoutGrid: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg>`,
27
- // Rotation icons (page with corner fold indicating orientation)
28
- rotate0: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 4 L14 4 L18 8 L18 20 L6 20 Z"/><path d="M14 4 L14 8 L18 8"/></svg>`,
29
- rotate90: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 18 L20 10 L16 6 L4 6 L4 18 Z"/><path d="M20 10 L16 10 L16 6"/></svg>`,
30
- rotate180: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 20 L10 20 L6 16 L6 4 L18 4 Z"/><path d="M10 20 L10 16 L6 16"/></svg>`,
31
- rotate270: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 6 L4 14 L8 18 L20 18 L20 6 Z"/><path d="M4 14 L8 14 L8 18"/></svg>`,
32
- // Panel tab icons
33
- thumbnails: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="8" rx="1"/><rect x="14" y="3" width="7" height="8" rx="1"/><rect x="3" y="13" width="7" height="8" rx="1"/><rect x="14" y="13" width="7" height="8" rx="1"/></svg>`,
34
- outline: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16-12v2h2V5h-2zm0 6h2v-2h-2v2zm0 6h2v-2h-2v2z"/></svg>`,
35
- bookmark: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z"/></svg>`,
36
- attachment: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5a2.5 2.5 0 0 1 5 0v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5a2.5 2.5 0 0 0 5 0V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z"/></svg>`,
37
- comments: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M21 6h-2V3a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2v3a1 1 0 0 0 1 1h13l4 3v-17zM7 14H4V4h12v10H7z"/></svg>`,
38
- annotations: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a.996.996 0 0 0 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></svg>`,
39
- search: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>`,
40
- properties: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>`,
41
- rightPanel: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14h-6V6h6v12z"/></svg>`,
42
- // Tool icons
43
- toolSelect: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M7 2l12 11.2-5.8.5 3.3 7.3-2.2 1-3.2-7.4L7 18.5V2z"/></svg>`,
44
- toolHand: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 11V6a2 2 0 0 0-2-2 2 2 0 0 0-2 2v0"/><path d="M14 10V4a2 2 0 0 0-2-2 2 2 0 0 0-2 2v2"/><path d="M10 10.5V6a2 2 0 0 0-2-2 2 2 0 0 0-2 2v8"/><path d="M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"/></svg>`,
45
- // Seamless mode icons (4-page intersection: L-corners pointing to center vs cross)
46
- seamlessOff: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M10 2v8H2M14 2v8h8M10 22v-8H2M14 22v-8h8"/></svg>`,
47
- seamlessOn: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M2 12h20"/></svg>`,
48
- // Sticky note icon for text annotations
49
- stickyNote: `<svg viewBox="0 0 24 24" fill="currentColor"><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H15l6-6V5c0-1.11-.9-2-2-2zm-7 8H7V9h5v2zm5-4H7V5h10v2zm-1 10v-4.5c0-.28.22-.5.5-.5H21l-5 5z"/></svg>`,
50
- };
51
- //# sourceMappingURL=icons.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/icons/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,aAAa;IACb,IAAI,EAAE,8GAA8G;IACpH,WAAW,EAAE,8GAA8G;IAC3H,YAAY,EAAE,+GAA+G;IAC7H,WAAW,EAAE,wHAAwH;IAErI,aAAa;IACb,UAAU,EAAE,+IAA+I;IAC3J,cAAc,EAAE,8IAA8I;IAE9J,OAAO;IACP,MAAM,EAAE,oGAAoG;IAC5G,OAAO,EAAE,kFAAkF;IAE3F,WAAW;IACX,QAAQ,EAAE,8vBAA8vB;IAExwB,qBAAqB;IACrB,aAAa,EAAE,qIAAqI;IACpJ,aAAa,EAAE,4JAA4J;IAE3K,oBAAoB;IACpB,SAAS,EAAE,qIAAqI;IAChJ,SAAS,EAAE,qLAAqL;IAChM,cAAc,EAAE,4MAA4M;IAC5N,UAAU,EAAE,oRAAoR;IAEhS,gEAAgE;IAChE,OAAO,EAAE,4JAA4J;IACrK,QAAQ,EAAE,+JAA+J;IACzK,SAAS,EAAE,+JAA+J;IAC1K,SAAS,EAAE,4JAA4J;IAEvK,kBAAkB;IAClB,UAAU,EAAE,oRAAoR;IAChS,OAAO,EAAE,2JAA2J;IACpK,QAAQ,EAAE,qHAAqH;IAC/H,UAAU,EAAE,+QAA+Q;IAC3R,QAAQ,EAAE,0KAA0K;IACpL,WAAW,EAAE,kNAAkN;IAC/N,MAAM,EAAE,2QAA2Q;IACnR,UAAU,EAAE,iKAAiK;IAC7K,UAAU,EAAE,6JAA6J;IAEzK,aAAa;IACb,UAAU,EAAE,mHAAmH;IAC/H,QAAQ,EAAE,wYAAwY;IAElZ,mFAAmF;IACnF,WAAW,EAAE,wIAAwI;IACrJ,UAAU,EAAE,gHAAgH;IAE5H,wCAAwC;IACxC,UAAU,EAAE,oNAAoN;CAC1N,CAAC"}
@@ -1,3 +0,0 @@
1
- export { ICONS } from './icons';
2
- export type { IconName } from './icons';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC"}
@@ -1,2 +0,0 @@
1
- export { ICONS } from './icons';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -1,87 +0,0 @@
1
- import type { ViewerState } from '../core/ViewerState';
2
- import type { LayoutState } from './LayoutState';
3
- import type { AnnotationLayer } from '../ui/annotation';
4
- /**
5
- * Dependencies required by BandManager.
6
- */
7
- export interface BandManagerDeps {
8
- state: ViewerState;
9
- layoutState: LayoutState;
10
- bandContainer: HTMLDivElement;
11
- content: HTMLDivElement;
12
- topSpacer: HTMLDivElement;
13
- bottomSpacer: HTMLDivElement;
14
- annotationLayer: AnnotationLayer;
15
- getEffectivePadding: () => number;
16
- getEffectiveTotalHeight: () => number;
17
- getCurrentBandIndex: () => number;
18
- }
19
- /**
20
- * Callbacks for page-related operations during band updates.
21
- */
22
- export interface BandPageCallbacks {
23
- ensurePageView: (pageIndex: number) => HTMLElement;
24
- preparePageRender: (pageIndex: number, width: number, height: number, token: number) => void;
25
- getDisplaySize: (pageIndex: number) => {
26
- width: number;
27
- height: number;
28
- };
29
- cleanupInactivePages: (activePages: Set<number>) => void;
30
- }
31
- /**
32
- * Manages band virtualization and DOM rendering.
33
- *
34
- * Bands are horizontal rows of pages that are rendered into the viewport.
35
- * This class handles:
36
- * - Creating and updating band DOM elements
37
- * - Managing band positioning with pixel-snapping to avoid gaps
38
- * - Coordinating with page rendering through callbacks
39
- */
40
- export declare class BandManager {
41
- private deps;
42
- private callbacks;
43
- private bandElements;
44
- private isApplyingLayout;
45
- constructor(deps: BandManagerDeps, callbacks: BandPageCallbacks);
46
- /**
47
- * Check if layout is currently being applied.
48
- */
49
- isApplying(): boolean;
50
- /**
51
- * Get the band elements map (for external management if needed).
52
- */
53
- getBandElements(): Map<number, HTMLDivElement>;
54
- /**
55
- * Clear all band elements.
56
- */
57
- clearBandElements(): void;
58
- /**
59
- * Snap a value to device pixel boundaries to eliminate sub-pixel rendering gaps.
60
- */
61
- private snapToPixel;
62
- /**
63
- * Get the snapped top position for a band by accumulating snapped heights.
64
- * This ensures no gaps between adjacent bands regardless of zoom level.
65
- */
66
- getSnappedBandTop(bandIndex: number): number;
67
- /**
68
- * Apply layout to the DOM for the given window of bands.
69
- */
70
- applyLayoutToDom(window: {
71
- start: number;
72
- end: number;
73
- }, token: number): void;
74
- /**
75
- * Create a new band element.
76
- */
77
- private createBandElement;
78
- /**
79
- * Update a band element with current slot content.
80
- */
81
- private updateBandElement;
82
- /**
83
- * Clear the display - reset all band-related DOM elements.
84
- */
85
- clearDisplay(): void;
86
- }
87
- //# sourceMappingURL=BandManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BandManager.d.ts","sourceRoot":"","sources":["../../src/layout/BandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,cAAc,CAAC;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,cAAc,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAClC,uBAAuB,EAAE,MAAM,MAAM,CAAC;IACtC,mBAAmB,EAAE,MAAM,MAAM,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,CAAC;IACnD,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7F,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,oBAAoB,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CAC5D;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,gBAAgB,CAAS;gBAErB,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,iBAAiB;IAK/D;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAI9C;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAW5C;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgE7E;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2DzB;;OAEG;IACH,YAAY,IAAI,IAAI;CAUvB"}
@@ -1,185 +0,0 @@
1
- import { PAGE_GAP_SIZE } from '../core/types';
2
- /**
3
- * Manages band virtualization and DOM rendering.
4
- *
5
- * Bands are horizontal rows of pages that are rendered into the viewport.
6
- * This class handles:
7
- * - Creating and updating band DOM elements
8
- * - Managing band positioning with pixel-snapping to avoid gaps
9
- * - Coordinating with page rendering through callbacks
10
- */
11
- export class BandManager {
12
- deps;
13
- callbacks;
14
- bandElements = new Map();
15
- isApplyingLayout = false;
16
- constructor(deps, callbacks) {
17
- this.deps = deps;
18
- this.callbacks = callbacks;
19
- }
20
- /**
21
- * Check if layout is currently being applied.
22
- */
23
- isApplying() {
24
- return this.isApplyingLayout;
25
- }
26
- /**
27
- * Get the band elements map (for external management if needed).
28
- */
29
- getBandElements() {
30
- return this.bandElements;
31
- }
32
- /**
33
- * Clear all band elements.
34
- */
35
- clearBandElements() {
36
- this.bandElements.clear();
37
- }
38
- /**
39
- * Snap a value to device pixel boundaries to eliminate sub-pixel rendering gaps.
40
- */
41
- snapToPixel(value) {
42
- const dpr = globalThis.devicePixelRatio || 1;
43
- return Math.round(value * dpr) / dpr;
44
- }
45
- /**
46
- * Get the snapped top position for a band by accumulating snapped heights.
47
- * This ensures no gaps between adjacent bands regardless of zoom level.
48
- */
49
- getSnappedBandTop(bandIndex) {
50
- const { state, layoutState } = this.deps;
51
- const gap = this.snapToPixel(state.get('seamless') ? 0 : PAGE_GAP_SIZE * state.get('zoom'));
52
- let top = 0;
53
- for (let i = 0; i < bandIndex; i++) {
54
- const band = layoutState.getBand(i);
55
- if (band)
56
- top += this.snapToPixel(band.height) + gap;
57
- }
58
- return top;
59
- }
60
- /**
61
- * Apply layout to the DOM for the given window of bands.
62
- */
63
- applyLayoutToDom(window, token) {
64
- const { state, layoutState, bandContainer, content, topSpacer, bottomSpacer, annotationLayer } = this.deps;
65
- const bandCount = layoutState.getBandCount();
66
- if (bandCount === 0)
67
- return;
68
- this.isApplyingLayout = true;
69
- const gapSize = state.get('seamless') ? 0 : PAGE_GAP_SIZE * state.get('zoom');
70
- const snappedGap = this.snapToPixel(gapSize);
71
- const currentBandIndex = this.deps.getCurrentBandIndex();
72
- const displayMode = state.get('displayMode');
73
- const activeWindow = displayMode === 'single'
74
- ? { start: currentBandIndex, end: currentBandIndex }
75
- : window;
76
- let totalHeight = layoutState.getTotalHeight();
77
- let totalWidth = layoutState.getTotalWidth();
78
- if (displayMode === 'single') {
79
- const band = layoutState.getBand(currentBandIndex);
80
- if (band) {
81
- totalHeight = band.height;
82
- totalWidth = band.width;
83
- }
84
- }
85
- else {
86
- totalHeight = this.deps.getEffectiveTotalHeight();
87
- }
88
- const effectivePadding = this.deps.getEffectivePadding();
89
- content.style.width = `${Math.max(0, totalWidth) + effectivePadding * 2}px`;
90
- content.style.height = `${Math.max(0, totalHeight) + effectivePadding * 2}px`;
91
- content.style.padding = `${effectivePadding}px`;
92
- topSpacer.style.height = '0px';
93
- bottomSpacer.style.height = '0px';
94
- bandContainer.style.height = `${Math.max(0, totalHeight)}px`;
95
- const fragment = document.createDocumentFragment();
96
- const activePages = new Set();
97
- // Compute band positions from accumulated snapped heights to eliminate sub-pixel gaps
98
- let bandTop = this.getSnappedBandTop(activeWindow.start);
99
- for (let i = activeWindow.start; i <= activeWindow.end; i++) {
100
- const band = layoutState.getBand(i);
101
- if (!band)
102
- continue;
103
- for (const slot of band.slots) {
104
- activePages.add(slot.pageIndex);
105
- }
106
- const bandEl = this.bandElements.get(i) ?? this.createBandElement(i);
107
- bandEl.style.top = displayMode === 'scroll' ? `${bandTop}px` : '0px';
108
- this.updateBandElement(bandEl, band, gapSize, token);
109
- fragment.appendChild(bandEl);
110
- bandTop += this.snapToPixel(band.height) + snappedGap;
111
- }
112
- bandContainer.replaceChildren(fragment);
113
- this.callbacks.cleanupInactivePages(activePages);
114
- this.isApplyingLayout = false;
115
- }
116
- /**
117
- * Create a new band element.
118
- */
119
- createBandElement(bandIndex) {
120
- const bandEl = document.createElement('div');
121
- bandEl.className = 'udoc-band';
122
- bandEl.dataset.bandIndex = String(bandIndex);
123
- const inner = document.createElement('div');
124
- inner.className = 'udoc-band-inner';
125
- bandEl.appendChild(inner);
126
- this.bandElements.set(bandIndex, bandEl);
127
- return bandEl;
128
- }
129
- /**
130
- * Update a band element with current slot content.
131
- */
132
- updateBandElement(bandEl, band, gapSize, token) {
133
- const inner = bandEl.firstElementChild;
134
- if (!inner)
135
- return;
136
- const { state, annotationLayer } = this.deps;
137
- const snappedHeight = this.snapToPixel(band.height);
138
- const snappedWidth = this.snapToPixel(band.width);
139
- const snappedGap = this.snapToPixel(gapSize);
140
- bandEl.style.height = `${snappedHeight}px`;
141
- inner.style.width = `${snappedWidth}px`;
142
- inner.style.height = `${snappedHeight}px`;
143
- inner.style.gridTemplateColumns = band.colWidths.map((w) => `${this.snapToPixel(w)}px`).join(' ');
144
- inner.style.gridTemplateRows = band.rowHeights.map((h) => `${this.snapToPixel(h)}px`).join(' ');
145
- inner.style.columnGap = `${snappedGap}px`;
146
- inner.style.rowGap = `${snappedGap}px`;
147
- // Update annotation layer zoom before rendering
148
- annotationLayer.setZoom(state.get('zoom'));
149
- const fragment = document.createDocumentFragment();
150
- for (const slot of band.slots) {
151
- const slotEl = document.createElement('div');
152
- slotEl.className = 'udoc-slot';
153
- slotEl.style.gridColumn = String(slot.col + 1);
154
- slotEl.style.gridRow = String(slot.row + 1);
155
- // Create a wrapper to hold both the page and annotation overlay
156
- const wrapper = document.createElement('div');
157
- wrapper.className = 'udoc-page-wrapper';
158
- wrapper.style.position = 'relative';
159
- wrapper.dataset.pageIndex = String(slot.pageIndex);
160
- const viewElement = this.callbacks.ensurePageView(slot.pageIndex);
161
- wrapper.appendChild(viewElement);
162
- // Render annotations into the wrapper
163
- annotationLayer.renderPageAnnotations(wrapper, slot.pageIndex);
164
- slotEl.appendChild(wrapper);
165
- fragment.appendChild(slotEl);
166
- const displaySize = this.callbacks.getDisplaySize(slot.pageIndex);
167
- this.callbacks.preparePageRender(slot.pageIndex, displaySize.width || slot.width, displaySize.height || slot.height, token);
168
- }
169
- inner.replaceChildren(fragment);
170
- }
171
- /**
172
- * Clear the display - reset all band-related DOM elements.
173
- */
174
- clearDisplay() {
175
- const { bandContainer, topSpacer, bottomSpacer, content } = this.deps;
176
- this.bandElements.clear();
177
- bandContainer.replaceChildren();
178
- topSpacer.style.height = '0px';
179
- bottomSpacer.style.height = '0px';
180
- bandContainer.style.height = '';
181
- content.style.width = '';
182
- content.style.height = '';
183
- }
184
- }
185
- //# sourceMappingURL=BandManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BandManager.js","sourceRoot":"","sources":["../../src/layout/BandManager.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- export type LayoutMode = 'single' | 'double' | 'double-cover' | 'grid';
2
- export type Rotation = 0 | 90 | 180 | 270;
3
- export type PageLayout = 'default' | 'odd-pages-right' | 'odd-pages-left';
4
- export interface GridOptions {
5
- columns: number;
6
- rows: number;
7
- }
8
- /**
9
- * Default gap size between pages when not in seamless mode.
10
- */
11
- export declare const PAGE_GAP_SIZE = 16;
12
- export interface PageSize {
13
- width: number;
14
- height: number;
15
- }
16
- export interface SlotLayout {
17
- pageIndex: number;
18
- row: number;
19
- col: number;
20
- baseWidth: number;
21
- baseHeight: number;
22
- baseX: number;
23
- baseY: number;
24
- }
25
- export interface BandLayout {
26
- index: number;
27
- slots: SlotLayout[];
28
- columns: number;
29
- rows: number;
30
- colWidths: number[];
31
- rowHeights: number[];
32
- baseWidth: number;
33
- baseHeight: number;
34
- }
35
- export interface LayoutResult {
36
- bands: BandLayout[];
37
- pageToBand: number[];
38
- }
39
- export declare class LayoutCalculator {
40
- static computeLayout(pageSizes: PageSize[], layoutMode: LayoutMode, rotation: Rotation, seamless: boolean, grid?: GridOptions, pageLayout?: PageLayout): LayoutResult;
41
- }
42
- //# sourceMappingURL=LayoutCalculator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayoutCalculator.d.ts","sourceRoot":"","sources":["../../src/layout/LayoutCalculator.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,MAAM,CAAC;AACvE,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AAC1C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAE1E,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AA4BD,qBAAa,gBAAgB;IACzB,MAAM,CAAC,aAAa,CAChB,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,OAAO,EACjB,IAAI,GAAE,WAA0B,EAChC,UAAU,GAAE,UAAsB,GACnC,YAAY;CAqNlB"}
@@ -1,180 +0,0 @@
1
- /**
2
- * Default gap size between pages when not in seamless mode.
3
- */
4
- export const PAGE_GAP_SIZE = 16;
5
- const DEFAULT_GRID = { columns: 1, rows: 1 };
6
- function rotateSize(size, rotation) {
7
- if (rotation === 90 || rotation === 270) {
8
- return { width: size.height, height: size.width };
9
- }
10
- return size;
11
- }
12
- function clampGrid(value) {
13
- return Number.isFinite(value) && value > 0 ? Math.floor(value) : 1;
14
- }
15
- export class LayoutCalculator {
16
- static computeLayout(pageSizes, layoutMode, rotation, seamless, grid = DEFAULT_GRID, pageLayout = 'default') {
17
- const rotatedSizes = pageSizes.map((size) => rotateSize(size, rotation));
18
- const bands = [];
19
- const pageToBand = new Array(pageSizes.length).fill(-1);
20
- const gapSize = seamless ? 0 : PAGE_GAP_SIZE;
21
- const buildBand = (bandIndex, slots, rows, columns, options = {}) => {
22
- const colWidths = new Array(columns).fill(0);
23
- const rowHeights = new Array(rows).fill(0);
24
- for (const slot of slots) {
25
- colWidths[slot.col] = Math.max(colWidths[slot.col], slot.width);
26
- rowHeights[slot.row] = Math.max(rowHeights[slot.row], slot.height);
27
- pageToBand[slot.pageIndex] = bandIndex;
28
- }
29
- // For single-page bands in double-cover mode, make both columns symmetric
30
- if (options.coverRight && columns === 2) {
31
- if (colWidths[0] === 0 && colWidths[1] > 0) {
32
- // Cover page on right: fill left column
33
- colWidths[0] = colWidths[1];
34
- }
35
- else if (colWidths[1] === 0 && colWidths[0] > 0) {
36
- // Last page on left: fill right column
37
- colWidths[1] = colWidths[0];
38
- }
39
- }
40
- if (options.normalizeEmptyGrid) {
41
- const maxCol = Math.max(...colWidths);
42
- const maxRow = Math.max(...rowHeights);
43
- for (let i = 0; i < colWidths.length; i++) {
44
- if (colWidths[i] === 0) {
45
- colWidths[i] = maxCol;
46
- }
47
- }
48
- for (let i = 0; i < rowHeights.length; i++) {
49
- if (rowHeights[i] === 0) {
50
- rowHeights[i] = maxRow;
51
- }
52
- }
53
- }
54
- const colOffsets = [];
55
- const rowOffsets = [];
56
- let x = 0;
57
- for (let col = 0; col < columns; col++) {
58
- colOffsets[col] = x;
59
- x += colWidths[col] + (col < columns - 1 ? gapSize : 0);
60
- }
61
- let y = 0;
62
- for (let row = 0; row < rows; row++) {
63
- rowOffsets[row] = y;
64
- y += rowHeights[row] + (row < rows - 1 ? gapSize : 0);
65
- }
66
- const bandSlots = slots.map((slot) => ({
67
- pageIndex: slot.pageIndex,
68
- row: slot.row,
69
- col: slot.col,
70
- baseWidth: slot.width,
71
- baseHeight: slot.height,
72
- baseX: colOffsets[slot.col],
73
- baseY: rowOffsets[slot.row],
74
- }));
75
- const baseWidth = colWidths.reduce((sum, width) => sum + width, 0)
76
- + Math.max(0, columns - 1) * gapSize;
77
- const baseHeight = rowHeights.reduce((sum, height) => sum + height, 0)
78
- + Math.max(0, rows - 1) * gapSize;
79
- bands.push({
80
- index: bandIndex,
81
- slots: bandSlots,
82
- columns,
83
- rows,
84
- colWidths,
85
- rowHeights,
86
- baseWidth,
87
- baseHeight,
88
- });
89
- };
90
- if (layoutMode === 'single') {
91
- for (let i = 0; i < rotatedSizes.length; i++) {
92
- const size = rotatedSizes[i];
93
- buildBand(bands.length, [{ pageIndex: i, row: 0, col: 0, width: size.width, height: size.height }], 1, 1);
94
- }
95
- return { bands, pageToBand };
96
- }
97
- if (layoutMode === 'double') {
98
- let i = 0;
99
- while (i < rotatedSizes.length) {
100
- const left = rotatedSizes[i];
101
- const isLastPageAlone = i + 1 >= rotatedSizes.length;
102
- if (isLastPageAlone) {
103
- // Last page alone: position on left (col 0) with symmetric columns
104
- buildBand(bands.length, [{ pageIndex: i, row: 0, col: 0, width: left.width, height: left.height }], 1, 2, { coverRight: true } // Fill empty right column for symmetry
105
- );
106
- }
107
- else {
108
- const right = rotatedSizes[i + 1];
109
- buildBand(bands.length, [
110
- { pageIndex: i, row: 0, col: 0, width: left.width, height: left.height },
111
- { pageIndex: i + 1, row: 0, col: 1, width: right.width, height: right.height },
112
- ], 1, 2);
113
- }
114
- i += 2;
115
- }
116
- return { bands, pageToBand };
117
- }
118
- if (layoutMode === 'double-cover') {
119
- // Determine cover position based on document's page layout preference
120
- // odd-pages-right (default): cover on right (col 1), spreads: 2|3, 4|5...
121
- // odd-pages-left: cover on left (col 0), spreads: 2|3, 4|5...
122
- const coverOnRight = pageLayout !== 'odd-pages-left';
123
- const coverCol = coverOnRight ? 1 : 0;
124
- if (rotatedSizes.length > 0) {
125
- const cover = rotatedSizes[0];
126
- buildBand(bands.length, [{ pageIndex: 0, row: 0, col: coverCol, width: cover.width, height: cover.height }], 1, 2, { coverRight: coverOnRight });
127
- }
128
- let i = 1;
129
- while (i < rotatedSizes.length) {
130
- const isLastPageAlone = i + 1 >= rotatedSizes.length;
131
- if (isLastPageAlone) {
132
- // Last page alone: position opposite to cover for symmetry
133
- // coverOnRight: last page on left (col 0)
134
- // coverOnLeft: last page on right (col 1)
135
- const lastCol = coverOnRight ? 0 : 1;
136
- const last = rotatedSizes[i];
137
- buildBand(bands.length, [{ pageIndex: i, row: 0, col: lastCol, width: last.width, height: last.height }], 1, 2, { coverRight: true } // Always fill the empty column for symmetry
138
- );
139
- }
140
- else {
141
- // Normal spread: left page in col 0, right page in col 1
142
- const left = rotatedSizes[i];
143
- const right = rotatedSizes[i + 1];
144
- buildBand(bands.length, [
145
- { pageIndex: i, row: 0, col: 0, width: left.width, height: left.height },
146
- { pageIndex: i + 1, row: 0, col: 1, width: right.width, height: right.height },
147
- ], 1, 2);
148
- }
149
- i += 2;
150
- }
151
- return { bands, pageToBand };
152
- }
153
- const columns = clampGrid(grid.columns);
154
- const rows = clampGrid(grid.rows);
155
- const slotsPerBand = columns * rows;
156
- let index = 0;
157
- while (index < rotatedSizes.length) {
158
- const slots = [];
159
- for (let offset = 0; offset < slotsPerBand; offset++) {
160
- const pageIndex = index + offset;
161
- if (pageIndex >= rotatedSizes.length)
162
- break;
163
- const size = rotatedSizes[pageIndex];
164
- const row = Math.floor(offset / columns);
165
- const col = offset % columns;
166
- slots.push({
167
- pageIndex,
168
- row,
169
- col,
170
- width: size.width,
171
- height: size.height,
172
- });
173
- }
174
- buildBand(bands.length, slots, rows, columns, { normalizeEmptyGrid: true });
175
- index += slotsPerBand;
176
- }
177
- return { bands, pageToBand };
178
- }
179
- }
180
- //# sourceMappingURL=LayoutCalculator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LayoutCalculator.js","sourceRoot":"","sources":["../../src/layout/LayoutCalculator.ts"],"names":[],"mappings":"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"}