persian-data-grid 0.5.0 → 0.6.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/OFL.txt +93 -0
- package/README.md +179 -22
- package/dist/ERPTableGroupRow-J5Z2LRC5.cjs +131 -0
- package/dist/ERPTableGroupRow-J5Z2LRC5.cjs.map +1 -0
- package/dist/ERPTableGroupRow-PSAPAHGL.js +125 -0
- package/dist/ERPTableGroupRow-PSAPAHGL.js.map +1 -0
- package/dist/GridPlugin-CJCaYnlw.d.ts +57 -0
- package/dist/GridPlugin-oxhq8AsM.d.cts +57 -0
- package/dist/GridPresenceService-GEH6535Q.js +3 -0
- package/dist/GridPresenceService-GEH6535Q.js.map +1 -0
- package/dist/GridPresenceService-RDN5FXHQ.cjs +12 -0
- package/dist/GridPresenceService-RDN5FXHQ.cjs.map +1 -0
- package/dist/GridSession-B-9lLcoB.d.cts +2492 -0
- package/dist/GridSession-Bc7UIawO.d.ts +2492 -0
- package/dist/GridSyncService-KTLB4KP3.js +3 -0
- package/dist/GridSyncService-KTLB4KP3.js.map +1 -0
- package/dist/GridSyncService-TAPAHABV.cjs +12 -0
- package/dist/GridSyncService-TAPAHABV.cjs.map +1 -0
- package/dist/PdfRenderer-1HFh6UeR.d.ts +22 -0
- package/dist/PdfRenderer-CBg7hWNS.d.cts +22 -0
- package/dist/RemoteApi-CCQxiSf1.d.cts +28 -0
- package/dist/RemoteApi-CCQxiSf1.d.ts +28 -0
- package/dist/SelectImpl-NM4O4IGW.js +447 -0
- package/dist/SelectImpl-NM4O4IGW.js.map +1 -0
- package/dist/SelectImpl-W2EI4T7O.cjs +453 -0
- package/dist/SelectImpl-W2EI4T7O.cjs.map +1 -0
- package/dist/UITableController-Cuwq481K.d.cts +632 -0
- package/dist/UITableController-DU8RopUM.d.ts +632 -0
- package/dist/VazirmatnPdfRenderer-BCMpC1zy.d.cts +96 -0
- package/dist/VazirmatnPdfRenderer-Dz_G-m3c.d.ts +96 -0
- package/dist/adapters/arian-erp.cjs +77 -0
- package/dist/adapters/arian-erp.cjs.map +1 -0
- package/dist/adapters/arian-erp.d.cts +60 -0
- package/dist/adapters/arian-erp.d.ts +60 -0
- package/dist/adapters/arian-erp.js +71 -0
- package/dist/adapters/arian-erp.js.map +1 -0
- package/dist/appendAtEnd-RHIQRG2W.cjs +35 -0
- package/dist/appendAtEnd-RHIQRG2W.cjs.map +1 -0
- package/dist/appendAtEnd-TJEABLGD.js +33 -0
- package/dist/appendAtEnd-TJEABLGD.js.map +1 -0
- package/dist/applyImportedRows-BO6yxoAN.d.cts +135 -0
- package/dist/applyImportedRows-D4zVY8uD.d.ts +135 -0
- package/dist/applyRowVisibilityHandler-KS6TMCBN.js +83 -0
- package/dist/applyRowVisibilityHandler-KS6TMCBN.js.map +1 -0
- package/dist/applyRowVisibilityHandler-LXCOGESZ.cjs +85 -0
- package/dist/applyRowVisibilityHandler-LXCOGESZ.cjs.map +1 -0
- package/dist/broadcastChannelTransport-FHUMV76O.cjs +12 -0
- package/dist/broadcastChannelTransport-FHUMV76O.cjs.map +1 -0
- package/dist/broadcastChannelTransport-MIH53VNZ.js +3 -0
- package/dist/broadcastChannelTransport-MIH53VNZ.js.map +1 -0
- package/dist/callbackRemoteApi-BlXO5NJz.d.ts +30 -0
- package/dist/callbackRemoteApi-DgnXH-i0.d.cts +30 -0
- package/dist/cellRenderContext-DB7V_mlu.d.ts +42 -0
- package/dist/cellRenderContext-DG5BOlxK.d.cts +42 -0
- package/dist/chunk-2BJCRYOS.cjs +936 -0
- package/dist/chunk-2BJCRYOS.cjs.map +1 -0
- package/dist/chunk-3Y3KKGEC.js +3 -0
- package/dist/chunk-3Y3KKGEC.js.map +1 -0
- package/dist/chunk-5ALMNLUR.cjs +1408 -0
- package/dist/chunk-5ALMNLUR.cjs.map +1 -0
- package/dist/chunk-5HKVMPBD.js +937 -0
- package/dist/chunk-5HKVMPBD.js.map +1 -0
- package/dist/chunk-633KP74Z.js +189 -0
- package/dist/chunk-633KP74Z.js.map +1 -0
- package/dist/chunk-6XBXZPBW.js +298 -0
- package/dist/chunk-6XBXZPBW.js.map +1 -0
- package/dist/chunk-77UXAJII.js +112 -0
- package/dist/chunk-77UXAJII.js.map +1 -0
- package/dist/chunk-ASPTRYRD.cjs +21 -0
- package/dist/chunk-ASPTRYRD.cjs.map +1 -0
- package/dist/chunk-AU3RDJYQ.js +243 -0
- package/dist/chunk-AU3RDJYQ.js.map +1 -0
- package/dist/chunk-BHDRUZH5.cjs +33 -0
- package/dist/chunk-BHDRUZH5.cjs.map +1 -0
- package/dist/chunk-BLYVOV3G.cjs +191 -0
- package/dist/chunk-BLYVOV3G.cjs.map +1 -0
- package/dist/chunk-CILNIWYW.cjs +100 -0
- package/dist/chunk-CILNIWYW.cjs.map +1 -0
- package/dist/chunk-DFFP7SJ6.cjs +257 -0
- package/dist/chunk-DFFP7SJ6.cjs.map +1 -0
- package/dist/chunk-DXRCYW42.cjs +568 -0
- package/dist/chunk-DXRCYW42.cjs.map +1 -0
- package/dist/chunk-EBV6HGZB.cjs +33 -0
- package/dist/chunk-EBV6HGZB.cjs.map +1 -0
- package/dist/chunk-EHHHC5JV.js +832 -0
- package/dist/chunk-EHHHC5JV.js.map +1 -0
- package/dist/chunk-F4PYOYHR.js +112 -0
- package/dist/chunk-F4PYOYHR.js.map +1 -0
- package/dist/chunk-GQEDLUMB.js +168 -0
- package/dist/chunk-GQEDLUMB.js.map +1 -0
- package/dist/chunk-H2LESGMX.cjs +319 -0
- package/dist/chunk-H2LESGMX.cjs.map +1 -0
- package/dist/chunk-HTNJT2QU.js +11674 -0
- package/dist/chunk-HTNJT2QU.js.map +1 -0
- package/dist/chunk-IIISFUW4.cjs +11786 -0
- package/dist/chunk-IIISFUW4.cjs.map +1 -0
- package/dist/chunk-IMPCRWYP.cjs +251 -0
- package/dist/chunk-IMPCRWYP.cjs.map +1 -0
- package/dist/chunk-IPPIXOVQ.js +317 -0
- package/dist/chunk-IPPIXOVQ.js.map +1 -0
- package/dist/chunk-J4XJ4UBC.js +1404 -0
- package/dist/chunk-J4XJ4UBC.js.map +1 -0
- package/dist/chunk-J7CPPFXT.cjs +89 -0
- package/dist/chunk-J7CPPFXT.cjs.map +1 -0
- package/dist/chunk-JOICD47Q.cjs +41 -0
- package/dist/chunk-JOICD47Q.cjs.map +1 -0
- package/dist/chunk-KHMG6EI2.js +13 -0
- package/dist/chunk-KHMG6EI2.js.map +1 -0
- package/dist/chunk-KMRURD5J.cjs +15 -0
- package/dist/chunk-KMRURD5J.cjs.map +1 -0
- package/dist/chunk-KRJG3KMP.cjs +174 -0
- package/dist/chunk-KRJG3KMP.cjs.map +1 -0
- package/dist/chunk-KUBVDIF7.cjs +653 -0
- package/dist/chunk-KUBVDIF7.cjs.map +1 -0
- package/dist/chunk-KYAOSBQN.js +31 -0
- package/dist/chunk-KYAOSBQN.js.map +1 -0
- package/dist/chunk-LJ7LMEXO.js +36 -0
- package/dist/chunk-LJ7LMEXO.js.map +1 -0
- package/dist/chunk-MT3KLB2Q.cjs +944 -0
- package/dist/chunk-MT3KLB2Q.cjs.map +1 -0
- package/dist/chunk-MU3RY46O.js +932 -0
- package/dist/chunk-MU3RY46O.js.map +1 -0
- package/dist/chunk-MUQQKPWR.js +84 -0
- package/dist/chunk-MUQQKPWR.js.map +1 -0
- package/dist/chunk-N7SJTINL.cjs +4 -0
- package/dist/chunk-N7SJTINL.cjs.map +1 -0
- package/dist/chunk-NTV2UUAJ.cjs +149 -0
- package/dist/chunk-NTV2UUAJ.cjs.map +1 -0
- package/dist/chunk-PJQWHF6T.js +31 -0
- package/dist/chunk-PJQWHF6T.js.map +1 -0
- package/dist/chunk-PQY54EL5.js +248 -0
- package/dist/chunk-PQY54EL5.js.map +1 -0
- package/dist/chunk-PXCHPZTP.cjs +839 -0
- package/dist/chunk-PXCHPZTP.cjs.map +1 -0
- package/dist/chunk-Q7TBBUTX.cjs +110 -0
- package/dist/chunk-Q7TBBUTX.cjs.map +1 -0
- package/dist/chunk-QQMU44KJ.js +612 -0
- package/dist/chunk-QQMU44KJ.js.map +1 -0
- package/dist/chunk-QZN7R2WP.cjs +114 -0
- package/dist/chunk-QZN7R2WP.cjs.map +1 -0
- package/dist/chunk-RKVSJU46.js +35 -0
- package/dist/chunk-RKVSJU46.js.map +1 -0
- package/dist/chunk-RM6ZWNT3.js +561 -0
- package/dist/chunk-RM6ZWNT3.js.map +1 -0
- package/dist/chunk-SX4VQXAA.cjs +114 -0
- package/dist/chunk-SX4VQXAA.cjs.map +1 -0
- package/dist/chunk-SZ7BLAY3.js +92 -0
- package/dist/chunk-SZ7BLAY3.js.map +1 -0
- package/dist/chunk-TN4MG6FY.js +112 -0
- package/dist/chunk-TN4MG6FY.js.map +1 -0
- package/dist/chunk-UC7PHDM6.cjs +331 -0
- package/dist/chunk-UC7PHDM6.cjs.map +1 -0
- package/dist/chunk-UXVLYUUW.js +108 -0
- package/dist/chunk-UXVLYUUW.js.map +1 -0
- package/dist/chunk-VVGYRZ7S.cjs +38 -0
- package/dist/chunk-VVGYRZ7S.cjs.map +1 -0
- package/dist/chunk-W5256BJ4.js +56 -0
- package/dist/chunk-W5256BJ4.js.map +1 -0
- package/dist/chunk-WUMOSOEK.cjs +62 -0
- package/dist/chunk-WUMOSOEK.cjs.map +1 -0
- package/dist/chunk-XLRE2J25.js +140 -0
- package/dist/chunk-XLRE2J25.js.map +1 -0
- package/dist/chunk-Y6W5V2CI.js +19 -0
- package/dist/chunk-Y6W5V2CI.js.map +1 -0
- package/dist/chunk-Z4QPZ3Z3.cjs +114 -0
- package/dist/chunk-Z4QPZ3Z3.cjs.map +1 -0
- package/dist/createEngineGridQuery-Dmq3i5v3.d.cts +884 -0
- package/dist/createEngineGridQuery-Mt1hc33m.d.ts +884 -0
- package/dist/date-picker-jalali.cjs +263 -0
- package/dist/date-picker-jalali.cjs.map +1 -0
- package/dist/date-picker-jalali.d.cts +62 -0
- package/dist/date-picker-jalali.d.ts +62 -0
- package/dist/date-picker-jalali.js +256 -0
- package/dist/date-picker-jalali.js.map +1 -0
- package/dist/finance.cjs +205 -0
- package/dist/finance.cjs.map +1 -0
- package/dist/finance.d.cts +90 -0
- package/dist/finance.d.ts +90 -0
- package/dist/finance.js +157 -0
- package/dist/finance.js.map +1 -0
- package/dist/foldedColumn-IHDT4ARZ.cjs +66 -0
- package/dist/foldedColumn-IHDT4ARZ.cjs.map +1 -0
- package/dist/foldedColumn-TFURUKFG.js +64 -0
- package/dist/foldedColumn-TFURUKFG.js.map +1 -0
- package/dist/headless.cjs +729 -0
- package/dist/headless.cjs.map +1 -0
- package/dist/headless.d.cts +504 -0
- package/dist/headless.d.ts +504 -0
- package/dist/headless.js +226 -0
- package/dist/headless.js.map +1 -0
- package/dist/index-DN8M8Jkq.d.cts +14 -0
- package/dist/index-DmzL-F_o.d.ts +14 -0
- package/dist/index.cjs +8002 -11409
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +437 -2305
- package/dist/index.d.ts +437 -2305
- package/dist/index.js +7244 -11083
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.cjs +12 -0
- package/dist/locales/ar.cjs.map +1 -0
- package/dist/locales/ar.d.cts +6 -0
- package/dist/locales/ar.d.ts +6 -0
- package/dist/locales/ar.js +3 -0
- package/dist/locales/ar.js.map +1 -0
- package/dist/locales/en.cjs +12 -0
- package/dist/locales/en.cjs.map +1 -0
- package/dist/locales/en.d.cts +6 -0
- package/dist/locales/en.d.ts +6 -0
- package/dist/locales/en.js +3 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/locales/fa.cjs +12 -0
- package/dist/locales/fa.cjs.map +1 -0
- package/dist/locales/fa.d.cts +6 -0
- package/dist/locales/fa.d.ts +6 -0
- package/dist/locales/fa.js +3 -0
- package/dist/locales/fa.js.map +1 -0
- package/dist/locales/index.cjs +51 -0
- package/dist/locales/index.cjs.map +1 -0
- package/dist/locales/index.d.cts +5 -0
- package/dist/locales/index.d.ts +5 -0
- package/dist/locales/index.js +6 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/memoryRecords-AWDKUJ2F.cjs +50 -0
- package/dist/memoryRecords-AWDKUJ2F.cjs.map +1 -0
- package/dist/memoryRecords-OJTGXLRH.js +47 -0
- package/dist/memoryRecords-OJTGXLRH.js.map +1 -0
- package/dist/pagedFooterTotals-DXCGDO6F.cjs +27 -0
- package/dist/pagedFooterTotals-DXCGDO6F.cjs.map +1 -0
- package/dist/pagedFooterTotals-ORWKUNE7.js +25 -0
- package/dist/pagedFooterTotals-ORWKUNE7.js.map +1 -0
- package/dist/pagedKit-MFGAJFSK.cjs +134 -0
- package/dist/pagedKit-MFGAJFSK.cjs.map +1 -0
- package/dist/pagedKit-WYWY4LRV.js +127 -0
- package/dist/pagedKit-WYWY4LRV.js.map +1 -0
- package/dist/pagedSearch-HCPJW7VM.js +38 -0
- package/dist/pagedSearch-HCPJW7VM.js.map +1 -0
- package/dist/pagedSearch-U3WCG4GN.cjs +42 -0
- package/dist/pagedSearch-U3WCG4GN.cjs.map +1 -0
- package/dist/plugins/csv.cjs +124 -0
- package/dist/plugins/csv.cjs.map +1 -0
- package/dist/plugins/csv.d.cts +44 -0
- package/dist/plugins/csv.d.ts +44 -0
- package/dist/plugins/csv.js +120 -0
- package/dist/plugins/csv.js.map +1 -0
- package/dist/plugins/excel.cjs +52 -0
- package/dist/plugins/excel.cjs.map +1 -0
- package/dist/plugins/excel.d.cts +14 -0
- package/dist/plugins/excel.d.ts +14 -0
- package/dist/plugins/excel.js +7 -0
- package/dist/plugins/excel.js.map +1 -0
- package/dist/plugins/pdf/fonts/vazirmatn.cjs +50 -0
- package/dist/plugins/pdf/fonts/vazirmatn.cjs.map +1 -0
- package/dist/plugins/pdf/fonts/vazirmatn.d.cts +24 -0
- package/dist/plugins/pdf/fonts/vazirmatn.d.ts +24 -0
- package/dist/plugins/pdf/fonts/vazirmatn.js +39 -0
- package/dist/plugins/pdf/fonts/vazirmatn.js.map +1 -0
- package/dist/plugins/pdf.cjs +24 -0
- package/dist/plugins/pdf.cjs.map +1 -0
- package/dist/plugins/pdf.d.cts +21 -0
- package/dist/plugins/pdf.d.ts +21 -0
- package/dist/plugins/pdf.js +7 -0
- package/dist/plugins/pdf.js.map +1 -0
- package/dist/presence.cjs +56 -0
- package/dist/presence.cjs.map +1 -0
- package/dist/presence.d.cts +17 -0
- package/dist/presence.d.ts +17 -0
- package/dist/presence.js +54 -0
- package/dist/presence.js.map +1 -0
- package/dist/rebuildRowVisibility-66EAZ356.cjs +21 -0
- package/dist/rebuildRowVisibility-66EAZ356.cjs.map +1 -0
- package/dist/rebuildRowVisibility-6TYM5BP2.js +19 -0
- package/dist/rebuildRowVisibility-6TYM5BP2.js.map +1 -0
- package/dist/styles.css +1440 -0
- package/dist/sync.cjs +148 -0
- package/dist/sync.cjs.map +1 -0
- package/dist/sync.d.cts +17 -0
- package/dist/sync.d.ts +17 -0
- package/dist/sync.js +146 -0
- package/dist/sync.js.map +1 -0
- package/dist/types-D__47BKv.d.cts +23 -0
- package/dist/types-D__47BKv.d.ts +23 -0
- package/package.json +184 -28
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
// packages/plugins/excel/src/buildXlsxBlob.ts
|
|
2
|
+
var escapeXml = (value) => value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
3
|
+
var toColumnLetter = (index) => {
|
|
4
|
+
let n = index + 1;
|
|
5
|
+
let result = "";
|
|
6
|
+
while (n > 0) {
|
|
7
|
+
const rem = (n - 1) % 26;
|
|
8
|
+
result = String.fromCharCode(65 + rem) + result;
|
|
9
|
+
n = Math.floor((n - 1) / 26);
|
|
10
|
+
}
|
|
11
|
+
return result;
|
|
12
|
+
};
|
|
13
|
+
var crcTable = (() => {
|
|
14
|
+
const table = new Uint32Array(256);
|
|
15
|
+
for (let i = 0; i < 256; i += 1) {
|
|
16
|
+
let c = i;
|
|
17
|
+
for (let k = 0; k < 8; k += 1) {
|
|
18
|
+
c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
|
|
19
|
+
}
|
|
20
|
+
table[i] = c >>> 0;
|
|
21
|
+
}
|
|
22
|
+
return table;
|
|
23
|
+
})();
|
|
24
|
+
var crc32 = (data) => {
|
|
25
|
+
let crc = 4294967295;
|
|
26
|
+
for (let i = 0; i < data.length; i += 1) {
|
|
27
|
+
crc = crcTable[(crc ^ data[i]) & 255] ^ crc >>> 8;
|
|
28
|
+
}
|
|
29
|
+
return (crc ^ 4294967295) >>> 0;
|
|
30
|
+
};
|
|
31
|
+
var textEncoder = new TextEncoder();
|
|
32
|
+
var buildZip = (entries) => {
|
|
33
|
+
const parts = [];
|
|
34
|
+
const centralParts = [];
|
|
35
|
+
let offset = 0;
|
|
36
|
+
for (const entry of entries) {
|
|
37
|
+
const nameBytes = textEncoder.encode(entry.name);
|
|
38
|
+
const data = entry.data;
|
|
39
|
+
const crc = crc32(data);
|
|
40
|
+
const size = data.length;
|
|
41
|
+
const local = new Uint8Array(30 + nameBytes.length);
|
|
42
|
+
const lv = new DataView(local.buffer);
|
|
43
|
+
lv.setUint32(0, 67324752, true);
|
|
44
|
+
lv.setUint16(4, 20, true);
|
|
45
|
+
lv.setUint16(6, 0, true);
|
|
46
|
+
lv.setUint16(8, 0, true);
|
|
47
|
+
lv.setUint16(10, 0, true);
|
|
48
|
+
lv.setUint16(12, 0, true);
|
|
49
|
+
lv.setUint32(14, crc, true);
|
|
50
|
+
lv.setUint32(18, size, true);
|
|
51
|
+
lv.setUint32(22, size, true);
|
|
52
|
+
lv.setUint16(26, nameBytes.length, true);
|
|
53
|
+
lv.setUint16(28, 0, true);
|
|
54
|
+
local.set(nameBytes, 30);
|
|
55
|
+
parts.push(local, data);
|
|
56
|
+
const central = new Uint8Array(46 + nameBytes.length);
|
|
57
|
+
const cv = new DataView(central.buffer);
|
|
58
|
+
cv.setUint32(0, 33639248, true);
|
|
59
|
+
cv.setUint16(4, 20, true);
|
|
60
|
+
cv.setUint16(6, 20, true);
|
|
61
|
+
cv.setUint16(8, 0, true);
|
|
62
|
+
cv.setUint16(10, 0, true);
|
|
63
|
+
cv.setUint16(12, 0, true);
|
|
64
|
+
cv.setUint16(14, 0, true);
|
|
65
|
+
cv.setUint32(16, crc, true);
|
|
66
|
+
cv.setUint32(20, size, true);
|
|
67
|
+
cv.setUint32(24, size, true);
|
|
68
|
+
cv.setUint16(28, nameBytes.length, true);
|
|
69
|
+
cv.setUint16(30, 0, true);
|
|
70
|
+
cv.setUint16(32, 0, true);
|
|
71
|
+
cv.setUint16(34, 0, true);
|
|
72
|
+
cv.setUint16(36, 0, true);
|
|
73
|
+
cv.setUint32(38, 0, true);
|
|
74
|
+
cv.setUint32(42, offset, true);
|
|
75
|
+
central.set(nameBytes, 46);
|
|
76
|
+
centralParts.push(central);
|
|
77
|
+
offset += local.length + data.length;
|
|
78
|
+
}
|
|
79
|
+
const centralSize = centralParts.reduce((sum, p) => sum + p.length, 0);
|
|
80
|
+
const end = new Uint8Array(22);
|
|
81
|
+
const ev = new DataView(end.buffer);
|
|
82
|
+
ev.setUint32(0, 101010256, true);
|
|
83
|
+
ev.setUint16(4, 0, true);
|
|
84
|
+
ev.setUint16(6, 0, true);
|
|
85
|
+
ev.setUint16(8, entries.length, true);
|
|
86
|
+
ev.setUint16(10, entries.length, true);
|
|
87
|
+
ev.setUint32(12, centralSize, true);
|
|
88
|
+
ev.setUint32(16, offset, true);
|
|
89
|
+
ev.setUint16(20, 0, true);
|
|
90
|
+
return new Blob([...parts, ...centralParts, end], {
|
|
91
|
+
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
var buildStylesXml = (direction) => {
|
|
95
|
+
const readingOrder = direction === "rtl" ? 2 : 1;
|
|
96
|
+
const horizontal = direction === "rtl" ? "right" : "left";
|
|
97
|
+
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
98
|
+
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
|
99
|
+
<fonts count="3">
|
|
100
|
+
<font><sz val="10"/><name val="Tahoma"/></font>
|
|
101
|
+
<font><b/><sz val="11"/><color rgb="FFFFFFFF"/><name val="Tahoma"/></font>
|
|
102
|
+
<font><b/><sz val="10"/><name val="Tahoma"/></font>
|
|
103
|
+
</fonts>
|
|
104
|
+
<fills count="4">
|
|
105
|
+
<fill><patternFill patternType="none"/></fill>
|
|
106
|
+
<fill><patternFill patternType="gray125"/></fill>
|
|
107
|
+
<fill><patternFill patternType="solid"><fgColor rgb="FF2F5496"/></patternFill></fill>
|
|
108
|
+
<fill><patternFill patternType="solid"><fgColor rgb="FFD6EAF8"/></patternFill></fill>
|
|
109
|
+
</fills>
|
|
110
|
+
<borders count="2">
|
|
111
|
+
<border><left/><right/><top/><bottom/><diagonal/></border>
|
|
112
|
+
<border>
|
|
113
|
+
<left style="thin"><color rgb="FFBDD7EE"/></left>
|
|
114
|
+
<right style="thin"><color rgb="FFBDD7EE"/></right>
|
|
115
|
+
<top style="thin"><color rgb="FFBDD7EE"/></top>
|
|
116
|
+
<bottom style="thin"><color rgb="FFBDD7EE"/></bottom>
|
|
117
|
+
</border>
|
|
118
|
+
</borders>
|
|
119
|
+
<cellStyleXfs count="1">
|
|
120
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>
|
|
121
|
+
</cellStyleXfs>
|
|
122
|
+
<cellXfs count="6">
|
|
123
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
|
|
124
|
+
<xf numFmtId="0" fontId="1" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
|
|
125
|
+
<alignment horizontal="center" vertical="center" wrapText="1" readingOrder="${readingOrder}"/>
|
|
126
|
+
</xf>
|
|
127
|
+
<xf numFmtId="0" fontId="0" fillId="3" borderId="1" xfId="0" applyFill="1" applyBorder="1" applyAlignment="1">
|
|
128
|
+
<alignment horizontal="${horizontal}" vertical="center" readingOrder="${readingOrder}"/>
|
|
129
|
+
</xf>
|
|
130
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyBorder="1" applyAlignment="1">
|
|
131
|
+
<alignment horizontal="${horizontal}" vertical="center" readingOrder="${readingOrder}"/>
|
|
132
|
+
</xf>
|
|
133
|
+
<xf numFmtId="0" fontId="2" fillId="3" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
|
|
134
|
+
<alignment horizontal="center" vertical="center" readingOrder="${readingOrder}"/>
|
|
135
|
+
</xf>
|
|
136
|
+
<xf numFmtId="0" fontId="2" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1">
|
|
137
|
+
<alignment horizontal="center" vertical="center" readingOrder="${readingOrder}"/>
|
|
138
|
+
</xf>
|
|
139
|
+
</cellXfs>
|
|
140
|
+
</styleSheet>`;
|
|
141
|
+
};
|
|
142
|
+
var inlineStrCell = (ref, text, styleId) => `<c r="${ref}" t="inlineStr" s="${styleId}"><is><t>${escapeXml(text)}</t></is></c>`;
|
|
143
|
+
var numberCell = (ref, value, styleId) => `<c r="${ref}" s="${styleId}"><v>${value}</v></c>`;
|
|
144
|
+
var buildSheetXml = (table, options) => {
|
|
145
|
+
const { direction, rowHeaderLabel } = options;
|
|
146
|
+
const rightToLeft = direction === "rtl" ? "1" : "0";
|
|
147
|
+
const totalCols = table.columns.length + 1;
|
|
148
|
+
const colsXml = Array.from({ length: totalCols }, (_, i) => {
|
|
149
|
+
const width = i === 0 ? 6 : 18;
|
|
150
|
+
return `<col min="${i + 1}" max="${i + 1}" width="${width}" customWidth="1"/>`;
|
|
151
|
+
}).join("");
|
|
152
|
+
const headerCells = [
|
|
153
|
+
inlineStrCell("A1", rowHeaderLabel, 1),
|
|
154
|
+
...table.columns.map(
|
|
155
|
+
(col, i) => inlineStrCell(`${toColumnLetter(i + 1)}1`, col.caption, 1)
|
|
156
|
+
)
|
|
157
|
+
].join("");
|
|
158
|
+
const bodyRows = table.rows.map((row, rowIndex) => {
|
|
159
|
+
const excelRow = rowIndex + 2;
|
|
160
|
+
const isGroup = table.rowKinds?.[rowIndex] === "group";
|
|
161
|
+
const isOdd = rowIndex % 2 === 0;
|
|
162
|
+
const dataStyle = isGroup ? 1 : isOdd ? 2 : 3;
|
|
163
|
+
const rowNumStyle = isOdd ? 4 : 5;
|
|
164
|
+
const outline = typeof table.outlineLevels?.[rowIndex] === "number" ? ` outlineLevel="${table.outlineLevels[rowIndex]}"` : "";
|
|
165
|
+
const cells = [
|
|
166
|
+
numberCell(`A${excelRow}`, rowIndex + 1, rowNumStyle),
|
|
167
|
+
...row.map(
|
|
168
|
+
(text, i) => inlineStrCell(
|
|
169
|
+
`${toColumnLetter(i + 1)}${excelRow}`,
|
|
170
|
+
text,
|
|
171
|
+
dataStyle
|
|
172
|
+
)
|
|
173
|
+
)
|
|
174
|
+
].join("");
|
|
175
|
+
return `<row r="${excelRow}" ht="18" customHeight="1"${outline}>${cells}</row>`;
|
|
176
|
+
}).join("");
|
|
177
|
+
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
178
|
+
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
179
|
+
<sheetViews>
|
|
180
|
+
<sheetView workbookViewId="0" rightToLeft="${rightToLeft}"/>
|
|
181
|
+
</sheetViews>
|
|
182
|
+
<cols>${colsXml}</cols>
|
|
183
|
+
<sheetData>
|
|
184
|
+
<row r="1" ht="22" customHeight="1">${headerCells}</row>
|
|
185
|
+
${bodyRows}
|
|
186
|
+
</sheetData>
|
|
187
|
+
</worksheet>`;
|
|
188
|
+
};
|
|
189
|
+
function buildXlsxBlob(table, options = {}) {
|
|
190
|
+
const direction = options.direction ?? "rtl";
|
|
191
|
+
const rowHeaderLabel = options.rowHeaderLabel ?? "\u0631\u062F\u06CC\u0641";
|
|
192
|
+
const sheetName = options.sheetName ?? "Sheet1";
|
|
193
|
+
const safeSheetName = (sheetName.slice(0, 31) || "Sheet1").replace(
|
|
194
|
+
/[\\/*?:\[\]]/g,
|
|
195
|
+
""
|
|
196
|
+
);
|
|
197
|
+
const contentTypes = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
198
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
|
199
|
+
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
|
|
200
|
+
<Default Extension="xml" ContentType="application/xml"/>
|
|
201
|
+
<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
|
|
202
|
+
<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
|
|
203
|
+
<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
|
|
204
|
+
</Types>`;
|
|
205
|
+
const rootRels = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
206
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
207
|
+
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
|
|
208
|
+
</Relationships>`;
|
|
209
|
+
const workbook = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
210
|
+
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
211
|
+
<sheets>
|
|
212
|
+
<sheet name="${escapeXml(safeSheetName)}" sheetId="1" r:id="rId1"/>
|
|
213
|
+
</sheets>
|
|
214
|
+
</workbook>`;
|
|
215
|
+
const workbookRels = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
216
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
217
|
+
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
|
|
218
|
+
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
|
|
219
|
+
</Relationships>`;
|
|
220
|
+
const styles = buildStylesXml(direction);
|
|
221
|
+
const sheet = buildSheetXml(table, { direction, rowHeaderLabel });
|
|
222
|
+
return buildZip([
|
|
223
|
+
{ name: "[Content_Types].xml", data: textEncoder.encode(contentTypes) },
|
|
224
|
+
{ name: "_rels/.rels", data: textEncoder.encode(rootRels) },
|
|
225
|
+
{ name: "xl/workbook.xml", data: textEncoder.encode(workbook) },
|
|
226
|
+
{
|
|
227
|
+
name: "xl/_rels/workbook.xml.rels",
|
|
228
|
+
data: textEncoder.encode(workbookRels)
|
|
229
|
+
},
|
|
230
|
+
{ name: "xl/styles.xml", data: textEncoder.encode(styles) },
|
|
231
|
+
{ name: "xl/worksheets/sheet1.xml", data: textEncoder.encode(sheet) }
|
|
232
|
+
]);
|
|
233
|
+
}
|
|
234
|
+
function downloadBlob(blob, fileName) {
|
|
235
|
+
if (typeof document === "undefined") return;
|
|
236
|
+
const url = URL.createObjectURL(blob);
|
|
237
|
+
const anchor = document.createElement("a");
|
|
238
|
+
anchor.href = url;
|
|
239
|
+
anchor.download = fileName;
|
|
240
|
+
document.body.appendChild(anchor);
|
|
241
|
+
anchor.click();
|
|
242
|
+
document.body.removeChild(anchor);
|
|
243
|
+
URL.revokeObjectURL(url);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export { buildXlsxBlob, downloadBlob };
|
|
247
|
+
//# sourceMappingURL=chunk-PQY54EL5.js.map
|
|
248
|
+
//# sourceMappingURL=chunk-PQY54EL5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../packages/plugins/excel/src/buildXlsxBlob.ts"],"names":[],"mappings":"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","file":"chunk-PQY54EL5.js","sourcesContent":["import type { ExportTable } from './buildExportTable';\r\n\r\nconst escapeXml = (value: string) =>\r\n value\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n\r\n/** 0-based column index → A, B, … Z, AA, … */\r\nconst toColumnLetter = (index: number): string => {\r\n let n = index + 1;\r\n let result = '';\r\n while (n > 0) {\r\n const rem = (n - 1) % 26;\r\n result = String.fromCharCode(65 + rem) + result;\r\n n = Math.floor((n - 1) / 26);\r\n }\r\n return result;\r\n};\r\n\r\nconst crcTable = (() => {\r\n const table = new Uint32Array(256);\r\n for (let i = 0; i < 256; i += 1) {\r\n let c = i;\r\n for (let k = 0; k < 8; k += 1) {\r\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\r\n }\r\n table[i] = c >>> 0;\r\n }\r\n return table;\r\n})();\r\n\r\nconst crc32 = (data: Uint8Array): number => {\r\n let crc = 0xffffffff;\r\n for (let i = 0; i < data.length; i += 1) {\r\n crc = crcTable[(crc ^ data[i]) & 0xff] ^ (crc >>> 8);\r\n }\r\n return (crc ^ 0xffffffff) >>> 0;\r\n};\r\n\r\nconst textEncoder = new TextEncoder();\r\n\r\ntype ZipEntry = { name: string; data: Uint8Array };\r\n\r\n/** Minimal ZIP (store / no compression) for OOXML .xlsx */\r\nconst buildZip = (entries: ZipEntry[]): Blob => {\r\n const parts: Uint8Array[] = [];\r\n const centralParts: Uint8Array[] = [];\r\n let offset = 0;\r\n\r\n for (const entry of entries) {\r\n const nameBytes = textEncoder.encode(entry.name);\r\n const data = entry.data;\r\n const crc = crc32(data);\r\n const size = data.length;\r\n\r\n const local = new Uint8Array(30 + nameBytes.length);\r\n const lv = new DataView(local.buffer);\r\n lv.setUint32(0, 0x04034b50, true);\r\n lv.setUint16(4, 20, true);\r\n lv.setUint16(6, 0, true);\r\n lv.setUint16(8, 0, true);\r\n lv.setUint16(10, 0, true);\r\n lv.setUint16(12, 0, true);\r\n lv.setUint32(14, crc, true);\r\n lv.setUint32(18, size, true);\r\n lv.setUint32(22, size, true);\r\n lv.setUint16(26, nameBytes.length, true);\r\n lv.setUint16(28, 0, true);\r\n local.set(nameBytes, 30);\r\n\r\n parts.push(local, data);\r\n\r\n const central = new Uint8Array(46 + nameBytes.length);\r\n const cv = new DataView(central.buffer);\r\n cv.setUint32(0, 0x02014b50, true);\r\n cv.setUint16(4, 20, true);\r\n cv.setUint16(6, 20, true);\r\n cv.setUint16(8, 0, true);\r\n cv.setUint16(10, 0, true);\r\n cv.setUint16(12, 0, true);\r\n cv.setUint16(14, 0, true);\r\n cv.setUint32(16, crc, true);\r\n cv.setUint32(20, size, true);\r\n cv.setUint32(24, size, true);\r\n cv.setUint16(28, nameBytes.length, true);\r\n cv.setUint16(30, 0, true);\r\n cv.setUint16(32, 0, true);\r\n cv.setUint16(34, 0, true);\r\n cv.setUint16(36, 0, true);\r\n cv.setUint32(38, 0, true);\r\n cv.setUint32(42, offset, true);\r\n central.set(nameBytes, 46);\r\n centralParts.push(central);\r\n\r\n offset += local.length + data.length;\r\n }\r\n\r\n const centralSize = centralParts.reduce((sum, p) => sum + p.length, 0);\r\n const end = new Uint8Array(22);\r\n const ev = new DataView(end.buffer);\r\n ev.setUint32(0, 0x06054b50, true);\r\n ev.setUint16(4, 0, true);\r\n ev.setUint16(6, 0, true);\r\n ev.setUint16(8, entries.length, true);\r\n ev.setUint16(10, entries.length, true);\r\n ev.setUint32(12, centralSize, true);\r\n ev.setUint32(16, offset, true);\r\n ev.setUint16(20, 0, true);\r\n\r\n return new Blob([...parts, ...centralParts, end] as BlobPart[], {\r\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n });\r\n};\r\n\r\nconst buildStylesXml = (direction: 'rtl' | 'ltr') => {\r\n const readingOrder = direction === 'rtl' ? 2 : 1;\r\n const horizontal = direction === 'rtl' ? 'right' : 'left';\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\r\n <fonts count=\"3\">\r\n <font><sz val=\"10\"/><name val=\"Tahoma\"/></font>\r\n <font><b/><sz val=\"11\"/><color rgb=\"FFFFFFFF\"/><name val=\"Tahoma\"/></font>\r\n <font><b/><sz val=\"10\"/><name val=\"Tahoma\"/></font>\r\n </fonts>\r\n <fills count=\"4\">\r\n <fill><patternFill patternType=\"none\"/></fill>\r\n <fill><patternFill patternType=\"gray125\"/></fill>\r\n <fill><patternFill patternType=\"solid\"><fgColor rgb=\"FF2F5496\"/></patternFill></fill>\r\n <fill><patternFill patternType=\"solid\"><fgColor rgb=\"FFD6EAF8\"/></patternFill></fill>\r\n </fills>\r\n <borders count=\"2\">\r\n <border><left/><right/><top/><bottom/><diagonal/></border>\r\n <border>\r\n <left style=\"thin\"><color rgb=\"FFBDD7EE\"/></left>\r\n <right style=\"thin\"><color rgb=\"FFBDD7EE\"/></right>\r\n <top style=\"thin\"><color rgb=\"FFBDD7EE\"/></top>\r\n <bottom style=\"thin\"><color rgb=\"FFBDD7EE\"/></bottom>\r\n </border>\r\n </borders>\r\n <cellStyleXfs count=\"1\">\r\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/>\r\n </cellStyleXfs>\r\n <cellXfs count=\"6\">\r\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>\r\n <xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"1\" xfId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" applyAlignment=\"1\">\r\n <alignment horizontal=\"center\" vertical=\"center\" wrapText=\"1\" readingOrder=\"${readingOrder}\"/>\r\n </xf>\r\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"1\" xfId=\"0\" applyFill=\"1\" applyBorder=\"1\" applyAlignment=\"1\">\r\n <alignment horizontal=\"${horizontal}\" vertical=\"center\" readingOrder=\"${readingOrder}\"/>\r\n </xf>\r\n <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"1\" xfId=\"0\" applyBorder=\"1\" applyAlignment=\"1\">\r\n <alignment horizontal=\"${horizontal}\" vertical=\"center\" readingOrder=\"${readingOrder}\"/>\r\n </xf>\r\n <xf numFmtId=\"0\" fontId=\"2\" fillId=\"3\" borderId=\"1\" xfId=\"0\" applyFont=\"1\" applyFill=\"1\" applyBorder=\"1\" applyAlignment=\"1\">\r\n <alignment horizontal=\"center\" vertical=\"center\" readingOrder=\"${readingOrder}\"/>\r\n </xf>\r\n <xf numFmtId=\"0\" fontId=\"2\" fillId=\"0\" borderId=\"1\" xfId=\"0\" applyFont=\"1\" applyBorder=\"1\" applyAlignment=\"1\">\r\n <alignment horizontal=\"center\" vertical=\"center\" readingOrder=\"${readingOrder}\"/>\r\n </xf>\r\n </cellXfs>\r\n</styleSheet>`;\r\n};\r\n\r\nconst inlineStrCell = (ref: string, text: string, styleId: number) =>\r\n `<c r=\"${ref}\" t=\"inlineStr\" s=\"${styleId}\"><is><t>${escapeXml(text)}</t></is></c>`;\r\n\r\nconst numberCell = (ref: string, value: number, styleId: number) =>\r\n `<c r=\"${ref}\" s=\"${styleId}\"><v>${value}</v></c>`;\r\n\r\nconst buildSheetXml = (\r\n table: ExportTable,\r\n options: { direction: 'rtl' | 'ltr'; rowHeaderLabel: string },\r\n): string => {\r\n const { direction, rowHeaderLabel } = options;\r\n const rightToLeft = direction === 'rtl' ? '1' : '0';\r\n const totalCols = table.columns.length + 1;\r\n\r\n const colsXml = Array.from({ length: totalCols }, (_, i) => {\r\n const width = i === 0 ? 6 : 18;\r\n return `<col min=\"${i + 1}\" max=\"${i + 1}\" width=\"${width}\" customWidth=\"1\"/>`;\r\n }).join('');\r\n\r\n const headerCells = [\r\n inlineStrCell('A1', rowHeaderLabel, 1),\r\n ...table.columns.map((col, i) =>\r\n inlineStrCell(`${toColumnLetter(i + 1)}1`, col.caption, 1),\r\n ),\r\n ].join('');\r\n\r\n const bodyRows = table.rows\r\n .map((row, rowIndex) => {\r\n const excelRow = rowIndex + 2;\r\n const isGroup = table.rowKinds?.[rowIndex] === 'group';\r\n const isOdd = rowIndex % 2 === 0;\r\n const dataStyle = isGroup ? 1 : isOdd ? 2 : 3;\r\n const rowNumStyle = isOdd ? 4 : 5;\r\n const outline =\r\n typeof table.outlineLevels?.[rowIndex] === 'number'\r\n ? ` outlineLevel=\"${table.outlineLevels[rowIndex]}\"`\r\n : '';\r\n\r\n const cells = [\r\n numberCell(`A${excelRow}`, rowIndex + 1, rowNumStyle),\r\n ...row.map((text, i) =>\r\n inlineStrCell(\r\n `${toColumnLetter(i + 1)}${excelRow}`,\r\n text,\r\n dataStyle,\r\n ),\r\n ),\r\n ].join('');\r\n\r\n return `<row r=\"${excelRow}\" ht=\"18\" customHeight=\"1\"${outline}>${cells}</row>`;\r\n })\r\n .join('');\r\n\r\n return `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\r\n <sheetViews>\r\n <sheetView workbookViewId=\"0\" rightToLeft=\"${rightToLeft}\"/>\r\n </sheetViews>\r\n <cols>${colsXml}</cols>\r\n <sheetData>\r\n <row r=\"1\" ht=\"22\" customHeight=\"1\">${headerCells}</row>\r\n ${bodyRows}\r\n </sheetData>\r\n</worksheet>`;\r\n};\r\n\r\nexport type BuildXlsxOptions = {\r\n sheetName?: string;\r\n direction?: 'rtl' | 'ltr';\r\n rowHeaderLabel?: string;\r\n};\r\n\r\nexport function buildXlsxBlob(\r\n table: ExportTable,\r\n options: BuildXlsxOptions = {},\r\n): Blob {\r\n const direction = options.direction ?? 'rtl';\r\n const rowHeaderLabel = options.rowHeaderLabel ?? 'ردیف';\r\n const sheetName = options.sheetName ?? 'Sheet1';\r\n\r\n const safeSheetName = (sheetName.slice(0, 31) || 'Sheet1').replace(\r\n /[\\\\/*?:\\[\\]]/g,\r\n '',\r\n );\r\n\r\n const contentTypes = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\r\n <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\r\n <Default Extension=\"xml\" ContentType=\"application/xml\"/>\r\n <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\r\n <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\r\n <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\r\n</Types>`;\r\n\r\n const rootRels = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/>\r\n</Relationships>`;\r\n\r\n const workbook = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\r\n <sheets>\r\n <sheet name=\"${escapeXml(safeSheetName)}\" sheetId=\"1\" r:id=\"rId1\"/>\r\n </sheets>\r\n</workbook>`;\r\n\r\n const workbookRels = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>\r\n <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\r\n</Relationships>`;\r\n\r\n const styles = buildStylesXml(direction);\r\n const sheet = buildSheetXml(table, { direction, rowHeaderLabel });\r\n\r\n return buildZip([\r\n { name: '[Content_Types].xml', data: textEncoder.encode(contentTypes) },\r\n { name: '_rels/.rels', data: textEncoder.encode(rootRels) },\r\n { name: 'xl/workbook.xml', data: textEncoder.encode(workbook) },\r\n {\r\n name: 'xl/_rels/workbook.xml.rels',\r\n data: textEncoder.encode(workbookRels),\r\n },\r\n { name: 'xl/styles.xml', data: textEncoder.encode(styles) },\r\n { name: 'xl/worksheets/sheet1.xml', data: textEncoder.encode(sheet) },\r\n ]);\r\n}\r\n\r\nexport function downloadBlob(blob: Blob, fileName: string): void {\r\n if (typeof document === 'undefined') return;\r\n const url = URL.createObjectURL(blob);\r\n const anchor = document.createElement('a');\r\n anchor.href = url;\r\n anchor.download = fileName;\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n document.body.removeChild(anchor);\r\n URL.revokeObjectURL(url);\r\n}\r\n"]}
|