From 2cb84e88c13b75e3a376d5425956df58bb7645e0 Mon Sep 17 00:00:00 2001 From: Kevin Van Cott Date: Thu, 18 Jan 2024 00:14:53 -0600 Subject: [PATCH] release v2.7.0 --- .../components/navigation/routes.ts | 4 + .../components/prop-tables/tableOptions.ts | 21 +- .../example-groups/EditingCRUDExamples.tsx | 3 + .../example-groups/ExpandingExamples.tsx | 11 + .../editing-crud-modal/sandbox/src/JS.js | 2 - .../editing-crud-modal/sandbox/src/TS.tsx | 2 - .../editing-crud-row/sandbox/src/JS.js | 2 - .../editing-crud-row/sandbox/src/TS.tsx | 2 - .../examples/editing-crud-tree/index.tsx | 17 + .../editing-crud-tree/sandbox/.gitignore | 5 + .../editing-crud-tree/sandbox/README.md | 6 + .../editing-crud-tree/sandbox/index.html | 13 + .../sandbox/package-lock.json | 2498 +++++++++++++++++ .../editing-crud-tree/sandbox/package.json | 31 + .../editing-crud-tree/sandbox/src/JS.js | 389 +++ .../editing-crud-tree/sandbox/src/TS.tsx | 405 +++ .../editing-crud-tree/sandbox/src/main.tsx | 9 + .../editing-crud-tree/sandbox/src/makeData.ts | 159 ++ .../sandbox/src/vite.env.d.ts | 1 + .../editing-crud-tree/sandbox/tsconfig.json | 31 + .../sandbox/tsconfig.node.json | 8 + .../editing-crud-tree/sandbox/vite.config.js | 7 + .../pages/changelog.mdx | 8 + .../pages/docs/examples/editing-crud-tree.mdx | 30 + .../pages/docs/examples/editing-crud.mdx | 2 +- .../docs/guides/customize-components.mdx | 16 +- .../pages/docs/guides/editing.mdx | 52 +- .../public/sitemap-0.xml | 197 +- packages/material-react-table/package.json | 2 +- .../src/hooks/useMRT_Effects.ts | 10 +- .../src/menus/MRT_ColumnActionMenu.tsx | 14 +- .../src/menus/MRT_FilterOptionMenu.tsx | 8 + .../src/menus/MRT_RowActionMenu.tsx | 14 +- .../src/menus/MRT_ShowHideColumnsMenu.tsx | 8 + .../material-react-table/src/style.utils.ts | 32 +- packages/material-react-table/src/types.ts | 1 + 36 files changed, 3873 insertions(+), 147 deletions(-) create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/index.tsx create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/.gitignore create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/README.md create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/index.html create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package-lock.json create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package.json create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/JS.js create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/TS.tsx create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/main.tsx create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/makeData.ts create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/vite.env.d.ts create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.json create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.node.json create mode 100644 apps/material-react-table-docs/examples/editing-crud-tree/sandbox/vite.config.js create mode 100644 apps/material-react-table-docs/pages/docs/examples/editing-crud-tree.mdx diff --git a/apps/material-react-table-docs/components/navigation/routes.ts b/apps/material-react-table-docs/components/navigation/routes.ts index b409a375a..17866540e 100644 --- a/apps/material-react-table-docs/components/navigation/routes.ts +++ b/apps/material-react-table-docs/components/navigation/routes.ts @@ -170,6 +170,10 @@ export const routes: Array = [ href: '/docs/examples/editing-crud-inline-table', label: 'Inline Table Editing Example', }, + { + href: '/docs/examples/editing-crud-tree', + label: 'Tree Editing Example', + }, ], }, { diff --git a/apps/material-react-table-docs/components/prop-tables/tableOptions.ts b/apps/material-react-table-docs/components/prop-tables/tableOptions.ts index f93c71a3c..8eef4bf29 100644 --- a/apps/material-react-table-docs/components/prop-tables/tableOptions.ts +++ b/apps/material-react-table-docs/components/prop-tables/tableOptions.ts @@ -1818,9 +1818,20 @@ export const tableOptions: TableOption[] = [ source: 'MRT', type: "'first' | 'last'", }, + { + tableOption: 'positionCreatingRow', + defaultValue: "'top'", + description: + 'Where to render the new blank inserted row when in creating mode. Passing in a number will render the row before the row at that index.', + link: '', + linkText: '', + required: false, + source: 'MRT', + type: "'top' | 'bottom' | number", + }, { tableOption: 'positionExpandColumn', - defaultValue: '', + defaultValue: "'first'", description: '', link: '', linkText: '', @@ -1830,7 +1841,7 @@ export const tableOptions: TableOption[] = [ }, { tableOption: 'positionGlobalFilter', - defaultValue: '', + defaultValue: "'right'", description: '', link: '', linkText: '', @@ -1840,7 +1851,7 @@ export const tableOptions: TableOption[] = [ }, { tableOption: 'positionPagination', - defaultValue: '', + defaultValue: "'bottom'", description: '', link: '', linkText: '', @@ -1850,7 +1861,7 @@ export const tableOptions: TableOption[] = [ }, { tableOption: 'positionToolbarAlertBanner', - defaultValue: '', + defaultValue: "'top'", description: '', link: '', linkText: '', @@ -1860,7 +1871,7 @@ export const tableOptions: TableOption[] = [ }, { tableOption: 'positionToolbarDropZone', - defaultValue: '', + defaultValue: "'top'", description: '', link: '', linkText: '', diff --git a/apps/material-react-table-docs/example-groups/EditingCRUDExamples.tsx b/apps/material-react-table-docs/example-groups/EditingCRUDExamples.tsx index 00b0296d8..7017601f1 100644 --- a/apps/material-react-table-docs/example-groups/EditingCRUDExamples.tsx +++ b/apps/material-react-table-docs/example-groups/EditingCRUDExamples.tsx @@ -7,6 +7,7 @@ import ModalExample from '../examples/editing-crud-modal'; import InlineRowExample from '../examples/editing-crud-row'; import InlineCellExample from '../examples/editing-crud-cell'; import InlineTableExample from '../examples/editing-crud-table'; +import TreeEditingExample from '../examples/editing-crud-tree'; const EditingCRUDExamples = ({ isPage = false }) => { const { pathname, push } = useRouter(); @@ -33,6 +34,7 @@ const EditingCRUDExamples = ({ isPage = false }) => { + { {activeTab === 'editing-crud-inline-row' && } {activeTab === 'editing-crud-inline-cell' && } {activeTab === 'editing-crud-inline-table' && } + {activeTab === 'editing-crud-tree' && } ); diff --git a/apps/material-react-table-docs/example-groups/ExpandingExamples.tsx b/apps/material-react-table-docs/example-groups/ExpandingExamples.tsx index 7dfb9c5b6..7fe8efbb2 100644 --- a/apps/material-react-table-docs/example-groups/ExpandingExamples.tsx +++ b/apps/material-react-table-docs/example-groups/ExpandingExamples.tsx @@ -61,6 +61,17 @@ const ExpandingExamples = ({ isPage = false }) => { value="more" /> + + + Editing Sub-Rows + + + } + value="more" + /> + { accessorKey: 'firstName', header: 'First Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.firstName, helperText: validationErrors?.firstName, @@ -57,7 +56,6 @@ const Example = () => { accessorKey: 'lastName', header: 'Last Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.lastName, helperText: validationErrors?.lastName, diff --git a/apps/material-react-table-docs/examples/editing-crud-modal/sandbox/src/TS.tsx b/apps/material-react-table-docs/examples/editing-crud-modal/sandbox/src/TS.tsx index 6d9d40a22..2855cf81f 100644 --- a/apps/material-react-table-docs/examples/editing-crud-modal/sandbox/src/TS.tsx +++ b/apps/material-react-table-docs/examples/editing-crud-modal/sandbox/src/TS.tsx @@ -45,7 +45,6 @@ const Example = () => { accessorKey: 'firstName', header: 'First Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.firstName, helperText: validationErrors?.firstName, @@ -62,7 +61,6 @@ const Example = () => { accessorKey: 'lastName', header: 'Last Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.lastName, helperText: validationErrors?.lastName, diff --git a/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/JS.js b/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/JS.js index 12ad79dd3..ec93da278 100644 --- a/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/JS.js +++ b/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/JS.js @@ -31,7 +31,6 @@ const Example = () => { accessorKey: 'firstName', header: 'First Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.firstName, helperText: validationErrors?.firstName, @@ -48,7 +47,6 @@ const Example = () => { accessorKey: 'lastName', header: 'Last Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.lastName, helperText: validationErrors?.lastName, diff --git a/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/TS.tsx b/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/TS.tsx index 53cebb2d3..5b8fb31bd 100644 --- a/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/TS.tsx +++ b/apps/material-react-table-docs/examples/editing-crud-row/sandbox/src/TS.tsx @@ -36,7 +36,6 @@ const Example = () => { accessorKey: 'firstName', header: 'First Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.firstName, helperText: validationErrors?.firstName, @@ -53,7 +52,6 @@ const Example = () => { accessorKey: 'lastName', header: 'Last Name', muiEditTextFieldProps: { - type: 'email', required: true, error: !!validationErrors?.lastName, helperText: validationErrors?.lastName, diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/index.tsx b/apps/material-react-table-docs/examples/editing-crud-tree/index.tsx new file mode 100644 index 000000000..1c11a0377 --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/index.tsx @@ -0,0 +1,17 @@ +import { SourceCodeSnippet } from '../../components/mdx/SourceCodeSnippet'; +import Example from './sandbox/src/TS'; +const JS = require('!!raw-loader!./sandbox/src/JS.js').default; +const TS = require('!!raw-loader!./sandbox/src/TS.tsx').default; + +const ExampleTable = () => { + return ( + + ); +}; + +export default ExampleTable; diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/.gitignore b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/.gitignore new file mode 100644 index 000000000..d451ff16c --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/.gitignore @@ -0,0 +1,5 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/README.md b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/README.md new file mode 100644 index 000000000..b168d3c4b --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/README.md @@ -0,0 +1,6 @@ +# Example + +To run this example: + +- `npm install` or `yarn` +- `npm run start` or `yarn start` diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/index.html b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/index.html new file mode 100644 index 000000000..67a5a5845 --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/index.html @@ -0,0 +1,13 @@ + + + + + + Material React Table Example + + + +
+ + + diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package-lock.json b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package-lock.json new file mode 100644 index 000000000..105d68bdf --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package-lock.json @@ -0,0 +1,2498 @@ +{ + "name": "material-react-table-example-editing-crud-row", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "material-react-table-example-editing-crud-row", + "version": "0.0.0", + "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.15.4", + "@mui/material": "^5.15.4", + "@mui/x-date-pickers": "^6.19.0", + "@tanstack/react-query": "^5.17.9", + "dayjs": "^1.11.10", + "material-react-table": "^2.6.1", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.47", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "typescript": "^5.3.3", + "vite": "^5.0.11" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/generator": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz", + "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.3.tgz", + "integrity": "sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", + "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", + "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", + "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", + "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", + "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", + "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", + "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", + "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", + "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", + "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", + "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", + "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", + "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", + "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", + "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", + "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", + "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", + "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", + "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", + "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", + "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", + "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", + "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", + "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "dependencies": { + "@floating-ui/core": "^1.5.3", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.5.tgz", + "integrity": "sha512-UsBK30Bg+s6+nsgblXtZmwHhgS2vmbuQK22qgt2pTQM6M3X6H1+cQcLXqgRY3ihVLcZJE6IvqDQozhsnIVqK/Q==", + "dependencies": { + "@floating-ui/dom": "^1.5.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.31", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.31.tgz", + "integrity": "sha512-+uNbP3OHJuZVI00WyMg7xfLZotaEY7LgvYXDfONVJbrS+K9wyjCIPNfjy8r9XJn4fbHo/5ibiZqjWnU9LMNv+A==", + "dependencies": { + "@babel/runtime": "^7.23.7", + "@floating-ui/react-dom": "^2.0.5", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.4", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.4.tgz", + "integrity": "sha512-0OZN9O6hAtBpx70mMNFOPaAIol/ytwZYPY+z7Rf9dK3+1Xlzwvj5/IeShJKvtp76S1qJyhPuvZg0+BGqQaUnUw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.4.tgz", + "integrity": "sha512-q/Yk7aokN8qGMpR7bwoDpBSeaNe6Bv7vaY9yHYodP37c64TM6ime05ueb/wgksOVszrKkNXC67E/XYbRWOoUFA==", + "dependencies": { + "@babel/runtime": "^7.23.7" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.4.tgz", + "integrity": "sha512-T/LGRAC+M0c+D3+y67eHwIN5bSje0TxbcJCWR0esNvU11T0QwrX3jedXItPNBwMupF2F5VWCDHBVLlFnN3+ABA==", + "dependencies": { + "@babel/runtime": "^7.23.7", + "@mui/base": "5.0.0-beta.31", + "@mui/core-downloads-tracker": "^5.15.4", + "@mui/system": "^5.15.4", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.4", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.4.tgz", + "integrity": "sha512-9N5myIMEEQTM5WYWPGvvYADzjFo12LgJ7S+2iTZkBNOcJpUxQYM1tvYjkHCDV+t1ocMOEgjR2EfJ9Dus30dBlg==", + "dependencies": { + "@babel/runtime": "^7.23.7", + "@mui/utils": "^5.15.4", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.4.tgz", + "integrity": "sha512-vtrZUXG5XI8CNiNLcxjIirW4dEbOloR+ikfm6ePBo7jXpJdpXjVzBWetrfE+5eI0cHkKWlTptnJ2voKV8pBRfw==", + "dependencies": { + "@babel/runtime": "^7.23.7", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.4.tgz", + "integrity": "sha512-KCwkHajGBXPs2TK1HJjIyab4NDk0cZoBDYN/TTlXVo1qBAmCjY0vjqrlsjeoG+wrwwcezXMLs/e6OGP66fPCog==", + "dependencies": { + "@babel/runtime": "^7.23.7", + "@mui/private-theming": "^5.15.4", + "@mui/styled-engine": "^5.15.4", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.4", + "clsx": "^2.1.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", + "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.4.tgz", + "integrity": "sha512-E2wLQGBcs3VR52CpMRjk46cGscC4cbf3Q2uyHNaAeL36yTTm+aVNbtsTCazXtjOP4BDd8lu6VtlTpVC8Rtl4mg==", + "dependencies": { + "@babel/runtime": "^7.23.7", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/x-date-pickers": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.0.tgz", + "integrity": "sha512-/GccT+iFJTKjI6b9b0MWojyRKnizL/VYYAfPnR1q0wSVVXjYv7a1NK0uQlan4JbnovqoQCNVeTOCy/0bUJyD2Q==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/base": "^5.0.0-beta.22", + "@mui/utils": "^5.14.16", + "@types/react-transition-group": "^4.4.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.8.6", + "@mui/system": "^5.8.0", + "date-fns": "^2.25.0 || ^3.2.0", + "date-fns-jalali": "^2.13.0-0", + "dayjs": "^1.10.7", + "luxon": "^3.0.2", + "moment": "^2.29.4", + "moment-hijri": "^2.1.2", + "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "date-fns-jalali": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-hijri": { + "optional": true + }, + "moment-jalaali": { + "optional": true + } + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz", + "integrity": "sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz", + "integrity": "sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz", + "integrity": "sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz", + "integrity": "sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz", + "integrity": "sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz", + "integrity": "sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz", + "integrity": "sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz", + "integrity": "sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz", + "integrity": "sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz", + "integrity": "sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz", + "integrity": "sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz", + "integrity": "sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.11.3.tgz", + "integrity": "sha512-2XVYTN6fLFyeIPywDL/HGKIQce3V6oUch1FHweGwxruPKEXip6Z9qg+zWZwNE26WG6CktqJh6NqTq90a42jeEw==", + "dependencies": { + "remove-accents": "0.4.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kentcdodds" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.17.9", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.17.9.tgz", + "integrity": "sha512-8xcvpWIPaRMDNLMvG9ugcUJMgFK316ZsqkPPbsI+TMZsb10N9jk0B6XgPk4/kgWC2ziHyWR7n7wUhxmD0pChQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.17.9", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.17.9.tgz", + "integrity": "sha512-M5E9gwUq1Stby/pdlYjBlL24euIVuGbWKIFCbtnQxSdXI4PgzjTSdXdV3QE6fc+itF+TUvX/JPTKIwq8yuBXcg==", + "dependencies": { + "@tanstack/query-core": "5.17.9" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.11.6.tgz", + "integrity": "sha512-i0heTVZtuHF9VPMwcYoZ21hbzGDmLjxHYemDMvbGpjk5fUZ8nLF3S8qjVRU79XfPW8KK9o7iTU2fGFVQQmxMSQ==", + "dependencies": { + "@tanstack/table-core": "8.11.6" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.0.1.tgz", + "integrity": "sha512-IFOFuRUTaiM/yibty9qQ9BfycQnYXIDHGP2+cU+0LrFFGNhVxCXSQnaY6wkX8uJVteFEBjUondX0Hmpp7TNcag==", + "dependencies": { + "@tanstack/virtual-core": "3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.11.6.tgz", + "integrity": "sha512-69WEY1PaZROaGYUrseng4/4sMYnRGhDe1vM6888CnWekGz/wuCnvqwOoOuKGYivnaiI4BVmZq4WKWhvahyj3/g==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz", + "integrity": "sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "node_modules/@types/react": { + "version": "18.2.47", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", + "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.602", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.602.tgz", + "integrity": "sha512-TZdkh+47iRPDtFH9+vuOU7uaZftA7PBDQkk+Tny/gLrYgflyooAk/bHvmK7MSTvQoPKLvy702PC4RiS/6Ffdxw==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", + "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.19.8", + "@esbuild/android-arm64": "0.19.8", + "@esbuild/android-x64": "0.19.8", + "@esbuild/darwin-arm64": "0.19.8", + "@esbuild/darwin-x64": "0.19.8", + "@esbuild/freebsd-arm64": "0.19.8", + "@esbuild/freebsd-x64": "0.19.8", + "@esbuild/linux-arm": "0.19.8", + "@esbuild/linux-arm64": "0.19.8", + "@esbuild/linux-ia32": "0.19.8", + "@esbuild/linux-loong64": "0.19.8", + "@esbuild/linux-mips64el": "0.19.8", + "@esbuild/linux-ppc64": "0.19.8", + "@esbuild/linux-riscv64": "0.19.8", + "@esbuild/linux-s390x": "0.19.8", + "@esbuild/linux-x64": "0.19.8", + "@esbuild/netbsd-x64": "0.19.8", + "@esbuild/openbsd-x64": "0.19.8", + "@esbuild/sunos-x64": "0.19.8", + "@esbuild/win32-arm64": "0.19.8", + "@esbuild/win32-ia32": "0.19.8", + "@esbuild/win32-x64": "0.19.8" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/highlight-words": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/highlight-words/-/highlight-words-1.2.2.tgz", + "integrity": "sha512-Mf4xfPXYm8Ay1wTibCrHpNWeR2nUMynMVFkXCi4mbl+TEgmNOe+I4hV7W3OCZcSvzGL6kupaqpfHOemliMTGxQ==", + "engines": { + "node": ">= 16", + "npm": ">= 8" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/material-react-table": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/material-react-table/-/material-react-table-2.6.1.tgz", + "integrity": "sha512-b3X/dH5PTYMkLi23GF/oMyOC0oZbTBBW26KZRqvYJWqCLguYi1xE6Dv6VUrSMKf4yBvg00dXoUrH9zT9PLEZ9g==", + "dependencies": { + "@tanstack/match-sorter-utils": "8.11.3", + "@tanstack/react-table": "8.11.6", + "@tanstack/react-virtual": "3.0.1", + "highlight-words": "1.2.2" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kevinvandy" + }, + "peerDependencies": { + "@emotion/react": ">=11.11", + "@emotion/styled": ">=11.11", + "@mui/icons-material": ">=5.11", + "@mui/material": ">=5.13", + "@mui/x-date-pickers": ">=6.15.0", + "react": ">=18.0", + "react-dom": ">=18.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.1.tgz", + "integrity": "sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.6.1", + "@rollup/rollup-android-arm64": "4.6.1", + "@rollup/rollup-darwin-arm64": "4.6.1", + "@rollup/rollup-darwin-x64": "4.6.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.6.1", + "@rollup/rollup-linux-arm64-gnu": "4.6.1", + "@rollup/rollup-linux-arm64-musl": "4.6.1", + "@rollup/rollup-linux-x64-gnu": "4.6.1", + "@rollup/rollup-linux-x64-musl": "4.6.1", + "@rollup/rollup-win32-arm64-msvc": "4.6.1", + "@rollup/rollup-win32-ia32-msvc": "4.6.1", + "@rollup/rollup-win32-x64-msvc": "4.6.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + } + } +} diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package.json b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package.json new file mode 100644 index 000000000..61a01c7d3 --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/package.json @@ -0,0 +1,31 @@ +{ + "name": "material-react-table-example-editing-crud-tree", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --port 3001", + "build": "vite build", + "serve": "vite preview", + "start": "vite" + }, + "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.15.4", + "@mui/material": "^5.15.4", + "@mui/x-date-pickers": "^6.19.0", + "@tanstack/react-query": "^5.17.9", + "dayjs": "^1.11.10", + "material-react-table": "^2.6.1", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.47", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "typescript": "^5.3.3", + "vite": "^5.0.11" + } +} diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/JS.js b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/JS.js new file mode 100644 index 000000000..563d1f61a --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/JS.js @@ -0,0 +1,389 @@ +import { useMemo, useState } from 'react'; +import { + MaterialReactTable, + createRow, + useMaterialReactTable, +} from 'material-react-table'; +import { + Box, + Button, + IconButton, + Tooltip, + darken, + lighten, +} from '@mui/material'; +import { + QueryClient, + QueryClientProvider, + useMutation, + useQuery, + useQueryClient, +} from '@tanstack/react-query'; +import { fakeData, usStates } from './makeData'; +import PersonAddAltIcon from '@mui/icons-material/PersonAddAlt'; +import EditIcon from '@mui/icons-material/Edit'; +import DeleteIcon from '@mui/icons-material/Delete'; + +const Example = () => { + const [creatingRowIndex, setCreatingRowIndex] = useState(); + const [validationErrors, setValidationErrors] = useState({}); + + const columns = useMemo( + () => [ + { + accessorKey: 'id', + header: 'Id', + enableEditing: false, + size: 80, + }, + { + accessorKey: 'firstName', + header: 'First Name', + muiEditTextFieldProps: { + required: true, + error: !!validationErrors?.firstName, + helperText: validationErrors?.firstName, + //remove any previous validation errors when user focuses on the input + onFocus: () => + setValidationErrors({ + ...validationErrors, + firstName: undefined, + }), + //optionally add validation checking for onBlur or onChange + }, + }, + { + accessorKey: 'lastName', + header: 'Last Name', + muiEditTextFieldProps: { + required: true, + error: !!validationErrors?.lastName, + helperText: validationErrors?.lastName, + //remove any previous validation errors when user focuses on the input + onFocus: () => + setValidationErrors({ + ...validationErrors, + lastName: undefined, + }), + }, + }, + { + accessorKey: 'city', + header: 'City', + muiEditTextFieldProps: { + required: true, + error: !!validationErrors?.city, + helperText: validationErrors?.city, + //remove any previous validation errors when user focuses on the input + onFocus: () => + setValidationErrors({ + ...validationErrors, + city: undefined, + }), + }, + }, + { + accessorKey: 'state', + header: 'State', + editVariant: 'select', + editSelectOptions: usStates, + muiEditTextFieldProps: { + select: true, + error: !!validationErrors?.state, + helperText: validationErrors?.state, + }, + }, + ], + [validationErrors], + ); + + //call CREATE hook + const { mutateAsync: createUser, isPending: isCreatingUser } = + useCreateUser(); + //call READ hook + const { + data: fetchedUsers = [], + isError: isLoadingUsersError, + isFetching: isFetchingUsers, + isLoading: isLoadingUsers, + } = useGetUsers(); + //call UPDATE hook + const { mutateAsync: updateUser, isPending: isUpdatingUser } = + useUpdateUser(); + //call DELETE hook + const { mutateAsync: deleteUser, isPending: isDeletingUser } = + useDeleteUser(); + + //CREATE action + const handleCreateUser = async ({ values, row, table }) => { + const newValidationErrors = validateUser(values); + if (Object.values(newValidationErrors).some((error) => error)) { + setValidationErrors(newValidationErrors); + return; + } + setValidationErrors({}); + await createUser({ ...values, managerId: row.original.managerId }); + table.setCreatingRow(null); //exit creating mode + }; + + //UPDATE action + const handleSaveUser = async ({ values, table }) => { + const newValidationErrors = validateUser(values); + if (Object.values(newValidationErrors).some((error) => error)) { + setValidationErrors(newValidationErrors); + return; + } + setValidationErrors({}); + await updateUser(values); + table.setEditingRow(null); //exit editing mode + }; + + //DELETE action + const openDeleteConfirmModal = (row) => { + if (window.confirm('Are you sure you want to delete this user?')) { + deleteUser(row.original.id); + } + }; + + const table = useMaterialReactTable({ + columns, + data: fetchedUsers, + createDisplayMode: 'row', // ('modal', and 'custom' are also available) + editDisplayMode: 'row', // ('modal', 'cell', 'table', and 'custom' are also available) + enableColumnPinning: true, + enableEditing: true, + enableExpanding: true, + positionCreatingRow: creatingRowIndex, //index where new row is inserted before + getRowId: (row) => row.id, + muiToolbarAlertBannerProps: isLoadingUsersError + ? { + color: 'error', + children: 'Error loading data', + } + : undefined, + muiTableContainerProps: { + sx: { + minHeight: '500px', + }, + }, + muiTableBodyRowProps: ({ row }) => ({ + //conditional styling based on row depth + sx: (theme) => ({ + backgroundColor: darken( + lighten(theme.palette.background.paper, 0.1), + row.depth * (theme.palette.mode === 'dark' ? 0.2 : 0.1), + ), + }), + }), + onCreatingRowCancel: () => setValidationErrors({}), + onCreatingRowSave: handleCreateUser, + onEditingRowCancel: () => setValidationErrors({}), + onEditingRowSave: handleSaveUser, + renderRowActions: ({ row, staticRowIndex, table }) => ( + + + table.setEditingRow(row)}> + + + + + openDeleteConfirmModal(row)}> + + + + + { + setCreatingRowIndex((staticRowIndex || 0) + 1); + table.setCreatingRow( + createRow( + table, + { + id: null, + firstName: '', + lastName: '', + city: '', + state: '', + managerId: row.id, + subRows: [], + }, + -1, + row.depth + 1, + ), + ); + }} + > + + + + + ), + renderTopToolbarCustomActions: ({ table }) => ( + + ), + initialState: { + columnPinning: { left: ['mrt-row-actions'], right: [] }, + expanded: true, + pagination: { pageSize: 20, pageIndex: 0 }, + }, + state: { + isLoading: isLoadingUsers, + isSaving: isCreatingUser || isUpdatingUser || isDeletingUser, + showAlertBanner: isLoadingUsersError, + showProgressBars: isFetchingUsers, + }, + }); + + return ; +}; + +//CREATE hook (post new user to api) +function useCreateUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async (user) => { + console.info('create user', user); + //send api update request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(); + }, + //client side optimistic update + onMutate: (newUserInfo) => { + queryClient.setQueryData(['users'], (_prevUsers) => { + const prevUsers = JSON.parse(JSON.stringify(_prevUsers)); + newUserInfo.subRows = []; + if (newUserInfo.managerId) { + const manager = findUserInTree(newUserInfo.managerId, prevUsers); + if (manager) { + manager.subRows = [ + ...(manager.subRows || []), + { + ...newUserInfo, + id: `${manager.id}.${(manager.subRows?.length || 0) + 1}`, + }, + ]; + } + } else { + prevUsers.push({ + ...newUserInfo, + id: `${prevUsers.length + 1}`, + }); + } + return [...prevUsers]; + }); + }, + // onSettled: () => queryClient.invalidateQueries({ queryKey: ['users'] }), //refetch users after mutation, disabled for demo + }); +} + +//READ hook (get users from api) +function useGetUsers() { + return useQuery({ + queryKey: ['users'], + queryFn: async () => { + //send api request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(fakeData); + }, + refetchOnWindowFocus: false, + }); +} + +//UPDATE hook (put user in api) +function useUpdateUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async (user) => { + console.info('update user', user); + //send api update request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(); + }, + //client side optimistic update + onMutate: (newUserInfo) => { + queryClient.setQueryData(['users'], (prevUsers) => { + let user = findUserInTree(newUserInfo.id, prevUsers); + user = { ...user, ...newUserInfo }; + return [...prevUsers]; + }); + }, + // onSettled: () => queryClient.invalidateQueries({ queryKey: ['users'] }), //refetch users after mutation, disabled for demo + }); +} + +//DELETE hook (delete user in api) +function useDeleteUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async (userId) => { + console.info('delete user', userId); + //send api update request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(); + }, + //client side optimistic update + onMutate: (userId) => { + queryClient.setQueryData(['users'], (prevUsers) => { + const newUsers = JSON.parse(JSON.stringify(prevUsers)); + //remove user + const user = findUserInTree(userId, newUsers); + if (user) { + const manager = findUserInTree(user.managerId, newUsers); + if (manager) { + manager.subRows = manager.subRows?.filter( + (subUser) => subUser.id !== user.id, + ); + } else { + return newUsers.filter((user) => user.id !== userId); + } + } + return [...newUsers]; + }); + }, + // onSettled: () => queryClient.invalidateQueries({ queryKey: ['users'] }), //refetch users after mutation, disabled for demo + }); +} + +const queryClient = new QueryClient(); + +const ExampleWithProviders = () => ( + //Put this with your other react-query providers near root of your app + + + +); + +export default ExampleWithProviders; + +const validateRequired = (value) => !!value.length; + +function validateUser(user) { + return { + firstName: !validateRequired(user.firstName) + ? 'First Name is Required' + : '', + lastName: !validateRequired(user.lastName) ? 'Last Name is Required' : '', + }; +} + +function findUserInTree(managerId, users) { + for (let i = 0; i < users.length; i++) { + if (users[i].id === managerId) { + return users[i]; + } + if (users[i].subRows) { + const found = findUserInTree(managerId, users[i].subRows); + if (found) return found; + } + } + return null; +} diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/TS.tsx b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/TS.tsx new file mode 100644 index 000000000..3e75043ec --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/TS.tsx @@ -0,0 +1,405 @@ +import { useMemo, useState } from 'react'; +import { + MaterialReactTable, + createRow, + type MRT_ColumnDef, + type MRT_Row, + type MRT_TableOptions, + useMaterialReactTable, +} from 'material-react-table'; +import { + Box, + Button, + IconButton, + Tooltip, + darken, + lighten, +} from '@mui/material'; +import { + QueryClient, + QueryClientProvider, + useMutation, + useQuery, + useQueryClient, +} from '@tanstack/react-query'; +import { type User, fakeData, usStates } from './makeData'; +import PersonAddAltIcon from '@mui/icons-material/PersonAddAlt'; +import EditIcon from '@mui/icons-material/Edit'; +import DeleteIcon from '@mui/icons-material/Delete'; + +const Example = () => { + const [creatingRowIndex, setCreatingRowIndex] = useState< + number | undefined + >(); + const [validationErrors, setValidationErrors] = useState< + Record + >({}); + + const columns = useMemo[]>( + () => [ + { + accessorKey: 'id', + header: 'Id', + enableEditing: false, + size: 80, + }, + { + accessorKey: 'firstName', + header: 'First Name', + muiEditTextFieldProps: { + required: true, + error: !!validationErrors?.firstName, + helperText: validationErrors?.firstName, + //remove any previous validation errors when user focuses on the input + onFocus: () => + setValidationErrors({ + ...validationErrors, + firstName: undefined, + }), + //optionally add validation checking for onBlur or onChange + }, + }, + { + accessorKey: 'lastName', + header: 'Last Name', + muiEditTextFieldProps: { + required: true, + error: !!validationErrors?.lastName, + helperText: validationErrors?.lastName, + //remove any previous validation errors when user focuses on the input + onFocus: () => + setValidationErrors({ + ...validationErrors, + lastName: undefined, + }), + }, + }, + { + accessorKey: 'city', + header: 'City', + muiEditTextFieldProps: { + required: true, + error: !!validationErrors?.city, + helperText: validationErrors?.city, + //remove any previous validation errors when user focuses on the input + onFocus: () => + setValidationErrors({ + ...validationErrors, + city: undefined, + }), + }, + }, + { + accessorKey: 'state', + header: 'State', + editVariant: 'select', + editSelectOptions: usStates, + muiEditTextFieldProps: { + select: true, + error: !!validationErrors?.state, + helperText: validationErrors?.state, + }, + }, + ], + [validationErrors], + ); + + //call CREATE hook + const { mutateAsync: createUser, isPending: isCreatingUser } = + useCreateUser(); + //call READ hook + const { + data: fetchedUsers = [], + isError: isLoadingUsersError, + isFetching: isFetchingUsers, + isLoading: isLoadingUsers, + } = useGetUsers(); + //call UPDATE hook + const { mutateAsync: updateUser, isPending: isUpdatingUser } = + useUpdateUser(); + //call DELETE hook + const { mutateAsync: deleteUser, isPending: isDeletingUser } = + useDeleteUser(); + + //CREATE action + const handleCreateUser: MRT_TableOptions['onCreatingRowSave'] = async ({ + values, + row, + table, + }) => { + const newValidationErrors = validateUser(values); + if (Object.values(newValidationErrors).some((error) => error)) { + setValidationErrors(newValidationErrors); + return; + } + setValidationErrors({}); + await createUser({ ...values, managerId: row.original.managerId }); + table.setCreatingRow(null); //exit creating mode + }; + + //UPDATE action + const handleSaveUser: MRT_TableOptions['onEditingRowSave'] = async ({ + values, + table, + }) => { + const newValidationErrors = validateUser(values); + if (Object.values(newValidationErrors).some((error) => error)) { + setValidationErrors(newValidationErrors); + return; + } + setValidationErrors({}); + await updateUser(values); + table.setEditingRow(null); //exit editing mode + }; + + //DELETE action + const openDeleteConfirmModal = (row: MRT_Row) => { + if (window.confirm('Are you sure you want to delete this user?')) { + deleteUser(row.original.id); + } + }; + + const table = useMaterialReactTable({ + columns, + data: fetchedUsers, + createDisplayMode: 'row', // ('modal', and 'custom' are also available) + editDisplayMode: 'row', // ('modal', 'cell', 'table', and 'custom' are also available) + enableColumnPinning: true, + enableEditing: true, + enableExpanding: true, + positionCreatingRow: creatingRowIndex, //index where new row is inserted before + getRowId: (row) => row.id, + muiToolbarAlertBannerProps: isLoadingUsersError + ? { + color: 'error', + children: 'Error loading data', + } + : undefined, + muiTableContainerProps: { + sx: { + minHeight: '500px', + }, + }, + muiTableBodyRowProps: ({ row }) => ({ + //conditional styling based on row depth + sx: (theme) => ({ + td: { + backgroundColor: darken( + lighten(theme.palette.background.paper, 0.1), + row.depth * (theme.palette.mode === 'dark' ? 0.2 : 0.1), + ), + }, + }), + }), + onCreatingRowCancel: () => setValidationErrors({}), + onCreatingRowSave: handleCreateUser, + onEditingRowCancel: () => setValidationErrors({}), + onEditingRowSave: handleSaveUser, + renderRowActions: ({ row, staticRowIndex, table }) => ( + + + table.setEditingRow(row)}> + + + + + openDeleteConfirmModal(row)}> + + + + + { + setCreatingRowIndex((staticRowIndex || 0) + 1); + table.setCreatingRow( + createRow( + table, + { + id: null!, + firstName: '', + lastName: '', + city: '', + state: '', + managerId: row.id, + subRows: [], + }, + -1, + row.depth + 1, + ), + ); + }} + > + + + + + ), + renderTopToolbarCustomActions: ({ table }) => ( + + ), + initialState: { + columnPinning: { left: ['mrt-row-actions'], right: [] }, + expanded: true, + pagination: { pageSize: 20, pageIndex: 0 }, + }, + state: { + isLoading: isLoadingUsers, + isSaving: isCreatingUser || isUpdatingUser || isDeletingUser, + showAlertBanner: isLoadingUsersError, + showProgressBars: isFetchingUsers, + }, + }); + + return ; +}; + +//CREATE hook (post new user to api) +function useCreateUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async (user: User) => { + console.info('create user', user); + //send api update request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(); + }, + //client side optimistic update + onMutate: (newUserInfo: User) => { + queryClient.setQueryData(['users'], (_prevUsers: User[]) => { + const prevUsers: User[] = JSON.parse(JSON.stringify(_prevUsers)); + newUserInfo.subRows = []; + if (newUserInfo.managerId) { + const manager = findUserInTree(newUserInfo.managerId, prevUsers); + if (manager) { + manager.subRows = [ + ...(manager.subRows || []), + { + ...newUserInfo, + id: `${manager.id}.${(manager.subRows?.length || 0) + 1}`, + }, + ]; + } + } else { + prevUsers.push({ + ...newUserInfo, + id: `${prevUsers.length + 1}`, + }); + } + return [...prevUsers]; + }); + }, + // onSettled: () => queryClient.invalidateQueries({ queryKey: ['users'] }), //refetch users after mutation, disabled for demo + }); +} + +//READ hook (get users from api) +function useGetUsers() { + return useQuery({ + queryKey: ['users'], + queryFn: async () => { + //send api request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(fakeData); + }, + refetchOnWindowFocus: false, + }); +} + +//UPDATE hook (put user in api) +function useUpdateUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async (user: User) => { + console.info('update user', user); + //send api update request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(); + }, + //client side optimistic update + onMutate: (newUserInfo: User) => { + queryClient.setQueryData(['users'], (prevUsers: any) => { + let user = findUserInTree(newUserInfo.id, prevUsers); + user = { ...user, ...newUserInfo }; + return [...prevUsers]; + }); + }, + // onSettled: () => queryClient.invalidateQueries({ queryKey: ['users'] }), //refetch users after mutation, disabled for demo + }); +} + +//DELETE hook (delete user in api) +function useDeleteUser() { + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async (userId: string) => { + console.info('delete user', userId); + //send api update request here + await new Promise((resolve) => setTimeout(resolve, 1000)); //fake api call + return Promise.resolve(); + }, + //client side optimistic update + onMutate: (userId: string) => { + queryClient.setQueryData(['users'], (prevUsers: any) => { + const newUsers: User[] = JSON.parse(JSON.stringify(prevUsers)); + //remove user + const user = findUserInTree(userId, newUsers); + if (user) { + const manager = findUserInTree(user.managerId, newUsers); + if (manager) { + manager.subRows = manager.subRows?.filter( + (subUser) => subUser.id !== user.id, + ); + } else { + return newUsers.filter((user) => user.id !== userId); + } + } + return [...newUsers]; + }); + }, + // onSettled: () => queryClient.invalidateQueries({ queryKey: ['users'] }), //refetch users after mutation, disabled for demo + }); +} + +const queryClient = new QueryClient(); + +const ExampleWithProviders = () => ( + //Put this with your other react-query providers near root of your app + + + +); + +export default ExampleWithProviders; + +const validateRequired = (value: string) => !!value.length; + +function validateUser(user: User) { + return { + firstName: !validateRequired(user.firstName) + ? 'First Name is Required' + : '', + lastName: !validateRequired(user.lastName) ? 'Last Name is Required' : '', + }; +} + +function findUserInTree(managerId: string | null, users: User[]): User | null { + for (let i = 0; i < users.length; i++) { + if (users[i].id === managerId) { + return users[i]; + } + if (users[i].subRows) { + const found = findUserInTree(managerId, users[i].subRows!); + if (found) return found; + } + } + return null; +} diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/main.tsx b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/main.tsx new file mode 100644 index 000000000..24e0d9039 --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/main.tsx @@ -0,0 +1,9 @@ +import { StrictMode } from 'react'; +import ReactDOM from 'react-dom/client'; +import Example from './TS'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + , +); diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/makeData.ts b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/makeData.ts new file mode 100644 index 000000000..d08fd1b33 --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/makeData.ts @@ -0,0 +1,159 @@ +export type User = { + id: string; + firstName: string; + lastName: string; + city: string; + state: string; + managerId: string | null; + subRows?: User[]; +}; + +export const fakeData: User[] = [ + { + id: '1', + firstName: 'Dylan', + lastName: 'Murray', + city: 'East Daphne', + state: 'Kentucky', + managerId: null, + subRows: [ + { + id: '1.1', + firstName: 'Ervin', + lastName: 'Reinger', + city: 'South Linda', + state: 'West Virginia', + managerId: '1', + subRows: [ + { + id: '1.1.1', + firstName: 'Jordane', + lastName: 'Homenick', + city: 'South Linda', + state: 'West Virginia', + managerId: '1.1', + }, + { + id: '1.1.2', + firstName: 'Jordan', + lastName: 'Clarkson', + city: 'San Francisco', + state: 'California', + managerId: '1.1', + }, + ], + }, + { + id: '1.2', + firstName: 'Brittany', + lastName: 'McCullough', + city: 'Lincoln', + state: 'Nebraska', + managerId: '1', + }, + ], + }, + { + id: '2', + firstName: 'Raquel', + lastName: 'Kohler', + city: 'Columbus', + state: 'Ohio', + managerId: null, + subRows: [ + { + id: '2.1', + firstName: 'Branson', + lastName: 'Frami', + city: 'Charleston', + state: 'South Carolina', + managerId: '2', + }, + ], + }, + { + id: '3', + firstName: 'Jordon', + lastName: 'Harris', + city: 'Perth', + state: 'Western Australia', + managerId: null, + subRows: [ + { + id: '3.1', + firstName: 'Eldora', + lastName: 'Koch', + city: 'Perth', + state: 'Western Australia', + managerId: '3', + }, + { + id: '3.2', + firstName: 'Glenn', + lastName: 'Crist', + city: 'Darwin', + state: 'Northern Territory', + managerId: '3', + }, + ], + }, +]; + +//50 us states array +export const usStates = [ + 'Alabama', + 'Alaska', + 'Arizona', + 'Arkansas', + 'California', + 'Colorado', + 'Connecticut', + 'Delaware', + 'Florida', + 'Georgia', + 'Hawaii', + 'Idaho', + 'Illinois', + 'Indiana', + 'Iowa', + 'Kansas', + 'Kentucky', + 'Louisiana', + 'Maine', + 'Maryland', + 'Massachusetts', + 'Michigan', + 'Minnesota', + 'Mississippi', + 'Missouri', + 'Montana', + 'Nebraska', + 'Nevada', + 'New Hampshire', + 'New Jersey', + 'New Mexico', + 'New York', + 'North Carolina', + 'North Dakota', + 'Ohio', + 'Oklahoma', + 'Oregon', + 'Pennsylvania', + 'Rhode Island', + 'South Carolina', + 'South Dakota', + 'Tennessee', + 'Texas', + 'Utah', + 'Vermont', + 'Virginia', + 'Washington', + 'West Virginia', + 'Wisconsin', + 'Wyoming', + 'Puerto Rico', + 'Western Australia', + 'Northern Territory', + 'South Australia', + 'Queensland', +]; diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/vite.env.d.ts b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/vite.env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/src/vite.env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.json b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.json new file mode 100644 index 000000000..05c4d41a9 --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.node.json b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.node.json new file mode 100644 index 000000000..65dbdb96a --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node" + }, + "include": ["vite.config.ts"] +} diff --git a/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/vite.config.js b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/vite.config.js new file mode 100644 index 000000000..627a31962 --- /dev/null +++ b/apps/material-react-table-docs/examples/editing-crud-tree/sandbox/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}); diff --git a/apps/material-react-table-docs/pages/changelog.mdx b/apps/material-react-table-docs/pages/changelog.mdx index 797bc7364..08b67a046 100644 --- a/apps/material-react-table-docs/pages/changelog.mdx +++ b/apps/material-react-table-docs/pages/changelog.mdx @@ -12,6 +12,14 @@ import Head from 'next/head'; ### Version 2 +#### Version 2.7.0 - 2024-01-18 + +- New `'positionCreatingRow'` table option to customize where the creating row is rendered in the table body. +- All MRT MUI menus now use the `baseBackgroundColor` mrt theme color for the menu background color. +- Fixed bug where the page index was not being reset to last page with rows when number of rows in the table changed. +- Made some tooltips text non-interactive to prevent accidental clicks. +- Simplified internal column preparation APIs. + #### Version 2.6.1 - 2024-01-11 - Upgraded to TanStack Table `v8.11.6` for SSR bugfix (document not defined) diff --git a/apps/material-react-table-docs/pages/docs/examples/editing-crud-tree.mdx b/apps/material-react-table-docs/pages/docs/examples/editing-crud-tree.mdx new file mode 100644 index 000000000..683888e62 --- /dev/null +++ b/apps/material-react-table-docs/pages/docs/examples/editing-crud-tree.mdx @@ -0,0 +1,30 @@ +import Head from 'next/head'; +import Examples from '../../../example-groups/EditingCRUDExamples'; + + + {'Editing CRUD Tree Example - Material React Table V2 Docs'} + + + + + +## Editing (CRUD) Tree Example + +Editing nested row data can be challenging. In this example, rows can be expanded to show sub rows, and editing and creating new rows can be done at any level. + +Adding a new blank row in the exact row index position is now possible with the new `positionCreatingRow` table option. + +This example also shows some complex client-side optimistic updates, where the table data is updated immediately after a valid user action. + + + +View Extra Storybook **[Examples](https://www.material-react-table.dev/?path=/story/features-creating-examples--create-row-index-index-expanding)** diff --git a/apps/material-react-table-docs/pages/docs/examples/editing-crud.mdx b/apps/material-react-table-docs/pages/docs/examples/editing-crud.mdx index f480cd659..7c8fe1ece 100644 --- a/apps/material-react-table-docs/pages/docs/examples/editing-crud.mdx +++ b/apps/material-react-table-docs/pages/docs/examples/editing-crud.mdx @@ -2,7 +2,7 @@ import Head from 'next/head'; import Examples from '../../../example-groups/EditingCRUDExamples'; - Editing CRUD Example - Material React Table V2 Docs + {'Editing CRUD Example - Material React Table V2 Docs'} @@ -46,6 +47,7 @@ There are five visually distinct editing modes to choose from, whether you want null, //don't render anything in the editing modal for this column + //or Edit: ({ cell, renderedCellValue }) => <>{renderedCellValue}, //render the normal cell value instead of a text field + }, +]; +``` + ### Edit Display Modes There are five different editDisplayModes to choose from. The default is `"modal"`, but you can also choose `"row"`, `"cell"`, `"table"`, or `"custom"`. @@ -194,6 +226,24 @@ Material React Table offers new functionality to make creating news rows of data There are just three different createDisplayModes to choose from. The default is `"modal"`, but you can also choose `"row"` or `"custom"`. They work exactly the same as their editDisplayMode counterparts. +#### Position Creating Row + +> New in v2.7 + +By default, the creating row will be added to the top of the table. You can change this behavior with the `positionCreatingRow` table option. + +```jsx +const table = useMaterialReactTable({ + columns, + data, + enableEditing: true, + createDisplayMode: 'modal', + positionCreatingRow: 'bottom', //default is 'top' +}); +``` + +In advanced use cases, such as editing nested expanding sub-rows, you could even pass in a number to the `positionCreatingRow` table option to specify the index of the row to insert the creating row before. + #### Trigger Create Mode To trigger a new blank row to be added to the table, we just need to just populate the `creatingRow` state option with a new blank row. This can be done with the `table.setCreatingRow` table instance API. You can either pass in `true` as an argument, or pass in row object with default values. diff --git a/apps/material-react-table-docs/public/sitemap-0.xml b/apps/material-react-table-docs/public/sitemap-0.xml index b29a2a194..b68f56957 100644 --- a/apps/material-react-table-docs/public/sitemap-0.xml +++ b/apps/material-react-table-docs/public/sitemap-0.xml @@ -1,101 +1,102 @@ -https://www.material-react-table.com2024-01-14T05:30:10.893Z -https://www.material-react-table.com/about2024-01-14T05:30:10.893Z -https://www.material-react-table.com/blog2024-01-14T05:30:10.893Z -https://www.material-react-table.com/blog/announcing-material-react-table-v22024-01-14T05:30:10.893Z -https://www.material-react-table.com/blog/the-best-react-data-grid-table-libraries-with-material-design-in-20232024-01-14T05:30:10.893Z -https://www.material-react-table.com/changelog2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/cell-instance-apis2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/column-instance-apis2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/column-options2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/mrt-components2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/mrt-hooks2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/row-instance-apis2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/state-options2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/table-instance-apis2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/api/table-options2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/advanced2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/aggregation-and-grouping2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/basic2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/chart-detail-panel2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/column-grouping2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/column-ordering2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/column-pinning2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/column-virtualization2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/custom-filter-ui2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/custom-headless2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/customized-grouping2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/detail-panel2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/dynamic-columns2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/editing-crud2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/editing-crud-inline-cell2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/editing-crud-inline-row2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/editing-crud-inline-table2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/expanding-tree2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/expanding-tree-flat-parse2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/export-csv2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/export-pdf2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/faceted-values2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/filter-switching2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/filter-variants2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/infinite-scrolling2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/lazy-detail-panel2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/lazy-sub-rows2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/minimal2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/popover-filters2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/react-query2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/remote2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/row-dragging2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/row-ordering2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/row-virtualization2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/static-row-pinning2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/sticky-header2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/sticky-row-pinning2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/sticky-row-selection2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/examples/virtualized2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/getting-started2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/getting-started/install2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/getting-started/usage2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/aggregation2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/async-loading2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/best-practices2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/click-to-copy2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/column-actions2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/column-filtering2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/column-grouping2024-01-14T05:30:10.893Z -https://www.material-react-table.com/docs/guides/column-hiding2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/column-ordering-dnd2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/column-pinning2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/column-resizing2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/customize-components2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/customize-icons2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/data-columns2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/density-toggle2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/detail-panel2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/display-columns2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/editing2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/expanding-sub-rows2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/full-screen-toggle2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/global-filtering2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/header-groups2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/localization2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/memoize-components2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/pagination2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/row-actions2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/row-numbers2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/row-ordering-dnd2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/row-pinning2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/row-selection2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/sorting2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/state-management2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/sticky-header2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/table-event-listeners2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/toolbar-customization2024-01-14T05:30:10.894Z -https://www.material-react-table.com/docs/guides/virtualization2024-01-14T05:30:10.894Z -https://www.material-react-table.com/migrating-to-v22024-01-14T05:30:10.894Z +https://www.material-react-table.com2024-01-18T05:59:29.443Z +https://www.material-react-table.com/about2024-01-18T05:59:29.443Z +https://www.material-react-table.com/blog2024-01-18T05:59:29.443Z +https://www.material-react-table.com/blog/announcing-material-react-table-v22024-01-18T05:59:29.443Z +https://www.material-react-table.com/blog/the-best-react-data-grid-table-libraries-with-material-design-in-20232024-01-18T05:59:29.443Z +https://www.material-react-table.com/changelog2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/cell-instance-apis2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/column-instance-apis2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/column-options2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/mrt-components2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/mrt-hooks2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/row-instance-apis2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/state-options2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/table-instance-apis2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/api/table-options2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/advanced2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/aggregation-and-grouping2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/basic2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/chart-detail-panel2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/column-grouping2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/column-ordering2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/column-pinning2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/column-virtualization2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/custom-filter-ui2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/custom-headless2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/customized-grouping2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/detail-panel2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/dynamic-columns2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/editing-crud2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/editing-crud-inline-cell2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/editing-crud-inline-row2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/editing-crud-inline-table2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/editing-crud-tree2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/expanding-tree2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/expanding-tree-flat-parse2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/export-csv2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/export-pdf2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/faceted-values2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/filter-switching2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/filter-variants2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/infinite-scrolling2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/lazy-detail-panel2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/lazy-sub-rows2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/minimal2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/popover-filters2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/react-query2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/remote2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/row-dragging2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/row-ordering2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/row-virtualization2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/static-row-pinning2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/sticky-header2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/sticky-row-pinning2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/sticky-row-selection2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/examples/virtualized2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/getting-started2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/getting-started/install2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/getting-started/usage2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/aggregation2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/async-loading2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/best-practices2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/click-to-copy2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/column-actions2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/column-filtering2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/column-grouping2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/column-hiding2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/column-ordering-dnd2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/column-pinning2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/column-resizing2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/customize-components2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/customize-icons2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/data-columns2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/density-toggle2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/detail-panel2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/display-columns2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/editing2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/expanding-sub-rows2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/full-screen-toggle2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/global-filtering2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/header-groups2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/localization2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/memoize-components2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/pagination2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/row-actions2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/row-numbers2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/row-ordering-dnd2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/row-pinning2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/row-selection2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/sorting2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/state-management2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/sticky-header2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/table-event-listeners2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/toolbar-customization2024-01-18T05:59:29.443Z +https://www.material-react-table.com/docs/guides/virtualization2024-01-18T05:59:29.443Z +https://www.material-react-table.com/migrating-to-v22024-01-18T05:59:29.443Z \ No newline at end of file diff --git a/packages/material-react-table/package.json b/packages/material-react-table/package.json index fd2511bc4..6494a742a 100644 --- a/packages/material-react-table/package.json +++ b/packages/material-react-table/package.json @@ -1,5 +1,5 @@ { - "version": "2.6.1", + "version": "2.7.0", "license": "MIT", "name": "material-react-table", "description": "A fully featured Material UI V5 implementation of TanStack React Table V8, written from the ground up in TypeScript.", diff --git a/packages/material-react-table/src/hooks/useMRT_Effects.ts b/packages/material-react-table/src/hooks/useMRT_Effects.ts index d79480640..390314b92 100644 --- a/packages/material-react-table/src/hooks/useMRT_Effects.ts +++ b/packages/material-react-table/src/hooks/useMRT_Effects.ts @@ -13,12 +13,7 @@ export const useMRT_Effects = ( getIsSomeRowsPinned, getPrePaginationRowModel, getState, - options: { - autoResetPageIndex, - enablePagination, - enableRowPinning, - rowCount, - }, + options: { enablePagination, enableRowPinning, rowCount }, } = table; const { density, @@ -63,8 +58,7 @@ export const useMRT_Effects = ( //if page index is out of bounds, set it to the last page useEffect(() => { - if (!enablePagination || autoResetPageIndex || isLoading || showSkeletons) - return; + if (!enablePagination || isLoading || showSkeletons) return; const { pageIndex, pageSize } = pagination; const firstVisibleRowIndex = pageIndex * pageSize; if (firstVisibleRowIndex >= totalRowCount) { diff --git a/packages/material-react-table/src/menus/MRT_ColumnActionMenu.tsx b/packages/material-react-table/src/menus/MRT_ColumnActionMenu.tsx index 4de216014..59d3853f0 100644 --- a/packages/material-react-table/src/menus/MRT_ColumnActionMenu.tsx +++ b/packages/material-react-table/src/menus/MRT_ColumnActionMenu.tsx @@ -5,7 +5,9 @@ import IconButton from '@mui/material/IconButton'; import ListItemIcon from '@mui/material/ListItemIcon'; import Menu, { type MenuProps } from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; +import { useTheme } from '@mui/material/styles'; import { MRT_FilterOptionMenu } from './MRT_FilterOptionMenu'; +import { getMRTTheme } from '../style.utils'; import { type MRT_Header, type MRT_RowData, @@ -396,11 +398,17 @@ export const MRT_ColumnActionMenu = ({ : []), ].filter(Boolean); + const theme = useTheme(); + const { menuBackgroundColor } = getMRTTheme(table, theme); + return ( setAnchorEl(null)} open={!!anchorEl} diff --git a/packages/material-react-table/src/menus/MRT_FilterOptionMenu.tsx b/packages/material-react-table/src/menus/MRT_FilterOptionMenu.tsx index 4b3e98607..bf3ed4eb6 100644 --- a/packages/material-react-table/src/menus/MRT_FilterOptionMenu.tsx +++ b/packages/material-react-table/src/menus/MRT_FilterOptionMenu.tsx @@ -2,6 +2,8 @@ import { useMemo } from 'react'; import Box from '@mui/material/Box'; import Menu, { type MenuProps } from '@mui/material/Menu'; import MenuItem from '@mui/material/MenuItem'; +import { useTheme } from '@mui/material/styles'; +import { getMRTTheme } from '../style.utils'; import { type MRT_FilterOption, type MRT_Header, @@ -237,10 +239,16 @@ export const MRT_FilterOptionMenu = ({ const filterOption = !!header && columnDef ? columnDef._filterFn : globalFilterFn; + const theme = useTheme(); + const { menuBackgroundColor } = getMRTTheme(table, theme); + return ( ({ } = table; const { density } = getState(); + const theme = useTheme(); + const { menuBackgroundColor } = getMRTTheme(table, theme); + return ( event.stopPropagation()} onClose={() => setAnchorEl(null)} diff --git a/packages/material-react-table/src/menus/MRT_ShowHideColumnsMenu.tsx b/packages/material-react-table/src/menus/MRT_ShowHideColumnsMenu.tsx index 5edcbb3e8..b9002e290 100644 --- a/packages/material-react-table/src/menus/MRT_ShowHideColumnsMenu.tsx +++ b/packages/material-react-table/src/menus/MRT_ShowHideColumnsMenu.tsx @@ -1,10 +1,12 @@ import { useMemo, useState } from 'react'; +import { useTheme } from '@mui/material'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import Divider from '@mui/material/Divider'; import Menu, { type MenuProps } from '@mui/material/Menu'; import { MRT_ShowHideColumnsMenuItems } from './MRT_ShowHideColumnsMenuItems'; import { getDefaultColumnOrderIds } from '../column.utils'; +import { getMRTTheme } from '../style.utils'; import { type MRT_Column, type MRT_RowData, @@ -77,10 +79,16 @@ export const MRT_ShowHideColumnsMenu = ({ null, ); + const theme = useTheme(); + const { menuBackgroundColor } = getMRTTheme(table, theme); + return ( setAnchorEl(null)} diff --git a/packages/material-react-table/src/style.utils.ts b/packages/material-react-table/src/style.utils.ts index 0c6dc89b2..bf3505175 100644 --- a/packages/material-react-table/src/style.utils.ts +++ b/packages/material-react-table/src/style.utils.ts @@ -21,20 +21,26 @@ export const parseCSSVarId = (id: string) => id.replace(/[^a-zA-Z0-9]/g, '_'); export const getMRTTheme = ( table: MRT_TableInstance, theme: Theme, -) => ({ - baseBackgroundColor: - theme.palette.mode === 'dark' +) => { + const themeOverrides = parseFromValuesOrFunc(table.options.mrtTheme, theme); + const baseBackgroundColor = + themeOverrides?.baseBackgroundColor ?? + (theme.palette.mode === 'dark' ? lighten(theme.palette.background.default, 0.05) - : theme.palette.background.default, - draggingBorderColor: theme.palette.primary.main, - matchHighlightColor: - theme.palette.mode === 'dark' - ? darken(theme.palette.warning.dark, 0.25) - : lighten(theme.palette.warning.light, 0.5), - pinnedRowBackgroundColor: alpha(theme.palette.primary.main, 0.1), - selectedRowBackgroundColor: alpha(theme.palette.primary.main, 0.2), - ...parseFromValuesOrFunc(table.options.mrtTheme, theme), -}); + : theme.palette.background.default); + return { + baseBackgroundColor, + draggingBorderColor: theme.palette.primary.main, + matchHighlightColor: + theme.palette.mode === 'dark' + ? darken(theme.palette.warning.dark, 0.25) + : lighten(theme.palette.warning.light, 0.5), + menuBackgroundColor: lighten(baseBackgroundColor, 0.07), + pinnedRowBackgroundColor: alpha(theme.palette.primary.main, 0.1), + selectedRowBackgroundColor: alpha(theme.palette.primary.main, 0.2), + ...themeOverrides, + }; +}; export const getCommonMRTCellStyles = ({ column, diff --git a/packages/material-react-table/src/types.ts b/packages/material-react-table/src/types.ts index 6db962cd4..ea92a26aa 100644 --- a/packages/material-react-table/src/types.ts +++ b/packages/material-react-table/src/types.ts @@ -247,6 +247,7 @@ export interface MRT_Theme { baseBackgroundColor?: CSSProperties['backgroundColor']; draggingBorderColor?: CSSProperties['borderColor']; matchHighlightColor?: CSSProperties['backgroundColor']; + menuBackgroundColor?: CSSProperties['backgroundColor']; pinnedRowBackgroundColor?: CSSProperties['backgroundColor']; selectedRowBackgroundColor?: CSSProperties['backgroundColor']; }