@silurus/ooxml 0.11.0 → 0.12.0

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.
@@ -252,6 +252,36 @@ declare interface ChartData {
252
252
  catAxisFontSizeHpt?: number | null;
253
253
  /** Value axis tick-label font size in hpt. */
254
254
  valAxisFontSizeHpt?: number | null;
255
+ /** Outer chartSpace background (ECMA-376 §21.2.2.5 `<c:spPr>`). Hex without
256
+ * '#' for a solid fill, undefined for `<a:noFill/>` or an absent spPr.
257
+ * Combine with `hasChartSpPr` to distinguish explicit-transparent from
258
+ * default-opaque-white. */
259
+ chartBg?: string | null;
260
+ /** True when the parser saw a `<c:chartSpace><c:spPr>` element. Lets the
261
+ * adapter tell "spec said noFill → transparent" from "no spPr → default". */
262
+ hasChartSpPr?: boolean;
263
+ /** `<c:legend><c:manualLayout>` fractions of chart space (§21.2.2.31). */
264
+ legendManualLayout?: LegendManualLayout | null;
265
+ /** `<c:catAx><c:delete val="1"/>` — hide the category axis (§21.2.2.40). */
266
+ catAxisHidden?: boolean;
267
+ /** `<c:valAx><c:delete val="1"/>` — hide the value axis (§21.2.2.40). */
268
+ valAxisHidden?: boolean;
269
+ /** `<c:valAx><c:numFmt@formatCode>` — number format for value-axis tick
270
+ * labels (ECMA-376 §21.2.2.21). */
271
+ valAxisFormatCode?: string | null;
272
+ /** `<c:barChart><c:gapWidth>` — space between category groups as a percent
273
+ * of bar width (§21.2.2.13). */
274
+ barGapWidth?: number | null;
275
+ /** `<c:barChart><c:overlap>` — signed percent overlap between bars in a
276
+ * cluster (§21.2.2.25). Negative = gap. */
277
+ barOverlap?: number | null;
278
+ /** `<c:dLbls><c:dLblPos>` — data label position (§21.2.2.16). */
279
+ dataLabelPosition?: string | null;
280
+ /** Hex (no `#`) for data label text color, resolved from `<c:dLbls><c:txPr>`. */
281
+ dataLabelFontColor?: string | null;
282
+ /** `<c:dLbls><c:numFmt@formatCode>` — chart-level override for data label
283
+ * number format (§21.2.2.35). */
284
+ dataLabelFormatCode?: string | null;
255
285
  }
256
286
 
257
287
  /**
@@ -329,6 +359,12 @@ declare interface ChartSeries {
329
359
  * that don't parse markers (e.g. pptx today) keep their existing behavior.
330
360
  */
331
361
  showMarker?: boolean | null;
362
+ /**
363
+ * Excel number-format code for this series' values (ECMA-376 §21.2.2.37,
364
+ * `<c:val>/<c:numRef>/<c:formatCode>`). Used to format data labels when the
365
+ * chart-level `<c:dLbls><c:numFmt>` is not set. null = no series-level code.
366
+ */
367
+ valFormatCode?: string | null;
332
368
  }
333
369
 
334
370
  declare interface ConditionalFormat {
@@ -476,6 +512,11 @@ declare interface Dxf {
476
512
  font: Font | null;
477
513
  fill: Fill_2 | null;
478
514
  border: Border | null;
515
+ /** Number format override from the dxf (ECMA-376 §18.8.17). When a
516
+ * conditional-formatting rule matches, this numFmt replaces the cell's own
517
+ * style numFmt for rendering — e.g. switching a calendar cell from `d` to
518
+ * `m"月"d"日"` on the first day of each month. */
519
+ numFmt?: NumFmt | null;
479
520
  }
480
521
 
481
522
  declare interface FieldRun {
@@ -632,6 +673,15 @@ declare interface ImageRun {
632
673
  wrapSide?: string;
633
674
  }
634
675
 
676
+ declare interface LegendManualLayout {
677
+ xMode: string;
678
+ yMode: string;
679
+ x: number;
680
+ y: number;
681
+ w: number;
682
+ h: number;
683
+ }
684
+
635
685
  declare interface LineBreak {
636
686
  type: 'break';
637
687
  }
@@ -778,6 +828,41 @@ declare type PathCmd = {
778
828
  };
779
829
 
780
830
  declare type PathCmd_2 = {
831
+ op: 'moveTo';
832
+ x: number;
833
+ y: number;
834
+ } | {
835
+ op: 'lineTo';
836
+ x: number;
837
+ y: number;
838
+ } | {
839
+ op: 'cubicBezTo';
840
+ x1: number;
841
+ y1: number;
842
+ x2: number;
843
+ y2: number;
844
+ x3: number;
845
+ y3: number;
846
+ } | {
847
+ op: 'quadBezTo';
848
+ x1: number;
849
+ y1: number;
850
+ x2: number;
851
+ y2: number;
852
+ }
853
+ /** ECMA-376 §20.1.9.3. stAng/swAng in 60000ths of a degree. wr/hr in
854
+ * the path's own coordinate units. Pen position is the arc start. */
855
+ | {
856
+ op: 'arcTo';
857
+ wr: number;
858
+ hr: number;
859
+ stAng: number;
860
+ swAng: number;
861
+ } | {
862
+ op: 'close';
863
+ };
864
+
865
+ declare type PathCmd_3 = {
781
866
  cmd: 'moveTo';
782
867
  x: number;
783
868
  y: number;
@@ -803,6 +888,12 @@ declare type PathCmd_2 = {
803
888
  cmd: 'close';
804
889
  };
805
890
 
891
+ declare interface PathInfo {
892
+ w: number;
893
+ h: number;
894
+ commands: PathCmd_2[];
895
+ }
896
+
806
897
  declare interface PictureElement {
807
898
  type: 'picture';
808
899
  x: number;
@@ -1093,6 +1184,18 @@ declare interface Shadow {
1093
1184
  dir: number;
1094
1185
  }
1095
1186
 
1187
+ declare interface ShapeAnchor {
1188
+ fromCol: number;
1189
+ fromColOff: number;
1190
+ fromRow: number;
1191
+ fromRowOff: number;
1192
+ toCol: number;
1193
+ toColOff: number;
1194
+ toRow: number;
1195
+ toRowOff: number;
1196
+ shapes: ShapeInfo[];
1197
+ }
1198
+
1096
1199
  declare interface ShapeElement {
1097
1200
  type: 'shape';
1098
1201
  x: number;
@@ -1142,6 +1245,36 @@ declare type ShapeFill = {
1142
1245
  gradType: string;
1143
1246
  };
1144
1247
 
1248
+ declare type ShapeGeom = {
1249
+ type: 'preset';
1250
+ name: string;
1251
+ } | {
1252
+ type: 'custom';
1253
+ paths: PathInfo[];
1254
+ }
1255
+ /** Bitmap picture leaf inside a `<xdr:grpSp>`. `dataUrl` is a pre-encoded
1256
+ * `data:<mime>;base64,…` produced by the Rust parser from the drawing's
1257
+ * relationship target. */
1258
+ | {
1259
+ type: 'image';
1260
+ dataUrl: string;
1261
+ };
1262
+
1263
+ declare interface ShapeInfo {
1264
+ /** Normalized [0,1] position/size relative to the anchor rect. */
1265
+ x: number;
1266
+ y: number;
1267
+ w: number;
1268
+ h: number;
1269
+ /** Rotation in degrees, clockwise. */
1270
+ rot: number;
1271
+ fillColor?: string;
1272
+ strokeColor?: string;
1273
+ /** Stroke width in EMU. 0 = no stroke. */
1274
+ strokeWidth: number;
1275
+ geom: ShapeGeom;
1276
+ }
1277
+
1145
1278
  declare interface ShapeRun {
1146
1279
  widthPt: number;
1147
1280
  heightPt: number;
@@ -1156,7 +1289,7 @@ declare interface ShapeRun {
1156
1289
  /** Document-order index within a group; lower values render first. */
1157
1290
  zOrder: number;
1158
1291
  /** Normalized [0,1] custom-geometry sub-paths */
1159
- subpaths: PathCmd_2[][];
1292
+ subpaths: PathCmd_3[][];
1160
1293
  fill: ShapeFill | null;
1161
1294
  stroke: string | null;
1162
1295
  strokeWidth?: number;
@@ -1175,6 +1308,24 @@ declare interface SheetMeta {
1175
1308
  rId: string;
1176
1309
  }
1177
1310
 
1311
+ declare interface SlicerAnchor {
1312
+ fromCol: number;
1313
+ fromColOff: number;
1314
+ fromRow: number;
1315
+ fromRowOff: number;
1316
+ toCol: number;
1317
+ toColOff: number;
1318
+ toRow: number;
1319
+ toRowOff: number;
1320
+ caption: string;
1321
+ items: SlicerItem[];
1322
+ }
1323
+
1324
+ declare interface SlicerItem {
1325
+ name: string;
1326
+ selected: boolean;
1327
+ }
1328
+
1178
1329
  declare interface Slide {
1179
1330
  index: number;
1180
1331
  /** 1-based slide number (index + 1); used to render slidenum fields */
@@ -1390,6 +1541,10 @@ declare interface Worksheet {
1390
1541
  conditionalFormats: ConditionalFormat[];
1391
1542
  images: ImageAnchor[];
1392
1543
  charts: ChartAnchor[];
1544
+ /** Grouped shapes from `<xdr:grpSp>` inside twoCellAnchors
1545
+ * (ECMA-376 §20.5.2.17). Each anchor holds leaf shapes pre-flattened
1546
+ * with normalized [0,1] geometry relative to the anchor rect. */
1547
+ shapeGroups?: ShapeAnchor[];
1393
1548
  /** Whether to display zero values (ECMA-376 §18.3.1.94). Defaults to true. */
1394
1549
  showZeros?: boolean;
1395
1550
  /** Whether to draw default grid lines (ECMA-376 §18.3.1.83
@@ -1412,6 +1567,10 @@ declare interface Worksheet {
1412
1567
  /** Excel Tables on this sheet (ECMA-376 §18.5). The renderer overlays a
1413
1568
  * built-in style (bold header, banded rows) on the given ranges. */
1414
1569
  tables?: TableInfo[];
1570
+ /** Pivot / table slicers (Office 2010+ extension). Each anchor carries a
1571
+ * caption and the saved item list (with selection flags) so the renderer
1572
+ * can draw a static button bank without the live pivot engine. */
1573
+ slicers?: SlicerAnchor[];
1415
1574
  }
1416
1575
 
1417
1576
  export declare namespace xlsx {
@@ -1456,6 +1615,11 @@ declare interface XlsxChartSeries {
1456
1615
  /** Marker visibility resolved from `<c:marker>`/chart-level default
1457
1616
  * (ECMA-376 §21.2.2.32). */
1458
1617
  showMarker?: boolean;
1618
+ /** `<c:val>/<c:numRef>/<c:formatCode>` — Excel number format for series
1619
+ * values (ECMA-376 §21.2.2.37). */
1620
+ valFormatCode?: string | null;
1621
+ /** `<c:ser><c:order>` — stacking/legend display order (§21.2.2.28). */
1622
+ order?: number;
1459
1623
  }
1460
1624
 
1461
1625
  declare class XlsxViewer {
@@ -123,6 +123,12 @@ declare interface ChartSeries {
123
123
  * that don't parse markers (e.g. pptx today) keep their existing behavior.
124
124
  */
125
125
  showMarker?: boolean | null;
126
+ /**
127
+ * Excel number-format code for this series' values (ECMA-376 §21.2.2.37,
128
+ * `<c:val>/<c:numRef>/<c:formatCode>`). Used to format data labels when the
129
+ * chart-level `<c:dLbls><c:numFmt>` is not set. null = no series-level code.
130
+ */
131
+ valFormatCode?: string | null;
126
132
  }
127
133
 
128
134
  export declare type Fill = SolidFill | NoFill | GradientFill;
@@ -206,6 +206,36 @@ declare interface ChartData {
206
206
  catAxisFontSizeHpt?: number | null;
207
207
  /** Value axis tick-label font size in hpt. */
208
208
  valAxisFontSizeHpt?: number | null;
209
+ /** Outer chartSpace background (ECMA-376 §21.2.2.5 `<c:spPr>`). Hex without
210
+ * '#' for a solid fill, undefined for `<a:noFill/>` or an absent spPr.
211
+ * Combine with `hasChartSpPr` to distinguish explicit-transparent from
212
+ * default-opaque-white. */
213
+ chartBg?: string | null;
214
+ /** True when the parser saw a `<c:chartSpace><c:spPr>` element. Lets the
215
+ * adapter tell "spec said noFill → transparent" from "no spPr → default". */
216
+ hasChartSpPr?: boolean;
217
+ /** `<c:legend><c:manualLayout>` fractions of chart space (§21.2.2.31). */
218
+ legendManualLayout?: LegendManualLayout | null;
219
+ /** `<c:catAx><c:delete val="1"/>` — hide the category axis (§21.2.2.40). */
220
+ catAxisHidden?: boolean;
221
+ /** `<c:valAx><c:delete val="1"/>` — hide the value axis (§21.2.2.40). */
222
+ valAxisHidden?: boolean;
223
+ /** `<c:valAx><c:numFmt@formatCode>` — number format for value-axis tick
224
+ * labels (ECMA-376 §21.2.2.21). */
225
+ valAxisFormatCode?: string | null;
226
+ /** `<c:barChart><c:gapWidth>` — space between category groups as a percent
227
+ * of bar width (§21.2.2.13). */
228
+ barGapWidth?: number | null;
229
+ /** `<c:barChart><c:overlap>` — signed percent overlap between bars in a
230
+ * cluster (§21.2.2.25). Negative = gap. */
231
+ barOverlap?: number | null;
232
+ /** `<c:dLbls><c:dLblPos>` — data label position (§21.2.2.16). */
233
+ dataLabelPosition?: string | null;
234
+ /** Hex (no `#`) for data label text color, resolved from `<c:dLbls><c:txPr>`. */
235
+ dataLabelFontColor?: string | null;
236
+ /** `<c:dLbls><c:numFmt@formatCode>` — chart-level override for data label
237
+ * number format (§21.2.2.35). */
238
+ dataLabelFormatCode?: string | null;
209
239
  }
210
240
 
211
241
  declare interface ConditionalFormat {
@@ -222,6 +252,11 @@ declare interface Dxf {
222
252
  font: Font | null;
223
253
  fill: Fill | null;
224
254
  border: Border | null;
255
+ /** Number format override from the dxf (ECMA-376 §18.8.17). When a
256
+ * conditional-formatting rule matches, this numFmt replaces the cell's own
257
+ * style numFmt for rendering — e.g. switching a calendar cell from `d` to
258
+ * `m"月"d"日"` on the first day of each month. */
259
+ numFmt?: NumFmt | null;
225
260
  }
226
261
 
227
262
  export declare interface Fill {
@@ -281,6 +316,15 @@ declare interface ImageAnchor {
281
316
  dataUrl: string;
282
317
  }
283
318
 
319
+ declare interface LegendManualLayout {
320
+ xMode: string;
321
+ yMode: string;
322
+ x: number;
323
+ y: number;
324
+ w: number;
325
+ h: number;
326
+ }
327
+
284
328
  export declare interface MergeCell {
285
329
  top: number;
286
330
  left: number;
@@ -299,6 +343,47 @@ export declare interface ParsedWorkbook {
299
343
  sharedStrings: SharedString[];
300
344
  }
301
345
 
346
+ declare type PathCmd = {
347
+ op: 'moveTo';
348
+ x: number;
349
+ y: number;
350
+ } | {
351
+ op: 'lineTo';
352
+ x: number;
353
+ y: number;
354
+ } | {
355
+ op: 'cubicBezTo';
356
+ x1: number;
357
+ y1: number;
358
+ x2: number;
359
+ y2: number;
360
+ x3: number;
361
+ y3: number;
362
+ } | {
363
+ op: 'quadBezTo';
364
+ x1: number;
365
+ y1: number;
366
+ x2: number;
367
+ y2: number;
368
+ }
369
+ /** ECMA-376 §20.1.9.3. stAng/swAng in 60000ths of a degree. wr/hr in
370
+ * the path's own coordinate units. Pen position is the arc start. */
371
+ | {
372
+ op: 'arcTo';
373
+ wr: number;
374
+ hr: number;
375
+ stAng: number;
376
+ swAng: number;
377
+ } | {
378
+ op: 'close';
379
+ };
380
+
381
+ declare interface PathInfo {
382
+ w: number;
383
+ h: number;
384
+ commands: PathCmd[];
385
+ }
386
+
302
387
  export declare interface RenderViewportOptions {
303
388
  width?: number;
304
389
  height?: number;
@@ -336,6 +421,48 @@ declare interface RunFont {
336
421
  name?: string | null;
337
422
  }
338
423
 
424
+ declare interface ShapeAnchor {
425
+ fromCol: number;
426
+ fromColOff: number;
427
+ fromRow: number;
428
+ fromRowOff: number;
429
+ toCol: number;
430
+ toColOff: number;
431
+ toRow: number;
432
+ toRowOff: number;
433
+ shapes: ShapeInfo[];
434
+ }
435
+
436
+ declare type ShapeGeom = {
437
+ type: 'preset';
438
+ name: string;
439
+ } | {
440
+ type: 'custom';
441
+ paths: PathInfo[];
442
+ }
443
+ /** Bitmap picture leaf inside a `<xdr:grpSp>`. `dataUrl` is a pre-encoded
444
+ * `data:<mime>;base64,…` produced by the Rust parser from the drawing's
445
+ * relationship target. */
446
+ | {
447
+ type: 'image';
448
+ dataUrl: string;
449
+ };
450
+
451
+ declare interface ShapeInfo {
452
+ /** Normalized [0,1] position/size relative to the anchor rect. */
453
+ x: number;
454
+ y: number;
455
+ w: number;
456
+ h: number;
457
+ /** Rotation in degrees, clockwise. */
458
+ rot: number;
459
+ fillColor?: string;
460
+ strokeColor?: string;
461
+ /** Stroke width in EMU. 0 = no stroke. */
462
+ strokeWidth: number;
463
+ geom: ShapeGeom;
464
+ }
465
+
339
466
  declare interface SharedString {
340
467
  text: string;
341
468
  runs?: Run[];
@@ -347,6 +474,24 @@ export declare interface SheetMeta {
347
474
  rId: string;
348
475
  }
349
476
 
477
+ declare interface SlicerAnchor {
478
+ fromCol: number;
479
+ fromColOff: number;
480
+ fromRow: number;
481
+ fromRowOff: number;
482
+ toCol: number;
483
+ toColOff: number;
484
+ toRow: number;
485
+ toRowOff: number;
486
+ caption: string;
487
+ items: SlicerItem[];
488
+ }
489
+
490
+ declare interface SlicerItem {
491
+ name: string;
492
+ selected: boolean;
493
+ }
494
+
350
495
  export declare interface Styles {
351
496
  fonts: Font[];
352
497
  fills: Fill[];
@@ -401,6 +546,10 @@ export declare interface Worksheet {
401
546
  conditionalFormats: ConditionalFormat[];
402
547
  images: ImageAnchor[];
403
548
  charts: ChartAnchor[];
549
+ /** Grouped shapes from `<xdr:grpSp>` inside twoCellAnchors
550
+ * (ECMA-376 §20.5.2.17). Each anchor holds leaf shapes pre-flattened
551
+ * with normalized [0,1] geometry relative to the anchor rect. */
552
+ shapeGroups?: ShapeAnchor[];
404
553
  /** Whether to display zero values (ECMA-376 §18.3.1.94). Defaults to true. */
405
554
  showZeros?: boolean;
406
555
  /** Whether to draw default grid lines (ECMA-376 §18.3.1.83
@@ -423,6 +572,10 @@ export declare interface Worksheet {
423
572
  /** Excel Tables on this sheet (ECMA-376 §18.5). The renderer overlays a
424
573
  * built-in style (bold header, banded rows) on the given ranges. */
425
574
  tables?: TableInfo[];
575
+ /** Pivot / table slicers (Office 2010+ extension). Each anchor carries a
576
+ * caption and the saved item list (with selection flags) so the renderer
577
+ * can draw a static button bank without the live pivot engine. */
578
+ slicers?: SlicerAnchor[];
426
579
  }
427
580
 
428
581
  /**
@@ -440,6 +593,11 @@ declare interface XlsxChartSeries {
440
593
  /** Marker visibility resolved from `<c:marker>`/chart-level default
441
594
  * (ECMA-376 §21.2.2.32). */
442
595
  showMarker?: boolean;
596
+ /** `<c:val>/<c:numRef>/<c:formatCode>` — Excel number format for series
597
+ * values (ECMA-376 §21.2.2.37). */
598
+ valFormatCode?: string | null;
599
+ /** `<c:ser><c:order>` — stacking/legend display order (§21.2.2.28). */
600
+ order?: number;
443
601
  }
444
602
 
445
603
  export declare class XlsxViewer {