diff --git a/apps/pigment-css-next-app/package.json b/apps/pigment-css-next-app/package.json index 25a3881e05a65d..446d2d4973a6f8 100644 --- a/apps/pigment-css-next-app/package.json +++ b/apps/pigment-css-next-app/package.json @@ -24,7 +24,7 @@ }, "devDependencies": { "@pigment-css/nextjs-plugin": "0.0.29", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", "eslint": "^8.57.1", diff --git a/apps/pigment-css-vite-app/src/pages/material-ui/react-progress.tsx b/apps/pigment-css-vite-app/src/pages/material-ui/react-progress.tsx index badcc6a712d49c..b597deeddb8f6a 100644 --- a/apps/pigment-css-vite-app/src/pages/material-ui/react-progress.tsx +++ b/apps/pigment-css-vite-app/src/pages/material-ui/react-progress.tsx @@ -1,4 +1,7 @@ import * as React from 'react'; +import LinearProgress, { LinearProgressProps } from '@mui/material/LinearProgress'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; import MaterialUILayout from '../../Layout'; import CircularColor from '../../../../../docs/data/material/components/progress/CircularColor.tsx'; import CircularDeterminate from '../../../../../docs/data/material/components/progress/CircularDeterminate.tsx'; @@ -9,9 +12,23 @@ import CircularWithValueLabel from '../../../../../docs/data/material/components import CustomizedProgressBars from '../../../../../docs/data/material/components/progress/CustomizedProgressBars.tsx'; import DelayingAppearance from '../../../../../docs/data/material/components/progress/DelayingAppearance.tsx'; import LinearColor from '../../../../../docs/data/material/components/progress/LinearColor.tsx'; -import LinearDeterminate from '../../../../../docs/data/material/components/progress/LinearDeterminate.tsx'; import LinearIndeterminate from '../../../../../docs/data/material/components/progress/LinearIndeterminate.tsx'; -import LinearWithValueLabel from '../../../../../docs/data/material/components/progress/LinearWithValueLabel.tsx'; + +function LinearProgressWithLabel(props: LinearProgressProps & { value: number }) { + return ( + + + + + + {`${Math.round(props.value)}%`} + + + ); +} export default function Progress() { return ( @@ -65,6 +82,14 @@ export default function Progress() { +
+

Linear Buffer

+
+ + + +
+

Linear Color

@@ -74,7 +99,9 @@ export default function Progress() {

Linear Determinate

- + + +
@@ -86,7 +113,9 @@ export default function Progress() {

Linear With Value Label

- + + +
diff --git a/docs/data/material/components/menus/menus.md b/docs/data/material/components/menus/menus.md index f8b357ae77bdcc..0794be30c28999 100644 --- a/docs/data/material/components/menus/menus.md +++ b/docs/data/material/components/menus/menus.md @@ -17,13 +17,19 @@ A menu displays a list of choices on a temporary surface. It appears when the us {{"component": "@mui/docs/ComponentLinkHeader"}} +## Introduction + +Menus are implemented using a collection of related components: + +- Menu: The container/surface of the menu. +- Menu Item: An option for users to select from the menu. +- Menu List (optional): Alternative composable container for Menu Items—see [Composition with Menu List](#composition-with-menu-list) for details. + ## Basic menu A basic menu opens over the anchor element by default (this option can be [changed](#menu-positioning) via props). When close to a screen edge, a basic menu vertically realigns to make sure that all menu items are completely visible. -Choosing an option should immediately ideally commit the option and close the menu. - -**Disambiguation**: In contrast to simple menus, simple dialogs can present additional detail related to the options available for a list item or provide navigational or orthogonal actions related to the primary task. Although they can display the same content, simple menus are preferred over simple dialogs because simple menus are less disruptive to the user's current context. +You should configure the component so that selecting an option immediately confirms it and closes the menu, as shown in the demo below. {{"demo": "BasicMenu.js"}} @@ -54,13 +60,13 @@ For instance, you can display the menu on top of the anchor: {{"demo": "PositionedMenu.js"}} -## MenuList composition +## Composition with Menu List -The `Menu` component uses the `Popover` component internally. -However, you might want to use a different positioning strategy, or not blocking the scroll. -For answering those needs, we expose a `MenuList` component that you can compose, with `Popper` in this example. +The Menu component uses the Popover component internally. +But you might want to use a different positioning strategy, or prefer not to block scrolling, for example. -The primary responsibility of the `MenuList` component is to handle the focus. +The Menu List component lets you compose your own menu for these kinds of use cases—its primary purpose is to handle focus. +See the demo below for an example of composition that uses Menu List and replaces the Menu's default Popover with a Popper component instead: {{"demo": "MenuListComposition.js", "bg": true}} diff --git a/docs/data/material/components/popper/popper.md b/docs/data/material/components/popper/popper.md index 24c9dcb54c8423..1730cd0fd38c6e 100644 --- a/docs/data/material/components/popper/popper.md +++ b/docs/data/material/components/popper/popper.md @@ -20,7 +20,7 @@ Some important features of the Popper component: - The scroll isn't blocked like with the [Popover](/material-ui/react-popover/) component. The placement of the popper updates with the available area in the viewport. - Clicking away does not hide the Popper component. - If you need this behavior, you can use the [Base UI Click-Away Listener](/base-ui/react-click-away-listener/) - see the example in the [menu documentation section](/material-ui/react-menu/#menulist-composition). + If you need this behavior, you can use the [Base UI Click-Away Listener](/base-ui/react-click-away-listener/) - see the example in the [menu documentation section](/material-ui/react-menu/#composition-with-menu-list). - The `anchorEl` is passed as the reference object to create a new `Popper.js` instance. {{"component": "@mui/docs/ComponentLinkHeader", "design": false}} diff --git a/docs/data/material/design-resources/material-ui-sync/material-ui-sync.md b/docs/data/material/design-resources/material-ui-sync/material-ui-sync.md index f276b65d589d93..7a6294d42f8844 100644 --- a/docs/data/material/design-resources/material-ui-sync/material-ui-sync.md +++ b/docs/data/material/design-resources/material-ui-sync/material-ui-sync.md @@ -1,18 +1,19 @@ -# Material UI Sync plugin +# Material UI Sync plugin 🧪

Sync is a Figma plugin that generates Material UI themes directly from design to code.

+:::warning +This plugin is experimental. +::: + ## Introduction [Material UI Sync](https://www.figma.com/community/plugin/1336346114713490235/material-ui-sync) is a Figma plugin that lets you generate a theme from the [Material UI for Figma Design Kit](https://www.figma.com/community/file/912837788133317724/material-ui-for-figma-and-mui-x). -:::warning -Sync works in combination with the [Material UI for Figma Design Kit v5.16.0](https://github.com/mui/mui-design-kits/releases) and later. -Other kits, such as the Joy UI Design Kit, are not supported yet. -::: - Customizing the Material UI Switch component in Figma with the Sync plugin running. +Sync works in combination with the [Material UI for Figma Design Kit v5.16.0](https://github.com/mui/mui-design-kits/releases) and later. + ## Running the plugin If you don't have the [complete and latest version](/store/items/figma-react/) of the Material UI for Figma Design Kit installed, you can test the plugin by using the [Community version](https://www.figma.com/community/file/912837788133317724/material-ui-for-figma-and-mui-x) instead. diff --git a/docs/data/material/getting-started/overview/overview.md b/docs/data/material/getting-started/overview/overview.md index 62406390415e2f..4dc5721b2d857d 100644 --- a/docs/data/material/getting-started/overview/overview.md +++ b/docs/data/material/getting-started/overview/overview.md @@ -14,8 +14,7 @@ It includes a comprehensive collection of prebuilt components that are ready for :::info Material UI v6 supports Material Design 2. -Adoption of Material Design 3 is tentatively planned for a future Material UI version. -You can follow [this GitHub issue](https://github.com/mui/material-ui/issues/29345) for future updates. +You can follow [this GitHub issue](https://github.com/mui/material-ui/issues/29345) for future design-related updates. ::: ## Advantages of Material UI diff --git a/docs/data/material/guides/composition/composition.md b/docs/data/material/guides/composition/composition.md index cc77b9161e6e53..2398f114be463c 100644 --- a/docs/data/material/guides/composition/composition.md +++ b/docs/data/material/guides/composition/composition.md @@ -65,6 +65,10 @@ If you added another `className` via the `slotProps` prop on the Custom Tooltip The popper slot in the original example would now have both classes applied to it, in addition to any others that may be present: `"[…] custom-tooltip-popper foo"`. ::: +:::info +`style` object are shallow merged rather than replacing one another. The style keys from the first argument have higher priority. +::: + ## Component prop Material UI allows you to change the root element that will be rendered via a prop called `component`. diff --git a/docs/data/material/migration/migrating-from-deprecated-apis/migrating-from-deprecated-apis.md b/docs/data/material/migration/migrating-from-deprecated-apis/migrating-from-deprecated-apis.md index 24c27c33051d02..6e5484cae23ae2 100644 --- a/docs/data/material/migration/migrating-from-deprecated-apis/migrating-from-deprecated-apis.md +++ b/docs/data/material/migration/migrating-from-deprecated-apis/migrating-from-deprecated-apis.md @@ -855,6 +855,36 @@ Here's how to migrate: }, ``` +## CardHeader + +Use the [codemod](https://github.com/mui/material-ui/tree/HEAD/packages/mui-codemod#card-header-props) below to migrate the code as described in the following sections: + +```bash +npx @mui/codemod@latest deprecations/card-header-props +``` + +### titleTypographyProps + +The CardHeader's `titleTypographyProps` props were deprecated in favor of `slotProps.title`: + +```diff + +``` + +### subheaderTypographyProps + +The CardHeader's `subheaderTypographyProps` props were deprecated in favor of `slotProps.subheader`: + +```diff + +``` + ## Chip Use the [codemod](https://github.com/mui/material-ui/tree/HEAD/packages/mui-codemod#chip-classes) below to migrate the code as described in the following sections: @@ -1375,6 +1405,70 @@ Here's how to migrate: }, ``` +## LinearProgress + +Use the [codemod](https://github.com/mui/material-ui/tree/HEAD/packages/mui-codemod#linear-progress-classes) below to migrate the code as described in the following sections: + +```bash +npx @mui/codemod@latest deprecations/linear-progress-classes +``` + +### Composed CSS classes + +The CSS classes that composed the `variant` and `color` prop values were deprecated. + +Here's how to migrate: + +```diff +-.MuiLinearProgress-bar1Buffer ++.MuiLinearProgress-buffer > .MuiLinearProgress-bar1 +-.MuiLinearProgress-bar1Determinate ++.MuiLinearProgress-determinate > .MuiLinearProgress-bar1 +-.MuiLinearProgress-bar1Indeterminate ++.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar1 +-.MuiLinearProgress-bar2Buffer ++.MuiLinearProgress-buffer > .MuiLinearProgress-bar2 +-.MuiLinearProgress-bar2Indeterminate ++.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar2 +-.MuiLinearProgress-barColorPrimary ++.MuiLinearProgress-colorPrimary > .MuiLinearProgress-bar +-.MuiLinearProgress-barColorSecondary ++.MuiLinearProgress-colorSecondary > .MuiLinearProgress-bar +-.MuiLinearProgress-dashedColorPrimary ++.MuiLinearProgress-colorPrimary > .MuiLinearProgress-dashed +-.MuiLinearProgress-dashedColorSecondary ++.MuiLinearProgress-colorSecondary > .MuiLinearProgress-dashed +``` + +```diff + import { linearProgressClasses } from '@mui/material/LinearProgress'; + + MuiLinearProgress: { + styleOverrides: { + root: { +- [`&.${linearProgressClasses.bar1Buffer}`]: {}, ++ [`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar1}`]: {}, +- [`&.${linearProgressClasses.bar1Determinate}`]: {}, ++ [`&.${linearProgressClasses.determinate} > .${linearProgressClasses.bar1}`]: {}, +- [`&.${linearProgressClasses.bar1Indeterminate}`]: {}, ++ [`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar1}`]: {}, +- [`&.${linearProgressClasses.bar2Buffer}`]: {}, ++ [`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar2}`]: {}, +- [`&.${linearProgressClasses.bar2Indeterminate}`]: {}, ++ [`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar2}`]: {}, +- [`&.${linearProgressClasses.barColorPrimary}`]: {}, ++ [`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.bar}`]: {}, +- [`&.${linearProgressClasses.barColorSecondary}`]: {}, ++ [`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.bar}`]: {}, +- [`&.${linearProgressClasses.dashedColorPrimary}`]: {}, ++ [`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.dashed}`]: {}, +- [`&.${linearProgressClasses.dashedColorSecondary}`]: {}, ++ [`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.dashed}`]: {}, + }, + }, + } +``` + ## Modal Use the [codemod](https://github.com/mui/material-ui/tree/HEAD/packages/mui-codemod#modal-props) below to migrate the code as described in the following sections: diff --git a/docs/data/material/pages.ts b/docs/data/material/pages.ts index bcbfcebc05f48f..0d40d59337f672 100644 --- a/docs/data/material/pages.ts +++ b/docs/data/material/pages.ts @@ -373,7 +373,7 @@ const pages: MuiPage[] = [ { pathname: '/material-ui/design-resources/material-ui-sync', title: 'Figma Sync plugin', - beta: true, + unstable: true, }, ], }, diff --git a/docs/package.json b/docs/package.json index c1c94f854eb864..30b635c80e840e 100644 --- a/docs/package.json +++ b/docs/package.json @@ -124,7 +124,7 @@ "@types/css-mediaquery": "^0.1.4", "@types/gtag.js": "^0.0.20", "@types/json2mq": "^0.2.2", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/prop-types": "^15.7.14", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", diff --git a/docs/pages/material-ui/api/card-header.json b/docs/pages/material-ui/api/card-header.json index b015bc34e96a6b..27d456fe1e0918 100644 --- a/docs/pages/material-ui/api/card-header.json +++ b/docs/pages/material-ui/api/card-header.json @@ -5,8 +5,26 @@ "classes": { "type": { "name": "object" }, "additionalInfo": { "cssApi": true } }, "component": { "type": { "name": "elementType" } }, "disableTypography": { "type": { "name": "bool" }, "default": "false" }, + "slotProps": { + "type": { + "name": "shape", + "description": "{ action?: func
| object, avatar?: func
| object, content?: func
| object, root?: func
| object, subheader?: func
| object, title?: func
| object }" + }, + "default": "{}" + }, + "slots": { + "type": { + "name": "shape", + "description": "{ action?: elementType, avatar?: elementType, content?: elementType, root?: elementType, subheader?: elementType, title?: elementType }" + }, + "default": "{}" + }, "subheader": { "type": { "name": "node" } }, - "subheaderTypographyProps": { "type": { "name": "object" } }, + "subheaderTypographyProps": { + "type": { "name": "object" }, + "deprecated": true, + "deprecationInfo": "Use slotProps.subheader instead. This prop will be removed in v7. See Migrating from deprecated APIs for more details." + }, "sx": { "type": { "name": "union", @@ -15,51 +33,56 @@ "additionalInfo": { "sx": true } }, "title": { "type": { "name": "node" } }, - "titleTypographyProps": { "type": { "name": "object" } } + "titleTypographyProps": { + "type": { "name": "object" }, + "deprecated": true, + "deprecationInfo": "Use slotProps.title instead. This prop will be removed in v7. See Migrating from deprecated APIs for more details." + } }, "name": "CardHeader", "imports": [ "import CardHeader from '@mui/material/CardHeader';", "import { CardHeader } from '@mui/material';" ], - "classes": [ + "slots": [ { - "key": "action", - "className": "MuiCardHeader-action", - "description": "Styles applied to the action element.", - "isGlobal": false + "name": "root", + "description": "The component that renders the root slot.", + "default": "'div'", + "class": "MuiCardHeader-root" }, { - "key": "avatar", - "className": "MuiCardHeader-avatar", - "description": "Styles applied to the avatar element.", - "isGlobal": false + "name": "avatar", + "description": "The component that renders the avatar slot.", + "default": "'div'", + "class": "MuiCardHeader-avatar" }, { - "key": "content", - "className": "MuiCardHeader-content", - "description": "Styles applied to the content wrapper element.", - "isGlobal": false + "name": "action", + "description": "The component that renders the action slot.", + "default": "'div'", + "class": "MuiCardHeader-action" }, { - "key": "root", - "className": "MuiCardHeader-root", - "description": "Styles applied to the root element.", - "isGlobal": false + "name": "content", + "description": "The component that renders the content slot.", + "default": "'div'", + "class": "MuiCardHeader-content" }, { - "key": "subheader", - "className": "MuiCardHeader-subheader", - "description": "Styles applied to the subheader Typography element.", - "isGlobal": false + "name": "title", + "description": "The component that renders the title slot (as long as disableTypography is not `true`).\n[Follow this guide](https://mui.com/material-ui/api/typography/#props) to learn more about the requirements for this component.", + "default": "Typography", + "class": "MuiCardHeader-title" }, { - "key": "title", - "className": "MuiCardHeader-title", - "description": "Styles applied to the title Typography element.", - "isGlobal": false + "name": "subheader", + "description": "The component that renders the subheader slot (as long as disableTypography is not `true`).\n[Follow this guide](https://mui.com/material-ui/api/typography/#props) to learn more about the requirements for this component.", + "default": "Typography", + "class": "MuiCardHeader-subheader" } ], + "classes": [], "spread": true, "themeDefaultProps": true, "muiName": "MuiCardHeader", diff --git a/docs/pages/material-ui/api/linear-progress.json b/docs/pages/material-ui/api/linear-progress.json index f6118ba323228f..09371e65e408d3 100644 --- a/docs/pages/material-ui/api/linear-progress.json +++ b/docs/pages/material-ui/api/linear-progress.json @@ -37,47 +37,66 @@ "description": "Styles applied to the layered bar1 and bar2 elements.", "isGlobal": false }, + { + "key": "bar1", + "className": "MuiLinearProgress-bar1", + "description": "Styles applied to the bar1 element.", + "isGlobal": false + }, { "key": "bar1Buffer", "className": "MuiLinearProgress-bar1Buffer", "description": "Styles applied to the bar1 element if `variant=\"buffer\"`.", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "bar1Determinate", "className": "MuiLinearProgress-bar1Determinate", "description": "Styles applied to the bar1 element if `variant=\"determinate\"`.", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "bar1Indeterminate", "className": "MuiLinearProgress-bar1Indeterminate", "description": "Styles applied to the bar1 element if `variant=\"indeterminate or query\"`.", + "isGlobal": false, + "isDeprecated": true + }, + { + "key": "bar2", + "className": "MuiLinearProgress-bar2", + "description": "Styles applied to the bar2 element.", "isGlobal": false }, { "key": "bar2Buffer", "className": "MuiLinearProgress-bar2Buffer", "description": "Styles applied to the bar2 element if `variant=\"buffer\"`.", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "bar2Indeterminate", "className": "MuiLinearProgress-bar2Indeterminate", "description": "Styles applied to the bar2 element if `variant=\"indeterminate or query\"`.", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "barColorPrimary", "className": "MuiLinearProgress-barColorPrimary", "description": "Styles applied to the bar elements if `color=\"primary\"`; bar2 if `variant` not \"buffer\".", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "barColorSecondary", "className": "MuiLinearProgress-barColorSecondary", "description": "Styles applied to the bar elements if `color=\"secondary\"`; bar2 if `variant` not \"buffer\".", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "buffer", @@ -107,13 +126,15 @@ "key": "dashedColorPrimary", "className": "MuiLinearProgress-dashedColorPrimary", "description": "Styles applied to the additional bar element if `variant=\"buffer\"` and `color=\"primary\"`.", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "dashedColorSecondary", "className": "MuiLinearProgress-dashedColorSecondary", "description": "Styles applied to the additional bar element if `variant=\"buffer\"` and `color=\"secondary\"`.", - "isGlobal": false + "isGlobal": false, + "isDeprecated": true }, { "key": "determinate", diff --git a/docs/src/components/careers/CareersFaq.tsx b/docs/src/components/careers/CareersFaq.tsx index 7662d4c7709763..70a178bad825c8 100644 --- a/docs/src/components/careers/CareersFaq.tsx +++ b/docs/src/components/careers/CareersFaq.tsx @@ -83,7 +83,7 @@ const faqData = [ For those that chose the "employee": - - people in France are hired as full-time employees under the French [legal entity](https://www.infogreffe.com/entreprise-societe/852357748-material-ui-750119B189960000.html). + - people in France are hired as full-time employees under the French [legal entity](https://www.infogreffe.fr/entreprise-societe/852357748-material-ui-750119B189960000.html). - people outside of France are hired through an Employer of Record (EOR), for example, Deel: https://www.deel.com/. `, }, diff --git a/docs/src/components/productMaterial/MaterialEnd.tsx b/docs/src/components/productMaterial/MaterialEnd.tsx index f38fcdae423c17..6b4ad3486d9f5f 100644 --- a/docs/src/components/productMaterial/MaterialEnd.tsx +++ b/docs/src/components/productMaterial/MaterialEnd.tsx @@ -103,16 +103,11 @@ export default function MaterialEnd({ noFaq }: MaterialEndProps) { Does it support Material Design 3? - The adoption of Material Design 3 is tentatively planned for Material UI v7. See - the{' '} - - the release schedule - {' '} - and follow{' '} + Material UI currently adopts Material Design 2. You can follow{' '} this GitHub issue {' '} - for future updates. + for future design-related updates.
diff --git a/docs/translations/api-docs/card-header/card-header.json b/docs/translations/api-docs/card-header/card-header.json index 677debb60cfb32..9f78623d5f6c98 100644 --- a/docs/translations/api-docs/card-header/card-header.json +++ b/docs/translations/api-docs/card-header/card-header.json @@ -10,6 +10,8 @@ "disableTypography": { "description": "If true, subheader and title won't be wrapped by a Typography component. This can be useful to render an alternative Typography variant by wrapping the title text, and optional subheader text with the Typography component." }, + "slotProps": { "description": "The props used for each slot inside." }, + "slots": { "description": "The components used for each slot inside." }, "subheader": { "description": "The content of the component." }, "subheaderTypographyProps": { "description": "These props will be forwarded to the subheader (as long as disableTypography is not true)." @@ -22,27 +24,13 @@ "description": "These props will be forwarded to the title (as long as disableTypography is not true)." } }, - "classDescriptions": { - "action": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the action element" - }, - "avatar": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the avatar element" - }, - "content": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the content wrapper element" - }, - "root": { "description": "Styles applied to the root element." }, - "subheader": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the subheader Typography element" - }, - "title": { - "description": "Styles applied to {{nodeName}}.", - "nodeName": "the title Typography element" - } + "classDescriptions": {}, + "slotDescriptions": { + "action": "The component that renders the action slot.", + "avatar": "The component that renders the avatar slot.", + "content": "The component that renders the content slot.", + "root": "The component that renders the root slot.", + "subheader": "The component that renders the subheader slot (as long as disableTypography is not true). Follow this guide to learn more about the requirements for this component.", + "title": "The component that renders the title slot (as long as disableTypography is not true). Follow this guide to learn more about the requirements for this component." } } diff --git a/docs/translations/api-docs/linear-progress/linear-progress.json b/docs/translations/api-docs/linear-progress/linear-progress.json index 832be0ad1151f0..697fe047053067 100644 --- a/docs/translations/api-docs/linear-progress/linear-progress.json +++ b/docs/translations/api-docs/linear-progress/linear-progress.json @@ -21,40 +21,49 @@ "description": "Styles applied to {{nodeName}}.", "nodeName": "the layered bar1 and bar2 elements" }, + "bar1": { "description": "Styles applied to {{nodeName}}.", "nodeName": "the bar1 element" }, "bar1Buffer": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the bar1 element", - "conditions": "variant=\"buffer\"" + "conditions": "variant=\"buffer\"", + "deprecationInfo": "Use the .MuiLinearProgress-bar1 and .MuiLinearProgress-buffer classes instead. How to migrate" }, "bar1Determinate": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the bar1 element", - "conditions": "variant=\"determinate\"" + "conditions": "variant=\"determinate\"", + "deprecationInfo": "Use the .MuiLinearProgress-bar1 and .MuiLinearProgress-determinate classes instead. How to migrate" }, "bar1Indeterminate": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the bar1 element", - "conditions": "variant=\"indeterminate or query\"" + "conditions": "variant=\"indeterminate or query\"", + "deprecationInfo": "Use the .MuiLinearProgress-bar1 and .MuiLinearProgress-indeterminate classes instead. How to migrate" }, + "bar2": { "description": "Styles applied to {{nodeName}}.", "nodeName": "the bar2 element" }, "bar2Buffer": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the bar2 element", - "conditions": "variant=\"buffer\"" + "conditions": "variant=\"buffer\"", + "deprecationInfo": "Use the .MuiLinearProgress-bar2 and .MuiLinearProgress-buffer classes instead. How to migrate" }, "bar2Indeterminate": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the bar2 element", - "conditions": "variant=\"indeterminate or query\"" + "conditions": "variant=\"indeterminate or query\"", + "deprecationInfo": "Use the .MuiLinearProgress-bar2 and .MuiLinearProgress-indeterminate classes instead. How to migrate" }, "barColorPrimary": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the bar elements", - "conditions": "color=\"primary\"; bar2 if variant not "buffer"" + "conditions": "color=\"primary\"; bar2 if variant not "buffer"", + "deprecationInfo": "Use the .MuiLinearProgress-bar and .MuiLinearProgress-colorPrimary classes instead. How to migrate" }, "barColorSecondary": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the bar elements", - "conditions": "color=\"secondary\"; bar2 if variant not "buffer"" + "conditions": "color=\"secondary\"; bar2 if variant not "buffer"", + "deprecationInfo": "Use the .MuiLinearProgress-bar and .MuiLinearProgress-colorSecondary classes instead. How to migrate" }, "buffer": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", @@ -79,12 +88,14 @@ "dashedColorPrimary": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the additional bar element", - "conditions": "variant=\"buffer\" and color=\"primary\"" + "conditions": "variant=\"buffer\" and color=\"primary\"", + "deprecationInfo": "Combine the .MuiLinearProgress-dashed and .MuiLinearProgress-colorPrimary classes instead. How to migrate" }, "dashedColorSecondary": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", "nodeName": "the additional bar element", - "conditions": "variant=\"buffer\" and color=\"secondary\"" + "conditions": "variant=\"buffer\" and color=\"secondary\"", + "deprecationInfo": "Combine the .MuiLinearProgress-dashed and .MuiLinearProgress-colorSecondary classes instead. How to migrate" }, "determinate": { "description": "Styles applied to {{nodeName}} if {{conditions}}.", diff --git a/package.json b/package.json index 072668ad1a6d18..b6e89e5855f15d 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ }, "dependencies": { "@googleapis/sheets": "^9.3.1", - "@netlify/functions": "^2.8.2", + "@netlify/functions": "^3.0.0", "@slack/bolt": "^4.2.0", "execa": "^9.5.2", "google-auth-library": "^9.15.0" @@ -131,7 +131,7 @@ "@types/fs-extra": "^11.0.4", "@types/lodash": "^4.17.14", "@types/mocha": "^10.0.10", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/react": "^19.0.2", "@types/yargs": "^17.0.33", "@typescript-eslint/eslint-plugin": "^7.18.0", @@ -198,7 +198,7 @@ "vitest-fail-on-console": "^0.7.1", "webpack": "^5.97.1", "webpack-bundle-analyzer": "^4.10.2", - "webpack-cli": "^5.1.4", + "webpack-cli": "^6.0.1", "yargs": "^17.7.2" }, "packageManager": "pnpm@9.15.2", @@ -216,7 +216,7 @@ "@definitelytyped/header-parser": "^0.2.16", "@definitelytyped/typescript-versions": "^0.1.6", "@definitelytyped/utils": "^0.1.8", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "cross-fetch": "^4.1.0", "@pigment-css/react": "0.0.29", "@pigment-css/unplugin": "0.0.29", diff --git a/packages-internal/scripts/package.json b/packages-internal/scripts/package.json index 6c3419ab47b085..fd5769f0ae9b80 100644 --- a/packages-internal/scripts/package.json +++ b/packages-internal/scripts/package.json @@ -42,7 +42,7 @@ "@types/chai": "^4.3.20", "@types/doctrine": "^0.0.9", "@types/lodash": "^4.17.14", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/react": "^19.0.2", "@types/uuid": "^10.0.0", "chai": "^4.5.0", diff --git a/packages/api-docs-builder-core/package.json b/packages/api-docs-builder-core/package.json index c66785695c2276..fb1e698887e51d 100644 --- a/packages/api-docs-builder-core/package.json +++ b/packages/api-docs-builder-core/package.json @@ -17,7 +17,7 @@ "devDependencies": { "@types/chai": "^4.3.20", "@types/mocha": "^10.0.10", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/sinon": "^17.0.3", "chai": "^4.5.0", "sinon": "^19.0.2", diff --git a/packages/api-docs-builder/package.json b/packages/api-docs-builder/package.json index 14d889bbd587f5..7e044aff188fcd 100644 --- a/packages/api-docs-builder/package.json +++ b/packages/api-docs-builder/package.json @@ -32,7 +32,7 @@ "@types/doctrine": "^0.0.9", "@types/mdast": "4.0.4", "@types/mocha": "^10.0.10", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/react-docgen": "workspace:*", "@types/sinon": "^17.0.3", "chai": "^4.5.0", diff --git a/packages/mui-codemod/README.md b/packages/mui-codemod/README.md index aa51cb7a8373c2..d376805bb85e80 100644 --- a/packages/mui-codemod/README.md +++ b/packages/mui-codemod/README.md @@ -1242,6 +1242,66 @@ npx @mui/codemod@latest deprecations/input-base-props npx @mui/codemod@latest deprecations/input-props ``` +#### `linear-progress-classes` + +JS transforms: + +```diff + import { linearProgressClasses } from '@mui/material/LinearProgress'; + + MuiLinearProgress: { + styleOverrides: { + root: { +- [`&.${linearProgressClasses.bar1Buffer}`]: {}, ++ [`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar1}`]: {}, +- [`&.${linearProgressClasses.bar1Determinate}`]: {}, ++ [`&.${linearProgressClasses.determinate} > .${linearProgressClasses.bar1}`]: {}, +- [`&.${linearProgressClasses.bar1Indeterminate}`]: {}, ++ [`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar1}`]: {}, +- [`&.${linearProgressClasses.bar2Buffer}`]: {}, ++ [`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar2}`]: {}, +- [`&.${linearProgressClasses.bar2Indeterminate}`]: {}, ++ [`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar2}`]: {}, +- [`&.${linearProgressClasses.barColorPrimary}`]: {}, ++ [`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.bar}`]: {}, +- [`&.${linearProgressClasses.barColorSecondary}`]: {}, ++ [`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.bar}`]: {}, +- [`&.${linearProgressClasses.dashedColorPrimary}`]: {}, ++ [`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.dashed}`]: {}, +- [`&.${linearProgressClasses.dashedColorSecondary}`]: {}, ++ [`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.dashed}`]: {}, + }, + }, + } +``` + +CSS transforms: + +```diff +-.MuiLinearProgress-bar1Buffer ++.MuiLinearProgress-buffer > .MuiLinearProgress-bar1 +-.MuiLinearProgress-bar1Determinate ++.MuiLinearProgress-determinate > .MuiLinearProgress-bar1 +-.MuiLinearProgress-bar1Indeterminate ++.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar1 +-.MuiLinearProgress-bar2Buffer ++.MuiLinearProgress-buffer > .MuiLinearProgress-bar2 +-.MuiLinearProgress-bar2Indeterminate ++.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar2 +-.MuiLinearProgress-barColorPrimary ++.MuiLinearProgress-colorPrimary > .MuiLinearProgress-bar +-.MuiLinearProgress-barColorSecondary ++.MuiLinearProgress-colorSecondary > .MuiLinearProgress-bar +-.MuiLinearProgress-dashedColorPrimary ++.MuiLinearProgress-colorPrimary > .MuiLinearProgress-dashed +-.MuiLinearProgress-dashedColorSecondary ++.MuiLinearProgress-colorSecondary > .MuiLinearProgress-dashed +``` + +```bash +npx @mui/codemod@latest deprecations/linear-progress-classes +``` + #### `modal-props` ```diff diff --git a/packages/mui-codemod/src/deprecations/all/deprecations-all.js b/packages/mui-codemod/src/deprecations/all/deprecations-all.js index 08306a961d8891..7461bca69707b4 100644 --- a/packages/mui-codemod/src/deprecations/all/deprecations-all.js +++ b/packages/mui-codemod/src/deprecations/all/deprecations-all.js @@ -16,6 +16,7 @@ import transformImageListItemBarClasses from '../image-list-item-bar-classes'; import transformInputBaseProps from '../input-base-props'; import transformInputProps from '../input-props'; import transformListItemTextProps from '../list-item-text-props'; +import transformLinearProgressClasses from '../linear-progress-classes'; import transformModalProps from '../modal-props'; import transformOutlinedInputProps from '../outlined-input-props'; import transformPaginationItemClasses from '../pagination-item-classes'; @@ -30,6 +31,7 @@ import transformTabClasses from '../tab-classes'; import transformToggleButtonGroupClasses from '../toggle-button-group-classes'; import transformTooltipProps from '../tooltip-props'; import transformTablePaginationProps from '../table-pagination-props'; +import transformCardHeaderProps from '../card-header-props'; /** * @param {import('jscodeshift').FileInfo} file @@ -54,6 +56,7 @@ export default function deprecationsAll(file, api, options) { file.source = transformInputBaseProps(file, api, options); file.source = transformInputProps(file, api, options); file.source = transformListItemTextProps(file, api, options); + file.source = transformLinearProgressClasses(file, api, options); file.source = transformModalProps(file, api, options); file.source = transformOutlinedInputProps(file, api, options); file.source = transformPaginationItemClasses(file, api, options); @@ -68,6 +71,7 @@ export default function deprecationsAll(file, api, options) { file.source = transformToggleButtonGroupClasses(file, api, options); file.source = transformTooltipProps(file, api, options); file.source = transformTablePaginationProps(file, api, options); + file.source = transformCardHeaderProps(file, api, options); return file.source; } diff --git a/packages/mui-codemod/src/deprecations/all/postcss.config.js b/packages/mui-codemod/src/deprecations/all/postcss.config.js index 948f51a315bae8..2ec94017b76d05 100644 --- a/packages/mui-codemod/src/deprecations/all/postcss.config.js +++ b/packages/mui-codemod/src/deprecations/all/postcss.config.js @@ -15,6 +15,9 @@ const { const { plugin: circularProgressClassesPlugin, } = require('../circular-progress-classes/postcss-plugin'); +const { + plugin: linearProgressClassesPlugin, +} = require('../linear-progress-classes/postcss-plugin'); const { plugin: tabClassesPlugin } = require('../tab-classes/postcss-plugin'); const { plugin: tableSortLabelClassesPlugin, @@ -29,6 +32,7 @@ module.exports = { buttonGroupClassesPlugin, chipClassesPlugin, circularProgressClassesPlugin, + linearProgressClassesPlugin, paginationItemClassesPlugin, stepConnectorClassesPlugin, toggleButtonGroupClassesPlugin, diff --git a/packages/mui-codemod/src/deprecations/card-header-props/card-header-props.js b/packages/mui-codemod/src/deprecations/card-header-props/card-header-props.js new file mode 100644 index 00000000000000..f0909e8bf5534b --- /dev/null +++ b/packages/mui-codemod/src/deprecations/card-header-props/card-header-props.js @@ -0,0 +1,27 @@ +import movePropIntoSlotProps from '../utils/movePropIntoSlotProps'; + +/** + * @param {import('jscodeshift').FileInfo} file + * @param {import('jscodeshift').API} api + */ +export default function transformer(file, api, options) { + const j = api.jscodeshift; + const root = j(file.source); + const printOptions = options.printOptions; + + movePropIntoSlotProps(j, { + root, + componentName: 'CardHeader', + propName: 'titleTypographyProps', + slotName: 'title', + }); + + movePropIntoSlotProps(j, { + root, + componentName: 'CardHeader', + propName: 'subheaderTypographyProps', + slotName: 'subheader', + }); + + return root.toSource(printOptions); +} diff --git a/packages/mui-codemod/src/deprecations/card-header-props/card-header-props.test.js b/packages/mui-codemod/src/deprecations/card-header-props/card-header-props.test.js new file mode 100644 index 00000000000000..89914c8db31611 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/card-header-props/card-header-props.test.js @@ -0,0 +1,13 @@ +import { describeJscodeshiftTransform } from '../../../testUtils'; +import transform from './card-header-props'; + +describe('@mui/codemod', () => { + describe('deprecations', () => { + describeJscodeshiftTransform({ + transform, + transformName: 'tooltip-props', + dirname: __dirname, + testCases: [{ actual: '/test-cases/actual.js', expected: '/test-cases/expected.js' }], + }); + }); +}); diff --git a/packages/mui-codemod/src/deprecations/card-header-props/index.js b/packages/mui-codemod/src/deprecations/card-header-props/index.js new file mode 100644 index 00000000000000..2d5aa627385444 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/card-header-props/index.js @@ -0,0 +1 @@ +export { default } from './card-header-props'; diff --git a/packages/mui-codemod/src/deprecations/card-header-props/test-cases/actual.js b/packages/mui-codemod/src/deprecations/card-header-props/test-cases/actual.js new file mode 100644 index 00000000000000..e2456cfe52aba0 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/card-header-props/test-cases/actual.js @@ -0,0 +1,26 @@ +import CardHeader from '@mui/material/CardHeader'; +import { CardHeader as MyCardHeader } from '@mui/material'; + +; +; +; +; + +; diff --git a/packages/mui-codemod/src/deprecations/card-header-props/test-cases/expected.js b/packages/mui-codemod/src/deprecations/card-header-props/test-cases/expected.js new file mode 100644 index 00000000000000..03bb60cc95ae91 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/card-header-props/test-cases/expected.js @@ -0,0 +1,34 @@ +import CardHeader from '@mui/material/CardHeader'; +import { CardHeader as MyCardHeader } from '@mui/material'; + +; +; +; +; + +; diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/index.js b/packages/mui-codemod/src/deprecations/linear-progress-classes/index.js new file mode 100644 index 00000000000000..07c2d8f1caca3d --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/index.js @@ -0,0 +1 @@ +export { default } from './linear-progress-classes'; diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/linear-progress-classes.js b/packages/mui-codemod/src/deprecations/linear-progress-classes/linear-progress-classes.js new file mode 100644 index 00000000000000..dbe1241401791b --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/linear-progress-classes.js @@ -0,0 +1,129 @@ +import { classes } from './postcss-plugin'; + +/** + * @param {import('jscodeshift').FileInfo} file + * @param {import('jscodeshift').API} api + */ +export default function transformer(file, api, options) { + const j = api.jscodeshift; + const root = j(file.source); + + const printOptions = options.printOptions; + classes.forEach(({ deprecatedClass, replacementSelector }) => { + const replacementSelectorPrefix = '&'; + root + .find(j.ImportDeclaration) + .filter((path) => path.node.source.value.match(/^@mui\/material\/LinearProgress$/)) + .forEach((path) => { + path.node.specifiers.forEach((specifier) => { + if ( + specifier.type === 'ImportSpecifier' && + specifier.imported.name === 'linearProgressClasses' + ) { + const deprecatedAtomicClass = deprecatedClass.replace( + `${deprecatedClass.split('-')[0]}-`, + '', + ); + + root + .find(j.MemberExpression, { + object: { name: specifier.local.name }, + property: { name: deprecatedAtomicClass }, + }) + .forEach((memberExpression) => { + const parent = memberExpression.parentPath.parentPath.value; + if (parent.type === j.TemplateLiteral.name) { + const memberExpressionIndex = parent.expressions.findIndex( + (expression) => expression === memberExpression.value, + ); + const precedingTemplateElement = parent.quasis[memberExpressionIndex]; + const atomicClasses = replacementSelector + .replaceAll('MuiLinearProgress-', '') + .replaceAll(replacementSelectorPrefix, '') + .replaceAll(' > ', '') + .split('.') + .filter(Boolean); + + if ( + precedingTemplateElement.value.raw.endsWith( + deprecatedClass.startsWith(' ') + ? `${replacementSelectorPrefix} .` + : `${replacementSelectorPrefix}.`, + ) + ) { + const atomicClassesArgs = [ + memberExpressionIndex, + 1, + ...atomicClasses.map((atomicClass) => + j.memberExpression( + memberExpression.value.object, + j.identifier(atomicClass), + ), + ), + ]; + parent.expressions.splice(...atomicClassesArgs); + + if (replacementSelector.includes(' > ')) { + const quasisArgs = [ + memberExpressionIndex, + 1, + j.templateElement( + { + raw: precedingTemplateElement.value.raw.replace(' ', ''), + cooked: precedingTemplateElement.value.cooked.replace(' ', ''), + }, + false, + ), + j.templateElement({ raw: ' > .', cooked: ' > .' }, false), + ]; + + if (atomicClasses.length === 3) { + quasisArgs.splice( + 3, + 0, + j.templateElement({ raw: '.', cooked: '.' }, false), + ); + } + + parent.quasis.splice(...quasisArgs); + } else { + parent.quasis.splice( + memberExpressionIndex, + 1, + j.templateElement( + { + raw: precedingTemplateElement.value.raw, + cooked: precedingTemplateElement.value.cooked, + }, + false, + ), + + j.templateElement({ raw: '.', cooked: '.' }, false), + ); + } + } + } + }); + } + }); + }); + + const selectorRegex = new RegExp(`^${replacementSelectorPrefix}${deprecatedClass}`); + root + .find( + j.Literal, + (literal) => typeof literal.value === 'string' && literal.value.match(selectorRegex), + ) + .forEach((path) => { + path.replace( + j.literal( + path.value.value.replace( + selectorRegex, + `${replacementSelectorPrefix}${replacementSelector}`, + ), + ), + ); + }); + }); + return root.toSource(printOptions); +} diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/linear-progress-classes.test.js b/packages/mui-codemod/src/deprecations/linear-progress-classes/linear-progress-classes.test.js new file mode 100644 index 00000000000000..fbad32e703a40c --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/linear-progress-classes.test.js @@ -0,0 +1,79 @@ +import path from 'path'; +import { expect } from 'chai'; +import postcss from 'postcss'; +import { jscodeshift } from '../../../testUtils'; +import jsTransform from './linear-progress-classes'; +import { plugin as postcssPlugin } from './postcss-plugin'; +import readFile from '../../util/readFile'; + +function read(fileName) { + return readFile(path.join(__dirname, fileName)); +} + +const postcssProcessor = postcss([postcssPlugin]); + +describe('@mui/codemod', () => { + describe('deprecations', () => { + describe('linear-progress-classes', () => { + describe('js-transform', () => { + it('transforms props as needed', () => { + const actual = jsTransform( + { source: read('./test-cases/actual.js') }, + { jscodeshift }, + { printOptions: { quote: 'single', trailingComma: true } }, + ); + + const expected = read('./test-cases/expected.js'); + + expect(actual).to.equal(expected, 'The transformed version should be correct'); + }); + + it('should be idempotent', () => { + const actual = jsTransform( + { source: read('./test-cases/expected.js') }, + { jscodeshift }, + {}, + ); + + const expected = read('./test-cases/expected.js'); + expect(actual).to.equal(expected, 'The transformed version should be correct'); + }); + }); + + describe('css-transform', () => { + it('transforms classes as needed', async () => { + const actual = await postcssProcessor.process(read('./test-cases/actual.css'), { + from: undefined, + }); + + const expected = read('./test-cases/expected.css'); + expect(actual.css).to.equal(expected, 'The transformed version should be correct'); + }); + + it('should be idempotent', async () => { + const actual = await postcssProcessor.process(read('./test-cases/expected.css'), { + from: undefined, + }); + + const expected = read('./test-cases/expected.css'); + expect(actual.css).to.equal(expected, 'The transformed version should be correct'); + }); + }); + + describe('test-cases', () => { + it('should not be the same', () => { + const actualJS = read('./test-cases/actual.js'); + const expectedJS = read('./test-cases/expected.js'); + expect(actualJS).not.to.equal(expectedJS, 'The actual and expected should be different'); + + const actualCSS = read('./test-cases/actual.css'); + const expectedCSS = read('./test-cases/expected.css'); + expect(actualCSS).not.to.equal( + expectedCSS, + 'The actual and expected should be different', + ); + }); + }); + }); + }); +}); diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/postcss-plugin.js b/packages/mui-codemod/src/deprecations/linear-progress-classes/postcss-plugin.js new file mode 100644 index 00000000000000..e0e452efcc64ca --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/postcss-plugin.js @@ -0,0 +1,61 @@ +const classes = [ + { + deprecatedClass: ' .MuiLinearProgress-bar1Buffer', + replacementSelector: '.MuiLinearProgress-buffer > .MuiLinearProgress-bar1', + }, + { + deprecatedClass: ' .MuiLinearProgress-bar1Determinate', + replacementSelector: '.MuiLinearProgress-determinate > .MuiLinearProgress-bar1', + }, + { + deprecatedClass: ' .MuiLinearProgress-bar1Indeterminate', + replacementSelector: '.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar1', + }, + { + deprecatedClass: ' .MuiLinearProgress-bar2Buffer', + replacementSelector: '.MuiLinearProgress-buffer > .MuiLinearProgress-bar2', + }, + { + deprecatedClass: ' .MuiLinearProgress-bar2Indeterminate', + replacementSelector: '.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar2', + }, + { + deprecatedClass: ' .MuiLinearProgress-barColorPrimary', + replacementSelector: '.MuiLinearProgress-colorPrimary > .MuiLinearProgress-bar', + }, + { + deprecatedClass: ' .MuiLinearProgress-barColorSecondary', + replacementSelector: '.MuiLinearProgress-colorSecondary > .MuiLinearProgress-bar', + }, + { + deprecatedClass: ' .MuiLinearProgress-dashedColorPrimary', + replacementSelector: '.MuiLinearProgress-colorPrimary > .MuiLinearProgress-dashed', + }, + { + deprecatedClass: ' .MuiLinearProgress-dashedColorSecondary', + replacementSelector: '.MuiLinearProgress-colorSecondary > .MuiLinearProgress-dashed', + }, +]; + +const plugin = () => { + return { + postcssPlugin: `Replace deprecated LinearProgress classes with new classes`, + Rule(rule) { + const { selector } = rule; + + classes.forEach(({ deprecatedClass, replacementSelector }) => { + const selectorRegex = new RegExp(`${deprecatedClass}`); + + if (selector.match(selectorRegex)) { + rule.selector = selector.replace(selectorRegex, replacementSelector); + } + }); + }, + }; +}; +plugin.postcss = true; + +module.exports = { + plugin, + classes, +}; diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/postcss.config.js b/packages/mui-codemod/src/deprecations/linear-progress-classes/postcss.config.js new file mode 100644 index 00000000000000..23bebc1125be6e --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/postcss.config.js @@ -0,0 +1,5 @@ +const { plugin } = require('./postcss-plugin'); + +module.exports = { + plugins: [plugin], +}; diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/actual.css b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/actual.css new file mode 100644 index 00000000000000..d48b26ef322745 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/actual.css @@ -0,0 +1,35 @@ +.MuiLinearProgress-root .MuiLinearProgress-bar1Buffer { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-bar1Determinate { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-bar1Indeterminate { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-bar2Buffer { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-bar2Indeterminate { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-barColorPrimary { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-barColorSecondary { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-dashedColorPrimary { + color: red; +} + +.MuiLinearProgress-root .MuiLinearProgress-dashedColorSecondary { + color: red; +} diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/actual.js b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/actual.js new file mode 100644 index 00000000000000..0952821bf7eb10 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/actual.js @@ -0,0 +1,20 @@ +import { linearProgressClasses } from '@mui/material/LinearProgress'; + +('& .MuiLinearProgress-bar1Buffer'); +('& .MuiLinearProgress-bar1Determinate'); +('& .MuiLinearProgress-bar1Indeterminate'); +('& .MuiLinearProgress-bar2Buffer'); +('& .MuiLinearProgress-bar2Indeterminate'); +('& .MuiLinearProgress-barColorPrimary'); +('& .MuiLinearProgress-barColorSecondary'); +('& .MuiLinearProgress-dashedColorPrimary'); +('& .MuiLinearProgress-dashedColorSecondary'); +`& .${linearProgressClasses.bar1Buffer}`; +`& .${linearProgressClasses.bar1Determinate}`; +`& .${linearProgressClasses.bar1Indeterminate}`; +`& .${linearProgressClasses.bar2Buffer}`; +`& .${linearProgressClasses.bar2Indeterminate}`; +`& .${linearProgressClasses.barColorPrimary}`; +`& .${linearProgressClasses.barColorSecondary}`; +`& .${linearProgressClasses.dashedColorPrimary}`; +`& .${linearProgressClasses.dashedColorSecondary}`; diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/expected.css b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/expected.css new file mode 100644 index 00000000000000..8bdd1f598da790 --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/expected.css @@ -0,0 +1,35 @@ +.MuiLinearProgress-root.MuiLinearProgress-buffer > .MuiLinearProgress-bar1 { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-determinate > .MuiLinearProgress-bar1 { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar1 { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-buffer > .MuiLinearProgress-bar2 { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar2 { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-colorPrimary > .MuiLinearProgress-bar { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-colorSecondary > .MuiLinearProgress-bar { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-colorPrimary > .MuiLinearProgress-dashed { + color: red; +} + +.MuiLinearProgress-root.MuiLinearProgress-colorSecondary > .MuiLinearProgress-dashed { + color: red; +} diff --git a/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/expected.js b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/expected.js new file mode 100644 index 00000000000000..38385104f60c9b --- /dev/null +++ b/packages/mui-codemod/src/deprecations/linear-progress-classes/test-cases/expected.js @@ -0,0 +1,20 @@ +import { linearProgressClasses } from '@mui/material/LinearProgress'; + +('&.MuiLinearProgress-buffer > .MuiLinearProgress-bar1'); +('&.MuiLinearProgress-determinate > .MuiLinearProgress-bar1'); +('&.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar1'); +('&.MuiLinearProgress-buffer > .MuiLinearProgress-bar2'); +('&.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar2'); +('&.MuiLinearProgress-colorPrimary > .MuiLinearProgress-bar'); +('&.MuiLinearProgress-colorSecondary > .MuiLinearProgress-bar'); +('&.MuiLinearProgress-colorPrimary > .MuiLinearProgress-dashed'); +('&.MuiLinearProgress-colorSecondary > .MuiLinearProgress-dashed'); +`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar1}`; +`&.${linearProgressClasses.determinate} > .${linearProgressClasses.bar1}`; +`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar1}`; +`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar2}`; +`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar2}`; +`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.bar}`; +`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.bar}`; +`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.dashed}`; +`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.dashed}`; diff --git a/packages/mui-docs/package.json b/packages/mui-docs/package.json index 667db2c126fa83..10a580868ae0ca 100644 --- a/packages/mui-docs/package.json +++ b/packages/mui-docs/package.json @@ -45,7 +45,7 @@ "@mui/icons-material": "workspace:*", "@mui/material": "workspace:*", "@types/gtag.js": "^0.0.20", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/prop-types": "^15.7.14", "@types/react": "^19.0.2", "next": "^15.1.3", diff --git a/packages/mui-docs/src/MarkdownElement/MarkdownElement.tsx b/packages/mui-docs/src/MarkdownElement/MarkdownElement.tsx index fb25e65d73515e..53736b5c73b96b 100644 --- a/packages/mui-docs/src/MarkdownElement/MarkdownElement.tsx +++ b/packages/mui-docs/src/MarkdownElement/MarkdownElement.tsx @@ -559,6 +559,9 @@ const Root = styled('div')( transition: theme.transitions.create(['background', 'borderColor', 'display'], { duration: theme.transitions.duration.shortest, }), + '@media (max-width: 640px)': { + display: 'none', + }, '& .MuiCode-copied-label': { display: 'none', }, diff --git a/packages/mui-material/src/CardHeader/CardHeader.d.ts b/packages/mui-material/src/CardHeader/CardHeader.d.ts index 4fce9fed0685d3..1f5292645f9912 100644 --- a/packages/mui-material/src/CardHeader/CardHeader.d.ts +++ b/packages/mui-material/src/CardHeader/CardHeader.d.ts @@ -3,8 +3,116 @@ import { SxProps } from '@mui/system'; import { TypographyProps } from '../Typography'; import { OverridableComponent, OverrideProps } from '../OverridableComponent'; import { Theme } from '..'; +import { CreateSlotsAndSlotProps, SlotProps } from '../utils/types'; import { CardHeaderClasses } from './cardHeaderClasses'; +export interface CardHeaderRootSlotPropsOverrides {} + +export interface CardHeaderAvatarSlotPropsOverrides {} + +export interface CardHeaderActionSlotPropsOverrides {} + +export interface CardHeaderContentSlotPropsOverrides {} + +export interface CardHeaderTitleSlotPropsOverrides {} + +export interface CardHeaderSubheaderSlotPropsOverrides {} + +export interface CardHeaderSlots { + /** + * The component that renders the root slot. + * @default 'div' + */ + root: React.ElementType; + /** + * The component that renders the avatar slot. + * @default 'div' + */ + avatar: React.ElementType; + /** + * The component that renders the action slot. + * @default 'div' + */ + action: React.ElementType; + /** + * The component that renders the content slot. + * @default 'div' + */ + content: React.ElementType; + /** + * The component that renders the title slot (as long as disableTypography is not `true`). + * [Follow this guide](https://mui.com/material-ui/api/typography/#props) to learn more about the requirements for this component. + * @default Typography + */ + title: React.ElementType; + /** + * The component that renders the subheader slot (as long as disableTypography is not `true`). + * [Follow this guide](https://mui.com/material-ui/api/typography/#props) to learn more about the requirements for this component. + * @default Typography + */ + subheader: React.ElementType; +} + +export type CardHeaderSlotsAndSlotProps = CreateSlotsAndSlotProps< + CardHeaderSlots, + { + /** + * Props forwarded to the root slot. + * By default, the avaible props are based on the div element. + */ + root: SlotProps< + React.ElementType>, + CardHeaderRootSlotPropsOverrides, + CardHeaderOwnerState + >; + /** + * Props forwarded to the avatar slot. + * By default, the avaible props are based on the div element. + */ + avatar: SlotProps< + React.ElementType>, + CardHeaderAvatarSlotPropsOverrides, + CardHeaderOwnerState + >; + /** + * Props forwarded to the action slot. + * By default, the avaible props are based on the div element. + */ + action: SlotProps< + React.ElementType>, + CardHeaderActionSlotPropsOverrides, + CardHeaderOwnerState + >; + /** + * Props forwarded to the content slot. + * By default, the avaible props are based on the div element. + */ + content: SlotProps< + React.ElementType>, + CardHeaderContentSlotPropsOverrides, + CardHeaderOwnerState + >; + /** + * Props forwarded to the title slot (as long as disableTypography is not `true`). + * By default, the avaible props are based on the [Typography](https://mui.com/material-ui/api/typography/#props) component. + */ + title: SlotProps< + React.ElementType, + CardHeaderTitleSlotPropsOverrides, + CardHeaderOwnerState + >; + /** + * Props forwarded to the subheader slot (as long as disableTypography is not `true`). + * By default, the avaible props are based on the [Typography](https://mui.com/material-ui/api/typography/#props) component. + */ + subheader: SlotProps< + React.ElementType, + CardHeaderSubheaderSlotPropsOverrides, + CardHeaderOwnerState + >; + } +>; + export interface CardHeaderOwnProps< TitleTypographyComponent extends React.ElementType = 'span', SubheaderTypographyComponent extends React.ElementType = 'span', @@ -36,6 +144,7 @@ export interface CardHeaderOwnProps< /** * These props will be forwarded to the subheader * (as long as disableTypography is not `true`). + * @deprecated Use `slotProps.subheader` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details. */ subheaderTypographyProps?: TypographyProps< SubheaderTypographyComponent, @@ -54,6 +163,7 @@ export interface CardHeaderOwnProps< /** * These props will be forwarded to the title * (as long as disableTypography is not `true`). + * @deprecated Use `slotProps.title` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details. */ titleTypographyProps?: TypographyProps< TitleTypographyComponent, @@ -63,6 +173,8 @@ export interface CardHeaderOwnProps< >; } +export interface CardHeaderOwnerState extends CardHeaderOwnProps {} + export interface CardHeaderTypeMap< AdditionalProps = {}, RootComponent extends React.ElementType = 'div', @@ -70,7 +182,8 @@ export interface CardHeaderTypeMap< SubheaderTypographyComponent extends React.ElementType = 'span', > { props: AdditionalProps & - CardHeaderOwnProps; + CardHeaderOwnProps & + CardHeaderSlotsAndSlotProps; defaultComponent: RootComponent; } /** diff --git a/packages/mui-material/src/CardHeader/CardHeader.js b/packages/mui-material/src/CardHeader/CardHeader.js index 88bcd6c709fcdf..5a669c5f31f2bc 100644 --- a/packages/mui-material/src/CardHeader/CardHeader.js +++ b/packages/mui-material/src/CardHeader/CardHeader.js @@ -1,12 +1,12 @@ 'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; -import clsx from 'clsx'; import composeClasses from '@mui/utils/composeClasses'; import Typography, { typographyClasses } from '../Typography'; import { styled } from '../zero-styled'; import { useDefaultProps } from '../DefaultPropsProvider'; import cardHeaderClasses, { getCardHeaderUtilityClass } from './cardHeaderClasses'; +import useSlot from '../utils/useSlot'; const useUtilityClasses = (ownerState) => { const { classes } = ownerState; @@ -80,13 +80,14 @@ const CardHeader = React.forwardRef(function CardHeader(inProps, ref) { const { action, avatar, - className, component = 'div', disableTypography = false, subheader: subheaderProp, subheaderTypographyProps, title: titleProp, titleTypographyProps, + slots = {}, + slotProps = {}, ...other } = props; @@ -98,59 +99,88 @@ const CardHeader = React.forwardRef(function CardHeader(inProps, ref) { const classes = useUtilityClasses(ownerState); + const externalForwardedProps = { + slots, + slotProps: { + title: titleTypographyProps, + subheader: subheaderTypographyProps, + ...slotProps, + }, + }; + let title = titleProp; + const [TitleSlot, titleSlotProps] = useSlot('title', { + className: classes.title, + elementType: Typography, + externalForwardedProps, + ownerState, + additionalProps: { + variant: avatar ? 'body2' : 'h5', + component: 'span', + }, + }); if (title != null && title.type !== Typography && !disableTypography) { - title = ( - - {title} - - ); + title = {title}; } let subheader = subheaderProp; + const [SubheaderSlot, subheaderSlotProps] = useSlot('subheader', { + className: classes.subheader, + elementType: Typography, + externalForwardedProps, + ownerState, + additionalProps: { + variant: avatar ? 'body2' : 'body1', + color: 'textSecondary', + component: 'span', + }, + }); if (subheader != null && subheader.type !== Typography && !disableTypography) { - subheader = ( - - {subheader} - - ); + subheader = {subheader}; } + const [RootSlot, rootSlotProps] = useSlot('root', { + ref, + className: classes.root, + elementType: CardHeaderRoot, + externalForwardedProps: { + ...externalForwardedProps, + ...other, + component, + }, + ownerState, + }); + + const [AvatarSlot, avatarSlotProps] = useSlot('avatar', { + className: classes.avatar, + elementType: CardHeaderAvatar, + externalForwardedProps, + ownerState, + }); + + const [ContentSlot, contentSlotProps] = useSlot('content', { + className: classes.content, + elementType: CardHeaderContent, + externalForwardedProps, + ownerState, + }); + + const [ActionSlot, actionSlotProps] = useSlot('action', { + className: classes.action, + elementType: CardHeaderAction, + externalForwardedProps, + ownerState, + }); + return ( - - {avatar && ( - - {avatar} - - )} - - + + {avatar && {avatar}} + {title} {subheader} - - {action && ( - - {action} - - )} - + + {action && {action}} + ); }); @@ -175,10 +205,6 @@ CardHeader.propTypes /* remove-proptypes */ = { * Override or extend the styles applied to the component. */ classes: PropTypes.object, - /** - * @ignore - */ - className: PropTypes.string, /** * The component used for the root node. * Either a string to use a HTML element or a component. @@ -192,6 +218,30 @@ CardHeader.propTypes /* remove-proptypes */ = { * @default false */ disableTypography: PropTypes.bool, + /** + * The props used for each slot inside. + * @default {} + */ + slotProps: PropTypes.shape({ + action: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + avatar: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + content: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + subheader: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + title: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + }), + /** + * The components used for each slot inside. + * @default {} + */ + slots: PropTypes.shape({ + action: PropTypes.elementType, + avatar: PropTypes.elementType, + content: PropTypes.elementType, + root: PropTypes.elementType, + subheader: PropTypes.elementType, + title: PropTypes.elementType, + }), /** * The content of the component. */ @@ -199,6 +249,7 @@ CardHeader.propTypes /* remove-proptypes */ = { /** * These props will be forwarded to the subheader * (as long as disableTypography is not `true`). + * @deprecated Use `slotProps.subheader` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details. */ subheaderTypographyProps: PropTypes.object, /** @@ -216,6 +267,7 @@ CardHeader.propTypes /* remove-proptypes */ = { /** * These props will be forwarded to the title * (as long as disableTypography is not `true`). + * @deprecated Use `slotProps.title` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details. */ titleTypographyProps: PropTypes.object, }; diff --git a/packages/mui-material/src/CardHeader/CardHeader.spec.tsx b/packages/mui-material/src/CardHeader/CardHeader.spec.tsx index 62b8735bbd5f55..ac418546aeb535 100644 --- a/packages/mui-material/src/CardHeader/CardHeader.spec.tsx +++ b/packages/mui-material/src/CardHeader/CardHeader.spec.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import { styled } from '@mui/material/styles'; import CardHeader, { CardHeaderProps, CardHeaderTypeMap } from '@mui/material/CardHeader'; const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> = @@ -306,3 +307,49 @@ function mixedTypographyPropsTest() { subheaderTypographyProps={{ component: CustomComponent, numberProp: 2 }} />; } + +; +const CustomSlot = styled('div')({}); +; diff --git a/packages/mui-material/src/CardHeader/CardHeader.test.js b/packages/mui-material/src/CardHeader/CardHeader.test.js index 2c40497429048f..2cdab69941ef76 100644 --- a/packages/mui-material/src/CardHeader/CardHeader.test.js +++ b/packages/mui-material/src/CardHeader/CardHeader.test.js @@ -2,23 +2,48 @@ import * as React from 'react'; import { expect } from 'chai'; import { createRenderer } from '@mui/internal-test-utils'; import { typographyClasses } from '@mui/material/Typography'; +import Avatar from '@mui/material/Avatar'; +import IconButton from '@mui/material/IconButton'; import CardHeader, { cardHeaderClasses as classes } from '@mui/material/CardHeader'; import describeConformance from '../../test/describeConformance'; describe('', () => { const { render } = createRenderer(); - describeConformance(, () => ({ - classes, - inheritComponent: 'div', - render, - muiName: 'MuiCardHeader', - refInstanceof: window.HTMLDivElement, - testDeepOverrides: { slotName: 'content', slotClassName: classes.content }, - testComponentPropWith: 'span', - testVariantProps: { variant: 'foo' }, - skip: ['componentsProp'], - })); + describeConformance( + } action={} />, + () => ({ + classes, + inheritComponent: 'div', + render, + muiName: 'MuiCardHeader', + refInstanceof: window.HTMLDivElement, + testDeepOverrides: { slotName: 'content', slotClassName: classes.content }, + testComponentPropWith: 'span', + testVariantProps: { variant: 'foo' }, + slots: { + root: { + expectedClassName: classes.root, + }, + avatar: { + expectedClassName: classes.avatar, + }, + action: { + expectedClassName: classes.action, + }, + content: { + expectedClassName: classes.content, + }, + title: { + expectedClassName: classes.title, + }, + subheader: { + expectedClassName: classes.subheader, + }, + }, + skip: ['componentsProp'], + }), + ); describe('without an avatar', () => { it('should render the title as headline text', () => { diff --git a/packages/mui-material/src/Checkbox/Checkbox.js b/packages/mui-material/src/Checkbox/Checkbox.js index e5a19e4f1333e5..b3029bdd0fac43 100644 --- a/packages/mui-material/src/Checkbox/Checkbox.js +++ b/packages/mui-material/src/Checkbox/Checkbox.js @@ -15,7 +15,6 @@ import checkboxClasses, { getCheckboxUtilityClass } from './checkboxClasses'; import { styled } from '../zero-styled'; import memoTheme from '../utils/memoTheme'; import createSimplePaletteValueFilter from '../utils/createSimplePaletteValueFilter'; - import { useDefaultProps } from '../DefaultPropsProvider'; const useUtilityClasses = (ownerState) => { diff --git a/packages/mui-material/src/Dialog/Dialog.js b/packages/mui-material/src/Dialog/Dialog.js index 6df94689d10b31..7f592ae6bd5bce 100644 --- a/packages/mui-material/src/Dialog/Dialog.js +++ b/packages/mui-material/src/Dialog/Dialog.js @@ -13,7 +13,6 @@ import DialogContext from './DialogContext'; import Backdrop from '../Backdrop'; import { styled, useTheme } from '../zero-styled'; import memoTheme from '../utils/memoTheme'; - import { useDefaultProps } from '../DefaultPropsProvider'; const DialogBackdrop = styled(Backdrop, { diff --git a/packages/mui-material/src/Fab/Fab.js b/packages/mui-material/src/Fab/Fab.js index b4a0de38c3f8cd..e68ac27ea14b41 100644 --- a/packages/mui-material/src/Fab/Fab.js +++ b/packages/mui-material/src/Fab/Fab.js @@ -10,7 +10,6 @@ import rootShouldForwardProp from '../styles/rootShouldForwardProp'; import { styled } from '../zero-styled'; import memoTheme from '../utils/memoTheme'; import createSimplePaletteValueFilter from '../utils/createSimplePaletteValueFilter'; - import { useDefaultProps } from '../DefaultPropsProvider'; const useUtilityClasses = (ownerState) => { diff --git a/packages/mui-material/src/LinearProgress/LinearProgress.js b/packages/mui-material/src/LinearProgress/LinearProgress.js index 9046d1e69dbe38..0e327bd11ed5c3 100644 --- a/packages/mui-material/src/LinearProgress/LinearProgress.js +++ b/packages/mui-material/src/LinearProgress/LinearProgress.js @@ -94,6 +94,7 @@ const useUtilityClasses = (ownerState) => { dashed: ['dashed', `dashedColor${capitalize(color)}`], bar1: [ 'bar', + 'bar1', `barColor${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar1Indeterminate', variant === 'determinate' && 'bar1Determinate', @@ -101,6 +102,7 @@ const useUtilityClasses = (ownerState) => { ], bar2: [ 'bar', + 'bar2', variant !== 'buffer' && `barColor${capitalize(color)}`, variant === 'buffer' && `color${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar2Indeterminate', @@ -231,6 +233,7 @@ const LinearProgressBar1 = styled('span', { return [ styles.bar, + styles.bar1, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar1Indeterminate, @@ -307,6 +310,7 @@ const LinearProgressBar2 = styled('span', { return [ styles.bar, + styles.bar2, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar2Indeterminate, diff --git a/packages/mui-material/src/LinearProgress/LinearProgress.test.js b/packages/mui-material/src/LinearProgress/LinearProgress.test.js index 5a97ff6fc1b88e..647ac9549c971f 100644 --- a/packages/mui-material/src/LinearProgress/LinearProgress.test.js +++ b/packages/mui-material/src/LinearProgress/LinearProgress.test.js @@ -30,6 +30,8 @@ describe('', () => { expect(progressbar).to.have.class(classes.indeterminate); expect(progressbar.children[0]).to.have.class(classes.bar1Indeterminate); expect(progressbar.children[1]).to.have.class(classes.bar2Indeterminate); + expect(progressbar.children[0]).to.have.class(classes.bar1); + expect(progressbar.children[1]).to.have.class(classes.bar2); }); it('should render for the primary color by default', () => { diff --git a/packages/mui-material/src/LinearProgress/linearProgressClasses.ts b/packages/mui-material/src/LinearProgress/linearProgressClasses.ts index 37590edad59c67..48da9927f277ad 100644 --- a/packages/mui-material/src/LinearProgress/linearProgressClasses.ts +++ b/packages/mui-material/src/LinearProgress/linearProgressClasses.ts @@ -18,25 +18,47 @@ export interface LinearProgressClasses { query: string; /** Styles applied to the additional bar element if `variant="buffer"`. */ dashed: string; - /** Styles applied to the additional bar element if `variant="buffer"` and `color="primary"`. */ + /** Styles applied to the additional bar element if `variant="buffer"` and `color="primary"`. + * @deprecated Combine the [.MuiLinearProgress-dashed](/material-ui/api/linear-progress/#linear-progress-classes-dashed) and [.MuiLinearProgress-colorPrimary](/material-ui/api/linear-progress/#linear-progress-classes-colorPrimary) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ dashedColorPrimary: string; - /** Styles applied to the additional bar element if `variant="buffer"` and `color="secondary"`. */ + /** Styles applied to the additional bar element if `variant="buffer"` and `color="secondary"`. + * @deprecated Combine the [.MuiLinearProgress-dashed](/material-ui/api/linear-progress/#linear-progress-classes-dashed) and [.MuiLinearProgress-colorSecondary](/material-ui/api/linear-progress/#linear-progress-classes-colorSecondary) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ dashedColorSecondary: string; /** Styles applied to the layered bar1 and bar2 elements. */ bar: string; - /** Styles applied to the bar elements if `color="primary"`; bar2 if `variant` not "buffer". */ + /** Styles applied to the bar1 element. */ + bar1: string; + /** Styles applied to the bar2 element. */ + bar2: string; + /** Styles applied to the bar elements if `color="primary"`; bar2 if `variant` not "buffer". + * @deprecated Use the [.MuiLinearProgress-bar](/material-ui/api/linear-progress/#linear-progress-classes-bar) and [.MuiLinearProgress-colorPrimary](/material-ui/api/linear-progress/#linear-progress-classes-colorPrimary) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ barColorPrimary: string; - /** Styles applied to the bar elements if `color="secondary"`; bar2 if `variant` not "buffer". */ + /** Styles applied to the bar elements if `color="secondary"`; bar2 if `variant` not "buffer". + * @deprecated Use the [.MuiLinearProgress-bar](/material-ui/api/linear-progress/#linear-progress-classes-bar) and [.MuiLinearProgress-colorSecondary](/material-ui/api/linear-progress/#linear-progress-classes-colorSecondary) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ barColorSecondary: string; - /** Styles applied to the bar1 element if `variant="indeterminate or query"`. */ + /** Styles applied to the bar1 element if `variant="indeterminate or query"`. + * @deprecated Use the [.MuiLinearProgress-bar1](/material-ui/api/linear-progress/#linear-progress-classes-bar1) and [.MuiLinearProgress-indeterminate](/material-ui/api/linear-progress/#linear-progress-classes-indeterminate) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ bar1Indeterminate: string; - /** Styles applied to the bar1 element if `variant="determinate"`. */ + /** Styles applied to the bar1 element if `variant="determinate"`. + * @deprecated Use the [.MuiLinearProgress-bar1](/material-ui/api/linear-progress/#linear-progress-classes-bar1) and [.MuiLinearProgress-determinate](/material-ui/api/linear-progress/#linear-progress-classes-determinate) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ bar1Determinate: string; - /** Styles applied to the bar1 element if `variant="buffer"`. */ + /** Styles applied to the bar1 element if `variant="buffer"`. + * @deprecated Use the [.MuiLinearProgress-bar1](/material-ui/api/linear-progress/#linear-progress-classes-bar1) and [.MuiLinearProgress-buffer](/material-ui/api/linear-progress/#linear-progress-classes-buffer) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ bar1Buffer: string; - /** Styles applied to the bar2 element if `variant="indeterminate or query"`. */ + /** Styles applied to the bar2 element if `variant="indeterminate or query"`. + * @deprecated Use the [.MuiLinearProgress-bar2](/material-ui/api/linear-progress/#linear-progress-classes-bar2) and [.MuiLinearProgress-indeterminate](/material-ui/api/linear-progress/#linear-progress-classes-indeterminate) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ bar2Indeterminate: string; - /** Styles applied to the bar2 element if `variant="buffer"`. */ + /** Styles applied to the bar2 element if `variant="buffer"`. + * @deprecated Use the [.MuiLinearProgress-bar2](/material-ui/api/linear-progress/#linear-progress-classes-bar2) and [.MuiLinearProgress-buffer](/material-ui/api/linear-progress/#linear-progress-classes-buffer) classes instead. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/) + */ bar2Buffer: string; } @@ -58,6 +80,8 @@ const linearProgressClasses: LinearProgressClasses = generateUtilityClasses('Mui 'dashedColorPrimary', 'dashedColorSecondary', 'bar', + 'bar1', + 'bar2', 'barColorPrimary', 'barColorSecondary', 'bar1Indeterminate', diff --git a/packages/mui-material/src/Pagination/Pagination.js b/packages/mui-material/src/Pagination/Pagination.js index 0fb9529e81f4cb..909a8995d6937b 100644 --- a/packages/mui-material/src/Pagination/Pagination.js +++ b/packages/mui-material/src/Pagination/Pagination.js @@ -8,7 +8,6 @@ import { getPaginationUtilityClass } from './paginationClasses'; import usePagination from '../usePagination'; import PaginationItem from '../PaginationItem'; import { styled } from '../zero-styled'; - import { useDefaultProps } from '../DefaultPropsProvider'; const useUtilityClasses = (ownerState) => { diff --git a/packages/mui-material/src/PaginationItem/PaginationItem.js b/packages/mui-material/src/PaginationItem/PaginationItem.js index d85a37ae33b254..00bcbedd7bc162 100644 --- a/packages/mui-material/src/PaginationItem/PaginationItem.js +++ b/packages/mui-material/src/PaginationItem/PaginationItem.js @@ -16,7 +16,6 @@ import NavigateNextIcon from '../internal/svg-icons/NavigateNext'; import useSlot from '../utils/useSlot'; import { styled } from '../zero-styled'; import memoTheme from '../utils/memoTheme'; - import { useDefaultProps } from '../DefaultPropsProvider'; const overridesResolver = (props, styles) => { diff --git a/packages/mui-material/src/utils/mergeSlotProps.test.ts b/packages/mui-material/src/utils/mergeSlotProps.test.ts index b6e93114515ad3..baeaf8a77c633e 100644 --- a/packages/mui-material/src/utils/mergeSlotProps.test.ts +++ b/packages/mui-material/src/utils/mergeSlotProps.test.ts @@ -1,3 +1,4 @@ +import * as React from 'react'; import { expect } from 'chai'; import mergeSlotProps from './mergeSlotProps'; @@ -5,6 +6,7 @@ import mergeSlotProps from './mergeSlotProps'; type OwnerState = { className: string; 'aria-label'?: string; + style?: React.CSSProperties; }; describe('utils/index.js', () => { @@ -21,6 +23,27 @@ describe('utils/index.js', () => { }); }); + it('merge styles', () => { + expect( + mergeSlotProps<{ style: React.CSSProperties }>( + { style: { color: 'red' } }, + { style: { backgroundColor: 'blue' } }, + ), + ).to.deep.equal({ + style: { color: 'red', backgroundColor: 'blue' }, + }); + + // external styles should override + expect( + mergeSlotProps<{ style: React.CSSProperties }>( + { style: { backgroundColor: 'red' } }, + { style: { backgroundColor: 'blue' } }, + ), + ).to.deep.equal({ + style: { backgroundColor: 'red' }, + }); + }); + it('external slot props should override', () => { expect( mergeSlotProps( @@ -78,6 +101,35 @@ describe('utils/index.js', () => { }); }); + it('merge styles for callbacks', () => { + expect( + mergeSlotProps( + () => ({ + style: { color: 'red' }, + }), + () => ({ + style: { backgroundColor: 'blue' }, + }), + )(), + ).to.deep.equal({ + style: { color: 'red', backgroundColor: 'blue' }, + }); + + // external styles should override + expect( + mergeSlotProps( + () => ({ + style: { backgroundColor: 'red' }, + }), + () => ({ + style: { backgroundColor: 'blue' }, + }), + )(), + ).to.deep.equal({ + style: { backgroundColor: 'red' }, + }); + }); + it('external callback should be called with default slot props', () => { expect( mergeSlotProps<(ownerState: OwnerState) => OwnerState>( diff --git a/packages/mui-material/src/utils/mergeSlotProps.ts b/packages/mui-material/src/utils/mergeSlotProps.ts index f458a4c985d8a8..a9c9ff0b888158 100644 --- a/packages/mui-material/src/utils/mergeSlotProps.ts +++ b/packages/mui-material/src/utils/mergeSlotProps.ts @@ -28,6 +28,10 @@ export default function mergeSlotProps< ...defaultSlotPropsValue, ...externalSlotPropsValue, ...(!!className && { className }), + ...(defaultSlotPropsValue?.style && + externalSlotPropsValue?.style && { + style: { ...defaultSlotPropsValue.style, ...externalSlotPropsValue.style }, + }), }; }) as U; } @@ -39,5 +43,9 @@ export default function mergeSlotProps< ...defaultSlotProps, ...externalSlotProps, ...(!!className && { className }), + ...((defaultSlotProps as Record)?.style && + externalSlotProps?.style && { + style: { ...(defaultSlotProps as Record).style, ...externalSlotProps.style }, + }), } as U; } diff --git a/packages/mui-utils/package.json b/packages/mui-utils/package.json index 714e46de4eefbc..5a1b892892915c 100644 --- a/packages/mui-utils/package.json +++ b/packages/mui-utils/package.json @@ -50,7 +50,7 @@ "@mui/types": "workspace:^", "@types/chai": "^4.3.20", "@types/mocha": "^10.0.10", - "@types/node": "^20.17.10", + "@types/node": "^20.17.12", "@types/react": "^19.0.2", "@types/react-dom": "^19.0.2", "@types/react-is": "^19.0.0", diff --git a/packages/rsc-builder/package.json b/packages/rsc-builder/package.json index 5771501d07b715..728976baa4f5f5 100644 --- a/packages/rsc-builder/package.json +++ b/packages/rsc-builder/package.json @@ -9,6 +9,6 @@ }, "devDependencies": { "@types/mocha": "^10.0.10", - "@types/node": "^20.17.10" + "@types/node": "^20.17.12" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d84d5e79f6077..75a03bfce3ad5b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ overrides: '@definitelytyped/header-parser': ^0.2.16 '@definitelytyped/typescript-versions': ^0.1.6 '@definitelytyped/utils': ^0.1.8 - '@types/node': ^20.17.10 + '@types/node': ^20.17.12 cross-fetch: ^4.1.0 '@pigment-css/react': 0.0.29 '@pigment-css/unplugin': 0.0.29 @@ -30,8 +30,8 @@ importers: specifier: ^9.3.1 version: 9.3.1(encoding@0.1.13) '@netlify/functions': - specifier: ^2.8.2 - version: 2.8.2 + specifier: ^3.0.0 + version: 3.0.0 '@slack/bolt': specifier: ^4.2.0 version: 4.2.0 @@ -121,8 +121,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -137,7 +137,7 @@ importers: version: 7.18.0(eslint@8.57.1)(typescript@5.7.2) '@vitest/browser': specifier: ^2.1.8 - version: 2.1.8(@types/node@20.17.10)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))(vitest@2.1.8) + version: 2.1.8(@types/node@20.17.12)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))(vitest@2.1.8) '@vitest/coverage-v8': specifier: ^2.1.8 version: 2.1.8(@vitest/browser@2.1.8)(vitest@2.1.8) @@ -302,7 +302,7 @@ importers: version: 36.0.1(stylelint@16.12.0(typescript@5.7.2)) terser-webpack-plugin: specifier: ^5.3.11 - version: 5.3.11(webpack@5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))) + version: 5.3.11(webpack@5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))) tsx: specifier: ^4.19.2 version: 4.19.2 @@ -311,19 +311,19 @@ importers: version: 5.7.2 vitest: specifier: ^2.1.8 - version: 2.1.8(@types/node@20.17.10)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(terser@5.37.0) + version: 2.1.8(@types/node@20.17.12)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(terser@5.37.0) vitest-fail-on-console: specifier: ^0.7.1 - version: 0.7.1(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))(vitest@2.1.8) + version: 0.7.1(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))(vitest@2.1.8) webpack: specifier: ^5.97.1 - version: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + version: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) webpack-bundle-analyzer: specifier: ^4.10.2 version: 4.10.2 webpack-cli: - specifier: ^5.1.4 - version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) + specifier: ^6.0.1 + version: 6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) yargs: specifier: ^17.7.2 version: 17.7.2 @@ -359,7 +359,7 @@ importers: version: link:../../packages/mui-utils/build next: specifier: latest - version: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -369,10 +369,10 @@ importers: devDependencies: '@pigment-css/nextjs-plugin': specifier: 0.0.29 - version: 0.0.29(@types/react@19.0.2)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3) + version: 0.0.29(@types/react@19.0.2)(next@15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3) '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -439,7 +439,7 @@ importers: version: 7.26.0(@babel/core@7.26.0) '@pigment-css/vite-plugin': specifier: 0.0.29 - version: 0.0.29(@types/react@19.0.2)(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + version: 0.0.29(@types/react@19.0.2)(react@19.0.0)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -451,7 +451,7 @@ importers: version: 1.6.38 '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + version: 4.3.4(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) postcss: specifier: ^8.4.49 version: 8.4.49 @@ -460,13 +460,13 @@ importers: version: 1.0.1 vite: specifier: 5.4.11 - version: 5.4.11(@types/node@20.17.10)(terser@5.37.0) + version: 5.4.11(@types/node@20.17.12)(terser@5.37.0) vite-plugin-node-polyfills: specifier: 0.22.0 - version: 0.22.0(rollup@4.21.1)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + version: 0.22.0(rollup@4.21.1)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) vite-plugin-pages: specifier: ^0.32.4 - version: 0.32.4(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + version: 0.32.4(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) benchmark: dependencies: @@ -550,7 +550,7 @@ importers: version: 0.17.1(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(react@19.0.0) webpack: specifier: ^5.97.1 - version: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + version: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) docs: dependencies: @@ -661,7 +661,7 @@ importers: version: 9.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@toolpad/core': specifier: ^0.11.0 - version: 0.11.0(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.3.1(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@pigment-css/react@0.0.29(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.2)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + version: 0.11.0(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.3.1(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@pigment-css/react@0.0.29(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.2)(next@15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) @@ -745,7 +745,7 @@ importers: version: 5.3.3(@mui/material@packages+mui-material+build)(@types/react@19.0.2)(react@19.0.0) next: specifier: ^15.1.3 - version: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) notistack: specifier: 3.0.1 version: 3.0.1(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -865,8 +865,8 @@ importers: specifier: ^0.2.2 version: 0.2.2 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/prop-types': specifier: ^15.7.14 version: 15.7.14 @@ -1003,8 +1003,8 @@ importers: specifier: ^4.17.14 version: 4.17.14 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -1188,8 +1188,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/react-docgen': specifier: workspace:* version: link:../react-docgen-types @@ -1225,8 +1225,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/sinon': specifier: ^17.0.3 version: 17.0.3 @@ -1447,8 +1447,8 @@ importers: specifier: ^0.0.20 version: 0.0.20 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/prop-types': specifier: ^15.7.14 version: 15.7.14 @@ -1457,7 +1457,7 @@ importers: version: 19.0.2 next: specifier: ^15.1.3 - version: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -1631,7 +1631,7 @@ importers: version: 4.17.21 next: specifier: ^15.1.3 - version: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -1835,7 +1835,7 @@ importers: version: 19.0.2 next: specifier: ^15.1.3 - version: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -2169,8 +2169,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 '@types/react': specifier: ^19.0.2 version: 19.0.2 @@ -2222,8 +2222,8 @@ importers: specifier: ^10.0.10 version: 10.0.10 '@types/node': - specifier: ^20.17.10 - version: 20.17.10 + specifier: ^20.17.12 + version: 20.17.12 packages/waterfall: {} @@ -2325,7 +2325,7 @@ importers: version: 11.2.0 html-webpack-plugin: specifier: ^5.6.3 - version: 5.6.3(webpack@5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))) + version: 5.6.3(webpack@5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -2367,7 +2367,7 @@ importers: version: 1.6.28 webpack: specifier: ^5.97.1 - version: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + version: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) yargs: specifier: ^17.7.2 version: 17.7.2 @@ -3236,6 +3236,10 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} + '@docsearch/css@3.8.2': resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} @@ -3844,7 +3848,7 @@ packages: resolution: {integrity: sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw==} engines: {node: '>=18'} peerDependencies: - '@types/node': ^20.17.10 + '@types/node': ^20.17.12 '@inquirer/core@10.0.1': resolution: {integrity: sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==} @@ -3858,7 +3862,7 @@ packages: resolution: {integrity: sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==} engines: {node: '>=18'} peerDependencies: - '@types/node': ^20.17.10 + '@types/node': ^20.17.12 '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -4455,68 +4459,68 @@ packages: '@napi-rs/wasm-runtime@0.2.4': resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} - '@netlify/functions@2.8.2': - resolution: {integrity: sha512-DeoAQh8LuNPvBE4qsKlezjKj0PyXDryOFJfJKo3Z1qZLKzQ21sT314KQKPVjfvw6knqijj+IO+0kHXy/TJiqNA==} - engines: {node: '>=14.0.0'} + '@netlify/functions@3.0.0': + resolution: {integrity: sha512-XXf9mNw4+fkxUzukDpJtzc32bl1+YlXZwEhc5ZgMcTbJPLpgRLDs5WWSPJ4eY/Mv1ZFvtxmMwmfgoQYVt68Qog==} + engines: {node: '>=18.0.0'} '@netlify/node-cookies@0.1.0': resolution: {integrity: sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/serverless-functions-api@1.26.1': - resolution: {integrity: sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==} + '@netlify/serverless-functions-api@1.30.1': + resolution: {integrity: sha512-JkbaWFeydQdeDHz1mAy4rw+E3bl9YtbCgkntfTxq+IlNX/aIMv2/b1kZnQZcil4/sPoZGL831Dq6E374qRpU1A==} engines: {node: '>=18.0.0'} - '@next/env@15.1.3': - resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==} + '@next/env@15.1.4': + resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==} '@next/eslint-plugin-next@15.1.3': resolution: {integrity: sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==} - '@next/swc-darwin-arm64@15.1.3': - resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==} + '@next/swc-darwin-arm64@15.1.4': + resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.3': - resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==} + '@next/swc-darwin-x64@15.1.4': + resolution: {integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.3': - resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==} + '@next/swc-linux-arm64-gnu@15.1.4': + resolution: {integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.3': - resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==} + '@next/swc-linux-arm64-musl@15.1.4': + resolution: {integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.3': - resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==} + '@next/swc-linux-x64-gnu@15.1.4': + resolution: {integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.3': - resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==} + '@next/swc-linux-x64-musl@15.1.4': + resolution: {integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.3': - resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==} + '@next/swc-win32-arm64-msvc@15.1.4': + resolution: {integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.3': - resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==} + '@next/swc-win32-x64-msvc@15.1.4': + resolution: {integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -5534,8 +5538,8 @@ packages: '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@20.17.10': - resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} + '@types/node@20.17.12': + resolution: {integrity: sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw==} '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -5796,26 +5800,26 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - '@webpack-cli/configtest@2.1.1': - resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} - engines: {node: '>=14.15.0'} + '@webpack-cli/configtest@3.0.1': + resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x - '@webpack-cli/info@2.0.2': - resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} - engines: {node: '>=14.15.0'} + '@webpack-cli/info@3.0.1': + resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x - '@webpack-cli/serve@2.0.5': - resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} - engines: {node: '>=14.15.0'} + '@webpack-cli/serve@3.0.1': + resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} + engines: {node: '>=18.12.0'} peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x webpack-dev-server: '*' peerDependenciesMeta: webpack-dev-server: @@ -6753,9 +6757,9 @@ packages: command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -10100,8 +10104,8 @@ packages: nested-error-stacks@2.1.1: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - next@15.1.3: - resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==} + next@15.1.4: + resolution: {integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -12791,7 +12795,7 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': ^20.17.10 + '@types/node': ^20.17.12 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -12829,7 +12833,7 @@ packages: hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^20.17.10 + '@types/node': ^20.17.12 '@vitest/browser': 2.1.8 '@vitest/ui': 2.1.8 happy-dom: '*' @@ -12893,18 +12897,15 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true - webpack-cli@5.1.4: - resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} - engines: {node: '>=14.15.0'} + webpack-cli@6.0.1: + resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} + engines: {node: '>=18.12.0'} hasBin: true peerDependencies: - '@webpack-cli/generators': '*' - webpack: 5.x.x + webpack: ^5.82.0 webpack-bundle-analyzer: '*' webpack-dev-server: '*' peerDependenciesMeta: - '@webpack-cli/generators': - optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: @@ -12913,9 +12914,9 @@ packages: webpack-merge@4.2.2: resolution: {integrity: sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==} - webpack-merge@5.9.0: - resolution: {integrity: sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==} - engines: {node: '>=10.0.0'} + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} @@ -14347,6 +14348,8 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} + '@discoveryjs/json-ext@0.6.3': {} + '@docsearch/css@3.8.2': {} '@docsearch/react@3.8.2(@algolia/client-search@5.18.0)(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(search-insights@2.13.0)': @@ -14668,7 +14671,7 @@ snapshots: '@fast-csv/format@4.3.5': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 lodash.escaperegexp: 4.1.2 lodash.isboolean: 3.0.3 lodash.isequal: 4.5.0 @@ -14677,7 +14680,7 @@ snapshots: '@fast-csv/parse@4.3.6': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 lodash.escaperegexp: 4.1.2 lodash.groupby: 4.6.0 lodash.isfunction: 3.0.9 @@ -14836,16 +14839,16 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@inquirer/confirm@5.0.1(@types/node@20.17.10)': + '@inquirer/confirm@5.0.1(@types/node@20.17.12)': dependencies: - '@inquirer/core': 10.0.1(@types/node@20.17.10) - '@inquirer/type': 3.0.0(@types/node@20.17.10) - '@types/node': 20.17.10 + '@inquirer/core': 10.0.1(@types/node@20.17.12) + '@inquirer/type': 3.0.0(@types/node@20.17.12) + '@types/node': 20.17.12 - '@inquirer/core@10.0.1(@types/node@20.17.10)': + '@inquirer/core@10.0.1(@types/node@20.17.12)': dependencies: '@inquirer/figures': 1.0.7 - '@inquirer/type': 3.0.0(@types/node@20.17.10) + '@inquirer/type': 3.0.0(@types/node@20.17.12) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -14858,9 +14861,9 @@ snapshots: '@inquirer/figures@1.0.7': {} - '@inquirer/type@3.0.0(@types/node@20.17.10)': + '@inquirer/type@3.0.0(@types/node@20.17.12)': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@isaacs/cliui@8.0.2': dependencies: @@ -14893,14 +14896,14 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.10 + '@types/node': 20.17.12 jest-mock: 29.7.0 '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.17.10 + '@types/node': 20.17.12 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -14913,7 +14916,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/yargs': 15.0.19 chalk: 4.1.2 @@ -14922,7 +14925,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -15566,45 +15569,45 @@ snapshots: '@emnapi/runtime': 1.2.0 '@tybys/wasm-util': 0.9.0 - '@netlify/functions@2.8.2': + '@netlify/functions@3.0.0': dependencies: - '@netlify/serverless-functions-api': 1.26.1 + '@netlify/serverless-functions-api': 1.30.1 '@netlify/node-cookies@0.1.0': {} - '@netlify/serverless-functions-api@1.26.1': + '@netlify/serverless-functions-api@1.30.1': dependencies: '@netlify/node-cookies': 0.1.0 urlpattern-polyfill: 8.0.2 - '@next/env@15.1.3': {} + '@next/env@15.1.4': {} '@next/eslint-plugin-next@15.1.3': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.1.3': + '@next/swc-darwin-arm64@15.1.4': optional: true - '@next/swc-darwin-x64@15.1.3': + '@next/swc-darwin-x64@15.1.4': optional: true - '@next/swc-linux-arm64-gnu@15.1.3': + '@next/swc-linux-arm64-gnu@15.1.4': optional: true - '@next/swc-linux-arm64-musl@15.1.3': + '@next/swc-linux-arm64-musl@15.1.4': optional: true - '@next/swc-linux-x64-gnu@15.1.3': + '@next/swc-linux-x64-gnu@15.1.4': optional: true - '@next/swc-linux-x64-musl@15.1.3': + '@next/swc-linux-x64-musl@15.1.4': optional: true - '@next/swc-win32-arm64-msvc@15.1.3': + '@next/swc-win32-arm64-msvc@15.1.4': optional: true - '@next/swc-win32-x64-msvc@15.1.3': + '@next/swc-win32-x64-msvc@15.1.4': optional: true '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': @@ -16039,10 +16042,10 @@ snapshots: '@opentelemetry/api@1.8.0': optional: true - '@pigment-css/nextjs-plugin@0.0.29(@types/react@19.0.2)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3)': + '@pigment-css/nextjs-plugin@0.0.29(@types/react@19.0.2)(next@15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack-sources@3.2.3)': dependencies: '@pigment-css/unplugin': 0.0.29(@types/react@19.0.2)(react@19.0.0)(webpack-sources@3.2.3) - next: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@types/react' - react @@ -16092,7 +16095,7 @@ snapshots: - supports-color - webpack-sources - '@pigment-css/vite-plugin@0.0.29(@types/react@19.0.2)(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))': + '@pigment-css/vite-plugin@0.0.29(@types/react@19.0.2)(react@19.0.0)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))': dependencies: '@babel/core': 7.26.0 '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) @@ -16100,7 +16103,7 @@ snapshots: '@wyw-in-js/shared': 0.5.5 '@wyw-in-js/transform': 0.5.5 babel-plugin-define-var: 0.1.0 - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) transitivePeerDependencies: - '@types/react' - react @@ -16630,14 +16633,14 @@ snapshots: '@slack/logger@4.0.0': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@slack/oauth@3.0.2': dependencies: '@slack/logger': 4.0.0 '@slack/web-api': 7.8.0 '@types/jsonwebtoken': 9.0.7 - '@types/node': 20.17.10 + '@types/node': 20.17.12 jsonwebtoken: 9.0.0 lodash.isstring: 4.0.1 transitivePeerDependencies: @@ -16647,7 +16650,7 @@ snapshots: dependencies: '@slack/logger': 4.0.0 '@slack/web-api': 7.8.0 - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/ws': 8.5.13 eventemitter3: 5.0.1 ws: 8.18.0 @@ -16662,7 +16665,7 @@ snapshots: dependencies: '@slack/logger': 4.0.0 '@slack/types': 2.13.0 - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/retry': 0.12.0 axios: 1.7.9(debug@4.3.7) eventemitter3: 5.0.1 @@ -16812,7 +16815,7 @@ snapshots: '@theme-ui/css': 0.17.1(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0)) react: 19.0.0 - '@toolpad/core@0.11.0(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.3.1(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@pigment-css/react@0.0.29(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.2)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))': + '@toolpad/core@0.11.0(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/icons-material@packages+mui-icons-material+build)(@mui/material-pigment-css@6.3.1(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@pigment-css/react@0.0.29(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@packages+mui-material+build)(@types/react@19.0.2)(next@15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react-router-dom@6.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))': dependencies: '@babel/runtime': 7.26.0 '@mui/icons-material': link:packages/mui-icons-material/build @@ -16820,14 +16823,14 @@ snapshots: '@mui/material': link:packages/mui-material/build '@mui/utils': 6.2.0(@types/react@19.0.2)(react@19.0.0) '@toolpad/utils': 0.11.0(react@19.0.0) - '@vitejs/plugin-react': 4.3.4(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + '@vitejs/plugin-react': 4.3.4(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) client-only: 0.0.1 invariant: 2.2.4 path-to-regexp: 6.3.0 prop-types: 15.8.1 react: 19.0.0 optionalDependencies: - next: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-router-dom: 6.28.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0) transitivePeerDependencies: - '@emotion/react' @@ -16954,7 +16957,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/gtag.js@0.0.20': {} @@ -16988,11 +16991,11 @@ snapshots: '@types/jsonfile@6.1.1': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/jsonwebtoken@9.0.7': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/katex@0.16.7': {} @@ -17016,9 +17019,9 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 - '@types/node@20.17.10': + '@types/node@20.17.12': dependencies: undici-types: 6.19.8 @@ -17096,7 +17099,7 @@ snapshots: '@types/ws@8.5.13': dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 '@types/yargs-parser@21.0.3': {} @@ -17191,28 +17194,28 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))': + '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) transitivePeerDependencies: - supports-color - '@vitest/browser@2.1.8(@types/node@20.17.10)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))(vitest@2.1.8)': + '@vitest/browser@2.1.8(@types/node@20.17.12)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))(vitest@2.1.8)': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/mocker': 2.1.8(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + '@vitest/mocker': 2.1.8(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) '@vitest/utils': 2.1.8 magic-string: 0.30.12 - msw: 2.6.5(@types/node@20.17.10)(typescript@5.7.2) + msw: 2.6.5(@types/node@20.17.12)(typescript@5.7.2) sirv: 3.0.0 tinyrainbow: 1.2.0 - vitest: 2.1.8(@types/node@20.17.10)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(terser@5.37.0) + vitest: 2.1.8(@types/node@20.17.12)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(terser@5.37.0) ws: 8.18.0 optionalDependencies: playwright: 1.48.2 @@ -17237,9 +17240,9 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.8(@types/node@20.17.10)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(terser@5.37.0) + vitest: 2.1.8(@types/node@20.17.12)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(terser@5.37.0) optionalDependencies: - '@vitest/browser': 2.1.8(@types/node@20.17.10)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))(vitest@2.1.8) + '@vitest/browser': 2.1.8(@types/node@20.17.12)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))(vitest@2.1.8) transitivePeerDependencies: - supports-color @@ -17250,14 +17253,14 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))': + '@vitest/mocker@2.1.8(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - msw: 2.6.5(@types/node@20.17.10)(typescript@5.7.2) - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) + msw: 2.6.5(@types/node@20.17.12)(typescript@5.7.2) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) '@vitest/pretty-format@2.1.8': dependencies: @@ -17360,20 +17363,20 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1)': + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1)': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack-cli: 6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1)': + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1)': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack-cli: 6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1)': + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1)': dependencies: - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack-cli: 6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) '@wyw-in-js/processor-utils@0.5.5': dependencies: @@ -17825,7 +17828,7 @@ snapshots: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) babel-merge@3.0.0(@babel/core@7.26.0): dependencies: @@ -18324,7 +18327,7 @@ snapshots: chrome-launcher@0.15.2: dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -18335,7 +18338,7 @@ snapshots: chromium-edge-launcher@0.2.0: dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -18494,7 +18497,7 @@ snapshots: command-exists@1.2.9: {} - commander@10.0.1: {} + commander@12.1.0: {} commander@2.20.3: {} @@ -18541,7 +18544,7 @@ snapshots: dependencies: schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) compression@1.7.4: dependencies: @@ -19305,7 +19308,7 @@ snapshots: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.12 - '@types/node': 20.17.10 + '@types/node': 20.17.12 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -19589,7 +19592,7 @@ snapshots: lodash: 4.17.21 resolve: 2.0.0-next.5 semver: 5.7.2 - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) transitivePeerDependencies: - supports-color @@ -20693,7 +20696,7 @@ snapshots: readable-stream: 1.0.34 through2: 0.4.2 - html-webpack-plugin@5.6.3(webpack@5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))): + html-webpack-plugin@5.6.3(webpack@5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -20701,7 +20704,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) htmlparser2@6.1.0: dependencies: @@ -21242,7 +21245,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.10 + '@types/node': 20.17.12 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -21263,13 +21266,13 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.10 + '@types/node': 20.17.12 jest-util: 29.7.0 jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.10 + '@types/node': 20.17.12 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -21286,13 +21289,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -21654,7 +21657,7 @@ snapshots: dependencies: glob: 7.2.3 minimatch: 3.1.2 - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) webpack-merge: 4.2.2 karma@6.4.4: @@ -22745,12 +22748,12 @@ snapshots: ms@2.1.3: {} - msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2): + msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.0.1(@types/node@20.17.10) + '@inquirer/confirm': 5.0.1(@types/node@20.17.12) '@mswjs/interceptors': 0.37.1 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -22809,9 +22812,9 @@ snapshots: nested-error-stacks@2.1.1: {} - next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.1.4(@babel/core@7.26.0)(@opentelemetry/api@1.8.0)(@playwright/test@1.48.2)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@next/env': 15.1.3 + '@next/env': 15.1.4 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -22821,14 +22824,14 @@ snapshots: react-dom: 19.0.0(react@19.0.0) styled-jsx: 5.1.6(@babel/core@7.26.0)(babel-plugin-macros@3.1.0)(react@19.0.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.3 - '@next/swc-darwin-x64': 15.1.3 - '@next/swc-linux-arm64-gnu': 15.1.3 - '@next/swc-linux-arm64-musl': 15.1.3 - '@next/swc-linux-x64-gnu': 15.1.3 - '@next/swc-linux-x64-musl': 15.1.3 - '@next/swc-win32-arm64-msvc': 15.1.3 - '@next/swc-win32-x64-msvc': 15.1.3 + '@next/swc-darwin-arm64': 15.1.4 + '@next/swc-darwin-x64': 15.1.4 + '@next/swc-linux-arm64-gnu': 15.1.4 + '@next/swc-linux-arm64-musl': 15.1.4 + '@next/swc-linux-x64-gnu': 15.1.4 + '@next/swc-linux-x64-musl': 15.1.4 + '@next/swc-win32-arm64-msvc': 15.1.4 + '@next/swc-win32-x64-msvc': 15.1.4 '@opentelemetry/api': 1.8.0 '@playwright/test': 1.48.2 sharp: 0.33.5 @@ -25444,14 +25447,14 @@ snapshots: dependencies: rimraf: 2.6.3 - terser-webpack-plugin@5.3.11(webpack@5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))): + terser-webpack-plugin@5.3.11(webpack@5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) terser@5.37.0: dependencies: @@ -25926,13 +25929,13 @@ snapshots: '@types/unist': 3.0.2 vfile-message: 4.0.2 - vite-node@2.1.8(@types/node@20.17.10)(terser@5.37.0): + vite-node@2.1.8(@types/node@20.17.12)(terser@5.37.0): dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@8.1.1) es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) transitivePeerDependencies: - '@types/node' - less @@ -25944,15 +25947,15 @@ snapshots: - supports-color - terser - vite-plugin-node-polyfills@0.22.0(rollup@4.21.1)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)): + vite-plugin-node-polyfills@0.22.0(rollup@4.21.1)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.21.1) node-stdlib-browser: 1.2.0 - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) transitivePeerDependencies: - rollup - vite-plugin-pages@0.32.4(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)): + vite-plugin-pages@0.32.4(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)): dependencies: '@types/debug': 4.1.12 debug: 4.3.7(supports-color@8.1.1) @@ -25962,31 +25965,31 @@ snapshots: json5: 2.2.3 local-pkg: 0.5.1 picocolors: 1.1.1 - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) yaml: 2.6.1 transitivePeerDependencies: - supports-color - vite@5.4.11(@types/node@20.17.10)(terser@5.37.0): + vite@5.4.11(@types/node@20.17.12)(terser@5.37.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.21.1 optionalDependencies: - '@types/node': 20.17.10 + '@types/node': 20.17.12 fsevents: 2.3.3 terser: 5.37.0 - vitest-fail-on-console@0.7.1(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))(vitest@2.1.8): + vitest-fail-on-console@0.7.1(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))(vitest@2.1.8): dependencies: chalk: 5.3.0 - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) - vitest: 2.1.8(@types/node@20.17.10)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) + vitest: 2.1.8(@types/node@20.17.12)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(terser@5.37.0) - vitest@2.1.8(@types/node@20.17.10)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(terser@5.37.0): + vitest@2.1.8(@types/node@20.17.12)(@vitest/browser@2.1.8)(happy-dom@15.11.6)(jsdom@25.0.1)(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(terser@5.37.0): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(msw@2.6.5(@types/node@20.17.10)(typescript@5.7.2))(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) + '@vitest/mocker': 2.1.8(msw@2.6.5(@types/node@20.17.12)(typescript@5.7.2))(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 @@ -26002,12 +26005,12 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@20.17.10)(terser@5.37.0) - vite-node: 2.1.8(@types/node@20.17.10)(terser@5.37.0) + vite: 5.4.11(@types/node@20.17.12)(terser@5.37.0) + vite-node: 2.1.8(@types/node@20.17.12)(terser@5.37.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 20.17.10 - '@vitest/browser': 2.1.8(@types/node@20.17.10)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))(vitest@2.1.8) + '@types/node': 20.17.12 + '@vitest/browser': 2.1.8(@types/node@20.17.12)(playwright@1.48.2)(typescript@5.7.2)(vite@5.4.11(@types/node@20.17.12)(terser@5.37.0))(vitest@2.1.8) happy-dom: 15.11.6 jsdom: 25.0.1 transitivePeerDependencies: @@ -26074,22 +26077,22 @@ snapshots: - bufferutil - utf-8-validate - webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1): + webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1): dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1) + '@discoveryjs/json-ext': 0.6.3 + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))(webpack@5.97.1) colorette: 2.0.20 - commander: 10.0.1 + commander: 12.1.0 cross-spawn: 7.0.3 envinfo: 7.14.0 fastest-levenshtein: 1.0.16 import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) - webpack-merge: 5.9.0 + webpack: 5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)) + webpack-merge: 6.0.1 optionalDependencies: webpack-bundle-analyzer: 4.10.2 @@ -26097,16 +26100,17 @@ snapshots: dependencies: lodash: 4.17.21 - webpack-merge@5.9.0: + webpack-merge@6.0.1: dependencies: clone-deep: 4.0.1 + flat: 5.0.2 wildcard: 2.0.1 webpack-sources@3.2.3: {} webpack-virtual-modules@0.6.2: {} - webpack@5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)): + webpack@5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -26128,11 +26132,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(webpack@5.97.1(webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))) + terser-webpack-plugin: 5.3.11(webpack@5.97.1(webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1))) watchpack: 2.4.1 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) + webpack-cli: 6.0.1(webpack-bundle-analyzer@4.10.2)(webpack@5.97.1) transitivePeerDependencies: - '@swc/core' - esbuild diff --git a/test/bundling/fixtures/next-webpack4/package.json b/test/bundling/fixtures/next-webpack4/package.json index 25d9767b408558..d4f94b7e064b4e 100644 --- a/test/bundling/fixtures/next-webpack4/package.json +++ b/test/bundling/fixtures/next-webpack4/package.json @@ -17,7 +17,7 @@ "@mui/styles": "workspace:*", "@mui/system": "workspace:*", "@mui/utils": "workspace:*", - "next": "14.2.15", + "next": "14.2.21", "react": "^17.0.2", "react-dom": "^17.0.2", "react-is": "^17.0.2" diff --git a/test/bundling/fixtures/next-webpack5/package.json b/test/bundling/fixtures/next-webpack5/package.json index 5c70b1c6954ccb..93c23a686552f7 100644 --- a/test/bundling/fixtures/next-webpack5/package.json +++ b/test/bundling/fixtures/next-webpack5/package.json @@ -16,7 +16,7 @@ "@mui/styles": "workspace:*", "@mui/system": "workspace:*", "@mui/utils": "workspace:*", - "next": "14.2.15", + "next": "14.2.21", "react": "18.2.0", "react-dom": "18.2.0", "react-is": "18.2.0" diff --git a/test/e2e/TestViewer.js b/test/e2e/TestViewer.js index 09c21fd4d7f755..7b9db57d1b49fe 100644 --- a/test/e2e/TestViewer.js +++ b/test/e2e/TestViewer.js @@ -13,11 +13,9 @@ function TestViewer(props) { }, []); return ( - }> -
- {children} -
-
+
+ {children} +
); } diff --git a/test/regressions/TestViewer.js b/test/regressions/TestViewer.js index f261809e3c69b0..5d945bac91f2c8 100644 --- a/test/regressions/TestViewer.js +++ b/test/regressions/TestViewer.js @@ -1,6 +1,5 @@ import * as React from 'react'; import PropTypes from 'prop-types'; -import { useFakeTimers } from 'sinon'; import Box from '@mui/material/Box'; import GlobalStyles from '@mui/material/GlobalStyles'; import JoyBox from '@mui/joy/Box'; @@ -29,13 +28,6 @@ function TestViewer(props) { document.fonts.addEventListener('loading', handleFontsEvent); document.fonts.addEventListener('loadingdone', handleFontsEvent); - // Use a "real timestamp" so that we see a useful date instead of "00:00" - // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- useFakeTimers is not a React hook - // eslint-disable-next-line react-hooks/rules-of-hooks -- not a React hook - const clock = useFakeTimers({ - now: new Date('Mon Aug 18 14:11:54 2014 -0500'), - toFake: ['Date'], - }); // In case the child triggered font fetching we're not ready yet. // The fonts event handler will mark the test as ready on `loadingdone` if (document.fonts.status === 'loaded') { @@ -45,7 +37,6 @@ function TestViewer(props) { return () => { document.fonts.removeEventListener('loading', handleFontsEvent); document.fonts.removeEventListener('loadingdone', handleFontsEvent); - clock.restore(); }; }, []); @@ -76,29 +67,27 @@ function TestViewer(props) { }, }} /> - }> - {window.location.pathname.startsWith('/docs-joy') ? ( - - - {children} - - - ) : ( - + {children} - - )} - + + + ) : ( + + {children} + + )} ); }