Skip to content

Commit f22f581

Browse files
Fix MUI import in ESM library mode (#745)
* Fix `@mui/icons-material` imports * Fix `@mui/material` imports * Fix MUI theme augmentation
1 parent 921f94f commit f22f581

21 files changed

+84
-77
lines changed

.eslintrc.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@
2323
"react/require-default-props": "off",
2424
"no-plusplus": ["error", { "allowForLoopAfterthoughts": true }],
2525
"import/prefer-default-export": "off",
26+
// some libraries in ESM don't play nicely with ESBuild and need to only import from root
27+
"no-restricted-imports": [
28+
"warn",
29+
{
30+
"patterns": [{
31+
"group": ["@mui/*/*", "!@mui/material/colors"],
32+
"message": "Deep imports from MUI libraries are forbidden. Import only from the library root."
33+
}]
34+
}
35+
],
2636
// extend https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/rules/imports.js
2737
"import/no-extraneous-dependencies": [
2838
"error",

demo/src/app.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
ThemeProvider,
2525
Typography,
2626
} from '@mui/material';
27-
import CommentIcon from '@mui/icons-material/Comment';
27+
import { Comment as CommentIcon } from '@mui/icons-material';
2828
import { BrowserRouter, useLocation, useMatch, useNavigate } from 'react-router';
2929
import { IntlProvider, useIntl } from 'react-intl';
3030
import { useCallback, useEffect, useRef, useState } from 'react';
@@ -172,7 +172,7 @@ const style = {
172172
};
173173

174174
/**
175-
* @param {import('@mui/material/styles').Theme} theme Theme from ThemeProvider
175+
* @param {import('@mui/material').Theme} theme Theme from ThemeProvider
176176
*/
177177
const TreeViewFinderCustomStyles = (theme) => ({
178178
icon: {

src/components/checkBoxList/DraggableClickableCheckBoxItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
77

8-
import DragIndicatorIcon from '@mui/icons-material/DragIndicator';
8+
import { DragIndicator as DragIndicatorIcon } from '@mui/icons-material';
99
import { Checkbox, IconButton, ListItemIcon, ListItemText, Theme } from '@mui/material';
1010
import { OverflowableText } from '../overflowableText';
1111
import { DraggableClickableCheckBoxItemProps } from './checkBoxList.type';

src/components/checkBoxList/DraggableClickableRowItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
77

8-
import DragIndicatorIcon from '@mui/icons-material/DragIndicator';
8+
import { DragIndicator as DragIndicatorIcon } from '@mui/icons-material';
99
import { Checkbox, IconButton, ListItemButton, ListItemIcon, ListItemText, SxProps, Theme } from '@mui/material';
1010
import { OverflowableText } from '../overflowableText';
1111
import { DraggableClickableRowItemProps } from './checkBoxList.type';

src/components/customAGGrid/customAggrid.style.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
* License, v. 2.0. If a copy of the MPL was not distributed with this
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
7-
import type { Theme } from '@mui/material';
8-
import type { SystemStyleObject } from '@mui/system';
7+
import type { SxProps, Theme } from '@mui/material';
98

109
export const CUSTOM_AGGRID_THEME = 'custom-aggrid-theme';
1110

1211
export const styles = {
13-
grid: (theme: Theme): SystemStyleObject<Theme> => ({
12+
grid: (theme) => ({
1413
width: 'auto',
1514
height: '100%',
1615
position: 'relative',
@@ -49,4 +48,4 @@ export const styles = {
4948
borderRight: 'none',
5049
},
5150
},
52-
};
51+
} as const satisfies Record<string, SxProps<Theme>>;

src/components/dialogs/popupConfirmationDialog/PopupConfirmationDialog.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
77

8-
import Dialog from '@mui/material/Dialog';
9-
import DialogTitle from '@mui/material/DialogTitle';
10-
import DialogContent from '@mui/material/DialogContent';
11-
import { DialogContentText } from '@mui/material';
12-
import DialogActions from '@mui/material/DialogActions';
13-
import Button from '@mui/material/Button';
8+
import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@mui/material';
149
import { FormattedMessage } from 'react-intl';
1510
import { CancelButton } from '../../inputs/reactHookForm/utils/CancelButton';
1611

src/components/inputs/SelectClearable.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
*/
77

88
import { useIntl } from 'react-intl';
9-
import { Autocomplete, TextField } from '@mui/material';
10-
import { AutocompleteProps } from '@mui/material/Autocomplete/Autocomplete';
9+
import { Autocomplete, type AutocompleteProps, TextField } from '@mui/material';
1110
import { FieldLabel } from './reactHookForm/utils/FieldLabel';
1211

1312
type SelectOption = { id: string; label?: string };

src/components/inputs/reactHookForm/DirectoryItemsInput.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import { Chip, FormControl, Grid, IconButton, Theme, Tooltip } from '@mui/material';
9-
import FolderIcon from '@mui/icons-material/Folder';
9+
import { Folder as FolderIcon } from '@mui/icons-material';
1010
import { useCallback, useMemo, useState } from 'react';
1111
import { FieldValues, useController, useFieldArray } from 'react-hook-form';
1212
import { useIntl } from 'react-intl';

src/components/inputs/reactHookForm/agGridTable/BottomRightButtons.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44
* License, v. 2.0. If a copy of the MPL was not distributed with this
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
7-
import { Box, Grid, Tooltip } from '@mui/material';
8-
import IconButton from '@mui/material/IconButton';
9-
import { ArrowCircleDown, ArrowCircleUp, Upload } from '@mui/icons-material';
10-
import AddIcon from '@mui/icons-material/ControlPoint';
11-
import DeleteIcon from '@mui/icons-material/Delete';
7+
import { Box, Grid, IconButton, styled, Tooltip } from '@mui/material';
8+
import {
9+
ArrowCircleDown,
10+
ArrowCircleUp,
11+
ControlPoint as AddIcon,
12+
Delete as DeleteIcon,
13+
Upload,
14+
} from '@mui/icons-material';
1215
import { useState } from 'react';
1316
import { useIntl } from 'react-intl';
14-
import { styled } from '@mui/material/styles';
1517
import { FieldValues, UseFieldArrayReturn } from 'react-hook-form';
1618
import { ErrorInput } from '../errorManagement/ErrorInput';
1719
import { FieldErrorAlert } from '../errorManagement/FieldErrorAlert';

src/components/inputs/reactHookForm/agGridTable/csvUploader/CsvUploader.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,20 @@
55
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
66
*/
77

8-
import Dialog from '@mui/material/Dialog';
9-
import DialogTitle from '@mui/material/DialogTitle';
10-
import DialogContent from '@mui/material/DialogContent';
11-
import DialogActions from '@mui/material/DialogActions';
8+
import {
9+
Alert,
10+
Button,
11+
Dialog,
12+
DialogActions,
13+
DialogContent,
14+
DialogContentText,
15+
DialogTitle,
16+
Grid,
17+
} from '@mui/material';
1218
import { RECORD_SEP, UNIT_SEP, useCSVReader } from 'react-papaparse';
13-
import Button from '@mui/material/Button';
1419
import React, { useMemo, useState } from 'react';
15-
import Grid from '@mui/material/Grid';
1620
import { FormattedMessage, useIntl } from 'react-intl';
1721
import CsvDownloader from 'react-csv-downloader';
18-
import Alert from '@mui/material/Alert';
19-
import { DialogContentText } from '@mui/material';
2022
import { useWatch } from 'react-hook-form';
2123
import { FieldConstants } from '../../../../../utils/constants/fieldConstants';
2224
import { CancelButton } from '../../utils/CancelButton';

0 commit comments

Comments
 (0)