From a359c8789b265a26ca2841db4d20b6377ba492fa Mon Sep 17 00:00:00 2001 From: AirBorne04 Date: Fri, 29 May 2026 11:02:35 +0200 Subject: [PATCH 1/4] import error in materials-renderers fixed --- packages/material-renderers/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/material-renderers/tsconfig.json b/packages/material-renderers/tsconfig.json index 427bc4b996..6d1cc5a531 100644 --- a/packages/material-renderers/tsconfig.json +++ b/packages/material-renderers/tsconfig.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.base", "compilerOptions": { "outDir": "lib", - "sourceMap": true + "sourceMap": true, + "baseUrl": "." }, "exclude": ["node_modules"], "files": ["./src/index.ts"] From c434295791293cf7af033bfb3eddbe0311973f9b Mon Sep 17 00:00:00 2001 From: AirBorne04 Date: Fri, 29 May 2026 13:37:57 +0200 Subject: [PATCH 2/4] upgrading mui packages to v9 max --- packages/examples-react/package.json | 2 +- packages/material-renderers/example/index.tsx | 3 +- packages/material-renderers/package.json | 22 +- .../additional/ListWithDetailMasterItem.tsx | 24 +- .../src/complex/NoBorderTableCell.tsx | 11 +- .../src/complex/ValidationIcon.tsx | 3 +- .../layouts/MaterialCategorizationLayout.tsx | 21 +- pnpm-lock.yaml | 490 +++++++++++------- 8 files changed, 348 insertions(+), 228 deletions(-) diff --git a/packages/examples-react/package.json b/packages/examples-react/package.json index fe86451fb8..9d4a7dd300 100644 --- a/packages/examples-react/package.json +++ b/packages/examples-react/package.json @@ -6,7 +6,7 @@ "@jsonforms/core": "workspace:*", "@jsonforms/examples": "workspace:*", "@jsonforms/react": "workspace:*", - "@mui/material": "^7.3.0", + "@mui/material": "^7.3.0 || ^8.0.0 || ^9.0.0", "@types/react-highlight": "^0.12.5", "@types/react-tabs": "^2.3.3", "highlight.js": "^11.3.1", diff --git a/packages/material-renderers/example/index.tsx b/packages/material-renderers/example/index.tsx index e283e0b05f..057fe51fca 100644 --- a/packages/material-renderers/example/index.tsx +++ b/packages/material-renderers/example/index.tsx @@ -33,9 +33,8 @@ import { SelectChangeEvent, Stack, TextFieldProps, - ThemeProvider, - createTheme, } from '@mui/material'; +import { ThemeProvider, createTheme } from '@mui/material/styles'; import { renderExample } from '../../examples-react/src/index'; import { materialRenderers, materialCells } from '../src'; diff --git a/packages/material-renderers/package.json b/packages/material-renderers/package.json index bd4ffa6e00..c835a4b174 100644 --- a/packages/material-renderers/package.json +++ b/packages/material-renderers/package.json @@ -87,27 +87,27 @@ }, "dependencies": { "@date-io/dayjs": "^3.0.0", - "dayjs": "1.10.7", + "dayjs": "^1.10.7", "lodash": "^4.17.21" }, "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", + "@emotion/react": "^11.5.0 || ^12.0.0", + "@emotion/styled": "^11.3.0 || ^12.0.0", "@jsonforms/core": "3.8.0-alpha.2", "@jsonforms/react": "3.8.0-alpha.2", - "@mui/icons-material": "^7.0.0", - "@mui/material": "^7.0.0", - "@mui/x-date-pickers": "^8.0.0", + "@mui/icons-material": "^7.0.0 || ^8.0.0 || ^9.0.0", + "@mui/material": "^7.0.0 || ^8.0.0 || ^9.0.0", + "@mui/x-date-pickers": "^8.0.0 || ^9.0.0", "react": "^16.12.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "devDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", + "@emotion/react": "^11.5.0 || ^12.0.0", + "@emotion/styled": "^11.3.0 || ^12.0.0", "@jsonforms/core": "workspace:*", "@jsonforms/react": "workspace:*", - "@mui/icons-material": "^7.3.0", - "@mui/material": "^7.3.0", - "@mui/x-date-pickers": "^8.11.3", + "@mui/icons-material": "^9.0.1", + "@mui/material": "^9.0.1", + "@mui/x-date-pickers": "^9.3.0", "@rollup/plugin-commonjs": "^23.0.3", "@rollup/plugin-json": "^5.0.2", "@rollup/plugin-node-resolve": "^15.0.1", diff --git a/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx b/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx index db0daf7695..299ffeb3b2 100644 --- a/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx +++ b/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx @@ -27,9 +27,8 @@ import { withJsonFormsMasterListItemProps } from '@jsonforms/react'; import { Avatar, IconButton, - ListItemButton, + ListItem, ListItemAvatar, - ListItemSecondaryAction, ListItemText, Tooltip, } from '@mui/material'; @@ -48,29 +47,28 @@ export const ListWithDetailMasterItem = ({ disableRemove, }: StatePropsOfMasterItem) => { return ( - + {index + 1} {enabled && !disableRemove && ( - + - - - + - + )} - + ); }; diff --git a/packages/material-renderers/src/complex/NoBorderTableCell.tsx b/packages/material-renderers/src/complex/NoBorderTableCell.tsx index 7435e09593..9ecd825f78 100644 --- a/packages/material-renderers/src/complex/NoBorderTableCell.tsx +++ b/packages/material-renderers/src/complex/NoBorderTableCell.tsx @@ -1,19 +1,19 @@ /* The MIT License - + Copyright (c) 2017-2019 EclipseSource Munich https://github.com/eclipsesource/jsonforms - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -22,7 +22,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { styled, TableCell } from '@mui/material'; +import { styled } from '@mui/material/styles'; +import { TableCell } from '@mui/material'; import React from 'react'; const StyledTableCell = styled(TableCell)({ diff --git a/packages/material-renderers/src/complex/ValidationIcon.tsx b/packages/material-renderers/src/complex/ValidationIcon.tsx index 5c5612e35c..a89445dd17 100644 --- a/packages/material-renderers/src/complex/ValidationIcon.tsx +++ b/packages/material-renderers/src/complex/ValidationIcon.tsx @@ -25,7 +25,8 @@ import React from 'react'; import { ErrorOutline } from '@mui/icons-material'; -import { Badge, Tooltip, styled } from '@mui/material'; +import { Badge, Tooltip } from '@mui/material'; +import { styled } from '@mui/material/styles'; const StyledBadge = styled(Badge)(({ theme }: any) => ({ color: theme.palette.error.main, diff --git a/packages/material-renderers/src/layouts/MaterialCategorizationLayout.tsx b/packages/material-renderers/src/layouts/MaterialCategorizationLayout.tsx index c45490b2e0..bb9680a095 100644 --- a/packages/material-renderers/src/layouts/MaterialCategorizationLayout.tsx +++ b/packages/material-renderers/src/layouts/MaterialCategorizationLayout.tsx @@ -58,24 +58,22 @@ export const isSingleLevelCategorization: Tester = and( categorization.elements && categorization.elements.reduce( (acc, e) => acc && e.type === 'Category', - true + true, ) ); - } + }, ); export const materialCategorizationTester: RankedTester = rankWith( 1, - isSingleLevelCategorization + isSingleLevelCategorization, ); export interface CategorizationState { activeCategory: number; } export interface MaterialCategorizationLayoutRendererProps - extends StatePropsOfLayout, - AjvProps, - TranslateProps { + extends StatePropsOfLayout, AjvProps, TranslateProps { selected?: number; ownState?: boolean; data?: any; @@ -83,7 +81,7 @@ export interface MaterialCategorizationLayoutRendererProps } export const MaterialCategorizationLayoutRenderer = ( - props: MaterialCategorizationLayoutRendererProps + props: MaterialCategorizationLayoutRendererProps, ) => { const { data, @@ -107,9 +105,9 @@ export const MaterialCategorizationLayoutRenderer = ( const categories = useMemo( () => categorization.elements.filter((category: Category) => - isVisible(category, data, undefined, ajv, config) + isVisible(category, data, undefined, ajv, config), ), - [categorization, data, ajv, config] + [categorization, data, ajv, config], ); if (categorization !== previousCategorization) { @@ -151,7 +149,6 @@ export const MaterialCategorizationLayoutRenderer = ( @@ -169,6 +166,6 @@ export const MaterialCategorizationLayoutRenderer = ( export default withAjvProps( withTranslateProps( - withJsonFormsLayoutProps(MaterialCategorizationLayoutRenderer) - ) + withJsonFormsLayoutProps(MaterialCategorizationLayoutRenderer), + ), ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3ad9e6f5c..cfc01d819a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -532,7 +532,7 @@ importers: specifier: workspace:* version: link:../react '@mui/material': - specifier: ^7.3.0 + specifier: ^7.3.0 || ^8.0.0 || ^9.0.0 version: 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/react-highlight': specifier: ^0.12.5 @@ -600,19 +600,19 @@ importers: dependencies: '@date-io/dayjs': specifier: ^3.0.0 - version: 3.0.0(dayjs@1.10.7) + version: 3.0.0(dayjs@1.11.11) dayjs: - specifier: 1.10.7 - version: 1.10.7 + specifier: ^1.10.7 + version: 1.11.11 lodash: specifier: ^4.17.21 version: 4.18.1 devDependencies: '@emotion/react': - specifier: ^11.5.0 + specifier: ^11.5.0 || ^12.0.0 version: 11.11.4(@types/react@17.0.80)(react@17.0.2) '@emotion/styled': - specifier: ^11.3.0 + specifier: ^11.3.0 || ^12.0.0 version: 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@jsonforms/core': specifier: workspace:* @@ -621,14 +621,14 @@ importers: specifier: workspace:* version: link:../react '@mui/icons-material': - specifier: ^7.3.0 - version: 7.3.0(@mui/material@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) + specifier: ^9.0.1 + version: 9.0.1(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@mui/material': - specifier: ^7.3.0 - version: 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + specifier: ^9.0.1 + version: 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@mui/x-date-pickers': - specifier: ^8.11.3 - version: 8.11.3(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.10.7)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + specifier: ^9.3.0 + version: 9.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.11.11)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@rollup/plugin-commonjs': specifier: ^23.0.3 version: 23.0.7(rollup@2.80.0) @@ -2926,10 +2926,6 @@ packages: resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.2': - resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.3': resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} engines: {node: '>=6.9.0'} @@ -2938,6 +2934,10 @@ packages: resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.24.0': resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} @@ -3056,15 +3056,9 @@ packages: '@emotion/babel-plugin@11.11.0': resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - '@emotion/cache@11.11.0': - resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - '@emotion/cache@11.14.0': resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} - '@emotion/hash@0.9.1': - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -3086,15 +3080,9 @@ packages: '@types/react': optional: true - '@emotion/serialize@1.1.4': - resolution: {integrity: sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==} - '@emotion/serialize@1.3.3': resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} - '@emotion/sheet@1.2.2': - resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} @@ -3111,17 +3099,11 @@ packages: '@emotion/unitless@0.10.0': resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} - '@emotion/unitless@0.8.1': - resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1': resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: react: '>=16.8.0' - '@emotion/utils@1.2.1': - resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - '@emotion/utils@1.4.2': resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} @@ -4253,11 +4235,14 @@ packages: '@mui/core-downloads-tracker@7.3.0': resolution: {integrity: sha512-E4eWI90atwCf0rUjuzdlDRI6coA03ZEOAqk5qjEU9IdCLYRlOG65P7WBCpwFYOwDqzUVCHzx8U4q//csULLsOg==} - '@mui/icons-material@7.3.0': - resolution: {integrity: sha512-46dUO2btNlMfQR0LyUApjtG/wXQ3Uwf6fH9sQeLwG1a0uZawvbQIra8DGJkSUoD+0hKgrwYJVLI04Lzf6wXy6g==} + '@mui/core-downloads-tracker@9.0.1': + resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==} + + '@mui/icons-material@9.0.1': + resolution: {integrity: sha512-5PRpQjVLTNLyV/2J9J53Yz4R0tVbodG0BQDN2zQI1QBG1OPYM25ar+4N20eyFOfJT6zKglLzsnU70+zdVLaTkw==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^7.3.0 + '@mui/material': ^9.0.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -4284,6 +4269,26 @@ packages: '@types/react': optional: true + '@mui/material@9.0.1': + resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^9.0.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 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + '@mui/private-theming@7.3.0': resolution: {integrity: sha512-qU6rkH377L9byQrgXVW4rGsXVs7Q7H65Rj4IaITK3Vj2J5IP9nomMxJ77/w5kbJcEcaDEoLK42Ro3qMtHmvd4Q==} engines: {node: '>=14.0.0'} @@ -4294,6 +4299,16 @@ packages: '@types/react': optional: true + '@mui/private-theming@9.0.1': + resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==} + 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/styled-engine@7.3.0': resolution: {integrity: sha512-O8GNVzpr+ZGzHXCGlYXnc9iSgBldrX3UtPswvLEZX8fyjKfh6wYVvbc7Oa6FdFKdbWWXAnrJ9YTVBQsk2VXDSg==} engines: {node: '>=14.0.0'} @@ -4307,6 +4322,19 @@ packages: '@emotion/styled': optional: true + '@mui/styled-engine@9.0.0': + resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/system@7.3.0': resolution: {integrity: sha512-D4VclTIVbMxwrPeDF+PEfwCo9BC+4pYnM1OakA5iFznmE1QRVanyXtpUM3319IhlZolN82EG04iKk3XiiQZmHg==} engines: {node: '>=14.0.0'} @@ -4323,11 +4351,19 @@ packages: '@types/react': optional: true - '@mui/types@7.4.5': - resolution: {integrity: sha512-ZPwlAOE3e8C0piCKbaabwrqZbW4QvWz0uapVPWya7fYj6PeDkl5sSJmomT7wjOcZGPB48G/a6Ubidqreptxz4g==} + '@mui/system@9.0.1': + resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==} + engines: {node: '>=14.0.0'} peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true '@types/react': optional: true @@ -4339,12 +4375,10 @@ packages: '@types/react': optional: true - '@mui/utils@7.3.0': - resolution: {integrity: sha512-YdL6ebwFV7PIOidIsees3HxkZ8hZjj+/atKLuI1ENwvJJ1puiEoLEmuDU72qSbKu911/GeFa7pc7Cn/ZmAj6yQ==} - engines: {node: '>=14.0.0'} + '@mui/types@9.0.0': + resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} 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 @@ -4359,14 +4393,34 @@ packages: '@types/react': optional: true - '@mui/x-date-pickers@8.11.3': - resolution: {integrity: sha512-RCvaACeTvlT930jn4s4weD/3Ow30sy7A4dRK8vmA3Pc3RIBy/b2CC4nYdkMiOwI56cjOVF4WPLFp5hBcEeGSvQ==} + '@mui/utils@9.0.0': + resolution: {integrity: sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==} + 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@9.0.1': + resolution: {integrity: sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==} + 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/x-date-pickers@9.3.0': + resolution: {integrity: sha512-Kg9mEZA+nHKi55DsbzVVMUhURQU6MQXtAEKjgyMqyaq1PMZ8Nr72KszqGhZZNmVkyM91wcq/icYgRVzYa65Gow==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 '@emotion/styled': ^11.8.1 - '@mui/material': ^5.15.14 || ^6.0.0 || ^7.0.0 - '@mui/system': ^5.15.14 || ^6.0.0 || ^7.0.0 + '@mui/material': ^7.3.0 || ^9.0.0 + '@mui/system': ^7.3.0 || ^9.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 @@ -4396,8 +4450,8 @@ packages: moment-jalaali: optional: true - '@mui/x-internals@8.11.3': - resolution: {integrity: sha512-Fmp4Op+nNSqsWn2Jwv9yA8WXi3Wem9jmgdUplvMK6JZAt7iA0ZdzGltCcHrdxOcK1Nu/2F7H8KOZuBzpy1lspw==} + '@mui/x-internals@9.1.0': + resolution: {integrity: sha512-fVezTa1lU+Hb3y9UMI8D/iWXADhs0I8PaZqoh2LOUXjGEUJmKqwsRD19ZXInZsH2yu+YS0dqYMPDvzjYTTyo+Q==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -7671,6 +7725,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + currently-unhandled@0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} engines: {node: '>=0.10.0'} @@ -7720,9 +7777,6 @@ packages: dateformat@3.0.3: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} - dayjs@1.10.7: - resolution: {integrity: sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==} - dayjs@1.11.11: resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} @@ -12311,6 +12365,9 @@ packages: react-is@19.1.1: resolution: {integrity: sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==} + react-is@19.2.6: + resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} + react-redux@7.2.9: resolution: {integrity: sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==} peerDependencies: @@ -13982,8 +14039,8 @@ packages: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} - use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -15424,7 +15481,7 @@ snapshots: '@babel/generator@7.28.3': dependencies: '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.0.2 @@ -15435,7 +15492,7 @@ snapshots: '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.0.2 + jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.22.5': dependencies: @@ -15443,11 +15500,11 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.0 '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.29.0 '@babel/helper-compilation-targets@7.23.6': dependencies: @@ -15532,9 +15589,9 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.7 + debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.8 + resolve: 1.22.12 transitivePeerDependencies: - supports-color @@ -15545,7 +15602,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.12 transitivePeerDependencies: - supports-color @@ -15586,7 +15643,7 @@ snapshots: '@babel/helper-module-imports@7.22.15': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.29.0 '@babel/helper-module-imports@7.24.3': dependencies: @@ -15664,7 +15721,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.24.5': {} @@ -15684,7 +15741,7 @@ snapshots: '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -15714,8 +15771,8 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -15725,7 +15782,7 @@ snapshots: '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.29.0 '@babel/helper-string-parser@7.24.1': {} @@ -15748,8 +15805,8 @@ snapshots: '@babel/helper-wrap-function@7.24.5': dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 '@babel/helper-wrap-function@7.28.6': dependencies: @@ -16182,21 +16239,23 @@ snapshots: '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.3)': dependencies: '@babel/core': 7.28.3 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: @@ -16279,7 +16338,7 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 + '@babel/template': 7.28.6 '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.3)': dependencies: @@ -16395,7 +16454,7 @@ snapshots: '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color @@ -16484,7 +16543,7 @@ snapshots: '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.28.5 '@babel/plugin-transform-modules-systemjs@7.29.4(@babel/core@7.28.3)': dependencies: @@ -16694,7 +16753,7 @@ snapshots: '@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.24.5 babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) @@ -16706,7 +16765,7 @@ snapshots: '@babel/plugin-transform-runtime@7.28.3(@babel/core@7.28.3)': dependencies: '@babel/core': 7.28.3 - '@babel/helper-module-imports': 7.27.1 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.27.1 babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.28.3) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.3) @@ -16990,14 +17049,14 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.5 - '@babel/types': 7.24.5 + '@babel/types': 7.29.0 esutils: 2.0.3 '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.3)': dependencies: '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.24.5 - '@babel/types': 7.24.5 + '@babel/types': 7.29.0 esutils: 2.0.3 '@babel/preset-typescript@7.24.1(@babel/core@7.24.5)': @@ -17020,12 +17079,12 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/runtime@7.28.2': {} - '@babel/runtime@7.28.3': {} '@babel/runtime@7.28.4': {} + '@babel/runtime@7.29.7': {} + '@babel/template@7.24.0': dependencies: '@babel/code-frame': 7.24.2 @@ -17141,11 +17200,11 @@ snapshots: '@date-io/core@3.0.0': {} - '@date-io/dayjs@3.0.0(dayjs@1.10.7)': + '@date-io/dayjs@3.0.0(dayjs@1.11.11)': dependencies: '@date-io/core': 3.0.0 optionalDependencies: - dayjs: 1.10.7 + dayjs: 1.11.11 '@discoveryjs/json-ext@0.5.7': {} @@ -17166,25 +17225,19 @@ snapshots: '@emotion/babel-plugin@11.11.0': dependencies: - '@babel/helper-module-imports': 7.24.3 - '@babel/runtime': 7.24.5 - '@emotion/hash': 0.9.1 + '@babel/helper-module-imports': 7.28.6 + '@babel/runtime': 7.29.7 + '@emotion/hash': 0.9.2 '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.4 + '@emotion/serialize': 1.3.3 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 - - '@emotion/cache@11.11.0': - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 + transitivePeerDependencies: + - supports-color '@emotion/cache@11.14.0': dependencies: @@ -17194,8 +17247,6 @@ snapshots: '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 - '@emotion/hash@0.9.1': {} - '@emotion/hash@0.9.2': {} '@emotion/is-prop-valid@1.2.2': @@ -17208,25 +17259,19 @@ snapshots: '@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.4 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@17.0.2) - '@emotion/utils': 1.2.1 + '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 react: 17.0.2 optionalDependencies: '@types/react': 17.0.80 - - '@emotion/serialize@1.1.4': - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.3 + transitivePeerDependencies: + - supports-color '@emotion/serialize@1.3.3': dependencies: @@ -17236,33 +17281,29 @@ snapshots: '@emotion/utils': 1.4.2 csstype: 3.1.3 - '@emotion/sheet@1.2.2': {} - '@emotion/sheet@1.4.0': {} '@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.28.4 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) - '@emotion/serialize': 1.1.4 + '@emotion/serialize': 1.3.3 '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@17.0.2) - '@emotion/utils': 1.2.1 + '@emotion/utils': 1.4.2 react: 17.0.2 optionalDependencies: '@types/react': 17.0.80 + transitivePeerDependencies: + - supports-color '@emotion/unitless@0.10.0': {} - '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@17.0.2)': dependencies: react: 17.0.2 - '@emotion/utils@1.2.1': {} - '@emotion/utils@1.4.2': {} '@emotion/weak-memoize@0.3.1': {} @@ -18271,21 +18312,23 @@ snapshots: '@mui/core-downloads-tracker@7.3.0': {} - '@mui/icons-material@7.3.0(@mui/material@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': + '@mui/core-downloads-tracker@9.0.1': {} + + '@mui/icons-material@9.0.1(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 - '@mui/material': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@babel/runtime': 7.29.7 + '@mui/material': 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react: 17.0.2 optionalDependencies: '@types/react': 17.0.80 '@mui/material@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@mui/core-downloads-tracker': 7.3.0 '@mui/system': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - '@mui/types': 7.4.5(@types/react@17.0.80) - '@mui/utils': 7.3.0(@types/react@17.0.80)(react@17.0.2) + '@mui/types': 7.4.6(@types/react@17.0.80) + '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@17.0.80) clsx: 2.1.1 @@ -18300,10 +18343,40 @@ snapshots: '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@types/react': 17.0.80 + '@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + dependencies: + '@babel/runtime': 7.29.7 + '@mui/core-downloads-tracker': 9.0.1 + '@mui/system': 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) + '@mui/types': 9.0.0(@types/react@17.0.80) + '@mui/utils': 9.0.1(@types/react@17.0.80)(react@17.0.2) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.12(@types/react@17.0.80) + clsx: 2.1.1 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-is: 19.2.6 + react-transition-group: 4.4.5(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + optionalDependencies: + '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) + '@types/react': 17.0.80 + '@mui/private-theming@7.3.0(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 - '@mui/utils': 7.3.0(@types/react@17.0.80)(react@17.0.2) + '@babel/runtime': 7.29.7 + '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) + prop-types: 15.8.1 + react: 17.0.2 + optionalDependencies: + '@types/react': 17.0.80 + + '@mui/private-theming@9.0.1(@types/react@17.0.80)(react@17.0.2)': + dependencies: + '@babel/runtime': 7.29.7 + '@mui/utils': 9.0.1(@types/react@17.0.80)(react@17.0.2) prop-types: 15.8.1 react: 17.0.2 optionalDependencies: @@ -18311,7 +18384,7 @@ snapshots: '@mui/styled-engine@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.29.7 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 '@emotion/sheet': 1.4.0 @@ -18322,13 +18395,26 @@ snapshots: '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) + '@mui/styled-engine@9.0.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(react@17.0.2)': + dependencies: + '@babel/runtime': 7.29.7 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 17.0.2 + optionalDependencies: + '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) + '@mui/system@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.29.7 '@mui/private-theming': 7.3.0(@types/react@17.0.80)(react@17.0.2) '@mui/styled-engine': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(react@17.0.2) - '@mui/types': 7.4.5(@types/react@17.0.80) - '@mui/utils': 7.3.0(@types/react@17.0.80)(react@17.0.2) + '@mui/types': 7.4.6(@types/react@17.0.80) + '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -18338,49 +18424,77 @@ snapshots: '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@types/react': 17.0.80 - '@mui/types@7.4.5(@types/react@17.0.80)': + '@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.29.7 + '@mui/private-theming': 9.0.1(@types/react@17.0.80)(react@17.0.2) + '@mui/styled-engine': 9.0.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(react@17.0.2) + '@mui/types': 9.0.0(@types/react@17.0.80) + '@mui/utils': 9.0.1(@types/react@17.0.80)(react@17.0.2) + clsx: 2.1.1 + csstype: 3.2.3 + prop-types: 15.8.1 + react: 17.0.2 optionalDependencies: + '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@types/react': 17.0.80 '@mui/types@7.4.6(@types/react@17.0.80)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 optionalDependencies: '@types/react': 17.0.80 - '@mui/utils@7.3.0(@types/react@17.0.80)(react@17.0.2)': + '@mui/types@9.0.0(@types/react@17.0.80)': dependencies: - '@babel/runtime': 7.28.2 - '@mui/types': 7.4.5(@types/react@17.0.80) + '@babel/runtime': 7.29.7 + optionalDependencies: + '@types/react': 17.0.80 + + '@mui/utils@7.3.2(@types/react@17.0.80)(react@17.0.2)': + dependencies: + '@babel/runtime': 7.29.7 + '@mui/types': 7.4.6(@types/react@17.0.80) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 17.0.2 - react-is: 19.1.1 + react-is: 19.2.6 optionalDependencies: '@types/react': 17.0.80 - '@mui/utils@7.3.2(@types/react@17.0.80)(react@17.0.2)': + '@mui/utils@9.0.0(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/types': 7.4.6(@types/react@17.0.80) + '@babel/runtime': 7.29.7 + '@mui/types': 9.0.0(@types/react@17.0.80) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 react: 17.0.2 - react-is: 19.1.1 + react-is: 19.2.6 optionalDependencies: '@types/react': 17.0.80 - '@mui/x-date-pickers@8.11.3(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.10.7)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + '@mui/utils@9.0.1(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 - '@mui/material': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - '@mui/system': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) - '@mui/x-internals': 8.11.3(@types/react@17.0.80)(react@17.0.2) + '@babel/runtime': 7.29.7 + '@mui/types': 9.0.0(@types/react@17.0.80) + '@types/prop-types': 15.7.15 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 17.0.2 + react-is: 19.2.6 + optionalDependencies: + '@types/react': 17.0.80 + + '@mui/x-date-pickers@9.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.11.11)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + dependencies: + '@babel/runtime': 7.29.7 + '@mui/material': 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@mui/system': 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) + '@mui/utils': 9.0.1(@types/react@17.0.80)(react@17.0.2) + '@mui/x-internals': 9.1.0(@types/react@17.0.80)(react@17.0.2) '@types/react-transition-group': 4.4.12(@types/react@17.0.80) clsx: 2.1.1 prop-types: 15.8.1 @@ -18390,17 +18504,17 @@ snapshots: optionalDependencies: '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - dayjs: 1.10.7 + dayjs: 1.11.11 transitivePeerDependencies: - '@types/react' - '@mui/x-internals@8.11.3(@types/react@17.0.80)(react@17.0.2)': + '@mui/x-internals@9.1.0(@types/react@17.0.80)(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.2 - '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) + '@babel/runtime': 7.29.7 + '@mui/utils': 9.0.0(@types/react@17.0.80)(react@17.0.2) react: 17.0.2 reselect: 5.1.1 - use-sync-external-store: 1.5.0(react@17.0.2) + use-sync-external-store: 1.6.0(react@17.0.2) transitivePeerDependencies: - '@types/react' @@ -19005,7 +19119,7 @@ snapshots: fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.12 semver: 7.5.4 z-schema: 5.0.5 optionalDependencies: @@ -19013,7 +19127,7 @@ snapshots: '@rushstack/rig-package@0.5.2': dependencies: - resolve: 1.22.8 + resolve: 1.22.12 strip-json-comments: 3.1.1 '@rushstack/terminal@0.10.0(@types/node@24.12.2)': @@ -19696,9 +19810,9 @@ snapshots: '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.24.5 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@vue/babel-helper-vue-transform-on': 1.2.2 '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.24.5) camelcase: 6.3.0 @@ -19711,35 +19825,37 @@ snapshots: '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.24.5)': dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.29.0 '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.24.5 - '@babel/parser': 7.24.5 + '@babel/parser': 7.29.3 '@vue/compiler-sfc': 3.4.27 '@vue/babel-plugin-transform-vue-jsx@1.4.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.28.6 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) '@vue/babel-helper-vue-jsx-merge-props': 1.4.0 html-tags: 2.0.0 lodash.kebabcase: 4.1.1 svg-tags: 1.0.0 + transitivePeerDependencies: + - supports-color '@vue/babel-preset-app@5.0.8(@babel/core@7.24.5)(core-js@3.37.1)(vue@3.5.17(typescript@5.8.3))': dependencies: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.28.6 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.5) '@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.5) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.5) '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.29.7 '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.5) '@vue/babel-preset-jsx': 1.4.0(@babel/core@7.24.5)(vue@3.5.17(typescript@5.8.3)) babel-plugin-dynamic-import-node: 2.3.3 @@ -19764,6 +19880,8 @@ snapshots: '@vue/babel-sugar-v-on': 1.4.0(@babel/core@7.24.5) optionalDependencies: vue: 3.5.17(typescript@5.8.3) + transitivePeerDependencies: + - supports-color '@vue/babel-sugar-composition-api-inject-h@1.4.0(@babel/core@7.24.5)': dependencies: @@ -19794,6 +19912,8 @@ snapshots: camelcase: 5.3.1 html-tags: 2.0.0 svg-tags: 1.0.0 + transitivePeerDependencies: + - supports-color '@vue/babel-sugar-v-on@1.4.0(@babel/core@7.24.5)': dependencies: @@ -19801,6 +19921,8 @@ snapshots: '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) '@vue/babel-plugin-transform-vue-jsx': 1.4.0(@babel/core@7.24.5) camelcase: 5.3.1 + transitivePeerDependencies: + - supports-color '@vue/cli-overlay@5.0.8': {} @@ -20566,7 +20688,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -20945,7 +21067,7 @@ snapshots: axios@1.13.2: dependencies: - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.4.3) form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -21040,9 +21162,9 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.29.7 cosmiconfig: 7.1.0 - resolve: 1.22.8 + resolve: 1.22.12 babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): dependencies: @@ -21307,7 +21429,7 @@ snapshots: browser-resolve@2.0.0: dependencies: - resolve: 1.22.8 + resolve: 1.22.12 browser-stdout@1.3.1: {} @@ -22470,6 +22592,8 @@ snapshots: csstype@3.1.3: {} + csstype@3.2.3: {} + currently-unhandled@0.4.1: dependencies: array-find-index: 1.0.2 @@ -22521,8 +22645,6 @@ snapshots: dateformat@3.0.3: {} - dayjs@1.10.7: {} - dayjs@1.11.11: {} de-indent@1.0.2: {} @@ -22708,8 +22830,8 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.28.2 - csstype: 3.1.3 + '@babel/runtime': 7.29.7 + csstype: 3.2.3 dom-serialize@2.2.1: dependencies: @@ -23231,8 +23353,8 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 + is-core-module: 2.16.1 + resolve: 1.22.12 transitivePeerDependencies: - supports-color @@ -24504,7 +24626,7 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -24565,7 +24687,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.6(debug@4.3.4) + follow-redirects: 1.15.6(debug@4.4.3) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -24623,7 +24745,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -28488,6 +28610,8 @@ snapshots: react-is@19.1.1: {} + react-is@19.2.6: {} + react-redux@7.2.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: '@babel/runtime': 7.24.5 @@ -28504,7 +28628,7 @@ snapshots: dependencies: object-assign: 4.1.1 react: 17.0.2 - react-is: 17.0.2 + react-is: 18.3.1 react-tabs@3.2.3(react@17.0.2): dependencies: @@ -28522,7 +28646,7 @@ snapshots: react-transition-group@4.4.5(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.29.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -28651,7 +28775,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.29.7 regex-parser@2.3.0: {} @@ -28796,7 +28920,7 @@ snapshots: resolve@1.19.0: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.16.1 path-parse: 1.0.7 resolve@1.22.10: @@ -28820,7 +28944,7 @@ snapshots: resolve@2.0.0-next.5: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -29540,7 +29664,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.3.7 + debug: 4.4.3 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -30437,7 +30561,7 @@ snapshots: punycode: 1.4.1 qs: 6.13.0 - use-sync-external-store@1.5.0(react@17.0.2): + use-sync-external-store@1.6.0(react@17.0.2): dependencies: react: 17.0.2 From d0ca2f9da181c4439945af74971bab9a0627bf42 Mon Sep 17 00:00:00 2001 From: AirBorne04 Date: Fri, 29 May 2026 22:28:37 +0200 Subject: [PATCH 3/4] update mui components to new api --- .../additional/ListWithDetailMasterItem.tsx | 6 ++--- .../src/complex/MaterialTableControl.tsx | 8 ++++--- .../src/complex/TableToolbar.tsx | 8 ++++--- .../src/complex/ValidationIcon.tsx | 4 ++-- .../src/controls/MaterialDateControl.tsx | 14 ++++++----- .../src/controls/MaterialDateTimeControl.tsx | 14 ++++++----- .../src/controls/MaterialNativeControl.tsx | 4 +++- .../src/controls/MaterialTimeControl.tsx | 14 ++++++----- .../src/layouts/ArrayToolbar.tsx | 18 ++++++++++---- .../src/layouts/ExpandPanelRenderer.tsx | 24 ++++++++++++++----- .../src/mui-controls/MuiAutocomplete.tsx | 9 +++---- .../material-renderers/src/util/layout.tsx | 3 +-- pnpm-lock.yaml | 23 +++++++----------- 13 files changed, 88 insertions(+), 61 deletions(-) diff --git a/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx b/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx index 299ffeb3b2..a3b74833f6 100644 --- a/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx +++ b/packages/material-renderers/src/additional/ListWithDetailMasterItem.tsx @@ -27,8 +27,8 @@ import { withJsonFormsMasterListItemProps } from '@jsonforms/react'; import { Avatar, IconButton, - ListItem, ListItemAvatar, + ListItemButton, ListItemText, Tooltip, } from '@mui/material'; @@ -47,7 +47,7 @@ export const ListWithDetailMasterItem = ({ disableRemove, }: StatePropsOfMasterItem) => { return ( - + {index + 1} @@ -68,7 +68,7 @@ export const ListWithDetailMasterItem = ({ )} - + ); }; diff --git a/packages/material-renderers/src/complex/MaterialTableControl.tsx b/packages/material-renderers/src/complex/MaterialTableControl.tsx index f0847c1be4..439c6992c3 100644 --- a/packages/material-renderers/src/complex/MaterialTableControl.tsx +++ b/packages/material-renderers/src/complex/MaterialTableControl.tsx @@ -309,9 +309,11 @@ const NonEmptyRowComponent = ({ > {showSortButtons ? ( diff --git a/packages/material-renderers/src/complex/TableToolbar.tsx b/packages/material-renderers/src/complex/TableToolbar.tsx index 4bb27e5d93..bf8d61df7d 100644 --- a/packages/material-renderers/src/complex/TableToolbar.tsx +++ b/packages/material-renderers/src/complex/TableToolbar.tsx @@ -81,9 +81,11 @@ const TableToolbar = React.memo(function TableToolbar({ {label} diff --git a/packages/material-renderers/src/complex/ValidationIcon.tsx b/packages/material-renderers/src/complex/ValidationIcon.tsx index a89445dd17..34ef2a5901 100644 --- a/packages/material-renderers/src/complex/ValidationIcon.tsx +++ b/packages/material-renderers/src/complex/ValidationIcon.tsx @@ -24,7 +24,7 @@ */ import React from 'react'; -import { ErrorOutline } from '@mui/icons-material'; +import { ErrorOutlined } from '@mui/icons-material'; import { Badge, Tooltip } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -41,7 +41,7 @@ const ValidationIcon: React.FC = ({ errorMessages, id }) => { return ( - + ); diff --git a/packages/material-renderers/src/controls/MaterialDateControl.tsx b/packages/material-renderers/src/controls/MaterialDateControl.tsx index c8eb82dab2..d69226a630 100644 --- a/packages/material-renderers/src/controls/MaterialDateControl.tsx +++ b/packages/material-renderers/src/controls/MaterialDateControl.tsx @@ -136,13 +136,15 @@ export const MaterialDateControl = (props: ControlProps) => { error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, variant: inputVariant, - inputProps: { - autoFocus: appliedUiSchemaOptions.focus, - type: 'text', - onFocus: onFocus, - onBlur: onBlurHandler, + slotProps: { + htmlInput: { + autoFocus: appliedUiSchemaOptions.focus, + type: 'text', + onFocus, + onBlur: onBlurHandler, + }, + inputLabel: data ? { shrink: true } : undefined, }, - InputLabelProps: data ? { shrink: true } : undefined, }, }} /> diff --git a/packages/material-renderers/src/controls/MaterialDateTimeControl.tsx b/packages/material-renderers/src/controls/MaterialDateTimeControl.tsx index 4c512201c1..bb648689c9 100644 --- a/packages/material-renderers/src/controls/MaterialDateTimeControl.tsx +++ b/packages/material-renderers/src/controls/MaterialDateTimeControl.tsx @@ -144,13 +144,15 @@ export const MaterialDateTimeControl = (props: ControlProps) => { error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, variant: inputVariant, - inputProps: { - autoFocus: appliedUiSchemaOptions.focus, - type: 'text', - onFocus: onFocus, - onBlur: onBlurHandler, + slotProps: { + htmlInput: { + autoFocus: appliedUiSchemaOptions.focus, + type: 'text', + onFocus, + onBlur: onBlurHandler, + }, + inputLabel: data ? { shrink: true } : undefined, }, - InputLabelProps: data ? { shrink: true } : undefined, }, }} /> diff --git a/packages/material-renderers/src/controls/MaterialNativeControl.tsx b/packages/material-renderers/src/controls/MaterialNativeControl.tsx index 6c650f1f50..80a1040734 100644 --- a/packages/material-renderers/src/controls/MaterialNativeControl.tsx +++ b/packages/material-renderers/src/controls/MaterialNativeControl.tsx @@ -93,7 +93,9 @@ export const MaterialNativeControl = (props: ControlProps) => { onFocus={onFocus} onBlur={onBlur} helperText={!isValid ? errors : showDescription ? description : null} - InputLabelProps={{ shrink: true }} + slotProps={{ + inputLabel: { shrink: true }, + }} value={inputValue} onChange={onChange} /> diff --git a/packages/material-renderers/src/controls/MaterialTimeControl.tsx b/packages/material-renderers/src/controls/MaterialTimeControl.tsx index e22638b1aa..0a6d5ebb76 100644 --- a/packages/material-renderers/src/controls/MaterialTimeControl.tsx +++ b/packages/material-renderers/src/controls/MaterialTimeControl.tsx @@ -138,13 +138,15 @@ export const MaterialTimeControl = (props: ControlProps) => { error: !isValid, fullWidth: !appliedUiSchemaOptions.trim, variant: inputVariant, - inputProps: { - autoFocus: appliedUiSchemaOptions.focus, - type: 'text', - onBlur: onBlurHandler, - onFocus: onFocus, + slotProps: { + htmlInput: { + autoFocus: appliedUiSchemaOptions.focus, + type: 'text', + onBlur: onBlurHandler, + onFocus: onFocus, + }, + inputLabel: data ? { shrink: true } : undefined, }, - InputLabelProps: data ? { shrink: true } : undefined, }, }} /> diff --git a/packages/material-renderers/src/layouts/ArrayToolbar.tsx b/packages/material-renderers/src/layouts/ArrayToolbar.tsx index 2d9009c44f..94dae6018f 100644 --- a/packages/material-renderers/src/layouts/ArrayToolbar.tsx +++ b/packages/material-renderers/src/layouts/ArrayToolbar.tsx @@ -35,14 +35,22 @@ export const ArrayLayoutToolbar = React.memo(function ArrayLayoutToolbar({ }: ArrayLayoutToolbarProps) { return ( - - + + {label} diff --git a/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx b/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx index 53d528dc2c..94e527ef7f 100644 --- a/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx +++ b/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx @@ -148,9 +148,14 @@ const ExpandPanelRendererComponent = (props: ExpandPanelProps) => { onChange={handleExpansion(childPath)} > }> - + - + {index + 1} @@ -160,13 +165,20 @@ const ExpandPanelRendererComponent = (props: ExpandPanelProps) => { - + {showSortButtons && enabled ? ( diff --git a/packages/material-renderers/src/mui-controls/MuiAutocomplete.tsx b/packages/material-renderers/src/mui-controls/MuiAutocomplete.tsx index 89541945ad..758779cee6 100644 --- a/packages/material-renderers/src/mui-controls/MuiAutocomplete.tsx +++ b/packages/material-renderers/src/mui-controls/MuiAutocomplete.tsx @@ -124,20 +124,21 @@ export const MuiAutocomplete = ( renderInput={(params) => { return ( {renderLayoutElements( elements, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cfc01d819a..c736460f68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12362,9 +12362,6 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-is@19.1.1: - resolution: {integrity: sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==} - react-is@19.2.6: resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} @@ -15018,7 +15015,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2003.26(chokidar@4.0.1) - '@angular-devkit/build-webpack': 0.2003.26(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.105.0(esbuild@0.28.0)))(webpack@5.105.0(esbuild@0.28.0)) + '@angular-devkit/build-webpack': 0.2003.26(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.91.0))(webpack@5.105.0(esbuild@0.28.0)) '@angular-devkit/core': 20.3.26(chokidar@4.0.1) '@angular/build': 20.3.26(@angular/compiler-cli@20.3.21(@angular/compiler@20.3.21)(typescript@5.8.3))(@angular/compiler@20.3.21)(@angular/core@20.3.21(@angular/compiler@20.3.21)(rxjs@6.6.7)(zone.js@0.15.1))(@angular/platform-browser@20.3.21(@angular/animations@20.3.21(@angular/core@20.3.21(@angular/compiler@20.3.21)(rxjs@6.6.7)(zone.js@0.15.1)))(@angular/common@20.3.21(@angular/core@20.3.21(@angular/compiler@20.3.21)(rxjs@6.6.7)(zone.js@0.15.1))(rxjs@6.6.7))(@angular/core@20.3.21(@angular/compiler@20.3.21)(rxjs@6.6.7)(zone.js@0.15.1)))(@types/node@24.12.2)(chokidar@4.0.1)(jiti@1.21.0)(karma@6.4.3)(less@4.4.0)(ng-packagr@20.3.2(@angular/compiler-cli@20.3.21(@angular/compiler@20.3.21)(typescript@5.8.3))(tslib@2.6.2)(typescript@5.8.3))(postcss@8.5.12)(stylus@0.57.0)(terser@5.43.1)(tslib@2.8.1)(typescript@5.8.3)(yaml@2.8.1) '@angular/compiler-cli': 20.3.21(@angular/compiler@20.3.21)(typescript@5.8.3) @@ -15104,7 +15101,7 @@ snapshots: - webpack-cli - yaml - '@angular-devkit/build-webpack@0.2003.26(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.105.0(esbuild@0.28.0)))(webpack@5.105.0(esbuild@0.28.0))': + '@angular-devkit/build-webpack@0.2003.26(chokidar@4.0.1)(webpack-dev-server@5.2.2(webpack@5.91.0))(webpack@5.105.0(esbuild@0.28.0))': dependencies: '@angular-devkit/architect': 0.2003.26(chokidar@4.0.1) rxjs: 7.8.2 @@ -18324,7 +18321,7 @@ snapshots: '@mui/material@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.7 '@mui/core-downloads-tracker': 7.3.0 '@mui/system': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@mui/types': 7.4.6(@types/react@17.0.80) @@ -18332,11 +18329,11 @@ snapshots: '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.12(@types/react@17.0.80) clsx: 2.1.1 - csstype: 3.1.3 + csstype: 3.2.3 prop-types: 15.8.1 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - react-is: 19.1.1 + react-is: 19.2.6 react-transition-group: 4.4.5(react-dom@17.0.2(react@17.0.2))(react@17.0.2) optionalDependencies: '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) @@ -18388,7 +18385,7 @@ snapshots: '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 '@emotion/sheet': 1.4.0 - csstype: 3.1.3 + csstype: 3.2.3 prop-types: 15.8.1 react: 17.0.2 optionalDependencies: @@ -18416,7 +18413,7 @@ snapshots: '@mui/types': 7.4.6(@types/react@17.0.80) '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) clsx: 2.1.1 - csstype: 3.1.3 + csstype: 3.2.3 prop-types: 15.8.1 react: 17.0.2 optionalDependencies: @@ -20358,7 +20355,7 @@ snapshots: '@vue/reactivity': 3.5.17 '@vue/runtime-core': 3.5.17 '@vue/shared': 3.5.17 - csstype: 3.1.3 + csstype: 3.2.3 '@vue/server-renderer@3.5.17(vue@3.5.17(typescript@5.8.3))': dependencies: @@ -28608,8 +28605,6 @@ snapshots: react-is@18.3.1: {} - react-is@19.1.1: {} - react-is@19.2.6: {} react-redux@7.2.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2): @@ -30913,7 +30908,7 @@ snapshots: vue@2.7.16: dependencies: '@vue/compiler-sfc': 2.7.16 - csstype: 3.1.3 + csstype: 3.2.3 vue@3.5.17(typescript@5.8.3): dependencies: From bf3740aca44d8ea6a7224de5fb58dbcc4c16f158 Mon Sep 17 00:00:00 2001 From: AirBorne04 Date: Mon, 1 Jun 2026 12:19:09 +0200 Subject: [PATCH 4/4] adjusting tests --- packages/examples-react/package.json | 2 +- packages/material-renderers/package.json | 22 +- .../src/layouts/ExpandPanelRenderer.tsx | 3 + .../renderers/MaterialAllOfRenderer.test.tsx | 9 +- .../renderers/MaterialAnyOfRenderer.test.tsx | 91 +++-- .../MaterialAnyOfStringOrEnumControl.test.tsx | 5 +- .../renderers/MaterialArrayControl.test.tsx | 84 ++-- .../renderers/MaterialArrayLayout.test.tsx | 163 ++++---- .../renderers/MaterialIntegerCell.test.tsx | 363 ++++++++++-------- .../MaterialListWithDetailRenderer.test.tsx | 2 - .../renderers/MaterialNumberCell.test.tsx | 134 +++---- .../renderers/MaterialOneOfRenderer.test.tsx | 94 +++-- .../test/renderers/MaterialTextCell.test.tsx | 147 +++---- .../renderers/MaterialTextControl.test.tsx | 23 +- .../test/renderers/MaterialTimeCell.test.tsx | 195 +++++----- .../material-renderers/test/renderers/util.ts | 10 + pnpm-lock.yaml | 188 +-------- 17 files changed, 754 insertions(+), 781 deletions(-) diff --git a/packages/examples-react/package.json b/packages/examples-react/package.json index 9d4a7dd300..c7bb5db5b2 100644 --- a/packages/examples-react/package.json +++ b/packages/examples-react/package.json @@ -6,7 +6,7 @@ "@jsonforms/core": "workspace:*", "@jsonforms/examples": "workspace:*", "@jsonforms/react": "workspace:*", - "@mui/material": "^7.3.0 || ^8.0.0 || ^9.0.0", + "@mui/material": "^9.0.0", "@types/react-highlight": "^0.12.5", "@types/react-tabs": "^2.3.3", "highlight.js": "^11.3.1", diff --git a/packages/material-renderers/package.json b/packages/material-renderers/package.json index c835a4b174..12a073bb32 100644 --- a/packages/material-renderers/package.json +++ b/packages/material-renderers/package.json @@ -62,7 +62,12 @@ "js" ], "transform": { - "^.+\\.(ts|tsx)$": "ts-jest" + "^.+\\.(ts|tsx)$": [ + "ts-jest", + { + "tsconfig": "tsconfig.test.json" + } + ] }, "testEnvironment": "jsdom", "testMatch": [ @@ -72,12 +77,7 @@ "testPathIgnorePatterns": [ "/node_modules/", "/dist/" - ], - "globals": { - "ts-jest": { - "tsconfig": "tsconfig.test.json" - } - } + ] }, "nyc": { "reporter": [ @@ -87,7 +87,7 @@ }, "dependencies": { "@date-io/dayjs": "^3.0.0", - "dayjs": "^1.10.7", + "dayjs": "1.10.7", "lodash": "^4.17.21" }, "peerDependencies": { @@ -95,9 +95,9 @@ "@emotion/styled": "^11.3.0 || ^12.0.0", "@jsonforms/core": "3.8.0-alpha.2", "@jsonforms/react": "3.8.0-alpha.2", - "@mui/icons-material": "^7.0.0 || ^8.0.0 || ^9.0.0", - "@mui/material": "^7.0.0 || ^8.0.0 || ^9.0.0", - "@mui/x-date-pickers": "^8.0.0 || ^9.0.0", + "@mui/icons-material": "^9.0.0", + "@mui/material": "^9.0.0", + "@mui/x-date-pickers": "^9.0.0", "react": "^16.12.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "devDependencies": { diff --git a/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx b/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx index 94e527ef7f..6326060311 100644 --- a/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx +++ b/packages/material-renderers/src/layouts/ExpandPanelRenderer.tsx @@ -190,6 +190,7 @@ const ExpandPanelRendererComponent = (props: ExpandPanelProps) => { open={enableMoveUp ? undefined : false} > { open={enableMoveDown ? undefined : false} > { placement='bottom' > { label: 'Value', scope: '#/properties/value', }; - wrapper = mount( + + wrapper = mountWithAct( { scope: '#/properties/value', }; const core = initCore(schema, uischema); - wrapper = mount( + wrapper = mountWithAct( diff --git a/packages/material-renderers/test/renderers/MaterialAnyOfRenderer.test.tsx b/packages/material-renderers/test/renderers/MaterialAnyOfRenderer.test.tsx index e4ee868a4f..169008e40a 100644 --- a/packages/material-renderers/test/renderers/MaterialAnyOfRenderer.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialAnyOfRenderer.test.tsx @@ -23,8 +23,8 @@ THE SOFTWARE. */ import React from 'react'; - -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import { act } from 'react-dom/test-utils'; +import Enzyme, { ReactWrapper } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { ControlElement } from '@jsonforms/core'; import { @@ -33,12 +33,10 @@ import { materialRenderers, } from '../../src'; import { JsonForms, JsonFormsStateProvider } from '@jsonforms/react'; -import { initCore, TestEmitter } from './util'; +import { initCore, mountWithAct, TestEmitter } from './util'; Enzyme.configure({ adapter: new Adapter() }); -const waitForAsync = () => new Promise((resolve) => setTimeout(resolve, 0)); - const clickAddButton = (wrapper: ReactWrapper, times: number) => { const buttons = wrapper.find('button'); const addButton = buttons.at(2); @@ -57,9 +55,23 @@ const selectanyOfTab = (wrapper: ReactWrapper, at: number) => { describe('Material anyOf renderer', () => { let wrapper: ReactWrapper; - afterEach(() => wrapper.unmount()); + beforeEach(() => { + jest.useFakeTimers(); + }); + + afterEach(() => { + // flush any pending debounce / async updates + jest.runOnlyPendingTimers(); + + // cleanup React tree FIRST + if (wrapper) { + wrapper.unmount(); + } + + jest.useRealTimers(); + }); - it('should add an item at correct path', (done) => { + it('should add an item at correct path', () => { const schema = { type: 'object', properties: { @@ -85,7 +97,7 @@ describe('Material anyOf renderer', () => { const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( { }} /> ); + expect(wrapper.find(MaterialAnyOfRenderer).length).toBeTruthy(); - const input = wrapper.find('input').first(); - input.simulate('change', { target: { value: 'test' } }); + + act(() => { + const input = wrapper.find('input').first(); + input.simulate('change', { target: { value: 'test' } }); + + jest.runAllTimers(); + }); + wrapper.update(); - setTimeout(() => { - expect(onChangeData.data).toEqual({ - value: 'test', - }); - done(); - }, 1000); + expect(onChangeData.data).toEqual({ + value: 'test', + }); }); - it('should add a "mything"', async () => { + it('should add a "mything"', () => { const schema = { type: 'object', properties: { @@ -155,7 +171,7 @@ describe('Material anyOf renderer', () => { scope: '#/properties/myThingsAndOrYourThings', }; const core = initCore(schema, uischema); - wrapper = mount( + wrapper = mountWithAct( @@ -163,10 +179,6 @@ describe('Material anyOf renderer', () => { ); - await waitForAsync(); - - wrapper.update(); - selectanyOfTab(wrapper, 1); const nrOfRowsBeforeAdd = wrapper.find('tr'); clickAddButton(wrapper, 2); @@ -178,7 +190,7 @@ describe('Material anyOf renderer', () => { expect(nrOfRowsAfterAdd.length).toBe(4); }); - it('should switch to "yourThing" edit, then switch back, then edit', async () => { + it('should switch to "yourThing" edit, then switch back, then edit', () => { const schema = { type: 'object', properties: { @@ -228,9 +240,14 @@ describe('Material anyOf renderer', () => { data: undefined, }; const core = initCore(schema, uischema); - wrapper = mount( + + wrapper = mountWithAct( { @@ -241,10 +258,6 @@ describe('Material anyOf renderer', () => { ); - await waitForAsync(); - - wrapper.update(); - selectanyOfTab(wrapper, 1); clickAddButton(wrapper, 1); wrapper @@ -255,20 +268,15 @@ describe('Material anyOf renderer', () => { selectanyOfTab(wrapper, 0); const input = wrapper.find('input').first(); - input.simulate('change', { target: { value: 'test' } }); + act(() => { + input.simulate('change', { target: { value: 'test' } }); + jest.runAllTimers(); + }); wrapper.update(); - let done: (value: undefined) => void; - const donePromise = new Promise((resolve) => { - done = resolve; + expect(onChangeData.data).toEqual({ + myThingsAndOrYourThings: [{ age: 5, name: 'test' }], }); - setTimeout(() => { - expect(onChangeData.data).toEqual({ - myThingsAndOrYourThings: [{ age: 5, name: 'test' }], - }); - done(undefined); - }, 1000); - return donePromise; }); it('should be hideable', () => { @@ -295,7 +303,8 @@ describe('Material anyOf renderer', () => { scope: '#/properties/value', }; const core = initCore(schema, uischema); - wrapper = mount( + + wrapper = mountWithAct( diff --git a/packages/material-renderers/test/renderers/MaterialAnyOfStringOrEnumControl.test.tsx b/packages/material-renderers/test/renderers/MaterialAnyOfStringOrEnumControl.test.tsx index d182dde19c..4ef709a66e 100644 --- a/packages/material-renderers/test/renderers/MaterialAnyOfStringOrEnumControl.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialAnyOfStringOrEnumControl.test.tsx @@ -24,7 +24,7 @@ */ import React from 'react'; -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import Enzyme, { ReactWrapper } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { ControlElement, JsonSchema } from '@jsonforms/core'; import { @@ -33,6 +33,7 @@ import { materialRenderers, } from '../../src'; import { JsonForms } from '@jsonforms/react'; +import { mountWithAct } from './util'; Enzyme.configure({ adapter: new Adapter() }); @@ -117,7 +118,7 @@ describe('Material any of string or enum control', () => { }); it('render', () => { - wrapper = mount( + wrapper = mountWithAct( { it('should render', () => { const core = initCore(fixture.schema, fixture.uischema, fixture.data); - wrapper = mount( + wrapper = mountWithAct( @@ -124,7 +126,7 @@ describe('Material array control', () => { it('should render empty', () => { const core = initCore(fixture.schema, fixture.uischema); - wrapper = mount( + wrapper = mountWithAct( @@ -161,7 +163,7 @@ describe('Material array control', () => { }; const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -206,7 +208,7 @@ describe('Material array control', () => { }; const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -241,7 +243,7 @@ describe('Material array control', () => { scope: '#/properties/test', }; const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -275,7 +277,7 @@ describe('Material array control', () => { scope: '#/properties/test', }; const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -295,7 +297,7 @@ describe('Material array control', () => { }; const core = initCore(descriptionSchema, fixture.uischema, fixture.data); - wrapper = mount( + wrapper = mountWithAct( @@ -319,7 +321,7 @@ describe('Material array control', () => { delete descriptionSchema.description; const core = initCore(descriptionSchema, fixture.uischema, fixture.data); - wrapper = mount( + wrapper = mountWithAct( @@ -337,7 +339,7 @@ describe('Material array control', () => { const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -362,16 +364,24 @@ describe('Material array control', () => { // delete row // two dialog buttons (no + yes) const nrOfRowsBeforeDelete = wrapper.find('tr').length; + expect(nrOfRowsBeforeDelete).toBe(4); + + act(() => { + const deleteButton = buttons.at(2); + deleteButton.simulate('click'); + }); + wrapper.update(); - const deleteButton = buttons.at(2); - deleteButton.simulate('click'); + act(() => { + // Re-collect buttons after the dialog opens + const buttonsAfterDelete = wrapper.find('button'); + const confirmButton = buttonsAfterDelete.at(6); + confirmButton.simulate('click'); + }); - const confirmButton = buttons.at(6); - confirmButton.simulate('click'); + wrapper.update(); const nrOfRowsAfterDelete = wrapper.find('tr').length; - - expect(nrOfRowsBeforeDelete).toBe(4); expect(nrOfRowsAfterDelete).toBe(3); expect(onChangeData.data.length).toBe(1); }); @@ -396,7 +406,7 @@ describe('Material array control', () => { }, ]; - wrapper = mount( + wrapper = mountWithAct( @@ -420,7 +430,7 @@ describe('Material array control', () => { cell: CellRenderer1, }; - wrapper = mount( + wrapper = mountWithAct( @@ -467,7 +477,7 @@ describe('Material array control', () => { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -524,7 +534,7 @@ describe('Material array control', () => { scope: '#/properties/things', }; const core = initCore(schema, uischema, {}); - wrapper = mount( + wrapper = mountWithAct( @@ -542,10 +552,11 @@ describe('Material array control', () => { const nrOfRows = wrapper.find('tr').length; expect(nrOfRows).toBe(0); }); + it('should render sort buttons if showSortButtons is true', () => { const data = { test: ['foo'] }; const core = initCore(fixture2.schema, fixture2.uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -564,12 +575,13 @@ describe('Material array control', () => { wrapper.find('button').find({ 'aria-label': 'Move item down' }).length ).toBe(1); }); + it('should be able to move item down if down button is clicked', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -595,12 +607,13 @@ describe('Material array control', () => { test: ['baz', 'foo', 'bar'], }); }); + it('should be able to move item up if up button is clicked', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -626,9 +639,10 @@ describe('Material array control', () => { test: ['foo', 'bar', 'baz'], }); }); + it('should have up button disabled for first element', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); - wrapper = mount( + wrapper = mountWithAct( @@ -649,7 +663,7 @@ describe('Material array control', () => { it('should have fields enabled', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); - wrapper = mount( + wrapper = mountWithAct( @@ -667,7 +681,7 @@ describe('Material array control', () => { it('should have fields disabled', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); - wrapper = mount( + wrapper = mountWithAct( @@ -685,7 +699,7 @@ describe('Material array control', () => { it('add and delete buttons should exist if enabled', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); - wrapper = mount( + wrapper = mountWithAct( @@ -705,7 +719,7 @@ describe('Material array control', () => { it('add and delete buttons should be removed if disabled', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); - wrapper = mount( + wrapper = mountWithAct( @@ -727,7 +741,7 @@ describe('Material array control', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); const uischema = { ...fixture2.uischema }; uischema.options = { ...uischema.options, disableAdd: true }; - wrapper = mount( + wrapper = mountWithAct( @@ -746,7 +760,7 @@ describe('Material array control', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); const uischema = { ...fixture2.uischema }; uischema.options = { ...uischema.options, disableRemove: true }; - wrapper = mount( + wrapper = mountWithAct( @@ -763,7 +777,7 @@ describe('Material array control', () => { it('add and delete buttons should be removed if indicated via config', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); - wrapper = mount( + wrapper = mountWithAct( { it('should have down button disabled for last element', () => { const core = initCore(fixture2.schema, fixture2.uischema, fixture2.data); - wrapper = mount( + wrapper = mountWithAct( @@ -820,6 +834,7 @@ describe('Material array control', () => { fixture.data ); }); + it('should have a translatable tooltip for add button', () => { wrapper = checkTooltipTranslation( fixture.schema, @@ -846,6 +861,7 @@ describe('Material array control', () => { fixture2.data ); }); + it('should have a translatable tooltip for delete button', () => { wrapper = checkTooltipTranslation( fixture2.schema, @@ -872,6 +888,7 @@ describe('Material array control', () => { fixture2.data ); }); + it('should have a translatable tooltip for up button', () => { wrapper = checkTooltipTranslation( fixture2.schema, @@ -898,6 +915,7 @@ describe('Material array control', () => { fixture2.data ); }); + it('should have a translatable tooltip for down button', () => { wrapper = checkTooltipTranslation( fixture2.schema, diff --git a/packages/material-renderers/test/renderers/MaterialArrayLayout.test.tsx b/packages/material-renderers/test/renderers/MaterialArrayLayout.test.tsx index baf6d95b25..20e6944bba 100644 --- a/packages/material-renderers/test/renderers/MaterialArrayLayout.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialArrayLayout.test.tsx @@ -30,20 +30,27 @@ import { Translator, } from '@jsonforms/core'; import * as React from 'react'; +import { act } from 'react-dom/test-utils'; import { ArrayLayoutToolbar, materialRenderers } from '../../src'; import { MaterialArrayLayout, materialArrayLayoutTester, } from '../../src/layouts'; -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import Enzyme, { ReactWrapper } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { JsonForms, JsonFormsStateProvider } from '@jsonforms/react'; import { Accordion } from '@mui/material'; -import { createTesterContext, testTranslator, initCore } from './util'; +import { + createTesterContext, + testTranslator, + initCore, + mountWithAct, +} from './util'; import { checkTooltip, checkTooltipTranslation } from './tooltipChecker'; import { cloneDeep } from 'lodash'; +jest.useFakeTimers(); Enzyme.configure({ adapter: new Adapter() }); const data = [ @@ -397,7 +404,7 @@ describe('Material array layout', () => { it('should render two by two children', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -412,7 +419,7 @@ describe('Material array layout', () => { it('should generate uischema when options.detail=GENERATE', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -430,7 +437,7 @@ describe('Material array layout', () => { it('should use inline options.detail uischema', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -448,7 +455,7 @@ describe('Material array layout', () => { it('should be hideable', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -467,7 +474,7 @@ describe('Material array layout', () => { it('should have renderers prop via ownProps', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -488,7 +495,7 @@ describe('Material array layout', () => { ...uischema, label: 'My awesome label', }; - wrapper = mount( + wrapper = mountWithAct( { }); it('should render sort buttons if showSortButtons is true', () => { - wrapper = mount( + wrapper = mountWithAct( { wrapper .find('Memo(ExpandPanelRendererComponent)') .at(0) - .find('button[aria-label="Move item up"]').length + .find('div[aria-label="Move item up"]').length ).toBe(1); // down button expect( wrapper .find('Memo(ExpandPanelRendererComponent)') .at(0) - .find('button[aria-label="Move item down"]').length + .find('div[aria-label="Move item down"]').length ).toBe(1); }); + it('should render sort buttons if showSortButtons is true in config', () => { - wrapper = mount( + wrapper = mountWithAct( { wrapper .find('Memo(ExpandPanelRendererComponent)') .at(0) - .find('button') - .find('button[aria-label="Move item up"]').length + .find('div[aria-label="Move item up"]').length ).toBe(1); // down button expect( wrapper .find('Memo(ExpandPanelRendererComponent)') .at(0) - .find('button') - .find('button[aria-label="Move item down"]').length + .find('div[aria-label="Move item down"]').length ).toBe(1); }); - it('should move item up if up button is presses', (done) => { + + it('should move item up if up button is presses', () => { const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( { /> ); + jest.runAllTimers(); + wrapper.update(); + expect(wrapper.find(MaterialArrayLayout).length).toBeTruthy(); // getting up button of second item in expension panel; const upButton = wrapper .find('Memo(ExpandPanelRendererComponent)') .at(1) - .find('button[aria-label="Move item up"]'); - upButton.simulate('click'); + .find('div[aria-label="Move item up"]'); + + act(() => { + upButton.simulate('click'); + jest.runAllTimers(); + wrapper.update(); + }); // events are debounced for some time, so let's wait - setTimeout(() => { - expect(onChangeData.data).toEqual([ - { - message: 'Yolo', - message2: 'Yolo 2', - }, - { - message: 'El Barto was here', - message2: 'El Barto was here 2', - done: true, - }, - ]); - done(); - }, 50); + expect(onChangeData.data).toEqual([ + { + message: 'Yolo', + message2: 'Yolo 2', + }, + { + message: 'El Barto was here', + message2: 'El Barto was here 2', + done: true, + }, + ]); }); - it('should move item down if down button is pressed', (done) => { + + it('should move item down if down button is pressed', () => { const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( { const upButton = wrapper .find('Memo(ExpandPanelRendererComponent)') .at(0) - .find('button[aria-label="Move item down"]'); - upButton.simulate('click'); - // events are debounced for some time, so let's wait - setTimeout(() => { - expect(onChangeData.data).toEqual([ - { - message: 'Yolo', - message2: 'Yolo 2', - }, - { - message: 'El Barto was here', - message2: 'El Barto was here 2', - done: true, - }, - ]); - done(); - }, 50); + .find('div[aria-label="Move item down"]'); + + act(() => { + upButton.simulate('click'); + // events are debounced for some time, so let's wait + jest.runAllTimers(); + wrapper.update(); + }); + + expect(onChangeData.data).toEqual([ + { + message: 'Yolo', + message2: 'Yolo 2', + }, + { + message: 'El Barto was here', + message2: 'El Barto was here 2', + done: true, + }, + ]); }); + it('should have up button disabled for first element', () => { - wrapper = mount( + wrapper = mountWithAct( { const upButton = wrapper .find('Memo(ExpandPanelRendererComponent)') .at(0) - .find('button[aria-label="Move item up"]'); - expect(upButton.is('[disabled]')).toBe(true); + .find('div[aria-label="Move item up"]'); + expect(upButton.hasClass('Mui-disabled')).toBe(true); }); + it('should have down button disabled for last element', () => { - wrapper = mount( + wrapper = mountWithAct( { // getting up button of second item in expension panel; const downButton = wrapper .find('Memo(ExpandPanelRendererComponent)') - .at(1) - .find('button[aria-label="Move item down"]'); - expect(downButton.is('[disabled]')).toBe(true); + .last() + .find('div[aria-label="Move item down"]'); + + expect(downButton.hasClass('Mui-disabled')).toBe(true); }); it('add and delete buttons should exist if enabled', () => { - wrapper = mount( + wrapper = mountWithAct( { it('add and delete buttons should be removed if disabled', () => { const readOnlySchema = { ...schema }; readOnlySchema.readOnly = true; - wrapper = mount( + wrapper = mountWithAct( { it('add button should be removed if indicated via ui schema', () => { const disableUischema = { ...uischema }; disableUischema.options = { ...uischema.options, disableAdd: true }; - wrapper = mount( + wrapper = mountWithAct( { it('delete button should be removed if indicated via ui schema', () => { const disableUischema = { ...uischema }; disableUischema.options = { ...uischema.options, disableRemove: true }; - wrapper = mount( + wrapper = mountWithAct( { }); it('add and delete buttons should be removed if indicated via config', () => { - wrapper = mount( + wrapper = mountWithAct( { }); it('should render configured child label property as child label', () => { - wrapper = mount( + wrapper = mountWithAct( { description: 'This is an array description', }; - wrapper = mount( + wrapper = mountWithAct( { // make sure there is no description delete descriptionSchema.description; - wrapper = mount( + wrapper = mountWithAct( { it('should have a translation for no data', () => { const translate = () => 'Translated'; const core = initCore(schema, uischema, emptyData); - wrapper = mount( + wrapper = mountWithAct( @@ -890,6 +909,7 @@ describe('Material array layout', () => { data ); }); + it('should have a translatable tooltip for add button', () => { wrapper = checkTooltipTranslation( nestedSchema, @@ -916,6 +936,7 @@ describe('Material array layout', () => { data ); }); + it('should have a translatable tooltip for delete button', () => { wrapper = checkTooltipTranslation( nestedSchema, @@ -942,6 +963,7 @@ describe('Material array layout', () => { data ); }); + it('should have a translatable tooltip for up button', () => { wrapper = checkTooltipTranslation( nestedSchema, @@ -968,6 +990,7 @@ describe('Material array layout', () => { data ); }); + it('should have a translatable tooltip for down button', () => { wrapper = checkTooltipTranslation( nestedSchema, @@ -1240,7 +1263,7 @@ function arrayLayoutWrapper( ) { const core = initCore(schema, uiSchema, data); - wrapper = mount( + wrapper = mountWithAct( { }, }; const core = initCore(schema, control, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mount( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().autoFocus).toBeTruthy(); }); @@ -135,13 +139,15 @@ describe('Material integer cells', () => { }, }; const core = initCore(schema, control, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mount( + + + + ); + }); const input = wrapper.find('input'); expect(input.props().autoFocus).toBeFalsy(); }); @@ -152,26 +158,30 @@ describe('Material integer cells', () => { scope: '#/properties/foo', }; const core = initCore(schema, control, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mount( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().autoFocus).toBeFalsy(); }); it('should render', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mount( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().type).toBe('number'); @@ -181,13 +191,15 @@ describe('Material integer cells', () => { it('should render 0', () => { const core = initCore(schema, uischema, { foo: 0 }); - wrapper = mount( - - - - ); + act(() => { + wrapper = mount( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().type).toBe('number'); @@ -195,173 +207,200 @@ describe('Material integer cells', () => { expect(input.props().value).toBe(0); }); - it('should update via input event', (done) => { + it('should update via input event', () => { const core = initCore(schema, uischema, data); const onChangeData: any = { data: undefined, }; - wrapper = mount( - - { - onChangeData.data = data; - }} - /> - - - ); + act(() => { + wrapper = mount( + + { + onChangeData.data = data; + }} + /> + + + ); + }); const input = wrapper.find('input'); - input.simulate('change', { target: { value: 13 } }); - setTimeout(() => { - expect(onChangeData.data.foo).toBe(13); - done(); - }, 1000); + act(() => { + input.simulate('change', { target: { value: 13 } }); + jest.runAllTimers(); + }); + + wrapper.update(); + expect(onChangeData.data.foo).toBe(13); }); - it('should update via action', (done) => { + it('should update via action', () => { const core = initCore(schema, uischema, { foo: 13 }); - wrapper = mount( - - - - ); - core.data = { ...core.data, foo: 42 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper = mount( + + + + ); + }); + + act(() => { + core.data = { ...core.data, foo: 42 }; + wrapper.setProps({ + initState: { renderers: materialRenderers, core }, + }); + + jest.runAllTimers(); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(42); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(42); }); - it('should not update with undefined value', (done) => { + it('should not update with undefined value', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); - core.data = { ...core.data, foo: undefined }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper = mount( + + + + ); + + core.data = { ...core.data, foo: undefined }; + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + + jest.runAllTimers(); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input'); - expect(input.props().value).toBe(''); - done(); - }, 1000); + + const input = wrapper.find('input'); + expect(input.props().value).toBe(''); }); - it('should not update with null value', (done) => { + it('should not update with null value', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); - core.data = { ...core.data, foo: null }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper = mount( + + + + ); + core.data = { ...core.data, foo: null }; + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(''); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(''); }); - it('should not update with wrong ref', (done) => { + it('should not update with wrong ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); - core.data = { ...core.data, bar: 11 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper = mount( + + + + ); + + core.data = { ...core.data, bar: 11 }; + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input'); - expect(input.props().value).toBe(42); - done(); - }, 1000); + + const input = wrapper.find('input'); + expect(input.props().value).toBe(42); }); - it('should not update with null ref', (done) => { + it('should not update with null ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); - core.data = { ...core.data, null: 13 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper = mount( + + + + ); + + core.data = { ...core.data, null: 13 }; + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input'); - expect(input.props().value).toBe(42); - done(); - }, 1000); + + const input = wrapper.find('input'); + expect(input.props().value).toBe(42); }); - it('should not update with undefined ref', (done) => { + it('should not update with undefined ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); - core.data = { ...core.data, undefined: 13 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper = mount( + + + + ); + + core.data = { ...core.data, undefined: 13 }; + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input'); - expect(input.props().value).toBe(42); - done(); - }, 1000); + + const input = wrapper.find('input'); + expect(input.props().value).toBe(42); }); it('can be disabled', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mount( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().disabled).toBeTruthy(); }); it('should be enabled by default', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mount( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().disabled).toBeFalsy(); }); diff --git a/packages/material-renderers/test/renderers/MaterialListWithDetailRenderer.test.tsx b/packages/material-renderers/test/renderers/MaterialListWithDetailRenderer.test.tsx index dca96becb5..e1f58fe088 100644 --- a/packages/material-renderers/test/renderers/MaterialListWithDetailRenderer.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialListWithDetailRenderer.test.tsx @@ -478,8 +478,6 @@ describe('Material list with detail renderer', () => { ); - console.log(wrapper.debug()); - const deleteButton = wrapper.find({ 'aria-label': 'Delete button' }); expect(deleteButton.exists()).toBeTruthy(); const addButton = wrapper.find({ 'aria-label': 'Add' }); diff --git a/packages/material-renderers/test/renderers/MaterialNumberCell.test.tsx b/packages/material-renderers/test/renderers/MaterialNumberCell.test.tsx index aa02d0f65b..33d19e60bf 100644 --- a/packages/material-renderers/test/renderers/MaterialNumberCell.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialNumberCell.test.tsx @@ -28,11 +28,13 @@ import NumberCell, { materialNumberCellTester, } from '../../src/cells/MaterialNumberCell'; import { materialRenderers } from '../../src'; -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import Enzyme, { ReactWrapper } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { JsonFormsStateProvider } from '@jsonforms/react'; -import { initCore, TestEmitter } from './util'; +import { initCore, mountWithAct, TestEmitter } from './util'; +import { act } from 'react-dom/test-utils'; +jest.useFakeTimers(); Enzyme.configure({ adapter: new Adapter() }); const data = { foo: 3.14 }; @@ -142,7 +144,7 @@ describe('Material number cells', () => { }, }; const core = initCore(schema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -162,7 +164,7 @@ describe('Material number cells', () => { }, }; const core = initCore(schema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -179,7 +181,7 @@ describe('Material number cells', () => { scope: '#/properties/foo', }; const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -200,7 +202,7 @@ describe('Material number cells', () => { }, }; const core = initCore(schema, uischema, { foo: 3.14 }); - wrapper = mount( + wrapper = mountWithAct( @@ -224,7 +226,7 @@ describe('Material number cells', () => { }, }; const core = initCore(schema, uischema, { foo: 0 }); - wrapper = mount( + wrapper = mountWithAct( @@ -238,12 +240,12 @@ describe('Material number cells', () => { expect(input.props().value).toBe(0); }); - it('should update via input event', (done) => { + it('should update via input event', () => { const core = initCore(schema, uischema, data); const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -255,17 +257,19 @@ describe('Material number cells', () => { ); - const input = wrapper.find('input'); - input.simulate('change', { target: { value: 2.72 } }); - setTimeout(() => { - expect(onChangeData.data.foo).toBe(2.72); - done(); - }, 1000); + + act(() => { + const input = wrapper.find('input'); + input.simulate('change', { target: { value: 2.72 } }); + jest.runAllTimers(); + }); + + expect(onChangeData.data.foo).toBe(2.72); }); - it('should update via action', (done) => { + it('should update via action', () => { const core = initCore(schema, uischema, { foo: 2.72 }); - wrapper = mount( + wrapper = mountWithAct( @@ -275,19 +279,18 @@ describe('Material number cells', () => { const input = wrapper.find('input').first(); expect(input.props().value).toBe(2.72); - core.data = { ...core.data, foo: 3.14 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); - wrapper.update(); + act(() => { + core.data = { ...core.data, foo: 3.14 }; + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); - setTimeout(() => { - expect(wrapper.find('input').first().props().value).toBe(3.14); - done(); - }, 1000); + wrapper.update(); + expect(wrapper.find('input').first().props().value).toBe(3.14); }); - it('should update with undefined value', (done) => { + it('should update with undefined value', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -295,18 +298,17 @@ describe('Material number cells', () => { ); core.data = { ...core.data, foo: undefined }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(''); - done(); - }, 1000); + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(''); }); - it('should not update with null value', (done) => { + it('should not update with null value', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -314,18 +316,18 @@ describe('Material number cells', () => { ); core.data = { ...core.data, foo: null }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(''); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(''); }); - it('should not update with wrong ref', (done) => { + it('should not update with wrong ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -333,18 +335,18 @@ describe('Material number cells', () => { ); core.data = { ...core.data, bar: 11 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(3.14); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(3.14); }); - it('should not update with null ref', (done) => { + it('should not update with null ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -352,18 +354,18 @@ describe('Material number cells', () => { ); core.data = { ...core.data, null: 2.72 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(3.14); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(3.14); }); - it('should not update with undefined ref', (done) => { + it('should not update with undefined ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -371,18 +373,18 @@ describe('Material number cells', () => { ); core.data = { ...core.data, undefined: 13 }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(3.14); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(3.14); }); it('can be disabled', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -400,7 +402,7 @@ describe('Material number cells', () => { it('should be enabled by default', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( diff --git a/packages/material-renderers/test/renderers/MaterialOneOfRenderer.test.tsx b/packages/material-renderers/test/renderers/MaterialOneOfRenderer.test.tsx index 765967e93d..4c94d9bf27 100644 --- a/packages/material-renderers/test/renderers/MaterialOneOfRenderer.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialOneOfRenderer.test.tsx @@ -1,19 +1,19 @@ /* The MIT License - + Copyright (c) 2017-2019 EclipseSource Munich https://github.com/eclipsesource/jsonforms - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -25,7 +25,7 @@ import React from 'react'; import Dialog from '@mui/material/Dialog'; -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import Enzyme, { ReactWrapper } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { ControlElement } from '@jsonforms/core'; import { MaterialOneOfRenderer, materialRenderers } from '../../src'; @@ -35,12 +35,12 @@ import { JsonFormsStateProvider, } from '@jsonforms/react'; import { Tab } from '@mui/material'; -import { initCore, TestEmitter } from './util'; +import { initCore, mountWithAct, TestEmitter } from './util'; +import { act } from 'react-dom/test-utils'; +jest.useFakeTimers(); Enzyme.configure({ adapter: new Adapter() }); -const waitForAsync = () => new Promise((resolve) => setTimeout(resolve, 0)); - const clickAddButton = (wrapper: ReactWrapper, times: number) => { // click add button const buttons = wrapper.find('button'); @@ -102,7 +102,7 @@ describe('Material oneOf renderer', () => { scope: '#/properties/value', }; const core = initCore(schema, uischema, { data: undefined }); - wrapper = mount( + wrapper = mountWithAct( @@ -140,7 +140,7 @@ describe('Material oneOf renderer', () => { const data = { value: 5, }; - wrapper = mount( + wrapper = mountWithAct( { const data = { value: { bar: 'bar' }, }; - wrapper = mount( + wrapper = mountWithAct( { const data = { value: { bar: 'bar' }, }; - wrapper = mount( + wrapper = mountWithAct( { expect(secondTab.html()).toContain('Mui-selected'); }); - it('should add an item at correct path', (done) => { + it('should add an item at correct path', () => { const schema = { type: 'object', properties: { @@ -276,7 +276,7 @@ describe('Material oneOf renderer', () => { const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( { expect(wrapper.find(MaterialOneOfRenderer).length).toBeTruthy(); const input = wrapper.find('input').first(); - input.simulate('change', { target: { value: 'test' } }); + act(() => { + input.simulate('change', { target: { value: 'test' } }); + jest.runAllTimers(); + }); + wrapper.update(); - setTimeout(() => { - expect(onChangeData.data).toEqual({ - value: 'test', - }); - done(); - }, 1000); + + expect(onChangeData.data).toEqual({ + value: 'test', + }); }); - it('should add an item within an array', async () => { + it('should add an item within an array', () => { const schema = { type: 'object', properties: { @@ -336,7 +338,7 @@ describe('Material oneOf renderer', () => { const core = initCore(schema, uischema, { data: {} }); - wrapper = mount( + wrapper = mountWithAct( @@ -344,8 +346,7 @@ describe('Material oneOf renderer', () => { ); - await waitForAsync(); - + jest.runAllTimers(); wrapper.update(); selectOneOfTab(wrapper, 1, false); @@ -359,7 +360,7 @@ describe('Material oneOf renderer', () => { expect(nrOfRowsAfterAdd.length).toBe(3); }); - it('should add an object within an array', async () => { + it('should add an object within an array', () => { const schema = { type: 'object', properties: { @@ -404,7 +405,7 @@ describe('Material oneOf renderer', () => { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -417,8 +418,7 @@ describe('Material oneOf renderer', () => { ); - await waitForAsync(); - + jest.runAllTimers(); wrapper.update(); selectOneOfTab(wrapper, 1, false); @@ -435,7 +435,7 @@ describe('Material oneOf renderer', () => { }); }); - it('should switch to array based oneOf subschema, then switch back, then edit', async () => { + it('should switch to array based oneOf subschema, then switch back, then edit', () => { const schema = { type: 'object', properties: { @@ -480,7 +480,7 @@ describe('Material oneOf renderer', () => { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -493,8 +493,7 @@ describe('Material oneOf renderer', () => { ); - await waitForAsync(); - + jest.runAllTimers(); wrapper.update(); selectOneOfTab(wrapper, 1, false); @@ -502,23 +501,19 @@ describe('Material oneOf renderer', () => { selectOneOfTab(wrapper, 0, true); const input = wrapper.find('input').first(); - input.simulate('change', { target: { value: 'test' } }); + act(() => { + input.simulate('change', { target: { value: 'test' } }); + jest.runAllTimers(); + }); + wrapper.update(); - let done: (value: undefined) => void; - const donePromise = new Promise((resolve) => { - done = resolve; + expect(onChangeData.data).toEqual({ + thingOrThings: { thing: 'test' }, }); - setTimeout(() => { - expect(onChangeData.data).toEqual({ - thingOrThings: { thing: 'test' }, - }); - done(undefined); - }, 1000); - return donePromise; }); - it('should show confirm dialog when data is not an empty object', async () => { + it('should show confirm dialog when data is not an empty object', () => { const schema = { type: 'object', properties: { @@ -546,7 +541,7 @@ describe('Material oneOf renderer', () => { const data = { value: 'Foo Bar', }; - wrapper = mount( + wrapper = mountWithAct( { renderers={materialRenderers} /> ); - expect(wrapper.find(MaterialOneOfRenderer).length).toBeTruthy(); - - await waitForAsync(); wrapper.update(); + + expect(wrapper.find(MaterialOneOfRenderer).length).toBeTruthy(); selectOneOfTab(wrapper, 1, true); }); @@ -585,7 +579,7 @@ describe('Material oneOf renderer', () => { scope: '#/properties/value', }; const core = initCore(schema, uischema, { data: undefined }); - wrapper = mount( + wrapper = mountWithAct( diff --git a/packages/material-renderers/test/renderers/MaterialTextCell.test.tsx b/packages/material-renderers/test/renderers/MaterialTextCell.test.tsx index 8368e5b60d..3e7e6a6f5a 100644 --- a/packages/material-renderers/test/renderers/MaterialTextCell.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialTextCell.test.tsx @@ -29,11 +29,13 @@ import TextCell, { } from '../../src/cells/MaterialTextCell'; import { materialRenderers } from '../../src'; -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import Enzyme, { ReactWrapper } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { JsonFormsStateProvider } from '@jsonforms/react'; -import { initCore, TestEmitter } from './util'; +import { initCore, mountWithAct, TestEmitter } from './util'; +import { act } from 'react-dom/test-utils'; +jest.useFakeTimers(); Enzyme.configure({ adapter: new Adapter() }); const DEFAULT_MAX_LENGTH = 524288; @@ -149,7 +151,7 @@ describe('Material text cell', () => { options: { focus: true }, }; const core = initCore(minLengthSchema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -167,7 +169,7 @@ describe('Material text cell', () => { options: { focus: false }, }; const core = initCore(schema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -184,7 +186,7 @@ describe('Material text cell', () => { scope: '#/properties/name', }; const core = initCore(minLengthSchema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -203,7 +205,7 @@ describe('Material text cell', () => { }, }; const core = initCore(minLengthSchema, uischema, { name: 'Foo' }); - wrapper = mount( + wrapper = mountWithAct( @@ -215,12 +217,12 @@ describe('Material text cell', () => { expect(input.props().value).toBe('Foo'); }); - it('should update via input event', (done) => { + it('should update via input event', () => { const core = initCore(minLengthSchema, uischema, data); const onChangeData: any = { data: undefined, }; - wrapper = mount( + wrapper = mountWithAct( @@ -234,16 +236,17 @@ describe('Material text cell', () => { ); const input = wrapper.find('input').first(); - input.simulate('change', { target: { value: 'Bar' } }); - setTimeout(() => { - expect(onChangeData.data.name).toBe('Bar'); - done(); - }, 1000); + act(() => { + input.simulate('change', { target: { value: 'Bar' } }); + jest.runAllTimers(); + }); + + expect(onChangeData.data.name).toBe('Bar'); }); - it('should update via action', (done) => { + it('should update via action', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -251,18 +254,18 @@ describe('Material text cell', () => { ); core.data = { ...core.data, name: 'Bar' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('Bar'); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('Bar'); }); - it('should update with undefined value', (done) => { + it('should update with undefined value', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -270,18 +273,18 @@ describe('Material text cell', () => { ); core.data = { ...core.data, name: undefined }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(''); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(''); }); - it('should update with null value', (done) => { + it('should update with null value', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -289,18 +292,18 @@ describe('Material text cell', () => { ); core.data = { ...core.data, name: null }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(''); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(''); }); - it('should not update if wrong ref', (done) => { + it('should not update if wrong ref', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -308,18 +311,18 @@ describe('Material text cell', () => { ); core.data = { ...core.data, firstname: 'Bar' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('Foo'); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('Foo'); }); - it('should not update if null ref', (done) => { + it('should not update if null ref', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -327,18 +330,18 @@ describe('Material text cell', () => { ); core.data = { ...core.data, null: 'Bar' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('Foo'); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('Foo'); }); - it('should not update if undefined ref', (done) => { + it('should not update if undefined ref', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -346,18 +349,18 @@ describe('Material text cell', () => { ); core.data = { ...core.data, undefined: 'Bar' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('Foo'); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('Foo'); }); it('can be disabled', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -375,7 +378,7 @@ describe('Material text cell', () => { it('should be enabled by default', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -396,7 +399,7 @@ describe('Material text cell', () => { }, }; const core = initCore(maxLengthSchema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -416,7 +419,7 @@ describe('Material text cell', () => { options: { trim: true }, }; const core = initCore(maxLengthSchema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -441,7 +444,7 @@ describe('Material text cell', () => { options: { restrict: true }, }; const core = initCore(maxLengthSchema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -461,7 +464,7 @@ describe('Material text cell', () => { it('should not use maxLength by default', () => { const core = initCore(maxLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -489,7 +492,7 @@ describe('Material text cell', () => { }, }; const core = initCore(schema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -514,7 +517,7 @@ describe('Material text cell', () => { options: { trim: true }, }; const core = initCore(schema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -539,7 +542,7 @@ describe('Material text cell', () => { options: { restrict: true }, }; const core = initCore(schema, control, data); - wrapper = mount( + wrapper = mountWithAct( @@ -559,7 +562,7 @@ describe('Material text cell', () => { it('should have default values for attributes', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -578,7 +581,7 @@ describe('Material text cell', () => { it('should be disabled', () => { const core = initCore(minLengthSchema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( diff --git a/packages/material-renderers/test/renderers/MaterialTextControl.test.tsx b/packages/material-renderers/test/renderers/MaterialTextControl.test.tsx index 897536db47..0504fcb5b6 100644 --- a/packages/material-renderers/test/renderers/MaterialTextControl.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialTextControl.test.tsx @@ -23,13 +23,15 @@ THE SOFTWARE. */ import React from 'react'; -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import Enzyme, { ReactWrapper } from 'enzyme'; import { MaterialTextControl } from '../../src/controls/MaterialTextControl'; import { MaterialInputControl } from '../../src/controls/MaterialInputControl'; import { MuiInputText } from '../../src/mui-controls/MuiInputText'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { ControlElement, ControlProps } from '@jsonforms/core'; import { InputAdornment, OutlinedInput } from '@mui/material'; +import { mountWithAct } from './util'; +import { act } from 'react-dom/test-utils'; Enzyme.configure({ adapter: new Adapter() }); @@ -76,7 +78,7 @@ describe('Material text control', () => { it('render', () => { const props = defaultControlProps(); - wrapper = mount(createMaterialTextControl(props)); + wrapper = mountWithAct(createMaterialTextControl(props)); expect(wrapper.find(MaterialInputControl).props()).toEqual({ ...props, input: MuiInputText, @@ -90,15 +92,18 @@ describe('Material text control', () => { ...defaultControlProps(), muiInputProps: { spellCheck: false }, }; - wrapper = mount(createMaterialTextControl(props)); + wrapper = mountWithAct(createMaterialTextControl(props)); expect(wrapper.find('input').props().spellCheck).toEqual(false); }); it('shows clear button when data exists', () => { const props = defaultControlProps(); - wrapper = mount(createMaterialTextControl(props)); + wrapper = mountWithAct(createMaterialTextControl(props)); // call onPointerEnter prop manually as the tests seem to ignore 'pointerenter' events, 'mouseover' events work however. - wrapper.find(OutlinedInput).props().onPointerEnter?.call(this); + + act(() => { + wrapper.find(OutlinedInput).props().onPointerEnter?.call(this); + }); wrapper.update(); expect(wrapper.find(InputAdornment).props().style).not.toHaveProperty( 'display', @@ -109,10 +114,12 @@ describe('Material text control', () => { it('hides clear button when data is undefined', () => { const props = defaultControlProps(); delete props.data; - wrapper = mount(createMaterialTextControl(props)); + wrapper = mountWithAct(createMaterialTextControl(props)); // call onPointerEnter prop manually as the tests seem to ignore 'pointerenter' events, 'mouseover' events work however. - wrapper.find(OutlinedInput).props().onPointerEnter?.call(this); - wrapper.update(); + act(() => { + wrapper.find(OutlinedInput).props().onPointerEnter?.call(this); + wrapper.update(); + }); expect(wrapper.find(InputAdornment).props().style).toHaveProperty( 'display', 'none' diff --git a/packages/material-renderers/test/renderers/MaterialTimeCell.test.tsx b/packages/material-renderers/test/renderers/MaterialTimeCell.test.tsx index 74c4a68528..fd41f48fd5 100644 --- a/packages/material-renderers/test/renderers/MaterialTimeCell.test.tsx +++ b/packages/material-renderers/test/renderers/MaterialTimeCell.test.tsx @@ -1,3 +1,5 @@ +import { act } from 'react-dom/test-utils'; + /* The MIT License @@ -29,11 +31,12 @@ import TimeCell, { } from '../../src/cells/MaterialTimeCell'; import { materialRenderers } from '../../src'; -import Enzyme, { mount, ReactWrapper } from 'enzyme'; +import Enzyme, { ReactWrapper } from 'enzyme'; import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; import { JsonFormsStateProvider } from '@jsonforms/react'; -import { initCore, TestEmitter } from './util'; +import { initCore, mountWithAct, TestEmitter } from './util'; +jest.useFakeTimers(); Enzyme.configure({ adapter: new Adapter() }); const data = { foo: '13:37' }; @@ -131,13 +134,15 @@ describe('Material time cell', () => { }, }; const core = initCore(schema, control, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mountWithAct( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().autoFocus).toBeTruthy(); }); @@ -151,13 +156,15 @@ describe('Material time cell', () => { }, }; const core = initCore(schema, control, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mountWithAct( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().autoFocus).toBeFalsy(); }); @@ -168,38 +175,43 @@ describe('Material time cell', () => { scope: '#/properties/foo', }; const core = initCore(schema, control, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mountWithAct( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().autoFocus).toBeFalsy(); }); it('should render', () => { const core = initCore(schema, uischema, data); - wrapper = mount( - - - - ); + act(() => { + wrapper = mountWithAct( + + + + ); + }); const input = wrapper.find('input').first(); expect(input.props().type).toBe('time'); expect(input.props().value).toBe('13:37'); }); - it('should update via event', (done) => { + it('should update via event', () => { const core = initCore(schema, uischema, data); const onChangeData: any = { data: undefined, }; - wrapper = mount( + + wrapper = mountWithAct( @@ -211,17 +223,19 @@ describe('Material time cell', () => { ); - const input = wrapper.find('input').first(); - input.simulate('change', { target: { value: '20:15' } }); - setTimeout(() => { - expect(onChangeData.data.foo).toBe('20:15'); - done(); - }, 1000); + + act(() => { + const input = wrapper.find('input').first(); + input.simulate('change', { target: { value: '20:15' } }); + jest.runAllTimers(); + }); + + expect(onChangeData.data.foo).toBe('20:15'); }); - it('should update via action', (done) => { + it('should update via action', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -229,18 +243,20 @@ describe('Material time cell', () => { ); core.data = { ...core.data, foo: '20:15' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('20:15'); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('20:15'); }); - it('should update with null value', (done) => { + it('should update with null value', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + + wrapper = mountWithAct( @@ -248,18 +264,20 @@ describe('Material time cell', () => { ); core.data = { ...core.data, foo: null }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(''); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(''); }); - it('update with undefined value', (done) => { + it('update with undefined value', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + + wrapper = mountWithAct( @@ -267,18 +285,18 @@ describe('Material time cell', () => { ); core.data = { ...core.data, foo: undefined }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe(''); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe(''); }); - it('should update with wrong ref', (done) => { + it('should update with wrong ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -286,18 +304,18 @@ describe('Material time cell', () => { ); core.data = { ...core.data, bar: 'Bar' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); + wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('13:37'); - done(); - }, 1000); + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('13:37'); }); - it('should update with null ref', (done) => { + it('should update with null ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( @@ -305,18 +323,18 @@ describe('Material time cell', () => { ); core.data = { ...core.data, null: '20:15' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('13:37'); - done(); - }, 1000); + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('13:37'); }); - it('should update with undefined ref', (done) => { + it('should update with undefined ref', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + + wrapper = mountWithAct( @@ -324,18 +342,19 @@ describe('Material time cell', () => { ); core.data = { ...core.data, undefined: '20:15' }; - wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + act(() => { + wrapper.setProps({ initState: { renderers: materialRenderers, core } }); + }); wrapper.update(); - setTimeout(() => { - const input = wrapper.find('input').first(); - expect(input.props().value).toBe('13:37'); - done(); - }, 1000); + + const input = wrapper.find('input').first(); + expect(input.props().value).toBe('13:37'); }); it('can be disabled', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + + wrapper = mountWithAct( @@ -353,7 +372,7 @@ describe('Material time cell', () => { it('should be enabled by default', () => { const core = initCore(schema, uischema, data); - wrapper = mount( + wrapper = mountWithAct( diff --git a/packages/material-renderers/test/renderers/util.ts b/packages/material-renderers/test/renderers/util.ts index c97b3bd9df..ca427bb026 100644 --- a/packages/material-renderers/test/renderers/util.ts +++ b/packages/material-renderers/test/renderers/util.ts @@ -33,7 +33,9 @@ import { UISchemaElement, } from '@jsonforms/core'; import { JsonFormsReactProps, useJsonForms } from '@jsonforms/react'; +import { mount, ReactWrapper } from 'enzyme'; import React from 'react'; +import { act } from 'react-dom/test-utils'; export const initCore = ( schema: JsonSchema, @@ -62,3 +64,11 @@ export const createTesterContext = ( export const testTranslator: Translator = createTranslator( (key) => 'translator.' + key ); + +export const mountWithAct = (component: React.ReactElement) => { + let c: ReactWrapper; + act(() => { + c = mount(component); + }); + return c; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c736460f68..c3482fabab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -532,8 +532,8 @@ importers: specifier: workspace:* version: link:../react '@mui/material': - specifier: ^7.3.0 || ^8.0.0 || ^9.0.0 - version: 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + specifier: ^9.0.0 + version: 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/react-highlight': specifier: ^0.12.5 version: 0.12.8 @@ -600,10 +600,10 @@ importers: dependencies: '@date-io/dayjs': specifier: ^3.0.0 - version: 3.0.0(dayjs@1.11.11) + version: 3.0.0(dayjs@1.10.7) dayjs: - specifier: ^1.10.7 - version: 1.11.11 + specifier: 1.10.7 + version: 1.10.7 lodash: specifier: ^4.17.21 version: 4.18.1 @@ -628,7 +628,7 @@ importers: version: 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@mui/x-date-pickers': specifier: ^9.3.0 - version: 9.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.11.11)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + version: 9.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.10.7)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@rollup/plugin-commonjs': specifier: ^23.0.3 version: 23.0.7(rollup@2.80.0) @@ -4232,9 +4232,6 @@ packages: cpu: [x64] os: [win32] - '@mui/core-downloads-tracker@7.3.0': - resolution: {integrity: sha512-E4eWI90atwCf0rUjuzdlDRI6coA03ZEOAqk5qjEU9IdCLYRlOG65P7WBCpwFYOwDqzUVCHzx8U4q//csULLsOg==} - '@mui/core-downloads-tracker@9.0.1': resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==} @@ -4249,26 +4246,6 @@ packages: '@types/react': optional: true - '@mui/material@7.3.0': - resolution: {integrity: sha512-t0fb7+zEDTjnVe4hqzNvoGIopzGJ6AyN+qodGRENAFvL/UV3IT/vFIMHloFGnJ9DPmIgWaWasKgefPUU3OsgOQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^7.3.0 - '@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 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@mui/material-pigment-css': - optional: true - '@types/react': - optional: true - '@mui/material@9.0.1': resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==} engines: {node: '>=14.0.0'} @@ -4289,16 +4266,6 @@ packages: '@types/react': optional: true - '@mui/private-theming@7.3.0': - resolution: {integrity: sha512-qU6rkH377L9byQrgXVW4rGsXVs7Q7H65Rj4IaITK3Vj2J5IP9nomMxJ77/w5kbJcEcaDEoLK42Ro3qMtHmvd4Q==} - 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/private-theming@9.0.1': resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==} engines: {node: '>=14.0.0'} @@ -4309,19 +4276,6 @@ packages: '@types/react': optional: true - '@mui/styled-engine@7.3.0': - resolution: {integrity: sha512-O8GNVzpr+ZGzHXCGlYXnc9iSgBldrX3UtPswvLEZX8fyjKfh6wYVvbc7Oa6FdFKdbWWXAnrJ9YTVBQsk2VXDSg==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.4.1 - '@emotion/styled': ^11.3.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@mui/styled-engine@9.0.0': resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} engines: {node: '>=14.0.0'} @@ -4335,22 +4289,6 @@ packages: '@emotion/styled': optional: true - '@mui/system@7.3.0': - resolution: {integrity: sha512-D4VclTIVbMxwrPeDF+PEfwCo9BC+4pYnM1OakA5iFznmE1QRVanyXtpUM3319IhlZolN82EG04iKk3XiiQZmHg==} - engines: {node: '>=14.0.0'} - peerDependencies: - '@emotion/react': ^11.5.0 - '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@emotion/react': - optional: true - '@emotion/styled': - optional: true - '@types/react': - optional: true - '@mui/system@9.0.1': resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==} engines: {node: '>=14.0.0'} @@ -4367,14 +4305,6 @@ packages: '@types/react': optional: true - '@mui/types@7.4.6': - resolution: {integrity: sha512-NVBbIw+4CDMMppNamVxyTccNv0WxtDb7motWDlMeSC8Oy95saj1TIZMGynPpFLePt3yOD8TskzumeqORCgRGWw==} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@mui/types@9.0.0': resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} peerDependencies: @@ -4383,16 +4313,6 @@ packages: '@types/react': optional: true - '@mui/utils@7.3.2': - resolution: {integrity: sha512-4DMWQGenOdLnM3y/SdFQFwKsCLM+mqxzvoWp9+x2XdEzXapkznauHLiXtSohHs/mc0+5/9UACt1GdugCX2te5g==} - 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@9.0.0': resolution: {integrity: sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==} engines: {node: '>=14.0.0'} @@ -7777,6 +7697,9 @@ packages: dateformat@3.0.3: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} + dayjs@1.10.7: + resolution: {integrity: sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==} + dayjs@1.11.11: resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} @@ -17197,11 +17120,11 @@ snapshots: '@date-io/core@3.0.0': {} - '@date-io/dayjs@3.0.0(dayjs@1.11.11)': + '@date-io/dayjs@3.0.0(dayjs@1.10.7)': dependencies: '@date-io/core': 3.0.0 optionalDependencies: - dayjs: 1.11.11 + dayjs: 1.10.7 '@discoveryjs/json-ext@0.5.7': {} @@ -18307,8 +18230,6 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true - '@mui/core-downloads-tracker@7.3.0': {} - '@mui/core-downloads-tracker@9.0.1': {} '@mui/icons-material@9.0.1(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': @@ -18319,27 +18240,6 @@ snapshots: optionalDependencies: '@types/react': 17.0.80 - '@mui/material@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.29.7 - '@mui/core-downloads-tracker': 7.3.0 - '@mui/system': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - '@mui/types': 7.4.6(@types/react@17.0.80) - '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) - '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@17.0.80) - clsx: 2.1.1 - csstype: 3.2.3 - prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-is: 19.2.6 - react-transition-group: 4.4.5(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - optionalDependencies: - '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - '@types/react': 17.0.80 - '@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.29.7 @@ -18361,15 +18261,6 @@ snapshots: '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@types/react': 17.0.80 - '@mui/private-theming@7.3.0(@types/react@17.0.80)(react@17.0.2)': - dependencies: - '@babel/runtime': 7.29.7 - '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) - prop-types: 15.8.1 - react: 17.0.2 - optionalDependencies: - '@types/react': 17.0.80 - '@mui/private-theming@9.0.1(@types/react@17.0.80)(react@17.0.2)': dependencies: '@babel/runtime': 7.29.7 @@ -18379,19 +18270,6 @@ snapshots: optionalDependencies: '@types/react': 17.0.80 - '@mui/styled-engine@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(react@17.0.2)': - dependencies: - '@babel/runtime': 7.29.7 - '@emotion/cache': 11.14.0 - '@emotion/serialize': 1.3.3 - '@emotion/sheet': 1.4.0 - csstype: 3.2.3 - prop-types: 15.8.1 - react: 17.0.2 - optionalDependencies: - '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - '@mui/styled-engine@9.0.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.29.7 @@ -18405,22 +18283,6 @@ snapshots: '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - '@mui/system@7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': - dependencies: - '@babel/runtime': 7.29.7 - '@mui/private-theming': 7.3.0(@types/react@17.0.80)(react@17.0.2) - '@mui/styled-engine': 7.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(react@17.0.2) - '@mui/types': 7.4.6(@types/react@17.0.80) - '@mui/utils': 7.3.2(@types/react@17.0.80)(react@17.0.2) - clsx: 2.1.1 - csstype: 3.2.3 - prop-types: 15.8.1 - react: 17.0.2 - optionalDependencies: - '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - '@types/react': 17.0.80 - '@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2)': dependencies: '@babel/runtime': 7.29.7 @@ -18437,30 +18299,12 @@ snapshots: '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) '@types/react': 17.0.80 - '@mui/types@7.4.6(@types/react@17.0.80)': - dependencies: - '@babel/runtime': 7.29.7 - optionalDependencies: - '@types/react': 17.0.80 - '@mui/types@9.0.0(@types/react@17.0.80)': dependencies: '@babel/runtime': 7.29.7 optionalDependencies: '@types/react': 17.0.80 - '@mui/utils@7.3.2(@types/react@17.0.80)(react@17.0.2)': - dependencies: - '@babel/runtime': 7.29.7 - '@mui/types': 7.4.6(@types/react@17.0.80) - '@types/prop-types': 15.7.15 - clsx: 2.1.1 - prop-types: 15.8.1 - react: 17.0.2 - react-is: 19.2.6 - optionalDependencies: - '@types/react': 17.0.80 - '@mui/utils@9.0.0(@types/react@17.0.80)(react@17.0.2)': dependencies: '@babel/runtime': 7.29.7 @@ -18485,7 +18329,7 @@ snapshots: optionalDependencies: '@types/react': 17.0.80 - '@mui/x-date-pickers@9.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.11.11)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': + '@mui/x-date-pickers@9.3.0(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@mui/material@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@mui/system@9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(dayjs@1.10.7)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.29.7 '@mui/material': 9.0.1(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@emotion/styled@11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -18501,7 +18345,7 @@ snapshots: optionalDependencies: '@emotion/react': 11.11.4(@types/react@17.0.80)(react@17.0.2) '@emotion/styled': 11.11.5(@emotion/react@11.11.4(@types/react@17.0.80)(react@17.0.2))(@types/react@17.0.80)(react@17.0.2) - dayjs: 1.11.11 + dayjs: 1.10.7 transitivePeerDependencies: - '@types/react' @@ -21064,7 +20908,7 @@ snapshots: axios@1.13.2: dependencies: - follow-redirects: 1.15.6(debug@4.4.3) + follow-redirects: 1.15.6(debug@4.3.4) form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -22642,6 +22486,8 @@ snapshots: dateformat@3.0.3: {} + dayjs@1.10.7: {} + dayjs@1.11.11: {} de-indent@1.0.2: {} @@ -24684,7 +24530,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.6(debug@4.4.3) + follow-redirects: 1.15.6(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug