postext 1.46.4 → 1.48.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 (353) hide show
  1. package/dist/__tests__/bundle/designOverflowPin.test.js +1 -1
  2. package/dist/__tests__/bundle/gridBreakRulesPin.test.js +2 -2
  3. package/dist/__tests__/bundle/shapingLanguagePin.test.js +3 -3
  4. package/dist/__tests__/bundle/taskBoxPin.test.js +1 -1
  5. package/dist/__tests__/bundle.test.js +1 -1
  6. package/dist/__tests__/codeBlocks.test.js +1 -1
  7. package/dist/__tests__/comics/config.test.js +20 -0
  8. package/dist/__tests__/comics/config.test.js.map +1 -1
  9. package/dist/__tests__/composed/cardShapes.test.d.ts +2 -0
  10. package/dist/__tests__/composed/cardShapes.test.d.ts.map +1 -0
  11. package/dist/__tests__/composed/cardShapes.test.js +82 -0
  12. package/dist/__tests__/composed/cardShapes.test.js.map +1 -0
  13. package/dist/__tests__/composed/connectors.test.d.ts +2 -0
  14. package/dist/__tests__/composed/connectors.test.d.ts.map +1 -0
  15. package/dist/__tests__/composed/connectors.test.js +349 -0
  16. package/dist/__tests__/composed/connectors.test.js.map +1 -0
  17. package/dist/__tests__/composed/decorationSidePoints.test.d.ts +2 -0
  18. package/dist/__tests__/composed/decorationSidePoints.test.d.ts.map +1 -0
  19. package/dist/__tests__/composed/decorationSidePoints.test.js +164 -0
  20. package/dist/__tests__/composed/decorationSidePoints.test.js.map +1 -0
  21. package/dist/__tests__/composed/fit.test.js +2 -1
  22. package/dist/__tests__/composed/fit.test.js.map +1 -1
  23. package/dist/__tests__/composed/fixtures/connectors.d.ts +33 -0
  24. package/dist/__tests__/composed/fixtures/connectors.d.ts.map +1 -0
  25. package/dist/__tests__/composed/fixtures/connectors.js +142 -0
  26. package/dist/__tests__/composed/fixtures/connectors.js.map +1 -0
  27. package/dist/__tests__/composed/fixtures/grid.d.ts +32 -0
  28. package/dist/__tests__/composed/fixtures/grid.d.ts.map +1 -0
  29. package/dist/__tests__/composed/fixtures/grid.js +53 -0
  30. package/dist/__tests__/composed/fixtures/grid.js.map +1 -0
  31. package/dist/__tests__/composed/fixtures/legendMap.d.ts +24 -0
  32. package/dist/__tests__/composed/fixtures/legendMap.d.ts.map +1 -0
  33. package/dist/__tests__/composed/fixtures/legendMap.js +117 -0
  34. package/dist/__tests__/composed/fixtures/legendMap.js.map +1 -0
  35. package/dist/__tests__/composed/fixtures/mapParts.d.ts +58 -0
  36. package/dist/__tests__/composed/fixtures/mapParts.d.ts.map +1 -0
  37. package/dist/__tests__/composed/fixtures/mapParts.js +192 -0
  38. package/dist/__tests__/composed/fixtures/mapParts.js.map +1 -0
  39. package/dist/__tests__/composed/fixtures/modules.d.ts +55 -0
  40. package/dist/__tests__/composed/fixtures/modules.d.ts.map +1 -0
  41. package/dist/__tests__/composed/fixtures/modules.js +123 -0
  42. package/dist/__tests__/composed/fixtures/modules.js.map +1 -0
  43. package/dist/__tests__/composed/grid.test.d.ts +2 -0
  44. package/dist/__tests__/composed/grid.test.d.ts.map +1 -0
  45. package/dist/__tests__/composed/grid.test.js +357 -0
  46. package/dist/__tests__/composed/grid.test.js.map +1 -0
  47. package/dist/__tests__/composed/groups.test.js +6 -3
  48. package/dist/__tests__/composed/groups.test.js.map +1 -1
  49. package/dist/__tests__/composed/labelLegend.test.d.ts +2 -0
  50. package/dist/__tests__/composed/labelLegend.test.d.ts.map +1 -0
  51. package/dist/__tests__/composed/labelLegend.test.js +268 -0
  52. package/dist/__tests__/composed/labelLegend.test.js.map +1 -0
  53. package/dist/__tests__/composed/labelsChecks.test.js.map +1 -1
  54. package/dist/__tests__/composed/leaders.test.d.ts +2 -0
  55. package/dist/__tests__/composed/leaders.test.d.ts.map +1 -0
  56. package/dist/__tests__/composed/leaders.test.js +372 -0
  57. package/dist/__tests__/composed/leaders.test.js.map +1 -0
  58. package/dist/__tests__/composed/modules.test.d.ts +2 -0
  59. package/dist/__tests__/composed/modules.test.d.ts.map +1 -0
  60. package/dist/__tests__/composed/modules.test.js +352 -0
  61. package/dist/__tests__/composed/modules.test.js.map +1 -0
  62. package/dist/__tests__/composed/overConnectors.test.d.ts +2 -0
  63. package/dist/__tests__/composed/overConnectors.test.d.ts.map +1 -0
  64. package/dist/__tests__/composed/overConnectors.test.js +232 -0
  65. package/dist/__tests__/composed/overConnectors.test.js.map +1 -0
  66. package/dist/__tests__/composed/overlap.test.d.ts +2 -0
  67. package/dist/__tests__/composed/overlap.test.d.ts.map +1 -0
  68. package/dist/__tests__/composed/overlap.test.js +339 -0
  69. package/dist/__tests__/composed/overlap.test.js.map +1 -0
  70. package/dist/__tests__/composed/viewerLeaf.test.d.ts +2 -0
  71. package/dist/__tests__/composed/viewerLeaf.test.d.ts.map +1 -0
  72. package/dist/__tests__/composed/viewerLeaf.test.js +106 -0
  73. package/dist/__tests__/composed/viewerLeaf.test.js.map +1 -0
  74. package/dist/__tests__/composedTemplates.test.js +1 -1
  75. package/dist/__tests__/design/boxShape.test.d.ts +2 -0
  76. package/dist/__tests__/design/boxShape.test.d.ts.map +1 -0
  77. package/dist/__tests__/design/boxShape.test.js +126 -0
  78. package/dist/__tests__/design/boxShape.test.js.map +1 -0
  79. package/dist/__tests__/design/boxShapePaint.test.d.ts +2 -0
  80. package/dist/__tests__/design/boxShapePaint.test.d.ts.map +1 -0
  81. package/dist/__tests__/design/boxShapePaint.test.js +130 -0
  82. package/dist/__tests__/design/boxShapePaint.test.js.map +1 -0
  83. package/dist/__tests__/design/openerBottomAnchor.test.js.map +1 -1
  84. package/dist/__tests__/design/pathBlock.test.d.ts +2 -0
  85. package/dist/__tests__/design/pathBlock.test.d.ts.map +1 -0
  86. package/dist/__tests__/design/pathBlock.test.js +194 -0
  87. package/dist/__tests__/design/pathBlock.test.js.map +1 -0
  88. package/dist/__tests__/design/pathElement.test.d.ts +2 -0
  89. package/dist/__tests__/design/pathElement.test.d.ts.map +1 -0
  90. package/dist/__tests__/design/pathElement.test.js +257 -0
  91. package/dist/__tests__/design/pathElement.test.js.map +1 -0
  92. package/dist/__tests__/design/svgPath.test.d.ts +2 -0
  93. package/dist/__tests__/design/svgPath.test.d.ts.map +1 -0
  94. package/dist/__tests__/design/svgPath.test.js +144 -0
  95. package/dist/__tests__/design/svgPath.test.js.map +1 -0
  96. package/dist/__tests__/exports.test.js +53 -0
  97. package/dist/__tests__/exports.test.js.map +1 -1
  98. package/dist/__tests__/fontUsage.test.js +46 -0
  99. package/dist/__tests__/fontUsage.test.js.map +1 -1
  100. package/dist/__tests__/hardBreaks.test.js +1 -1
  101. package/dist/__tests__/headingInlineMarks.test.js +1 -1
  102. package/dist/__tests__/labelGlyphPaint.test.d.ts +2 -0
  103. package/dist/__tests__/labelGlyphPaint.test.d.ts.map +1 -0
  104. package/dist/__tests__/labelGlyphPaint.test.js +86 -0
  105. package/dist/__tests__/labelGlyphPaint.test.js.map +1 -0
  106. package/dist/__tests__/mathSizeMigration.test.js +2 -2
  107. package/dist/__tests__/migrate/labelsOnPictures.test.js +1 -1
  108. package/dist/__tests__/migrate/labelsOnPictures.test.js.map +1 -1
  109. package/dist/__tests__/parse/containers.test.js +1 -1
  110. package/dist/__tests__/parse/containers.test.js.map +1 -1
  111. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
  112. package/dist/__tests__/pipeline/calloutLabelGlyph.test.d.ts +2 -0
  113. package/dist/__tests__/pipeline/calloutLabelGlyph.test.d.ts.map +1 -0
  114. package/dist/__tests__/pipeline/calloutLabelGlyph.test.js +198 -0
  115. package/dist/__tests__/pipeline/calloutLabelGlyph.test.js.map +1 -0
  116. package/dist/__tests__/pipeline/calloutShapes.test.d.ts +2 -0
  117. package/dist/__tests__/pipeline/calloutShapes.test.d.ts.map +1 -0
  118. package/dist/__tests__/pipeline/calloutShapes.test.js +159 -0
  119. package/dist/__tests__/pipeline/calloutShapes.test.js.map +1 -0
  120. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
  121. package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
  122. package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
  123. package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
  124. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
  125. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
  126. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
  127. package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
  128. package/dist/__tests__/prepareFonts.test.js +8 -6
  129. package/dist/__tests__/prepareFonts.test.js.map +1 -1
  130. package/dist/__tests__/verseLines.test.js +1 -1
  131. package/dist/bundle/configVersion.d.ts +12 -3
  132. package/dist/bundle/configVersion.d.ts.map +1 -1
  133. package/dist/bundle/configVersion.js +16 -5
  134. package/dist/bundle/configVersion.js.map +1 -1
  135. package/dist/canvas-backend/blockRender.js +3 -3
  136. package/dist/canvas-backend/blockRender.js.map +1 -1
  137. package/dist/canvas-backend/composed.d.ts +4 -2
  138. package/dist/canvas-backend/composed.d.ts.map +1 -1
  139. package/dist/canvas-backend/composed.js +12 -7
  140. package/dist/canvas-backend/composed.js.map +1 -1
  141. package/dist/canvas-backend/headerFooter.d.ts +17 -1
  142. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  143. package/dist/canvas-backend/headerFooter.js +64 -1
  144. package/dist/canvas-backend/headerFooter.js.map +1 -1
  145. package/dist/canvas-backend/index.d.ts.map +1 -1
  146. package/dist/canvas-backend/index.js +7 -1
  147. package/dist/canvas-backend/index.js.map +1 -1
  148. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  149. package/dist/canvas-backend/renderResourceBlock.js +17 -6
  150. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  151. package/dist/canvas-backend/swatch.d.ts +20 -1
  152. package/dist/canvas-backend/swatch.d.ts.map +1 -1
  153. package/dist/canvas-backend/swatch.js +51 -1
  154. package/dist/canvas-backend/swatch.js.map +1 -1
  155. package/dist/comics/fonts.d.ts +19 -0
  156. package/dist/comics/fonts.d.ts.map +1 -1
  157. package/dist/comics/fonts.js +70 -17
  158. package/dist/comics/fonts.js.map +1 -1
  159. package/dist/comics/layoutPage.d.ts.map +1 -1
  160. package/dist/comics/layoutPage.js +6 -1
  161. package/dist/comics/layoutPage.js.map +1 -1
  162. package/dist/composed/continuation.d.ts +10 -2
  163. package/dist/composed/continuation.d.ts.map +1 -1
  164. package/dist/composed/continuation.js +10 -2
  165. package/dist/composed/continuation.js.map +1 -1
  166. package/dist/composed/document.d.ts +45 -1
  167. package/dist/composed/document.d.ts.map +1 -1
  168. package/dist/composed/document.js +76 -17
  169. package/dist/composed/document.js.map +1 -1
  170. package/dist/composed/labelText.d.ts +9 -1
  171. package/dist/composed/labelText.d.ts.map +1 -1
  172. package/dist/composed/labelText.js +23 -1
  173. package/dist/composed/labelText.js.map +1 -1
  174. package/dist/composed/labels.d.ts +57 -3
  175. package/dist/composed/labels.d.ts.map +1 -1
  176. package/dist/composed/labels.js +261 -12
  177. package/dist/composed/labels.js.map +1 -1
  178. package/dist/composed/modules.d.ts +30 -0
  179. package/dist/composed/modules.d.ts.map +1 -0
  180. package/dist/composed/modules.js +194 -0
  181. package/dist/composed/modules.js.map +1 -0
  182. package/dist/composed/overlap.d.ts +52 -0
  183. package/dist/composed/overlap.d.ts.map +1 -0
  184. package/dist/composed/overlap.js +611 -0
  185. package/dist/composed/overlap.js.map +1 -0
  186. package/dist/composed/paint.d.ts +28 -5
  187. package/dist/composed/paint.d.ts.map +1 -1
  188. package/dist/composed/paint.js +26 -5
  189. package/dist/composed/paint.js.map +1 -1
  190. package/dist/composed/reflowLog.d.ts +6 -1
  191. package/dist/composed/reflowLog.d.ts.map +1 -1
  192. package/dist/composed/reflowLog.js +43 -0
  193. package/dist/composed/reflowLog.js.map +1 -1
  194. package/dist/composed/repeat.d.ts +66 -0
  195. package/dist/composed/repeat.d.ts.map +1 -0
  196. package/dist/composed/repeat.js +217 -0
  197. package/dist/composed/repeat.js.map +1 -0
  198. package/dist/composed/slotChecks.d.ts +1 -1
  199. package/dist/composed/slotChecks.d.ts.map +1 -1
  200. package/dist/composed/slotChecks.js +114 -8
  201. package/dist/composed/slotChecks.js.map +1 -1
  202. package/dist/composed/sourceMap.d.ts.map +1 -1
  203. package/dist/composed/sourceMap.js +16 -4
  204. package/dist/composed/sourceMap.js.map +1 -1
  205. package/dist/composed/spread.d.ts.map +1 -1
  206. package/dist/composed/spread.js +6 -2
  207. package/dist/composed/spread.js.map +1 -1
  208. package/dist/composed/templates.d.ts +22 -2
  209. package/dist/composed/templates.d.ts.map +1 -1
  210. package/dist/composed/templates.js +159 -9
  211. package/dist/composed/templates.js.map +1 -1
  212. package/dist/composed/types.d.ts +140 -7
  213. package/dist/composed/types.d.ts.map +1 -1
  214. package/dist/composed/validate.d.ts +1 -1
  215. package/dist/composed/validate.d.ts.map +1 -1
  216. package/dist/composed/validate.js +101 -4
  217. package/dist/composed/validate.js.map +1 -1
  218. package/dist/composed/wrap.d.ts.map +1 -1
  219. package/dist/composed/wrap.js +95 -17
  220. package/dist/composed/wrap.js.map +1 -1
  221. package/dist/configWarnings.d.ts +7 -1
  222. package/dist/configWarnings.d.ts.map +1 -1
  223. package/dist/configWarnings.js +275 -4
  224. package/dist/configWarnings.js.map +1 -1
  225. package/dist/contrast.d.ts.map +1 -1
  226. package/dist/contrast.js +8 -0
  227. package/dist/contrast.js.map +1 -1
  228. package/dist/defaults/calloutStyles.d.ts +10 -1
  229. package/dist/defaults/calloutStyles.d.ts.map +1 -1
  230. package/dist/defaults/calloutStyles.js +46 -7
  231. package/dist/defaults/calloutStyles.js.map +1 -1
  232. package/dist/defaults/comics.d.ts +2 -1
  233. package/dist/defaults/comics.d.ts.map +1 -1
  234. package/dist/defaults/comics.js +18 -3
  235. package/dist/defaults/comics.js.map +1 -1
  236. package/dist/defaults/headerFooter.d.ts.map +1 -1
  237. package/dist/defaults/headerFooter.js +38 -0
  238. package/dist/defaults/headerFooter.js.map +1 -1
  239. package/dist/design/boxShape.d.ts +101 -0
  240. package/dist/design/boxShape.d.ts.map +1 -0
  241. package/dist/design/boxShape.js +398 -0
  242. package/dist/design/boxShape.js.map +1 -0
  243. package/dist/design/connector.d.ts +75 -0
  244. package/dist/design/connector.d.ts.map +1 -0
  245. package/dist/design/connector.js +325 -0
  246. package/dist/design/connector.js.map +1 -0
  247. package/dist/design/layout.d.ts +56 -3
  248. package/dist/design/layout.d.ts.map +1 -1
  249. package/dist/design/layout.js +214 -12
  250. package/dist/design/layout.js.map +1 -1
  251. package/dist/design/logicalEdges.d.ts +7 -0
  252. package/dist/design/logicalEdges.d.ts.map +1 -1
  253. package/dist/design/logicalEdges.js +28 -0
  254. package/dist/design/logicalEdges.js.map +1 -1
  255. package/dist/design/pathBlock.d.ts +69 -0
  256. package/dist/design/pathBlock.d.ts.map +1 -0
  257. package/dist/design/pathBlock.js +286 -0
  258. package/dist/design/pathBlock.js.map +1 -0
  259. package/dist/design/svgPath.d.ts +48 -0
  260. package/dist/design/svgPath.d.ts.map +1 -0
  261. package/dist/design/svgPath.js +402 -0
  262. package/dist/design/svgPath.js.map +1 -0
  263. package/dist/fonts/usage.d.ts +5 -0
  264. package/dist/fonts/usage.d.ts.map +1 -1
  265. package/dist/fonts/usage.js +81 -11
  266. package/dist/fonts/usage.js.map +1 -1
  267. package/dist/html-backend.d.ts.map +1 -1
  268. package/dist/html-backend.js +127 -22
  269. package/dist/html-backend.js.map +1 -1
  270. package/dist/index.d.ts +19 -9
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +13 -5
  273. package/dist/index.js.map +1 -1
  274. package/dist/measure/cache.js +1 -1
  275. package/dist/measure/cache.js.map +1 -1
  276. package/dist/measure/inlineIcon.d.ts +34 -0
  277. package/dist/measure/inlineIcon.d.ts.map +1 -0
  278. package/dist/measure/inlineIcon.js +89 -0
  279. package/dist/measure/inlineIcon.js.map +1 -0
  280. package/dist/measure/rich.d.ts +2 -1
  281. package/dist/measure/rich.d.ts.map +1 -1
  282. package/dist/measure/rich.js +6 -0
  283. package/dist/measure/rich.js.map +1 -1
  284. package/dist/migrate/pageDesign.d.ts.map +1 -1
  285. package/dist/migrate/pageDesign.js +4 -2
  286. package/dist/migrate/pageDesign.js.map +1 -1
  287. package/dist/migrate/textToMarkdown.js +2 -0
  288. package/dist/migrate/textToMarkdown.js.map +1 -1
  289. package/dist/parse/blockParser.d.ts.map +1 -1
  290. package/dist/parse/blockParser.js +171 -20
  291. package/dist/parse/blockParser.js.map +1 -1
  292. package/dist/parse/index.d.ts +1 -1
  293. package/dist/parse/index.d.ts.map +1 -1
  294. package/dist/parse/index.js.map +1 -1
  295. package/dist/parse/inlineFormatting.d.ts +11 -3
  296. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  297. package/dist/parse/inlineFormatting.js +63 -5
  298. package/dist/parse/inlineFormatting.js.map +1 -1
  299. package/dist/parse/inlineSnippet.d.ts +2 -1
  300. package/dist/parse/inlineSnippet.d.ts.map +1 -1
  301. package/dist/parse/inlineSnippet.js +3 -2
  302. package/dist/parse/inlineSnippet.js.map +1 -1
  303. package/dist/parse/sourceMapping.d.ts.map +1 -1
  304. package/dist/parse/sourceMapping.js +8 -1
  305. package/dist/parse/sourceMapping.js.map +1 -1
  306. package/dist/parse/types.d.ts +71 -1
  307. package/dist/parse/types.d.ts.map +1 -1
  308. package/dist/pipeline/build.d.ts.map +1 -1
  309. package/dist/pipeline/build.js +67 -13
  310. package/dist/pipeline/build.js.map +1 -1
  311. package/dist/pipeline/buildHelpers.d.ts +10 -0
  312. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  313. package/dist/pipeline/buildHelpers.js +17 -0
  314. package/dist/pipeline/buildHelpers.js.map +1 -1
  315. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  316. package/dist/pipeline/buildMeasurement.js +23 -11
  317. package/dist/pipeline/buildMeasurement.js.map +1 -1
  318. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  319. package/dist/pipeline/calloutLayout.js +142 -32
  320. package/dist/pipeline/calloutLayout.js.map +1 -1
  321. package/dist/pipeline/composedLayout.d.ts +1 -33
  322. package/dist/pipeline/composedLayout.d.ts.map +1 -1
  323. package/dist/pipeline/composedLayout.js +526 -36
  324. package/dist/pipeline/composedLayout.js.map +1 -1
  325. package/dist/pipeline/config.d.ts.map +1 -1
  326. package/dist/pipeline/config.js +12 -0
  327. package/dist/pipeline/config.js.map +1 -1
  328. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  329. package/dist/pipeline/contentWarnings.js +46 -1
  330. package/dist/pipeline/contentWarnings.js.map +1 -1
  331. package/dist/pipeline/continuation.d.ts.map +1 -1
  332. package/dist/pipeline/continuation.js +3 -2
  333. package/dist/pipeline/continuation.js.map +1 -1
  334. package/dist/pipeline/headerFooter.d.ts +19 -1
  335. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  336. package/dist/pipeline/headerFooter.js +169 -17
  337. package/dist/pipeline/headerFooter.js.map +1 -1
  338. package/dist/pipeline/partPalette.d.ts.map +1 -1
  339. package/dist/pipeline/partPalette.js +40 -1
  340. package/dist/pipeline/partPalette.js.map +1 -1
  341. package/dist/pipeline/resourceLayout.d.ts +1 -1
  342. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  343. package/dist/pipeline/resourceLayout.js +44 -15
  344. package/dist/pipeline/resourceLayout.js.map +1 -1
  345. package/dist/preflight.d.ts.map +1 -1
  346. package/dist/preflight.js +36 -1
  347. package/dist/preflight.js.map +1 -1
  348. package/dist/types.d.ts +319 -22
  349. package/dist/types.d.ts.map +1 -1
  350. package/dist/vdt.d.ts +392 -12
  351. package/dist/vdt.d.ts.map +1 -1
  352. package/dist/vdt.js.map +1 -1
  353. package/package.json +1 -1
@@ -6,15 +6,17 @@ import { applyTitleBreaks, parseInlineFormatting, replaceTitleBreaks } from '../
6
6
  import { createBoundingBox, flowRectToPage, pageIsMirrored, pageIsVertical, } from '../vdt';
7
7
  import { computeChapterTitles, computeChapterTitlesAtTop, computeChapterNumbers, computeChapterNumbersAtTop, computeChapterNumbersByBlock, computeChapterAttrs, computePageMarks, computePartValues, lineJoin, markSourceOf } from './placeholders';
8
8
  import { parsePartNumber, parsePartPalette, partMarkPages } from './parts';
9
- import { computePageMetrics, sheetRectToFlow } from './buildHelpers';
9
+ import { composedLeafConfig, computePageMetrics, onComposedLeaf, sheetRectToFlow } from './buildHelpers';
10
10
  import { arabicNumbersOf, resolvedLocale } from './config';
11
11
  import { classifyPages } from './pageRoles';
12
12
  import { computeSectionStyles, createHeadingLevelResolver, headingIsHidden } from './headingStyles';
13
13
  import { dimensionToPx } from '../units';
14
14
  import { resolveDesignLineHeight, resolveDesignSlot } from '../defaults/headerFooter';
15
- import { resolvePageTemplate } from '../composed/templates';
15
+ import { repeatInstance, resolvePageTemplate } from '../composed/templates';
16
16
  import { splitSpreadDecoration } from '../composed/spread';
17
+ import { pathInkBox } from '../design/pathBlock';
17
18
  import { frameOfBlock, framePageRect } from '../composed/paint';
19
+ import { figureAnchorPointOnPage } from '../composed/labels';
18
20
  import { layoutDesignSlot, textVerticalOffset, trailingTracking, } from '../design/layout';
19
21
  import { resolveDesignText } from '../design/placeholders';
20
22
  import { plainDesignText } from '../design/richText';
@@ -74,8 +76,27 @@ export function primitiveToBlock(prim) {
74
76
  return rulePrimitiveToBlock(prim);
75
77
  if (prim.kind === 'image')
76
78
  return imagePrimitiveToBlock(prim);
79
+ if (prim.kind === 'path')
80
+ return pathPrimitiveToBlock(prim);
77
81
  return boxPrimitiveToBlock(prim);
78
82
  }
83
+ /** A path element's outline as the vector block (#1060): the block's box
84
+ * is the ink's (`pathInkBox`), for hit tests and clips. */
85
+ function pathPrimitiveToBlock(prim) {
86
+ const block = {
87
+ kind: 'path',
88
+ bbox: createBoundingBox(0, 0, 0, 0),
89
+ subpaths: prim.subpaths.map((sp) => sp.map((c) => ({ ...c }))),
90
+ ...(prim.fill ? { fill: prim.fill } : {}),
91
+ ...(prim.stroke ? { stroke: { ...prim.stroke, ...(prim.stroke.dash ? { dash: [...prim.stroke.dash] } : {}) } } : {}),
92
+ // A connector's end marks (#1056).
93
+ ...(prim.markers ? { markers: prim.markers.map((m) => ({ ...m })) } : {}),
94
+ // Painted after the frames (#1076).
95
+ ...(prim.over ? { over: true } : {}),
96
+ };
97
+ block.bbox = pathInkBox(block);
98
+ return block;
99
+ }
79
100
  function imagePrimitiveToBlock(prim) {
80
101
  return {
81
102
  kind: 'image',
@@ -120,6 +141,7 @@ function textPrimitiveToBlock(prim) {
120
141
  borderColor: prim.box.borderColor,
121
142
  borderWidthPx: prim.box.borderWidthPx,
122
143
  borderRadiusPx: prim.box.borderRadiusPx,
144
+ ...shapeFields(prim.box),
123
145
  }
124
146
  : undefined,
125
147
  clip: prim.needsClip,
@@ -167,9 +189,17 @@ function boxPrimitiveToBlock(prim) {
167
189
  borderColor: prim.box.borderColor,
168
190
  borderWidthPx: prim.box.borderWidthPx,
169
191
  borderRadiusPx: prim.box.borderRadiusPx,
192
+ ...shapeFields(prim.box),
170
193
  },
171
194
  };
172
195
  }
196
+ /** A box's corners of their own and border per side (#1059), copied. */
197
+ function shapeFields(box) {
198
+ return {
199
+ ...(box.borderRadiiPx ? { borderRadiiPx: [...box.borderRadiiPx] } : {}),
200
+ ...(box.borderSides ? { borderSides: { ...box.borderSides } } : {}),
201
+ };
202
+ }
173
203
  /** Where a primitive's reservation ends: its foot, except for a drop cap,
174
204
  * whose line box runs a quarter of its size under its baseline. The letter
175
205
  * sits inside its paragraph's lines, so it reserves nothing below the text
@@ -211,7 +241,7 @@ export function headingDesignBoxes(level, heading, container, dpi, metadata, pag
211
241
  if (!level.advancedDesign.enabled || level.advancedDesign.slot.elements.length === 0)
212
242
  return [];
213
243
  const result = layoutDesignSlot(level.advancedDesign.slot, { container, dpi, placeholders: headingPlaceholders(heading, metadata, pageIndex), frames, resourceById }, pageIndex);
214
- const excluded = new Set(level.advancedDesign.slot.elements.filter((el) => el.reserve === false).map((el) => el.id));
244
+ const excluded = new Set(level.advancedDesign.slot.elements.filter((el) => el.kind !== 'connector' && el.reserve === false).map((el) => el.id));
215
245
  const out = [];
216
246
  result.primitives.forEach((prim, i) => {
217
247
  if (excluded.has(result.elementIds[i]))
@@ -294,7 +324,7 @@ function measureDesignBand(design, heading, width, dpi, metadata, pageIndex, fra
294
324
  const taller = result.primitives.some((p) => p.y + p.height > MEASURE_CONTAINER_HEIGHT / 4)
295
325
  ? layoutAt(2 * MEASURE_CONTAINER_HEIGHT)
296
326
  : result;
297
- const excluded = new Set(design.slot.elements.filter((el) => el.reserve === false).map((el) => el.id));
327
+ const excluded = new Set(design.slot.elements.filter((el) => el.kind !== 'connector' && el.reserve === false).map((el) => el.id));
298
328
  let bottom = 0;
299
329
  let claimedBy;
300
330
  let textFloor = 0;
@@ -433,6 +463,20 @@ export function layoutSlotToVdt(slot, container, pageIndex, placeholders, dpi, e
433
463
  ...(extras?.startRight ? { startRight: true } : {}),
434
464
  ...(extras?.arabicNumbers ? { arabicNumbers: true } : {}),
435
465
  }, pageIndex);
466
+ if (extras?.connectorDropped) {
467
+ for (const issue of result.issues)
468
+ if (issue.kind === 'connectorDropped')
469
+ extras.connectorDropped.push({ elementId: issue.elementId, targetId: issue.targetId });
470
+ }
471
+ if (extras?.connectorAnchorUnknown) {
472
+ for (const issue of result.issues) {
473
+ if (issue.kind !== 'connectorAnchorUnknown')
474
+ continue;
475
+ const { kind: _kind, ...rest } = issue;
476
+ void _kind;
477
+ extras.connectorAnchorUnknown.push(rest);
478
+ }
479
+ }
436
480
  if (result.primitives.length === 0)
437
481
  return undefined;
438
482
  const sourceByElement = new Map();
@@ -937,6 +981,15 @@ export function framesInFrame(frames, frame) {
937
981
  const back = (r) => ({ x: o.x + (r.x - o.x) / s, y: o.y + (r.y - o.y) / s, width: r.width / s, height: r.height / s });
938
982
  return { ...frames, page: back(frames.page), bleed: back(frames.bleed), ...(frames.outer ? { outer: back(frames.outer) } : {}) };
939
983
  }
984
+ /** The ends of connectors at an anchor no picture of their frame has
985
+ * (#1057), per document, as `labelAnchorUnknown` warnings with the
986
+ * connector's id (read by {@link connectorAnchorUnknownWarnings}). */
987
+ const connectorAnchorWarnings = new WeakMap();
988
+ /** The `labelAnchorUnknown` warnings of the connectors of `doc`'s composed
989
+ * pages (#1057): an end set at an anchor no picture of its frame has. */
990
+ export function connectorAnchorUnknownWarnings(doc) {
991
+ return connectorAnchorWarnings.get(doc) ?? [];
992
+ }
940
993
  export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
941
994
  // Each page's slots measure their text in the writing mode they are set
942
995
  // in (see the loop); the mode in force before is put back.
@@ -955,12 +1008,21 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
955
1008
  // Header and footer are laid out on the sheet on every page; every other
956
1009
  // slot (openers, part pages, overlays) in the page's flow frame, so on a
957
1010
  // vertical page their text reads vertically.
958
- const physicalFrames = { page: metrics.physical.trimBox, bleed: metrics.physical.bleedBox };
959
- const verticalFrames = {
960
- page: sheetRectToFlow(metrics.physical.trimBox, metrics.pageWidthPx),
961
- bleed: sheetRectToFlow(metrics.physical.bleedBox, metrics.pageWidthPx),
962
- upright: true,
963
- };
1011
+ const framesOf = (m) => ({
1012
+ physical: { page: m.physical.trimBox, bleed: m.physical.bleedBox },
1013
+ vertical: {
1014
+ page: sheetRectToFlow(m.physical.trimBox, m.pageWidthPx),
1015
+ bleed: sheetRectToFlow(m.physical.bleedBox, m.pageWidthPx),
1016
+ upright: true,
1017
+ },
1018
+ });
1019
+ const docFrames = framesOf(metrics);
1020
+ // A composed page laid out on a host's leaf (`composedViewerLeaf`,
1021
+ // #1045) has the leaf's sheet: its decoration and furniture are laid on
1022
+ // it.
1023
+ const leafConfig = composedLeafConfig(resolved);
1024
+ const leafMetrics = leafConfig ? computePageMetrics(leafConfig) : undefined;
1025
+ const leafFrames = leafMetrics ? framesOf(leafMetrics) : undefined;
964
1026
  // Page roles drive the per-element `pages` filter of every slot below.
965
1027
  classifyPages(doc, resolved);
966
1028
  // The headings a composed page's frames set (#874) count as running
@@ -1051,6 +1113,9 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1051
1113
  // page's flow does; running heads and folios are horizontal on the
1052
1114
  // sheet, whatever the flow (see below).
1053
1115
  setMeasureWritingMode(pageIsVertical(page) ? 'vertical-rl' : 'horizontal-tb');
1116
+ const onLeaf = leafMetrics !== undefined && onComposedLeaf(resolved, page);
1117
+ const pageMetrics = onLeaf ? leafMetrics : metrics;
1118
+ const { physical: physicalFrames, vertical: verticalFrames } = onLeaf ? leafFrames : docFrames;
1054
1119
  // Per-page content area: mirrored margins swap inner/outer on even pages.
1055
1120
  const contentArea = page.contentArea;
1056
1121
  // A right-to-left page lays these out in its mirrored flow, whose trim
@@ -1072,7 +1137,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1072
1137
  // side away from the spine (it swaps with the binding and the page's
1073
1138
  // parity, as mirrored margins do).
1074
1139
  const sheetArea = flowRectToPage(page, contentArea);
1075
- const trim = metrics.physical.trimBox;
1140
+ const trim = pageMetrics.physical.trimBox;
1076
1141
  const recto = (page.index + pageIndexOffset) % 2 === 0;
1077
1142
  const outerRight = recto !== (resolved.page.binding === 'right');
1078
1143
  const outer = outerRight
@@ -1086,7 +1151,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1086
1151
  // A composed page (#855) takes its template's running heads: a slot of
1087
1152
  // its own, `false` for none, unset for the section's.
1088
1153
  const template = page.composed
1089
- ? resolvePageTemplate({ pageTemplates: resolved.pageTemplates, calloutStyles: resolved.calloutStyles }, page.composed.template, { parity: recto ? 'recto' : 'verso' })
1154
+ ? resolvePageTemplate({ pageTemplates: resolved.pageTemplates, calloutStyles: resolved.calloutStyles }, page.composed.template, { parity: recto ? 'recto' : 'verso', ...(page.composed.modules ? { modules: page.composed.modules } : {}) })
1090
1155
  : undefined;
1091
1156
  const pageAttrs = page.composed && Object.keys(page.composed.attrs).length > 0 ? page.composed.attrs : undefined;
1092
1157
  const templateSlot = (own, kind, inherited) => own === false ? { elements: [] } : own ? resolveDesignSlot(own, kind) : inherited;
@@ -1133,7 +1198,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1133
1198
  partNumberByPageIndex,
1134
1199
  partPaletteByPageIndex,
1135
1200
  };
1136
- page.header = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(headerSlot, headerContainerBbox(sheetArea, metrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, { ...headExtras, slot: 'header', ...withPath(slotPath('header')) })));
1201
+ page.header = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(headerSlot, headerContainerBbox(sheetArea, pageMetrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, { ...headExtras, slot: 'header', ...withPath(slotPath('header')) })));
1137
1202
  }
1138
1203
  // Back of a part divider: a blank page right after a part page takes the
1139
1204
  // part's verso design (the model book tints the whole leaf). The part
@@ -1430,7 +1495,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1430
1495
  partNumberByPageIndex,
1431
1496
  partPaletteByPageIndex,
1432
1497
  };
1433
- page.footer = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(footerSlot, footerContainerBbox(sheetArea, metrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, { ...headExtras, slot: 'footer', ...withPath(slotPath('footer')) })));
1498
+ page.footer = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(footerSlot, footerContainerBbox(sheetArea, pageMetrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, { ...headExtras, slot: 'footer', ...withPath(slotPath('footer')) })));
1434
1499
  }
1435
1500
  // The template's decoration, laid with the frames' final boxes (its
1436
1501
  // elements may anchor to `'#frame'`), on the sheet like the running
@@ -1442,8 +1507,8 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1442
1507
  const ruled = (p) => (p?.composed?.frames ?? []).some((f) => f.rules && !f.facingBlocks);
1443
1508
  if (page.composed && template && (template.decoration.elements.length > 0 || ruled(page) || ruled(facing)) && !(facing && spreadDecorated.has(page.index))) {
1444
1509
  const pair = facing?.composed?.spread && page.composed.spread ? { left: page.composed.spread === 'left' ? page : facing, right: page.composed.spread === 'left' ? facing : page } : undefined;
1445
- const trimBox = metrics.physical.trimBox;
1446
- const bleedBox = metrics.physical.bleedBox;
1510
+ const trimBox = pageMetrics.physical.trimBox;
1511
+ const bleedBox = pageMetrics.physical.bleedBox;
1447
1512
  const shift = trimBox.width;
1448
1513
  /** A frame's box on the sheet (of the spread, the right page's set
1449
1514
  * `shift` along). */
@@ -1454,6 +1519,10 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1454
1519
  /** Frames that take no room on the page (#912): what anchors to
1455
1520
  * them is not drawn. */
1456
1521
  const collapsed = new Set();
1522
+ /** Frames a connector does not reach (#1056): collapsed, or empty and
1523
+ * optional. */
1524
+ const absent = new Set();
1525
+ const optional = new Set(template.frames.filter((f) => f.optional).map((f) => f.name));
1457
1526
  /** Empty frames' ruled lines (#914), on the sheet. */
1458
1527
  const rules = [];
1459
1528
  /** The counter of the first numbered heading each frame holds
@@ -1461,12 +1530,17 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1461
1530
  const headingNumberByFrame = {};
1462
1531
  let headingNumber;
1463
1532
  const floatById = new Map();
1533
+ /** The page and the blocks of each frame, for a connector's end at
1534
+ * an anchor of the picture it holds (#1057). */
1535
+ const frameBlocks = new Map();
1464
1536
  const nameFrames = (p, dx) => {
1465
1537
  for (const b of p.floats ?? [])
1466
1538
  floatById.set(b.id, b);
1467
1539
  for (const f of p.composed?.frames ?? []) {
1468
1540
  if (f.collapsed)
1469
1541
  collapsed.add(f.name);
1542
+ if (f.collapsed || (optional.has(f.repeat?.frame ?? f.name) && f.sourceStart === undefined && f.continuedFrom === undefined))
1543
+ absent.add(f.name);
1470
1544
  if (!f.facingBlocks) {
1471
1545
  for (const id of f.blockIds) {
1472
1546
  const n = floatById.get(id)?.headingNumber;
@@ -1485,12 +1559,23 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1485
1559
  const d = flowRectToPage(p, framePageRect({ rect: f.declaredRect ?? f.rect, writingMode: f.writingMode }));
1486
1560
  named[f.name] = { ...r, x: r.x + dx };
1487
1561
  declared[f.name] = { ...d, x: d.x + dx };
1562
+ frameBlocks.set(f.name, { page: p, dx, blocks: f.blockIds.map((id) => floatById.get(id)).filter((b) => b !== undefined) });
1488
1563
  for (const rule of f.rules ?? []) {
1489
1564
  // A vertical page's flow turns a rule across its lines.
1490
1565
  const b = flowRectToPage(p, rule.bbox);
1491
1566
  rules.push({ ...rule, bbox: { ...b, x: b.x + dx }, direction: b.height > b.width ? 'vertical' : 'horizontal' });
1492
1567
  }
1493
1568
  }
1569
+ // A module's box (#1062): what its decoration anchored to its
1570
+ // `'container'` reads (`#<name>`). A module laid elsewhere has none
1571
+ // here, and its decoration is not drawn.
1572
+ for (const m of p.composed?.modules ?? []) {
1573
+ if (!m.rect || named[m.name] !== undefined)
1574
+ continue;
1575
+ const r = flowRectToPage(p, m.rect);
1576
+ named[m.name] = { ...r, x: r.x + dx };
1577
+ declared[m.name] = { ...r, x: r.x + dx };
1578
+ }
1494
1579
  };
1495
1580
  let container;
1496
1581
  let slotFrames = physicalFrames;
@@ -1534,12 +1619,76 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1534
1619
  ...(headingNumber !== undefined ? { headingNumber } : {}),
1535
1620
  ...(Object.keys(headingNumberByFrame).length > 0 ? { headingNumberByFrame } : {}),
1536
1621
  };
1622
+ // An element anchored to an instance of a repeated frame (#1061) the
1623
+ // page does not have (`#card[5]` on a page of three cards) is not
1624
+ // drawn, as one anchored to a frame that takes no room. So is one
1625
+ // anchored to a module (#1062), or a frame of it, that went on whole.
1626
+ const ofModule = new Set((template.modules ?? []).flatMap((m) => [m.name, ...m.frames, ...m.groups]));
1627
+ for (const el of template.decoration.elements) {
1628
+ const to = el.placement?.anchor?.to;
1629
+ const t = typeof to === 'string' && to.startsWith('#') ? to.slice(1) : undefined;
1630
+ if (t !== undefined && named[t] === undefined && (repeatInstance(t) !== undefined || ofModule.has(t)))
1631
+ collapsed.add(t);
1632
+ }
1537
1633
  const slot = resolveDesignSlot(template.decoration, 'header');
1634
+ const connectorDropped = [];
1635
+ const connectorAnchorUnknown = [];
1636
+ // A connector's end at an anchor of the picture its frame holds
1637
+ // (#1057): the first figure of the frame whose resource has it.
1638
+ const anchorPoint = (frame, anchor) => {
1639
+ const held = frameBlocks.get(frame);
1640
+ let first;
1641
+ for (const b of held?.blocks ?? []) {
1642
+ const rb = b.resourceBlock;
1643
+ if (!rb || (rb.kind !== 'bitmap' && rb.kind !== 'svg'))
1644
+ continue;
1645
+ first ??= b;
1646
+ const at = figureAnchorPointOnPage(held.page, b, anchor);
1647
+ if (!at)
1648
+ continue;
1649
+ const p = { x: at.x + held.dx, y: at.y };
1650
+ // A point the frame cuts off (its picture runs past the frame's
1651
+ // foot) is not shown on the page.
1652
+ const box = named[frame];
1653
+ if (box && (p.x < box.x - 0.5 || p.x > box.x + box.width + 0.5 || p.y < box.y - 0.5 || p.y > box.y + box.height + 0.5))
1654
+ return { hidden: true };
1655
+ return p;
1656
+ }
1657
+ const res = first?.resourceBlock?.resource;
1658
+ return res ? { resourceId: res.id, known: (res.anchors ?? []).map((a) => a.id) } : { known: [] };
1659
+ };
1538
1660
  const laidDecoration = template.decoration.elements.length === 0 ? undefined : withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(collapsed.size > 0 ? withoutAnchoredTo(slot, collapsed) : slot, container, page.index + pageIndexOffset, placeholders, dpi, {
1539
- ...sheetExtras, frames: { ...slotFrames, named, declared }, attrs: page.composed.attrs, attrSources,
1661
+ ...sheetExtras, frames: { ...slotFrames, named, declared, ...(absent.size > 0 ? { absent } : {}), anchorPoint }, attrs: page.composed.attrs, attrSources, connectorDropped, connectorAnchorUnknown,
1540
1662
  // Each element's pointer, from the template that sets it (#857).
1541
1663
  elementPaths: new Map(resolveDesignSlot(template.decoration, 'header').elements.map((el, i) => [el.id, template.decorationPaths[i]])),
1542
1664
  }));
1665
+ // The ends connectors left out, in the reflow log of the page laid
1666
+ // (of a spread, its first page); a pass that lays the decoration
1667
+ // again replaces them.
1668
+ for (const p of pair ? [pair.left, pair.right] : [page]) {
1669
+ if (p.composed?.log.some((e) => e.kind === 'connectorDropped'))
1670
+ p.composed.log = p.composed.log.filter((e) => e.kind !== 'connectorDropped');
1671
+ }
1672
+ for (const d of connectorDropped)
1673
+ page.composed.log.push({ frame: d.targetId, kind: 'connectorDropped', cause: d.elementId });
1674
+ // Ends at an anchor the frame's picture lacks (#1057): a content
1675
+ // warning on the page laid, once per pass.
1676
+ const unknown = connectorAnchorWarnings.get(doc) ?? [];
1677
+ const kept = unknown.filter((w) => !(pair ? [pair.left.index, pair.right.index] : [page.index]).includes(w.pageIndex ?? -1));
1678
+ for (const d of connectorAnchorUnknown) {
1679
+ kept.push({
1680
+ kind: 'labelAnchorUnknown',
1681
+ resourceId: d.resourceId ?? '',
1682
+ anchor: d.anchor,
1683
+ known: d.known,
1684
+ connector: d.elementId,
1685
+ frame: d.targetId,
1686
+ ...(doc.config?.locale ? { locale: doc.config.locale } : {}),
1687
+ pageIndex: page.index,
1688
+ });
1689
+ }
1690
+ if (kept.length > 0 || unknown.length > 0)
1691
+ connectorAnchorWarnings.set(doc, kept);
1543
1692
  const decoration = rules.length === 0 ? laidDecoration
1544
1693
  : laidDecoration ? { ...laidDecoration, blocks: [...laidDecoration.blocks, ...rules] } : { bbox: { ...container }, blocks: rules };
1545
1694
  if (decoration && pair) {
@@ -1560,6 +1709,9 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
1560
1709
  function withoutAnchoredTo(slot, frames) {
1561
1710
  const dropped = new Set();
1562
1711
  const target = (el) => {
1712
+ // A connector (#1056) drops its own ends on frames the page lacks.
1713
+ if (el.kind === 'connector')
1714
+ return undefined;
1563
1715
  const to = el.placement.anchor.to;
1564
1716
  return to.startsWith('#') ? to.slice(1) : undefined;
1565
1717
  };