postext 0.3.16 → 0.3.18

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 (228) hide show
  1. package/dist/__tests__/columnBalancing.test.d.ts +2 -0
  2. package/dist/__tests__/columnBalancing.test.d.ts.map +1 -0
  3. package/dist/__tests__/columnBalancing.test.js +194 -0
  4. package/dist/__tests__/columnBalancing.test.js.map +1 -0
  5. package/dist/__tests__/createLayout.test.js +12 -13
  6. package/dist/__tests__/createLayout.test.js.map +1 -1
  7. package/dist/__tests__/defaults/resourceTypes.test.d.ts +2 -0
  8. package/dist/__tests__/defaults/resourceTypes.test.d.ts.map +1 -0
  9. package/dist/__tests__/defaults/resourceTypes.test.js +69 -0
  10. package/dist/__tests__/defaults/resourceTypes.test.js.map +1 -0
  11. package/dist/__tests__/exports.test.js +60 -0
  12. package/dist/__tests__/exports.test.js.map +1 -1
  13. package/dist/__tests__/parse/inlineRef.test.d.ts +2 -0
  14. package/dist/__tests__/parse/inlineRef.test.d.ts.map +1 -0
  15. package/dist/__tests__/parse/inlineRef.test.js +83 -0
  16. package/dist/__tests__/parse/inlineRef.test.js.map +1 -0
  17. package/dist/__tests__/parse/resourceDirective.test.d.ts +2 -0
  18. package/dist/__tests__/parse/resourceDirective.test.d.ts.map +1 -0
  19. package/dist/__tests__/parse/resourceDirective.test.js +55 -0
  20. package/dist/__tests__/parse/resourceDirective.test.js.map +1 -0
  21. package/dist/__tests__/pipeline/floatPlacement.test.d.ts +2 -0
  22. package/dist/__tests__/pipeline/floatPlacement.test.d.ts.map +1 -0
  23. package/dist/__tests__/pipeline/floatPlacement.test.js +262 -0
  24. package/dist/__tests__/pipeline/floatPlacement.test.js.map +1 -0
  25. package/dist/__tests__/pipeline/inlineRefRender.test.d.ts +2 -0
  26. package/dist/__tests__/pipeline/inlineRefRender.test.d.ts.map +1 -0
  27. package/dist/__tests__/pipeline/inlineRefRender.test.js +107 -0
  28. package/dist/__tests__/pipeline/inlineRefRender.test.js.map +1 -0
  29. package/dist/__tests__/pipeline/resourceNumbering.test.d.ts +2 -0
  30. package/dist/__tests__/pipeline/resourceNumbering.test.d.ts.map +1 -0
  31. package/dist/__tests__/pipeline/resourceNumbering.test.js +186 -0
  32. package/dist/__tests__/pipeline/resourceNumbering.test.js.map +1 -0
  33. package/dist/__tests__/singleInk.test.d.ts +2 -0
  34. package/dist/__tests__/singleInk.test.d.ts.map +1 -0
  35. package/dist/__tests__/singleInk.test.js +42 -0
  36. package/dist/__tests__/singleInk.test.js.map +1 -0
  37. package/dist/__tests__/table/model.test.d.ts +2 -0
  38. package/dist/__tests__/table/model.test.d.ts.map +1 -0
  39. package/dist/__tests__/table/model.test.js +187 -0
  40. package/dist/__tests__/table/model.test.js.map +1 -0
  41. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  42. package/dist/canvas-backend/blockRender.js +103 -66
  43. package/dist/canvas-backend/blockRender.js.map +1 -1
  44. package/dist/canvas-backend/decorations.d.ts +4 -1
  45. package/dist/canvas-backend/decorations.d.ts.map +1 -1
  46. package/dist/canvas-backend/decorations.js +14 -6
  47. package/dist/canvas-backend/decorations.js.map +1 -1
  48. package/dist/canvas-backend/headerFooter.d.ts +2 -2
  49. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  50. package/dist/canvas-backend/headerFooter.js +62 -2
  51. package/dist/canvas-backend/headerFooter.js.map +1 -1
  52. package/dist/canvas-backend/index.d.ts +2 -0
  53. package/dist/canvas-backend/index.d.ts.map +1 -1
  54. package/dist/canvas-backend/index.js +20 -10
  55. package/dist/canvas-backend/index.js.map +1 -1
  56. package/dist/canvas-backend/renderResourceBlock.d.ts +28 -0
  57. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -0
  58. package/dist/canvas-backend/renderResourceBlock.js +146 -0
  59. package/dist/canvas-backend/renderResourceBlock.js.map +1 -0
  60. package/dist/defaults/bodyText.d.ts.map +1 -1
  61. package/dist/defaults/bodyText.js +30 -0
  62. package/dist/defaults/bodyText.js.map +1 -1
  63. package/dist/defaults/captionStyle.d.ts +9 -0
  64. package/dist/defaults/captionStyle.d.ts.map +1 -0
  65. package/dist/defaults/captionStyle.js +74 -0
  66. package/dist/defaults/captionStyle.js.map +1 -0
  67. package/dist/defaults/debug.d.ts.map +1 -1
  68. package/dist/defaults/debug.js +6 -0
  69. package/dist/defaults/debug.js.map +1 -1
  70. package/dist/defaults/diagramStyle.d.ts +5 -0
  71. package/dist/defaults/diagramStyle.d.ts.map +1 -0
  72. package/dist/defaults/diagramStyle.js +29 -0
  73. package/dist/defaults/diagramStyle.js.map +1 -0
  74. package/dist/defaults/headerFooter.d.ts +20 -18
  75. package/dist/defaults/headerFooter.d.ts.map +1 -1
  76. package/dist/defaults/headerFooter.js +269 -165
  77. package/dist/defaults/headerFooter.js.map +1 -1
  78. package/dist/defaults/headings.d.ts +4 -0
  79. package/dist/defaults/headings.d.ts.map +1 -1
  80. package/dist/defaults/headings.js +65 -9
  81. package/dist/defaults/headings.js.map +1 -1
  82. package/dist/defaults/index.d.ts +5 -1
  83. package/dist/defaults/index.d.ts.map +1 -1
  84. package/dist/defaults/index.js +29 -1
  85. package/dist/defaults/index.js.map +1 -1
  86. package/dist/defaults/resourceTypes.d.ts +8 -0
  87. package/dist/defaults/resourceTypes.d.ts.map +1 -0
  88. package/dist/defaults/resourceTypes.js +43 -0
  89. package/dist/defaults/resourceTypes.js.map +1 -0
  90. package/dist/defaults/shared.d.ts.map +1 -1
  91. package/dist/defaults/shared.js +40 -0
  92. package/dist/defaults/shared.js.map +1 -1
  93. package/dist/defaults/tableStyle.d.ts +11 -0
  94. package/dist/defaults/tableStyle.d.ts.map +1 -0
  95. package/dist/defaults/tableStyle.js +114 -0
  96. package/dist/defaults/tableStyle.js.map +1 -0
  97. package/dist/design/layout.d.ts +94 -0
  98. package/dist/design/layout.d.ts.map +1 -0
  99. package/dist/design/layout.js +642 -0
  100. package/dist/design/layout.js.map +1 -0
  101. package/dist/design/placeholders.d.ts +29 -0
  102. package/dist/design/placeholders.d.ts.map +1 -0
  103. package/dist/design/placeholders.js +126 -0
  104. package/dist/design/placeholders.js.map +1 -0
  105. package/dist/html-backend.d.ts +6 -0
  106. package/dist/html-backend.d.ts.map +1 -1
  107. package/dist/html-backend.js +274 -10
  108. package/dist/html-backend.js.map +1 -1
  109. package/dist/index.d.ts +14 -5
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +8 -2
  112. package/dist/index.js.map +1 -1
  113. package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
  114. package/dist/knuthPlass/breakpoints.js +41 -98
  115. package/dist/knuthPlass/breakpoints.js.map +1 -1
  116. package/dist/knuthPlass/richAdapter.d.ts +1 -0
  117. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  118. package/dist/knuthPlass/richAdapter.js +2 -1
  119. package/dist/knuthPlass/richAdapter.js.map +1 -1
  120. package/dist/measure/cache.js +1 -1
  121. package/dist/measure/cache.js.map +1 -1
  122. package/dist/measure/canvas.d.ts +3 -0
  123. package/dist/measure/canvas.d.ts.map +1 -1
  124. package/dist/measure/canvas.js +40 -2
  125. package/dist/measure/canvas.js.map +1 -1
  126. package/dist/measure/font.d.ts +3 -2
  127. package/dist/measure/font.d.ts.map +1 -1
  128. package/dist/measure/font.js +5 -2
  129. package/dist/measure/font.js.map +1 -1
  130. package/dist/measure/plain.d.ts.map +1 -1
  131. package/dist/measure/plain.js +14 -7
  132. package/dist/measure/plain.js.map +1 -1
  133. package/dist/measure/rich.d.ts +7 -0
  134. package/dist/measure/rich.d.ts.map +1 -1
  135. package/dist/measure/rich.js +34 -7
  136. package/dist/measure/rich.js.map +1 -1
  137. package/dist/numbering.d.ts +16 -0
  138. package/dist/numbering.d.ts.map +1 -1
  139. package/dist/numbering.js +28 -18
  140. package/dist/numbering.js.map +1 -1
  141. package/dist/parse/blockParser.d.ts.map +1 -1
  142. package/dist/parse/blockParser.js +37 -9
  143. package/dist/parse/blockParser.js.map +1 -1
  144. package/dist/parse/injectSpans.d.ts +9 -0
  145. package/dist/parse/injectSpans.d.ts.map +1 -0
  146. package/dist/parse/injectSpans.js +35 -0
  147. package/dist/parse/injectSpans.js.map +1 -0
  148. package/dist/parse/inlineFormatting.d.ts +38 -0
  149. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  150. package/dist/parse/inlineFormatting.js +58 -0
  151. package/dist/parse/inlineFormatting.js.map +1 -1
  152. package/dist/parse/inlineMath.d.ts.map +1 -1
  153. package/dist/parse/inlineMath.js +26 -43
  154. package/dist/parse/inlineMath.js.map +1 -1
  155. package/dist/parse/sourceMapping.d.ts.map +1 -1
  156. package/dist/parse/sourceMapping.js +34 -7
  157. package/dist/parse/sourceMapping.js.map +1 -1
  158. package/dist/parse/types.d.ts +20 -1
  159. package/dist/parse/types.d.ts.map +1 -1
  160. package/dist/pipeline/build.d.ts.map +1 -1
  161. package/dist/pipeline/build.js +521 -28
  162. package/dist/pipeline/build.js.map +1 -1
  163. package/dist/pipeline/buildBlockKind.d.ts +14 -0
  164. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  165. package/dist/pipeline/buildBlockKind.js +16 -1
  166. package/dist/pipeline/buildBlockKind.js.map +1 -1
  167. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  168. package/dist/pipeline/buildHelpers.js +7 -1
  169. package/dist/pipeline/buildHelpers.js.map +1 -1
  170. package/dist/pipeline/buildMeasurement.d.ts +17 -1
  171. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  172. package/dist/pipeline/buildMeasurement.js +32 -0
  173. package/dist/pipeline/buildMeasurement.js.map +1 -1
  174. package/dist/pipeline/columnBalancing.d.ts +75 -0
  175. package/dist/pipeline/columnBalancing.d.ts.map +1 -0
  176. package/dist/pipeline/columnBalancing.js +125 -0
  177. package/dist/pipeline/columnBalancing.js.map +1 -0
  178. package/dist/pipeline/config.d.ts +4 -1
  179. package/dist/pipeline/config.d.ts.map +1 -1
  180. package/dist/pipeline/config.js +12 -1
  181. package/dist/pipeline/config.js.map +1 -1
  182. package/dist/pipeline/floatPlacement.d.ts +45 -0
  183. package/dist/pipeline/floatPlacement.d.ts.map +1 -0
  184. package/dist/pipeline/floatPlacement.js +68 -0
  185. package/dist/pipeline/floatPlacement.js.map +1 -0
  186. package/dist/pipeline/headerFooter.d.ts +23 -7
  187. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  188. package/dist/pipeline/headerFooter.js +260 -100
  189. package/dist/pipeline/headerFooter.js.map +1 -1
  190. package/dist/pipeline/lists.d.ts +4 -9
  191. package/dist/pipeline/lists.d.ts.map +1 -1
  192. package/dist/pipeline/lists.js +24 -42
  193. package/dist/pipeline/lists.js.map +1 -1
  194. package/dist/pipeline/placeholders.d.ts +6 -0
  195. package/dist/pipeline/placeholders.d.ts.map +1 -1
  196. package/dist/pipeline/placeholders.js +18 -5
  197. package/dist/pipeline/placeholders.js.map +1 -1
  198. package/dist/pipeline/placement.d.ts +15 -2
  199. package/dist/pipeline/placement.d.ts.map +1 -1
  200. package/dist/pipeline/placement.js +38 -3
  201. package/dist/pipeline/placement.js.map +1 -1
  202. package/dist/pipeline/resourceLayout.d.ts +58 -0
  203. package/dist/pipeline/resourceLayout.d.ts.map +1 -0
  204. package/dist/pipeline/resourceLayout.js +338 -0
  205. package/dist/pipeline/resourceLayout.js.map +1 -0
  206. package/dist/pipeline/resourceNumbering.d.ts +54 -0
  207. package/dist/pipeline/resourceNumbering.d.ts.map +1 -0
  208. package/dist/pipeline/resourceNumbering.js +218 -0
  209. package/dist/pipeline/resourceNumbering.js.map +1 -0
  210. package/dist/pipeline/styles.d.ts +6 -0
  211. package/dist/pipeline/styles.d.ts.map +1 -1
  212. package/dist/pipeline/styles.js +1 -1
  213. package/dist/pipeline/styles.js.map +1 -1
  214. package/dist/svg/singleInk.d.ts +10 -0
  215. package/dist/svg/singleInk.d.ts.map +1 -0
  216. package/dist/svg/singleInk.js +86 -0
  217. package/dist/svg/singleInk.js.map +1 -0
  218. package/dist/table/model.d.ts +53 -0
  219. package/dist/table/model.d.ts.map +1 -0
  220. package/dist/table/model.js +253 -0
  221. package/dist/table/model.js.map +1 -0
  222. package/dist/types.d.ts +429 -41
  223. package/dist/types.d.ts.map +1 -1
  224. package/dist/vdt.d.ts +181 -18
  225. package/dist/vdt.d.ts.map +1 -1
  226. package/dist/vdt.js +34 -0
  227. package/dist/vdt.js.map +1 -1
  228. package/package.json +6 -6
@@ -10,6 +10,12 @@ export interface BlockStyle {
10
10
  color: string;
11
11
  boldColor?: string;
12
12
  italicColor?: string;
13
+ /** Colour for inline `:ref` reference labels. */
14
+ referenceColor?: string;
15
+ /** Whether reference labels render in the bold font. */
16
+ referenceBold?: boolean;
17
+ /** Whether reference labels render italic. */
18
+ referenceItalic?: boolean;
13
19
  textAlign: TextAlign;
14
20
  hyphenate: boolean;
15
21
  marginTopPx: number;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/pipeline/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,SAAS,EAAE,MAAM,UAAU,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAI7C,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAgBrE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,GACvB,UAAU,CAyBZ;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAqB5E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAgB3E"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/pipeline/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,SAAS,EAAE,MAAM,UAAU,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAI7C,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAgBrE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,GACvB,UAAU,CAyBZ;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAqB5E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAgB3E"}
@@ -16,7 +16,7 @@ export function resolveBodyStyle(resolved) {
16
16
  const firstLineIndentPx = dimensionToPx(resolved.bodyText.firstLineIndent, dpi, fontSizePx);
17
17
  const hangingIndent = resolved.bodyText.hangingIndent;
18
18
  const marginBottomPx = resolved.bodyText.paragraphSpacing ? lineHeightPx : 0;
19
- return { fontString, boldFontString, italicFontString, boldItalicFontString, fontSizePx, lineHeightPx, color: resolved.bodyText.color.hex, boldColor: resolved.bodyText.boldColor?.hex, italicColor: resolved.bodyText.italicColor?.hex, textAlign, hyphenate, marginTopPx: 0, marginBottomPx, firstLineIndentPx, hangingIndent };
19
+ return { fontString, boldFontString, italicFontString, boldItalicFontString, fontSizePx, lineHeightPx, color: resolved.bodyText.color.hex, boldColor: resolved.bodyText.boldColor?.hex, italicColor: resolved.bodyText.italicColor?.hex, referenceColor: resolved.bodyText.referenceColor.hex, referenceBold: resolved.bodyText.referenceBold, referenceItalic: resolved.bodyText.referenceItalic, textAlign, hyphenate, marginTopPx: 0, marginBottomPx, firstLineIndentPx, hangingIndent };
20
20
  }
21
21
  export function resolveHeadingStyle(level, resolved) {
22
22
  const dpi = resolved.page.dpi;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/pipeline/styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/pipeline/styles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Recolour an SVG document to tints of a single ink.
3
+ *
4
+ * @param svgText The SVG markup.
5
+ * @param inkHex The ink colour as a hex string (e.g. `'#295AA3'`).
6
+ * @returns The recoloured markup; returns the input unchanged when `inkHex`
7
+ * cannot be parsed.
8
+ */
9
+ export declare function applySingleInkToSvg(svgText: string, inkHex: string): string;
10
+ //# sourceMappingURL=singleInk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleInk.d.ts","sourceRoot":"","sources":["../../src/svg/singleInk.ts"],"names":[],"mappings":"AA+DA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAwB3E"}
@@ -0,0 +1,86 @@
1
+ // Single-ink recolouring of SVG markup (diagramStyle.singleInk).
2
+ //
3
+ // Maps every colour literal in an SVG to a tint of one ink so the figure
4
+ // reproduces faithfully when printed with a single spot colour. The mapping
5
+ // preserves perceived value: a colour's relative luminance picks the tint
6
+ // strength (white → paper, black → full ink), so light fills stay light and
7
+ // dark strokes/text stay dark regardless of their original hue.
8
+ //
9
+ // Operates on the markup as text (DOM-free): hex literals and rgb()/rgba()
10
+ // functions are rewritten wherever they appear — presentation attributes,
11
+ // inline `style`, gradients, `<defs>`. `none`, `transparent`, and
12
+ // `currentColor` are left untouched; alpha channels are preserved.
13
+ function parseHex(hex) {
14
+ const h = hex.replace('#', '');
15
+ if (h.length === 3 || h.length === 4) {
16
+ const r = parseInt(h[0] + h[0], 16);
17
+ const g = parseInt(h[1] + h[1], 16);
18
+ const b = parseInt(h[2] + h[2], 16);
19
+ if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b))
20
+ return null;
21
+ return { r, g, b };
22
+ }
23
+ if (h.length === 6 || h.length === 8) {
24
+ const r = parseInt(h.slice(0, 2), 16);
25
+ const g = parseInt(h.slice(2, 4), 16);
26
+ const b = parseInt(h.slice(4, 6), 16);
27
+ if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b))
28
+ return null;
29
+ return { r, g, b };
30
+ }
31
+ return null;
32
+ }
33
+ /** Relative luminance in [0, 1] (Rec. 709 coefficients on gamma-encoded
34
+ * channels — a perceptual approximation that is plenty for tint mapping). */
35
+ function luminance(c) {
36
+ return (0.2126 * c.r + 0.7152 * c.g + 0.0722 * c.b) / 255;
37
+ }
38
+ /** Mix `ink` over white at the strength implied by the source colour's
39
+ * darkness: white maps to white, black maps to the full ink. */
40
+ function tint(source, ink) {
41
+ const strength = 1 - luminance(source);
42
+ return {
43
+ r: Math.round(255 + (ink.r - 255) * strength),
44
+ g: Math.round(255 + (ink.g - 255) * strength),
45
+ b: Math.round(255 + (ink.b - 255) * strength),
46
+ };
47
+ }
48
+ function toHex(c) {
49
+ const ch = (v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, '0');
50
+ return `#${ch(c.r)}${ch(c.g)}${ch(c.b)}`;
51
+ }
52
+ const HEX_RE = /#([0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{4}|[0-9a-fA-F]{3})\b/g;
53
+ const RGB_RE = /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*([0-9.]+)\s*)?\)/g;
54
+ /**
55
+ * Recolour an SVG document to tints of a single ink.
56
+ *
57
+ * @param svgText The SVG markup.
58
+ * @param inkHex The ink colour as a hex string (e.g. `'#295AA3'`).
59
+ * @returns The recoloured markup; returns the input unchanged when `inkHex`
60
+ * cannot be parsed.
61
+ */
62
+ export function applySingleInkToSvg(svgText, inkHex) {
63
+ const ink = parseHex(inkHex);
64
+ if (!ink)
65
+ return svgText;
66
+ return svgText
67
+ .replace(HEX_RE, (match, digits) => {
68
+ const rgb = parseHex(digits);
69
+ if (!rgb)
70
+ return match;
71
+ // Preserve a trailing alpha nibble/byte (#rgba / #rrggbbaa).
72
+ const alpha = digits.length === 4 ? digits[3] + digits[3] : digits.length === 8 ? digits.slice(6) : '';
73
+ return toHex(tint(rgb, ink)) + alpha;
74
+ })
75
+ .replace(RGB_RE, (match, r, g, b, a) => {
76
+ const rgb = { r: Number(r), g: Number(g), b: Number(b) };
77
+ if (rgb.r > 255 || rgb.g > 255 || rgb.b > 255)
78
+ return match;
79
+ const t = tint(rgb, ink);
80
+ return a !== undefined ? `rgba(${t.r}, ${t.g}, ${t.b}, ${a})` : `rgb(${t.r}, ${t.g}, ${t.b})`;
81
+ })
82
+ // Keyword colours only where they appear as a paint value (attribute or
83
+ // inline-style property) — never inside text content or labels.
84
+ .replace(/(fill|stroke|stop-color|flood-color|color)(="|:\s*)(white|black)\b/g, (_m, prop, sep, kw) => `${prop}${sep}${kw === 'black' ? toHex(ink) : '#ffffff'}`);
85
+ }
86
+ //# sourceMappingURL=singleInk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleInk.js","sourceRoot":"","sources":["../../src/svg/singleInk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { TableCellAlign, TableCellVerticalAlign, TableCellPos, TableModel } from '../types';
2
+ /** Position of a cell within the grid (zero-based row/column). */
3
+ export type CellPos = TableCellPos;
4
+ /** An inclusive rectangular range of cells, defined by two corners. */
5
+ export interface CellRange {
6
+ start: CellPos;
7
+ end: CellPos;
8
+ }
9
+ /** Horizontal alignment of a cell's content. */
10
+ export type Align = TableCellAlign;
11
+ /** Vertical alignment of a cell's content. */
12
+ export type VAlign = TableCellVerticalAlign;
13
+ /**
14
+ * Insert a new (empty) row. `at` is the index the new row will occupy; it is
15
+ * clamped to `[0, rowCount]`, so `at >= rowCount` appends.
16
+ */
17
+ export declare const addRow: (m: TableModel, at: number) => TableModel;
18
+ /**
19
+ * Insert a new (empty) column. `at` is the index the new column will occupy in
20
+ * every row; it is clamped to `[0, columnCount]`.
21
+ */
22
+ export declare const addColumn: (m: TableModel, at: number) => TableModel;
23
+ /** Remove the row at `at`. Out-of-range indices leave the model unchanged. */
24
+ export declare const removeRow: (m: TableModel, at: number) => TableModel;
25
+ /** Remove the column at `at`. Out-of-range indices leave the model unchanged. */
26
+ export declare const removeColumn: (m: TableModel, at: number) => TableModel;
27
+ /** Replace the textual content of the cell at `at`. */
28
+ export declare const setCellContent: (m: TableModel, at: CellPos, content: string) => TableModel;
29
+ /**
30
+ * Set (or clear) horizontal / vertical alignment for the cell at `at`. Passing
31
+ * `undefined` for either argument removes that alignment.
32
+ */
33
+ export declare const setAlignment: (m: TableModel, at: CellPos, align?: Align, vAlign?: VAlign) => TableModel;
34
+ /**
35
+ * Merge every cell in `range` into the top-left (primary) cell. The primary
36
+ * cell receives the appropriate `colSpan`/`rowSpan`; the remaining cells are
37
+ * marked `hiddenBy` the primary position so renderers can skip them. The
38
+ * primary cell's content is preserved. A 1x1 range is a no-op.
39
+ */
40
+ export declare const mergeCells: (m: TableModel, range: CellRange) => TableModel;
41
+ /**
42
+ * Undo a merge. `at` may be the primary cell of a merge or any cell hidden by
43
+ * one. The primary cell's spans are cleared and all covered cells have their
44
+ * `hiddenBy` markers removed. A non-merged cell is left unchanged.
45
+ */
46
+ export declare const unmergeCell: (m: TableModel, at: CellPos) => TableModel;
47
+ /**
48
+ * Build a {@link TableModel} from tab-separated text. Rows are split on
49
+ * newlines (CRLF / CR / LF), cells on tabs. Shorter rows are padded with empty
50
+ * cells so the grid is rectangular. Empty input yields an empty model.
51
+ */
52
+ export declare const parseTSV: (input: string) => TableModel;
53
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/table/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACX,MAAM,UAAU,CAAC;AAElB,kEAAkE;AAClE,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC;AAEnC,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;CACd;AAED,gDAAgD;AAChD,MAAM,MAAM,KAAK,GAAG,cAAc,CAAC;AAEnC,8CAA8C;AAC9C,MAAM,MAAM,MAAM,GAAG,sBAAsB,CAAC;AA+D5C;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,GAAG,UAAU,EAAE,IAAI,MAAM,KAAG,UAgBlD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,UAAU,EAAE,IAAI,MAAM,KAAG,UAWrD,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,SAAS,GAAI,GAAG,UAAU,EAAE,IAAI,MAAM,KAAG,UAUrD,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,YAAY,GAAI,GAAG,UAAU,EAAE,IAAI,MAAM,KAAG,UAOxD,CAAC;AAMF,uDAAuD;AACvD,eAAO,MAAM,cAAc,GACzB,GAAG,UAAU,EACb,IAAI,OAAO,EACX,SAAS,MAAM,KACd,UAKF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,GAAG,UAAU,EACb,IAAI,OAAO,EACX,QAAQ,KAAK,EACb,SAAS,MAAM,KACd,UAUF,CAAC;AAMF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,GAAG,UAAU,EAAE,OAAO,SAAS,KAAG,UAoC5D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,UAAU,EAAE,IAAI,OAAO,KAAG,UAkCxD,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,KAAG,UAqBxC,CAAC"}
@@ -0,0 +1,253 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Internal helpers (all pure)
3
+ // ---------------------------------------------------------------------------
4
+ /** Number of columns in the model (taken from the widest row). */
5
+ const columnCount = (m) => m.rows.reduce((max, row) => Math.max(max, row.length), 0);
6
+ const makeEmptyCell = (isHeader) => isHeader ? { content: '', isHeader: true } : { content: '' };
7
+ /** Shallow-clone a single cell, returning a brand-new object. */
8
+ const cloneCell = (cell) => {
9
+ const next = { content: cell.content };
10
+ if (cell.colSpan !== undefined)
11
+ next.colSpan = cell.colSpan;
12
+ if (cell.rowSpan !== undefined)
13
+ next.rowSpan = cell.rowSpan;
14
+ if (cell.isHeader !== undefined)
15
+ next.isHeader = cell.isHeader;
16
+ if (cell.align !== undefined)
17
+ next.align = cell.align;
18
+ if (cell.verticalAlign !== undefined)
19
+ next.verticalAlign = cell.verticalAlign;
20
+ if (cell.hiddenBy !== undefined) {
21
+ next.hiddenBy = { row: cell.hiddenBy.row, col: cell.hiddenBy.col };
22
+ }
23
+ return next;
24
+ };
25
+ /** Deep-clone the grid so callers may mutate the copy before returning it. */
26
+ const cloneRows = (m) => m.rows.map((row) => row.map(cloneCell));
27
+ /** Build a new model from a (freshly produced) grid, preserving extra fields. */
28
+ const withRows = (m, rows) => {
29
+ const next = { rows };
30
+ if (m.headerRowCount !== undefined)
31
+ next.headerRowCount = m.headerRowCount;
32
+ return next;
33
+ };
34
+ const inBounds = (rows, pos) => pos.row >= 0 &&
35
+ pos.row < rows.length &&
36
+ pos.col >= 0 &&
37
+ pos.col < (rows[pos.row]?.length ?? 0);
38
+ /** Normalize a range so `start` is the top-left and `end` the bottom-right. */
39
+ const normalizeRange = (range) => ({
40
+ start: {
41
+ row: Math.min(range.start.row, range.end.row),
42
+ col: Math.min(range.start.col, range.end.col),
43
+ },
44
+ end: {
45
+ row: Math.max(range.start.row, range.end.row),
46
+ col: Math.max(range.start.col, range.end.col),
47
+ },
48
+ });
49
+ const samePos = (a, b) => a.row === b.row && a.col === b.col;
50
+ // ---------------------------------------------------------------------------
51
+ // Row / column structure
52
+ // ---------------------------------------------------------------------------
53
+ /**
54
+ * Insert a new (empty) row. `at` is the index the new row will occupy; it is
55
+ * clamped to `[0, rowCount]`, so `at >= rowCount` appends.
56
+ */
57
+ export const addRow = (m, at) => {
58
+ const rows = cloneRows(m);
59
+ const cols = columnCount(m);
60
+ const index = Math.max(0, Math.min(at, rows.length));
61
+ const isHeaderRow = m.headerRowCount !== undefined && index < m.headerRowCount;
62
+ const newRow = Array.from({ length: cols }, () => makeEmptyCell(isHeaderRow));
63
+ rows.splice(index, 0, newRow);
64
+ const next = withRows(m, rows);
65
+ if (m.headerRowCount !== undefined && index < m.headerRowCount) {
66
+ next.headerRowCount = m.headerRowCount + 1;
67
+ }
68
+ return next;
69
+ };
70
+ /**
71
+ * Insert a new (empty) column. `at` is the index the new column will occupy in
72
+ * every row; it is clamped to `[0, columnCount]`.
73
+ */
74
+ export const addColumn = (m, at) => {
75
+ const cols = columnCount(m);
76
+ const index = Math.max(0, Math.min(at, cols));
77
+ const rows = cloneRows(m).map((row, rowIndex) => {
78
+ const isHeaderRow = m.headerRowCount !== undefined && rowIndex < m.headerRowCount;
79
+ const insertAt = Math.min(index, row.length);
80
+ row.splice(insertAt, 0, makeEmptyCell(isHeaderRow));
81
+ return row;
82
+ });
83
+ return withRows(m, rows);
84
+ };
85
+ /** Remove the row at `at`. Out-of-range indices leave the model unchanged. */
86
+ export const removeRow = (m, at) => {
87
+ if (at < 0 || at >= m.rows.length)
88
+ return withRows(m, cloneRows(m));
89
+ const rows = cloneRows(m);
90
+ rows.splice(at, 1);
91
+ const next = withRows(m, rows);
92
+ if (m.headerRowCount !== undefined && at < m.headerRowCount) {
93
+ next.headerRowCount = Math.max(0, m.headerRowCount - 1);
94
+ }
95
+ return next;
96
+ };
97
+ /** Remove the column at `at`. Out-of-range indices leave the model unchanged. */
98
+ export const removeColumn = (m, at) => {
99
+ if (at < 0 || at >= columnCount(m))
100
+ return withRows(m, cloneRows(m));
101
+ const rows = cloneRows(m).map((row) => {
102
+ if (at < row.length)
103
+ row.splice(at, 1);
104
+ return row;
105
+ });
106
+ return withRows(m, rows);
107
+ };
108
+ // ---------------------------------------------------------------------------
109
+ // Cell content / alignment
110
+ // ---------------------------------------------------------------------------
111
+ /** Replace the textual content of the cell at `at`. */
112
+ export const setCellContent = (m, at, content) => {
113
+ const rows = cloneRows(m);
114
+ if (!inBounds(rows, at))
115
+ return withRows(m, rows);
116
+ rows[at.row][at.col] = { ...rows[at.row][at.col], content };
117
+ return withRows(m, rows);
118
+ };
119
+ /**
120
+ * Set (or clear) horizontal / vertical alignment for the cell at `at`. Passing
121
+ * `undefined` for either argument removes that alignment.
122
+ */
123
+ export const setAlignment = (m, at, align, vAlign) => {
124
+ const rows = cloneRows(m);
125
+ if (!inBounds(rows, at))
126
+ return withRows(m, rows);
127
+ const cell = cloneCell(rows[at.row][at.col]);
128
+ if (align === undefined)
129
+ delete cell.align;
130
+ else
131
+ cell.align = align;
132
+ if (vAlign === undefined)
133
+ delete cell.verticalAlign;
134
+ else
135
+ cell.verticalAlign = vAlign;
136
+ rows[at.row][at.col] = cell;
137
+ return withRows(m, rows);
138
+ };
139
+ // ---------------------------------------------------------------------------
140
+ // Merging
141
+ // ---------------------------------------------------------------------------
142
+ /**
143
+ * Merge every cell in `range` into the top-left (primary) cell. The primary
144
+ * cell receives the appropriate `colSpan`/`rowSpan`; the remaining cells are
145
+ * marked `hiddenBy` the primary position so renderers can skip them. The
146
+ * primary cell's content is preserved. A 1x1 range is a no-op.
147
+ */
148
+ export const mergeCells = (m, range) => {
149
+ const rows = cloneRows(m);
150
+ const { start, end } = normalizeRange(range);
151
+ if (!inBounds(rows, start) || !inBounds(rows, end)) {
152
+ return withRows(m, rows);
153
+ }
154
+ const rowSpan = end.row - start.row + 1;
155
+ const colSpan = end.col - start.col + 1;
156
+ if (rowSpan === 1 && colSpan === 1)
157
+ return withRows(m, rows);
158
+ const primaryPos = { row: start.row, col: start.col };
159
+ for (let r = start.row; r <= end.row; r++) {
160
+ for (let c = start.col; c <= end.col; c++) {
161
+ if (c >= rows[r].length)
162
+ continue;
163
+ const pos = { row: r, col: c };
164
+ if (samePos(pos, primaryPos)) {
165
+ const primary = cloneCell(rows[r][c]);
166
+ if (colSpan > 1)
167
+ primary.colSpan = colSpan;
168
+ else
169
+ delete primary.colSpan;
170
+ if (rowSpan > 1)
171
+ primary.rowSpan = rowSpan;
172
+ else
173
+ delete primary.rowSpan;
174
+ delete primary.hiddenBy;
175
+ rows[r][c] = primary;
176
+ }
177
+ else {
178
+ const hidden = cloneCell(rows[r][c]);
179
+ hidden.hiddenBy = { row: primaryPos.row, col: primaryPos.col };
180
+ delete hidden.colSpan;
181
+ delete hidden.rowSpan;
182
+ rows[r][c] = hidden;
183
+ }
184
+ }
185
+ }
186
+ return withRows(m, rows);
187
+ };
188
+ /**
189
+ * Undo a merge. `at` may be the primary cell of a merge or any cell hidden by
190
+ * one. The primary cell's spans are cleared and all covered cells have their
191
+ * `hiddenBy` markers removed. A non-merged cell is left unchanged.
192
+ */
193
+ export const unmergeCell = (m, at) => {
194
+ const rows = cloneRows(m);
195
+ if (!inBounds(rows, at))
196
+ return withRows(m, rows);
197
+ const cell = rows[at.row][at.col];
198
+ const primaryPos = cell.hiddenBy
199
+ ? { row: cell.hiddenBy.row, col: cell.hiddenBy.col }
200
+ : { row: at.row, col: at.col };
201
+ if (!inBounds(rows, primaryPos))
202
+ return withRows(m, rows);
203
+ const primary = rows[primaryPos.row][primaryPos.col];
204
+ const colSpan = primary.colSpan ?? 1;
205
+ const rowSpan = primary.rowSpan ?? 1;
206
+ if (colSpan === 1 && rowSpan === 1)
207
+ return withRows(m, rows);
208
+ const cleared = cloneCell(primary);
209
+ delete cleared.colSpan;
210
+ delete cleared.rowSpan;
211
+ rows[primaryPos.row][primaryPos.col] = cleared;
212
+ for (let r = primaryPos.row; r < primaryPos.row + rowSpan; r++) {
213
+ for (let c = primaryPos.col; c < primaryPos.col + colSpan; c++) {
214
+ if (r >= rows.length || c >= rows[r].length)
215
+ continue;
216
+ if (samePos({ row: r, col: c }, primaryPos))
217
+ continue;
218
+ const covered = rows[r][c];
219
+ if (covered.hiddenBy && samePos(covered.hiddenBy, primaryPos)) {
220
+ const restored = cloneCell(covered);
221
+ delete restored.hiddenBy;
222
+ rows[r][c] = restored;
223
+ }
224
+ }
225
+ }
226
+ return withRows(m, rows);
227
+ };
228
+ // ---------------------------------------------------------------------------
229
+ // Parsing
230
+ // ---------------------------------------------------------------------------
231
+ /**
232
+ * Build a {@link TableModel} from tab-separated text. Rows are split on
233
+ * newlines (CRLF / CR / LF), cells on tabs. Shorter rows are padded with empty
234
+ * cells so the grid is rectangular. Empty input yields an empty model.
235
+ */
236
+ export const parseTSV = (input) => {
237
+ const text = input.replace(/\r\n?/g, '\n');
238
+ const lines = text.split('\n');
239
+ // Drop a single trailing empty line (common with trailing newline) but keep
240
+ // intentional blank rows in the middle.
241
+ if (lines.length > 1 && lines[lines.length - 1] === '')
242
+ lines.pop();
243
+ if (lines.length === 0 || (lines.length === 1 && lines[0] === '')) {
244
+ return { rows: [] };
245
+ }
246
+ const grid = lines.map((line) => line.split('\t'));
247
+ const cols = grid.reduce((max, row) => Math.max(max, row.length), 0);
248
+ const rows = grid.map((row) => Array.from({ length: cols }, (_unused, c) => ({
249
+ content: row[c] ?? '',
250
+ })));
251
+ return { rows };
252
+ };
253
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/table/model.ts"],"names":[],"mappings":"AAuBA,8EAA8E;AAC9E,8BAA8B;AAC9B,8EAA8E;AAE9E,kEAAkE;AAClE,MAAM,WAAW,GAAG,CAAC,CAAa,EAAU,EAAE,CAC5C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5D,MAAM,aAAa,GAAG,CAAC,QAAkB,EAAa,EAAE,CACtD,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAE/D,iEAAiE;AACjE,MAAM,SAAS,GAAG,CAAC,IAAe,EAAa,EAAE;IAC/C,MAAM,IAAI,GAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAClD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5D,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACtD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;QAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IAC9E,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,SAAS,GAAG,CAAC,CAAa,EAAiB,EAAE,CACjD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAE1C,iFAAiF;AACjF,MAAM,QAAQ,GAAG,CAAC,CAAa,EAAE,IAAmB,EAAc,EAAE;IAClE,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS;QAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,IAAmB,EAAE,GAAY,EAAW,EAAE,CAC9D,GAAG,CAAC,GAAG,IAAI,CAAC;IACZ,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;IACrB,GAAG,CAAC,GAAG,IAAI,CAAC;IACZ,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;AAEzC,+EAA+E;AAC/E,MAAM,cAAc,GAAG,CAAC,KAAgB,EAAa,EAAE,CAAC,CAAC;IACvD,KAAK,EAAE;QACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;KAC9C;IACD,GAAG,EAAE;QACH,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC7C,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;KAC9C;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAW,EAAE,CAClD,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;AAErC,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAa,EAAE,EAAU,EAAc,EAAE;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,MAAM,WAAW,GACf,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC;IAC7D,MAAM,MAAM,GAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAC5D,aAAa,CAAC,WAAW,CAAC,CAC3B,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAE9B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;QAC/D,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAa,EAAE,EAAU,EAAc,EAAE;IACjE,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC9C,MAAM,WAAW,GACf,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QACpD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAa,EAAE,EAAU,EAAc,EAAE;IACjE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;QAC5D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAa,EAAE,EAAU,EAAc,EAAE;IACpE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACpC,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACvC,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,uDAAuD;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,CAAa,EACb,EAAW,EACX,OAAe,EACH,EAAE;IACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5D,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAa,EACb,EAAW,EACX,KAAa,EACb,MAAe,EACH,EAAE;IACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,aAAa,CAAC;;QAC/C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAC5B,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAa,EAAE,KAAgB,EAAc,EAAE;IACxE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7D,MAAM,UAAU,GAAY,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAE/D,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;gBAAE,SAAS;YAClC,MAAM,GAAG,GAAY,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,OAAO,GAAG,CAAC;oBAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;;oBACtC,OAAO,OAAO,CAAC,OAAO,CAAC;gBAC5B,IAAI,OAAO,GAAG,CAAC;oBAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;;oBACtC,OAAO,OAAO,CAAC,OAAO,CAAC;gBAC5B,OAAO,OAAO,CAAC,QAAQ,CAAC;gBACxB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC;gBAC/D,OAAO,MAAM,CAAC,OAAO,CAAC;gBACtB,OAAO,MAAM,CAAC,OAAO,CAAC;gBACtB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAW,EAAc,EAAE;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,UAAU,GAAY,IAAI,CAAC,QAAQ;QACvC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACpD,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC,OAAO,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/D,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;gBAAE,SAAS;YACtD,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC;gBAAE,SAAS;YACtD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC9D,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;gBACpC,OAAO,QAAQ,CAAC,QAAQ,CAAC;gBACzB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAc,EAAE;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,4EAA4E;IAC5E,wCAAwC;IACxC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,EAAE,CAAC;IAEpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAErE,MAAM,IAAI,GAAkB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;KACtB,CAAC,CAAC,CACJ,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC,CAAC"}