diff --git a/packages/common/components/package.json b/packages/common/components/package.json index 7bf7f7ba6..474296ffd 100644 --- a/packages/common/components/package.json +++ b/packages/common/components/package.json @@ -38,12 +38,11 @@ "@radix-ui/react-slot": "^1.1.2", "@radix-ui/react-switch": "^1.1.3", "@radix-ui/react-tabs": "^1.1.3", - "@toast-ui/react-grid": "^4.21.22", + "@tanstack/react-table": "^8.21.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^3.6.0", "lucide-react": "^0.474.0", - "react": "17.0.2", "react-day-picker": "^8.10.1", "tailwind-merge": "^3.0.1", "tailwindcss-animate": "^1.0.7" diff --git a/packages/common/components/src/ui/grid/gird.stories.tsx b/packages/common/components/src/ui/grid/gird.stories.tsx deleted file mode 100644 index 1e50b90cc..000000000 --- a/packages/common/components/src/ui/grid/gird.stories.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; - -import "@common/assets/styles/grid.css"; -import Grid from "@toast-ui/react-grid"; - -const meta: Meta = { - title: "External/Grid", - component: Grid, - parameters: { - docs: { - description: { - component: ` -- [Docs](https://github.com/nhn/tui.grid/blob/master/packages/toast-ui.react-grid/README.md) -- [API Reference](https://nhn.github.io/tui.grid/latest/Grid) -`, - }, - source: { - code: ` -import "@common/assets/styles/grid.css"; -import Grid from "@toast-ui/react-grid"; - -const data = [ - { id: 1, name: "Editor" }, - { id: 2, name: "Grid" }, - { id: 3, name: "Chart" }, -]; - -const columns = [ - { name: "id", header: "ID" }, - { name: "name", header: "Name" }, -]; - -return ( - -); - `, - }, - }, - }, -}; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - render: () => { - const data = [ - { id: 1, name: "Editor" }, - { id: 2, name: "Grid" }, - { id: 3, name: "Chart" }, - ]; - - const columns = [ - { name: "id", header: "ID" }, - { name: "name", header: "Name" }, - ]; - - return ( -
- -
- ); - }, -}; diff --git a/packages/common/components/src/ui/table/index.tsx b/packages/common/components/src/ui/table/index.tsx new file mode 100644 index 000000000..100b16c8f --- /dev/null +++ b/packages/common/components/src/ui/table/index.tsx @@ -0,0 +1,74 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import "./table.css"; + +import { + flexRender, + getCoreRowModel, + useReactTable, + type ColumnDef, +} from "@tanstack/react-table"; + +interface TableProps { + data: T[]; + columns: ColumnDef[]; +} + +function Table({ data, columns }: TableProps) { + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + }); + + return ( +
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + ))} + + ))} + + + {table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + ))} + + ))} + + {/* + {table.getFooterGroups().map((footerGroup) => ( + + {footerGroup.headers.map((header) => ( + + ))} + + ))} + */} +
+ {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} +
+ {flexRender(cell.column.columnDef.cell, cell.getContext())} +
+ {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.footer, + header.getContext(), + )} +
+
+ ); +} + +export { Table }; diff --git a/packages/common/components/src/ui/table/table.css b/packages/common/components/src/ui/table/table.css new file mode 100644 index 000000000..25caaaa41 --- /dev/null +++ b/packages/common/components/src/ui/table/table.css @@ -0,0 +1,6 @@ +th { + @apply bg-[#c6ccd1] px-4 py-[1.2rem] text-[1.3rem] font-normal text-[#fff]; +} +td { + @apply border-b border-b-[#e0e6ea] px-4 py-[1.2rem] text-[1.3rem] font-normal text-[#666]; +} diff --git a/packages/common/components/src/ui/table/table.stories.tsx b/packages/common/components/src/ui/table/table.stories.tsx new file mode 100644 index 000000000..ec6c0cfca --- /dev/null +++ b/packages/common/components/src/ui/table/table.stories.tsx @@ -0,0 +1,170 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Table } from "."; +import { createColumnHelper } from "@tanstack/react-table"; + +const meta: Meta = { + title: "Elements/Table", + component: Table, + parameters: { + docs: { + description: { + component: ` +- [Docs](https://ui.shadcn.com/docs/components/switch) +- [API Reference](https://www.radix-ui.com/primitives/docs/components/switch#api-reference) +`, + }, + source: { + code: ` +import { createColumnHelper } from "@tanstack/react-table"; + +type Person = { + firstName: string; + lastName: string; + age: number; + visits: number; + status: string; + progress: number; +}; + +const defaultData: Person[] = [ + { + firstName: "tanner", + lastName: "linsley", + age: 24, + visits: 100, + status: "In Relationship", + progress: 50, + }, + { + firstName: "tandy", + lastName: "miller", + age: 40, + visits: 40, + status: "Single", + progress: 80, + }, + { + firstName: "joe", + lastName: "dirte", + age: 45, + visits: 20, + status: "Complicated", + progress: 10, + }, +]; + +const columnHelper = createColumnHelper(); + +const columns = [ + columnHelper.accessor("firstName", { + cell: (info) => info.getValue(), + footer: (info) => info.column.id, + }), + columnHelper.accessor((row) => row.lastName, { + id: "lastName", + cell: (info) => {info.getValue()}, + header: () => Last Name, + footer: (info) => info.column.id, + }), + columnHelper.accessor("age", { + header: () => "Age", + cell: (info) => info.renderValue(), + footer: (info) => info.column.id, + }), + columnHelper.accessor("visits", { + header: () => Visits, + footer: (info) => info.column.id, + }), + columnHelper.accessor("status", { + header: "Status", + footer: (info) => info.column.id, + }), + columnHelper.accessor("progress", { + header: "Profile Progress", + footer: (info) => info.column.id, + }), +]; + +return ; + `, + }, + }, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => { + type Person = { + firstName: string; + lastName: string; + age: number; + visits: number; + status: string; + progress: number; + }; + + const defaultData: Person[] = [ + { + firstName: "tanner", + lastName: "linsley", + age: 24, + visits: 100, + status: "In Relationship", + progress: 50, + }, + { + firstName: "tandy", + lastName: "miller", + age: 40, + visits: 40, + status: "Single", + progress: 80, + }, + { + firstName: "joe", + lastName: "dirte", + age: 45, + visits: 20, + status: "Complicated", + progress: 10, + }, + ]; + + const columnHelper = createColumnHelper(); + + const columns = [ + columnHelper.accessor("firstName", { + cell: (info) => info.getValue(), + footer: (info) => info.column.id, + }), + columnHelper.accessor((row) => row.lastName, { + id: "lastName", + cell: (info) => {info.getValue()}, + header: () => Last Name, + footer: (info) => info.column.id, + }), + columnHelper.accessor("age", { + header: () => "Age", + cell: (info) => info.renderValue(), + footer: (info) => info.column.id, + }), + columnHelper.accessor("visits", { + header: () => Visits, + footer: (info) => info.column.id, + }), + columnHelper.accessor("status", { + header: "Status", + footer: (info) => info.column.id, + }), + columnHelper.accessor("progress", { + header: "Profile Progress", + footer: (info) => info.column.id, + }), + ]; + + return
; + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7b5718b7..8533bb2cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,15 +36,9 @@ importers: '@common/components': specifier: workspace:* version: link:../../packages/common/components - '@toast-ui/react-grid': - specifier: ^4.21.22 - version: 4.21.22(react@18.3.1) next: specifier: 15.1.7 version: 15.1.7(react-dom@18.3.1)(react@18.3.1) - tui-grid: - specifier: ^4.21.22 - version: 4.21.22 devDependencies: '@eslint/eslintrc': specifier: ^3 @@ -124,9 +118,9 @@ importers: '@radix-ui/react-tabs': specifier: ^1.1.3 version: 1.1.3(@types/react-dom@18.3.5)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1) - '@toast-ui/react-grid': - specifier: ^4.21.22 - version: 4.21.22(react@18.3.1) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.2(react-dom@18.3.1)(react@18.3.1) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -139,9 +133,6 @@ importers: lucide-react: specifier: ^0.474.0 version: 0.474.0(react@18.3.1) - react: - specifier: ^18.3.1 - version: 18.3.1 react-day-picker: specifier: ^8.10.1 version: 8.10.1(date-fns@3.6.0)(react@18.3.1) @@ -2504,7 +2495,7 @@ packages: jsdoc-type-pratt-parser: 4.1.0 prettier: 3.5.2 process: 0.11.10 - recast: 0.23.9 + recast: 0.23.10 semver: 7.7.1 util: 0.12.5 ws: 8.18.1 @@ -2677,6 +2668,23 @@ packages: tslib: 2.8.1 dev: false + /@tanstack/react-table@8.21.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg==} + engines: {node: '>=12'} + peerDependencies: + react: ^18.3.1 + react-dom: ^18.3.1 + dependencies: + '@tanstack/table-core': 8.21.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@tanstack/table-core@8.21.2: + resolution: {integrity: sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA==} + engines: {node: '>=12'} + dev: false + /@testing-library/dom@10.4.0: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} @@ -2713,15 +2721,6 @@ packages: '@testing-library/dom': 10.4.0 dev: true - /@toast-ui/react-grid@4.21.22(react@18.3.1): - resolution: {integrity: sha512-jztju1olTFs9tBeWXesNM29tOgjI2KwvcgKfgBjaAcpuZUAfD1FtHnqXSpjp33d1T+hZh3M19Wj8tTu0lRr5kQ==} - peerDependencies: - react: ^18.3.1 - dependencies: - react: 18.3.1 - tui-grid: 4.21.22 - dev: false - /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} dev: true @@ -3062,20 +3061,6 @@ packages: hasBin: true dev: true - /adler-32@1.2.0: - resolution: {integrity: sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==} - engines: {node: '>=0.8'} - hasBin: true - dependencies: - exit-on-epipe: 1.0.1 - printj: 1.1.2 - dev: false - - /adler-32@1.3.1: - resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} - engines: {node: '>=0.8'} - dev: false - /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -3332,9 +3317,9 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001701 - electron-to-chromium: 1.5.105 + electron-to-chromium: 1.5.106 node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.4) dev: true /bundle-require@5.1.0(esbuild@0.24.2): @@ -3397,14 +3382,6 @@ packages: /caniuse-lite@1.0.30001701: resolution: {integrity: sha512-faRs/AW3jA9nTwmJBSO1PQ6L/EOgsB5HMQQq4iCu5zhPgVVgO/pZRHlmatwijZKetFw8/Pr4q6dEN8sJuq8qTw==} - /cfb@1.2.2: - resolution: {integrity: sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==} - engines: {node: '>=0.8'} - dependencies: - adler-32: 1.3.1 - crc-32: 1.2.2 - dev: false - /chai@5.2.0: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} @@ -3482,11 +3459,6 @@ packages: engines: {node: '>=6'} dev: false - /codepage@1.15.0: - resolution: {integrity: sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==} - engines: {node: '>=0.8'} - dev: false - /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -3553,12 +3525,6 @@ packages: typescript: 5.6.3 dev: true - /crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - dev: false - /cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3803,10 +3769,6 @@ packages: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} dev: true - /dompurify@2.5.8: - resolution: {integrity: sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==} - dev: false - /dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -3824,8 +3786,8 @@ packages: engines: {node: '>=11.0.0'} dev: true - /electron-to-chromium@1.5.105: - resolution: {integrity: sha512-ccp7LocdXx3yBhwiG0qTQ7XFrK48Ua2pxIxBdJO8cbddp/MvbBtPFzvnTchtyHQTsgqqczO8cdmAIbpMa0u2+g==} + /electron-to-chromium@1.5.106: + resolution: {integrity: sha512-12keJGdXQWPnfVOu6/6ZzZgPPNodiDOSe3LjA8qk2yXTjnCnw2LeGUsAmtlNAmH4UW0K7tOLcz0j9lI2eJCJRA==} dev: true /emoji-regex@8.0.0: @@ -4413,11 +4375,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /exit-on-epipe@1.0.1: - resolution: {integrity: sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==} - engines: {node: '>=0.8'} - dev: false - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -4519,11 +4476,6 @@ packages: cross-spawn: 7.0.6 signal-exit: 4.1.0 - /frac@1.1.2: - resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} - engines: {node: '>=0.8'} - dev: false - /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true @@ -5778,12 +5730,6 @@ packages: engines: {node: '>=12'} dev: true - /printj@1.1.2: - resolution: {integrity: sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==} - engines: {node: '>=0.8'} - hasBin: true - dev: false - /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -5940,8 +5886,8 @@ packages: engines: {node: '>= 14.18.0'} dev: true - /recast@0.23.9: - resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} + /recast@0.23.10: + resolution: {integrity: sha512-mbCmRMJUKCJ1h41V0cu2C26ULBURwuoZ34C9rChjcDaeJ/4Kv5al3O2HPwTs2m0wQ1vGhMY+tguhzU1aE8md1A==} engines: {node: '>= 4'} dependencies: ast-types: 0.16.1 @@ -6256,13 +6202,6 @@ packages: whatwg-url: 7.1.0 dev: true - /ssf@0.11.2: - resolution: {integrity: sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==} - engines: {node: '>=0.8'} - dependencies: - frac: 1.1.2 - dev: false - /stable-hash@0.0.4: resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} dev: true @@ -6680,29 +6619,6 @@ packages: - yaml dev: true - /tui-date-picker@4.3.3: - resolution: {integrity: sha512-/2YoLnj5c1e+Ag1ZZYOgzEs2o0v7Ol7c5UAnBj438zGlkwkMxyH0HwP2pVqqIYX05WE7K0+6nTWVMybS8otBgw==} - dependencies: - tui-time-picker: 2.1.6 - dev: false - - /tui-grid@4.21.22: - resolution: {integrity: sha512-RxkFcveR2tWf3QrtuW9/zejXjeXL3SdrQPK89DbrrM6N7TlyUcb5HAf0U3MBn/hYT1p5kt5wyOwHPCQJuIBrsA==} - dependencies: - dompurify: 2.5.8 - tui-date-picker: 4.3.3 - tui-pagination: 3.4.1 - xlsx: 0.17.5 - dev: false - - /tui-pagination@3.4.1: - resolution: {integrity: sha512-W09L0wPMSFstthBhQjcLNDnN1yuCEDn/tIXmaKdTpNFYa11eNrNo/rOwXzrugXvP2arZ60KmVhkFzoAOEuV0Sg==} - dev: false - - /tui-time-picker@2.1.6: - resolution: {integrity: sha512-4Jmo3wjGS+Ii4/qQgt5DaFEohHpB3U6BzWeTODVVFHD9sx3NOsbomY9K0xMobSLODi+tQEH7wfOtNU0IJmcQ6Q==} - dev: false - /turbo-darwin-64@2.4.2: resolution: {integrity: sha512-HFfemyWB60CJtEvVQj9yby5rkkWw9fLAdLtAPGtPQoU3tKh8t/uzCAZKso2aPVbib9vGUuGbPGoGpaRXdVhj5g==} cpu: [x64] @@ -6879,8 +6795,8 @@ packages: webpack-virtual-modules: 0.6.2 dev: true - /update-browserslist-db@1.1.2(browserslist@4.24.4): - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + /update-browserslist-db@1.1.3(browserslist@4.24.4): + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -7085,21 +7001,11 @@ packages: dependencies: isexe: 2.0.0 - /wmf@1.0.2: - resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==} - engines: {node: '>=0.8'} - dev: false - /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} dev: true - /word@0.3.0: - resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==} - engines: {node: '>=0.8'} - dev: false - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -7129,20 +7035,6 @@ packages: optional: true dev: true - /xlsx@0.17.5: - resolution: {integrity: sha512-lXNU0TuYsvElzvtI6O7WIVb9Zar1XYw7Xb3VAx2wn8N/n0whBYrCnHMxtFyIiUU1Wjf09WzmLALDfBO5PqTb1g==} - engines: {node: '>=0.8'} - hasBin: true - dependencies: - adler-32: 1.2.0 - cfb: 1.2.2 - codepage: 1.15.0 - crc-32: 1.2.2 - ssf: 0.11.2 - wmf: 1.0.2 - word: 0.3.0 - dev: false - /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'}