@mui/codemod 9.0.0 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2545,6 +2545,13 @@ Compared to the v6 codemod, the v9 version also handles:
2545
2545
  +<Link href="#" sx={{ color: "text.secondary" }} />
2546
2546
  ```
2547
2547
 
2548
+ You can also pass `--jsx` to specify JSX element names directly, bypassing import detection.
2549
+ This is useful for projects using auto-import plugins (for example `unplugin-auto-import`) where Material UI components are available without explicit import statements:
2550
+
2551
+ ```bash
2552
+ npx @mui/codemod@latest v9.0.0/system-props <path> -- --jsx=Box,Typography,Stack,Link,Grid,DialogContentText
2553
+ ```
2554
+
2548
2555
  ### v7.0.0
2549
2556
 
2550
2557
  #### `theme-color-functions`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/codemod",
3
- "version": "9.0.0",
3
+ "version": "9.0.1",
4
4
  "author": "MUI Team",
5
5
  "description": "Codemod scripts for Material UI.",
6
6
  "license": "MIT",
@@ -28,7 +28,7 @@
28
28
  "@mui/material-v5": "npm:@mui/material@5.18.0",
29
29
  "jscodeshift": "^17.1.2",
30
30
  "jscodeshift-add-imports": "^1.0.11",
31
- "postcss": "^8.5.8",
31
+ "postcss": "^8.5.13",
32
32
  "postcss-cli": "^11.0.1",
33
33
  "yargs": "^17.7.2"
34
34
  },
@@ -33,7 +33,7 @@ const useStyles = (0, _makeStyles.default)(theme => {
33
33
  flexDirection: 'column',
34
34
  position: 'relative',
35
35
  alignItems: 'center',
36
- // Fix IE11 issue
36
+ // Fix IE 11 issue
37
37
  marginRight: 0,
38
38
  marginLeft: 0,
39
39
  padding: theme.spacing(0, 2)
@@ -43,7 +43,7 @@ const Root = (0, _styles.styled)('div')(({
43
43
  flexDirection: 'column',
44
44
  position: 'relative',
45
45
  alignItems: 'center',
46
- // Fix IE11 issue
46
+ // Fix IE 11 issue
47
47
  marginRight: 0,
48
48
  marginLeft: 0,
49
49
  padding: theme.spacing(0, 2)
@@ -31,7 +31,7 @@ const useStyles = (0, _makeStyles.default)(theme => ({
31
31
  flexDirection: 'column',
32
32
  position: 'relative',
33
33
  alignItems: 'center',
34
- // Fix IE11 issue
34
+ // Fix IE 11 issue
35
35
  marginRight: 0,
36
36
  marginLeft: 0,
37
37
  padding: `0 ${theme.spacing(2)}`
@@ -41,7 +41,7 @@ const Root = (0, _styles.styled)('div')(({
41
41
  flexDirection: 'column',
42
42
  position: 'relative',
43
43
  alignItems: 'center',
44
- // Fix IE11 issue
44
+ // Fix IE 11 issue
45
45
  marginRight: 0,
46
46
  marginLeft: 0,
47
47
  padding: `0 ${theme.spacing(2)}`
@@ -7,7 +7,7 @@ const Component = styled('div')(({
7
7
  const palette = (theme.vars || theme).palette?.[ownerState.color];
8
8
  return {
9
9
  overflow: 'visible',
10
- // Explicitly set the default value to solve a bug on IE11.
10
+ // Explicitly set the default value to solve a bug on IE 11.
11
11
  color: (theme.vars || theme).palette.action.active,
12
12
  transition: theme.transitions.create('background-color', {
13
13
  duration: theme.transitions.duration.shortest
@@ -5,7 +5,7 @@ const Component = styled('div')(({
5
5
  }) => {
6
6
  const palette = (theme.vars || theme).palette?.[ownerState.color];
7
7
  return {
8
- // Explicitly set the default value to solve a bug on IE11.
8
+ // Explicitly set the default value to solve a bug on IE 11.
9
9
  overflow: 'visible',
10
10
  color: (theme.vars || theme).palette.action.active,
11
11
  transition: theme.transitions.create('background-color', {
@@ -156,7 +156,24 @@ function removeSystemProps(file, api, options) {
156
156
  }
157
157
  };
158
158
  const elementReplacement = {};
159
- root.find(j.ImportDeclaration, decl => decl.source.value.includes('@mui')).forEach(decl => {
159
+ if (options.jsx) {
160
+ options.jsx.split(',').forEach(name => {
161
+ const trimmed = name.trim();
162
+ if (!trimmed) {
163
+ return;
164
+ }
165
+ deprecatedElements.push(trimmed);
166
+ if (customReplacement[trimmed]) {
167
+ elementReplacement[trimmed] = customReplacement[trimmed];
168
+ }
169
+ });
170
+ }
171
+ const packageName = options.packageName;
172
+ const importSources = ['@mui'];
173
+ if (packageName) {
174
+ importSources.push(packageName);
175
+ }
176
+ root.find(j.ImportDeclaration, decl => typeof decl.source.value === 'string' && importSources.some(source => decl.source.value === source || decl.source.value.startsWith(`${source}/`))).forEach(decl => {
160
177
  decl.node.specifiers.forEach(spec => {
161
178
  if (spec.type === 'ImportSpecifier') {
162
179
  const name = spec.imported.name;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _jsxRuntime = require("react/jsx-runtime");
4
+ // --jsx accepts arbitrary component names (e.g. DialogTitle, Skeleton, SvgIcon)
5
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(DialogTitle, {
6
+ display: "flex",
7
+ alignItems: "center",
8
+ children: "Title"
9
+ });
10
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Skeleton, {
11
+ height: 60,
12
+ width: 100,
13
+ mb: 2
14
+ });
15
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(SvgIcon, {
16
+ width: "1rem",
17
+ height: "1rem"
18
+ });
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ var _jsxRuntime = require("react/jsx-runtime");
4
+ // --jsx accepts arbitrary component names (e.g. DialogTitle, Skeleton, SvgIcon)
5
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(DialogTitle, {
6
+ sx: {
7
+ display: "flex",
8
+ alignItems: "center"
9
+ },
10
+ children: "Title"
11
+ });
12
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Skeleton, {
13
+ sx: {
14
+ height: 60,
15
+ width: 100,
16
+ mb: 2
17
+ }
18
+ });
19
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(SvgIcon, {
20
+ sx: {
21
+ width: "1rem",
22
+ height: "1rem"
23
+ }
24
+ });
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ var _jsxRuntime = require("react/jsx-runtime");
4
+ // No import statements — components are auto-imported
5
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Box, {
6
+ display: "flex",
7
+ gap: 2,
8
+ p: 3,
9
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Typography, {
10
+ fontSize: 14,
11
+ fontWeight: 600,
12
+ children: "Hello"
13
+ })
14
+ });
15
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Stack, {
16
+ direction: "row",
17
+ spacing: 2,
18
+ mt: 1
19
+ });
20
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Link, {
21
+ color: "inherit",
22
+ href: "https://mui.com/",
23
+ mb: 2,
24
+ children: "MUI"
25
+ });
26
+ const sx = {
27
+ display: 'flex'
28
+ };
29
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Box, {
30
+ m: 2,
31
+ sx: sx
32
+ });
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _jsxRuntime = require("react/jsx-runtime");
4
+ // No import statements — components are auto-imported
5
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Box, {
6
+ sx: {
7
+ display: "flex",
8
+ gap: 2,
9
+ p: 3
10
+ },
11
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Typography, {
12
+ sx: {
13
+ fontSize: 14,
14
+ fontWeight: 600
15
+ },
16
+ children: "Hello"
17
+ })
18
+ });
19
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Stack, {
20
+ direction: "row",
21
+ spacing: 2,
22
+ sx: {
23
+ mt: 1
24
+ }
25
+ });
26
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Link, {
27
+ color: "inherit",
28
+ href: "https://mui.com/",
29
+ sx: {
30
+ mb: 2
31
+ },
32
+ children: "MUI"
33
+ });
34
+ const sx = {
35
+ display: 'flex'
36
+ };
37
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(Box, {
38
+ sx: [{
39
+ m: 2
40
+ }, ...(Array.isArray(sx) ? sx : [sx])]
41
+ });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _uiIcons = require("@acme/ui-icons");
5
+ var _Typography = _interopRequireDefault(require("@acme/ui-icons/Typography"));
6
+ var _jsxRuntime = require("react/jsx-runtime");
7
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_uiIcons.Box, {
8
+ mt: 2,
9
+ p: 1
10
+ });
11
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
12
+ color: "text.secondary",
13
+ fontSize: "xl4",
14
+ children: "Hello"
15
+ });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _uiIcons = require("@acme/ui-icons");
5
+ var _Typography = _interopRequireDefault(require("@acme/ui-icons/Typography"));
6
+ var _jsxRuntime = require("react/jsx-runtime");
7
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_uiIcons.Box, {
8
+ mt: 2,
9
+ p: 1
10
+ });
11
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
12
+ color: "text.secondary",
13
+ fontSize: "xl4",
14
+ children: "Hello"
15
+ });
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _ui = require("@acme/ui");
5
+ var _components = require("@acme/ui/components");
6
+ var _Typography = _interopRequireDefault(require("@acme/ui/Typography"));
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_ui.Box, {
9
+ mt: 2,
10
+ p: 1
11
+ });
12
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Stack, {
13
+ flex: "1",
14
+ mb: 3
15
+ });
16
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
17
+ color: "text.secondary",
18
+ fontSize: "xl4",
19
+ children: "Hello"
20
+ });
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _ui = require("@acme/ui");
5
+ var _components = require("@acme/ui/components");
6
+ var _Typography = _interopRequireDefault(require("@acme/ui/Typography"));
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_ui.Box, {
9
+ sx: {
10
+ mt: 2,
11
+ p: 1
12
+ }
13
+ });
14
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Stack, {
15
+ sx: {
16
+ flex: "1",
17
+ mb: 3
18
+ }
19
+ });
20
+ /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
21
+ sx: {
22
+ color: "text.secondary",
23
+ fontSize: "xl4"
24
+ },
25
+ children: "Hello"
26
+ });