postext 1.36.0 → 1.37.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 (178) hide show
  1. package/dist/__tests__/composed/continuation.test.d.ts +2 -0
  2. package/dist/__tests__/composed/continuation.test.d.ts.map +1 -0
  3. package/dist/__tests__/composed/continuation.test.js +352 -0
  4. package/dist/__tests__/composed/continuation.test.js.map +1 -0
  5. package/dist/__tests__/composed/contrast.test.d.ts +2 -0
  6. package/dist/__tests__/composed/contrast.test.d.ts.map +1 -0
  7. package/dist/__tests__/composed/contrast.test.js +124 -0
  8. package/dist/__tests__/composed/contrast.test.js.map +1 -0
  9. package/dist/__tests__/composed/corpus.test.js +7 -1
  10. package/dist/__tests__/composed/corpus.test.js.map +1 -1
  11. package/dist/__tests__/composed/fit.test.js +9 -6
  12. package/dist/__tests__/composed/fit.test.js.map +1 -1
  13. package/dist/__tests__/composed/groups.test.js +14 -0
  14. package/dist/__tests__/composed/groups.test.js.map +1 -1
  15. package/dist/__tests__/composed/headingDesigns.test.d.ts +2 -0
  16. package/dist/__tests__/composed/headingDesigns.test.d.ts.map +1 -0
  17. package/dist/__tests__/composed/headingDesigns.test.js +262 -0
  18. package/dist/__tests__/composed/headingDesigns.test.js.map +1 -0
  19. package/dist/__tests__/composed/labels.test.d.ts +2 -0
  20. package/dist/__tests__/composed/labels.test.d.ts.map +1 -0
  21. package/dist/__tests__/composed/labels.test.js +326 -0
  22. package/dist/__tests__/composed/labels.test.js.map +1 -0
  23. package/dist/__tests__/composed/outsidePrint.test.js +5 -2
  24. package/dist/__tests__/composed/outsidePrint.test.js.map +1 -1
  25. package/dist/__tests__/composed/sourceMap.test.js +26 -0
  26. package/dist/__tests__/composed/sourceMap.test.js.map +1 -1
  27. package/dist/__tests__/composed/spreadLabels.test.d.ts +2 -0
  28. package/dist/__tests__/composed/spreadLabels.test.d.ts.map +1 -0
  29. package/dist/__tests__/composed/spreadLabels.test.js +131 -0
  30. package/dist/__tests__/composed/spreadLabels.test.js.map +1 -0
  31. package/dist/__tests__/exports.test.js +11 -0
  32. package/dist/__tests__/exports.test.js.map +1 -1
  33. package/dist/__tests__/migrate/fixtures/textbookPort.d.ts +14 -0
  34. package/dist/__tests__/migrate/fixtures/textbookPort.d.ts.map +1 -0
  35. package/dist/__tests__/migrate/fixtures/textbookPort.js +116 -0
  36. package/dist/__tests__/migrate/fixtures/textbookPort.js.map +1 -0
  37. package/dist/__tests__/migrate/textToMarkdown.test.d.ts +2 -0
  38. package/dist/__tests__/migrate/textToMarkdown.test.d.ts.map +1 -0
  39. package/dist/__tests__/migrate/textToMarkdown.test.js +268 -0
  40. package/dist/__tests__/migrate/textToMarkdown.test.js.map +1 -0
  41. package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts +2 -0
  42. package/dist/__tests__/paragraphStyleLetterSpacing.test.d.ts.map +1 -0
  43. package/dist/__tests__/paragraphStyleLetterSpacing.test.js +89 -0
  44. package/dist/__tests__/paragraphStyleLetterSpacing.test.js.map +1 -0
  45. package/dist/__tests__/pictureBelowPrintSize.test.d.ts +2 -0
  46. package/dist/__tests__/pictureBelowPrintSize.test.d.ts.map +1 -0
  47. package/dist/__tests__/pictureBelowPrintSize.test.js +82 -0
  48. package/dist/__tests__/pictureBelowPrintSize.test.js.map +1 -0
  49. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +1 -1
  50. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
  51. package/dist/canvas-backend/composed.d.ts +5 -2
  52. package/dist/canvas-backend/composed.d.ts.map +1 -1
  53. package/dist/canvas-backend/composed.js +5 -3
  54. package/dist/canvas-backend/composed.js.map +1 -1
  55. package/dist/canvas-backend/index.d.ts.map +1 -1
  56. package/dist/canvas-backend/index.js +37 -19
  57. package/dist/canvas-backend/index.js.map +1 -1
  58. package/dist/canvas-backend/renderResourceBlock.d.ts +5 -1
  59. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  60. package/dist/canvas-backend/renderResourceBlock.js +60 -1
  61. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  62. package/dist/composed/continuation.d.ts +102 -0
  63. package/dist/composed/continuation.d.ts.map +1 -0
  64. package/dist/composed/continuation.js +87 -0
  65. package/dist/composed/continuation.js.map +1 -0
  66. package/dist/composed/labels.d.ts +154 -0
  67. package/dist/composed/labels.d.ts.map +1 -0
  68. package/dist/composed/labels.js +524 -0
  69. package/dist/composed/labels.js.map +1 -0
  70. package/dist/composed/pageMemo.d.ts +3 -2
  71. package/dist/composed/pageMemo.d.ts.map +1 -1
  72. package/dist/composed/pageMemo.js +3 -1
  73. package/dist/composed/pageMemo.js.map +1 -1
  74. package/dist/composed/paint.d.ts +8 -2
  75. package/dist/composed/paint.d.ts.map +1 -1
  76. package/dist/composed/paint.js +8 -2
  77. package/dist/composed/paint.js.map +1 -1
  78. package/dist/composed/reflowLog.d.ts +3 -1
  79. package/dist/composed/reflowLog.d.ts.map +1 -1
  80. package/dist/composed/reflowLog.js +20 -6
  81. package/dist/composed/reflowLog.js.map +1 -1
  82. package/dist/composed/sourceMap.d.ts +0 -21
  83. package/dist/composed/sourceMap.d.ts.map +1 -1
  84. package/dist/composed/sourceMap.js +87 -7
  85. package/dist/composed/sourceMap.js.map +1 -1
  86. package/dist/composed/spread.d.ts +3 -0
  87. package/dist/composed/spread.d.ts.map +1 -1
  88. package/dist/composed/spread.js +1 -1
  89. package/dist/composed/spread.js.map +1 -1
  90. package/dist/configWarnings.d.ts +15 -0
  91. package/dist/configWarnings.d.ts.map +1 -1
  92. package/dist/configWarnings.js +29 -17
  93. package/dist/configWarnings.js.map +1 -1
  94. package/dist/contrast.d.ts +5 -3
  95. package/dist/contrast.d.ts.map +1 -1
  96. package/dist/contrast.js +46 -5
  97. package/dist/contrast.js.map +1 -1
  98. package/dist/defaults/paragraphStyles.d.ts +1 -1
  99. package/dist/defaults/paragraphStyles.d.ts.map +1 -1
  100. package/dist/defaults/paragraphStyles.js +5 -1
  101. package/dist/defaults/paragraphStyles.js.map +1 -1
  102. package/dist/design/slots.d.ts +12 -10
  103. package/dist/design/slots.d.ts.map +1 -1
  104. package/dist/design/slots.js +26 -2
  105. package/dist/design/slots.js.map +1 -1
  106. package/dist/fonts/faces.d.ts.map +1 -1
  107. package/dist/fonts/faces.js +6 -0
  108. package/dist/fonts/faces.js.map +1 -1
  109. package/dist/highlightMarks.d.ts.map +1 -1
  110. package/dist/highlightMarks.js +6 -0
  111. package/dist/highlightMarks.js.map +1 -1
  112. package/dist/html-backend.d.ts.map +1 -1
  113. package/dist/html-backend.js +40 -2
  114. package/dist/html-backend.js.map +1 -1
  115. package/dist/index.d.ts +7 -3
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +5 -1
  118. package/dist/index.js.map +1 -1
  119. package/dist/migrate/markdownRuns.d.ts +70 -0
  120. package/dist/migrate/markdownRuns.d.ts.map +1 -0
  121. package/dist/migrate/markdownRuns.js +215 -0
  122. package/dist/migrate/markdownRuns.js.map +1 -0
  123. package/dist/migrate/pageDesign.d.ts +119 -0
  124. package/dist/migrate/pageDesign.d.ts.map +1 -0
  125. package/dist/migrate/pageDesign.js +446 -0
  126. package/dist/migrate/pageDesign.js.map +1 -0
  127. package/dist/migrate/textToMarkdown.d.ts +124 -0
  128. package/dist/migrate/textToMarkdown.d.ts.map +1 -0
  129. package/dist/migrate/textToMarkdown.js +716 -0
  130. package/dist/migrate/textToMarkdown.js.map +1 -0
  131. package/dist/pipeline/build.d.ts.map +1 -1
  132. package/dist/pipeline/build.js +192 -24
  133. package/dist/pipeline/build.js.map +1 -1
  134. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  135. package/dist/pipeline/buildMeasurement.js +12 -1
  136. package/dist/pipeline/buildMeasurement.js.map +1 -1
  137. package/dist/pipeline/calloutLayout.d.ts +20 -1
  138. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  139. package/dist/pipeline/calloutLayout.js +30 -2
  140. package/dist/pipeline/calloutLayout.js.map +1 -1
  141. package/dist/pipeline/composedLayout.d.ts +16 -2
  142. package/dist/pipeline/composedLayout.d.ts.map +1 -1
  143. package/dist/pipeline/composedLayout.js +107 -37
  144. package/dist/pipeline/composedLayout.js.map +1 -1
  145. package/dist/pipeline/contentWarnings.d.ts +15 -0
  146. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  147. package/dist/pipeline/contentWarnings.js +85 -0
  148. package/dist/pipeline/contentWarnings.js.map +1 -1
  149. package/dist/pipeline/frameLayout.d.ts +4 -1
  150. package/dist/pipeline/frameLayout.d.ts.map +1 -1
  151. package/dist/pipeline/frameLayout.js +5 -2
  152. package/dist/pipeline/frameLayout.js.map +1 -1
  153. package/dist/pipeline/headerFooter.d.ts +11 -1
  154. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  155. package/dist/pipeline/headerFooter.js +169 -66
  156. package/dist/pipeline/headerFooter.js.map +1 -1
  157. package/dist/pipeline/mirrorFrame.d.ts.map +1 -1
  158. package/dist/pipeline/mirrorFrame.js +25 -2
  159. package/dist/pipeline/mirrorFrame.js.map +1 -1
  160. package/dist/pipeline/resourceLayout.d.ts +28 -0
  161. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  162. package/dist/pipeline/resourceLayout.js +21 -0
  163. package/dist/pipeline/resourceLayout.js.map +1 -1
  164. package/dist/pipeline/styles.d.ts +1 -1
  165. package/dist/pipeline/styles.d.ts.map +1 -1
  166. package/dist/pipeline/styles.js +4 -0
  167. package/dist/pipeline/styles.js.map +1 -1
  168. package/dist/types.d.ts +13 -0
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/vdt.d.ts +138 -7
  171. package/dist/vdt.d.ts.map +1 -1
  172. package/dist/vdt.js.map +1 -1
  173. package/dist/word/toDocx.d.ts.map +1 -1
  174. package/dist/word/toDocx.js +14 -0
  175. package/dist/word/toDocx.js.map +1 -1
  176. package/dist/word/word.test.js +11 -1
  177. package/dist/word/word.test.js.map +1 -1
  178. package/package.json +1 -1
@@ -0,0 +1,268 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument, collectConfigWarnings, configDesignSlots, moveTextToMarkdown } from '../../index';
3
+ import { createMeasurementCache } from '../../measure';
4
+ import { scanChapter } from '../../migrate/markdownRuns';
5
+ import { joinLines } from '../../migrate/pageDesign';
6
+ import { PORT_CHAPTERS, PORT_CONFIG } from './fixtures/textbookPort';
7
+ // Deterministic text measurement stub (no DOM in the node test env).
8
+ class StubCtx {
9
+ font = '';
10
+ measureText(s) {
11
+ return { width: s.length * 7 };
12
+ }
13
+ }
14
+ globalThis.OffscreenCanvas = class {
15
+ getContext() {
16
+ return new StubCtx();
17
+ }
18
+ };
19
+ const metadata = { title: 'Our World' };
20
+ const run = (opts = {}) => moveTextToMarkdown({ config: PORT_CONFIG, chapters: PORT_CHAPTERS, metadata }, opts);
21
+ const contentWarnings = (config) => collectConfigWarnings(config, { metadata }).filter((w) => w.kind === 'contentInConfig');
22
+ const template = (config, id) => config.pageTemplates.find((t) => t.id === id);
23
+ describe('moveTextToMarkdown (#874)', () => {
24
+ it('leaves no content in the configuration but the style no heading uses, and removes that one when asked', () => {
25
+ expect(contentWarnings(PORT_CONFIG).length).toBe(8);
26
+ const kept = run();
27
+ expect(kept.unchanged).toBe(false);
28
+ // Only the unused style still holds a sentence.
29
+ expect(contentWarnings(kept.config).map((w) => w.ownerId)).toEqual(['topic--p9']);
30
+ expect(kept.report.unusedStyles).toEqual(['topic--p9']);
31
+ expect(kept.report.left).toContainEqual({ path: 'headingStyles[id=topic--p9]', reason: 'unused' });
32
+ const removed = run({ unusedStyles: 'remove' });
33
+ expect(contentWarnings(removed.config)).toEqual([]);
34
+ expect(removed.report.contentInConfigAfter).toEqual({ warnings: 0, elements: 0, chars: 0 });
35
+ expect(removed.report.contentInConfigBefore.warnings).toBe(8);
36
+ expect(removed.report.headingStylesRemoved).toEqual(['topic--p9']);
37
+ expect(removed.report.configBytesAfter).toBeLessThan(removed.report.configBytesBefore);
38
+ });
39
+ it('writes a page fence per page, with the text in frame slots, the page picture as an attribute and the hard breaks kept', () => {
40
+ const { chapters, report } = run();
41
+ const ch1 = chapters.find((c) => c.id === 'ch1').markdown;
42
+ // The front matter and the headings stay; each design's run is a fence.
43
+ expect(ch1.startsWith('---\ntitle: "Our World"\n---')).toBe(true);
44
+ expect(ch1.match(/^::::page\{/gm).length).toBe(2);
45
+ expect(ch1).toMatch(/::::page\{template="page-base" background="art-p1"\}\n# Rivers and seas \{style="topic" id="t-rivers"\}\n\n# Where rivers start \{style="next--p1" id="t-springs"\}/);
46
+ // A highlight box under a bold word became the book's chip of its colour.
47
+ expect(ch1).toContain('Water covers most of the planet. :chip[Rivers]{style="key"} carry it from the hills\\\ndown to the sea');
48
+ expect(ch1).toContain(':::frame{slot="shared-');
49
+ expect(ch1).toMatch(/:::paragraphs\{style="fixture-stamp-32-center"\}\nRivers and seas\n:::\n:::/);
50
+ expect(report.chips).toBe(3);
51
+ expect(report.pages.map((p) => [p.chapterId, p.fence, p.template])).toEqual([
52
+ ['ch1', 0, 'page-base'], ['ch1', 1, 'p2'], ['ch2', 0, 'p3'], ['ch2', 1, 'p3'], ['ch2', 2, 'spread'], ['ch2', 3, 'spread'],
53
+ ]);
54
+ });
55
+ it('joins text blocks of one look set under one another into one frame', () => {
56
+ const { config, chapters, report } = run();
57
+ const ch1 = chapters.find((c) => c.id === 'ch1').markdown;
58
+ const body = ch1.slice(ch1.indexOf('Water covers'), ch1.indexOf('never stop.') + 'never stop.'.length);
59
+ // Three elements, three paragraphs of one frame.
60
+ expect(body.split('\n\n').length).toBe(3);
61
+ expect(body).not.toContain(':::');
62
+ // Kicker, title and body on three pages, a label, the spread's three;
63
+ // the atlas line keeps its placeholder.
64
+ expect(report.movedElements).toBe(5 + 6 + 5 + 3);
65
+ const style = config.paragraphStyles.find((p) => p.id === 'fixture-sans-11');
66
+ expect(style).toMatchObject({ fontFamily: 'Fixture Sans', lineHeight: { value: 1.5, unit: 'em' }, textAlign: 'left', hyphenation: false, spaceBetween: { value: 0, unit: 'mm' }, snapToGrid: false });
67
+ });
68
+ it('proposes a shared template for pages with frames in the same places, and the pages’ own extend it', () => {
69
+ const { config, report } = run();
70
+ const base = report.templates.find((t) => t.id === 'page-base');
71
+ // The first page draws nothing of its own: it is laid on the base.
72
+ expect(base).toMatchObject({ pages: 1 });
73
+ const t = template(config, 'page-base');
74
+ expect(t.frames.map((f) => f.name)).toEqual(['flow', 'shared-1', 'shared-2', 'shared-3']);
75
+ expect(t.frames[0]).toEqual({ name: 'flow', flow: true, optional: true, layer: -1 });
76
+ // The page picture is the page's attribute, shared by every page.
77
+ expect(t.decoration.elements[0]).toMatchObject({ kind: 'image', resourceId: '{attr.background}' });
78
+ expect(t.header).toBe(false);
79
+ expect(t.footer).toBe(false);
80
+ expect(template(config, 'p2').extends).toBe('page-base');
81
+ expect(template(config, 'p2').frames.map((f) => f.name)).toEqual(['text-1']);
82
+ // The card is drawn by every page (under its own id): the base's.
83
+ expect(t.decoration.elements.map((e) => e.id)).toEqual(['page', 'card-p1']);
84
+ expect(template(config, 'p3').decoration.elements.map((e) => e.id)).toEqual(['folio-p3']);
85
+ // No sharing: one template per page design.
86
+ const solo = run({ shareTemplates: false });
87
+ expect(solo.config.pageTemplates.every((x) => x.extends === undefined)).toBe(true);
88
+ expect(solo.report.templates.length).toBe(4);
89
+ expect(solo.report.templates.map((x) => x.id)).toEqual(['p1', 'p2', 'p3', 'spread']);
90
+ });
91
+ it('merges the page styles left the same, renames them in the Markdown and drops the headings that only switched the page', () => {
92
+ const { config, chapters, report } = run();
93
+ expect(report.headingStylesMerged).toEqual([
94
+ { into: 'topic', from: ['topic--p1', 'topic--p2', 'topic--p3'] },
95
+ ]);
96
+ const ids = config.headingStyles.map((s) => s.id);
97
+ expect(ids).toEqual(['topic', 'next--p1', 'cont--p3', 'spread', 'cont--spread', 'topic--p9']);
98
+ expect(config.headingStyles.find((s) => s.id === 'topic')).not.toHaveProperty('header');
99
+ const ch2 = chapters.find((c) => c.id === 'ch2').markdown;
100
+ expect(ch2).toContain('# Maps and plans {style="topic" id="t-maps"}');
101
+ expect(ch2).not.toContain('###### ·');
102
+ // Bare breaks next to composed pages go; the spread's side is a break's.
103
+ expect(ch2).not.toMatch(/^:::pagebreak$/m);
104
+ expect(ch2).toContain(':::pagebreak{parity="even"}\n\n::::page{template="spread"}');
105
+ expect(report.headingsDropped).toBe(1);
106
+ });
107
+ it('keeps a text that mixes words and a placeholder in the decoration and says so', () => {
108
+ const { config, report } = run();
109
+ expect(report.left).toContainEqual({ path: 'headingStyles[3] #folio-p3', reason: 'placeholder' });
110
+ expect(JSON.stringify(template(config, 'p3'))).toContain('Atlas page {pageNumber}');
111
+ });
112
+ it('sets a spread’s sides from the opening heading’s parity: verso frames in the verso variant, recto in the recto', () => {
113
+ const { config, chapters, report } = run();
114
+ const t = template(config, 'spread');
115
+ expect(t.variants?.verso?.frames?.length).toBe(1);
116
+ expect(t.variants?.recto?.frames?.length).toBe(2);
117
+ const spreadPages = report.pages.filter((p) => p.template === 'spread');
118
+ expect(spreadPages.map((p) => p.side)).toEqual(['verso', 'recto']);
119
+ expect(spreadPages[0].differences).toContain('flow');
120
+ const ch2 = chapters.find((c) => c.id === 'ch2').markdown;
121
+ const first = ch2.slice(ch2.indexOf('# Long ago'), ch2.indexOf('::::', ch2.indexOf('# Long ago')));
122
+ expect(first).toContain('Long ago people lived in caves');
123
+ expect(first).not.toContain('built towns');
124
+ expect(first).toContain('Some running text');
125
+ // The second page's own text, recto frames merged into one.
126
+ const second = ch2.slice(ch2.lastIndexOf('::::page'));
127
+ expect(second).toContain('Later they built towns and wrote down their laws.');
128
+ expect(second).toContain('Writing changed how people kept their history.');
129
+ });
130
+ it('lays out: every fence is a composed page, every moved text is set in its frame, the contents still finds the headings', () => {
131
+ const { config, chapters } = run({ unusedStyles: 'remove' });
132
+ for (const ch of chapters) {
133
+ const doc = buildDocument({ markdown: ch.markdown }, config, createMeasurementCache());
134
+ const fences = ch.markdown.match(/^::::page\{/gm).length;
135
+ const composed = doc.pages.filter((p) => p.composed);
136
+ expect(composed.length).toBe(fences);
137
+ // The spread opens on a verso, as its heading asked: page 3 is blank.
138
+ expect(doc.pages.length).toBe(ch.id === 'ch2' ? fences + 1 : fences);
139
+ if (ch.id === 'ch2')
140
+ expect(composed.slice(-2).map((p) => p.composed.variant)).toEqual(['verso', 'recto']);
141
+ const kinds = new Set([...(doc.contentWarnings ?? []), ...(doc.warnings ?? [])].map((w) => w.kind));
142
+ for (const k of ['slotUnknown', 'templateUnknown', 'pageFenceLength', 'unknownDirective'])
143
+ expect(kinds.has(k)).toBe(false);
144
+ const words = composed.flatMap((p) => p.composed.frames.flatMap((f) => f.blockIds.map((id) => p.floats.find((b) => b.id === id)).flatMap((b) => b.lines.map((l) => l.text)))).join(' ');
145
+ if (ch.id === 'ch1') {
146
+ expect(words).toContain('Water covers most of the planet.');
147
+ expect(words).toContain('Rain gauge');
148
+ }
149
+ else {
150
+ expect(words).toContain('Writing changed how people kept their history.');
151
+ }
152
+ }
153
+ });
154
+ it('gives back the book unchanged when nothing is held in a page design', () => {
155
+ const clean = { headingStyles: [{ id: 'plain', header: { elements: [{ kind: 'text', id: 'h', content: '{chapterTitle}', fontSize: { value: 9, unit: 'pt' }, placement: { anchor: { to: 'page', edge: 'top-left' } } }] } }] };
156
+ const res = moveTextToMarkdown({ config: clean, chapters: [{ id: 'a', markdown: '# A {style="plain"}\n' }] });
157
+ expect(res.unchanged).toBe(true);
158
+ expect(res.config).toBe(clean);
159
+ expect(res.chapters[0].markdown).toBe('# A {style="plain"}\n');
160
+ });
161
+ it('turns highlights into chips only when asked', () => {
162
+ const off = run({ highlightsToChips: false });
163
+ expect(off.report.chips).toBe(0);
164
+ expect(off.chapters[0].markdown).toContain('**Rivers**');
165
+ expect(JSON.stringify(off.config.pageTemplates)).toContain('hl-p1');
166
+ });
167
+ });
168
+ describe('scanChapter (#874)', () => {
169
+ const designOf = (id) => (id.startsWith('a') ? 'A' : id.startsWith('b') ? 'B' : undefined);
170
+ const scan = (md) => scanChapter(md, { designOf, breaksPage: (h) => h.level === 1 });
171
+ it('closes a run at another design, a part and the chapter end; carries containers and code along', () => {
172
+ const md = [
173
+ '# One {style="a1"}', 'text', ':::callout', '# not a heading here {style="b1"}', ':::', '```', '# code {style="b1"}', '```',
174
+ '## sub', '# Two {style="b1"}', 'more', ':::part{title="P"}', ':::', '# Three {style="a2"}',
175
+ ].join('\n');
176
+ const s = scan(md);
177
+ expect(s.runs.map((r) => [r.design, r.startLine, r.endLine])).toEqual([['A', 0, 8], ['B', 9, 10], ['A', 13, 13]]);
178
+ });
179
+ it('starts a new page at a page break or a heading that breaks the page, and drops the breaks next to runs', () => {
180
+ const md = ['# One {style="a1"}', 'x', '', ':::pagebreak', '', '###### · {style="a2"}', '# Again {style="a3"}', ':::pagebreak', '# Other {style="b1"}'].join('\n');
181
+ const s = scan(md);
182
+ expect(s.runs[0].pages.map((p) => [p.startLine, p.endLine])).toEqual([[0, 1], [5, 5], [6, 6]]);
183
+ expect(s.runs[0].endLine).toBe(6);
184
+ expect(s.runs[1].startLine).toBe(8);
185
+ expect(s.dropBreaks).toEqual([7]);
186
+ });
187
+ });
188
+ describe('text as Markdown (#874)', () => {
189
+ it('prints a design text as the design printed it: marks kept or escaped, dollars and backslashes literal', () => {
190
+ const el = (id, content, inlineMarks, y) => ({ kind: 'text', id, content, inlineMarks, fontSize: { value: 11, unit: 'pt' }, align: 'left', placement: { anchor: { to: 'page', edge: 'top-left' }, offset: { x: { value: 20, unit: 'mm' }, y: { value: y, unit: 'mm' } }, size: { width: { value: 150, unit: 'mm' } } } });
191
+ const config = { headingStyles: [{ id: 's', hidden: true, header: { elements: [
192
+ el('a', 'Costs $5 *each* in C:\\shop, said the sign', false, 20),
193
+ el('b', 'The **key** word, and $3 too', true, 60),
194
+ ] } }] };
195
+ const res = moveTextToMarkdown({ config, chapters: [{ id: 'c', markdown: '# Shop {style="s"}\n' }] });
196
+ const doc = buildDocument({ markdown: res.chapters[0].markdown }, res.config, createMeasurementCache());
197
+ const page = doc.pages.find((p) => p.composed);
198
+ const texts = page.composed.frames.flatMap((f) => f.blockIds.map((id) => page.floats.find((b) => b.id === id)).filter((b) => b.type === 'paragraph').map((b) => b.lines.map((l) => l.text).join(' ')));
199
+ expect(texts).toContain('Costs $5 *each* in C:\\shop, said the sign');
200
+ expect(texts).toContain('The key word, and $3 too');
201
+ });
202
+ });
203
+ describe('moveTextToMarkdown carries tracking (#907)', () => {
204
+ /** The port with its page titles tracked +15/1000 em, as the textbook's
205
+ * are: on most pages in em, on the third in points (0.48 pt of 32 pt). */
206
+ const tracked = () => {
207
+ const json = JSON.parse(JSON.stringify(PORT_CONFIG));
208
+ for (const style of json.headingStyles ?? []) {
209
+ for (const el of (style.header?.elements ?? [])) {
210
+ if (el.kind !== 'text' || !el.id.startsWith('title-'))
211
+ continue;
212
+ el.letterSpacing = el.id === 'title-p3' ? { value: 0.48, unit: 'pt' } : { value: 0.015, unit: 'em' };
213
+ }
214
+ }
215
+ return json;
216
+ };
217
+ it('writes a moved text’s letter spacing into the paragraph style it creates, in ems of its size', () => {
218
+ const { config, chapters, report } = moveTextToMarkdown({ config: tracked(), chapters: PORT_CHAPTERS, metadata });
219
+ const titles = config.paragraphStyles.filter((p) => p.fontFamily === 'Fixture Stamp' && p.fontSize && p.fontSize.value === 32);
220
+ expect(titles.length).toBeGreaterThan(0);
221
+ for (const t of titles)
222
+ expect(t.letterSpacing).toEqual({ value: 0.015, unit: 'em' });
223
+ // The pages no longer report tracking as a difference.
224
+ expect(report.pages.flatMap((p) => p.differences)).not.toContain('letterSpacing');
225
+ // An untracked look gets none.
226
+ expect(config.paragraphStyles.find((p) => p.id === 'fixture-sans-11').letterSpacing).toBeUndefined();
227
+ // Laid out, the title is set tracked in its frame.
228
+ const ch1 = chapters.find((c) => c.id === 'ch1');
229
+ const doc = buildDocument({ markdown: ch1.markdown }, config, createMeasurementCache());
230
+ const page = doc.pages.find((p) => p.composed);
231
+ const title = (page.floats ?? []).find((b) => b.type === 'paragraph' && b.lines[0]?.text === 'RIVERS AND SEAS');
232
+ const sizePx = (32 / 72) * doc.config.page.dpi;
233
+ expect(title?.letterSpacing).toBeCloseTo(0.015 * sizePx, 5);
234
+ });
235
+ it('keeps tracked and untracked texts of one look apart', () => {
236
+ const config = tracked();
237
+ const p1 = config.headingStyles.find((s) => (s.header?.elements ?? []).some((e) => e.id === 'title-p1'));
238
+ const el = p1.header.elements.find((e) => e.id === 'title-p1');
239
+ delete el.letterSpacing;
240
+ const out = moveTextToMarkdown({ config, chapters: PORT_CHAPTERS, metadata }).config;
241
+ const titles = out.paragraphStyles.filter((p) => p.fontFamily === 'Fixture Stamp' && p.fontSize.value === 32);
242
+ expect(titles.some((t) => t.letterSpacing === undefined)).toBe(true);
243
+ expect(titles.some((t) => t.letterSpacing !== undefined)).toBe(true);
244
+ });
245
+ });
246
+ describe('joinLines (#874)', () => {
247
+ it('breaks lines with a backslash, and on the same line where the next would start a list', () => {
248
+ expect(joinLines(['a', 'b'])).toBe('a\\\nb');
249
+ expect(joinLines(['1978. A year', '- next'])).toBe('​1978. A year \\\\ - next');
250
+ });
251
+ });
252
+ describe('configDesignSlots and page templates (#874)', () => {
253
+ it('lists a template’s decoration, running heads and variants, so the check reads them', () => {
254
+ const config = {
255
+ pageTemplates: [{
256
+ id: 't',
257
+ decoration: { elements: [{ kind: 'text', id: 'x', content: 'A whole sentence written into the template itself.', fontSize: { value: 9, unit: 'pt' }, placement: { anchor: { to: 'page', edge: 'top-left' } } }] },
258
+ variants: { recto: { header: { elements: [] } } },
259
+ }],
260
+ };
261
+ expect(configDesignSlots(config).map((s) => [s.path, s.kind, s.owner, s.ownerId])).toEqual([
262
+ ['pageTemplates[0].decoration', 'decoration', 'pageTemplates[0]', 't'],
263
+ ['pageTemplates[0].variants.recto.header', 'header', 'pageTemplates[0]', 't'],
264
+ ]);
265
+ expect(collectConfigWarnings(config).filter((w) => w.kind === 'contentInConfig').map((w) => w.path)).toEqual(['pageTemplates[0]']);
266
+ });
267
+ });
268
+ //# sourceMappingURL=textToMarkdown.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textToMarkdown.test.js","sourceRoot":"","sources":["../../../src/__tests__/migrate/textToMarkdown.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=paragraphStyleLetterSpacing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paragraphStyleLetterSpacing.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/paragraphStyleLetterSpacing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,89 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../pipeline';
3
+ import { renderToHtml } from '../html-backend';
4
+ import { resolveParagraphStylesConfig, stripParagraphStylesDefaults } from '../defaults/paragraphStyles';
5
+ import { resolveBodyTextConfig } from '../defaults/bodyText';
6
+ import { collectConfigWarnings } from '../configWarnings';
7
+ // #907: a paragraph style tracks its letters (`letterSpacing`), measured
8
+ // into the lines and painted as a heading level's tracking is.
9
+ class StubCtx {
10
+ font = '';
11
+ measureText(s) {
12
+ return { width: s.length * 7 };
13
+ }
14
+ }
15
+ globalThis.OffscreenCanvas = class {
16
+ getContext() {
17
+ return new StubCtx();
18
+ }
19
+ };
20
+ const pt = (value) => ({ value, unit: 'pt' });
21
+ const em = (value) => ({ value, unit: 'em' });
22
+ // 72 dpi and a 10 pt body: 1 em = 10 px.
23
+ const config = (style) => ({
24
+ page: { width: pt(200), height: pt(400), dpi: 72, margins: { top: pt(10), bottom: pt(10), left: pt(10), right: pt(10) } },
25
+ layout: { layoutType: 'single' },
26
+ header: { elements: [] },
27
+ footer: { elements: [] },
28
+ bodyText: { fontSize: pt(10), lineHeight: pt(14), firstLineIndent: pt(0), hyphenation: { enabled: false }, avoidRunts: false },
29
+ paragraphStyles: [{ id: 't', textAlign: 'left', ...style }],
30
+ });
31
+ const TEXT = 'The long line of the page title runs on past the measure of the column and turns over.';
32
+ const build = (style, markdown = `:::paragraphs{style="t"}\n${TEXT}\n:::`) => buildDocument({ markdown }, config(style));
33
+ const para = (doc) => doc.blocks.find((b) => b.type === 'paragraph');
34
+ describe('paragraphStyles[].letterSpacing (#907)', () => {
35
+ it('resolves absent when unset or zero, and survives the strip when set', () => {
36
+ const body = resolveBodyTextConfig();
37
+ const [none, zero, set] = resolveParagraphStylesConfig([{ id: 'a' }, { id: 'b', letterSpacing: em(0) }, { id: 'c', letterSpacing: em(0.015) }], body);
38
+ expect(none.letterSpacing).toBeUndefined();
39
+ expect(zero.letterSpacing).toBeUndefined();
40
+ expect(set.letterSpacing).toEqual(em(0.015));
41
+ expect(stripParagraphStylesDefaults([{ id: 'b', letterSpacing: em(0) }, { id: 'c', letterSpacing: em(0.015) }])).toEqual([{ id: 'b' }, { id: 'c', letterSpacing: em(0.015) }]);
42
+ expect(collectConfigWarnings({ paragraphStyles: [{ id: 'c', letterSpacing: em(0.015) }] }).filter((w) => w.kind === 'unknownConfigKey')).toEqual([]);
43
+ });
44
+ it('measures the tracking into the lines and stamps it on the block', () => {
45
+ const plain = para(build({}));
46
+ const tracked = para(build({ letterSpacing: em(0.1) }));
47
+ expect(plain.letterSpacing).toBeUndefined();
48
+ // 0.1 em of a 10 px style.
49
+ expect(tracked.letterSpacing).toBeCloseTo(1, 5);
50
+ // One px after every letter: the same words take more room, so the
51
+ // paragraph turns over into more lines.
52
+ expect(tracked.lines.length).toBeGreaterThan(plain.lines.length);
53
+ const first = (b) => b.lines[0];
54
+ const perChar = (b) => first(b).bbox.width / first(b).text.length;
55
+ expect(perChar(tracked)).toBeGreaterThan(perChar(plain) + 0.5);
56
+ });
57
+ it('is relative to the style’s own size, and a negative value tightens', () => {
58
+ const big = para(build({ fontSize: pt(20), lineHeight: pt(24), letterSpacing: em(0.05) }));
59
+ expect(big.letterSpacing).toBeCloseTo(1, 5);
60
+ const tight = para(build({ letterSpacing: { value: -0.5, unit: 'pt' } }));
61
+ expect(tight.letterSpacing).toBeCloseTo(-0.5, 5);
62
+ });
63
+ it('keeps justified lines full: the word spaces take the slack over the tracking', () => {
64
+ const b = para(build({ textAlign: 'justify', letterSpacing: em(0.05) }));
65
+ expect(b.letterSpacing).toBeCloseTo(0.5, 5);
66
+ expect(b.lines.length).toBeGreaterThan(1);
67
+ // Each space is a 7 px glyph plus its tracking; the words and the
68
+ // spaces at the line's ratio fill the measure.
69
+ const space = 7 + 0.5;
70
+ for (const line of b.lines.slice(0, -1)) {
71
+ const spaces = line.text.trim().split(' ').length - 1;
72
+ const ratio = line.justifiedSpaceRatio;
73
+ expect(ratio).toBeGreaterThanOrEqual(0.6);
74
+ expect(line.bbox.width - spaces * space + spaces * space * ratio).toBeCloseTo(b.bbox.width, 3);
75
+ }
76
+ });
77
+ it('is painted by the HTML backend', () => {
78
+ const html = renderToHtml(build({ letterSpacing: em(0.1) }));
79
+ expect(html).toMatch(/letter-spacing:1px/);
80
+ expect(renderToHtml(build({}))).not.toMatch(/letter-spacing:1px/);
81
+ });
82
+ it('tracks a styled paragraph inside a box', () => {
83
+ const cfg = config({ letterSpacing: em(0.1) });
84
+ const doc = buildDocument({ markdown: `:::callout\n:::paragraphs{style="t"}\n${TEXT}\n:::\n:::` }, cfg);
85
+ const boxed = doc.blocks.find((b) => b.type === 'paragraph' && b.containerId !== undefined);
86
+ expect(boxed?.letterSpacing).toBeCloseTo(1, 5);
87
+ });
88
+ });
89
+ //# sourceMappingURL=paragraphStyleLetterSpacing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paragraphStyleLetterSpacing.test.js","sourceRoot":"","sources":["../../src/__tests__/paragraphStyleLetterSpacing.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pictureBelowPrintSize.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pictureBelowPrintSize.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/pictureBelowPrintSize.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../pipeline';
3
+ import { formatWarning } from '../pipeline/contentWarnings';
4
+ // #901: a full-page picture in the flow is set at its column's width,
5
+ // and the default page has two columns. Nothing in the figure sizing caps
6
+ // it below that; the layout says so when a picture with a print size is
7
+ // held at under half of it by a column narrower than the page.
8
+ class StubCtx {
9
+ font = '';
10
+ measureText(s) {
11
+ return { width: s.length * 7 };
12
+ }
13
+ }
14
+ globalThis.OffscreenCanvas = class {
15
+ getContext() {
16
+ return new StubCtx();
17
+ }
18
+ };
19
+ const mm = (value) => ({ value, unit: 'mm' });
20
+ const DPI = 300;
21
+ const px = (v) => (v / 25.4) * DPI;
22
+ /** The map of the issue: 1066 × 929 px at 200 ppi (135.4 × 118 mm), on a
23
+ * 135.2 × 127.8 mm page with no margins. */
24
+ const map = (bitmap = { resolution: 200 }, placement = { position: 'here', width: 1 }) => ({
25
+ id: 'mapa', typeId: 'mapa', kind: 'bitmap', caption: '', createdAt: 0, updatedAt: 0,
26
+ bitmap: { fileId: 'mapa.png', format: 'png', width: 1066, height: 929, ...bitmap },
27
+ placement,
28
+ });
29
+ const config = (extra = {}) => ({
30
+ page: { width: mm(135.2), height: mm(127.8), dpi: DPI, margins: { top: mm(0), bottom: mm(0), left: mm(0), right: mm(0) } },
31
+ header: { elements: [] },
32
+ footer: { elements: [] },
33
+ resourceTypes: [{ id: 'mapa', name: 'Mapa', shortLabel: 'Mapa', numberingTemplate: '', resetOn: 'never', counterFormat: 'decimal', captionPrefix: '', defaultPlacement: { position: 'here' } }],
34
+ ...extra,
35
+ });
36
+ const build = (resource, extra) => buildDocument({ markdown: '::resource{id="mapa"}', resources: [resource] }, config(extra));
37
+ const warnings = (doc) => (doc.contentWarnings ?? []).filter((w) => w.kind === 'pictureBelowPrintSize');
38
+ const body = (doc) => [...doc.pages[0].columns.flatMap((c) => c.blocks), ...(doc.pages[0].floats ?? [])].find((b) => b.resourceBlock).resourceBlock.bodyRect;
39
+ describe('a full-page picture in the flow (#901)', () => {
40
+ it('fills its column, which on the default two-column page is under half the page', () => {
41
+ const doc = build(map());
42
+ const col = doc.pages[0].columns[0].bbox.width;
43
+ expect(doc.pages[0].columns.length).toBe(2);
44
+ expect(body(doc).width).toBeCloseTo(col, 3);
45
+ expect(body(doc).width / px(135.2)).toBeCloseTo(0.472, 2);
46
+ });
47
+ it('says so, with the sizes and the way out', () => {
48
+ const doc = build(map());
49
+ const [w] = warnings(doc);
50
+ expect(w).toMatchObject({ resourceId: 'mapa', pageIndex: 0 });
51
+ expect(w.scale).toBeCloseTo(0.472, 2);
52
+ expect(w.printWidthPx).toBe(Math.round((1066 * DPI) / 200));
53
+ expect(w.pageWidthPx).toBe(Math.round(px(135.2)));
54
+ expect(w.sourceStart).toBe(0);
55
+ const text = formatWarning(w);
56
+ expect(text).toContain('47 % of its print size');
57
+ expect(text).toContain("layout.layoutType: 'single'");
58
+ expect(text).toContain("placement.span: 'page'");
59
+ });
60
+ it('sets it at the page’s width in one column, and is quiet', () => {
61
+ const doc = build(map(), { layout: { layoutType: 'single' } });
62
+ expect(body(doc).width).toBeCloseTo(px(135.2), 3);
63
+ expect(warnings(doc)).toEqual([]);
64
+ });
65
+ it('takes a number in layout.bitmapResolution as a print size, not a resolution read from the file', () => {
66
+ expect(warnings(build(map({}), { layout: { bitmapResolution: 200 } }))).toHaveLength(1);
67
+ expect(warnings(build(map({ fileResolution: 200 }), { layout: { bitmapResolution: 'file' } }))).toEqual([]);
68
+ // No print size at all: its pixels at the page's dpi.
69
+ expect(warnings(build(map({})))).toEqual([]);
70
+ });
71
+ it('leaves a picture narrowed on purpose alone, and one its column holds at half its size or more', () => {
72
+ expect(warnings(build(map({ resolution: 200 }, { position: 'here', width: 0.8 })))).toEqual([]);
73
+ // 1066 px at 400 ppi: 67.7 mm, a little wider than the 63.9 mm column.
74
+ expect(warnings(build(map({ resolution: 400 })))).toEqual([]);
75
+ });
76
+ it('says nothing of a picture spanning the page as a float', () => {
77
+ const doc = build(map({ resolution: 200 }, { position: 'top', span: 'page' }));
78
+ expect(body(doc).width).toBeCloseTo(px(135.2), 3);
79
+ expect(warnings(doc)).toEqual([]);
80
+ });
81
+ });
82
+ //# sourceMappingURL=pictureBelowPrintSize.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pictureBelowPrintSize.test.js","sourceRoot":"","sources":["../../src/__tests__/pictureBelowPrintSize.test.ts"],"names":[],"mappings":"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"}
@@ -113,7 +113,7 @@ describe('unknown paragraph style keys (EF-173)', () => {
113
113
  textAlign: 'left', boldColor: { hex: '#000000', model: 'hex' }, italicColor: { hex: '#000000', model: 'hex' },
114
114
  fontWeight: 400, boldFontWeight: 700, italic: false, smallCaps: false, hyphenation: false, indent: pt(0), endIndent: pt(9),
115
115
  firstLineIndent: pt(0), hangingIndent: pt(0), spaceBetween: pt(0), marginTop: pt(0), marginBottom: pt(0),
116
- snapToGrid: true, containerSpacing: 'add', textTransform: 'none', wordBreak: 'keep-all', lineNumbers: true,
116
+ snapToGrid: true, containerSpacing: 'add', textTransform: 'none', letterSpacing: { value: 0.015, unit: 'em' }, wordBreak: 'keep-all', lineNumbers: true,
117
117
  tabStops: [{ position: { value: 30, unit: 'mm' }, align: 'end', leader: '.', leaderGap: pt(2), decimalChar: ',' }], tabInterval: pt(36),
118
118
  dropCap: {
119
119
  lines: 3, sink: 2, characters: 1, fontFamily: 'Inter', fontWeight: 700, italic: false, fontSize: pt(30),
@@ -1 +1 @@
1
- {"version":3,"file":"paragraphStyleFaces.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/paragraphStyleFaces.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paragraphStyleFaces.test.js","sourceRoot":"","sources":["../../../src/__tests__/pipeline/paragraphStyleFaces.test.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,16 @@
6
6
  * (#861) all of it is clipped to the page's share of the sheet.
7
7
  */
8
8
  import type { VDTDesignSlot, VDTPage } from '../vdt';
9
+ import { type ComposedPaintPart } from '../composed/paint';
9
10
  /**
10
11
  * Paint the frames of `page.composed` in their paint order. With
11
12
  * `decoration` the template's decoration is painted between the layers
12
13
  * below 0 and the rest; without it (a page painted through a flow frame,
13
- * whose decoration stands on the sheet) it is left to the caller.
14
+ * whose decoration stands on the sheet) it is left to the caller, who
15
+ * paints the frames under it (`part: 'below'`) and over it (`'above'`)
16
+ * in two calls.
14
17
  */
15
- export declare function renderComposedFrames(ctx: CanvasRenderingContext2D, page: VDTPage, inkHex: string | null, decoration: VDTDesignSlot | undefined): void;
18
+ export declare function renderComposedFrames(ctx: CanvasRenderingContext2D, page: VDTPage, inkHex: string | null, decoration: VDTDesignSlot | undefined, part?: ComposedPaintPart): void;
16
19
  /** A composed page's decoration painted on the sheet (a page painted
17
20
  * through a flow frame), clipped to its share of a spread's sheet. */
18
21
  export declare function renderComposedDecoration(ctx: CanvasRenderingContext2D, page: VDTPage, inkHex: string | null): void;
@@ -1 +1 @@
1
- {"version":3,"file":"composed.d.ts","sourceRoot":"","sources":["../../src/canvas-backend/composed.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAMrD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,EAAE,aAAa,GAAG,SAAS,GACpC,IAAI,CAmCN;AAED;uEACuE;AACvE,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAclH"}
1
+ {"version":3,"file":"composed.d.ts","sourceRoot":"","sources":["../../src/canvas-backend/composed.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAoF,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK7I;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,EAAE,aAAa,GAAG,SAAS,EACrC,IAAI,CAAC,EAAE,iBAAiB,GACvB,IAAI,CAmCN;AAED;uEACuE;AACvE,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAclH"}