postext 1.37.0 → 1.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/__tests__/comics/frames.test.d.ts +2 -0
  2. package/dist/__tests__/comics/frames.test.d.ts.map +1 -0
  3. package/dist/__tests__/comics/frames.test.js +251 -0
  4. package/dist/__tests__/comics/frames.test.js.map +1 -0
  5. package/dist/__tests__/composed/continuationRules.test.d.ts +2 -0
  6. package/dist/__tests__/composed/continuationRules.test.d.ts.map +1 -0
  7. package/dist/__tests__/composed/continuationRules.test.js +389 -0
  8. package/dist/__tests__/composed/continuationRules.test.js.map +1 -0
  9. package/dist/__tests__/composed/coverImages.test.d.ts +2 -0
  10. package/dist/__tests__/composed/coverImages.test.d.ts.map +1 -0
  11. package/dist/__tests__/composed/coverImages.test.js +75 -0
  12. package/dist/__tests__/composed/coverImages.test.js.map +1 -0
  13. package/dist/__tests__/composed/decorationSize.test.d.ts +2 -0
  14. package/dist/__tests__/composed/decorationSize.test.d.ts.map +1 -0
  15. package/dist/__tests__/composed/decorationSize.test.js +79 -0
  16. package/dist/__tests__/composed/decorationSize.test.js.map +1 -0
  17. package/dist/__tests__/composed/emptyFrames.test.d.ts +2 -0
  18. package/dist/__tests__/composed/emptyFrames.test.d.ts.map +1 -0
  19. package/dist/__tests__/composed/emptyFrames.test.js +129 -0
  20. package/dist/__tests__/composed/emptyFrames.test.js.map +1 -0
  21. package/dist/__tests__/composed/fit.test.js +10 -4
  22. package/dist/__tests__/composed/fit.test.js.map +1 -1
  23. package/dist/__tests__/composed/groups.test.js +20 -0
  24. package/dist/__tests__/composed/groups.test.js.map +1 -1
  25. package/dist/__tests__/composed/ruledFrames.test.d.ts +2 -0
  26. package/dist/__tests__/composed/ruledFrames.test.d.ts.map +1 -0
  27. package/dist/__tests__/composed/ruledFrames.test.js +93 -0
  28. package/dist/__tests__/composed/ruledFrames.test.js.map +1 -0
  29. package/dist/__tests__/composed/spread.test.js +82 -0
  30. package/dist/__tests__/composed/spread.test.js.map +1 -1
  31. package/dist/__tests__/exports.test.js +12 -0
  32. package/dist/__tests__/exports.test.js.map +1 -1
  33. package/dist/__tests__/migrate/labelsOnPictures.test.d.ts +2 -0
  34. package/dist/__tests__/migrate/labelsOnPictures.test.d.ts.map +1 -0
  35. package/dist/__tests__/migrate/labelsOnPictures.test.js +114 -0
  36. package/dist/__tests__/migrate/labelsOnPictures.test.js.map +1 -0
  37. package/dist/__tests__/paragraphDropCap.test.js +38 -0
  38. package/dist/__tests__/paragraphDropCap.test.js.map +1 -1
  39. package/dist/__tests__/resourceTypePartial.test.d.ts +2 -0
  40. package/dist/__tests__/resourceTypePartial.test.d.ts.map +1 -0
  41. package/dist/__tests__/resourceTypePartial.test.js +60 -0
  42. package/dist/__tests__/resourceTypePartial.test.js.map +1 -0
  43. package/dist/canvas-backend/composed.d.ts +3 -0
  44. package/dist/canvas-backend/composed.d.ts.map +1 -1
  45. package/dist/canvas-backend/composed.js +47 -26
  46. package/dist/canvas-backend/composed.js.map +1 -1
  47. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  48. package/dist/canvas-backend/headerFooter.js +13 -0
  49. package/dist/canvas-backend/headerFooter.js.map +1 -1
  50. package/dist/canvas-backend/index.d.ts.map +1 -1
  51. package/dist/canvas-backend/index.js +16 -5
  52. package/dist/canvas-backend/index.js.map +1 -1
  53. package/dist/comics/frames.d.ts +82 -0
  54. package/dist/comics/frames.d.ts.map +1 -0
  55. package/dist/comics/frames.js +182 -0
  56. package/dist/comics/frames.js.map +1 -0
  57. package/dist/comics/index.d.ts +4 -1
  58. package/dist/comics/index.d.ts.map +1 -1
  59. package/dist/comics/index.js +3 -1
  60. package/dist/comics/index.js.map +1 -1
  61. package/dist/comics/layoutPage.d.ts +9 -0
  62. package/dist/comics/layoutPage.d.ts.map +1 -1
  63. package/dist/comics/layoutPage.js +53 -68
  64. package/dist/comics/layoutPage.js.map +1 -1
  65. package/dist/comics/page.d.ts.map +1 -1
  66. package/dist/comics/page.js +10 -1
  67. package/dist/comics/page.js.map +1 -1
  68. package/dist/comics/sourceMap.d.ts +60 -0
  69. package/dist/comics/sourceMap.d.ts.map +1 -0
  70. package/dist/comics/sourceMap.js +166 -0
  71. package/dist/comics/sourceMap.js.map +1 -0
  72. package/dist/comics/spread.d.ts.map +1 -1
  73. package/dist/comics/spread.js +6 -0
  74. package/dist/comics/spread.js.map +1 -1
  75. package/dist/comics/textPanels.d.ts +113 -0
  76. package/dist/comics/textPanels.d.ts.map +1 -0
  77. package/dist/comics/textPanels.js +327 -0
  78. package/dist/comics/textPanels.js.map +1 -0
  79. package/dist/comics/transform.d.ts +6 -2
  80. package/dist/comics/transform.d.ts.map +1 -1
  81. package/dist/comics/transform.js +14 -1
  82. package/dist/comics/transform.js.map +1 -1
  83. package/dist/comics/types.d.ts +10 -0
  84. package/dist/comics/types.d.ts.map +1 -1
  85. package/dist/composed/continuation.d.ts +55 -5
  86. package/dist/composed/continuation.d.ts.map +1 -1
  87. package/dist/composed/continuation.js +118 -16
  88. package/dist/composed/continuation.js.map +1 -1
  89. package/dist/composed/groups.d.ts +3 -0
  90. package/dist/composed/groups.d.ts.map +1 -1
  91. package/dist/composed/groups.js +34 -4
  92. package/dist/composed/groups.js.map +1 -1
  93. package/dist/composed/paint.d.ts +20 -1
  94. package/dist/composed/paint.d.ts.map +1 -1
  95. package/dist/composed/paint.js +40 -0
  96. package/dist/composed/paint.js.map +1 -1
  97. package/dist/composed/rules.d.ts +31 -0
  98. package/dist/composed/rules.d.ts.map +1 -0
  99. package/dist/composed/rules.js +45 -0
  100. package/dist/composed/rules.js.map +1 -0
  101. package/dist/composed/slotChecks.d.ts +2 -1
  102. package/dist/composed/slotChecks.d.ts.map +1 -1
  103. package/dist/composed/slotChecks.js +56 -2
  104. package/dist/composed/slotChecks.js.map +1 -1
  105. package/dist/composed/sourceMap.d.ts.map +1 -1
  106. package/dist/composed/sourceMap.js +15 -1
  107. package/dist/composed/sourceMap.js.map +1 -1
  108. package/dist/composed/spread.d.ts +20 -5
  109. package/dist/composed/spread.d.ts.map +1 -1
  110. package/dist/composed/spread.js +51 -26
  111. package/dist/composed/spread.js.map +1 -1
  112. package/dist/composed/templates.d.ts +11 -0
  113. package/dist/composed/templates.d.ts.map +1 -1
  114. package/dist/composed/templates.js +51 -2
  115. package/dist/composed/templates.js.map +1 -1
  116. package/dist/composed/types.d.ts +43 -3
  117. package/dist/composed/types.d.ts.map +1 -1
  118. package/dist/composed/validate.d.ts.map +1 -1
  119. package/dist/composed/validate.js +5 -3
  120. package/dist/composed/validate.js.map +1 -1
  121. package/dist/configWarnings.d.ts.map +1 -1
  122. package/dist/configWarnings.js +11 -1
  123. package/dist/configWarnings.js.map +1 -1
  124. package/dist/defaults/headerFooter.d.ts.map +1 -1
  125. package/dist/defaults/headerFooter.js +4 -0
  126. package/dist/defaults/headerFooter.js.map +1 -1
  127. package/dist/defaults/resourceTypes.d.ts +15 -0
  128. package/dist/defaults/resourceTypes.d.ts.map +1 -1
  129. package/dist/defaults/resourceTypes.js +39 -1
  130. package/dist/defaults/resourceTypes.js.map +1 -1
  131. package/dist/design/layout.d.ts +7 -0
  132. package/dist/design/layout.d.ts.map +1 -1
  133. package/dist/design/layout.js +109 -16
  134. package/dist/design/layout.js.map +1 -1
  135. package/dist/html-backend.d.ts.map +1 -1
  136. package/dist/html-backend.js +43 -5
  137. package/dist/html-backend.js.map +1 -1
  138. package/dist/htmlComic.d.ts +3 -0
  139. package/dist/htmlComic.d.ts.map +1 -1
  140. package/dist/htmlComic.js +2 -0
  141. package/dist/htmlComic.js.map +1 -1
  142. package/dist/index.d.ts +5 -5
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +2 -2
  145. package/dist/index.js.map +1 -1
  146. package/dist/migrate/pageDesign.d.ts +35 -2
  147. package/dist/migrate/pageDesign.d.ts.map +1 -1
  148. package/dist/migrate/pageDesign.js +134 -7
  149. package/dist/migrate/pageDesign.js.map +1 -1
  150. package/dist/migrate/textToMarkdown.d.ts +33 -1
  151. package/dist/migrate/textToMarkdown.d.ts.map +1 -1
  152. package/dist/migrate/textToMarkdown.js +206 -9
  153. package/dist/migrate/textToMarkdown.js.map +1 -1
  154. package/dist/parse/blockParser.js +26 -0
  155. package/dist/parse/blockParser.js.map +1 -1
  156. package/dist/pipeline/build.d.ts.map +1 -1
  157. package/dist/pipeline/build.js +219 -40
  158. package/dist/pipeline/build.js.map +1 -1
  159. package/dist/pipeline/calloutLayout.d.ts +5 -0
  160. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  161. package/dist/pipeline/calloutLayout.js +70 -0
  162. package/dist/pipeline/calloutLayout.js.map +1 -1
  163. package/dist/pipeline/composedLayout.d.ts.map +1 -1
  164. package/dist/pipeline/composedLayout.js +246 -49
  165. package/dist/pipeline/composedLayout.js.map +1 -1
  166. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  167. package/dist/pipeline/contentWarnings.js +21 -1
  168. package/dist/pipeline/contentWarnings.js.map +1 -1
  169. package/dist/pipeline/dropCap.d.ts +5 -0
  170. package/dist/pipeline/dropCap.d.ts.map +1 -1
  171. package/dist/pipeline/dropCap.js +23 -2
  172. package/dist/pipeline/dropCap.js.map +1 -1
  173. package/dist/pipeline/frameLayout.d.ts +17 -2
  174. package/dist/pipeline/frameLayout.d.ts.map +1 -1
  175. package/dist/pipeline/frameLayout.js +47 -2
  176. package/dist/pipeline/frameLayout.js.map +1 -1
  177. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  178. package/dist/pipeline/headerFooter.js +41 -2
  179. package/dist/pipeline/headerFooter.js.map +1 -1
  180. package/dist/pipeline/measureContentBlock.d.ts +1 -1
  181. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  182. package/dist/pipeline/measureContentBlock.js +4 -1
  183. package/dist/pipeline/measureContentBlock.js.map +1 -1
  184. package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
  185. package/dist/pipeline/resourceNumbering.js +13 -4
  186. package/dist/pipeline/resourceNumbering.js.map +1 -1
  187. package/dist/preflight.js +5 -1
  188. package/dist/preflight.js.map +1 -1
  189. package/dist/types.d.ts +32 -2
  190. package/dist/types.d.ts.map +1 -1
  191. package/dist/vdt.d.ts +90 -2
  192. package/dist/vdt.d.ts.map +1 -1
  193. package/dist/vdt.js.map +1 -1
  194. package/package.json +1 -1
@@ -0,0 +1,389 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline/build';
3
+ import { createMeasurementCache } from '../../measure';
4
+ import { page8Fixture } from './fixtures/page8';
5
+ import { sourceAt } from '../../composed/sourceMap';
6
+ // Findings of the composed-pages recipes (#882) on content that goes on to
7
+ // other pages: the ladder's order (#920), the frame that takes the content
8
+ // (#919), where a frame is cut (#913), what an added page keeps (#912) and
9
+ // a story that jumps to a later page (#917).
10
+ class StubCtx {
11
+ font = '';
12
+ measureText(s) {
13
+ return { width: s.length * 7 };
14
+ }
15
+ }
16
+ globalThis.OffscreenCanvas = class {
17
+ getContext() {
18
+ return new StubCtx();
19
+ }
20
+ };
21
+ const mm = (value) => ({ value, unit: 'mm' });
22
+ const MM = 300 / 25.4;
23
+ const BASE = page8Fixture('es').config;
24
+ const build = (markdown, templates, config = {}) => buildDocument({ markdown, resources: page8Fixture('es').resources }, { ...BASE, ...config, pageTemplates: templates }, createMeasurementCache());
25
+ const composedPages = (doc) => doc.pages.filter((p) => p.composed);
26
+ const frameOn = (page, name) => page.composed.frames.find((f) => f.name === name);
27
+ const blocksOf = (page, f) => f.blockIds.map((id) => page.floats.find((b) => b.id === id));
28
+ const textOf = (blocks) => blocks.filter((b) => b.type !== 'callout').flatMap((b) => b.lines.map((l) => l.text)).join(' ');
29
+ const overlayOf = (box) => (box?.designOverlay?.blocks ?? []).flatMap((d) => (d.kind === 'text' ? [d.lines.map((l) => l.text).join(' ')] : []));
30
+ const warningsOf = (doc, ...kinds) => (doc.contentWarnings ?? []).filter((w) => kinds.includes(w.kind));
31
+ const para = (word, n) => Array.from({ length: n }, (_, i) => `${word}${i}`).join(' ');
32
+ const count = (s, word) => s.split(word).length - 1;
33
+ /** A page with one box held to `heightMm`, its text `words` long. */
34
+ const oneBox = (frame, extra = []) => [
35
+ { id: 'hoja', header: false, frames: [{ name: 'caja', style: 'caja-azul', width: mm(186), placement: { anchor: { to: 'container', edge: 'top-left' } }, ...frame }] },
36
+ ...extra,
37
+ ];
38
+ const boxPage = (words) => ['::::page{template="hoja"}', ':::frame{slot="caja" label="Caja"}', para('palabra', words), ':::', '::::', ''].join('\n');
39
+ describe('the ladder goes on before it shrinks a frame that can continue (#920)', () => {
40
+ // A box a few lines short: shrinking to 90 % would make it fit.
41
+ const words = (() => {
42
+ for (let n = 100; n < 2000; n += 20) {
43
+ const doc = build(boxPage(n), oneBox({ height: mm(60), overflow: { continueIn: 'next-page' }, fit: { preferContinue: false } }));
44
+ const first = composedPages(doc)[0];
45
+ if (frameOn(first, 'caja').scale < 0.95)
46
+ return n;
47
+ }
48
+ throw new Error('no length found');
49
+ })();
50
+ it('by default the box goes on at full size', () => {
51
+ const doc = build(boxPage(words), oneBox({ height: mm(60), overflow: { continueIn: 'next-page' } }));
52
+ const pages = composedPages(doc);
53
+ expect(pages).toHaveLength(2);
54
+ for (const p of pages)
55
+ expect(frameOn(p, 'caja').scale).toBe(1);
56
+ expect(pages[0].composed.log.some((e) => e.kind === 'textScaled')).toBe(false);
57
+ expect(pages[0].composed.log.some((e) => e.kind === 'continued')).toBe(true);
58
+ expect(warningsOf(doc, 'frameOverflow')).toEqual([]);
59
+ });
60
+ it('fit.preferContinue: false shrinks first and keeps the story on its page', () => {
61
+ const doc = build(boxPage(words), oneBox({ height: mm(60), overflow: { continueIn: 'next-page' }, fit: { preferContinue: false } }));
62
+ const pages = composedPages(doc);
63
+ expect(pages).toHaveLength(1);
64
+ expect(frameOn(pages[0], 'caja').scale).toBeLessThan(1);
65
+ expect(pages[0].composed.log.some((e) => e.kind === 'textScaled')).toBe(true);
66
+ });
67
+ it('a frame that cannot go on still shrinks', () => {
68
+ const doc = build(boxPage(words), oneBox({ height: mm(60) }));
69
+ expect(frameOn(composedPages(doc)[0], 'caja').scale).toBeLessThan(1);
70
+ });
71
+ it('on the last page continuation may add, the text shrinks again', () => {
72
+ // The tiny receiver takes none of it: the step is reverted, and the
73
+ // ladder shrinks the text before it warns.
74
+ const tiny = { id: 'diminuta', header: false, frames: [{ name: 'caja', style: 'caja-azul', width: mm(186), height: mm(4) }] };
75
+ const doc = build(boxPage(words * 4), oneBox({ height: mm(60), overflow: { continueIn: 'template:diminuta' } }, [tiny]));
76
+ const ws = warningsOf(doc, 'frameOverflow');
77
+ expect(ws).toHaveLength(1);
78
+ expect(ws[0].stepsTried).toEqual(['free', 'continue', 'shrinkText']);
79
+ });
80
+ });
81
+ describe('a threaded story goes on where its chain starts (#919)', () => {
82
+ /** Three columns threaded a → b → c; c goes on as `rule`. */
83
+ const columns = (id, prefix, rule) => ({
84
+ id,
85
+ header: false,
86
+ frames: ['1', '2', '3'].map((k, i) => ({
87
+ name: `${prefix}-${k}`,
88
+ width: mm(56),
89
+ height: 'fill',
90
+ placement: { anchor: { to: 'container', edge: 'top-left' }, offset: { x: mm(i * 62) } },
91
+ ...(k === '1' ? { flow: true } : {}),
92
+ ...(k !== '3' ? { next: `${prefix}-${Number(k) + 1}` } : { overflow: { continueIn: rule } }),
93
+ fit: { shrinkText: false, scaleImages: false },
94
+ })),
95
+ });
96
+ const story = ['::::page{template="cuerpo"}', ...Array.from({ length: 70 }, (_, i) => [para(`p${i}w`, 110), '']).flat(), '::::', ''].join('\n');
97
+ for (const rule of ['template:cuerpo', 'next-page']) {
98
+ it(`a template that goes on into itself fills every column of every added page (${rule})`, () => {
99
+ const doc = build(story, [columns('cuerpo', 'col', rule)]);
100
+ const pages = composedPages(doc);
101
+ expect(pages.length).toBeGreaterThanOrEqual(4);
102
+ // Every page but the last fills its three columns.
103
+ for (const p of pages.slice(0, -1)) {
104
+ for (const k of ['1', '2', '3'])
105
+ expect(frameOn(p, `col-${k}`).blockIds.length, `p. ${p.index} col-${k}`).toBeGreaterThan(0);
106
+ }
107
+ expect(pages[pages.length - 1].composed.frames.find((f) => f.name === 'col-1').blockIds.length).toBeGreaterThan(0);
108
+ // The chain goes on from c to the next page's a.
109
+ for (let k = 1; k < pages.length; k++) {
110
+ expect(frameOn(pages[k], 'col-1').continuedFrom).toBe(frameOn(pages[k - 1], 'col-3').id);
111
+ }
112
+ expect(warningsOf(doc, 'frameOverflow', 'frameContinuationLimit')).toEqual([]);
113
+ // Every word once.
114
+ const all = pages.flatMap((p) => ['1', '2', '3'].map((k) => textOf(blocksOf(p, frameOn(p, `col-${k}`))))).join(' ');
115
+ for (const i of [0, 17, 39, 69])
116
+ expect(count(all, `p${i}w5 `)).toBe(1);
117
+ });
118
+ }
119
+ it('goes on in the flow frame of another template whose frames have other names', () => {
120
+ const doc = build(story.replace('template="cuerpo"', 'template="primera"'), [columns('primera', 'col', 'template:seguido'), columns('seguido', 'sig', 'template:seguido')]);
121
+ const pages = composedPages(doc);
122
+ expect(pages.length).toBeGreaterThanOrEqual(3);
123
+ for (const p of pages.slice(1, -1)) {
124
+ for (const k of ['1', '2', '3'])
125
+ expect(frameOn(p, `sig-${k}`).blockIds.length).toBeGreaterThan(0);
126
+ }
127
+ });
128
+ });
129
+ describe('a frame is cut as the running text is (#913)', () => {
130
+ const steps = (lead, items = 5) => [
131
+ '::::page{template="hoja"}',
132
+ ':::frame{slot="caja" label="Pasos"}',
133
+ para('intro', lead),
134
+ '',
135
+ '### Mi registro de la semana',
136
+ '',
137
+ ...Array.from({ length: items }, (_, i) => `- ${para(`item${i}w`, 12)}`),
138
+ ':::',
139
+ '::::',
140
+ '',
141
+ ].join('\n');
142
+ /** The first piece of each length of introduction, and the second. */
143
+ const cuts = (items) => Array.from({ length: 60 }, (_, k) => 40 + k * 6).map((lead) => {
144
+ const doc = build(steps(lead, items), oneBox({ height: mm(70), overflow: { continueIn: 'next-page' } }));
145
+ const pages = composedPages(doc);
146
+ const piece = (p) => (p ? blocksOf(p, frameOn(p, 'caja')).filter((b) => b.type !== 'callout') : []);
147
+ return { lead, first: piece(pages[0]), rest: piece(pages[1]), doc };
148
+ });
149
+ it('never leaves a heading at the foot of a piece', () => {
150
+ let seen = 0;
151
+ for (const { first, rest } of cuts(5)) {
152
+ if (rest.length === 0)
153
+ continue;
154
+ seen++;
155
+ expect(first[first.length - 1].type).not.toBe('heading');
156
+ }
157
+ expect(seen).toBeGreaterThan(10);
158
+ });
159
+ it('leaves at least two items of a list on each side of a cut between items', () => {
160
+ let between = 0;
161
+ for (const { first, rest } of cuts(5)) {
162
+ const before = first.filter((b) => b.type === 'listItem').length;
163
+ const after = rest.filter((b) => b.type === 'listItem').length;
164
+ // A cut inside an item counts it on both sides.
165
+ const split = before > 0 && after > 0 && before + after > 5;
166
+ if (before === 0 || after === 0 || split)
167
+ continue;
168
+ between++;
169
+ expect(before).toBeGreaterThanOrEqual(2);
170
+ expect(after).toBeGreaterThanOrEqual(2);
171
+ }
172
+ expect(between).toBeGreaterThan(0);
173
+ });
174
+ it("a short list under shortListSplit: 'avoid' moves whole", () => {
175
+ for (const lead of Array.from({ length: 40 }, (_, k) => 40 + k * 8)) {
176
+ const doc = build(steps(lead, 3), oneBox({ height: mm(70), overflow: { continueIn: 'next-page' } }), { bodyText: { ...BASE.bodyText, shortListSplit: 'avoid' } });
177
+ const pages = composedPages(doc);
178
+ if (pages.length < 2)
179
+ continue;
180
+ const items = (p) => blocksOf(p, frameOn(p, 'caja')).filter((b) => b.type === 'listItem').length;
181
+ const a = items(pages[0]);
182
+ const b = items(pages[1]);
183
+ // Whole on one side, or cut inside one item.
184
+ expect(a === 0 || b === 0 || a + b === 4).toBe(true);
185
+ }
186
+ });
187
+ });
188
+ describe('an activity sheet whose last box goes on (#912)', () => {
189
+ const at = (to, edge, y = 0) => ({ anchor: { to, edge }, offset: { y: mm(y) } });
190
+ const ruled = (frame, lines) => Array.from({ length: lines }, (_, i) => ({ kind: 'rule', id: `${frame}-${i + 1}`, direction: 'horizontal', thickness: { value: 0.75, unit: 'pt' }, placement: { ...at(`#${frame}`, 'top-left', 8 * (i + 1) - 1), size: { width: mm(180) } } }));
191
+ /** The sheet: a kicker, the running text, three boxes in a stack with
192
+ * answer lines under the first and the last. */
193
+ const FICHA = {
194
+ id: 'ficha',
195
+ header: false,
196
+ decoration: { elements: [{ kind: 'text', id: 'tema', content: '{attr.tema}', fontSize: { value: 9, unit: 'pt' }, placement: at('container', 'top-left') }, ...ruled('lineas-1', 3), ...ruled('lineas-3', 2)] },
197
+ frames: [
198
+ { name: 'texto', flow: true, width: mm(180), placement: at('container', 'top-left', 6) },
199
+ { name: 'act-1', style: 'caja-azul', width: mm(180), minHeight: mm(22), placement: at('#texto', 'below', 6) },
200
+ { name: 'lineas-1', optional: true, width: mm(180), height: mm(24), minHeight: mm(24) },
201
+ { name: 'act-2', style: 'caja-azul', width: mm(180), minHeight: mm(22) },
202
+ { name: 'act-3', style: 'caja-azul', width: mm(180), minHeight: mm(22), overflow: { continueIn: 'next-page' } },
203
+ { name: 'lineas-3', optional: true, width: mm(180), height: mm(16), minHeight: mm(16) },
204
+ ],
205
+ groups: [{ name: 'actividades', kind: 'stack', gap: mm(4.5), frames: ['act-1', 'lineas-1', 'act-2', 'act-3', 'lineas-3'] }],
206
+ };
207
+ const sheet = (first, last) => [
208
+ '::::page{template="ficha" tema="Unidad 3 · Ficha 1"}',
209
+ para('texto', 120), '',
210
+ ':::frame{slot="act-1" label="1 · Lee"}', para('uno', first), ':::', '',
211
+ ':::frame{slot="act-2" label="2 · Completa"}', para('dos', 60), ':::', '',
212
+ ':::frame{slot="act-3" label="3 · Dibuja"}', para('tres', last), ':::', '',
213
+ '::::', ''
214
+ ].join('\n');
215
+ const decoBoxes = (p) => p.composed.decoration?.blocks ?? [];
216
+ it('the answer lines go with the end of the box to the added page, and keep their size there', () => {
217
+ const doc = build(sheet(900, 700), [FICHA]);
218
+ const [first, added] = composedPages(doc);
219
+ expect(added).toBeDefined();
220
+ expect(frameOn(first, 'act-3').continuesTo).toBe('cp0:act-3~1');
221
+ // On the first page the box runs to the foot of the area, the lines left with the rest.
222
+ expect(frameOn(first, 'lineas-3').collapsed).toBe(true);
223
+ expect(frameOn(first, 'lineas-1').collapsed).toBeUndefined();
224
+ // On the added page, under the rest of the box, at their size.
225
+ const lines = frameOn(added, 'lineas-3');
226
+ const rest = frameOn(added, 'act-3');
227
+ expect(lines.collapsed).toBeUndefined();
228
+ expect(lines.rect.height).toBeCloseTo(16 * MM, 3);
229
+ expect(lines.rect.y).toBeGreaterThan(rest.rect.y + rest.rect.height);
230
+ // Their rules are drawn on the added page only; the first sheet's
231
+ // answer lines stay where they were, and not on the added page.
232
+ const rulesOn = (p) => decoBoxes(p).filter((b) => b.kind === 'rule').length;
233
+ expect(rulesOn(first)).toBe(3);
234
+ expect(rulesOn(added)).toBe(2);
235
+ for (const b of decoBoxes(added).filter((d) => d.kind === 'rule'))
236
+ expect(b.bbox.y).toBeGreaterThan(lines.rect.y);
237
+ expect(warningsOf(doc, 'frameOverflow')).toEqual([]);
238
+ });
239
+ it('the rest of the box starts where its group starts, clear of the kicker', () => {
240
+ const doc = build(sheet(900, 700), [FICHA]);
241
+ const added = composedPages(doc)[1];
242
+ const kicker = decoBoxes(added).find((b) => b.kind === 'text');
243
+ expect(kicker).toBeDefined();
244
+ const rest = frameOn(added, 'act-3');
245
+ expect(rest.rect.y).toBeGreaterThanOrEqual(kicker.bbox.y + kicker.bbox.height);
246
+ // Where the template puts its group: under the running text's place.
247
+ expect(rest.rect.y).toBeCloseTo(frameOn(added, 'texto').rect.y + 6 * MM, 3);
248
+ // A click on the kicker comes back to it.
249
+ const line = kicker.lines[0];
250
+ const hit = sourceAt(doc, added.index, kicker.bbox.x + line.xOffset + line.width / 2, kicker.bbox.y + kicker.bbox.height / 2)[0];
251
+ expect(hit?.id).toMatch(/^cp0:decoration:tema(@|$)/);
252
+ });
253
+ it('the answer lines keep their size on whichever page they land: the box goes on rather than squeeze them', () => {
254
+ let wholeMoves = 0;
255
+ for (let first = 560; first <= 900; first += 10) {
256
+ const doc = build(sheet(first, 150), [FICHA]);
257
+ const pages = composedPages(doc);
258
+ const lines = pages.map((p) => frameOn(p, 'lineas-3')).filter((f) => !f.collapsed);
259
+ expect(lines, `first ${first}`).toHaveLength(1);
260
+ expect(lines[0].rect.height, `first ${first}`).toBeCloseTo(16 * MM, 3);
261
+ // A box with no room for its lines under it goes on whole with them.
262
+ if (pages.length > 1 && frameOn(pages[0], 'act-3').blockIds.length === 0) {
263
+ wholeMoves++;
264
+ // With its lines, it takes no room here.
265
+ if (frameOn(pages[0], 'lineas-3').collapsed)
266
+ expect(frameOn(pages[0], 'act-3').rect.height).toBe(0);
267
+ expect(overlayOf(blocksOf(pages[1], frameOn(pages[1], 'act-3'))[0])).toContain('3 · Dibuja');
268
+ }
269
+ }
270
+ expect(wholeMoves).toBeGreaterThan(0);
271
+ });
272
+ it('a box none of whose text fits on the page goes on whole: no tab and mark over an empty piece', () => {
273
+ // A first box long enough to push the last one to the foot.
274
+ let checked = 0;
275
+ for (const n of [1250, 1300, 1350, 1400, 1450]) {
276
+ const doc = build(sheet(n, 300), [FICHA]);
277
+ const [first, added] = composedPages(doc);
278
+ if (!added)
279
+ continue;
280
+ const piece = frameOn(first, 'act-3');
281
+ const blocks = blocksOf(first, piece);
282
+ if (blocks.length > 0) {
283
+ // A piece holds text.
284
+ expect(textOf(blocks).length).toBeGreaterThan(0);
285
+ continue;
286
+ }
287
+ checked++;
288
+ expect(piece.continuesTo).toBe('cp0:act-3~1');
289
+ // The whole box, with its tab, on the added page.
290
+ const whole = blocksOf(added, frameOn(added, 'act-3'));
291
+ expect(overlayOf(whole[0])).toContain('3 · Dibuja');
292
+ expect(textOf(whole)).toMatch(/^tres0 /);
293
+ }
294
+ expect(checked).toBeGreaterThan(0);
295
+ });
296
+ });
297
+ describe('a story that jumps to a later page (#917)', () => {
298
+ const top = { anchor: { to: 'container', edge: 'top-left' } };
299
+ const ARTICULO = {
300
+ id: 'articulo',
301
+ header: false,
302
+ frames: [{ name: 'cuerpo', style: 'caja-azul', flow: true, width: mm(186), height: mm(90), placement: top, overflow: { continueIn: 'page:{attr.sigue}', mark: 'Sigue en la página {page}', fromMark: 'Viene de la página {page}' }, fit: { shrinkText: false } }],
303
+ };
304
+ const OTRA = { id: 'otra', header: false, frames: [{ name: 'texto', flow: true, width: mm(186), placement: top }] };
305
+ const SALTO = {
306
+ id: 'salto',
307
+ header: false,
308
+ frames: [
309
+ { name: 'breve', flow: true, width: mm(186), height: mm(40), placement: top },
310
+ { name: 'resto', style: 'caja-azul', width: mm(186), placement: { anchor: { to: '#breve', edge: 'below' }, offset: { y: mm(10) } } },
311
+ { name: 'vacio', optional: true, width: mm(40), height: mm(20), placement: { anchor: { to: 'container', edge: 'bottom-left' } } },
312
+ ],
313
+ };
314
+ const TEMPLATES = [ARTICULO, OTRA, SALTO];
315
+ const book = (sigue, order = 'after') => {
316
+ const art = ['::::page{template="articulo" sigue="' + sigue + '"}', para('art', 900), '::::', ''];
317
+ const other = ['::::page{template="otra"}', para('otra', 200), '::::', ''];
318
+ const jump = ['::::page{template="salto" id="p-salto"}', para('breve', 60), '::::', ''];
319
+ return (order === 'after' ? [...art, ...other, ...jump] : [...jump, ...art, ...other]).join('\n');
320
+ };
321
+ it('goes on in the frame the later page leaves empty, past the pages between', () => {
322
+ const doc = build(book('p-salto'), TEMPLATES);
323
+ const pages = composedPages(doc);
324
+ expect(pages.map((p) => p.composed.template)).toEqual(['articulo', 'otra', 'salto']);
325
+ const [first, , jumpPage] = pages;
326
+ const from = frameOn(first, 'cuerpo');
327
+ const to = frameOn(jumpPage, 'resto');
328
+ expect(to.id).toBe('cp2:resto');
329
+ expect(from.continuesTo).toBe('cp2:resto');
330
+ expect(to.continuedFrom).toBe('cp0:cuerpo');
331
+ expect(first.composed.log).toContainEqual({ frame: 'cuerpo', kind: 'continued', toPage: jumpPage.index, toFrame: 'cp2:resto' });
332
+ // The page's own content stays where it was.
333
+ expect(textOf(blocksOf(jumpPage, frameOn(jumpPage, 'breve')))).toMatch(/^breve0 /);
334
+ expect(frameOn(jumpPage, 'vacio').blockIds).toEqual([]);
335
+ // Every word of the article once, across the two pages.
336
+ const all = `${textOf(blocksOf(first, from))} ${textOf(blocksOf(jumpPage, to))}`;
337
+ for (const w of ['art0 ', 'art450 ', 'art899'])
338
+ expect(count(all, w)).toBe(1);
339
+ expect(warningsOf(doc, 'frameOverflow', 'continueTargetMissing')).toEqual([]);
340
+ // The pieces are one box.
341
+ expect(blocksOf(jumpPage, to)[0].containerId).toBe(blocksOf(first, from)[0].containerId);
342
+ });
343
+ it('the frame a story jumps to is not reported empty; another empty frame is', () => {
344
+ const strict = { ...SALTO, frames: SALTO.frames.map((f) => (f.name === 'vacio' ? { ...f, optional: false } : f)) };
345
+ const doc = build(book('p-salto'), [ARTICULO, OTRA, strict]);
346
+ expect(warningsOf(doc, 'slotEmpty').map((w) => w.frame)).toEqual(['vacio']);
347
+ });
348
+ it('marks say where the story goes on and where it comes from, with the printed page numbers', () => {
349
+ const doc = build(book('p-salto'), TEMPLATES);
350
+ const [first, , jumpPage] = composedPages(doc);
351
+ const sent = overlayOf(blocksOf(first, frameOn(first, 'cuerpo'))[0]);
352
+ expect(sent).toContain(`Sigue en la página ${jumpPage.pageLabel}`);
353
+ const got = overlayOf(blocksOf(jumpPage, frameOn(jumpPage, 'resto'))[0]);
354
+ expect(got).toContain(`Viene de la página ${first.pageLabel}`);
355
+ });
356
+ it("'page:<id>#<frame>' names the frame that takes it", () => {
357
+ const named = { ...ARTICULO, frames: [{ ...ARTICULO.frames[0], overflow: { continueIn: 'page:{attr.sigue}#vacio' } }] };
358
+ const doc = build(book('p-salto'), [named, OTRA, SALTO]);
359
+ const jumpPage = composedPages(doc)[2];
360
+ expect(frameOn(jumpPage, 'vacio').continuedFrom).toBe('cp0:cuerpo');
361
+ expect(frameOn(jumpPage, 'resto').blockIds).toEqual([]);
362
+ });
363
+ it('what the frame there cannot hold goes on on a page added after it', () => {
364
+ const small = { ...SALTO, frames: SALTO.frames.map((f) => (f.name === 'resto' ? { ...f, height: mm(60) } : f)) };
365
+ const doc = buildDocument({ markdown: book('p-salto').replace(para('art', 900), para('art', 2400)), resources: [] }, { ...BASE, pageTemplates: [ARTICULO, OTRA, small] }, createMeasurementCache());
366
+ const pages = composedPages(doc);
367
+ expect(pages.map((p) => p.composed.template).slice(0, 3)).toEqual(['articulo', 'otra', 'salto']);
368
+ expect(pages.length).toBeGreaterThanOrEqual(4);
369
+ const added = pages[3];
370
+ expect(added.composed.continuationOf).toBe(pages[2].index);
371
+ expect(frameOn(pages[2], 'resto').continuesTo).toBe(frameOn(added, 'resto').id);
372
+ expect(frameOn(added, 'resto').id).toBe('cp2:resto~1');
373
+ const all = pages.flatMap((p) => p.composed.frames.filter((f) => f.name === 'cuerpo' || f.name === 'resto').map((f) => textOf(blocksOf(p, f)))).join(' ');
374
+ for (const w of ['art0 ', 'art1200 ', 'art2399'])
375
+ expect(count(all, w)).toBe(1);
376
+ });
377
+ it('a page id no later fence has: the rest goes on on the next page, and a warning says so', () => {
378
+ for (const [sigue, order, before] of [['nada', 'after', false], ['p-salto', 'before', true]]) {
379
+ const doc = build(book(sigue, order), TEMPLATES);
380
+ const ws = warningsOf(doc, 'continueTargetMissing');
381
+ expect(ws, `${sigue} ${order}`).toHaveLength(1);
382
+ expect(ws[0]).toMatchObject({ kind: 'continueTargetMissing', template: 'articulo', frame: 'cuerpo', target: sigue, ...(before ? { before: true } : {}) });
383
+ const pages = composedPages(doc);
384
+ const at = pages.findIndex((p) => p.composed.template === 'articulo');
385
+ expect(pages[at + 1].composed.continuationOf).toBe(pages[at].index);
386
+ }
387
+ });
388
+ });
389
+ //# sourceMappingURL=continuationRules.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuationRules.test.js","sourceRoot":"","sources":["../../../src/__tests__/composed/continuationRules.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coverImages.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverImages.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/composed/coverImages.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline/build';
3
+ import { createMeasurementCache } from '../../measure';
4
+ import { renderToHtml } from '../../html-backend';
5
+ import { placedImageResolutions } from '../../preflight';
6
+ // Deterministic text measurement stub (no DOM in the node test env).
7
+ class StubCtx {
8
+ font = '';
9
+ measureText(s) {
10
+ return { width: s.length * 7 };
11
+ }
12
+ }
13
+ globalThis.OffscreenCanvas = class {
14
+ getContext() {
15
+ return new StubCtx();
16
+ }
17
+ };
18
+ const mm = (value) => ({ value, unit: 'mm' });
19
+ const DPI = 300;
20
+ const MM = DPI / 25.4;
21
+ const PAGE = {
22
+ page: { width: mm(200), height: mm(260), dpi: DPI, margins: { top: mm(20), bottom: mm(20), left: mm(20), right: mm(20) } },
23
+ headings: { balancing: { enabled: false }, levels: [{ level: 1, breakBefore: { enabled: false } }] },
24
+ };
25
+ /** A landscape photograph, twice as wide as tall. */
26
+ const photo = (extra = {}) => ({ id: 'foto', typeId: 'figure', kind: 'bitmap', caption: '', altText: 'A harbour at dawn', createdAt: 0, updatedAt: 0, bitmap: { fileId: 'f', format: 'jpeg', width: 4000, height: 2000 }, ...extra });
27
+ /** The photo in a square box of 100 mm. */
28
+ const hero = (extra = {}) => ({
29
+ id: 'hero',
30
+ frames: [{ name: 'texto', flow: true, placement: { anchor: { to: 'container', edge: 'bottom-left' } }, height: mm(20) }],
31
+ decoration: { elements: [{ kind: 'image', id: 'foto', resourceId: 'foto', placement: { anchor: { to: 'page', edge: 'top-left' }, size: { width: mm(100), height: mm(100) } }, ...extra }] },
32
+ });
33
+ const build = (tpl, resources = [photo()]) => buildDocument({ markdown: '::::page{template="hero"}\n\nA line.\n\n::::', resources }, { ...PAGE, pageTemplates: [tpl] }, createMeasurementCache());
34
+ const composedPage = (doc) => doc.pages.find((p) => p.composed);
35
+ const image = (doc) => composedPage(doc).composed.decoration.blocks.find((b) => b.kind === 'image');
36
+ describe('design images that cover their box (#923)', () => {
37
+ it('contain, the default, fits the whole picture inside the box', () => {
38
+ const b = image(build(hero()));
39
+ expect(b.crop).toBeUndefined();
40
+ expect(b.bbox.width).toBeCloseTo(100 * MM, 3);
41
+ expect(b.bbox.height).toBeCloseTo(50 * MM, 3);
42
+ });
43
+ it('cover fills the box and crops the sides, centred', () => {
44
+ const b = image(build(hero({ fit: 'cover' })));
45
+ expect(b.bbox).toMatchObject({ x: 0, y: 0 });
46
+ expect(b.bbox.width).toBeCloseTo(100 * MM, 3);
47
+ expect(b.bbox.height).toBeCloseTo(100 * MM, 3);
48
+ expect(b.crop.width).toBeCloseTo(0.5, 6);
49
+ expect(b.crop.height).toBeCloseTo(1, 6);
50
+ expect(b.crop.x).toBeCloseTo(0.25, 6);
51
+ });
52
+ it('a focus point moves the window; the safe area stays in view', () => {
53
+ expect(image(build(hero({ fit: 'cover', focus: { x: 0.9, y: 0.5 } }))).crop.x).toBeCloseTo(0.5, 6);
54
+ expect(image(build(hero({ fit: 'cover', focus: { x: 0.1, y: 0.5 } }))).crop.x).toBeCloseTo(0, 6);
55
+ // The subject on the left third: the crop keeps it.
56
+ const kept = image(build(hero({ fit: 'cover', focus: { x: 0.9, y: 0.5 } }), [photo({ safeArea: { x: 0.05, y: 0, width: 0.3, height: 1 } })])).crop;
57
+ expect(kept.x).toBeLessThanOrEqual(0.05 + 1e-6);
58
+ expect(kept.x + kept.width).toBeGreaterThanOrEqual(0.35 - 1e-6);
59
+ // A safe area wider than the box allows: the smallest window holding
60
+ // it, the box not filled across.
61
+ const wide = image(build(hero({ fit: 'cover' }), [photo({ safeArea: { x: 0.1, y: 0, width: 0.8, height: 1 } })]));
62
+ expect(wide.crop.width).toBeCloseTo(0.8, 6);
63
+ expect(wide.bbox.height).toBeLessThan(100 * MM - 1);
64
+ });
65
+ it('the HTML clips the whole picture to the box; preflight reads the share shown', () => {
66
+ const doc = build(hero({ fit: 'cover' }));
67
+ const html = renderToHtml(doc, { resourceImageUrl: () => 'photo.jpg' });
68
+ expect(html).toMatch(/overflow:hidden;"><img src="photo\.jpg"[^>]*width:2362\.\d+px;height:1181\.\d+px/);
69
+ // The share shown, 2000 × 2000 px of the picture, across 100 mm: 508 ppi
70
+ // both ways (the whole picture's 4000 px over the box would read 1016).
71
+ const [placed] = placedImageResolutions(doc, { resources: [photo()] });
72
+ expect(placed.ppi).toBeCloseTo(2000 / (100 / 25.4), 0);
73
+ });
74
+ });
75
+ //# sourceMappingURL=coverImages.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverImages.test.js","sourceRoot":"","sources":["../../../src/__tests__/composed/coverImages.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decorationSize.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorationSize.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/composed/decorationSize.test.ts"],"names":[],"mappings":""}