styled-exceljs 0.21.2 → 0.21.4

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.
@@ -74,6 +74,19 @@ interface CellStyle {
74
74
  XLSX and BIFF8 XLS. The `fgColor`, `bgColor`, and `patternType` fields are
75
75
  preserved as compatibility aliases for older integrations.
76
76
 
77
+ OOXML table definitions are exposed as `ws["!tables"]` when `cellStyles:true`
78
+ is enabled. Built-in `TableStyleLight*`, `TableStyleMedium*`, and
79
+ `TableStyleDark*` families as well as custom `tableStyles` differential formats
80
+ can be resolved lazily for a visible cell:
81
+
82
+ ```js
83
+ const style = XLSX.utils.resolve_table_cell_style(ws, rowIndex, columnIndex, cell.s);
84
+ ```
85
+
86
+ The resolver honors header and totals rows, row and column banding, first and
87
+ last column emphasis, and table/column differential-format overrides. It does
88
+ not materialize blank cells or expand large table ranges during parsing.
89
+
77
90
  Colors may include resolved RGB as well as the original theme or palette data:
78
91
 
79
92
  ```ts
@@ -79,6 +79,17 @@ interface CellStyle {
79
79
  和 XLS BIFF8 之间归一化。`fgColor`、`bgColor`、`patternType` 保留为
80
80
  兼容旧集成的别名字段。
81
81
 
82
+ 启用 `cellStyles:true` 后,OOXML 表对象会暴露在 `ws["!tables"]`。内置
83
+ `TableStyleLight*`、`TableStyleMedium*`、`TableStyleDark*` 系列以及工作簿中
84
+ 自定义的 `tableStyles` 差异格式,都可以按可视单元格惰性解析:
85
+
86
+ ```js
87
+ const style = XLSX.utils.resolve_table_cell_style(ws, rowIndex, columnIndex, cell.s);
88
+ ```
89
+
90
+ 解析器会处理标题行、汇总行、行列条纹、首末列强调,以及表级/列级差异格式,
91
+ 但不会为了表样式创建空单元格或在解析大表时展开整个表范围。
92
+
82
93
  颜色结构会尽量同时保留解析后的 RGB 和原始来源信息:
83
94
 
84
95
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "styled-exceljs",
3
- "version": "0.21.2",
3
+ "version": "0.21.4",
4
4
  "author": "sheetjs",
5
5
  "description": "SheetJS CE fork with enhanced XLS/XLSX styling and browser rendering",
6
6
  "keywords": [
@@ -27,78 +27,78 @@
27
27
  "types": "types/index.d.ts",
28
28
  "exports": {
29
29
  ".": {
30
+ "types": "./types/index.d.ts",
30
31
  "import": "./xlsx.mjs",
31
- "require": "./xlsx.js",
32
- "types": "./types/index.d.ts"
32
+ "require": "./xlsx.js"
33
33
  },
34
34
  "./xlsx.mjs": {
35
- "import": "./xlsx.mjs",
36
- "types": "./types/index.d.ts"
35
+ "types": "./types/index.d.ts",
36
+ "import": "./xlsx.mjs"
37
37
  },
38
38
  "./xlsx.js": {
39
- "require": "./xlsx.js",
40
- "types": "./types/index.d.ts"
39
+ "types": "./types/index.d.ts",
40
+ "require": "./xlsx.js"
41
41
  },
42
42
  "./dist/xlsx.core.min": {
43
+ "types": "./types/index.d.ts",
43
44
  "import": "./dist/xlsx.core.min.js",
44
- "require": "./dist/xlsx.core.min.js",
45
- "types": "./types/index.d.ts"
45
+ "require": "./dist/xlsx.core.min.js"
46
46
  },
47
47
  "./dist/xlsx.core.min.js": {
48
+ "types": "./types/index.d.ts",
48
49
  "import": "./dist/xlsx.core.min.js",
49
- "require": "./dist/xlsx.core.min.js",
50
- "types": "./types/index.d.ts"
50
+ "require": "./dist/xlsx.core.min.js"
51
51
  },
52
52
  "./dist/xlsx.full.min": {
53
+ "types": "./types/index.d.ts",
53
54
  "import": "./dist/xlsx.full.min.js",
54
- "require": "./dist/xlsx.full.min.js",
55
- "types": "./types/index.d.ts"
55
+ "require": "./dist/xlsx.full.min.js"
56
56
  },
57
57
  "./dist/xlsx.full.min.js": {
58
+ "types": "./types/index.d.ts",
58
59
  "import": "./dist/xlsx.full.min.js",
59
- "require": "./dist/xlsx.full.min.js",
60
- "types": "./types/index.d.ts"
60
+ "require": "./dist/xlsx.full.min.js"
61
61
  },
62
62
  "./dist/xlsx.mini.min": {
63
+ "types": "./types/index.d.ts",
63
64
  "import": "./dist/xlsx.mini.min.js",
64
- "require": "./dist/xlsx.mini.min.js",
65
- "types": "./types/index.d.ts"
65
+ "require": "./dist/xlsx.mini.min.js"
66
66
  },
67
67
  "./dist/xlsx.mini.min.js": {
68
+ "types": "./types/index.d.ts",
68
69
  "import": "./dist/xlsx.mini.min.js",
69
- "require": "./dist/xlsx.mini.min.js",
70
- "types": "./types/index.d.ts"
70
+ "require": "./dist/xlsx.mini.min.js"
71
71
  },
72
72
  "./dist/xlsx.zahl": {
73
+ "types": "./dist/zahl.d.ts",
73
74
  "import": "./dist/xlsx.zahl.mjs",
74
- "require": "./dist/xlsx.zahl.js",
75
- "types": "./dist/zahl.d.ts"
75
+ "require": "./dist/xlsx.zahl.js"
76
76
  },
77
77
  "./dist/xlsx.zahl.mjs": {
78
- "import": "./dist/xlsx.zahl.mjs",
79
- "types": "./dist/zahl.d.ts"
78
+ "types": "./dist/zahl.d.ts",
79
+ "import": "./dist/xlsx.zahl.mjs"
80
80
  },
81
81
  "./dist/xlsx.zahl.js": {
82
- "require": "./dist/xlsx.zahl.js",
83
- "types": "./dist/zahl.d.ts"
82
+ "types": "./dist/zahl.d.ts",
83
+ "require": "./dist/xlsx.zahl.js"
84
84
  },
85
85
  "./dist/cpexcel": {
86
+ "types": "./dist/cpexcel.d.ts",
86
87
  "import": "./dist/cpexcel.full.mjs",
87
- "require": "./dist/cpexcel.js",
88
- "types": "./dist/cpexcel.d.ts"
88
+ "require": "./dist/cpexcel.js"
89
89
  },
90
90
  "./dist/cpexcel.js": {
91
- "require": "./dist/cpexcel.js",
92
- "types": "./dist/cpexcel.d.ts"
91
+ "types": "./dist/cpexcel.d.ts",
92
+ "require": "./dist/cpexcel.js"
93
93
  },
94
94
  "./dist/cpexcel.full": {
95
+ "types": "./dist/cpexcel.d.ts",
95
96
  "import": "./dist/cpexcel.full.mjs",
96
- "require": "./dist/cpexcel.js",
97
- "types": "./dist/cpexcel.d.ts"
97
+ "require": "./dist/cpexcel.js"
98
98
  },
99
99
  "./dist/cpexcel.full.mjs": {
100
- "import": "./dist/cpexcel.full.mjs",
101
- "types": "./dist/cpexcel.d.ts"
100
+ "types": "./dist/cpexcel.d.ts",
101
+ "import": "./dist/cpexcel.full.mjs"
102
102
  }
103
103
  },
104
104
  "browser": {
@@ -114,7 +114,7 @@
114
114
  "@types/node": "8.5.9",
115
115
  "acorn": "7.4.1",
116
116
  "adler-32": "~1.3.1",
117
- "alex": "8.1.1",
117
+ "alex": "^11.0.1",
118
118
  "blanket": "~1.2.3",
119
119
  "cfb": "~1.2.2",
120
120
  "codepage": "~1.15.0",
@@ -126,21 +126,26 @@
126
126
  "eslint-plugin-json": "^2.1.2",
127
127
  "exit-on-epipe": "~1.0.1",
128
128
  "fflate": "^0.7.1",
129
- "jsdom": "~11.1.0",
130
- "markdown-spellcheck": "^1.3.1",
131
- "mocha": "~2.5.3",
129
+ "jsdom": "^27.4.0",
130
+ "mocha": "^11.8.0",
132
131
  "sinon": "^1.17.7",
133
132
  "ssf": "~0.11.2",
134
133
  "typescript": "2.2.0",
135
134
  "wmf": "~1.0.1",
136
135
  "word": "~0.3.0"
137
136
  },
137
+ "overrides": {
138
+ "diff": "8.0.3",
139
+ "serialize-javascript": "7.0.5"
140
+ },
138
141
  "repository": {
139
142
  "type": "git",
140
143
  "url": "https://git.sheetjs.com/SheetJS/sheetjs"
141
144
  },
142
145
  "scripts": {
143
146
  "test": "make travis",
147
+ "test:security": "node tests/security-prototype-pollution.mjs",
148
+ "test:table-styles": "node tests/table-styles.mjs",
144
149
  "build": "make",
145
150
  "lint": "make fullint",
146
151
  "dtslint": "dtslint types"
package/types/index.d.ts CHANGED
@@ -631,7 +631,7 @@ export interface CellStyle extends FillStyle {
631
631
 
632
632
  export interface TextMeasureOpts {
633
633
  /** Browser-compatible text measurement callback. Receives text, CSS font string, and resolved style. */
634
- measureText?: (text: string, font: string, style: CellStyle) => number;
634
+ measureText?(text: string, font: string, style: CellStyle): number;
635
635
  /** Optional canvas-like object used for browser measureText fallback */
636
636
  canvas?: any;
637
637
  /** Maximum digit width in CSS pixels for Excel width conversion */
@@ -781,6 +781,42 @@ export interface DrawingInfo {
781
781
  groups?: boolean;
782
782
  }
783
783
 
784
+ /** OOXML table style selection flags */
785
+ export interface TableStyleInfo {
786
+ name?: string;
787
+ showFirstColumn?: boolean;
788
+ showLastColumn?: boolean;
789
+ showRowStripes?: boolean;
790
+ showColumnStripes?: boolean;
791
+ }
792
+
793
+ /** OOXML table column metadata used for differential styles */
794
+ export interface TableColumnInfo {
795
+ id?: number;
796
+ name?: string;
797
+ headerRowDxfId?: number;
798
+ dataDxfId?: number;
799
+ totalsRowDxfId?: number;
800
+ }
801
+
802
+ /** Parsed OOXML table definition */
803
+ export interface TableInfo {
804
+ id?: number;
805
+ name?: string;
806
+ displayName?: string;
807
+ ref: string;
808
+ range: Range;
809
+ path?: string;
810
+ headerRowCount?: number;
811
+ totalsRowCount?: number;
812
+ totalsRowShown?: boolean;
813
+ headerRowDxfId?: number;
814
+ dataDxfId?: number;
815
+ totalsRowDxfId?: number;
816
+ styleInfo?: TableStyleInfo;
817
+ columns?: TableColumnInfo[];
818
+ }
819
+
784
820
  /** Merge validation error */
785
821
  export interface MergeError {
786
822
  code: string;
@@ -952,7 +988,7 @@ export interface AutoFilterInfo {
952
988
  ref: string;
953
989
  }
954
990
 
955
- export type WSKeys = SheetKeys | ColInfo[] | RowInfo[] | Range[] | ProtectInfo | AutoFilterInfo | ChartModel | ChartInfo[] | DrawingInfo | MergeError[];
991
+ export type WSKeys = SheetKeys | ColInfo[] | RowInfo[] | Range[] | ProtectInfo | AutoFilterInfo | ChartModel | ChartInfo[] | DrawingInfo | TableInfo[] | MergeError[];
956
992
 
957
993
  /** Worksheet Object */
958
994
  export interface WorkSheet extends Sheet {
@@ -983,6 +1019,9 @@ export interface WorkSheet extends Sheet {
983
1019
  /** Parsed drawing information */
984
1020
  '!drawings'?: DrawingInfo;
985
1021
 
1022
+ /** Parsed OOXML table definitions when cellStyles is enabled */
1023
+ '!tables'?: TableInfo[];
1024
+
986
1025
  /** Worksheet Protection info */
987
1026
  '!protect'?: ProtectInfo;
988
1027
 
@@ -1159,7 +1198,7 @@ export interface Sheet2HTMLOpts {
1159
1198
  overflow?: HTMLOverflowMode;
1160
1199
 
1161
1200
  /** Browser-compatible text measurement callback used by autoFit and shrink-to-fit */
1162
- measureText?: (text: string, font: string, style: CellStyle) => number;
1201
+ measureText?(text: string, font: string, style: CellStyle): number;
1163
1202
 
1164
1203
  /** Optional canvas-like object used for text measurement */
1165
1204
  canvas?: any;
@@ -1313,6 +1352,9 @@ export interface XLSX$Utils {
1313
1352
  /** Alias for auto_fit_columns */
1314
1353
  autofit_columns(worksheet: WorkSheet, opts?: AutoFitColumnOpts): ColInfo[];
1315
1354
 
1355
+ /** Resolve the effective table style for a worksheet cell without mutating the worksheet */
1356
+ resolve_table_cell_style(worksheet: WorkSheet, row: number, col: number, baseStyle?: CellStyle): CellStyle | undefined;
1357
+
1316
1358
  /** Convert XLSX column width to browser pixels */
1317
1359
  col_width_to_px(width: number): number;
1318
1360