diff --git a/dev/ag-grid-angular/src/main.ts b/dev/ag-grid-angular/src/main.ts
index 895afcb..cf2da8a 100644
--- a/dev/ag-grid-angular/src/main.ts
+++ b/dev/ag-grid-angular/src/main.ts
@@ -124,6 +124,10 @@ if (isDevMode()) {
{
path: 'row-group',
loadComponent: async () => import('./tests/row-group').then((m) => m.DevRowGroup)
+ },
+ {
+ path: 'export',
+ loadComponent: async () => import('./tests/export.ng').then((m) => m.DevExport)
}
]
};
diff --git a/dev/ag-grid-angular/src/tests/export.ng.ts b/dev/ag-grid-angular/src/tests/export.ng.ts
new file mode 100644
index 0000000..b1cd607
--- /dev/null
+++ b/dev/ag-grid-angular/src/tests/export.ng.ts
@@ -0,0 +1,118 @@
+import { ChangeDetectionStrategy, Component } from '@angular/core';
+import { KbqAgGridThemeModule } from '@koobiq/ag-grid-angular-theme';
+import { AgGridModule } from 'ag-grid-angular';
+import { AllCommunityModule, ColDef, GridApi, GridReadyEvent, ModuleRegistry } from 'ag-grid-community';
+import { jsPDF } from 'jspdf';
+import { autoTable } from 'jspdf-autotable';
+import { utils, writeFile } from 'xlsx';
+import { devInjectRowData } from '../row-data';
+
+ModuleRegistry.registerModules([AllCommunityModule]);
+
+const COLUMN_DEFS: ColDef[] = [
+ { field: 'athlete', headerName: 'Athlete' },
+ { field: 'age', headerName: 'Age' },
+ { field: 'country', headerName: 'Country' },
+ { field: 'year', headerName: 'Year' },
+ { field: 'date', headerName: 'Date' },
+ { field: 'sport', headerName: 'Sport' },
+ { field: 'gold', headerName: 'Gold' },
+ { field: 'silver', headerName: 'Silver' },
+ { field: 'bronze', headerName: 'Bronze' },
+ { field: 'total', headerName: 'Total' }
+];
+
+type ExportTable = {
+ headers: string[];
+ rows: string[][];
+};
+
+@Component({
+ standalone: true,
+ imports: [AgGridModule, KbqAgGridThemeModule],
+ selector: 'dev-export',
+ template: `
+
+
+
+
+
+
+
+ `,
+ styles: `
+ :host {
+ display: flex;
+ flex-direction: column;
+ gap: var(--kbq-size-m);
+ padding: var(--kbq-size-m);
+ }
+
+ ag-grid-angular {
+ height: 500px;
+ max-width: 2036px;
+ }
+ `,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class DevExport {
+ protected readonly rowData = devInjectRowData();
+ protected readonly columnDefs = COLUMN_DEFS;
+ private api!: GridApi;
+ private readonly filename = 'export';
+
+ /** Stores the grid API once the grid finishes initializing. */
+ protected onGridReady(event: GridReadyEvent): void {
+ this.api = event.api;
+ }
+
+ /** Downloads the grid data as a .csv file. */
+ protected downloadCsv(): void {
+ this.api.exportDataAsCsv({ fileName: `${this.filename}.csv` });
+ }
+
+ /** Downloads the grid data as an .xlsx file. */
+ protected downloadXlsx(): void {
+ const table = this.getExportTable();
+ if (!table) return;
+ const worksheet = utils.aoa_to_sheet([table.headers, ...table.rows]);
+ const workbook = utils.book_new();
+ utils.book_append_sheet(workbook, worksheet, 'Export');
+ writeFile(workbook, `${this.filename}.xlsx`);
+ }
+
+ /** Downloads the grid data as a .pdf file. */
+ protected downloadPdf(): void {
+ const table = this.getExportTable();
+ if (!table) return;
+ const pdf = new jsPDF({ orientation: 'landscape' });
+ autoTable(pdf, { head: [table.headers], body: table.rows, theme: 'plain' });
+ pdf.save(`${this.filename}.pdf`);
+ }
+
+ /** Reads the currently displayed columns and rows (respecting filter, sort and formatters). */
+ private getExportTable(): ExportTable | null {
+ const columns = this.api.getAllDisplayedColumns();
+ const headers = columns.map((column) => column.getColDef().headerName ?? column.getColId());
+ const rows: string[][] = [];
+
+ this.api.forEachNodeAfterFilterAndSort((node) => {
+ if (!node.data) return;
+
+ rows.push(
+ columns.map(
+ (column) => this.api.getCellValue({ rowNode: node, colKey: column, useFormatter: true }) ?? ''
+ )
+ );
+ });
+
+ return { headers, rows };
+ }
+}
diff --git a/package.json b/package.json
index e0753fa..ca8a565 100644
--- a/package.json
+++ b/package.json
@@ -55,7 +55,10 @@
"@koobiq/icons": "^10.10.3",
"ag-grid-angular": "^34.3.1",
"ag-grid-community": "^34.3.1",
+ "jspdf": "^4.2.1",
+ "jspdf-autotable": "^5.0.8",
"rxjs": "~7.8.0",
+ "xlsx": "^0.18.5",
"zone.js": "~0.16.2"
},
"devDependencies": {
diff --git a/yarn.lock b/yarn.lock
index ccb9246..cb354ea 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2103,6 +2103,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/runtime@npm:^7.28.6":
+ version: 7.29.7
+ resolution: "@babel/runtime@npm:7.29.7"
+ checksum: 10c0/ca11572f7146b21e0bde6a9ed4bb6a89eafbee5f0944c7eb54d0d8a2dac962c33638a1d611e14faa71dfbb92b4b5f9236232208568a6b7d5c6f3f39ddb91771e
+ languageName: node
+ linkType: hard
+
"@babel/template@npm:^7.25.0, @babel/template@npm:^7.25.9, @babel/template@npm:^7.26.9, @babel/template@npm:^7.27.0":
version: 7.27.0
resolution: "@babel/template@npm:7.27.0"
@@ -7082,6 +7089,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/pako@npm:^2.0.3":
+ version: 2.0.4
+ resolution: "@types/pako@npm:2.0.4"
+ checksum: 10c0/5765bf8bc7e77ee141c454118f03e544b8f6cb51eb257d82dc5830feeab8cd00818af3a1eabefdfbe8dd3ae9916ed5403937bf1031a0ee51deea27fdf4dccdfb
+ languageName: node
+ linkType: hard
+
"@types/parse-json@npm:^4.0.0":
version: 4.0.2
resolution: "@types/parse-json@npm:4.0.2"
@@ -7096,6 +7110,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/raf@npm:^3.4.0":
+ version: 3.4.3
+ resolution: "@types/raf@npm:3.4.3"
+ checksum: 10c0/dea835f0daa399c51db9137f5337dc08a2b4a5f61f645658966ecabaebbbd0fd59551f384a1141e14e22a1cc5a591da7d4d88c60a525ad1399108b6dd2641d75
+ languageName: node
+ linkType: hard
+
"@types/range-parser@npm:*":
version: 1.2.7
resolution: "@types/range-parser@npm:1.2.7"
@@ -7184,6 +7205,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/trusted-types@npm:^2.0.7":
+ version: 2.0.7
+ resolution: "@types/trusted-types@npm:2.0.7"
+ checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c
+ languageName: node
+ linkType: hard
+
"@types/wrap-ansi@npm:^3.0.0":
version: 3.0.0
resolution: "@types/wrap-ansi@npm:3.0.0"
@@ -7931,6 +7959,13 @@ __metadata:
languageName: node
linkType: hard
+"adler-32@npm:~1.3.0":
+ version: 1.3.1
+ resolution: "adler-32@npm:1.3.1"
+ checksum: 10c0/c1b7185526ee1bbe0eac8ed414d5226af4cd02a0540449a72ec1a75f198c5e93352ba4d7b9327231eea31fd83c2d080d13baf16d8ed5710fb183677beb85f612
+ languageName: node
+ linkType: hard
+
"adm-zip@npm:^0.5.10":
version: 0.5.16
resolution: "adm-zip@npm:0.5.16"
@@ -8490,6 +8525,13 @@ __metadata:
languageName: node
linkType: hard
+"base64-arraybuffer@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "base64-arraybuffer@npm:1.0.2"
+ checksum: 10c0/3acac95c70f9406e87a41073558ba85b6be9dbffb013a3d2a710e3f2d534d506c911847d5d9be4de458af6362c676de0a5c4c2d7bdf4def502d00b313368e72f
+ languageName: node
+ linkType: hard
+
"base64-js@npm:^1.3.1":
version: 1.5.1
resolution: "base64-js@npm:1.5.1"
@@ -8833,6 +8875,22 @@ __metadata:
languageName: node
linkType: hard
+"canvg@npm:^3.0.11":
+ version: 3.0.11
+ resolution: "canvg@npm:3.0.11"
+ dependencies:
+ "@babel/runtime": "npm:^7.12.5"
+ "@types/raf": "npm:^3.4.0"
+ core-js: "npm:^3.8.3"
+ raf: "npm:^3.4.1"
+ regenerator-runtime: "npm:^0.13.7"
+ rgbcolor: "npm:^1.0.1"
+ stackblur-canvas: "npm:^2.0.0"
+ svg-pathdata: "npm:^6.0.3"
+ checksum: 10c0/03ea5b69e97a4a476ef5fc8455d0da2718bd68cd8ace3e42718176bf4b7dfd80eb1d0eba47dcd04b34ed9a0c5c8ed849ead0f364dad0e35369254a45d5e098c4
+ languageName: node
+ linkType: hard
+
"caseless@npm:~0.12.0":
version: 0.12.0
resolution: "caseless@npm:0.12.0"
@@ -8840,6 +8898,16 @@ __metadata:
languageName: node
linkType: hard
+"cfb@npm:~1.2.1":
+ version: 1.2.2
+ resolution: "cfb@npm:1.2.2"
+ dependencies:
+ adler-32: "npm:~1.3.0"
+ crc-32: "npm:~1.2.0"
+ checksum: 10c0/87f6d9c3878268896ed6ca29dfe32a2aa078b12d0f21d8405c95911b74ab6296823d7312bbf5e18326d00b16cc697f587e07a17018c5edf7a1ba31dd5bc6da36
+ languageName: node
+ linkType: hard
+
"chalk@npm:3.0.0":
version: 3.0.0
resolution: "chalk@npm:3.0.0"
@@ -9036,6 +9104,13 @@ __metadata:
languageName: node
linkType: hard
+"codepage@npm:~1.15.0":
+ version: 1.15.0
+ resolution: "codepage@npm:1.15.0"
+ checksum: 10c0/2455b482302cb784b46dea60a8ee83f0c23e794bdd979556bdb107abe681bba722af62a37f5c955ff4efd68fdb9688c3986e719b4fd536c0e06bb25bc82abea3
+ languageName: node
+ linkType: hard
+
"collect-v8-coverage@npm:^1.0.0":
version: 1.0.3
resolution: "collect-v8-coverage@npm:1.0.3"
@@ -9356,6 +9431,13 @@ __metadata:
languageName: node
linkType: hard
+"core-js@npm:^3.6.0, core-js@npm:^3.8.3":
+ version: 3.49.0
+ resolution: "core-js@npm:3.49.0"
+ checksum: 10c0/2e42edb47eda38fd5368380131623c8aa5d4a6b42164125b17744bdc08fa5ebbbdd06b4b4aa6ca3663470a560b0f2fba48e18f142dfe264b0039df85bc625694
+ languageName: node
+ linkType: hard
+
"core-util-is@npm:~1.0.0":
version: 1.0.3
resolution: "core-util-is@npm:1.0.3"
@@ -9413,6 +9495,15 @@ __metadata:
languageName: node
linkType: hard
+"crc-32@npm:~1.2.0, crc-32@npm:~1.2.1":
+ version: 1.2.2
+ resolution: "crc-32@npm:1.2.2"
+ bin:
+ crc32: bin/crc32.njs
+ checksum: 10c0/11dcf4a2e77ee793835d49f2c028838eae58b44f50d1ff08394a610bfd817523f105d6ae4d9b5bef0aad45510f633eb23c903e9902e4409bed1ce70cb82b9bf0
+ languageName: node
+ linkType: hard
+
"create-jest@npm:^29.7.0":
version: 29.7.0
resolution: "create-jest@npm:29.7.0"
@@ -9488,6 +9579,15 @@ __metadata:
languageName: node
linkType: hard
+"css-line-break@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "css-line-break@npm:2.1.0"
+ dependencies:
+ utrie: "npm:^1.0.2"
+ checksum: 10c0/b2222d99d5daf7861ecddc050244fdce296fad74b000dcff6bdfb1eb16dc2ef0b9ffe2c1c965e3239bd05ebe9eadb6d5438a91592fa8648d27a338e827cf9048
+ languageName: node
+ linkType: hard
+
"css-loader@npm:7.1.2":
version: 7.1.2
resolution: "css-loader@npm:7.1.2"
@@ -9788,6 +9888,8 @@ __metadata:
jest-environment-jsdom: "npm:^29.7.0"
jest-fail-on-console: "npm:^3.3.4"
jest-preset-angular: "npm:14.6.2"
+ jspdf: "npm:^4.2.1"
+ jspdf-autotable: "npm:^5.0.8"
lint-staged: "npm:^15.5.2"
ng-packagr: "npm:^18.2.0"
nx: "npm:^20.8.4"
@@ -9802,6 +9904,7 @@ __metadata:
ts-node: "npm:^10.9.2"
tslib: "npm:^2.3.0"
typescript: "npm:5.5.4"
+ xlsx: "npm:^0.18.5"
zone.js: "npm:~0.16.2"
languageName: unknown
linkType: soft
@@ -10115,6 +10218,18 @@ __metadata:
languageName: node
linkType: hard
+"dompurify@npm:^3.3.1":
+ version: 3.4.12
+ resolution: "dompurify@npm:3.4.12"
+ dependencies:
+ "@types/trusted-types": "npm:^2.0.7"
+ dependenciesMeta:
+ "@types/trusted-types":
+ optional: true
+ checksum: 10c0/127a13817353d4e20e75a991a9022a04c3af12af7479f68e2b8bee6dbc7330a96edfb8f4ebff96f4f0f24cd43e8dbba46214131f510c3aa87a843bd8b610d0ab
+ languageName: node
+ linkType: hard
+
"domutils@npm:^3.0.1":
version: 3.2.2
resolution: "domutils@npm:3.2.2"
@@ -11357,6 +11472,17 @@ __metadata:
languageName: node
linkType: hard
+"fast-png@npm:^6.2.0":
+ version: 6.4.0
+ resolution: "fast-png@npm:6.4.0"
+ dependencies:
+ "@types/pako": "npm:^2.0.3"
+ iobuffer: "npm:^5.3.2"
+ pako: "npm:^2.1.0"
+ checksum: 10c0/bca27a09d56a5ead536b11c1ddccf4fe44c7c0af88a8faefab6a397527d9c71b00c09b2055d0108807c438c50719dd2acbd7217ef88785b500888db26fa0358a
+ languageName: node
+ linkType: hard
+
"fast-uri@npm:^3.0.1":
version: 3.0.6
resolution: "fast-uri@npm:3.0.6"
@@ -11422,6 +11548,13 @@ __metadata:
languageName: node
linkType: hard
+"fflate@npm:^0.8.1":
+ version: 0.8.3
+ resolution: "fflate@npm:0.8.3"
+ checksum: 10c0/eab181ca37f5348ae76d4b6f840e0026e30220e33153289ac942222d8b9638237d486507dbcc09878d724095bd354993a2ee48bbee99c8f2c6440d4448719aa7
+ languageName: node
+ linkType: hard
+
"figures@npm:3.2.0":
version: 3.2.0
resolution: "figures@npm:3.2.0"
@@ -11666,6 +11799,13 @@ __metadata:
languageName: node
linkType: hard
+"frac@npm:~1.1.2":
+ version: 1.1.2
+ resolution: "frac@npm:1.1.2"
+ checksum: 10c0/640740eb58b590eb38c78c676955bee91cd22d854f5876241a15c49d4495fa53a84898779dcf7eca30aabfe1c1a4a705752b5f224934257c5dda55c545413ba7
+ languageName: node
+ linkType: hard
+
"fraction.js@npm:^4.3.7":
version: 4.3.7
resolution: "fraction.js@npm:4.3.7"
@@ -12251,6 +12391,16 @@ __metadata:
languageName: node
linkType: hard
+"html2canvas@npm:^1.0.0-rc.5":
+ version: 1.4.1
+ resolution: "html2canvas@npm:1.4.1"
+ dependencies:
+ css-line-break: "npm:^2.1.0"
+ text-segmentation: "npm:^1.0.3"
+ checksum: 10c0/6de86f75762b00948edf2ea559f16da0a1ec3facc4a8a7d3f35fcec59bb0c5970463478988ae3d9082152e0173690d46ebf4082e7ac803dd4817bae1d355c0db
+ languageName: node
+ linkType: hard
+
"htmlparser2@npm:^8.0.2":
version: 8.0.2
resolution: "htmlparser2@npm:8.0.2"
@@ -12665,6 +12815,13 @@ __metadata:
languageName: node
linkType: hard
+"iobuffer@npm:^5.3.2":
+ version: 5.4.0
+ resolution: "iobuffer@npm:5.4.0"
+ checksum: 10c0/1b3f9a5ea158bc63f038b374b42832acdb9db13ea9cfa4ed78723f30894986442f6c033dff4ae2fdf34724bf0fe432e3b86c11ca82049568c58b8d7fb47a6ac2
+ languageName: node
+ linkType: hard
+
"ip-address@npm:^9.0.5":
version: 9.0.5
resolution: "ip-address@npm:9.0.5"
@@ -13800,6 +13957,39 @@ __metadata:
languageName: node
linkType: hard
+"jspdf-autotable@npm:^5.0.8":
+ version: 5.0.8
+ resolution: "jspdf-autotable@npm:5.0.8"
+ peerDependencies:
+ jspdf: ^2 || ^3 || ^4
+ checksum: 10c0/c5e695d6d31692b9d2c11d284948ad508fc3e616d0b555119451dfd307176bdd80c880459cef6fee9e7db5140272b6fa281ee0ffaeeffddca6bf2497b577b40e
+ languageName: node
+ linkType: hard
+
+"jspdf@npm:^4.2.1":
+ version: 4.2.1
+ resolution: "jspdf@npm:4.2.1"
+ dependencies:
+ "@babel/runtime": "npm:^7.28.6"
+ canvg: "npm:^3.0.11"
+ core-js: "npm:^3.6.0"
+ dompurify: "npm:^3.3.1"
+ fast-png: "npm:^6.2.0"
+ fflate: "npm:^0.8.1"
+ html2canvas: "npm:^1.0.0-rc.5"
+ dependenciesMeta:
+ canvg:
+ optional: true
+ core-js:
+ optional: true
+ dompurify:
+ optional: true
+ html2canvas:
+ optional: true
+ checksum: 10c0/d905809b374de1060ab39ba4b1603935fcced314bef8f63f7fd272d3f96eff0b50a96e48d3c2063ac8e51b84a1442464ff2b037af13f54b082e456416da470b7
+ languageName: node
+ linkType: hard
+
"karma-source-map-support@npm:1.4.0":
version: 1.4.0
resolution: "karma-source-map-support@npm:1.4.0"
@@ -15880,6 +16070,13 @@ __metadata:
languageName: node
linkType: hard
+"pako@npm:^2.1.0":
+ version: 2.2.0
+ resolution: "pako@npm:2.2.0"
+ checksum: 10c0/e5d31de1940fdd13cc4014296b0026112483d0834bce4856ca29c8af8438d030c6416986a0f6df7d5372cae18d6dd6c57f48b24a49d6c207c0a4cc66af15c07d
+ languageName: node
+ linkType: hard
+
"parent-module@npm:^1.0.0":
version: 1.0.1
resolution: "parent-module@npm:1.0.1"
@@ -16050,6 +16247,13 @@ __metadata:
languageName: node
linkType: hard
+"performance-now@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "performance-now@npm:2.1.0"
+ checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9
+ languageName: node
+ linkType: hard
+
"picocolors@npm:1.1.1, picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1":
version: 1.1.1
resolution: "picocolors@npm:1.1.1"
@@ -16885,6 +17089,15 @@ __metadata:
languageName: node
linkType: hard
+"raf@npm:^3.4.1":
+ version: 3.4.1
+ resolution: "raf@npm:3.4.1"
+ dependencies:
+ performance-now: "npm:^2.1.0"
+ checksum: 10c0/337f0853c9e6a77647b0f499beedafea5d6facfb9f2d488a624f88b03df2be72b8a0e7f9118a3ff811377d534912039a3311815700d2b6d2313f82f736f9eb6e
+ languageName: node
+ linkType: hard
+
"rambda@npm:^9.1.0":
version: 9.4.2
resolution: "rambda@npm:9.4.2"
@@ -17018,6 +17231,13 @@ __metadata:
languageName: node
linkType: hard
+"regenerator-runtime@npm:^0.13.7":
+ version: 0.13.11
+ resolution: "regenerator-runtime@npm:0.13.11"
+ checksum: 10c0/12b069dc774001fbb0014f6a28f11c09ebfe3c0d984d88c9bced77fdb6fedbacbca434d24da9ae9371bfbf23f754869307fb51a4c98a8b8b18e5ef748677ca24
+ languageName: node
+ linkType: hard
+
"regenerator-runtime@npm:^0.14.0":
version: 0.14.1
resolution: "regenerator-runtime@npm:0.14.1"
@@ -17282,6 +17502,13 @@ __metadata:
languageName: node
linkType: hard
+"rgbcolor@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "rgbcolor@npm:1.0.1"
+ checksum: 10c0/13af06c523351bac2854b85a22d1dfafd9310efd898e9bd96c8706f9aa09a3ddc8392ab00ae03d12950782164a97677f21834ffd84ffebf76ae106add319f956
+ languageName: node
+ linkType: hard
+
"rimraf@npm:^3.0.2":
version: 3.0.2
resolution: "rimraf@npm:3.0.2"
@@ -18395,6 +18622,15 @@ __metadata:
languageName: node
linkType: hard
+"ssf@npm:~0.11.2":
+ version: 0.11.2
+ resolution: "ssf@npm:0.11.2"
+ dependencies:
+ frac: "npm:~1.1.2"
+ checksum: 10c0/c3fd24a90dc37a9dc5c4154cb4121e27507c33ebfeee3532aaf03625756b2c006cf79c0a23db0ba16c4a6e88e1349455327867e03453fc9d54b32c546bc18ca6
+ languageName: node
+ linkType: hard
+
"ssri@npm:^10.0.0":
version: 10.0.6
resolution: "ssri@npm:10.0.6"
@@ -18422,6 +18658,13 @@ __metadata:
languageName: node
linkType: hard
+"stackblur-canvas@npm:^2.0.0":
+ version: 2.7.0
+ resolution: "stackblur-canvas@npm:2.7.0"
+ checksum: 10c0/df290d0629056d5bb43d37548d0b24cb8593c79d742650e68489abf61013db578c9980724c2508bb738d107204f2e2494ab94c3cf69d6b725caa9c63b8c7e272
+ languageName: node
+ linkType: hard
+
"stackframe@npm:^1.3.4":
version: 1.3.4
resolution: "stackframe@npm:1.3.4"
@@ -18800,6 +19043,13 @@ __metadata:
languageName: node
linkType: hard
+"svg-pathdata@npm:^6.0.3":
+ version: 6.0.3
+ resolution: "svg-pathdata@npm:6.0.3"
+ checksum: 10c0/1ba4ad2fa81e86df37d6e78d3be9e664bbedf97773b725a863a85db384285be32dc37d9c0d61e477d89594ee95b967d2c53d6bee2d76420aab670ab4124a38b9
+ languageName: node
+ linkType: hard
+
"svg-tags@npm:^1.0.0":
version: 1.0.0
resolution: "svg-tags@npm:1.0.0"
@@ -18991,6 +19241,15 @@ __metadata:
languageName: node
linkType: hard
+"text-segmentation@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "text-segmentation@npm:1.0.3"
+ dependencies:
+ utrie: "npm:^1.0.2"
+ checksum: 10c0/8b9ae8524e3a332371060d0ca62f10ad49a13e954719ea689a6c3a8b8c15c8a56365ede2bb91c322fb0d44b6533785f0da603e066b7554d052999967fb72d600
+ languageName: node
+ linkType: hard
+
"text-table@npm:^0.2.0":
version: 0.2.0
resolution: "text-table@npm:0.2.0"
@@ -19649,6 +19908,15 @@ __metadata:
languageName: node
linkType: hard
+"utrie@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "utrie@npm:1.0.2"
+ dependencies:
+ base64-arraybuffer: "npm:^1.0.2"
+ checksum: 10c0/eaffe645bd81a39e4bc3abb23df5895e9961dbdd49748ef3b173529e8b06ce9dd1163e9705d5309a1c61ee41ffcb825e2043bc0fd1659845ffbdf4b1515dfdb4
+ languageName: node
+ linkType: hard
+
"uuid@npm:^8.3.2":
version: 8.3.2
resolution: "uuid@npm:8.3.2"
@@ -20199,6 +20467,13 @@ __metadata:
languageName: node
linkType: hard
+"wmf@npm:~1.0.1":
+ version: 1.0.2
+ resolution: "wmf@npm:1.0.2"
+ checksum: 10c0/3fa5806f382632cadfe65d4ef24f7a583b0c0720171edb00e645af5248ad0bb6784e8fcee1ccd9f475a1a12a7523e2512e9c063731fbbdae14dc469e1c033d93
+ languageName: node
+ linkType: hard
+
"word-wrap@npm:^1.2.5":
version: 1.2.5
resolution: "word-wrap@npm:1.2.5"
@@ -20206,6 +20481,13 @@ __metadata:
languageName: node
linkType: hard
+"word@npm:~0.3.0":
+ version: 0.3.0
+ resolution: "word@npm:0.3.0"
+ checksum: 10c0/c6da2a9f7a0d81a32fa6768a638d21b153da2be04f94f3964889c7cc1365d74b6ecb43b42256c3f926cd59512d8258206991c78c21000c3da96d42ff1238b840
+ languageName: node
+ linkType: hard
+
"wordwrap@npm:^1.0.0":
version: 1.0.0
resolution: "wordwrap@npm:1.0.0"
@@ -20329,6 +20611,23 @@ __metadata:
languageName: node
linkType: hard
+"xlsx@npm:^0.18.5":
+ version: 0.18.5
+ resolution: "xlsx@npm:0.18.5"
+ dependencies:
+ adler-32: "npm:~1.3.0"
+ cfb: "npm:~1.2.1"
+ codepage: "npm:~1.15.0"
+ crc-32: "npm:~1.2.1"
+ ssf: "npm:~0.11.2"
+ wmf: "npm:~1.0.1"
+ word: "npm:~0.3.0"
+ bin:
+ xlsx: bin/xlsx.njs
+ checksum: 10c0/787cfa77034a3e86fdcde21572f1011c8976f87823a5e0ee5057f13b2f6e48f17a1710732a91b8ae15d7794945c7cba8a3ca904ea7150e028260b0ab8e1158c8
+ languageName: node
+ linkType: hard
+
"xml-name-validator@npm:^4.0.0":
version: 4.0.0
resolution: "xml-name-validator@npm:4.0.0"