postext 1.34.0 → 1.35.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 (245) hide show
  1. package/dist/__tests__/bundle.test.js +33 -1
  2. package/dist/__tests__/bundle.test.js.map +1 -1
  3. package/dist/__tests__/codeBlocks.test.js +88 -0
  4. package/dist/__tests__/codeBlocks.test.js.map +1 -1
  5. package/dist/__tests__/composed/fixtures/page8.d.ts +20 -0
  6. package/dist/__tests__/composed/fixtures/page8.d.ts.map +1 -0
  7. package/dist/__tests__/composed/fixtures/page8.js +162 -0
  8. package/dist/__tests__/composed/fixtures/page8.js.map +1 -0
  9. package/dist/__tests__/composed/fixtures/timeline.d.ts +26 -0
  10. package/dist/__tests__/composed/fixtures/timeline.d.ts.map +1 -0
  11. package/dist/__tests__/composed/fixtures/timeline.js +153 -0
  12. package/dist/__tests__/composed/fixtures/timeline.js.map +1 -0
  13. package/dist/__tests__/composed/groups.test.d.ts +2 -0
  14. package/dist/__tests__/composed/groups.test.d.ts.map +1 -0
  15. package/dist/__tests__/composed/groups.test.js +361 -0
  16. package/dist/__tests__/composed/groups.test.js.map +1 -0
  17. package/dist/__tests__/composed/layout.test.d.ts +2 -0
  18. package/dist/__tests__/composed/layout.test.d.ts.map +1 -0
  19. package/dist/__tests__/composed/layout.test.js +387 -0
  20. package/dist/__tests__/composed/layout.test.js.map +1 -0
  21. package/dist/__tests__/composed/outsidePrint.test.d.ts +2 -0
  22. package/dist/__tests__/composed/outsidePrint.test.d.ts.map +1 -0
  23. package/dist/__tests__/composed/outsidePrint.test.js +116 -0
  24. package/dist/__tests__/composed/outsidePrint.test.js.map +1 -0
  25. package/dist/__tests__/composed/slotChecks.test.js +6 -3
  26. package/dist/__tests__/composed/slotChecks.test.js.map +1 -1
  27. package/dist/__tests__/composed/spread.test.d.ts +2 -0
  28. package/dist/__tests__/composed/spread.test.d.ts.map +1 -0
  29. package/dist/__tests__/composed/spread.test.js +475 -0
  30. package/dist/__tests__/composed/spread.test.js.map +1 -0
  31. package/dist/__tests__/composedPaint.test.d.ts +2 -0
  32. package/dist/__tests__/composedPaint.test.d.ts.map +1 -0
  33. package/dist/__tests__/composedPaint.test.js +199 -0
  34. package/dist/__tests__/composedPaint.test.js.map +1 -0
  35. package/dist/__tests__/defaults/stripRoundTrip.test.js +3 -2
  36. package/dist/__tests__/defaults/stripRoundTrip.test.js.map +1 -1
  37. package/dist/__tests__/exports.test.js +25 -0
  38. package/dist/__tests__/exports.test.js.map +1 -1
  39. package/dist/__tests__/highlightMarks.test.d.ts +2 -0
  40. package/dist/__tests__/highlightMarks.test.d.ts.map +1 -0
  41. package/dist/__tests__/highlightMarks.test.js +169 -0
  42. package/dist/__tests__/highlightMarks.test.js.map +1 -0
  43. package/dist/__tests__/tocPartLeader.test.d.ts +2 -0
  44. package/dist/__tests__/tocPartLeader.test.d.ts.map +1 -0
  45. package/dist/__tests__/tocPartLeader.test.js +133 -0
  46. package/dist/__tests__/tocPartLeader.test.js.map +1 -0
  47. package/dist/bundle/api.d.ts +8 -0
  48. package/dist/bundle/api.d.ts.map +1 -1
  49. package/dist/bundle/api.js +6 -3
  50. package/dist/bundle/api.js.map +1 -1
  51. package/dist/bundle/codec.d.ts +5 -0
  52. package/dist/bundle/codec.d.ts.map +1 -1
  53. package/dist/bundle/codec.js +4 -0
  54. package/dist/bundle/codec.js.map +1 -1
  55. package/dist/bundle/index.d.ts +2 -2
  56. package/dist/bundle/index.d.ts.map +1 -1
  57. package/dist/bundle/index.js +1 -1
  58. package/dist/bundle/index.js.map +1 -1
  59. package/dist/bundle/manifest.d.ts +14 -0
  60. package/dist/bundle/manifest.d.ts.map +1 -1
  61. package/dist/bundle/manifest.js +13 -0
  62. package/dist/bundle/manifest.js.map +1 -1
  63. package/dist/bundle/types.d.ts +7 -0
  64. package/dist/bundle/types.d.ts.map +1 -1
  65. package/dist/canvas-backend/annotations.d.ts +6 -0
  66. package/dist/canvas-backend/annotations.d.ts.map +1 -1
  67. package/dist/canvas-backend/annotations.js +39 -0
  68. package/dist/canvas-backend/annotations.js.map +1 -1
  69. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  70. package/dist/canvas-backend/blockRender.js +6 -1
  71. package/dist/canvas-backend/blockRender.js.map +1 -1
  72. package/dist/canvas-backend/composed.d.ts +19 -0
  73. package/dist/canvas-backend/composed.d.ts.map +1 -0
  74. package/dist/canvas-backend/composed.js +68 -0
  75. package/dist/canvas-backend/composed.js.map +1 -0
  76. package/dist/canvas-backend/index.d.ts.map +1 -1
  77. package/dist/canvas-backend/index.js +15 -1
  78. package/dist/canvas-backend/index.js.map +1 -1
  79. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  80. package/dist/canvas-backend/renderResourceBlock.js +4 -1
  81. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  82. package/dist/composed/geometry.d.ts +108 -0
  83. package/dist/composed/geometry.d.ts.map +1 -0
  84. package/dist/composed/geometry.js +241 -0
  85. package/dist/composed/geometry.js.map +1 -0
  86. package/dist/composed/groups.d.ts +95 -0
  87. package/dist/composed/groups.d.ts.map +1 -0
  88. package/dist/composed/groups.js +359 -0
  89. package/dist/composed/groups.js.map +1 -0
  90. package/dist/composed/labelText.d.ts +15 -0
  91. package/dist/composed/labelText.d.ts.map +1 -0
  92. package/dist/composed/labelText.js +16 -0
  93. package/dist/composed/labelText.js.map +1 -0
  94. package/dist/composed/paint.d.ts +64 -0
  95. package/dist/composed/paint.d.ts.map +1 -0
  96. package/dist/composed/paint.js +128 -0
  97. package/dist/composed/paint.js.map +1 -0
  98. package/dist/composed/reflowLog.d.ts +39 -0
  99. package/dist/composed/reflowLog.d.ts.map +1 -0
  100. package/dist/composed/reflowLog.js +123 -0
  101. package/dist/composed/reflowLog.js.map +1 -0
  102. package/dist/composed/slotChecks.d.ts +7 -2
  103. package/dist/composed/slotChecks.d.ts.map +1 -1
  104. package/dist/composed/slotChecks.js +21 -0
  105. package/dist/composed/slotChecks.js.map +1 -1
  106. package/dist/composed/spread.d.ts +106 -0
  107. package/dist/composed/spread.d.ts.map +1 -0
  108. package/dist/composed/spread.js +178 -0
  109. package/dist/composed/spread.js.map +1 -0
  110. package/dist/composed/types.d.ts +1 -44
  111. package/dist/composed/types.d.ts.map +1 -1
  112. package/dist/composed/wrap.d.ts +52 -0
  113. package/dist/composed/wrap.d.ts.map +1 -0
  114. package/dist/composed/wrap.js +234 -0
  115. package/dist/composed/wrap.js.map +1 -0
  116. package/dist/configWarnings.js +1 -1
  117. package/dist/configWarnings.js.map +1 -1
  118. package/dist/defaults/codeStyle.d.ts.map +1 -1
  119. package/dist/defaults/codeStyle.js +1 -0
  120. package/dist/defaults/codeStyle.js.map +1 -1
  121. package/dist/defaults/headerFooter.d.ts.map +1 -1
  122. package/dist/defaults/headerFooter.js +4 -0
  123. package/dist/defaults/headerFooter.js.map +1 -1
  124. package/dist/defaults/index.d.ts +1 -0
  125. package/dist/defaults/index.d.ts.map +1 -1
  126. package/dist/defaults/index.js +9 -0
  127. package/dist/defaults/index.js.map +1 -1
  128. package/dist/defaults/markStyles.d.ts +23 -0
  129. package/dist/defaults/markStyles.d.ts.map +1 -0
  130. package/dist/defaults/markStyles.js +80 -0
  131. package/dist/defaults/markStyles.js.map +1 -0
  132. package/dist/defaults/shared.d.ts.map +1 -1
  133. package/dist/defaults/shared.js +12 -0
  134. package/dist/defaults/shared.js.map +1 -1
  135. package/dist/design/bidiText.d.ts +4 -1
  136. package/dist/design/bidiText.d.ts.map +1 -1
  137. package/dist/design/bidiText.js +5 -2
  138. package/dist/design/bidiText.js.map +1 -1
  139. package/dist/design/layout.d.ts +19 -0
  140. package/dist/design/layout.d.ts.map +1 -1
  141. package/dist/design/layout.js +110 -8
  142. package/dist/design/layout.js.map +1 -1
  143. package/dist/design/placeholders.d.ts +28 -2
  144. package/dist/design/placeholders.d.ts.map +1 -1
  145. package/dist/design/placeholders.js +24 -1
  146. package/dist/design/placeholders.js.map +1 -1
  147. package/dist/design/richText.d.ts +2 -0
  148. package/dist/design/richText.d.ts.map +1 -1
  149. package/dist/design/richText.js.map +1 -1
  150. package/dist/highlightMarks.d.ts +33 -0
  151. package/dist/highlightMarks.d.ts.map +1 -0
  152. package/dist/highlightMarks.js +209 -0
  153. package/dist/highlightMarks.js.map +1 -0
  154. package/dist/html-backend.d.ts.map +1 -1
  155. package/dist/html-backend.js +96 -9
  156. package/dist/html-backend.js.map +1 -1
  157. package/dist/htmlAnnotations.d.ts +5 -0
  158. package/dist/htmlAnnotations.d.ts.map +1 -1
  159. package/dist/htmlAnnotations.js +16 -0
  160. package/dist/htmlAnnotations.js.map +1 -1
  161. package/dist/index.d.ts +13 -4
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +12 -2
  164. package/dist/index.js.map +1 -1
  165. package/dist/knuthPlass/richAdapter.d.ts +3 -0
  166. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  167. package/dist/knuthPlass/richAdapter.js +3 -2
  168. package/dist/knuthPlass/richAdapter.js.map +1 -1
  169. package/dist/measure/cache.js +3 -3
  170. package/dist/measure/cache.js.map +1 -1
  171. package/dist/measure/chipEdges.d.ts +13 -1
  172. package/dist/measure/chipEdges.d.ts.map +1 -1
  173. package/dist/measure/chipEdges.js +59 -1
  174. package/dist/measure/chipEdges.js.map +1 -1
  175. package/dist/measure/links.d.ts.map +1 -1
  176. package/dist/measure/links.js +78 -5
  177. package/dist/measure/links.js.map +1 -1
  178. package/dist/measure/rich.d.ts +3 -0
  179. package/dist/measure/rich.d.ts.map +1 -1
  180. package/dist/measure/rich.js +19 -4
  181. package/dist/measure/rich.js.map +1 -1
  182. package/dist/parse/inlineFormatting.d.ts +14 -0
  183. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  184. package/dist/parse/inlineFormatting.js +104 -5
  185. package/dist/parse/inlineFormatting.js.map +1 -1
  186. package/dist/parse/links.js +1 -1
  187. package/dist/parse/links.js.map +1 -1
  188. package/dist/parse/softBreaks.js +1 -1
  189. package/dist/parse/softBreaks.js.map +1 -1
  190. package/dist/parse/sourceMapping.d.ts.map +1 -1
  191. package/dist/parse/sourceMapping.js +19 -3
  192. package/dist/parse/sourceMapping.js.map +1 -1
  193. package/dist/parse/types.d.ts +24 -0
  194. package/dist/parse/types.d.ts.map +1 -1
  195. package/dist/pipeline/build.d.ts.map +1 -1
  196. package/dist/pipeline/build.js +213 -301
  197. package/dist/pipeline/build.js.map +1 -1
  198. package/dist/pipeline/buildMeasurement.d.ts +4 -1
  199. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  200. package/dist/pipeline/buildMeasurement.js +19 -1
  201. package/dist/pipeline/buildMeasurement.js.map +1 -1
  202. package/dist/pipeline/calloutLayout.d.ts +36 -1
  203. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  204. package/dist/pipeline/calloutLayout.js +93 -3
  205. package/dist/pipeline/calloutLayout.js.map +1 -1
  206. package/dist/pipeline/codeInline.d.ts +10 -1
  207. package/dist/pipeline/codeInline.d.ts.map +1 -1
  208. package/dist/pipeline/codeInline.js +96 -15
  209. package/dist/pipeline/codeInline.js.map +1 -1
  210. package/dist/pipeline/composedLayout.d.ts +93 -0
  211. package/dist/pipeline/composedLayout.d.ts.map +1 -0
  212. package/dist/pipeline/composedLayout.js +520 -0
  213. package/dist/pipeline/composedLayout.js.map +1 -0
  214. package/dist/pipeline/config.d.ts.map +1 -1
  215. package/dist/pipeline/config.js +2 -1
  216. package/dist/pipeline/config.js.map +1 -1
  217. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  218. package/dist/pipeline/contentWarnings.js +39 -2
  219. package/dist/pipeline/contentWarnings.js.map +1 -1
  220. package/dist/pipeline/floatSlots.js +1 -1
  221. package/dist/pipeline/floatSlots.js.map +1 -1
  222. package/dist/pipeline/frameLayout.d.ts +120 -0
  223. package/dist/pipeline/frameLayout.d.ts.map +1 -0
  224. package/dist/pipeline/frameLayout.js +279 -0
  225. package/dist/pipeline/frameLayout.js.map +1 -0
  226. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  227. package/dist/pipeline/headerFooter.js +96 -3
  228. package/dist/pipeline/headerFooter.js.map +1 -1
  229. package/dist/pipeline/pageRoles.d.ts +1 -0
  230. package/dist/pipeline/pageRoles.d.ts.map +1 -1
  231. package/dist/pipeline/pageRoles.js +3 -0
  232. package/dist/pipeline/pageRoles.js.map +1 -1
  233. package/dist/pipeline/placement.js +1 -1
  234. package/dist/pipeline/placement.js.map +1 -1
  235. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  236. package/dist/pipeline/resourceLayout.js +5 -3
  237. package/dist/pipeline/resourceLayout.js.map +1 -1
  238. package/dist/pipeline/tabs.js +1 -1
  239. package/dist/pipeline/tabs.js.map +1 -1
  240. package/dist/types.d.ts +89 -3
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/vdt.d.ts +247 -1
  243. package/dist/vdt.d.ts.map +1 -1
  244. package/dist/vdt.js.map +1 -1
  245. package/package.json +1 -1
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Frame geometry of a composed page (#855, DESIGN §2.2, §5.2): where each
3
+ * frame of a resolved template stands, in page pixels. Pure: the content's
4
+ * natural height comes from a callback (the layout measures it with the box
5
+ * typesetter), so the rules can be tested without laying text out.
6
+ *
7
+ * - Position: a `grid` cell, else `placement` (the anchor / offset language
8
+ * of design slots: the nine-point grid of the template's `area`, the trim
9
+ * (`'page'`) or the bleed, or `'#frame'` / `'#group'` with the
10
+ * element-to-element edges `right-of`, `below`…), else the whole area.
11
+ * - Size: a fixed `Dimension`, a percentage of the area, `'fill'` (from the
12
+ * anchor point to the area's edge the frame grows towards) or `'auto'`
13
+ * (height only: the content's natural height); then `min*` / `max*`
14
+ * (min wins over max).
15
+ * - Order: a frame is placed after the frame or group it anchors to, after
16
+ * the frame its chain comes from (`next`), and frames that push text
17
+ * (`exclude: 'push'`) before the others; ties keep template order.
18
+ */
19
+ import type { AnchorEdge, Dimension, ElementPlacement } from '../types';
20
+ import type { FrameSize, ResolvedFrame, ResolvedFrameGroup, ResolvedPageTemplate } from './types';
21
+ export interface Rect {
22
+ x: number;
23
+ y: number;
24
+ width: number;
25
+ height: number;
26
+ }
27
+ /** The rectangles a template's anchors refer to on one page. */
28
+ export interface FrameAreas {
29
+ /** The template's `area` (the content area, the trim or the bleed). */
30
+ area: Rect;
31
+ /** The trim box (`anchor.to: 'page'`) and the bleed box. */
32
+ page: Rect;
33
+ bleed: Rect;
34
+ }
35
+ export interface FrameGeometryContext {
36
+ areas: FrameAreas;
37
+ dpi: number;
38
+ /** Ems of the page's body text, for `em` lengths. */
39
+ emPx: number;
40
+ }
41
+ type Pin = 'start' | 'middle' | 'end';
42
+ /** The anchor point and the side of the box pinned to it. */
43
+ interface Anchor {
44
+ x: number;
45
+ y: number;
46
+ pinX: Pin;
47
+ pinY: Pin;
48
+ }
49
+ /** The anchor of `edge` on `ref`: the nine-point grid of a container, or an
50
+ * element-to-element edge when `element` (an anchor to `'#name'`). An
51
+ * element edge on a container, or a container edge on an element, reads
52
+ * as `top-left` / `align-top`, as design slots do. */
53
+ export declare function anchorOn(edge: AnchorEdge, ref: Rect, element: boolean): Anchor;
54
+ /** `v` held between `min` and `max` (min wins). */
55
+ export declare function clampSize(v: number, min: number | undefined, max: number | undefined): number;
56
+ /** The rectangle of cell `cell` of the template grid in `area`. */
57
+ export declare function gridCellRect(template: Pick<ResolvedPageTemplate, 'grid'>, cell: Required<{
58
+ col: number;
59
+ row: number;
60
+ cols: number;
61
+ rows: number;
62
+ }>, area: Rect, ctx: FrameGeometryContext): Rect;
63
+ /** What the geometry needs to know of a box it places: a frame's
64
+ * placement and sizes, or a group's. */
65
+ interface Placeable {
66
+ placement?: ElementPlacement;
67
+ grid?: Required<{
68
+ col: number;
69
+ row: number;
70
+ cols: number;
71
+ rows: number;
72
+ }>;
73
+ width: FrameSize;
74
+ height: FrameSize;
75
+ /** The height was written (a grid cell keeps its own otherwise). */
76
+ heightSet: boolean;
77
+ minWidth?: Dimension;
78
+ maxWidth?: Dimension;
79
+ minHeight?: Dimension;
80
+ maxHeight?: Dimension;
81
+ }
82
+ /**
83
+ * The box of a frame (or group): `resolveRef` gives the box of a `'#name'`
84
+ * anchor (undefined when it has none yet: the anchor then reads as the
85
+ * area's); `natural(width)` the content's height at a width, for an
86
+ * `'auto'` height.
87
+ */
88
+ export declare function placeBox(item: Placeable, template: Pick<ResolvedPageTemplate, 'grid'>, ctx: FrameGeometryContext, resolveRef: (name: string) => Rect | undefined, natural: (width: number) => number): Rect;
89
+ /** A frame as {@link placeBox} reads it. */
90
+ export declare function framePlaceable(frame: ResolvedFrame): Placeable;
91
+ /** A group's own box as {@link placeBox} reads it, or undefined when it has
92
+ * none (its box is then the union of its frames'). */
93
+ export declare function groupPlaceable(group: ResolvedFrameGroup): Placeable | undefined;
94
+ /** The frame of the same page a frame's content goes on in: its `next`,
95
+ * else an `overflow.continueIn` of the form `'#frame'` (the same thing). */
96
+ export declare function nextFrameOf(frame: Pick<ResolvedFrame, 'next' | 'overflow'>): string | undefined;
97
+ /** The smallest rectangle holding `rects` (undefined for none). */
98
+ export declare function unionRect(rects: readonly Rect[]): Rect | undefined;
99
+ /**
100
+ * The order frames are placed and typeset in: a frame after what it
101
+ * anchors to (a group's frames, or the group's own anchor), after the frame
102
+ * of its chain before it (`next`); frames that push text first; otherwise
103
+ * template order. Anchor cycles (rejected by validation, settled by the
104
+ * resolver) are broken where they close.
105
+ */
106
+ export declare function frameOrder(template: Pick<ResolvedPageTemplate, 'frames' | 'groups'>): ResolvedFrame[];
107
+ export {};
108
+ //# sourceMappingURL=geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/composed/geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ import { dimensionToPx } from '../units';
2
+ import { anchorTarget, continueInFrame } from './templates';
3
+ const ELEMENT_EDGES = new Set(['right-of', 'left-of', 'below', 'above', 'align-top', 'align-bottom', 'align-left', 'align-right']);
4
+ /** The anchor of `edge` on `ref`: the nine-point grid of a container, or an
5
+ * element-to-element edge when `element` (an anchor to `'#name'`). An
6
+ * element edge on a container, or a container edge on an element, reads
7
+ * as `top-left` / `align-top`, as design slots do. */
8
+ export function anchorOn(edge, ref, element) {
9
+ if (element) {
10
+ switch (edge) {
11
+ case 'right-of': return { x: ref.x + ref.width, y: ref.y, pinX: 'start', pinY: 'start' };
12
+ case 'left-of': return { x: ref.x, y: ref.y, pinX: 'end', pinY: 'start' };
13
+ case 'below': return { x: ref.x, y: ref.y + ref.height, pinX: 'start', pinY: 'start' };
14
+ case 'above': return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'end' };
15
+ case 'align-bottom': return { x: ref.x, y: ref.y + ref.height, pinX: 'start', pinY: 'end' };
16
+ case 'align-right': return { x: ref.x + ref.width, y: ref.y, pinX: 'end', pinY: 'start' };
17
+ case 'align-top':
18
+ case 'align-left':
19
+ return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'start' };
20
+ default:
21
+ // A nine-point edge on another frame: that point of its box.
22
+ if (!ELEMENT_EDGES.has(edge))
23
+ return anchorOn(edge, ref, false);
24
+ return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'start' };
25
+ }
26
+ }
27
+ const cx = ref.x + ref.width / 2;
28
+ const cy = ref.y + ref.height / 2;
29
+ const r = ref.x + ref.width;
30
+ const b = ref.y + ref.height;
31
+ switch (edge) {
32
+ case 'top': return { x: cx, y: ref.y, pinX: 'middle', pinY: 'start' };
33
+ case 'top-right': return { x: r, y: ref.y, pinX: 'end', pinY: 'start' };
34
+ case 'left': return { x: ref.x, y: cy, pinX: 'start', pinY: 'middle' };
35
+ case 'center': return { x: cx, y: cy, pinX: 'middle', pinY: 'middle' };
36
+ case 'right': return { x: r, y: cy, pinX: 'end', pinY: 'middle' };
37
+ case 'bottom-left': return { x: ref.x, y: b, pinX: 'start', pinY: 'end' };
38
+ case 'bottom': return { x: cx, y: b, pinX: 'middle', pinY: 'end' };
39
+ case 'bottom-right': return { x: r, y: b, pinX: 'end', pinY: 'end' };
40
+ default: return { x: ref.x, y: ref.y, pinX: 'start', pinY: 'start' };
41
+ }
42
+ }
43
+ const px = (d, ctx) => d ? dimensionToPx(d, ctx.dpi, ctx.emPx) : undefined;
44
+ /** Room from an anchor coordinate to the area's edge the box grows towards
45
+ * (`'fill'`). */
46
+ function fillRoom(pin, at, lo, hi) {
47
+ if (pin === 'start')
48
+ return Math.max(0, hi - at);
49
+ if (pin === 'end')
50
+ return Math.max(0, at - lo);
51
+ return Math.max(0, 2 * Math.min(at - lo, hi - at));
52
+ }
53
+ /** `v` held between `min` and `max` (min wins). */
54
+ export function clampSize(v, min, max) {
55
+ let out = v;
56
+ if (max !== undefined)
57
+ out = Math.min(out, max);
58
+ if (min !== undefined)
59
+ out = Math.max(out, min);
60
+ return Math.max(0, out);
61
+ }
62
+ /** A fixed size in px, or undefined for `'auto'` / `'fill'`. */
63
+ function fixedSize(size, whole, ctx) {
64
+ if (size === 'auto' || size === 'fill')
65
+ return undefined;
66
+ if ('percent' in size)
67
+ return (whole * size.percent) / 100;
68
+ return px(size, ctx);
69
+ }
70
+ /** The rectangle of cell `cell` of the template grid in `area`. */
71
+ export function gridCellRect(template, cell, area, ctx) {
72
+ const grid = template.grid;
73
+ const cg = px(grid.columnGap, ctx) ?? 0;
74
+ const rg = px(grid.rowGap, ctx) ?? 0;
75
+ const cw = (area.width - (grid.columns - 1) * cg) / grid.columns;
76
+ const rh = (area.height - (grid.rows - 1) * rg) / grid.rows;
77
+ return {
78
+ x: area.x + (cell.col - 1) * (cw + cg),
79
+ y: area.y + (cell.row - 1) * (rh + rg),
80
+ width: cell.cols * cw + (cell.cols - 1) * cg,
81
+ height: cell.rows * rh + (cell.rows - 1) * rg,
82
+ };
83
+ }
84
+ /**
85
+ * The box of a frame (or group): `resolveRef` gives the box of a `'#name'`
86
+ * anchor (undefined when it has none yet: the anchor then reads as the
87
+ * area's); `natural(width)` the content's height at a width, for an
88
+ * `'auto'` height.
89
+ */
90
+ export function placeBox(item, template, ctx, resolveRef, natural) {
91
+ const { area } = ctx.areas;
92
+ const minW = px(item.minWidth, ctx);
93
+ const maxW = px(item.maxWidth, ctx);
94
+ const minH = px(item.minHeight, ctx);
95
+ const maxH = px(item.maxHeight, ctx);
96
+ if (item.grid && template.grid) {
97
+ const cell = gridCellRect(template, item.grid, area, ctx);
98
+ const width = clampSize(fixedSize(item.width, area.width, ctx) ?? cell.width, minW, maxW);
99
+ let height = cell.height;
100
+ if (item.heightSet) {
101
+ const fixed = fixedSize(item.height, area.height, ctx);
102
+ height = fixed ?? (item.height === 'auto' ? natural(width) : cell.height);
103
+ }
104
+ return { x: cell.x, y: cell.y, width, height: clampSize(height, minH, maxH) };
105
+ }
106
+ if (!item.placement) {
107
+ // The area's top-left, as wide as the area; the height as the frame's
108
+ // rule says (`'auto'`, the default, never past the area's foot).
109
+ const width = clampSize(fixedSize(item.width, area.width, ctx) ?? area.width, minW, maxW);
110
+ const fixed = fixedSize(item.height, area.height, ctx);
111
+ const height = fixed ?? (item.height === 'fill' ? area.height : Math.min(natural(width), area.height));
112
+ return { x: area.x, y: area.y, width, height: clampSize(height, minH, maxH) };
113
+ }
114
+ const placement = item.placement;
115
+ const target = anchorTarget(placement);
116
+ const to = placement.anchor.to;
117
+ const refBox = target ? resolveRef(target) : undefined;
118
+ const ref = refBox ?? (to === 'page' ? ctx.areas.page : to === 'bleed' ? ctx.areas.bleed : area);
119
+ // `'fill'` runs to the edge of the page's frame the anchor names (the
120
+ // area for a frame anchored to another).
121
+ const bounds = to === 'page' ? ctx.areas.page : to === 'bleed' ? ctx.areas.bleed : area;
122
+ const a = anchorOn(placement.anchor.edge, ref, refBox !== undefined);
123
+ const ox = px(placement.offset?.x, ctx) ?? 0;
124
+ const oy = px(placement.offset?.y, ctx) ?? 0;
125
+ const ax = a.x + ox;
126
+ const ay = a.y + oy;
127
+ const width = clampSize(fixedSize(item.width, area.width, ctx) ?? fillRoom(a.pinX, ax, bounds.x, bounds.x + bounds.width), minW, maxW);
128
+ const fixedH = fixedSize(item.height, area.height, ctx);
129
+ const room = fillRoom(a.pinY, ay, bounds.y, bounds.y + bounds.height);
130
+ // An `'auto'` height never runs past the edge the frame grows towards:
131
+ // what does not fit there overflows the frame.
132
+ const height = clampSize(fixedH ?? (item.height === 'fill' ? room : Math.min(natural(width), room)), minH, maxH);
133
+ const x = a.pinX === 'start' ? ax : a.pinX === 'end' ? ax - width : ax - width / 2;
134
+ const y = a.pinY === 'start' ? ay : a.pinY === 'end' ? ay - height : ay - height / 2;
135
+ return { x, y, width, height };
136
+ }
137
+ /** A frame as {@link placeBox} reads it. */
138
+ export function framePlaceable(frame) {
139
+ return {
140
+ ...(frame.placement ? { placement: frame.placement } : {}),
141
+ ...(frame.grid ? { grid: frame.grid } : {}),
142
+ width: frame.width,
143
+ height: frame.height,
144
+ heightSet: frame.fieldPaths.height !== undefined || frame.placement?.size?.height !== undefined,
145
+ ...(frame.minWidth ? { minWidth: frame.minWidth } : {}),
146
+ ...(frame.maxWidth ? { maxWidth: frame.maxWidth } : {}),
147
+ ...(frame.minHeight ? { minHeight: frame.minHeight } : {}),
148
+ ...(frame.maxHeight ? { maxHeight: frame.maxHeight } : {}),
149
+ };
150
+ }
151
+ /** A group's own box as {@link placeBox} reads it, or undefined when it has
152
+ * none (its box is then the union of its frames'). */
153
+ export function groupPlaceable(group) {
154
+ if (!group.placement && !group.grid)
155
+ return undefined;
156
+ const size = group.placement?.size;
157
+ const norm = (v) => (v === 'auto' || v === 'fill' || (typeof v === 'object' && v !== null) ? v : 'fill');
158
+ return {
159
+ ...(group.placement ? { placement: group.placement } : {}),
160
+ ...(group.grid ? { grid: group.grid } : {}),
161
+ width: norm(size?.width),
162
+ height: size?.height === undefined || size.height === 'auto' ? 'fill' : norm(size.height),
163
+ heightSet: size?.height !== undefined,
164
+ };
165
+ }
166
+ /** The frame of the same page a frame's content goes on in: its `next`,
167
+ * else an `overflow.continueIn` of the form `'#frame'` (the same thing). */
168
+ export function nextFrameOf(frame) {
169
+ return frame.next ?? continueInFrame(frame.overflow?.continueIn);
170
+ }
171
+ /** The smallest rectangle holding `rects` (undefined for none). */
172
+ export function unionRect(rects) {
173
+ if (rects.length === 0)
174
+ return undefined;
175
+ const x = Math.min(...rects.map((r) => r.x));
176
+ const y = Math.min(...rects.map((r) => r.y));
177
+ const right = Math.max(...rects.map((r) => r.x + r.width));
178
+ const bottom = Math.max(...rects.map((r) => r.y + r.height));
179
+ return { x, y, width: right - x, height: bottom - y };
180
+ }
181
+ /**
182
+ * The order frames are placed and typeset in: a frame after what it
183
+ * anchors to (a group's frames, or the group's own anchor), after the frame
184
+ * of its chain before it (`next`); frames that push text first; otherwise
185
+ * template order. Anchor cycles (rejected by validation, settled by the
186
+ * resolver) are broken where they close.
187
+ */
188
+ export function frameOrder(template) {
189
+ const byName = new Map(template.frames.map((f) => [f.name, f]));
190
+ const groups = new Map(template.groups.map((g) => [g.name, g]));
191
+ const prev = new Map();
192
+ for (const f of template.frames) {
193
+ const n = nextFrameOf(f);
194
+ if (n && byName.has(n) && !prev.has(n))
195
+ prev.set(n, f.name);
196
+ }
197
+ const deps = (name, seenGroups = new Set()) => {
198
+ const out = [];
199
+ const addTarget = (target) => {
200
+ if (!target)
201
+ return;
202
+ if (byName.has(target))
203
+ out.push(target);
204
+ else {
205
+ const g = groups.get(target);
206
+ if (!g || seenGroups.has(g.name))
207
+ return;
208
+ seenGroups.add(g.name);
209
+ if (g.placement || g.grid)
210
+ addTarget(g.grid ? undefined : anchorTarget(g.placement));
211
+ else
212
+ out.push(...g.frames.filter((m) => m !== name && byName.has(m)));
213
+ }
214
+ };
215
+ const f = byName.get(name);
216
+ if (!f.grid)
217
+ addTarget(anchorTarget(f.placement));
218
+ const p = prev.get(name);
219
+ if (p)
220
+ out.push(p);
221
+ return out;
222
+ };
223
+ const out = [];
224
+ const state = new Map();
225
+ const visit = (name) => {
226
+ if (state.has(name))
227
+ return;
228
+ state.set(name, 'visiting');
229
+ for (const d of deps(name))
230
+ visit(d);
231
+ state.set(name, 'done');
232
+ out.push(byName.get(name));
233
+ };
234
+ for (const f of template.frames)
235
+ if (f.exclude === 'push')
236
+ visit(f.name);
237
+ for (const f of template.frames)
238
+ visit(f.name);
239
+ return out;
240
+ }
241
+ //# sourceMappingURL=geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../src/composed/geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Groups of frames on a composed page (#856, DESIGN §2.3, §5.3): a `stack`
3
+ * lays its frames top to bottom, a `row` start to end, with `gap` between
4
+ * them; `grow`, `shrink` and `priority` decide who takes spare space and
5
+ * who gives space back; `pin` frames stay where the template puts them and
6
+ * the others flow round them. Pure: what a frame's content needs comes from
7
+ * a callback, so the rules are tested without laying text out.
8
+ *
9
+ * Also the order frames are placed and filled in once groups count
10
+ * ({@link composedOrder}): a group is placed as a whole, after everything
11
+ * its frames anchor to and before every frame that anchors to it or to one
12
+ * of its frames.
13
+ */
14
+ import type { Rect } from './geometry';
15
+ import type { ResolvedFrame, ResolvedFrameGroup, ResolvedPageTemplate } from './types';
16
+ /** A frame of a group as the solver reads it. Lengths in page px. */
17
+ export interface GroupItem {
18
+ name: string;
19
+ /** The frame's box from its own placement: a stack keeps its `x` and
20
+ * `width`, a row its `height` when the frame's height is fixed; a pinned
21
+ * frame keeps all of it. */
22
+ own: Rect;
23
+ /** The height the frame asks for: its fixed height, or its content's at
24
+ * its width (`'auto'`), before min/max. */
25
+ want: number;
26
+ min: number;
27
+ max: number;
28
+ minWidth: number;
29
+ maxWidth: number;
30
+ grow: number;
31
+ shrink: number;
32
+ priority: number;
33
+ pin: boolean;
34
+ /** A height written as a length: a row does not stretch it. */
35
+ fixedHeight: boolean;
36
+ /** The content's height at a width (rows negotiate widths with it). */
37
+ need?: (width: number) => number;
38
+ }
39
+ export interface GroupLayoutInput {
40
+ kind: 'stack' | 'row';
41
+ /** The group's box: its own (`placement` / `grid`), or, for a group with
42
+ * none (`elastic`), where its first frame stands. */
43
+ box: Rect;
44
+ /** No box of its own: a stack runs down as far as its frames need, to
45
+ * the foot of `limit`; a row takes its frames' widths and grows as tall
46
+ * as the tallest needs. Spare space, `grow` and `align` only apply to a
47
+ * group with a box. */
48
+ elastic: boolean;
49
+ /** How far an elastic group may run (the template's area). */
50
+ limit: Rect;
51
+ gap: number;
52
+ align: 'start' | 'center' | 'end' | 'space-between';
53
+ /** In group order. */
54
+ items: readonly GroupItem[];
55
+ /** Pinned frames outside the group: the group's frames flow round them. */
56
+ obstacles?: readonly Rect[];
57
+ /** Page px in a millimetre: a row negotiates widths in whole millimetres. */
58
+ mmPx: number;
59
+ /** Rows: take width from siblings for a frame whose content runs past
60
+ * the row's height. Off for the template's own (declared) layout. */
61
+ negotiate: boolean;
62
+ }
63
+ /** Share `amount` among `items` in proportion to `weight`, none past its
64
+ * `room`; what an item cannot take goes to the others. Returns each one's
65
+ * share, in `items` order. */
66
+ export declare function shareOut(amount: number, items: readonly {
67
+ weight: number;
68
+ room: number;
69
+ }[]): number[];
70
+ /** The boxes of a group's frames, by name. */
71
+ export declare function layoutGroup(input: GroupLayoutInput): Map<string, Rect>;
72
+ /** A step of a composed page's layout: one frame, or a whole group. */
73
+ export type ComposedStep = {
74
+ kind: 'frame';
75
+ frame: ResolvedFrame;
76
+ } | {
77
+ kind: 'group';
78
+ group: ResolvedFrameGroup;
79
+ frames: ResolvedFrame[];
80
+ };
81
+ /** The group each frame belongs to (its first, when validation found it
82
+ * in two). Groups with no frame are left out. */
83
+ export declare function groupOfFrames(template: Pick<ResolvedPageTemplate, 'frames' | 'groups'>): Map<string, ResolvedFrameGroup>;
84
+ /**
85
+ * The order a composed page is placed and filled in: P4's
86
+ * {@link frameOrder} rules (a frame after what it anchors to and after the
87
+ * frame its chain comes from, frames that push text first, else template
88
+ * order), with each group a single step. A group comes after everything
89
+ * its frames and its own box anchor to; anything anchored to the group or
90
+ * to one of its frames comes after it. Its frames are filled in group
91
+ * order. Loops (a group's frame anchored to a frame anchored back into the
92
+ * group) are broken where they close, as P4 breaks anchor loops.
93
+ */
94
+ export declare function composedOrder(template: Pick<ResolvedPageTemplate, 'frames' | 'groups'>): ComposedStep[];
95
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/composed/groups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEvF,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;;iCAE6B;IAC7B,GAAG,EAAE,IAAI,CAAC;IACV;gDAC4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,+DAA+D;IAC/D,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB;0DACsD;IACtD,GAAG,EAAE,IAAI,CAAC;IACV;;;4BAGwB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;IACpD,sBAAsB;IACtB,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb;0EACsE;IACtE,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD;;+BAE+B;AAC/B,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,EAAE,CAqBrG;AAYD,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAEtE;AAoMD,uEAAuE;AACvE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC;AAE1E;kDACkD;AAClD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAKxH;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAAG,YAAY,EAAE,CAuEvG"}