cenitu-table 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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +137 -3
  3. package/README.tr.md +126 -0
  4. package/dist/cenitu-table.cjs +1 -0
  5. package/dist/cenitu-table.js +52 -0
  6. package/dist/index-BJIaMXd1.cjs +164 -0
  7. package/dist/index-DG98ykBX.js +5230 -0
  8. package/dist/react.cjs +1 -0
  9. package/dist/react.js +70 -0
  10. package/dist/types/export/csv.d.ts +26 -0
  11. package/dist/types/export/download.d.ts +3 -0
  12. package/dist/types/export/index.d.ts +6 -0
  13. package/dist/types/export/numberFormat.d.ts +12 -0
  14. package/dist/types/export/styles.d.ts +14 -0
  15. package/dist/types/export/types.d.ts +48 -0
  16. package/dist/types/export/xlsx.d.ts +24 -0
  17. package/dist/types/export/xml.d.ts +5 -0
  18. package/dist/types/export/zip.d.ts +20 -0
  19. package/dist/types/formula/address.d.ts +25 -0
  20. package/dist/types/formula/array-functions.d.ts +1 -0
  21. package/dist/types/formula/arrays.d.ts +13 -0
  22. package/dist/types/formula/ast.d.ts +82 -0
  23. package/dist/types/formula/coerce.d.ts +12 -0
  24. package/dist/types/formula/criteria-functions.d.ts +1 -0
  25. package/dist/types/formula/date-functions.d.ts +1 -0
  26. package/dist/types/formula/dates.d.ts +23 -0
  27. package/dist/types/formula/engine.d.ts +225 -0
  28. package/dist/types/formula/environment.d.ts +9 -0
  29. package/dist/types/formula/functions.d.ts +63 -0
  30. package/dist/types/formula/index.d.ts +10 -0
  31. package/dist/types/formula/interpreter.d.ts +23 -0
  32. package/dist/types/formula/lexer.d.ts +46 -0
  33. package/dist/types/formula/logic-functions.d.ts +1 -0
  34. package/dist/types/formula/lookup-functions.d.ts +1 -0
  35. package/dist/types/formula/math-functions.d.ts +1 -0
  36. package/dist/types/formula/parser.d.ts +12 -0
  37. package/dist/types/formula/restructure.d.ts +98 -0
  38. package/dist/types/formula/stat-functions.d.ts +1 -0
  39. package/dist/types/formula/text-format.d.ts +14 -0
  40. package/dist/types/formula/text-functions.d.ts +2 -0
  41. package/dist/types/formula/values.d.ts +41 -0
  42. package/dist/types/grid/autofill.d.ts +11 -0
  43. package/dist/types/grid/axis.d.ts +21 -0
  44. package/dist/types/grid/binding.d.ts +35 -0
  45. package/dist/types/grid/cellTypes.d.ts +82 -0
  46. package/dist/types/grid/columnMenu.d.ts +17 -0
  47. package/dist/types/grid/contextMenu.d.ts +15 -0
  48. package/dist/types/grid/filters.d.ts +14 -0
  49. package/dist/types/grid/grid.d.ts +380 -0
  50. package/dist/types/grid/merges.d.ts +24 -0
  51. package/dist/types/grid/messages.d.ts +47 -0
  52. package/dist/types/grid/rowMapper.d.ts +44 -0
  53. package/dist/types/grid/styles.d.ts +1 -0
  54. package/dist/types/grid/tsv.d.ts +3 -0
  55. package/dist/types/index.d.ts +9 -0
  56. package/dist/types/react/index.d.ts +19 -0
  57. package/package.json +76 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Cenitu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,137 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
1
+ # CenituTable
2
+
3
+ [![CI](https://github.com/cenitu/cenitu-table/actions/workflows/ci.yml/badge.svg)](https://github.com/cenitu/cenitu-table/actions/workflows/ci.yml)
4
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
+
6
+ A spreadsheet-like data grid with a built-in, multi-sheet formula engine. Written in TypeScript with **zero runtime dependencies**; an optional React component is included.
7
+
8
+ **[Live demo](https://cenitu.github.io/cenitu-table/)** · [Türkçe](README.tr.md) · [Design notes](docs/SPEC.md)
9
+
10
+ ## Features
11
+
12
+ - **Grid:** virtual scrolling (only visible cells are in the DOM), keyboard navigation (Ctrl+arrows jump to data edges), spreadsheet-compatible copy/cut/paste (TSV), undo/redo, column and row resizing, row/column insert and delete, right-click context menu.
13
+ - **Sorting and filtering:** a column menu with condition and value filters. Only the view changes; data and formulas stay where they are.
14
+ - **Autofill:** drag the fill handle to continue number and text series and to copy formulas with relative references; double-click to fill down; Ctrl+D.
15
+ - **Cell types:** numeric (Intl formats: currency, percent), date, checkbox, dropdown; validators, read-only cells, custom renderers.
16
+ - **Formatting:** bold, italic, underline, strike-through, colors, alignment, wrapping (Ctrl+B / I / U), conditional formatting for cells or whole rows.
17
+ - **Layout:** frozen rows and columns, merged cells, hidden columns, column drag-and-drop.
18
+ - **Formula engine:** 100+ functions (SUM, IF, XLOOKUP, SUMIFS, TEXT, date functions…), dynamic arrays that spill (FILTER, SORT, UNIQUE, SEQUENCE), cross-sheet references (`'Other sheet'!A1`), named expressions, incremental recalculation, cycle detection.
19
+ - **Data binding:** rows as arrays or as objects bound to columns by property path; edits are written back to your objects.
20
+ - **Export:** CSV (with protection against formula injection) and XLSX (formulas, formats, styles, frozen panes, merges) without any library.
21
+ - **Accessibility:** ARIA grid roles and an announced active cell for screen readers.
22
+ - **React:** `<CenituTable />` from `cenitu-table/react`.
23
+
24
+ ## Install
25
+
26
+ ```bash
27
+ npm install cenitu-table
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ ```ts
33
+ import { CenituGrid } from 'cenitu-table';
34
+
35
+ const grid = new CenituGrid(document.getElementById('grid')!, {
36
+ data: [
37
+ ['Product', 'Qty', 'Price', 'Total'],
38
+ ['Screw', 10, 2.5, '=B2*C2'],
39
+ ['Nut', 20, 1.25, '=B3*C3'],
40
+ ],
41
+ fixedRowsTop: 1,
42
+ columnSorting: true,
43
+ filters: true,
44
+ contextMenu: true,
45
+ columns: [
46
+ { type: 'dropdown', source: ['Screw', 'Nut', 'Washer'] },
47
+ { type: 'numeric', validator: (v) => Number(v) > 0 || 'Must be positive' },
48
+ { type: 'numeric', numericFormat: { style: 'currency', currency: 'EUR' } },
49
+ { type: 'numeric', numericFormat: { style: 'currency', currency: 'EUR' }, readOnly: true },
50
+ ],
51
+ height: 400,
52
+ });
53
+
54
+ grid.addHook('afterChange', (changes, source) => console.log(changes, source));
55
+ grid.getDataAtCell(1, 3); // 25 (computed value)
56
+ grid.getSourceDataAtCell(1, 3); // "=B2*C2"
57
+ ```
58
+
59
+ ### Objects instead of arrays
60
+
61
+ ```ts
62
+ const orders = [{ product: 'Screw', qty: 10, customer: { name: 'Acme' } }];
63
+
64
+ new CenituGrid(el, {
65
+ data: orders,
66
+ columns: [{ data: 'product' }, { data: 'qty', type: 'numeric' }, { data: 'customer.name', title: 'Customer' }],
67
+ dataSchema: () => ({ product: '', qty: 0, customer: { name: '' } }),
68
+ });
69
+ // Edits are written back: orders[0].qty changes when the cell changes.
70
+ ```
71
+
72
+ Formula cells write their computed value into the object and keep it current, so your properties stay plain values. Set `bindFormulas: 'text'` to store the formula text instead.
73
+
74
+ ### Several sheets
75
+
76
+ Give one engine to several grids — one grid per sheet:
77
+
78
+ ```ts
79
+ import { CenituGrid, FormulaEngine } from 'cenitu-table';
80
+
81
+ const engine = FormulaEngine.buildEmpty();
82
+ engine.addNamedExpression('VatRate', 0.2);
83
+ new CenituGrid(el1, { formulas: engine, sheetName: 'Orders', data: orders });
84
+ new CenituGrid(el2, { formulas: engine, sheetName: 'Summary', data: [['=SUM(Orders!F2:F100)*(1+VatRate)']] });
85
+ ```
86
+
87
+ ### Export
88
+
89
+ ```ts
90
+ grid.downloadCSV('orders.csv'); // ";" fields and "," decimals for decimal-comma locales
91
+ await grid.downloadXLSX('book.xlsx', [summaryGrid]); // several sheets in one workbook
92
+ ```
93
+
94
+ ### React
95
+
96
+ ```tsx
97
+ import { CenituTable } from 'cenitu-table/react';
98
+
99
+ <CenituTable ref={gridRef} data={data} fixedRowsTop={1} onChange={(changes) => save(changes)} />;
100
+ ```
101
+
102
+ ### Formula engine on its own
103
+
104
+ ```ts
105
+ import { FormulaEngine, registerFunction } from 'cenitu-table';
106
+
107
+ const engine = FormulaEngine.buildFromArray([[1, 2, '=A1+B1']]);
108
+ engine.setCellContents({ row: 0, col: 0 }, 10); // returns the changed cells
109
+ engine.getCellValue({ row: 0, col: 2 }); // 12
110
+ registerFunction('DOUBLE', { minArgs: 1, maxArgs: 1, impl: ([x]) => (x as number) * 2 });
111
+ ```
112
+
113
+ ### Localization
114
+
115
+ ```ts
116
+ import { trTR } from 'cenitu-table';
117
+
118
+ new CenituGrid(el, { locale: 'tr-TR', language: trTR, data });
119
+ ```
120
+
121
+ `locale` drives number and date formatting; `language` holds the UI texts (English by default, Turkish included).
122
+
123
+ ## Development
124
+
125
+ ```bash
126
+ npm install
127
+ npm run dev # demo at http://localhost:5180
128
+ npm test # unit tests (vitest + jsdom)
129
+ npm run test:e2e # browser tests (Playwright: Chromium, Firefox, WebKit)
130
+ npm run build # type check, ESM/CJS bundles and .d.ts in dist/
131
+ ```
132
+
133
+ See [CONTRIBUTING.md](CONTRIBUTING.md). Notable changes are listed in [CHANGELOG.md](CHANGELOG.md).
134
+
135
+ ## License
136
+
137
+ [MIT](LICENSE)
package/README.tr.md ADDED
@@ -0,0 +1,126 @@
1
+ # CenituTable
2
+
3
+ Spreadsheet benzeri bir data grid ve ona bağlı, çok sayfalı bir formül motoru. TypeScript ile yazıldı, **çalışma zamanı bağımlılığı yok**. İsteğe bağlı bir React bileşeni de içeriyor.
4
+
5
+ **[Canlı demo](https://cenitu.github.io/cenitu-table/)** · [English](README.md) · [Tasarım notları](docs/SPEC.md)
6
+
7
+ ## Özellikler
8
+
9
+ - **Grid:** sanal kaydırma (yalnızca görünen hücreler DOM'da), klavye gezinmesi (Ctrl+ok ile veri bloğu sonuna atlama), Excel uyumlu kopyala/kes/yapıştır, geri al/yinele, sütun ve satır boyutlandırma, satır/sütun ekleme-silme, sağ tık menüsü.
10
+ - **Sıralama ve filtre:** koşula ve değer listesine göre filtreleyen sütun menüsü. Yalnızca görünüm değişir; veri ve formüller yerinde kalır.
11
+ - **Doldurma tutamacı:** sayı ve metin serileri, göreli kayan formüller, çift tıklamayla otomatik doldurma, Ctrl+D.
12
+ - **Hücre tipleri:** sayı (para, yüzde gibi Intl biçimleri), tarih, onay kutusu, açılır liste; doğrulayıcılar, salt-okunur hücreler, özel çiziciler.
13
+ - **Biçimlendirme:** kalın, italik, altı çizili, üstü çizili, renkler, hizalama, metin kaydırma (Ctrl+B / I / U); hücre ya da tüm satır için koşullu biçimlendirme.
14
+ - **Yerleşim:** sabit satır ve sütunlar, birleştirilmiş hücreler, gizli sütunlar, sürükleyerek sütun taşıma.
15
+ - **Formül motoru:** 100'den fazla fonksiyon (SUM, IF, XLOOKUP, SUMIFS, TEXT, tarih fonksiyonları…), taşan dinamik diziler (FILTER, SORT, UNIQUE, SEQUENCE), sayfalar arası referanslar (`'Diğer Sayfa'!A1`), isimli ifadeler, artımlı yeniden hesaplama, döngü tespiti.
16
+ - **Veri bağlama:** satırlar dizi ya da nesne olarak verilebilir. Nesnelerde sütunlar alan yoluna bağlanır ve düzenlemeler nesnelerinize geri yazılır.
17
+ - **Dışa aktarma:** CSV (formül enjeksiyonuna karşı korumalı) ve XLSX (formüller, biçimler, stiller, sabit bölmeler, birleştirmeler); hiçbir kütüphane kullanmadan.
18
+ - **Erişilebilirlik:** ARIA grid rolleri, ekran okuyucuya duyurulan aktif hücre.
19
+ - **React:** `cenitu-table/react` içinden `<CenituTable />`.
20
+
21
+ ## Kurulum
22
+
23
+ ```bash
24
+ npm install cenitu-table
25
+ ```
26
+
27
+ ## Kullanım
28
+
29
+ ```ts
30
+ import { CenituGrid, trTR } from 'cenitu-table';
31
+
32
+ const grid = new CenituGrid(document.getElementById('grid')!, {
33
+ data: [
34
+ ['Ürün', 'Adet', 'Fiyat', 'Tutar'],
35
+ ['Vida', 10, 2.5, '=B2*C2'],
36
+ ['Somun', 20, 1.25, '=B3*C3'],
37
+ ],
38
+ fixedRowsTop: 1,
39
+ columnSorting: true,
40
+ filters: true,
41
+ contextMenu: true,
42
+ locale: 'tr-TR',
43
+ language: trTR,
44
+ columns: [
45
+ { type: 'dropdown', source: ['Vida', 'Somun', 'Pul'] },
46
+ { type: 'numeric', validator: (v) => Number(v) > 0 || 'Pozitif olmalı' },
47
+ { type: 'numeric', numericFormat: { style: 'currency', currency: 'TRY' } },
48
+ { type: 'numeric', numericFormat: { style: 'currency', currency: 'TRY' }, readOnly: true },
49
+ ],
50
+ height: 400,
51
+ });
52
+
53
+ grid.addHook('afterChange', (changes, source) => console.log(changes, source));
54
+ grid.getDataAtCell(1, 3); // 25 (hesaplanmış değer)
55
+ grid.getSourceDataAtCell(1, 3); // "=B2*C2"
56
+ ```
57
+
58
+ ### Dizi yerine nesneler
59
+
60
+ ```ts
61
+ const siparisler = [{ urun: 'Vida', adet: 10, musteri: { ad: 'Acme' } }];
62
+
63
+ new CenituGrid(el, {
64
+ data: siparisler,
65
+ columns: [{ data: 'urun' }, { data: 'adet', type: 'numeric' }, { data: 'musteri.ad', title: 'Müşteri' }],
66
+ dataSchema: () => ({ urun: '', adet: 0, musteri: { ad: '' } }),
67
+ });
68
+ // Düzenlemeler geri yazılır: hücre değişince siparisler[0].adet de değişir.
69
+ ```
70
+
71
+ Formül hücreleri nesneye hesaplanmış değeri yazar ve güncel tutar; böylece alanlarınız düz değer olarak kalır. Formül metnini saklamak için `bindFormulas: 'text'` kullanın.
72
+
73
+ ### Birden fazla sayfa
74
+
75
+ Tek bir motoru birden fazla grid'e verin (her grid bir sayfa):
76
+
77
+ ```ts
78
+ import { CenituGrid, FormulaEngine } from 'cenitu-table';
79
+
80
+ const engine = FormulaEngine.buildEmpty();
81
+ engine.addNamedExpression('KdvOrani', 0.2);
82
+ new CenituGrid(el1, { formulas: engine, sheetName: 'Siparişler', data: siparisler });
83
+ new CenituGrid(el2, { formulas: engine, sheetName: 'Özet', data: [['=SUM(Siparişler!F2:F100)*(1+KdvOrani)']] });
84
+ ```
85
+
86
+ ### Dışa aktarma
87
+
88
+ ```ts
89
+ grid.downloadCSV('siparisler.csv'); // tr-TR'de ";" ayraç ve "," ondalık
90
+ await grid.downloadXLSX('kitap.xlsx', [ozetGrid]); // birden fazla sayfa tek dosyada
91
+ ```
92
+
93
+ ### React
94
+
95
+ ```tsx
96
+ import { CenituTable } from 'cenitu-table/react';
97
+
98
+ <CenituTable ref={gridRef} data={data} fixedRowsTop={1} onChange={(changes) => kaydet(changes)} />;
99
+ ```
100
+
101
+ ### Yalnızca formül motoru
102
+
103
+ ```ts
104
+ import { FormulaEngine, registerFunction } from 'cenitu-table';
105
+
106
+ const engine = FormulaEngine.buildFromArray([[1, 2, '=A1+B1']]);
107
+ engine.setCellContents({ row: 0, col: 0 }, 10); // değişen hücreleri döndürür
108
+ engine.getCellValue({ row: 0, col: 2 }); // 12
109
+ registerFunction('DOUBLE', { minArgs: 1, maxArgs: 1, impl: ([x]) => (x as number) * 2 });
110
+ ```
111
+
112
+ ## Geliştirme
113
+
114
+ ```bash
115
+ npm install
116
+ npm run dev # demo: http://localhost:5180
117
+ npm test # birim testleri (vitest + jsdom)
118
+ npm run test:e2e # tarayıcı testleri (Playwright: Chromium, Firefox, WebKit)
119
+ npm run build # tip denetimi, ESM/CJS paketleri ve dist/ altında .d.ts
120
+ ```
121
+
122
+ Bkz. [CONTRIBUTING.md](CONTRIBUTING.md). Önemli değişiklikler [CHANGELOG.md](CHANGELOG.md)'de.
123
+
124
+ ## Lisans
125
+
126
+ [MIT](LICENSE)
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-BJIaMXd1.cjs");exports.CSV_MIME=e.CSV_MIME;exports.CellError=e.CellError;exports.CenituGrid=e.CenituGrid;exports.FormulaEngine=e.FormulaEngine;exports.FormulaSyntaxError=e.FormulaSyntaxError;exports.MAX_COLS=e.MAX_COLS;exports.MAX_ROWS=e.MAX_ROWS;exports.RangeValue=e.RangeValue;exports.SHEET_SPAN=e.SHEET_SPAN;exports.XLSX_MIME=e.XLSX_MIME;exports.cellKey=e.cellKey;exports.columnIndex=e.columnIndex;exports.columnLabel=e.columnLabel;exports.crc32=e.crc32;exports.dateCodeFromPattern=e.dateCodeFromPattern;exports.dateToSerial=e.dateToSerial;exports.downloadBlob=e.downloadBlob;exports.enUS=e.enUS;exports.formatDateCode=e.formatDateCode;exports.formatSerialDate=e.formatSerialDate;exports.getRegisteredFunctionNames=e.getRegisteredFunctionNames;exports.inverseMove=e.inverseMove;exports.isDateFormat=e.isDateFormat;exports.isError=e.isError;exports.isFormula=e.isFormula;exports.keyToAddress=e.keyToAddress;exports.normalizeRange=e.normalizeRange;exports.numberFormatFromMeta=e.numberFormatFromMeta;exports.parseA1=e.parseA1;exports.parseDateString=e.parseDateString;exports.parseFormula=e.parseFormula;exports.pxToColWidth=e.pxToColWidth;exports.quoteSheetName=e.quoteSheetName;exports.rangeContains=e.rangeContains;exports.registerFunction=e.registerFunction;exports.sanitizeSheetNames=e.sanitizeSheetNames;exports.serialToDate=e.serialToDate;exports.setClock=e.setClock;exports.setRandom=e.setRandom;exports.toA1=e.toA1;exports.toCSV=e.toCSV;exports.toXLSX=e.toXLSX;exports.toXLSXCompressed=e.toXLSXCompressed;exports.trTR=e.trTR;exports.unparse=e.unparse;exports.unregisterFunction=e.unregisterFunction;exports.xlsxParts=e.xlsxParts;exports.zipDeflate=e.zipDeflate;exports.zipStore=e.zipStore;
@@ -0,0 +1,52 @@
1
+ import { a as e, b as r, C as o, F as t, c as n, M as i, d as l, R as m, S, X as u, e as d, f as C, g as F, h as c, j as g, k as p, l as E, m as M, n as X, o as x, p as A, q as D, r as R, s as T, t as L, u as f, v as z, w as N, x as _, y as b, z as h, A as y, B as I, D as P, E as V, G as k, H as v, I as W, J as q, K as w, L as B, N as G, P as H, Q as K, T as O, U, V as j, W as J, Y as Q } from "./index-DG98ykBX.js";
2
+ export {
3
+ e as CSV_MIME,
4
+ r as CellError,
5
+ o as CenituGrid,
6
+ t as FormulaEngine,
7
+ n as FormulaSyntaxError,
8
+ i as MAX_COLS,
9
+ l as MAX_ROWS,
10
+ m as RangeValue,
11
+ S as SHEET_SPAN,
12
+ u as XLSX_MIME,
13
+ d as cellKey,
14
+ C as columnIndex,
15
+ F as columnLabel,
16
+ c as crc32,
17
+ g as dateCodeFromPattern,
18
+ p as dateToSerial,
19
+ E as downloadBlob,
20
+ M as enUS,
21
+ X as formatDateCode,
22
+ x as formatSerialDate,
23
+ A as getRegisteredFunctionNames,
24
+ D as inverseMove,
25
+ R as isDateFormat,
26
+ T as isError,
27
+ L as isFormula,
28
+ f as keyToAddress,
29
+ z as normalizeRange,
30
+ N as numberFormatFromMeta,
31
+ _ as parseA1,
32
+ b as parseDateString,
33
+ h as parseFormula,
34
+ y as pxToColWidth,
35
+ I as quoteSheetName,
36
+ P as rangeContains,
37
+ V as registerFunction,
38
+ k as sanitizeSheetNames,
39
+ v as serialToDate,
40
+ W as setClock,
41
+ q as setRandom,
42
+ w as toA1,
43
+ B as toCSV,
44
+ G as toXLSX,
45
+ H as toXLSXCompressed,
46
+ K as trTR,
47
+ O as unparse,
48
+ U as unregisterFunction,
49
+ j as xlsxParts,
50
+ J as zipDeflate,
51
+ Q as zipStore
52
+ };