[RFC] icons exports structure for Material Symbols
Open
Nobody has claimed this yet.
RFC
scope: icons
- Dominant language
- JavaScript
- Stars
- 99.1k
- Forks
- 32.5k
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 106
Description
What's the problem?
This RFC looks at 2 problems with icons:
- for MUI's users, there's no out-of-the-box option to enforce icons' variant:
Sharp,Rounded,Outlined,TwoTone,Filled - too many icons; it affects performance (see related issues)
What are the requirements?
MUI's user should be able to enforce icons' variants and the number of icons shouldn't affect DX.
Proposed solution
We can tackle both problems by allowing MUI's users to have more consistent interfaces by enforcing icons' variants using ESLint's no-restricted-imports.
File structure for Material Icons:
- the barrel file has 5x less icons 2,127 instead of 10,635
|-- index.ts // exports everything as it is now to support the current usage
|-- /variants
|-- /sharp // exports only Sharp variant, available as "@mui/icons-material/sharp"
|-- /rounded // exports only Rounded variant, available as "@mui/icons-material/rounded"
|-- /outlined // exports only Outlined variant, available as "@mui/icons-material/outlined"
|-- /two-tone // exports only TwoTone variant, available as "@mui/icons-material/two-tone"
|-- /filled // exports only Filled variant, available as "@mui/icons-material/filled"
File structure for Material Symbols:
- the barrel file has 63x less icons 2,500 instead of 157,500
|-- index.ts // exports everything as it is now to support the current usage
|-- /variants
|-- /sharp // exports only Sharp variant, available as "@mui/icons-material/sharp"
|-- /100 // exports only 100 weight, available as "@mui/icons-material/sharp/100"
|-- /neg25 // exports only -25 grade, available as "@mui/icons-material/sharp/100/neg25"
|-- /0 // exports only 0 grade, available as "@mui/icons-material/sharp/100/0"
|-- /200 // exports only 200 grade, available as "@mui/icons-material/sharp/100/200"
|-- ...other weights in separate directories 200, 300, 400, 500, 600, 700
|-- /rounded // exports only Rounded variant, available as "@mui/icons-material/rounded"
|-- /100 // exports only 100 weight, available as "@mui/icons-material/rounded/100"
|-- /neg25 // exports only -25 grade, available as "@mui/icons-material/rounded/100/neg25"
|-- /0 // exports only 0 grade, available as "@mui/icons-material/rounded/100/0"
|-- /200 // exports only 200 grade, available as "@mui/icons-material/rounded/100/200"
|-- ...other weights in separate directories 200, 300, 400, 500, 600, 700
|-- /outlined // exports only Outlined variant, available as "@mui/icons-material/outlined"
|-- /100 // exports only 100 weight, available as "@mui/icons-material/outlined/100"
|-- /neg25 // exports only -25 grade, available as "@mui/icons-material/outlined/100/neg25"
|-- /0 // exports only 0 grade, available as "@mui/icons-material/outlined/100/0"
|-- /200 // exports only 200 grade, available as "@mui/icons-material/outlined/100/200"
|-- ...other weights in separate directories 200, 300, 400, 500, 600, 700
Related issues
- https://github.com/mui/material-ui/issues/29687
- https://github.com/mui/material-ui/issues/35840
- https://github.com/mui/material-ui/issues/32846
Search keywords: material icons, symbols, icons v2
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.