@aurum-grid/enterprise 0.0.0-stage → 0.2.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.
- package/LICENSE.md +24 -0
- package/README.md +6 -2
- package/dist/advanced-filter.d.ts +25 -0
- package/dist/advanced-filter.js +146 -0
- package/dist/advanced-filter.js.map +1 -0
- package/dist/excel.d.ts +56 -0
- package/dist/excel.js +409 -0
- package/dist/excel.js.map +1 -0
- package/dist/extras.d.ts +95 -0
- package/dist/extras.js +251 -0
- package/dist/extras.js.map +1 -0
- package/dist/import.d.ts +86 -0
- package/dist/import.js +323 -0
- package/dist/import.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/pivot.d.ts +33 -0
- package/dist/pivot.js +126 -0
- package/dist/pivot.js.map +1 -0
- package/dist/range.d.ts +39 -0
- package/dist/range.js +214 -0
- package/dist/range.js.map +1 -0
- package/dist/sidebar.d.ts +20 -0
- package/dist/sidebar.js +154 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/styles.css +55 -0
- package/dist/sync.d.ts +88 -0
- package/dist/sync.js +243 -0
- package/dist/sync.js.map +1 -0
- package/package.json +40 -3
package/dist/excel.js
ADDED
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { downloadBlob } from '@aurum-grid/core';
|
|
2
|
+
/* ---------------- minimal ZIP (store) writer & reader ---------------- */
|
|
3
|
+
const CRC_TABLE = (() => {
|
|
4
|
+
const t = new Uint32Array(256);
|
|
5
|
+
for (let n = 0; n < 256; n++) {
|
|
6
|
+
let c = n;
|
|
7
|
+
for (let k = 0; k < 8; k++)
|
|
8
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
9
|
+
t[n] = c >>> 0;
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
})();
|
|
13
|
+
export function crc32(data) {
|
|
14
|
+
let c = 0xffffffff;
|
|
15
|
+
for (let i = 0; i < data.length; i++)
|
|
16
|
+
c = CRC_TABLE[(c ^ data[i]) & 0xff] ^ (c >>> 8);
|
|
17
|
+
return (c ^ 0xffffffff) >>> 0;
|
|
18
|
+
}
|
|
19
|
+
export function zipStore(files) {
|
|
20
|
+
const enc = new TextEncoder();
|
|
21
|
+
const chunks = [];
|
|
22
|
+
const central = [];
|
|
23
|
+
let offset = 0;
|
|
24
|
+
for (const f of files) {
|
|
25
|
+
const name = enc.encode(f.name);
|
|
26
|
+
const crc = crc32(f.data);
|
|
27
|
+
const local = new DataView(new ArrayBuffer(30));
|
|
28
|
+
local.setUint32(0, 0x04034b50, true);
|
|
29
|
+
local.setUint16(4, 20, true);
|
|
30
|
+
local.setUint16(6, 0x0800, true); // UTF-8 names
|
|
31
|
+
local.setUint16(8, 0, true);
|
|
32
|
+
local.setUint32(14, crc, true);
|
|
33
|
+
local.setUint32(18, f.data.length, true);
|
|
34
|
+
local.setUint32(22, f.data.length, true);
|
|
35
|
+
local.setUint16(26, name.length, true);
|
|
36
|
+
chunks.push(new Uint8Array(local.buffer), name, f.data);
|
|
37
|
+
const cd = new DataView(new ArrayBuffer(46));
|
|
38
|
+
cd.setUint32(0, 0x02014b50, true);
|
|
39
|
+
cd.setUint16(4, 20, true);
|
|
40
|
+
cd.setUint16(6, 20, true);
|
|
41
|
+
cd.setUint16(8, 0x0800, true);
|
|
42
|
+
cd.setUint32(16, crc, true);
|
|
43
|
+
cd.setUint32(20, f.data.length, true);
|
|
44
|
+
cd.setUint32(24, f.data.length, true);
|
|
45
|
+
cd.setUint16(28, name.length, true);
|
|
46
|
+
cd.setUint32(42, offset, true);
|
|
47
|
+
central.push(new Uint8Array(cd.buffer), name);
|
|
48
|
+
offset += 30 + name.length + f.data.length;
|
|
49
|
+
}
|
|
50
|
+
const cdSize = central.reduce((s, c) => s + c.length, 0);
|
|
51
|
+
const endRec = new DataView(new ArrayBuffer(22));
|
|
52
|
+
endRec.setUint32(0, 0x06054b50, true);
|
|
53
|
+
endRec.setUint16(8, files.length, true);
|
|
54
|
+
endRec.setUint16(10, files.length, true);
|
|
55
|
+
endRec.setUint32(12, cdSize, true);
|
|
56
|
+
endRec.setUint32(16, offset, true);
|
|
57
|
+
const all = [...chunks, ...central, new Uint8Array(endRec.buffer)];
|
|
58
|
+
const out = new Uint8Array(new ArrayBuffer(all.reduce((s, c) => s + c.length, 0)));
|
|
59
|
+
let p = 0;
|
|
60
|
+
for (const c of all) {
|
|
61
|
+
out.set(c, p);
|
|
62
|
+
p += c.length;
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
/** Refuse archives that would expand beyond this many bytes (zip-bomb guard). */
|
|
67
|
+
export const MAX_UNZIPPED_BYTES = 200 * 1024 * 1024;
|
|
68
|
+
export async function unzip(buf, maxTotal = MAX_UNZIPPED_BYTES) {
|
|
69
|
+
const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
70
|
+
let eocd = -1;
|
|
71
|
+
for (let i = buf.length - 22; i >= Math.max(0, buf.length - 65_557); i--) {
|
|
72
|
+
if (dv.getUint32(i, true) === 0x06054b50) {
|
|
73
|
+
eocd = i;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (eocd < 0)
|
|
78
|
+
throw new Error('Not a ZIP/XLSX file');
|
|
79
|
+
const count = dv.getUint16(eocd + 10, true);
|
|
80
|
+
let p = dv.getUint32(eocd + 16, true);
|
|
81
|
+
const dec = new TextDecoder();
|
|
82
|
+
const out = new Map();
|
|
83
|
+
let total = 0;
|
|
84
|
+
for (let i = 0; i < count; i++) {
|
|
85
|
+
if (dv.getUint32(p, true) !== 0x02014b50)
|
|
86
|
+
throw new Error('Corrupt ZIP central directory');
|
|
87
|
+
const method = dv.getUint16(p + 10, true);
|
|
88
|
+
const csize = dv.getUint32(p + 20, true);
|
|
89
|
+
const usize = dv.getUint32(p + 24, true);
|
|
90
|
+
total += usize;
|
|
91
|
+
if (total > maxTotal)
|
|
92
|
+
throw new Error('This file expands to more data than allowed. It may be corrupt or malicious.');
|
|
93
|
+
const nlen = dv.getUint16(p + 28, true);
|
|
94
|
+
const elen = dv.getUint16(p + 30, true);
|
|
95
|
+
const clen = dv.getUint16(p + 32, true);
|
|
96
|
+
const lho = dv.getUint32(p + 42, true);
|
|
97
|
+
const name = dec.decode(buf.subarray(p + 46, p + 46 + nlen));
|
|
98
|
+
const lnlen = dv.getUint16(lho + 26, true);
|
|
99
|
+
const lelen = dv.getUint16(lho + 28, true);
|
|
100
|
+
const start = lho + 30 + lnlen + lelen;
|
|
101
|
+
const raw = buf.subarray(start, start + csize);
|
|
102
|
+
if (method === 0)
|
|
103
|
+
out.set(name, raw);
|
|
104
|
+
else if (method === 8) {
|
|
105
|
+
if (typeof DecompressionStream === 'undefined')
|
|
106
|
+
throw new Error('This browser cannot read compressed XLSX files');
|
|
107
|
+
const stream = new Blob([raw.slice()]).stream().pipeThrough(new DecompressionStream('deflate-raw'));
|
|
108
|
+
const bytes = new Uint8Array(await new Response(stream).arrayBuffer());
|
|
109
|
+
if (bytes.length > usize + 1024)
|
|
110
|
+
throw new Error('Workbook entry is larger than declared. The file may be corrupt.');
|
|
111
|
+
out.set(name, bytes);
|
|
112
|
+
}
|
|
113
|
+
else
|
|
114
|
+
throw new Error(`Unsupported ZIP compression method ${method}`);
|
|
115
|
+
p += 46 + nlen + elen + clen;
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
/* ---------------- XLSX writer ---------------- */
|
|
120
|
+
const esc = (v) => v.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"')
|
|
121
|
+
// strip characters that are illegal in XML 1.0
|
|
122
|
+
// eslint-disable-next-line no-control-regex
|
|
123
|
+
.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g, '');
|
|
124
|
+
export function colLetter(i) {
|
|
125
|
+
let s = '';
|
|
126
|
+
let n = i + 1;
|
|
127
|
+
while (n > 0) {
|
|
128
|
+
const m = (n - 1) % 26;
|
|
129
|
+
s = String.fromCharCode(65 + m) + s;
|
|
130
|
+
n = Math.floor((n - 1) / 26);
|
|
131
|
+
}
|
|
132
|
+
return s;
|
|
133
|
+
}
|
|
134
|
+
export function buildXlsx(sheets) {
|
|
135
|
+
const enc = new TextEncoder();
|
|
136
|
+
const sheetXml = (s) => {
|
|
137
|
+
const lines = [];
|
|
138
|
+
const cols = s.header.map((_, i) => `<col min="${i + 1}" max="${i + 1}" width="${Math.min(60, Math.max(8, s.widths?.[i] ?? 14))}" customWidth="1"/>`).join('');
|
|
139
|
+
const cell = (v, r, c, style = 0) => {
|
|
140
|
+
const ref = `${colLetter(c)}${r}`;
|
|
141
|
+
const st = style ? ` s="${style}"` : '';
|
|
142
|
+
if (v == null || v === '')
|
|
143
|
+
return `<c r="${ref}"${st}/>`;
|
|
144
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
145
|
+
return `<c r="${ref}"${st || ' s="2"'}><v>${v}</v></c>`;
|
|
146
|
+
if (typeof v === 'boolean')
|
|
147
|
+
return `<c r="${ref}" t="b"${st}><v>${v ? 1 : 0}</v></c>`;
|
|
148
|
+
return `<c r="${ref}" t="inlineStr"${st}><is><t xml:space="preserve">${esc(v instanceof Date ? v.toISOString().slice(0, 10) : String(v))}</t></is></c>`;
|
|
149
|
+
};
|
|
150
|
+
lines.push(`<row r="1">${s.header.map((h, c) => cell(h, 1, c, 1)).join('')}</row>`);
|
|
151
|
+
s.rows.forEach((row, ri) => lines.push(`<row r="${ri + 2}">${row.map((v, c) => cell(v, ri + 2, c)).join('')}</row>`));
|
|
152
|
+
const lastRef = `${colLetter(Math.max(0, s.header.length - 1))}${s.rows.length + 1}`;
|
|
153
|
+
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
154
|
+
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
155
|
+
<dimension ref="A1:${lastRef}"/><sheetViews><sheetView workbookViewId="0"><pane ySplit="1" topLeftCell="A2" activePane="bottomLeft" state="frozen"/></sheetView></sheetViews>
|
|
156
|
+
<cols>${cols}</cols><sheetData>${lines.join('')}</sheetData><autoFilter ref="A1:${lastRef}"/></worksheet>`;
|
|
157
|
+
};
|
|
158
|
+
const safeName = (n, i) => (n.replace(/[\\/?*[\]:]/g, ' ').slice(0, 31) || `Sheet${i + 1}`);
|
|
159
|
+
const files = [
|
|
160
|
+
{
|
|
161
|
+
name: '[Content_Types].xml',
|
|
162
|
+
data: `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
163
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>${sheets.map((_, i) => `<Override PartName="/xl/worksheets/sheet${i + 1}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`).join('')}</Types>`,
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: '_rels/.rels',
|
|
167
|
+
data: `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
168
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>`,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'xl/workbook.xml',
|
|
172
|
+
data: `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
173
|
+
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets>${sheets.map((s, i) => `<sheet name="${esc(safeName(s.name, i))}" sheetId="${i + 1}" r:id="rId${i + 1}"/>`).join('')}</sheets></workbook>`,
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'xl/_rels/workbook.xml.rels',
|
|
177
|
+
data: `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
178
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">${sheets.map((_, i) => `<Relationship Id="rId${i + 1}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet${i + 1}.xml"/>`).join('')}<Relationship Id="rId${sheets.length + 1}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>`,
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: 'xl/styles.xml',
|
|
182
|
+
data: `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
183
|
+
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><numFmts count="1"><numFmt numFmtId="164" formatCode="#,##0.##"/></numFmts><fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><color rgb="FF1A1710"/><name val="Calibri"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FFE8C766"/></patternFill></fill></fills><borders count="1"><border/></borders><cellStyleXfs count="1"><xf/></cellStyleXfs><cellXfs count="3"><xf/><xf fontId="1" fillId="2" applyFont="1" applyFill="1"/><xf numFmtId="164" applyNumberFormat="1"/></cellXfs></styleSheet>`,
|
|
184
|
+
},
|
|
185
|
+
...sheets.map((s, i) => ({ name: `xl/worksheets/sheet${i + 1}.xml`, data: sheetXml(s) })),
|
|
186
|
+
];
|
|
187
|
+
return zipStore(files.map((f) => ({ name: f.name, data: enc.encode(f.data) })));
|
|
188
|
+
}
|
|
189
|
+
const BUILTIN_DATE_FORMATS = new Set([14, 15, 16, 17, 18, 19, 20, 21, 22, 45, 46, 47]);
|
|
190
|
+
/** Excel serial date (1900 system) → ISO date or date-time string. */
|
|
191
|
+
export function excelSerialToIso(serial) {
|
|
192
|
+
const ms = Math.round((serial - 25569) * 86_400_000);
|
|
193
|
+
const iso = new Date(ms).toISOString();
|
|
194
|
+
return serial % 1 === 0 ? iso.slice(0, 10) : iso.slice(0, 19).replace('T', ' ');
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Read every worksheet in an .xlsx workbook (names in workbook order).
|
|
198
|
+
* Handles shared strings, inline strings, booleans and date-formatted numbers.
|
|
199
|
+
*/
|
|
200
|
+
export async function readWorkbook(input, opts = {}) {
|
|
201
|
+
const files = await unzip(input instanceof Uint8Array ? input : new Uint8Array(input));
|
|
202
|
+
const dec = new TextDecoder();
|
|
203
|
+
const parse = (name) => {
|
|
204
|
+
const f = files.get(name);
|
|
205
|
+
if (!f)
|
|
206
|
+
return null;
|
|
207
|
+
const doc = new DOMParser().parseFromString(dec.decode(f), 'application/xml');
|
|
208
|
+
if (doc.getElementsByTagName('parsererror').length)
|
|
209
|
+
throw new Error(`The workbook part ${name} is not valid XML`);
|
|
210
|
+
return doc;
|
|
211
|
+
};
|
|
212
|
+
const byTag = (root, tag) => [...root.getElementsByTagName(tag)];
|
|
213
|
+
const shared = [];
|
|
214
|
+
const ss = parse('xl/sharedStrings.xml');
|
|
215
|
+
if (ss)
|
|
216
|
+
for (const si of byTag(ss, 'si'))
|
|
217
|
+
shared.push(byTag(si, 't').filter((t) => t.parentElement?.tagName !== 'rPh').map((t) => t.textContent ?? '').join(''));
|
|
218
|
+
// date styles
|
|
219
|
+
const dateStyles = new Set();
|
|
220
|
+
const styles = parse('xl/styles.xml');
|
|
221
|
+
if (styles) {
|
|
222
|
+
const custom = new Map();
|
|
223
|
+
for (const nf of byTag(styles, 'numFmt'))
|
|
224
|
+
custom.set(Number(nf.getAttribute('numFmtId')), nf.getAttribute('formatCode') ?? '');
|
|
225
|
+
const xfs = byTag(styles, 'cellXfs')[0];
|
|
226
|
+
if (xfs)
|
|
227
|
+
byTag(xfs, 'xf').forEach((xf, i) => {
|
|
228
|
+
const id = Number(xf.getAttribute('numFmtId') ?? 0);
|
|
229
|
+
const code = custom.get(id) ?? '';
|
|
230
|
+
if (BUILTIN_DATE_FORMATS.has(id) || (/[dmyh]/i.test(code.replace(/\[[^\]]*\]|"[^"]*"/g, '')) && !/^[#0.,%]+$/.test(code)))
|
|
231
|
+
dateStyles.add(i);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
// sheet names → paths
|
|
235
|
+
const wb = parse('xl/workbook.xml');
|
|
236
|
+
const rels = parse('xl/_rels/workbook.xml.rels');
|
|
237
|
+
const relTarget = new Map();
|
|
238
|
+
if (rels)
|
|
239
|
+
for (const r of byTag(rels, 'Relationship'))
|
|
240
|
+
relTarget.set(r.getAttribute('Id') ?? '', r.getAttribute('Target') ?? '');
|
|
241
|
+
let entries = [];
|
|
242
|
+
if (wb) {
|
|
243
|
+
entries = byTag(wb, 'sheet').map((s, i) => {
|
|
244
|
+
const rid = s.getAttribute('r:id') ?? s.getAttributeNS('http://schemas.openxmlformats.org/officeDocument/2006/relationships', 'id') ?? '';
|
|
245
|
+
let target = relTarget.get(rid) ?? `worksheets/sheet${i + 1}.xml`;
|
|
246
|
+
target = target.replace(/^\/?xl\//, '').replace(/^\//, '');
|
|
247
|
+
return { name: s.getAttribute('name') ?? `Sheet${i + 1}`, path: `xl/${target}` };
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
if (!entries.length) {
|
|
251
|
+
entries = [...files.keys()].filter((k) => /^xl\/worksheets\/sheet\d+\.xml$/.test(k)).sort().map((path, i) => ({ name: `Sheet${i + 1}`, path }));
|
|
252
|
+
}
|
|
253
|
+
if (!entries.length)
|
|
254
|
+
throw new Error('No worksheets found in this workbook.');
|
|
255
|
+
const colIdx = (ref) => {
|
|
256
|
+
const letters = /^[A-Z]+/.exec(ref)?.[0] ?? 'A';
|
|
257
|
+
let n = 0;
|
|
258
|
+
for (const ch of letters)
|
|
259
|
+
n = n * 26 + (ch.charCodeAt(0) - 64);
|
|
260
|
+
return n - 1;
|
|
261
|
+
};
|
|
262
|
+
const maxRows = opts.maxRows ?? 1_000_000;
|
|
263
|
+
return entries.map(({ name, path }) => {
|
|
264
|
+
const sheet = parse(path);
|
|
265
|
+
if (!sheet)
|
|
266
|
+
return { name, header: [], rows: [] };
|
|
267
|
+
const grid = [];
|
|
268
|
+
let width = 0;
|
|
269
|
+
let rowIndex = 0;
|
|
270
|
+
for (const rowEl of byTag(sheet, 'row')) {
|
|
271
|
+
const r = rowEl.getAttribute('r') ? Number(rowEl.getAttribute('r')) - 1 : rowIndex;
|
|
272
|
+
rowIndex = r + 1;
|
|
273
|
+
if (r > maxRows)
|
|
274
|
+
break;
|
|
275
|
+
const row = [];
|
|
276
|
+
let ci = 0;
|
|
277
|
+
for (const c of byTag(rowEl, 'c')) {
|
|
278
|
+
ci = c.getAttribute('r') ? colIdx(c.getAttribute('r')) : ci;
|
|
279
|
+
const t = c.getAttribute('t');
|
|
280
|
+
const v = byTag(c, 'v')[0]?.textContent ?? null;
|
|
281
|
+
let val = null;
|
|
282
|
+
if (t === 's')
|
|
283
|
+
val = v != null ? shared[Number(v)] ?? '' : '';
|
|
284
|
+
else if (t === 'inlineStr')
|
|
285
|
+
val = byTag(c, 't').map((x) => x.textContent ?? '').join('');
|
|
286
|
+
else if (t === 'b')
|
|
287
|
+
val = v === '1';
|
|
288
|
+
else if (t === 'str' || t === 'e')
|
|
289
|
+
val = v ?? '';
|
|
290
|
+
else if (v != null) {
|
|
291
|
+
const n = Number(v);
|
|
292
|
+
val = dateStyles.has(Number(c.getAttribute('s') ?? -1)) && Number.isFinite(n) ? excelSerialToIso(n) : n;
|
|
293
|
+
}
|
|
294
|
+
row[ci] = val;
|
|
295
|
+
width = Math.max(width, ci + 1);
|
|
296
|
+
ci++;
|
|
297
|
+
}
|
|
298
|
+
grid[r] = row;
|
|
299
|
+
}
|
|
300
|
+
const dense = [];
|
|
301
|
+
for (let i = 0; i < grid.length; i++)
|
|
302
|
+
dense.push(Array.from({ length: width }, (_, j) => grid[i]?.[j] ?? null));
|
|
303
|
+
// drop trailing empty rows
|
|
304
|
+
while (dense.length && dense[dense.length - 1].every((v) => v == null || v === ''))
|
|
305
|
+
dense.pop();
|
|
306
|
+
const [header = [], ...rows] = dense;
|
|
307
|
+
return { name, header: header.map((h) => (h == null ? '' : String(h))), rows };
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
/** First worksheet only (kept for compatibility). */
|
|
311
|
+
export async function readXlsx(input) {
|
|
312
|
+
const [first] = await readWorkbook(input);
|
|
313
|
+
return { header: first.header, rows: first.rows };
|
|
314
|
+
}
|
|
315
|
+
export const ExcelExportModule = {
|
|
316
|
+
name: 'ExcelExportModule',
|
|
317
|
+
install(grid) {
|
|
318
|
+
const build = (p = {}) => {
|
|
319
|
+
const m = grid.getExportMatrix({ onlySelected: p.onlySelected, columnKeys: p.columnKeys, useFormatted: false });
|
|
320
|
+
const rows = m.nodes.map((n) => m.columns.map((c) => {
|
|
321
|
+
const v = grid.getCellValue(n, c.colId);
|
|
322
|
+
if (n.group && n.data === undefined && !c.isAutoGroup && v == null)
|
|
323
|
+
return null;
|
|
324
|
+
return typeof v === 'number' || typeof v === 'boolean' ? v : v == null ? '' : c.colDef.valueFormatter ? grid.getCellFormatted(n, c.colId) : v instanceof Date ? v : String(v);
|
|
325
|
+
}));
|
|
326
|
+
const widths = m.columns.map((c) => Math.round(c.actualWidth / 7));
|
|
327
|
+
return buildXlsx([{ name: p.sheetName ?? 'Aurum Grid', header: m.header, rows, widths }]);
|
|
328
|
+
};
|
|
329
|
+
const api = {
|
|
330
|
+
getDataAsExcel: (p) => build(p),
|
|
331
|
+
exportDataAsExcel(p = {}) {
|
|
332
|
+
const bytes = build(p);
|
|
333
|
+
downloadBlob(p.fileName ?? 'aurum-grid-export.xlsx', new Blob([bytes], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }));
|
|
334
|
+
grid.announce('Excel export ready');
|
|
335
|
+
return bytes;
|
|
336
|
+
},
|
|
337
|
+
async importExcel(file, p = {}) {
|
|
338
|
+
const buf = file instanceof Blob ? await (typeof file.arrayBuffer === 'function' ? file.arrayBuffer() : new Response(file).arrayBuffer()) : file;
|
|
339
|
+
const { header, rows } = await readXlsx(buf);
|
|
340
|
+
const cols = grid.getColumns();
|
|
341
|
+
const map = header.map((h) => cols.find((c) => c.headerName === h || c.colDef.field === h || c.colId === h));
|
|
342
|
+
const data = rows.map((r) => {
|
|
343
|
+
const o = {};
|
|
344
|
+
map.forEach((c, i) => {
|
|
345
|
+
if (c?.colDef.field)
|
|
346
|
+
o[c.colDef.field] = r[i];
|
|
347
|
+
else if (!c)
|
|
348
|
+
o[header[i]] = r[i];
|
|
349
|
+
});
|
|
350
|
+
return o;
|
|
351
|
+
});
|
|
352
|
+
if (p.mode === 'append')
|
|
353
|
+
grid.applyTransaction({ add: data });
|
|
354
|
+
else
|
|
355
|
+
grid.setRowData(data);
|
|
356
|
+
return data.length;
|
|
357
|
+
},
|
|
358
|
+
exportDataAsPdf(p = {}) {
|
|
359
|
+
// Uses the browser's print dialog ("Save as PDF"). Text is inserted with textContent only.
|
|
360
|
+
const m = grid.getExportMatrix({});
|
|
361
|
+
const iframe = document.createElement('iframe');
|
|
362
|
+
iframe.style.cssText = 'position:fixed;right:0;bottom:0;width:0;height:0;border:0';
|
|
363
|
+
document.body.append(iframe);
|
|
364
|
+
const doc = iframe.contentDocument;
|
|
365
|
+
if (!doc)
|
|
366
|
+
return;
|
|
367
|
+
const style = doc.createElement('style');
|
|
368
|
+
style.textContent = 'body{font:11px system-ui,sans-serif;color:#111;margin:16px}h1{font-size:16px;margin:0 0 8px}table{border-collapse:collapse;width:100%}th,td{border:1px solid #bbb;padding:3px 6px;text-align:left}th{background:#f3ecdb}td.n{text-align:right}@page{size:landscape;margin:12mm}';
|
|
369
|
+
doc.head.append(style);
|
|
370
|
+
const h1 = doc.createElement('h1');
|
|
371
|
+
h1.textContent = p.title ?? 'Aurum Grid export';
|
|
372
|
+
const table = doc.createElement('table');
|
|
373
|
+
const thead = doc.createElement('thead');
|
|
374
|
+
const trh = doc.createElement('tr');
|
|
375
|
+
for (const hd of m.header) {
|
|
376
|
+
const th = doc.createElement('th');
|
|
377
|
+
th.textContent = hd;
|
|
378
|
+
trh.append(th);
|
|
379
|
+
}
|
|
380
|
+
thead.append(trh);
|
|
381
|
+
const tbody = doc.createElement('tbody');
|
|
382
|
+
m.rows.slice(0, 5000).forEach((r) => {
|
|
383
|
+
const tr = doc.createElement('tr');
|
|
384
|
+
r.forEach((v, i) => {
|
|
385
|
+
const td = doc.createElement('td');
|
|
386
|
+
td.textContent = v;
|
|
387
|
+
if (m.columns[i].isNumeric)
|
|
388
|
+
td.className = 'n';
|
|
389
|
+
tr.append(td);
|
|
390
|
+
});
|
|
391
|
+
tbody.append(tr);
|
|
392
|
+
});
|
|
393
|
+
table.append(thead, tbody);
|
|
394
|
+
doc.body.append(h1, table);
|
|
395
|
+
setTimeout(() => {
|
|
396
|
+
iframe.contentWindow?.focus();
|
|
397
|
+
iframe.contentWindow?.print();
|
|
398
|
+
setTimeout(() => iframe.remove(), 1000);
|
|
399
|
+
}, 50);
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
Object.assign(grid, api);
|
|
403
|
+
return () => {
|
|
404
|
+
for (const k of Object.keys(api))
|
|
405
|
+
delete grid[k];
|
|
406
|
+
};
|
|
407
|
+
},
|
|
408
|
+
};
|
|
409
|
+
//# sourceMappingURL=excel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excel.js","sourceRoot":"","sources":["../src/excel.ts"],"names":[],"mappings":"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"}
|
package/dist/extras.d.ts
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { Grid, GridModule, GridState, IDatasource, FilterModel, SortModelItem } from '@aurum-grid/core';
|
|
2
|
+
declare module '@aurum-grid/core' {
|
|
3
|
+
interface GridOptions<T> {
|
|
4
|
+
/** Called by the context menu "Chart" action with the current range/selection. */
|
|
5
|
+
/**
|
|
6
|
+
* Called by the context menu chart actions with the current range/selection.
|
|
7
|
+
* `chartType` is set when the user picked a type from the "Chart" submenu.
|
|
8
|
+
* Typical use: `onChartRequest: ({ api, chartType }) => openIntegratedChart(api, { chartType })`.
|
|
9
|
+
*/
|
|
10
|
+
onChartRequest?: (params: {
|
|
11
|
+
api: Grid<T>;
|
|
12
|
+
source: 'range' | 'selection' | 'rows';
|
|
13
|
+
chartType?: string;
|
|
14
|
+
}) => void;
|
|
15
|
+
/** Storage key for saved views (defaults to "default"). */
|
|
16
|
+
gridKey?: string;
|
|
17
|
+
viewStorage?: Pick<Storage, 'getItem' | 'setItem'>;
|
|
18
|
+
}
|
|
19
|
+
interface Grid<T> {
|
|
20
|
+
saveView(name: string): SavedView;
|
|
21
|
+
listViews(): SavedView[];
|
|
22
|
+
applyView(name: string): boolean;
|
|
23
|
+
deleteView(name: string): boolean;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export declare const ContextMenuModule: GridModule;
|
|
27
|
+
export interface SavedView {
|
|
28
|
+
name: string;
|
|
29
|
+
savedAt: string;
|
|
30
|
+
state: GridState;
|
|
31
|
+
}
|
|
32
|
+
export declare const SavedViewsModule: GridModule;
|
|
33
|
+
export interface StreamMessage<T> {
|
|
34
|
+
add?: T[];
|
|
35
|
+
update?: T[];
|
|
36
|
+
remove?: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
} | T>;
|
|
39
|
+
/** upsert: update if the id exists, otherwise add */
|
|
40
|
+
upsert?: T[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Batches high-frequency updates into async transactions.
|
|
44
|
+
* `push` accepts upserts; call `dispose` when done.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createStreamBuffer<T>(grid: Grid<T>, opts: {
|
|
47
|
+
getId: (row: T) => string;
|
|
48
|
+
maxBatch?: number;
|
|
49
|
+
}): {
|
|
50
|
+
push(msg: StreamMessage<T>): void;
|
|
51
|
+
readonly received: number;
|
|
52
|
+
dispose(): void;
|
|
53
|
+
};
|
|
54
|
+
export type StreamStatus = 'connecting' | 'live' | 'disconnected' | 'error';
|
|
55
|
+
/** wss:// is required; ws:// is accepted only for localhost development. */
|
|
56
|
+
export declare function validateStreamUrl(raw: string): {
|
|
57
|
+
ok: true;
|
|
58
|
+
url: URL;
|
|
59
|
+
} | {
|
|
60
|
+
ok: false;
|
|
61
|
+
error: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Connect a grid to a WebSocket that sends JSON StreamMessage payloads.
|
|
65
|
+
* Only ws:// or wss:// URLs are accepted. Messages that fail to parse are counted and dropped.
|
|
66
|
+
*/
|
|
67
|
+
export declare function connectWebSocketStream<T>(grid: Grid<T>, url: string, opts: {
|
|
68
|
+
getId: (row: T) => string;
|
|
69
|
+
onStatus?: (s: StreamStatus, detail?: string) => void;
|
|
70
|
+
parse?: (raw: string) => StreamMessage<T>;
|
|
71
|
+
}): {
|
|
72
|
+
close: () => void;
|
|
73
|
+
stats: () => {
|
|
74
|
+
messages: number;
|
|
75
|
+
errors: number;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
export interface ServerRequest {
|
|
79
|
+
startRow: number;
|
|
80
|
+
endRow: number;
|
|
81
|
+
sortModel: SortModelItem[];
|
|
82
|
+
filterModel: FilterModel;
|
|
83
|
+
quickFilterText: string;
|
|
84
|
+
signal: AbortSignal;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Builds an infinite-row-model datasource from an async fetcher. The fetcher
|
|
88
|
+
* receives sort/filter state so the server can do the heavy lifting.
|
|
89
|
+
*/
|
|
90
|
+
export declare function createServerSideDatasource<T>(fetcher: (req: ServerRequest) => Promise<{
|
|
91
|
+
rows: T[];
|
|
92
|
+
lastRow?: number;
|
|
93
|
+
}>, opts?: {
|
|
94
|
+
timeoutMs?: number;
|
|
95
|
+
}): IDatasource<T>;
|