postext 1.24.0 → 1.25.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 (331) hide show
  1. package/dist/__tests__/bundle/cjkRulesPin.test.d.ts +2 -0
  2. package/dist/__tests__/bundle/cjkRulesPin.test.d.ts.map +1 -0
  3. package/dist/__tests__/bundle/cjkRulesPin.test.js +78 -0
  4. package/dist/__tests__/bundle/cjkRulesPin.test.js.map +1 -0
  5. package/dist/__tests__/bundle/designOverflowPin.test.js +4 -2
  6. package/dist/__tests__/bundle/designOverflowPin.test.js.map +1 -1
  7. package/dist/__tests__/bundle/flowColumnsPin.test.d.ts +2 -0
  8. package/dist/__tests__/bundle/flowColumnsPin.test.d.ts.map +1 -0
  9. package/dist/__tests__/bundle/flowColumnsPin.test.js +40 -0
  10. package/dist/__tests__/bundle/flowColumnsPin.test.js.map +1 -0
  11. package/dist/__tests__/bundle/gridBalancingPin.test.d.ts +2 -0
  12. package/dist/__tests__/bundle/gridBalancingPin.test.d.ts.map +1 -0
  13. package/dist/__tests__/bundle/gridBalancingPin.test.js +53 -0
  14. package/dist/__tests__/bundle/gridBalancingPin.test.js.map +1 -0
  15. package/dist/__tests__/bundle/inlineTableSplitPin.test.d.ts +2 -0
  16. package/dist/__tests__/bundle/inlineTableSplitPin.test.d.ts.map +1 -0
  17. package/dist/__tests__/bundle/inlineTableSplitPin.test.js +43 -0
  18. package/dist/__tests__/bundle/inlineTableSplitPin.test.js.map +1 -0
  19. package/dist/__tests__/bundle/openerHeadFloatsPin.test.d.ts +2 -0
  20. package/dist/__tests__/bundle/openerHeadFloatsPin.test.d.ts.map +1 -0
  21. package/dist/__tests__/bundle/openerHeadFloatsPin.test.js +50 -0
  22. package/dist/__tests__/bundle/openerHeadFloatsPin.test.js.map +1 -0
  23. package/dist/__tests__/bundle.test.js +11 -1
  24. package/dist/__tests__/bundle.test.js.map +1 -1
  25. package/dist/__tests__/cjk/annotationsRender.test.js +5 -2
  26. package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -1
  27. package/dist/__tests__/cjk/circledNumbers.test.d.ts +2 -0
  28. package/dist/__tests__/cjk/circledNumbers.test.d.ts.map +1 -0
  29. package/dist/__tests__/cjk/circledNumbers.test.js +83 -0
  30. package/dist/__tests__/cjk/circledNumbers.test.js.map +1 -0
  31. package/dist/__tests__/cjk/gridBalancing.test.d.ts +2 -0
  32. package/dist/__tests__/cjk/gridBalancing.test.d.ts.map +1 -0
  33. package/dist/__tests__/cjk/gridBalancing.test.js +227 -0
  34. package/dist/__tests__/cjk/gridBalancing.test.js.map +1 -0
  35. package/dist/__tests__/cjk/justifyRender.test.js +2 -1
  36. package/dist/__tests__/cjk/justifyRender.test.js.map +1 -1
  37. package/dist/__tests__/cjk/titleBreaks.test.d.ts +2 -0
  38. package/dist/__tests__/cjk/titleBreaks.test.d.ts.map +1 -0
  39. package/dist/__tests__/cjk/titleBreaks.test.js +76 -0
  40. package/dist/__tests__/cjk/titleBreaks.test.js.map +1 -0
  41. package/dist/__tests__/cjk/wordJoiner.test.js +13 -4
  42. package/dist/__tests__/cjk/wordJoiner.test.js.map +1 -1
  43. package/dist/__tests__/codeBlocks.test.js +1 -1
  44. package/dist/__tests__/design/cjkDesignText.test.d.ts +2 -0
  45. package/dist/__tests__/design/cjkDesignText.test.d.ts.map +1 -0
  46. package/dist/__tests__/design/cjkDesignText.test.js +130 -0
  47. package/dist/__tests__/design/cjkDesignText.test.js.map +1 -0
  48. package/dist/__tests__/design/cjkDesignTextRender.test.d.ts +2 -0
  49. package/dist/__tests__/design/cjkDesignTextRender.test.d.ts.map +1 -0
  50. package/dist/__tests__/design/cjkDesignTextRender.test.js +100 -0
  51. package/dist/__tests__/design/cjkDesignTextRender.test.js.map +1 -0
  52. package/dist/__tests__/exports.test.js +49 -0
  53. package/dist/__tests__/exports.test.js.map +1 -1
  54. package/dist/__tests__/hardBreaks.test.js +1 -1
  55. package/dist/__tests__/headingInlineMarks.test.js +1 -1
  56. package/dist/__tests__/headingNumberSpans.test.d.ts +2 -0
  57. package/dist/__tests__/headingNumberSpans.test.d.ts.map +1 -0
  58. package/dist/__tests__/headingNumberSpans.test.js +96 -0
  59. package/dist/__tests__/headingNumberSpans.test.js.map +1 -0
  60. package/dist/__tests__/mathSizeMigration.test.js +2 -2
  61. package/dist/__tests__/multipleColumns.test.js +207 -0
  62. package/dist/__tests__/multipleColumns.test.js.map +1 -1
  63. package/dist/__tests__/parse/citations.test.js +29 -0
  64. package/dist/__tests__/parse/citations.test.js.map +1 -1
  65. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +10 -6
  66. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js.map +1 -1
  67. package/dist/__tests__/pipeline/calloutOverflow.test.js +4 -2
  68. package/dist/__tests__/pipeline/calloutOverflow.test.js.map +1 -1
  69. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
  70. package/dist/__tests__/pipeline/calloutTallKeepTogether.test.js +6 -5
  71. package/dist/__tests__/pipeline/calloutTallKeepTogether.test.js.map +1 -1
  72. package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
  73. package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
  74. package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
  75. package/dist/__tests__/pipeline/floatCitingPage.test.d.ts +2 -0
  76. package/dist/__tests__/pipeline/floatCitingPage.test.d.ts.map +1 -0
  77. package/dist/__tests__/pipeline/floatCitingPage.test.js +241 -0
  78. package/dist/__tests__/pipeline/floatCitingPage.test.js.map +1 -0
  79. package/dist/__tests__/pipeline/floatOverInlineResource.test.js +18 -6
  80. package/dist/__tests__/pipeline/floatOverInlineResource.test.js.map +1 -1
  81. package/dist/__tests__/pipeline/floatPlacement.test.js +3 -3
  82. package/dist/__tests__/pipeline/floatPlacement.test.js.map +1 -1
  83. package/dist/__tests__/pipeline/flowColumns.test.d.ts +2 -0
  84. package/dist/__tests__/pipeline/flowColumns.test.d.ts.map +1 -0
  85. package/dist/__tests__/pipeline/flowColumns.test.js +261 -0
  86. package/dist/__tests__/pipeline/flowColumns.test.js.map +1 -0
  87. package/dist/__tests__/pipeline/headingKeepFitEps.test.d.ts +2 -0
  88. package/dist/__tests__/pipeline/headingKeepFitEps.test.d.ts.map +1 -0
  89. package/dist/__tests__/pipeline/headingKeepFitEps.test.js +83 -0
  90. package/dist/__tests__/pipeline/headingKeepFitEps.test.js.map +1 -0
  91. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
  92. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
  93. package/dist/__tests__/pipeline/inlineTableSplit.test.d.ts +2 -0
  94. package/dist/__tests__/pipeline/inlineTableSplit.test.d.ts.map +1 -0
  95. package/dist/__tests__/pipeline/inlineTableSplit.test.js +238 -0
  96. package/dist/__tests__/pipeline/inlineTableSplit.test.js.map +1 -0
  97. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
  98. package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
  99. package/dist/__tests__/pipeline/resolvedPaletteCopy.test.js +3 -2
  100. package/dist/__tests__/pipeline/resolvedPaletteCopy.test.js.map +1 -1
  101. package/dist/__tests__/pipeline/sideBoxAfterText.test.d.ts +2 -0
  102. package/dist/__tests__/pipeline/sideBoxAfterText.test.d.ts.map +1 -0
  103. package/dist/__tests__/pipeline/sideBoxAfterText.test.js +163 -0
  104. package/dist/__tests__/pipeline/sideBoxAfterText.test.js.map +1 -0
  105. package/dist/__tests__/prepareFonts.test.d.ts +2 -0
  106. package/dist/__tests__/prepareFonts.test.d.ts.map +1 -0
  107. package/dist/__tests__/prepareFonts.test.js +358 -0
  108. package/dist/__tests__/prepareFonts.test.js.map +1 -0
  109. package/dist/__tests__/svgFonts.test.d.ts +2 -0
  110. package/dist/__tests__/svgFonts.test.d.ts.map +1 -0
  111. package/dist/__tests__/svgFonts.test.js +286 -0
  112. package/dist/__tests__/svgFonts.test.js.map +1 -0
  113. package/dist/__tests__/verseLines.test.js +1 -1
  114. package/dist/__tests__/vertical/measurePaint.test.js +16 -0
  115. package/dist/__tests__/vertical/measurePaint.test.js.map +1 -1
  116. package/dist/bundle/adapters.d.ts +31 -7
  117. package/dist/bundle/adapters.d.ts.map +1 -1
  118. package/dist/bundle/adapters.js +113 -34
  119. package/dist/bundle/adapters.js.map +1 -1
  120. package/dist/bundle/codec.d.ts.map +1 -1
  121. package/dist/bundle/codec.js +1 -0
  122. package/dist/bundle/codec.js.map +1 -1
  123. package/dist/bundle/configVersion.d.ts +127 -10
  124. package/dist/bundle/configVersion.d.ts.map +1 -1
  125. package/dist/bundle/configVersion.js +260 -9
  126. package/dist/bundle/configVersion.js.map +1 -1
  127. package/dist/bundle/index.d.ts +3 -3
  128. package/dist/bundle/index.d.ts.map +1 -1
  129. package/dist/bundle/index.js +2 -2
  130. package/dist/bundle/index.js.map +1 -1
  131. package/dist/bundle/manifest.d.ts.map +1 -1
  132. package/dist/bundle/manifest.js +3 -2
  133. package/dist/bundle/manifest.js.map +1 -1
  134. package/dist/bundle/types.d.ts +4 -0
  135. package/dist/bundle/types.d.ts.map +1 -1
  136. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  137. package/dist/canvas-backend/headerFooter.js +3 -1
  138. package/dist/canvas-backend/headerFooter.js.map +1 -1
  139. package/dist/columnRule.d.ts.map +1 -1
  140. package/dist/columnRule.js +5 -2
  141. package/dist/columnRule.js.map +1 -1
  142. package/dist/configWarnings.js +1 -1
  143. package/dist/configWarnings.js.map +1 -1
  144. package/dist/defaults/cjk.d.ts +2 -1
  145. package/dist/defaults/cjk.d.ts.map +1 -1
  146. package/dist/defaults/cjk.js +17 -1
  147. package/dist/defaults/cjk.js.map +1 -1
  148. package/dist/defaults/diagramStyle.d.ts.map +1 -1
  149. package/dist/defaults/diagramStyle.js +6 -0
  150. package/dist/defaults/diagramStyle.js.map +1 -1
  151. package/dist/defaults/headings.d.ts.map +1 -1
  152. package/dist/defaults/headings.js +3 -0
  153. package/dist/defaults/headings.js.map +1 -1
  154. package/dist/defaults/index.d.ts +1 -1
  155. package/dist/defaults/index.d.ts.map +1 -1
  156. package/dist/defaults/index.js +1 -1
  157. package/dist/defaults/index.js.map +1 -1
  158. package/dist/defaults/layout.d.ts +5 -0
  159. package/dist/defaults/layout.d.ts.map +1 -1
  160. package/dist/defaults/layout.js +32 -0
  161. package/dist/defaults/layout.js.map +1 -1
  162. package/dist/defaults/tableStyle.d.ts.map +1 -1
  163. package/dist/defaults/tableStyle.js +6 -0
  164. package/dist/defaults/tableStyle.js.map +1 -1
  165. package/dist/design/cjkText.d.ts +34 -0
  166. package/dist/design/cjkText.d.ts.map +1 -0
  167. package/dist/design/cjkText.js +82 -0
  168. package/dist/design/cjkText.js.map +1 -0
  169. package/dist/design/layout.d.ts.map +1 -1
  170. package/dist/design/layout.js +103 -5
  171. package/dist/design/layout.js.map +1 -1
  172. package/dist/design/richText.d.ts +24 -0
  173. package/dist/design/richText.d.ts.map +1 -1
  174. package/dist/design/richText.js +37 -1
  175. package/dist/design/richText.js.map +1 -1
  176. package/dist/fonts/buildWithFonts.d.ts +19 -0
  177. package/dist/fonts/buildWithFonts.d.ts.map +1 -0
  178. package/dist/fonts/buildWithFonts.js +16 -0
  179. package/dist/fonts/buildWithFonts.js.map +1 -0
  180. package/dist/fonts/faces.d.ts +88 -0
  181. package/dist/fonts/faces.d.ts.map +1 -0
  182. package/dist/fonts/faces.js +264 -0
  183. package/dist/fonts/faces.js.map +1 -0
  184. package/dist/fonts/fontSet.d.ts +34 -0
  185. package/dist/fonts/fontSet.d.ts.map +1 -0
  186. package/dist/fonts/fontSet.js +173 -0
  187. package/dist/fonts/fontSet.js.map +1 -0
  188. package/dist/fonts/prepare.d.ts +120 -0
  189. package/dist/fonts/prepare.d.ts.map +1 -0
  190. package/dist/fonts/prepare.js +375 -0
  191. package/dist/fonts/prepare.js.map +1 -0
  192. package/dist/html-backend.d.ts +17 -0
  193. package/dist/html-backend.d.ts.map +1 -1
  194. package/dist/html-backend.js +87 -3
  195. package/dist/html-backend.js.map +1 -1
  196. package/dist/index.d.ts +25 -5
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +18 -2
  199. package/dist/index.js.map +1 -1
  200. package/dist/measure/cache.d.ts.map +1 -1
  201. package/dist/measure/cache.js +32 -2
  202. package/dist/measure/cache.js.map +1 -1
  203. package/dist/measure/canvas.d.ts +15 -0
  204. package/dist/measure/canvas.d.ts.map +1 -1
  205. package/dist/measure/canvas.js +68 -4
  206. package/dist/measure/canvas.js.map +1 -1
  207. package/dist/measure/cjk.d.ts.map +1 -1
  208. package/dist/measure/cjk.js +4 -1
  209. package/dist/measure/cjk.js.map +1 -1
  210. package/dist/measure/cjkClasses.d.ts +17 -0
  211. package/dist/measure/cjkClasses.d.ts.map +1 -1
  212. package/dist/measure/cjkClasses.js +41 -1
  213. package/dist/measure/cjkClasses.js.map +1 -1
  214. package/dist/measure/cjkCompose.d.ts.map +1 -1
  215. package/dist/measure/cjkCompose.js +119 -7
  216. package/dist/measure/cjkCompose.js.map +1 -1
  217. package/dist/measure/cjkPunctuation.d.ts +18 -1
  218. package/dist/measure/cjkPunctuation.d.ts.map +1 -1
  219. package/dist/measure/cjkPunctuation.js +13 -1
  220. package/dist/measure/cjkPunctuation.js.map +1 -1
  221. package/dist/measure/font.d.ts +8 -0
  222. package/dist/measure/font.d.ts.map +1 -1
  223. package/dist/measure/font.js +13 -2
  224. package/dist/measure/font.js.map +1 -1
  225. package/dist/measure/fontString.d.ts +14 -0
  226. package/dist/measure/fontString.d.ts.map +1 -0
  227. package/dist/measure/fontString.js +55 -0
  228. package/dist/measure/fontString.js.map +1 -0
  229. package/dist/measure/index.d.ts +4 -1
  230. package/dist/measure/index.d.ts.map +1 -1
  231. package/dist/measure/index.js +3 -1
  232. package/dist/measure/index.js.map +1 -1
  233. package/dist/measure/types.d.ts +4 -0
  234. package/dist/measure/types.d.ts.map +1 -1
  235. package/dist/measure/types.js.map +1 -1
  236. package/dist/parse/citations.d.ts.map +1 -1
  237. package/dist/parse/citations.js +7 -3
  238. package/dist/parse/citations.js.map +1 -1
  239. package/dist/pipeline/build.d.ts +36 -0
  240. package/dist/pipeline/build.d.ts.map +1 -1
  241. package/dist/pipeline/build.js +1065 -193
  242. package/dist/pipeline/build.js.map +1 -1
  243. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  244. package/dist/pipeline/buildBlockKind.js +20 -6
  245. package/dist/pipeline/buildBlockKind.js.map +1 -1
  246. package/dist/pipeline/buildMeasurement.d.ts +6 -0
  247. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  248. package/dist/pipeline/buildMeasurement.js +3 -2
  249. package/dist/pipeline/buildMeasurement.js.map +1 -1
  250. package/dist/pipeline/calloutLayout.d.ts +59 -0
  251. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  252. package/dist/pipeline/calloutLayout.js +287 -65
  253. package/dist/pipeline/calloutLayout.js.map +1 -1
  254. package/dist/pipeline/columnBalancing.d.ts +20 -0
  255. package/dist/pipeline/columnBalancing.d.ts.map +1 -1
  256. package/dist/pipeline/columnBalancing.js +22 -4
  257. package/dist/pipeline/columnBalancing.js.map +1 -1
  258. package/dist/pipeline/columnsGroup.d.ts +61 -0
  259. package/dist/pipeline/columnsGroup.d.ts.map +1 -0
  260. package/dist/pipeline/columnsGroup.js +88 -0
  261. package/dist/pipeline/columnsGroup.js.map +1 -0
  262. package/dist/pipeline/config.d.ts +28 -0
  263. package/dist/pipeline/config.d.ts.map +1 -1
  264. package/dist/pipeline/config.js +67 -8
  265. package/dist/pipeline/config.js.map +1 -1
  266. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  267. package/dist/pipeline/contentWarnings.js +28 -0
  268. package/dist/pipeline/contentWarnings.js.map +1 -1
  269. package/dist/pipeline/floatPlacement.d.ts +16 -2
  270. package/dist/pipeline/floatPlacement.d.ts.map +1 -1
  271. package/dist/pipeline/floatPlacement.js +12 -4
  272. package/dist/pipeline/floatPlacement.js.map +1 -1
  273. package/dist/pipeline/floatSlots.d.ts +9 -3
  274. package/dist/pipeline/floatSlots.d.ts.map +1 -1
  275. package/dist/pipeline/floatSlots.js +15 -6
  276. package/dist/pipeline/floatSlots.js.map +1 -1
  277. package/dist/pipeline/flowColumns.d.ts +41 -0
  278. package/dist/pipeline/flowColumns.d.ts.map +1 -0
  279. package/dist/pipeline/flowColumns.js +116 -0
  280. package/dist/pipeline/flowColumns.js.map +1 -0
  281. package/dist/pipeline/measureContentBlock.d.ts +13 -1
  282. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  283. package/dist/pipeline/measureContentBlock.js +20 -5
  284. package/dist/pipeline/measureContentBlock.js.map +1 -1
  285. package/dist/pipeline/partPalette.d.ts +3 -0
  286. package/dist/pipeline/partPalette.d.ts.map +1 -1
  287. package/dist/pipeline/partPalette.js +5 -0
  288. package/dist/pipeline/partPalette.js.map +1 -1
  289. package/dist/pipeline/placement.d.ts +19 -0
  290. package/dist/pipeline/placement.d.ts.map +1 -1
  291. package/dist/pipeline/placement.js +5 -2
  292. package/dist/pipeline/placement.js.map +1 -1
  293. package/dist/pipeline/resourceLayout.d.ts +26 -0
  294. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  295. package/dist/pipeline/resourceLayout.js +53 -3
  296. package/dist/pipeline/resourceLayout.js.map +1 -1
  297. package/dist/pipeline/toc.d.ts.map +1 -1
  298. package/dist/pipeline/toc.js +6 -1
  299. package/dist/pipeline/toc.js.map +1 -1
  300. package/dist/svg/fontRegistry.d.ts +66 -0
  301. package/dist/svg/fontRegistry.d.ts.map +1 -0
  302. package/dist/svg/fontRegistry.js +294 -0
  303. package/dist/svg/fontRegistry.js.map +1 -0
  304. package/dist/svg/fonts.d.ts +140 -0
  305. package/dist/svg/fonts.d.ts.map +1 -0
  306. package/dist/svg/fonts.js +642 -0
  307. package/dist/svg/fonts.js.map +1 -0
  308. package/dist/svg/image.d.ts +44 -0
  309. package/dist/svg/image.d.ts.map +1 -0
  310. package/dist/svg/image.js +67 -0
  311. package/dist/svg/image.js.map +1 -0
  312. package/dist/types.d.ts +138 -2
  313. package/dist/types.d.ts.map +1 -1
  314. package/dist/util/stableHash.d.ts +20 -0
  315. package/dist/util/stableHash.d.ts.map +1 -0
  316. package/dist/util/stableHash.js +59 -0
  317. package/dist/util/stableHash.js.map +1 -0
  318. package/dist/vdt.d.ts +118 -3
  319. package/dist/vdt.d.ts.map +1 -1
  320. package/dist/vdt.js.map +1 -1
  321. package/dist/worker/client.d.ts +8 -0
  322. package/dist/worker/client.d.ts.map +1 -1
  323. package/dist/worker/client.js +22 -0
  324. package/dist/worker/client.js.map +1 -1
  325. package/dist/worker/fonts.d.ts +1 -13
  326. package/dist/worker/fonts.d.ts.map +1 -1
  327. package/dist/worker/fonts.js +3 -61
  328. package/dist/worker/fonts.js.map +1 -1
  329. package/dist/worker/layout.worker.js +23 -16
  330. package/dist/worker/layout.worker.js.map +1 -1
  331. package/package.json +1 -1
@@ -0,0 +1,238 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline';
3
+ import { chooseTableSlice, MIN_TAIL_ROWS } from '../../pipeline/resourceLayout';
4
+ // Inline tables split across columns and pages (#634).
5
+ // Deterministic text measurement stub (no DOM in the node test env).
6
+ class StubCtx {
7
+ font = '';
8
+ measureText(s) {
9
+ return { width: s.length * 7 };
10
+ }
11
+ }
12
+ globalThis.OffscreenCanvas = class {
13
+ getContext() {
14
+ return new StubCtx();
15
+ }
16
+ };
17
+ const cell = (content, extra = {}) => ({ content, ...extra });
18
+ const pt = (value) => ({ value, unit: 'pt' });
19
+ /** A header row plus `n` body rows, placed where its `::resource` stands. */
20
+ const table = (id, n, extra = {}, rows) => ({
21
+ id,
22
+ typeId: 'table',
23
+ kind: 'table',
24
+ caption: 'Activities by age group.',
25
+ note: 'Source: the reference book.',
26
+ createdAt: 0,
27
+ updatedAt: 0,
28
+ table: {
29
+ model: {
30
+ headerRowCount: 1,
31
+ rows: rows ?? [
32
+ [cell('Task', { isHeader: true }), cell('Age', { isHeader: true })],
33
+ ...Array.from({ length: n }, (_, i) => [cell(`Task ${i + 1}`), cell('Yes')]),
34
+ ],
35
+ },
36
+ },
37
+ placement: { position: 'here' },
38
+ ...extra,
39
+ });
40
+ const PAGE = {
41
+ page: { width: pt(400), height: pt(400), margins: { top: pt(20), bottom: pt(20), left: pt(20), right: pt(20) } },
42
+ layout: { layoutType: 'double', gutterWidth: pt(12) },
43
+ bodyText: { fontSize: pt(10), lineHeight: pt(13) },
44
+ headings: { balancing: { enabled: false }, levels: [{ level: 1, breakBefore: { enabled: false } }] },
45
+ header: { elements: [] },
46
+ footer: { elements: [] },
47
+ };
48
+ const para = (i) => `Paragraph ${i} carries enough words to take a few lines of the narrow column so the flow advances steadily.`;
49
+ const filler = (n, from = 0) => Array.from({ length: n }, (_, i) => para(from + i)).join('\n\n');
50
+ const build = (markdown, resources, config = PAGE) => buildDocument({ markdown, resources }, config);
51
+ /** The table's slices in the flow, in reading order, with their column. */
52
+ const slicesOf = (doc, id) => doc.pages.flatMap((page) => page.columns.flatMap((col) => col.blocks
53
+ .filter((b) => b.type === 'resource' && b.resourceBlock?.resource.id === id)
54
+ .map((block) => ({ page, col, block }))));
55
+ const rbOf = (b) => b.resourceBlock;
56
+ const captionText = (b) => rbOf(b).captionLines.map((l) => l.text).join(' ');
57
+ const bodyRows = (b) => rbOf(b).table.cells.filter((c) => !c.isHeader).map((c) => c.row);
58
+ /** Three paragraphs, then a 40-row table, then a closing paragraph. */
59
+ const MD = `${filler(3)}\n\n::resource{id="tab"}\n\nThe paragraph after the table.\n\n${filler(4, 10)}`;
60
+ describe('inline tables split between rows (#634)', () => {
61
+ it('a 40-row table continues column after column, header repeated, caption suffixed, note on the last slice', () => {
62
+ const doc = build(MD, [table('tab', 40)]);
63
+ const slices = slicesOf(doc, 'tab');
64
+ expect(slices.length).toBeGreaterThan(1);
65
+ let next = 0;
66
+ slices.forEach(({ block }, i) => {
67
+ const rb = rbOf(block);
68
+ const slice = rb.slice;
69
+ expect(slice.startRow).toBe(next);
70
+ next = slice.endRow;
71
+ expect(slice.continued).toBe(i > 0);
72
+ expect(slice.continues).toBe(i < slices.length - 1);
73
+ // The header row is laid out on every slice.
74
+ const header = rb.table.cells.filter((c) => c.isHeader);
75
+ expect(header.length).toBe(2);
76
+ expect(header.every((c) => c.row === 0)).toBe(true);
77
+ expect(captionText(block).includes('(cont.)')).toBe(i > 0);
78
+ expect(rb.continuesLines.length > 0).toBe(i < slices.length - 1);
79
+ expect(rb.noteLines.length > 0).toBe(i === slices.length - 1);
80
+ });
81
+ expect(next).toBe(41);
82
+ // Each continuation opens its column, with no gap above it.
83
+ for (const { col, block } of slices.slice(1)) {
84
+ expect(col.blocks[0]).toBe(block);
85
+ expect(block.bbox.y).toBeCloseTo(col.bbox.y, 6);
86
+ }
87
+ // The first slice keeps at least the header and two body rows; the
88
+ // last at least three rows.
89
+ expect(bodyRows(slices[0].block).length / 2).toBeGreaterThanOrEqual(2);
90
+ expect(new Set(bodyRows(slices[slices.length - 1].block)).size).toBeGreaterThanOrEqual(MIN_TAIL_ROWS);
91
+ // Every slice sits in its column.
92
+ for (const { col, block } of slices) {
93
+ expect(block.bbox.y + block.bbox.height).toBeLessThanOrEqual(col.bbox.y + col.bbox.height + 0.5);
94
+ }
95
+ // The paragraph after the table follows its last slice, below it.
96
+ const last = slices[slices.length - 1];
97
+ const after = last.col.blocks[last.col.blocks.indexOf(last.block) + 1];
98
+ expect(after.lines[0].text).toContain('The paragraph after');
99
+ expect(after.bbox.y).toBeGreaterThan(last.block.bbox.y + last.block.bbox.height);
100
+ });
101
+ it('the first slice fills the column the table starts in', () => {
102
+ const doc = build(MD, [table('tab', 40)]);
103
+ const [first] = slicesOf(doc, 'tab');
104
+ // Preceded by the paragraphs, it takes the rest of the column.
105
+ expect(first.col.blocks.indexOf(first.block)).toBeGreaterThan(0);
106
+ const room = first.col.bbox.y + first.col.bbox.height - (first.block.bbox.y + first.block.bbox.height);
107
+ expect(room).toBeLessThan(40);
108
+ });
109
+ it('splitInline: false moves the table whole, as up to postext 1.24', () => {
110
+ const doc = build(MD, [table('tab', 12)], { ...PAGE, tableStyle: { splitInline: false } });
111
+ const slices = slicesOf(doc, 'tab');
112
+ expect(slices).toHaveLength(1);
113
+ expect(rbOf(slices[0].block).slice).toBeUndefined();
114
+ });
115
+ it('a table that fits its column is placed whole and unchanged', () => {
116
+ const md = `Intro paragraph.\n\n::resource{id="tab"}\n\nAfter.`;
117
+ const a = build(md, [table('tab', 5)]);
118
+ const b = build(md, [table('tab', 5)], { ...PAGE, tableStyle: { splitInline: false } });
119
+ const sa = slicesOf(a, 'tab');
120
+ expect(sa).toHaveLength(1);
121
+ expect(rbOf(sa[0].block).slice).toBeUndefined();
122
+ expect(JSON.stringify(a.pages)).toBe(JSON.stringify(b.pages));
123
+ });
124
+ it('a short table that does not fit moves whole (too few rows to cut)', () => {
125
+ const md = `${filler(5)}\n\n::resource{id="tab"}\n\nAfter.`;
126
+ const doc = build(md, [table('tab', 4)]);
127
+ expect(slicesOf(doc, 'tab')).toHaveLength(1);
128
+ });
129
+ it('never cuts through a rowspan, nor leaves a group head at a slice foot', () => {
130
+ const rows = [[cell('Group', { isHeader: true }), cell('Item', { isHeader: true })]];
131
+ for (let g = 0; g < 10; g++) {
132
+ rows.push([cell(`Group ${g}`, { colSpan: 2 })]);
133
+ rows.push([cell(`Span ${g}`, { rowSpan: 3 }), cell('a')]);
134
+ rows.push([cell('b')]);
135
+ rows.push([cell('c')]);
136
+ }
137
+ const doc = build(MD, [table('tab', 0, {}, rows)]);
138
+ const slices = slicesOf(doc, 'tab');
139
+ expect(slices.length).toBeGreaterThan(1);
140
+ for (const { block } of slices.slice(0, -1)) {
141
+ const end = rbOf(block).slice.endRow;
142
+ // Rows 1, 5, 9… are group heads; 2–4, 6–8… a rowspan of three.
143
+ const k = (end - 1) % 4;
144
+ expect(k).toBe(0); // the slice ends after the last row of a span
145
+ }
146
+ });
147
+ it("'clip' keeps the leading rows of a table taller than a column, at a column head", () => {
148
+ const doc = build(MD, [table('tab', 80)], { ...PAGE, tableStyle: { overflow: 'clip' } });
149
+ const slices = slicesOf(doc, 'tab');
150
+ expect(slices).toHaveLength(1);
151
+ const { col, block } = slices[0];
152
+ const rb = rbOf(block);
153
+ expect(col.blocks[0]).toBe(block);
154
+ expect(rb.slice).toEqual(expect.objectContaining({ startRow: 0, continued: false, continues: false }));
155
+ expect(rb.slice.endRow).toBeLessThan(81);
156
+ expect(rb.continuesLines).toEqual([]);
157
+ expect(block.bbox.y + block.bbox.height).toBeLessThanOrEqual(col.bbox.y + col.bbox.height + 0.5);
158
+ });
159
+ it("'hide' leaves out a table taller than a column; a shorter one stays", () => {
160
+ const hidden = build(MD, [table('tab', 80)], { ...PAGE, tableStyle: { overflow: 'hide' } });
161
+ expect(slicesOf(hidden, 'tab')).toHaveLength(0);
162
+ const kept = build(MD, [table('tab', 12)], { ...PAGE, tableStyle: { overflow: 'hide' } });
163
+ expect(slicesOf(kept, 'tab')).toHaveLength(1);
164
+ });
165
+ it('a named table style decides for its own tables', () => {
166
+ const config = { ...PAGE, tableStyles: [{ id: 'whole', splitInline: false }] };
167
+ const doc = build(MD, [table('tab', 40, { table: { styleId: 'whole', model: table('x', 40).table.model } })], config);
168
+ expect(slicesOf(doc, 'tab')).toHaveLength(1);
169
+ });
170
+ it('a continuation in a column of another width is laid out at that width', () => {
171
+ const config = {
172
+ ...PAGE,
173
+ page: { width: pt(400), height: pt(300), margins: { top: pt(20), bottom: pt(20), left: pt(20), right: pt(20) } },
174
+ layout: { layoutType: 'oneAndHalf', sideColumnRole: 'text', sideColumnPercent: 30, gutterWidth: pt(10) },
175
+ };
176
+ const doc = build(`${filler(2)}\n\n::resource{id="tab"}\n\nAfter.`, [table('tab', 40)], config);
177
+ const slices = slicesOf(doc, 'tab');
178
+ expect(slices.length).toBeGreaterThan(1);
179
+ const widths = new Set(slices.map(({ col }) => col.bbox.width.toFixed(1)));
180
+ expect(widths.size).toBeGreaterThan(1);
181
+ for (const { col, block } of slices) {
182
+ expect(rbOf(block).bodyRect.width).toBeLessThanOrEqual(col.bbox.width + 0.5);
183
+ expect(rbOf(block).bodyRect.width).toBeGreaterThan(col.bbox.width * 0.9);
184
+ }
185
+ });
186
+ it('a waiting page-wide top float takes the head of the page the table goes on to (EF-160)', () => {
187
+ const fig = {
188
+ id: 'fig', typeId: 'figure', kind: 'svg', caption: 'A figure.', createdAt: 0, updatedAt: 0,
189
+ svg: { fileId: 'f.svg', width: 400, height: 40 },
190
+ placement: { position: 'top', span: 'page' },
191
+ };
192
+ // The figure is cited in the column the table starts in, too late
193
+ // for a slot on that page.
194
+ const md = `${filler(6)}\n\nSee :ref{id="fig"}.\n\n::resource{id="tab"}\n\nAfter.\n\n${filler(6, 20)}`;
195
+ const doc = build(md, [table('tab', 60), fig]);
196
+ const slices = slicesOf(doc, 'tab');
197
+ expect(slices.length).toBeGreaterThan(1);
198
+ const figPage = doc.pages.find((p) => (p.floats ?? []).some((f) => f.resourceBlock?.resource.id === 'fig'));
199
+ const firstSlicePage = slices[0].page.index;
200
+ // The figure heads the page right after the table's first slice, and a
201
+ // slice of the table runs on under it.
202
+ expect(figPage.index).toBe(firstSlicePage + 1);
203
+ expect(slices.some(({ page }) => page.index === figPage.index)).toBe(true);
204
+ });
205
+ it('builds twice to the same pages with balancing on', () => {
206
+ const config = { ...PAGE, headings: { balancing: { enabled: true }, levels: [{ level: 1, breakBefore: { enabled: false } }] } };
207
+ const md = `# Title\n\n${MD}`;
208
+ const a = build(md, [table('tab', 40)], config);
209
+ const b = build(md, [table('tab', 40)], config);
210
+ expect(JSON.stringify(a.pages)).toBe(JSON.stringify(b.pages));
211
+ expect(slicesOf(a, 'tab').length).toBeGreaterThan(1);
212
+ });
213
+ });
214
+ describe('chooseTableSlice', () => {
215
+ const metrics = (n, header = 1) => ({
216
+ rowHeights: Array.from({ length: n }, () => 10),
217
+ headerRowCount: header,
218
+ breakableAfter: Array.from({ length: n }, () => true),
219
+ groupHeaderRow: Array.from({ length: n }, () => false),
220
+ });
221
+ it('cuts at the rows the budget holds and hands rows to a short tail', () => {
222
+ const m = metrics(21);
223
+ expect(chooseTableSlice(m, 0, 100, { floor: 3, force: false, split: true, fits: () => true }))
224
+ .toEqual({ startRow: 0, endRow: 10, continues: true });
225
+ // 19 of 21 rows fit: the closing slice would carry 2, so it gets 3.
226
+ expect(chooseTableSlice(m, 0, 190, { floor: 3, force: false, split: true, fits: () => true }).endRow).toBe(18);
227
+ });
228
+ it('returns null below the floor unless forced, and backs off while `fits` fails', () => {
229
+ const m = metrics(21);
230
+ expect(chooseTableSlice(m, 0, 20, { floor: 3, force: false, split: true, fits: () => true })).toBeNull();
231
+ expect(chooseTableSlice(m, 0, 20, { floor: 3, force: true, split: true, fits: () => true }).endRow).toBe(3);
232
+ expect(chooseTableSlice(m, 0, 100, { floor: 3, force: false, split: true, fits: (s) => s.endRow <= 7 }).endRow).toBe(7);
233
+ // `clip`: the leading rows, nothing goes on.
234
+ expect(chooseTableSlice(m, 0, 100, { floor: 2, force: false, split: false, fits: () => true }))
235
+ .toEqual({ startRow: 0, endRow: 10, continues: false });
236
+ });
237
+ });
238
+ //# sourceMappingURL=inlineTableSplit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlineTableSplit.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/inlineTableSplit.test.ts"],"names":[],"mappings":"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"}
@@ -182,7 +182,7 @@ describe('paragraphStyles[].snapToGrid (EF-184)', () => {
182
182
  describe('configurations stored before rules 8 keep the 1.4 space under containers', () => {
183
183
  const stored = { bodyText: { fontFamily: 'Georgia' }, paragraphStyles: [{ id: 's' }] };
184
184
  it('pins \'add\' when the book holds a :::paragraphs container', () => {
185
- expect(CONFIG_VERSION).toBe(10);
185
+ expect(CONFIG_VERSION).toBe(11);
186
186
  for (const version of [undefined, 3, 5, 6, 7]) {
187
187
  expect(migrateConfig(stored, version, { content: GROUP_THEN_HEADING }).bodyText?.paragraphContainerSpacing, `${version}`).toBe('add');
188
188
  }
@@ -168,7 +168,7 @@ describe('optimalRagged in the configuration', () => {
168
168
  expect(stripBodyTextDefaults({ optimalRagged: false })).toEqual({ optimalRagged: false });
169
169
  });
170
170
  it('is pinned off for configurations stored before rules 7 that set running text ragged', () => {
171
- expect(CONFIG_VERSION).toBe(10);
171
+ expect(CONFIG_VERSION).toBe(11);
172
172
  const ragged = { bodyText: { textAlign: 'left' } };
173
173
  for (const version of [undefined, 3, 5, 6]) {
174
174
  expect(migrateConfig(ragged, version, { content: 'Text.' }).bodyText, `${version}`).toEqual({ textAlign: 'left', optimalRagged: false });
@@ -58,8 +58,9 @@ describe('EF-175: the resolved configuration keeps its own copy of the palette',
58
58
  expect(first).toEqual({ heading: RED, swatch: RED, cell: RED });
59
59
  config.colorPalette[0].value.hex = TEAL;
60
60
  const second = colours(buildDocument(content, config));
61
- // Same object, same resolution: every colour keeps the first palette.
62
- expect(second).toEqual(first);
61
+ // Same object changed in place: the build notices (#629) and every
62
+ // colour takes the new palette, none keeps the old one.
63
+ expect(second).toEqual({ heading: TEAL, swatch: TEAL, cell: TEAL });
63
64
  // A new object is resolved afresh: every colour takes the new palette.
64
65
  const third = colours(buildDocument(content, { ...config }));
65
66
  expect(third).toEqual({ heading: TEAL, swatch: TEAL, cell: TEAL });
@@ -1 +1 @@
1
- {"version":3,"file":"resolvedPaletteCopy.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/resolvedPaletteCopy.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolvedPaletteCopy.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/resolvedPaletteCopy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sideBoxAfterText.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sideBoxAfterText.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/pipeline/sideBoxAfterText.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,163 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline/build';
3
+ import { createMeasurementCache } from '../../measure';
4
+ // Deterministic text measurement stub (no DOM in the node test env).
5
+ class StubCtx {
6
+ font = '';
7
+ measureText(s) {
8
+ return { width: s.length * 7 };
9
+ }
10
+ }
11
+ globalThis.OffscreenCanvas = class {
12
+ getContext() {
13
+ return new StubCtx();
14
+ }
15
+ };
16
+ const mm = (value) => ({ value, unit: 'mm' });
17
+ const pt = (value) => ({ value, unit: 'pt' });
18
+ /** The page of `sideBoxAtColumnEnd.test.ts`: eight 14 pt lines a page and a
19
+ * float-only side column. */
20
+ const config = (extra = {}) => ({
21
+ page: { width: mm(100), height: mm(60), dpi: 150, margins: { top: mm(10), bottom: mm(10.48), left: mm(10), right: mm(10) } },
22
+ layout: { layoutType: 'oneAndHalf', sideColumnPercent: 20, sideColumnRole: 'floats', gutterWidth: mm(3) },
23
+ bodyText: { fontSize: pt(10), lineHeight: pt(14), textAlign: 'left', firstLineIndent: pt(0) },
24
+ paragraphStyles: [{ id: 'v' }],
25
+ calloutStyles: [{ id: 'n', backgroundEnabled: false, padding: { top: pt(0), right: pt(0), bottom: pt(0), left: pt(0) } }],
26
+ header: { elements: [] },
27
+ footer: { elements: [] },
28
+ ...extra,
29
+ });
30
+ const box = (name, lines) => `:::callout{type="n" span="side"}\n${Array.from({ length: lines }, (_, i) => `:::paragraphs{style="v"}\n${name}${i + 1}\n:::`).join('\n\n')}\n:::`;
31
+ const text = (n) => Array.from({ length: n }, (_, i) => `:::paragraphs{style="v"}\nLine ${i + 1} of the text.\n:::`).join('\n\n');
32
+ const figure = (id, height) => ({
33
+ id, typeId: 'figure', kind: 'bitmap', createdAt: 0, updatedAt: 0,
34
+ bitmap: { fileId: `${id}.png`, format: 'png', width: 100, height },
35
+ placement: { span: 'side' },
36
+ });
37
+ const build = (markdown, cfg = config(), resources = []) => buildDocument({ markdown, resources }, cfg, createMeasurementCache());
38
+ /** Page of the first line of box `name`. */
39
+ const pageOf = (doc, name) => {
40
+ for (const page of doc.pages) {
41
+ if ((page.floats ?? []).some((b) => b.lines.some((l) => l.text === `${name}1`)))
42
+ return page.index;
43
+ }
44
+ return undefined;
45
+ };
46
+ const pagesOf = (doc, names) => [...names].map((n) => pageOf(doc, n));
47
+ /** Whether a page's text column holds a block. */
48
+ const holdsText = (doc, page) => doc.pages[page].columns.some((c) => c.kind !== 'side' && c.blocks.length > 0);
49
+ const afterText = (doc) => (doc.contentWarnings ?? []).filter((w) => w.kind === 'afterText');
50
+ const unplaced = (doc) => (doc.contentWarnings ?? []).filter((w) => w.kind === 'unplaced');
51
+ describe('side boxes still waiting when the text ends (#639)', () => {
52
+ it('sets each of them, in order, on pages after the text, and reports those pages', () => {
53
+ for (const names of ['ABC', 'ABCD']) {
54
+ for (const lines of [5, 6, 7]) {
55
+ const md = [text(3), ...[...names].map((n) => box(n, lines))].join('\n\n');
56
+ const doc = build(md);
57
+ // A stands beside the text; every other box takes a page after it.
58
+ expect(pagesOf(doc, names)).toEqual([...names].map((_, i) => i));
59
+ expect(doc.pages).toHaveLength(names.length);
60
+ expect(holdsText(doc, 0)).toBe(true);
61
+ for (let p = 1; p < names.length; p++)
62
+ expect(holdsText(doc, p)).toBe(false);
63
+ // One warning per page with no text, pointing at its box.
64
+ const found = afterText(doc);
65
+ expect(found.map((w) => w.pageIndex)).toEqual([...names].slice(1).map((_, i) => i + 1));
66
+ [...names].slice(1).forEach((n, i) => {
67
+ expect(md.slice(found[i].sourceStart, found[i].sourceEnd)).toContain(`${n}1`);
68
+ expect(md.slice(found[i].sourceStart, found[i].sourceEnd)).toMatch(/^:::callout/);
69
+ });
70
+ expect(unplaced(doc)).toEqual([]);
71
+ expect(doc.warnings ?? []).toEqual([]);
72
+ }
73
+ }
74
+ });
75
+ it('sets them before a chapter barrier, none on the pages of the next chapter', () => {
76
+ const cfg = config({ headings: { levels: [{ level: 1, breakBefore: { enabled: true, parity: 'any' } }] } });
77
+ const md = [text(3), box('A', 5), box('B', 5), box('C', 5), box('D', 5), '# Next chapter', text(2)].join('\n\n');
78
+ const doc = build(md, cfg);
79
+ expect(pagesOf(doc, 'ABCD')).toEqual([0, 1, 2, 3]);
80
+ const heading = doc.blocks.find((b) => b.type === 'heading');
81
+ expect(heading.pageIndex).toBe(4);
82
+ expect(doc.pages).toHaveLength(5);
83
+ expect(doc.pages[4].floats ?? []).toEqual([]);
84
+ expect(afterText(doc).map((w) => w.pageIndex)).toEqual([1, 2, 3]);
85
+ expect(unplaced(doc)).toEqual([]);
86
+ });
87
+ it('does the same in vertical text', () => {
88
+ // Sixteen lines a tier there: nine-line boxes do not share one.
89
+ const cfg = config({ layout: { layoutType: 'oneAndHalf', sideColumnPercent: 20, sideColumnRole: 'floats', gutterWidth: mm(3), writingMode: 'vertical-rl' } });
90
+ for (const names of ['ABC', 'ABCD']) {
91
+ const doc = build([text(3), ...[...names].map((n) => box(n, 9))].join('\n\n'), cfg);
92
+ expect(pagesOf(doc, names)).toEqual([...names].map((_, i) => i));
93
+ expect(afterText(doc).map((w) => w.pageIndex)).toEqual([...names].slice(1).map((_, i) => i + 1));
94
+ expect(unplaced(doc)).toEqual([]);
95
+ }
96
+ // And before a chapter barrier.
97
+ const barrier = config({
98
+ layout: { layoutType: 'oneAndHalf', sideColumnPercent: 20, sideColumnRole: 'floats', gutterWidth: mm(3), writingMode: 'vertical-rl' },
99
+ headings: { levels: [{ level: 1, breakBefore: { enabled: true, parity: 'any' } }] },
100
+ });
101
+ const doc = build([text(3), box('A', 9), box('B', 9), box('C', 9), '# Next chapter', text(2)].join('\n\n'), barrier);
102
+ expect(pagesOf(doc, 'ABC')).toEqual([0, 1, 2]);
103
+ expect(doc.blocks.find((b) => b.type === 'heading').pageIndex).toBe(3);
104
+ });
105
+ it('shares a page after the text between boxes that fit one side column', () => {
106
+ // Three-line boxes: two to a column of eight lines, with the gap.
107
+ const doc = build([text(6), box('A', 3), box('B', 3), box('C', 3), box('D', 3)].join('\n\n'));
108
+ expect(pagesOf(doc, 'ABCD')).toEqual([0, 1, 1, 2]);
109
+ expect(afterText(doc).map((w) => w.pageIndex)).toEqual([1, 1, 2]);
110
+ });
111
+ it('keeps a side figure queued behind them after them', () => {
112
+ // Ten lines a page: the figure (its label under it, three lines with
113
+ // its gap) would fit under B on page 2, where C, fenced before the
114
+ // figure's citation, does not.
115
+ const tall = config({ page: { width: mm(100), height: mm(69.88), dpi: 150, margins: { top: mm(10), bottom: mm(10.48), left: mm(10), right: mm(10) } } });
116
+ const cite = ':::paragraphs{style="v"}\nSee :ref{id="f"} here.\n:::';
117
+ const md = [text(5), box('A', 5), box('B', 5), box('C', 5), cite].join('\n\n');
118
+ const doc = build(md, tall, [figure('f', 25)]);
119
+ const figurePage = doc.pages.find((p) => (p.floats ?? []).some((b) => b.resourceBlock?.resource.id === 'f'));
120
+ expect(pagesOf(doc, 'ABC')).toEqual([0, 1, 2]);
121
+ expect(figurePage.index).toBe(2);
122
+ const c = figurePage.floats.find((b) => b.type === 'callout');
123
+ const f = figurePage.floats.find((b) => b.resourceBlock?.resource.id === 'f');
124
+ expect(f.bbox.y).toBeGreaterThanOrEqual(c.bbox.y + c.bbox.height - 0.01);
125
+ // The figure is reported with the block that cites it.
126
+ const found = afterText(doc).find((w) => w.resourceId === 'f');
127
+ expect(found.pageIndex).toBe(2);
128
+ expect(md.slice(found.sourceStart, found.sourceEnd)).toContain(':ref{id="f"}');
129
+ });
130
+ it('sets a box taller than an empty side column anyway, and reports the overflow', () => {
131
+ const md = [text(3), box('A', 5), box('B', 11), box('C', 5)].join('\n\n');
132
+ const doc = build(md);
133
+ expect(pagesOf(doc, 'ABC')).toEqual([0, 1, 2]);
134
+ const side = doc.pages[1].columns.find((c) => c.kind === 'side');
135
+ expect(doc.warnings).toHaveLength(1);
136
+ expect(doc.warnings[0]).toMatchObject({ kind: 'calloutOverflow', pageIndex: 1, columnIndex: side.index });
137
+ expect(doc.warnings[0].overflowPx).toBeGreaterThan(0);
138
+ expect(md.slice(doc.warnings[0].sourceStart, doc.warnings[0].sourceEnd)).toContain('B1');
139
+ });
140
+ it('reports a box no page it opens can take instead of dropping it', () => {
141
+ // The section the last heading opens has no side column: the pages
142
+ // opened after the text cannot take the box still waiting.
143
+ const cfg = config({
144
+ headings: { levels: [{ level: 2, breakBefore: { enabled: false } }] },
145
+ headingStyles: [{ id: 'plain', layout: { layoutType: 'single' } }],
146
+ });
147
+ const md = [text(1), '## Section {style="plain"}', text(1), box('A', 6), box('B', 6)].join('\n\n');
148
+ const doc = build(md, cfg);
149
+ expect(pageOf(doc, 'A')).toBe(0);
150
+ expect(pageOf(doc, 'B')).toBeUndefined();
151
+ const found = unplaced(doc);
152
+ expect(found).toHaveLength(1);
153
+ expect(found[0].pageIndex).toBeUndefined();
154
+ expect(md.slice(found[0].sourceStart, found[0].sourceEnd)).toContain('B1');
155
+ expect(afterText(doc)).toEqual([]);
156
+ });
157
+ it('raises nothing when the side column holds every box', () => {
158
+ const doc = build([text(8), box('A', 2), text(4), box('B', 2)].join('\n\n'));
159
+ expect(doc.contentWarnings ?? []).toEqual([]);
160
+ expect(doc.warnings ?? []).toEqual([]);
161
+ });
162
+ });
163
+ //# sourceMappingURL=sideBoxAfterText.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sideBoxAfterText.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/sideBoxAfterText.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAGvD,qEAAqE;AACrE,MAAM,OAAO;IACX,IAAI,GAAG,EAAE,CAAC;IACV,WAAW,CAAC,CAAS;QACnB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACjC,CAAC;CACF;AACA,UAAsD,CAAC,eAAe,GAAG;IACxE,UAAU;QACR,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAC;AAEF,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC;AAC/D,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC;AAE/D;8BAC8B;AAC9B,MAAM,MAAM,GAAG,CAAC,QAAgC,EAAE,EAAiB,EAAE,CAAC,CAAC;IACrE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAC5H,MAAM,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;IACzG,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;IAC7F,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACzH,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxB,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxB,GAAG,KAAK;CACT,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAClD,qCAAqC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,6BAA6B,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACrJ,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kCAAkC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAElJ,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,MAAc,EAAY,EAAE,CAAC,CAAC;IACxD,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;IAChE,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE;IAClE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,MAAqB,MAAM,EAAE,EAAE,YAAwB,EAAE,EAAe,EAAE,CACzG,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAExE,4CAA4C;AAC5C,MAAM,MAAM,GAAG,CAAC,GAAgB,EAAE,IAAY,EAAsB,EAAE;IACpE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IACrG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AACF,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAE,KAAa,EAA0B,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACnH,kDAAkD;AAClD,MAAM,SAAS,GAAG,CAAC,GAAgB,EAAE,IAAY,EAAW,EAAE,CAC5D,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjF,MAAM,SAAS,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AAC1G,MAAM,QAAQ,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AAExG,QAAQ,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAClE,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtB,mEAAmE;gBACnE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7E,0DAA0D;gBAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxF,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACnC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAChF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBACtF,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5G,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjH,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAE,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,gEAAgE;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAC9J,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YACpF,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,gCAAgC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC;YACrB,MAAM,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE;YACrI,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE;SACpF,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,kEAAkE;QAClE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9F,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,qEAAqE;QACrE,mEAAmE;QACnE,+BAA+B;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzJ,MAAM,IAAI,GAAG,uDAAuD,CAAC;QACrE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,CAAC,CAAE,CAAC;QAC9G,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAE,CAAC;QAChE,MAAM,CAAC,GAAG,UAAU,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,CAAE,CAAC;QAChF,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACzE,uDAAuD;QACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAE,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3G,MAAM,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAS,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,CAAC,QAAS,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,mEAAmE;QACnE,2DAA2D;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC;YACjB,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE;YACrE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC;SACnE,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,4BAA4B,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnG,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prepareFonts.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareFonts.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/prepareFonts.test.ts"],"names":[],"mappings":""}