From eb50f964816fc04e6b6ad9aa06207e8eea20d178 Mon Sep 17 00:00:00 2001 From: Artem Belik Date: Tue, 21 Jul 2026 15:46:51 +0300 Subject: [PATCH] chore: added export example (#DS-4945) --- dev/ag-grid-angular/src/main.ts | 4 + dev/ag-grid-angular/src/tests/export.ng.ts | 118 ++++++++ package.json | 3 + yarn.lock | 299 +++++++++++++++++++++ 4 files changed, 424 insertions(+) create mode 100644 dev/ag-grid-angular/src/tests/export.ng.ts 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"