postext 0.3.15 → 0.3.17

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 (175) hide show
  1. package/dist/__tests__/createLayout.test.js +12 -13
  2. package/dist/__tests__/createLayout.test.js.map +1 -1
  3. package/dist/__tests__/defaults/resourceTypes.test.d.ts +2 -0
  4. package/dist/__tests__/defaults/resourceTypes.test.d.ts.map +1 -0
  5. package/dist/__tests__/defaults/resourceTypes.test.js +69 -0
  6. package/dist/__tests__/defaults/resourceTypes.test.js.map +1 -0
  7. package/dist/__tests__/exports.test.js +54 -0
  8. package/dist/__tests__/exports.test.js.map +1 -1
  9. package/dist/__tests__/parse/inlineRef.test.d.ts +2 -0
  10. package/dist/__tests__/parse/inlineRef.test.d.ts.map +1 -0
  11. package/dist/__tests__/parse/inlineRef.test.js +83 -0
  12. package/dist/__tests__/parse/inlineRef.test.js.map +1 -0
  13. package/dist/__tests__/parse/resourceDirective.test.d.ts +2 -0
  14. package/dist/__tests__/parse/resourceDirective.test.d.ts.map +1 -0
  15. package/dist/__tests__/parse/resourceDirective.test.js +55 -0
  16. package/dist/__tests__/parse/resourceDirective.test.js.map +1 -0
  17. package/dist/__tests__/pipeline/floatPlacement.test.d.ts +2 -0
  18. package/dist/__tests__/pipeline/floatPlacement.test.d.ts.map +1 -0
  19. package/dist/__tests__/pipeline/floatPlacement.test.js +141 -0
  20. package/dist/__tests__/pipeline/floatPlacement.test.js.map +1 -0
  21. package/dist/__tests__/pipeline/inlineRefRender.test.d.ts +2 -0
  22. package/dist/__tests__/pipeline/inlineRefRender.test.d.ts.map +1 -0
  23. package/dist/__tests__/pipeline/inlineRefRender.test.js +107 -0
  24. package/dist/__tests__/pipeline/inlineRefRender.test.js.map +1 -0
  25. package/dist/__tests__/pipeline/resourceNumbering.test.d.ts +2 -0
  26. package/dist/__tests__/pipeline/resourceNumbering.test.d.ts.map +1 -0
  27. package/dist/__tests__/pipeline/resourceNumbering.test.js +186 -0
  28. package/dist/__tests__/pipeline/resourceNumbering.test.js.map +1 -0
  29. package/dist/__tests__/table/model.test.d.ts +2 -0
  30. package/dist/__tests__/table/model.test.d.ts.map +1 -0
  31. package/dist/__tests__/table/model.test.js +187 -0
  32. package/dist/__tests__/table/model.test.js.map +1 -0
  33. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  34. package/dist/canvas-backend/blockRender.js +25 -6
  35. package/dist/canvas-backend/blockRender.js.map +1 -1
  36. package/dist/canvas-backend/headerFooter.d.ts +3 -2
  37. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  38. package/dist/canvas-backend/headerFooter.js +63 -2
  39. package/dist/canvas-backend/headerFooter.js.map +1 -1
  40. package/dist/canvas-backend/index.d.ts +2 -0
  41. package/dist/canvas-backend/index.d.ts.map +1 -1
  42. package/dist/canvas-backend/index.js +11 -0
  43. package/dist/canvas-backend/index.js.map +1 -1
  44. package/dist/canvas-backend/renderResourceBlock.d.ts +28 -0
  45. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -0
  46. package/dist/canvas-backend/renderResourceBlock.js +146 -0
  47. package/dist/canvas-backend/renderResourceBlock.js.map +1 -0
  48. package/dist/defaults/bodyText.d.ts.map +1 -1
  49. package/dist/defaults/bodyText.js +30 -0
  50. package/dist/defaults/bodyText.js.map +1 -1
  51. package/dist/defaults/captionStyle.d.ts +9 -0
  52. package/dist/defaults/captionStyle.d.ts.map +1 -0
  53. package/dist/defaults/captionStyle.js +74 -0
  54. package/dist/defaults/captionStyle.js.map +1 -0
  55. package/dist/defaults/debug.d.ts.map +1 -1
  56. package/dist/defaults/debug.js +6 -0
  57. package/dist/defaults/debug.js.map +1 -1
  58. package/dist/defaults/headerFooter.d.ts +20 -18
  59. package/dist/defaults/headerFooter.d.ts.map +1 -1
  60. package/dist/defaults/headerFooter.js +269 -165
  61. package/dist/defaults/headerFooter.js.map +1 -1
  62. package/dist/defaults/headings.d.ts.map +1 -1
  63. package/dist/defaults/headings.js +29 -6
  64. package/dist/defaults/headings.js.map +1 -1
  65. package/dist/defaults/index.d.ts +3 -0
  66. package/dist/defaults/index.d.ts.map +1 -1
  67. package/dist/defaults/index.js +19 -0
  68. package/dist/defaults/index.js.map +1 -1
  69. package/dist/defaults/resourceTypes.d.ts +8 -0
  70. package/dist/defaults/resourceTypes.d.ts.map +1 -0
  71. package/dist/defaults/resourceTypes.js +43 -0
  72. package/dist/defaults/resourceTypes.js.map +1 -0
  73. package/dist/defaults/shared.d.ts.map +1 -1
  74. package/dist/defaults/shared.js +30 -0
  75. package/dist/defaults/shared.js.map +1 -1
  76. package/dist/defaults/tableStyle.d.ts +11 -0
  77. package/dist/defaults/tableStyle.d.ts.map +1 -0
  78. package/dist/defaults/tableStyle.js +114 -0
  79. package/dist/defaults/tableStyle.js.map +1 -0
  80. package/dist/design/layout.d.ts +94 -0
  81. package/dist/design/layout.d.ts.map +1 -0
  82. package/dist/design/layout.js +642 -0
  83. package/dist/design/layout.js.map +1 -0
  84. package/dist/design/placeholders.d.ts +29 -0
  85. package/dist/design/placeholders.d.ts.map +1 -0
  86. package/dist/design/placeholders.js +126 -0
  87. package/dist/design/placeholders.js.map +1 -0
  88. package/dist/html-backend.d.ts.map +1 -1
  89. package/dist/html-backend.js +91 -1
  90. package/dist/html-backend.js.map +1 -1
  91. package/dist/index.d.ts +12 -5
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +6 -2
  94. package/dist/index.js.map +1 -1
  95. package/dist/knuthPlass/richAdapter.d.ts +1 -0
  96. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  97. package/dist/knuthPlass/richAdapter.js +2 -1
  98. package/dist/knuthPlass/richAdapter.js.map +1 -1
  99. package/dist/measure/cache.js +1 -1
  100. package/dist/measure/cache.js.map +1 -1
  101. package/dist/measure/rich.d.ts +7 -0
  102. package/dist/measure/rich.d.ts.map +1 -1
  103. package/dist/measure/rich.js +30 -0
  104. package/dist/measure/rich.js.map +1 -1
  105. package/dist/numbering.d.ts +16 -0
  106. package/dist/numbering.d.ts.map +1 -1
  107. package/dist/numbering.js +28 -18
  108. package/dist/numbering.js.map +1 -1
  109. package/dist/parse/blockParser.d.ts.map +1 -1
  110. package/dist/parse/blockParser.js +37 -9
  111. package/dist/parse/blockParser.js.map +1 -1
  112. package/dist/parse/inlineFormatting.d.ts +38 -0
  113. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  114. package/dist/parse/inlineFormatting.js +84 -0
  115. package/dist/parse/inlineFormatting.js.map +1 -1
  116. package/dist/parse/sourceMapping.d.ts.map +1 -1
  117. package/dist/parse/sourceMapping.js +20 -0
  118. package/dist/parse/sourceMapping.js.map +1 -1
  119. package/dist/parse/types.d.ts +20 -1
  120. package/dist/parse/types.d.ts.map +1 -1
  121. package/dist/pipeline/build.d.ts.map +1 -1
  122. package/dist/pipeline/build.js +389 -17
  123. package/dist/pipeline/build.js.map +1 -1
  124. package/dist/pipeline/buildBlockKind.d.ts +14 -0
  125. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  126. package/dist/pipeline/buildBlockKind.js +16 -1
  127. package/dist/pipeline/buildBlockKind.js.map +1 -1
  128. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  129. package/dist/pipeline/buildHelpers.js +7 -1
  130. package/dist/pipeline/buildHelpers.js.map +1 -1
  131. package/dist/pipeline/buildMeasurement.d.ts +17 -1
  132. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  133. package/dist/pipeline/buildMeasurement.js +32 -0
  134. package/dist/pipeline/buildMeasurement.js.map +1 -1
  135. package/dist/pipeline/config.d.ts.map +1 -1
  136. package/dist/pipeline/config.js +3 -1
  137. package/dist/pipeline/config.js.map +1 -1
  138. package/dist/pipeline/floatPlacement.d.ts +45 -0
  139. package/dist/pipeline/floatPlacement.d.ts.map +1 -0
  140. package/dist/pipeline/floatPlacement.js +68 -0
  141. package/dist/pipeline/floatPlacement.js.map +1 -0
  142. package/dist/pipeline/headerFooter.d.ts +23 -7
  143. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  144. package/dist/pipeline/headerFooter.js +258 -100
  145. package/dist/pipeline/headerFooter.js.map +1 -1
  146. package/dist/pipeline/placeholders.d.ts +6 -0
  147. package/dist/pipeline/placeholders.d.ts.map +1 -1
  148. package/dist/pipeline/placeholders.js +46 -0
  149. package/dist/pipeline/placeholders.js.map +1 -1
  150. package/dist/pipeline/placement.d.ts +15 -2
  151. package/dist/pipeline/placement.d.ts.map +1 -1
  152. package/dist/pipeline/placement.js +38 -3
  153. package/dist/pipeline/placement.js.map +1 -1
  154. package/dist/pipeline/resourceLayout.d.ts +58 -0
  155. package/dist/pipeline/resourceLayout.d.ts.map +1 -0
  156. package/dist/pipeline/resourceLayout.js +338 -0
  157. package/dist/pipeline/resourceLayout.js.map +1 -0
  158. package/dist/pipeline/resourceNumbering.d.ts +54 -0
  159. package/dist/pipeline/resourceNumbering.d.ts.map +1 -0
  160. package/dist/pipeline/resourceNumbering.js +218 -0
  161. package/dist/pipeline/resourceNumbering.js.map +1 -0
  162. package/dist/pipeline/styles.d.ts +6 -0
  163. package/dist/pipeline/styles.d.ts.map +1 -1
  164. package/dist/pipeline/styles.js +1 -1
  165. package/dist/pipeline/styles.js.map +1 -1
  166. package/dist/table/model.d.ts +53 -0
  167. package/dist/table/model.d.ts.map +1 -0
  168. package/dist/table/model.js +253 -0
  169. package/dist/table/model.js.map +1 -0
  170. package/dist/types.d.ts +397 -41
  171. package/dist/types.d.ts.map +1 -1
  172. package/dist/vdt.d.ts +165 -18
  173. package/dist/vdt.d.ts.map +1 -1
  174. package/dist/vdt.js.map +1 -1
  175. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/defaults/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAwB,MAAM,UAAU,CAAC;AAGvF,eAAO,MAAM,oBAAoB,EAAE,mBAgBlC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAmC7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAkF/E"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/defaults/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAwB,MAAM,UAAU,CAAC;AAGvF,eAAO,MAAM,oBAAoB,EAAE,mBAiBlC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,mBAAmB,CAoC7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAsF/E"}
@@ -14,6 +14,7 @@ export const DEFAULT_DEBUG_CONFIG = {
14
14
  headingHierarchy: true,
15
15
  consecutiveHeadings: false,
16
16
  listAfterHeading: false,
17
+ designIssues: true,
17
18
  },
18
19
  };
19
20
  export function resolveDebugConfig(partial) {
@@ -49,6 +50,7 @@ export function resolveDebugConfig(partial) {
49
50
  headingHierarchy: partial.warnings?.headingHierarchy ?? DEFAULT_DEBUG_CONFIG.warnings.headingHierarchy,
50
51
  consecutiveHeadings: partial.warnings?.consecutiveHeadings ?? DEFAULT_DEBUG_CONFIG.warnings.consecutiveHeadings,
51
52
  listAfterHeading: partial.warnings?.listAfterHeading ?? DEFAULT_DEBUG_CONFIG.warnings.listAfterHeading,
53
+ designIssues: partial.warnings?.designIssues ?? DEFAULT_DEBUG_CONFIG.warnings.designIssues,
52
54
  },
53
55
  };
54
56
  }
@@ -125,6 +127,10 @@ export function stripDebugDefaults(debug) {
125
127
  out.listAfterHeading = w.listAfterHeading;
126
128
  warnHas = true;
127
129
  }
130
+ if (w.designIssues !== undefined && w.designIssues !== def.designIssues) {
131
+ out.designIssues = w.designIssues;
132
+ warnHas = true;
133
+ }
128
134
  if (warnHas) {
129
135
  result.warnings = out;
130
136
  hasOverride = true;
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/defaults/debug.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/defaults/debug.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,24 @@
1
- import type { HeaderFooterSlot, ResolvedHeaderFooterSlot, ResolvedHeaderFooterTextElement, ResolvedHeaderFooterRuleElement } from '../types';
1
+ import type { DesignSlot, LegacyHeaderFooterSlot, ResolvedDesignBoxElement, ResolvedDesignRuleElement, ResolvedDesignSlot, ResolvedDesignTextElement } from '../types';
2
2
  export type HeaderFooterSlotKind = 'header' | 'footer';
3
- export declare const DEFAULT_HEADER_FOOTER_SLOT: ResolvedHeaderFooterSlot;
4
- export declare const DEFAULT_TEXT_ELEMENT: ResolvedHeaderFooterTextElement;
5
- export declare const DEFAULT_RULE_ELEMENT: ResolvedHeaderFooterRuleElement;
3
+ export declare const DEFAULT_HEADER_FOOTER_SLOT: ResolvedDesignSlot;
4
+ /** Reference defaults for a freshly-created text element. */
5
+ export declare const DEFAULT_TEXT_ELEMENT: ResolvedDesignTextElement;
6
+ export declare const DEFAULT_RULE_ELEMENT: ResolvedDesignRuleElement;
7
+ export declare const DEFAULT_BOX_ELEMENT: ResolvedDesignBoxElement;
6
8
  /** Built-in default header: book title (right, odd) + chapter title (left,
7
9
  * even) + full-width rule. Applied when `config.header` is `undefined`. */
8
- export declare const DEFAULT_HEADER_SLOT: ResolvedHeaderFooterSlot;
9
- /** Built-in default footer: centered page number on every page. Applied when
10
- * `config.footer` is `undefined`. */
11
- export declare const DEFAULT_FOOTER_SLOT: ResolvedHeaderFooterSlot;
12
- /** Resolve a header/footer slot. When `slot` is `undefined`, returns the
13
- * built-in default for `kind`. An explicit empty slot (`{ elements: [] }`)
14
- * stays empty the user opted out of the default. */
15
- export declare function resolveHeaderFooterConfig(slot: HeaderFooterSlot | undefined, kind?: HeaderFooterSlotKind): ResolvedHeaderFooterSlot;
16
- /** Strip defaults from a header/footer slot. Returns `undefined` when the
17
- * slot matches the built-in default for `kind` (so persisted configs omit
18
- * it); otherwise returns the slot with per-element field defaults stripped.
19
- * An explicit empty slot is preserved — the user opted out and we must not
20
- * conflate that with "use the default". */
21
- export declare function stripHeaderFooterDefaults(slot: HeaderFooterSlot | undefined, kind?: HeaderFooterSlotKind): HeaderFooterSlot | undefined;
10
+ export declare const DEFAULT_HEADER_SLOT: ResolvedDesignSlot;
11
+ /** Built-in default footer: centered page number on every page. */
12
+ export declare const DEFAULT_FOOTER_SLOT: ResolvedDesignSlot;
13
+ /** Returns true when the slot uses the legacy `align`/`marginFromBody` shape. */
14
+ export declare function isLegacyHeaderFooterSlot(slot: unknown): slot is LegacyHeaderFooterSlot;
15
+ /** Convert a legacy-shaped header/footer slot to a `DesignSlot`. Safe to
16
+ * call on already-migrated slots (returns them unchanged). */
17
+ export declare function migrateLegacyHeaderFooterConfig(slot: unknown, kind: HeaderFooterSlotKind): DesignSlot | undefined;
18
+ /** Resolve a design slot used for header/footer. `undefined` returns the
19
+ * built-in default for `kind`. Legacy slots are migrated on the fly. */
20
+ export declare function resolveDesignSlot(slot: DesignSlot | undefined, kind?: HeaderFooterSlotKind): ResolvedDesignSlot;
21
+ export declare const resolveHeaderFooterConfig: typeof resolveDesignSlot;
22
+ export declare function stripDesignSlotDefaults(slot: DesignSlot | undefined, kind?: HeaderFooterSlotKind): DesignSlot | undefined;
23
+ export declare const stripHeaderFooterDefaults: typeof stripDesignSlotDefaults;
22
24
  //# sourceMappingURL=headerFooter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"headerFooter.d.ts","sourceRoot":"","sources":["../../src/defaults/headerFooter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EAKxB,+BAA+B,EAC/B,+BAA+B,EAGhC,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AASvD,eAAO,MAAM,0BAA0B,EAAE,wBAExC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,+BAYlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,+BASlC,CAAC;AAEF;4EAC4E;AAC5E,eAAO,MAAM,mBAAmB,EAAE,wBAuCjC,CAAC;AAEF;sCACsC;AACtC,eAAO,MAAM,mBAAmB,EAAE,wBAgBjC,CAAC;AA+DF;;uDAEuD;AACvD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,IAAI,GAAE,oBAA+B,GACpC,wBAAwB,CAK1B;AA0FD;;;;4CAI4C;AAC5C,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,IAAI,GAAE,oBAA+B,GACpC,gBAAgB,GAAG,SAAS,CAO9B"}
1
+ {"version":3,"file":"headerFooter.d.ts","sourceRoot":"","sources":["../../src/defaults/headerFooter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,UAAU,EAEV,sBAAsB,EAGtB,wBAAwB,EAExB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAQvD,eAAO,MAAM,0BAA0B,EAAE,kBAAqC,CAAC;AAE/E,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,EAAE,yBAmBlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,yBAYlC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,wBAajC,CAAC;AAEF;4EAC4E;AAC5E,eAAO,MAAM,mBAAmB,EAAE,kBAwDjC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,kBAuBjC,CAAC;AAyBF,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,sBAAsB,CAKtF;AAyFD;+DAC+D;AAC/D,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,oBAAoB,GACzB,UAAU,GAAG,SAAS,CAUxB;AAoED;yEACyE;AACzE,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,IAAI,GAAE,oBAA+B,GACpC,kBAAkB,CAQpB;AAED,eAAO,MAAM,yBAAyB,0BAAoB,CAAC;AAc3D,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,IAAI,GAAE,oBAA+B,GACpC,UAAU,GAAG,SAAS,CAQxB;AAED,eAAO,MAAM,yBAAyB,gCAA0B,CAAC"}
@@ -1,34 +1,56 @@
1
- import { dimensionsEqual, colorsEqual, DEFAULT_MAIN_COLOR } from './shared';
1
+ import { DEFAULT_MAIN_COLOR } from './shared';
2
2
  const DEFAULT_MARGIN_FROM_BODY = { value: 6, unit: 'pt' };
3
- const DEFAULT_MARGIN_FROM_EDGE = { value: 0, unit: 'pt' };
4
3
  function mainColor() {
5
4
  return { ...DEFAULT_MAIN_COLOR };
6
5
  }
7
- export const DEFAULT_HEADER_FOOTER_SLOT = {
8
- elements: [],
9
- };
6
+ export const DEFAULT_HEADER_FOOTER_SLOT = { elements: [] };
7
+ /** Reference defaults for a freshly-created text element. */
10
8
  export const DEFAULT_TEXT_ELEMENT = {
11
9
  kind: 'text',
12
- align: 'center',
13
- content: '',
10
+ id: 'text',
14
11
  parity: 'all',
15
- marginFromBody: { ...DEFAULT_MARGIN_FROM_BODY },
16
- marginFromEdge: { ...DEFAULT_MARGIN_FROM_EDGE },
12
+ placement: {
13
+ anchor: { to: 'container', edge: 'bottom' },
14
+ offset: { x: { value: 0, unit: 'pt' }, y: { value: 0, unit: 'pt' } },
15
+ size: { width: 'auto', height: 'auto' },
16
+ },
17
+ content: '',
17
18
  fontFamily: 'EB Garamond',
18
19
  fontSize: { value: 8, unit: 'pt' },
19
20
  fontWeight: 400,
20
21
  italic: false,
21
22
  color: { hex: '#000000', model: 'hex' },
23
+ align: 'center',
24
+ verticalAlign: 'middle',
25
+ lineHeight: 1.2,
26
+ overflow: 'ellipsis-end',
22
27
  };
23
28
  export const DEFAULT_RULE_ELEMENT = {
24
29
  kind: 'rule',
30
+ id: 'rule',
31
+ parity: 'all',
32
+ placement: {
33
+ anchor: { to: 'container', edge: 'bottom' },
34
+ offset: { x: { value: 0, unit: 'pt' }, y: { value: 0, unit: 'pt' } },
35
+ size: { width: 'fill' },
36
+ },
37
+ direction: 'horizontal',
25
38
  color: { hex: '#000000', model: 'hex' },
26
39
  thickness: { value: 0.5, unit: 'pt' },
27
- width: 'full',
28
- align: 'center',
29
- marginFromBody: { ...DEFAULT_MARGIN_FROM_BODY },
30
- marginFromEdge: { ...DEFAULT_MARGIN_FROM_EDGE },
40
+ };
41
+ export const DEFAULT_BOX_ELEMENT = {
42
+ kind: 'box',
43
+ id: 'box',
31
44
  parity: 'all',
45
+ placement: {
46
+ anchor: { to: 'container', edge: 'top-left' },
47
+ offset: { x: { value: 0, unit: 'pt' }, y: { value: 0, unit: 'pt' } },
48
+ size: { width: { value: 20, unit: 'pt' }, height: { value: 20, unit: 'pt' } },
49
+ },
50
+ style: {
51
+ backgroundColor: mainColor(),
52
+ borderRadius: { value: 4, unit: 'pt' },
53
+ },
32
54
  };
33
55
  /** Built-in default header: book title (right, odd) + chapter title (left,
34
56
  * even) + full-width rule. Applied when `config.header` is `undefined`. */
@@ -36,223 +58,305 @@ export const DEFAULT_HEADER_SLOT = {
36
58
  elements: [
37
59
  {
38
60
  kind: 'text',
39
- align: 'right',
40
- content: '{title}',
61
+ id: 'titleOdd',
41
62
  parity: 'odd',
42
- marginFromBody: { value: 16, unit: 'pt' },
43
- marginFromEdge: { value: 0, unit: 'pt' },
63
+ placement: {
64
+ anchor: { to: 'container', edge: 'bottom-right' },
65
+ offset: { x: { value: 0, unit: 'pt' }, y: { value: -16, unit: 'pt' } },
66
+ size: { width: 'auto', height: 'auto' },
67
+ },
68
+ content: '{title}',
44
69
  fontFamily: 'Open Sans',
45
70
  fontSize: { value: 8, unit: 'pt' },
46
71
  fontWeight: 600,
47
72
  italic: false,
48
73
  color: mainColor(),
74
+ align: 'right',
75
+ verticalAlign: 'middle',
76
+ lineHeight: 1.2,
77
+ overflow: 'ellipsis-end',
49
78
  },
50
79
  {
51
80
  kind: 'text',
52
- align: 'left',
53
- content: '{chapterTitle}',
81
+ id: 'chapterEven',
54
82
  parity: 'even',
55
- marginFromBody: { value: 16, unit: 'pt' },
56
- marginFromEdge: { value: 0, unit: 'pt' },
83
+ placement: {
84
+ anchor: { to: 'container', edge: 'bottom-left' },
85
+ offset: { x: { value: 0, unit: 'pt' }, y: { value: -16, unit: 'pt' } },
86
+ size: { width: 'auto', height: 'auto' },
87
+ },
88
+ content: '{chapterTitle}',
57
89
  fontFamily: 'Open Sans',
58
90
  fontSize: { value: 8, unit: 'pt' },
59
91
  fontWeight: 600,
60
92
  italic: false,
61
93
  color: mainColor(),
94
+ align: 'left',
95
+ verticalAlign: 'middle',
96
+ lineHeight: 1.2,
97
+ overflow: 'ellipsis-end',
62
98
  },
63
99
  {
64
100
  kind: 'rule',
101
+ id: 'rule',
102
+ parity: 'all',
103
+ placement: {
104
+ anchor: { to: 'container', edge: 'bottom' },
105
+ offset: { x: { value: 0, unit: 'pt' }, y: { value: -13, unit: 'pt' } },
106
+ size: { width: 'fill' },
107
+ },
108
+ direction: 'horizontal',
65
109
  color: mainColor(),
66
110
  thickness: { value: 1, unit: 'pt' },
67
- width: 'full',
68
- align: 'center',
69
- marginFromBody: { value: 13, unit: 'pt' },
70
- marginFromEdge: { value: 0, unit: 'pt' },
71
- parity: 'all',
72
111
  },
73
112
  ],
74
113
  };
75
- /** Built-in default footer: centered page number on every page. Applied when
76
- * `config.footer` is `undefined`. */
114
+ /** Built-in default footer: centered page number on every page. */
77
115
  export const DEFAULT_FOOTER_SLOT = {
78
116
  elements: [
79
117
  {
80
118
  kind: 'text',
81
- align: 'center',
82
- content: '{pageNumber}',
119
+ id: 'pageNumber',
83
120
  parity: 'all',
84
- marginFromBody: { value: 16, unit: 'pt' },
85
- marginFromEdge: { value: 0, unit: 'pt' },
121
+ placement: {
122
+ anchor: { to: 'container', edge: 'top' },
123
+ offset: { x: { value: 0, unit: 'pt' }, y: { value: 16, unit: 'pt' } },
124
+ size: { width: 'auto', height: 'auto' },
125
+ },
126
+ content: '{pageNumber}',
86
127
  fontFamily: 'Open Sans',
87
128
  fontSize: { value: 8, unit: 'pt' },
88
129
  fontWeight: 600,
89
130
  italic: false,
90
131
  color: mainColor(),
132
+ align: 'center',
133
+ verticalAlign: 'middle',
134
+ lineHeight: 1.2,
135
+ overflow: 'ellipsis-end',
91
136
  },
92
137
  ],
93
138
  };
94
139
  function defaultSlotFor(kind) {
95
140
  return kind === 'header' ? DEFAULT_HEADER_SLOT : DEFAULT_FOOTER_SLOT;
96
141
  }
97
- function cloneResolvedSlot(slot) {
98
- return {
99
- elements: slot.elements.map((el) => el.kind === 'text'
100
- ? {
101
- ...el,
102
- marginFromBody: { ...el.marginFromBody },
103
- marginFromEdge: { ...el.marginFromEdge },
104
- fontSize: { ...el.fontSize },
105
- color: { ...el.color },
106
- }
107
- : {
108
- ...el,
109
- marginFromBody: { ...el.marginFromBody },
110
- marginFromEdge: { ...el.marginFromEdge },
111
- thickness: { ...el.thickness },
112
- width: typeof el.width === 'string' ? el.width : { ...el.width },
113
- color: { ...el.color },
114
- }),
115
- };
142
+ // ---------------------------------------------------------------------------
143
+ // Legacy detection + migration
144
+ // ---------------------------------------------------------------------------
145
+ function isLegacyTextElement(el) {
146
+ if (!el || typeof el !== 'object')
147
+ return false;
148
+ const o = el;
149
+ if (o.kind !== 'text')
150
+ return false;
151
+ // Legacy has `align` at the top level and no `placement`.
152
+ return 'align' in o && !('placement' in o);
153
+ }
154
+ function isLegacyRuleElement(el) {
155
+ if (!el || typeof el !== 'object')
156
+ return false;
157
+ const o = el;
158
+ if (o.kind !== 'rule')
159
+ return false;
160
+ return 'align' in o && !('placement' in o);
116
161
  }
117
- function resolveTextElement(el) {
162
+ /** Returns true when the slot uses the legacy `align`/`marginFromBody` shape. */
163
+ export function isLegacyHeaderFooterSlot(slot) {
164
+ if (!slot || typeof slot !== 'object')
165
+ return false;
166
+ const elements = slot.elements;
167
+ if (!Array.isArray(elements))
168
+ return false;
169
+ return elements.some((e) => isLegacyTextElement(e) || isLegacyRuleElement(e));
170
+ }
171
+ function anchorFromLegacy(kind, align) {
172
+ const side = kind === 'header' ? 'bottom' : 'top';
173
+ if (align === 'left')
174
+ return { edge: `${side}-left` };
175
+ if (align === 'right')
176
+ return { edge: `${side}-right` };
177
+ return { edge: side };
178
+ }
179
+ function migrateTextElement(el, kind, idx) {
180
+ const anchor = anchorFromLegacy(kind, el.align);
181
+ const yOffsetVal = el.marginFromBody?.value ?? DEFAULT_MARGIN_FROM_BODY.value;
182
+ const yUnit = el.marginFromBody?.unit ?? DEFAULT_MARGIN_FROM_BODY.unit;
183
+ // Header anchors to bottom and moves UP (negative y); footer anchors to top
184
+ // and moves DOWN (positive y).
185
+ const y = {
186
+ value: kind === 'header' ? -yOffsetVal : yOffsetVal,
187
+ unit: yUnit,
188
+ };
189
+ const edgeInset = el.marginFromEdge;
190
+ let x;
191
+ if (el.align === 'left' && edgeInset)
192
+ x = edgeInset;
193
+ else if (el.align === 'right' && edgeInset)
194
+ x = { value: -edgeInset.value, unit: edgeInset.unit };
195
+ else
196
+ x = undefined;
118
197
  return {
119
198
  kind: 'text',
120
- align: el.align ?? DEFAULT_TEXT_ELEMENT.align,
121
- content: el.content ?? DEFAULT_TEXT_ELEMENT.content,
122
- parity: el.parity ?? DEFAULT_TEXT_ELEMENT.parity,
123
- marginFromBody: el.marginFromBody ?? DEFAULT_TEXT_ELEMENT.marginFromBody,
124
- marginFromEdge: el.marginFromEdge ?? DEFAULT_TEXT_ELEMENT.marginFromEdge,
125
- fontFamily: el.fontFamily ?? DEFAULT_TEXT_ELEMENT.fontFamily,
199
+ id: `text-${idx + 1}`,
200
+ parity: el.parity,
201
+ placement: {
202
+ anchor: { to: 'container', edge: anchor.edge },
203
+ offset: { x, y },
204
+ size: { width: 'auto', height: 'auto' },
205
+ },
206
+ content: el.content,
207
+ fontFamily: el.fontFamily,
126
208
  fontSize: el.fontSize ?? DEFAULT_TEXT_ELEMENT.fontSize,
127
- fontWeight: el.fontWeight ?? DEFAULT_TEXT_ELEMENT.fontWeight,
128
- italic: el.italic ?? DEFAULT_TEXT_ELEMENT.italic,
129
- color: el.color ?? DEFAULT_TEXT_ELEMENT.color,
209
+ fontWeight: el.fontWeight,
210
+ italic: el.italic,
211
+ color: el.color,
212
+ align: el.align,
213
+ verticalAlign: 'middle',
214
+ lineHeight: 1.2,
215
+ overflow: 'ellipsis-end',
130
216
  };
131
217
  }
132
- function resolveRuleElement(el) {
218
+ function migrateRuleElement(el, kind, idx) {
219
+ const anchor = anchorFromLegacy(kind, el.align);
220
+ const yOffsetVal = el.marginFromBody?.value ?? DEFAULT_MARGIN_FROM_BODY.value;
221
+ const yUnit = el.marginFromBody?.unit ?? DEFAULT_MARGIN_FROM_BODY.unit;
222
+ const y = {
223
+ value: kind === 'header' ? -yOffsetVal : yOffsetVal,
224
+ unit: yUnit,
225
+ };
226
+ const widthSize = el.width === 'full' ? 'fill' : el.width;
227
+ const edgeInset = el.align !== 'center' && el.width !== 'full' ? el.marginFromEdge : undefined;
228
+ let x;
229
+ if (el.align === 'left' && edgeInset)
230
+ x = edgeInset;
231
+ else if (el.align === 'right' && edgeInset)
232
+ x = { value: -edgeInset.value, unit: edgeInset.unit };
133
233
  return {
134
234
  kind: 'rule',
135
- color: el.color ?? DEFAULT_RULE_ELEMENT.color,
136
- thickness: el.thickness ?? DEFAULT_RULE_ELEMENT.thickness,
137
- width: el.width ?? DEFAULT_RULE_ELEMENT.width,
138
- align: el.align ?? DEFAULT_RULE_ELEMENT.align,
139
- marginFromBody: el.marginFromBody ?? DEFAULT_RULE_ELEMENT.marginFromBody,
140
- marginFromEdge: el.marginFromEdge ?? DEFAULT_RULE_ELEMENT.marginFromEdge,
141
- parity: el.parity ?? DEFAULT_RULE_ELEMENT.parity,
235
+ id: `rule-${idx + 1}`,
236
+ parity: el.parity,
237
+ placement: {
238
+ anchor: { to: 'container', edge: anchor.edge },
239
+ offset: { x, y },
240
+ size: { width: widthSize },
241
+ },
242
+ direction: 'horizontal',
243
+ color: el.color,
244
+ thickness: el.thickness,
142
245
  };
143
246
  }
144
- function resolveElement(el) {
145
- if (el.kind === 'text')
146
- return resolveTextElement(el);
147
- return resolveRuleElement(el);
247
+ /** Convert a legacy-shaped header/footer slot to a `DesignSlot`. Safe to
248
+ * call on already-migrated slots (returns them unchanged). */
249
+ export function migrateLegacyHeaderFooterConfig(slot, kind) {
250
+ if (!slot || typeof slot !== 'object')
251
+ return undefined;
252
+ const elements = slot.elements;
253
+ if (!Array.isArray(elements))
254
+ return { elements: [] };
255
+ const migrated = elements.map((raw, i) => {
256
+ if (isLegacyTextElement(raw))
257
+ return migrateTextElement(raw, kind, i);
258
+ if (isLegacyRuleElement(raw))
259
+ return migrateRuleElement(raw, kind, i);
260
+ return raw;
261
+ });
262
+ return { elements: migrated };
148
263
  }
149
- /** Resolve a header/footer slot. When `slot` is `undefined`, returns the
150
- * built-in default for `kind`. An explicit empty slot (`{ elements: [] }`)
151
- * stays empty — the user opted out of the default. */
152
- export function resolveHeaderFooterConfig(slot, kind = 'header') {
153
- if (slot === undefined)
154
- return cloneResolvedSlot(defaultSlotFor(kind));
264
+ // ---------------------------------------------------------------------------
265
+ // Resolve / strip
266
+ // ---------------------------------------------------------------------------
267
+ function resolveTextElement(el, idx) {
155
268
  return {
156
- elements: (slot.elements ?? []).map(resolveElement),
157
- };
158
- }
159
- function stripTextElement(el) {
160
- const out = {
161
269
  kind: 'text',
162
- align: el.align,
270
+ id: el.id ?? `text-${idx + 1}`,
271
+ parity: el.parity ?? 'all',
272
+ placement: {
273
+ anchor: el.placement.anchor,
274
+ offset: el.placement.offset ?? {},
275
+ size: el.placement.size ?? { width: 'auto', height: 'auto' },
276
+ },
163
277
  content: el.content,
164
- parity: el.parity,
278
+ fontFamily: el.fontFamily ?? DEFAULT_TEXT_ELEMENT.fontFamily,
279
+ fontSize: el.fontSize,
280
+ fontWeight: el.fontWeight ?? DEFAULT_TEXT_ELEMENT.fontWeight,
281
+ italic: el.italic ?? DEFAULT_TEXT_ELEMENT.italic,
282
+ color: el.color ?? DEFAULT_TEXT_ELEMENT.color,
283
+ align: el.align ?? DEFAULT_TEXT_ELEMENT.align,
284
+ verticalAlign: el.verticalAlign ?? DEFAULT_TEXT_ELEMENT.verticalAlign,
285
+ lineHeight: el.lineHeight ?? DEFAULT_TEXT_ELEMENT.lineHeight,
286
+ letterSpacing: el.letterSpacing,
287
+ overflow: el.overflow ?? DEFAULT_TEXT_ELEMENT.overflow,
288
+ hyphenate: el.hyphenate,
289
+ box: el.box,
165
290
  };
166
- if (el.marginFromBody !== undefined && !dimensionsEqual(el.marginFromBody, DEFAULT_TEXT_ELEMENT.marginFromBody))
167
- out.marginFromBody = el.marginFromBody;
168
- if (el.marginFromEdge !== undefined && !dimensionsEqual(el.marginFromEdge, DEFAULT_TEXT_ELEMENT.marginFromEdge))
169
- out.marginFromEdge = el.marginFromEdge;
170
- if (el.fontFamily !== undefined && el.fontFamily !== DEFAULT_TEXT_ELEMENT.fontFamily)
171
- out.fontFamily = el.fontFamily;
172
- if (el.fontSize !== undefined && !dimensionsEqual(el.fontSize, DEFAULT_TEXT_ELEMENT.fontSize))
173
- out.fontSize = el.fontSize;
174
- if (el.fontWeight !== undefined && el.fontWeight !== DEFAULT_TEXT_ELEMENT.fontWeight)
175
- out.fontWeight = el.fontWeight;
176
- if (el.italic !== undefined && el.italic !== DEFAULT_TEXT_ELEMENT.italic)
177
- out.italic = el.italic;
178
- if (el.color !== undefined && !colorsEqual(el.color, DEFAULT_TEXT_ELEMENT.color))
179
- out.color = el.color;
180
- return out;
181
291
  }
182
- function stripRuleElement(el) {
183
- const out = {
292
+ function resolveRuleElement(el, idx) {
293
+ return {
184
294
  kind: 'rule',
295
+ id: el.id ?? `rule-${idx + 1}`,
296
+ parity: el.parity ?? 'all',
297
+ placement: {
298
+ anchor: el.placement.anchor,
299
+ offset: el.placement.offset ?? {},
300
+ size: el.placement.size ?? {},
301
+ },
302
+ direction: el.direction ?? 'horizontal',
185
303
  color: el.color,
186
304
  thickness: el.thickness,
187
- width: el.width,
188
- align: el.align,
189
- parity: el.parity,
190
305
  };
191
- if (el.marginFromBody !== undefined && !dimensionsEqual(el.marginFromBody, DEFAULT_RULE_ELEMENT.marginFromBody))
192
- out.marginFromBody = el.marginFromBody;
193
- if (el.marginFromEdge !== undefined && !dimensionsEqual(el.marginFromEdge, DEFAULT_RULE_ELEMENT.marginFromEdge))
194
- out.marginFromEdge = el.marginFromEdge;
195
- return out;
196
306
  }
197
- function textElementsEqual(a, b) {
198
- return (a.kind === 'text' &&
199
- a.align === b.align &&
200
- a.content === b.content &&
201
- a.parity === b.parity &&
202
- dimensionsEqual(a.marginFromBody ?? DEFAULT_TEXT_ELEMENT.marginFromBody, b.marginFromBody) &&
203
- dimensionsEqual(a.marginFromEdge ?? DEFAULT_TEXT_ELEMENT.marginFromEdge, b.marginFromEdge) &&
204
- (a.fontFamily ?? DEFAULT_TEXT_ELEMENT.fontFamily) === b.fontFamily &&
205
- dimensionsEqual(a.fontSize ?? DEFAULT_TEXT_ELEMENT.fontSize, b.fontSize) &&
206
- (a.fontWeight ?? DEFAULT_TEXT_ELEMENT.fontWeight) === b.fontWeight &&
207
- (a.italic ?? DEFAULT_TEXT_ELEMENT.italic) === b.italic &&
208
- colorsEqual(a.color ?? DEFAULT_TEXT_ELEMENT.color, b.color));
307
+ function resolveBoxElement(el, idx) {
308
+ return {
309
+ kind: 'box',
310
+ id: el.id ?? `box-${idx + 1}`,
311
+ parity: el.parity ?? 'all',
312
+ placement: {
313
+ anchor: el.placement.anchor,
314
+ offset: el.placement.offset ?? {},
315
+ size: el.placement.size ?? {},
316
+ },
317
+ style: el.style,
318
+ };
319
+ }
320
+ function resolveElement(el, idx) {
321
+ if (el.kind === 'text')
322
+ return resolveTextElement(el, idx);
323
+ if (el.kind === 'rule')
324
+ return resolveRuleElement(el, idx);
325
+ return resolveBoxElement(el, idx);
326
+ }
327
+ /** Resolve a design slot used for header/footer. `undefined` returns the
328
+ * built-in default for `kind`. Legacy slots are migrated on the fly. */
329
+ export function resolveDesignSlot(slot, kind = 'header') {
330
+ if (slot === undefined)
331
+ return cloneResolvedSlot(defaultSlotFor(kind));
332
+ const maybeMigrated = isLegacyHeaderFooterSlot(slot)
333
+ ? migrateLegacyHeaderFooterConfig(slot, kind) ?? slot
334
+ : slot;
335
+ return {
336
+ elements: (maybeMigrated.elements ?? []).map(resolveElement),
337
+ };
209
338
  }
210
- function ruleElementsEqual(a, b) {
211
- const widthEq = typeof a.width === 'string' && typeof b.width === 'string'
212
- ? a.width === b.width
213
- : typeof a.width !== 'string' && typeof b.width !== 'string'
214
- ? dimensionsEqual(a.width, b.width)
215
- : false;
216
- return (a.kind === 'rule' &&
217
- colorsEqual(a.color, b.color) &&
218
- dimensionsEqual(a.thickness, b.thickness) &&
219
- widthEq &&
220
- a.align === b.align &&
221
- dimensionsEqual(a.marginFromBody ?? DEFAULT_RULE_ELEMENT.marginFromBody, b.marginFromBody) &&
222
- dimensionsEqual(a.marginFromEdge ?? DEFAULT_RULE_ELEMENT.marginFromEdge, b.marginFromEdge) &&
223
- a.parity === b.parity);
339
+ export const resolveHeaderFooterConfig = resolveDesignSlot;
340
+ function cloneResolvedSlot(slot) {
341
+ return { elements: slot.elements.map((el) => deepClone(el)) };
224
342
  }
225
- function slotEqualsDefault(slot, def) {
226
- const els = slot.elements ?? [];
227
- if (els.length !== def.elements.length)
228
- return false;
229
- for (let i = 0; i < els.length; i++) {
230
- const a = els[i];
231
- const b = def.elements[i];
232
- if (a.kind !== b.kind)
233
- return false;
234
- if (a.kind === 'text' && b.kind === 'text') {
235
- if (!textElementsEqual(a, b))
236
- return false;
237
- }
238
- else if (a.kind === 'rule' && b.kind === 'rule') {
239
- if (!ruleElementsEqual(a, b))
240
- return false;
241
- }
242
- }
243
- return true;
343
+ function deepClone(v) {
344
+ return JSON.parse(JSON.stringify(v));
244
345
  }
245
- /** Strip defaults from a header/footer slot. Returns `undefined` when the
246
- * slot matches the built-in default for `kind` (so persisted configs omit
247
- * it); otherwise returns the slot with per-element field defaults stripped.
248
- * An explicit empty slot is preserved — the user opted out and we must not
249
- * conflate that with "use the default". */
250
- export function stripHeaderFooterDefaults(slot, kind = 'header') {
346
+ // Strip is intentionally minimal: only returns `undefined` when the slot
347
+ // deep-equals the default (so persisted configs omit it entirely). Per-field
348
+ // stripping across the new union is not worth the complexity the slot is
349
+ // stored as-is otherwise.
350
+ export function stripDesignSlotDefaults(slot, kind = 'header') {
251
351
  if (!slot)
252
352
  return undefined;
253
- if (slotEqualsDefault(slot, defaultSlotFor(kind)))
353
+ const def = defaultSlotFor(kind);
354
+ const migrated = isLegacyHeaderFooterSlot(slot)
355
+ ? migrateLegacyHeaderFooterConfig(slot, kind) ?? slot
356
+ : slot;
357
+ if (JSON.stringify(migrated) === JSON.stringify(def))
254
358
  return undefined;
255
- const elements = (slot.elements ?? []).map((el) => el.kind === 'text' ? stripTextElement(el) : stripRuleElement(el));
256
- return { elements };
359
+ return migrated;
257
360
  }
361
+ export const stripHeaderFooterDefaults = stripDesignSlotDefaults;
258
362
  //# sourceMappingURL=headerFooter.js.map