@office-open/xlsx 0.6.6 → 0.6.7

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.
package/README.md CHANGED
@@ -67,29 +67,29 @@ DEFLATE = compressed (default), STORE = no compression.
67
67
 
68
68
  **Create + toBuffer (end-to-end)**
69
69
 
70
- | Scenario | DEFLATE sync | STORE sync | DEFLATE async | STORE async | hucre |
71
- | ---------------- | -----------: | -----------: | ------------: | -----------: | ---------: |
72
- | Simple (3 rows) | 547 ops/s | 13,823 ops/s | 558 ops/s | 14,536 ops/s | 926 ops/s |
73
- | Styled rows (20) | 645 ops/s | 11,275 ops/s | 644 ops/s | 11,576 ops/s | 960 ops/s |
74
- | Table (10×5) | 707 ops/s | 12,369 ops/s | 734 ops/s | 11,447 ops/s | 1045 ops/s |
70
+ | Scenario | DEFLATE sync | STORE sync | DEFLATE async | STORE async | hucre |
71
+ | ---------------- | -----------: | -----------: | ------------: | -----------: | --------: |
72
+ | Simple (3 rows) | 457 ops/s | 10,016 ops/s | 500 ops/s | 11,637 ops/s | 689 ops/s |
73
+ | Styled rows (20) | 472 ops/s | 10,504 ops/s | 627 ops/s | 9,479 ops/s | 862 ops/s |
74
+ | Table (10×5) | 675 ops/s | 10,518 ops/s | 681 ops/s | 10,241 ops/s | 877 ops/s |
75
75
 
76
76
  **Large Files — Create + toBuffer**
77
77
 
78
78
  | Scenario | DEFLATE sync | STORE sync | DEFLATE async | STORE async | hucre |
79
79
  | -------------------- | -----------: | ----------: | ------------: | ----------: | ----------: |
80
- | 2000 rows | 50.2 ops/s | 211.1 ops/s | 20.6 ops/s | 207.5 ops/s | 85.0 ops/s |
81
- | 200×10 table | 167.4 ops/s | 623.0 ops/s | 190.7 ops/s | 772.3 ops/s | 253.2 ops/s |
82
- | 20 sheets × 100 rows | 87.2 ops/s | 196.4 ops/s | 93.7 ops/s | 248.6 ops/s | 87.7 ops/s |
80
+ | 2000 rows | 47.3 ops/s | 164.9 ops/s | 19.0 ops/s | 162.9 ops/s | 82.8 ops/s |
81
+ | 200×10 table | 148.2 ops/s | 510.5 ops/s | 160.7 ops/s | 691.7 ops/s | 226.4 ops/s |
82
+ | 20 sheets × 100 rows | 81.3 ops/s | 179.5 ops/s | 87.8 ops/s | 223.5 ops/s | 79.9 ops/s |
83
83
 
84
84
  **Large Data — 100,000 rows × 20 columns (2M cells)**
85
85
 
86
86
  | Method | Speed | Speedup |
87
87
  | ------------- | ----------: | --------: |
88
- | DEFLATE sync | 0.274 ops/s | 0.73x |
89
- | STORE sync | 0.558 ops/s | **1.48x** |
90
- | DEFLATE async | 0.281 ops/s | 0.75x |
91
- | STORE async | 0.694 ops/s | **1.85x** |
92
- | hucre | 0.376 ops/s | |
88
+ | DEFLATE sync | 0.250 ops/s | 0.68x |
89
+ | STORE sync | 0.516 ops/s | **1.40x** |
90
+ | DEFLATE async | 0.270 ops/s | 0.73x |
91
+ | STORE async | 0.664 ops/s | **1.80x** |
92
+ | hucre | 0.369 ops/s | |
93
93
 
94
94
  ## License
95
95
 
@@ -14,7 +14,9 @@ declare class ContentTypes extends BaseXmlComponent {
14
14
  addTheme(index?: number): void;
15
15
  addChart(index: number): void;
16
16
  addDrawing(index: number): void;
17
+ addImageType(extension: "png" | "jpeg"): void;
17
18
  prepForXml(_context: Context): IXmlableObject;
19
+ toXml(_context: Context): string;
18
20
  }
19
21
  //#endregion
20
22
  //#region src/file/core-properties.d.ts
@@ -31,6 +33,7 @@ declare class CoreProperties extends BaseXmlComponent {
31
33
  private readonly options;
32
34
  constructor(options: CorePropertiesOptions);
33
35
  prepForXml(_context: Context): IXmlableObject;
36
+ toXml(_context: Context): string;
34
37
  }
35
38
  //#endregion
36
39
  //#region src/file/media/media.d.ts
@@ -148,6 +151,7 @@ declare class WorkbookXml extends BaseXmlComponent {
148
151
  private readonly sheets;
149
152
  constructor(sheets: readonly SheetDefinition[]);
150
153
  prepForXml(_context: Context): IXmlableObject;
154
+ toXml(_context: Context): string;
151
155
  }
152
156
  //#endregion
153
157
  //#region src/file/worksheet.d.ts
@@ -346,4 +350,4 @@ declare const patchWorkbook: <T extends PatchDocumentOutputType = PatchDocumentO
346
350
  }: PatchWorkbookOptions<T>) => Promise<OutputByType$1[T]>;
347
351
  //#endregion
348
352
  export { type AlignmentOptions, type BorderOptions, type BorderSideOptions, type CellOptions, type CellPatch, type ColumnOptions, type ConditionalFormatOptions, type CorePropertiesOptions, type DataValidationOptions, File, File as Workbook, type FillOptions, type FontOptions, type FreezePaneOptions, type IPatch, type InputDataType, type MergeCellOptions, type OutputByType, type OutputType, Packer, type PatchDocumentOutputType, PatchType, type PatchWorkbookOptions, type RowOptions, SharedStrings, type StyleOptions, Styles, type WorkbookOptions, type WorksheetChartOptions, type WorksheetOptions, type XlsxDocument, type XlsxPartRefs, columnToLetter, dateToSerialNumber, letterToColumn, parseWorkbook, parseXlsx, patchWorkbook };
349
- //# sourceMappingURL=index.d.ts.map
353
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/file/content-types.ts","../src/file/core-properties.ts","../src/file/media/media.ts","../src/file/shared-strings.ts","../src/file/styles.ts","../src/file/theme.ts","../src/file/workbook.ts","../src/file/worksheet.ts","../src/file/file.ts","../src/export/packer/packer.ts","../src/util/index.ts","../src/parse.ts","../src/patcher.ts"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { AppProperties, BaseXmlComponent, ChartCollection, ChartSpace, Formatter, IgnoreIfEmptyXmlComponent, OoxmlMimeType, Relationships, buildCorePropertiesXml, compileMapping, createPacker, parseArchive, parseCorePropsElement, strFromU8, toJson, unzipSync, zipAndConvert } from "@office-open/core";
1
+ import { AppProperties, BaseXmlComponent, ChartCollection, ChartSpace, Formatter, IgnoreIfEmptyXmlComponent, OoxmlMimeType, Relationships, buildCorePropertiesXml, buildCorePropertiesXmlString, compileMapping, createPacker, parseArchive, parseCorePropsElement, strFromU8, toJson, unzipSync, zipAndConvert } from "@office-open/core";
2
2
  import { attr, attrNum, attrs, escapeXml, findChild, js2xml, selfCloseElement, textOf } from "@office-open/xml";
3
3
  import { toUint8Array } from "undio";
4
4
  //#region src/file/content-types.ts
@@ -13,7 +13,7 @@ const XLSX_STYLES = "application/vnd.openxmlformats-officedocument.spreadsheetml
13
13
  const XLSX_SHARED_STRINGS = "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml";
14
14
  const XLSX_THEME = "application/vnd.openxmlformats-officedocument.theme+xml";
15
15
  const XLSX_CHART = "application/vnd.openxmlformats-officedocument.drawingml.chart+xml";
16
- const STATIC_CHILDREN = [{ _attr: { xmlns: "http://schemas.openxmlformats.org/package/2006/content-types" } }, ...[
16
+ const STATIC_ENTRIES = [
17
17
  {
18
18
  type: "Default",
19
19
  contentType: "application/vnd.openxmlformats-package.relationships+xml",
@@ -24,16 +24,6 @@ const STATIC_CHILDREN = [{ _attr: { xmlns: "http://schemas.openxmlformats.org/pa
24
24
  contentType: "application/xml",
25
25
  key: "xml"
26
26
  },
27
- {
28
- type: "Default",
29
- contentType: "image/png",
30
- key: "png"
31
- },
32
- {
33
- type: "Default",
34
- contentType: "image/jpeg",
35
- key: "jpeg"
36
- },
37
27
  {
38
28
  type: "Override",
39
29
  contentType: XLSX_MAIN,
@@ -49,7 +39,8 @@ const STATIC_CHILDREN = [{ _attr: { xmlns: "http://schemas.openxmlformats.org/pa
49
39
  contentType: "application/vnd.openxmlformats-officedocument.extended-properties+xml",
50
40
  key: "/docProps/app.xml"
51
41
  }
52
- ].map((e) => {
42
+ ];
43
+ const STATIC_CHILDREN = [{ _attr: { xmlns: "http://schemas.openxmlformats.org/package/2006/content-types" } }, ...STATIC_ENTRIES.map((e) => {
53
44
  if (e.type === "Default") return { Default: { _attr: {
54
45
  ContentType: e.contentType,
55
46
  Extension: e.key
@@ -59,6 +50,7 @@ const STATIC_CHILDREN = [{ _attr: { xmlns: "http://schemas.openxmlformats.org/pa
59
50
  PartName: e.key
60
51
  } } };
61
52
  })];
53
+ const STATIC_XML = STATIC_ENTRIES.map((e) => e.type === "Default" ? `<Default ContentType="${e.contentType}" Extension="${e.key}"/>` : `<Override ContentType="${e.contentType}" PartName="${e.key}"/>`).join("");
62
54
  var ContentTypes = class extends BaseXmlComponent {
63
55
  dynamicEntries = [];
64
56
  constructor() {
@@ -106,6 +98,15 @@ var ContentTypes = class extends BaseXmlComponent {
106
98
  key: `/xl/drawings/drawing${index}.xml`
107
99
  });
108
100
  }
101
+ addImageType(extension) {
102
+ const contentType = extension === "png" ? "image/png" : "image/jpeg";
103
+ if (this.dynamicEntries.some((e) => e.type === "Default" && e.key === extension)) return;
104
+ this.dynamicEntries.push({
105
+ type: "Default",
106
+ contentType,
107
+ key: extension
108
+ });
109
+ }
109
110
  prepForXml(_context) {
110
111
  const children = [...STATIC_CHILDREN];
111
112
  for (const e of this.dynamicEntries) if (e.type === "Default") children.push({ Default: { _attr: {
@@ -118,6 +119,13 @@ var ContentTypes = class extends BaseXmlComponent {
118
119
  } } });
119
120
  return { Types: children };
120
121
  }
122
+ toXml(_context) {
123
+ const p = ["<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">", STATIC_XML];
124
+ for (const e of this.dynamicEntries) if (e.type === "Default") p.push(`<Default ContentType="${e.contentType}" Extension="${e.key}"/>`);
125
+ else p.push(`<Override ContentType="${e.contentType}" PartName="${e.key}"/>`);
126
+ p.push("</Types>");
127
+ return p.join("");
128
+ }
121
129
  };
122
130
  //#endregion
123
131
  //#region src/file/core-properties.ts
@@ -135,6 +143,9 @@ var CoreProperties = class extends BaseXmlComponent {
135
143
  prepForXml(_context) {
136
144
  return buildCorePropertiesXml(this.options);
137
145
  }
146
+ toXml(_context) {
147
+ return buildCorePropertiesXmlString(this.options);
148
+ }
138
149
  };
139
150
  //#endregion
140
151
  //#region src/file/media/media.ts
@@ -356,7 +367,7 @@ var Styles = class extends BaseXmlComponent {
356
367
  for (const f of this.fills) {
357
368
  const patternAttrs = attrs({ patternType: f.patternType ?? "solid" });
358
369
  const fgColor = f.color ? `<fgColor rgb="FF${f.color}"/>` : "";
359
- p.push(`<fill><patternFill${patternAttrs}>${fgColor}</patternFill></fill>`);
370
+ p.push(fgColor ? `<fill><patternFill${patternAttrs}>${fgColor}</patternFill></fill>` : `<fill><patternFill${patternAttrs}/></fill>`);
360
371
  }
361
372
  p.push("</fills>");
362
373
  p.push(`<borders count="${this.borders.length}">`);
@@ -369,17 +380,21 @@ var Styles = class extends BaseXmlComponent {
369
380
  numFmtId: xf.numFmtId,
370
381
  fontId: xf.fontId,
371
382
  fillId: xf.fillId,
372
- borderId: xf.borderId
383
+ borderId: xf.borderId,
384
+ xfId: 0
373
385
  };
374
386
  if (xf.alignment) xAttrs.applyAlignment = 1;
375
387
  if (xf.fontId > 0) xAttrs.applyFont = 1;
376
388
  if (xf.fillId > 0) xAttrs.applyFill = 1;
377
389
  if (xf.borderId > 0) xAttrs.applyBorder = 1;
378
390
  const alignStr = xf.alignment ? this.alignmentXmlStr(xf.alignment) : "";
379
- p.push(`<xf${attrs(xAttrs)}>${alignStr}</xf>`);
391
+ p.push(alignStr ? `<xf${attrs(xAttrs)}>${alignStr}</xf>` : `<xf${attrs(xAttrs)}/>`);
380
392
  }
381
393
  p.push("</cellXfs>");
382
394
  p.push("<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>");
395
+ p.push("<dxfs count=\"0\"/>");
396
+ p.push("<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\"/>");
397
+ p.push("<extLst/>");
383
398
  p.push("</styleSheet>");
384
399
  return p.join("");
385
400
  }
@@ -445,6 +460,13 @@ var Styles = class extends BaseXmlComponent {
445
460
  xfId: 0,
446
461
  builtinId: 0
447
462
  } }] }] });
463
+ children.push({ dxfs: { _attr: { count: 0 } } });
464
+ children.push({ tableStyles: { _attr: {
465
+ count: 0,
466
+ defaultTableStyle: "TableStyleMedium2",
467
+ defaultPivotStyle: "PivotStyleLight16"
468
+ } } });
469
+ children.push({ extLst: [] });
448
470
  return { styleSheet: children };
449
471
  }
450
472
  buildFonts() {
@@ -572,10 +594,33 @@ var WorkbookXml = class extends BaseXmlComponent {
572
594
  if (s.state && s.state !== "visible") attrs.state = s.state;
573
595
  sheetElements.push({ sheet: { _attr: attrs } });
574
596
  }
575
- return { workbook: [{ _attr: {
576
- xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
577
- "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships"
578
- } }, { sheets: sheetElements }] };
597
+ return { workbook: [
598
+ { _attr: {
599
+ xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
600
+ "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships"
601
+ } },
602
+ { bookViews: [{ workbookView: { _attr: {
603
+ xWindow: 0,
604
+ yWindow: 0,
605
+ windowWidth: 28800,
606
+ windowHeight: 12300
607
+ } } }] },
608
+ { sheets: sheetElements },
609
+ { calcPr: { _attr: { calcId: 191029 } } }
610
+ ] };
611
+ }
612
+ toXml(_context) {
613
+ const p = [
614
+ "<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">",
615
+ "<bookViews><workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"28800\" windowHeight=\"12300\"/></bookViews>",
616
+ "<sheets>"
617
+ ];
618
+ for (const s of this.sheets) {
619
+ const stateAttr = s.state && s.state !== "visible" ? ` state="${s.state}"` : "";
620
+ p.push(`<sheet name="${escapeXml(s.name)}" sheetId="${s.sheetId}" r:id="${s.rId}"${stateAttr}/>`);
621
+ }
622
+ p.push("</sheets><calcPr calcId=\"191029\"/></workbook>");
623
+ return p.join("");
579
624
  }
580
625
  };
581
626
  //#endregion
@@ -621,6 +666,13 @@ var Worksheet = class extends IgnoreIfEmptyXmlComponent {
621
666
  xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
622
667
  "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships"
623
668
  } }];
669
+ const maxRow = this.rows.length;
670
+ let maxCol = 0;
671
+ for (const row of this.rows) if (row.cells && row.cells.length > maxCol) maxCol = row.cells.length;
672
+ if (maxRow > 0 && maxCol > 0) {
673
+ const dimRef = `A1:${this.defaultCellRef(maxRow, maxCol)}`;
674
+ children.push({ dimension: { _attr: { ref: dimRef } } });
675
+ }
624
676
  if (this.freezePanes) {
625
677
  const fp = this.freezePanes;
626
678
  const ySplit = fp.row ? fp.row : 0;
@@ -638,7 +690,11 @@ var Worksheet = class extends IgnoreIfEmptyXmlComponent {
638
690
  tabSelected: 1,
639
691
  workbookViewId: 0
640
692
  } }, { pane: { _attr: attr } }] }] });
641
- }
693
+ } else children.push({ sheetViews: [{ sheetView: [{ _attr: {
694
+ tabSelected: 1,
695
+ workbookViewId: 0
696
+ } }] }] });
697
+ children.push({ sheetFormatPr: { _attr: { defaultRowHeight: 15 } } });
642
698
  if (this.columns.length > 0) {
643
699
  const colElements = [];
644
700
  for (const col of this.columns) {
@@ -721,6 +777,14 @@ var Worksheet = class extends IgnoreIfEmptyXmlComponent {
721
777
  }
722
778
  children.push({ dataValidations: dvElements });
723
779
  }
780
+ children.push({ pageMargins: { _attr: {
781
+ left: .75,
782
+ right: .75,
783
+ top: 1,
784
+ bottom: 1,
785
+ header: .5,
786
+ footer: .5
787
+ } } });
724
788
  return { worksheet: children };
725
789
  }
726
790
  /**
@@ -732,6 +796,13 @@ var Worksheet = class extends IgnoreIfEmptyXmlComponent {
732
796
  const sharedStrings = fileData?.sharedStrings;
733
797
  const styles = fileData?.styles;
734
798
  const p = ["<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">"];
799
+ const maxRow = this.rows.length;
800
+ let maxCol = 0;
801
+ for (const row of this.rows) if (row.cells && row.cells.length > maxCol) maxCol = row.cells.length;
802
+ if (maxRow > 0 && maxCol > 0) {
803
+ const dimRef = `A1:${this.defaultCellRef(maxRow, maxCol)}`;
804
+ p.push(`<dimension ref="${dimRef}"/>`);
805
+ }
735
806
  if (this.freezePanes) {
736
807
  const fp = this.freezePanes;
737
808
  const ySplit = fp.row ? fp.row : 0;
@@ -741,7 +812,8 @@ var Worksheet = class extends IgnoreIfEmptyXmlComponent {
741
812
  const topLeftCell = this.defaultCellRef(topRow, leftCol);
742
813
  const activePane = ySplit > 0 && xSplit > 0 ? "bottomRight" : ySplit > 0 ? "bottomLeft" : "topRight";
743
814
  p.push("<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\">", `<pane ySplit="${ySplit}" xSplit="${xSplit}" topLeftCell="${topLeftCell}" activePane="${activePane}" state="frozen"/>`, "</sheetView></sheetViews>");
744
- }
815
+ } else p.push("<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\"/></sheetViews>");
816
+ p.push("<sheetFormatPr defaultRowHeight=\"15\"/>");
745
817
  if (this.columns.length > 0) {
746
818
  p.push("<cols>");
747
819
  for (const col of this.columns) {
@@ -777,7 +849,7 @@ var Worksheet = class extends IgnoreIfEmptyXmlComponent {
777
849
  if (cellStr) rowParts.push(cellStr);
778
850
  }
779
851
  p.push(`<row${attrs(rowAttrs)}>`, ...rowParts, "</row>");
780
- } else p.push(`<row${attrs(rowAttrs)}></row>`);
852
+ } else p.push(`<row${attrs(rowAttrs)}/>`);
781
853
  }
782
854
  p.push("</sheetData>");
783
855
  if (this.autoFilter) p.push(selfCloseElement("autoFilter", attrs({ ref: this.autoFilter })));
@@ -828,6 +900,7 @@ var Worksheet = class extends IgnoreIfEmptyXmlComponent {
828
900
  }
829
901
  p.push("</dataValidations>");
830
902
  }
903
+ p.push("<pageMargins left=\"0.75\" right=\"0.75\" top=\"1\" bottom=\"1\" header=\"0.5\" footer=\"0.5\"/>");
831
904
  p.push("</worksheet>");
832
905
  return p.join("");
833
906
  }
@@ -1051,6 +1124,20 @@ var Drawing = class extends BaseXmlComponent {
1051
1124
  { rowOff: [0] }
1052
1125
  ] };
1053
1126
  }
1127
+ toXml(_context) {
1128
+ const p = [`<wsDr xmlns="${XDR_NS}" xmlns:a="${A_NS}" xmlns:r="${R_NS}">`];
1129
+ let id = 1;
1130
+ for (const img of this.images) {
1131
+ p.push(`<twoCellAnchor editAs="oneCell"><from><col>${img.col - 1}</col><colOff>${img.colOffset ?? 0}</colOff><row>${img.row - 1}</row><rowOff>${img.rowOffset ?? 0}</rowOff></from>`, `<to><col>${img.col}</col><colOff>0</colOff><row>${img.row}</row><rowOff>0</rowOff></to>`, `<pic><nvPicPr><cNvPr id="${id}" name="Picture ${id}"/><cNvPicPr preferRelativeResize="1"/></nvPicPr>`, `<blipFill><a:blip r:embed="${img.rId}"/><a:stretch><a:fillRect/></a:stretch></blipFill>`, `<spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="400000" cy="300000"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></spPr></pic>`, `<clientData/></twoCellAnchor>`);
1132
+ id++;
1133
+ }
1134
+ for (const chart of this.charts) {
1135
+ p.push(`<twoCellAnchor editAs="oneCell"><from><col>${chart.col - 1}</col><colOff>${chart.colOffset ?? 0}</colOff><row>${chart.row - 1}</row><rowOff>${chart.rowOffset ?? 0}</rowOff></from>`, `<to><col>${chart.col + 8}</col><colOff>0</colOff><row>${chart.row + 15}</row><rowOff>0</rowOff></to>`, `<graphicFrame><nvGraphicFramePr><cNvPr id="${id}" name="Chart ${id}"/><cNvGraphicFramePr><a:graphicFrameLocks noGrp="1"/></cNvGraphicFramePr></nvGraphicFramePr>`, `<xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/></xfrm>`, `<a:graphic><a:graphicData uri="${C_URI}"><c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="${R_NS}" r:id="${chart.rId}"/></a:graphicData></a:graphic></graphicFrame>`, `<clientData/></twoCellAnchor>`);
1136
+ id++;
1137
+ }
1138
+ p.push("</wsDr>");
1139
+ return p.join("");
1140
+ }
1054
1141
  buildImageAnchor(img, id) {
1055
1142
  return { twoCellAnchor: [
1056
1143
  { _attr: { editAs: "oneCell" } },
@@ -1116,13 +1203,13 @@ var Compiler = class {
1116
1203
  };
1117
1204
  const f = this.formatter;
1118
1205
  const mapping = {};
1119
- const fmt = (component, declaration) => f.formatToXml(component, context, declaration);
1206
+ const fmt = (component) => f.formatToXml(component, context);
1120
1207
  mapping["Properties"] = {
1121
- data: fmt(file.coreProperties, true),
1208
+ data: fmt(file.coreProperties),
1122
1209
  path: "docProps/core.xml"
1123
1210
  };
1124
1211
  mapping["AppProperties"] = {
1125
- data: fmt(file.appProperties, true),
1212
+ data: fmt(file.appProperties),
1126
1213
  path: "docProps/app.xml"
1127
1214
  };
1128
1215
  mapping["FileRelationships"] = {
@@ -1130,7 +1217,7 @@ var Compiler = class {
1130
1217
  path: "_rels/.rels"
1131
1218
  };
1132
1219
  mapping["Workbook"] = {
1133
- data: fmt(file.workbookXml, true),
1220
+ data: fmt(file.workbookXml),
1134
1221
  path: "xl/workbook.xml"
1135
1222
  };
1136
1223
  mapping["WorkbookRelationships"] = {
@@ -1144,7 +1231,7 @@ var Compiler = class {
1144
1231
  const ws = worksheets[i];
1145
1232
  const imgOpts = ws.imageOptions;
1146
1233
  const chartOpts = ws.charts;
1147
- let sheetXml = fmt(ws, true);
1234
+ let sheetXml = fmt(ws);
1148
1235
  if (imgOpts.length > 0 || chartOpts.length > 0) {
1149
1236
  const drawingImages = [];
1150
1237
  const drawingCharts = [];
@@ -1187,7 +1274,7 @@ var Compiler = class {
1187
1274
  const drawing = new Drawing(drawingImages, drawingCharts);
1188
1275
  const drawingIdx = i + 1;
1189
1276
  mapping[`Drawing${i}`] = {
1190
- data: fmt(drawing, true),
1277
+ data: fmt(drawing),
1191
1278
  path: `xl/drawings/drawing${drawingIdx}.xml`
1192
1279
  };
1193
1280
  mapping[`DrawingRels${i}`] = {
@@ -1210,33 +1297,43 @@ var Compiler = class {
1210
1297
  }
1211
1298
  const sharedStrings = file.sharedStrings;
1212
1299
  if (sharedStrings.count > 0) mapping["SharedStrings"] = {
1213
- data: fmt(sharedStrings, true),
1300
+ data: fmt(sharedStrings),
1214
1301
  path: "xl/sharedStrings.xml"
1215
1302
  };
1216
1303
  mapping["Styles"] = {
1217
- data: fmt(file.styles, true),
1304
+ data: fmt(file.styles),
1218
1305
  path: "xl/styles.xml"
1219
1306
  };
1220
1307
  mapping["Theme"] = {
1221
- data: fmt(file.theme, true),
1308
+ data: fmt(file.theme),
1222
1309
  path: "xl/theme/theme1.xml"
1223
1310
  };
1224
1311
  for (let i = 0; i < file.charts.array.length; i++) {
1225
1312
  const chartData = file.charts.array[i];
1226
1313
  mapping[`Chart${i}`] = {
1227
- data: fmt(chartData.chartSpace, true),
1314
+ data: fmt(chartData.chartSpace),
1228
1315
  path: `xl/charts/chart${i + 1}.xml`
1229
1316
  };
1230
1317
  file.contentTypes.addChart(i + 1);
1231
1318
  }
1319
+ const imageExts = /* @__PURE__ */ new Set();
1320
+ for (const img of file.media.array) {
1321
+ const ext = img.fileName.endsWith(".png") ? "png" : "jpeg";
1322
+ if (!imageExts.has(ext)) {
1323
+ imageExts.add(ext);
1324
+ file.contentTypes.addImageType(ext);
1325
+ }
1326
+ }
1232
1327
  mapping["ContentTypes"] = {
1233
1328
  data: fmt(file.contentTypes),
1234
1329
  path: "[Content_Types].xml"
1235
1330
  };
1236
- return compileMapping(mapping, overrides, file.media.array.map((img) => ({
1331
+ const mediaFiles = [];
1332
+ for (const img of file.media.array) mediaFiles.push({
1237
1333
  data: img.data,
1238
1334
  path: `xl/media/${img.fileName}`
1239
- })));
1335
+ });
1336
+ return compileMapping(mapping, overrides, mediaFiles);
1240
1337
  }
1241
1338
  };
1242
1339
  //#endregion
@@ -1625,4 +1722,4 @@ function findLocalChild(parent, name) {
1625
1722
  //#endregion
1626
1723
  export { File, File as Workbook, Packer, PatchType, SharedStrings, Styles, columnToLetter, dateToSerialNumber, letterToColumn, parseWorkbook, parseXlsx, patchWorkbook };
1627
1724
 
1628
- //# sourceMappingURL=index.js.map
1725
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["localName"],"sources":["../src/file/content-types.ts","../src/file/core-properties.ts","../src/file/media/media.ts","../src/file/shared-strings.ts","../src/file/styles.ts","../src/file/theme.ts","../src/file/workbook.ts","../src/file/worksheet.ts","../src/file/file.ts","../src/file/drawing/drawing.ts","../src/export/packer/next-compiler.ts","../src/export/packer/packer.ts","../src/util/index.ts","../src/parse.ts","../src/patcher.ts"],"sourcesContent":["/**\n * Content Types module for XLSX packages.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\nconst XLSX_MAIN = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\";\nconst XLSX_WORKSHEET = \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\";\nconst XLSX_STYLES = \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\";\nconst XLSX_SHARED_STRINGS =\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\";\nconst XLSX_THEME = \"application/vnd.openxmlformats-officedocument.theme+xml\";\nconst XLSX_CHART = \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\";\n\ntype EntryType = \"Default\" | \"Override\";\n\ninterface ContentEntry {\n readonly type: EntryType;\n readonly contentType: string;\n readonly key: string;\n}\n\nconst STATIC_ENTRIES: readonly ContentEntry[] = [\n {\n type: \"Default\",\n contentType: \"application/vnd.openxmlformats-package.relationships+xml\",\n key: \"rels\",\n },\n { type: \"Default\", contentType: \"application/xml\", key: \"xml\" },\n { type: \"Override\", contentType: XLSX_MAIN, key: \"/xl/workbook.xml\" },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-package.core-properties+xml\",\n key: \"/docProps/core.xml\",\n },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.extended-properties+xml\",\n key: \"/docProps/app.xml\",\n },\n];\n\nconst STATIC_CHILDREN: IXmlableObject[] = [\n { _attr: { xmlns: \"http://schemas.openxmlformats.org/package/2006/content-types\" } },\n ...STATIC_ENTRIES.map((e) => {\n if (e.type === \"Default\") {\n return { Default: { _attr: { ContentType: e.contentType, Extension: e.key } } };\n }\n return { Override: { _attr: { ContentType: e.contentType, PartName: e.key } } };\n }),\n];\n\n// Pre-compiled static XML fragment (module-level constant)\nconst STATIC_XML = STATIC_ENTRIES.map((e) =>\n e.type === \"Default\"\n ? `<Default ContentType=\"${e.contentType}\" Extension=\"${e.key}\"/>`\n : `<Override ContentType=\"${e.contentType}\" PartName=\"${e.key}\"/>`,\n).join(\"\");\n\nexport class ContentTypes extends BaseXmlComponent {\n private readonly dynamicEntries: ContentEntry[] = [];\n\n public constructor() {\n super(\"Types\");\n }\n\n public addWorksheet(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_WORKSHEET,\n key: `/xl/worksheets/sheet${index}.xml`,\n });\n }\n\n public addStyles(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_STYLES,\n key: \"/xl/styles.xml\",\n });\n }\n\n public addSharedStrings(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_SHARED_STRINGS,\n key: \"/xl/sharedStrings.xml\",\n });\n }\n\n public addTheme(index: number = 1): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_THEME,\n key: `/xl/theme/theme${index}.xml`,\n });\n }\n\n public addChart(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_CHART,\n key: `/xl/charts/chart${index}.xml`,\n });\n }\n\n public addDrawing(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawing+xml\",\n key: `/xl/drawings/drawing${index}.xml`,\n });\n }\n\n public addImageType(extension: \"png\" | \"jpeg\"): void {\n const contentType = extension === \"png\" ? \"image/png\" : \"image/jpeg\";\n // Avoid duplicates\n if (this.dynamicEntries.some((e) => e.type === \"Default\" && e.key === extension)) return;\n this.dynamicEntries.push({ type: \"Default\", contentType, key: extension });\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children = [...STATIC_CHILDREN];\n for (const e of this.dynamicEntries) {\n if (e.type === \"Default\") {\n children.push({\n Default: { _attr: { ContentType: e.contentType, Extension: e.key } },\n });\n } else {\n children.push({\n Override: { _attr: { ContentType: e.contentType, PartName: e.key } },\n });\n }\n }\n return { Types: children };\n }\n\n public override toXml(_context: Context): string {\n const p: string[] = [\n '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">',\n STATIC_XML,\n ];\n for (const e of this.dynamicEntries) {\n if (e.type === \"Default\") {\n p.push(`<Default ContentType=\"${e.contentType}\" Extension=\"${e.key}\"/>`);\n } else {\n p.push(`<Override ContentType=\"${e.contentType}\" PartName=\"${e.key}\"/>`);\n }\n }\n p.push(\"</Types>\");\n return p.join(\"\");\n }\n}\n","/**\n * Core Properties module for SpreadsheetML documents.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { buildCorePropertiesXml, buildCorePropertiesXmlString } from \"@office-open/core\";\n\nexport interface CorePropertiesOptions {\n readonly title?: string;\n readonly subject?: string;\n readonly creator?: string;\n readonly keywords?: string;\n readonly description?: string;\n readonly lastModifiedBy?: string;\n readonly revision?: number;\n}\n\nexport class CoreProperties extends BaseXmlComponent {\n private readonly options: CorePropertiesOptions;\n\n public constructor(options: CorePropertiesOptions) {\n super(\"cp:coreProperties\");\n this.options = options;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n return buildCorePropertiesXml(this.options);\n }\n\n public override toXml(_context: Context): string {\n return buildCorePropertiesXmlString(this.options);\n }\n}\n","/**\n * Media collection for XLSX files — stores image binary data.\n *\n * @module\n */\n\nexport interface MediaData {\n readonly fileName: string;\n readonly type: string;\n readonly data: Uint8Array;\n readonly width: number;\n readonly height: number;\n}\n\nexport class Media {\n private readonly map = new Map<string, MediaData>();\n\n public addImage(key: string, data: MediaData): void {\n this.map.set(key, data);\n }\n\n public get array(): readonly MediaData[] {\n return [...this.map.values()];\n }\n}\n","/**\n * Shared Strings Table — generates xl/sharedStrings.xml.\n *\n * XLSX stores repeated string values in a central table to reduce file size.\n * Cells reference strings by index into this table.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nexport class SharedStrings extends BaseXmlComponent {\n private readonly strings: string[] = [];\n private readonly indexMap = new Map<string, number>();\n\n public constructor() {\n super(\"sst\");\n }\n\n /**\n * Register a string and return its index.\n * Returns existing index if the string is already registered.\n */\n public register(s: string): number {\n const existing = this.indexMap.get(s);\n if (existing !== undefined) return existing;\n\n const idx = this.strings.length;\n this.strings.push(s);\n this.indexMap.set(s, idx);\n return idx;\n }\n\n public get count(): number {\n return this.strings.length;\n }\n\n /**\n * Zero-allocation fast path: directly concatenate XML string.\n * Bypasses the IXmlableObject intermediate tree entirely.\n */\n public override toXml(_context: Context): string {\n const p: string[] = [\n '<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"',\n ` count=\"${this.strings.length}\" uniqueCount=\"${this.indexMap.size}\">`,\n ];\n for (const s of this.strings) {\n p.push(`<si><t>${escapeXml(s)}</t></si>`);\n }\n p.push(\"</sst>\");\n return p.join(\"\");\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n count: this.strings.length,\n uniqueCount: this.indexMap.size,\n },\n },\n ];\n\n for (const s of this.strings) {\n children.push({ si: [{ t: [s] }] });\n }\n\n return { sst: children };\n }\n}\n","/**\n * Styles component — generates xl/styles.xml.\n *\n * XLSX uses an index-based style system: cells reference style entries\n * via the `s` attribute, which is an index into `cellXfs`.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { attrs, escapeXml } from \"@office-open/xml\";\n\n// ── Sub-style option interfaces ──\n\nexport interface FontOptions {\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: boolean;\n readonly strike?: boolean;\n readonly size?: number;\n readonly color?: string;\n readonly fontName?: string;\n}\n\nexport interface FillOptions {\n readonly type?: \"solid\" | \"pattern\";\n readonly color?: string;\n readonly patternType?: string;\n}\n\nexport interface BorderOptions {\n readonly style?: \"thin\" | \"medium\" | \"thick\" | \"dotted\" | \"dashed\" | \"hair\" | \"none\";\n readonly color?: string;\n}\n\nexport interface BorderSideOptions {\n readonly top?: BorderOptions;\n readonly bottom?: BorderOptions;\n readonly left?: BorderOptions;\n readonly right?: BorderOptions;\n readonly diagonal?: BorderOptions;\n}\n\nexport interface AlignmentOptions {\n readonly horizontal?: \"left\" | \"center\" | \"right\" | \"fill\" | \"justify\";\n readonly vertical?: \"top\" | \"center\" | \"bottom\";\n readonly wrapText?: boolean;\n readonly textRotation?: number;\n readonly indent?: number;\n}\n\nexport interface StyleOptions {\n readonly font?: FontOptions;\n readonly fill?: FillOptions;\n readonly border?: BorderSideOptions;\n readonly numFmt?: string;\n readonly alignment?: AlignmentOptions;\n}\n\n// ── Style key helpers for deduplication ──\n\nfunction fontKey(f: FontOptions): string {\n return `b${f.bold ? 1 : 0}i${f.italic ? 1 : 0}u${f.underline ? 1 : 0}s${f.strike ? 1 : 0}z${f.size ?? 0}c${f.color ?? \"\"}n${f.fontName ?? \"\"}`;\n}\n\nfunction fillKey(f: FillOptions): string {\n return `t${f.type ?? \"\"}c${f.color ?? \"\"}p${f.patternType ?? \"\"}`;\n}\n\nfunction borderKey(b: BorderSideOptions): string {\n const sk = (o?: BorderOptions) => `${o?.style ?? \"\"}_${o?.color ?? \"\"}`;\n return `t${sk(b.top)}b${sk(b.bottom)}l${sk(b.left)}r${sk(b.right)}d${sk(b.diagonal)}`;\n}\n\n// ── Built-in number format IDs ──\n\nconst BUILTIN_NUMFMTS: Record<string, number> = {\n General: 0,\n \"0\": 1,\n \"0.00\": 2,\n \"#,##0\": 3,\n \"#,##0.00\": 4,\n \"0%\": 9,\n \"0.00%\": 10,\n \"0.00E+00\": 11,\n \"mm-dd-yy\": 14,\n \"d-mmm-yy\": 15,\n \"d-mmm\": 16,\n \"mmm-yy\": 17,\n \"h:mm AM/PM\": 18,\n \"h:mm:ss AM/PM\": 19,\n \"h:mm\": 20,\n \"h:mm:ss\": 21,\n \"m/d/yy h:mm\": 22,\n \"#,##0 ;(#,##0)\": 37,\n \"#,##0 ;[Red](#,##0)\": 38,\n \"#,##0.00;(#,##0.00)\": 39,\n \"#,##0.00;[Red](#,##0.00)\": 40,\n \"mm:ss\": 45,\n \"[h]:mm:ss\": 46,\n \"mmss.0\": 47,\n \"##0.0E+0\": 48,\n \"@\": 49,\n};\n\nexport class Styles extends BaseXmlComponent {\n private readonly fonts: FontOptions[] = [\n { size: 11, fontName: \"Calibri\" }, // default font (index 0)\n ];\n private readonly fontKeys = new Map<string, number>();\n\n private readonly fills: FillOptions[] = [\n { patternType: \"none\" }, // default fill (index 0)\n { patternType: \"gray125\" }, // required fill (index 1)\n ];\n private readonly fillKeys = new Map<string, number>();\n\n private readonly borders: BorderSideOptions[] = [\n {}, // default empty border (index 0)\n ];\n private readonly borderKeys = new Map<string, number>();\n\n private readonly customNumFmts = new Map<string, number>();\n private nextCustomNumFmtId = 164; // custom numFmts start at 164\n\n private readonly cellXfs: Array<{\n readonly fontId: number;\n readonly fillId: number;\n readonly borderId: number;\n readonly numFmtId: number;\n readonly alignment?: AlignmentOptions;\n }> = [\n { fontId: 0, fillId: 0, borderId: 0, numFmtId: 0 }, // default xf (index 0)\n ];\n private readonly cellXfKeys = new Map<string, number>();\n\n public constructor() {\n super(\"styleSheet\");\n\n // Pre-register default font/fill/border keys\n this.fontKeys.set(fontKey(this.fonts[0]), 0);\n this.fillKeys.set(fillKey(this.fills[0]), 0);\n this.fillKeys.set(fillKey(this.fills[1]), 1);\n this.borderKeys.set(borderKey(this.borders[0]), 0);\n this.cellXfKeys.set(this.cellXfKey(this.cellXfs[0]), 0);\n }\n\n /**\n * Register a style and return its index (for the cell `s` attribute).\n * Deduplicates across fonts, fills, borders, numFmts, and cellXfs.\n */\n public register(opts: StyleOptions): number {\n const fontId = this.registerFont(opts.font);\n const fillId = this.registerFill(opts.fill);\n const borderId = this.registerBorder(opts.border);\n const numFmtId = this.registerNumFmt(opts.numFmt);\n\n const xf = {\n fontId,\n fillId,\n borderId,\n numFmtId,\n alignment: opts.alignment,\n };\n\n const key = this.cellXfKey(xf);\n const existing = this.cellXfKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.cellXfs.length;\n this.cellXfs.push(xf);\n this.cellXfKeys.set(key, idx);\n return idx;\n }\n\n private registerFont(opts?: FontOptions): number {\n if (!opts) return 0;\n const key = fontKey(opts);\n const existing = this.fontKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.fonts.length;\n this.fonts.push(opts);\n this.fontKeys.set(key, idx);\n return idx;\n }\n\n private registerFill(opts?: FillOptions): number {\n if (!opts) return 0;\n const key = fillKey(opts);\n const existing = this.fillKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.fills.length;\n this.fills.push(opts);\n this.fillKeys.set(key, idx);\n return idx;\n }\n\n private registerBorder(opts?: BorderSideOptions): number {\n if (!opts) return 0;\n const key = borderKey(opts);\n const existing = this.borderKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.borders.length;\n this.borders.push(opts);\n this.borderKeys.set(key, idx);\n return idx;\n }\n\n private registerNumFmt(fmt?: string): number {\n if (!fmt) return 0;\n const builtin = BUILTIN_NUMFMTS[fmt];\n if (builtin !== undefined) return builtin;\n\n const existing = this.customNumFmts.get(fmt);\n if (existing !== undefined) return existing;\n\n const id = this.nextCustomNumFmtId++;\n this.customNumFmts.set(fmt, id);\n return id;\n }\n\n private cellXfKey(xf: {\n readonly fontId: number;\n readonly fillId: number;\n readonly borderId: number;\n readonly numFmtId: number;\n readonly alignment?: AlignmentOptions;\n }): string {\n const a = xf.alignment;\n const ak = a\n ? `h${a.horizontal ?? \"\"}v${a.vertical ?? \"\"}w${a.wrapText ? 1 : 0}r${a.textRotation ?? \"\"}i${a.indent ?? \"\"}`\n : \"\";\n return `${xf.fontId}|${xf.fillId}|${xf.borderId}|${xf.numFmtId}|${ak}`;\n }\n\n // ── XML generation ──\n\n /**\n * Zero-allocation fast path: directly concatenate XML string.\n * Bypasses the IXmlableObject intermediate tree entirely.\n */\n public override toXml(_context: Context): string {\n const p: string[] = [\n '<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">',\n ];\n\n // numFmts\n if (this.customNumFmts.size > 0) {\n p.push(`<numFmts count=\"${this.customNumFmts.size}\">`);\n for (const [fmt, id] of this.customNumFmts) {\n p.push(`<numFmt numFmtId=\"${id}\" formatCode=\"${escapeXml(fmt)}\"/>`);\n }\n p.push(\"</numFmts>\");\n }\n\n // fonts\n p.push(`<fonts count=\"${this.fonts.length}\">`);\n for (const f of this.fonts) {\n p.push(`<font>${this.fontXmlStr(f)}</font>`);\n }\n p.push(\"</fonts>\");\n\n // fills\n p.push(`<fills count=\"${this.fills.length}\">`);\n for (const f of this.fills) {\n const patternAttrs = attrs({ patternType: f.patternType ?? \"solid\" });\n const fgColor = f.color ? `<fgColor rgb=\"FF${f.color}\"/>` : \"\";\n p.push(\n fgColor\n ? `<fill><patternFill${patternAttrs}>${fgColor}</patternFill></fill>`\n : `<fill><patternFill${patternAttrs}/></fill>`,\n );\n }\n p.push(\"</fills>\");\n\n // borders\n p.push(`<borders count=\"${this.borders.length}\">`);\n for (const b of this.borders) {\n p.push(`<border>${this.borderXmlStr(b)}</border>`);\n }\n p.push(\"</borders>\");\n\n // cellStyleXfs\n p.push(\n '<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>',\n );\n\n // cellXfs\n p.push(`<cellXfs count=\"${this.cellXfs.length}\">`);\n for (const xf of this.cellXfs) {\n const xAttrs: Record<string, string | number | boolean | undefined> = {\n numFmtId: xf.numFmtId,\n fontId: xf.fontId,\n fillId: xf.fillId,\n borderId: xf.borderId,\n xfId: 0,\n };\n if (xf.alignment) xAttrs.applyAlignment = 1;\n if (xf.fontId > 0) xAttrs.applyFont = 1;\n if (xf.fillId > 0) xAttrs.applyFill = 1;\n if (xf.borderId > 0) xAttrs.applyBorder = 1;\n\n const alignStr = xf.alignment ? this.alignmentXmlStr(xf.alignment) : \"\";\n p.push(alignStr ? `<xf${attrs(xAttrs)}>${alignStr}</xf>` : `<xf${attrs(xAttrs)}/>`);\n }\n p.push(\"</cellXfs>\");\n\n // cellStyles\n p.push('<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>');\n\n // dxfs and tableStyles (required by Excel)\n p.push('<dxfs count=\"0\"/>');\n p.push(\n '<tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\"/>',\n );\n p.push(\"<extLst/>\");\n\n p.push(\"</styleSheet>\");\n return p.join(\"\");\n }\n\n private fontXmlStr(f: FontOptions): string {\n const parts: string[] = [];\n if (f.bold) parts.push(\"<b/>\");\n if (f.italic) parts.push(\"<i/>\");\n if (f.underline) parts.push(\"<u/>\");\n if (f.strike) parts.push(\"<strike/>\");\n if (f.size) parts.push(`<sz val=\"${f.size}\"/>`);\n if (f.color) parts.push(`<color rgb=\"FF${f.color}\"/>`);\n if (f.fontName) parts.push(`<name val=\"${escapeXml(f.fontName)}\"/>`);\n return parts.join(\"\");\n }\n\n private borderXmlStr(b: BorderSideOptions): string {\n const parts: string[] = [];\n for (const side of [\"left\", \"right\", \"top\", \"bottom\", \"diagonal\"] as const) {\n const opts = b[side] as BorderOptions | undefined;\n if (opts && opts.style && opts.style !== \"none\") {\n const colorStr = opts.color ? `<color rgb=\"FF${opts.color}\"/>` : \"\";\n parts.push(`<${side} style=\"${opts.style}\">${colorStr}</${side}>`);\n } else {\n parts.push(`<${side}/>`);\n }\n }\n return parts.join(\"\");\n }\n\n private alignmentXmlStr(a: AlignmentOptions): string {\n const aAttrs: Record<string, string | number | boolean | undefined> = {};\n if (a.horizontal) aAttrs.horizontal = a.horizontal;\n if (a.vertical) aAttrs.vertical = a.vertical;\n if (a.wrapText) aAttrs.wrapText = 1;\n if (a.textRotation !== undefined) aAttrs.textRotation = a.textRotation;\n if (a.indent !== undefined) aAttrs.indent = a.indent;\n return `<alignment${attrs(aAttrs)}/>`;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n },\n },\n ];\n\n // numFmts\n if (this.customNumFmts.size > 0) {\n const fmtElements: IXmlableObject[] = [{ _attr: { count: this.customNumFmts.size } }];\n for (const [fmt, id] of this.customNumFmts) {\n fmtElements.push({\n numFmt: { _attr: { numFmtId: id, formatCode: fmt } },\n });\n }\n children.push({ numFmts: fmtElements });\n }\n\n // fonts\n children.push(this.buildFonts());\n\n // fills\n children.push(this.buildFills());\n\n // borders\n children.push(this.buildBorders());\n\n // cellStyleXfs\n children.push({\n cellStyleXfs: [\n { _attr: { count: 1 } },\n { xf: [{ _attr: { numFmtId: 0, fontId: 0, fillId: 0, borderId: 0 } }] },\n ],\n });\n\n // cellXfs\n children.push(this.buildCellXfs());\n\n // cellStyles\n children.push({\n cellStyles: [\n { _attr: { count: 1 } },\n { cellStyle: [{ _attr: { name: \"Normal\", xfId: 0, builtinId: 0 } }] },\n ],\n });\n\n // dxfs, tableStyles, extLst (required by Excel)\n children.push({ dxfs: { _attr: { count: 0 } } });\n children.push({\n tableStyles: {\n _attr: {\n count: 0,\n defaultTableStyle: \"TableStyleMedium2\",\n defaultPivotStyle: \"PivotStyleLight16\",\n },\n },\n });\n children.push({ extLst: [] });\n\n return { styleSheet: children };\n }\n\n private buildFonts(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.fonts.length } }];\n for (const f of this.fonts) {\n elements.push({ font: this.fontXml(f) });\n }\n return { fonts: elements };\n }\n\n private fontXml(f: FontOptions): IXmlableObject[] {\n const parts: IXmlableObject[] = [];\n if (f.bold) parts.push({ b: [] });\n if (f.italic) parts.push({ i: [] });\n if (f.underline) parts.push({ u: [] });\n if (f.strike) parts.push({ strike: [] });\n if (f.size) parts.push({ sz: [{ _attr: { val: f.size } }] });\n if (f.color) parts.push({ color: [{ _attr: { rgb: `FF${f.color}` } }] });\n if (f.fontName) parts.push({ name: [{ _attr: { val: f.fontName } }] });\n return parts;\n }\n\n private buildFills(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.fills.length } }];\n for (const f of this.fills) {\n elements.push({\n fill: [\n {\n patternFill: [\n { _attr: { patternType: f.patternType ?? \"solid\" } },\n ...(f.color ? [{ fgColor: [{ _attr: { rgb: `FF${f.color}` } }] }] : []),\n ],\n },\n ],\n });\n }\n return { fills: elements };\n }\n\n private buildBorders(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.borders.length } }];\n for (const b of this.borders) {\n elements.push({ border: this.borderXml(b) });\n }\n return { borders: elements };\n }\n\n private borderXml(b: BorderSideOptions): IXmlableObject[] {\n const parts: IXmlableObject[] = [];\n for (const side of [\"left\", \"right\", \"top\", \"bottom\", \"diagonal\"] as const) {\n const opts = b[side] as BorderOptions | undefined;\n if (opts && opts.style && opts.style !== \"none\") {\n const attrs: Record<string, string> = { style: opts.style };\n const children: IXmlableObject[] = [{ _attr: attrs }];\n if (opts.color) {\n children.push({ color: [{ _attr: { rgb: `FF${opts.color}` } }] });\n }\n parts.push({ [side]: children });\n } else {\n parts.push({ [side]: [] });\n }\n }\n return parts;\n }\n\n private buildCellXfs(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.cellXfs.length } }];\n for (const xf of this.cellXfs) {\n const attrs: Record<string, string | number> = {\n numFmtId: xf.numFmtId,\n fontId: xf.fontId,\n fillId: xf.fillId,\n borderId: xf.borderId,\n };\n if (xf.alignment) {\n attrs.applyAlignment = 1;\n }\n if (xf.fontId > 0) attrs.applyFont = 1;\n if (xf.fillId > 0) attrs.applyFill = 1;\n if (xf.borderId > 0) attrs.applyBorder = 1;\n\n const children: IXmlableObject[] = [{ _attr: attrs }];\n if (xf.alignment) {\n children.push(this.alignmentXml(xf.alignment));\n }\n elements.push({ xf: children });\n }\n return { cellXfs: elements };\n }\n\n private alignmentXml(a: AlignmentOptions): IXmlableObject {\n const attrs: Record<string, string | number> = {};\n if (a.horizontal) attrs.horizontal = a.horizontal;\n if (a.vertical) attrs.vertical = a.vertical;\n if (a.wrapText) attrs.wrapText = 1;\n if (a.textRotation !== undefined) attrs.textRotation = a.textRotation;\n if (a.indent !== undefined) attrs.indent = a.indent;\n return { alignment: [{ _attr: attrs }] };\n }\n}\n","/**\n * Default theme for XLSX files — matches Microsoft Office's output structure.\n * Produces xl/theme/theme1.xml that Excel accepts without repair warnings.\n *\n * The theme XML is completely static — identical for every XLSX file.\n * Pre-serialized as a string constant to avoid building the IXmlableObject\n * tree and re-serializing on every compile.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\n// Pre-serialized theme XML. Generated once via xml(buildThemeObj()) and inlined.\n// To regenerate: run `pnpm tsx scripts/gen-theme.ts` from packages/xlsx.\nconst THEME_XML =\n '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"5B9BD5\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"4472C4\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:majorFont><a:minorFont><a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"102000\"/><a:satMod val=\"103000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"100000\"/><a:satMod val=\"110000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" algn=\"ctr\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"102000\"/><a:satMod val=\"150000\"/><a:tint val=\"93000\"/><a:shade val=\"98000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"103000\"/><a:satMod val=\"130000\"/><a:tint val=\"98000\"/><a:shade val=\"90000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"120000\"/><a:shade val=\"63000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>';\n\nexport class DefaultTheme extends BaseXmlComponent {\n public constructor() {\n super(\"a:theme\");\n }\n\n /** Return pre-cached static theme XML — zero allocation. */\n public override toXml(_context: Context): string {\n return THEME_XML;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n // Re-expose the static XML as an IXmlableObject for backward compatibility.\n // This is only used if someone calls prepForXml() directly.\n return {\n \"a:theme\": [\n {\n _attr: {\n \"xmlns:a\": \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n name: \"Office Theme\",\n },\n },\n ],\n };\n }\n}\n","/**\n * Workbook component — generates xl/workbook.xml.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nexport interface SheetDefinition {\n readonly name: string;\n readonly sheetId: number;\n readonly rId: string;\n readonly state?: \"visible\" | \"hidden\" | \"veryHidden\";\n}\n\nexport class WorkbookXml extends BaseXmlComponent {\n private readonly sheets: readonly SheetDefinition[];\n\n public constructor(sheets: readonly SheetDefinition[]) {\n super(\"workbook\");\n this.sheets = sheets;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const sheetElements: IXmlableObject[] = [];\n for (const s of this.sheets) {\n const attrs: Record<string, string> = {\n name: s.name,\n sheetId: String(s.sheetId),\n \"r:id\": s.rId,\n };\n if (s.state && s.state !== \"visible\") {\n attrs.state = s.state;\n }\n sheetElements.push({ sheet: { _attr: attrs } });\n }\n\n return {\n workbook: [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n },\n {\n bookViews: [\n {\n workbookView: {\n _attr: { xWindow: 0, yWindow: 0, windowWidth: 28800, windowHeight: 12300 },\n },\n },\n ],\n },\n { sheets: sheetElements },\n { calcPr: { _attr: { calcId: 191029 } } },\n ],\n };\n }\n\n public override toXml(_context: Context): string {\n const p: string[] = [\n '<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">',\n '<bookViews><workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"28800\" windowHeight=\"12300\"/></bookViews>',\n \"<sheets>\",\n ];\n for (const s of this.sheets) {\n const stateAttr = s.state && s.state !== \"visible\" ? ` state=\"${s.state}\"` : \"\";\n p.push(\n `<sheet name=\"${escapeXml(s.name)}\" sheetId=\"${s.sheetId}\" r:id=\"${s.rId}\"${stateAttr}/>`,\n );\n }\n p.push('</sheets><calcPr calcId=\"191029\"/></workbook>');\n return p.join(\"\");\n }\n}\n","import type { SharedStrings } from \"@file/shared-strings\";\nimport type { Styles, StyleOptions } from \"@file/styles\";\n/**\n * Worksheet component — generates xl/worksheets/sheet{n}.xml.\n *\n * @module\n */\nimport { IgnoreIfEmptyXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport type { ChartSpaceOptions } from \"@office-open/core\";\nimport { attrs, escapeXml, selfCloseElement } from \"@office-open/xml\";\n\nexport interface ColumnOptions {\n readonly min: number;\n readonly max: number;\n readonly width?: number;\n readonly hidden?: boolean;\n readonly customWidth?: boolean;\n}\n\nexport interface RowOptions {\n readonly cells?: readonly CellOptions[];\n readonly height?: number;\n readonly hidden?: boolean;\n readonly rowNumber?: number;\n}\n\nexport interface CellOptions {\n readonly value?: string | number | boolean | Date | null;\n readonly reference?: string;\n /** Direct style index (for pre-resolved styles) */\n readonly styleIndex?: number;\n /** Style options (resolved to index at compile time) */\n readonly style?: StyleOptions;\n}\n\nexport interface MergeCellOptions {\n readonly from: { readonly row: number; readonly col: number };\n readonly to: { readonly row: number; readonly col: number };\n}\n\nexport interface FreezePaneOptions {\n /** Row split position (1-based, freezes rows above) */\n readonly row?: number;\n /** Column split position (1-based, freezes columns to the left) */\n readonly col?: number;\n}\n\nexport interface WorksheetImageOptions {\n readonly data: Uint8Array;\n readonly type: \"png\" | \"jpeg\" | \"jpg\";\n readonly col: number;\n readonly row: number;\n}\n\nexport interface WorksheetChartOptions extends ChartSpaceOptions {\n /** 1-based column position for the chart */\n readonly col: number;\n /** 1-based row position for the chart */\n readonly row: number;\n}\n\nexport type DataValidationType =\n | \"none\"\n | \"whole\"\n | \"decimal\"\n | \"list\"\n | \"date\"\n | \"time\"\n | \"textLength\"\n | \"custom\";\nexport type DataValidationOperator =\n | \"between\"\n | \"notBetween\"\n | \"equal\"\n | \"notEqual\"\n | \"greaterThan\"\n | \"lessThan\"\n | \"greaterThanOrEqual\"\n | \"lessThanOrEqual\";\n\nexport interface DataValidationOptions {\n /** Cell range, e.g. \"A1:A10\" */\n readonly sqref: string;\n readonly type?: DataValidationType;\n readonly operator?: DataValidationOperator;\n readonly formula1?: string;\n readonly formula2?: string;\n readonly allowBlank?: boolean;\n readonly showErrorMessage?: boolean;\n readonly errorTitle?: string;\n readonly error?: string;\n readonly showInputMessage?: boolean;\n readonly promptTitle?: string;\n readonly prompt?: string;\n}\n\nexport type ConditionalFormatType =\n | \"cellIs\"\n | \"containsText\"\n | \"expression\"\n | \"top10\"\n | \"aboveAverage\";\nexport type ConditionalFormatOperator =\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"equal\"\n | \"notEqual\"\n | \"greaterThanOrEqual\"\n | \"greaterThan\"\n | \"between\"\n | \"notBetween\"\n | \"containsText\"\n | \"notContains\"\n | \"beginsWith\"\n | \"endsWith\";\n\nexport interface ConditionalFormatRule {\n readonly type: ConditionalFormatType;\n readonly operator?: ConditionalFormatOperator;\n /** Formula(s) — up to 3 */\n readonly formulas?: readonly string[];\n readonly priority?: number;\n /** Reference to a dxf (differential format) in the styles table */\n readonly dxfId?: number;\n}\n\nexport interface ConditionalFormatOptions {\n /** Cell range, e.g. \"A1:A10\" */\n readonly sqref: string;\n readonly rules: readonly ConditionalFormatRule[];\n}\n\nexport interface WorksheetOptions {\n readonly name?: string;\n readonly children?: readonly RowOptions[];\n readonly columns?: readonly ColumnOptions[];\n readonly mergeCells?: readonly MergeCellOptions[];\n readonly freezePanes?: FreezePaneOptions;\n /** Auto-filter range, e.g. \"A1:D10\" */\n readonly autoFilter?: string;\n readonly images?: readonly WorksheetImageOptions[];\n readonly charts?: readonly WorksheetChartOptions[];\n readonly dataValidations?: readonly DataValidationOptions[];\n readonly conditionalFormats?: readonly ConditionalFormatOptions[];\n}\n\nexport class Worksheet extends IgnoreIfEmptyXmlComponent {\n private readonly rows: readonly RowOptions[];\n private readonly columns: readonly ColumnOptions[];\n private readonly mergeCells: readonly MergeCellOptions[];\n private readonly freezePanes?: FreezePaneOptions;\n private readonly autoFilter?: string;\n private readonly images: readonly WorksheetImageOptions[];\n private readonly chartOptions: readonly WorksheetChartOptions[];\n private readonly dataValidations: readonly DataValidationOptions[];\n private readonly conditionalFormats: readonly ConditionalFormatOptions[];\n\n public constructor(options: WorksheetOptions) {\n super(\"worksheet\");\n this.rows = options.children ?? [];\n this.columns = options.columns ?? [];\n this.mergeCells = options.mergeCells ?? [];\n this.freezePanes = options.freezePanes;\n this.autoFilter = options.autoFilter;\n this.images = options.images ?? [];\n this.chartOptions = options.charts ?? [];\n this.dataValidations = options.dataValidations ?? [];\n this.conditionalFormats = options.conditionalFormats ?? [];\n }\n\n public get imageOptions(): readonly WorksheetImageOptions[] {\n return this.images;\n }\n\n public get charts(): readonly WorksheetChartOptions[] {\n return this.chartOptions;\n }\n\n public override prepForXml(context: Context): IXmlableObject | undefined {\n const fileData = context.fileData as\n | { sharedStrings?: SharedStrings; styles?: Styles }\n | undefined;\n const sharedStrings = fileData?.sharedStrings;\n const styles = fileData?.styles;\n\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n },\n ];\n\n // Dimension — defines the used range of the sheet\n const maxRow = this.rows.length;\n let maxCol = 0;\n for (const row of this.rows) {\n if (row.cells && row.cells.length > maxCol) maxCol = row.cells.length;\n }\n if (maxRow > 0 && maxCol > 0) {\n const dimRef = `A1:${this.defaultCellRef(maxRow, maxCol)}`;\n children.push({ dimension: { _attr: { ref: dimRef } } });\n }\n\n // Sheet views (freeze panes) — must come before cols per XSD sequence\n if (this.freezePanes) {\n const fp = this.freezePanes;\n const ySplit = fp.row ? fp.row : 0;\n const xSplit = fp.col ? fp.col : 0;\n const topRow = fp.row ? fp.row + 1 : 1;\n const leftCol = fp.col ? fp.col + 1 : 1;\n const topLeftCell = this.defaultCellRef(topRow, leftCol);\n const attr: Record<string, string | number> = {\n ySplit,\n xSplit,\n topLeftCell,\n activePane:\n ySplit > 0 && xSplit > 0 ? \"bottomRight\" : ySplit > 0 ? \"bottomLeft\" : \"topRight\",\n state: \"frozen\",\n };\n children.push({\n sheetViews: [\n {\n sheetView: [\n { _attr: { tabSelected: 1, workbookViewId: 0 } },\n { pane: { _attr: attr } },\n ],\n },\n ],\n });\n } else {\n children.push({\n sheetViews: [{ sheetView: [{ _attr: { tabSelected: 1, workbookViewId: 0 } }] }],\n });\n }\n\n children.push({ sheetFormatPr: { _attr: { defaultRowHeight: 15 } } });\n\n // Column definitions (after sheetViews, before sheetData)\n if (this.columns.length > 0) {\n const colElements: IXmlableObject[] = [];\n for (const col of this.columns) {\n const colAttrs: Record<string, string | number> = {\n min: col.min,\n max: col.max,\n };\n if (col.width !== undefined) {\n colAttrs.width = col.width;\n colAttrs.customWidth = 1;\n }\n if (col.hidden) {\n colAttrs.hidden = 1;\n }\n colElements.push({ col: { _attr: colAttrs } });\n }\n children.push({ cols: colElements });\n }\n\n // Sheet data (rows + cells)\n const sheetDataChildren: IXmlableObject[] = [];\n for (let i = 0; i < this.rows.length; i++) {\n const rowOpts = this.rows[i];\n const rowNumber = rowOpts.rowNumber ?? i + 1;\n const rowAttrs: Record<string, string | number> = { r: rowNumber };\n if (rowOpts.height !== undefined) {\n rowAttrs.ht = rowOpts.height;\n rowAttrs.customHeight = 1;\n }\n if (rowOpts.hidden) {\n rowAttrs.hidden = 1;\n }\n\n const cellElements: IXmlableObject[] = [];\n if (rowOpts.cells) {\n for (let j = 0; j < rowOpts.cells.length; j++) {\n const cell = rowOpts.cells[j];\n const ref = cell.reference ?? this.defaultCellRef(rowNumber, j + 1);\n const cellObj = this.buildCell(ref, cell, sharedStrings, styles);\n if (cellObj) cellElements.push(cellObj);\n }\n }\n\n sheetDataChildren.push({ row: [{ _attr: rowAttrs }, ...cellElements] });\n }\n\n children.push({ sheetData: sheetDataChildren });\n\n // Auto filter (after sheetData, before mergeCells — per XSD sequence)\n if (this.autoFilter) {\n children.push({ autoFilter: { _attr: { ref: this.autoFilter } } });\n }\n\n // Merge cells (after autoFilter)\n if (this.mergeCells.length > 0) {\n const mergeElements: IXmlableObject[] = [{ _attr: { count: this.mergeCells.length } }];\n for (const mc of this.mergeCells) {\n const fromRef = this.defaultCellRef(mc.from.row, mc.from.col);\n const toRef = this.defaultCellRef(mc.to.row, mc.to.col);\n mergeElements.push({\n mergeCell: { _attr: { ref: `${fromRef}:${toRef}` } },\n });\n }\n children.push({ mergeCells: mergeElements });\n }\n\n // Conditional formatting (after autoFilter, before dataValidations)\n if (this.conditionalFormats.length > 0) {\n for (const cf of this.conditionalFormats) {\n const rules: IXmlableObject[] = [];\n for (let ri = 0; ri < cf.rules.length; ri++) {\n const rule = cf.rules[ri];\n const ruleAttrs: Record<string, string | number> = {\n type: rule.type,\n priority: rule.priority ?? ri + 1,\n };\n if (rule.operator) ruleAttrs.operator = rule.operator;\n if (rule.dxfId !== undefined) ruleAttrs.dxfId = rule.dxfId;\n\n const ruleChildren: IXmlableObject[] = [{ _attr: ruleAttrs }];\n\n if (rule.formulas) {\n for (const f of rule.formulas) {\n ruleChildren.push({ formula: [f] });\n }\n }\n rules.push({ cfRule: ruleChildren });\n }\n children.push({ conditionalFormatting: [{ _attr: { sqref: cf.sqref } }, ...rules] });\n }\n }\n\n // Data validations (after conditionalFormatting)\n if (this.dataValidations.length > 0) {\n const dvElements: IXmlableObject[] = [{ _attr: { count: this.dataValidations.length } }];\n for (const dv of this.dataValidations) {\n const dvAttrs: Record<string, string | number> = { sqref: dv.sqref };\n if (dv.type && dv.type !== \"none\") dvAttrs.type = dv.type;\n if (dv.operator) dvAttrs.operator = dv.operator;\n if (dv.allowBlank) dvAttrs.allowBlank = 1;\n if (dv.showErrorMessage) dvAttrs.showErrorMessage = 1;\n if (dv.showInputMessage) dvAttrs.showInputMessage = 1;\n if (dv.errorTitle) dvAttrs.errorTitle = dv.errorTitle;\n if (dv.error) dvAttrs.error = dv.error;\n if (dv.promptTitle) dvAttrs.promptTitle = dv.promptTitle;\n if (dv.prompt) dvAttrs.prompt = dv.prompt;\n\n const dvChildren: IXmlableObject[] = [{ _attr: dvAttrs }];\n if (dv.formula1 !== undefined) dvChildren.push({ formula1: [dv.formula1] });\n if (dv.formula2 !== undefined) dvChildren.push({ formula2: [dv.formula2] });\n dvElements.push({ dataValidation: dvChildren });\n }\n children.push({ dataValidations: dvElements });\n }\n\n children.push({\n pageMargins: {\n _attr: { left: 0.75, right: 0.75, top: 1, bottom: 1, header: 0.5, footer: 0.5 },\n },\n });\n\n return { worksheet: children };\n }\n\n /**\n * Zero-allocation fast path: directly concatenate XML string.\n * Bypasses the IXmlableObject intermediate tree entirely.\n */\n public override toXml(context: Context): string {\n const fileData = context.fileData as\n | { sharedStrings?: SharedStrings; styles?: Styles }\n | undefined;\n const sharedStrings = fileData?.sharedStrings;\n const styles = fileData?.styles;\n\n const p: string[] = [\n '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">',\n ];\n\n // Dimension — defines the used range of the sheet\n const maxRow = this.rows.length;\n let maxCol = 0;\n for (const row of this.rows) {\n if (row.cells && row.cells.length > maxCol) maxCol = row.cells.length;\n }\n if (maxRow > 0 && maxCol > 0) {\n const dimRef = `A1:${this.defaultCellRef(maxRow, maxCol)}`;\n p.push(`<dimension ref=\"${dimRef}\"/>`);\n }\n\n // Sheet views\n if (this.freezePanes) {\n const fp = this.freezePanes;\n const ySplit = fp.row ? fp.row : 0;\n const xSplit = fp.col ? fp.col : 0;\n const topRow = fp.row ? fp.row + 1 : 1;\n const leftCol = fp.col ? fp.col + 1 : 1;\n const topLeftCell = this.defaultCellRef(topRow, leftCol);\n const activePane =\n ySplit > 0 && xSplit > 0 ? \"bottomRight\" : ySplit > 0 ? \"bottomLeft\" : \"topRight\";\n p.push(\n '<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\">',\n `<pane ySplit=\"${ySplit}\" xSplit=\"${xSplit}\" topLeftCell=\"${topLeftCell}\" activePane=\"${activePane}\" state=\"frozen\"/>`,\n \"</sheetView></sheetViews>\",\n );\n } else {\n // Default sheetView (required by Excel)\n p.push('<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\"/></sheetViews>');\n }\n\n // Sheet format — default row height\n p.push('<sheetFormatPr defaultRowHeight=\"15\"/>');\n\n // Column definitions\n if (this.columns.length > 0) {\n p.push(\"<cols>\");\n for (const col of this.columns) {\n const colAttrs: Record<string, string | number | boolean | undefined> = {\n min: col.min,\n max: col.max,\n };\n if (col.width !== undefined) {\n colAttrs.width = col.width;\n colAttrs.customWidth = 1;\n }\n if (col.hidden) {\n colAttrs.hidden = 1;\n }\n p.push(selfCloseElement(\"col\", attrs(colAttrs)));\n }\n p.push(\"</cols>\");\n }\n\n // Sheet data (rows + cells) — the hot path\n p.push(\"<sheetData>\");\n for (let i = 0; i < this.rows.length; i++) {\n const rowOpts = this.rows[i];\n const rowNumber = rowOpts.rowNumber ?? i + 1;\n const rowAttrs: Record<string, string | number | boolean | undefined> = { r: rowNumber };\n if (rowOpts.height !== undefined) {\n rowAttrs.ht = rowOpts.height;\n rowAttrs.customHeight = 1;\n }\n if (rowOpts.hidden) {\n rowAttrs.hidden = 1;\n }\n\n if (rowOpts.cells) {\n const rowParts: string[] = [];\n for (let j = 0; j < rowOpts.cells.length; j++) {\n const cell = rowOpts.cells[j];\n const ref = cell.reference ?? this.defaultCellRef(rowNumber, j + 1);\n const cellStr = this.buildCellString(ref, cell, sharedStrings, styles);\n if (cellStr) rowParts.push(cellStr);\n }\n p.push(`<row${attrs(rowAttrs)}>`, ...rowParts, \"</row>\");\n } else {\n p.push(`<row${attrs(rowAttrs)}/>`);\n }\n }\n p.push(\"</sheetData>\");\n\n // Auto filter\n if (this.autoFilter) {\n p.push(selfCloseElement(\"autoFilter\", attrs({ ref: this.autoFilter })));\n }\n\n // Merge cells\n if (this.mergeCells.length > 0) {\n p.push(`<mergeCells count=\"${this.mergeCells.length}\">`);\n for (const mc of this.mergeCells) {\n const fromRef = this.defaultCellRef(mc.from.row, mc.from.col);\n const toRef = this.defaultCellRef(mc.to.row, mc.to.col);\n p.push(selfCloseElement(\"mergeCell\", attrs({ ref: `${fromRef}:${toRef}` })));\n }\n p.push(\"</mergeCells>\");\n }\n\n // Conditional formatting\n if (this.conditionalFormats.length > 0) {\n for (const cf of this.conditionalFormats) {\n p.push(`<conditionalFormatting sqref=\"${cf.sqref}\">`);\n for (let ri = 0; ri < cf.rules.length; ri++) {\n const rule = cf.rules[ri];\n const ruleAttrs: Record<string, string | number | boolean | undefined> = {\n type: rule.type,\n priority: rule.priority ?? ri + 1,\n };\n if (rule.operator) ruleAttrs.operator = rule.operator;\n if (rule.dxfId !== undefined) ruleAttrs.dxfId = rule.dxfId;\n if (rule.formulas && rule.formulas.length > 0) {\n const formulaParts = rule.formulas.map((f) => `<formula>${escapeXml(f)}</formula>`);\n p.push(`<cfRule${attrs(ruleAttrs)}>`, ...formulaParts, \"</cfRule>\");\n } else {\n p.push(selfCloseElement(\"cfRule\", attrs(ruleAttrs)));\n }\n }\n p.push(\"</conditionalFormatting>\");\n }\n }\n\n // Data validations\n if (this.dataValidations.length > 0) {\n p.push(`<dataValidations count=\"${this.dataValidations.length}\">`);\n for (const dv of this.dataValidations) {\n const dvAttrs: Record<string, string | number | boolean | undefined> = { sqref: dv.sqref };\n if (dv.type && dv.type !== \"none\") dvAttrs.type = dv.type;\n if (dv.operator) dvAttrs.operator = dv.operator;\n if (dv.allowBlank) dvAttrs.allowBlank = 1;\n if (dv.showErrorMessage) dvAttrs.showErrorMessage = 1;\n if (dv.showInputMessage) dvAttrs.showInputMessage = 1;\n if (dv.errorTitle) dvAttrs.errorTitle = dv.errorTitle;\n if (dv.error) dvAttrs.error = dv.error;\n if (dv.promptTitle) dvAttrs.promptTitle = dv.promptTitle;\n if (dv.prompt) dvAttrs.prompt = dv.prompt;\n const inner: string[] = [];\n if (dv.formula1 !== undefined) inner.push(`<formula1>${escapeXml(dv.formula1)}</formula1>`);\n if (dv.formula2 !== undefined) inner.push(`<formula2>${escapeXml(dv.formula2)}</formula2>`);\n if (inner.length > 0) {\n p.push(`<dataValidation${attrs(dvAttrs)}>`, ...inner, \"</dataValidation>\");\n } else {\n p.push(selfCloseElement(\"dataValidation\", attrs(dvAttrs)));\n }\n }\n p.push(\"</dataValidations>\");\n }\n\n p.push('<pageMargins left=\"0.75\" right=\"0.75\" top=\"1\" bottom=\"1\" header=\"0.5\" footer=\"0.5\"/>');\n p.push(\"</worksheet>\");\n return p.join(\"\");\n }\n\n /**\n * Direct string serialization of a single cell — zero intermediate objects.\n */\n private buildCellString(\n ref: string,\n cell: CellOptions,\n sharedStrings?: SharedStrings,\n styles?: Styles,\n ): string {\n const cellAttrs: Record<string, string | number | boolean | undefined> = { r: ref };\n\n // Resolve style\n if (cell.style !== undefined && styles) {\n cellAttrs.s = styles.register(cell.style);\n } else if (cell.styleIndex !== undefined) {\n cellAttrs.s = cell.styleIndex;\n }\n\n const value = cell.value;\n if (value === null || value === undefined) {\n if (cell.styleIndex !== undefined) {\n return selfCloseElement(\"c\", attrs(cellAttrs));\n }\n return \"\";\n }\n\n if (typeof value === \"string\") {\n if (sharedStrings) {\n cellAttrs.t = \"s\";\n const idx = sharedStrings.register(value);\n return `<c${attrs(cellAttrs)}><v>${idx}</v></c>`;\n }\n cellAttrs.t = \"inlineStr\";\n return `<c${attrs(cellAttrs)}><is><t>${escapeXml(value)}</t></is></c>`;\n }\n\n if (typeof value === \"number\") {\n return `<c${attrs(cellAttrs)}><v>${value}</v></c>`;\n }\n\n if (typeof value === \"boolean\") {\n cellAttrs.t = \"b\";\n return `<c${attrs(cellAttrs)}><v>${value ? 1 : 0}</v></c>`;\n }\n\n if (value instanceof Date) {\n const serial = this.dateToSerialNumber(value);\n return `<c${attrs(cellAttrs)}><v>${serial}</v></c>`;\n }\n\n return \"\";\n }\n\n private defaultCellRef(row: number, col: number): string {\n return this.columnToLetter(col) + row;\n }\n\n private columnToLetter(col: number): string {\n let result = \"\";\n let n = col;\n while (n > 0) {\n const remainder = (n - 1) % 26;\n result = String.fromCharCode(65 + remainder) + result;\n n = Math.floor((n - 1) / 26);\n }\n return result;\n }\n\n private buildCell(\n ref: string,\n cell: CellOptions,\n sharedStrings?: SharedStrings,\n styles?: Styles,\n ): IXmlableObject | undefined {\n const attrs: Record<string, string | number> = { r: ref };\n\n // Resolve style: either direct index or register options\n if (cell.style !== undefined && styles) {\n attrs.s = styles.register(cell.style);\n } else if (cell.styleIndex !== undefined) {\n attrs.s = cell.styleIndex;\n }\n\n const value = cell.value;\n if (value === null || value === undefined) {\n if (cell.styleIndex !== undefined) {\n return { c: [{ _attr: attrs }] };\n }\n return undefined;\n }\n\n if (typeof value === \"string\") {\n if (sharedStrings) {\n attrs.t = \"s\";\n const idx = sharedStrings.register(value);\n return { c: [{ _attr: attrs }, { v: [idx] }] };\n }\n // Fallback: inline string\n attrs.t = \"inlineStr\";\n return { c: [{ _attr: attrs }, { is: [{ t: [value] }] }] };\n }\n\n if (typeof value === \"number\") {\n return { c: [{ _attr: attrs }, { v: [value] }] };\n }\n\n if (typeof value === \"boolean\") {\n attrs.t = \"b\";\n return { c: [{ _attr: attrs }, { v: [value ? 1 : 0] }] };\n }\n\n if (value instanceof Date) {\n const serial = this.dateToSerialNumber(value);\n return { c: [{ _attr: attrs }, { v: [serial] }] };\n }\n\n return undefined;\n }\n\n private dateToSerialNumber(date: Date): number {\n const epoch = new Date(1899, 11, 30);\n const msPerDay = 86400000;\n return (date.getTime() - epoch.getTime()) / msPerDay;\n }\n}\n","import { ContentTypes } from \"@file/content-types\";\nimport { CoreProperties, type CorePropertiesOptions } from \"@file/core-properties\";\nimport { Media } from \"@file/media/media\";\nimport { SharedStrings } from \"@file/shared-strings\";\nimport { Styles } from \"@file/styles\";\nimport { DefaultTheme } from \"@file/theme\";\nimport { WorkbookXml, type SheetDefinition } from \"@file/workbook\";\nimport { Worksheet, type WorksheetOptions } from \"@file/worksheet\";\n/**\n * File class (exported as Workbook) — the top-level container for XLSX documents.\n *\n * @module\n */\nimport { AppProperties, ChartCollection, Relationships } from \"@office-open/core\";\n\nexport interface WorkbookOptions extends CorePropertiesOptions {\n readonly worksheets?: readonly WorksheetOptions[];\n}\n\nexport class File {\n private readonly worksheetOptions: readonly WorksheetOptions[];\n private readonly corePropsOptions: CorePropertiesOptions;\n\n // Lazy components\n private _coreProperties?: CoreProperties;\n private _appProperties?: AppProperties;\n private _contentTypes?: ContentTypes;\n private _styles?: Styles;\n private _theme?: DefaultTheme;\n private _workbookXml?: WorkbookXml;\n private _worksheets?: Worksheet[];\n private _sharedStrings?: SharedStrings;\n private _media?: Media;\n private _fileRels?: Relationships;\n private _workbookRels?: Relationships;\n private _charts?: ChartCollection;\n\n public constructor(options: WorkbookOptions) {\n this.worksheetOptions = options.worksheets ?? [];\n this.corePropsOptions = options;\n }\n\n // ── Lazy getters ──\n\n public get coreProperties(): CoreProperties {\n return (this._coreProperties ??= new CoreProperties(this.corePropsOptions));\n }\n\n public get appProperties(): AppProperties {\n return (this._appProperties ??= new AppProperties());\n }\n\n public get contentTypes(): ContentTypes {\n if (!this._contentTypes) {\n this._contentTypes = new ContentTypes();\n for (let i = 0; i < this.worksheetOptions.length; i++) {\n this._contentTypes.addWorksheet(i + 1);\n }\n this._contentTypes.addStyles();\n this._contentTypes.addSharedStrings();\n this._contentTypes.addTheme();\n }\n return this._contentTypes;\n }\n\n public get styles(): Styles {\n return (this._styles ??= new Styles());\n }\n\n public get theme(): DefaultTheme {\n return (this._theme ??= new DefaultTheme());\n }\n\n public get workbookXml(): WorkbookXml {\n if (!this._workbookXml) {\n const sheets: SheetDefinition[] = this.worksheetOptions.map((ws, i) => ({\n name: ws.name ?? `Sheet${i + 1}`,\n sheetId: i + 1,\n rId: `rId${i + 1}`,\n }));\n this._workbookXml = new WorkbookXml(sheets);\n }\n return this._workbookXml;\n }\n\n public get sharedStrings(): SharedStrings {\n return (this._sharedStrings ??= new SharedStrings());\n }\n\n public get media(): Media {\n return (this._media ??= new Media());\n }\n\n public get charts(): ChartCollection {\n return (this._charts ??= new ChartCollection());\n }\n\n public get worksheets(): readonly Worksheet[] {\n if (!this._worksheets) {\n this._worksheets = this.worksheetOptions.map((ws) => new Worksheet(ws));\n }\n return this._worksheets;\n }\n\n public get fileRelationships(): Relationships {\n if (!this._fileRels) {\n this._fileRels = new Relationships();\n this._fileRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n \"xl/workbook.xml\",\n );\n this._fileRels.addRelationship(\n 2,\n \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n \"docProps/core.xml\",\n );\n this._fileRels.addRelationship(\n 3,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n \"docProps/app.xml\",\n );\n }\n return this._fileRels;\n }\n\n public get workbookRelationships(): Relationships {\n if (!this._workbookRels) {\n this._workbookRels = new Relationships();\n let rid = 1;\n for (let i = 0; i < this.worksheetOptions.length; i++) {\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n `worksheets/sheet${i + 1}.xml`,\n );\n }\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n \"styles.xml\",\n );\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n \"theme/theme1.xml\",\n );\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n \"sharedStrings.xml\",\n );\n }\n return this._workbookRels;\n }\n}\n","/**\n * XLSX Drawing component — generates xl/drawings/drawing{n}.xml.\n *\n * Uses the spreadsheetDrawing namespace (default, no prefix) for anchoring\n * images and charts to worksheet cells.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\nexport interface ImageOptions {\n /** 1-based column */\n readonly col: number;\n /** Column offset in EMU (default 0) */\n readonly colOffset?: number;\n /** 1-based row */\n readonly row: number;\n /** Row offset in EMU (default 0) */\n readonly rowOffset?: number;\n /** Relationship ID for the image */\n readonly rId: string;\n}\n\nexport interface ChartAnchorOptions {\n /** 1-based column */\n readonly col: number;\n /** Column offset in EMU (default 0) */\n readonly colOffset?: number;\n /** 1-based row */\n readonly row: number;\n /** Row offset in EMU (default 0) */\n readonly rowOffset?: number;\n /** Relationship ID for the chart */\n readonly rId: string;\n}\n\nconst XDR_NS = \"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\";\nconst A_NS = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\nconst R_NS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\nconst C_URI = \"http://schemas.openxmlformats.org/drawingml/2006/chart\";\n\nexport class Drawing extends BaseXmlComponent {\n private readonly images: readonly ImageOptions[];\n private readonly charts: readonly ChartAnchorOptions[];\n\n public constructor(images: readonly ImageOptions[], charts: readonly ChartAnchorOptions[] = []) {\n super(\"wsDr\");\n this.images = images;\n this.charts = charts;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: XDR_NS,\n \"xmlns:a\": A_NS,\n \"xmlns:r\": R_NS,\n },\n },\n ];\n\n let nextId = 1;\n for (const img of this.images) {\n children.push(this.buildImageAnchor(img, nextId++));\n }\n\n for (const chart of this.charts) {\n children.push(this.buildChartAnchor(chart, nextId++));\n }\n\n return { wsDr: children };\n }\n\n private buildFromAnchor(\n col: number,\n row: number,\n colOffset?: number,\n rowOffset?: number,\n ): IXmlableObject {\n return {\n from: [\n { col: [col - 1] },\n { colOff: [colOffset ?? 0] },\n { row: [row - 1] },\n { rowOff: [rowOffset ?? 0] },\n ],\n };\n }\n\n private buildToAnchor(col: number, row: number): IXmlableObject {\n return {\n to: [{ col: [col] }, { colOff: [0] }, { row: [row] }, { rowOff: [0] }],\n };\n }\n\n public override toXml(_context: Context): string {\n const p: string[] = [`<wsDr xmlns=\"${XDR_NS}\" xmlns:a=\"${A_NS}\" xmlns:r=\"${R_NS}\">`];\n let id = 1;\n for (const img of this.images) {\n p.push(\n `<twoCellAnchor editAs=\"oneCell\"><from><col>${img.col - 1}</col><colOff>${img.colOffset ?? 0}</colOff><row>${img.row - 1}</row><rowOff>${img.rowOffset ?? 0}</rowOff></from>`,\n `<to><col>${img.col}</col><colOff>0</colOff><row>${img.row}</row><rowOff>0</rowOff></to>`,\n `<pic><nvPicPr><cNvPr id=\"${id}\" name=\"Picture ${id}\"/><cNvPicPr preferRelativeResize=\"1\"/></nvPicPr>`,\n `<blipFill><a:blip r:embed=\"${img.rId}\"/><a:stretch><a:fillRect/></a:stretch></blipFill>`,\n `<spPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"400000\" cy=\"300000\"/></a:xfrm><a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom></spPr></pic>`,\n `<clientData/></twoCellAnchor>`,\n );\n id++;\n }\n for (const chart of this.charts) {\n p.push(\n `<twoCellAnchor editAs=\"oneCell\"><from><col>${chart.col - 1}</col><colOff>${chart.colOffset ?? 0}</colOff><row>${chart.row - 1}</row><rowOff>${chart.rowOffset ?? 0}</rowOff></from>`,\n `<to><col>${chart.col + 8}</col><colOff>0</colOff><row>${chart.row + 15}</row><rowOff>0</rowOff></to>`,\n `<graphicFrame><nvGraphicFramePr><cNvPr id=\"${id}\" name=\"Chart ${id}\"/><cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></cNvGraphicFramePr></nvGraphicFramePr>`,\n `<xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/></xfrm>`,\n `<a:graphic><a:graphicData uri=\"${C_URI}\"><c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" xmlns:r=\"${R_NS}\" r:id=\"${chart.rId}\"/></a:graphicData></a:graphic></graphicFrame>`,\n `<clientData/></twoCellAnchor>`,\n );\n id++;\n }\n p.push(\"</wsDr>\");\n return p.join(\"\");\n }\n\n private buildImageAnchor(img: ImageOptions, id: number): IXmlableObject {\n return {\n twoCellAnchor: [\n { _attr: { editAs: \"oneCell\" } },\n this.buildFromAnchor(img.col, img.row, img.colOffset, img.rowOffset),\n this.buildToAnchor(img.col, img.row),\n {\n pic: [\n {\n nvPicPr: [\n { cNvPr: { _attr: { id, name: `Picture ${id}` } } },\n { cNvPicPr: [{ _attr: { preferRelativeResize: 1 } }] },\n ],\n },\n {\n blipFill: [\n { \"a:blip\": { _attr: { \"r:embed\": img.rId } } },\n { \"a:stretch\": [{ \"a:fillRect\": [] }] },\n ],\n },\n {\n spPr: [\n {\n \"a:xfrm\": [\n { \"a:off\": { _attr: { x: 0, y: 0 } } },\n { \"a:ext\": { _attr: { cx: 400000, cy: 300000 } } },\n ],\n },\n { \"a:prstGeom\": [{ _attr: { prst: \"rect\" } }, { \"a:avLst\": [] }] },\n ],\n },\n ],\n },\n { clientData: [] },\n ],\n };\n }\n\n private buildChartAnchor(chart: ChartAnchorOptions, id: number): IXmlableObject {\n return {\n twoCellAnchor: [\n { _attr: { editAs: \"oneCell\" } },\n this.buildFromAnchor(chart.col, chart.row, chart.colOffset, chart.rowOffset),\n this.buildToAnchor(chart.col + 8, chart.row + 15),\n {\n graphicFrame: [\n {\n nvGraphicFramePr: [\n { cNvPr: { _attr: { id, name: `Chart ${id}` } } },\n { cNvGraphicFramePr: [{ \"a:graphicFrameLocks\": { _attr: { noGrp: 1 } } }] },\n ],\n },\n {\n xfrm: [\n { \"a:off\": { _attr: { x: 0, y: 0 } } },\n { \"a:ext\": { _attr: { cx: 0, cy: 0 } } },\n ],\n },\n {\n \"a:graphic\": [\n {\n \"a:graphicData\": [\n { _attr: { uri: C_URI } },\n {\n \"c:chart\": {\n _attr: {\n \"xmlns:c\": \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n \"xmlns:r\": R_NS,\n \"r:id\": chart.rId,\n },\n },\n },\n ],\n },\n ],\n },\n ],\n },\n { clientData: [] },\n ],\n };\n }\n}\n","/**\n * XLSX Compiler — compiles a File object into a Zippable structure.\n *\n * @module\n */\nimport { Formatter } from \"@export/formatter\";\nimport { Drawing, type ImageOptions, type ChartAnchorOptions } from \"@file/drawing/drawing\";\nimport type { File } from \"@file/file\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n ChartSpace,\n Relationships,\n compileMapping,\n type XmlifyedFile,\n type Zippable,\n} from \"@office-open/core\";\n\nexport class Compiler {\n private readonly formatter = new Formatter();\n\n public compile(file: File, overrides: readonly XmlifyedFile[] = []): Zippable {\n const context: Context = { fileData: file, stack: [] };\n const f = this.formatter;\n\n const mapping: Record<string, { data: string; path: string }> = {};\n\n const fmt = (component: any) => f.formatToXml(component, context);\n\n // Core properties\n mapping[\"Properties\"] = {\n data: fmt(file.coreProperties),\n path: \"docProps/core.xml\",\n };\n\n // App properties\n mapping[\"AppProperties\"] = {\n data: fmt(file.appProperties),\n path: \"docProps/app.xml\",\n };\n\n // File-level relationships (_rels/.rels)\n mapping[\"FileRelationships\"] = {\n data: fmt(file.fileRelationships),\n path: \"_rels/.rels\",\n };\n\n // Workbook\n mapping[\"Workbook\"] = {\n data: fmt(file.workbookXml),\n path: \"xl/workbook.xml\",\n };\n\n // Workbook relationships\n mapping[\"WorkbookRelationships\"] = {\n data: fmt(file.workbookRelationships),\n path: \"xl/_rels/workbook.xml.rels\",\n };\n\n // Worksheets — formatted BEFORE SharedStrings so strings are registered\n const worksheets = file.worksheets;\n let globalMediaIdx = 0;\n let globalChartIdx = 0;\n\n for (let i = 0; i < worksheets.length; i++) {\n const ws = worksheets[i];\n const imgOpts = ws.imageOptions;\n const chartOpts = ws.charts;\n\n // Worksheet uses toXml() fast path (zero-allocation string concat)\n let sheetXml = fmt(ws);\n\n const hasMedia = imgOpts.length > 0 || chartOpts.length > 0;\n\n if (hasMedia) {\n const drawingImages: ImageOptions[] = [];\n const drawingCharts: ChartAnchorOptions[] = [];\n const drawingRels = new Relationships();\n let rid = 1;\n\n // Process images\n for (const img of imgOpts) {\n const mediaKey = `image_${globalMediaIdx}`;\n const ext = img.type === \"jpeg\" || img.type === \"jpg\" ? \"jpeg\" : \"png\";\n file.media.addImage(mediaKey, {\n fileName: `image${globalMediaIdx + 1}.${ext}`,\n type: ext,\n data: img.data,\n width: 0,\n height: 0,\n });\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/image${globalMediaIdx + 1}.${ext}`,\n );\n\n drawingImages.push({\n col: img.col,\n row: img.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalMediaIdx++;\n }\n\n // Process charts\n for (const chart of chartOpts) {\n const chartKey = `chart_${globalChartIdx}`;\n file.charts.addChart(chartKey, {\n key: chartKey,\n chartSpace: new ChartSpace(chart),\n });\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${globalChartIdx + 1}.xml`,\n );\n\n drawingCharts.push({\n col: chart.col,\n row: chart.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalChartIdx++;\n }\n\n // Generate drawing XML\n const drawing = new Drawing(drawingImages, drawingCharts);\n const drawingIdx = i + 1;\n mapping[`Drawing${i}`] = {\n data: fmt(drawing),\n path: `xl/drawings/drawing${drawingIdx}.xml`,\n };\n\n // Drawing relationships\n mapping[`DrawingRels${i}`] = {\n data: fmt(drawingRels),\n path: `xl/drawings/_rels/drawing${drawingIdx}.xml.rels`,\n };\n\n // Insert drawing reference before the closing </worksheet> tag.\n // Use slice instead of replace to avoid O(n) full-string scan.\n const closingTag = \"</worksheet>\";\n sheetXml =\n sheetXml.slice(0, -closingTag.length) + `<drawing r:id=\"rId${rid}\"/>` + closingTag;\n\n // Worksheet needs its own rels for drawing reference\n const wsRels = new Relationships();\n wsRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n `../drawings/drawing${drawingIdx}.xml`,\n );\n mapping[`WorksheetRels${i}`] = {\n data: fmt(wsRels),\n path: `xl/worksheets/_rels/sheet${i + 1}.xml.rels`,\n };\n\n file.contentTypes.addDrawing(drawingIdx);\n }\n\n mapping[`Worksheet${i}`] = {\n data: sheetXml,\n path: `xl/worksheets/sheet${i + 1}.xml`,\n };\n }\n\n // Shared Strings — AFTER worksheets so all strings are collected\n const sharedStrings = file.sharedStrings;\n if (sharedStrings.count > 0) {\n mapping[\"SharedStrings\"] = {\n data: fmt(sharedStrings),\n path: \"xl/sharedStrings.xml\",\n };\n }\n\n // Styles\n mapping[\"Styles\"] = {\n data: fmt(file.styles),\n path: \"xl/styles.xml\",\n };\n\n // Theme\n mapping[\"Theme\"] = {\n data: fmt(file.theme),\n path: \"xl/theme/theme1.xml\",\n };\n\n // Charts — AFTER worksheets so charts are registered\n for (let i = 0; i < file.charts.array.length; i++) {\n const chartData = file.charts.array[i];\n mapping[`Chart${i}`] = {\n data: fmt(chartData.chartSpace),\n path: `xl/charts/chart${i + 1}.xml`,\n };\n file.contentTypes.addChart(i + 1);\n }\n\n // Register image content types\n const imageExts = new Set<string>();\n for (const img of file.media.array) {\n const ext = img.fileName.endsWith(\".png\") ? \"png\" : \"jpeg\";\n if (!imageExts.has(ext)) {\n imageExts.add(ext);\n file.contentTypes.addImageType(ext as \"png\" | \"jpeg\");\n }\n }\n\n // Content Types — must be last\n mapping[\"ContentTypes\"] = {\n data: fmt(file.contentTypes),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable\n const mediaFiles: Array<{ data: Uint8Array; path: string }> = [];\n for (const img of file.media.array) {\n mediaFiles.push({ data: img.data, path: `xl/media/${img.fileName}` });\n }\n\n return compileMapping(mapping, overrides, mediaFiles);\n }\n}\n","import type { File } from \"@file/file\";\n/**\n * Packer module — export API for XLSX files.\n *\n * @module\n */\nimport { createPacker, OoxmlMimeType } from \"@office-open/core\";\n\nimport { Compiler } from \"./next-compiler\";\n\nconst compiler = new Compiler();\n\nexport const Packer = createPacker<File>({\n compile: (file, overrides) => compiler.compile(file, overrides),\n mimeType: OoxmlMimeType.XLSX,\n});\n","/**\n * Convert a 1-based column number to Excel column letter(s).\n * 1 → \"A\", 26 → \"Z\", 27 → \"AA\", 28 → \"AB\"\n */\nexport function columnToLetter(col: number): string {\n let result = \"\";\n let n = col;\n while (n > 0) {\n const remainder = (n - 1) % 26;\n result = String.fromCharCode(65 + remainder) + result;\n n = Math.floor((n - 1) / 26);\n }\n return result;\n}\n\n/**\n * Convert Excel column letter(s) to a 1-based column number.\n * \"A\" → 1, \"Z\" → 26, \"AA\" → 27\n */\nexport function letterToColumn(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n result = result * 26 + (s.charCodeAt(i) - 64);\n }\n return result;\n}\n\n/**\n * Convert a JavaScript Date to an Excel serial number.\n * Excel epoch: January 1, 1900 = 1 (with the 1900 leap year bug).\n */\nexport function dateToSerialNumber(date: Date): number {\n // Excel treats 1900 as a leap year (bug inherited from Lotus 1-2-3).\n // The epoch is effectively December 30, 1899 = 0.\n const epoch = new Date(1899, 11, 30);\n const msPerDay = 86400000;\n const diff = date.getTime() - epoch.getTime();\n return diff / msPerDay;\n}\n","/**\n * XLSX parsing — parse .xlsx files into structured data.\n *\n * @module\n */\nimport { parseArchive, parseCorePropsElement } from \"@office-open/core\";\nimport type { ParsedArchive } from \"@office-open/core\";\nimport type { Element } from \"@office-open/xml\";\nimport { attr, attrNum, findChild, textOf } from \"@office-open/xml\";\nimport { toUint8Array } from \"undio\";\nimport type { DataType } from \"undio\";\n\nimport type { WorkbookOptions } from \"./file/file\";\nimport type {\n WorksheetOptions,\n RowOptions,\n CellOptions,\n ColumnOptions,\n MergeCellOptions,\n} from \"./file/worksheet\";\nimport { letterToColumn } from \"./util\";\n\nexport { parseArchive };\n\n// ── Low-level parse result ──\n\nexport interface XlsxPartRefs {\n worksheets: string[];\n charts: string[];\n media: string[];\n drawings: string[];\n}\n\nexport interface XlsxDocument {\n doc: ParsedArchive;\n /** xl/workbook.xml root element */\n workbook?: Element;\n /** Worksheet paths (xl/worksheets/sheet{n}.xml) */\n worksheets: string[];\n /** xl/styles.xml root element */\n styles?: Element;\n /** xl/sharedStrings.xml root element */\n sharedStrings?: Element;\n partRefs: XlsxPartRefs;\n /** docProps/core.xml path */\n coreProps?: string;\n /** docProps/app.xml path */\n appProps?: string;\n}\n\nfunction sortByNumber(paths: string[]): string[] {\n return paths.sort((a, b) => {\n const numA = parseInt(a.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n const numB = parseInt(b.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n return numA - numB;\n });\n}\n\n/**\n * Parse raw .xlsx data into a low-level XlsxDocument.\n */\nexport function parseXlsx(data: DataType): XlsxDocument {\n const uint8 = toUint8Array(data);\n const doc = parseArchive(uint8);\n\n const workbook = doc.get(\"xl/workbook.xml\");\n const styles = doc.get(\"xl/styles.xml\");\n const sharedStrings = doc.get(\"xl/sharedStrings.xml\");\n\n // Resolve worksheet paths from workbook rels\n const worksheets: string[] = [];\n const charts: string[] = [];\n const drawings: string[] = [];\n const media: string[] = [];\n\n const wbRels = doc.get(\"xl/_rels/workbook.xml.rels\");\n if (wbRels) {\n for (const child of wbRels.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n if (type.includes(\"/worksheet\")) {\n worksheets.push(target.startsWith(\"/\") ? target.slice(1) : `xl/${target}`);\n }\n }\n }\n sortByNumber(worksheets);\n\n // Scan for drawings, charts, media\n drawings.push(...doc.keys(\"xl/drawings/\").filter((k) => k.endsWith(\".xml\")));\n charts.push(...doc.keys(\"xl/charts/\").filter((k) => k.endsWith(\".xml\")));\n media.push(...doc.keys(\"xl/media/\"));\n sortByNumber(drawings);\n sortByNumber(charts);\n\n // Root rels → core/app props\n let coreProps: string | undefined;\n let appProps: string | undefined;\n const rootRels = doc.get(\"_rels/.rels\");\n if (rootRels) {\n for (const child of rootRels.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (type.includes(\"/core-properties\")) coreProps = target;\n else if (type.includes(\"/extended-properties\")) appProps = target;\n }\n }\n\n return {\n doc,\n workbook,\n worksheets,\n styles,\n sharedStrings,\n partRefs: { worksheets, charts, media, drawings },\n coreProps,\n appProps,\n };\n}\n\n// ── Shared strings helper ──\n\nfunction parseSharedStrings(el: Element | undefined): string[] {\n if (!el) return [];\n const strings: string[] = [];\n for (const si of el.elements ?? []) {\n if (si.name !== \"si\") continue;\n // Handle both <si><t>text</t></si> and <si><r><t>text</t></r>...</si>\n const t = findChild(si, \"t\");\n if (t) {\n strings.push(textOf(t) ?? \"\");\n } else {\n // Rich text: concatenate all <r><t> segments\n const parts: string[] = [];\n for (const r of si.elements ?? []) {\n if (r.name !== \"r\") continue;\n const rt = findChild(r, \"t\");\n if (rt) parts.push(textOf(rt) ?? \"\");\n }\n strings.push(parts.join(\"\"));\n }\n }\n return strings;\n}\n\n// ── Cell reference helpers ──\n\nfunction colFromRef(ref: string): number {\n const match = ref.match(/^([A-Z]+)/);\n return match ? letterToColumn(match[1]) : 1;\n}\n\nfunction rowFromRef(ref: string): number {\n const match = ref.match(/(\\d+)$/);\n return match ? parseInt(match[1], 10) : 1;\n}\n\n// ── Worksheet parsing ──\n\nfunction parseWorksheetElement(wsEl: Element, strings: string[]): WorksheetOptions {\n const opts: Record<string, unknown> = {};\n\n // Sheet name from the parent workbook's sheet element (not available here)\n // Caller should set it\n\n // Columns\n // Elements might be prefixed or unprefixed depending on how the XML parser handles default namespaces.\n const colsEl = findChild(wsEl, \"cols\") ?? findChildByLocalName(wsEl, \"cols\");\n if (colsEl) {\n const columns: ColumnOptions[] = [];\n for (const col of colsEl.elements ?? []) {\n if (localName(col) !== \"col\") continue;\n const min = attrNum(col, \"min\");\n const max = attrNum(col, \"max\");\n if (min === undefined || max === undefined) continue;\n const colOpts: Record<string, unknown> = { min, max };\n const width = attrNum(col, \"width\");\n if (width !== undefined) colOpts.width = width;\n if (attr(col, \"hidden\") === \"1\") colOpts.hidden = true;\n columns.push(colOpts as unknown as ColumnOptions);\n }\n if (columns.length > 0) opts.columns = columns;\n }\n\n // Freeze panes\n const sheetViews = findChildByLocalName(wsEl, \"sheetViews\");\n if (sheetViews) {\n const sheetView = findChildByLocalName(sheetViews, \"sheetView\");\n if (sheetView) {\n const pane = findChildByLocalName(sheetView, \"pane\");\n if (pane) {\n const state = attr(pane, \"state\");\n if (state === \"frozen\") {\n const freezePanes: Record<string, unknown> = {};\n const ySplit = attrNum(pane, \"ySplit\");\n const xSplit = attrNum(pane, \"xSplit\");\n if (ySplit && ySplit > 0) freezePanes.row = ySplit;\n if (xSplit && xSplit > 0) freezePanes.col = xSplit;\n if (Object.keys(freezePanes).length > 0) opts.freezePanes = freezePanes;\n }\n }\n }\n }\n\n // Sheet data (rows)\n const sheetData = findChildByLocalName(wsEl, \"sheetData\");\n const rows: RowOptions[] = [];\n if (sheetData) {\n for (const rowEl of sheetData.elements ?? []) {\n if (localName(rowEl) !== \"row\") continue;\n const rowNumber = attrNum(rowEl, \"r\");\n const rowOpts: Record<string, unknown> = {};\n if (rowNumber !== undefined) rowOpts.rowNumber = rowNumber;\n\n const ht = attrNum(rowEl, \"ht\");\n if (ht !== undefined) rowOpts.height = ht;\n if (attr(rowEl, \"hidden\") === \"1\") rowOpts.hidden = true;\n\n const cells: CellOptions[] = [];\n for (const cellEl of rowEl.elements ?? []) {\n if (localName(cellEl) !== \"c\") continue;\n const ref = attr(cellEl, \"r\");\n const type = attr(cellEl, \"t\");\n const cellOpts: Record<string, unknown> = {};\n if (ref) cellOpts.reference = ref;\n\n const styleIdx = attrNum(cellEl, \"s\");\n if (styleIdx !== undefined) cellOpts.styleIndex = styleIdx;\n\n // Cell value\n const vEl = findChildByLocalName(cellEl, \"v\");\n const isEl = findChildByLocalName(cellEl, \"is\");\n\n if (type === \"s\" && vEl) {\n // Shared string\n const idx = parseInt(textOf(vEl) ?? \"\", 10);\n cellOpts.value = strings[idx] ?? \"\";\n } else if (type === \"b\" && vEl) {\n cellOpts.value = textOf(vEl) === \"1\";\n } else if (type === \"inlineStr\" && isEl) {\n const t = findChildByLocalName(isEl, \"t\");\n cellOpts.value = textOf(t) ?? \"\";\n } else if (vEl) {\n const raw = textOf(vEl) ?? \"\";\n const num = Number(raw);\n cellOpts.value = isNaN(num) ? raw : num;\n }\n\n cells.push(cellOpts as CellOptions);\n }\n\n rowOpts.cells = cells;\n rows.push(rowOpts as RowOptions);\n }\n }\n opts.children = rows;\n\n // Merge cells\n const mergeCellsEl = findChildByLocalName(wsEl, \"mergeCells\");\n if (mergeCellsEl) {\n const mergeCells: MergeCellOptions[] = [];\n for (const mc of mergeCellsEl.elements ?? []) {\n if (localName(mc) !== \"mergeCell\") continue;\n const ref = attr(mc, \"ref\");\n if (!ref) continue;\n const parts = ref.split(\":\");\n if (parts.length === 2) {\n mergeCells.push({\n from: { row: rowFromRef(parts[0]), col: colFromRef(parts[0]) },\n to: { row: rowFromRef(parts[1]), col: colFromRef(parts[1]) },\n });\n }\n }\n if (mergeCells.length > 0) opts.mergeCells = mergeCells;\n }\n\n // Auto filter\n const autoFilterEl = findChildByLocalName(wsEl, \"autoFilter\");\n if (autoFilterEl) {\n const ref = attr(autoFilterEl, \"ref\");\n if (ref) opts.autoFilter = ref;\n }\n\n return opts as WorksheetOptions;\n}\n\n// ── Helpers ──\n\nfunction localName(el: Element): string {\n const name = el.name ?? \"\";\n const colonIdx = name.indexOf(\":\");\n return colonIdx >= 0 ? name.slice(colonIdx + 1) : name;\n}\n\nfunction findChildByLocalName(parent: Element, name: string): Element | undefined {\n return (parent.elements ?? []).find((el) => localName(el) === name);\n}\n\n/**\n * Parse a .xlsx file and convert it into WorkbookOptions.\n *\n * The returned options can be passed to `new Workbook(parsed)`.\n */\nexport function parseWorkbook(data: DataType): WorkbookOptions {\n const xlsx = parseXlsx(data);\n\n const opts: Record<string, unknown> = {};\n\n // Core properties\n if (xlsx.coreProps) {\n const corePropsEl = xlsx.doc.get(xlsx.coreProps);\n if (corePropsEl) {\n const cp = parseCorePropsElement(corePropsEl);\n if (cp.title) opts.title = cp.title;\n if (cp.subject) opts.subject = cp.subject;\n if (cp.creator) opts.creator = cp.creator;\n if (cp.keywords) opts.keywords = cp.keywords;\n if (cp.description) opts.description = cp.description;\n if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy;\n if (cp.revision) opts.revision = parseInt(cp.revision, 10);\n }\n }\n\n // Shared strings\n const strings = parseSharedStrings(xlsx.sharedStrings);\n\n // Sheet names from workbook\n const sheetNames: string[] = [];\n if (xlsx.workbook) {\n const sheetsEl = findChildByLocalName(xlsx.workbook, \"sheets\");\n if (sheetsEl) {\n for (const s of sheetsEl.elements ?? []) {\n if (localName(s) !== \"sheet\") continue;\n sheetNames.push(attr(s, \"name\") ?? \"\");\n }\n }\n }\n\n // Parse worksheets\n const worksheets: WorksheetOptions[] = [];\n for (let i = 0; i < xlsx.worksheets.length; i++) {\n const wsPath = xlsx.worksheets[i];\n const wsEl = xlsx.doc.get(wsPath);\n if (!wsEl) continue;\n\n const wsOpts = parseWorksheetElement(wsEl, strings) as Record<string, unknown>;\n if (sheetNames[i]) wsOpts.name = sheetNames[i];\n worksheets.push(wsOpts as WorksheetOptions);\n }\n\n opts.worksheets = worksheets;\n return opts as WorkbookOptions;\n}\n","/**\n * XLSX patching — replace placeholders in existing .xlsx files.\n *\n * Unlike DOCX/PPTX (paragraph-based), XLSX patching targets cell values:\n * - Replaces placeholders in the shared strings table (most common)\n * - Replaces placeholders in inline strings within worksheet cells\n *\n * @module\n */\nimport { OoxmlMimeType, unzipSync, zipAndConvert, strFromU8, toJson } from \"@office-open/core\";\nimport type { OutputByType, OutputType } from \"@office-open/core\";\nimport { js2xml } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport { toUint8Array } from \"undio\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\nexport type InputDataType = Buffer | string | number[] | Uint8Array | ArrayBuffer | Blob;\n\nexport type PatchDocumentOutputType = OutputType;\n\nexport const PatchType = {\n CELL: \"cell\",\n} as const;\n\nexport interface CellPatch {\n /** Replacement value (string, number, boolean, or Date) */\n readonly value: string | number | boolean | Date;\n}\n\nexport type IPatch = CellPatch;\n\nexport interface PatchWorkbookOptions<T extends PatchDocumentOutputType = PatchDocumentOutputType> {\n readonly outputType: T;\n readonly data: InputDataType;\n readonly patches: Readonly<Record<string, IPatch>>;\n readonly placeholderDelimiters?: Readonly<{\n readonly start: string;\n readonly end: string;\n }>;\n}\n\n/**\n * Patch an existing .xlsx workbook by replacing placeholder text in cells.\n *\n * Placeholders are matched in shared strings and inline strings.\n * For string replacements, the shared string value is updated in-place.\n * For non-string replacements, the cell type and value are updated.\n */\nexport const patchWorkbook = async <T extends PatchDocumentOutputType = PatchDocumentOutputType>({\n outputType,\n data,\n patches,\n placeholderDelimiters = { start: \"{{\", end: \"}}\" } as const,\n}: PatchWorkbookOptions<T>): Promise<OutputByType[T]> => {\n const zipContent = unzipSync(toUint8Array(data));\n\n const xmlMap = new Map<string, Element>();\n const binaryMap = new Map<string, Uint8Array>();\n\n // Separate XML files from binary files\n for (const [key, value] of Object.entries(zipContent)) {\n if (key.endsWith(\".xml\") || key.endsWith(\".rels\")) {\n xmlMap.set(key, toJson(strFromU8(value)));\n } else {\n binaryMap.set(key, value);\n }\n }\n\n const { start, end } = placeholderDelimiters;\n\n // Build placeholder → patch map\n const patchMap = new Map<string, IPatch>();\n for (const [key, patch] of Object.entries(patches)) {\n patchMap.set(`${start}${key}${end}`, patch);\n }\n\n // 1. Patch shared strings\n const sst = xmlMap.get(\"xl/sharedStrings.xml\");\n if (sst) {\n patchSharedStrings(sst, patchMap);\n }\n\n // 2. Patch inline strings in worksheets\n const worksheetKeys = Object.keys(zipContent).filter(\n (k) => k.startsWith(\"xl/worksheets/sheet\") && k.endsWith(\".xml\"),\n );\n for (const wsKey of worksheetKeys) {\n const ws = xmlMap.get(wsKey);\n if (ws) patchWorksheetInlineStrings(ws, patchMap);\n }\n\n // Rebuild ZIP\n const files: Record<string, Uint8Array> = {};\n for (const [key, value] of xmlMap) {\n files[key] = encoder.encode(js2xml(value));\n }\n for (const [key, value] of binaryMap) {\n files[key] = value;\n }\n\n return await zipAndConvert(files, outputType, OoxmlMimeType.XLSX);\n};\n\nfunction patchSharedStrings(sst: Element, patchMap: Map<string, IPatch>): void {\n // toJson returns {elements: [{name: \"sst\", ...}]} — unwrap to actual root\n const root = sst.name ? sst : sst.elements?.[0];\n if (!root) return;\n\n for (const si of root.elements ?? []) {\n if (si.name !== \"si\") continue;\n\n // Simple: <si><t>text</t></si>\n const t = findLocalChild(si, \"t\");\n if (t) {\n patchTextElement(t, patchMap);\n } else {\n // Rich text: <si><r><t>text</t></r>...</si>\n for (const r of si.elements ?? []) {\n if (r.name !== \"r\") continue;\n const rt = findLocalChild(r, \"t\");\n if (rt) patchTextElement(rt, patchMap);\n }\n }\n }\n}\n\nfunction patchWorksheetInlineStrings(ws: Element, patchMap: Map<string, IPatch>): void {\n const root = ws.name ? ws : ws.elements?.[0];\n if (!root) return;\n\n const sheetData = findLocalChild(root, \"sheetData\");\n if (!sheetData) return;\n\n for (const row of sheetData.elements ?? []) {\n if (localName(row) !== \"row\") continue;\n for (const cell of row.elements ?? []) {\n if (localName(cell) !== \"c\") continue;\n\n // Check inline strings: <c t=\"inlineStr\"><is><t>text</t></is></c>\n const isEl = findLocalChild(cell, \"is\");\n if (isEl) {\n const t = findLocalChild(isEl, \"t\");\n if (t) patchTextElement(t, patchMap);\n }\n }\n }\n}\n\nfunction patchTextElement(tEl: Element, patchMap: Map<string, IPatch>): void {\n const text = tEl.elements?.[0]?.text;\n if (typeof text !== \"string\") return;\n\n for (const [placeholder, patch] of patchMap) {\n if (text.includes(placeholder)) {\n const newValue = String(patch.value);\n const replaced = text.replace(placeholder, newValue);\n if (tEl.elements) {\n tEl.elements[0] = { ...tEl.elements[0], text: replaced };\n }\n }\n }\n}\n\nfunction localName(el: Element): string {\n const name = el.name ?? \"\";\n const colonIdx = name.indexOf(\":\");\n return colonIdx >= 0 ? name.slice(colonIdx + 1) : name;\n}\n\nfunction findLocalChild(parent: Element, name: string): Element | undefined {\n return (parent.elements ?? []).find((el) => localName(el) === name);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@office-open/xlsx",
3
- "version": "0.6.6",
3
+ "version": "0.6.7",
4
4
  "description": "Generate .xlsx files with JS/TS",
5
5
  "keywords": [
6
6
  "excel",
@@ -27,18 +27,18 @@
27
27
  "dist"
28
28
  ],
29
29
  "type": "module",
30
- "main": "dist/index.js",
31
- "types": "dist/index.d.ts",
30
+ "main": "dist/index.mjs",
31
+ "types": "dist/index.d.mts",
32
32
  "exports": {
33
33
  ".": {
34
- "types": "./dist/index.d.ts",
35
- "import": "./dist/index.js"
34
+ "types": "./dist/index.d.mts",
35
+ "import": "./dist/index.mjs"
36
36
  }
37
37
  },
38
38
  "dependencies": {
39
39
  "undio": "0.2.0",
40
- "@office-open/core": "0.6.6",
41
- "@office-open/xml": "0.6.6"
40
+ "@office-open/xml": "0.6.7",
41
+ "@office-open/core": "0.6.7"
42
42
  },
43
43
  "scripts": {
44
44
  "dev": "basis build --stub",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/file/content-types.ts","../src/file/core-properties.ts","../src/file/media/media.ts","../src/file/shared-strings.ts","../src/file/styles.ts","../src/file/theme.ts","../src/file/workbook.ts","../src/file/worksheet.ts","../src/file/file.ts","../src/export/packer/packer.ts","../src/util/index.ts","../src/parse.ts","../src/patcher.ts"],"mappings":"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"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["localName"],"sources":["../src/file/content-types.ts","../src/file/core-properties.ts","../src/file/media/media.ts","../src/file/shared-strings.ts","../src/file/styles.ts","../src/file/theme.ts","../src/file/workbook.ts","../src/file/worksheet.ts","../src/file/file.ts","../src/file/drawing/drawing.ts","../src/export/packer/next-compiler.ts","../src/export/packer/packer.ts","../src/util/index.ts","../src/parse.ts","../src/patcher.ts"],"sourcesContent":["/**\n * Content Types module for XLSX packages.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\nconst XLSX_MAIN = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\";\nconst XLSX_WORKSHEET = \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\";\nconst XLSX_STYLES = \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\";\nconst XLSX_SHARED_STRINGS =\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\";\nconst XLSX_THEME = \"application/vnd.openxmlformats-officedocument.theme+xml\";\nconst XLSX_CHART = \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\";\n\ntype EntryType = \"Default\" | \"Override\";\n\ninterface ContentEntry {\n readonly type: EntryType;\n readonly contentType: string;\n readonly key: string;\n}\n\nconst STATIC_ENTRIES: readonly ContentEntry[] = [\n {\n type: \"Default\",\n contentType: \"application/vnd.openxmlformats-package.relationships+xml\",\n key: \"rels\",\n },\n { type: \"Default\", contentType: \"application/xml\", key: \"xml\" },\n { type: \"Default\", contentType: \"image/png\", key: \"png\" },\n { type: \"Default\", contentType: \"image/jpeg\", key: \"jpeg\" },\n { type: \"Override\", contentType: XLSX_MAIN, key: \"/xl/workbook.xml\" },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-package.core-properties+xml\",\n key: \"/docProps/core.xml\",\n },\n {\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.extended-properties+xml\",\n key: \"/docProps/app.xml\",\n },\n];\n\nconst STATIC_CHILDREN: IXmlableObject[] = [\n { _attr: { xmlns: \"http://schemas.openxmlformats.org/package/2006/content-types\" } },\n ...STATIC_ENTRIES.map((e) => {\n if (e.type === \"Default\") {\n return { Default: { _attr: { ContentType: e.contentType, Extension: e.key } } };\n }\n return { Override: { _attr: { ContentType: e.contentType, PartName: e.key } } };\n }),\n];\n\nexport class ContentTypes extends BaseXmlComponent {\n private readonly dynamicEntries: ContentEntry[] = [];\n\n public constructor() {\n super(\"Types\");\n }\n\n public addWorksheet(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_WORKSHEET,\n key: `/xl/worksheets/sheet${index}.xml`,\n });\n }\n\n public addStyles(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_STYLES,\n key: \"/xl/styles.xml\",\n });\n }\n\n public addSharedStrings(): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_SHARED_STRINGS,\n key: \"/xl/sharedStrings.xml\",\n });\n }\n\n public addTheme(index: number = 1): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_THEME,\n key: `/xl/theme/theme${index}.xml`,\n });\n }\n\n public addChart(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: XLSX_CHART,\n key: `/xl/charts/chart${index}.xml`,\n });\n }\n\n public addDrawing(index: number): void {\n this.dynamicEntries.push({\n type: \"Override\",\n contentType: \"application/vnd.openxmlformats-officedocument.drawing+xml\",\n key: `/xl/drawings/drawing${index}.xml`,\n });\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children = [...STATIC_CHILDREN];\n for (const e of this.dynamicEntries) {\n if (e.type === \"Default\") {\n children.push({\n Default: { _attr: { ContentType: e.contentType, Extension: e.key } },\n });\n } else {\n children.push({\n Override: { _attr: { ContentType: e.contentType, PartName: e.key } },\n });\n }\n }\n return { Types: children };\n }\n}\n","/**\n * Core Properties module for SpreadsheetML documents.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { buildCorePropertiesXml } from \"@office-open/core\";\n\nexport interface CorePropertiesOptions {\n readonly title?: string;\n readonly subject?: string;\n readonly creator?: string;\n readonly keywords?: string;\n readonly description?: string;\n readonly lastModifiedBy?: string;\n readonly revision?: number;\n}\n\nexport class CoreProperties extends BaseXmlComponent {\n private readonly options: CorePropertiesOptions;\n\n public constructor(options: CorePropertiesOptions) {\n super(\"cp:coreProperties\");\n this.options = options;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n return buildCorePropertiesXml(this.options);\n }\n}\n","/**\n * Media collection for XLSX files — stores image binary data.\n *\n * @module\n */\n\nexport interface MediaData {\n readonly fileName: string;\n readonly type: string;\n readonly data: Uint8Array;\n readonly width: number;\n readonly height: number;\n}\n\nexport class Media {\n private readonly map = new Map<string, MediaData>();\n\n public addImage(key: string, data: MediaData): void {\n this.map.set(key, data);\n }\n\n public get array(): readonly MediaData[] {\n return [...this.map.values()];\n }\n}\n","/**\n * Shared Strings Table — generates xl/sharedStrings.xml.\n *\n * XLSX stores repeated string values in a central table to reduce file size.\n * Cells reference strings by index into this table.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { escapeXml } from \"@office-open/xml\";\n\nexport class SharedStrings extends BaseXmlComponent {\n private readonly strings: string[] = [];\n private readonly indexMap = new Map<string, number>();\n\n public constructor() {\n super(\"sst\");\n }\n\n /**\n * Register a string and return its index.\n * Returns existing index if the string is already registered.\n */\n public register(s: string): number {\n const existing = this.indexMap.get(s);\n if (existing !== undefined) return existing;\n\n const idx = this.strings.length;\n this.strings.push(s);\n this.indexMap.set(s, idx);\n return idx;\n }\n\n public get count(): number {\n return this.strings.length;\n }\n\n /**\n * Zero-allocation fast path: directly concatenate XML string.\n * Bypasses the IXmlableObject intermediate tree entirely.\n */\n public override toXml(_context: Context): string {\n const p: string[] = [\n '<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"',\n ` count=\"${this.strings.length}\" uniqueCount=\"${this.indexMap.size}\">`,\n ];\n for (const s of this.strings) {\n p.push(`<si><t>${escapeXml(s)}</t></si>`);\n }\n p.push(\"</sst>\");\n return p.join(\"\");\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n count: this.strings.length,\n uniqueCount: this.indexMap.size,\n },\n },\n ];\n\n for (const s of this.strings) {\n children.push({ si: [{ t: [s] }] });\n }\n\n return { sst: children };\n }\n}\n","/**\n * Styles component — generates xl/styles.xml.\n *\n * XLSX uses an index-based style system: cells reference style entries\n * via the `s` attribute, which is an index into `cellXfs`.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport { attrs, escapeXml } from \"@office-open/xml\";\n\n// ── Sub-style option interfaces ──\n\nexport interface FontOptions {\n readonly bold?: boolean;\n readonly italic?: boolean;\n readonly underline?: boolean;\n readonly strike?: boolean;\n readonly size?: number;\n readonly color?: string;\n readonly fontName?: string;\n}\n\nexport interface FillOptions {\n readonly type?: \"solid\" | \"pattern\";\n readonly color?: string;\n readonly patternType?: string;\n}\n\nexport interface BorderOptions {\n readonly style?: \"thin\" | \"medium\" | \"thick\" | \"dotted\" | \"dashed\" | \"hair\" | \"none\";\n readonly color?: string;\n}\n\nexport interface BorderSideOptions {\n readonly top?: BorderOptions;\n readonly bottom?: BorderOptions;\n readonly left?: BorderOptions;\n readonly right?: BorderOptions;\n readonly diagonal?: BorderOptions;\n}\n\nexport interface AlignmentOptions {\n readonly horizontal?: \"left\" | \"center\" | \"right\" | \"fill\" | \"justify\";\n readonly vertical?: \"top\" | \"center\" | \"bottom\";\n readonly wrapText?: boolean;\n readonly textRotation?: number;\n readonly indent?: number;\n}\n\nexport interface StyleOptions {\n readonly font?: FontOptions;\n readonly fill?: FillOptions;\n readonly border?: BorderSideOptions;\n readonly numFmt?: string;\n readonly alignment?: AlignmentOptions;\n}\n\n// ── Style key helpers for deduplication ──\n\nfunction fontKey(f: FontOptions): string {\n return `b${f.bold ? 1 : 0}i${f.italic ? 1 : 0}u${f.underline ? 1 : 0}s${f.strike ? 1 : 0}z${f.size ?? 0}c${f.color ?? \"\"}n${f.fontName ?? \"\"}`;\n}\n\nfunction fillKey(f: FillOptions): string {\n return `t${f.type ?? \"\"}c${f.color ?? \"\"}p${f.patternType ?? \"\"}`;\n}\n\nfunction borderKey(b: BorderSideOptions): string {\n const sk = (o?: BorderOptions) => `${o?.style ?? \"\"}_${o?.color ?? \"\"}`;\n return `t${sk(b.top)}b${sk(b.bottom)}l${sk(b.left)}r${sk(b.right)}d${sk(b.diagonal)}`;\n}\n\n// ── Built-in number format IDs ──\n\nconst BUILTIN_NUMFMTS: Record<string, number> = {\n General: 0,\n \"0\": 1,\n \"0.00\": 2,\n \"#,##0\": 3,\n \"#,##0.00\": 4,\n \"0%\": 9,\n \"0.00%\": 10,\n \"0.00E+00\": 11,\n \"mm-dd-yy\": 14,\n \"d-mmm-yy\": 15,\n \"d-mmm\": 16,\n \"mmm-yy\": 17,\n \"h:mm AM/PM\": 18,\n \"h:mm:ss AM/PM\": 19,\n \"h:mm\": 20,\n \"h:mm:ss\": 21,\n \"m/d/yy h:mm\": 22,\n \"#,##0 ;(#,##0)\": 37,\n \"#,##0 ;[Red](#,##0)\": 38,\n \"#,##0.00;(#,##0.00)\": 39,\n \"#,##0.00;[Red](#,##0.00)\": 40,\n \"mm:ss\": 45,\n \"[h]:mm:ss\": 46,\n \"mmss.0\": 47,\n \"##0.0E+0\": 48,\n \"@\": 49,\n};\n\nexport class Styles extends BaseXmlComponent {\n private readonly fonts: FontOptions[] = [\n { size: 11, fontName: \"Calibri\" }, // default font (index 0)\n ];\n private readonly fontKeys = new Map<string, number>();\n\n private readonly fills: FillOptions[] = [\n { patternType: \"none\" }, // default fill (index 0)\n { patternType: \"gray125\" }, // required fill (index 1)\n ];\n private readonly fillKeys = new Map<string, number>();\n\n private readonly borders: BorderSideOptions[] = [\n {}, // default empty border (index 0)\n ];\n private readonly borderKeys = new Map<string, number>();\n\n private readonly customNumFmts = new Map<string, number>();\n private nextCustomNumFmtId = 164; // custom numFmts start at 164\n\n private readonly cellXfs: Array<{\n readonly fontId: number;\n readonly fillId: number;\n readonly borderId: number;\n readonly numFmtId: number;\n readonly alignment?: AlignmentOptions;\n }> = [\n { fontId: 0, fillId: 0, borderId: 0, numFmtId: 0 }, // default xf (index 0)\n ];\n private readonly cellXfKeys = new Map<string, number>();\n\n public constructor() {\n super(\"styleSheet\");\n\n // Pre-register default font/fill/border keys\n this.fontKeys.set(fontKey(this.fonts[0]), 0);\n this.fillKeys.set(fillKey(this.fills[0]), 0);\n this.fillKeys.set(fillKey(this.fills[1]), 1);\n this.borderKeys.set(borderKey(this.borders[0]), 0);\n this.cellXfKeys.set(this.cellXfKey(this.cellXfs[0]), 0);\n }\n\n /**\n * Register a style and return its index (for the cell `s` attribute).\n * Deduplicates across fonts, fills, borders, numFmts, and cellXfs.\n */\n public register(opts: StyleOptions): number {\n const fontId = this.registerFont(opts.font);\n const fillId = this.registerFill(opts.fill);\n const borderId = this.registerBorder(opts.border);\n const numFmtId = this.registerNumFmt(opts.numFmt);\n\n const xf = {\n fontId,\n fillId,\n borderId,\n numFmtId,\n alignment: opts.alignment,\n };\n\n const key = this.cellXfKey(xf);\n const existing = this.cellXfKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.cellXfs.length;\n this.cellXfs.push(xf);\n this.cellXfKeys.set(key, idx);\n return idx;\n }\n\n private registerFont(opts?: FontOptions): number {\n if (!opts) return 0;\n const key = fontKey(opts);\n const existing = this.fontKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.fonts.length;\n this.fonts.push(opts);\n this.fontKeys.set(key, idx);\n return idx;\n }\n\n private registerFill(opts?: FillOptions): number {\n if (!opts) return 0;\n const key = fillKey(opts);\n const existing = this.fillKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.fills.length;\n this.fills.push(opts);\n this.fillKeys.set(key, idx);\n return idx;\n }\n\n private registerBorder(opts?: BorderSideOptions): number {\n if (!opts) return 0;\n const key = borderKey(opts);\n const existing = this.borderKeys.get(key);\n if (existing !== undefined) return existing;\n\n const idx = this.borders.length;\n this.borders.push(opts);\n this.borderKeys.set(key, idx);\n return idx;\n }\n\n private registerNumFmt(fmt?: string): number {\n if (!fmt) return 0;\n const builtin = BUILTIN_NUMFMTS[fmt];\n if (builtin !== undefined) return builtin;\n\n const existing = this.customNumFmts.get(fmt);\n if (existing !== undefined) return existing;\n\n const id = this.nextCustomNumFmtId++;\n this.customNumFmts.set(fmt, id);\n return id;\n }\n\n private cellXfKey(xf: {\n readonly fontId: number;\n readonly fillId: number;\n readonly borderId: number;\n readonly numFmtId: number;\n readonly alignment?: AlignmentOptions;\n }): string {\n const a = xf.alignment;\n const ak = a\n ? `h${a.horizontal ?? \"\"}v${a.vertical ?? \"\"}w${a.wrapText ? 1 : 0}r${a.textRotation ?? \"\"}i${a.indent ?? \"\"}`\n : \"\";\n return `${xf.fontId}|${xf.fillId}|${xf.borderId}|${xf.numFmtId}|${ak}`;\n }\n\n // ── XML generation ──\n\n /**\n * Zero-allocation fast path: directly concatenate XML string.\n * Bypasses the IXmlableObject intermediate tree entirely.\n */\n public override toXml(_context: Context): string {\n const p: string[] = [\n '<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">',\n ];\n\n // numFmts\n if (this.customNumFmts.size > 0) {\n p.push(`<numFmts count=\"${this.customNumFmts.size}\">`);\n for (const [fmt, id] of this.customNumFmts) {\n p.push(`<numFmt numFmtId=\"${id}\" formatCode=\"${escapeXml(fmt)}\"/>`);\n }\n p.push(\"</numFmts>\");\n }\n\n // fonts\n p.push(`<fonts count=\"${this.fonts.length}\">`);\n for (const f of this.fonts) {\n p.push(`<font>${this.fontXmlStr(f)}</font>`);\n }\n p.push(\"</fonts>\");\n\n // fills\n p.push(`<fills count=\"${this.fills.length}\">`);\n for (const f of this.fills) {\n const patternAttrs = attrs({ patternType: f.patternType ?? \"solid\" });\n const fgColor = f.color ? `<fgColor rgb=\"FF${f.color}\"/>` : \"\";\n p.push(`<fill><patternFill${patternAttrs}>${fgColor}</patternFill></fill>`);\n }\n p.push(\"</fills>\");\n\n // borders\n p.push(`<borders count=\"${this.borders.length}\">`);\n for (const b of this.borders) {\n p.push(`<border>${this.borderXmlStr(b)}</border>`);\n }\n p.push(\"</borders>\");\n\n // cellStyleXfs\n p.push(\n '<cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs>',\n );\n\n // cellXfs\n p.push(`<cellXfs count=\"${this.cellXfs.length}\">`);\n for (const xf of this.cellXfs) {\n const xAttrs: Record<string, string | number | boolean | undefined> = {\n numFmtId: xf.numFmtId,\n fontId: xf.fontId,\n fillId: xf.fillId,\n borderId: xf.borderId,\n };\n if (xf.alignment) xAttrs.applyAlignment = 1;\n if (xf.fontId > 0) xAttrs.applyFont = 1;\n if (xf.fillId > 0) xAttrs.applyFill = 1;\n if (xf.borderId > 0) xAttrs.applyBorder = 1;\n\n const alignStr = xf.alignment ? this.alignmentXmlStr(xf.alignment) : \"\";\n p.push(`<xf${attrs(xAttrs)}>${alignStr}</xf>`);\n }\n p.push(\"</cellXfs>\");\n\n // cellStyles\n p.push('<cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles>');\n\n p.push(\"</styleSheet>\");\n return p.join(\"\");\n }\n\n private fontXmlStr(f: FontOptions): string {\n const parts: string[] = [];\n if (f.bold) parts.push(\"<b/>\");\n if (f.italic) parts.push(\"<i/>\");\n if (f.underline) parts.push(\"<u/>\");\n if (f.strike) parts.push(\"<strike/>\");\n if (f.size) parts.push(`<sz val=\"${f.size}\"/>`);\n if (f.color) parts.push(`<color rgb=\"FF${f.color}\"/>`);\n if (f.fontName) parts.push(`<name val=\"${escapeXml(f.fontName)}\"/>`);\n return parts.join(\"\");\n }\n\n private borderXmlStr(b: BorderSideOptions): string {\n const parts: string[] = [];\n for (const side of [\"left\", \"right\", \"top\", \"bottom\", \"diagonal\"] as const) {\n const opts = b[side] as BorderOptions | undefined;\n if (opts && opts.style && opts.style !== \"none\") {\n const colorStr = opts.color ? `<color rgb=\"FF${opts.color}\"/>` : \"\";\n parts.push(`<${side} style=\"${opts.style}\">${colorStr}</${side}>`);\n } else {\n parts.push(`<${side}/>`);\n }\n }\n return parts.join(\"\");\n }\n\n private alignmentXmlStr(a: AlignmentOptions): string {\n const aAttrs: Record<string, string | number | boolean | undefined> = {};\n if (a.horizontal) aAttrs.horizontal = a.horizontal;\n if (a.vertical) aAttrs.vertical = a.vertical;\n if (a.wrapText) aAttrs.wrapText = 1;\n if (a.textRotation !== undefined) aAttrs.textRotation = a.textRotation;\n if (a.indent !== undefined) aAttrs.indent = a.indent;\n return `<alignment${attrs(aAttrs)}/>`;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n },\n },\n ];\n\n // numFmts\n if (this.customNumFmts.size > 0) {\n const fmtElements: IXmlableObject[] = [{ _attr: { count: this.customNumFmts.size } }];\n for (const [fmt, id] of this.customNumFmts) {\n fmtElements.push({\n numFmt: { _attr: { numFmtId: id, formatCode: fmt } },\n });\n }\n children.push({ numFmts: fmtElements });\n }\n\n // fonts\n children.push(this.buildFonts());\n\n // fills\n children.push(this.buildFills());\n\n // borders\n children.push(this.buildBorders());\n\n // cellStyleXfs\n children.push({\n cellStyleXfs: [\n { _attr: { count: 1 } },\n { xf: [{ _attr: { numFmtId: 0, fontId: 0, fillId: 0, borderId: 0 } }] },\n ],\n });\n\n // cellXfs\n children.push(this.buildCellXfs());\n\n // cellStyles\n children.push({\n cellStyles: [\n { _attr: { count: 1 } },\n { cellStyle: [{ _attr: { name: \"Normal\", xfId: 0, builtinId: 0 } }] },\n ],\n });\n\n return { styleSheet: children };\n }\n\n private buildFonts(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.fonts.length } }];\n for (const f of this.fonts) {\n elements.push({ font: this.fontXml(f) });\n }\n return { fonts: elements };\n }\n\n private fontXml(f: FontOptions): IXmlableObject[] {\n const parts: IXmlableObject[] = [];\n if (f.bold) parts.push({ b: [] });\n if (f.italic) parts.push({ i: [] });\n if (f.underline) parts.push({ u: [] });\n if (f.strike) parts.push({ strike: [] });\n if (f.size) parts.push({ sz: [{ _attr: { val: f.size } }] });\n if (f.color) parts.push({ color: [{ _attr: { rgb: `FF${f.color}` } }] });\n if (f.fontName) parts.push({ name: [{ _attr: { val: f.fontName } }] });\n return parts;\n }\n\n private buildFills(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.fills.length } }];\n for (const f of this.fills) {\n elements.push({\n fill: [\n {\n patternFill: [\n { _attr: { patternType: f.patternType ?? \"solid\" } },\n ...(f.color ? [{ fgColor: [{ _attr: { rgb: `FF${f.color}` } }] }] : []),\n ],\n },\n ],\n });\n }\n return { fills: elements };\n }\n\n private buildBorders(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.borders.length } }];\n for (const b of this.borders) {\n elements.push({ border: this.borderXml(b) });\n }\n return { borders: elements };\n }\n\n private borderXml(b: BorderSideOptions): IXmlableObject[] {\n const parts: IXmlableObject[] = [];\n for (const side of [\"left\", \"right\", \"top\", \"bottom\", \"diagonal\"] as const) {\n const opts = b[side] as BorderOptions | undefined;\n if (opts && opts.style && opts.style !== \"none\") {\n const attrs: Record<string, string> = { style: opts.style };\n const children: IXmlableObject[] = [{ _attr: attrs }];\n if (opts.color) {\n children.push({ color: [{ _attr: { rgb: `FF${opts.color}` } }] });\n }\n parts.push({ [side]: children });\n } else {\n parts.push({ [side]: [] });\n }\n }\n return parts;\n }\n\n private buildCellXfs(): IXmlableObject {\n const elements: IXmlableObject[] = [{ _attr: { count: this.cellXfs.length } }];\n for (const xf of this.cellXfs) {\n const attrs: Record<string, string | number> = {\n numFmtId: xf.numFmtId,\n fontId: xf.fontId,\n fillId: xf.fillId,\n borderId: xf.borderId,\n };\n if (xf.alignment) {\n attrs.applyAlignment = 1;\n }\n if (xf.fontId > 0) attrs.applyFont = 1;\n if (xf.fillId > 0) attrs.applyFill = 1;\n if (xf.borderId > 0) attrs.applyBorder = 1;\n\n const children: IXmlableObject[] = [{ _attr: attrs }];\n if (xf.alignment) {\n children.push(this.alignmentXml(xf.alignment));\n }\n elements.push({ xf: children });\n }\n return { cellXfs: elements };\n }\n\n private alignmentXml(a: AlignmentOptions): IXmlableObject {\n const attrs: Record<string, string | number> = {};\n if (a.horizontal) attrs.horizontal = a.horizontal;\n if (a.vertical) attrs.vertical = a.vertical;\n if (a.wrapText) attrs.wrapText = 1;\n if (a.textRotation !== undefined) attrs.textRotation = a.textRotation;\n if (a.indent !== undefined) attrs.indent = a.indent;\n return { alignment: [{ _attr: attrs }] };\n }\n}\n","/**\n * Default theme for XLSX files — matches Microsoft Office's output structure.\n * Produces xl/theme/theme1.xml that Excel accepts without repair warnings.\n *\n * The theme XML is completely static — identical for every XLSX file.\n * Pre-serialized as a string constant to avoid building the IXmlableObject\n * tree and re-serializing on every compile.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\n// Pre-serialized theme XML. Generated once via xml(buildThemeObj()) and inlined.\n// To regenerate: run `pnpm tsx scripts/gen-theme.ts` from packages/xlsx.\nconst THEME_XML =\n '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"5B9BD5\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"4472C4\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:majorFont><a:minorFont><a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"102000\"/><a:satMod val=\"103000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"100000\"/><a:satMod val=\"110000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" algn=\"ctr\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"102000\"/><a:satMod val=\"150000\"/><a:tint val=\"93000\"/><a:shade val=\"98000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"103000\"/><a:satMod val=\"130000\"/><a:tint val=\"98000\"/><a:shade val=\"90000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"120000\"/><a:shade val=\"63000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>';\n\nexport class DefaultTheme extends BaseXmlComponent {\n public constructor() {\n super(\"a:theme\");\n }\n\n /** Return pre-cached static theme XML — zero allocation. */\n public override toXml(_context: Context): string {\n return THEME_XML;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n // Re-expose the static XML as an IXmlableObject for backward compatibility.\n // This is only used if someone calls prepForXml() directly.\n return {\n \"a:theme\": [\n {\n _attr: {\n \"xmlns:a\": \"http://schemas.openxmlformats.org/drawingml/2006/main\",\n name: \"Office Theme\",\n },\n },\n ],\n };\n }\n}\n","/**\n * Workbook component — generates xl/workbook.xml.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\nexport interface SheetDefinition {\n readonly name: string;\n readonly sheetId: number;\n readonly rId: string;\n readonly state?: \"visible\" | \"hidden\" | \"veryHidden\";\n}\n\nexport class WorkbookXml extends BaseXmlComponent {\n private readonly sheets: readonly SheetDefinition[];\n\n public constructor(sheets: readonly SheetDefinition[]) {\n super(\"workbook\");\n this.sheets = sheets;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const sheetElements: IXmlableObject[] = [];\n for (const s of this.sheets) {\n const attrs: Record<string, string> = {\n name: s.name,\n sheetId: String(s.sheetId),\n \"r:id\": s.rId,\n };\n if (s.state && s.state !== \"visible\") {\n attrs.state = s.state;\n }\n sheetElements.push({ sheet: { _attr: attrs } });\n }\n\n return {\n workbook: [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n },\n { sheets: sheetElements },\n ],\n };\n }\n}\n","import type { SharedStrings } from \"@file/shared-strings\";\nimport type { Styles, StyleOptions } from \"@file/styles\";\n/**\n * Worksheet component — generates xl/worksheets/sheet{n}.xml.\n *\n * @module\n */\nimport { IgnoreIfEmptyXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\nimport type { ChartSpaceOptions } from \"@office-open/core\";\nimport { attrs, escapeXml, selfCloseElement } from \"@office-open/xml\";\n\nexport interface ColumnOptions {\n readonly min: number;\n readonly max: number;\n readonly width?: number;\n readonly hidden?: boolean;\n readonly customWidth?: boolean;\n}\n\nexport interface RowOptions {\n readonly cells?: readonly CellOptions[];\n readonly height?: number;\n readonly hidden?: boolean;\n readonly rowNumber?: number;\n}\n\nexport interface CellOptions {\n readonly value?: string | number | boolean | Date | null;\n readonly reference?: string;\n /** Direct style index (for pre-resolved styles) */\n readonly styleIndex?: number;\n /** Style options (resolved to index at compile time) */\n readonly style?: StyleOptions;\n}\n\nexport interface MergeCellOptions {\n readonly from: { readonly row: number; readonly col: number };\n readonly to: { readonly row: number; readonly col: number };\n}\n\nexport interface FreezePaneOptions {\n /** Row split position (1-based, freezes rows above) */\n readonly row?: number;\n /** Column split position (1-based, freezes columns to the left) */\n readonly col?: number;\n}\n\nexport interface WorksheetImageOptions {\n readonly data: Uint8Array;\n readonly type: \"png\" | \"jpeg\" | \"jpg\";\n readonly col: number;\n readonly row: number;\n}\n\nexport interface WorksheetChartOptions extends ChartSpaceOptions {\n /** 1-based column position for the chart */\n readonly col: number;\n /** 1-based row position for the chart */\n readonly row: number;\n}\n\nexport type DataValidationType =\n | \"none\"\n | \"whole\"\n | \"decimal\"\n | \"list\"\n | \"date\"\n | \"time\"\n | \"textLength\"\n | \"custom\";\nexport type DataValidationOperator =\n | \"between\"\n | \"notBetween\"\n | \"equal\"\n | \"notEqual\"\n | \"greaterThan\"\n | \"lessThan\"\n | \"greaterThanOrEqual\"\n | \"lessThanOrEqual\";\n\nexport interface DataValidationOptions {\n /** Cell range, e.g. \"A1:A10\" */\n readonly sqref: string;\n readonly type?: DataValidationType;\n readonly operator?: DataValidationOperator;\n readonly formula1?: string;\n readonly formula2?: string;\n readonly allowBlank?: boolean;\n readonly showErrorMessage?: boolean;\n readonly errorTitle?: string;\n readonly error?: string;\n readonly showInputMessage?: boolean;\n readonly promptTitle?: string;\n readonly prompt?: string;\n}\n\nexport type ConditionalFormatType =\n | \"cellIs\"\n | \"containsText\"\n | \"expression\"\n | \"top10\"\n | \"aboveAverage\";\nexport type ConditionalFormatOperator =\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"equal\"\n | \"notEqual\"\n | \"greaterThanOrEqual\"\n | \"greaterThan\"\n | \"between\"\n | \"notBetween\"\n | \"containsText\"\n | \"notContains\"\n | \"beginsWith\"\n | \"endsWith\";\n\nexport interface ConditionalFormatRule {\n readonly type: ConditionalFormatType;\n readonly operator?: ConditionalFormatOperator;\n /** Formula(s) — up to 3 */\n readonly formulas?: readonly string[];\n readonly priority?: number;\n /** Reference to a dxf (differential format) in the styles table */\n readonly dxfId?: number;\n}\n\nexport interface ConditionalFormatOptions {\n /** Cell range, e.g. \"A1:A10\" */\n readonly sqref: string;\n readonly rules: readonly ConditionalFormatRule[];\n}\n\nexport interface WorksheetOptions {\n readonly name?: string;\n readonly children?: readonly RowOptions[];\n readonly columns?: readonly ColumnOptions[];\n readonly mergeCells?: readonly MergeCellOptions[];\n readonly freezePanes?: FreezePaneOptions;\n /** Auto-filter range, e.g. \"A1:D10\" */\n readonly autoFilter?: string;\n readonly images?: readonly WorksheetImageOptions[];\n readonly charts?: readonly WorksheetChartOptions[];\n readonly dataValidations?: readonly DataValidationOptions[];\n readonly conditionalFormats?: readonly ConditionalFormatOptions[];\n}\n\nexport class Worksheet extends IgnoreIfEmptyXmlComponent {\n private readonly rows: readonly RowOptions[];\n private readonly columns: readonly ColumnOptions[];\n private readonly mergeCells: readonly MergeCellOptions[];\n private readonly freezePanes?: FreezePaneOptions;\n private readonly autoFilter?: string;\n private readonly images: readonly WorksheetImageOptions[];\n private readonly chartOptions: readonly WorksheetChartOptions[];\n private readonly dataValidations: readonly DataValidationOptions[];\n private readonly conditionalFormats: readonly ConditionalFormatOptions[];\n\n public constructor(options: WorksheetOptions) {\n super(\"worksheet\");\n this.rows = options.children ?? [];\n this.columns = options.columns ?? [];\n this.mergeCells = options.mergeCells ?? [];\n this.freezePanes = options.freezePanes;\n this.autoFilter = options.autoFilter;\n this.images = options.images ?? [];\n this.chartOptions = options.charts ?? [];\n this.dataValidations = options.dataValidations ?? [];\n this.conditionalFormats = options.conditionalFormats ?? [];\n }\n\n public get imageOptions(): readonly WorksheetImageOptions[] {\n return this.images;\n }\n\n public get charts(): readonly WorksheetChartOptions[] {\n return this.chartOptions;\n }\n\n public override prepForXml(context: Context): IXmlableObject | undefined {\n const fileData = context.fileData as\n | { sharedStrings?: SharedStrings; styles?: Styles }\n | undefined;\n const sharedStrings = fileData?.sharedStrings;\n const styles = fileData?.styles;\n\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n \"xmlns:r\": \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n },\n },\n ];\n\n // Sheet views (freeze panes) — must come before cols per XSD sequence\n if (this.freezePanes) {\n const fp = this.freezePanes;\n const ySplit = fp.row ? fp.row : 0;\n const xSplit = fp.col ? fp.col : 0;\n const topRow = fp.row ? fp.row + 1 : 1;\n const leftCol = fp.col ? fp.col + 1 : 1;\n const topLeftCell = this.defaultCellRef(topRow, leftCol);\n const attr: Record<string, string | number> = {\n ySplit,\n xSplit,\n topLeftCell,\n activePane:\n ySplit > 0 && xSplit > 0 ? \"bottomRight\" : ySplit > 0 ? \"bottomLeft\" : \"topRight\",\n state: \"frozen\",\n };\n children.push({\n sheetViews: [\n {\n sheetView: [\n { _attr: { tabSelected: 1, workbookViewId: 0 } },\n { pane: { _attr: attr } },\n ],\n },\n ],\n });\n }\n\n // Column definitions (after sheetViews, before sheetData)\n if (this.columns.length > 0) {\n const colElements: IXmlableObject[] = [];\n for (const col of this.columns) {\n const colAttrs: Record<string, string | number> = {\n min: col.min,\n max: col.max,\n };\n if (col.width !== undefined) {\n colAttrs.width = col.width;\n colAttrs.customWidth = 1;\n }\n if (col.hidden) {\n colAttrs.hidden = 1;\n }\n colElements.push({ col: { _attr: colAttrs } });\n }\n children.push({ cols: colElements });\n }\n\n // Sheet data (rows + cells)\n const sheetDataChildren: IXmlableObject[] = [];\n for (let i = 0; i < this.rows.length; i++) {\n const rowOpts = this.rows[i];\n const rowNumber = rowOpts.rowNumber ?? i + 1;\n const rowAttrs: Record<string, string | number> = { r: rowNumber };\n if (rowOpts.height !== undefined) {\n rowAttrs.ht = rowOpts.height;\n rowAttrs.customHeight = 1;\n }\n if (rowOpts.hidden) {\n rowAttrs.hidden = 1;\n }\n\n const cellElements: IXmlableObject[] = [];\n if (rowOpts.cells) {\n for (let j = 0; j < rowOpts.cells.length; j++) {\n const cell = rowOpts.cells[j];\n const ref = cell.reference ?? this.defaultCellRef(rowNumber, j + 1);\n const cellObj = this.buildCell(ref, cell, sharedStrings, styles);\n if (cellObj) cellElements.push(cellObj);\n }\n }\n\n sheetDataChildren.push({ row: [{ _attr: rowAttrs }, ...cellElements] });\n }\n\n children.push({ sheetData: sheetDataChildren });\n\n // Auto filter (after sheetData, before mergeCells — per XSD sequence)\n if (this.autoFilter) {\n children.push({ autoFilter: { _attr: { ref: this.autoFilter } } });\n }\n\n // Merge cells (after autoFilter)\n if (this.mergeCells.length > 0) {\n const mergeElements: IXmlableObject[] = [{ _attr: { count: this.mergeCells.length } }];\n for (const mc of this.mergeCells) {\n const fromRef = this.defaultCellRef(mc.from.row, mc.from.col);\n const toRef = this.defaultCellRef(mc.to.row, mc.to.col);\n mergeElements.push({\n mergeCell: { _attr: { ref: `${fromRef}:${toRef}` } },\n });\n }\n children.push({ mergeCells: mergeElements });\n }\n\n // Conditional formatting (after autoFilter, before dataValidations)\n if (this.conditionalFormats.length > 0) {\n for (const cf of this.conditionalFormats) {\n const rules: IXmlableObject[] = [];\n for (let ri = 0; ri < cf.rules.length; ri++) {\n const rule = cf.rules[ri];\n const ruleAttrs: Record<string, string | number> = {\n type: rule.type,\n priority: rule.priority ?? ri + 1,\n };\n if (rule.operator) ruleAttrs.operator = rule.operator;\n if (rule.dxfId !== undefined) ruleAttrs.dxfId = rule.dxfId;\n\n const ruleChildren: IXmlableObject[] = [{ _attr: ruleAttrs }];\n\n if (rule.formulas) {\n for (const f of rule.formulas) {\n ruleChildren.push({ formula: [f] });\n }\n }\n rules.push({ cfRule: ruleChildren });\n }\n children.push({ conditionalFormatting: [{ _attr: { sqref: cf.sqref } }, ...rules] });\n }\n }\n\n // Data validations (after conditionalFormatting)\n if (this.dataValidations.length > 0) {\n const dvElements: IXmlableObject[] = [{ _attr: { count: this.dataValidations.length } }];\n for (const dv of this.dataValidations) {\n const dvAttrs: Record<string, string | number> = { sqref: dv.sqref };\n if (dv.type && dv.type !== \"none\") dvAttrs.type = dv.type;\n if (dv.operator) dvAttrs.operator = dv.operator;\n if (dv.allowBlank) dvAttrs.allowBlank = 1;\n if (dv.showErrorMessage) dvAttrs.showErrorMessage = 1;\n if (dv.showInputMessage) dvAttrs.showInputMessage = 1;\n if (dv.errorTitle) dvAttrs.errorTitle = dv.errorTitle;\n if (dv.error) dvAttrs.error = dv.error;\n if (dv.promptTitle) dvAttrs.promptTitle = dv.promptTitle;\n if (dv.prompt) dvAttrs.prompt = dv.prompt;\n\n const dvChildren: IXmlableObject[] = [{ _attr: dvAttrs }];\n if (dv.formula1 !== undefined) dvChildren.push({ formula1: [dv.formula1] });\n if (dv.formula2 !== undefined) dvChildren.push({ formula2: [dv.formula2] });\n dvElements.push({ dataValidation: dvChildren });\n }\n children.push({ dataValidations: dvElements });\n }\n\n return { worksheet: children };\n }\n\n /**\n * Zero-allocation fast path: directly concatenate XML string.\n * Bypasses the IXmlableObject intermediate tree entirely.\n */\n public override toXml(context: Context): string {\n const fileData = context.fileData as\n | { sharedStrings?: SharedStrings; styles?: Styles }\n | undefined;\n const sharedStrings = fileData?.sharedStrings;\n const styles = fileData?.styles;\n\n const p: string[] = [\n '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">',\n ];\n\n // Sheet views (freeze panes)\n if (this.freezePanes) {\n const fp = this.freezePanes;\n const ySplit = fp.row ? fp.row : 0;\n const xSplit = fp.col ? fp.col : 0;\n const topRow = fp.row ? fp.row + 1 : 1;\n const leftCol = fp.col ? fp.col + 1 : 1;\n const topLeftCell = this.defaultCellRef(topRow, leftCol);\n const activePane =\n ySplit > 0 && xSplit > 0 ? \"bottomRight\" : ySplit > 0 ? \"bottomLeft\" : \"topRight\";\n p.push(\n '<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\">',\n `<pane ySplit=\"${ySplit}\" xSplit=\"${xSplit}\" topLeftCell=\"${topLeftCell}\" activePane=\"${activePane}\" state=\"frozen\"/>`,\n \"</sheetView></sheetViews>\",\n );\n }\n\n // Column definitions\n if (this.columns.length > 0) {\n p.push(\"<cols>\");\n for (const col of this.columns) {\n const colAttrs: Record<string, string | number | boolean | undefined> = {\n min: col.min,\n max: col.max,\n };\n if (col.width !== undefined) {\n colAttrs.width = col.width;\n colAttrs.customWidth = 1;\n }\n if (col.hidden) {\n colAttrs.hidden = 1;\n }\n p.push(selfCloseElement(\"col\", attrs(colAttrs)));\n }\n p.push(\"</cols>\");\n }\n\n // Sheet data (rows + cells) — the hot path\n p.push(\"<sheetData>\");\n for (let i = 0; i < this.rows.length; i++) {\n const rowOpts = this.rows[i];\n const rowNumber = rowOpts.rowNumber ?? i + 1;\n const rowAttrs: Record<string, string | number | boolean | undefined> = { r: rowNumber };\n if (rowOpts.height !== undefined) {\n rowAttrs.ht = rowOpts.height;\n rowAttrs.customHeight = 1;\n }\n if (rowOpts.hidden) {\n rowAttrs.hidden = 1;\n }\n\n if (rowOpts.cells) {\n const rowParts: string[] = [];\n for (let j = 0; j < rowOpts.cells.length; j++) {\n const cell = rowOpts.cells[j];\n const ref = cell.reference ?? this.defaultCellRef(rowNumber, j + 1);\n const cellStr = this.buildCellString(ref, cell, sharedStrings, styles);\n if (cellStr) rowParts.push(cellStr);\n }\n p.push(`<row${attrs(rowAttrs)}>`, ...rowParts, \"</row>\");\n } else {\n p.push(`<row${attrs(rowAttrs)}></row>`);\n }\n }\n p.push(\"</sheetData>\");\n\n // Auto filter\n if (this.autoFilter) {\n p.push(selfCloseElement(\"autoFilter\", attrs({ ref: this.autoFilter })));\n }\n\n // Merge cells\n if (this.mergeCells.length > 0) {\n p.push(`<mergeCells count=\"${this.mergeCells.length}\">`);\n for (const mc of this.mergeCells) {\n const fromRef = this.defaultCellRef(mc.from.row, mc.from.col);\n const toRef = this.defaultCellRef(mc.to.row, mc.to.col);\n p.push(selfCloseElement(\"mergeCell\", attrs({ ref: `${fromRef}:${toRef}` })));\n }\n p.push(\"</mergeCells>\");\n }\n\n // Conditional formatting\n if (this.conditionalFormats.length > 0) {\n for (const cf of this.conditionalFormats) {\n p.push(`<conditionalFormatting sqref=\"${cf.sqref}\">`);\n for (let ri = 0; ri < cf.rules.length; ri++) {\n const rule = cf.rules[ri];\n const ruleAttrs: Record<string, string | number | boolean | undefined> = {\n type: rule.type,\n priority: rule.priority ?? ri + 1,\n };\n if (rule.operator) ruleAttrs.operator = rule.operator;\n if (rule.dxfId !== undefined) ruleAttrs.dxfId = rule.dxfId;\n if (rule.formulas && rule.formulas.length > 0) {\n const formulaParts = rule.formulas.map((f) => `<formula>${escapeXml(f)}</formula>`);\n p.push(`<cfRule${attrs(ruleAttrs)}>`, ...formulaParts, \"</cfRule>\");\n } else {\n p.push(selfCloseElement(\"cfRule\", attrs(ruleAttrs)));\n }\n }\n p.push(\"</conditionalFormatting>\");\n }\n }\n\n // Data validations\n if (this.dataValidations.length > 0) {\n p.push(`<dataValidations count=\"${this.dataValidations.length}\">`);\n for (const dv of this.dataValidations) {\n const dvAttrs: Record<string, string | number | boolean | undefined> = { sqref: dv.sqref };\n if (dv.type && dv.type !== \"none\") dvAttrs.type = dv.type;\n if (dv.operator) dvAttrs.operator = dv.operator;\n if (dv.allowBlank) dvAttrs.allowBlank = 1;\n if (dv.showErrorMessage) dvAttrs.showErrorMessage = 1;\n if (dv.showInputMessage) dvAttrs.showInputMessage = 1;\n if (dv.errorTitle) dvAttrs.errorTitle = dv.errorTitle;\n if (dv.error) dvAttrs.error = dv.error;\n if (dv.promptTitle) dvAttrs.promptTitle = dv.promptTitle;\n if (dv.prompt) dvAttrs.prompt = dv.prompt;\n const inner: string[] = [];\n if (dv.formula1 !== undefined) inner.push(`<formula1>${escapeXml(dv.formula1)}</formula1>`);\n if (dv.formula2 !== undefined) inner.push(`<formula2>${escapeXml(dv.formula2)}</formula2>`);\n if (inner.length > 0) {\n p.push(`<dataValidation${attrs(dvAttrs)}>`, ...inner, \"</dataValidation>\");\n } else {\n p.push(selfCloseElement(\"dataValidation\", attrs(dvAttrs)));\n }\n }\n p.push(\"</dataValidations>\");\n }\n\n p.push(\"</worksheet>\");\n return p.join(\"\");\n }\n\n /**\n * Direct string serialization of a single cell — zero intermediate objects.\n */\n private buildCellString(\n ref: string,\n cell: CellOptions,\n sharedStrings?: SharedStrings,\n styles?: Styles,\n ): string {\n const cellAttrs: Record<string, string | number | boolean | undefined> = { r: ref };\n\n // Resolve style\n if (cell.style !== undefined && styles) {\n cellAttrs.s = styles.register(cell.style);\n } else if (cell.styleIndex !== undefined) {\n cellAttrs.s = cell.styleIndex;\n }\n\n const value = cell.value;\n if (value === null || value === undefined) {\n if (cell.styleIndex !== undefined) {\n return selfCloseElement(\"c\", attrs(cellAttrs));\n }\n return \"\";\n }\n\n if (typeof value === \"string\") {\n if (sharedStrings) {\n cellAttrs.t = \"s\";\n const idx = sharedStrings.register(value);\n return `<c${attrs(cellAttrs)}><v>${idx}</v></c>`;\n }\n cellAttrs.t = \"inlineStr\";\n return `<c${attrs(cellAttrs)}><is><t>${escapeXml(value)}</t></is></c>`;\n }\n\n if (typeof value === \"number\") {\n return `<c${attrs(cellAttrs)}><v>${value}</v></c>`;\n }\n\n if (typeof value === \"boolean\") {\n cellAttrs.t = \"b\";\n return `<c${attrs(cellAttrs)}><v>${value ? 1 : 0}</v></c>`;\n }\n\n if (value instanceof Date) {\n const serial = this.dateToSerialNumber(value);\n return `<c${attrs(cellAttrs)}><v>${serial}</v></c>`;\n }\n\n return \"\";\n }\n\n private defaultCellRef(row: number, col: number): string {\n return this.columnToLetter(col) + row;\n }\n\n private columnToLetter(col: number): string {\n let result = \"\";\n let n = col;\n while (n > 0) {\n const remainder = (n - 1) % 26;\n result = String.fromCharCode(65 + remainder) + result;\n n = Math.floor((n - 1) / 26);\n }\n return result;\n }\n\n private buildCell(\n ref: string,\n cell: CellOptions,\n sharedStrings?: SharedStrings,\n styles?: Styles,\n ): IXmlableObject | undefined {\n const attrs: Record<string, string | number> = { r: ref };\n\n // Resolve style: either direct index or register options\n if (cell.style !== undefined && styles) {\n attrs.s = styles.register(cell.style);\n } else if (cell.styleIndex !== undefined) {\n attrs.s = cell.styleIndex;\n }\n\n const value = cell.value;\n if (value === null || value === undefined) {\n if (cell.styleIndex !== undefined) {\n return { c: [{ _attr: attrs }] };\n }\n return undefined;\n }\n\n if (typeof value === \"string\") {\n if (sharedStrings) {\n attrs.t = \"s\";\n const idx = sharedStrings.register(value);\n return { c: [{ _attr: attrs }, { v: [idx] }] };\n }\n // Fallback: inline string\n attrs.t = \"inlineStr\";\n return { c: [{ _attr: attrs }, { is: [{ t: [value] }] }] };\n }\n\n if (typeof value === \"number\") {\n return { c: [{ _attr: attrs }, { v: [value] }] };\n }\n\n if (typeof value === \"boolean\") {\n attrs.t = \"b\";\n return { c: [{ _attr: attrs }, { v: [value ? 1 : 0] }] };\n }\n\n if (value instanceof Date) {\n const serial = this.dateToSerialNumber(value);\n return { c: [{ _attr: attrs }, { v: [serial] }] };\n }\n\n return undefined;\n }\n\n private dateToSerialNumber(date: Date): number {\n const epoch = new Date(1899, 11, 30);\n const msPerDay = 86400000;\n return (date.getTime() - epoch.getTime()) / msPerDay;\n }\n}\n","import { ContentTypes } from \"@file/content-types\";\nimport { CoreProperties, type CorePropertiesOptions } from \"@file/core-properties\";\nimport { Media } from \"@file/media/media\";\nimport { SharedStrings } from \"@file/shared-strings\";\nimport { Styles } from \"@file/styles\";\nimport { DefaultTheme } from \"@file/theme\";\nimport { WorkbookXml, type SheetDefinition } from \"@file/workbook\";\nimport { Worksheet, type WorksheetOptions } from \"@file/worksheet\";\n/**\n * File class (exported as Workbook) — the top-level container for XLSX documents.\n *\n * @module\n */\nimport { AppProperties, ChartCollection, Relationships } from \"@office-open/core\";\n\nexport interface WorkbookOptions extends CorePropertiesOptions {\n readonly worksheets?: readonly WorksheetOptions[];\n}\n\nexport class File {\n private readonly worksheetOptions: readonly WorksheetOptions[];\n private readonly corePropsOptions: CorePropertiesOptions;\n\n // Lazy components\n private _coreProperties?: CoreProperties;\n private _appProperties?: AppProperties;\n private _contentTypes?: ContentTypes;\n private _styles?: Styles;\n private _theme?: DefaultTheme;\n private _workbookXml?: WorkbookXml;\n private _worksheets?: Worksheet[];\n private _sharedStrings?: SharedStrings;\n private _media?: Media;\n private _fileRels?: Relationships;\n private _workbookRels?: Relationships;\n private _charts?: ChartCollection;\n\n public constructor(options: WorkbookOptions) {\n this.worksheetOptions = options.worksheets ?? [];\n this.corePropsOptions = options;\n }\n\n // ── Lazy getters ──\n\n public get coreProperties(): CoreProperties {\n return (this._coreProperties ??= new CoreProperties(this.corePropsOptions));\n }\n\n public get appProperties(): AppProperties {\n return (this._appProperties ??= new AppProperties());\n }\n\n public get contentTypes(): ContentTypes {\n if (!this._contentTypes) {\n this._contentTypes = new ContentTypes();\n for (let i = 0; i < this.worksheetOptions.length; i++) {\n this._contentTypes.addWorksheet(i + 1);\n }\n this._contentTypes.addStyles();\n this._contentTypes.addSharedStrings();\n this._contentTypes.addTheme();\n }\n return this._contentTypes;\n }\n\n public get styles(): Styles {\n return (this._styles ??= new Styles());\n }\n\n public get theme(): DefaultTheme {\n return (this._theme ??= new DefaultTheme());\n }\n\n public get workbookXml(): WorkbookXml {\n if (!this._workbookXml) {\n const sheets: SheetDefinition[] = this.worksheetOptions.map((ws, i) => ({\n name: ws.name ?? `Sheet${i + 1}`,\n sheetId: i + 1,\n rId: `rId${i + 1}`,\n }));\n this._workbookXml = new WorkbookXml(sheets);\n }\n return this._workbookXml;\n }\n\n public get sharedStrings(): SharedStrings {\n return (this._sharedStrings ??= new SharedStrings());\n }\n\n public get media(): Media {\n return (this._media ??= new Media());\n }\n\n public get charts(): ChartCollection {\n return (this._charts ??= new ChartCollection());\n }\n\n public get worksheets(): readonly Worksheet[] {\n if (!this._worksheets) {\n this._worksheets = this.worksheetOptions.map((ws) => new Worksheet(ws));\n }\n return this._worksheets;\n }\n\n public get fileRelationships(): Relationships {\n if (!this._fileRels) {\n this._fileRels = new Relationships();\n this._fileRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n \"xl/workbook.xml\",\n );\n this._fileRels.addRelationship(\n 2,\n \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n \"docProps/core.xml\",\n );\n this._fileRels.addRelationship(\n 3,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n \"docProps/app.xml\",\n );\n }\n return this._fileRels;\n }\n\n public get workbookRelationships(): Relationships {\n if (!this._workbookRels) {\n this._workbookRels = new Relationships();\n let rid = 1;\n for (let i = 0; i < this.worksheetOptions.length; i++) {\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n `worksheets/sheet${i + 1}.xml`,\n );\n }\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n \"styles.xml\",\n );\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n \"theme/theme1.xml\",\n );\n this._workbookRels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n \"sharedStrings.xml\",\n );\n }\n return this._workbookRels;\n }\n}\n","/**\n * XLSX Drawing component — generates xl/drawings/drawing{n}.xml.\n *\n * Uses the spreadsheetDrawing namespace (default, no prefix) for anchoring\n * images and charts to worksheet cells.\n *\n * @module\n */\nimport { BaseXmlComponent } from \"@file/xml-components\";\nimport type { Context, IXmlableObject } from \"@file/xml-components\";\n\nexport interface ImageOptions {\n /** 1-based column */\n readonly col: number;\n /** Column offset in EMU (default 0) */\n readonly colOffset?: number;\n /** 1-based row */\n readonly row: number;\n /** Row offset in EMU (default 0) */\n readonly rowOffset?: number;\n /** Relationship ID for the image */\n readonly rId: string;\n}\n\nexport interface ChartAnchorOptions {\n /** 1-based column */\n readonly col: number;\n /** Column offset in EMU (default 0) */\n readonly colOffset?: number;\n /** 1-based row */\n readonly row: number;\n /** Row offset in EMU (default 0) */\n readonly rowOffset?: number;\n /** Relationship ID for the chart */\n readonly rId: string;\n}\n\nconst XDR_NS = \"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\";\nconst A_NS = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\nconst R_NS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\nconst C_URI = \"http://schemas.openxmlformats.org/drawingml/2006/chart\";\n\nexport class Drawing extends BaseXmlComponent {\n private readonly images: readonly ImageOptions[];\n private readonly charts: readonly ChartAnchorOptions[];\n\n public constructor(images: readonly ImageOptions[], charts: readonly ChartAnchorOptions[] = []) {\n super(\"wsDr\");\n this.images = images;\n this.charts = charts;\n }\n\n public override prepForXml(_context: Context): IXmlableObject {\n const children: IXmlableObject[] = [\n {\n _attr: {\n xmlns: XDR_NS,\n \"xmlns:a\": A_NS,\n \"xmlns:r\": R_NS,\n },\n },\n ];\n\n let nextId = 1;\n for (const img of this.images) {\n children.push(this.buildImageAnchor(img, nextId++));\n }\n\n for (const chart of this.charts) {\n children.push(this.buildChartAnchor(chart, nextId++));\n }\n\n return { wsDr: children };\n }\n\n private buildFromAnchor(\n col: number,\n row: number,\n colOffset?: number,\n rowOffset?: number,\n ): IXmlableObject {\n return {\n from: [\n { col: [col - 1] },\n { colOff: [colOffset ?? 0] },\n { row: [row - 1] },\n { rowOff: [rowOffset ?? 0] },\n ],\n };\n }\n\n private buildToAnchor(col: number, row: number): IXmlableObject {\n return {\n to: [{ col: [col] }, { colOff: [0] }, { row: [row] }, { rowOff: [0] }],\n };\n }\n\n private buildImageAnchor(img: ImageOptions, id: number): IXmlableObject {\n return {\n twoCellAnchor: [\n { _attr: { editAs: \"oneCell\" } },\n this.buildFromAnchor(img.col, img.row, img.colOffset, img.rowOffset),\n this.buildToAnchor(img.col, img.row),\n {\n pic: [\n {\n nvPicPr: [\n { cNvPr: { _attr: { id, name: `Picture ${id}` } } },\n { cNvPicPr: [{ _attr: { preferRelativeResize: 1 } }] },\n ],\n },\n {\n blipFill: [\n { \"a:blip\": { _attr: { \"r:embed\": img.rId } } },\n { \"a:stretch\": [{ \"a:fillRect\": [] }] },\n ],\n },\n {\n spPr: [\n {\n \"a:xfrm\": [\n { \"a:off\": { _attr: { x: 0, y: 0 } } },\n { \"a:ext\": { _attr: { cx: 400000, cy: 300000 } } },\n ],\n },\n { \"a:prstGeom\": [{ _attr: { prst: \"rect\" } }, { \"a:avLst\": [] }] },\n ],\n },\n ],\n },\n { clientData: [] },\n ],\n };\n }\n\n private buildChartAnchor(chart: ChartAnchorOptions, id: number): IXmlableObject {\n return {\n twoCellAnchor: [\n { _attr: { editAs: \"oneCell\" } },\n this.buildFromAnchor(chart.col, chart.row, chart.colOffset, chart.rowOffset),\n this.buildToAnchor(chart.col + 8, chart.row + 15),\n {\n graphicFrame: [\n {\n nvGraphicFramePr: [\n { cNvPr: { _attr: { id, name: `Chart ${id}` } } },\n { cNvGraphicFramePr: [{ \"a:graphicFrameLocks\": { _attr: { noGrp: 1 } } }] },\n ],\n },\n {\n xfrm: [\n { \"a:off\": { _attr: { x: 0, y: 0 } } },\n { \"a:ext\": { _attr: { cx: 0, cy: 0 } } },\n ],\n },\n {\n \"a:graphic\": [\n {\n \"a:graphicData\": [\n { _attr: { uri: C_URI } },\n {\n \"c:chart\": {\n _attr: {\n \"xmlns:c\": \"http://schemas.openxmlformats.org/drawingml/2006/chart\",\n \"xmlns:r\": R_NS,\n \"r:id\": chart.rId,\n },\n },\n },\n ],\n },\n ],\n },\n ],\n },\n { clientData: [] },\n ],\n };\n }\n}\n","/**\n * XLSX Compiler — compiles a File object into a Zippable structure.\n *\n * @module\n */\nimport { Formatter } from \"@export/formatter\";\nimport { Drawing, type ImageOptions, type ChartAnchorOptions } from \"@file/drawing/drawing\";\nimport type { File } from \"@file/file\";\nimport type { Context } from \"@file/xml-components\";\nimport {\n ChartSpace,\n Relationships,\n compileMapping,\n type XmlifyedFile,\n type Zippable,\n} from \"@office-open/core\";\n\nexport class Compiler {\n private readonly formatter = new Formatter();\n\n public compile(file: File, overrides: readonly XmlifyedFile[] = []): Zippable {\n const context: Context = { fileData: file, stack: [] };\n const f = this.formatter;\n\n const mapping: Record<string, { data: string; path: string }> = {};\n\n const fmt = (component: any, declaration?: boolean | object) =>\n f.formatToXml(component, context, declaration);\n\n // Core properties\n mapping[\"Properties\"] = {\n data: fmt(file.coreProperties, true),\n path: \"docProps/core.xml\",\n };\n\n // App properties\n mapping[\"AppProperties\"] = {\n data: fmt(file.appProperties, true),\n path: \"docProps/app.xml\",\n };\n\n // File-level relationships (_rels/.rels)\n mapping[\"FileRelationships\"] = {\n data: fmt(file.fileRelationships),\n path: \"_rels/.rels\",\n };\n\n // Workbook\n mapping[\"Workbook\"] = {\n data: fmt(file.workbookXml, true),\n path: \"xl/workbook.xml\",\n };\n\n // Workbook relationships\n mapping[\"WorkbookRelationships\"] = {\n data: fmt(file.workbookRelationships),\n path: \"xl/_rels/workbook.xml.rels\",\n };\n\n // Worksheets — formatted BEFORE SharedStrings so strings are registered\n const worksheets = file.worksheets;\n let globalMediaIdx = 0;\n let globalChartIdx = 0;\n\n for (let i = 0; i < worksheets.length; i++) {\n const ws = worksheets[i];\n const imgOpts = ws.imageOptions;\n const chartOpts = ws.charts;\n\n // Worksheet uses toXml() fast path (zero-allocation string concat)\n let sheetXml = fmt(ws, true);\n\n const hasMedia = imgOpts.length > 0 || chartOpts.length > 0;\n\n if (hasMedia) {\n const drawingImages: ImageOptions[] = [];\n const drawingCharts: ChartAnchorOptions[] = [];\n const drawingRels = new Relationships();\n let rid = 1;\n\n // Process images\n for (const img of imgOpts) {\n const mediaKey = `image_${globalMediaIdx}`;\n const ext = img.type === \"jpeg\" || img.type === \"jpg\" ? \"jpeg\" : \"png\";\n file.media.addImage(mediaKey, {\n fileName: `image${globalMediaIdx + 1}.${ext}`,\n type: ext,\n data: img.data,\n width: 0,\n height: 0,\n });\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/image${globalMediaIdx + 1}.${ext}`,\n );\n\n drawingImages.push({\n col: img.col,\n row: img.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalMediaIdx++;\n }\n\n // Process charts\n for (const chart of chartOpts) {\n const chartKey = `chart_${globalChartIdx}`;\n file.charts.addChart(chartKey, {\n key: chartKey,\n chartSpace: new ChartSpace(chart),\n });\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${globalChartIdx + 1}.xml`,\n );\n\n drawingCharts.push({\n col: chart.col,\n row: chart.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalChartIdx++;\n }\n\n // Generate drawing XML\n const drawing = new Drawing(drawingImages, drawingCharts);\n const drawingIdx = i + 1;\n mapping[`Drawing${i}`] = {\n data: fmt(drawing, true),\n path: `xl/drawings/drawing${drawingIdx}.xml`,\n };\n\n // Drawing relationships\n mapping[`DrawingRels${i}`] = {\n data: fmt(drawingRels),\n path: `xl/drawings/_rels/drawing${drawingIdx}.xml.rels`,\n };\n\n // Insert drawing reference before the closing </worksheet> tag.\n // Use slice instead of replace to avoid O(n) full-string scan.\n const closingTag = \"</worksheet>\";\n sheetXml =\n sheetXml.slice(0, -closingTag.length) + `<drawing r:id=\"rId${rid}\"/>` + closingTag;\n\n // Worksheet needs its own rels for drawing reference\n const wsRels = new Relationships();\n wsRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n `../drawings/drawing${drawingIdx}.xml`,\n );\n mapping[`WorksheetRels${i}`] = {\n data: fmt(wsRels),\n path: `xl/worksheets/_rels/sheet${i + 1}.xml.rels`,\n };\n\n file.contentTypes.addDrawing(drawingIdx);\n }\n\n mapping[`Worksheet${i}`] = {\n data: sheetXml,\n path: `xl/worksheets/sheet${i + 1}.xml`,\n };\n }\n\n // Shared Strings — AFTER worksheets so all strings are collected\n const sharedStrings = file.sharedStrings;\n if (sharedStrings.count > 0) {\n mapping[\"SharedStrings\"] = {\n data: fmt(sharedStrings, true),\n path: \"xl/sharedStrings.xml\",\n };\n }\n\n // Styles\n mapping[\"Styles\"] = {\n data: fmt(file.styles, true),\n path: \"xl/styles.xml\",\n };\n\n // Theme\n mapping[\"Theme\"] = {\n data: fmt(file.theme, true),\n path: \"xl/theme/theme1.xml\",\n };\n\n // Charts — AFTER worksheets so charts are registered\n for (let i = 0; i < file.charts.array.length; i++) {\n const chartData = file.charts.array[i];\n mapping[`Chart${i}`] = {\n data: fmt(chartData.chartSpace, true),\n path: `xl/charts/chart${i + 1}.xml`,\n };\n file.contentTypes.addChart(i + 1);\n }\n\n // Content Types — must be last\n mapping[\"ContentTypes\"] = {\n data: fmt(file.contentTypes),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable\n const mediaFiles = file.media.array.map((img) => ({\n data: img.data,\n path: `xl/media/${img.fileName}`,\n }));\n\n return compileMapping(mapping, overrides, mediaFiles);\n }\n}\n","import type { File } from \"@file/file\";\n/**\n * Packer module — export API for XLSX files.\n *\n * @module\n */\nimport { createPacker, OoxmlMimeType } from \"@office-open/core\";\n\nimport { Compiler } from \"./next-compiler\";\n\nconst compiler = new Compiler();\n\nexport const Packer = createPacker<File>({\n compile: (file, overrides) => compiler.compile(file, overrides),\n mimeType: OoxmlMimeType.XLSX,\n});\n","/**\n * Convert a 1-based column number to Excel column letter(s).\n * 1 → \"A\", 26 → \"Z\", 27 → \"AA\", 28 → \"AB\"\n */\nexport function columnToLetter(col: number): string {\n let result = \"\";\n let n = col;\n while (n > 0) {\n const remainder = (n - 1) % 26;\n result = String.fromCharCode(65 + remainder) + result;\n n = Math.floor((n - 1) / 26);\n }\n return result;\n}\n\n/**\n * Convert Excel column letter(s) to a 1-based column number.\n * \"A\" → 1, \"Z\" → 26, \"AA\" → 27\n */\nexport function letterToColumn(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n result = result * 26 + (s.charCodeAt(i) - 64);\n }\n return result;\n}\n\n/**\n * Convert a JavaScript Date to an Excel serial number.\n * Excel epoch: January 1, 1900 = 1 (with the 1900 leap year bug).\n */\nexport function dateToSerialNumber(date: Date): number {\n // Excel treats 1900 as a leap year (bug inherited from Lotus 1-2-3).\n // The epoch is effectively December 30, 1899 = 0.\n const epoch = new Date(1899, 11, 30);\n const msPerDay = 86400000;\n const diff = date.getTime() - epoch.getTime();\n return diff / msPerDay;\n}\n","/**\n * XLSX parsing — parse .xlsx files into structured data.\n *\n * @module\n */\nimport { parseArchive, parseCorePropsElement } from \"@office-open/core\";\nimport type { ParsedArchive } from \"@office-open/core\";\nimport type { Element } from \"@office-open/xml\";\nimport { attr, attrNum, findChild, textOf } from \"@office-open/xml\";\nimport { toUint8Array } from \"undio\";\nimport type { DataType } from \"undio\";\n\nimport type { WorkbookOptions } from \"./file/file\";\nimport type {\n WorksheetOptions,\n RowOptions,\n CellOptions,\n ColumnOptions,\n MergeCellOptions,\n} from \"./file/worksheet\";\nimport { letterToColumn } from \"./util\";\n\nexport { parseArchive };\n\n// ── Low-level parse result ──\n\nexport interface XlsxPartRefs {\n worksheets: string[];\n charts: string[];\n media: string[];\n drawings: string[];\n}\n\nexport interface XlsxDocument {\n doc: ParsedArchive;\n /** xl/workbook.xml root element */\n workbook?: Element;\n /** Worksheet paths (xl/worksheets/sheet{n}.xml) */\n worksheets: string[];\n /** xl/styles.xml root element */\n styles?: Element;\n /** xl/sharedStrings.xml root element */\n sharedStrings?: Element;\n partRefs: XlsxPartRefs;\n /** docProps/core.xml path */\n coreProps?: string;\n /** docProps/app.xml path */\n appProps?: string;\n}\n\nfunction sortByNumber(paths: string[]): string[] {\n return paths.sort((a, b) => {\n const numA = parseInt(a.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n const numB = parseInt(b.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n return numA - numB;\n });\n}\n\n/**\n * Parse raw .xlsx data into a low-level XlsxDocument.\n */\nexport function parseXlsx(data: DataType): XlsxDocument {\n const uint8 = toUint8Array(data);\n const doc = parseArchive(uint8);\n\n const workbook = doc.get(\"xl/workbook.xml\");\n const styles = doc.get(\"xl/styles.xml\");\n const sharedStrings = doc.get(\"xl/sharedStrings.xml\");\n\n // Resolve worksheet paths from workbook rels\n const worksheets: string[] = [];\n const charts: string[] = [];\n const drawings: string[] = [];\n const media: string[] = [];\n\n const wbRels = doc.get(\"xl/_rels/workbook.xml.rels\");\n if (wbRels) {\n for (const child of wbRels.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n if (type.includes(\"/worksheet\")) {\n worksheets.push(target.startsWith(\"/\") ? target.slice(1) : `xl/${target}`);\n }\n }\n }\n sortByNumber(worksheets);\n\n // Scan for drawings, charts, media\n drawings.push(...doc.keys(\"xl/drawings/\").filter((k) => k.endsWith(\".xml\")));\n charts.push(...doc.keys(\"xl/charts/\").filter((k) => k.endsWith(\".xml\")));\n media.push(...doc.keys(\"xl/media/\"));\n sortByNumber(drawings);\n sortByNumber(charts);\n\n // Root rels → core/app props\n let coreProps: string | undefined;\n let appProps: string | undefined;\n const rootRels = doc.get(\"_rels/.rels\");\n if (rootRels) {\n for (const child of rootRels.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (type.includes(\"/core-properties\")) coreProps = target;\n else if (type.includes(\"/extended-properties\")) appProps = target;\n }\n }\n\n return {\n doc,\n workbook,\n worksheets,\n styles,\n sharedStrings,\n partRefs: { worksheets, charts, media, drawings },\n coreProps,\n appProps,\n };\n}\n\n// ── Shared strings helper ──\n\nfunction parseSharedStrings(el: Element | undefined): string[] {\n if (!el) return [];\n const strings: string[] = [];\n for (const si of el.elements ?? []) {\n if (si.name !== \"si\") continue;\n // Handle both <si><t>text</t></si> and <si><r><t>text</t></r>...</si>\n const t = findChild(si, \"t\");\n if (t) {\n strings.push(textOf(t) ?? \"\");\n } else {\n // Rich text: concatenate all <r><t> segments\n const parts: string[] = [];\n for (const r of si.elements ?? []) {\n if (r.name !== \"r\") continue;\n const rt = findChild(r, \"t\");\n if (rt) parts.push(textOf(rt) ?? \"\");\n }\n strings.push(parts.join(\"\"));\n }\n }\n return strings;\n}\n\n// ── Cell reference helpers ──\n\nfunction colFromRef(ref: string): number {\n const match = ref.match(/^([A-Z]+)/);\n return match ? letterToColumn(match[1]) : 1;\n}\n\nfunction rowFromRef(ref: string): number {\n const match = ref.match(/(\\d+)$/);\n return match ? parseInt(match[1], 10) : 1;\n}\n\n// ── Worksheet parsing ──\n\nfunction parseWorksheetElement(wsEl: Element, strings: string[]): WorksheetOptions {\n const opts: Record<string, unknown> = {};\n\n // Sheet name from the parent workbook's sheet element (not available here)\n // Caller should set it\n\n // Columns\n // Elements might be prefixed or unprefixed depending on how the XML parser handles default namespaces.\n const colsEl = findChild(wsEl, \"cols\") ?? findChildByLocalName(wsEl, \"cols\");\n if (colsEl) {\n const columns: ColumnOptions[] = [];\n for (const col of colsEl.elements ?? []) {\n if (localName(col) !== \"col\") continue;\n const min = attrNum(col, \"min\");\n const max = attrNum(col, \"max\");\n if (min === undefined || max === undefined) continue;\n const colOpts: Record<string, unknown> = { min, max };\n const width = attrNum(col, \"width\");\n if (width !== undefined) colOpts.width = width;\n if (attr(col, \"hidden\") === \"1\") colOpts.hidden = true;\n columns.push(colOpts as unknown as ColumnOptions);\n }\n if (columns.length > 0) opts.columns = columns;\n }\n\n // Freeze panes\n const sheetViews = findChildByLocalName(wsEl, \"sheetViews\");\n if (sheetViews) {\n const sheetView = findChildByLocalName(sheetViews, \"sheetView\");\n if (sheetView) {\n const pane = findChildByLocalName(sheetView, \"pane\");\n if (pane) {\n const state = attr(pane, \"state\");\n if (state === \"frozen\") {\n const freezePanes: Record<string, unknown> = {};\n const ySplit = attrNum(pane, \"ySplit\");\n const xSplit = attrNum(pane, \"xSplit\");\n if (ySplit && ySplit > 0) freezePanes.row = ySplit;\n if (xSplit && xSplit > 0) freezePanes.col = xSplit;\n if (Object.keys(freezePanes).length > 0) opts.freezePanes = freezePanes;\n }\n }\n }\n }\n\n // Sheet data (rows)\n const sheetData = findChildByLocalName(wsEl, \"sheetData\");\n const rows: RowOptions[] = [];\n if (sheetData) {\n for (const rowEl of sheetData.elements ?? []) {\n if (localName(rowEl) !== \"row\") continue;\n const rowNumber = attrNum(rowEl, \"r\");\n const rowOpts: Record<string, unknown> = {};\n if (rowNumber !== undefined) rowOpts.rowNumber = rowNumber;\n\n const ht = attrNum(rowEl, \"ht\");\n if (ht !== undefined) rowOpts.height = ht;\n if (attr(rowEl, \"hidden\") === \"1\") rowOpts.hidden = true;\n\n const cells: CellOptions[] = [];\n for (const cellEl of rowEl.elements ?? []) {\n if (localName(cellEl) !== \"c\") continue;\n const ref = attr(cellEl, \"r\");\n const type = attr(cellEl, \"t\");\n const cellOpts: Record<string, unknown> = {};\n if (ref) cellOpts.reference = ref;\n\n const styleIdx = attrNum(cellEl, \"s\");\n if (styleIdx !== undefined) cellOpts.styleIndex = styleIdx;\n\n // Cell value\n const vEl = findChildByLocalName(cellEl, \"v\");\n const isEl = findChildByLocalName(cellEl, \"is\");\n\n if (type === \"s\" && vEl) {\n // Shared string\n const idx = parseInt(textOf(vEl) ?? \"\", 10);\n cellOpts.value = strings[idx] ?? \"\";\n } else if (type === \"b\" && vEl) {\n cellOpts.value = textOf(vEl) === \"1\";\n } else if (type === \"inlineStr\" && isEl) {\n const t = findChildByLocalName(isEl, \"t\");\n cellOpts.value = textOf(t) ?? \"\";\n } else if (vEl) {\n const raw = textOf(vEl) ?? \"\";\n const num = Number(raw);\n cellOpts.value = isNaN(num) ? raw : num;\n }\n\n cells.push(cellOpts as CellOptions);\n }\n\n rowOpts.cells = cells;\n rows.push(rowOpts as RowOptions);\n }\n }\n opts.children = rows;\n\n // Merge cells\n const mergeCellsEl = findChildByLocalName(wsEl, \"mergeCells\");\n if (mergeCellsEl) {\n const mergeCells: MergeCellOptions[] = [];\n for (const mc of mergeCellsEl.elements ?? []) {\n if (localName(mc) !== \"mergeCell\") continue;\n const ref = attr(mc, \"ref\");\n if (!ref) continue;\n const parts = ref.split(\":\");\n if (parts.length === 2) {\n mergeCells.push({\n from: { row: rowFromRef(parts[0]), col: colFromRef(parts[0]) },\n to: { row: rowFromRef(parts[1]), col: colFromRef(parts[1]) },\n });\n }\n }\n if (mergeCells.length > 0) opts.mergeCells = mergeCells;\n }\n\n // Auto filter\n const autoFilterEl = findChildByLocalName(wsEl, \"autoFilter\");\n if (autoFilterEl) {\n const ref = attr(autoFilterEl, \"ref\");\n if (ref) opts.autoFilter = ref;\n }\n\n return opts as WorksheetOptions;\n}\n\n// ── Helpers ──\n\nfunction localName(el: Element): string {\n const name = el.name ?? \"\";\n const colonIdx = name.indexOf(\":\");\n return colonIdx >= 0 ? name.slice(colonIdx + 1) : name;\n}\n\nfunction findChildByLocalName(parent: Element, name: string): Element | undefined {\n return (parent.elements ?? []).find((el) => localName(el) === name);\n}\n\n/**\n * Parse a .xlsx file and convert it into WorkbookOptions.\n *\n * The returned options can be passed to `new Workbook(parsed)`.\n */\nexport function parseWorkbook(data: DataType): WorkbookOptions {\n const xlsx = parseXlsx(data);\n\n const opts: Record<string, unknown> = {};\n\n // Core properties\n if (xlsx.coreProps) {\n const corePropsEl = xlsx.doc.get(xlsx.coreProps);\n if (corePropsEl) {\n const cp = parseCorePropsElement(corePropsEl);\n if (cp.title) opts.title = cp.title;\n if (cp.subject) opts.subject = cp.subject;\n if (cp.creator) opts.creator = cp.creator;\n if (cp.keywords) opts.keywords = cp.keywords;\n if (cp.description) opts.description = cp.description;\n if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy;\n if (cp.revision) opts.revision = parseInt(cp.revision, 10);\n }\n }\n\n // Shared strings\n const strings = parseSharedStrings(xlsx.sharedStrings);\n\n // Sheet names from workbook\n const sheetNames: string[] = [];\n if (xlsx.workbook) {\n const sheetsEl = findChildByLocalName(xlsx.workbook, \"sheets\");\n if (sheetsEl) {\n for (const s of sheetsEl.elements ?? []) {\n if (localName(s) !== \"sheet\") continue;\n sheetNames.push(attr(s, \"name\") ?? \"\");\n }\n }\n }\n\n // Parse worksheets\n const worksheets: WorksheetOptions[] = [];\n for (let i = 0; i < xlsx.worksheets.length; i++) {\n const wsPath = xlsx.worksheets[i];\n const wsEl = xlsx.doc.get(wsPath);\n if (!wsEl) continue;\n\n const wsOpts = parseWorksheetElement(wsEl, strings) as Record<string, unknown>;\n if (sheetNames[i]) wsOpts.name = sheetNames[i];\n worksheets.push(wsOpts as WorksheetOptions);\n }\n\n opts.worksheets = worksheets;\n return opts as WorkbookOptions;\n}\n","/**\n * XLSX patching — replace placeholders in existing .xlsx files.\n *\n * Unlike DOCX/PPTX (paragraph-based), XLSX patching targets cell values:\n * - Replaces placeholders in the shared strings table (most common)\n * - Replaces placeholders in inline strings within worksheet cells\n *\n * @module\n */\nimport { OoxmlMimeType, unzipSync, zipAndConvert, strFromU8, toJson } from \"@office-open/core\";\nimport type { OutputByType, OutputType } from \"@office-open/core\";\nimport { js2xml } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport { toUint8Array } from \"undio\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\nexport type InputDataType = Buffer | string | number[] | Uint8Array | ArrayBuffer | Blob;\n\nexport type PatchDocumentOutputType = OutputType;\n\nexport const PatchType = {\n CELL: \"cell\",\n} as const;\n\nexport interface CellPatch {\n /** Replacement value (string, number, boolean, or Date) */\n readonly value: string | number | boolean | Date;\n}\n\nexport type IPatch = CellPatch;\n\nexport interface PatchWorkbookOptions<T extends PatchDocumentOutputType = PatchDocumentOutputType> {\n readonly outputType: T;\n readonly data: InputDataType;\n readonly patches: Readonly<Record<string, IPatch>>;\n readonly placeholderDelimiters?: Readonly<{\n readonly start: string;\n readonly end: string;\n }>;\n}\n\n/**\n * Patch an existing .xlsx workbook by replacing placeholder text in cells.\n *\n * Placeholders are matched in shared strings and inline strings.\n * For string replacements, the shared string value is updated in-place.\n * For non-string replacements, the cell type and value are updated.\n */\nexport const patchWorkbook = async <T extends PatchDocumentOutputType = PatchDocumentOutputType>({\n outputType,\n data,\n patches,\n placeholderDelimiters = { start: \"{{\", end: \"}}\" } as const,\n}: PatchWorkbookOptions<T>): Promise<OutputByType[T]> => {\n const zipContent = unzipSync(toUint8Array(data));\n\n const xmlMap = new Map<string, Element>();\n const binaryMap = new Map<string, Uint8Array>();\n\n // Separate XML files from binary files\n for (const [key, value] of Object.entries(zipContent)) {\n if (key.endsWith(\".xml\") || key.endsWith(\".rels\")) {\n xmlMap.set(key, toJson(strFromU8(value)));\n } else {\n binaryMap.set(key, value);\n }\n }\n\n const { start, end } = placeholderDelimiters;\n\n // Build placeholder → patch map\n const patchMap = new Map<string, IPatch>();\n for (const [key, patch] of Object.entries(patches)) {\n patchMap.set(`${start}${key}${end}`, patch);\n }\n\n // 1. Patch shared strings\n const sst = xmlMap.get(\"xl/sharedStrings.xml\");\n if (sst) {\n patchSharedStrings(sst, patchMap);\n }\n\n // 2. Patch inline strings in worksheets\n const worksheetKeys = Object.keys(zipContent).filter(\n (k) => k.startsWith(\"xl/worksheets/sheet\") && k.endsWith(\".xml\"),\n );\n for (const wsKey of worksheetKeys) {\n const ws = xmlMap.get(wsKey);\n if (ws) patchWorksheetInlineStrings(ws, patchMap);\n }\n\n // Rebuild ZIP\n const files: Record<string, Uint8Array> = {};\n for (const [key, value] of xmlMap) {\n files[key] = encoder.encode(js2xml(value));\n }\n for (const [key, value] of binaryMap) {\n files[key] = value;\n }\n\n return await zipAndConvert(files, outputType, OoxmlMimeType.XLSX);\n};\n\nfunction patchSharedStrings(sst: Element, patchMap: Map<string, IPatch>): void {\n // toJson returns {elements: [{name: \"sst\", ...}]} — unwrap to actual root\n const root = sst.name ? sst : sst.elements?.[0];\n if (!root) return;\n\n for (const si of root.elements ?? []) {\n if (si.name !== \"si\") continue;\n\n // Simple: <si><t>text</t></si>\n const t = findLocalChild(si, \"t\");\n if (t) {\n patchTextElement(t, patchMap);\n } else {\n // Rich text: <si><r><t>text</t></r>...</si>\n for (const r of si.elements ?? []) {\n if (r.name !== \"r\") continue;\n const rt = findLocalChild(r, \"t\");\n if (rt) patchTextElement(rt, patchMap);\n }\n }\n }\n}\n\nfunction patchWorksheetInlineStrings(ws: Element, patchMap: Map<string, IPatch>): void {\n const root = ws.name ? ws : ws.elements?.[0];\n if (!root) return;\n\n const sheetData = findLocalChild(root, \"sheetData\");\n if (!sheetData) return;\n\n for (const row of sheetData.elements ?? []) {\n if (localName(row) !== \"row\") continue;\n for (const cell of row.elements ?? []) {\n if (localName(cell) !== \"c\") continue;\n\n // Check inline strings: <c t=\"inlineStr\"><is><t>text</t></is></c>\n const isEl = findLocalChild(cell, \"is\");\n if (isEl) {\n const t = findLocalChild(isEl, \"t\");\n if (t) patchTextElement(t, patchMap);\n }\n }\n }\n}\n\nfunction patchTextElement(tEl: Element, patchMap: Map<string, IPatch>): void {\n const text = tEl.elements?.[0]?.text;\n if (typeof text !== \"string\") return;\n\n for (const [placeholder, patch] of patchMap) {\n if (text.includes(placeholder)) {\n const newValue = String(patch.value);\n const replaced = text.replace(placeholder, newValue);\n if (tEl.elements) {\n tEl.elements[0] = { ...tEl.elements[0], text: replaced };\n }\n }\n }\n}\n\nfunction localName(el: Element): string {\n const name = el.name ?? \"\";\n const colonIdx = name.indexOf(\":\");\n return colonIdx >= 0 ? name.slice(colonIdx + 1) : name;\n}\n\nfunction findLocalChild(parent: Element, name: string): Element | undefined {\n return (parent.elements ?? []).find((el) => localName(el) === name);\n}\n"],"mappings":"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"}