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,251 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// packages/plugins/excel/src/buildXlsxBlob.ts
|
|
4
|
+
var escapeXml = (value) => value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
5
|
+
var toColumnLetter = (index) => {
|
|
6
|
+
let n = index + 1;
|
|
7
|
+
let result = "";
|
|
8
|
+
while (n > 0) {
|
|
9
|
+
const rem = (n - 1) % 26;
|
|
10
|
+
result = String.fromCharCode(65 + rem) + result;
|
|
11
|
+
n = Math.floor((n - 1) / 26);
|
|
12
|
+
}
|
|
13
|
+
return result;
|
|
14
|
+
};
|
|
15
|
+
var crcTable = (() => {
|
|
16
|
+
const table = new Uint32Array(256);
|
|
17
|
+
for (let i = 0; i < 256; i += 1) {
|
|
18
|
+
let c = i;
|
|
19
|
+
for (let k = 0; k < 8; k += 1) {
|
|
20
|
+
c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
|
|
21
|
+
}
|
|
22
|
+
table[i] = c >>> 0;
|
|
23
|
+
}
|
|
24
|
+
return table;
|
|
25
|
+
})();
|
|
26
|
+
var crc32 = (data) => {
|
|
27
|
+
let crc = 4294967295;
|
|
28
|
+
for (let i = 0; i < data.length; i += 1) {
|
|
29
|
+
crc = crcTable[(crc ^ data[i]) & 255] ^ crc >>> 8;
|
|
30
|
+
}
|
|
31
|
+
return (crc ^ 4294967295) >>> 0;
|
|
32
|
+
};
|
|
33
|
+
var textEncoder = new TextEncoder();
|
|
34
|
+
var buildZip = (entries) => {
|
|
35
|
+
const parts = [];
|
|
36
|
+
const centralParts = [];
|
|
37
|
+
let offset = 0;
|
|
38
|
+
for (const entry of entries) {
|
|
39
|
+
const nameBytes = textEncoder.encode(entry.name);
|
|
40
|
+
const data = entry.data;
|
|
41
|
+
const crc = crc32(data);
|
|
42
|
+
const size = data.length;
|
|
43
|
+
const local = new Uint8Array(30 + nameBytes.length);
|
|
44
|
+
const lv = new DataView(local.buffer);
|
|
45
|
+
lv.setUint32(0, 67324752, true);
|
|
46
|
+
lv.setUint16(4, 20, true);
|
|
47
|
+
lv.setUint16(6, 0, true);
|
|
48
|
+
lv.setUint16(8, 0, true);
|
|
49
|
+
lv.setUint16(10, 0, true);
|
|
50
|
+
lv.setUint16(12, 0, true);
|
|
51
|
+
lv.setUint32(14, crc, true);
|
|
52
|
+
lv.setUint32(18, size, true);
|
|
53
|
+
lv.setUint32(22, size, true);
|
|
54
|
+
lv.setUint16(26, nameBytes.length, true);
|
|
55
|
+
lv.setUint16(28, 0, true);
|
|
56
|
+
local.set(nameBytes, 30);
|
|
57
|
+
parts.push(local, data);
|
|
58
|
+
const central = new Uint8Array(46 + nameBytes.length);
|
|
59
|
+
const cv = new DataView(central.buffer);
|
|
60
|
+
cv.setUint32(0, 33639248, true);
|
|
61
|
+
cv.setUint16(4, 20, true);
|
|
62
|
+
cv.setUint16(6, 20, true);
|
|
63
|
+
cv.setUint16(8, 0, true);
|
|
64
|
+
cv.setUint16(10, 0, true);
|
|
65
|
+
cv.setUint16(12, 0, true);
|
|
66
|
+
cv.setUint16(14, 0, true);
|
|
67
|
+
cv.setUint32(16, crc, true);
|
|
68
|
+
cv.setUint32(20, size, true);
|
|
69
|
+
cv.setUint32(24, size, true);
|
|
70
|
+
cv.setUint16(28, nameBytes.length, true);
|
|
71
|
+
cv.setUint16(30, 0, true);
|
|
72
|
+
cv.setUint16(32, 0, true);
|
|
73
|
+
cv.setUint16(34, 0, true);
|
|
74
|
+
cv.setUint16(36, 0, true);
|
|
75
|
+
cv.setUint32(38, 0, true);
|
|
76
|
+
cv.setUint32(42, offset, true);
|
|
77
|
+
central.set(nameBytes, 46);
|
|
78
|
+
centralParts.push(central);
|
|
79
|
+
offset += local.length + data.length;
|
|
80
|
+
}
|
|
81
|
+
const centralSize = centralParts.reduce((sum, p) => sum + p.length, 0);
|
|
82
|
+
const end = new Uint8Array(22);
|
|
83
|
+
const ev = new DataView(end.buffer);
|
|
84
|
+
ev.setUint32(0, 101010256, true);
|
|
85
|
+
ev.setUint16(4, 0, true);
|
|
86
|
+
ev.setUint16(6, 0, true);
|
|
87
|
+
ev.setUint16(8, entries.length, true);
|
|
88
|
+
ev.setUint16(10, entries.length, true);
|
|
89
|
+
ev.setUint32(12, centralSize, true);
|
|
90
|
+
ev.setUint32(16, offset, true);
|
|
91
|
+
ev.setUint16(20, 0, true);
|
|
92
|
+
return new Blob([...parts, ...centralParts, end], {
|
|
93
|
+
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
var buildStylesXml = (direction) => {
|
|
97
|
+
const readingOrder = direction === "rtl" ? 2 : 1;
|
|
98
|
+
const horizontal = direction === "rtl" ? "right" : "left";
|
|
99
|
+
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
100
|
+
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
|
101
|
+
<fonts count="3">
|
|
102
|
+
<font><sz val="10"/><name val="Tahoma"/></font>
|
|
103
|
+
<font><b/><sz val="11"/><color rgb="FFFFFFFF"/><name val="Tahoma"/></font>
|
|
104
|
+
<font><b/><sz val="10"/><name val="Tahoma"/></font>
|
|
105
|
+
</fonts>
|
|
106
|
+
<fills count="4">
|
|
107
|
+
<fill><patternFill patternType="none"/></fill>
|
|
108
|
+
<fill><patternFill patternType="gray125"/></fill>
|
|
109
|
+
<fill><patternFill patternType="solid"><fgColor rgb="FF2F5496"/></patternFill></fill>
|
|
110
|
+
<fill><patternFill patternType="solid"><fgColor rgb="FFD6EAF8"/></patternFill></fill>
|
|
111
|
+
</fills>
|
|
112
|
+
<borders count="2">
|
|
113
|
+
<border><left/><right/><top/><bottom/><diagonal/></border>
|
|
114
|
+
<border>
|
|
115
|
+
<left style="thin"><color rgb="FFBDD7EE"/></left>
|
|
116
|
+
<right style="thin"><color rgb="FFBDD7EE"/></right>
|
|
117
|
+
<top style="thin"><color rgb="FFBDD7EE"/></top>
|
|
118
|
+
<bottom style="thin"><color rgb="FFBDD7EE"/></bottom>
|
|
119
|
+
</border>
|
|
120
|
+
</borders>
|
|
121
|
+
<cellStyleXfs count="1">
|
|
122
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>
|
|
123
|
+
</cellStyleXfs>
|
|
124
|
+
<cellXfs count="6">
|
|
125
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
|
|
126
|
+
<xf numFmtId="0" fontId="1" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
|
|
127
|
+
<alignment horizontal="center" vertical="center" wrapText="1" readingOrder="${readingOrder}"/>
|
|
128
|
+
</xf>
|
|
129
|
+
<xf numFmtId="0" fontId="0" fillId="3" borderId="1" xfId="0" applyFill="1" applyBorder="1" applyAlignment="1">
|
|
130
|
+
<alignment horizontal="${horizontal}" vertical="center" readingOrder="${readingOrder}"/>
|
|
131
|
+
</xf>
|
|
132
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyBorder="1" applyAlignment="1">
|
|
133
|
+
<alignment horizontal="${horizontal}" vertical="center" readingOrder="${readingOrder}"/>
|
|
134
|
+
</xf>
|
|
135
|
+
<xf numFmtId="0" fontId="2" fillId="3" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1">
|
|
136
|
+
<alignment horizontal="center" vertical="center" readingOrder="${readingOrder}"/>
|
|
137
|
+
</xf>
|
|
138
|
+
<xf numFmtId="0" fontId="2" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1">
|
|
139
|
+
<alignment horizontal="center" vertical="center" readingOrder="${readingOrder}"/>
|
|
140
|
+
</xf>
|
|
141
|
+
</cellXfs>
|
|
142
|
+
</styleSheet>`;
|
|
143
|
+
};
|
|
144
|
+
var inlineStrCell = (ref, text, styleId) => `<c r="${ref}" t="inlineStr" s="${styleId}"><is><t>${escapeXml(text)}</t></is></c>`;
|
|
145
|
+
var numberCell = (ref, value, styleId) => `<c r="${ref}" s="${styleId}"><v>${value}</v></c>`;
|
|
146
|
+
var buildSheetXml = (table, options) => {
|
|
147
|
+
const { direction, rowHeaderLabel } = options;
|
|
148
|
+
const rightToLeft = direction === "rtl" ? "1" : "0";
|
|
149
|
+
const totalCols = table.columns.length + 1;
|
|
150
|
+
const colsXml = Array.from({ length: totalCols }, (_, i) => {
|
|
151
|
+
const width = i === 0 ? 6 : 18;
|
|
152
|
+
return `<col min="${i + 1}" max="${i + 1}" width="${width}" customWidth="1"/>`;
|
|
153
|
+
}).join("");
|
|
154
|
+
const headerCells = [
|
|
155
|
+
inlineStrCell("A1", rowHeaderLabel, 1),
|
|
156
|
+
...table.columns.map(
|
|
157
|
+
(col, i) => inlineStrCell(`${toColumnLetter(i + 1)}1`, col.caption, 1)
|
|
158
|
+
)
|
|
159
|
+
].join("");
|
|
160
|
+
const bodyRows = table.rows.map((row, rowIndex) => {
|
|
161
|
+
const excelRow = rowIndex + 2;
|
|
162
|
+
const isGroup = table.rowKinds?.[rowIndex] === "group";
|
|
163
|
+
const isOdd = rowIndex % 2 === 0;
|
|
164
|
+
const dataStyle = isGroup ? 1 : isOdd ? 2 : 3;
|
|
165
|
+
const rowNumStyle = isOdd ? 4 : 5;
|
|
166
|
+
const outline = typeof table.outlineLevels?.[rowIndex] === "number" ? ` outlineLevel="${table.outlineLevels[rowIndex]}"` : "";
|
|
167
|
+
const cells = [
|
|
168
|
+
numberCell(`A${excelRow}`, rowIndex + 1, rowNumStyle),
|
|
169
|
+
...row.map(
|
|
170
|
+
(text, i) => inlineStrCell(
|
|
171
|
+
`${toColumnLetter(i + 1)}${excelRow}`,
|
|
172
|
+
text,
|
|
173
|
+
dataStyle
|
|
174
|
+
)
|
|
175
|
+
)
|
|
176
|
+
].join("");
|
|
177
|
+
return `<row r="${excelRow}" ht="18" customHeight="1"${outline}>${cells}</row>`;
|
|
178
|
+
}).join("");
|
|
179
|
+
return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
180
|
+
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
181
|
+
<sheetViews>
|
|
182
|
+
<sheetView workbookViewId="0" rightToLeft="${rightToLeft}"/>
|
|
183
|
+
</sheetViews>
|
|
184
|
+
<cols>${colsXml}</cols>
|
|
185
|
+
<sheetData>
|
|
186
|
+
<row r="1" ht="22" customHeight="1">${headerCells}</row>
|
|
187
|
+
${bodyRows}
|
|
188
|
+
</sheetData>
|
|
189
|
+
</worksheet>`;
|
|
190
|
+
};
|
|
191
|
+
function buildXlsxBlob(table, options = {}) {
|
|
192
|
+
const direction = options.direction ?? "rtl";
|
|
193
|
+
const rowHeaderLabel = options.rowHeaderLabel ?? "\u0631\u062F\u06CC\u0641";
|
|
194
|
+
const sheetName = options.sheetName ?? "Sheet1";
|
|
195
|
+
const safeSheetName = (sheetName.slice(0, 31) || "Sheet1").replace(
|
|
196
|
+
/[\\/*?:\[\]]/g,
|
|
197
|
+
""
|
|
198
|
+
);
|
|
199
|
+
const contentTypes = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
200
|
+
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
|
201
|
+
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
|
|
202
|
+
<Default Extension="xml" ContentType="application/xml"/>
|
|
203
|
+
<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
|
|
204
|
+
<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
|
|
205
|
+
<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
|
|
206
|
+
</Types>`;
|
|
207
|
+
const rootRels = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
208
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
209
|
+
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
|
|
210
|
+
</Relationships>`;
|
|
211
|
+
const workbook = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
212
|
+
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
213
|
+
<sheets>
|
|
214
|
+
<sheet name="${escapeXml(safeSheetName)}" sheetId="1" r:id="rId1"/>
|
|
215
|
+
</sheets>
|
|
216
|
+
</workbook>`;
|
|
217
|
+
const workbookRels = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
218
|
+
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
219
|
+
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
|
|
220
|
+
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
|
|
221
|
+
</Relationships>`;
|
|
222
|
+
const styles = buildStylesXml(direction);
|
|
223
|
+
const sheet = buildSheetXml(table, { direction, rowHeaderLabel });
|
|
224
|
+
return buildZip([
|
|
225
|
+
{ name: "[Content_Types].xml", data: textEncoder.encode(contentTypes) },
|
|
226
|
+
{ name: "_rels/.rels", data: textEncoder.encode(rootRels) },
|
|
227
|
+
{ name: "xl/workbook.xml", data: textEncoder.encode(workbook) },
|
|
228
|
+
{
|
|
229
|
+
name: "xl/_rels/workbook.xml.rels",
|
|
230
|
+
data: textEncoder.encode(workbookRels)
|
|
231
|
+
},
|
|
232
|
+
{ name: "xl/styles.xml", data: textEncoder.encode(styles) },
|
|
233
|
+
{ name: "xl/worksheets/sheet1.xml", data: textEncoder.encode(sheet) }
|
|
234
|
+
]);
|
|
235
|
+
}
|
|
236
|
+
function downloadBlob(blob, fileName) {
|
|
237
|
+
if (typeof document === "undefined") return;
|
|
238
|
+
const url = URL.createObjectURL(blob);
|
|
239
|
+
const anchor = document.createElement("a");
|
|
240
|
+
anchor.href = url;
|
|
241
|
+
anchor.download = fileName;
|
|
242
|
+
document.body.appendChild(anchor);
|
|
243
|
+
anchor.click();
|
|
244
|
+
document.body.removeChild(anchor);
|
|
245
|
+
URL.revokeObjectURL(url);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
exports.buildXlsxBlob = buildXlsxBlob;
|
|
249
|
+
exports.downloadBlob = downloadBlob;
|
|
250
|
+
//# sourceMappingURL=chunk-IMPCRWYP.cjs.map
|
|
251
|
+
//# sourceMappingURL=chunk-IMPCRWYP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../packages/plugins/excel/src/buildXlsxBlob.ts"],"names":[],"mappings":"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","file":"chunk-IMPCRWYP.cjs","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"]}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
// engine/columnWidth.ts
|
|
2
|
+
var DEFAULT_COLUMN_MIN_WIDTH = 144;
|
|
3
|
+
var INDEX_COLUMN_DEFAULT_WIDTH = 168;
|
|
4
|
+
function isIndexColumn(column) {
|
|
5
|
+
return column.fieldType === "index" || column.fieldName === "index";
|
|
6
|
+
}
|
|
7
|
+
function columnWidthFloor(column) {
|
|
8
|
+
const schemaMin = column?.minWidth ?? 0;
|
|
9
|
+
if (column && isIndexColumn(column)) {
|
|
10
|
+
return Math.max(INDEX_COLUMN_DEFAULT_WIDTH, schemaMin);
|
|
11
|
+
}
|
|
12
|
+
return Math.max(DEFAULT_COLUMN_MIN_WIDTH, schemaMin);
|
|
13
|
+
}
|
|
14
|
+
function clampColumnWidth(width, column) {
|
|
15
|
+
const floor = columnWidthFloor(column);
|
|
16
|
+
if (!Number.isFinite(width)) return floor;
|
|
17
|
+
return Math.max(floor, Math.round(width));
|
|
18
|
+
}
|
|
19
|
+
function resolveColumnWidth(column, columnWidths) {
|
|
20
|
+
const stored = columnWidths?.[column.fieldName];
|
|
21
|
+
if (typeof stored === "number" && Number.isFinite(stored)) {
|
|
22
|
+
return clampColumnWidth(stored, column);
|
|
23
|
+
}
|
|
24
|
+
if (isIndexColumn(column)) {
|
|
25
|
+
return INDEX_COLUMN_DEFAULT_WIDTH;
|
|
26
|
+
}
|
|
27
|
+
return column.minWidth ?? DEFAULT_COLUMN_MIN_WIDTH;
|
|
28
|
+
}
|
|
29
|
+
function columnSizeStyle(column, columnWidths, layoutWidths) {
|
|
30
|
+
const width = layoutWidths?.[column.fieldName] ?? resolveColumnWidth(column, columnWidths);
|
|
31
|
+
return { width, minWidth: width };
|
|
32
|
+
}
|
|
33
|
+
function overlayStoredColumnWidth(column, columnWidths, base) {
|
|
34
|
+
const stored = columnWidths?.[column.fieldName];
|
|
35
|
+
if (typeof stored !== "number" || !Number.isFinite(stored)) {
|
|
36
|
+
return base;
|
|
37
|
+
}
|
|
38
|
+
const width = clampColumnWidth(stored, column);
|
|
39
|
+
return { width, minWidth: width };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// engine/ColumnViewport.ts
|
|
43
|
+
function buildCumulativeWidths(widths) {
|
|
44
|
+
const cum = new Array(widths.length + 1);
|
|
45
|
+
cum[0] = 0;
|
|
46
|
+
for (let i = 0; i < widths.length; i += 1) {
|
|
47
|
+
const w = widths[i] ?? 0;
|
|
48
|
+
cum[i + 1] = cum[i] + (Number.isFinite(w) && w > 0 ? w : 0);
|
|
49
|
+
}
|
|
50
|
+
return cum;
|
|
51
|
+
}
|
|
52
|
+
function upperBoundCumulative(cum, value) {
|
|
53
|
+
let lo = 0;
|
|
54
|
+
let hi = cum.length;
|
|
55
|
+
while (lo < hi) {
|
|
56
|
+
const mid = lo + hi >> 1;
|
|
57
|
+
if ((cum[mid] ?? 0) > value) hi = mid;
|
|
58
|
+
else lo = mid + 1;
|
|
59
|
+
}
|
|
60
|
+
return lo;
|
|
61
|
+
}
|
|
62
|
+
function findStartColumnIndex(cum, viewStartInScrollable) {
|
|
63
|
+
if (cum.length <= 1) return 0;
|
|
64
|
+
const idx = upperBoundCumulative(cum, viewStartInScrollable) - 1;
|
|
65
|
+
return Math.max(0, Math.min(cum.length - 2, idx));
|
|
66
|
+
}
|
|
67
|
+
function findEndColumnIndex(cum, viewEndInScrollable) {
|
|
68
|
+
if (cum.length <= 1) return 0;
|
|
69
|
+
upperBoundCumulative(cum, viewEndInScrollable - Number.EPSILON);
|
|
70
|
+
let lo = 0;
|
|
71
|
+
let hi = cum.length - 1;
|
|
72
|
+
while (lo < hi) {
|
|
73
|
+
const mid = lo + hi >> 1;
|
|
74
|
+
if ((cum[mid] ?? 0) >= viewEndInScrollable) hi = mid;
|
|
75
|
+
else lo = mid + 1;
|
|
76
|
+
}
|
|
77
|
+
return Math.max(0, Math.min(cum.length - 1, lo));
|
|
78
|
+
}
|
|
79
|
+
function calculateColumnViewport(scrollableWidths, scrollOffset, viewportSize, pinnedStartWidth = 0, overscan = 1, pinnedEndWidth = 0) {
|
|
80
|
+
const cum = buildCumulativeWidths(scrollableWidths);
|
|
81
|
+
const totalScrollableWidth = cum[cum.length - 1] ?? 0;
|
|
82
|
+
const n = scrollableWidths.length;
|
|
83
|
+
if (n === 0 || viewportSize <= 0) {
|
|
84
|
+
return {
|
|
85
|
+
startIndex: 0,
|
|
86
|
+
endIndex: 0,
|
|
87
|
+
spacerStart: 0,
|
|
88
|
+
spacerEnd: 0,
|
|
89
|
+
totalScrollableWidth,
|
|
90
|
+
visibleCount: 0
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const maxScroll = Math.max(
|
|
94
|
+
0,
|
|
95
|
+
pinnedStartWidth + totalScrollableWidth + pinnedEndWidth - viewportSize
|
|
96
|
+
);
|
|
97
|
+
const clampedScroll = Math.min(Math.max(0, scrollOffset), maxScroll);
|
|
98
|
+
const scrollableViewport = Math.max(
|
|
99
|
+
0,
|
|
100
|
+
viewportSize - pinnedStartWidth - pinnedEndWidth
|
|
101
|
+
);
|
|
102
|
+
const relStart = Math.max(0, clampedScroll - pinnedStartWidth);
|
|
103
|
+
const relEnd = relStart + scrollableViewport;
|
|
104
|
+
let startIndex = findStartColumnIndex(cum, relStart);
|
|
105
|
+
let endIndex = findEndColumnIndex(cum, relEnd);
|
|
106
|
+
startIndex = Math.max(0, startIndex - overscan);
|
|
107
|
+
endIndex = Math.min(n, endIndex + overscan);
|
|
108
|
+
if (endIndex < startIndex) endIndex = startIndex;
|
|
109
|
+
const spacerStart = cum[startIndex] ?? 0;
|
|
110
|
+
const spacerEnd = Math.max(0, totalScrollableWidth - (cum[endIndex] ?? 0));
|
|
111
|
+
return {
|
|
112
|
+
startIndex,
|
|
113
|
+
endIndex,
|
|
114
|
+
spacerStart,
|
|
115
|
+
spacerEnd,
|
|
116
|
+
totalScrollableWidth,
|
|
117
|
+
visibleCount: Math.max(0, endIndex - startIndex)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function projectColumnSlice(items, range) {
|
|
121
|
+
return items.slice(range.startIndex, range.endIndex);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// engine/ViewportCalculator.ts
|
|
125
|
+
var ViewportCalculator = class {
|
|
126
|
+
static calculate(totalRows, viewport) {
|
|
127
|
+
const safeTotal = Math.max(0, Math.floor(totalRows));
|
|
128
|
+
const { scrollOffset, viewportSize, rowHeight, overscan } = viewport;
|
|
129
|
+
const totalHeight = safeTotal * rowHeight;
|
|
130
|
+
if (safeTotal === 0) {
|
|
131
|
+
return {
|
|
132
|
+
startIndex: 0,
|
|
133
|
+
endIndex: 0,
|
|
134
|
+
startOffset: 0,
|
|
135
|
+
endOffset: 0,
|
|
136
|
+
totalHeight: 0,
|
|
137
|
+
visibleCount: 0
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const maxOffset = Math.max(0, totalHeight - viewportSize);
|
|
141
|
+
const clampedScroll = Math.min(scrollOffset, maxOffset);
|
|
142
|
+
const rawStart = Math.floor(clampedScroll / rowHeight);
|
|
143
|
+
const rawEnd = Math.ceil((clampedScroll + viewportSize) / rowHeight);
|
|
144
|
+
const startIndex = Math.max(0, rawStart - overscan);
|
|
145
|
+
const endIndex = Math.min(safeTotal, rawEnd + overscan);
|
|
146
|
+
return {
|
|
147
|
+
startIndex,
|
|
148
|
+
endIndex,
|
|
149
|
+
startOffset: startIndex * rowHeight,
|
|
150
|
+
endOffset: Math.max(0, totalHeight - endIndex * rowHeight),
|
|
151
|
+
totalHeight,
|
|
152
|
+
visibleCount: Math.max(0, endIndex - startIndex)
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** Contiguous index list for the visible window. */
|
|
156
|
+
static indices(range) {
|
|
157
|
+
const out = [];
|
|
158
|
+
for (let i = range.startIndex; i < range.endIndex; i += 1) {
|
|
159
|
+
out.push(i);
|
|
160
|
+
}
|
|
161
|
+
return out;
|
|
162
|
+
}
|
|
163
|
+
/** Slice a dense array by VisibleRange (O(window), not O(n)). */
|
|
164
|
+
static projectRows(rows, range) {
|
|
165
|
+
return rows.slice(range.startIndex, range.endIndex);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Project from sparse structure: ordered id list + Map by id.
|
|
169
|
+
* Suitable for 100k+ tables without materializing full UI rows.
|
|
170
|
+
*/
|
|
171
|
+
static projectByIndex(orderedIds, byId, range) {
|
|
172
|
+
const out = [];
|
|
173
|
+
const end = Math.min(range.endIndex, orderedIds.length);
|
|
174
|
+
for (let i = range.startIndex; i < end; i += 1) {
|
|
175
|
+
const id = orderedIds[i];
|
|
176
|
+
const row = byId.get(id);
|
|
177
|
+
if (row !== void 0) out.push(row);
|
|
178
|
+
}
|
|
179
|
+
return out;
|
|
180
|
+
}
|
|
181
|
+
/** Horizontal column window (PR-98). */
|
|
182
|
+
static calculateColumns(scrollableWidths, scrollOffset, viewportSize, pinnedStartWidth = 0, overscan = 1, pinnedEndWidth = 0) {
|
|
183
|
+
return calculateColumnViewport(
|
|
184
|
+
scrollableWidths,
|
|
185
|
+
scrollOffset,
|
|
186
|
+
viewportSize,
|
|
187
|
+
pinnedStartWidth,
|
|
188
|
+
overscan,
|
|
189
|
+
pinnedEndWidth
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
static projectColumns(items, range) {
|
|
193
|
+
return projectColumnSlice(items, range);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
// engine/dataOps/columnPin.ts
|
|
198
|
+
function resolveColumnPinned(column) {
|
|
199
|
+
if (isIndexColumn(column)) return "start";
|
|
200
|
+
const pinned = column.columnDef?.pinned;
|
|
201
|
+
if (pinned === "start" || pinned === "end") return pinned;
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
function partitionColumnsByPin(columns) {
|
|
205
|
+
const pinnedStart = [];
|
|
206
|
+
const scrollable = [];
|
|
207
|
+
const pinnedEnd = [];
|
|
208
|
+
const pinnedStartAbs = [];
|
|
209
|
+
const scrollableAbs = [];
|
|
210
|
+
const pinnedEndAbs = [];
|
|
211
|
+
columns.forEach((col, abs) => {
|
|
212
|
+
const pin = resolveColumnPinned(col);
|
|
213
|
+
if (pin === "start") {
|
|
214
|
+
pinnedStart.push(col);
|
|
215
|
+
pinnedStartAbs.push(abs);
|
|
216
|
+
} else if (pin === "end") {
|
|
217
|
+
pinnedEnd.push(col);
|
|
218
|
+
pinnedEndAbs.push(abs);
|
|
219
|
+
} else {
|
|
220
|
+
scrollable.push(col);
|
|
221
|
+
scrollableAbs.push(abs);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
return {
|
|
225
|
+
pinnedStart,
|
|
226
|
+
scrollable,
|
|
227
|
+
pinnedEnd,
|
|
228
|
+
pinnedStartAbs,
|
|
229
|
+
scrollableAbs,
|
|
230
|
+
pinnedEndAbs
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function sumColumnWidths(columns, resolveWidth) {
|
|
234
|
+
return columns.reduce((sum, col) => sum + resolveWidth(col), 0);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// engine/dataOps/columnLayout.ts
|
|
238
|
+
function getColumnFlex(column) {
|
|
239
|
+
const flex = column.columnDef?.flex;
|
|
240
|
+
if (typeof flex === "number" && flex > 0 && Number.isFinite(flex)) return flex;
|
|
241
|
+
return 0;
|
|
242
|
+
}
|
|
243
|
+
function isFlexColumn(column, columnWidths) {
|
|
244
|
+
if (getColumnFlex(column) <= 0) return false;
|
|
245
|
+
const stored = columnWidths?.[column.fieldName];
|
|
246
|
+
return !(typeof stored === "number" && Number.isFinite(stored));
|
|
247
|
+
}
|
|
248
|
+
function computeLayoutColumnWidths(columns, columnWidths, containerWidth) {
|
|
249
|
+
const visible = columns.filter((c) => !("hidden" in c && c.hidden));
|
|
250
|
+
if (visible.length === 0) return {};
|
|
251
|
+
const entries = visible.map((col) => ({
|
|
252
|
+
col,
|
|
253
|
+
fieldName: col.fieldName,
|
|
254
|
+
flex: isFlexColumn(col, columnWidths) ? getColumnFlex(col) : 0,
|
|
255
|
+
baseWidth: resolveColumnWidth(col, columnWidths),
|
|
256
|
+
floor: columnWidthFloor(col)
|
|
257
|
+
}));
|
|
258
|
+
const out = {};
|
|
259
|
+
const hasFlex = entries.some((e) => e.flex > 0);
|
|
260
|
+
if (!hasFlex || containerWidth <= 0) {
|
|
261
|
+
for (const e of entries) out[e.fieldName] = e.baseWidth;
|
|
262
|
+
return out;
|
|
263
|
+
}
|
|
264
|
+
let fixedSum = 0;
|
|
265
|
+
let flexMinSum = 0;
|
|
266
|
+
let totalFlex = 0;
|
|
267
|
+
for (const e of entries) {
|
|
268
|
+
if (e.flex > 0) {
|
|
269
|
+
flexMinSum += e.floor;
|
|
270
|
+
totalFlex += e.flex;
|
|
271
|
+
} else {
|
|
272
|
+
fixedSum += e.baseWidth;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
const remaining = containerWidth - fixedSum - flexMinSum;
|
|
276
|
+
for (const e of entries) {
|
|
277
|
+
if (e.flex <= 0) {
|
|
278
|
+
out[e.fieldName] = e.baseWidth;
|
|
279
|
+
} else if (remaining <= 0 || totalFlex <= 0) {
|
|
280
|
+
out[e.fieldName] = e.floor;
|
|
281
|
+
} else {
|
|
282
|
+
const share = remaining * (e.flex / totalFlex);
|
|
283
|
+
out[e.fieldName] = clampColumnWidth(e.floor + share, e.col);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return out;
|
|
287
|
+
}
|
|
288
|
+
function sizeColumnsToFitWidths(columns, columnWidths, containerWidth) {
|
|
289
|
+
const visible = columns.filter((c) => !("hidden" in c && c.hidden));
|
|
290
|
+
if (visible.length === 0 || containerWidth <= 0) return {};
|
|
291
|
+
const current = visible.map((col) => ({
|
|
292
|
+
col,
|
|
293
|
+
colId: col.fieldName,
|
|
294
|
+
width: resolveColumnWidth(col, columnWidths)
|
|
295
|
+
}));
|
|
296
|
+
const total = current.reduce((sum2, c) => sum2 + c.width, 0);
|
|
297
|
+
if (total <= 0) return {};
|
|
298
|
+
const scale = containerWidth / total;
|
|
299
|
+
const out = {};
|
|
300
|
+
for (const c of current) {
|
|
301
|
+
out[c.colId] = clampColumnWidth(c.width * scale, c.col);
|
|
302
|
+
}
|
|
303
|
+
const sum = Object.values(out).reduce((a, b) => a + b, 0);
|
|
304
|
+
const delta = containerWidth - sum;
|
|
305
|
+
if (delta !== 0 && visible.length > 0) {
|
|
306
|
+
const last = visible[visible.length - 1];
|
|
307
|
+
out[last.fieldName] = clampColumnWidth(
|
|
308
|
+
(out[last.fieldName] ?? 0) + delta,
|
|
309
|
+
last
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
return out;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export { ViewportCalculator, buildCumulativeWidths, calculateColumnViewport, clampColumnWidth, columnSizeStyle, computeLayoutColumnWidths, isIndexColumn, overlayStoredColumnWidth, partitionColumnsByPin, resolveColumnPinned, resolveColumnWidth, sizeColumnsToFitWidths, sumColumnWidths };
|
|
316
|
+
//# sourceMappingURL=chunk-IPPIXOVQ.js.map
|
|
317
|
+
//# sourceMappingURL=chunk-IPPIXOVQ.js.map
|