diff --git a/packages/app/.eslintrc.js b/packages/app/.eslintrc.js
index e2a53a6ad2..e487f765b2 100644
--- a/packages/app/.eslintrc.js
+++ b/packages/app/.eslintrc.js
@@ -1 +1,5 @@
-module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
+module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, {
+ rules: {
+ '@backstage/no-top-level-material-ui-4-imports': 'error',
+ },
+});
diff --git a/packages/app/src/components/Root/LogoIcon.jsx b/packages/app/src/components/Root/LogoIcon.jsx
index 5ec778cca2..966b491674 100644
--- a/packages/app/src/components/Root/LogoIcon.jsx
+++ b/packages/app/src/components/Root/LogoIcon.jsx
@@ -17,7 +17,7 @@
// NOTE: This file is intentionally .jsx, so that there is one file in this repo where we make sure .jsx files work.
import React from 'react';
-import { makeStyles } from '@material-ui/core';
+import { makeStyles } from '@material-ui/core/styles';
const useStyles = makeStyles({
svg: {
diff --git a/packages/app/src/components/advancedSettings/AdvancedSettings.tsx b/packages/app/src/components/advancedSettings/AdvancedSettings.tsx
index 574f7ec754..3383198a1f 100644
--- a/packages/app/src/components/advancedSettings/AdvancedSettings.tsx
+++ b/packages/app/src/components/advancedSettings/AdvancedSettings.tsx
@@ -16,14 +16,12 @@
import React from 'react';
import { InfoCard } from '@backstage/core-components';
-import {
- List,
- Grid,
- ListItem,
- ListItemText,
- ListItemSecondaryAction,
- Switch,
-} from '@material-ui/core';
+import List from '@material-ui/core/List';
+import Grid from '@material-ui/core/Grid';
+import ListItem from '@material-ui/core/ListItem';
+import ListItemText from '@material-ui/core/ListItemText';
+import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';
+import Switch from '@material-ui/core/Switch';
import useLocalStorage from 'react-use/esm/useLocalStorage';
export function AdvancedSettings() {
diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx
index 586c793a4f..fe5a7e0ace 100644
--- a/packages/app/src/components/catalog/EntityPage.tsx
+++ b/packages/app/src/components/catalog/EntityPage.tsx
@@ -70,7 +70,8 @@ import {
EntityOwnershipCard,
EntityUserProfileCard,
} from '@backstage/plugin-org';
-import { Button, Grid } from '@material-ui/core';
+import Button from '@material-ui/core/Button';
+import Grid from '@material-ui/core/Grid';
import React, { ReactNode } from 'react';
import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
import {
diff --git a/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx b/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx
index cb3d684389..f16f98f9af 100644
--- a/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx
+++ b/packages/app/src/components/home/templates/DefaultTemplate.stories.tsx
@@ -37,7 +37,8 @@ import {
searchApiRef,
SearchContextProvider,
} from '@backstage/plugin-search-react';
-import { Grid, makeStyles } from '@material-ui/core';
+import Grid from '@material-ui/core/Grid';
+import { makeStyles } from '@material-ui/core/styles';
import React, { ComponentType, PropsWithChildren } from 'react';
const entities = [
@@ -126,8 +127,8 @@ const useStyles = makeStyles(theme => ({
boxShadow: theme.shadows[1],
},
searchBarOutline: {
- borderStyle: 'none'
- }
+ borderStyle: 'none',
+ },
}));
const useLogoStyles = makeStyles(theme => ({
@@ -156,9 +157,14 @@ export const DefaultTemplate = () => {
className={container}
logo={}
/>
-
+
diff --git a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx
index e236e01d79..953420c3e6 100644
--- a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx
+++ b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx
@@ -16,7 +16,7 @@
import React from 'react';
import type { FieldValidation } from '@rjsf/utils';
import { scaffolderPlugin } from '@backstage/plugin-scaffolder';
-import { TextField } from '@material-ui/core';
+import TextField from '@material-ui/core/TextField';
import {
createScaffolderFieldExtension,
FieldExtensionComponentProps,
diff --git a/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx b/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx
index b23d6e4073..d05635314f 100644
--- a/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx
+++ b/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx
@@ -19,7 +19,7 @@ import {
LayoutTemplate,
scaffolderPlugin,
} from '@backstage/plugin-scaffolder';
-import { Grid } from '@material-ui/core';
+import Grid from '@material-ui/core/Grid';
const TwoColumn: LayoutTemplate = ({ properties, description, title }) => {
const mid = Math.ceil(properties.length / 2);
diff --git a/packages/techdocs-cli-embedded-app/.eslintrc.js b/packages/techdocs-cli-embedded-app/.eslintrc.js
index e2a53a6ad2..e487f765b2 100644
--- a/packages/techdocs-cli-embedded-app/.eslintrc.js
+++ b/packages/techdocs-cli-embedded-app/.eslintrc.js
@@ -1 +1,5 @@
-module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
+module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, {
+ rules: {
+ '@backstage/no-top-level-material-ui-4-imports': 'error',
+ },
+});
diff --git a/packages/techdocs-cli-embedded-app/src/components/Root/LogoFull.tsx b/packages/techdocs-cli-embedded-app/src/components/Root/LogoFull.tsx
index c7b1c846c4..da6911bb17 100644
--- a/packages/techdocs-cli-embedded-app/src/components/Root/LogoFull.tsx
+++ b/packages/techdocs-cli-embedded-app/src/components/Root/LogoFull.tsx
@@ -15,7 +15,7 @@
*/
import React from 'react';
-import { makeStyles } from '@material-ui/core';
+import { makeStyles } from '@material-ui/core/styles';
const useStyles = makeStyles({
svg: {
diff --git a/packages/techdocs-cli-embedded-app/src/components/Root/Root.tsx b/packages/techdocs-cli-embedded-app/src/components/Root/Root.tsx
index 81e3d12d9d..b2fac4081f 100644
--- a/packages/techdocs-cli-embedded-app/src/components/Root/Root.tsx
+++ b/packages/techdocs-cli-embedded-app/src/components/Root/Root.tsx
@@ -16,7 +16,7 @@
import React, { PropsWithChildren } from 'react';
-import { makeStyles } from '@material-ui/core';
+import { makeStyles } from '@material-ui/core/styles';
import LibraryBooks from '@material-ui/icons/LibraryBooks';
import LogoFull from './LogoFull';
import LogoIcon from './LogoIcon';
diff --git a/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx b/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx
index 5ad0a10edb..5dc635e023 100644
--- a/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx
+++ b/packages/techdocs-cli-embedded-app/src/components/TechDocsPage/TechDocsPage.tsx
@@ -19,7 +19,9 @@ import React, { useState } from 'react';
import { makeStyles } from '@material-ui/core/styles';
import { Theme } from '@material-ui/core/styles/createTheme';
-import { Box, Tooltip, IconButton } from '@material-ui/core';
+import Box from '@material-ui/core/Box';
+import Tooltip from '@material-ui/core/Tooltip';
+import IconButton from '@material-ui/core/IconButton';
import LightIcon from '@material-ui/icons/Brightness7';
import DarkIcon from '@material-ui/icons/Brightness4';
diff --git a/packages/theme/.eslintrc.js b/packages/theme/.eslintrc.js
index e2a53a6ad2..e487f765b2 100644
--- a/packages/theme/.eslintrc.js
+++ b/packages/theme/.eslintrc.js
@@ -1 +1,5 @@
-module.exports = require('@backstage/cli/config/eslint-factory')(__dirname);
+module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, {
+ rules: {
+ '@backstage/no-top-level-material-ui-4-imports': 'error',
+ },
+});