diff --git a/docs/data/toolpad/core/all-components/all-components.md b/docs/data/toolpad/core/all-components/all-components.md index 7eaa57ef8ec..7d4652725bb 100644 --- a/docs/data/toolpad/core/all-components/all-components.md +++ b/docs/data/toolpad/core/all-components/all-components.md @@ -2,8 +2,9 @@

This page contains an index to the components included in Toolpad Core.

+- [Account](/toolpad/core/react-account/) - [App Provider](/toolpad/core/react-app-provider/) +- [CRUD](/toolpad/core/react-crud/) - [Dashboard Layout](/toolpad/core/react-dashboard-layout/) - [Page Container](/toolpad/core/react-page-container/) - [Sign-in Page](/toolpad/core/react-sign-in-page/) -- [Account](/toolpad/core/react-account/) diff --git a/docs/data/toolpad/core/components/crud-page/crud-page.md b/docs/data/toolpad/core/components/crud/crud.md similarity index 87% rename from docs/data/toolpad/core/components/crud-page/crud-page.md rename to docs/data/toolpad/core/components/crud/crud.md index bb03fc56aa5..14be9dbba17 100644 --- a/docs/data/toolpad/core/components/crud-page/crud-page.md +++ b/docs/data/toolpad/core/components/crud/crud.md @@ -1,9 +1,10 @@ --- productId: toolpad-core -title: CRUD Page +title: CRUD +components: CRUD, CRUDProvider, List, Show, Create, Edit --- -# CRUD Page 🚧 +# CRUD

The CRUD component provides a UI for editable data sources. With deep-linkable, form-based pages.

diff --git a/docs/data/toolpad/core/pages.ts b/docs/data/toolpad/core/pages.ts index 4e8d6831433..3b5e5819163 100644 --- a/docs/data/toolpad/core/pages.ts +++ b/docs/data/toolpad/core/pages.ts @@ -120,9 +120,8 @@ const pages: MuiPage[] = [ subheader: 'Data', children: [ { - pathname: '/toolpad/core/react-crud-page', + pathname: '/toolpad/core/react-crud', title: 'CRUD', - planned: true, }, { pathname: '/toolpad/core/react-stat-card', diff --git a/docs/data/toolpad/core/pagesApi.js b/docs/data/toolpad/core/pagesApi.js index c36b8e189db..c3af5f794e1 100644 --- a/docs/data/toolpad/core/pagesApi.js +++ b/docs/data/toolpad/core/pagesApi.js @@ -4,12 +4,18 @@ module.exports = [ { pathname: '/toolpad/core/api/account-popover-header' }, { pathname: '/toolpad/core/api/account-preview' }, { pathname: '/toolpad/core/api/app-provider' }, + { pathname: '/toolpad/core/api/create' }, + { pathname: '/toolpad/core/api/crud' }, + { pathname: '/toolpad/core/api/crud-provider' }, { pathname: '/toolpad/core/api/dashboard-layout' }, { pathname: '/toolpad/core/api/dialogs-provider' }, + { pathname: '/toolpad/core/api/edit' }, + { pathname: '/toolpad/core/api/list' }, { pathname: '/toolpad/core/api/notifications-provider' }, { pathname: '/toolpad/core/api/page-container' }, { pathname: '/toolpad/core/api/page-header' }, { pathname: '/toolpad/core/api/page-header-toolbar' }, + { pathname: '/toolpad/core/api/show' }, { pathname: '/toolpad/core/api/sign-in-button' }, { pathname: '/toolpad/core/api/sign-in-page' }, { pathname: '/toolpad/core/api/sign-out-button' }, diff --git a/docs/package.json b/docs/package.json index 5edd0261568..97847e1a898 100644 --- a/docs/package.json +++ b/docs/package.json @@ -25,16 +25,16 @@ "@emotion/server": "11.11.0", "@emotion/styled": "11.14.0", "@mui/base": "5.0.0-beta.68", - "@mui/docs": "6.3.1", - "@mui/icons-material": "6.3.1", + "@mui/docs": "6.4.1", + "@mui/icons-material": "6.4.1", "@mui/internal-markdown": "1.0.24", "@mui/joy": "5.0.0-beta.51", "@mui/lab": "6.0.0-beta.22", - "@mui/material": "6.3.1", + "@mui/material": "6.4.1", "@mui/material-nextjs": "6.3.1", - "@mui/styles": "6.3.1", - "@mui/system": "6.3.1", - "@mui/utils": "6.3.1", + "@mui/styles": "6.4.1", + "@mui/system": "6.4.1", + "@mui/utils": "6.4.1", "@mui/x-date-pickers": "7.25.0", "@mui/x-date-pickers-pro": "7.25.0", "@mui/x-license": "7.25.0", diff --git a/docs/pages/toolpad/core/api/create.js b/docs/pages/toolpad/core/api/create.js new file mode 100644 index 00000000000..a8a898ff62f --- /dev/null +++ b/docs/pages/toolpad/core/api/create.js @@ -0,0 +1,23 @@ +import * as React from 'react'; +import ApiPage from 'docs/src/modules/components/ApiPage'; +import mapApiPageTranslations from 'docs/src/modules/utils/mapApiPageTranslations'; +import jsonPageContent from './create.json'; + +export default function Page(props) { + const { descriptions, pageContent } = props; + return ; +} + +Page.getInitialProps = () => { + const req = require.context( + 'docs-toolpad/translations/api-docs/create', + false, + /\.\/create.*.json$/, + ); + const descriptions = mapApiPageTranslations(req); + + return { + descriptions, + pageContent: jsonPageContent, + }; +}; diff --git a/docs/pages/toolpad/core/api/create.json b/docs/pages/toolpad/core/api/create.json new file mode 100644 index 00000000000..9ba3b07a3ea --- /dev/null +++ b/docs/pages/toolpad/core/api/create.json @@ -0,0 +1,15 @@ +{ + "props": { + "dataSource": { "type": { "name": "object" } }, + "initialValues": { "type": { "name": "object" }, "default": "{}" }, + "onSubmitSuccess": { "type": { "name": "func" } } + }, + "name": "Create", + "imports": ["import { Create } from '@toolpad/core/CRUD';"], + "classes": [], + "muiName": "Create", + "filename": "/packages/toolpad-core/src/CRUD/Create.tsx", + "inheritance": null, + "demos": "", + "cssComponent": false +} diff --git a/docs/pages/toolpad/core/api/crud-provider.js b/docs/pages/toolpad/core/api/crud-provider.js new file mode 100644 index 00000000000..8ec0f555a3c --- /dev/null +++ b/docs/pages/toolpad/core/api/crud-provider.js @@ -0,0 +1,23 @@ +import * as React from 'react'; +import ApiPage from 'docs/src/modules/components/ApiPage'; +import mapApiPageTranslations from 'docs/src/modules/utils/mapApiPageTranslations'; +import jsonPageContent from './crud-provider.json'; + +export default function Page(props) { + const { descriptions, pageContent } = props; + return ; +} + +Page.getInitialProps = () => { + const req = require.context( + 'docs-toolpad/translations/api-docs/crud-provider', + false, + /\.\/crud-provider.*.json$/, + ); + const descriptions = mapApiPageTranslations(req); + + return { + descriptions, + pageContent: jsonPageContent, + }; +}; diff --git a/docs/pages/toolpad/core/api/crud-provider.json b/docs/pages/toolpad/core/api/crud-provider.json new file mode 100644 index 00000000000..805a3e7fcbc --- /dev/null +++ b/docs/pages/toolpad/core/api/crud-provider.json @@ -0,0 +1,11 @@ +{ + "props": { "dataSource": { "type": { "name": "object" }, "required": true } }, + "name": "CRUDProvider", + "imports": ["import { CRUDProvider } from '@toolpad/core/CRUD';"], + "classes": [], + "muiName": "CRUDProvider", + "filename": "/packages/toolpad-core/src/CRUD/CRUDProvider.tsx", + "inheritance": null, + "demos": "", + "cssComponent": false +} diff --git a/docs/pages/toolpad/core/api/crud.js b/docs/pages/toolpad/core/api/crud.js new file mode 100644 index 00000000000..1a1ef4f4de2 --- /dev/null +++ b/docs/pages/toolpad/core/api/crud.js @@ -0,0 +1,19 @@ +import * as React from 'react'; +import ApiPage from 'docs/src/modules/components/ApiPage'; +import mapApiPageTranslations from 'docs/src/modules/utils/mapApiPageTranslations'; +import jsonPageContent from './crud.json'; + +export default function Page(props) { + const { descriptions, pageContent } = props; + return ; +} + +Page.getInitialProps = () => { + const req = require.context('docs-toolpad/translations/api-docs/crud', false, /\.\/crud.*.json$/); + const descriptions = mapApiPageTranslations(req); + + return { + descriptions, + pageContent: jsonPageContent, + }; +}; diff --git a/docs/pages/toolpad/core/api/crud.json b/docs/pages/toolpad/core/api/crud.json new file mode 100644 index 00000000000..c12b1978236 --- /dev/null +++ b/docs/pages/toolpad/core/api/crud.json @@ -0,0 +1,19 @@ +{ + "props": { + "dataSource": { "type": { "name": "object" }, "required": true }, + "rootPath": { "type": { "name": "string" }, "required": true }, + "defaultValues": { "type": { "name": "object" }, "default": "{}" }, + "initialPageSize": { "type": { "name": "number" }, "default": "100" } + }, + "name": "CRUD", + "imports": [ + "import { CRUD } from '@toolpad/core/CRUD';", + "import { CRUD } from '@toolpad/core';" + ], + "classes": [], + "muiName": "CRUD", + "filename": "/packages/toolpad-core/src/CRUD/CRUD.tsx", + "inheritance": null, + "demos": "", + "cssComponent": false +} diff --git a/docs/pages/toolpad/core/api/edit.js b/docs/pages/toolpad/core/api/edit.js new file mode 100644 index 00000000000..1017e66e4ef --- /dev/null +++ b/docs/pages/toolpad/core/api/edit.js @@ -0,0 +1,19 @@ +import * as React from 'react'; +import ApiPage from 'docs/src/modules/components/ApiPage'; +import mapApiPageTranslations from 'docs/src/modules/utils/mapApiPageTranslations'; +import jsonPageContent from './edit.json'; + +export default function Page(props) { + const { descriptions, pageContent } = props; + return ; +} + +Page.getInitialProps = () => { + const req = require.context('docs-toolpad/translations/api-docs/edit', false, /\.\/edit.*.json$/); + const descriptions = mapApiPageTranslations(req); + + return { + descriptions, + pageContent: jsonPageContent, + }; +}; diff --git a/docs/pages/toolpad/core/api/edit.json b/docs/pages/toolpad/core/api/edit.json new file mode 100644 index 00000000000..4b43177a75c --- /dev/null +++ b/docs/pages/toolpad/core/api/edit.json @@ -0,0 +1,14 @@ +{ + "props": { + "dataSource": { "type": { "name": "object" } }, + "onSubmitSuccess": { "type": { "name": "func" } } + }, + "name": "Edit", + "imports": ["import { Edit } from '@toolpad/core/CRUD';"], + "classes": [], + "muiName": "Edit", + "filename": "/packages/toolpad-core/src/CRUD/Edit.tsx", + "inheritance": null, + "demos": "", + "cssComponent": false +} diff --git a/docs/pages/toolpad/core/api/list.js b/docs/pages/toolpad/core/api/list.js new file mode 100644 index 00000000000..dfef6360481 --- /dev/null +++ b/docs/pages/toolpad/core/api/list.js @@ -0,0 +1,19 @@ +import * as React from 'react'; +import ApiPage from 'docs/src/modules/components/ApiPage'; +import mapApiPageTranslations from 'docs/src/modules/utils/mapApiPageTranslations'; +import jsonPageContent from './list.json'; + +export default function Page(props) { + const { descriptions, pageContent } = props; + return ; +} + +Page.getInitialProps = () => { + const req = require.context('docs-toolpad/translations/api-docs/list', false, /\.\/list.*.json$/); + const descriptions = mapApiPageTranslations(req); + + return { + descriptions, + pageContent: jsonPageContent, + }; +}; diff --git a/docs/pages/toolpad/core/api/list.json b/docs/pages/toolpad/core/api/list.json new file mode 100644 index 00000000000..51480761b97 --- /dev/null +++ b/docs/pages/toolpad/core/api/list.json @@ -0,0 +1,34 @@ +{ + "props": { + "dataSource": { "type": { "name": "object" } }, + "initialPageSize": { "type": { "name": "number" }, "default": "100" }, + "onCreateClick": { "type": { "name": "func" } }, + "onEditClick": { "type": { "name": "func" } }, + "onRowClick": { "type": { "name": "func" } }, + "slotProps": { + "type": { "name": "shape", "description": "{ dataGrid?: object }" }, + "default": "{}" + }, + "slots": { + "type": { "name": "shape", "description": "{ dataGrid?: elementType }" }, + "default": "{}", + "additionalInfo": { "slotsApi": true } + } + }, + "name": "List", + "imports": ["import { List } from '@toolpad/core/CRUD';"], + "slots": [ + { + "name": "dataGrid", + "description": "The DataGrid component used to list the items.", + "default": "DataGrid", + "class": null + } + ], + "classes": [], + "muiName": "List", + "filename": "/packages/toolpad-core/src/CRUD/List.tsx", + "inheritance": null, + "demos": "", + "cssComponent": false +} diff --git a/docs/pages/toolpad/core/api/show.js b/docs/pages/toolpad/core/api/show.js new file mode 100644 index 00000000000..1c06550d12e --- /dev/null +++ b/docs/pages/toolpad/core/api/show.js @@ -0,0 +1,19 @@ +import * as React from 'react'; +import ApiPage from 'docs/src/modules/components/ApiPage'; +import mapApiPageTranslations from 'docs/src/modules/utils/mapApiPageTranslations'; +import jsonPageContent from './show.json'; + +export default function Page(props) { + const { descriptions, pageContent } = props; + return ; +} + +Page.getInitialProps = () => { + const req = require.context('docs-toolpad/translations/api-docs/show', false, /\.\/show.*.json$/); + const descriptions = mapApiPageTranslations(req); + + return { + descriptions, + pageContent: jsonPageContent, + }; +}; diff --git a/docs/pages/toolpad/core/api/show.json b/docs/pages/toolpad/core/api/show.json new file mode 100644 index 00000000000..548cd3ad675 --- /dev/null +++ b/docs/pages/toolpad/core/api/show.json @@ -0,0 +1,15 @@ +{ + "props": { + "dataSource": { "type": { "name": "object" } }, + "onDelete": { "type": { "name": "func" } }, + "onEditClick": { "type": { "name": "func" } } + }, + "name": "Show", + "imports": ["import { Show } from '@toolpad/core/CRUD';"], + "classes": [], + "muiName": "Show", + "filename": "/packages/toolpad-core/src/CRUD/Show.tsx", + "inheritance": null, + "demos": "", + "cssComponent": false +} diff --git a/docs/pages/toolpad/core/api/sign-in-button.json b/docs/pages/toolpad/core/api/sign-in-button.json index 0d34a3b5cf4..e5736fcfade 100644 --- a/docs/pages/toolpad/core/api/sign-in-button.json +++ b/docs/pages/toolpad/core/api/sign-in-button.json @@ -178,6 +178,48 @@ "isGlobal": false, "isDeprecated": true }, + { + "key": "loading", + "className": "", + "description": "Styles applied to the root element if `loading={true}`.", + "isGlobal": false + }, + { + "key": "loadingIconPlaceholder", + "className": "", + "description": "Styles applied to the loadingIconPlaceholder element.", + "isGlobal": false + }, + { + "key": "loadingIndicator", + "className": "", + "description": "Styles applied to the loadingIndicator element.", + "isGlobal": false + }, + { + "key": "loadingPositionCenter", + "className": "", + "description": "Styles applied to the root element if `loadingPosition=\"center\"`.", + "isGlobal": false + }, + { + "key": "loadingPositionEnd", + "className": "", + "description": "Styles applied to the root element if `loadingPosition=\"end\"`.", + "isGlobal": false + }, + { + "key": "loadingPositionStart", + "className": "", + "description": "Styles applied to the root element if `loadingPosition=\"start\"`.", + "isGlobal": false + }, + { + "key": "loadingWrapper", + "className": "", + "description": "Styles applied to the loadingWrapper element.", + "isGlobal": false + }, { "key": "outlined", "className": "", diff --git a/docs/pages/toolpad/core/api/sign-out-button.json b/docs/pages/toolpad/core/api/sign-out-button.json index 66fd2b0b73d..b60e2997524 100644 --- a/docs/pages/toolpad/core/api/sign-out-button.json +++ b/docs/pages/toolpad/core/api/sign-out-button.json @@ -178,6 +178,48 @@ "isGlobal": false, "isDeprecated": true }, + { + "key": "loading", + "className": "", + "description": "Styles applied to the root element if `loading={true}`.", + "isGlobal": false + }, + { + "key": "loadingIconPlaceholder", + "className": "", + "description": "Styles applied to the loadingIconPlaceholder element.", + "isGlobal": false + }, + { + "key": "loadingIndicator", + "className": "", + "description": "Styles applied to the loadingIndicator element.", + "isGlobal": false + }, + { + "key": "loadingPositionCenter", + "className": "", + "description": "Styles applied to the root element if `loadingPosition=\"center\"`.", + "isGlobal": false + }, + { + "key": "loadingPositionEnd", + "className": "", + "description": "Styles applied to the root element if `loadingPosition=\"end\"`.", + "isGlobal": false + }, + { + "key": "loadingPositionStart", + "className": "", + "description": "Styles applied to the root element if `loadingPosition=\"start\"`.", + "isGlobal": false + }, + { + "key": "loadingWrapper", + "className": "", + "description": "Styles applied to the loadingWrapper element.", + "isGlobal": false + }, { "key": "outlined", "className": "", diff --git a/docs/pages/toolpad/core/react-crud-page/index.js b/docs/pages/toolpad/core/react-crud/index.js similarity index 85% rename from docs/pages/toolpad/core/react-crud-page/index.js rename to docs/pages/toolpad/core/react-crud/index.js index 120aa8bca68..6548998c158 100644 --- a/docs/pages/toolpad/core/react-crud-page/index.js +++ b/docs/pages/toolpad/core/react-crud/index.js @@ -1,6 +1,6 @@ import * as React from 'react'; import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs'; -import * as pageProps from '../../../../data/toolpad/core/components/crud-page/crud-page.md?muiMarkdown'; +import * as pageProps from '../../../../data/toolpad/core/components/crud/crud.md?muiMarkdown'; export default function Page() { return ; diff --git a/docs/translations/api-docs/create/create.json b/docs/translations/api-docs/create/create.json new file mode 100644 index 00000000000..519f72e5463 --- /dev/null +++ b/docs/translations/api-docs/create/create.json @@ -0,0 +1,9 @@ +{ + "componentDescription": "", + "propDescriptions": { + "dataSource": { "description": "Server-side data source." }, + "initialValues": { "description": "Initial form values." }, + "onSubmitSuccess": { "description": "Callback fired when the form is successfully submitted." } + }, + "classDescriptions": {} +} diff --git a/docs/translations/api-docs/crud-provider/crud-provider.json b/docs/translations/api-docs/crud-provider/crud-provider.json new file mode 100644 index 00000000000..71d2afa0b9e --- /dev/null +++ b/docs/translations/api-docs/crud-provider/crud-provider.json @@ -0,0 +1,5 @@ +{ + "componentDescription": "", + "propDescriptions": { "dataSource": { "description": "Server-side data source." } }, + "classDescriptions": {} +} diff --git a/docs/translations/api-docs/crud/crud.json b/docs/translations/api-docs/crud/crud.json new file mode 100644 index 00000000000..d540498a047 --- /dev/null +++ b/docs/translations/api-docs/crud/crud.json @@ -0,0 +1,10 @@ +{ + "componentDescription": "", + "propDescriptions": { + "dataSource": { "description": "Server-side data source." }, + "defaultValues": { "description": "Default form values for a new item." }, + "initialPageSize": { "description": "Initial number of rows to show per page." }, + "rootPath": { "description": "Root path to CRUD pages." } + }, + "classDescriptions": {} +} diff --git a/docs/translations/api-docs/edit/edit.json b/docs/translations/api-docs/edit/edit.json new file mode 100644 index 00000000000..68bbcc0ea73 --- /dev/null +++ b/docs/translations/api-docs/edit/edit.json @@ -0,0 +1,8 @@ +{ + "componentDescription": "", + "propDescriptions": { + "dataSource": { "description": "Server-side data source." }, + "onSubmitSuccess": { "description": "Callback fired when the form is successfully submitted." } + }, + "classDescriptions": {} +} diff --git a/docs/translations/api-docs/list/list.json b/docs/translations/api-docs/list/list.json new file mode 100644 index 00000000000..be6aad9e5cf --- /dev/null +++ b/docs/translations/api-docs/list/list.json @@ -0,0 +1,18 @@ +{ + "componentDescription": "", + "propDescriptions": { + "dataSource": { "description": "Server-side data source." }, + "initialPageSize": { "description": "Initial number of rows to show per page." }, + "onCreateClick": { + "description": "Callback fired when the "Create" button is clicked." + }, + "onEditClick": { "description": "Callback fired when the "Edit" button is clicked." }, + "onRowClick": { + "description": "Callback fired when a row is clicked. Not called if the target clicked is an interactive element added by the built-in columns." + }, + "slotProps": { "description": "The props used for each slot inside." }, + "slots": { "description": "The components used for each slot inside." } + }, + "classDescriptions": {}, + "slotDescriptions": { "dataGrid": "The DataGrid component used to list the items." } +} diff --git a/docs/translations/api-docs/show/show.json b/docs/translations/api-docs/show/show.json new file mode 100644 index 00000000000..364fc913276 --- /dev/null +++ b/docs/translations/api-docs/show/show.json @@ -0,0 +1,9 @@ +{ + "componentDescription": "", + "propDescriptions": { + "dataSource": { "description": "Server-side data source." }, + "onDelete": { "description": "Callback fired when the item is successfully deleted." }, + "onEditClick": { "description": "Callback fired when the "Edit" button is clicked." } + }, + "classDescriptions": {} +} diff --git a/docs/translations/api-docs/sign-in-button/sign-in-button.json b/docs/translations/api-docs/sign-in-button/sign-in-button.json index 77a6eff5224..93b0e4506a6 100644 --- a/docs/translations/api-docs/sign-in-button/sign-in-button.json +++ b/docs/translations/api-docs/sign-in-button/sign-in-button.json @@ -146,6 +146,38 @@ "conditions": "supplied and size=\"small\"", "deprecationInfo": "Combine the .MuiButton-icon and .MuiButtonSizeSmall classes instead. See Migrating from deprecated APIs for more details." }, + "loading": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loading={true}" + }, + "loadingIconPlaceholder": { + "description": "Styles applied to {{nodeName}}.", + "nodeName": "the loadingIconPlaceholder element" + }, + "loadingIndicator": { + "description": "Styles applied to {{nodeName}}.", + "nodeName": "the loadingIndicator element" + }, + "loadingPositionCenter": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loadingPosition=\"center\"" + }, + "loadingPositionEnd": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loadingPosition=\"end\"" + }, + "loadingPositionStart": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loadingPosition=\"start\"" + }, + "loadingWrapper": { + "description": "Styles applied to {{nodeName}}.", + "nodeName": "the loadingWrapper element" + }, "outlined": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the root element", diff --git a/docs/translations/api-docs/sign-out-button/sign-out-button.json b/docs/translations/api-docs/sign-out-button/sign-out-button.json index 77a6eff5224..93b0e4506a6 100644 --- a/docs/translations/api-docs/sign-out-button/sign-out-button.json +++ b/docs/translations/api-docs/sign-out-button/sign-out-button.json @@ -146,6 +146,38 @@ "conditions": "supplied and size=\"small\"", "deprecationInfo": "Combine the .MuiButton-icon and .MuiButtonSizeSmall classes instead. See Migrating from deprecated APIs for more details." }, + "loading": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loading={true}" + }, + "loadingIconPlaceholder": { + "description": "Styles applied to {{nodeName}}.", + "nodeName": "the loadingIconPlaceholder element" + }, + "loadingIndicator": { + "description": "Styles applied to {{nodeName}}.", + "nodeName": "the loadingIndicator element" + }, + "loadingPositionCenter": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loadingPosition=\"center\"" + }, + "loadingPositionEnd": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loadingPosition=\"end\"" + }, + "loadingPositionStart": { + "description": "Styles applied to {{nodeName}} if {{conditions}}.", + "nodeName": "the root element", + "conditions": "loadingPosition=\"start\"" + }, + "loadingWrapper": { + "description": "Styles applied to {{nodeName}}.", + "nodeName": "the loadingWrapper element" + }, "outlined": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the root element", diff --git a/packages/toolpad-core/package.json b/packages/toolpad-core/package.json index 61ec421e3aa..d2208ab564e 100644 --- a/packages/toolpad-core/package.json +++ b/packages/toolpad-core/package.json @@ -56,17 +56,20 @@ "dependencies": { "@babel/runtime": "^7.26.0", "@mui/lab": "6.0.0-beta.22", - "@mui/utils": "6.3.1", + "@mui/utils": "6.4.1", "@toolpad/utils": "workspace:*", "@vitejs/plugin-react": "4.3.4", "client-only": "^0.0.1", + "dayjs": "1.11.13", "invariant": "2.2.4", "path-to-regexp": "6.3.0", "prop-types": "15.8.1" }, "devDependencies": { - "@mui/icons-material": "6.3.1", - "@mui/material": "6.3.1", + "@mui/icons-material": "6.4.1", + "@mui/material": "6.4.1", + "@mui/x-data-grid": "7.22.2", + "@mui/x-date-pickers": "7.23.6", "@types/invariant": "2.2.37", "@types/prop-types": "15.7.14", "@types/react": "^19.0.8", @@ -83,6 +86,8 @@ "peerDependencies": { "@mui/icons-material": "5 - 6", "@mui/material": "5 - 6", + "@mui/x-data-grid": "^7", + "@mui/x-date-pickers": "^7", "next": "^14 || ^15", "react": "^18 || ^19", "react-router": "^7" diff --git a/packages/toolpad-core/src/CRUD/CRUD.tsx b/packages/toolpad-core/src/CRUD/CRUD.tsx new file mode 100644 index 00000000000..270491a0ed3 --- /dev/null +++ b/packages/toolpad-core/src/CRUD/CRUD.tsx @@ -0,0 +1,157 @@ +'use client'; +import * as React from 'react'; +import PropTypes from 'prop-types'; +import { match } from 'path-to-regexp'; +import invariant from 'invariant'; +import { DataModel, DataModelId, DataSource } from './shared'; +import { CRUDProvider } from './CRUDProvider'; +import { RouterContext } from '../shared/context'; +import { List } from './List'; +import { Show } from './Show'; +import { Create } from './Create'; +import { Edit } from './Edit'; + +export interface CRUDProps { + /** + * Server-side data source. + */ + dataSource: DataSource; + /** + * Root path to CRUD pages. + */ + rootPath: string; + /** + * Initial number of rows to show per page. + * @default 100 + */ + initialPageSize?: number; + /** + * Default form values for a new item. + * @default {} + */ + defaultValues?: Omit; +} +/** + * + * Demos: + * + * - [CRUD](https://mui.com/toolpad/core/react-crud/) + * + * API: + * + * - [CRUD API](https://mui.com/toolpad/core/api/crud) + */ +function CRUD(props: CRUDProps) { + const { dataSource, rootPath, initialPageSize, defaultValues } = props; + + const listPath = rootPath; + const showPath = `${rootPath}/:id`; + const createPath = `${rootPath}/new`; + const editPath = `${rootPath}/:id/edit`; + + const routerContext = React.useContext(RouterContext); + + const handleRowClick = React.useCallback( + (id: string | number) => { + routerContext?.navigate(`/orders/${String(id)}`); + }, + [routerContext], + ); + + const handleCreateClick = React.useCallback(() => { + routerContext?.navigate('/orders/new'); + }, [routerContext]); + + const handleEditClick = React.useCallback( + (id: string | number) => { + routerContext?.navigate(`/orders/${String(id)}/edit`); + }, + [routerContext], + ); + + const handleCreate = React.useCallback(() => { + routerContext?.navigate('/orders'); + }, [routerContext]); + + const handleEdit = React.useCallback(() => { + routerContext?.navigate('/orders'); + }, [routerContext]); + + const handleDelete = React.useCallback(() => { + routerContext?.navigate('/orders'); + }, [routerContext]); + + const renderedRoute = React.useMemo(() => { + const pathname = routerContext?.pathname ?? ''; + + if (match(listPath)(pathname)) { + return ( + + initialPageSize={initialPageSize} + onRowClick={handleRowClick} + onCreateClick={handleCreateClick} + onEditClick={handleEditClick} + /> + ); + } + if (match(createPath)(pathname)) { + return initialValues={defaultValues} onSubmitSuccess={handleCreate} />; + } + const showMatch = match<{ id: DataModelId }>(showPath)(pathname); + if (showMatch) { + const resourceId = showMatch.params.id; + invariant(resourceId, 'No resource ID present in URL.'); + return id={resourceId} onEditClick={handleEditClick} onDelete={handleDelete} />; + } + const editMatch = match<{ id: DataModelId }>(editPath)(pathname); + if (editMatch) { + const resourceId = editMatch.params.id; + invariant(resourceId, 'No resource ID present in URL.'); + return id={resourceId} onSubmitSuccess={handleEdit} />; + } + return null; + }, [ + createPath, + editPath, + handleCreate, + handleCreateClick, + handleDelete, + handleEdit, + handleEditClick, + handleRowClick, + initialPageSize, + defaultValues, + listPath, + routerContext?.pathname, + showPath, + ]); + + return dataSource={dataSource}>{renderedRoute}; +} + +CRUD.propTypes /* remove-proptypes */ = { + // ┌────────────────────────────── Warning ──────────────────────────────┐ + // │ These PropTypes are generated from the TypeScript type definitions. │ + // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │ + // └─────────────────────────────────────────────────────────────────────┘ + /** + * Server-side data source. + */ + dataSource: PropTypes.object.isRequired, + /** + * Default form values for a new item. + * @default {} + */ + defaultValues: PropTypes.object, + /** + * Initial number of rows to show per page. + * @default 100 + */ + initialPageSize: PropTypes.number, + /** + * Root path to CRUD pages. + */ + rootPath: PropTypes.string.isRequired, +} as any; + +export { CRUD }; diff --git a/packages/toolpad-core/src/CRUD/CRUDProvider.tsx b/packages/toolpad-core/src/CRUD/CRUDProvider.tsx new file mode 100644 index 00000000000..ef0a6ee6fc0 --- /dev/null +++ b/packages/toolpad-core/src/CRUD/CRUDProvider.tsx @@ -0,0 +1,47 @@ +'use client'; +import * as React from 'react'; +import PropTypes from 'prop-types'; +import { DataModel, DataSource } from './shared'; +import { CRUDContext } from '../shared/context'; + +export interface CRUDProviderProps { + /** + * Server-side data source. + */ + dataSource: DataSource; + children?: React.ReactNode; +} +/** + * + * Demos: + * + * - [CRUD](https://mui.com/toolpad/core/react-crud/) + * + * API: + * + * - [CRUDProvider API](https://mui.com/toolpad/core/api/crud-provider) + */ +function CRUDProvider(props: CRUDProviderProps) { + const { dataSource, children } = props; + + return ( + }>{children} + ); +} + +CRUDProvider.propTypes /* remove-proptypes */ = { + // ┌────────────────────────────── Warning ──────────────────────────────┐ + // │ These PropTypes are generated from the TypeScript type definitions. │ + // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │ + // └─────────────────────────────────────────────────────────────────────┘ + /** + * @ignore + */ + children: PropTypes.node, + /** + * Server-side data source. + */ + dataSource: PropTypes.object.isRequired, +} as any; + +export { CRUDProvider }; diff --git a/packages/toolpad-core/src/CRUD/Create.tsx b/packages/toolpad-core/src/CRUD/Create.tsx new file mode 100644 index 00000000000..f42cfd30cc6 --- /dev/null +++ b/packages/toolpad-core/src/CRUD/Create.tsx @@ -0,0 +1,80 @@ +'use client'; +import * as React from 'react'; +import PropTypes from 'prop-types'; +import invariant from 'invariant'; +import { FormPage } from './FormPage'; +import { DataModel, DataSource } from './shared'; +import { CRUDContext } from '../shared/context'; + +export interface CreateProps { + /** + * Server-side data source. + */ + dataSource?: DataSource & Required, 'createOne'>>; + /** + * Initial form values. + * @default {} + */ + initialValues?: Omit; + /** + * Callback fired when the form is successfully submitted. + */ + onSubmitSuccess?: () => void; +} +/** + * + * Demos: + * + * - [CRUD](https://mui.com/toolpad/core/react-crud/) + * + * API: + * + * - [Create API](https://mui.com/toolpad/core/api/create) + */ +function Create(props: CreateProps) { + const { initialValues, onSubmitSuccess } = props; + + const crudContext = React.useContext(CRUDContext); + const dataSource = (props.dataSource ?? crudContext.dataSource) as Exclude< + typeof props.dataSource, + undefined + >; + + invariant(dataSource, 'No data source found.'); + + return ( + + ); +} + +Create.propTypes /* remove-proptypes */ = { + // ┌────────────────────────────── Warning ──────────────────────────────┐ + // │ These PropTypes are generated from the TypeScript type definitions. │ + // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │ + // └─────────────────────────────────────────────────────────────────────┘ + /** + * Server-side data source. + */ + dataSource: PropTypes.object, + /** + * Initial form values. + * @default {} + */ + initialValues: PropTypes.object, + /** + * Callback fired when the form is successfully submitted. + */ + onSubmitSuccess: PropTypes.func, +} as any; + +export { Create }; diff --git a/packages/toolpad-core/src/CRUD/Edit.tsx b/packages/toolpad-core/src/CRUD/Edit.tsx new file mode 100644 index 00000000000..178a3b3baed --- /dev/null +++ b/packages/toolpad-core/src/CRUD/Edit.tsx @@ -0,0 +1,130 @@ +'use client'; +import * as React from 'react'; +import PropTypes from 'prop-types'; +import Alert from '@mui/material/Alert'; +import Box from '@mui/material/Box'; +import CircularProgress from '@mui/material/CircularProgress'; +import invariant from 'invariant'; +import { FormPage } from './FormPage'; +import { DataModel, DataModelId, DataSource } from './shared'; +import { CRUDContext } from '../shared/context'; + +export interface EditProps { + id: DataModelId; + /** + * Server-side data source. + */ + dataSource?: DataSource & Required, 'getOne' | 'updateOne'>>; + /** + * Callback fired when the form is successfully submitted. + */ + onSubmitSuccess?: () => void; +} +/** + * + * Demos: + * + * - [CRUD](https://mui.com/toolpad/core/react-crud/) + * + * API: + * + * - [Edit API](https://mui.com/toolpad/core/api/edit) + */ +function Edit(props: EditProps) { + const { id, onSubmitSuccess } = props; + + const crudContext = React.useContext(CRUDContext); + const dataSource = (props.dataSource ?? crudContext.dataSource) as Exclude< + typeof props.dataSource, + undefined + >; + + invariant(dataSource, 'No data source found.'); + + const { fields, ...methods } = dataSource; + const { getOne } = methods; + + const [data, setData] = React.useState(null); + const [isLoading, setIsLoading] = React.useState(false); + const [error, setError] = React.useState(null); + + const loadData = React.useCallback(async () => { + setError(null); + setIsLoading(true); + try { + const showData = await getOne(id); + setData(showData); + } catch (showDataError) { + setError(showDataError as Error); + } + setIsLoading(false); + }, [getOne, id]); + + React.useEffect(() => { + loadData(); + }, [loadData]); + + const renderEdit = React.useMemo(() => { + if (isLoading) { + return ( + + + + ); + } + if (error) { + return ( + + {error.message} + + ); + } + + return data ? ( + + ) : null; + }, [data, dataSource, error, isLoading, onSubmitSuccess]); + + return {renderEdit}; +} + +Edit.propTypes /* remove-proptypes */ = { + // ┌────────────────────────────── Warning ──────────────────────────────┐ + // │ These PropTypes are generated from the TypeScript type definitions. │ + // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │ + // └─────────────────────────────────────────────────────────────────────┘ + /** + * Server-side data source. + */ + dataSource: PropTypes.object, + /** + * @ignore + */ + id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + /** + * Callback fired when the form is successfully submitted. + */ + onSubmitSuccess: PropTypes.func, +} as any; + +export { Edit }; diff --git a/packages/toolpad-core/src/CRUD/FormPage.tsx b/packages/toolpad-core/src/CRUD/FormPage.tsx new file mode 100644 index 00000000000..b12cc141f2a --- /dev/null +++ b/packages/toolpad-core/src/CRUD/FormPage.tsx @@ -0,0 +1,340 @@ +'use client'; +import * as React from 'react'; +import PropTypes from 'prop-types'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Checkbox from '@mui/material/Checkbox'; +import FormControl from '@mui/material/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormGroup from '@mui/material/FormGroup'; +import FormHelperText from '@mui/material/FormHelperText'; +import Grid from '@mui/material/Grid2'; +import InputLabel from '@mui/material/InputLabel'; +import MenuItem from '@mui/material/MenuItem'; +import Select, { SelectChangeEvent } from '@mui/material/Select'; +import TextField from '@mui/material/TextField'; +import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; +import { DatePicker } from '@mui/x-date-pickers/DatePicker'; +import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker'; +import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; +import type { GridColDef, GridSingleSelectColDef } from '@mui/x-data-grid'; +import dayjs, { Dayjs } from 'dayjs'; +import { useNotifications } from '../useNotifications'; +import { DataModel, DataSource } from './shared'; + +interface FormPageLocaleText { + submitButtonLabel: string; + submitSuccessMessage: string; + submitErrorMessage: string; +} + +export interface FormPageProps { + dataSource: + | (DataSource & Required, 'createOne'>>) + | (DataSource & Required, 'updateOne'>>); + initialValues?: Omit; + submitMethodName: 'createOne' | 'updateOne'; + onSubmitSuccess?: () => void; + localeText: FormPageLocaleText; +} + +/** + * @ignore - internal component. + */ +function FormPage(props: FormPageProps) { + const { + dataSource, + initialValues = {} as Omit, + submitMethodName, + onSubmitSuccess, + localeText, + } = props; + const { fields, validate, ...methods } = dataSource; + + const submitMethod = methods[submitMethodName] as (data: Omit) => Promise; + + const notifications = useNotifications(); + + const [formState, setFormState] = React.useState<{ + values: Omit; + errors: Partial>; + }>({ + values: initialValues, + errors: {}, + }); + const formValues = formState.values; + const formErrors = formState.errors; + + const setFormValues = React.useCallback((newFormValues: Omit) => { + setFormState((previousState) => ({ + ...previousState, + values: newFormValues, + })); + }, []); + + const setFormErrors = React.useCallback((newFormErrors: Partial>) => { + setFormState((previousState) => ({ + ...previousState, + errors: newFormErrors, + })); + }, []); + + const handleFormFieldChange = React.useCallback( + (name: keyof D, value: string | number | boolean | File | null) => { + const validateField = async (values: Omit) => { + const errors = await validate(values); + setFormErrors({ ...formErrors, [name]: errors[name] }); + }; + + const newFormValues = { ...formValues, [name]: value }; + + setFormValues(newFormValues); + validateField(newFormValues); + }, + [formErrors, formValues, setFormErrors, setFormValues, validate], + ); + + const handleFormReset = React.useCallback(() => { + setFormValues(initialValues); + }, [initialValues, setFormValues]); + + const [, submitAction, isSubmitting] = React.useActionState(async () => { + const errors = await validate(formValues); + if (Object.keys(errors).length > 0) { + setFormErrors(errors); + return new Error('Form validation failed'); + } + setFormErrors({}); + + try { + await submitMethod(formValues); + notifications.show(localeText.submitSuccessMessage, { + severity: 'success', + autoHideDuration: 3000, + }); + + if (onSubmitSuccess) { + onSubmitSuccess(); + } + + handleFormReset(); + } catch (createError) { + notifications.show(`${localeText.submitErrorMessage}\n${(createError as Error).message}`, { + severity: 'error', + autoHideDuration: 3000, + }); + return createError as Error; + } + + return null; + }, null); + + const handleTextFieldChange = React.useCallback( + (event: React.ChangeEvent) => { + handleFormFieldChange(event.target.name, event.target.value); + }, + [handleFormFieldChange], + ); + + const handleNumberFieldChange = React.useCallback( + (event: React.ChangeEvent) => { + handleFormFieldChange(event.target.name, Number(event.target.value)); + }, + [handleFormFieldChange], + ); + + const handleCheckboxFieldChange = React.useCallback( + (event: React.ChangeEvent, checked: boolean) => { + handleFormFieldChange(event.target.name, checked); + }, + [handleFormFieldChange], + ); + + const handleDateFieldChange = React.useCallback( + (name: string) => (value: Dayjs | null) => { + handleFormFieldChange(name, value?.toISOString() ?? null); + }, + [handleFormFieldChange], + ); + + const handleSelectFieldChange = React.useCallback( + (event: SelectChangeEvent) => { + handleFormFieldChange(event.target.name, event.target.value); + }, + [handleFormFieldChange], + ); + + const renderField = React.useCallback( + (formField: GridColDef) => { + const { field, type, headerName } = formField; + + const fieldValue = formValues[field]; + const fieldError = formErrors[field]; + + let fieldElement = ( + + ); + if (type === 'number') { + fieldElement = ( + + ); + } + if (type === 'boolean') { + fieldElement = ( + + + } + label={headerName} + /> + {fieldError ?? ' '} + + ); + } + if (type === 'date') { + fieldElement = ( + + + + ); + } + if (type === 'dateTime') { + fieldElement = ( + + + + ); + } + if (type === 'singleSelect') { + const { getOptionValue, getOptionLabel, valueOptions } = + formField as GridSingleSelectColDef; + + if (valueOptions && Array.isArray(valueOptions)) { + const labelId = `${field}-label`; + + fieldElement = ( + + {headerName} + + {fieldError ?? ' '} + + ); + } + } + + return ( + + {fieldElement} + + ); + }, + [ + formErrors, + formValues, + handleCheckboxFieldChange, + handleDateFieldChange, + handleNumberFieldChange, + handleSelectFieldChange, + handleTextFieldChange, + ], + ); + + return ( + + + + {fields.filter(({ field }) => field !== 'id').map(renderField)} + + + + + + + ); +} + +FormPage.propTypes /* remove-proptypes */ = { + // ┌────────────────────────────── Warning ──────────────────────────────┐ + // │ These PropTypes are generated from the TypeScript type definitions. │ + // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │ + // └─────────────────────────────────────────────────────────────────────┘ + /** + * Server-side data source. + */ + dataSource: PropTypes.object.isRequired, +} as any; + +export { FormPage }; diff --git a/packages/toolpad-core/src/CRUD/List.tsx b/packages/toolpad-core/src/CRUD/List.tsx new file mode 100644 index 00000000000..a1881c1d6e3 --- /dev/null +++ b/packages/toolpad-core/src/CRUD/List.tsx @@ -0,0 +1,390 @@ +'use client'; +import * as React from 'react'; +import PropTypes from 'prop-types'; +import { styled } from '@mui/material'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import IconButton from '@mui/material/IconButton'; +import Stack from '@mui/material/Stack'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import { + DataGrid, + GridToolbar, + GridActionsCellItem, + DataGridProps, + GridColDef, + GridFilterModel, + GridPaginationModel, + GridSortModel, + GridEventListener, +} from '@mui/x-data-grid'; +import AddIcon from '@mui/icons-material/Add'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import EditIcon from '@mui/icons-material/Edit'; +import DeleteIcon from '@mui/icons-material/Delete'; +import invariant from 'invariant'; +import { useDialogs } from '../useDialogs'; +import { useNotifications } from '../useNotifications'; +import { DataModel, DataModelId, DataSource } from './shared'; +import { CRUDContext, RouterContext } from '../shared/context'; + +const ErrorOverlay = styled('div')(({ theme }) => ({ + position: 'absolute', + backgroundColor: theme.palette.error.light, + borderRadius: '4px', + top: 0, + height: '100%', + width: '100%', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + textAlign: 'center', + p: 1, + zIndex: 10, +})); + +export interface ListSlotProps { + dataGrid?: DataGridProps; +} + +export interface ListSlots { + /** + * The DataGrid component used to list the items. + * @default DataGrid + */ + dataGrid?: React.JSXElementConstructor; +} + +export interface ListProps { + /** + * Server-side data source. + */ + dataSource?: DataSource & Required, 'getMany'>>; + /** + * Initial number of rows to show per page. + * @default 100 + */ + initialPageSize?: number; + /** + * Callback fired when a row is clicked. Not called if the target clicked is an interactive element added by the built-in columns. + */ + onRowClick?: (id: DataModelId) => void; + /** + * Callback fired when the "Create" button is clicked. + */ + onCreateClick?: () => void; + /** + * Callback fired when the "Edit" button is clicked. + */ + onEditClick?: (id: DataModelId) => void; + /** + * The components used for each slot inside. + * @default {} + */ + slots?: ListSlots; + /** + * The props used for each slot inside. + * @default {} + */ + slotProps?: ListSlotProps; +} +/** + * + * Demos: + * + * - [CRUD](https://mui.com/toolpad/core/react-crud/) + * + * API: + * + * - [List API](https://mui.com/toolpad/core/api/list) + */ +function List(props: ListProps) { + const { initialPageSize = 100, onRowClick, onCreateClick, onEditClick, slots, slotProps } = props; + + const crudContext = React.useContext(CRUDContext); + const dataSource = (props.dataSource ?? crudContext.dataSource) as Exclude< + typeof props.dataSource, + undefined + >; + + invariant(dataSource, 'No data source found.'); + + const { fields, ...methods } = dataSource; + const { getMany, deleteOne } = methods; + + const routerContext = React.useContext(RouterContext); + + const dialogs = useDialogs(); + const notifications = useNotifications(); + + const [rowsState, setRowsState] = React.useState<{ rows: D[]; rowCount: number }>({ + rows: [], + rowCount: 0, + }); + + const [paginationModel, setPaginationModel] = React.useState({ + page: routerContext?.searchParams.get('page') + ? Number(routerContext?.searchParams.get('page')) + : 0, + pageSize: routerContext?.searchParams.get('pageSize') + ? Number(routerContext?.searchParams.get('pageSize')) + : initialPageSize, + }); + const [filterModel, setFilterModel] = React.useState( + routerContext?.searchParams.get('filter') + ? JSON.parse(routerContext?.searchParams.get('filter') ?? '') + : { items: [] }, + ); + const [sortModel, setSortModel] = React.useState( + routerContext?.searchParams.get('sort') + ? JSON.parse(routerContext?.searchParams.get('sort') ?? '') + : [], + ); + + const [isLoading, setIsLoading] = React.useState(true); + const [error, setError] = React.useState(null); + + React.useEffect(() => { + const url = new URL(window.location.href); + + url.searchParams.set('page', String(paginationModel.page)); + url.searchParams.set('pageSize', String(paginationModel.pageSize)); + + window.history.pushState({}, '', url); + }, [paginationModel]); + + React.useEffect(() => { + const url = new URL(window.location.href); + + if ( + filterModel.items.length > 0 || + (filterModel.quickFilterValues && filterModel.quickFilterValues.length > 0) + ) { + url.searchParams.set('filter', JSON.stringify(filterModel)); + } else { + url.searchParams.delete('filter'); + } + + window.history.pushState({}, '', url); + }, [filterModel]); + + React.useEffect(() => { + const url = new URL(window.location.href); + + if (sortModel.length > 0) { + url.searchParams.set('sort', JSON.stringify(sortModel)); + } else { + url.searchParams.delete('sort'); + } + + window.history.pushState({}, '', url); + }, [sortModel]); + + const loadData = React.useCallback(async () => { + setError(null); + setIsLoading(true); + try { + const listData = await getMany({ + paginationModel, + sortModel, + filterModel, + }); + setRowsState({ + rows: listData.items, + rowCount: listData.itemCount, + }); + } catch (listDataError) { + setError(listDataError as Error); + } + setIsLoading(false); + }, [filterModel, getMany, paginationModel, sortModel]); + + React.useEffect(() => { + loadData(); + }, [filterModel, getMany, loadData, paginationModel, sortModel]); + + const handleRefresh = React.useCallback(() => { + if (!isLoading) { + loadData(); + } + }, [isLoading, loadData]); + + const handleRowClick = React.useCallback>( + ({ row }) => { + if (onRowClick) { + onRowClick(row.id); + } + }, + [onRowClick], + ); + + const handleItemEdit = React.useCallback( + (itemId: DataModelId) => () => { + if (onEditClick) { + onEditClick(itemId); + } + }, + [onEditClick], + ); + + const handleItemDelete = React.useCallback( + (itemId: DataModelId) => async () => { + const confirmed = await dialogs.confirm(`Do you wish to delete item "${itemId}"?`, { + title: 'Delete item?', + severity: 'error', + okText: 'Delete', + cancelText: 'Cancel', + }); + + if (confirmed) { + setIsLoading(true); + try { + await deleteOne?.(itemId); + notifications.show('Item deleted successfully.', { + severity: 'success', + autoHideDuration: 3000, + }); + loadData(); + } catch (deleteError) { + notifications.show(`Failed to delete item. Reason: ${(deleteError as Error).message}`, { + severity: 'error', + autoHideDuration: 3000, + }); + } + setIsLoading(false); + } + }, + [deleteOne, dialogs, loadData, notifications], + ); + + const DataGridSlot = slots?.dataGrid ?? DataGrid; + + const initialState = React.useMemo( + () => ({ + pagination: { paginationModel: { pageSize: initialPageSize } }, + }), + [initialPageSize], + ); + + const columns = React.useMemo(() => { + return [ + ...fields, + { + field: 'actions', + type: 'actions', + flex: 1, + align: 'right', + getActions: ({ id }) => [ + ...(onEditClick + ? [ + } + label="Edit" + onClick={handleItemEdit(id)} + />, + ] + : []), + ...(deleteOne + ? [ + } + label="Delete" + onClick={handleItemDelete(id)} + />, + ] + : []), + ], + }, + ]; + }, [deleteOne, fields, handleItemDelete, handleItemEdit, onEditClick]); + + return ( + + + +
+ + + +
+
+ {onCreateClick ? ( + + ) : null} +
+ + + {error && ( + + {error.message} + + )} + +
+ ); +} + +List.propTypes /* remove-proptypes */ = { + // ┌────────────────────────────── Warning ──────────────────────────────┐ + // │ These PropTypes are generated from the TypeScript type definitions. │ + // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │ + // └─────────────────────────────────────────────────────────────────────┘ + /** + * Server-side data source. + */ + dataSource: PropTypes.object, + /** + * Initial number of rows to show per page. + * @default 100 + */ + initialPageSize: PropTypes.number, + /** + * Callback fired when the "Create" button is clicked. + */ + onCreateClick: PropTypes.func, + /** + * Callback fired when the "Edit" button is clicked. + */ + onEditClick: PropTypes.func, + /** + * Callback fired when a row is clicked. Not called if the target clicked is an interactive element added by the built-in columns. + */ + onRowClick: PropTypes.func, + /** + * The props used for each slot inside. + * @default {} + */ + slotProps: PropTypes.shape({ + dataGrid: PropTypes.object, + }), + /** + * The components used for each slot inside. + * @default {} + */ + slots: PropTypes.shape({ + dataGrid: PropTypes.elementType, + }), +} as any; + +export { List }; diff --git a/packages/toolpad-core/src/CRUD/Show.tsx b/packages/toolpad-core/src/CRUD/Show.tsx new file mode 100644 index 00000000000..edca0aa5aab --- /dev/null +++ b/packages/toolpad-core/src/CRUD/Show.tsx @@ -0,0 +1,261 @@ +'use client'; +import * as React from 'react'; +import PropTypes from 'prop-types'; +import Alert from '@mui/material/Alert'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import CircularProgress from '@mui/material/CircularProgress'; +import Divider from '@mui/material/Divider'; +import Grid from '@mui/material/Grid2'; +import Paper from '@mui/material/Paper'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import EditIcon from '@mui/icons-material/Edit'; +import DeleteIcon from '@mui/icons-material/Delete'; +import type { GridColDef } from '@mui/x-data-grid'; +import invariant from 'invariant'; +import dayjs from 'dayjs'; +import { useDialogs } from '../useDialogs'; +import { useNotifications } from '../useNotifications'; +import { DataModel, DataModelId, DataSource } from './shared'; +import { CRUDContext } from '../shared/context'; + +export interface ShowProps { + id: DataModelId; + /** + * Server-side data source. + */ + dataSource?: DataSource & Required, 'getOne'>>; + /** + * Callback fired when the "Edit" button is clicked. + */ + onEditClick?: (id: DataModelId) => void; + /** + * Callback fired when the item is successfully deleted. + */ + onDelete?: (id: DataModelId) => void; +} +/** + * + * Demos: + * + * - [CRUD](https://mui.com/toolpad/core/react-crud/) + * + * API: + * + * - [Show API](https://mui.com/toolpad/core/api/show) + */ +function Show(props: ShowProps) { + const { id, onEditClick, onDelete } = props; + + const crudContext = React.useContext(CRUDContext); + const dataSource = (props.dataSource ?? crudContext.dataSource) as Exclude< + typeof props.dataSource, + undefined + >; + + invariant(dataSource, 'No data source found.'); + + const { fields, ...methods } = dataSource; + const { getOne, deleteOne } = methods; + + const dialogs = useDialogs(); + const notifications = useNotifications(); + + const [data, setData] = React.useState(null); + const [isLoading, setIsLoading] = React.useState(false); + const [error, setError] = React.useState(null); + + const [hasDeleted, setHasDeleted] = React.useState(false); + + const loadData = React.useCallback(async () => { + setError(null); + setIsLoading(true); + try { + const showData = await getOne(id); + setData(showData); + } catch (showDataError) { + setError(showDataError as Error); + } + setIsLoading(false); + }, [getOne, id]); + + React.useEffect(() => { + loadData(); + }, [loadData]); + + const handleItemEdit = React.useCallback(() => { + if (onEditClick) { + onEditClick(id); + } + }, [id, onEditClick]); + + const handleItemDelete = React.useCallback(async () => { + const confirmed = await dialogs.confirm(`Do you wish to delete item "${id}"?`, { + title: 'Delete item?', + severity: 'error', + okText: 'Delete', + cancelText: 'Cancel', + }); + + if (confirmed) { + setIsLoading(true); + try { + await deleteOne?.(id); + + if (onDelete) { + onDelete(id); + } + + notifications.show('Item deleted successfully.', { + severity: 'success', + autoHideDuration: 3000, + }); + + setHasDeleted(true); + } catch (deleteError) { + notifications.show(`Failed to delete item. Reason: ${(deleteError as Error).message}`, { + severity: 'error', + autoHideDuration: 3000, + }); + } + setIsLoading(false); + } + }, [deleteOne, dialogs, id, notifications, onDelete]); + + const renderField = React.useCallback( + (showField: GridColDef) => { + if (!data) { + return '…'; + } + + const { field, type } = showField; + const fieldValue = data[field]; + + if (type === 'boolean') { + return fieldValue ? 'Yes' : 'No'; + } + if (type === 'date') { + return fieldValue ? dayjs(fieldValue as string).format('MMMM D, YYYY') : '-'; + } + if (type === 'dateTime') { + return fieldValue ? dayjs(fieldValue as string).format('MMMM D, YYYY h:mm A') : '-'; + } + + return String(fieldValue) ?? '-'; + }, + [data], + ); + + const renderShow = React.useMemo(() => { + if (isLoading) { + return ( + + + + ); + } + if (error) { + return ( + + {error.message} + + ); + } + + if (hasDeleted) { + return ( + + This item has been deleted. + + ); + } + + return data ? ( + + + {fields.map((showField) => { + const { field, headerName } = showField; + + return ( + + + {headerName} + + {renderField(showField)} + + + + ); + })} + + + + {onEditClick ? ( + + ) : null} + {deleteOne ? ( + + ) : null} + + + ) : null; + }, [ + data, + deleteOne, + error, + fields, + handleItemDelete, + handleItemEdit, + hasDeleted, + isLoading, + onEditClick, + renderField, + ]); + + return {renderShow}; +} + +Show.propTypes /* remove-proptypes */ = { + // ┌────────────────────────────── Warning ──────────────────────────────┐ + // │ These PropTypes are generated from the TypeScript type definitions. │ + // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │ + // └─────────────────────────────────────────────────────────────────────┘ + /** + * Server-side data source. + */ + dataSource: PropTypes.object, + /** + * @ignore + */ + id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, + /** + * Callback fired when the item is successfully deleted. + */ + onDelete: PropTypes.func, + /** + * Callback fired when the "Edit" button is clicked. + */ + onEditClick: PropTypes.func, +} as any; + +export { Show }; diff --git a/packages/toolpad-core/src/CRUD/index.ts b/packages/toolpad-core/src/CRUD/index.ts new file mode 100644 index 00000000000..937e88579b0 --- /dev/null +++ b/packages/toolpad-core/src/CRUD/index.ts @@ -0,0 +1,10 @@ +export * from './List'; +export * from './Show'; +export * from './Create'; +export * from './Edit'; + +export * from './CRUDProvider'; + +export * from './CRUD'; + +export * from './shared'; diff --git a/packages/toolpad-core/src/CRUD/shared.ts b/packages/toolpad-core/src/CRUD/shared.ts new file mode 100644 index 00000000000..200bdafc5f9 --- /dev/null +++ b/packages/toolpad-core/src/CRUD/shared.ts @@ -0,0 +1,29 @@ +import { GridColDef, GridFilterModel, GridPaginationModel, GridSortModel } from '@mui/x-data-grid'; + +export type DataModelId = string | number; + +export interface DataModel { + id: DataModelId; + [key: string]: unknown; +} + +export interface GetManyParams { + paginationModel: GridPaginationModel; + sortModel: GridSortModel; + filterModel: GridFilterModel; +} + +export interface DataSource { + fields: GridColDef[]; + getMany?: (params: GetManyParams) => Promise<{ items: D[]; itemCount: number }>; + getOne?: (id: DataModelId) => Promise; + createOne?: (data: Omit) => Promise; + updateOne?: (data: D) => Promise; + deleteOne?: (id: DataModelId) => Promise; + /** + * Function to validate form values. Returns object with error strings for each field. + */ + validate: ( + formValues: Omit, + ) => Partial> | Promise>>; +} diff --git a/packages/toolpad-core/src/index.ts b/packages/toolpad-core/src/index.ts index 123c479d6c3..56106095a76 100644 --- a/packages/toolpad-core/src/index.ts +++ b/packages/toolpad-core/src/index.ts @@ -8,6 +8,8 @@ export * from './Account'; export * from './PageContainer'; +export * from './CRUD'; + export * from './useActivePage'; export * from './useDialogs'; diff --git a/packages/toolpad-core/src/shared/context.ts b/packages/toolpad-core/src/shared/context.ts index 0b3a25323c3..280cfcd6866 100644 --- a/packages/toolpad-core/src/shared/context.ts +++ b/packages/toolpad-core/src/shared/context.ts @@ -1,6 +1,8 @@ import * as React from 'react'; import type { PaletteMode } from '@mui/material'; import type { Branding, Navigation, Router } from '../AppProvider'; +import type { DataModel } from '../CRUD'; +import type { CRUDProviderProps } from '../CRUD/CRUDProvider'; export const BrandingContext = React.createContext(null); @@ -19,3 +21,9 @@ export const PaletteModeContext = React.createContext<{ export const RouterContext = React.createContext(null); export const WindowContext = React.createContext(undefined); + +export const CRUDContext = React.createContext<{ + dataSource: CRUDProviderProps['dataSource'] | null; +}>({ + dataSource: null, +}); diff --git a/packages/toolpad-studio-components/package.json b/packages/toolpad-studio-components/package.json index 7c217e07d48..874b6930571 100644 --- a/packages/toolpad-studio-components/package.json +++ b/packages/toolpad-studio-components/package.json @@ -41,9 +41,9 @@ "url": "https://github.com/mui/toolpad/issues" }, "dependencies": { - "@mui/icons-material": "6.3.1", + "@mui/icons-material": "6.4.1", "@mui/lab": "6.0.0-beta.22", - "@mui/material": "6.3.1", + "@mui/material": "6.4.1", "@mui/x-charts": "7.25.0", "@mui/x-data-grid-premium": "7.25.0", "@mui/x-date-pickers": "7.25.0", diff --git a/packages/toolpad-studio-runtime/package.json b/packages/toolpad-studio-runtime/package.json index ea41f110c19..80679d2ef6d 100644 --- a/packages/toolpad-studio-runtime/package.json +++ b/packages/toolpad-studio-runtime/package.json @@ -44,7 +44,7 @@ }, "dependencies": { "@auth/core": "0.37.4", - "@mui/material": "6.3.1", + "@mui/material": "6.4.1", "@tanstack/react-query": "5.61.3", "@toolpad/utils": "workspace:*", "@types/json-schema": "7.0.15", diff --git a/packages/toolpad-studio/package.json b/packages/toolpad-studio/package.json index 7fb23d76216..71e05f462ed 100644 --- a/packages/toolpad-studio/package.json +++ b/packages/toolpad-studio/package.json @@ -63,12 +63,12 @@ "@emotion/styled": "11.14.0", "@googleapis/drive": "8.14.0", "@googleapis/sheets": "9.3.1", - "@mui/icons-material": "6.3.1", + "@mui/icons-material": "6.4.1", "@mui/lab": "6.0.0-beta.22", - "@mui/material": "6.3.1", - "@mui/system": "6.3.1", + "@mui/material": "6.4.1", + "@mui/system": "6.4.1", "@mui/types": "7.2.21", - "@mui/utils": "6.3.1", + "@mui/utils": "6.4.1", "@mui/x-charts": "7.25.0", "@mui/x-data-grid": "7.25.0", "@mui/x-data-grid-premium": "7.25.0", diff --git a/playground/nextjs-pages/package.json b/playground/nextjs-pages/package.json index 9a415391308..28f3c11f382 100644 --- a/playground/nextjs-pages/package.json +++ b/playground/nextjs-pages/package.json @@ -9,8 +9,8 @@ "devDependencies": { "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", - "@mui/icons-material": "6.3.1", - "@mui/material": "6.3.1", + "@mui/icons-material": "6.4.1", + "@mui/material": "6.4.1", "@mui/material-nextjs": "6.3.1", "@toolpad/core": "workspace:*", "@types/react": "^19.0.8", diff --git a/playground/nextjs/package.json b/playground/nextjs/package.json index 87016f9f4b0..de70550ac45 100644 --- a/playground/nextjs/package.json +++ b/playground/nextjs/package.json @@ -9,8 +9,8 @@ "devDependencies": { "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", - "@mui/icons-material": "6.3.1", - "@mui/material": "6.3.1", + "@mui/icons-material": "6.4.1", + "@mui/material": "6.4.1", "@mui/material-nextjs": "6.3.1", "@toolpad/core": "workspace:*", "@types/node": "^20.17.16", diff --git a/playground/vite/package.json b/playground/vite/package.json index 2e209678f06..05e01163fda 100644 --- a/playground/vite/package.json +++ b/playground/vite/package.json @@ -10,8 +10,8 @@ "devDependencies": { "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", - "@mui/icons-material": "6.3.1", - "@mui/material": "6.3.1", + "@mui/icons-material": "6.4.1", + "@mui/material": "6.4.1", "@toolpad/core": "workspace:*", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", @@ -19,6 +19,7 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "react-router": "7.1.5", - "vite": "5.4.12" + "vite": "5.4.12", + "yup": "1.6.1" } } diff --git a/playground/vite/src/App.tsx b/playground/vite/src/App.tsx index ea7cb04796c..cc27100e129 100644 --- a/playground/vite/src/App.tsx +++ b/playground/vite/src/App.tsx @@ -18,6 +18,7 @@ const NAVIGATION: Navigation = [ segment: 'orders', title: 'Orders', icon: , + pattern: 'orders{/:orderId}*', }, ]; diff --git a/playground/vite/src/data/orders.ts b/playground/vite/src/data/orders.ts new file mode 100644 index 00000000000..9d731a81776 --- /dev/null +++ b/playground/vite/src/data/orders.ts @@ -0,0 +1,186 @@ +import { DataSource } from '@toolpad/core/CRUD'; +import * as yup from 'yup'; +import yupAdapter from '../validationAdapters/yupAdapter'; + +type OrderStatus = 'pending' | 'sent'; +export interface Order extends Record { + id: number; + title: string; + status: OrderStatus; + itemCount: number; + fastDelivery: boolean; + createdAt: string; + deliveryTime: string; +} + +const getOrdersStore = (): Order[] => { + const value = localStorage.getItem('orders-store'); + return value ? JSON.parse(value) : []; +}; + +const setOrdersStore = (value: Order[]) => { + return localStorage.setItem('orders-store', JSON.stringify(value)); +}; + +export const ordersDataSource: Required> = { + fields: [ + { field: 'id', headerName: 'ID' }, + { field: 'title', headerName: 'Title' }, + { + field: 'status', + headerName: 'Status', + type: 'singleSelect', + valueOptions: ['pending', 'fulfilled'], + }, + { field: 'itemCount', headerName: 'No. of items', type: 'number' }, + { field: 'fastDelivery', headerName: 'Fast delivery', type: 'boolean' }, + { + field: 'createdAt', + headerName: 'Created at', + type: 'date', + valueGetter: (value: string) => value && new Date(value), + }, + { + field: 'deliveryTime', + headerName: 'Delivery time', + type: 'dateTime', + valueGetter: (value: string) => value && new Date(value), + }, + ], + getMany: async ({ paginationModel, filterModel, sortModel }) => { + return new Promise<{ items: Order[]; itemCount: number }>((resolve) => { + setTimeout(() => { + const ordersStore = getOrdersStore(); + + let filteredOrders = [...ordersStore]; + + // Apply filters + if (filterModel?.items?.length) { + filterModel.items.forEach(({ field, value, operator }) => { + if (!field || value == null) { + return; + } + + filteredOrders = filteredOrders.filter((order) => { + const orderValue = order[field]; + + switch (operator) { + case 'contains': + return String(orderValue).toLowerCase().includes(String(value).toLowerCase()); + case 'equals': + return orderValue === value; + case 'startsWith': + return String(orderValue).toLowerCase().startsWith(String(value).toLowerCase()); + case 'endsWith': + return String(orderValue).toLowerCase().endsWith(String(value).toLowerCase()); + case '>': + return (orderValue as number) > value; + case '<': + return (orderValue as number) < value; + default: + return true; + } + }); + }); + } + + // Apply sorting + if (sortModel?.length) { + filteredOrders.sort((a, b) => { + for (const { field, sort } of sortModel) { + if ((a[field] as number) < (b[field] as number)) { + return sort === 'asc' ? -1 : 1; + } + if ((a[field] as number) > (b[field] as number)) { + return sort === 'asc' ? 1 : -1; + } + } + return 0; + }); + } + + // Apply pagination + const start = paginationModel.page * paginationModel.pageSize; + const end = start + paginationModel.pageSize; + const paginatedOrders = filteredOrders.slice(start, end); + + resolve({ + items: paginatedOrders, + itemCount: filteredOrders.length, + }); + }, 1500); + }); + }, + getOne: (orderId) => { + return new Promise((resolve, reject) => { + setTimeout(() => { + const ordersStore = getOrdersStore(); + + const orderToShow = ordersStore.find((order) => order.id === Number(orderId)); + + if (orderToShow) { + resolve(orderToShow); + } else { + reject(new Error('Order not found')); + } + }, 1500); + }); + }, + createOne: (data) => { + return new Promise((resolve) => { + setTimeout(() => { + const ordersStore = getOrdersStore(); + + const newOrder = { id: ordersStore.length + 1, ...data } as Order; + + setOrdersStore([...ordersStore, newOrder]); + + resolve(newOrder); + }, 1500); + }); + }, + updateOne: (data) => { + return new Promise((resolve, reject) => { + setTimeout(() => { + const ordersStore = getOrdersStore(); + + let updatedOrder: Order | null = null; + + setOrdersStore( + ordersStore.map((order) => { + if (order.id === data.id) { + updatedOrder = { ...order, ...data }; // Preserve existing fields + return updatedOrder; + } + return order; + }), + ); + + if (updatedOrder) { + resolve(updatedOrder); + } else { + reject(new Error('Order not found')); + } + }, 1500); + }); + }, + deleteOne: (id) => { + return new Promise((resolve) => { + setTimeout(() => { + const ordersStore = getOrdersStore(); + + setOrdersStore(ordersStore.filter((order) => order.id !== id)); + + resolve(); + }, 1500); + }); + }, + validate: yupAdapter( + yup.object({ + title: yup.string().required('Title is required'), + status: yup.string().required('Status is required'), + itemCount: yup.number().min(1, 'Item count must be at least 1'), + createdAt: yup.string().required('Creation date is required'), + }), + ), +}; diff --git a/playground/vite/src/layouts/dashboard.tsx b/playground/vite/src/layouts/dashboard.tsx index 84b8584f7c6..4ae22979981 100644 --- a/playground/vite/src/layouts/dashboard.tsx +++ b/playground/vite/src/layouts/dashboard.tsx @@ -1,12 +1,28 @@ import * as React from 'react'; -import { Outlet } from 'react-router'; +import { Outlet, useLocation, useParams, matchPath } from 'react-router'; import { DashboardLayout } from '@toolpad/core/DashboardLayout'; import { PageContainer } from '@toolpad/core/PageContainer'; export default function Layout() { + const location = useLocation(); + const { orderId } = useParams(); + + const title = React.useMemo(() => { + if (location.pathname === '/orders/new') { + return 'New Order'; + } + if (matchPath('/orders/:orderId/edit', location.pathname)) { + return `Order ${orderId} - Edit`; + } + if (orderId) { + return `Order ${orderId}`; + } + return undefined; + }, [location.pathname, orderId]); + return ( - + diff --git a/playground/vite/src/main.tsx b/playground/vite/src/main.tsx index cee7678c361..6eddeb935f5 100644 --- a/playground/vite/src/main.tsx +++ b/playground/vite/src/main.tsx @@ -4,7 +4,7 @@ import { createBrowserRouter, RouterProvider } from 'react-router'; import App from './App'; import Layout from './layouts/dashboard'; import DashboardPage from './pages'; -import OrdersPage from './pages/orders'; +import OrdersCRUDPage from './pages/orders'; const router = createBrowserRouter([ { @@ -19,8 +19,12 @@ const router = createBrowserRouter([ Component: DashboardPage, }, { - path: 'orders', - Component: OrdersPage, + path: 'orders/*', + Component: OrdersCRUDPage, + }, + { + path: 'orders/:orderId/*', + Component: OrdersCRUDPage, }, ], }, diff --git a/playground/vite/src/pages/orders.tsx b/playground/vite/src/pages/orders.tsx index de4948afd88..2afb6219e72 100644 --- a/playground/vite/src/pages/orders.tsx +++ b/playground/vite/src/pages/orders.tsx @@ -1,6 +1,14 @@ import * as React from 'react'; -import Typography from '@mui/material/Typography'; +import { CRUD } from '@toolpad/core/CRUD'; +import { ordersDataSource, Order } from '../data/orders'; -export default function OrdersPage() { - return Welcome to the Toolpad orders!; +export default function OrdersCRUDPage() { + return ( + + dataSource={ordersDataSource} + rootPath="/orders" + initialPageSize={25} + defaultValues={{ itemCount: 1 }} + /> + ); } diff --git a/playground/vite/src/validationAdapters/yupAdapter.ts b/playground/vite/src/validationAdapters/yupAdapter.ts new file mode 100644 index 00000000000..04d213f0cd6 --- /dev/null +++ b/playground/vite/src/validationAdapters/yupAdapter.ts @@ -0,0 +1,23 @@ +import { DataModel } from '@toolpad/core/CRUD'; +import * as yup from 'yup'; + +const yupAdapter = + (schema: yup.ObjectSchema>) => + async (formValues: Omit) => { + try { + await schema.validate(formValues, { abortEarly: false }); + return {}; + } catch (error) { + return (error as yup.ValidationError).inner.reduce( + (acc, curr) => { + if (curr.path) { + acc[curr.path as keyof Omit] = curr.message; + } + return acc; + }, + {} as Record, string>, + ); + } + }; + +export default yupAdapter; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f320fc4304e..5a505e3f82a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,7 +105,7 @@ importers: version: https://codeload.github.com/mui/material-ui/tar.gz/dd69cf07e7aace1efad91e5b8e733c7efcf6c02c(encoding@0.1.13) '@mui/x-charts': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@next/eslint-plugin-next': specifier: 14.2.23 version: 14.2.23 @@ -299,11 +299,11 @@ importers: specifier: 5.0.0-beta.68 version: 5.0.0-beta.68(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/docs': - specifier: 6.3.1 - version: 6.3.1(zr4k4xiuc3jt6p7px4uscqtuny) + specifier: 6.4.1 + version: 6.4.1(3gva2vm4pftzxcubfzhbhznkmy) '@mui/icons-material': - specifier: 6.3.1 - version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/internal-markdown': specifier: 1.0.24 version: 1.0.24 @@ -312,28 +312,28 @@ importers: version: 5.0.0-beta.51(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/lab': specifier: 6.0.0-beta.22 - version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/material-nextjs': specifier: 6.3.1 version: 6.3.1(@emotion/cache@11.14.0)(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/server@11.11.0)(@types/react@19.0.8)(next@15.1.6(@babel/core@7.26.0)(@playwright/test@1.47.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) '@mui/styles': - specifier: 6.3.1 - version: 6.3.1(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/system': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/utils': - specifier: 6.3.1 - version: 6.3.1(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/x-date-pickers': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-date-pickers-pro': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-license': specifier: 7.25.0 version: 7.25.0(@types/react@19.0.8)(react@19.0.0) @@ -606,10 +606,10 @@ importers: version: 7.26.0 '@mui/lab': specifier: 6.0.0-beta.22 - version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/utils': - specifier: 6.3.1 - version: 6.3.1(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@types/react@19.0.8)(react@19.0.0) '@toolpad/utils': specifier: workspace:* version: link:../toolpad-utils @@ -619,6 +619,9 @@ importers: client-only: specifier: ^0.0.1 version: 0.0.1 + dayjs: + specifier: 1.11.13 + version: 1.11.13 invariant: specifier: 2.2.4 version: 2.2.4 @@ -633,11 +636,17 @@ importers: version: 19.0.0 devDependencies: '@mui/icons-material': - specifier: 6.3.1 - version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/x-data-grid': + specifier: 7.22.2 + version: 7.22.2(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/x-date-pickers': + specifier: 7.23.6 + version: 7.23.6(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@types/invariant': specifier: 2.2.37 version: 2.2.37 @@ -700,44 +709,44 @@ importers: specifier: 9.3.1 version: 9.3.1(encoding@0.1.13) '@mui/icons-material': - specifier: 6.3.1 - version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/lab': specifier: 6.0.0-beta.22 - version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/system': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/types': specifier: 7.2.21 version: 7.2.21(@types/react@19.0.8) '@mui/utils': - specifier: 6.3.1 - version: 6.3.1(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/x-charts': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-data-grid': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-data-grid-premium': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-date-pickers': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-date-pickers-pro': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-license': specifier: 7.25.0 version: 7.25.0(@types/react@19.0.8)(react@19.0.0) '@mui/x-tree-view': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/react-query': specifier: 5.61.3 version: 5.61.3(react@19.0.0) @@ -1040,23 +1049,23 @@ importers: packages/toolpad-studio-components: dependencies: '@mui/icons-material': - specifier: 6.3.1 - version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/lab': specifier: 6.0.0-beta.22 - version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-charts': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-data-grid-premium': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-date-pickers': specifier: 7.25.0 - version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-license': specifier: 7.25.0 version: 7.25.0(@types/react@19.0.8)(react@19.0.0) @@ -1101,8 +1110,8 @@ importers: specifier: 0.37.4 version: 0.37.4 '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tanstack/react-query': specifier: 5.61.3 version: 5.61.3(react@19.0.0) @@ -1208,11 +1217,11 @@ importers: specifier: 11.14.0 version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/icons-material': - specifier: 6.3.1 - version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/material-nextjs': specifier: 6.3.1 version: 6.3.1(@emotion/cache@11.14.0)(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/server@11.11.0)(@types/react@19.0.8)(next@15.1.6(@babel/core@7.26.0)(@playwright/test@1.47.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) @@ -1253,11 +1262,11 @@ importers: specifier: 11.14.0 version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/icons-material': - specifier: 6.3.1 - version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/material-nextjs': specifier: 6.3.1 version: 6.3.1(@emotion/cache@11.14.0)(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/server@11.11.0)(@types/react@19.0.8)(next@15.1.6(@babel/core@7.26.0)(@playwright/test@1.47.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) @@ -1295,11 +1304,11 @@ importers: specifier: 11.14.0 version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/icons-material': - specifier: 6.3.1 - version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@toolpad/core': specifier: workspace:* version: link:../../packages/toolpad-core/build @@ -1324,12 +1333,15 @@ importers: vite: specifier: 5.4.12 version: 5.4.12(@types/node@20.17.16)(terser@5.36.0) + yup: + specifier: 1.6.1 + version: 1.6.1 test: devDependencies: '@mui/material': - specifier: 6.3.1 - version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 6.4.1 + version: 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@toolpad/studio': specifier: workspace:* version: link:../packages/toolpad-studio @@ -2958,7 +2970,6 @@ packages: '@mui/base@5.0.0-beta.40-0': resolution: {integrity: sha512-hG3atoDUxlvEy+0mqdMpWd04wca8HKr2IHjW/fAjlkCHQolSLazhZM46vnHjOf15M4ESu25mV/3PgjczyjVM4w==} engines: {node: '>=12.0.0'} - deprecated: This package has been replaced by @base-ui-components/react peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2970,7 +2981,6 @@ packages: '@mui/base@5.0.0-beta.68': resolution: {integrity: sha512-F1JMNeLS9Qhjj3wN86JUQYBtJoXyQvknxlzwNl6eS0ZABo1MiohMONj3/WQzYPSXIKC2bS/ZbyBzdHhi2GnEpA==} engines: {node: '>=14.0.0'} - deprecated: This package has been replaced by @base-ui-components/react peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -2982,11 +2992,11 @@ packages: '@mui/core-downloads-tracker@5.16.12': resolution: {integrity: sha512-rkN+bPpe2Xn8h4ZLqKy5JsZt3nzMyTJ2ySdyLHHf0IL+PrxS46dxOIC1i66R8qi14kJBHfy7Byqv1yUvpwf0iw==} - '@mui/core-downloads-tracker@6.3.1': - resolution: {integrity: sha512-2OmnEyoHpj5//dJJpMuxOeLItCCHdf99pjMFfUFdBteCunAK9jW+PwEo4mtdGcLs7P+IgZ+85ypd52eY4AigoQ==} + '@mui/core-downloads-tracker@6.4.2': + resolution: {integrity: sha512-Qmod9fHsFWrtLxdSkZ4iDLRz2AUKt3C2ZEimuY+qKlQGVKJDNS5DuSlNOAgqfHFDq8mzB17ATN6HFcThwJlvUw==} - '@mui/docs@6.3.1': - resolution: {integrity: sha512-0JqU2+dEKX1b0MZTDG4qM+iiW5wgapwzq8Q1Joehlq91PrW9atddbKIDUpFdy7MY+DKSFDNB+QRT+pez42PGWA==} + '@mui/docs@6.4.1': + resolution: {integrity: sha512-JmO5JbYozMiworxOcFklerQAb3uV7Uq7nM5ecIBvbUCv9v8hQlDLYl5j4zcix/PZFjCoSLSn3lcZ6EpBwlO+Rw==} engines: {node: '>=14.0.0'} peerDependencies: '@mui/base': '*' @@ -3002,11 +3012,11 @@ packages: '@types/react': optional: true - '@mui/icons-material@6.3.1': - resolution: {integrity: sha512-nJmWj1PBlwS3t1PnoqcixIsftE+7xrW3Su7f0yrjPw4tVjYrgkhU0hrRp+OlURfZ3ptdSkoBkalee9Bhf1Erfw==} + '@mui/icons-material@6.4.1': + resolution: {integrity: sha512-wsxFcUTQxt4s+7Bg4GgobqRjyaHLmZGNOs+HJpbwrwmLbT6mhIJxhpqsKzzWq9aDY8xIe7HCjhpH7XI5UD6teA==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^6.3.1 + '@mui/material': ^6.4.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -3024,6 +3034,9 @@ packages: '@mui/internal-markdown@1.0.24': resolution: {integrity: sha512-bFjygozW3vhmnct9COgysXv5+afLzDgdt30LVUgPeDSaxZbAfSoyD0Q/b848Zl5WEaXpKrzg0TVKPoE8XAGoIg==} + '@mui/internal-markdown@1.0.25': + resolution: {integrity: sha512-9A+IrU2gxUd+1JInu7C2hAPsWA0kD1Z2ytme4SfCs95d03MamfFRBDuXt659Dxemb/IHXumxcDuuT8zzLXzUwg==} + '@mui/internal-scripts@1.0.32': resolution: {integrity: sha512-iYccvD8q4KB4VhX1DTNdSlvGTfkZBMoQ3JfKbEphQCAyLU8Fwb9FfCt1aJC71ViXyHzmGwEKuLRyDzBh7C3BOg==} @@ -3083,13 +3096,13 @@ packages: '@types/react': optional: true - '@mui/material@6.3.1': - resolution: {integrity: sha512-ynG9ayhxgCsHJ/dtDcT1v78/r2GwQyP3E0hPz3GdPRl0uFJz/uUTtI5KFYwadXmbC+Uv3bfB8laZ6+Cpzh03gA==} + '@mui/material@6.4.1': + resolution: {integrity: sha512-MFBfia6UiKxyoLeGkAh8M15bkeDmfnsUTMRJd/vTQue6YQ8AQ6lw9HqDthyYghzDEWIvZO/lQQzLrZE8XwNJLA==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^6.3.1 + '@mui/material-pigment-css': ^6.4.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3118,8 +3131,8 @@ packages: '@types/react': optional: true - '@mui/private-theming@6.3.1': - resolution: {integrity: sha512-g0u7hIUkmXmmrmmf5gdDYv9zdAig0KoxhIQn1JN8IVqApzf/AyRhH3uDGx5mSvs8+a1zb4+0W6LC260SyTTtdQ==} + '@mui/private-theming@6.4.2': + resolution: {integrity: sha512-2CkQT0gNlogM50qGTBJgWA7hPPx4AeH8RE2xJa+PHtIOowiVPX52ZsQ0e7Ho18DAqEbkngQ6Uju037ER+TCY5A==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3141,8 +3154,8 @@ packages: '@emotion/styled': optional: true - '@mui/styled-engine@6.3.1': - resolution: {integrity: sha512-/7CC0d2fIeiUxN5kCCwYu4AWUDd9cCTxWCyo0v/Rnv6s8uk6hWgJC3VLZBoDENBHf/KjqDZuYJ2CR+7hD6QYww==} + '@mui/styled-engine@6.4.2': + resolution: {integrity: sha512-cgjQK2bkllSYoWUBv93ALhCPJ0NhfO3NctsBf13/b4XSeQVfKPBAnR+P9mNpdFMa5a5RWwtWuBD3cZ5vktsN+g==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -3154,8 +3167,8 @@ packages: '@emotion/styled': optional: true - '@mui/styles@6.3.1': - resolution: {integrity: sha512-PokH/ywp4uQDwrUoqo55oMsZfLCZn7Wdg9wMQAOksWpdRDhWUV4P6DqRliy5F26JPaitu0YTy1Wbf8ePdyfNrg==} + '@mui/styles@6.4.1': + resolution: {integrity: sha512-W0AAfCsjrqTWdWzxM9vFPWkSNPQppKDNxDXN2l527Fu6ITF1ZBmw97p85Q6IkyXuUPlF+Mr12ztKSq9e2kD4KA==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3180,8 +3193,8 @@ packages: '@types/react': optional: true - '@mui/system@6.3.1': - resolution: {integrity: sha512-AwqQ3EAIT2np85ki+N15fF0lFXX1iFPqenCzVOSl3QXKy2eifZeGd9dGtt7pGMoFw5dzW4dRGGzRpLAq9rkl7A==} + '@mui/system@6.4.1': + resolution: {integrity: sha512-rgQzgcsHCTtzF9MZ+sL0tOhf2ZBLazpjrujClcb4Siju5lTrK0xX4PsiropActzCemNfM+mOu+0jezAVnfRK8g==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -3214,8 +3227,18 @@ packages: '@types/react': optional: true - '@mui/utils@6.3.1': - resolution: {integrity: sha512-sjGjXAngoio6lniQZKJ5zGfjm+LD2wvLwco7FbKe1fu8A7VIFmz2SwkLb+MDPLNX1lE7IscvNNyh1pobtZg2tw==} + '@mui/utils@6.4.1': + resolution: {integrity: sha512-iQUDUeYh87SvR4lVojaRaYnQix8BbRV51MxaV6MBmqthecQoxwSbS5e2wnbDJUeFxY2ppV505CiqPLtd0OWkqw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@6.4.2': + resolution: {integrity: sha512-5NkhzlJkmR5+5RSs/Irqin1GPy2Z8vbLk/UzQrH9FEAnm6OA9SvuXjzgklxUs7N65VwEkGpKK1jMZ5K84hRdzQ==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3275,6 +3298,22 @@ packages: '@emotion/styled': optional: true + '@mui/x-data-grid@7.22.2': + resolution: {integrity: sha512-yfy2s5A6tbajQZiEdsba49T4FYb9F0WPrzbbG30dl1+sIiX4ZRX7ma44UIDGPZrsZv8xkkE+p8qeJxZ7OaMteA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.9.0 + '@emotion/styled': ^11.8.1 + '@mui/material': ^5.15.14 || ^6.0.0 + '@mui/system': ^5.15.14 || ^6.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 + '@mui/x-data-grid@7.25.0': resolution: {integrity: sha512-e9ZLbCgnDiADFiDyXo91ucZFHEMkKBNpwpkaTq5KohzefJfMpMQjTEbJeueSfBG2G1Q1Am2TPeBqrNeReIA7RQ==} engines: {node: '>=14.0.0'} @@ -3328,6 +3367,43 @@ packages: moment-jalaali: optional: true + '@mui/x-date-pickers@7.23.6': + resolution: {integrity: sha512-jt6rEAYLju3NZe3y2S+I5KcTiSHV79FW0jeNUEUTceg1qsPzseHbND66k3zVF0hO3N2oZtLtPywof6vN5Doe+Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.9.0 + '@emotion/styled': ^11.8.1 + '@mui/material': ^5.15.14 || ^6.0.0 + '@mui/system': ^5.15.14 || ^6.0.0 + date-fns: ^2.25.0 || ^3.2.0 || ^4.0.0 + date-fns-jalali: ^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0 + dayjs: ^1.10.7 + luxon: ^3.0.2 + moment: ^2.29.4 + moment-hijri: ^2.1.2 || ^3.0.0 + moment-jalaali: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.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 + '@mui/x-date-pickers@7.25.0': resolution: {integrity: sha512-t62OSFAKwj7KYQ8KcwTuKj6OgDuLQPSe4QUJcKDzD9rEhRIJVRUw2x27gBSdcls4l0PTrba19TghvDxCZprriw==} engines: {node: '>=14.0.0'} @@ -3365,6 +3441,18 @@ packages: moment-jalaali: optional: true + '@mui/x-internals@7.21.0': + resolution: {integrity: sha512-94YNyZ0BhK5Z+Tkr90RKf47IVCW8R/1MvdUhh6MCQg6sZa74jsX+x+gEZ4kzuCqOsuyTyxikeQ8vVuCIQiP7UQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^17.0.0 || ^18.0.0 + + '@mui/x-internals@7.23.6': + resolution: {integrity: sha512-hT1Pa4PNCnxwiauPbYMC3p4DiEF1x05Iu4C1MtC/jMJ1LtthymLmTuQ6ZQ53/R9FeqK6sYd6A6noR+vNMjp5DA==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + '@mui/x-internals@7.25.0': resolution: {integrity: sha512-tBUN54YznAkmtCIRAOl35Kgl0MjFDIjUbzIrbWRgVSIR3QJ8bXnVSkiRBi+P91SZEl9+ZW0rDj+osq7xFJV0kg==} engines: {node: '>=14.0.0'} @@ -8922,6 +9010,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -9923,6 +10014,9 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -9978,6 +10072,9 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -10643,6 +10740,9 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + yup@1.6.1: + resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==} + zip-stream@4.1.1: resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} engines: {node: '>= 10'} @@ -12459,7 +12559,7 @@ snapshots: '@babel/runtime': 7.26.0 '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/types': 7.2.21(@types/react@19.0.8) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 @@ -12470,16 +12570,16 @@ snapshots: '@mui/core-downloads-tracker@5.16.12': {} - '@mui/core-downloads-tracker@6.3.1': {} + '@mui/core-downloads-tracker@6.4.2': {} - '@mui/docs@6.3.1(zr4k4xiuc3jt6p7px4uscqtuny)': + '@mui/docs@6.4.1(3gva2vm4pftzxcubfzhbhznkmy)': dependencies: '@babel/runtime': 7.26.0 '@mui/base': 5.0.0-beta.68(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/icons-material': 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/internal-markdown': 1.0.24 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/icons-material': 6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/internal-markdown': 1.0.25 + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) chai: 5.1.2 clipboard-copy: 4.0.1 clsx: 2.1.1 @@ -12491,10 +12591,10 @@ snapshots: optionalDependencies: '@types/react': 19.0.8 - '@mui/icons-material@6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': + '@mui/icons-material@6.4.1(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 optionalDependencies: '@types/react': 19.0.8 @@ -12516,6 +12616,13 @@ snapshots: marked: 15.0.6 prismjs: 1.29.0 + '@mui/internal-markdown@1.0.25': + dependencies: + '@babel/runtime': 7.26.0 + lodash: 4.17.21 + marked: 15.0.6 + prismjs: 1.29.0 + '@mui/internal-scripts@1.0.32': dependencies: '@babel/core': 7.26.0 @@ -12548,14 +12655,14 @@ snapshots: '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@types/react': 19.0.8 - '@mui/lab@6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/lab@6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@mui/base': 5.0.0-beta.68(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/types': 7.2.21(@types/react@19.0.8) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) clsx: 2.1.1 prop-types: 15.8.1 react: 19.0.0 @@ -12576,13 +12683,13 @@ snapshots: '@emotion/server': 11.11.0 '@types/react': 19.0.8 - '@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/core-downloads-tracker': 6.3.1 - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/core-downloads-tracker': 6.4.2 + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@mui/types': 7.2.21(@types/react@19.0.8) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@19.0.8) clsx: 2.1.1 @@ -12620,10 +12727,10 @@ snapshots: optionalDependencies: '@types/react': 19.0.8 - '@mui/private-theming@6.3.1(@types/react@19.0.8)(react@19.0.0)': + '@mui/private-theming@6.4.2(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.2(@types/react@19.0.8)(react@19.0.0) prop-types: 15.8.1 react: 19.0.0 optionalDependencies: @@ -12640,7 +12747,7 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.0.8)(react@19.0.0) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/styled-engine@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(react@19.0.0)': + '@mui/styled-engine@6.4.2(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@emotion/cache': 11.14.0 @@ -12653,13 +12760,13 @@ snapshots: '@emotion/react': 11.14.0(@types/react@19.0.8)(react@19.0.0) '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/styles@6.3.1(@types/react@19.0.8)(react@19.0.0)': + '@mui/styles@6.4.1(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@emotion/hash': 0.9.2 - '@mui/private-theming': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/private-theming': 6.4.2(@types/react@19.0.8)(react@19.0.0) '@mui/types': 7.2.21(@types/react@19.0.8) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) clsx: 2.1.1 csstype: 3.1.3 hoist-non-react-statics: 3.3.2 @@ -12692,13 +12799,13 @@ snapshots: '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) '@types/react': 19.0.8 - '@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': + '@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/private-theming': 6.3.1(@types/react@19.0.8)(react@19.0.0) - '@mui/styled-engine': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(react@19.0.0) + '@mui/private-theming': 6.4.2(@types/react@19.0.8)(react@19.0.0) + '@mui/styled-engine': 6.4.2(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(react@19.0.0) '@mui/types': 7.2.21(@types/react@19.0.8) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -12724,7 +12831,19 @@ snapshots: optionalDependencies: '@types/react': 19.0.8 - '@mui/utils@6.3.1(@types/react@19.0.8)(react@19.0.0)': + '@mui/utils@6.4.1(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.21(@types/react@19.0.8) + '@types/prop-types': 15.7.14 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-is: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + + '@mui/utils@6.4.2(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 '@mui/types': 7.2.21(@types/react@19.0.8) @@ -12754,12 +12873,12 @@ snapshots: delaunator: 5.0.1 robust-predicates: 3.0.2 - '@mui/x-charts@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/x-charts@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/x-charts-vendor': 7.20.0 '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@react-spring/rafz': 9.7.5 @@ -12774,14 +12893,14 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-data-grid-premium@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/x-data-grid-premium@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) - '@mui/x-data-grid': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/x-data-grid-pro': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) + '@mui/x-data-grid': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/x-data-grid-pro': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@mui/x-license': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@types/format-util': 1.0.4 @@ -12797,13 +12916,13 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-data-grid-pro@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/x-data-grid-pro@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) - '@mui/x-data-grid': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) + '@mui/x-data-grid': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@mui/x-license': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@types/format-util': 1.0.4 @@ -12818,12 +12937,30 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-data-grid@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/x-data-grid@7.22.2(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) + '@mui/x-internals': 7.21.0(@types/react@19.0.8)(react@19.0.0) + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + reselect: 5.1.1 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.8)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + transitivePeerDependencies: + - '@types/react' + + '@mui/x-data-grid@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) clsx: 2.1.1 prop-types: 15.8.1 @@ -12836,13 +12973,13 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-date-pickers-pro@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/x-date-pickers-pro@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) - '@mui/x-date-pickers': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) + '@mui/x-date-pickers': 7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@mui/x-license': 7.25.0(@types/react@19.0.8)(react@19.0.0) clsx: 2.1.1 @@ -12858,12 +12995,32 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mui/x-date-pickers@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/x-date-pickers@7.23.6(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) + '@mui/x-internals': 7.23.6(@types/react@19.0.8)(react@19.0.0) + '@types/react-transition-group': 4.4.12(@types/react@19.0.8) + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.8)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + dayjs: 1.11.13 + transitivePeerDependencies: + - '@types/react' + + '@mui/x-date-pickers@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(date-fns-jalali@2.29.3-0)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@types/react-transition-group': 4.4.12(@types/react@19.0.8) clsx: 2.1.1 @@ -12879,10 +13036,26 @@ snapshots: transitivePeerDependencies: - '@types/react' + '@mui/x-internals@7.21.0(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + transitivePeerDependencies: + - '@types/react' + + '@mui/x-internals@7.23.6(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + transitivePeerDependencies: + - '@types/react' + '@mui/x-internals@7.25.0(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) react: 19.0.0 transitivePeerDependencies: - '@types/react' @@ -12890,18 +13063,18 @@ snapshots: '@mui/x-license@7.25.0(@types/react@19.0.8)(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) react: 19.0.0 transitivePeerDependencies: - '@types/react' - '@mui/x-tree-view@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + '@mui/x-tree-view@7.25.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@mui/material@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mui/system@6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) - '@mui/utils': 6.3.1(@types/react@19.0.8)(react@19.0.0) + '@mui/material': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.4.1(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0))(@types/react@19.0.8)(react@19.0.0) + '@mui/utils': 6.4.1(@types/react@19.0.8)(react@19.0.0) '@mui/x-internals': 7.25.0(@types/react@19.0.8)(react@19.0.0) '@types/react-transition-group': 4.4.12(@types/react@19.0.8) clsx: 2.1.1 @@ -19576,6 +19749,8 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + property-expr@2.0.6: {} + proto-list@1.2.4: {} protocols@2.0.1: {} @@ -20777,6 +20952,8 @@ snapshots: through@2.3.8: {} + tiny-case@1.0.3: {} + tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {} @@ -20820,6 +20997,8 @@ snapshots: toidentifier@1.0.1: {} + toposort@2.0.2: {} + totalist@3.0.1: {} tough-cookie@4.1.4: @@ -21583,6 +21762,13 @@ snapshots: yoctocolors@2.1.1: {} + yup@1.6.1: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 + zip-stream@4.1.1: dependencies: archiver-utils: 3.0.4 diff --git a/scripts/generateProptypes.ts b/scripts/generateProptypes.ts index ad49871579a..f4061fd42a3 100644 --- a/scripts/generateProptypes.ts +++ b/scripts/generateProptypes.ts @@ -59,6 +59,7 @@ async function generateProptypes( name.toLowerCase().endsWith('classes') || name === 'theme' || name === 'ownerState' || + name === 'dataSource' || (name.endsWith('Props') && name !== 'componentsProps' && name !== 'slotProps') ) { return false; diff --git a/test/package.json b/test/package.json index 83642a94e2a..a8d7e944bf6 100644 --- a/test/package.json +++ b/test/package.json @@ -2,7 +2,7 @@ "name": "@toolpad/studio-tests", "private": true, "devDependencies": { - "@mui/material": "6.3.1", + "@mui/material": "6.4.1", "@toolpad/studio": "workspace:*", "@toolpad/utils": "workspace:*", "@types/invariant": "2.2.37",