@rowsncolumns/toolkit 24.5.4 → 24.5.6

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 (77) hide show
  1. package/dist/cjs/autofilter-condition.js +6 -2
  2. package/dist/cjs/excel-parser/helpers.d.ts +9 -1
  3. package/dist/cjs/excel-parser/helpers.d.ts.map +1 -1
  4. package/dist/cjs/excel-parser/helpers.js +70 -16
  5. package/dist/cjs/excel-parser/interface.d.ts +9 -1
  6. package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
  7. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -1
  8. package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +61 -6
  9. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -1
  10. package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +13 -2
  11. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +8 -1
  12. package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  13. package/dist/cjs/excel-parser/plugins/xlsx/index.js +159 -26
  14. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +17 -2
  15. package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  16. package/dist/cjs/excel-parser/plugins/xlsx/styles.js +25 -14
  17. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -1
  18. package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +19 -15
  19. package/dist/cjs/excel-parser/types.d.ts +5 -1
  20. package/dist/cjs/excel-parser/types.d.ts.map +1 -1
  21. package/dist/cjs/excel-parser/workbook.d.ts +1 -0
  22. package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
  23. package/dist/cjs/excel-parser/workbook.js +4 -0
  24. package/dist/cjs/excel-parser/worker.js +3 -0
  25. package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
  26. package/dist/cjs/exporter/xlsx/chart-builder.js +167 -53
  27. package/dist/cjs/exporter/xlsx/future-functions.d.ts +6 -7
  28. package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -1
  29. package/dist/cjs/exporter/xlsx/future-functions.js +5 -261
  30. package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -1
  31. package/dist/cjs/exporter/xlsx/style-builder.js +62 -19
  32. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +10 -2
  33. package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  34. package/dist/cjs/exporter/xlsx/xlsx-export.js +404 -158
  35. package/dist/cjs/helpers/excel-formula-prefixes.d.ts +51 -0
  36. package/dist/cjs/helpers/excel-formula-prefixes.d.ts.map +1 -0
  37. package/dist/cjs/helpers/excel-formula-prefixes.js +548 -0
  38. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  39. package/dist/esm/autofilter-condition.js +6 -2
  40. package/dist/esm/excel-parser/helpers.d.ts +9 -1
  41. package/dist/esm/excel-parser/helpers.d.ts.map +1 -1
  42. package/dist/esm/excel-parser/helpers.js +65 -3
  43. package/dist/esm/excel-parser/interface.d.ts +9 -1
  44. package/dist/esm/excel-parser/interface.d.ts.map +1 -1
  45. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -1
  46. package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +42 -1
  47. package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -1
  48. package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +11 -2
  49. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +8 -1
  50. package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
  51. package/dist/esm/excel-parser/plugins/xlsx/index.js +109 -4
  52. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +17 -2
  53. package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
  54. package/dist/esm/excel-parser/plugins/xlsx/styles.js +20 -8
  55. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -1
  56. package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +13 -9
  57. package/dist/esm/excel-parser/types.d.ts +5 -1
  58. package/dist/esm/excel-parser/types.d.ts.map +1 -1
  59. package/dist/esm/excel-parser/workbook.d.ts +1 -0
  60. package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
  61. package/dist/esm/excel-parser/workbook.js +3 -0
  62. package/dist/esm/excel-parser/worker.js +3 -0
  63. package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
  64. package/dist/esm/exporter/xlsx/chart-builder.js +80 -0
  65. package/dist/esm/exporter/xlsx/future-functions.d.ts +6 -7
  66. package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -1
  67. package/dist/esm/exporter/xlsx/future-functions.js +5 -261
  68. package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -1
  69. package/dist/esm/exporter/xlsx/style-builder.js +56 -18
  70. package/dist/esm/exporter/xlsx/xlsx-export.d.ts +10 -2
  71. package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
  72. package/dist/esm/exporter/xlsx/xlsx-export.js +338 -106
  73. package/dist/esm/helpers/excel-formula-prefixes.d.ts +51 -0
  74. package/dist/esm/helpers/excel-formula-prefixes.d.ts.map +1 -0
  75. package/dist/esm/helpers/excel-formula-prefixes.js +531 -0
  76. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  77. package/package.json +4 -4
@@ -196,7 +196,19 @@ export class StyleBuilder {
196
196
  if (font) {
197
197
  record.font = font;
198
198
  }
199
- if (!record.fill && !record.font) {
199
+ // A rule may set ONLY a border and/or a number format (Excel's Format
200
+ // Cells → Border / Number tabs) — that is a normal rule with a normal
201
+ // dxf, not an empty record to drop.
202
+ const border = buildBorderRecord(format.borders);
203
+ if (hasBorderEdge(border)) {
204
+ record.border = border;
205
+ }
206
+ const numFmtId = this.getNumberFormatId(format);
207
+ const numFmtPattern = format.numberFormat?.pattern;
208
+ if (numFmtId !== 0 && numFmtPattern) {
209
+ record.numFmt = { id: numFmtId, format: numFmtPattern };
210
+ }
211
+ if (!record.fill && !record.font && !record.border && !record.numFmt) {
200
212
  return undefined;
201
213
  }
202
214
  const key = this.serializeDxf(record);
@@ -312,21 +324,7 @@ export class StyleBuilder {
312
324
  return nextId;
313
325
  }
314
326
  getBorderId(borders) {
315
- // OOXML uses a single <diagonal> child plus diagonalUp/diagonalDown
316
- // attributes. If both diagonals are present and identically styled the
317
- // first non-null one defines the edge; otherwise each flag is set
318
- // independently and both share the same painted style. This matches
319
- // how Excel collapses diagonal pairs.
320
- const diagonalEdge = convertBorderEdge(borders?.diagonalUp ?? borders?.diagonalDown);
321
- const record = {
322
- top: convertBorderEdge(borders?.top),
323
- bottom: convertBorderEdge(borders?.bottom),
324
- left: convertBorderEdge(borders?.left),
325
- right: convertBorderEdge(borders?.right),
326
- diagonal: diagonalEdge,
327
- diagonalUp: !!borders?.diagonalUp,
328
- diagonalDown: !!borders?.diagonalDown,
329
- };
327
+ const record = buildBorderRecord(borders);
330
328
  const key = this.serializeBorder(record);
331
329
  const existing = this.borderMap.get(key);
332
330
  if (typeof existing === "number") {
@@ -460,7 +458,7 @@ export class StyleBuilder {
460
458
  ].join("|");
461
459
  }
462
460
  serializeDxf(dxf) {
463
- return `${dxf.fill ? this.serializeFill(dxf.fill) : ""}|${dxf.font ? this.serializeFont(dxf.font) : ""}`;
461
+ return `${dxf.fill ? this.serializeFill(dxf.fill) : ""}|${dxf.font ? this.serializeFont(dxf.font) : ""}|${dxf.border ? this.serializeBorder(dxf.border) : ""}|${dxf.numFmt ? dxf.numFmt.id : ""}`;
464
462
  }
465
463
  toXml() {
466
464
  const numFmtXml = this.numberFormats.length
@@ -546,8 +544,12 @@ export class StyleBuilder {
546
544
  ? `<dxfs count="${this.dxfs.length}">${this.dxfs
547
545
  .map((dxf) => {
548
546
  const font = dxf.font ? this.buildFontXml(dxf.font) : "";
547
+ const numFmt = dxf.numFmt
548
+ ? `<numFmt numFmtId="${dxf.numFmt.id}" formatCode="${escapeXml(dxf.numFmt.format)}"/>`
549
+ : "";
549
550
  const fill = dxf.fill ? this.buildFillXml(dxf.fill, true) : "";
550
- return `<dxf>${font}${fill}</dxf>`;
551
+ const border = dxf.border ? buildDxfBorderXml(dxf.border) : "";
552
+ return `<dxf>${font}${numFmt}${fill}${border}</dxf>`;
551
553
  })
552
554
  .join("")}</dxfs>`
553
555
  : `<dxfs count="0"/>`;
@@ -589,6 +591,42 @@ export class StyleBuilder {
589
591
  return styleXml;
590
592
  }
591
593
  }
594
+ // OOXML uses a single <diagonal> child plus diagonalUp/diagonalDown
595
+ // attributes. If both diagonals are present and identically styled the
596
+ // first non-null one defines the edge; otherwise each flag is set
597
+ // independently and both share the same painted style. This matches
598
+ // how Excel collapses diagonal pairs.
599
+ const buildBorderRecord = (borders) => {
600
+ const diagonalEdge = convertBorderEdge(borders?.diagonalUp ?? borders?.diagonalDown);
601
+ return {
602
+ top: convertBorderEdge(borders?.top),
603
+ bottom: convertBorderEdge(borders?.bottom),
604
+ left: convertBorderEdge(borders?.left),
605
+ right: convertBorderEdge(borders?.right),
606
+ diagonal: diagonalEdge,
607
+ diagonalUp: !!borders?.diagonalUp,
608
+ diagonalDown: !!borders?.diagonalDown,
609
+ };
610
+ };
611
+ const hasBorderEdge = (border) => Boolean(border.top?.style ||
612
+ border.bottom?.style ||
613
+ border.left?.style ||
614
+ border.right?.style ||
615
+ border.diagonal?.style);
616
+ // A dxf `<border>` lists only the edges the rule sets: unlike a cell
617
+ // border, an empty `<left/>` in a differential format would mean "remove
618
+ // the left border", not "leave it alone".
619
+ const buildDxfBorderXml = (border) => {
620
+ const edges = ["left", "right", "top", "bottom"]
621
+ .filter((side) => border[side]?.style)
622
+ .map((side) => serializeBorderEdgeXml(border[side], side))
623
+ .join("");
624
+ const diagonal = border.diagonal?.style
625
+ ? serializeBorderEdgeXml(border.diagonal, "diagonal")
626
+ : "";
627
+ const diagonalAttrs = `${border.diagonalUp ? ` diagonalUp="1"` : ""}${border.diagonalDown ? ` diagonalDown="1"` : ""}`;
628
+ return `<border${diagonalAttrs}>${edges}${diagonal}</border>`;
629
+ };
592
630
  const convertBorderEdge = (border) => {
593
631
  if (!border || !border.style)
594
632
  return undefined;
@@ -1,5 +1,5 @@
1
1
  import type { CellData, Citation, CommentThread, DataValidationRuleRecord, IterativeCalculationOptions, SheetData, TextFormat } from "@rowsncolumns/common-types";
2
- import type { Color, ConditionalFormatRule, EmbeddedChart, EmbeddedObject, NamedRange, PivotTable, ProtectedRange, Sheet, Slicer, SpreadsheetTheme, TableView, CustomTableStyle } from "@rowsncolumns/spreadsheet";
2
+ import type { Color, ConditionalFormatRule, EmbeddedChart, EmbeddedObject, NamedRange, PivotTable, ProtectedRange, Sheet, WorkbookProtection, Slicer, SpreadsheetTheme, TableView, CustomTableStyle } from "@rowsncolumns/spreadsheet";
3
3
  import type { CellXfs, SharedStrings as SharedStringsType } from "@rowsncolumns/spreadsheet-state";
4
4
  import type { PowerQueryParts } from "../../power-query";
5
5
  import type { ExternalLink, WorkbookProperties } from "../../excel-parser/types";
@@ -83,6 +83,14 @@ export type ExportExcelProps<S extends Sheet, T extends CellData, C extends Cita
83
83
  }>;
84
84
  }>;
85
85
  iterativeCalculationOptions?: IterativeCalculationOptions;
86
+ /**
87
+ * Excel "Protect Workbook" — written as `<workbookProtection …/>` right after
88
+ * `<workbookPr>` in `xl/workbook.xml` (structure / windows / revision locks
89
+ * plus the source's password hash, verbatim). Omitted ⇒ no element, Excel's
90
+ * unprotected workbook. The parser's `getWorkbookProtection()` is the source
91
+ * on a round trip.
92
+ */
93
+ workbookProtection?: WorkbookProtection;
86
94
  ignoreFormulaPatterns?: RegExp | RegExp[];
87
95
  citations?: Citation[];
88
96
  /**
@@ -118,7 +126,7 @@ export type ExportExcelProps<S extends Sheet, T extends CellData, C extends Cita
118
126
  */
119
127
  properties?: WorkbookProperties;
120
128
  };
121
- export declare const createExcelFile: <S extends Sheet, T extends CellData, C extends Citation>({ conditionalFormats: _conditionalFormats, dataValidations: _dataValidations, sheets, sheetData, sharedStrings: sourceSharedStrings, tables: _tables, cellXfs, theme, defaultFont, embeds, charts, slicers, pivotTables, externalLinks, namedRanges, protectedRanges, namedCellStyles, customTableStyles, iterativeCalculationOptions, ignoreFormulaPatterns, citations, comments, password, locale, use1904, properties, powerQuery, }: ExportExcelProps<S, T, C>) => Promise<Uint8Array<ArrayBufferLike>>;
129
+ export declare const createExcelFile: <S extends Sheet, T extends CellData, C extends Citation>({ conditionalFormats: _conditionalFormats, dataValidations: _dataValidations, sheets, sheetData, sharedStrings: sourceSharedStrings, tables: _tables, cellXfs, theme, defaultFont, embeds, charts, slicers, pivotTables, externalLinks, namedRanges, protectedRanges, namedCellStyles, customTableStyles, iterativeCalculationOptions, workbookProtection, ignoreFormulaPatterns, citations, comments, password, locale, use1904, properties, powerQuery, }: ExportExcelProps<S, T, C>) => Promise<Uint8Array<ArrayBufferLike>>;
122
130
  /**
123
131
  * Normalize a dataValidation sqref list: collapse degenerate ranges
124
132
  * (`C7:C7` → `C7`), drop exact duplicates, and drop members fully contained
@@ -1 +1 @@
1
- {"version":3,"file":"xlsx-export.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/xlsx-export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,aAAa,EAEb,wBAAwB,EAGxB,2BAA2B,EAI3B,SAAS,EACT,UAAU,EAEX,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAGV,KAAK,EAEL,qBAAqB,EAErB,aAAa,EACb,cAAc,EAKd,UAAU,EACV,UAAU,EAEV,cAAc,EAMd,KAAK,EAEL,MAAM,EACN,gBAAgB,EAEhB,SAAS,EAGT,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,OAAO,EACP,aAAa,IAAI,iBAAiB,EACnC,MAAM,iCAAiC,CAAC;AA4CzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAUzD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAwClC,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,QAAQ,IAChB;IACF,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC7C,eAAe,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC,CAAC;IACH;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,gBAAgB,GAAG;QAC3C,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,eAAe,CAAC,EAAE,KAAK,CAAC;YACxB,SAAS,CAAC,EAAE,KAAK,CAAC;YAClB,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,MAAM,CAAC,EAAE,OAAO,CAAC;SAClB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,QAAQ,EAClB,yaA4BC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,yCA6kB3B,CAAC;AA8OF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,KAAG,MAAM,EA2C5D,CAAC"}
1
+ {"version":3,"file":"xlsx-export.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/xlsx-export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,aAAa,EAEb,wBAAwB,EAGxB,2BAA2B,EAI3B,SAAS,EACT,UAAU,EAEX,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAGV,KAAK,EAEL,qBAAqB,EAErB,aAAa,EACb,cAAc,EAMd,UAAU,EACV,UAAU,EAEV,cAAc,EAMd,KAAK,EAEL,kBAAkB,EAClB,MAAM,EACN,gBAAgB,EAEhB,SAAS,EAGT,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,OAAO,EACP,aAAa,IAAI,iBAAiB,EACnC,MAAM,iCAAiC,CAAC;AA6CzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAUzD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAwClC,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,QAAQ,IAChB;IACF,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC7C,eAAe,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC7C,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC,CAAC;IACH;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,gBAAgB,GAAG;QAC3C,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,eAAe,CAAC,EAAE,KAAK,CAAC;YACxB,SAAS,CAAC,EAAE,KAAK,CAAC;YAClB,IAAI,CAAC,EAAE,OAAO,CAAC;YACf,MAAM,CAAC,EAAE,OAAO,CAAC;SAClB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,QAAQ,EAClB,CAAC,SAAS,QAAQ,EAClB,6bA6BC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,yCAylB3B,CAAC;AA8OF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,KAAG,MAAM,EA2C5D,CAAC"}