@docmentis/udoc-viewer 0.1.0 → 0.1.1

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 (263) hide show
  1. package/dist/wasm/udoc_bg.wasm +0 -0
  2. package/dist/worker/WorkerClient.js +1 -1
  3. package/package.json +11 -3
  4. package/dist/WorkerClient.d.ts +0 -36
  5. package/dist/WorkerClient.d.ts.map +0 -1
  6. package/dist/WorkerClient.js +0 -121
  7. package/dist/WorkerClient.js.map +0 -1
  8. package/dist/annotation/AnnotationLayer.d.ts +0 -166
  9. package/dist/annotation/AnnotationLayer.d.ts.map +0 -1
  10. package/dist/annotation/AnnotationLayer.js +0 -1090
  11. package/dist/annotation/AnnotationLayer.js.map +0 -1
  12. package/dist/annotation/index.d.ts +0 -6
  13. package/dist/annotation/index.d.ts.map +0 -1
  14. package/dist/annotation/index.js +0 -6
  15. package/dist/annotation/index.js.map +0 -1
  16. package/dist/components/FloatingBar.d.ts +0 -102
  17. package/dist/components/FloatingBar.d.ts.map +0 -1
  18. package/dist/components/FloatingBar.js +0 -513
  19. package/dist/components/FloatingBar.js.map +0 -1
  20. package/dist/components/Header.d.ts +0 -46
  21. package/dist/components/Header.d.ts.map +0 -1
  22. package/dist/components/Header.js +0 -93
  23. package/dist/components/Header.js.map +0 -1
  24. package/dist/components/index.d.ts +0 -6
  25. package/dist/components/index.d.ts.map +0 -1
  26. package/dist/components/index.js +0 -4
  27. package/dist/components/index.js.map +0 -1
  28. package/dist/components/panels/CommentsPanel.d.ts +0 -33
  29. package/dist/components/panels/CommentsPanel.d.ts.map +0 -1
  30. package/dist/components/panels/CommentsPanel.js +0 -176
  31. package/dist/components/panels/CommentsPanel.js.map +0 -1
  32. package/dist/components/panels/OutlinePanel.d.ts +0 -30
  33. package/dist/components/panels/OutlinePanel.d.ts.map +0 -1
  34. package/dist/components/panels/OutlinePanel.js +0 -144
  35. package/dist/components/panels/OutlinePanel.js.map +0 -1
  36. package/dist/components/panels/ThumbnailsPanel.d.ts +0 -51
  37. package/dist/components/panels/ThumbnailsPanel.d.ts.map +0 -1
  38. package/dist/components/panels/ThumbnailsPanel.js +0 -160
  39. package/dist/components/panels/ThumbnailsPanel.js.map +0 -1
  40. package/dist/components/panels/index.d.ts +0 -7
  41. package/dist/components/panels/index.d.ts.map +0 -1
  42. package/dist/components/panels/index.js +0 -4
  43. package/dist/components/panels/index.js.map +0 -1
  44. package/dist/constants.d.ts +0 -25
  45. package/dist/constants.d.ts.map +0 -1
  46. package/dist/constants.js +0 -46
  47. package/dist/constants.js.map +0 -1
  48. package/dist/core/NavigationController.d.ts +0 -54
  49. package/dist/core/NavigationController.d.ts.map +0 -1
  50. package/dist/core/NavigationController.js +0 -145
  51. package/dist/core/NavigationController.js.map +0 -1
  52. package/dist/core/PerfTimer.d.ts +0 -12
  53. package/dist/core/PerfTimer.d.ts.map +0 -1
  54. package/dist/core/PerfTimer.js +0 -32
  55. package/dist/core/PerfTimer.js.map +0 -1
  56. package/dist/core/ViewerState.d.ts +0 -108
  57. package/dist/core/ViewerState.d.ts.map +0 -1
  58. package/dist/core/ViewerState.js +0 -179
  59. package/dist/core/ViewerState.js.map +0 -1
  60. package/dist/core/constants.d.ts +0 -24
  61. package/dist/core/constants.d.ts.map +0 -1
  62. package/dist/core/constants.js +0 -42
  63. package/dist/core/constants.js.map +0 -1
  64. package/dist/core/index.d.ts +0 -8
  65. package/dist/core/index.d.ts.map +0 -1
  66. package/dist/core/index.js +0 -11
  67. package/dist/core/index.js.map +0 -1
  68. package/dist/core/types.d.ts +0 -573
  69. package/dist/core/types.d.ts.map +0 -1
  70. package/dist/core/types.js +0 -5
  71. package/dist/core/types.js.map +0 -1
  72. package/dist/icons/icons.d.ts +0 -41
  73. package/dist/icons/icons.d.ts.map +0 -1
  74. package/dist/icons/icons.js +0 -51
  75. package/dist/icons/icons.js.map +0 -1
  76. package/dist/icons/index.d.ts +0 -3
  77. package/dist/icons/index.d.ts.map +0 -1
  78. package/dist/icons/index.js +0 -2
  79. package/dist/icons/index.js.map +0 -1
  80. package/dist/layout/BandManager.d.ts +0 -87
  81. package/dist/layout/BandManager.d.ts.map +0 -1
  82. package/dist/layout/BandManager.js +0 -185
  83. package/dist/layout/BandManager.js.map +0 -1
  84. package/dist/layout/LayoutCalculator.d.ts +0 -42
  85. package/dist/layout/LayoutCalculator.d.ts.map +0 -1
  86. package/dist/layout/LayoutCalculator.js +0 -180
  87. package/dist/layout/LayoutCalculator.js.map +0 -1
  88. package/dist/layout/LayoutState.d.ts +0 -46
  89. package/dist/layout/LayoutState.d.ts.map +0 -1
  90. package/dist/layout/LayoutState.js +0 -109
  91. package/dist/layout/LayoutState.js.map +0 -1
  92. package/dist/layout/TransitionCoordinator.d.ts +0 -11
  93. package/dist/layout/TransitionCoordinator.d.ts.map +0 -1
  94. package/dist/layout/TransitionCoordinator.js +0 -22
  95. package/dist/layout/TransitionCoordinator.js.map +0 -1
  96. package/dist/layout/index.d.ts +0 -7
  97. package/dist/layout/index.d.ts.map +0 -1
  98. package/dist/layout/index.js +0 -4
  99. package/dist/layout/index.js.map +0 -1
  100. package/dist/rendering/BandManager.d.ts +0 -87
  101. package/dist/rendering/BandManager.d.ts.map +0 -1
  102. package/dist/rendering/BandManager.js +0 -185
  103. package/dist/rendering/BandManager.js.map +0 -1
  104. package/dist/rendering/PageCache.d.ts +0 -75
  105. package/dist/rendering/PageCache.d.ts.map +0 -1
  106. package/dist/rendering/PageCache.js +0 -122
  107. package/dist/rendering/PageCache.js.map +0 -1
  108. package/dist/rendering/RenderQueue.d.ts +0 -75
  109. package/dist/rendering/RenderQueue.d.ts.map +0 -1
  110. package/dist/rendering/RenderQueue.js +0 -105
  111. package/dist/rendering/RenderQueue.js.map +0 -1
  112. package/dist/rendering/ThumbnailQueue.d.ts +0 -57
  113. package/dist/rendering/ThumbnailQueue.d.ts.map +0 -1
  114. package/dist/rendering/ThumbnailQueue.js +0 -85
  115. package/dist/rendering/ThumbnailQueue.js.map +0 -1
  116. package/dist/rendering/index.d.ts +0 -13
  117. package/dist/rendering/index.d.ts.map +0 -1
  118. package/dist/rendering/index.js +0 -10
  119. package/dist/rendering/index.js.map +0 -1
  120. package/dist/rendering/types.d.ts +0 -72
  121. package/dist/rendering/types.d.ts.map +0 -1
  122. package/dist/rendering/types.js +0 -5
  123. package/dist/rendering/types.js.map +0 -1
  124. package/dist/styles/index.d.ts +0 -6
  125. package/dist/styles/index.d.ts.map +0 -1
  126. package/dist/styles/index.js +0 -1221
  127. package/dist/styles/index.js.map +0 -1
  128. package/dist/types.d.ts +0 -6
  129. package/dist/types.d.ts.map +0 -1
  130. package/dist/types.js +0 -6
  131. package/dist/types.js.map +0 -1
  132. package/dist/ui/Component.d.ts +0 -127
  133. package/dist/ui/Component.d.ts.map +0 -1
  134. package/dist/ui/Component.js +0 -201
  135. package/dist/ui/Component.js.map +0 -1
  136. package/dist/ui/annotation/AnnotationLayer.d.ts +0 -90
  137. package/dist/ui/annotation/AnnotationLayer.d.ts.map +0 -1
  138. package/dist/ui/annotation/AnnotationLayer.js +0 -322
  139. package/dist/ui/annotation/AnnotationLayer.js.map +0 -1
  140. package/dist/ui/annotation/LinkRenderer.d.ts +0 -32
  141. package/dist/ui/annotation/LinkRenderer.d.ts.map +0 -1
  142. package/dist/ui/annotation/LinkRenderer.js +0 -74
  143. package/dist/ui/annotation/LinkRenderer.js.map +0 -1
  144. package/dist/ui/annotation/MarkupRenderer.d.ts +0 -40
  145. package/dist/ui/annotation/MarkupRenderer.d.ts.map +0 -1
  146. package/dist/ui/annotation/MarkupRenderer.js +0 -154
  147. package/dist/ui/annotation/MarkupRenderer.js.map +0 -1
  148. package/dist/ui/annotation/ShapeRenderer.d.ts +0 -46
  149. package/dist/ui/annotation/ShapeRenderer.d.ts.map +0 -1
  150. package/dist/ui/annotation/ShapeRenderer.js +0 -376
  151. package/dist/ui/annotation/ShapeRenderer.js.map +0 -1
  152. package/dist/ui/annotation/TextRenderer.d.ts +0 -36
  153. package/dist/ui/annotation/TextRenderer.d.ts.map +0 -1
  154. package/dist/ui/annotation/TextRenderer.js +0 -199
  155. package/dist/ui/annotation/TextRenderer.js.map +0 -1
  156. package/dist/ui/annotation/index.d.ts +0 -17
  157. package/dist/ui/annotation/index.d.ts.map +0 -1
  158. package/dist/ui/annotation/index.js +0 -13
  159. package/dist/ui/annotation/index.js.map +0 -1
  160. package/dist/ui/annotation/utils.d.ts +0 -40
  161. package/dist/ui/annotation/utils.d.ts.map +0 -1
  162. package/dist/ui/annotation/utils.js +0 -62
  163. package/dist/ui/annotation/utils.js.map +0 -1
  164. package/dist/ui/components/CommentsContent.d.ts +0 -35
  165. package/dist/ui/components/CommentsContent.d.ts.map +0 -1
  166. package/dist/ui/components/CommentsContent.js +0 -203
  167. package/dist/ui/components/CommentsContent.js.map +0 -1
  168. package/dist/ui/components/FloatingBar.d.ts +0 -55
  169. package/dist/ui/components/FloatingBar.d.ts.map +0 -1
  170. package/dist/ui/components/FloatingBar.js +0 -585
  171. package/dist/ui/components/FloatingBar.js.map +0 -1
  172. package/dist/ui/components/Header.d.ts +0 -29
  173. package/dist/ui/components/Header.d.ts.map +0 -1
  174. package/dist/ui/components/Header.js +0 -127
  175. package/dist/ui/components/Header.js.map +0 -1
  176. package/dist/ui/components/LeftPanel.d.ts +0 -54
  177. package/dist/ui/components/LeftPanel.d.ts.map +0 -1
  178. package/dist/ui/components/LeftPanel.js +0 -202
  179. package/dist/ui/components/LeftPanel.js.map +0 -1
  180. package/dist/ui/components/OutlineContent.d.ts +0 -34
  181. package/dist/ui/components/OutlineContent.d.ts.map +0 -1
  182. package/dist/ui/components/OutlineContent.js +0 -147
  183. package/dist/ui/components/OutlineContent.js.map +0 -1
  184. package/dist/ui/components/RightPanel.d.ts +0 -52
  185. package/dist/ui/components/RightPanel.d.ts.map +0 -1
  186. package/dist/ui/components/RightPanel.js +0 -142
  187. package/dist/ui/components/RightPanel.js.map +0 -1
  188. package/dist/ui/components/Viewport.d.ts +0 -70
  189. package/dist/ui/components/Viewport.d.ts.map +0 -1
  190. package/dist/ui/components/Viewport.js +0 -173
  191. package/dist/ui/components/Viewport.js.map +0 -1
  192. package/dist/ui/components/index.d.ts +0 -11
  193. package/dist/ui/components/index.d.ts.map +0 -1
  194. package/dist/ui/components/index.js +0 -10
  195. package/dist/ui/components/index.js.map +0 -1
  196. package/dist/ui/icons/icons.d.ts +0 -43
  197. package/dist/ui/icons/icons.d.ts.map +0 -1
  198. package/dist/ui/icons/icons.js +0 -46
  199. package/dist/ui/icons/icons.js.map +0 -1
  200. package/dist/ui/icons/index.d.ts +0 -11
  201. package/dist/ui/icons/index.d.ts.map +0 -1
  202. package/dist/ui/icons/index.js +0 -18
  203. package/dist/ui/icons/index.js.map +0 -1
  204. package/dist/ui/index.d.ts +0 -7
  205. package/dist/ui/index.d.ts.map +0 -1
  206. package/dist/ui/index.js +0 -9
  207. package/dist/ui/index.js.map +0 -1
  208. package/dist/ui/styles/base.css.d.ts +0 -5
  209. package/dist/ui/styles/base.css.d.ts.map +0 -1
  210. package/dist/ui/styles/base.css.js +0 -49
  211. package/dist/ui/styles/base.css.js.map +0 -1
  212. package/dist/ui/styles/floating-bar.css.d.ts +0 -5
  213. package/dist/ui/styles/floating-bar.css.d.ts.map +0 -1
  214. package/dist/ui/styles/floating-bar.css.js +0 -417
  215. package/dist/ui/styles/floating-bar.css.js.map +0 -1
  216. package/dist/ui/styles/header.css.d.ts +0 -5
  217. package/dist/ui/styles/header.css.d.ts.map +0 -1
  218. package/dist/ui/styles/header.css.js +0 -49
  219. package/dist/ui/styles/header.css.js.map +0 -1
  220. package/dist/ui/styles/index.d.ts +0 -21
  221. package/dist/ui/styles/index.d.ts.map +0 -1
  222. package/dist/ui/styles/index.js +0 -48
  223. package/dist/ui/styles/index.js.map +0 -1
  224. package/dist/ui/styles/panels.css.d.ts +0 -5
  225. package/dist/ui/styles/panels.css.d.ts.map +0 -1
  226. package/dist/ui/styles/panels.css.js +0 -446
  227. package/dist/ui/styles/panels.css.js.map +0 -1
  228. package/dist/ui/styles/responsive.css.d.ts +0 -5
  229. package/dist/ui/styles/responsive.css.d.ts.map +0 -1
  230. package/dist/ui/styles/responsive.css.js +0 -201
  231. package/dist/ui/styles/responsive.css.js.map +0 -1
  232. package/dist/ui/styles/variables.css.d.ts +0 -6
  233. package/dist/ui/styles/variables.css.d.ts.map +0 -1
  234. package/dist/ui/styles/variables.css.js +0 -75
  235. package/dist/ui/styles/variables.css.js.map +0 -1
  236. package/dist/ui/styles/viewport.css.d.ts +0 -5
  237. package/dist/ui/styles/viewport.css.d.ts.map +0 -1
  238. package/dist/ui/styles/viewport.css.js +0 -87
  239. package/dist/ui/styles/viewport.css.js.map +0 -1
  240. package/dist/view/LayoutCalculator.d.ts +0 -42
  241. package/dist/view/LayoutCalculator.d.ts.map +0 -1
  242. package/dist/view/LayoutCalculator.js +0 -180
  243. package/dist/view/LayoutCalculator.js.map +0 -1
  244. package/dist/view/TransitionCoordinator.d.ts +0 -11
  245. package/dist/view/TransitionCoordinator.d.ts.map +0 -1
  246. package/dist/view/TransitionCoordinator.js +0 -22
  247. package/dist/view/TransitionCoordinator.js.map +0 -1
  248. package/dist/view/ViewState.d.ts +0 -46
  249. package/dist/view/ViewState.d.ts.map +0 -1
  250. package/dist/view/ViewState.js +0 -109
  251. package/dist/view/ViewState.js.map +0 -1
  252. package/dist/view/index.d.ts +0 -7
  253. package/dist/view/index.d.ts.map +0 -1
  254. package/dist/view/index.js +0 -4
  255. package/dist/view/index.js.map +0 -1
  256. package/dist/worker/types.d.ts +0 -81
  257. package/dist/worker/types.d.ts.map +0 -1
  258. package/dist/worker/types.js +0 -6
  259. package/dist/worker/types.js.map +0 -1
  260. package/dist/worker.d.ts +0 -2
  261. package/dist/worker.d.ts.map +0 -1
  262. package/dist/worker.js +0 -205
  263. 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":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA4B9C;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;IACZ,IAAI,CAAkB;IACtB,SAAS,CAAoB;IAC7B,YAAY,GAAgC,IAAI,GAAG,EAAE,CAAC;IACtD,gBAAgB,GAAG,KAAK,CAAC;IAEjC,YAAY,IAAqB,EAAE,SAA4B;QAC3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACN,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACb,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAa;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,SAAiB;QAC/B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI;gBAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACzD,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAsC,EAAE,KAAa;QAClE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAE3G,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC;QAC7C,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO;QAE5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAG,WAAW,KAAK,QAAQ;YACzC,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,EAAE;YACpD,CAAC,CAAC,MAAM,CAAC;QAEb,IAAI,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC;QAC/C,IAAI,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;QAE7C,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACnD,IAAI,IAAI,EAAE,CAAC;gBACP,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC1B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;YAC5B,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,gBAAgB,GAAG,CAAC,IAAI,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,gBAAgB,GAAG,CAAC,IAAI,CAAC;QAC9E,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,gBAAgB,IAAI,CAAC;QAChD,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAClC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC;QAE7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,sFAAsF;QACtF,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEzD,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YACrE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACrD,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;QAC1D,CAAC;QAED,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAiB;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,iBAAiB,CACrB,MAAsB,EACtB,IAAsB,EACtB,OAAe,EACf,KAAa;QAEb,MAAM,KAAK,GAAG,MAAM,CAAC,iBAA0C,CAAC;QAChE,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE7C,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,aAAa,IAAI,CAAC;QAC3C,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,YAAY,IAAI,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,aAAa,IAAI,CAAC;QAC1C,KAAK,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClG,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,UAAU,IAAI,CAAC;QAC1C,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC;QAEvC,gDAAgD;QAChD,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAE5C,gEAAgE;YAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YACpC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEnD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAEjC,sCAAsC;YACtC,eAAe,CAAC,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAE/D,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAC5B,IAAI,CAAC,SAAS,EACd,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAC/B,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EACjC,KAAK,CACR,CAAC;QACN,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,YAAY;QACR,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QACtE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,aAAa,CAAC,eAAe,EAAE,CAAC;QAChC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QAClC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IAC9B,CAAC;CACJ"}
@@ -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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"}