@docmentis/udoc-viewer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/README.md +180 -0
  2. package/dist/UDocClient.d.ts +197 -0
  3. package/dist/UDocClient.d.ts.map +1 -0
  4. package/dist/UDocClient.js +170 -0
  5. package/dist/UDocClient.js.map +1 -0
  6. package/dist/UDocViewer.d.ts +196 -0
  7. package/dist/UDocViewer.d.ts.map +1 -0
  8. package/dist/UDocViewer.js +427 -0
  9. package/dist/UDocViewer.js.map +1 -0
  10. package/dist/WorkerClient.d.ts +36 -0
  11. package/dist/WorkerClient.d.ts.map +1 -0
  12. package/dist/WorkerClient.js +121 -0
  13. package/dist/WorkerClient.js.map +1 -0
  14. package/dist/annotation/AnnotationLayer.d.ts +166 -0
  15. package/dist/annotation/AnnotationLayer.d.ts.map +1 -0
  16. package/dist/annotation/AnnotationLayer.js +1090 -0
  17. package/dist/annotation/AnnotationLayer.js.map +1 -0
  18. package/dist/annotation/index.d.ts +6 -0
  19. package/dist/annotation/index.d.ts.map +1 -0
  20. package/dist/annotation/index.js +6 -0
  21. package/dist/annotation/index.js.map +1 -0
  22. package/dist/components/FloatingBar.d.ts +102 -0
  23. package/dist/components/FloatingBar.d.ts.map +1 -0
  24. package/dist/components/FloatingBar.js +513 -0
  25. package/dist/components/FloatingBar.js.map +1 -0
  26. package/dist/components/Header.d.ts +46 -0
  27. package/dist/components/Header.d.ts.map +1 -0
  28. package/dist/components/Header.js +93 -0
  29. package/dist/components/Header.js.map +1 -0
  30. package/dist/components/index.d.ts +6 -0
  31. package/dist/components/index.d.ts.map +1 -0
  32. package/dist/components/index.js +4 -0
  33. package/dist/components/index.js.map +1 -0
  34. package/dist/components/panels/CommentsPanel.d.ts +33 -0
  35. package/dist/components/panels/CommentsPanel.d.ts.map +1 -0
  36. package/dist/components/panels/CommentsPanel.js +176 -0
  37. package/dist/components/panels/CommentsPanel.js.map +1 -0
  38. package/dist/components/panels/OutlinePanel.d.ts +30 -0
  39. package/dist/components/panels/OutlinePanel.d.ts.map +1 -0
  40. package/dist/components/panels/OutlinePanel.js +144 -0
  41. package/dist/components/panels/OutlinePanel.js.map +1 -0
  42. package/dist/components/panels/ThumbnailsPanel.d.ts +51 -0
  43. package/dist/components/panels/ThumbnailsPanel.d.ts.map +1 -0
  44. package/dist/components/panels/ThumbnailsPanel.js +160 -0
  45. package/dist/components/panels/ThumbnailsPanel.js.map +1 -0
  46. package/dist/components/panels/index.d.ts +7 -0
  47. package/dist/components/panels/index.d.ts.map +1 -0
  48. package/dist/components/panels/index.js +4 -0
  49. package/dist/components/panels/index.js.map +1 -0
  50. package/dist/constants.d.ts +25 -0
  51. package/dist/constants.d.ts.map +1 -0
  52. package/dist/constants.js +46 -0
  53. package/dist/constants.js.map +1 -0
  54. package/dist/core/NavigationController.d.ts +54 -0
  55. package/dist/core/NavigationController.d.ts.map +1 -0
  56. package/dist/core/NavigationController.js +145 -0
  57. package/dist/core/NavigationController.js.map +1 -0
  58. package/dist/core/PerfTimer.d.ts +12 -0
  59. package/dist/core/PerfTimer.d.ts.map +1 -0
  60. package/dist/core/PerfTimer.js +32 -0
  61. package/dist/core/PerfTimer.js.map +1 -0
  62. package/dist/core/ViewerState.d.ts +108 -0
  63. package/dist/core/ViewerState.d.ts.map +1 -0
  64. package/dist/core/ViewerState.js +179 -0
  65. package/dist/core/ViewerState.js.map +1 -0
  66. package/dist/core/constants.d.ts +24 -0
  67. package/dist/core/constants.d.ts.map +1 -0
  68. package/dist/core/constants.js +42 -0
  69. package/dist/core/constants.js.map +1 -0
  70. package/dist/core/index.d.ts +8 -0
  71. package/dist/core/index.d.ts.map +1 -0
  72. package/dist/core/index.js +11 -0
  73. package/dist/core/index.js.map +1 -0
  74. package/dist/core/types.d.ts +573 -0
  75. package/dist/core/types.d.ts.map +1 -0
  76. package/dist/core/types.js +5 -0
  77. package/dist/core/types.js.map +1 -0
  78. package/dist/icons/icons.d.ts +41 -0
  79. package/dist/icons/icons.d.ts.map +1 -0
  80. package/dist/icons/icons.js +51 -0
  81. package/dist/icons/icons.js.map +1 -0
  82. package/dist/icons/index.d.ts +3 -0
  83. package/dist/icons/index.d.ts.map +1 -0
  84. package/dist/icons/index.js +2 -0
  85. package/dist/icons/index.js.map +1 -0
  86. package/dist/index.d.ts +7 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +6 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/layout/BandManager.d.ts +87 -0
  91. package/dist/layout/BandManager.d.ts.map +1 -0
  92. package/dist/layout/BandManager.js +185 -0
  93. package/dist/layout/BandManager.js.map +1 -0
  94. package/dist/layout/LayoutCalculator.d.ts +42 -0
  95. package/dist/layout/LayoutCalculator.d.ts.map +1 -0
  96. package/dist/layout/LayoutCalculator.js +180 -0
  97. package/dist/layout/LayoutCalculator.js.map +1 -0
  98. package/dist/layout/LayoutState.d.ts +46 -0
  99. package/dist/layout/LayoutState.d.ts.map +1 -0
  100. package/dist/layout/LayoutState.js +109 -0
  101. package/dist/layout/LayoutState.js.map +1 -0
  102. package/dist/layout/TransitionCoordinator.d.ts +11 -0
  103. package/dist/layout/TransitionCoordinator.d.ts.map +1 -0
  104. package/dist/layout/TransitionCoordinator.js +22 -0
  105. package/dist/layout/TransitionCoordinator.js.map +1 -0
  106. package/dist/layout/index.d.ts +7 -0
  107. package/dist/layout/index.d.ts.map +1 -0
  108. package/dist/layout/index.js +4 -0
  109. package/dist/layout/index.js.map +1 -0
  110. package/dist/rendering/BandManager.d.ts +87 -0
  111. package/dist/rendering/BandManager.d.ts.map +1 -0
  112. package/dist/rendering/BandManager.js +185 -0
  113. package/dist/rendering/BandManager.js.map +1 -0
  114. package/dist/rendering/PageCache.d.ts +75 -0
  115. package/dist/rendering/PageCache.d.ts.map +1 -0
  116. package/dist/rendering/PageCache.js +122 -0
  117. package/dist/rendering/PageCache.js.map +1 -0
  118. package/dist/rendering/RenderQueue.d.ts +75 -0
  119. package/dist/rendering/RenderQueue.d.ts.map +1 -0
  120. package/dist/rendering/RenderQueue.js +105 -0
  121. package/dist/rendering/RenderQueue.js.map +1 -0
  122. package/dist/rendering/ThumbnailQueue.d.ts +57 -0
  123. package/dist/rendering/ThumbnailQueue.d.ts.map +1 -0
  124. package/dist/rendering/ThumbnailQueue.js +85 -0
  125. package/dist/rendering/ThumbnailQueue.js.map +1 -0
  126. package/dist/rendering/index.d.ts +13 -0
  127. package/dist/rendering/index.d.ts.map +1 -0
  128. package/dist/rendering/index.js +10 -0
  129. package/dist/rendering/index.js.map +1 -0
  130. package/dist/rendering/types.d.ts +72 -0
  131. package/dist/rendering/types.d.ts.map +1 -0
  132. package/dist/rendering/types.js +5 -0
  133. package/dist/rendering/types.js.map +1 -0
  134. package/dist/styles/index.d.ts +6 -0
  135. package/dist/styles/index.d.ts.map +1 -0
  136. package/dist/styles/index.js +1221 -0
  137. package/dist/styles/index.js.map +1 -0
  138. package/dist/types.d.ts +6 -0
  139. package/dist/types.d.ts.map +1 -0
  140. package/dist/types.js +6 -0
  141. package/dist/types.js.map +1 -0
  142. package/dist/ui/Component.d.ts +127 -0
  143. package/dist/ui/Component.d.ts.map +1 -0
  144. package/dist/ui/Component.js +201 -0
  145. package/dist/ui/Component.js.map +1 -0
  146. package/dist/ui/annotation/AnnotationLayer.d.ts +90 -0
  147. package/dist/ui/annotation/AnnotationLayer.d.ts.map +1 -0
  148. package/dist/ui/annotation/AnnotationLayer.js +322 -0
  149. package/dist/ui/annotation/AnnotationLayer.js.map +1 -0
  150. package/dist/ui/annotation/LinkRenderer.d.ts +32 -0
  151. package/dist/ui/annotation/LinkRenderer.d.ts.map +1 -0
  152. package/dist/ui/annotation/LinkRenderer.js +74 -0
  153. package/dist/ui/annotation/LinkRenderer.js.map +1 -0
  154. package/dist/ui/annotation/MarkupRenderer.d.ts +40 -0
  155. package/dist/ui/annotation/MarkupRenderer.d.ts.map +1 -0
  156. package/dist/ui/annotation/MarkupRenderer.js +154 -0
  157. package/dist/ui/annotation/MarkupRenderer.js.map +1 -0
  158. package/dist/ui/annotation/ShapeRenderer.d.ts +46 -0
  159. package/dist/ui/annotation/ShapeRenderer.d.ts.map +1 -0
  160. package/dist/ui/annotation/ShapeRenderer.js +376 -0
  161. package/dist/ui/annotation/ShapeRenderer.js.map +1 -0
  162. package/dist/ui/annotation/TextRenderer.d.ts +36 -0
  163. package/dist/ui/annotation/TextRenderer.d.ts.map +1 -0
  164. package/dist/ui/annotation/TextRenderer.js +199 -0
  165. package/dist/ui/annotation/TextRenderer.js.map +1 -0
  166. package/dist/ui/annotation/index.d.ts +17 -0
  167. package/dist/ui/annotation/index.d.ts.map +1 -0
  168. package/dist/ui/annotation/index.js +13 -0
  169. package/dist/ui/annotation/index.js.map +1 -0
  170. package/dist/ui/annotation/utils.d.ts +40 -0
  171. package/dist/ui/annotation/utils.d.ts.map +1 -0
  172. package/dist/ui/annotation/utils.js +62 -0
  173. package/dist/ui/annotation/utils.js.map +1 -0
  174. package/dist/ui/components/CommentsContent.d.ts +35 -0
  175. package/dist/ui/components/CommentsContent.d.ts.map +1 -0
  176. package/dist/ui/components/CommentsContent.js +203 -0
  177. package/dist/ui/components/CommentsContent.js.map +1 -0
  178. package/dist/ui/components/FloatingBar.d.ts +55 -0
  179. package/dist/ui/components/FloatingBar.d.ts.map +1 -0
  180. package/dist/ui/components/FloatingBar.js +585 -0
  181. package/dist/ui/components/FloatingBar.js.map +1 -0
  182. package/dist/ui/components/Header.d.ts +29 -0
  183. package/dist/ui/components/Header.d.ts.map +1 -0
  184. package/dist/ui/components/Header.js +127 -0
  185. package/dist/ui/components/Header.js.map +1 -0
  186. package/dist/ui/components/LeftPanel.d.ts +54 -0
  187. package/dist/ui/components/LeftPanel.d.ts.map +1 -0
  188. package/dist/ui/components/LeftPanel.js +202 -0
  189. package/dist/ui/components/LeftPanel.js.map +1 -0
  190. package/dist/ui/components/OutlineContent.d.ts +34 -0
  191. package/dist/ui/components/OutlineContent.d.ts.map +1 -0
  192. package/dist/ui/components/OutlineContent.js +147 -0
  193. package/dist/ui/components/OutlineContent.js.map +1 -0
  194. package/dist/ui/components/RightPanel.d.ts +52 -0
  195. package/dist/ui/components/RightPanel.d.ts.map +1 -0
  196. package/dist/ui/components/RightPanel.js +142 -0
  197. package/dist/ui/components/RightPanel.js.map +1 -0
  198. package/dist/ui/components/Viewport.d.ts +70 -0
  199. package/dist/ui/components/Viewport.d.ts.map +1 -0
  200. package/dist/ui/components/Viewport.js +173 -0
  201. package/dist/ui/components/Viewport.js.map +1 -0
  202. package/dist/ui/components/index.d.ts +11 -0
  203. package/dist/ui/components/index.d.ts.map +1 -0
  204. package/dist/ui/components/index.js +10 -0
  205. package/dist/ui/components/index.js.map +1 -0
  206. package/dist/ui/framework/component.d.ts +68 -0
  207. package/dist/ui/framework/component.d.ts.map +1 -0
  208. package/dist/ui/framework/component.js +87 -0
  209. package/dist/ui/framework/component.js.map +1 -0
  210. package/dist/ui/framework/dom.d.ts +19 -0
  211. package/dist/ui/framework/dom.d.ts.map +1 -0
  212. package/dist/ui/framework/dom.js +29 -0
  213. package/dist/ui/framework/dom.js.map +1 -0
  214. package/dist/ui/framework/events.d.ts +18 -0
  215. package/dist/ui/framework/events.d.ts.map +1 -0
  216. package/dist/ui/framework/events.js +23 -0
  217. package/dist/ui/framework/events.js.map +1 -0
  218. package/dist/ui/framework/index.d.ts +15 -0
  219. package/dist/ui/framework/index.d.ts.map +1 -0
  220. package/dist/ui/framework/index.js +15 -0
  221. package/dist/ui/framework/index.js.map +1 -0
  222. package/dist/ui/framework/selectors.d.ts +51 -0
  223. package/dist/ui/framework/selectors.d.ts.map +1 -0
  224. package/dist/ui/framework/selectors.js +30 -0
  225. package/dist/ui/framework/selectors.js.map +1 -0
  226. package/dist/ui/framework/store.d.ts +37 -0
  227. package/dist/ui/framework/store.d.ts.map +1 -0
  228. package/dist/ui/framework/store.js +54 -0
  229. package/dist/ui/framework/store.js.map +1 -0
  230. package/dist/ui/icons/icons.d.ts +43 -0
  231. package/dist/ui/icons/icons.d.ts.map +1 -0
  232. package/dist/ui/icons/icons.js +46 -0
  233. package/dist/ui/icons/icons.js.map +1 -0
  234. package/dist/ui/icons/index.d.ts +11 -0
  235. package/dist/ui/icons/index.d.ts.map +1 -0
  236. package/dist/ui/icons/index.js +18 -0
  237. package/dist/ui/icons/index.js.map +1 -0
  238. package/dist/ui/index.d.ts +7 -0
  239. package/dist/ui/index.d.ts.map +1 -0
  240. package/dist/ui/index.js +9 -0
  241. package/dist/ui/index.js.map +1 -0
  242. package/dist/ui/styles/base.css.d.ts +5 -0
  243. package/dist/ui/styles/base.css.d.ts.map +1 -0
  244. package/dist/ui/styles/base.css.js +49 -0
  245. package/dist/ui/styles/base.css.js.map +1 -0
  246. package/dist/ui/styles/floating-bar.css.d.ts +5 -0
  247. package/dist/ui/styles/floating-bar.css.d.ts.map +1 -0
  248. package/dist/ui/styles/floating-bar.css.js +417 -0
  249. package/dist/ui/styles/floating-bar.css.js.map +1 -0
  250. package/dist/ui/styles/header.css.d.ts +5 -0
  251. package/dist/ui/styles/header.css.d.ts.map +1 -0
  252. package/dist/ui/styles/header.css.js +49 -0
  253. package/dist/ui/styles/header.css.js.map +1 -0
  254. package/dist/ui/styles/index.d.ts +21 -0
  255. package/dist/ui/styles/index.d.ts.map +1 -0
  256. package/dist/ui/styles/index.js +48 -0
  257. package/dist/ui/styles/index.js.map +1 -0
  258. package/dist/ui/styles/panels.css.d.ts +5 -0
  259. package/dist/ui/styles/panels.css.d.ts.map +1 -0
  260. package/dist/ui/styles/panels.css.js +446 -0
  261. package/dist/ui/styles/panels.css.js.map +1 -0
  262. package/dist/ui/styles/responsive.css.d.ts +5 -0
  263. package/dist/ui/styles/responsive.css.d.ts.map +1 -0
  264. package/dist/ui/styles/responsive.css.js +201 -0
  265. package/dist/ui/styles/responsive.css.js.map +1 -0
  266. package/dist/ui/styles/variables.css.d.ts +6 -0
  267. package/dist/ui/styles/variables.css.d.ts.map +1 -0
  268. package/dist/ui/styles/variables.css.js +75 -0
  269. package/dist/ui/styles/variables.css.js.map +1 -0
  270. package/dist/ui/styles/viewport.css.d.ts +5 -0
  271. package/dist/ui/styles/viewport.css.d.ts.map +1 -0
  272. package/dist/ui/styles/viewport.css.js +87 -0
  273. package/dist/ui/styles/viewport.css.js.map +1 -0
  274. package/dist/ui/viewer/actions.d.ts +103 -0
  275. package/dist/ui/viewer/actions.d.ts.map +1 -0
  276. package/dist/ui/viewer/actions.js +2 -0
  277. package/dist/ui/viewer/actions.js.map +1 -0
  278. package/dist/ui/viewer/annotation/LinkRenderer.d.ts +9 -0
  279. package/dist/ui/viewer/annotation/LinkRenderer.d.ts.map +1 -0
  280. package/dist/ui/viewer/annotation/LinkRenderer.js +17 -0
  281. package/dist/ui/viewer/annotation/LinkRenderer.js.map +1 -0
  282. package/dist/ui/viewer/annotation/MarkupRenderer.d.ts +21 -0
  283. package/dist/ui/viewer/annotation/MarkupRenderer.d.ts.map +1 -0
  284. package/dist/ui/viewer/annotation/MarkupRenderer.js +138 -0
  285. package/dist/ui/viewer/annotation/MarkupRenderer.js.map +1 -0
  286. package/dist/ui/viewer/annotation/ShapeRenderer.d.ts +33 -0
  287. package/dist/ui/viewer/annotation/ShapeRenderer.d.ts.map +1 -0
  288. package/dist/ui/viewer/annotation/ShapeRenderer.js +378 -0
  289. package/dist/ui/viewer/annotation/ShapeRenderer.js.map +1 -0
  290. package/dist/ui/viewer/annotation/TextRenderer.d.ts +23 -0
  291. package/dist/ui/viewer/annotation/TextRenderer.d.ts.map +1 -0
  292. package/dist/ui/viewer/annotation/TextRenderer.js +196 -0
  293. package/dist/ui/viewer/annotation/TextRenderer.js.map +1 -0
  294. package/dist/ui/viewer/annotation/index.d.ts +8 -0
  295. package/dist/ui/viewer/annotation/index.d.ts.map +1 -0
  296. package/dist/ui/viewer/annotation/index.js +8 -0
  297. package/dist/ui/viewer/annotation/index.js.map +1 -0
  298. package/dist/ui/viewer/annotation/render.d.ts +24 -0
  299. package/dist/ui/viewer/annotation/render.d.ts.map +1 -0
  300. package/dist/ui/viewer/annotation/render.js +184 -0
  301. package/dist/ui/viewer/annotation/render.js.map +1 -0
  302. package/dist/ui/viewer/annotation/types.d.ts +239 -0
  303. package/dist/ui/viewer/annotation/types.d.ts.map +1 -0
  304. package/dist/ui/viewer/annotation/types.js +7 -0
  305. package/dist/ui/viewer/annotation/types.js.map +1 -0
  306. package/dist/ui/viewer/annotation/utils.d.ts +37 -0
  307. package/dist/ui/viewer/annotation/utils.d.ts.map +1 -0
  308. package/dist/ui/viewer/annotation/utils.js +82 -0
  309. package/dist/ui/viewer/annotation/utils.js.map +1 -0
  310. package/dist/ui/viewer/components/AnnotationPanel.d.ts +19 -0
  311. package/dist/ui/viewer/components/AnnotationPanel.d.ts.map +1 -0
  312. package/dist/ui/viewer/components/AnnotationPanel.js +284 -0
  313. package/dist/ui/viewer/components/AnnotationPanel.js.map +1 -0
  314. package/dist/ui/viewer/components/FloatingToolbar.d.ts +9 -0
  315. package/dist/ui/viewer/components/FloatingToolbar.d.ts.map +1 -0
  316. package/dist/ui/viewer/components/FloatingToolbar.js +305 -0
  317. package/dist/ui/viewer/components/FloatingToolbar.js.map +1 -0
  318. package/dist/ui/viewer/components/LeftPanel.d.ts +10 -0
  319. package/dist/ui/viewer/components/LeftPanel.d.ts.map +1 -0
  320. package/dist/ui/viewer/components/LeftPanel.js +165 -0
  321. package/dist/ui/viewer/components/LeftPanel.js.map +1 -0
  322. package/dist/ui/viewer/components/OutlinePanel.d.ts +10 -0
  323. package/dist/ui/viewer/components/OutlinePanel.d.ts.map +1 -0
  324. package/dist/ui/viewer/components/OutlinePanel.js +169 -0
  325. package/dist/ui/viewer/components/OutlinePanel.js.map +1 -0
  326. package/dist/ui/viewer/components/RightPanel.d.ts +9 -0
  327. package/dist/ui/viewer/components/RightPanel.d.ts.map +1 -0
  328. package/dist/ui/viewer/components/RightPanel.js +102 -0
  329. package/dist/ui/viewer/components/RightPanel.js.map +1 -0
  330. package/dist/ui/viewer/components/Spread.d.ts +41 -0
  331. package/dist/ui/viewer/components/Spread.d.ts.map +1 -0
  332. package/dist/ui/viewer/components/Spread.js +278 -0
  333. package/dist/ui/viewer/components/Spread.js.map +1 -0
  334. package/dist/ui/viewer/components/ThumbnailPanel.d.ts +11 -0
  335. package/dist/ui/viewer/components/ThumbnailPanel.d.ts.map +1 -0
  336. package/dist/ui/viewer/components/ThumbnailPanel.js +206 -0
  337. package/dist/ui/viewer/components/ThumbnailPanel.js.map +1 -0
  338. package/dist/ui/viewer/components/Toolbar.d.ts +9 -0
  339. package/dist/ui/viewer/components/Toolbar.d.ts.map +1 -0
  340. package/dist/ui/viewer/components/Toolbar.js +93 -0
  341. package/dist/ui/viewer/components/Toolbar.js.map +1 -0
  342. package/dist/ui/viewer/components/ViewModeMenu.d.ts +9 -0
  343. package/dist/ui/viewer/components/ViewModeMenu.d.ts.map +1 -0
  344. package/dist/ui/viewer/components/ViewModeMenu.js +169 -0
  345. package/dist/ui/viewer/components/ViewModeMenu.js.map +1 -0
  346. package/dist/ui/viewer/components/Viewport.d.ts +10 -0
  347. package/dist/ui/viewer/components/Viewport.d.ts.map +1 -0
  348. package/dist/ui/viewer/components/Viewport.js +793 -0
  349. package/dist/ui/viewer/components/Viewport.js.map +1 -0
  350. package/dist/ui/viewer/effects.d.ts +9 -0
  351. package/dist/ui/viewer/effects.d.ts.map +1 -0
  352. package/dist/ui/viewer/effects.js +179 -0
  353. package/dist/ui/viewer/effects.js.map +1 -0
  354. package/dist/ui/viewer/icons.d.ts +32 -0
  355. package/dist/ui/viewer/icons.d.ts.map +1 -0
  356. package/dist/ui/viewer/icons.js +44 -0
  357. package/dist/ui/viewer/icons.js.map +1 -0
  358. package/dist/ui/viewer/index.d.ts +6 -0
  359. package/dist/ui/viewer/index.d.ts.map +1 -0
  360. package/dist/ui/viewer/index.js +6 -0
  361. package/dist/ui/viewer/index.js.map +1 -0
  362. package/dist/ui/viewer/layout/index.d.ts +3 -0
  363. package/dist/ui/viewer/layout/index.d.ts.map +1 -0
  364. package/dist/ui/viewer/layout/index.js +3 -0
  365. package/dist/ui/viewer/layout/index.js.map +1 -0
  366. package/dist/ui/viewer/layout/pixelAlign.d.ts +7 -0
  367. package/dist/ui/viewer/layout/pixelAlign.d.ts.map +1 -0
  368. package/dist/ui/viewer/layout/pixelAlign.js +22 -0
  369. package/dist/ui/viewer/layout/pixelAlign.js.map +1 -0
  370. package/dist/ui/viewer/layout/spreadLayout.d.ts +93 -0
  371. package/dist/ui/viewer/layout/spreadLayout.d.ts.map +1 -0
  372. package/dist/ui/viewer/layout/spreadLayout.js +303 -0
  373. package/dist/ui/viewer/layout/spreadLayout.js.map +1 -0
  374. package/dist/ui/viewer/navigation.d.ts +80 -0
  375. package/dist/ui/viewer/navigation.d.ts.map +1 -0
  376. package/dist/ui/viewer/navigation.js +59 -0
  377. package/dist/ui/viewer/navigation.js.map +1 -0
  378. package/dist/ui/viewer/reducer.d.ts +4 -0
  379. package/dist/ui/viewer/reducer.d.ts.map +1 -0
  380. package/dist/ui/viewer/reducer.js +229 -0
  381. package/dist/ui/viewer/reducer.js.map +1 -0
  382. package/dist/ui/viewer/rendering/RenderManager.d.ts +76 -0
  383. package/dist/ui/viewer/rendering/RenderManager.d.ts.map +1 -0
  384. package/dist/ui/viewer/rendering/RenderManager.js +236 -0
  385. package/dist/ui/viewer/rendering/RenderManager.js.map +1 -0
  386. package/dist/ui/viewer/shell.d.ts +29 -0
  387. package/dist/ui/viewer/shell.d.ts.map +1 -0
  388. package/dist/ui/viewer/shell.js +70 -0
  389. package/dist/ui/viewer/shell.js.map +1 -0
  390. package/dist/ui/viewer/state.d.ts +72 -0
  391. package/dist/ui/viewer/state.d.ts.map +1 -0
  392. package/dist/ui/viewer/state.js +47 -0
  393. package/dist/ui/viewer/state.js.map +1 -0
  394. package/dist/view/LayoutCalculator.d.ts +42 -0
  395. package/dist/view/LayoutCalculator.d.ts.map +1 -0
  396. package/dist/view/LayoutCalculator.js +180 -0
  397. package/dist/view/LayoutCalculator.js.map +1 -0
  398. package/dist/view/TransitionCoordinator.d.ts +11 -0
  399. package/dist/view/TransitionCoordinator.d.ts.map +1 -0
  400. package/dist/view/TransitionCoordinator.js +22 -0
  401. package/dist/view/TransitionCoordinator.js.map +1 -0
  402. package/dist/view/ViewState.d.ts +46 -0
  403. package/dist/view/ViewState.d.ts.map +1 -0
  404. package/dist/view/ViewState.js +109 -0
  405. package/dist/view/ViewState.js.map +1 -0
  406. package/dist/view/index.d.ts +7 -0
  407. package/dist/view/index.d.ts.map +1 -0
  408. package/dist/view/index.js +4 -0
  409. package/dist/view/index.js.map +1 -0
  410. package/dist/wasm/udoc.d.ts +202 -0
  411. package/dist/wasm/udoc.js +929 -0
  412. package/dist/wasm/udoc_bg.wasm +0 -0
  413. package/dist/wasm/udoc_bg.wasm.d.ts +28 -0
  414. package/dist/worker/WorkerClient.d.ts +103 -0
  415. package/dist/worker/WorkerClient.d.ts.map +1 -0
  416. package/dist/worker/WorkerClient.js +182 -0
  417. package/dist/worker/WorkerClient.js.map +1 -0
  418. package/dist/worker/index.d.ts +4 -0
  419. package/dist/worker/index.d.ts.map +1 -0
  420. package/dist/worker/index.js +2 -0
  421. package/dist/worker/index.js.map +1 -0
  422. package/dist/worker/types.d.ts +81 -0
  423. package/dist/worker/types.d.ts.map +1 -0
  424. package/dist/worker/types.js +6 -0
  425. package/dist/worker/types.js.map +1 -0
  426. package/dist/worker/worker.d.ts +191 -0
  427. package/dist/worker/worker.d.ts.map +1 -0
  428. package/dist/worker/worker.js +127 -0
  429. package/dist/worker/worker.js.map +1 -0
  430. package/dist/worker.d.ts +2 -0
  431. package/dist/worker.d.ts.map +1 -0
  432. package/dist/worker.js +205 -0
  433. package/dist/worker.js.map +1 -0
  434. package/package.json +32 -0
@@ -0,0 +1,51 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,3 @@
1
+ export { ICONS } from './icons';
2
+ export type { IconName } from './icons';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export { ICONS } from './icons';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { UDocClient } from "./UDocClient.js";
2
+ export type { ClientOptions, ViewerOptions, DocumentSource, LicenseInfo } from "./UDocClient.js";
3
+ export { UDocViewer } from "./UDocViewer.js";
4
+ export type { RenderOptions, RenderedPage, DocumentMetadata, OutlineItem, Destination, DestinationDisplay, Annotation, ViewerEventMap, } from "./UDocViewer.js";
5
+ export { WorkerClient } from "./worker/index.js";
6
+ export type { PageInfo, LicenseResult, WorkerRequest, WorkerResponse } from "./worker/index.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEjG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ // Main classes
2
+ export { UDocClient } from "./UDocClient.js";
3
+ export { UDocViewer } from "./UDocViewer.js";
4
+ // Worker internals (for advanced usage)
5
+ export { WorkerClient } from "./worker/index.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAY7C,wCAAwC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,87 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,185 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BandManager.js","sourceRoot":"","sources":["../../src/layout/BandManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,180 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutCalculator.js","sourceRoot":"","sources":["../../src/layout/LayoutCalculator.ts"],"names":[],"mappings":"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"}