postext 0.1.10 → 0.1.12

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 (93) hide show
  1. package/dist/__tests__/exports.test.js +5 -0
  2. package/dist/__tests__/exports.test.js.map +1 -1
  3. package/dist/canvas-backend.d.ts.map +1 -1
  4. package/dist/canvas-backend.js +30 -2
  5. package/dist/canvas-backend.js.map +1 -1
  6. package/dist/defaults/bodyText.d.ts +7 -0
  7. package/dist/defaults/bodyText.d.ts.map +1 -0
  8. package/dist/defaults/bodyText.js +120 -0
  9. package/dist/defaults/bodyText.js.map +1 -0
  10. package/dist/defaults/debug.d.ts +5 -0
  11. package/dist/defaults/debug.d.ts.map +1 -0
  12. package/dist/defaults/debug.js +78 -0
  13. package/dist/defaults/debug.js.map +1 -0
  14. package/dist/defaults/headings.d.ts +5 -0
  15. package/dist/defaults/headings.d.ts.map +1 -0
  16. package/dist/defaults/headings.js +142 -0
  17. package/dist/defaults/headings.js.map +1 -0
  18. package/dist/defaults/index.d.ts +11 -0
  19. package/dist/defaults/index.d.ts.map +1 -0
  20. package/dist/defaults/index.js +69 -0
  21. package/dist/defaults/index.js.map +1 -0
  22. package/dist/defaults/layout.d.ts +16 -0
  23. package/dist/defaults/layout.d.ts.map +1 -0
  24. package/dist/defaults/layout.js +68 -0
  25. package/dist/defaults/layout.js.map +1 -0
  26. package/dist/defaults/lists-shared.d.ts +15 -0
  27. package/dist/defaults/lists-shared.d.ts.map +1 -0
  28. package/dist/defaults/lists-shared.js +14 -0
  29. package/dist/defaults/lists-shared.js.map +1 -0
  30. package/dist/defaults/orderedLists.d.ts +18 -0
  31. package/dist/defaults/orderedLists.d.ts.map +1 -0
  32. package/dist/defaults/orderedLists.js +174 -0
  33. package/dist/defaults/orderedLists.js.map +1 -0
  34. package/dist/defaults/page.d.ts +32 -0
  35. package/dist/defaults/page.d.ts.map +1 -0
  36. package/dist/defaults/page.js +147 -0
  37. package/dist/defaults/page.js.map +1 -0
  38. package/dist/defaults/shared.d.ts +7 -0
  39. package/dist/defaults/shared.d.ts.map +1 -0
  40. package/dist/defaults/shared.js +97 -0
  41. package/dist/defaults/shared.js.map +1 -0
  42. package/dist/defaults/unorderedLists.d.ts +21 -0
  43. package/dist/defaults/unorderedLists.d.ts.map +1 -0
  44. package/dist/defaults/unorderedLists.js +188 -0
  45. package/dist/defaults/unorderedLists.js.map +1 -0
  46. package/dist/index.d.ts +3 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +1 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/measure.d.ts.map +1 -1
  51. package/dist/measure.js +112 -12
  52. package/dist/measure.js.map +1 -1
  53. package/dist/parse.d.ts +7 -0
  54. package/dist/parse.d.ts.map +1 -1
  55. package/dist/parse.js +53 -17
  56. package/dist/parse.js.map +1 -1
  57. package/dist/pipeline/build.d.ts +4 -0
  58. package/dist/pipeline/build.d.ts.map +1 -0
  59. package/dist/{pipeline.js → pipeline/build.js} +52 -246
  60. package/dist/pipeline/build.js.map +1 -0
  61. package/dist/pipeline/config.d.ts +6 -0
  62. package/dist/pipeline/config.d.ts.map +1 -0
  63. package/dist/pipeline/config.js +48 -0
  64. package/dist/pipeline/config.js.map +1 -0
  65. package/dist/pipeline/index.d.ts +2 -0
  66. package/dist/pipeline/index.d.ts.map +1 -0
  67. package/dist/pipeline/index.js +2 -0
  68. package/dist/pipeline/index.js.map +1 -0
  69. package/dist/pipeline/lists.d.ts +54 -0
  70. package/dist/pipeline/lists.d.ts.map +1 -0
  71. package/dist/pipeline/lists.js +298 -0
  72. package/dist/pipeline/lists.js.map +1 -0
  73. package/dist/pipeline/placement.d.ts +11 -0
  74. package/dist/pipeline/placement.d.ts.map +1 -0
  75. package/dist/pipeline/placement.js +48 -0
  76. package/dist/pipeline/placement.js.map +1 -0
  77. package/dist/pipeline/styles.d.ts +23 -0
  78. package/dist/pipeline/styles.d.ts.map +1 -0
  79. package/dist/pipeline/styles.js +62 -0
  80. package/dist/pipeline/styles.js.map +1 -0
  81. package/dist/types.d.ts +103 -0
  82. package/dist/types.d.ts.map +1 -1
  83. package/dist/vdt.d.ts +11 -1
  84. package/dist/vdt.d.ts.map +1 -1
  85. package/dist/vdt.js.map +1 -1
  86. package/package.json +2 -2
  87. package/dist/defaults.d.ts +0 -76
  88. package/dist/defaults.d.ts.map +0 -1
  89. package/dist/defaults.js +0 -719
  90. package/dist/defaults.js.map +0 -1
  91. package/dist/pipeline.d.ts +0 -4
  92. package/dist/pipeline.d.ts.map +0 -1
  93. package/dist/pipeline.js.map +0 -1
package/dist/defaults.js DELETED
@@ -1,719 +0,0 @@
1
- export const PAGE_SIZE_PRESETS = {
2
- '11x17': { width: { value: 11, unit: 'cm' }, height: { value: 17, unit: 'cm' } },
3
- '12x19': { width: { value: 12, unit: 'cm' }, height: { value: 19, unit: 'cm' } },
4
- '17x24': { width: { value: 17, unit: 'cm' }, height: { value: 24, unit: 'cm' } },
5
- '21x28': { width: { value: 21, unit: 'cm' }, height: { value: 28, unit: 'cm' } },
6
- };
7
- const DEFAULT_PAGE_MARGINS = {
8
- top: { value: 2, unit: 'cm' },
9
- bottom: { value: 2, unit: 'cm' },
10
- left: { value: 1.5, unit: 'cm' },
11
- right: { value: 1.5, unit: 'cm' },
12
- };
13
- export const DEFAULT_CUT_LINES = {
14
- enabled: false,
15
- bleed: { value: 3, unit: 'mm' },
16
- markLength: { value: 5, unit: 'mm' },
17
- markOffset: { value: 3, unit: 'mm' },
18
- markWidth: { value: 0.25, unit: 'pt' },
19
- color: { hex: '#000000', model: 'hex' },
20
- };
21
- export const DEFAULT_PAGE_CONFIG = {
22
- backgroundColor: { hex: 'transparent', model: 'hex' },
23
- sizePreset: '17x24',
24
- width: { value: 17, unit: 'cm' },
25
- height: { value: 24, unit: 'cm' },
26
- margins: DEFAULT_PAGE_MARGINS,
27
- dpi: 300,
28
- cutLines: { ...DEFAULT_CUT_LINES },
29
- baselineGrid: { enabled: false, color: { hex: '#cccccc', model: 'hex' }, lineWidth: { value: 0.5, unit: 'pt' } },
30
- };
31
- export function dimensionsEqual(a, b) {
32
- return a.value === b.value && a.unit === b.unit;
33
- }
34
- export function colorsEqual(a, b) {
35
- return a.hex === b.hex && a.model === b.model;
36
- }
37
- export function stripPageDefaults(page) {
38
- if (!page)
39
- return undefined;
40
- const result = {};
41
- let hasOverride = false;
42
- if (page.backgroundColor !== undefined && !colorsEqual(page.backgroundColor, DEFAULT_PAGE_CONFIG.backgroundColor)) {
43
- result.backgroundColor = page.backgroundColor;
44
- hasOverride = true;
45
- }
46
- if (page.sizePreset !== undefined && page.sizePreset !== DEFAULT_PAGE_CONFIG.sizePreset) {
47
- result.sizePreset = page.sizePreset;
48
- hasOverride = true;
49
- }
50
- if (page.width !== undefined && !dimensionsEqual(page.width, DEFAULT_PAGE_CONFIG.width)) {
51
- result.width = page.width;
52
- hasOverride = true;
53
- }
54
- if (page.height !== undefined && !dimensionsEqual(page.height, DEFAULT_PAGE_CONFIG.height)) {
55
- result.height = page.height;
56
- hasOverride = true;
57
- }
58
- if (page.margins) {
59
- const m = {};
60
- let hasMarginOverride = false;
61
- for (const side of ['top', 'bottom', 'left', 'right']) {
62
- if (page.margins[side] && !dimensionsEqual(page.margins[side], DEFAULT_PAGE_MARGINS[side])) {
63
- m[side] = page.margins[side];
64
- hasMarginOverride = true;
65
- }
66
- }
67
- if (hasMarginOverride) {
68
- result.margins = m;
69
- hasOverride = true;
70
- }
71
- }
72
- if (page.dpi !== undefined && page.dpi !== DEFAULT_PAGE_CONFIG.dpi) {
73
- result.dpi = page.dpi;
74
- hasOverride = true;
75
- }
76
- if (page.cutLines) {
77
- const enabledOverride = page.cutLines.enabled !== undefined && page.cutLines.enabled !== DEFAULT_CUT_LINES.enabled;
78
- const bleedOverride = page.cutLines.bleed !== undefined && !dimensionsEqual(page.cutLines.bleed, DEFAULT_CUT_LINES.bleed);
79
- const markLengthOverride = page.cutLines.markLength !== undefined && !dimensionsEqual(page.cutLines.markLength, DEFAULT_CUT_LINES.markLength);
80
- const markOffsetOverride = page.cutLines.markOffset !== undefined && !dimensionsEqual(page.cutLines.markOffset, DEFAULT_CUT_LINES.markOffset);
81
- const markWidthOverride = page.cutLines.markWidth !== undefined && !dimensionsEqual(page.cutLines.markWidth, DEFAULT_CUT_LINES.markWidth);
82
- const colorOverride = page.cutLines.color !== undefined && !colorsEqual(page.cutLines.color, DEFAULT_CUT_LINES.color);
83
- if (enabledOverride || bleedOverride || markLengthOverride || markOffsetOverride || markWidthOverride || colorOverride) {
84
- result.cutLines = {
85
- enabled: page.cutLines.enabled ?? DEFAULT_CUT_LINES.enabled,
86
- ...(bleedOverride ? { bleed: page.cutLines.bleed } : {}),
87
- ...(markLengthOverride ? { markLength: page.cutLines.markLength } : {}),
88
- ...(markOffsetOverride ? { markOffset: page.cutLines.markOffset } : {}),
89
- ...(markWidthOverride ? { markWidth: page.cutLines.markWidth } : {}),
90
- ...(colorOverride ? { color: page.cutLines.color } : {}),
91
- };
92
- hasOverride = true;
93
- }
94
- }
95
- if (page.baselineGrid) {
96
- const enabledOverride = page.baselineGrid.enabled !== undefined && page.baselineGrid.enabled !== DEFAULT_PAGE_CONFIG.baselineGrid.enabled;
97
- const colorOverride = page.baselineGrid.color !== undefined && !colorsEqual(page.baselineGrid.color, DEFAULT_PAGE_CONFIG.baselineGrid.color);
98
- const lineWidthOverride = page.baselineGrid.lineWidth !== undefined && !dimensionsEqual(page.baselineGrid.lineWidth, DEFAULT_PAGE_CONFIG.baselineGrid.lineWidth);
99
- if (enabledOverride || colorOverride || lineWidthOverride) {
100
- result.baselineGrid = {
101
- enabled: page.baselineGrid.enabled ?? DEFAULT_PAGE_CONFIG.baselineGrid.enabled,
102
- ...(colorOverride ? { color: page.baselineGrid.color } : {}),
103
- ...(lineWidthOverride ? { lineWidth: page.baselineGrid.lineWidth } : {}),
104
- };
105
- hasOverride = true;
106
- }
107
- }
108
- return hasOverride ? result : undefined;
109
- }
110
- export const DEFAULT_COLUMN_RULE = {
111
- enabled: false,
112
- color: { hex: '#cccccc', model: 'hex' },
113
- lineWidth: { value: 0.5, unit: 'pt' },
114
- };
115
- export const DEFAULT_LAYOUT_CONFIG = {
116
- layoutType: 'double',
117
- gutterWidth: { value: 0.75, unit: 'cm' },
118
- sideColumnPercent: 33,
119
- columnRule: { ...DEFAULT_COLUMN_RULE },
120
- };
121
- export function stripLayoutDefaults(layout) {
122
- if (!layout)
123
- return undefined;
124
- const result = {};
125
- let hasOverride = false;
126
- if (layout.layoutType !== undefined && layout.layoutType !== DEFAULT_LAYOUT_CONFIG.layoutType) {
127
- result.layoutType = layout.layoutType;
128
- hasOverride = true;
129
- }
130
- if (layout.gutterWidth !== undefined && !dimensionsEqual(layout.gutterWidth, DEFAULT_LAYOUT_CONFIG.gutterWidth)) {
131
- result.gutterWidth = layout.gutterWidth;
132
- hasOverride = true;
133
- }
134
- if (layout.sideColumnPercent !== undefined && layout.sideColumnPercent !== DEFAULT_LAYOUT_CONFIG.sideColumnPercent) {
135
- result.sideColumnPercent = layout.sideColumnPercent;
136
- hasOverride = true;
137
- }
138
- if (layout.columnRule) {
139
- const cr = {};
140
- let hasCrOverride = false;
141
- if (layout.columnRule.enabled !== undefined && layout.columnRule.enabled !== DEFAULT_COLUMN_RULE.enabled) {
142
- cr.enabled = layout.columnRule.enabled;
143
- hasCrOverride = true;
144
- }
145
- if (layout.columnRule.color && !colorsEqual(layout.columnRule.color, DEFAULT_COLUMN_RULE.color)) {
146
- cr.color = layout.columnRule.color;
147
- hasCrOverride = true;
148
- }
149
- if (layout.columnRule.lineWidth && !dimensionsEqual(layout.columnRule.lineWidth, DEFAULT_COLUMN_RULE.lineWidth)) {
150
- cr.lineWidth = layout.columnRule.lineWidth;
151
- hasCrOverride = true;
152
- }
153
- if (hasCrOverride) {
154
- result.columnRule = cr;
155
- hasOverride = true;
156
- }
157
- }
158
- return hasOverride ? result : undefined;
159
- }
160
- export const DEFAULT_HYPHENATION_CONFIG = {
161
- enabled: true,
162
- locale: 'en-us',
163
- };
164
- export const DEFAULT_BODY_TEXT_CONFIG = {
165
- fontFamily: 'EB Garamond',
166
- fontSize: { value: 8, unit: 'pt' },
167
- lineHeight: { value: 1.5, unit: 'em' },
168
- paragraphSpacing: false,
169
- color: { hex: '#000000', model: 'cmyk' },
170
- textAlign: 'justify',
171
- fontWeight: 400,
172
- boldFontWeight: 700,
173
- hyphenation: { ...DEFAULT_HYPHENATION_CONFIG },
174
- firstLineIndent: { value: 1.5, unit: 'em' },
175
- hangingIndent: false,
176
- };
177
- export function hyphenationEqual(a, b) {
178
- if (!a && !b)
179
- return true;
180
- if (!a || !b)
181
- return false;
182
- return (a.enabled ?? DEFAULT_HYPHENATION_CONFIG.enabled) === (b.enabled ?? DEFAULT_HYPHENATION_CONFIG.enabled)
183
- && (a.locale ?? DEFAULT_HYPHENATION_CONFIG.locale) === (b.locale ?? DEFAULT_HYPHENATION_CONFIG.locale);
184
- }
185
- export function stripBodyTextDefaults(bodyText) {
186
- if (!bodyText)
187
- return undefined;
188
- const result = {};
189
- let hasOverride = false;
190
- if (bodyText.fontFamily !== undefined && bodyText.fontFamily !== DEFAULT_BODY_TEXT_CONFIG.fontFamily) {
191
- result.fontFamily = bodyText.fontFamily;
192
- hasOverride = true;
193
- }
194
- if (bodyText.fontSize !== undefined && !dimensionsEqual(bodyText.fontSize, DEFAULT_BODY_TEXT_CONFIG.fontSize)) {
195
- result.fontSize = bodyText.fontSize;
196
- hasOverride = true;
197
- }
198
- if (bodyText.lineHeight !== undefined && !dimensionsEqual(bodyText.lineHeight, DEFAULT_BODY_TEXT_CONFIG.lineHeight)) {
199
- result.lineHeight = bodyText.lineHeight;
200
- hasOverride = true;
201
- }
202
- if (bodyText.paragraphSpacing !== undefined && bodyText.paragraphSpacing !== DEFAULT_BODY_TEXT_CONFIG.paragraphSpacing) {
203
- result.paragraphSpacing = bodyText.paragraphSpacing;
204
- hasOverride = true;
205
- }
206
- if (bodyText.color !== undefined && !colorsEqual(bodyText.color, DEFAULT_BODY_TEXT_CONFIG.color)) {
207
- result.color = bodyText.color;
208
- hasOverride = true;
209
- }
210
- if (bodyText.textAlign !== undefined && bodyText.textAlign !== DEFAULT_BODY_TEXT_CONFIG.textAlign) {
211
- result.textAlign = bodyText.textAlign;
212
- hasOverride = true;
213
- }
214
- if (bodyText.fontWeight !== undefined && bodyText.fontWeight !== DEFAULT_BODY_TEXT_CONFIG.fontWeight) {
215
- result.fontWeight = bodyText.fontWeight;
216
- hasOverride = true;
217
- }
218
- if (bodyText.boldFontWeight !== undefined && bodyText.boldFontWeight !== DEFAULT_BODY_TEXT_CONFIG.boldFontWeight) {
219
- result.boldFontWeight = bodyText.boldFontWeight;
220
- hasOverride = true;
221
- }
222
- if (bodyText.hyphenation && !hyphenationEqual(bodyText.hyphenation, DEFAULT_BODY_TEXT_CONFIG.hyphenation)) {
223
- result.hyphenation = bodyText.hyphenation;
224
- hasOverride = true;
225
- }
226
- if (bodyText.firstLineIndent !== undefined && !dimensionsEqual(bodyText.firstLineIndent, DEFAULT_BODY_TEXT_CONFIG.firstLineIndent)) {
227
- result.firstLineIndent = bodyText.firstLineIndent;
228
- hasOverride = true;
229
- }
230
- if (bodyText.hangingIndent !== undefined && bodyText.hangingIndent !== DEFAULT_BODY_TEXT_CONFIG.hangingIndent) {
231
- result.hangingIndent = bodyText.hangingIndent;
232
- hasOverride = true;
233
- }
234
- return hasOverride ? result : undefined;
235
- }
236
- const DEFAULT_HEADING_FONT = 'Open Sans';
237
- const DEFAULT_HEADING_LINE_HEIGHT = { value: 1.2, unit: 'em' };
238
- const DEFAULT_HEADING_COLOR = { hex: '#000000', model: 'cmyk' };
239
- const DEFAULT_HEADING_FONT_WEIGHT = 700;
240
- const DEFAULT_HEADING_MARGIN_TOP = { value: 1.5, unit: 'em' };
241
- const DEFAULT_HEADING_MARGIN_BOTTOM = { value: 0.5, unit: 'em' };
242
- const DEFAULT_HEADING_LEVELS = [
243
- { level: 1, fontSize: { value: 18, unit: 'pt' }, lineHeight: DEFAULT_HEADING_LINE_HEIGHT, fontFamily: DEFAULT_HEADING_FONT, color: DEFAULT_HEADING_COLOR, fontWeight: DEFAULT_HEADING_FONT_WEIGHT, marginTop: DEFAULT_HEADING_MARGIN_TOP, marginBottom: DEFAULT_HEADING_MARGIN_BOTTOM, numberingTemplate: '', italic: false },
244
- { level: 2, fontSize: { value: 15, unit: 'pt' }, lineHeight: DEFAULT_HEADING_LINE_HEIGHT, fontFamily: DEFAULT_HEADING_FONT, color: DEFAULT_HEADING_COLOR, fontWeight: DEFAULT_HEADING_FONT_WEIGHT, marginTop: DEFAULT_HEADING_MARGIN_TOP, marginBottom: DEFAULT_HEADING_MARGIN_BOTTOM, numberingTemplate: '', italic: false },
245
- { level: 3, fontSize: { value: 12, unit: 'pt' }, lineHeight: DEFAULT_HEADING_LINE_HEIGHT, fontFamily: DEFAULT_HEADING_FONT, color: DEFAULT_HEADING_COLOR, fontWeight: DEFAULT_HEADING_FONT_WEIGHT, marginTop: DEFAULT_HEADING_MARGIN_TOP, marginBottom: DEFAULT_HEADING_MARGIN_BOTTOM, numberingTemplate: '', italic: false },
246
- { level: 4, fontSize: { value: 10, unit: 'pt' }, lineHeight: DEFAULT_HEADING_LINE_HEIGHT, fontFamily: DEFAULT_HEADING_FONT, color: DEFAULT_HEADING_COLOR, fontWeight: DEFAULT_HEADING_FONT_WEIGHT, marginTop: DEFAULT_HEADING_MARGIN_TOP, marginBottom: DEFAULT_HEADING_MARGIN_BOTTOM, numberingTemplate: '', italic: false },
247
- { level: 5, fontSize: { value: 9, unit: 'pt' }, lineHeight: DEFAULT_HEADING_LINE_HEIGHT, fontFamily: DEFAULT_HEADING_FONT, color: DEFAULT_HEADING_COLOR, fontWeight: DEFAULT_HEADING_FONT_WEIGHT, marginTop: DEFAULT_HEADING_MARGIN_TOP, marginBottom: DEFAULT_HEADING_MARGIN_BOTTOM, numberingTemplate: '', italic: false },
248
- { level: 6, fontSize: { value: 8, unit: 'pt' }, lineHeight: DEFAULT_HEADING_LINE_HEIGHT, fontFamily: DEFAULT_HEADING_FONT, color: DEFAULT_HEADING_COLOR, fontWeight: DEFAULT_HEADING_FONT_WEIGHT, marginTop: DEFAULT_HEADING_MARGIN_TOP, marginBottom: DEFAULT_HEADING_MARGIN_BOTTOM, numberingTemplate: '', italic: false },
249
- ];
250
- export const DEFAULT_HEADINGS_CONFIG = {
251
- fontFamily: DEFAULT_HEADING_FONT,
252
- lineHeight: DEFAULT_HEADING_LINE_HEIGHT,
253
- color: DEFAULT_HEADING_COLOR,
254
- textAlign: 'left',
255
- fontWeight: DEFAULT_HEADING_FONT_WEIGHT,
256
- marginTop: DEFAULT_HEADING_MARGIN_TOP,
257
- marginBottom: DEFAULT_HEADING_MARGIN_BOTTOM,
258
- levels: DEFAULT_HEADING_LEVELS,
259
- };
260
- export function stripHeadingsDefaults(headings) {
261
- if (!headings)
262
- return undefined;
263
- const result = {};
264
- let hasOverride = false;
265
- if (headings.fontFamily !== undefined && headings.fontFamily !== DEFAULT_HEADINGS_CONFIG.fontFamily) {
266
- result.fontFamily = headings.fontFamily;
267
- hasOverride = true;
268
- }
269
- if (headings.lineHeight !== undefined && !dimensionsEqual(headings.lineHeight, DEFAULT_HEADINGS_CONFIG.lineHeight)) {
270
- result.lineHeight = headings.lineHeight;
271
- hasOverride = true;
272
- }
273
- if (headings.color !== undefined && !colorsEqual(headings.color, DEFAULT_HEADINGS_CONFIG.color)) {
274
- result.color = headings.color;
275
- hasOverride = true;
276
- }
277
- if (headings.textAlign !== undefined && headings.textAlign !== DEFAULT_HEADINGS_CONFIG.textAlign) {
278
- result.textAlign = headings.textAlign;
279
- hasOverride = true;
280
- }
281
- if (headings.fontWeight !== undefined && headings.fontWeight !== DEFAULT_HEADINGS_CONFIG.fontWeight) {
282
- result.fontWeight = headings.fontWeight;
283
- hasOverride = true;
284
- }
285
- if (headings.marginTop !== undefined && !dimensionsEqual(headings.marginTop, DEFAULT_HEADINGS_CONFIG.marginTop)) {
286
- result.marginTop = headings.marginTop;
287
- hasOverride = true;
288
- }
289
- if (headings.marginBottom !== undefined && !dimensionsEqual(headings.marginBottom, DEFAULT_HEADINGS_CONFIG.marginBottom)) {
290
- result.marginBottom = headings.marginBottom;
291
- hasOverride = true;
292
- }
293
- if (headings.levels && headings.levels.length > 0) {
294
- const strippedLevels = [];
295
- for (const level of headings.levels) {
296
- const def = DEFAULT_HEADING_LEVELS.find((d) => d.level === level.level);
297
- if (!def) {
298
- strippedLevels.push(level);
299
- continue;
300
- }
301
- const entry = { level: level.level };
302
- let levelHasOverride = false;
303
- if (level.fontSize !== undefined && !dimensionsEqual(level.fontSize, def.fontSize)) {
304
- entry.fontSize = level.fontSize;
305
- levelHasOverride = true;
306
- }
307
- if (level.lineHeight !== undefined && !dimensionsEqual(level.lineHeight, def.lineHeight)) {
308
- entry.lineHeight = level.lineHeight;
309
- levelHasOverride = true;
310
- }
311
- if (level.fontFamily !== undefined && level.fontFamily !== def.fontFamily) {
312
- entry.fontFamily = level.fontFamily;
313
- levelHasOverride = true;
314
- }
315
- if (level.color !== undefined && !colorsEqual(level.color, def.color)) {
316
- entry.color = level.color;
317
- levelHasOverride = true;
318
- }
319
- if (level.fontWeight !== undefined && level.fontWeight !== def.fontWeight) {
320
- entry.fontWeight = level.fontWeight;
321
- levelHasOverride = true;
322
- }
323
- if (level.marginTop !== undefined && !dimensionsEqual(level.marginTop, def.marginTop)) {
324
- entry.marginTop = level.marginTop;
325
- levelHasOverride = true;
326
- }
327
- if (level.marginBottom !== undefined && !dimensionsEqual(level.marginBottom, def.marginBottom)) {
328
- entry.marginBottom = level.marginBottom;
329
- levelHasOverride = true;
330
- }
331
- if (level.numberingTemplate !== undefined && level.numberingTemplate !== def.numberingTemplate) {
332
- entry.numberingTemplate = level.numberingTemplate;
333
- levelHasOverride = true;
334
- }
335
- if (level.italic !== undefined && level.italic !== def.italic) {
336
- entry.italic = level.italic;
337
- levelHasOverride = true;
338
- }
339
- if (levelHasOverride)
340
- strippedLevels.push(entry);
341
- }
342
- if (strippedLevels.length > 0) {
343
- result.levels = strippedLevels;
344
- hasOverride = true;
345
- }
346
- }
347
- return hasOverride ? result : undefined;
348
- }
349
- const DEFAULT_LIST_BULLET_CHAR = '•';
350
- const DEFAULT_LIST_FONT_WEIGHT = 400;
351
- const DEFAULT_LIST_BULLET_FONT_SIZE = { value: 1, unit: 'em' };
352
- const DEFAULT_LIST_GAP = { value: 0.5, unit: 'em' };
353
- const DEFAULT_LIST_INDENT = { value: 0, unit: 'em' };
354
- const DEFAULT_LIST_VERTICAL_OFFSET = { value: 0, unit: 'em' };
355
- const DEFAULT_LIST_MARGIN_TOP = { value: 1.5, unit: 'em' };
356
- const DEFAULT_LIST_MARGIN_BOTTOM = { value: 1.5, unit: 'em' };
357
- const DEFAULT_LIST_ITEM_SPACING = { value: 0, unit: 'em' };
358
- const DEFAULT_LIST_HANGING_INDENT = true;
359
- export function resolveUnorderedListsConfig(partial, bodyText) {
360
- const generalFont = partial?.fontFamily ?? bodyText.fontFamily;
361
- const generalColor = partial?.color ?? bodyText.color;
362
- const generalFontWeight = partial?.fontWeight ?? DEFAULT_LIST_FONT_WEIGHT;
363
- const generalItalic = partial?.italic ?? false;
364
- const generalBulletChar = partial?.bulletChar ?? DEFAULT_LIST_BULLET_CHAR;
365
- const generalFontSize = partial?.bulletFontSize ?? DEFAULT_LIST_BULLET_FONT_SIZE;
366
- const generalIndent = partial?.indent ?? DEFAULT_LIST_INDENT;
367
- const generalVerticalOffset = partial?.bulletVerticalOffset ?? DEFAULT_LIST_VERTICAL_OFFSET;
368
- const levels = [1, 2, 3, 4, 5].map((level) => {
369
- const override = partial?.levels?.find((l) => l.level === level);
370
- return {
371
- level,
372
- bulletChar: override?.bulletChar ?? generalBulletChar,
373
- fontFamily: override?.fontFamily ?? generalFont,
374
- fontSize: override?.fontSize ?? generalFontSize,
375
- color: override?.color ?? generalColor,
376
- fontWeight: override?.fontWeight ?? generalFontWeight,
377
- italic: override?.italic ?? generalItalic,
378
- indent: override?.indent,
379
- verticalOffset: override?.verticalOffset ?? generalVerticalOffset,
380
- };
381
- });
382
- return {
383
- fontFamily: generalFont,
384
- color: generalColor,
385
- fontWeight: generalFontWeight,
386
- italic: generalItalic,
387
- bulletChar: generalBulletChar,
388
- bulletFontSize: generalFontSize,
389
- gap: partial?.gap ?? DEFAULT_LIST_GAP,
390
- indent: generalIndent,
391
- bulletVerticalOffset: generalVerticalOffset,
392
- marginTop: partial?.marginTop ?? DEFAULT_LIST_MARGIN_TOP,
393
- marginBottom: partial?.marginBottom ?? DEFAULT_LIST_MARGIN_BOTTOM,
394
- itemSpacing: partial?.itemSpacing ?? DEFAULT_LIST_ITEM_SPACING,
395
- hangingIndent: partial?.hangingIndent ?? DEFAULT_LIST_HANGING_INDENT,
396
- levels,
397
- };
398
- }
399
- /** Default values for fields that have a fixed (non-inherited) default. */
400
- export const DEFAULT_UNORDERED_LISTS_STATIC = {
401
- fontWeight: DEFAULT_LIST_FONT_WEIGHT,
402
- italic: false,
403
- bulletChar: DEFAULT_LIST_BULLET_CHAR,
404
- bulletFontSize: DEFAULT_LIST_BULLET_FONT_SIZE,
405
- gap: DEFAULT_LIST_GAP,
406
- indent: DEFAULT_LIST_INDENT,
407
- bulletVerticalOffset: DEFAULT_LIST_VERTICAL_OFFSET,
408
- marginTop: DEFAULT_LIST_MARGIN_TOP,
409
- marginBottom: DEFAULT_LIST_MARGIN_BOTTOM,
410
- itemSpacing: DEFAULT_LIST_ITEM_SPACING,
411
- hangingIndent: DEFAULT_LIST_HANGING_INDENT,
412
- };
413
- export function stripUnorderedListsDefaults(lists) {
414
- if (!lists)
415
- return undefined;
416
- const result = {};
417
- let hasOverride = false;
418
- if (lists.fontFamily !== undefined) {
419
- result.fontFamily = lists.fontFamily;
420
- hasOverride = true;
421
- }
422
- if (lists.color !== undefined) {
423
- result.color = lists.color;
424
- hasOverride = true;
425
- }
426
- if (lists.fontWeight !== undefined && lists.fontWeight !== DEFAULT_LIST_FONT_WEIGHT) {
427
- result.fontWeight = lists.fontWeight;
428
- hasOverride = true;
429
- }
430
- if (lists.italic !== undefined && lists.italic !== false) {
431
- result.italic = lists.italic;
432
- hasOverride = true;
433
- }
434
- if (lists.bulletChar !== undefined && lists.bulletChar !== DEFAULT_LIST_BULLET_CHAR) {
435
- result.bulletChar = lists.bulletChar;
436
- hasOverride = true;
437
- }
438
- if (lists.bulletFontSize !== undefined && !dimensionsEqual(lists.bulletFontSize, DEFAULT_LIST_BULLET_FONT_SIZE)) {
439
- result.bulletFontSize = lists.bulletFontSize;
440
- hasOverride = true;
441
- }
442
- if (lists.gap !== undefined && !dimensionsEqual(lists.gap, DEFAULT_LIST_GAP)) {
443
- result.gap = lists.gap;
444
- hasOverride = true;
445
- }
446
- if (lists.indent !== undefined && !dimensionsEqual(lists.indent, DEFAULT_LIST_INDENT)) {
447
- result.indent = lists.indent;
448
- hasOverride = true;
449
- }
450
- if (lists.bulletVerticalOffset !== undefined && !dimensionsEqual(lists.bulletVerticalOffset, DEFAULT_LIST_VERTICAL_OFFSET)) {
451
- result.bulletVerticalOffset = lists.bulletVerticalOffset;
452
- hasOverride = true;
453
- }
454
- if (lists.marginTop !== undefined && !dimensionsEqual(lists.marginTop, DEFAULT_LIST_MARGIN_TOP)) {
455
- result.marginTop = lists.marginTop;
456
- hasOverride = true;
457
- }
458
- if (lists.marginBottom !== undefined && !dimensionsEqual(lists.marginBottom, DEFAULT_LIST_MARGIN_BOTTOM)) {
459
- result.marginBottom = lists.marginBottom;
460
- hasOverride = true;
461
- }
462
- if (lists.itemSpacing !== undefined && !dimensionsEqual(lists.itemSpacing, DEFAULT_LIST_ITEM_SPACING)) {
463
- result.itemSpacing = lists.itemSpacing;
464
- hasOverride = true;
465
- }
466
- if (lists.hangingIndent !== undefined && lists.hangingIndent !== DEFAULT_LIST_HANGING_INDENT) {
467
- result.hangingIndent = lists.hangingIndent;
468
- hasOverride = true;
469
- }
470
- if (lists.levels && lists.levels.length > 0) {
471
- const strippedLevels = [];
472
- for (const lvl of lists.levels) {
473
- const entry = { level: lvl.level };
474
- let levelHasOverride = false;
475
- if (lvl.bulletChar !== undefined) {
476
- entry.bulletChar = lvl.bulletChar;
477
- levelHasOverride = true;
478
- }
479
- if (lvl.fontFamily !== undefined) {
480
- entry.fontFamily = lvl.fontFamily;
481
- levelHasOverride = true;
482
- }
483
- if (lvl.fontSize !== undefined) {
484
- entry.fontSize = lvl.fontSize;
485
- levelHasOverride = true;
486
- }
487
- if (lvl.color !== undefined) {
488
- entry.color = lvl.color;
489
- levelHasOverride = true;
490
- }
491
- if (lvl.fontWeight !== undefined) {
492
- entry.fontWeight = lvl.fontWeight;
493
- levelHasOverride = true;
494
- }
495
- if (lvl.italic !== undefined) {
496
- entry.italic = lvl.italic;
497
- levelHasOverride = true;
498
- }
499
- if (lvl.indent !== undefined) {
500
- entry.indent = lvl.indent;
501
- levelHasOverride = true;
502
- }
503
- if (lvl.verticalOffset !== undefined) {
504
- entry.verticalOffset = lvl.verticalOffset;
505
- levelHasOverride = true;
506
- }
507
- if (levelHasOverride)
508
- strippedLevels.push(entry);
509
- }
510
- if (strippedLevels.length > 0) {
511
- result.levels = strippedLevels;
512
- hasOverride = true;
513
- }
514
- }
515
- return hasOverride ? result : undefined;
516
- }
517
- export const DEFAULT_DEBUG_CONFIG = {
518
- cursorSync: { enabled: true, color: { hex: '#2563eb', model: 'hex' } },
519
- selectionSync: { enabled: true, color: { hex: '#fde04780', model: 'hex' } },
520
- };
521
- export function resolveDebugConfig(partial) {
522
- if (!partial) {
523
- return {
524
- cursorSync: { ...DEFAULT_DEBUG_CONFIG.cursorSync },
525
- selectionSync: { ...DEFAULT_DEBUG_CONFIG.selectionSync },
526
- };
527
- }
528
- return {
529
- cursorSync: {
530
- enabled: partial.cursorSync?.enabled ?? DEFAULT_DEBUG_CONFIG.cursorSync.enabled,
531
- color: partial.cursorSync?.color ?? DEFAULT_DEBUG_CONFIG.cursorSync.color,
532
- },
533
- selectionSync: {
534
- enabled: partial.selectionSync?.enabled ?? DEFAULT_DEBUG_CONFIG.selectionSync.enabled,
535
- color: partial.selectionSync?.color ?? DEFAULT_DEBUG_CONFIG.selectionSync.color,
536
- },
537
- };
538
- }
539
- export function stripDebugDefaults(debug) {
540
- if (!debug)
541
- return undefined;
542
- const result = {};
543
- let hasOverride = false;
544
- if (debug.cursorSync) {
545
- const enabledOverride = debug.cursorSync.enabled !== undefined && debug.cursorSync.enabled !== DEFAULT_DEBUG_CONFIG.cursorSync.enabled;
546
- const colorOverride = debug.cursorSync.color !== undefined && !colorsEqual(debug.cursorSync.color, DEFAULT_DEBUG_CONFIG.cursorSync.color);
547
- if (enabledOverride || colorOverride) {
548
- result.cursorSync = {
549
- enabled: debug.cursorSync.enabled ?? DEFAULT_DEBUG_CONFIG.cursorSync.enabled,
550
- ...(colorOverride ? { color: debug.cursorSync.color } : {}),
551
- };
552
- hasOverride = true;
553
- }
554
- }
555
- if (debug.selectionSync) {
556
- const enabledOverride = debug.selectionSync.enabled !== undefined && debug.selectionSync.enabled !== DEFAULT_DEBUG_CONFIG.selectionSync.enabled;
557
- const colorOverride = debug.selectionSync.color !== undefined && !colorsEqual(debug.selectionSync.color, DEFAULT_DEBUG_CONFIG.selectionSync.color);
558
- if (enabledOverride || colorOverride) {
559
- result.selectionSync = {
560
- enabled: debug.selectionSync.enabled ?? DEFAULT_DEBUG_CONFIG.selectionSync.enabled,
561
- ...(colorOverride ? { color: debug.selectionSync.color } : {}),
562
- };
563
- hasOverride = true;
564
- }
565
- }
566
- return hasOverride ? result : undefined;
567
- }
568
- export function stripConfigDefaults(config) {
569
- const result = { ...config };
570
- const strippedPage = stripPageDefaults(config.page);
571
- if (strippedPage) {
572
- result.page = strippedPage;
573
- }
574
- else {
575
- delete result.page;
576
- }
577
- const strippedLayout = stripLayoutDefaults(config.layout);
578
- if (strippedLayout) {
579
- result.layout = strippedLayout;
580
- }
581
- else {
582
- delete result.layout;
583
- }
584
- const strippedBodyText = stripBodyTextDefaults(config.bodyText);
585
- if (strippedBodyText) {
586
- result.bodyText = strippedBodyText;
587
- }
588
- else {
589
- delete result.bodyText;
590
- }
591
- const strippedHeadings = stripHeadingsDefaults(config.headings);
592
- if (strippedHeadings) {
593
- result.headings = strippedHeadings;
594
- }
595
- else {
596
- delete result.headings;
597
- }
598
- const strippedLists = stripUnorderedListsDefaults(config.unorderedLists);
599
- if (strippedLists) {
600
- result.unorderedLists = strippedLists;
601
- }
602
- else {
603
- delete result.unorderedLists;
604
- }
605
- const strippedDebug = stripDebugDefaults(config.debug);
606
- if (strippedDebug) {
607
- result.debug = strippedDebug;
608
- }
609
- else {
610
- delete result.debug;
611
- }
612
- return result;
613
- }
614
- function resolveCutLines(raw) {
615
- if (!raw)
616
- return { ...DEFAULT_CUT_LINES };
617
- // Backward compat: old saved configs may have cutLines as a plain boolean
618
- if (typeof raw === 'boolean')
619
- return { ...DEFAULT_CUT_LINES, enabled: raw };
620
- return {
621
- enabled: raw.enabled ?? DEFAULT_CUT_LINES.enabled,
622
- bleed: raw.bleed ?? DEFAULT_CUT_LINES.bleed,
623
- markLength: raw.markLength ?? DEFAULT_CUT_LINES.markLength,
624
- markOffset: raw.markOffset ?? DEFAULT_CUT_LINES.markOffset,
625
- markWidth: raw.markWidth ?? DEFAULT_CUT_LINES.markWidth,
626
- color: raw.color ?? DEFAULT_CUT_LINES.color,
627
- };
628
- }
629
- export function resolvePageConfig(partial) {
630
- if (!partial)
631
- return { ...DEFAULT_PAGE_CONFIG };
632
- return {
633
- backgroundColor: partial.backgroundColor ?? DEFAULT_PAGE_CONFIG.backgroundColor,
634
- sizePreset: partial.sizePreset ?? DEFAULT_PAGE_CONFIG.sizePreset,
635
- width: partial.width ?? DEFAULT_PAGE_CONFIG.width,
636
- height: partial.height ?? DEFAULT_PAGE_CONFIG.height,
637
- margins: partial.margins
638
- ? {
639
- top: partial.margins.top ?? DEFAULT_PAGE_MARGINS.top,
640
- bottom: partial.margins.bottom ?? DEFAULT_PAGE_MARGINS.bottom,
641
- left: partial.margins.left ?? DEFAULT_PAGE_MARGINS.left,
642
- right: partial.margins.right ?? DEFAULT_PAGE_MARGINS.right,
643
- }
644
- : { ...DEFAULT_PAGE_MARGINS },
645
- dpi: partial.dpi ?? DEFAULT_PAGE_CONFIG.dpi,
646
- cutLines: resolveCutLines(partial.cutLines),
647
- baselineGrid: partial.baselineGrid
648
- ? {
649
- enabled: partial.baselineGrid.enabled ?? DEFAULT_PAGE_CONFIG.baselineGrid.enabled,
650
- color: partial.baselineGrid.color ?? DEFAULT_PAGE_CONFIG.baselineGrid.color,
651
- lineWidth: partial.baselineGrid.lineWidth ?? DEFAULT_PAGE_CONFIG.baselineGrid.lineWidth,
652
- }
653
- : { ...DEFAULT_PAGE_CONFIG.baselineGrid },
654
- };
655
- }
656
- export function resolveLayoutConfig(partial) {
657
- if (!partial)
658
- return { ...DEFAULT_LAYOUT_CONFIG };
659
- return {
660
- layoutType: partial.layoutType ?? DEFAULT_LAYOUT_CONFIG.layoutType,
661
- gutterWidth: partial.gutterWidth ?? DEFAULT_LAYOUT_CONFIG.gutterWidth,
662
- sideColumnPercent: partial.sideColumnPercent ?? DEFAULT_LAYOUT_CONFIG.sideColumnPercent,
663
- columnRule: partial.columnRule
664
- ? {
665
- enabled: partial.columnRule.enabled ?? DEFAULT_COLUMN_RULE.enabled,
666
- color: partial.columnRule.color ?? DEFAULT_COLUMN_RULE.color,
667
- lineWidth: partial.columnRule.lineWidth ?? DEFAULT_COLUMN_RULE.lineWidth,
668
- }
669
- : { ...DEFAULT_COLUMN_RULE },
670
- };
671
- }
672
- export function resolveBodyTextConfig(partial) {
673
- if (!partial)
674
- return { ...DEFAULT_BODY_TEXT_CONFIG, hyphenation: { ...DEFAULT_HYPHENATION_CONFIG } };
675
- return {
676
- fontFamily: partial.fontFamily ?? DEFAULT_BODY_TEXT_CONFIG.fontFamily,
677
- fontSize: partial.fontSize ?? DEFAULT_BODY_TEXT_CONFIG.fontSize,
678
- lineHeight: partial.lineHeight ?? DEFAULT_BODY_TEXT_CONFIG.lineHeight,
679
- paragraphSpacing: partial.paragraphSpacing ?? DEFAULT_BODY_TEXT_CONFIG.paragraphSpacing,
680
- color: partial.color ?? DEFAULT_BODY_TEXT_CONFIG.color,
681
- textAlign: partial.textAlign ?? DEFAULT_BODY_TEXT_CONFIG.textAlign,
682
- fontWeight: partial.fontWeight ?? DEFAULT_BODY_TEXT_CONFIG.fontWeight,
683
- boldFontWeight: partial.boldFontWeight ?? DEFAULT_BODY_TEXT_CONFIG.boldFontWeight,
684
- hyphenation: {
685
- enabled: partial.hyphenation?.enabled ?? DEFAULT_HYPHENATION_CONFIG.enabled,
686
- locale: partial.hyphenation?.locale ?? DEFAULT_HYPHENATION_CONFIG.locale,
687
- },
688
- firstLineIndent: partial.firstLineIndent ?? DEFAULT_BODY_TEXT_CONFIG.firstLineIndent,
689
- hangingIndent: partial.hangingIndent ?? DEFAULT_BODY_TEXT_CONFIG.hangingIndent,
690
- };
691
- }
692
- export function resolveHeadingsConfig(partial) {
693
- if (!partial)
694
- return { ...DEFAULT_HEADINGS_CONFIG, levels: DEFAULT_HEADING_LEVELS.map((l) => ({ ...l })) };
695
- const generalFont = partial.fontFamily ?? DEFAULT_HEADINGS_CONFIG.fontFamily;
696
- const generalLineHeight = partial.lineHeight ?? DEFAULT_HEADINGS_CONFIG.lineHeight;
697
- const generalColor = partial.color ?? DEFAULT_HEADINGS_CONFIG.color;
698
- const generalTextAlign = partial.textAlign ?? DEFAULT_HEADINGS_CONFIG.textAlign;
699
- const generalFontWeight = partial.fontWeight ?? DEFAULT_HEADINGS_CONFIG.fontWeight;
700
- const generalMarginTop = partial.marginTop ?? DEFAULT_HEADINGS_CONFIG.marginTop;
701
- const generalMarginBottom = partial.marginBottom ?? DEFAULT_HEADINGS_CONFIG.marginBottom;
702
- const levels = DEFAULT_HEADING_LEVELS.map((def) => {
703
- const override = partial.levels?.find((l) => l.level === def.level);
704
- return {
705
- level: def.level,
706
- fontSize: override?.fontSize ?? def.fontSize,
707
- lineHeight: override?.lineHeight ?? generalLineHeight,
708
- fontFamily: override?.fontFamily ?? generalFont,
709
- color: override?.color ?? generalColor,
710
- fontWeight: override?.fontWeight ?? generalFontWeight,
711
- marginTop: override?.marginTop ?? generalMarginTop,
712
- marginBottom: override?.marginBottom ?? generalMarginBottom,
713
- numberingTemplate: override?.numberingTemplate ?? def.numberingTemplate,
714
- italic: override?.italic ?? def.italic,
715
- };
716
- });
717
- return { fontFamily: generalFont, lineHeight: generalLineHeight, color: generalColor, textAlign: generalTextAlign, fontWeight: generalFontWeight, marginTop: generalMarginTop, marginBottom: generalMarginBottom, levels };
718
- }
719
- //# sourceMappingURL=defaults.js.map