From a1e11dfdb3b6d77dcc7155fd3f3f86d6e03ec1d4 Mon Sep 17 00:00:00 2001 From: Diego Andai Date: Wed, 27 Dec 2023 16:58:02 -0300 Subject: [PATCH 01/26] [material-next][MenuItem] Fix spec import (#40271) --- packages/mui-material-next/src/MenuItem/MenuItem.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mui-material-next/src/MenuItem/MenuItem.spec.tsx b/packages/mui-material-next/src/MenuItem/MenuItem.spec.tsx index 91c09d6a40122c..d91914e1273a66 100644 --- a/packages/mui-material-next/src/MenuItem/MenuItem.spec.tsx +++ b/packages/mui-material-next/src/MenuItem/MenuItem.spec.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { expectType } from '@mui/types'; -import MenuItem, { MenuItemProps } from '@mui/material/MenuItem'; +import MenuItem, { MenuItemProps } from '@mui/material-next/MenuItem'; import Link from '@mui/material/Link'; const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> = From c4d42f9fa38bd967c6bfd56c9d8ce7fac328c922 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Thu, 28 Dec 2023 00:38:08 -0300 Subject: [PATCH 02/26] [base-ui][docs] Polish the Table Pagination demos (#40281) --- .../system/index.js => TableCustomized.js} | 68 ++++- .../system/index.tsx => TableCustomized.tsx} | 68 ++++- .../TableCustomized/css/index.js | 235 --------------- .../TableCustomized/css/index.tsx | 240 ---------------- .../TableCustomized/tailwind/index.js | 267 ------------------ .../TableCustomized/tailwind/index.tsx | 227 --------------- .../css/index.js | 59 +++- .../css/index.tsx | 59 +++- .../system/index.js | 56 +++- .../system/index.tsx | 56 +++- .../tailwind/index.js | 18 +- .../tailwind/index.tsx | 18 +- .../table-pagination/table-pagination.md | 2 +- 13 files changed, 309 insertions(+), 1064 deletions(-) rename docs/data/base/components/table-pagination/{TableCustomized/system/index.js => TableCustomized.js} (71%) rename docs/data/base/components/table-pagination/{TableCustomized/system/index.tsx => TableCustomized.tsx} (72%) delete mode 100644 docs/data/base/components/table-pagination/TableCustomized/css/index.js delete mode 100644 docs/data/base/components/table-pagination/TableCustomized/css/index.tsx delete mode 100644 docs/data/base/components/table-pagination/TableCustomized/tailwind/index.js delete mode 100644 docs/data/base/components/table-pagination/TableCustomized/tailwind/index.tsx diff --git a/docs/data/base/components/table-pagination/TableCustomized/system/index.js b/docs/data/base/components/table-pagination/TableCustomized.js similarity index 71% rename from docs/data/base/components/table-pagination/TableCustomized/system/index.js rename to docs/data/base/components/table-pagination/TableCustomized.js index 1895a9da0b9a9a..11f17cb9da09df 100644 --- a/docs/data/base/components/table-pagination/TableCustomized/system/index.js +++ b/docs/data/base/components/table-pagination/TableCustomized.js @@ -4,6 +4,10 @@ import { TablePagination, tablePaginationClasses as classes, } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; export default function TableCustomized() { const [page, setPage] = React.useState(0); @@ -69,6 +73,12 @@ export default function TableCustomized() { actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -123,23 +133,26 @@ const grey = { const Root = styled('div')( ({ theme }) => ` + border-radius: 12px; + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + overflow: clip; + table { font-family: 'IBM Plex Sans', sans-serif; font-size: 0.875rem; border-collapse: collapse; - width: 100%; + border: none; + width: 500px; + margin: -1px; } td, th { border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; text-align: left; - padding: 6px; + padding: 8px; } - th { - background-color: ${theme.palette.mode === 'dark' ? blue[900] : blue[50]}; - } `, ); @@ -153,7 +166,8 @@ const CustomTablePagination = styled(TablePagination)( display: flex; flex-direction: column; align-items: flex-start; - gap: 10px; + gap: 8px; + padding: 4px 0; @media (min-width: 768px) { flex-direction: row; @@ -166,17 +180,22 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.select}{ - padding: 2px; + font-family: 'IBM Plex Sans', sans-serif; + padding: 2px 0 2px 4px; border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + border-radius: 6px; background-color: transparent; + color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 100ms ease; &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; } } @@ -189,24 +208,43 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.actions} { - padding: 2px; - border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + display: flex; + gap: 6px; + border: transparent; text-align: center; } & .${classes.actions} > button { - margin: 0 8px; + display: flex; + align-items: center; + padding: 0; border: transparent; - border-radius: 2px; + border-radius: 50%; background-color: transparent; + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 120ms ease; + + > svg { + font-size: 22px; + } &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; + } + + &:disabled { + opacity: 0.3; + &:hover { + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + background-color: transparent; + } } } `, diff --git a/docs/data/base/components/table-pagination/TableCustomized/system/index.tsx b/docs/data/base/components/table-pagination/TableCustomized.tsx similarity index 72% rename from docs/data/base/components/table-pagination/TableCustomized/system/index.tsx rename to docs/data/base/components/table-pagination/TableCustomized.tsx index b96312794e9629..089c8a25ce7831 100644 --- a/docs/data/base/components/table-pagination/TableCustomized/system/index.tsx +++ b/docs/data/base/components/table-pagination/TableCustomized.tsx @@ -4,6 +4,10 @@ import { TablePagination, tablePaginationClasses as classes, } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; export default function TableCustomized() { const [page, setPage] = React.useState(0); @@ -74,6 +78,12 @@ export default function TableCustomized() { actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -128,23 +138,26 @@ const grey = { const Root = styled('div')( ({ theme }) => ` + border-radius: 12px; + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + overflow: clip; + table { font-family: 'IBM Plex Sans', sans-serif; font-size: 0.875rem; border-collapse: collapse; - width: 100%; + border: none; + width: 500px; + margin: -1px; } td, th { border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; text-align: left; - padding: 6px; + padding: 8px; } - th { - background-color: ${theme.palette.mode === 'dark' ? blue[900] : blue[50]}; - } `, ); @@ -158,7 +171,8 @@ const CustomTablePagination = styled(TablePagination)( display: flex; flex-direction: column; align-items: flex-start; - gap: 10px; + gap: 8px; + padding: 4px 0; @media (min-width: 768px) { flex-direction: row; @@ -171,17 +185,22 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.select}{ - padding: 2px; + font-family: 'IBM Plex Sans', sans-serif; + padding: 2px 0 2px 4px; border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + border-radius: 6px; background-color: transparent; + color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 100ms ease; &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; } } @@ -194,24 +213,43 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.actions} { - padding: 2px; - border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + display: flex; + gap: 6px; + border: transparent; text-align: center; } & .${classes.actions} > button { - margin: 0 8px; + display: flex; + align-items: center; + padding: 0; border: transparent; - border-radius: 2px; + border-radius: 50%; background-color: transparent; + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 120ms ease; + + > svg { + font-size: 22px; + } &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; + } + + &:disabled { + opacity: 0.3; + &:hover { + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + background-color: transparent; + } } } `, diff --git a/docs/data/base/components/table-pagination/TableCustomized/css/index.js b/docs/data/base/components/table-pagination/TableCustomized/css/index.js deleted file mode 100644 index 014098e3910f41..00000000000000 --- a/docs/data/base/components/table-pagination/TableCustomized/css/index.js +++ /dev/null @@ -1,235 +0,0 @@ -import * as React from 'react'; -import { useTheme } from '@mui/system'; -import { - TablePagination, - tablePaginationClasses as classes, -} from '@mui/base/TablePagination'; - -export default function TableCustomized() { - const [page, setPage] = React.useState(0); - const [rowsPerPage, setRowsPerPage] = React.useState(5); - - // Avoid a layout jump when reaching the last page with empty rows. - const emptyRows = - page > 0 ? Math.max(0, (1 + page) * rowsPerPage - rows.length) : 0; - - const handleChangePage = (event, newPage) => { - setPage(newPage); - }; - - const handleChangeRowsPerPage = (event) => { - setRowsPerPage(parseInt(event.target.value, 10)); - setPage(0); - }; - - return ( - -
- - - - - - - - - - {(rowsPerPage > 0 - ? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) - : rows - ).map((row) => ( - - - - - - ))} - - {emptyRows > 0 && ( - - - )} - - - - - - -
DessertCaloriesFat
{row.name} - {row.calories} - - {row.fat} -
-
-
- -
- ); -} - -function createData(name, calories, fat) { - return { name, calories, fat }; -} - -const rows = [ - createData('Cupcake', 305, 3.7), - createData('Donut', 452, 25.0), - createData('Eclair', 262, 16.0), - createData('Frozen yoghurt', 159, 6.0), - createData('Gingerbread', 356, 16.0), - createData('Honeycomb', 408, 3.2), - createData('Ice cream sandwich', 237, 9.0), - createData('Jelly Bean', 375, 0.0), - createData('KitKat', 518, 26.0), - createData('Lollipop', 392, 0.2), - createData('Marshmallow', 318, 0), - createData('Nougat', 360, 19.0), - createData('Oreo', 437, 18.0), -].sort((a, b) => (a.calories < b.calories ? -1 : 1)); - -const cyan = { - 50: '#E9F8FC', - 100: '#BDEBF4', - 200: '#99D8E5', - 300: '#66BACC', - 400: '#1F94AD', - 500: '#0D5463', - 600: '#094855', - 700: '#063C47', - 800: '#043039', - 900: '#022127', -}; - -const grey = { - 50: '#F3F6F9', - 100: '#E5EAF2', - 200: '#DAE2ED', - 300: '#C7D0DD', - 400: '#B0B8C4', - 500: '#9DA8B7', - 600: '#6B7A90', - 700: '#434D5B', - 800: '#303740', - 900: '#1C2025', -}; - -function useIsDarkMode() { - const theme = useTheme(); - return theme.palette.mode === 'dark'; -} - -function Styles() { - // Replace this with your app logic for determining dark mode - const isDarkMode = useIsDarkMode(); - - return ( - - ); -} diff --git a/docs/data/base/components/table-pagination/TableCustomized/css/index.tsx b/docs/data/base/components/table-pagination/TableCustomized/css/index.tsx deleted file mode 100644 index ada8fc4e6d083d..00000000000000 --- a/docs/data/base/components/table-pagination/TableCustomized/css/index.tsx +++ /dev/null @@ -1,240 +0,0 @@ -import * as React from 'react'; -import { useTheme } from '@mui/system'; -import { - TablePagination, - tablePaginationClasses as classes, -} from '@mui/base/TablePagination'; - -export default function TableCustomized() { - const [page, setPage] = React.useState(0); - const [rowsPerPage, setRowsPerPage] = React.useState(5); - - // Avoid a layout jump when reaching the last page with empty rows. - const emptyRows = - page > 0 ? Math.max(0, (1 + page) * rowsPerPage - rows.length) : 0; - - const handleChangePage = ( - event: React.MouseEvent | null, - newPage: number, - ) => { - setPage(newPage); - }; - - const handleChangeRowsPerPage = ( - event: React.ChangeEvent, - ) => { - setRowsPerPage(parseInt(event.target.value, 10)); - setPage(0); - }; - - return ( - -
- - - - - - - - - - {(rowsPerPage > 0 - ? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) - : rows - ).map((row) => ( - - - - - - ))} - - {emptyRows > 0 && ( - - - )} - - - - - - -
DessertCaloriesFat
{row.name} - {row.calories} - - {row.fat} -
-
-
- -
- ); -} - -function createData(name: string, calories: number, fat: number) { - return { name, calories, fat }; -} - -const rows = [ - createData('Cupcake', 305, 3.7), - createData('Donut', 452, 25.0), - createData('Eclair', 262, 16.0), - createData('Frozen yoghurt', 159, 6.0), - createData('Gingerbread', 356, 16.0), - createData('Honeycomb', 408, 3.2), - createData('Ice cream sandwich', 237, 9.0), - createData('Jelly Bean', 375, 0.0), - createData('KitKat', 518, 26.0), - createData('Lollipop', 392, 0.2), - createData('Marshmallow', 318, 0), - createData('Nougat', 360, 19.0), - createData('Oreo', 437, 18.0), -].sort((a, b) => (a.calories < b.calories ? -1 : 1)); - -const cyan = { - 50: '#E9F8FC', - 100: '#BDEBF4', - 200: '#99D8E5', - 300: '#66BACC', - 400: '#1F94AD', - 500: '#0D5463', - 600: '#094855', - 700: '#063C47', - 800: '#043039', - 900: '#022127', -}; - -const grey = { - 50: '#F3F6F9', - 100: '#E5EAF2', - 200: '#DAE2ED', - 300: '#C7D0DD', - 400: '#B0B8C4', - 500: '#9DA8B7', - 600: '#6B7A90', - 700: '#434D5B', - 800: '#303740', - 900: '#1C2025', -}; - -function useIsDarkMode() { - const theme = useTheme(); - return theme.palette.mode === 'dark'; -} - -function Styles() { - // Replace this with your app logic for determining dark mode - const isDarkMode = useIsDarkMode(); - - return ( - - ); -} diff --git a/docs/data/base/components/table-pagination/TableCustomized/tailwind/index.js b/docs/data/base/components/table-pagination/TableCustomized/tailwind/index.js deleted file mode 100644 index 63c12894c85d6c..00000000000000 --- a/docs/data/base/components/table-pagination/TableCustomized/tailwind/index.js +++ /dev/null @@ -1,267 +0,0 @@ -import * as React from 'react'; -import PropTypes from 'prop-types'; -import clsx from 'clsx'; -import { useTheme } from '@mui/system'; -import { TablePagination } from '@mui/base/TablePagination'; - -function useIsDarkMode() { - const theme = useTheme(); - return theme.palette.mode === 'dark'; -} - -export default function TableCustomized() { - // Replace this with your app logic for determining dark mode - const isDarkMode = useIsDarkMode(); - - const [page, setPage] = React.useState(0); - const [rowsPerPage, setRowsPerPage] = React.useState(5); - - // Avoid a layout jump when reaching the last page with empty rows. - const emptyRows = - page > 0 ? Math.max(0, (1 + page) * rowsPerPage - rows.length) : 0; - - const handleChangePage = (event, newPage) => { - setPage(newPage); - }; - - const handleChangeRowsPerPage = (event) => { - setRowsPerPage(parseInt(event.target.value, 10)); - setPage(0); - }; - - return ( -
- - - - - - - - - - {(rowsPerPage > 0 - ? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) - : rows - ).map((row) => ( - - - - - - ))} - - {emptyRows > 0 && ( - - - )} - - - - - - -
- Dessert - - Calories - - Fat -
- {row.name} - - {row.calories} - - {row.fat} -
-
-
- ); -} - -const resolveSlotProps = (fn, args) => (typeof fn === 'function' ? fn(args) : fn); - -const CustomTablePagination = React.forwardRef((props, ref) => { - return ( - { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.select, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx( - 'p-0.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl bg-transparent hover:bg-slate-20 hover:dark:bg-slate-800 focus:outline-0 focus:shadow-outline-purple-xs', - resolvedSlotProps?.className, - ), - }; - }, - actions: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.actions, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx( - 'p-0.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl text-center [&>button]:my-0 [&>button]:mx-2 [&>button]:border-transparent [&>button]:rounded-sm [&>button]:bg-transparent [&>button:hover]:bg-slate-50 [&>button:hover]:dark:bg-slate-800 [&>button:focus]:outline-0 [&>button:focus]:shadow-outline-purple-xs', - resolvedSlotProps?.className, - ), - }; - }, - spacer: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.spacer, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx('hidden', resolvedSlotProps?.className), - }; - }, - toolbar: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.toolbar, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx( - 'flex flex-col items-start gap-2.5 md:flex-row md:items-center', - resolvedSlotProps?.className, - ), - }; - }, - selectLabel: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.selectLabel, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx('m-0', resolvedSlotProps?.className), - }; - }, - displayedRows: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.displayedRows, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx('m-0 md:ml-auto', resolvedSlotProps?.className), - }; - }, - }} - /> - ); -}); - -CustomTablePagination.propTypes = { - className: PropTypes.string, - /** - * The props used for each slot inside the TablePagination. - * @default {} - */ - slotProps: PropTypes.shape({ - actions: PropTypes.oneOfType([ - PropTypes.func, - PropTypes.shape({ - count: PropTypes.number, - direction: PropTypes.oneOf(['ltr', 'rtl']), - getItemAriaLabel: PropTypes.func, - onPageChange: PropTypes.func, - page: PropTypes.number, - rowsPerPage: PropTypes.number, - showFirstButton: PropTypes.bool, - showLastButton: PropTypes.bool, - slotProps: PropTypes.shape({ - backButton: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - firstButton: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - lastButton: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - nextButton: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - }), - slots: PropTypes.shape({ - backButton: PropTypes.elementType, - backPageIcon: PropTypes.elementType, - firstButton: PropTypes.elementType, - firstPageIcon: PropTypes.elementType, - lastButton: PropTypes.elementType, - lastPageIcon: PropTypes.elementType, - nextButton: PropTypes.elementType, - nextPageIcon: PropTypes.elementType, - root: PropTypes.elementType, - }), - }), - ]), - displayedRows: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - menuItem: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - select: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - selectLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - spacer: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - toolbar: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), - }), -}; - -function createData(name, calories, fat) { - return { name, calories, fat }; -} - -const rows = [ - createData('Cupcake', 305, 3.7), - createData('Donut', 452, 25.0), - createData('Eclair', 262, 16.0), - createData('Frozen yoghurt', 159, 6.0), - createData('Gingerbread', 356, 16.0), - createData('Honeycomb', 408, 3.2), - createData('Ice cream sandwich', 237, 9.0), - createData('Jelly Bean', 375, 0.0), - createData('KitKat', 518, 26.0), - createData('Lollipop', 392, 0.2), - createData('Marshmallow', 318, 0), - createData('Nougat', 360, 19.0), - createData('Oreo', 437, 18.0), -].sort((a, b) => (a.calories < b.calories ? -1 : 1)); diff --git a/docs/data/base/components/table-pagination/TableCustomized/tailwind/index.tsx b/docs/data/base/components/table-pagination/TableCustomized/tailwind/index.tsx deleted file mode 100644 index 64cacc74fff3a7..00000000000000 --- a/docs/data/base/components/table-pagination/TableCustomized/tailwind/index.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import * as React from 'react'; -import clsx from 'clsx'; -import { useTheme } from '@mui/system'; -import { TablePagination, TablePaginationProps } from '@mui/base/TablePagination'; - -function useIsDarkMode() { - const theme = useTheme(); - return theme.palette.mode === 'dark'; -} - -export default function TableCustomized() { - // Replace this with your app logic for determining dark mode - const isDarkMode = useIsDarkMode(); - - const [page, setPage] = React.useState(0); - const [rowsPerPage, setRowsPerPage] = React.useState(5); - - // Avoid a layout jump when reaching the last page with empty rows. - const emptyRows = - page > 0 ? Math.max(0, (1 + page) * rowsPerPage - rows.length) : 0; - - const handleChangePage = ( - event: React.MouseEvent | null, - newPage: number, - ) => { - setPage(newPage); - }; - - const handleChangeRowsPerPage = ( - event: React.ChangeEvent, - ) => { - setRowsPerPage(parseInt(event.target.value, 10)); - setPage(0); - }; - - return ( -
- - - - - - - - - - {(rowsPerPage > 0 - ? rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) - : rows - ).map((row) => ( - - - - - - ))} - - {emptyRows > 0 && ( - - - )} - - - - - - -
- Dessert - - Calories - - Fat -
- {row.name} - - {row.calories} - - {row.fat} -
-
-
- ); -} - -const resolveSlotProps = (fn: any, args: any) => - typeof fn === 'function' ? fn(args) : fn; - -const CustomTablePagination = React.forwardRef< - HTMLTableCellElement, - TablePaginationProps ->((props, ref) => { - return ( - { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.select, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx( - 'p-0.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl bg-transparent hover:bg-slate-20 hover:dark:bg-slate-800 focus:outline-0 focus:shadow-outline-purple-xs', - resolvedSlotProps?.className, - ), - }; - }, - actions: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.actions, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx( - 'p-0.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl text-center [&>button]:my-0 [&>button]:mx-2 [&>button]:border-transparent [&>button]:rounded-sm [&>button]:bg-transparent [&>button:hover]:bg-slate-50 [&>button:hover]:dark:bg-slate-800 [&>button:focus]:outline-0 [&>button:focus]:shadow-outline-purple-xs', - resolvedSlotProps?.className, - ), - }; - }, - spacer: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.spacer, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx('hidden', resolvedSlotProps?.className), - }; - }, - toolbar: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.toolbar, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx( - 'flex flex-col items-start gap-2.5 md:flex-row md:items-center', - resolvedSlotProps?.className, - ), - }; - }, - selectLabel: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.selectLabel, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx('m-0', resolvedSlotProps?.className), - }; - }, - displayedRows: (ownerState) => { - const resolvedSlotProps = resolveSlotProps( - props.slotProps?.displayedRows, - ownerState, - ); - return { - ...resolvedSlotProps, - className: clsx('m-0 md:ml-auto', resolvedSlotProps?.className), - }; - }, - }} - /> - ); -}); - -function createData(name: string, calories: number, fat: number) { - return { name, calories, fat }; -} - -const rows = [ - createData('Cupcake', 305, 3.7), - createData('Donut', 452, 25.0), - createData('Eclair', 262, 16.0), - createData('Frozen yoghurt', 159, 6.0), - createData('Gingerbread', 356, 16.0), - createData('Honeycomb', 408, 3.2), - createData('Ice cream sandwich', 237, 9.0), - createData('Jelly Bean', 375, 0.0), - createData('KitKat', 518, 26.0), - createData('Lollipop', 392, 0.2), - createData('Marshmallow', 318, 0), - createData('Nougat', 360, 19.0), - createData('Oreo', 437, 18.0), -].sort((a, b) => (a.calories < b.calories ? -1 : 1)); diff --git a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.js b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.js index c46d82e878fc57..641214b134c66b 100644 --- a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.js +++ b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.js @@ -4,6 +4,10 @@ import { TablePagination, tablePaginationClasses as classes, } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; export default function UnstyledPaginationIntroduction() { const [page, setPage] = React.useState(0); @@ -33,11 +37,17 @@ export default function UnstyledPaginationIntroduction() { page={page} slotProps={{ select: { - 'aria-label': 'rows per page', + 'aria-label': 'Rows per page', }, actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -103,11 +113,11 @@ function Styles() { font-family: 'IBM Plex Sans', sans-serif; font-size: 0.875rem; width: 100%; + box-shadow: 0px 4px 16px ${isDarkMode ? 'rgba(0, 0, 0, 0.3)' : grey[200]}; background-color: ${isDarkMode ? grey[900] : '#fff'}; - box-shadow: 0px 2px 16px ${isDarkMode ? grey[900] : grey[200]}; + border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; border-radius: 12px; overflow: hidden; - border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; } .TablePaginationIntroductionDemo td, @@ -127,7 +137,7 @@ function Styles() { display: flex; flex-direction: column; align-items: flex-start; - gap: 10px; + gap: 8px; @media (min-width: 768px) { flex-direction: row; @@ -140,18 +150,23 @@ function Styles() { } .CustomTablePagination .${classes.select} { - padding: 2px 6px; + font-family: 'IBM Plex Sans', sans-serif; + padding: 2px 0 2px 4px; border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; - border-radius: 50px; + border-radius: 6px; background-color: transparent; + color: ${isDarkMode ? grey[300] : grey[900]}; + transition: all 100ms ease; } .CustomTablePagination .${classes.select}:hover { background-color: ${isDarkMode ? grey[800] : grey[50]}; + border-color: ${isDarkMode ? grey[600] : grey[300]}; } .CustomTablePagination .${classes.select}:focus { - outline: 1px solid ${isDarkMode ? cyan[400] : cyan[200]}; + outline: 3px solid ${isDarkMode ? cyan[400] : cyan[200]}; + border-color: ${cyan[500]}; } .CustomTablePagination .${classes.displayedRows} { @@ -163,29 +178,45 @@ function Styles() { } .CustomTablePagination .${classes.actions} { - padding: 2px 6px; - border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; - border-radius: 50px; + display: flex; + gap: 6px; + border: transparent; text-align: center; } .CustomTablePagination .${classes.actions} > button { - margin: 0 8px; + display: flex; + align-items: center; + padding: 0; border: transparent; - border-radius: 2px; + border-radius: 50%; background-color: transparent; + border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; + color: ${isDarkMode ? grey[300] : grey[900]}; + transition: all 120ms ease; + + > svg { + font-size: 22px; + } } .CustomTablePagination .${classes.actions} > button:hover { background-color: ${isDarkMode ? grey[800] : grey[50]}; + border-color: ${isDarkMode ? grey[600] : grey[300]}; } .CustomTablePagination .${classes.actions} > button:focus { - outline: 1px solid ${isDarkMode ? cyan[400] : cyan[200]}; + outline: 3px solid ${isDarkMode ? cyan[400] : cyan[200]}; + border-color: ${cyan[500]}; } .CustomTablePagination .${classes.actions} > button:disabled { - opacity: 0.7; + opacity: 0.3; + } + + .CustomTablePagination .${classes.actions} > button:disabled:hover { + border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; + background-color: transparent; } `} diff --git a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.tsx b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.tsx index b2159d8c937e74..56f8767ab2316e 100644 --- a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.tsx +++ b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/css/index.tsx @@ -4,6 +4,10 @@ import { TablePagination, tablePaginationClasses as classes, } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; export default function UnstyledPaginationIntroduction() { const [page, setPage] = React.useState(0); @@ -38,11 +42,17 @@ export default function UnstyledPaginationIntroduction() { page={page} slotProps={{ select: { - 'aria-label': 'rows per page', + 'aria-label': 'Rows per page', }, actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -108,11 +118,11 @@ function Styles() { font-family: 'IBM Plex Sans', sans-serif; font-size: 0.875rem; width: 100%; + box-shadow: 0px 4px 16px ${isDarkMode ? 'rgba(0, 0, 0, 0.3)' : grey[200]}; background-color: ${isDarkMode ? grey[900] : '#fff'}; - box-shadow: 0px 2px 16px ${isDarkMode ? grey[900] : grey[200]}; + border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; border-radius: 12px; overflow: hidden; - border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; } .TablePaginationIntroductionDemo td, @@ -132,7 +142,7 @@ function Styles() { display: flex; flex-direction: column; align-items: flex-start; - gap: 10px; + gap: 8px; @media (min-width: 768px) { flex-direction: row; @@ -145,18 +155,23 @@ function Styles() { } .CustomTablePagination .${classes.select} { - padding: 2px 6px; + font-family: 'IBM Plex Sans', sans-serif; + padding: 2px 0 2px 4px; border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; - border-radius: 50px; + border-radius: 6px; background-color: transparent; + color: ${isDarkMode ? grey[300] : grey[900]}; + transition: all 100ms ease; } .CustomTablePagination .${classes.select}:hover { background-color: ${isDarkMode ? grey[800] : grey[50]}; + border-color: ${isDarkMode ? grey[600] : grey[300]}; } .CustomTablePagination .${classes.select}:focus { - outline: 1px solid ${isDarkMode ? cyan[400] : cyan[200]}; + outline: 3px solid ${isDarkMode ? cyan[400] : cyan[200]}; + border-color: ${cyan[500]}; } .CustomTablePagination .${classes.displayedRows} { @@ -168,29 +183,45 @@ function Styles() { } .CustomTablePagination .${classes.actions} { - padding: 2px 6px; - border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; - border-radius: 50px; + display: flex; + gap: 6px; + border: transparent; text-align: center; } .CustomTablePagination .${classes.actions} > button { - margin: 0 8px; + display: flex; + align-items: center; + padding: 0; border: transparent; - border-radius: 2px; + border-radius: 50%; background-color: transparent; + border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; + color: ${isDarkMode ? grey[300] : grey[900]}; + transition: all 120ms ease; + + > svg { + font-size: 22px; + } } .CustomTablePagination .${classes.actions} > button:hover { background-color: ${isDarkMode ? grey[800] : grey[50]}; + border-color: ${isDarkMode ? grey[600] : grey[300]}; } .CustomTablePagination .${classes.actions} > button:focus { - outline: 1px solid ${isDarkMode ? cyan[400] : cyan[200]}; + outline: 3px solid ${isDarkMode ? cyan[400] : cyan[200]}; + border-color: ${cyan[500]}; } .CustomTablePagination .${classes.actions} > button:disabled { - opacity: 0.7; + opacity: 0.3; + } + + .CustomTablePagination .${classes.actions} > button:disabled:hover { + border: 1px solid ${isDarkMode ? grey[800] : grey[200]}; + background-color: transparent; } `} diff --git a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.js b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.js index 465770bb813795..3acbb13cb02df1 100644 --- a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.js +++ b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.js @@ -4,6 +4,10 @@ import { TablePagination, tablePaginationClasses as classes, } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; export default function UnstyledPaginationIntroduction() { const [page, setPage] = React.useState(0); @@ -31,11 +35,17 @@ export default function UnstyledPaginationIntroduction() { page={page} slotProps={{ select: { - 'aria-label': 'rows per page', + 'aria-label': 'Rows per page', }, actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -73,12 +83,12 @@ const Root = styled('div')( font-size: 0.875rem; width: 100%; background-color: ${theme.palette.mode === 'dark' ? grey[900] : '#fff'}; - box-shadow: 0px 2px 16px ${ - theme.palette.mode === 'dark' ? grey[900] : grey[200] + box-shadow: 0px 4px 16px ${ + theme.palette.mode === 'dark' ? 'rgba(0, 0, 0, 0.3)' : grey[200] }; border-radius: 12px; - overflow: hidden; border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + overflow: hidden; } td, @@ -102,7 +112,7 @@ const CustomTablePagination = styled(TablePagination)( display: flex; flex-direction: column; align-items: flex-start; - gap: 10px; + gap: 8px; background-color: ${theme.palette.mode === 'dark' ? grey[900] : '#fff'}; @media (min-width: 768px) { @@ -116,18 +126,22 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.select}{ - padding: 2px; + font-family: 'IBM Plex Sans', sans-serif; + padding: 2px 0 2px 4px; border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + border-radius: 6px; background-color: transparent; color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 100ms ease; &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; } } @@ -140,29 +154,43 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.actions} { - padding: 2px; - border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + display: flex; + gap: 6px; + border: transparent; text-align: center; } & .${classes.actions} > button { - margin: 0 8px; + display: flex; + align-items: center; + padding: 0; border: transparent; - border-radius: 4px; + border-radius: 50%; background-color: transparent; + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 100ms ease; + + > svg { + font-size: 22px; + } &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; } &:disabled { opacity: 0.3; + &:hover { + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + background-color: transparent; + } } } `, diff --git a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.tsx b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.tsx index 9307775dc3b00a..f101913086a3ea 100644 --- a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.tsx +++ b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/system/index.tsx @@ -4,6 +4,10 @@ import { TablePagination, tablePaginationClasses as classes, } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; export default function UnstyledPaginationIntroduction() { const [page, setPage] = React.useState(0); @@ -36,11 +40,17 @@ export default function UnstyledPaginationIntroduction() { page={page} slotProps={{ select: { - 'aria-label': 'rows per page', + 'aria-label': 'Rows per page', }, actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -78,12 +88,12 @@ const Root = styled('div')( font-size: 0.875rem; width: 100%; background-color: ${theme.palette.mode === 'dark' ? grey[900] : '#fff'}; - box-shadow: 0px 2px 16px ${ - theme.palette.mode === 'dark' ? grey[900] : grey[200] + box-shadow: 0px 4px 16px ${ + theme.palette.mode === 'dark' ? 'rgba(0, 0, 0, 0.3)' : grey[200] }; border-radius: 12px; - overflow: hidden; border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + overflow: hidden; } td, @@ -107,7 +117,7 @@ const CustomTablePagination = styled(TablePagination)( display: flex; flex-direction: column; align-items: flex-start; - gap: 10px; + gap: 8px; background-color: ${theme.palette.mode === 'dark' ? grey[900] : '#fff'}; @media (min-width: 768px) { @@ -121,18 +131,22 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.select}{ - padding: 2px; + font-family: 'IBM Plex Sans', sans-serif; + padding: 2px 0 2px 4px; border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + border-radius: 6px; background-color: transparent; color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 100ms ease; &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; } } @@ -145,29 +159,43 @@ const CustomTablePagination = styled(TablePagination)( } & .${classes.actions} { - padding: 2px; - border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; - border-radius: 50px; + display: flex; + gap: 6px; + border: transparent; text-align: center; } & .${classes.actions} > button { - margin: 0 8px; + display: flex; + align-items: center; + padding: 0; border: transparent; - border-radius: 4px; + border-radius: 50%; background-color: transparent; + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; color: ${theme.palette.mode === 'dark' ? grey[300] : grey[900]}; + transition: all 100ms ease; + + > svg { + font-size: 22px; + } &:hover { background-color: ${theme.palette.mode === 'dark' ? grey[800] : grey[50]}; + border-color: ${theme.palette.mode === 'dark' ? grey[600] : grey[300]}; } &:focus { - outline: 1px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + outline: 3px solid ${theme.palette.mode === 'dark' ? blue[400] : blue[200]}; + border-color: ${blue[400]}; } &:disabled { opacity: 0.3; + &:hover { + border: 1px solid ${theme.palette.mode === 'dark' ? grey[800] : grey[200]}; + background-color: transparent; + } } } `, diff --git a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.js b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.js index 51ae7bb24c1936..210dff5e00cd1d 100644 --- a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.js +++ b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.js @@ -3,6 +3,10 @@ import PropTypes from 'prop-types'; import clsx from 'clsx'; import { useTheme } from '@mui/system'; import { TablePagination } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; function useIsDarkMode() { const theme = useTheme(); @@ -32,7 +36,7 @@ export default function UnstyledPaginationIntroduction() { > @@ -49,6 +53,12 @@ export default function UnstyledPaginationIntroduction() { actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -79,7 +89,7 @@ const CustomTablePagination = React.forwardRef((props, ref) => { return { ...resolvedSlotProps, className: clsx( - 'py-0.5 px-1.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl bg-transparent hover:bg-slate-20 hover:dark:bg-slate-800 focus:outline-0 focus:shadow-outline-purple-xs', + 'font-sans py-[2px] pl-[4px] pr-[2px] border border-solid border-zinc-200 dark:border-[#303740] rounded-[6px] bg-transparent hover:bg-zinc-20 hover:dark:bg-zinc-800 focus:outline-0 [&>button:focus]:ring-[3px] focus:border-purple-400 focus:dark:border-purple-400 focus:hover:border-purple-400 focus:hover:dark:border-purple-400 transition', resolvedSlotProps?.className, ), }; @@ -92,7 +102,7 @@ const CustomTablePagination = React.forwardRef((props, ref) => { return { ...resolvedSlotProps, className: clsx( - 'p-0.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl text-center [&>button]:my-0 [&>button]:mx-2 [&>button]:border-none [&>button]:rounded-sm [&>button]:bg-transparent [&>button:hover]:bg-slate-50 [&>button:hover]:dark:bg-slate-800 [&>button:focus]:outline-0 [&>button:focus]:shadow-outline-purple-xs', + 'flex gap-[6px] text-center [&>button]:my-0 [&>button]:p-0 [&>button]:flex [&>button]:items-center [&>button]:rounded-full [&>button]:bg-transparent [&>button]:border [&>button]:border-solid [&>button]:border-zinc-300 [&>button]:dark:border-[#303740] [&>button:hover]:dark:border-zinc-700 [&>button:hover]:bg-zinc-100 [&>button:hover]:border-zinc-400 [&>button:hover]:dark:bg-zinc-800 [&>button:focus]:outline-0 [&>button:focus]:ring-[2px] [&>button:focus]:border-purple-400 [&>button:focus]:dark:border-purple-400 [&>button:focus:hover]:border-purple-400 [&>button:focus:hover]:dark:border-purple-400 [&>button>svg]:text-[22px] [&>button:disabled]:opacity-[0.3] [&>button:disabled:hover]:bg-transparent [&>button:disabled:hover]:border-zinc-300 [&>button:disabled:hover]:dark:border-zinc-700', resolvedSlotProps?.className, ), }; @@ -116,7 +126,7 @@ const CustomTablePagination = React.forwardRef((props, ref) => { return { ...resolvedSlotProps, className: clsx( - 'flex flex-col items-start gap-2.5 md:flex-row md:items-center', + 'flex flex-col items-start gap-[8px] md:flex-row md:items-center', resolvedSlotProps?.className, ), }; diff --git a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.tsx b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.tsx index 777cdcb59afa64..1010c775a9602d 100644 --- a/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.tsx +++ b/docs/data/base/components/table-pagination/UnstyledPaginationIntroduction/tailwind/index.tsx @@ -2,6 +2,10 @@ import * as React from 'react'; import clsx from 'clsx'; import { useTheme } from '@mui/system'; import { TablePagination, TablePaginationProps } from '@mui/base/TablePagination'; +import FirstPageRoundedIcon from '@mui/icons-material/FirstPageRounded'; +import LastPageRoundedIcon from '@mui/icons-material/LastPageRounded'; +import ChevronLeftRoundedIcon from '@mui/icons-material/ChevronLeftRounded'; +import ChevronRightRoundedIcon from '@mui/icons-material/ChevronRightRounded'; function useIsDarkMode() { const theme = useTheme(); @@ -36,7 +40,7 @@ export default function UnstyledPaginationIntroduction() { >
@@ -53,6 +57,12 @@ export default function UnstyledPaginationIntroduction() { actions: { showFirstButton: true, showLastButton: true, + slots: { + firstPageIcon: FirstPageRoundedIcon, + lastPageIcon: LastPageRoundedIcon, + nextPageIcon: ChevronRightRoundedIcon, + backPageIcon: ChevronLeftRoundedIcon, + }, }, }} onPageChange={handleChangePage} @@ -87,7 +97,7 @@ const CustomTablePagination = React.forwardRef< return { ...resolvedSlotProps, className: clsx( - 'py-0.5 px-1.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl bg-transparent hover:bg-slate-20 hover:dark:bg-slate-800 focus:outline-0 focus:shadow-outline-purple-xs', + 'font-sans py-[2px] pl-[4px] pr-[2px] border border-solid border-zinc-200 dark:border-[#303740] rounded-[6px] bg-transparent hover:bg-zinc-20 hover:dark:bg-zinc-800 focus:outline-0 [&>button:focus]:ring-[3px] focus:border-purple-400 focus:dark:border-purple-400 focus:hover:border-purple-400 focus:hover:dark:border-purple-400 transition', resolvedSlotProps?.className, ), }; @@ -100,7 +110,7 @@ const CustomTablePagination = React.forwardRef< return { ...resolvedSlotProps, className: clsx( - 'p-0.5 border border-solid border-slate-200 dark:border-slate-800 rounded-3xl text-center [&>button]:my-0 [&>button]:mx-2 [&>button]:border-none [&>button]:rounded-sm [&>button]:bg-transparent [&>button:hover]:bg-slate-50 [&>button:hover]:dark:bg-slate-800 [&>button:focus]:outline-0 [&>button:focus]:shadow-outline-purple-xs', + 'flex gap-[6px] text-center [&>button]:my-0 [&>button]:p-0 [&>button]:flex [&>button]:items-center [&>button]:rounded-full [&>button]:bg-transparent [&>button]:border [&>button]:border-solid [&>button]:border-zinc-300 [&>button]:dark:border-[#303740] [&>button:hover]:dark:border-zinc-700 [&>button:hover]:bg-zinc-100 [&>button:hover]:border-zinc-400 [&>button:hover]:dark:bg-zinc-800 [&>button:focus]:outline-0 [&>button:focus]:ring-[2px] [&>button:focus]:border-purple-400 [&>button:focus]:dark:border-purple-400 [&>button:focus:hover]:border-purple-400 [&>button:focus:hover]:dark:border-purple-400 [&>button>svg]:text-[22px] [&>button:disabled]:opacity-[0.3] [&>button:disabled:hover]:bg-transparent [&>button:disabled:hover]:border-zinc-300 [&>button:disabled:hover]:dark:border-zinc-700', resolvedSlotProps?.className, ), }; @@ -124,7 +134,7 @@ const CustomTablePagination = React.forwardRef< return { ...resolvedSlotProps, className: clsx( - 'flex flex-col items-start gap-2.5 md:flex-row md:items-center', + 'flex flex-col items-start gap-[8px] md:flex-row md:items-center', resolvedSlotProps?.className, ), }; diff --git a/docs/data/base/components/table-pagination/table-pagination.md b/docs/data/base/components/table-pagination/table-pagination.md index ee9f262b89d876..1275fe49aed98d 100644 --- a/docs/data/base/components/table-pagination/table-pagination.md +++ b/docs/data/base/components/table-pagination/table-pagination.md @@ -144,4 +144,4 @@ This prop requires an array of either numbers or objects: The following demo shows another example of pagination controls but with additional style customization: -{{"demo": "TableCustomized"}} +{{"demo": "TableCustomized.js"}} From 0fcc3e053e8cd8f13769485a0f6d587e58fa90cf Mon Sep 17 00:00:00 2001 From: Kenil Sudani Date: Thu, 28 Dec 2023 10:42:33 +0530 Subject: [PATCH 03/26] [material-ui][Slider] Fix customized iOS demo to use updated official colors (#39813) Signed-off-by: Kenil Sudani --- .../components/slider/CustomizedSlider.js | 52 +++++-------------- .../components/slider/CustomizedSlider.tsx | 52 +++++-------------- 2 files changed, 28 insertions(+), 76 deletions(-) diff --git a/docs/data/material/components/slider/CustomizedSlider.js b/docs/data/material/components/slider/CustomizedSlider.js index 03de80eb881245..01feaf10ec295b 100644 --- a/docs/data/material/components/slider/CustomizedSlider.js +++ b/docs/data/material/components/slider/CustomizedSlider.js @@ -24,38 +24,26 @@ ValueLabelComponent.propTypes = { const iOSBoxShadow = '0 3px 1px rgba(0,0,0,0.1),0 4px 8px rgba(0,0,0,0.13),0 0 0 1px rgba(0,0,0,0.02)'; -const marks = [ - { - value: 0, - }, - { - value: 20, - }, - { - value: 37, - }, - { - value: 100, - }, -]; - const IOSSlider = styled(Slider)(({ theme }) => ({ - color: theme.palette.mode === 'dark' ? '#3880ff' : '#3880ff', - height: 2, + color: theme.palette.mode === 'dark' ? '#0a84ff' : '#007bff', + height: 5, padding: '15px 0', '& .MuiSlider-thumb': { - height: 28, - width: 28, + height: 20, + width: 20, backgroundColor: '#fff', - boxShadow: iOSBoxShadow, + boxShadow: '0 0 2px 0px rgba(0, 0, 0, 0.1)', '&:focus, &:hover, &.Mui-active': { - boxShadow: - '0 3px 1px rgba(0,0,0,0.1),0 4px 8px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.02)', + boxShadow: '0px 0px 3px 1px rgba(0, 0, 0, 0.1)', // Reset on touch devices, it doesn't add specificity '@media (hover: none)': { boxShadow: iOSBoxShadow, }, }, + '&:before': { + boxShadow: + '0px 0px 1px 0px rgba(0,0,0,0.2), 0px 0px 0px 0px rgba(0,0,0,0.14), 0px 0px 1px 0px rgba(0,0,0,0.12)', + }, }, '& .MuiSlider-valueLabel': { fontSize: 12, @@ -73,19 +61,12 @@ const IOSSlider = styled(Slider)(({ theme }) => ({ }, '& .MuiSlider-track': { border: 'none', + height: 5, }, '& .MuiSlider-rail': { opacity: 0.5, - backgroundColor: '#bfbfbf', - }, - '& .MuiSlider-mark': { - backgroundColor: '#bfbfbf', - height: 8, - width: 1, - '&.MuiSlider-markActive': { - opacity: 1, - backgroundColor: 'currentColor', - }, + boxShadow: 'inset 0px 0px 4px -2px #000', + backgroundColor: '#d0d0d0', }, })); @@ -178,12 +159,7 @@ export default function CustomizedSlider() { return ( iOS - + pretto.fr ({ - color: theme.palette.mode === 'dark' ? '#3880ff' : '#3880ff', - height: 2, + color: theme.palette.mode === 'dark' ? '#0a84ff' : '#007bff', + height: 5, padding: '15px 0', '& .MuiSlider-thumb': { - height: 28, - width: 28, + height: 20, + width: 20, backgroundColor: '#fff', - boxShadow: iOSBoxShadow, + boxShadow: '0 0 2px 0px rgba(0, 0, 0, 0.1)', '&:focus, &:hover, &.Mui-active': { - boxShadow: - '0 3px 1px rgba(0,0,0,0.1),0 4px 8px rgba(0,0,0,0.3),0 0 0 1px rgba(0,0,0,0.02)', + boxShadow: '0px 0px 3px 1px rgba(0, 0, 0, 0.1)', // Reset on touch devices, it doesn't add specificity '@media (hover: none)': { boxShadow: iOSBoxShadow, }, }, + '&:before': { + boxShadow: + '0px 0px 1px 0px rgba(0,0,0,0.2), 0px 0px 0px 0px rgba(0,0,0,0.14), 0px 0px 1px 0px rgba(0,0,0,0.12)', + }, }, '& .MuiSlider-valueLabel': { fontSize: 12, @@ -67,19 +55,12 @@ const IOSSlider = styled(Slider)(({ theme }) => ({ }, '& .MuiSlider-track': { border: 'none', + height: 5, }, '& .MuiSlider-rail': { opacity: 0.5, - backgroundColor: '#bfbfbf', - }, - '& .MuiSlider-mark': { - backgroundColor: '#bfbfbf', - height: 8, - width: 1, - '&.MuiSlider-markActive': { - opacity: 1, - backgroundColor: 'currentColor', - }, + boxShadow: 'inset 0px 0px 4px -2px #000', + backgroundColor: '#d0d0d0', }, })); @@ -170,12 +151,7 @@ export default function CustomizedSlider() { return ( iOS - + pretto.fr Date: Thu, 28 Dec 2023 10:30:30 -0300 Subject: [PATCH 04/26] [docs-infra] Add stray design adjustments (#40347) --- docs/src/modules/brandingTheme.ts | 2 +- .../ApiPage/list/ExpandableApiItem.tsx | 4 +-- .../components/ApiPage/table/ClassesTable.tsx | 1 + .../ApiPage/table/PropertiesTable.tsx | 2 +- .../ApiPage/table/StyledTableContainer.tsx | 31 ++++++------------- docs/src/modules/components/Demo.js | 9 ++++-- .../src/modules/components/MarkdownElement.js | 12 ++++--- 7 files changed, 28 insertions(+), 33 deletions(-) diff --git a/docs/src/modules/brandingTheme.ts b/docs/src/modules/brandingTheme.ts index fcf087cc8f2e81..899fa4e1523572 100644 --- a/docs/src/modules/brandingTheme.ts +++ b/docs/src/modules/brandingTheme.ts @@ -1167,7 +1167,7 @@ export function getThemedComponents(): ThemeOptions { } as const, theme.applyDarkStyles({ color: theme.palette.grey[300], - borderColor: theme.palette.primaryDark[500], + borderColor: theme.palette.primaryDark[700], '&.Mui-selected': { color: (theme.vars || theme).palette.primary[200], borderColor: `${(theme.vars || theme).palette.primary[700]} !important`, diff --git a/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx b/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx index 702053245600a8..3018d0f6e5c38a 100644 --- a/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx +++ b/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx @@ -162,9 +162,9 @@ const Root = styled('div')<{ ownerState: { type?: DescriptionType } }>( }, }, '& code.Api-code': { - borderColor: alpha(darkTheme.palette.primary[400], 0.1), - backgroundColor: alpha(darkTheme.palette.primary[900], 0.4), color: `var(--muidocs-palette-text-primary, ${darkTheme.palette.text.primary})`, + borderColor: `var(--muidocs-palette-divider, ${darkTheme.palette.divider})`, + backgroundColor: alpha(darkTheme.palette.primary[900], 0.3), }, }, }), diff --git a/docs/src/modules/components/ApiPage/table/ClassesTable.tsx b/docs/src/modules/components/ApiPage/table/ClassesTable.tsx index 84974119a584a4..aa62403018b8cf 100644 --- a/docs/src/modules/components/ApiPage/table/ClassesTable.tsx +++ b/docs/src/modules/components/ApiPage/table/ClassesTable.tsx @@ -10,6 +10,7 @@ import { getHash } from 'docs/src/modules/components/ApiPage/list/ClassesList'; const StyledTable = styled('table')( ({ theme }) => ({ + textAlign: 'left', '& .class-name': { flexShrink: 0, fontWeight: theme.typography.fontWeightSemiBold, diff --git a/docs/src/modules/components/ApiPage/table/PropertiesTable.tsx b/docs/src/modules/components/ApiPage/table/PropertiesTable.tsx index 2592d1d0089fbf..e9a70a3328b402 100644 --- a/docs/src/modules/components/ApiPage/table/PropertiesTable.tsx +++ b/docs/src/modules/components/ApiPage/table/PropertiesTable.tsx @@ -108,7 +108,7 @@ const StyledTable = styled('table')( '& .MuiApi-table-item-type': { color: `var(--muidocs-palette-text-primary, ${darkTheme.palette.text.primary})`, borderColor: `var(--muidocs-palette-divider, ${darkTheme.palette.divider})`, - backgroundColor: alpha(darkTheme.palette.primary[900], 0.5), + backgroundColor: alpha(darkTheme.palette.primary[900], 0.3), }, '& .MuiApi-table-item-default': { color: `var(--muidocs-palette-text-primary, ${darkTheme.palette.text.primary})`, diff --git a/docs/src/modules/components/ApiPage/table/StyledTableContainer.tsx b/docs/src/modules/components/ApiPage/table/StyledTableContainer.tsx index 02635b219ccff5..4abdd6cc7c10f2 100644 --- a/docs/src/modules/components/ApiPage/table/StyledTableContainer.tsx +++ b/docs/src/modules/components/ApiPage/table/StyledTableContainer.tsx @@ -3,22 +3,16 @@ import { brandingDarkTheme as darkTheme } from 'docs/src/modules/brandingTheme'; const StyledTableContainer = styled('div')( ({ theme }) => ({ + borderRadius: 12, overflow: 'hidden', '& table': { - borderRadius: '10px', marginLeft: -1, marginRight: -1, background: [ - 'linear-gradient(to right, rgb(255, 255, 255) 5%, rgba(255, 255, 255, 0) 90%) local', - 'linear-gradient(to right, rgba(255, 255, 255, 0), rgb(255, 255, 255) 100%) 100% center local', - `linear-gradient(to right, ${alpha( - theme.palette.grey[500], - 0.5, - )}, rgba(0, 0, 0, 0) 5%) scroll`, - `linear-gradient(to left, ${alpha( - theme.palette.grey[500], - 0.2, - )}, rgba(0, 0, 0, 0) 5%) scroll`, + 'linear-gradient(to right, rgb(255, 255, 255) 5%, transparent 90%) local', + 'linear-gradient(to right, transparent, rgb(255, 255, 255) 100%) 100% center local', + `linear-gradient(to right, ${alpha(theme.palette.grey[500], 0.5)}, transparent 5%) scroll`, + `linear-gradient(to left, ${alpha(theme.palette.grey[500], 0.2)}, transparent 5%) scroll`, ].join(', '), }, '&& th': { @@ -34,7 +28,7 @@ const StyledTableContainer = styled('div')( backgroundColor: alpha(darkTheme.palette.grey[50], 0.5), }, '& .MuiPropTable-description-column': { - minWidth: 400, + minWidth: 300, }, }, }), @@ -42,15 +36,10 @@ const StyledTableContainer = styled('div')( [`:where(${theme.vars ? '[data-mui-color-scheme="dark"]' : '.mode-dark'}) &`]: { '& table': { background: [ - `linear-gradient(to right, ${theme.palette.primaryDark[900]} 5%, ${alpha( - theme.palette.primaryDark[900], - 0, - )} 80%) local`, - `linear-gradient(to right, ${alpha(theme.palette.primaryDark[900], 0)}, ${ - theme.palette.primaryDark[900] - } 100%) 100% center local`, - `linear-gradient(to right, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0) 10%) scroll`, - 'linear-gradient(to left, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0) 10%) scroll', + `linear-gradient(to right, ${theme.palette.primaryDark[900]} 5%, transparent 80%) local`, + `linear-gradient(to right, transparent, ${theme.palette.primaryDark[900]} 100%) 100% center local`, + `linear-gradient(to right, rgba(0, 0, 0, 0.8), transparent 10%) scroll`, + 'linear-gradient(to left, rgba(0, 0, 0, 0.8), transparent 10%) scroll', ].join(', '), }, '& tr': { diff --git a/docs/src/modules/components/Demo.js b/docs/src/modules/components/Demo.js index 35666047b34494..68a61825195ae0 100644 --- a/docs/src/modules/components/Demo.js +++ b/docs/src/modules/components/Demo.js @@ -219,6 +219,9 @@ const DemoRootMaterial = styled('div', { border: `1px solid ${(theme.vars || theme).palette.divider}`, borderLeftWidth: 0, borderRightWidth: 0, + ...theme.applyDarkStyles({ + backgroundColor: alpha(theme.palette.primaryDark[700], 0.1), + }), }), /* Similar to the outlined one but without padding. Ideal for playground demos. */ ...(bg === 'playground' && { @@ -229,10 +232,10 @@ const DemoRootMaterial = styled('div', { /* Prepare the background to display an inner elevation. */ ...(bg === true && { padding: theme.spacing(3), - backgroundColor: (theme.vars || theme).palette.grey[50], + backgroundColor: alpha(theme.palette.grey[50], 0.6), border: `1px solid ${(theme.vars || theme).palette.divider}`, ...theme.applyDarkStyles({ - backgroundColor: alpha(theme.palette.primaryDark[700], 0.3), + backgroundColor: alpha(theme.palette.primaryDark[700], 0.15), }), }), /* Mostly meant for introduction demos. */ @@ -299,7 +302,7 @@ const DemoRootJoy = joyStyled('div', { backgroundColor: '#fff', ...theme.applyDarkStyles({ borderColor: alpha(grey[700], 0.3), - backgroundColor: alpha(blueDark[800], 0.2), + backgroundColor: alpha(blueDark[700], 0.2), }), }), /* Prepare the background to display an inner elevation. */ diff --git a/docs/src/modules/components/MarkdownElement.js b/docs/src/modules/components/MarkdownElement.js index 9c1726d38f8368..3f6b857e0b45cf 100644 --- a/docs/src/modules/components/MarkdownElement.js +++ b/docs/src/modules/components/MarkdownElement.js @@ -165,6 +165,7 @@ const Root = styled('div')( width: '14px', fill: 'currentColor', pointerEvents: 'none', + verticalAlign: 'middle', }, }, '&:hover .anchor-link': { @@ -253,15 +254,16 @@ const Root = styled('div')( borderLeft: '1.5px solid', borderColor: `var(--muidocs-palette-grey-200, ${lightTheme.palette.grey[200]})`, '& p': { - fontStyle: 'italic', - fontSize: theme.typography.pxToRem(13), + fontSize: theme.typography.pxToRem(12.5), fontFamily: lightTheme.typography.fontFamilyCode, fontWeight: lightTheme.typography.fontWeightMedium, + lineHeight: theme.typography.pxToRem(24), textIndent: 20, }, '&::before': { position: 'absolute', - content: 'open-quote', + // eslint-disable-next-line material-ui/straight-quotes + content: '"“"', color: `var(--muidocs-palette-grey-300, ${lightTheme.palette.grey[300]})`, fontSize: '2.5rem', top: 8, @@ -456,8 +458,8 @@ const Root = styled('div')( height: 26, cursor: 'pointer', position: 'absolute', - top: theme.spacing(1), - right: 20, + top: theme.spacing(1.5), + right: 12, padding: theme.spacing(0.5), fontFamily: 'inherit', fontWeight: 500, From c9ffe8453965ecdaa887d8670985101ff2d7b846 Mon Sep 17 00:00:00 2001 From: Andrej <44305048+aacevski@users.noreply.github.com> Date: Thu, 28 Dec 2023 15:12:56 +0100 Subject: [PATCH 05/26] [material-ui][docs] Adding autoFocus on Virtual Popover (#40239) --- docs/data/material/components/popover/VirtualElementPopover.js | 1 + docs/data/material/components/popover/VirtualElementPopover.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/data/material/components/popover/VirtualElementPopover.js b/docs/data/material/components/popover/VirtualElementPopover.js index e23439e684ba40..afec24bcba3a58 100644 --- a/docs/data/material/components/popover/VirtualElementPopover.js +++ b/docs/data/material/components/popover/VirtualElementPopover.js @@ -48,6 +48,7 @@ export default function VirtualElementPopover() { anchorEl={anchorEl} anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }} onClose={handleClose} + disableAutoFocus > The content of the Popover. diff --git a/docs/data/material/components/popover/VirtualElementPopover.tsx b/docs/data/material/components/popover/VirtualElementPopover.tsx index 4bbb773036aa65..61a483445def78 100644 --- a/docs/data/material/components/popover/VirtualElementPopover.tsx +++ b/docs/data/material/components/popover/VirtualElementPopover.tsx @@ -48,6 +48,7 @@ export default function VirtualElementPopover() { anchorEl={anchorEl} anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }} onClose={handleClose} + disableAutoFocus > The content of the Popover. From 9ce07b22e4829776dcd10096d5d1150a76c6b7f0 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Thu, 28 Dec 2023 17:32:44 +0100 Subject: [PATCH 06/26] [docs][joy-ui] Fix dashboard template console errors (#40316) --- .../order-dashboard/components/OrderTable.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/data/joy/getting-started/templates/order-dashboard/components/OrderTable.tsx b/docs/data/joy/getting-started/templates/order-dashboard/components/OrderTable.tsx index 260f57eff506e0..d01260b9fcd5d2 100644 --- a/docs/data/joy/getting-started/templates/order-dashboard/components/OrderTable.tsx +++ b/docs/data/joy/getting-started/templates/order-dashboard/components/OrderTable.tsx @@ -127,7 +127,7 @@ const rows = [ }, }, { - id: 'INV-1234', + id: 'INV-1225', date: 'Feb 3, 2023', status: 'Paid', customer: { @@ -137,7 +137,7 @@ const rows = [ }, }, { - id: 'INV-1233', + id: 'INV-1224', date: 'Feb 3, 2023', status: 'Cancelled', customer: { @@ -147,7 +147,7 @@ const rows = [ }, }, { - id: 'INV-1232', + id: 'INV-1223', date: 'Feb 3, 2023', status: 'Paid', customer: { @@ -157,7 +157,7 @@ const rows = [ }, }, { - id: 'INV-1231', + id: 'INV-1221', date: 'Feb 3, 2023', status: 'Refunded', customer: { @@ -167,7 +167,7 @@ const rows = [ }, }, { - id: 'INV-1230', + id: 'INV-1220', date: 'Feb 3, 2023', status: 'Paid', customer: { @@ -177,7 +177,7 @@ const rows = [ }, }, { - id: 'INV-1229', + id: 'INV-1219', date: 'Feb 3, 2023', status: 'Cancelled', customer: { @@ -187,7 +187,7 @@ const rows = [ }, }, { - id: 'INV-1228', + id: 'INV-1218', date: 'Feb 3, 2023', status: 'Cancelled', customer: { @@ -197,7 +197,7 @@ const rows = [ }, }, { - id: 'INV-1227', + id: 'INV-1217', date: 'Feb 3, 2023', status: 'Paid', customer: { @@ -207,7 +207,7 @@ const rows = [ }, }, { - id: 'INV-1226', + id: 'INV-1216', date: 'Feb 3, 2023', status: 'Cancelled', customer: { From e13f5d04c7fa6bbea7196eda204f377037c28d00 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Dec 2023 00:56:49 +0800 Subject: [PATCH 07/26] Bump @types/react to v18.2.45 (#40146) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Albert Yu --- apps/zero-runtime-next-app/package.json | 2 +- docs/package.json | 2 +- docs/pages/base-ui/api/number-input.json | 1 + .../api-docs-base/number-input/number-input.json | 3 +++ package.json | 4 ++-- packages/mui-base/package.json | 2 +- .../mui-base/src/Unstable_NumberInput/NumberInput.tsx | 2 +- .../src/Unstable_NumberInput/NumberInput.types.ts | 4 ++++ packages/mui-docs/package.json | 2 +- packages/mui-icons-material/package.json | 2 +- packages/mui-joy/package.json | 2 +- packages/mui-lab/package.json | 2 +- packages/mui-material-next/package.json | 2 +- packages/mui-material/package.json | 2 +- packages/mui-private-theming/package.json | 2 +- packages/mui-styled-engine-sc/package.json | 2 +- packages/mui-styled-engine/package.json | 2 +- packages/mui-styles/package.json | 2 +- packages/mui-system/package.json | 2 +- packages/mui-types/package.json | 2 +- packages/mui-utils/package.json | 2 +- packages/test-utils/package.json | 2 +- packages/typescript-to-proptypes/package.json | 2 +- packages/zero-runtime/package.json | 2 +- test/package.json | 2 +- yarn.lock | 8 ++++---- 26 files changed, 35 insertions(+), 27 deletions(-) diff --git a/apps/zero-runtime-next-app/package.json b/apps/zero-runtime-next-app/package.json index d9eb1aadbc9be2..20bdb49e6cecb6 100644 --- a/apps/zero-runtime-next-app/package.json +++ b/apps/zero-runtime-next-app/package.json @@ -21,7 +21,7 @@ "@mui/zero-tag-processor": "file:../../packages/zero-tag-processor/build", "@mui/zero-next-plugin": "file:../../packages/zero-next-plugin/build", "@types/node": "20.5.7", - "@types/react": "18.2.42", + "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "typescript": "5.3.3" }, diff --git a/docs/package.json b/docs/package.json index 9918557f1b6852..c5964f5d87c8c3 100644 --- a/docs/package.json +++ b/docs/package.json @@ -127,7 +127,7 @@ "@types/markdown-to-jsx": "^7.0.1", "@types/node": "^18.19.3", "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/react-swipeable-views": "^0.13.5", "@types/react-swipeable-views-utils": "^0.13.7", diff --git a/docs/pages/base-ui/api/number-input.json b/docs/pages/base-ui/api/number-input.json index ac856eef9e3d4f..57c23aa80a9c11 100644 --- a/docs/pages/base-ui/api/number-input.json +++ b/docs/pages/base-ui/api/number-input.json @@ -21,6 +21,7 @@ "describedArgs": ["event"] } }, + "placeholder": { "type": { "name": "string" } }, "readOnly": { "type": { "name": "bool" }, "default": "false" }, "required": { "type": { "name": "bool" } }, "shiftMultiplier": { "type": { "name": "number" } }, diff --git a/docs/translations/api-docs-base/number-input/number-input.json b/docs/translations/api-docs-base/number-input/number-input.json index 98c65edbc30a52..1725e40473eb89 100644 --- a/docs/translations/api-docs-base/number-input/number-input.json +++ b/docs/translations/api-docs-base/number-input/number-input.json @@ -25,6 +25,9 @@ "description": "Callback fired when the input value changes after each keypress, before clamping is applied. Note that event.target.value may contain values that fall outside of min and max or are otherwise "invalid".", "typeDescriptions": { "event": "The event source of the callback." } }, + "placeholder": { + "description": "The short hint displayed in the input before the user enters a value." + }, "readOnly": { "description": "If true, the input element becomes read-only. The stepper buttons remain active, with the addition that they are now keyboard focusable." }, diff --git a/package.json b/package.json index ed7c7fef915fc0..5194c096e3f3e2 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "@types/mocha": "^10.0.6", "@types/node": "^18.19.3", "@types/prettier": "^2.7.3", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/yargs": "^17.0.32", "@typescript-eslint/eslint-plugin": "^6.13.2", "@typescript-eslint/parser": "^6.13.2", @@ -188,7 +188,7 @@ "**/@definitelytyped/typescript-versions": "^0.0.182", "**/@definitelytyped/utils": "^0.0.188", "**/@types/node": "^18.19.3", - "**/@types/react": "^18.2.42", + "**/@types/react": "^18.2.45", "**/cross-fetch": "^4.0.0" }, "nyc": { diff --git a/packages/mui-base/package.json b/packages/mui-base/package.json index a6d80150c05632..976d50543bf868 100644 --- a/packages/mui-base/package.json +++ b/packages/mui-base/package.json @@ -57,7 +57,7 @@ "@testing-library/user-event": "^14.5.1", "@types/chai": "^4.3.11", "@types/prop-types": "^15.7.11", - "@types/react": "18.2.42", + "@types/react": "18.2.45", "@types/react-dom": "18.2.18", "@types/sinon": "^10.0.20", "chai": "^4.3.10", diff --git a/packages/mui-base/src/Unstable_NumberInput/NumberInput.tsx b/packages/mui-base/src/Unstable_NumberInput/NumberInput.tsx index ef9e0839b2bea2..d45f5f434a9cac 100644 --- a/packages/mui-base/src/Unstable_NumberInput/NumberInput.tsx +++ b/packages/mui-base/src/Unstable_NumberInput/NumberInput.tsx @@ -256,7 +256,7 @@ NumberInput.propTypes /* remove-proptypes */ = { */ onInputChange: PropTypes.func, /** - * @ignore + * The short hint displayed in the `input` before the user enters a value. */ placeholder: PropTypes.string, /** diff --git a/packages/mui-base/src/Unstable_NumberInput/NumberInput.types.ts b/packages/mui-base/src/Unstable_NumberInput/NumberInput.types.ts index aff1a68188cba9..198356e8da45c4 100644 --- a/packages/mui-base/src/Unstable_NumberInput/NumberInput.types.ts +++ b/packages/mui-base/src/Unstable_NumberInput/NumberInput.types.ts @@ -25,6 +25,10 @@ export type NumberInputOwnProps = Omit & { * The id of the `input` element. */ id?: string; + /** + * The short hint displayed in the `input` before the user enters a value. + */ + placeholder?: React.InputHTMLAttributes['placeholder']; /** * The props used for each slot inside the NumberInput. * @default {} diff --git a/packages/mui-docs/package.json b/packages/mui-docs/package.json index c8c6ffd35d2b85..2aff22f95fc56f 100644 --- a/packages/mui-docs/package.json +++ b/packages/mui-docs/package.json @@ -41,7 +41,7 @@ "prop-types": "^15.8.1" }, "devDependencies": { - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "react": "^18.2.0" }, "peerDependencies": { diff --git a/packages/mui-icons-material/package.json b/packages/mui-icons-material/package.json index 5dd1e8b34fdd84..dbaedc63eacdf5 100644 --- a/packages/mui-icons-material/package.json +++ b/packages/mui-icons-material/package.json @@ -51,7 +51,7 @@ "devDependencies": { "@mui/internal-waterfall": "^1.0.0", "@types/chai": "^4.3.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "chai": "^4.3.10", "chalk": "^5.3.0", "cross-fetch": "^4.0.0", diff --git a/packages/mui-joy/package.json b/packages/mui-joy/package.json index aef5eff9d90671..9d828f68c0839d 100644 --- a/packages/mui-joy/package.json +++ b/packages/mui-joy/package.json @@ -52,7 +52,7 @@ "@mui/material": "^5.15.2", "@types/chai": "^4.3.11", "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/sinon": "^10.0.20", "chai": "^4.3.10", diff --git a/packages/mui-lab/package.json b/packages/mui-lab/package.json index 82f2235c8702d4..43c2205b1feda7 100644 --- a/packages/mui-lab/package.json +++ b/packages/mui-lab/package.json @@ -53,7 +53,7 @@ "@mui-internal/test-utils": "^1.0.0", "@types/chai": "^4.3.11", "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/sinon": "^10.0.20", "chai": "^4.3.10", diff --git a/packages/mui-material-next/package.json b/packages/mui-material-next/package.json index c8243b56fba9fa..3e5b3dcd893fa3 100644 --- a/packages/mui-material-next/package.json +++ b/packages/mui-material-next/package.json @@ -57,7 +57,7 @@ "@testing-library/user-event": "^14.5.1", "@types/chai": "^4.3.11", "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/sinon": "^10.0.20", "chai": "^4.3.10", diff --git a/packages/mui-material/package.json b/packages/mui-material/package.json index dbaf54da1693ae..770af9b4ee8fd5 100644 --- a/packages/mui-material/package.json +++ b/packages/mui-material/package.json @@ -67,7 +67,7 @@ "@testing-library/user-event": "^14.5.1", "@types/chai": "^4.3.11", "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/sinon": "^10.0.20", "chai": "^4.3.10", diff --git a/packages/mui-private-theming/package.json b/packages/mui-private-theming/package.json index 0d3b5b9df693ec..d971c8caff55bb 100644 --- a/packages/mui-private-theming/package.json +++ b/packages/mui-private-theming/package.json @@ -48,7 +48,7 @@ "@mui/styles": "^5.15.2", "@mui/types": "^7.2.11", "@types/chai": "^4.3.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "chai": "^4.3.10", "react": "^18.2.0" }, diff --git a/packages/mui-styled-engine-sc/package.json b/packages/mui-styled-engine-sc/package.json index 6c8d2091417a75..0c30e5ddfd7ef7 100644 --- a/packages/mui-styled-engine-sc/package.json +++ b/packages/mui-styled-engine-sc/package.json @@ -47,7 +47,7 @@ "@mui-internal/test-utils": "^1.0.0", "@types/chai": "^4.3.11", "@types/hoist-non-react-statics": "^3.3.5", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "chai": "^4.3.10", "react": "^18.2.0", "styled-components": "^6.1.3" diff --git a/packages/mui-styled-engine/package.json b/packages/mui-styled-engine/package.json index a41c6e275bd1bc..1194dff9f7a8c4 100644 --- a/packages/mui-styled-engine/package.json +++ b/packages/mui-styled-engine/package.json @@ -48,7 +48,7 @@ "@emotion/styled": "^11.11.0", "@mui-internal/test-utils": "^1.0.0", "@types/chai": "^4.3.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "chai": "^4.3.10", "react": "^18.2.0" }, diff --git a/packages/mui-styles/package.json b/packages/mui-styles/package.json index 68ad60ae00e30c..c4832d797e4a72 100644 --- a/packages/mui-styles/package.json +++ b/packages/mui-styles/package.json @@ -61,7 +61,7 @@ "@mui/joy": "5.0.0-beta.20", "@mui/material": "^5.15.2", "@types/chai": "^4.3.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/sinon": "^10.0.20", "chai": "^4.3.10", diff --git a/packages/mui-system/package.json b/packages/mui-system/package.json index e3104b5f81dd17..3d443af26d7a19 100644 --- a/packages/mui-system/package.json +++ b/packages/mui-system/package.json @@ -59,7 +59,7 @@ "@mui/material-next": "6.0.0-alpha.115", "@types/chai": "^4.3.11", "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/sinon": "^10.0.20", "chai": "^4.3.10", "fast-glob": "^3.3.2", diff --git a/packages/mui-types/package.json b/packages/mui-types/package.json index 37f9d8b095e028..1e4425bb43fc4e 100644 --- a/packages/mui-types/package.json +++ b/packages/mui-types/package.json @@ -38,7 +38,7 @@ "access": "public" }, "devDependencies": { - "@types/react": "^18.2.42" + "@types/react": "^18.2.45" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" diff --git a/packages/mui-utils/package.json b/packages/mui-utils/package.json index 8509617848e226..5f175bd6a0b6da 100644 --- a/packages/mui-utils/package.json +++ b/packages/mui-utils/package.json @@ -51,7 +51,7 @@ "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", "@types/node": "^18.19.3", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/react-is": "^18.2.4", "@types/sinon": "^10.0.20", diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 1fdfbc22ea5fd0..8ee16a72a4a262 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -46,7 +46,7 @@ "@types/enzyme": "^3.10.18", "@types/format-util": "^1.0.4", "@types/prop-types": "^15.7.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/react-dom": "^18.2.18", "@types/react-test-renderer": "^18.0.7", "@types/sinon": "^10.0.20", diff --git a/packages/typescript-to-proptypes/package.json b/packages/typescript-to-proptypes/package.json index b7612d1b9660db..4e1b174d4a6b1b 100644 --- a/packages/typescript-to-proptypes/package.json +++ b/packages/typescript-to-proptypes/package.json @@ -40,7 +40,7 @@ "@types/lodash": "^4.14.202", "@types/node": "^18.19.3", "@types/prettier": "^2.7.3", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "@types/uuid": "^9.0.7", "chai": "^4.3.10", "fast-glob": "^3.3.2", diff --git a/packages/zero-runtime/package.json b/packages/zero-runtime/package.json index 130d23df939f15..a143a2c4b2ae4d 100644 --- a/packages/zero-runtime/package.json +++ b/packages/zero-runtime/package.json @@ -46,7 +46,7 @@ "@types/chai": "^4.3.11", "@types/mocha": "^10.0.6", "@types/node": "^18.19.3", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "react": "^18.2.0" }, "peerDependencies": { diff --git a/test/package.json b/test/package.json index 06515bb64974f7..4f34bba97c5a3c 100644 --- a/test/package.json +++ b/test/package.json @@ -20,7 +20,7 @@ "@playwright/test": "1.40.1", "@testing-library/dom": "^9.3.3", "@types/chai": "^4.3.11", - "@types/react": "^18.2.42", + "@types/react": "^18.2.45", "chai": "^4.3.10", "docs": "^5.0.0", "fast-glob": "^3.3.2", diff --git a/yarn.lock b/yarn.lock index 17fa1d89f45911..03316f84ea5c9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4033,10 +4033,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.2.42", "@types/react@^16", "@types/react@^18.2.42": - version "18.2.42" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.42.tgz#6f6b11a904f6d96dda3c2920328a97011a00aba7" - integrity sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA== +"@types/react@*", "@types/react@18.2.45", "@types/react@^16", "@types/react@^18.2.45": + version "18.2.45" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.45.tgz#253f4fac288e7e751ab3dc542000fb687422c15c" + integrity sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" From cb3d718e075abc81035837798eeb75b433673db5 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Thu, 28 Dec 2023 18:11:40 +0100 Subject: [PATCH 08/26] [material-ui][docs] Polish the Next.js integration page (#40317) Signed-off-by: Olivier Tassinari Co-authored-by: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> --- docs/data/material/guides/nextjs/nextjs.md | 23 +++++++++++++++------- docs/data/material/pages.ts | 2 +- docs/translations/translations.json | 2 +- packages/mui-material-nextjs/README.md | 2 +- packages/mui-material-nextjs/package.json | 7 +++---- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/docs/data/material/guides/nextjs/nextjs.md b/docs/data/material/guides/nextjs/nextjs.md index 4be2f9de562051..08ff785fc1b687 100644 --- a/docs/data/material/guides/nextjs/nextjs.md +++ b/docs/data/material/guides/nextjs/nextjs.md @@ -1,4 +1,4 @@ -# Next.js Integration +# Next.js integration

Learn how to use Material UI with Next.js

@@ -32,8 +32,8 @@ pnpm add @mui/material-nextjs @emotion/cache Inside `app/layout.tsx`, import the `AppRouterCacheProvider` and wrap all elements under the `` with it: ```diff - // app/layout.tsx -+ import { AppRouterCacheProvider } from '@mui/material-nextjs/v13-appRouter'; // or `v14-appRouter` if you are using Next.js v14 ++import { AppRouterCacheProvider } from '@mui/material-nextjs/v13-appRouter'; + // or `v1X-appRouter` if you are using Next.js v1X export default function RootLayout(props) { const { children } = props; @@ -92,7 +92,11 @@ Inside the `pages/_document.tsx` file: - Import `DocumentHeadTags` and render it inside the ``. ```diff -+ import { DocumentHeadTags, documentGetInitialProps } from '@mui/material-nextjs/v13-pagesRouter'; // or `v14-pagesRouter` if you are using Next.js v14 ++import { ++ DocumentHeadTags, ++ documentGetInitialProps, ++} from '@mui/material-nextjs/v13-pagesRouter'; + // or `v1X-pagesRouter` if you are using Next.js v1X export default function MyDocument(props) { return ( @@ -109,13 +113,17 @@ Inside the `pages/_document.tsx` file: ); } -+ MyDocument.getInitialProps = documentGetInitialProps; ++MyDocument.getInitialProps = async (ctx) => { ++ const finalProps = await documentGetInitialProps(ctx); ++ return finalProps; ++}; ``` Then, inside `pages/_app.tsx`, import the `AppCacheProvider` component and render it as the root element: ```diff -+ import { AppCacheProvider } from '@mui/material-nextjs/v13-pagesRouter'; // or `v14-pages` if you are using Next.js v14 ++import { AppCacheProvider } from '@mui/material-nextjs/v13-pagesRouter'; + // Or `v1X-pages` if you are using Next.js v1X export default function MyApp(props) { return ( @@ -134,7 +142,8 @@ Then, inside `pages/_app.tsx`, import the `AppCacheProvider` component and rende If you are using TypeScript, add `DocumentHeadTagsProps` to the Document's props interface: ```diff -+ import type { DocumentHeadTagsProps } from '@mui/material-nextjs/v13-pagesRouter'; // or `v14-pagesRouter` if you are using Next.js v14 ++ import type { DocumentHeadTagsProps } from '@mui/material-nextjs/v13-pagesRouter'; + // or `v1X-pagesRouter` if you are using Next.js v1X + export default function MyDocument(props: DocumentProps & DocumentHeadTagsProps) { ... diff --git a/docs/data/material/pages.ts b/docs/data/material/pages.ts index 875fbab2b1326f..27d0a7d8e529a9 100644 --- a/docs/data/material/pages.ts +++ b/docs/data/material/pages.ts @@ -207,7 +207,7 @@ const pages: MuiPage[] = [ { pathname: '/material-ui/guides/shadow-dom', title: 'Shadow DOM' }, { pathname: '/material-ui/guides/nextjs', - title: 'Next.js Integration', + title: 'Next.js integration', newFeature: true, }, ], diff --git a/docs/translations/translations.json b/docs/translations/translations.json index d6eddef54c54a5..78d4af9c9f37de 100644 --- a/docs/translations/translations.json +++ b/docs/translations/translations.json @@ -454,7 +454,7 @@ "/material-ui/guides/content-security-policy": "Content Security Policy", "/material-ui/guides/right-to-left": "Right-to-left", "/material-ui/guides/shadow-dom": "Shadow DOM", - "/material-ui/guides/nextjs": "Next.js Integration", + "/material-ui/guides/nextjs": "Next.js integration", "/material-ui/experimental-api": "Experimental APIs", "/material-ui/experimental-api/classname-generator": "ClassName generator", "CSS theme variables": "CSS theme variables", diff --git a/packages/mui-material-nextjs/README.md b/packages/mui-material-nextjs/README.md index ee45a2d4e62360..602c842532ec9f 100644 --- a/packages/mui-material-nextjs/README.md +++ b/packages/mui-material-nextjs/README.md @@ -1,3 +1,3 @@ # @mui/material-nextjs -The official integration of Material-UI with Next.js. For full documentation, visit [Next.js Integration](material-ui/guides/nextjs/) page. +The official Material UI integration with Next.js. For the full documentation, visit [Next.js integration](https://mui.com/material-ui/guides/nextjs/) page. diff --git a/packages/mui-material-nextjs/package.json b/packages/mui-material-nextjs/package.json index e75425a90b07a8..c0487898537da6 100644 --- a/packages/mui-material-nextjs/package.json +++ b/packages/mui-material-nextjs/package.json @@ -6,9 +6,8 @@ "description": "Collection of utilities for integration between Material UI and Next.js.", "keywords": [ "react", - "react-component", - "mui", - "utils" + "next", + "material-ui" ], "repository": { "type": "git", @@ -19,7 +18,7 @@ "bugs": { "url": "https://github.com/mui/material-ui/issues" }, - "homepage": "private package", + "homepage": "https://mui.com/material-ui/guides/nextjs/", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" From bf891feebee5473be8ee2795878950f186dd75d7 Mon Sep 17 00:00:00 2001 From: Diego Andai Date: Fri, 29 Dec 2023 10:47:23 -0300 Subject: [PATCH 09/26] [material-next][theme] Move ref palette out of color schemes (#40341) --- docs/pages/experiments/md3/buttons.tsx | 13 ++----------- .../mui-material-next/src/styles/Theme.types.ts | 4 +--- .../mui-material-next/src/styles/extendTheme.ts | 4 ++-- 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/docs/pages/experiments/md3/buttons.tsx b/docs/pages/experiments/md3/buttons.tsx index 8128c2de82628e..2ccfc177c59306 100644 --- a/docs/pages/experiments/md3/buttons.tsx +++ b/docs/pages/experiments/md3/buttons.tsx @@ -201,17 +201,8 @@ function DemoComponents() { // custom MD3 theme const cssVarsTheme = extendTheme({ - colorSchemes: { - light: { - ref: { - palette: customPalette, - }, - }, - dark: { - ref: { - palette: customPalette, - }, - }, + ref: { + palette: customPalette, }, }); diff --git a/packages/mui-material-next/src/styles/Theme.types.ts b/packages/mui-material-next/src/styles/Theme.types.ts index 50b9e6ff480c90..f79e033251b433 100644 --- a/packages/mui-material-next/src/styles/Theme.types.ts +++ b/packages/mui-material-next/src/styles/Theme.types.ts @@ -239,6 +239,7 @@ export interface Motion { export interface MD3CssVarsThemeOptions extends Omit { ref?: { typeface?: Partial; + palette?: Partial; }; sys?: { typescale?: Partial; @@ -250,9 +251,6 @@ export interface MD3CssVarsThemeOptions extends Omit; - }; sys?: { color?: Partial; elevation?: string[]; diff --git a/packages/mui-material-next/src/styles/extendTheme.ts b/packages/mui-material-next/src/styles/extendTheme.ts index 861ba9150d1d56..790ce6a791c4a4 100644 --- a/packages/mui-material-next/src/styles/extendTheme.ts +++ b/packages/mui-material-next/src/styles/extendTheme.ts @@ -90,7 +90,7 @@ export default function extendTheme(options: CssVarsThemeOptions = {}, ...args: ref: { ...input.ref, typeface, - palette: deepmerge(md3CommonPalette, colorSchemesInput.light?.ref?.palette), + palette: deepmerge(md3CommonPalette, input.ref?.palette), }, sys: { ...input.sys, @@ -121,7 +121,7 @@ export default function extendTheme(options: CssVarsThemeOptions = {}, ...args: ref: { ...input.ref, typeface, - palette: deepmerge(md3CommonPalette, colorSchemesInput.dark?.ref?.palette), + palette: deepmerge(md3CommonPalette, input.ref?.palette), }, sys: { ...input.sys, From 0d376635ac6754ed87a9550a0d383ff9eb507b0a Mon Sep 17 00:00:00 2001 From: Diego Andai Date: Sat, 30 Dec 2023 02:11:22 -0300 Subject: [PATCH 10/26] [material-next] Update CONTRIBUTING guide given v6/v7 rescheduling (#40363) --- packages/mui-material-next/CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/mui-material-next/CONTRIBUTING.md b/packages/mui-material-next/CONTRIBUTING.md index 75573598bf0aee..8876baeb7022fa 100644 --- a/packages/mui-material-next/CONTRIBUTING.md +++ b/packages/mui-material-next/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing -The Material You components are targeted for v6, so they will be developed on the `material-next` package. +The Material You components are targeted for v7, so they will be developed on the `material-next` package. The progress for each component will be tracked in a separate GitHub issue. If you wish to contribute to the migration go to a component's linked issue to see what tasks are missing (see progress tracker [here](https://github.com/mui/material-ui/issues/29345)). @@ -8,7 +8,7 @@ If the issue doesn't exist, create it, name it `[][material-next] ## Steps -1. Copy component files from `material` (v5) to `material-next`, including tests, types, and utils. Keep in mind to: +1. Copy component files from `material` to `material-next`, including tests, types, and utils. Keep in mind to: - Add component export to `packages/mui-material-next/src/index.ts` - Change imports from `@mui/material` to `@mui/material-next` - If there are utils that don't exist in `material-next`, add them by copying from `material` @@ -18,8 +18,8 @@ If the issue doesn't exist, create it, name it `[][material-next] 4. Drop support for `ThemeProvider` in favor of `CssVarsProvider`. In practice, this means: - Consuming tokens from `theme.vars` instead of `theme` - In tests, using `CssVarsProvider` and `extendTheme` (both imported from `@mui/material-next/styles`) instead of `ThemeProvider` and `createTheme`, as well as providing the same `CssVarsProvier` and `extendTheme` to `describeConformance`'s `ThemeProvider` and `createTheme` options. -5. Implement Material You design specs. Add missing tokens if necessary. Use [material-web tokens](https://github.com/material-components/material-web/tree/main/tokens/v0_172) as a reference for token values -6. Add component playground to v5 docs, take the [Slider playground](https://mui.com/material-ui/react-slider/#material-you-version) as an example +5. Implement Material You design specs. Add missing tokens if necessary. Use [material-web tokens](https://github.com/material-components/material-web/tree/main/tokens) as a reference for token values +6. Add component playground to the docs, take the [Slider playground](https://mui.com/material-ui/react-slider/#material-you-version) as an example 7. Refactor styles to use component CSS Variables, following [material-web tokens](https://github.com/material-components/material-web/tree/main/tokens) and Joy UI's equivalent component (if it exists) as guides. ## Other things to keep in mind From 4079e098f34ecff8622bce6bd0668d4bdbb48dbb Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 30 Dec 2023 23:42:24 +0100 Subject: [PATCH 11/26] [website] Shorten Joy UI description, 7 chars too long --- docs/data/joy/getting-started/overview/overview.md | 2 +- packages/mui-joy/README.md | 2 +- packages/mui-joy/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/data/joy/getting-started/overview/overview.md b/docs/data/joy/getting-started/overview/overview.md index 29c3c086d13e97..69d42a02282cc3 100644 --- a/docs/data/joy/getting-started/overview/overview.md +++ b/docs/data/joy/getting-started/overview/overview.md @@ -4,7 +4,7 @@ title: Overview # Joy UI - Overview -

Joy UI is an open-source React component library that implements MUI's own in-house design principles. It's comprehensive and can be used in production out of the box.

+

Joy UI is an open-source React component library that implements MUI's own design principles. It's comprehensive and can be used in production out of the box.

## Introduction diff --git a/packages/mui-joy/README.md b/packages/mui-joy/README.md index 0b252f6d948316..023f2c85fec6ae 100644 --- a/packages/mui-joy/README.md +++ b/packages/mui-joy/README.md @@ -5,7 +5,7 @@

Joy UI

-Joy UI is an open-source React component library that implements MUI's own in-house design principles. It's comprehensive and can be used in production out of the box. +Joy UI is an open-source React component library that implements MUI's own design principles. It's comprehensive and can be used in production out of the box. ## Installation diff --git a/packages/mui-joy/package.json b/packages/mui-joy/package.json index 9d828f68c0839d..c7456320f55dd4 100644 --- a/packages/mui-joy/package.json +++ b/packages/mui-joy/package.json @@ -3,7 +3,7 @@ "version": "5.0.0-beta.20", "private": false, "author": "MUI Team", - "description": "Joy UI is an open-source React component library that implements MUI's own in-house design principles. It's comprehensive and can be used in production out of the box.", + "description": "Joy UI is an open-source React component library that implements MUI's own design principles. It's comprehensive and can be used in production out of the box.", "main": "./src/index.ts", "keywords": [ "react", From e8aa796b6b1e0fbe25a06239586e2a9eaadfc887 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sun, 31 Dec 2023 00:56:57 +0100 Subject: [PATCH 12/26] [website] Fix outdated Nhost image link --- docs/pages/blog.tsx | 4 ++- .../branding/base-ui/headless-ui-dark.svg | 30 +----------------- .../static/branding/base-ui/headless-ui.svg | 30 +----------------- .../static/branding/base-ui/nhost-2x.jpg | Bin 49894 -> 0 bytes .../static/branding/base-ui/nhost-dark.svg | 1 + .../static/branding/base-ui/nhost-light.svg | 1 + .../branding/base-ui/nhost-screenshot-2x.png | Bin 0 -> 146660 bytes .../branding/base-ui/nhost-screenshot.png | Bin 0 -> 24360 bytes docs/public/static/branding/base-ui/nhost.jpg | Bin 29344 -> 0 bytes .../static/branding/base-ui/radix-dark.svg | 22 +------------ docs/public/static/branding/base-ui/radix.svg | 22 +------------ .../branding/base-ui/react-aria-dark.svg | 16 +--------- .../static/branding/base-ui/react-aria.svg | 16 +--------- .../productBaseUI/BaseUITestimonial.tsx | 11 ++++--- docs/src/modules/components/TopLayoutBlog.js | 12 ++++--- 15 files changed, 25 insertions(+), 140 deletions(-) delete mode 100644 docs/public/static/branding/base-ui/nhost-2x.jpg create mode 100644 docs/public/static/branding/base-ui/nhost-dark.svg create mode 100644 docs/public/static/branding/base-ui/nhost-light.svg create mode 100644 docs/public/static/branding/base-ui/nhost-screenshot-2x.png create mode 100644 docs/public/static/branding/base-ui/nhost-screenshot.png delete mode 100644 docs/public/static/branding/base-ui/nhost.jpg diff --git a/docs/pages/blog.tsx b/docs/pages/blog.tsx index 0559003ad6c40f..65f3bd3718eb3c 100644 --- a/docs/pages/blog.tsx +++ b/docs/pages/blog.tsx @@ -127,8 +127,10 @@ function PostPreview(props: BlogPost) { ))} diff --git a/docs/public/static/branding/base-ui/headless-ui-dark.svg b/docs/public/static/branding/base-ui/headless-ui-dark.svg index c1ce8dd253ac64..8a1805ef83de4b 100644 --- a/docs/public/static/branding/base-ui/headless-ui-dark.svg +++ b/docs/public/static/branding/base-ui/headless-ui-dark.svg @@ -1,29 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/public/static/branding/base-ui/headless-ui.svg b/docs/public/static/branding/base-ui/headless-ui.svg index 8bb22cbb239e82..d3d46d34774eb8 100644 --- a/docs/public/static/branding/base-ui/headless-ui.svg +++ b/docs/public/static/branding/base-ui/headless-ui.svg @@ -1,29 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/public/static/branding/base-ui/nhost-2x.jpg b/docs/public/static/branding/base-ui/nhost-2x.jpg deleted file mode 100644 index 213722ec01957d81f7bfb3f711b6e2194b80b064..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49894 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 Rmz_w4jT+l@9Si)K`5&4*`pp0U diff --git a/docs/public/static/branding/base-ui/nhost-dark.svg b/docs/public/static/branding/base-ui/nhost-dark.svg new file mode 100644 index 00000000000000..b19eaa8a4ee651 --- /dev/null +++ b/docs/public/static/branding/base-ui/nhost-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/static/branding/base-ui/nhost-light.svg b/docs/public/static/branding/base-ui/nhost-light.svg new file mode 100644 index 00000000000000..8840bda6a0f3b6 --- /dev/null +++ b/docs/public/static/branding/base-ui/nhost-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/public/static/branding/base-ui/nhost-screenshot-2x.png b/docs/public/static/branding/base-ui/nhost-screenshot-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d296db67c6abd4a3ddd6a9cabc2c62bb389bec GIT binary patch literal 146660 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

RJ8v`6=#+1&tRYVTC2wL-8GLHu;YWg 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 literal 0 HcmV?d00001 diff --git a/docs/public/static/branding/base-ui/nhost-screenshot.png b/docs/public/static/branding/base-ui/nhost-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b296f1f7804f8f3a48a8f67c432da4b79f8f2a GIT binary patch literal 24360 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 DgP>_B literal 0 HcmV?d00001 diff --git a/docs/public/static/branding/base-ui/nhost.jpg b/docs/public/static/branding/base-ui/nhost.jpg deleted file mode 100644 index e9fc65018deee475821d879db308812ed113788b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29344 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 ylQJZfiTJ~@vB{i@Fnp?76xp4-$%Q - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/public/static/branding/base-ui/radix.svg b/docs/public/static/branding/base-ui/radix.svg index 082a5c84c6cde9..78940fb00133d2 100644 --- a/docs/public/static/branding/base-ui/radix.svg +++ b/docs/public/static/branding/base-ui/radix.svg @@ -1,21 +1 @@ - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/public/static/branding/base-ui/react-aria-dark.svg b/docs/public/static/branding/base-ui/react-aria-dark.svg index 0b9f6d55fcca35..821788ee6fe1d2 100644 --- a/docs/public/static/branding/base-ui/react-aria-dark.svg +++ b/docs/public/static/branding/base-ui/react-aria-dark.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/public/static/branding/base-ui/react-aria.svg b/docs/public/static/branding/base-ui/react-aria.svg index 7c4d25147221d8..92faea7de6599c 100644 --- a/docs/public/static/branding/base-ui/react-aria.svg +++ b/docs/public/static/branding/base-ui/react-aria.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/docs/src/components/productBaseUI/BaseUITestimonial.tsx b/docs/src/components/productBaseUI/BaseUITestimonial.tsx index b1e0337061afd5..53f24fca570721 100644 --- a/docs/src/components/productBaseUI/BaseUITestimonial.tsx +++ b/docs/src/components/productBaseUI/BaseUITestimonial.tsx @@ -37,7 +37,8 @@ export default function BaseUITestimonial() { @@ -95,15 +97,16 @@ export default function BaseUITestimonial() { Senior Software Engineer + {/** icons from https://docs.nhost.io/introduction */} ({ width: '80px', alignSelf: 'center', ...theme.applyDarkStyles({ - content: `url(https://nhost.io/common/logo.svg)`, + content: 'url(/static/branding/base-ui/nhost-dark.svg)', }), })} /> diff --git a/docs/src/modules/components/TopLayoutBlog.js b/docs/src/modules/components/TopLayoutBlog.js index 72a91ae9306d0e..062a245627486c 100644 --- a/docs/src/modules/components/TopLayoutBlog.js +++ b/docs/src/modules/components/TopLayoutBlog.js @@ -157,9 +157,9 @@ const Root = styled('div')( '& h1': { marginBottom: theme.spacing(3), }, - '& .markdown-body': { - lineHeight: 1.7, - }, + }, + '& .markdown-body': { + lineHeight: 1.7, '& img, & video': { border: '1px solid', borderColor: (theme.vars || theme).palette.grey[200], @@ -224,7 +224,7 @@ const Root = styled('div')( } 100%)`, backgroundSize: '100% 1000px', backgroundRepeat: 'no-repeat', - [`& .${classes.container}`]: { + '& .markdown-body': { '& strong': { color: (theme.vars || theme).palette.grey[100], }, @@ -372,7 +372,9 @@ export default function TopLayoutBlog(props) { sx={{ width: 36, height: 36 }} alt="" src={`${authors[author].avatar}?s=${36}`} - srcSet={`${authors[author].avatar}?s=${36 * 2} 2x`} + srcSet={`${authors[author].avatar}?s=${36 * 2} 2x, ${ + authors[author].avatar + }?s=${36 * 3} 3x`} />

From 015e8ebd7edcafb6abc5371325ba5da5d31e216a Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sun, 31 Dec 2023 01:38:51 +0100 Subject: [PATCH 13/26] [docs] Fix 301 links to Toolpad --- docs/src/modules/components/AppSearch.js | 2 +- docs/src/route.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/modules/components/AppSearch.js b/docs/src/modules/components/AppSearch.js index acb399b617b2c3..214ad499c7a100 100644 --- a/docs/src/modules/components/AppSearch.js +++ b/docs/src/modules/components/AppSearch.js @@ -207,7 +207,7 @@ function NewStartScreen() { items: [ { name: 'Overview', - href: '/toolpad/getting-started/overview/', + href: '/toolpad/getting-started/', icon: , }, { diff --git a/docs/src/route.ts b/docs/src/route.ts index 8ef6d08284549e..792ff14c1c056c 100644 --- a/docs/src/route.ts +++ b/docs/src/route.ts @@ -49,7 +49,7 @@ const ROUTES = { // Tree View doc pages treeViewOverview: '/x/react-tree-view/', // Toolpad pages - toolpadDocs: '/toolpad/getting-started/overview/', + toolpadDocs: '/toolpad/getting-started/', // External pages rssFeed: '/feed/blog/rss.xml', handbook: 'https://mui-org.notion.site/Handbook-f086d47e10794d5e839aef9dc67f324b', From 48251abb01cac73ee9924feb804286f97c2e45ff Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sun, 31 Dec 2023 02:22:48 +0100 Subject: [PATCH 14/26] [docs] Link new MUI X components in sidnav (#40345) --- docs/data/material/pages.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/data/material/pages.ts b/docs/data/material/pages.ts index 27d0a7d8e529a9..636f3918e8aaca 100644 --- a/docs/data/material/pages.ts +++ b/docs/data/material/pages.ts @@ -134,7 +134,9 @@ const pages: MuiPage[] = [ subheader: 'MUI X', children: [ { pathname: '/x/react-data-grid', title: 'Data Grid' }, - { pathname: '/x/react-date-pickers/getting-started', title: 'Date & Time Pickers' }, + { pathname: '/x/react-date-pickers', title: 'Date & Time Pickers' }, + { pathname: '/x/react-charts' }, + { pathname: '/x/react-tree-view', title: 'Tree View' }, ], }, { From d0979e3d50851b87ba40e59c5288fdd6ca40d02e Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Tue, 2 Jan 2024 11:08:07 +0100 Subject: [PATCH 15/26] [code-infra] Sync bug issue template (#40305) --- .github/ISSUE_TEMPLATE/1.bug.yml | 27 ++++++++------- .github/workflows/issue-cleanup.yml | 52 +++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/issue-cleanup.yml diff --git a/.github/ISSUE_TEMPLATE/1.bug.yml b/.github/ISSUE_TEMPLATE/1.bug.yml index 735c03c27eac5c..ab864bcaa38beb 100644 --- a/.github/ISSUE_TEMPLATE/1.bug.yml +++ b/.github/ISSUE_TEMPLATE/1.bug.yml @@ -8,13 +8,13 @@ body: Please provide a searchable summary of the issue in the title above ⬆️. Thanks for contributing by creating an issue! ❤️ - - type: checkboxes + - type: input attributes: - label: Duplicates - description: Please [search the history](https://github.com/mui/material-ui/issues) to see if an issue already exists for the same problem. - options: - - label: I have searched the existing issues - required: true + label: Search keywords + description: Your issue may have already been reported! List the keywords you've used to search the [existing issues](https://github.com/mui/material-ui/issues). This will also make your issue searchable for others. + placeholder: e.g. tooltip color + validations: + required: true - type: checkboxes attributes: label: Latest version @@ -24,34 +24,33 @@ body: required: true - type: textarea attributes: - label: Steps to reproduce 🕹 + label: Steps to reproduce description: | - **⚠️ Issues that we can't reproduce will be closed.** + **⚠️ Issues that we can't reproduce can't be fixed.** Please provide a link to a live example and an unambiguous set of steps to reproduce this bug. As a starting point, we recommend you browse our [documentation](https://mui.com/material-ui/getting-started/installation/), and [select](https://mui.com/static/docs/forking-an-example.png) the closest example to your use case. Or you can use the [official template](https://mui.com/r/issue-template) to build a reproduction case. value: | - Link to live example: + Link to live example: (required) Steps: - 1. 2. 3. - type: textarea attributes: - label: Current behavior 😯 + label: Current behavior description: Describe what happens instead of the expected behavior. - type: textarea attributes: - label: Expected behavior 🤔 + label: Expected behavior description: Describe what should happen. - type: textarea attributes: - label: Context 🔦 + label: Context description: What are you trying to accomplish? How has this issue affected you? Providing context helps us come up with a solution that is more useful in the real world. - type: textarea attributes: - label: Your environment 🌎 + label: Your environment description: Run `npx @mui/envinfo` and post the results. If you encounter issues with TypeScript please include the used tsconfig. value: |
diff --git a/.github/workflows/issue-cleanup.yml b/.github/workflows/issue-cleanup.yml new file mode 100644 index 00000000000000..dab93c5d505e39 --- /dev/null +++ b/.github/workflows/issue-cleanup.yml @@ -0,0 +1,52 @@ +name: Cleanup issue comment + +on: + issues: + types: + - opened + +permissions: {} + +jobs: + issue_cleanup: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6 + with: + script: | + const issue = await github.rest.issues.get({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }) + + const lines = issue.data.body.split('\n') + + const _ = extractInputSection(lines, 'Latest version') + const searchKeywords = extractInputSection(lines, 'Search keywords') + const orderID = extractInputSection(lines, 'Order ID or Support key') + + lines.push('') + lines.push('**Search keywords**: ' + searchKeywords) + if (orderID !== '' && orderID !== '_No response_') { + lines.push('**Order ID**: ' + orderID) + } + + const body = lines.join('\n') + + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body, + }) + + function extractInputSection(lines, title) { + const index = lines.findIndex(line => line.startsWith('###') && line.includes(title)) + if (index === -1) { + return '' + } + return lines.splice(index, 4)[2].trim() + } From d7108045e4259a45edaaee2b3ccc9de00465254b Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Tue, 2 Jan 2024 13:02:58 +0100 Subject: [PATCH 16/26] [docs-infra] Fix footer links to link to the main domain (#40373) --- docs/src/modules/components/AppLayoutDocsFooter.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/src/modules/components/AppLayoutDocsFooter.js b/docs/src/modules/components/AppLayoutDocsFooter.js index e14c8aee93a801..86e44ba3fc7000 100644 --- a/docs/src/modules/components/AppLayoutDocsFooter.js +++ b/docs/src/modules/components/AppLayoutDocsFooter.js @@ -27,7 +27,6 @@ import RssFeedIcon from '@mui/icons-material/RssFeed'; import ArrowOutwardRoundedIcon from '@mui/icons-material/ArrowOutwardRounded'; import DiscordIcon from 'docs/src/icons/DiscordIcon'; // Other imports -import ROUTES from 'docs/src/route'; import Link from 'docs/src/modules/components/Link'; import PageContext from 'docs/src/modules/components/PageContext'; import EditPage from 'docs/src/modules/components/EditPage'; @@ -542,13 +541,13 @@ export default function AppLayoutDocsFooter(props) { spacing={{ xs: 3, sm: 1 }} > - + - + Blog @@ -556,7 +555,7 @@ export default function AppLayoutDocsFooter(props) { - + Store @@ -566,7 +565,7 @@ export default function AppLayoutDocsFooter(props) { Date: Tue, 2 Jan 2024 13:13:00 +0100 Subject: [PATCH 17/26] [code-infra] Break package dependency cycles (#40398) --- packages/mui-base/package.json | 1 - .../TablePagination/TablePagination.test.tsx | 122 +++++++++--------- packages/mui-material/package.json | 1 - packages/mui-material/src/styles/index.js | 1 + packages/mui-private-theming/package.json | 2 - packages/mui-styles/package.json | 1 - .../src/makeStyles/makeStyles.spec.tsx | 1 - .../mui-styles/test/theme-scoping.test.tsx | 24 ---- packages/mui-system/package.json | 3 - packages/mui-system/src/createTheme/index.js | 1 + .../styleFunctionSx/styleFunctionSx.test.js | 59 --------- .../material-ui}/components.spec.tsx | 0 .../material-ui}/hoc-interop.spec.tsx | 0 .../mui-styles}/defaultTheme.spec.ts | 0 .../mui-styles/theme-scoping.test.tsx | 33 +++++ .../mui-system}/createStyled.test.js | 2 +- .../mui-system/styleFunctionSx.test.js | 67 ++++++++++ .../mui-system}/theme-scoping.test.tsx | 0 test/tsconfig.json | 3 +- 19 files changed, 164 insertions(+), 157 deletions(-) rename {packages/mui-material/test/typescript => test/integration/material-ui}/components.spec.tsx (100%) rename {packages/mui-material/test/typescript => test/integration/material-ui}/hoc-interop.spec.tsx (100%) rename {packages/mui-private-theming/src/defaultTheme => test/integration/mui-styles}/defaultTheme.spec.ts (100%) create mode 100644 test/integration/mui-styles/theme-scoping.test.tsx rename {packages/mui-system/src => test/integration/mui-system}/createStyled.test.js (99%) create mode 100644 test/integration/mui-system/styleFunctionSx.test.js rename {packages/mui-system/test/integration => test/integration/mui-system}/theme-scoping.test.tsx (100%) diff --git a/packages/mui-base/package.json b/packages/mui-base/package.json index 976d50543bf868..7670dfe31d0600 100644 --- a/packages/mui-base/package.json +++ b/packages/mui-base/package.json @@ -52,7 +52,6 @@ "devDependencies": { "@mui-internal/babel-macros": "^1.0.0", "@mui-internal/test-utils": "^1.0.0", - "@mui/material": "^5.15.2", "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.1", "@types/chai": "^4.3.11", diff --git a/packages/mui-base/src/TablePagination/TablePagination.test.tsx b/packages/mui-base/src/TablePagination/TablePagination.test.tsx index 813898a236b710..1c2b0ef78b77da 100644 --- a/packages/mui-base/src/TablePagination/TablePagination.test.tsx +++ b/packages/mui-base/src/TablePagination/TablePagination.test.tsx @@ -8,8 +8,6 @@ import { createRenderer, createMount, } from '@mui-internal/test-utils'; -import TableFooter from '@mui/material/TableFooter'; -import TableRow from '@mui/material/TableRow'; import { TablePagination, tablePaginationClasses as classes, @@ -86,8 +84,8 @@ describe('', () => { const { container } = render(
- - + + ', () => { rowsPerPage={10} labelDisplayedRows={labelDisplayedRows} /> - - + +
, ); expect(labelDisplayedRowsCalled).to.equal(true); @@ -109,8 +107,8 @@ describe('', () => { it('labels the select for the current page', () => { const { container } = render( - - + + ', () => { rowsPerPage={10} labelRowsPerPage="lines per page:" /> - - + +
, ); @@ -131,8 +129,8 @@ describe('', () => { it('accepts React nodes', () => { const { container } = render( - - + + ', () => { } /> - - + +
, ); @@ -160,8 +158,8 @@ describe('', () => { it('should disable the back button on the first page', () => { const { getByRole } = render( - - + + ', () => { onRowsPerPageChange={noop} rowsPerPage={10} /> - - + +
, ); @@ -183,8 +181,8 @@ describe('', () => { it('should disable the next button on the last page', () => { const { getByRole } = render( - - + + ', () => { onRowsPerPageChange={noop} rowsPerPage={10} /> - - + +
, ); @@ -209,8 +207,8 @@ describe('', () => { let page = 1; const { getByRole } = render( - - + + ', () => { onRowsPerPageChange={noop} rowsPerPage={10} /> - - + +
, ); @@ -234,8 +232,8 @@ describe('', () => { let page = 1; const { getByRole } = render( - - + + ', () => { onRowsPerPageChange={noop} rowsPerPage={10} /> - - + +
, ); @@ -260,8 +258,8 @@ describe('', () => { it('should display 0 as start number if the table is empty ', () => { const { container } = render( - - + + ', () => { onPageChange={noop} onRowsPerPageChange={noop} /> - - + +
, ); expect(container.querySelectorAll('p')[1]).to.have.text('0–0 of 0'); @@ -279,8 +277,8 @@ describe('', () => { it('should hide the rows per page selector if there are less than two options', () => { const { container, queryByRole } = render( - - + + ', () => { onRowsPerPageChange={noop} count={10} /> - - + +
, ); @@ -305,8 +303,8 @@ describe('', () => { const [page, setPage] = React.useState(0); return ( - - + + ', () => { } as any, }} /> - - + +
); } @@ -339,8 +337,8 @@ describe('', () => { const handleChangePage = spy(); const { getByRole } = render( - - + + ', () => { } as any, }} /> - - + +
, ); @@ -367,8 +365,8 @@ describe('', () => { const handleChangePage = spy(); const { getByRole } = render( - - + + ', () => { } as any, }} /> - - + +
, ); @@ -420,8 +418,8 @@ describe('', () => { it('does allow manual label ids', () => { const { container } = render( - - + + ', () => { selectId="foo" labelId="bar" /> - - + +
, ); @@ -446,8 +444,8 @@ describe('', () => { it('should display max number of rows text when prop is -1', () => { const { container } = render( - - + + ', () => { rowsPerPage={-1} onPageChange={noop} /> - - + +
, ); @@ -469,8 +467,8 @@ describe('', () => { it('should not raise a warning due to duplicated keys', () => { render( - - + + ', () => { select: { 'aria-label': 'rows per page' }, }} /> - - + +
, ); }); diff --git a/packages/mui-material/package.json b/packages/mui-material/package.json index 770af9b4ee8fd5..d2bcc245cee0ca 100644 --- a/packages/mui-material/package.json +++ b/packages/mui-material/package.json @@ -60,7 +60,6 @@ "@mui-internal/test-utils": "^1.0.0", "@mui/icons-material": "^5.15.2", "@mui/lab": "5.0.0-alpha.158", - "@mui/styles": "^5.15.2", "@popperjs/core": "^2.11.8", "@rollup/plugin-replace": "^5.0.5", "@testing-library/dom": "^9.3.3", diff --git a/packages/mui-material/src/styles/index.js b/packages/mui-material/src/styles/index.js index a47ba06fec5acb..34ea0230b89a82 100644 --- a/packages/mui-material/src/styles/index.js +++ b/packages/mui-material/src/styles/index.js @@ -51,4 +51,5 @@ export { default as shouldSkipGeneratingVar } from './shouldSkipGeneratingVar'; // Private methods for creating parts of the theme export { default as private_createTypography } from './createTypography'; +export { default as private_createMixins } from './createMixins'; export { default as private_excludeVariablesFromRoot } from './excludeVariablesFromRoot'; diff --git a/packages/mui-private-theming/package.json b/packages/mui-private-theming/package.json index d971c8caff55bb..3b72a22e3a911d 100644 --- a/packages/mui-private-theming/package.json +++ b/packages/mui-private-theming/package.json @@ -44,8 +44,6 @@ }, "devDependencies": { "@mui-internal/test-utils": "^1.0.0", - "@mui/material": "^5.15.2", - "@mui/styles": "^5.15.2", "@mui/types": "^7.2.11", "@types/chai": "^4.3.11", "@types/react": "^18.2.45", diff --git a/packages/mui-styles/package.json b/packages/mui-styles/package.json index c4832d797e4a72..0edb482812c416 100644 --- a/packages/mui-styles/package.json +++ b/packages/mui-styles/package.json @@ -58,7 +58,6 @@ }, "devDependencies": { "@mui-internal/test-utils": "^1.0.0", - "@mui/joy": "5.0.0-beta.20", "@mui/material": "^5.15.2", "@types/chai": "^4.3.11", "@types/react": "^18.2.45", diff --git a/packages/mui-styles/src/makeStyles/makeStyles.spec.tsx b/packages/mui-styles/src/makeStyles/makeStyles.spec.tsx index b3431adc42f4cd..1e1765dec63af0 100644 --- a/packages/mui-styles/src/makeStyles/makeStyles.spec.tsx +++ b/packages/mui-styles/src/makeStyles/makeStyles.spec.tsx @@ -1,6 +1,5 @@ import * as React from 'react'; import { Theme } from '@mui/material'; -import { AppBarProps } from '@mui/material/AppBar'; import { createStyles, makeStyles } from '@mui/styles'; // makeStyles diff --git a/packages/mui-styles/test/theme-scoping.test.tsx b/packages/mui-styles/test/theme-scoping.test.tsx index 36338e944fdaf7..d5c862dacccdf0 100644 --- a/packages/mui-styles/test/theme-scoping.test.tsx +++ b/packages/mui-styles/test/theme-scoping.test.tsx @@ -2,7 +2,6 @@ import * as React from 'react'; import { expect } from 'chai'; import { createRenderer } from '@mui-internal/test-utils'; import * as material from '@mui/material/styles'; -import * as joy from '@mui/joy/styles'; import { makeStyles } from '@mui/styles'; describe('Theme scoping', () => { @@ -78,27 +77,4 @@ describe('Theme scoping', () => { ); expect(container.firstChild).toHaveComputedStyle({ mixBlendMode: 'darken' }); }); - - it('should get Material UI theme even it is inside Joy provider', () => { - const useStyles = makeStyles((theme) => ({ - root: { - color: theme.palette.grey[700], // joy does not have `grey` in the default theme. - }, - })); - function Component() { - const classes = useStyles(); - - return
Component
; - } - - expect(() => - render( - - - - - , - ), - ).not.to.throw(); - }); }); diff --git a/packages/mui-system/package.json b/packages/mui-system/package.json index 3d443af26d7a19..4f96b416c80d95 100644 --- a/packages/mui-system/package.json +++ b/packages/mui-system/package.json @@ -54,9 +54,6 @@ "@emotion/styled": "^11.11.0", "@mui-internal/babel-macros": "^1.0.0", "@mui-internal/test-utils": "^1.0.0", - "@mui/joy": "5.0.0-beta.20", - "@mui/material": "^5.15.2", - "@mui/material-next": "6.0.0-alpha.115", "@types/chai": "^4.3.11", "@types/prop-types": "^15.7.11", "@types/react": "^18.2.45", diff --git a/packages/mui-system/src/createTheme/index.js b/packages/mui-system/src/createTheme/index.js index d5a11b2ff8f2b5..5684efceff7316 100644 --- a/packages/mui-system/src/createTheme/index.js +++ b/packages/mui-system/src/createTheme/index.js @@ -1 +1,2 @@ export { default } from './createTheme'; +export { default as private_createBreakpoints } from './createBreakpoints'; diff --git a/packages/mui-system/src/styleFunctionSx/styleFunctionSx.test.js b/packages/mui-system/src/styleFunctionSx/styleFunctionSx.test.js index 642f2cfc6c332c..dced5959cb72aa 100644 --- a/packages/mui-system/src/styleFunctionSx/styleFunctionSx.test.js +++ b/packages/mui-system/src/styleFunctionSx/styleFunctionSx.test.js @@ -1,7 +1,4 @@ import { expect } from 'chai'; -import createMixins from '@mui/material/styles/createMixins'; -import createTypography from '@mui/material/styles/createTypography'; -import createBreakpoints from '../createTheme/createBreakpoints'; import styleFunctionSx from './styleFunctionSx'; describe('styleFunctionSx', () => { @@ -244,24 +241,6 @@ describe('styleFunctionSx', () => { '@media (min-width:1280px)': { margin: '20px' }, }); }); - - it('writes breakpoints in correct order if default toolbar mixin is present in theme', () => { - const breakpoints = createBreakpoints({}); - const result = styleFunctionSx({ - theme: { - mixins: createMixins(breakpoints), - breakpoints, - }, - sx: (themeParam) => themeParam.mixins.toolbar, - }); - - // Test the order - expect(Object.keys(result)).to.deep.equal([ - '@media (min-width:0px)', - '@media (min-width:600px)', - 'minHeight', - ]); - }); }); describe('theme callback', () => { @@ -424,42 +403,4 @@ describe('styleFunctionSx', () => { ).not.to.throw(); }); }); - - it('resolves inherit typography properties', () => { - const result = styleFunctionSx({ - theme: { typography: createTypography({}, {}) }, - sx: { - fontFamily: 'inherit', - fontWeight: 'inherit', - fontSize: 'inherit', - lineHeight: 'inherit', - letterSpacing: 'inherit', - }, - }); - - expect(result).deep.equal({ - fontFamily: 'inherit', - fontWeight: 'inherit', - fontSize: 'inherit', - lineHeight: 'inherit', - letterSpacing: 'inherit', - }); - }); - - it('resolves theme typography properties', () => { - const result = styleFunctionSx({ - theme: { typography: createTypography({}, {}) }, - sx: { - fontFamily: 'default', - fontWeight: 'fontWeightMedium', - fontSize: 'fontSize', - }, - }); - - expect(result).deep.equal({ - fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', - fontWeight: 500, - fontSize: 14, - }); - }); }); diff --git a/packages/mui-material/test/typescript/components.spec.tsx b/test/integration/material-ui/components.spec.tsx similarity index 100% rename from packages/mui-material/test/typescript/components.spec.tsx rename to test/integration/material-ui/components.spec.tsx diff --git a/packages/mui-material/test/typescript/hoc-interop.spec.tsx b/test/integration/material-ui/hoc-interop.spec.tsx similarity index 100% rename from packages/mui-material/test/typescript/hoc-interop.spec.tsx rename to test/integration/material-ui/hoc-interop.spec.tsx diff --git a/packages/mui-private-theming/src/defaultTheme/defaultTheme.spec.ts b/test/integration/mui-styles/defaultTheme.spec.ts similarity index 100% rename from packages/mui-private-theming/src/defaultTheme/defaultTheme.spec.ts rename to test/integration/mui-styles/defaultTheme.spec.ts diff --git a/test/integration/mui-styles/theme-scoping.test.tsx b/test/integration/mui-styles/theme-scoping.test.tsx new file mode 100644 index 00000000000000..93028bb3366058 --- /dev/null +++ b/test/integration/mui-styles/theme-scoping.test.tsx @@ -0,0 +1,33 @@ +import * as React from 'react'; +import { expect } from 'chai'; +import { createRenderer } from '@mui-internal/test-utils'; +import * as material from '@mui/material/styles'; +import * as joy from '@mui/joy/styles'; +import { makeStyles } from '@mui/styles'; + +describe('Theme scoping', () => { + const { render } = createRenderer(); + + it('should get Material UI theme even it is inside Joy provider', () => { + const useStyles = makeStyles((theme) => ({ + root: { + color: theme.palette.grey[700], // joy does not have `grey` in the default theme. + }, + })); + function Component() { + const classes = useStyles(); + + return
Component
; + } + + expect(() => + render( + + + + + , + ), + ).not.to.throw(); + }); +}); diff --git a/packages/mui-system/src/createStyled.test.js b/test/integration/mui-system/createStyled.test.js similarity index 99% rename from packages/mui-system/src/createStyled.test.js rename to test/integration/mui-system/createStyled.test.js index 88622a9b5a57a0..b9c3ead976653d 100644 --- a/packages/mui-system/src/createStyled.test.js +++ b/test/integration/mui-system/createStyled.test.js @@ -1,9 +1,9 @@ import * as React from 'react'; import { expect } from 'chai'; import { spy } from 'sinon'; +import createStyled from '@mui/system/createStyled'; import { ThemeProvider, createTheme } from '@mui/material/styles'; import { createRenderer } from '@mui-internal/test-utils'; -import createStyled from './createStyled'; describe('createStyled', () => { const { render } = createRenderer(); diff --git a/test/integration/mui-system/styleFunctionSx.test.js b/test/integration/mui-system/styleFunctionSx.test.js new file mode 100644 index 00000000000000..3ff6fe2bdbefb7 --- /dev/null +++ b/test/integration/mui-system/styleFunctionSx.test.js @@ -0,0 +1,67 @@ +import { expect } from 'chai'; +import styleFunctionSx from '@mui/system/styleFunctionSx'; +import { + private_createMixins as createMixins, + private_createTypography as createTypography, +} from '@mui/material/styles'; +import { private_createBreakpoints as createBreakpoints } from '@mui/system/createTheme'; + +describe('styleFunctionSx', () => { + describe('breakpoints', () => { + it('writes breakpoints in correct order if default toolbar mixin is present in theme', () => { + const breakpoints = createBreakpoints({}); + const result = styleFunctionSx({ + theme: { + mixins: createMixins(breakpoints), + breakpoints, + }, + sx: (themeParam) => themeParam.mixins.toolbar, + }); + + // Test the order + expect(Object.keys(result)).to.deep.equal([ + '@media (min-width:0px)', + '@media (min-width:600px)', + 'minHeight', + ]); + }); + }); + + it('resolves inherit typography properties', () => { + const result = styleFunctionSx({ + theme: { typography: createTypography({}, {}) }, + sx: { + fontFamily: 'inherit', + fontWeight: 'inherit', + fontSize: 'inherit', + lineHeight: 'inherit', + letterSpacing: 'inherit', + }, + }); + + expect(result).deep.equal({ + fontFamily: 'inherit', + fontWeight: 'inherit', + fontSize: 'inherit', + lineHeight: 'inherit', + letterSpacing: 'inherit', + }); + }); + + it('resolves theme typography properties', () => { + const result = styleFunctionSx({ + theme: { typography: createTypography({}, {}) }, + sx: { + fontFamily: 'default', + fontWeight: 'fontWeightMedium', + fontSize: 'fontSize', + }, + }); + + expect(result).deep.equal({ + fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', + fontWeight: 500, + fontSize: 14, + }); + }); +}); diff --git a/packages/mui-system/test/integration/theme-scoping.test.tsx b/test/integration/mui-system/theme-scoping.test.tsx similarity index 100% rename from packages/mui-system/test/integration/theme-scoping.test.tsx rename to test/integration/mui-system/theme-scoping.test.tsx diff --git a/test/tsconfig.json b/test/tsconfig.json index 3671f904832ee5..285abf2c30368b 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -2,13 +2,12 @@ "extends": "../tsconfig.json", "compilerOptions": { "allowJs": true, - "noUnusedLocals": true, "skipLibCheck": true, "esModuleInterop": true, "module": "Node16", "moduleResolution": "Node16", "types": ["mocha"] }, - "include": ["e2e/**/*", "regressions/**/*"], + "include": ["e2e/**/*", "integration/**/*", "regressions/**/*"], "exclude": ["node_modules", "*/build"] } From 88370232da9d6958e74362ba322f9d76dce5f527 Mon Sep 17 00:00:00 2001 From: Diego Andai Date: Tue, 2 Jan 2024 11:08:48 -0300 Subject: [PATCH 18/26] [lab] Add use client directive (#40358) --- packages/mui-lab/src/Alert/Alert.js | 1 + packages/mui-lab/src/AlertTitle/AlertTitle.js | 1 + packages/mui-lab/src/Autocomplete/Autocomplete.js | 1 + packages/mui-lab/src/AvatarGroup/AvatarGroup.js | 1 + packages/mui-lab/src/CalendarPicker/CalendarPicker.tsx | 1 + .../src/CalendarPickerSkeleton/CalendarPickerSkeleton.tsx | 1 + packages/mui-lab/src/ClockPicker/ClockPicker.tsx | 1 + packages/mui-lab/src/DatePicker/DatePicker.tsx | 1 + packages/mui-lab/src/DateTimePicker/DateTimePicker.tsx | 1 + packages/mui-lab/src/DesktopDatePicker/DesktopDatePicker.tsx | 1 + .../src/DesktopDateTimePicker/DesktopDateTimePicker.tsx | 1 + packages/mui-lab/src/DesktopTimePicker/DesktopTimePicker.tsx | 1 + packages/mui-lab/src/LoadingButton/LoadingButton.js | 1 + .../mui-lab/src/LocalizationProvider/LocalizationProvider.tsx | 1 + packages/mui-lab/src/Masonry/Masonry.js | 1 + packages/mui-lab/src/MobileDatePicker/MobileDatePicker.tsx | 1 + .../mui-lab/src/MobileDateTimePicker/MobileDateTimePicker.tsx | 1 + packages/mui-lab/src/MobileTimePicker/MobileTimePicker.tsx | 1 + packages/mui-lab/src/MonthPicker/MonthPicker.tsx | 1 + packages/mui-lab/src/Pagination/Pagination.js | 1 + packages/mui-lab/src/Pagination/usePagination.js | 1 + packages/mui-lab/src/PaginationItem/PaginationItem.js | 1 + packages/mui-lab/src/PickersDay/PickersDay.tsx | 1 + packages/mui-lab/src/Rating/Rating.js | 1 + packages/mui-lab/src/Skeleton/Skeleton.js | 1 + packages/mui-lab/src/SpeedDial/SpeedDial.js | 1 + packages/mui-lab/src/SpeedDialAction/SpeedDialAction.js | 1 + packages/mui-lab/src/SpeedDialIcon/SpeedDialIcon.js | 1 + packages/mui-lab/src/StaticDatePicker/StaticDatePicker.tsx | 1 + .../mui-lab/src/StaticDateTimePicker/StaticDateTimePicker.tsx | 1 + packages/mui-lab/src/StaticTimePicker/StaticTimePicker.tsx | 1 + packages/mui-lab/src/TabContext/TabContext.js | 1 + packages/mui-lab/src/TabList/TabList.js | 1 + packages/mui-lab/src/TabPanel/TabPanel.js | 1 + packages/mui-lab/src/TimePicker/TimePicker.tsx | 1 + packages/mui-lab/src/Timeline/Timeline.tsx | 1 + packages/mui-lab/src/TimelineConnector/TimelineConnector.js | 1 + packages/mui-lab/src/TimelineContent/TimelineContent.js | 1 + packages/mui-lab/src/TimelineDot/TimelineDot.js | 1 + packages/mui-lab/src/TimelineItem/TimelineItem.js | 1 + .../src/TimelineOppositeContent/TimelineOppositeContent.js | 1 + packages/mui-lab/src/TimelineSeparator/TimelineSeparator.js | 1 + packages/mui-lab/src/ToggleButton/ToggleButton.js | 1 + packages/mui-lab/src/ToggleButtonGroup/ToggleButtonGroup.js | 1 + packages/mui-lab/src/TreeItem/TreeItem.tsx | 1 + packages/mui-lab/src/TreeView/TreeView.tsx | 1 + packages/mui-lab/src/YearPicker/YearPicker.tsx | 1 + packages/mui-lab/src/internal/svg-icons/ArrowDropDown.js | 1 + packages/mui-lab/src/internal/svg-icons/ArrowDropDown.tsx | 1 + packages/mui-lab/src/internal/svg-icons/ArrowLeft.tsx | 1 + packages/mui-lab/src/internal/svg-icons/ArrowRight.tsx | 1 + packages/mui-lab/src/internal/svg-icons/Calendar.tsx | 1 + packages/mui-lab/src/internal/svg-icons/Clock.tsx | 1 + packages/mui-lab/src/internal/svg-icons/DateRange.tsx | 1 + packages/mui-lab/src/internal/svg-icons/Pen.tsx | 1 + packages/mui-lab/src/internal/svg-icons/Time.tsx | 1 + packages/rsc-builder/buildRsc.ts | 4 ++++ 57 files changed, 60 insertions(+) diff --git a/packages/mui-lab/src/Alert/Alert.js b/packages/mui-lab/src/Alert/Alert.js index 3964b45ac38813..e668364a8b65e4 100644 --- a/packages/mui-lab/src/Alert/Alert.js +++ b/packages/mui-lab/src/Alert/Alert.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import Alert from '@mui/material/Alert'; diff --git a/packages/mui-lab/src/AlertTitle/AlertTitle.js b/packages/mui-lab/src/AlertTitle/AlertTitle.js index ced792053f7079..7a38fb93de2922 100644 --- a/packages/mui-lab/src/AlertTitle/AlertTitle.js +++ b/packages/mui-lab/src/AlertTitle/AlertTitle.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import AlertTitle from '@mui/material/AlertTitle'; diff --git a/packages/mui-lab/src/Autocomplete/Autocomplete.js b/packages/mui-lab/src/Autocomplete/Autocomplete.js index b8f3dcca0f9ae3..5556dd314c5c6f 100644 --- a/packages/mui-lab/src/Autocomplete/Autocomplete.js +++ b/packages/mui-lab/src/Autocomplete/Autocomplete.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import Autocomplete from '@mui/material/Autocomplete'; diff --git a/packages/mui-lab/src/AvatarGroup/AvatarGroup.js b/packages/mui-lab/src/AvatarGroup/AvatarGroup.js index 29ae5033a18f12..2b8805621c0671 100644 --- a/packages/mui-lab/src/AvatarGroup/AvatarGroup.js +++ b/packages/mui-lab/src/AvatarGroup/AvatarGroup.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import AvatarGroup from '@mui/material/AvatarGroup'; diff --git a/packages/mui-lab/src/CalendarPicker/CalendarPicker.tsx b/packages/mui-lab/src/CalendarPicker/CalendarPicker.tsx index a48bcf74f0a9bf..d1b244336688e5 100644 --- a/packages/mui-lab/src/CalendarPicker/CalendarPicker.tsx +++ b/packages/mui-lab/src/CalendarPicker/CalendarPicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/CalendarPickerSkeleton/CalendarPickerSkeleton.tsx b/packages/mui-lab/src/CalendarPickerSkeleton/CalendarPickerSkeleton.tsx index ea35825a54a654..5a5eedc42e23ba 100644 --- a/packages/mui-lab/src/CalendarPickerSkeleton/CalendarPickerSkeleton.tsx +++ b/packages/mui-lab/src/CalendarPickerSkeleton/CalendarPickerSkeleton.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/ClockPicker/ClockPicker.tsx b/packages/mui-lab/src/ClockPicker/ClockPicker.tsx index 6aec81ba9ba4c1..ff9f19395863cb 100644 --- a/packages/mui-lab/src/ClockPicker/ClockPicker.tsx +++ b/packages/mui-lab/src/ClockPicker/ClockPicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/DatePicker/DatePicker.tsx b/packages/mui-lab/src/DatePicker/DatePicker.tsx index 778fe50643159f..de1b2d83ea164c 100644 --- a/packages/mui-lab/src/DatePicker/DatePicker.tsx +++ b/packages/mui-lab/src/DatePicker/DatePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/DateTimePicker/DateTimePicker.tsx b/packages/mui-lab/src/DateTimePicker/DateTimePicker.tsx index f6f8ce2f12ac61..c65c2db4a7d155 100644 --- a/packages/mui-lab/src/DateTimePicker/DateTimePicker.tsx +++ b/packages/mui-lab/src/DateTimePicker/DateTimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/DesktopDatePicker/DesktopDatePicker.tsx b/packages/mui-lab/src/DesktopDatePicker/DesktopDatePicker.tsx index c1303a7831c480..23bfe7b4a463b8 100644 --- a/packages/mui-lab/src/DesktopDatePicker/DesktopDatePicker.tsx +++ b/packages/mui-lab/src/DesktopDatePicker/DesktopDatePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx b/packages/mui-lab/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx index 180ba02fa601d0..fc3f559a4a3ff2 100644 --- a/packages/mui-lab/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx +++ b/packages/mui-lab/src/DesktopDateTimePicker/DesktopDateTimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/DesktopTimePicker/DesktopTimePicker.tsx b/packages/mui-lab/src/DesktopTimePicker/DesktopTimePicker.tsx index 4b0306748991c2..f09c774b9bf6e7 100644 --- a/packages/mui-lab/src/DesktopTimePicker/DesktopTimePicker.tsx +++ b/packages/mui-lab/src/DesktopTimePicker/DesktopTimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/LoadingButton/LoadingButton.js b/packages/mui-lab/src/LoadingButton/LoadingButton.js index b0f6dc6bf8ca02..5e7db0a1b0da7c 100644 --- a/packages/mui-lab/src/LoadingButton/LoadingButton.js +++ b/packages/mui-lab/src/LoadingButton/LoadingButton.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import { chainPropTypes } from '@mui/utils'; diff --git a/packages/mui-lab/src/LocalizationProvider/LocalizationProvider.tsx b/packages/mui-lab/src/LocalizationProvider/LocalizationProvider.tsx index 683030386b6de4..2e3ead720c4300 100644 --- a/packages/mui-lab/src/LocalizationProvider/LocalizationProvider.tsx +++ b/packages/mui-lab/src/LocalizationProvider/LocalizationProvider.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; let warnedOnce = false; diff --git a/packages/mui-lab/src/Masonry/Masonry.js b/packages/mui-lab/src/Masonry/Masonry.js index c48e32772f9170..6738b670358500 100644 --- a/packages/mui-lab/src/Masonry/Masonry.js +++ b/packages/mui-lab/src/Masonry/Masonry.js @@ -1,3 +1,4 @@ +'use client'; import { unstable_composeClasses as composeClasses } from '@mui/base'; import * as ReactDOM from 'react-dom'; import { styled, useThemeProps } from '@mui/material/styles'; diff --git a/packages/mui-lab/src/MobileDatePicker/MobileDatePicker.tsx b/packages/mui-lab/src/MobileDatePicker/MobileDatePicker.tsx index 872f495b462a3a..f0b0f9defa6395 100644 --- a/packages/mui-lab/src/MobileDatePicker/MobileDatePicker.tsx +++ b/packages/mui-lab/src/MobileDatePicker/MobileDatePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/MobileDateTimePicker/MobileDateTimePicker.tsx b/packages/mui-lab/src/MobileDateTimePicker/MobileDateTimePicker.tsx index 44ae89292cb83a..6a24b35b216f53 100644 --- a/packages/mui-lab/src/MobileDateTimePicker/MobileDateTimePicker.tsx +++ b/packages/mui-lab/src/MobileDateTimePicker/MobileDateTimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/MobileTimePicker/MobileTimePicker.tsx b/packages/mui-lab/src/MobileTimePicker/MobileTimePicker.tsx index 7564ab4a52634e..aef9f13eb0f734 100644 --- a/packages/mui-lab/src/MobileTimePicker/MobileTimePicker.tsx +++ b/packages/mui-lab/src/MobileTimePicker/MobileTimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/MonthPicker/MonthPicker.tsx b/packages/mui-lab/src/MonthPicker/MonthPicker.tsx index fc67166a17a2a3..baa3643955e109 100644 --- a/packages/mui-lab/src/MonthPicker/MonthPicker.tsx +++ b/packages/mui-lab/src/MonthPicker/MonthPicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/Pagination/Pagination.js b/packages/mui-lab/src/Pagination/Pagination.js index 4c61939a2f276b..35cd7d141f0887 100644 --- a/packages/mui-lab/src/Pagination/Pagination.js +++ b/packages/mui-lab/src/Pagination/Pagination.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import Pagination from '@mui/material/Pagination'; diff --git a/packages/mui-lab/src/Pagination/usePagination.js b/packages/mui-lab/src/Pagination/usePagination.js index 01f9b49c0154dc..a5ae1c1ac8bd88 100644 --- a/packages/mui-lab/src/Pagination/usePagination.js +++ b/packages/mui-lab/src/Pagination/usePagination.js @@ -1 +1,2 @@ +'use client'; export { default } from '@mui/material/usePagination'; diff --git a/packages/mui-lab/src/PaginationItem/PaginationItem.js b/packages/mui-lab/src/PaginationItem/PaginationItem.js index 0f347b45871b5b..6a820a2fe69eb1 100644 --- a/packages/mui-lab/src/PaginationItem/PaginationItem.js +++ b/packages/mui-lab/src/PaginationItem/PaginationItem.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PaginationItem from '@mui/material/PaginationItem'; diff --git a/packages/mui-lab/src/PickersDay/PickersDay.tsx b/packages/mui-lab/src/PickersDay/PickersDay.tsx index 663efd6d92aace..dbd13583b7e868 100644 --- a/packages/mui-lab/src/PickersDay/PickersDay.tsx +++ b/packages/mui-lab/src/PickersDay/PickersDay.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/Rating/Rating.js b/packages/mui-lab/src/Rating/Rating.js index 45bf36fc3de04d..8650246d46cc43 100644 --- a/packages/mui-lab/src/Rating/Rating.js +++ b/packages/mui-lab/src/Rating/Rating.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import Rating from '@mui/material/Rating'; diff --git a/packages/mui-lab/src/Skeleton/Skeleton.js b/packages/mui-lab/src/Skeleton/Skeleton.js index ac8cc6b810ea5c..8062cb2ccf1a09 100644 --- a/packages/mui-lab/src/Skeleton/Skeleton.js +++ b/packages/mui-lab/src/Skeleton/Skeleton.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import Skeleton from '@mui/material/Skeleton'; diff --git a/packages/mui-lab/src/SpeedDial/SpeedDial.js b/packages/mui-lab/src/SpeedDial/SpeedDial.js index 68e73828edb40f..7904327ac2cdaa 100644 --- a/packages/mui-lab/src/SpeedDial/SpeedDial.js +++ b/packages/mui-lab/src/SpeedDial/SpeedDial.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import SpeedDial from '@mui/material/SpeedDial'; diff --git a/packages/mui-lab/src/SpeedDialAction/SpeedDialAction.js b/packages/mui-lab/src/SpeedDialAction/SpeedDialAction.js index 88f32ea1d6ad20..f4ee276ff2f5e7 100644 --- a/packages/mui-lab/src/SpeedDialAction/SpeedDialAction.js +++ b/packages/mui-lab/src/SpeedDialAction/SpeedDialAction.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import SpeedDialAction from '@mui/material/SpeedDialAction'; diff --git a/packages/mui-lab/src/SpeedDialIcon/SpeedDialIcon.js b/packages/mui-lab/src/SpeedDialIcon/SpeedDialIcon.js index 122a72e2f60bc3..9ad37129261529 100644 --- a/packages/mui-lab/src/SpeedDialIcon/SpeedDialIcon.js +++ b/packages/mui-lab/src/SpeedDialIcon/SpeedDialIcon.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import SpeedDialIcon from '@mui/material/SpeedDialIcon'; diff --git a/packages/mui-lab/src/StaticDatePicker/StaticDatePicker.tsx b/packages/mui-lab/src/StaticDatePicker/StaticDatePicker.tsx index cc93623efafca2..07aedfa8e1c201 100644 --- a/packages/mui-lab/src/StaticDatePicker/StaticDatePicker.tsx +++ b/packages/mui-lab/src/StaticDatePicker/StaticDatePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/StaticDateTimePicker/StaticDateTimePicker.tsx b/packages/mui-lab/src/StaticDateTimePicker/StaticDateTimePicker.tsx index 2f234d6eee87d2..e2adcb889202ea 100644 --- a/packages/mui-lab/src/StaticDateTimePicker/StaticDateTimePicker.tsx +++ b/packages/mui-lab/src/StaticDateTimePicker/StaticDateTimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/StaticTimePicker/StaticTimePicker.tsx b/packages/mui-lab/src/StaticTimePicker/StaticTimePicker.tsx index 1a7dca9a3e9bdf..743b8168c0d2b2 100644 --- a/packages/mui-lab/src/StaticTimePicker/StaticTimePicker.tsx +++ b/packages/mui-lab/src/StaticTimePicker/StaticTimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/TabContext/TabContext.js b/packages/mui-lab/src/TabContext/TabContext.js index e2858736361b5b..21b8bacd43415e 100644 --- a/packages/mui-lab/src/TabContext/TabContext.js +++ b/packages/mui-lab/src/TabContext/TabContext.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; diff --git a/packages/mui-lab/src/TabList/TabList.js b/packages/mui-lab/src/TabList/TabList.js index c2fe2db0be7d7a..d38ea59f78afcf 100644 --- a/packages/mui-lab/src/TabList/TabList.js +++ b/packages/mui-lab/src/TabList/TabList.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import Tabs from '@mui/material/Tabs'; diff --git a/packages/mui-lab/src/TabPanel/TabPanel.js b/packages/mui-lab/src/TabPanel/TabPanel.js index 458630cf4babb7..fae101f0760cd8 100644 --- a/packages/mui-lab/src/TabPanel/TabPanel.js +++ b/packages/mui-lab/src/TabPanel/TabPanel.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/TimePicker/TimePicker.tsx b/packages/mui-lab/src/TimePicker/TimePicker.tsx index 8f44f244558cdc..8fcc8a2e79163c 100644 --- a/packages/mui-lab/src/TimePicker/TimePicker.tsx +++ b/packages/mui-lab/src/TimePicker/TimePicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/Timeline/Timeline.tsx b/packages/mui-lab/src/Timeline/Timeline.tsx index ee173569051da7..0fe35c297e1390 100644 --- a/packages/mui-lab/src/Timeline/Timeline.tsx +++ b/packages/mui-lab/src/Timeline/Timeline.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/TimelineConnector/TimelineConnector.js b/packages/mui-lab/src/TimelineConnector/TimelineConnector.js index 6fa85a3a63c3e6..7acce592831a4e 100644 --- a/packages/mui-lab/src/TimelineConnector/TimelineConnector.js +++ b/packages/mui-lab/src/TimelineConnector/TimelineConnector.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/TimelineContent/TimelineContent.js b/packages/mui-lab/src/TimelineContent/TimelineContent.js index 909a397a61f9d1..e8602fe4ebad92 100644 --- a/packages/mui-lab/src/TimelineContent/TimelineContent.js +++ b/packages/mui-lab/src/TimelineContent/TimelineContent.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/TimelineDot/TimelineDot.js b/packages/mui-lab/src/TimelineDot/TimelineDot.js index ca6d48e7240e6a..735352a3075fb8 100644 --- a/packages/mui-lab/src/TimelineDot/TimelineDot.js +++ b/packages/mui-lab/src/TimelineDot/TimelineDot.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/TimelineItem/TimelineItem.js b/packages/mui-lab/src/TimelineItem/TimelineItem.js index 08b946d04c8b74..0f65b35c7f79b2 100644 --- a/packages/mui-lab/src/TimelineItem/TimelineItem.js +++ b/packages/mui-lab/src/TimelineItem/TimelineItem.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/TimelineOppositeContent/TimelineOppositeContent.js b/packages/mui-lab/src/TimelineOppositeContent/TimelineOppositeContent.js index a18cf2ae42316d..c3d4f28267516a 100644 --- a/packages/mui-lab/src/TimelineOppositeContent/TimelineOppositeContent.js +++ b/packages/mui-lab/src/TimelineOppositeContent/TimelineOppositeContent.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/TimelineSeparator/TimelineSeparator.js b/packages/mui-lab/src/TimelineSeparator/TimelineSeparator.js index df41e77cd83e71..b1c9c0c235f45b 100644 --- a/packages/mui-lab/src/TimelineSeparator/TimelineSeparator.js +++ b/packages/mui-lab/src/TimelineSeparator/TimelineSeparator.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; diff --git a/packages/mui-lab/src/ToggleButton/ToggleButton.js b/packages/mui-lab/src/ToggleButton/ToggleButton.js index 4a1131aef5d56d..cfd1a8feb1d044 100644 --- a/packages/mui-lab/src/ToggleButton/ToggleButton.js +++ b/packages/mui-lab/src/ToggleButton/ToggleButton.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import ToggleButton from '@mui/material/ToggleButton'; diff --git a/packages/mui-lab/src/ToggleButtonGroup/ToggleButtonGroup.js b/packages/mui-lab/src/ToggleButtonGroup/ToggleButtonGroup.js index 94fa0fa7c9be0e..5f1bb01afed3b3 100644 --- a/packages/mui-lab/src/ToggleButtonGroup/ToggleButtonGroup.js +++ b/packages/mui-lab/src/ToggleButtonGroup/ToggleButtonGroup.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; diff --git a/packages/mui-lab/src/TreeItem/TreeItem.tsx b/packages/mui-lab/src/TreeItem/TreeItem.tsx index e7f4df2aa2d284..5920ce65567cae 100644 --- a/packages/mui-lab/src/TreeItem/TreeItem.tsx +++ b/packages/mui-lab/src/TreeItem/TreeItem.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; let warnedOnce = false; diff --git a/packages/mui-lab/src/TreeView/TreeView.tsx b/packages/mui-lab/src/TreeView/TreeView.tsx index 4f4cb268e06c9e..a9baef3618f4ba 100644 --- a/packages/mui-lab/src/TreeView/TreeView.tsx +++ b/packages/mui-lab/src/TreeView/TreeView.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/YearPicker/YearPicker.tsx b/packages/mui-lab/src/YearPicker/YearPicker.tsx index 01bbf805e6d3c9..b83ba6b10812dd 100644 --- a/packages/mui-lab/src/YearPicker/YearPicker.tsx +++ b/packages/mui-lab/src/YearPicker/YearPicker.tsx @@ -1,3 +1,4 @@ +'use client'; /* eslint-disable @typescript-eslint/no-unused-vars */ import * as React from 'react'; diff --git a/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.js b/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.js index 67e7cd1beafd15..2a44d1f8d8feb8 100644 --- a/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.js +++ b/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.js @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.tsx b/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.tsx index 67e7cd1beafd15..2a44d1f8d8feb8 100644 --- a/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.tsx +++ b/packages/mui-lab/src/internal/svg-icons/ArrowDropDown.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/ArrowLeft.tsx b/packages/mui-lab/src/internal/svg-icons/ArrowLeft.tsx index 10286b1485e6e0..4e275faef5a27f 100644 --- a/packages/mui-lab/src/internal/svg-icons/ArrowLeft.tsx +++ b/packages/mui-lab/src/internal/svg-icons/ArrowLeft.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/ArrowRight.tsx b/packages/mui-lab/src/internal/svg-icons/ArrowRight.tsx index b971ab37f22a38..e5337f89e61693 100644 --- a/packages/mui-lab/src/internal/svg-icons/ArrowRight.tsx +++ b/packages/mui-lab/src/internal/svg-icons/ArrowRight.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/Calendar.tsx b/packages/mui-lab/src/internal/svg-icons/Calendar.tsx index 784a259ad80186..b114266426eacd 100644 --- a/packages/mui-lab/src/internal/svg-icons/Calendar.tsx +++ b/packages/mui-lab/src/internal/svg-icons/Calendar.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/Clock.tsx b/packages/mui-lab/src/internal/svg-icons/Clock.tsx index cf5e7a3b17039a..9c332f49f3d9da 100644 --- a/packages/mui-lab/src/internal/svg-icons/Clock.tsx +++ b/packages/mui-lab/src/internal/svg-icons/Clock.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/DateRange.tsx b/packages/mui-lab/src/internal/svg-icons/DateRange.tsx index 704d9c91e200bf..0ff1de89a3b88c 100644 --- a/packages/mui-lab/src/internal/svg-icons/DateRange.tsx +++ b/packages/mui-lab/src/internal/svg-icons/DateRange.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/Pen.tsx b/packages/mui-lab/src/internal/svg-icons/Pen.tsx index 5b613b8e6eca22..74c4eb3fbf15b4 100644 --- a/packages/mui-lab/src/internal/svg-icons/Pen.tsx +++ b/packages/mui-lab/src/internal/svg-icons/Pen.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/mui-lab/src/internal/svg-icons/Time.tsx b/packages/mui-lab/src/internal/svg-icons/Time.tsx index 3bdedba7c188dc..71e46443575a6b 100644 --- a/packages/mui-lab/src/internal/svg-icons/Time.tsx +++ b/packages/mui-lab/src/internal/svg-icons/Time.tsx @@ -1,3 +1,4 @@ +'use client'; import * as React from 'react'; import { createSvgIcon } from '@mui/material/utils'; diff --git a/packages/rsc-builder/buildRsc.ts b/packages/rsc-builder/buildRsc.ts index 59705255ed8dcd..960ad717f53df0 100644 --- a/packages/rsc-builder/buildRsc.ts +++ b/packages/rsc-builder/buildRsc.ts @@ -48,6 +48,10 @@ const PROJECTS: Project[] = [ additionalPaths: ['custom'], additionalFiles: ['src/utils/createSvgIcon.js'], }, + { + name: 'lab', + rootPath: path.join(process.cwd(), 'packages/mui-lab'), + }, ]; async function processFile( From ad912d66a37809f01b4b8135883809a52540fcdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Dudak?= Date: Tue, 2 Jan 2024 15:29:15 +0100 Subject: [PATCH 19/26] [code-infra] Break package dependency cycle between @mui/material and @mui/icons-material (#40400) --- packages/mui-material/package.json | 1 - .../src/TabScrollButton/TabScrollButton.test.js | 6 ++++-- .../src/TablePagination/TablePagination.test.js | 16 ++++++++++++---- .../src/TableSortLabel/TableSortLabel.test.js | 4 +++- packages/mui-material/src/Tabs/Tabs.test.js | 6 ++++-- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/packages/mui-material/package.json b/packages/mui-material/package.json index d2bcc245cee0ca..3b47e335ab25f9 100644 --- a/packages/mui-material/package.json +++ b/packages/mui-material/package.json @@ -58,7 +58,6 @@ "devDependencies": { "@mui-internal/babel-macros": "^1.0.0", "@mui-internal/test-utils": "^1.0.0", - "@mui/icons-material": "^5.15.2", "@mui/lab": "5.0.0-alpha.158", "@popperjs/core": "^2.11.8", "@rollup/plugin-replace": "^5.0.5", diff --git a/packages/mui-material/src/TabScrollButton/TabScrollButton.test.js b/packages/mui-material/src/TabScrollButton/TabScrollButton.test.js index 00aa3b267dffc7..5051a974f28e24 100644 --- a/packages/mui-material/src/TabScrollButton/TabScrollButton.test.js +++ b/packages/mui-material/src/TabScrollButton/TabScrollButton.test.js @@ -1,9 +1,11 @@ import * as React from 'react'; import { expect } from 'chai'; import { createRenderer, describeConformance } from '@mui-internal/test-utils'; -import ArrowBackIcon from '@mui/icons-material/ArrowBack'; -import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; import TabScrollButton, { tabScrollButtonClasses as classes } from '@mui/material/TabScrollButton'; +import { createSvgIcon } from '@mui/material/utils'; + +const ArrowBackIcon = createSvgIcon(, 'ArrowBack'); +const ArrowForwardIcon = createSvgIcon(, 'ArrowForward'); describe('', () => { const defaultProps = { diff --git a/packages/mui-material/src/TablePagination/TablePagination.test.js b/packages/mui-material/src/TablePagination/TablePagination.test.js index 975ecaa6c83a31..a54a01d13f4d15 100644 --- a/packages/mui-material/src/TablePagination/TablePagination.test.js +++ b/packages/mui-material/src/TablePagination/TablePagination.test.js @@ -12,10 +12,18 @@ import { outlinedInputClasses } from '@mui/material/OutlinedInput'; import { filledInputClasses } from '@mui/material/FilledInput'; import IconButton, { iconButtonClasses } from '@mui/material/IconButton'; import { svgIconClasses } from '@mui/material/SvgIcon'; -import ArrowBackIcon from '@mui/icons-material/ArrowBack'; -import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; -import KeyboardDoubleArrowLeftRoundedIcon from '@mui/icons-material/KeyboardDoubleArrowLeftRounded'; -import KeyboardDoubleArrowRightRoundedIcon from '@mui/icons-material/KeyboardDoubleArrowRightRounded'; +import { createSvgIcon } from '@mui/material/utils'; + +const ArrowBackIcon = createSvgIcon(, 'ArrowBack'); +const ArrowForwardIcon = createSvgIcon(, 'ArrowForward'); +const KeyboardDoubleArrowLeftRoundedIcon = createSvgIcon( + , + 'KeyboardDoubleArrowLeftRounded', +); +const KeyboardDoubleArrowRightRoundedIcon = createSvgIcon( + , + 'KeyboardDoubleArrowRightRounded', +); describe('', () => { const noop = () => {}; diff --git a/packages/mui-material/src/TableSortLabel/TableSortLabel.test.js b/packages/mui-material/src/TableSortLabel/TableSortLabel.test.js index 74e4e0449a3f0e..90be63ef209d1d 100644 --- a/packages/mui-material/src/TableSortLabel/TableSortLabel.test.js +++ b/packages/mui-material/src/TableSortLabel/TableSortLabel.test.js @@ -1,9 +1,11 @@ import * as React from 'react'; import { expect } from 'chai'; import { createRenderer, describeConformance } from '@mui-internal/test-utils'; -import SortIcon from '@mui/icons-material/Sort'; import TableSortLabel, { tableSortLabelClasses as classes } from '@mui/material/TableSortLabel'; import ButtonBase from '@mui/material/ButtonBase'; +import { createSvgIcon } from '@mui/material/utils'; + +const SortIcon = createSvgIcon(, 'Sort'); describe('', () => { const { render } = createRenderer(); diff --git a/packages/mui-material/src/Tabs/Tabs.test.js b/packages/mui-material/src/Tabs/Tabs.test.js index da655ecff49149..6fe2d04b122c1b 100644 --- a/packages/mui-material/src/Tabs/Tabs.test.js +++ b/packages/mui-material/src/Tabs/Tabs.test.js @@ -10,14 +10,16 @@ import { strictModeDoubleLoggingSuppressed, waitFor, } from '@mui-internal/test-utils'; -import ArrowBackIcon from '@mui/icons-material/ArrowBack'; -import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; import Tab from '@mui/material/Tab'; import Tabs, { tabsClasses as classes } from '@mui/material/Tabs'; import { svgIconClasses } from '@mui/material/SvgIcon'; import { createTheme, ThemeProvider } from '@mui/material/styles'; +import { createSvgIcon } from '@mui/material/utils'; import capitalize from '../utils/capitalize'; +const ArrowBackIcon = createSvgIcon(, 'ArrowBack'); +const ArrowForwardIcon = createSvgIcon(, 'ArrowForward'); + function findScrollButton(container, direction) { return container.querySelector(`svg[data-testid="KeyboardArrow${capitalize(direction)}Icon"]`); } From c47d17648c24945dd074b4600e9b5c32a9648db7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Dudak?= Date: Tue, 2 Jan 2024 15:29:36 +0100 Subject: [PATCH 20/26] [code-infra] Update lerna and unpin its version (#40399) --- .circleci/config.yml | 2 +- .gitignore | 1 + nx.json | 9 +- package.json | 4 +- renovate.json | 6 - yarn.lock | 775 +++++++++++++++++++++++-------------------- 6 files changed, 423 insertions(+), 374 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 30d24c4e06b866..33aa125c4d04f8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -675,7 +675,7 @@ jobs: DANGER_COMMAND: prepareBundleSizeReport - run: name: build @mui packages - command: yarn lerna run --ignore @mui/icons-material --concurrency 8 --scope "@mui/*" build + command: yarn lerna run --ignore @mui/icons-material --concurrency 6 --scope "@mui/*" build - run: name: create @mui/material canary distributable command: | diff --git a/.gitignore b/.gitignore index 8d71e1848bcfa3..1c039e19ec9086 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ docs/public/static/blog/feed/* # vale downloaded config .github/styles/Google .github/styles/write-good +.nx/cache diff --git a/nx.json b/nx.json index bcba7dd2f0b563..5e060f4fb2c787 100644 --- a/nx.json +++ b/nx.json @@ -1,12 +1,9 @@ { "$schema": "./node_modules/nx/schemas/nx-schema.json", "extends": "nx/presets/npm.json", - "tasksRunnerOptions": { - "default": { - "runner": "nx/tasks-runners/default", - "options": { - "cacheableOperations": ["build"] - } + "targetDefaults": { + "build": { + "cache": true } } } diff --git a/package.json b/package.json index 5194c096e3f3e2..8c1522d84e8e52 100644 --- a/package.json +++ b/package.json @@ -144,11 +144,11 @@ "karma-mocha": "^2.0.1", "karma-sourcemap-loader": "^0.4.0", "karma-webpack": "^5.0.0", - "lerna": "7.2.0", + "lerna": "^8.0.1", "lodash": "^4.17.21", "markdownlint-cli2": "^0.11.0", "mocha": "^10.2.0", - "nx": "^16.10.0", + "nx": "^17.2.8", "nyc": "^15.1.0", "piscina": "^4.2.1", "postcss-styled-syntax": "^0.5.0", diff --git a/renovate.json b/renovate.json index b36d04320ca77b..737df43f189a77 100644 --- a/renovate.json +++ b/renovate.json @@ -105,12 +105,6 @@ { "groupName": "@definitelytyped tools", "matchPackagePatterns": ["@definitelytyped/*"] - }, - { - "groupName": "Lerna", - "matchPackageNames": ["lerna"], - "description": "Limited at 7.2.0 until https://github.com/mui/material-ui/issues/40025 is fixed", - "allowedVersions": "<=7.2.0" } ], "postUpdateOptions": ["yarnDedupeHighest"], diff --git a/yarn.lock b/yarn.lock index 03316f84ea5c9b..c335c487a1b86c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,11 +1930,6 @@ dependencies: prop-types "^15.8.1" -"@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - "@gitbeaker/core@^35.8.1": version "35.8.1" resolved "https://registry.yarnpkg.com/@gitbeaker/core/-/core-35.8.1.tgz#b4ce2d08d344ff50e76c38ff81b800bec6dfe851" @@ -2122,23 +2117,13 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@lerna/child-process@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-7.2.0.tgz#42de5b0a4eb7479c2a72b4bf61685616740cf818" - integrity sha512-8cRsYYX8rGZTXL1KcLBv0RHD9PMvphWZay8yg4qf2giX6x86dQyTetSU4SplG2LBGVClilmNHJa/CQwvPQNUFA== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" - -"@lerna/create@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-7.2.0.tgz#a8080b419c1f8ab5d575693fcb883a6a0d82c7e0" - integrity sha512-bBypNfwqOQNcfR2nXJ3mWUeIAIoSFpXg8MjuFSf87PzIiyeTEKa3Z57vAa3bDbHQtcB7x6f0rWysK1eQZSH15Q== +"@lerna/create@8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-8.0.1.tgz#cc0ab19163c67269552292d95f23568468fa9921" + integrity sha512-PDYNUF8Nv5j7DbGvVbizEuYuQbNFZ0+wVOtRPvBQOkC2dMNryi3dJjktEd1QeDX6Wa/JkJWvZ5SMHyr+7H3Rtg== dependencies: - "@lerna/child-process" "7.2.0" - "@npmcli/run-script" "6.0.2" - "@nx/devkit" ">=16.5.1 < 17" + "@npmcli/run-script" "7.0.2" + "@nx/devkit" ">=17.1.2 < 18" "@octokit/plugin-enterprise-rest" "6.0.1" "@octokit/rest" "19.0.11" byte-size "8.1.1" @@ -2167,7 +2152,7 @@ libnpmpublish "7.3.0" load-json-file "6.2.0" lodash "^4.17.21" - make-dir "3.1.0" + make-dir "4.0.0" minimatch "3.0.5" multimatch "5.0.0" node-fetch "2.6.7" @@ -2175,12 +2160,12 @@ npm-packlist "5.1.1" npm-registry-fetch "^14.0.5" npmlog "^6.0.2" - nx ">=16.5.1 < 17" + nx ">=17.1.2 < 18" p-map "4.0.0" p-map-series "2.1.0" p-queue "6.6.2" p-reduce "^2.1.0" - pacote "^15.2.0" + pacote "^17.0.5" pify "5.0.0" read-cmd-shim "4.0.0" read-package-json "6.0.4" @@ -2199,8 +2184,8 @@ validate-npm-package-name "5.0.0" write-file-atomic "5.0.1" write-pkg "4.0.0" - yargs "16.2.0" - yargs-parser "20.2.4" + yargs "17.7.2" + yargs-parser "21.1.1" "@linaria/babel-preset@^4.5.4": version "4.5.4" @@ -2504,13 +2489,16 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== +"@npmcli/agent@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.0.tgz#e81f00fdb2a670750ff7731bbefb47ecbf0ccf44" + integrity sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q== dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.1" "@npmcli/fs@^3.1.0": version "3.1.0" @@ -2519,19 +2507,19 @@ dependencies: semver "^7.3.5" -"@npmcli/git@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.0.4.tgz#cdf74f21b1d440c0756fb28159d935129d9daa33" - integrity sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg== +"@npmcli/git@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.3.tgz#ad3ede0994bcf716ddb63d361f3ea16cb72d878c" + integrity sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw== dependencies: - "@npmcli/promise-spawn" "^6.0.0" - lru-cache "^7.4.4" - npm-pick-manifest "^8.0.0" + "@npmcli/promise-spawn" "^7.0.0" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" proc-log "^3.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" - which "^3.0.0" + which "^4.0.0" "@npmcli/installed-package-contents@^2.0.1": version "2.0.2" @@ -2541,113 +2529,106 @@ npm-bundled "^3.0.0" npm-normalize-package-bin "^3.0.0" -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - "@npmcli/node-gyp@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" - integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== +"@npmcli/promise-spawn@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz#fd1c64ed4ff2341e503e1f390c62640a6540df09" + integrity sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ== dependencies: - which "^3.0.0" + which "^4.0.0" -"@npmcli/run-script@6.0.2", "@npmcli/run-script@^6.0.0": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" - integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== +"@npmcli/run-script@7.0.2", "@npmcli/run-script@^7.0.0": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.2.tgz#497e7f058799497889df65900c711312252276d3" + integrity sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w== dependencies: "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^6.0.0" - node-gyp "^9.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^10.0.0" read-package-json-fast "^3.0.0" - which "^3.0.0" + which "^4.0.0" -"@nrwl/devkit@16.5.2": - version "16.5.2" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-16.5.2.tgz#eedcf4e546e2ebd3d01babcf5c97bc2b6bf08408" - integrity sha512-4L8cHD6cDTVWqylzM9vNbh8MuujsBpEP0yiTKQOBfAkTWpp/PcyFsnCMtYEiaWIQ5xSrruVbL5pb9KEL4ayLAg== +"@nrwl/devkit@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-17.2.8.tgz#dd3467b484c4611454a45541ffb29e4de5b2ebe7" + integrity sha512-l2dFy5LkWqSA45s6pee6CoqJeluH+sjRdVnAAQfjLHRNSx6mFAKblyzq5h1f4P0EUCVVVqLs+kVqmNx5zxYqvw== dependencies: - "@nx/devkit" "16.5.2" + "@nx/devkit" "17.2.8" -"@nrwl/tao@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-16.10.0.tgz#94642a0380709b8e387e1e33705a5a9624933375" - integrity sha512-QNAanpINbr+Pod6e1xNgFbzK1x5wmZl+jMocgiEFXZ67KHvmbD6MAQQr0MMz+GPhIu7EE4QCTLTyCEMlAG+K5Q== +"@nrwl/tao@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-17.2.8.tgz#41ff3d715a0763e95cf5c35e7f79cd3be358dc5f" + integrity sha512-Qpk5YKeJ+LppPL/wtoDyNGbJs2MsTi6qyX/RdRrEc8lc4bk6Cw3Oul1qTXCI6jT0KzTz+dZtd0zYD/G7okkzvg== dependencies: - nx "16.10.0" + nx "17.2.8" tslib "^2.3.0" -"@nx/devkit@16.5.2", "@nx/devkit@>=16.5.1 < 17": - version "16.5.2" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-16.5.2.tgz#0a30fc4e3beeea7d7bf16a0496d1ff3c5fa05299" - integrity sha512-QDOQeFzVhQCA65g+2RfoGKZBUnCb151+F7/PvwRESEM+jybXHoXwR9PSE3ClnnmO/d0LUKB2ohU3Z9WQrQDALQ== +"@nx/devkit@17.2.8", "@nx/devkit@>=17.1.2 < 18": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-17.2.8.tgz#49b6c94a3c12fba63eae6514fb37a468d0570e2e" + integrity sha512-6LtiQihtZwqz4hSrtT5cCG5XMCWppG6/B8c1kNksg97JuomELlWyUyVF+sxmeERkcLYFaKPTZytP0L3dmCFXaw== dependencies: - "@nrwl/devkit" "16.5.2" + "@nrwl/devkit" "17.2.8" ejs "^3.1.7" + enquirer "~2.3.6" ignore "^5.0.4" semver "7.5.3" tmp "~0.2.1" tslib "^2.3.0" -"@nx/nx-darwin-arm64@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.10.0.tgz#0c73010cac7a502549483b12bad347da9014e6f1" - integrity sha512-YF+MIpeuwFkyvM5OwgY/rTNRpgVAI/YiR0yTYCZR+X3AAvP775IVlusNgQ3oedTBRUzyRnI4Tknj1WniENFsvQ== - -"@nx/nx-darwin-x64@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-16.10.0.tgz#2ccf270418d552fd0a8e0d6089aee4944315adaa" - integrity sha512-ypi6YxwXgb0kg2ixKXE3pwf5myVNUgWf1CsV5OzVccCM8NzheMO51KDXTDmEpXdzUsfT0AkO1sk5GZeCjhVONg== - -"@nx/nx-freebsd-x64@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.10.0.tgz#c3ee6914256e69493fed9355b0d6661d0e86da44" - integrity sha512-UeEYFDmdbbDkTQamqvtU8ibgu5jQLgFF1ruNb/U4Ywvwutw2d4ruOMl2e0u9hiNja9NFFAnDbvzrDcMo7jYqYw== - -"@nx/nx-linux-arm-gnueabihf@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.10.0.tgz#a961eccbb38acb2da7fc125b29d1fead0b39152f" - integrity sha512-WV3XUC2DB6/+bz1sx+d1Ai9q2Cdr+kTZRN50SOkfmZUQyEBaF6DRYpx/a4ahhxH3ktpNfyY8Maa9OEYxGCBkQA== - -"@nx/nx-linux-arm64-gnu@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.10.0.tgz#795f20072549d03822b5c4639ef438e473dbb541" - integrity sha512-aWIkOUw995V3ItfpAi5FuxQ+1e9EWLS1cjWM1jmeuo+5WtaKToJn5itgQOkvSlPz+HSLgM3VfXMvOFALNk125g== - -"@nx/nx-linux-arm64-musl@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.10.0.tgz#f2428ee6dbe2b2c326e8973f76c97666def33607" - integrity sha512-uO6Gg+irqpVcCKMcEPIQcTFZ+tDI02AZkqkP7koQAjniLEappd8DnUBSQdcn53T086pHpdc264X/ZEpXFfrKWQ== - -"@nx/nx-linux-x64-gnu@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.10.0.tgz#d36c2bcf94d49eaa24e3880ddaf6f1f617de539b" - integrity sha512-134PW/u/arNFAQKpqMJniC7irbChMPz+W+qtyKPAUXE0XFKPa7c1GtlI/wK2dvP9qJDZ6bKf0KtA0U/m2HMUOA== - -"@nx/nx-linux-x64-musl@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.10.0.tgz#78bd2ab97a583b3d4ea3387b67fd7b136907493c" - integrity sha512-q8sINYLdIJxK/iUx9vRk5jWAWb/2O0PAbOJFwv4qkxBv4rLoN7y+otgCZ5v0xfx/zztFgk/oNY4lg5xYjIso2Q== - -"@nx/nx-win32-arm64-msvc@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.10.0.tgz#ef20ec8d0c83d66e73e20df12d2c788b8f866396" - integrity sha512-moJkL9kcqxUdJSRpG7dET3UeLIciwrfP08mzBQ12ewo8K8FzxU8ZUsTIVVdNrwt01CXOdXoweGfdQLjJ4qTURA== - -"@nx/nx-win32-x64-msvc@16.10.0": - version "16.10.0" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.10.0.tgz#7410a51d0f8be631eec9552f01b2e5946285927c" - integrity sha512-5iV2NKZnzxJwZZ4DM5JVbRG/nkhAbzEskKaLBB82PmYGKzaDHuMHP1lcPoD/rtYMlowZgNA/RQndfKvPBPwmXA== +"@nx/nx-darwin-arm64@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz#26645c9548d5e387b43c06fccfa18e2c1f08055e" + integrity sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg== + +"@nx/nx-darwin-x64@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz#5143d6d01d24e338cb3d39076fe2af95146cb538" + integrity sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw== + +"@nx/nx-freebsd-x64@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz#82a018a1855170e0243b8fe7b0032af279c3fb83" + integrity sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA== + +"@nx/nx-linux-arm-gnueabihf@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz#18b9c324221ff6a30589f3fc272a843aca57b70f" + integrity sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA== + +"@nx/nx-linux-arm64-gnu@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz#54a08640a2babe78bcf3283565b00eb487db595e" + integrity sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg== + +"@nx/nx-linux-arm64-musl@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz#cd7b673bb9f45fec7aa1b6c880a0d23d658e927f" + integrity sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ== + +"@nx/nx-linux-x64-gnu@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz#009eb75c77bf075bc9c13ec4f9caf77821eee639" + integrity sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ== + +"@nx/nx-linux-x64-musl@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz#8ee2324068732a135ca4b01081942d5956885167" + integrity sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA== + +"@nx/nx-win32-arm64-msvc@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz#9bdce5b4d1f9cec7ef326eaf43b99e68576398b0" + integrity sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA== + +"@nx/nx-win32-x64-msvc@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz#8a86ff250021ad47686b58f1840b348a209b1158" + integrity sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA== "@octokit/auth-token@^2.4.4": version "2.5.0" @@ -2978,14 +2959,6 @@ dependencies: "@octokit/openapi-types" "^17.2.0" -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== - dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -3133,11 +3106,32 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@sigstore/bundle@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.1.0.tgz#c6140ca97b68815edf7c4fb7bdbf58d656525c39" + integrity sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng== + dependencies: + "@sigstore/protobuf-specs" "^0.2.1" + "@sigstore/protobuf-specs@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== +"@sigstore/protobuf-specs@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.2.0.tgz#4918207d8356877ab42d85d360d5729e9b3ec65a" + integrity sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA== + dependencies: + "@sigstore/bundle" "^2.1.0" + "@sigstore/protobuf-specs" "^0.2.1" + make-fetch-happen "^13.0.0" + "@sigstore/tuf@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.0.tgz#13b69323e7bf8de458cd6c952c57acd1169772a5" @@ -3147,6 +3141,14 @@ make-fetch-happen "^11.0.1" tuf-js "^1.1.3" +"@sigstore/tuf@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.2.0.tgz#ef636239687e41af3f2ce10667ab88f5ca6165b3" + integrity sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA== + dependencies: + "@sigstore/protobuf-specs" "^0.2.1" + tuf-js "^2.1.0" + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -3516,6 +3518,11 @@ resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + "@tufjs/models@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" @@ -3524,6 +3531,14 @@ "@tufjs/canonical-json" "1.0.0" minimatch "^9.0.0" +"@tufjs/models@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.0.tgz#c7ab241cf11dd29deb213d6817dabb8c99ce0863" + integrity sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.3" + "@types/aria-query@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" @@ -4442,10 +4457,10 @@ abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" @@ -4499,7 +4514,7 @@ agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -agent-base@^7.0.2: +agent-base@^7.0.2, agent-base@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== @@ -5124,10 +5139,10 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== -axios@^1.0.0, axios@^1.5.0, axios@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" - integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== +axios@^1.5.0, axios@^1.5.1, axios@^1.6.0: + version "1.6.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.3.tgz#7f50f23b3aa246eff43c54834272346c396613f4" + integrity sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -5634,30 +5649,6 @@ c8@^7.6.0: yargs "^16.2.0" yargs-parser "^20.2.9" -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - cacache@^17.0.0: version "17.0.5" resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.5.tgz#6dbec26c11f1f6a2b558bc11ed3316577c339ebc" @@ -5677,6 +5668,24 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" +cacache@^18.0.0: + version "18.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.1.tgz#b026d56ad569e4f73cc07c813b3c66707d0fb142" + integrity sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6403,10 +6412,10 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -conventional-changelog-angular@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" - integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== +conventional-changelog-angular@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" + integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== dependencies: compare-func "^2.0.0" @@ -8231,7 +8240,7 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.0.0, execa@^5.1.1: +execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -8271,6 +8280,11 @@ expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + express@^4.16.4, express@^4.18.2: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -8807,7 +8821,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^2.0.0, fs-minipass@^2.1.0: +fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== @@ -9132,7 +9146,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2, glob@^10.3.7: +glob@^10.2.2, glob@^10.3.10, glob@^10.3.7: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -9542,6 +9556,13 @@ hosted-git-info@^6.0.0: dependencies: lru-cache "^7.5.1" +hosted-git-info@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" + integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== + dependencies: + lru-cache "^10.0.1" + html-element-map@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.3.1.tgz#44b2cbcfa7be7aa4ff59779e47e51012e1c73c08" @@ -9622,7 +9643,7 @@ htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.3.0" -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -9647,6 +9668,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -9755,12 +9784,12 @@ ignore-walk@^5.0.1: dependencies: minimatch "^5.0.1" -ignore-walk@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.2.tgz#c48f48397cf8ef6174fcc28aa5f8c1de6203d389" - integrity sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg== +ignore-walk@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.4.tgz#89950be94b4f522225eb63a13c56badb639190e9" + integrity sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw== dependencies: - minimatch "^7.4.2" + minimatch "^9.0.0" ignore@^5.0.4, ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" @@ -9815,11 +9844,6 @@ indent-string@^5.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -11206,15 +11230,14 @@ lazystream@^1.0.0: dependencies: readable-stream "^2.0.5" -lerna@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-7.2.0.tgz#55ab3de42032168a75fc7a2ce184a8acb7efc5ea" - integrity sha512-E13iAY4Tdo+86m4ClAe0j0bP7f8QG2neJReglILPOe+gAOoX17TGqEWanmkDELlUXOrTTwnte0ewc6I6/NOqpg== +lerna@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-8.0.1.tgz#cc705467c5507c38c76ae293fe976e5d438aa876" + integrity sha512-ZxFMmOqwkP4e+q6BrMzxkAhixi6n0GVD2jAAnAfDkIFnwumB4/7X5/If6fqTlXXshtB2dQtN5OAtzafqVq8cwA== dependencies: - "@lerna/child-process" "7.2.0" - "@lerna/create" "7.2.0" - "@npmcli/run-script" "6.0.2" - "@nx/devkit" ">=16.5.1 < 17" + "@lerna/create" "8.0.1" + "@npmcli/run-script" "7.0.2" + "@nx/devkit" ">=17.1.2 < 18" "@octokit/plugin-enterprise-rest" "6.0.1" "@octokit/rest" "19.0.11" byte-size "8.1.1" @@ -11222,7 +11245,7 @@ lerna@7.2.0: clone-deep "4.0.1" cmd-shim "6.0.1" columnify "1.6.0" - conventional-changelog-angular "6.0.0" + conventional-changelog-angular "7.0.0" conventional-changelog-core "5.0.1" conventional-recommended-bump "7.0.1" cosmiconfig "^8.2.0" @@ -11249,7 +11272,7 @@ lerna@7.2.0: libnpmpublish "7.3.0" load-json-file "6.2.0" lodash "^4.17.21" - make-dir "3.1.0" + make-dir "4.0.0" minimatch "3.0.5" multimatch "5.0.0" node-fetch "2.6.7" @@ -11257,14 +11280,14 @@ lerna@7.2.0: npm-packlist "5.1.1" npm-registry-fetch "^14.0.5" npmlog "^6.0.2" - nx ">=16.5.1 < 17" + nx ">=17.1.2 < 18" p-map "4.0.0" p-map-series "2.1.0" p-pipe "3.1.0" p-queue "6.6.2" p-reduce "2.1.0" p-waterfall "2.1.1" - pacote "^15.2.0" + pacote "^17.0.5" pify "5.0.0" read-cmd-shim "4.0.0" read-package-json "6.0.4" @@ -11284,8 +11307,8 @@ lerna@7.2.0: validate-npm-package-name "5.0.0" write-file-atomic "5.0.1" write-pkg "4.0.0" - yargs "16.2.0" - yargs-parser "20.2.4" + yargs "17.7.2" + yargs-parser "21.1.1" levn@^0.4.1: version "0.4.1" @@ -11647,6 +11670,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11669,16 +11697,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.18.3, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: +lru-cache@^7.18.3, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== - lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -11705,12 +11728,12 @@ magic-string@^0.30.3: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" -make-dir@3.1.0, make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +make-dir@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - semver "^6.0.0" + semver "^7.5.3" make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" @@ -11720,52 +11743,54 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.3: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== dependencies: agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" is-lambda "^1.0.1" lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" + minipass "^5.0.0" + minipass-fetch "^3.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" negotiator "^0.6.3" promise-retry "^2.0.1" socks-proxy-agent "^7.0.0" - ssri "^9.0.0" + ssri "^10.0.0" -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== +make-fetch-happen@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" + integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" + minipass "^7.0.2" minipass-fetch "^3.0.0" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" negotiator "^0.6.3" promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" ssri "^10.0.0" makeerror@1.0.12: @@ -12133,13 +12158,6 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^7.4.2: - version "7.4.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.5.tgz#e721f2a6faba6846f3b891ccff9966dcf728813e" - integrity sha512-OzOamaOmNBJZUv2qqY1OSWa+++4YPpOkLgkc0w30Oov5ufKlWWXnFUl0l4dgmSv5Shq/zRVkEOXAe2NaqO4l5Q== - dependencies: - brace-expansion "^2.0.1" - minimatch@^8.0.2: version "8.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.3.tgz#0415cb9bb0c1d8ac758c8a673eb1d288e13f5e75" @@ -12175,16 +12193,12 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" + minipass "^7.0.3" minipass-fetch@^3.0.0: version "3.0.1" @@ -12226,7 +12240,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: +minipass@^3.0.0, minipass@^3.1.1: version "3.3.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== @@ -12243,10 +12257,10 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.1.tgz#dff63464407cd8b83d7f008c0f116fa8c9b77ebf" - integrity sha512-NQ8MCKimInjVlaIqx51RKJJB7mINVkLTJbsZKmto4UAAOC/CWXES8PGaOgoBZyqoUsUA/U3DToGK7GJkkHbjJw== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -12276,7 +12290,7 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: dependencies: minimist "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -12517,7 +12531,7 @@ node-abi@^3.3.0: dependencies: semver "^7.3.5" -node-addon-api@^3.0.0, node-addon-api@^3.2.1: +node-addon-api@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== @@ -12561,26 +12575,26 @@ node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.6.9: dependencies: whatwg-url "^5.0.0" -node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: +node-gyp-build@^4.2.2: version "4.5.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== -node-gyp@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" - integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== +node-gyp@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" + integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== dependencies: env-paths "^2.2.0" - glob "^7.1.4" + exponential-backoff "^3.1.1" + glob "^10.3.10" graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^3.0.0" semver "^7.3.5" tar "^6.1.2" - which "^2.0.2" + which "^4.0.0" node-int64@^0.4.0: version "0.4.0" @@ -12604,12 +12618,12 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== dependencies: - abbrev "1" + abbrev "^2.0.0" normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -12641,6 +12655,16 @@ normalize-package-data@^5.0.0: semver "^7.3.5" validate-npm-package-license "^3.0.4" +normalize-package-data@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" + integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== + dependencies: + hosted-git-info "^7.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -12714,6 +12738,16 @@ npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: semver "^7.3.5" validate-npm-package-name "^5.0.0" +npm-package-arg@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.1.tgz#f208b0022c29240a1c532a449bdde3f0a4708ebc" + integrity sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + "npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^8.0.0": version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" @@ -12733,24 +12767,24 @@ npm-packlist@5.1.1: npm-bundled "^1.1.2" npm-normalize-package-bin "^1.0.1" -npm-packlist@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" - integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== +npm-packlist@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.1.tgz#97d1eb2a9a90e10ce1b028d058da3740c91b89ab" + integrity sha512-MQpL27ZrsJQ2kiAuQPpZb5LtJwydNRnI15QWXsf3WHERu4rzjRj6Zju/My2fov7tLuu3Gle/uoIX/DDZ3u4O4Q== dependencies: - ignore-walk "^6.0.0" + ignore-walk "^6.0.4" -npm-pick-manifest@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" - integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== +npm-pick-manifest@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz#f87a4c134504a2c7931f2bb8733126e3c3bb7e8f" + integrity sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg== dependencies: npm-install-checks "^6.0.0" npm-normalize-package-bin "^3.0.0" - npm-package-arg "^10.0.0" + npm-package-arg "^11.0.0" semver "^7.3.5" -npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: +npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: version "14.0.5" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== @@ -12763,6 +12797,19 @@ npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0 npm-package-arg "^10.0.0" proc-log "^3.0.0" +npm-registry-fetch@^16.0.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz#10227b7b36c97bc1cf2902a24e4f710cfe62803c" + integrity sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw== + dependencies: + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^3.0.0" + npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -12780,7 +12827,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^6.0.0, npmlog@^6.0.2: +npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== @@ -12812,17 +12859,16 @@ nwsapi@^2.2.4: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g== -nx@16.10.0, "nx@>=16.5.1 < 17", nx@^16.10.0: - version "16.10.0" - resolved "https://registry.yarnpkg.com/nx/-/nx-16.10.0.tgz#b070461f7de0a3d7988bd78558ea84cda3543ace" - integrity sha512-gZl4iCC0Hx0Qe1VWmO4Bkeul2nttuXdPpfnlcDKSACGu3ZIo+uySqwOF8yBAxSTIf8xe2JRhgzJN1aFkuezEBg== +nx@17.2.8, "nx@>=17.1.2 < 18", nx@^17.2.8: + version "17.2.8" + resolved "https://registry.yarnpkg.com/nx/-/nx-17.2.8.tgz#09482acd5d9b64c115d5ccf12417f1af2787d4d1" + integrity sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw== dependencies: - "@nrwl/tao" "16.10.0" - "@parcel/watcher" "2.0.4" + "@nrwl/tao" "17.2.8" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "3.0.0-rc.46" "@zkochan/js-yaml" "0.0.6" - axios "^1.0.0" + axios "^1.5.1" chalk "^4.1.0" cli-cursor "3.1.0" cli-spinners "2.6.1" @@ -12850,20 +12896,19 @@ nx@16.10.0, "nx@>=16.5.1 < 17", nx@^16.10.0: tmp "~0.2.1" tsconfig-paths "^4.1.2" tslib "^2.3.0" - v8-compile-cache "2.3.0" yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "16.10.0" - "@nx/nx-darwin-x64" "16.10.0" - "@nx/nx-freebsd-x64" "16.10.0" - "@nx/nx-linux-arm-gnueabihf" "16.10.0" - "@nx/nx-linux-arm64-gnu" "16.10.0" - "@nx/nx-linux-arm64-musl" "16.10.0" - "@nx/nx-linux-x64-gnu" "16.10.0" - "@nx/nx-linux-x64-musl" "16.10.0" - "@nx/nx-win32-arm64-msvc" "16.10.0" - "@nx/nx-win32-x64-msvc" "16.10.0" + "@nx/nx-darwin-arm64" "17.2.8" + "@nx/nx-darwin-x64" "17.2.8" + "@nx/nx-freebsd-x64" "17.2.8" + "@nx/nx-linux-arm-gnueabihf" "17.2.8" + "@nx/nx-linux-arm64-gnu" "17.2.8" + "@nx/nx-linux-arm64-musl" "17.2.8" + "@nx/nx-linux-x64-gnu" "17.2.8" + "@nx/nx-linux-x64-musl" "17.2.8" + "@nx/nx-win32-arm64-msvc" "17.2.8" + "@nx/nx-win32-x64-msvc" "17.2.8" nyc@^15.1.0: version "15.1.0" @@ -13318,27 +13363,27 @@ package-hash@^4.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" -pacote@^15.2.0: - version "15.2.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" - integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== +pacote@^17.0.5: + version "17.0.5" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-17.0.5.tgz#e9854edee7a073635cdd36b0c07cd4f2ab1757b6" + integrity sha512-TAE0m20zSDMnchPja9vtQjri19X3pZIyRpm2TJVeI+yU42leJBBDTRYhOcWFsPhaMxf+3iwQkFiKz16G9AEeeA== dependencies: - "@npmcli/git" "^4.0.0" + "@npmcli/git" "^5.0.0" "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^6.0.1" - "@npmcli/run-script" "^6.0.0" - cacache "^17.0.0" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^7.0.0" + cacache "^18.0.0" fs-minipass "^3.0.0" - minipass "^5.0.0" - npm-package-arg "^10.0.0" - npm-packlist "^7.0.0" - npm-pick-manifest "^8.0.0" - npm-registry-fetch "^14.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^16.0.0" proc-log "^3.0.0" promise-retry "^2.0.1" - read-package-json "^6.0.0" + read-package-json "^7.0.0" read-package-json-fast "^3.0.0" - sigstore "^1.3.0" + sigstore "^2.0.0" ssri "^10.0.0" tar "^6.1.11" @@ -14485,6 +14530,16 @@ read-package-json@6.0.4, read-package-json@^6.0.0: normalize-package-data "^5.0.0" npm-normalize-package-bin "^3.0.0" +read-package-json@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-7.0.0.tgz#d605c9dcf6bc5856da24204aa4e9518ee9714be0" + integrity sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -15233,7 +15288,7 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -"semver@2 >=2.2.1 || 3.x || 4 || 5 || 7", semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.4: +"semver@2 >=2.2.1 || 3.x || 4 || 5 || 7", semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -15471,7 +15526,7 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== -sigstore@^1.3.0, sigstore@^1.4.0: +sigstore@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.6.0.tgz#887a4007c6ee83f3ef3fd844be1a0840e849c301" integrity sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g== @@ -15481,6 +15536,16 @@ sigstore@^1.3.0, sigstore@^1.4.0: make-fetch-happen "^11.0.1" tuf-js "^1.1.3" +sigstore@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.1.0.tgz#c577b596642b3f360dc4135d476466e6edeb2364" + integrity sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw== + dependencies: + "@sigstore/bundle" "^2.1.0" + "@sigstore/protobuf-specs" "^0.2.1" + "@sigstore/sign" "^2.1.0" + "@sigstore/tuf" "^2.1.0" + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -15626,10 +15691,19 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== +socks-proxy-agent@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.6.2, socks@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" smart-buffer "^4.2.0" @@ -15800,7 +15874,7 @@ ssri@^8.0.0: dependencies: minipass "^3.1.1" -ssri@^9.0.0, ssri@^9.0.1: +ssri@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== @@ -16732,6 +16806,15 @@ tuf-js@^1.1.3: "@tufjs/models" "1.0.4" make-fetch-happen "^11.1.0" +tuf-js@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.1.0.tgz#87aa36d5a166e7522f1e2050eb502a3a9b0bde72" + integrity sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA== + dependencies: + "@tufjs/models" "2.0.0" + debug "^4.3.4" + make-fetch-happen "^13.0.0" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -16957,13 +17040,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - unique-filename@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" @@ -16971,13 +17047,6 @@ unique-filename@^3.0.0: dependencies: unique-slug "^4.0.0" -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - unique-slug@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" @@ -17190,11 +17259,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-to-istanbul@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" @@ -17542,13 +17606,6 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -which@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.0.tgz#a9efd016db59728758a390d23f1687b6e8f59f8e" - integrity sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ== - dependencies: - isexe "^2.0.0" - which@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" @@ -17816,6 +17873,19 @@ yargs@16.2.0, yargs@^16.1.1, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@17.7.2, yargs@^17.6.2, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yargs@^15.0.2: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" @@ -17833,19 +17903,6 @@ yargs@^15.0.2: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.6.2, yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yarn-deduplicate@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/yarn-deduplicate/-/yarn-deduplicate-6.0.2.tgz#63498d2d4c3a8567e992a994ce0ab51aa5681f2e" From ca66fbe9f3a7673f6423e6d49c8003ec5f6856a5 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Tue, 2 Jan 2024 16:01:57 +0100 Subject: [PATCH 21/26] [docs-infra] Prefetch pages on hover (#40314) --- docs/src/modules/components/MarkdownLinks.js | 46 +++++++++++++++++--- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/docs/src/modules/components/MarkdownLinks.js b/docs/src/modules/components/MarkdownLinks.js index 415089c7b94570..495c29bf5ceca8 100644 --- a/docs/src/modules/components/MarkdownLinks.js +++ b/docs/src/modules/components/MarkdownLinks.js @@ -16,10 +16,7 @@ export function samePageLinkNavigation(event) { return false; } -/** - * @param {MouseEvent} event - */ -function handleClick(event) { +function isLink(event) { let activeElement = event.target; while (activeElement?.nodeType === Node.ELEMENT_NODE && activeElement.nodeName !== 'A') { activeElement = activeElement.parentElement; @@ -33,6 +30,18 @@ function handleClick(event) { activeElement.getAttribute('data-no-markdown-link') === 'true' || activeElement.getAttribute('href').indexOf('/') !== 0 ) { + return null; + } + + return activeElement; +} + +/** + * @param {MouseEvent} event + */ +function handleClick(event) { + const activeElement = isLink(event); + if (activeElement === null) { return; } @@ -47,11 +56,38 @@ function handleClick(event) { Router.push(canonicalPathname, as); } +/** + * Source copied from https://github.com/vercel/next.js/blob/ebc4eaaa2564b4283711646079d68e430496c88b/packages/next/src/client/link.tsx + */ +function handleMouseOver(event) { + const activeElement = isLink(event); + if (activeElement === null) { + return; + } + + const as = activeElement.getAttribute('href'); + const canonicalPathname = pathnameToLanguage(as).canonicalPathname; + + const prefetchPromise = Router.prefetch(canonicalPathname, as, { priority: true }); + // Prefetch the JSON page if asked (only in the client) + // We need to handle a prefetch error here since we may be + // loading with priority which can reject but we don't + // want to force navigation since this is only a prefetch + Promise.resolve(prefetchPromise).catch((err) => { + if (process.env.NODE_ENV !== 'production') { + // rethrow to show invalid URL errors + throw err; + } + }); +} + export default function MarkdownLinks() { React.useEffect(() => { document.addEventListener('click', handleClick); + document.addEventListener('mouseover', handleMouseOver); return () => { - document.addEventListener('click', handleClick); + document.removeEventListener('click', handleClick); + document.removeEventListener('mouseover', handleMouseOver); }; }, []); From a473383475df89ff2ee14744ace07c45260ca7d7 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Tue, 2 Jan 2024 12:11:48 -0300 Subject: [PATCH 22/26] [material-ui][docs] Revise the Divider page (#40356) --- .../dividers/DividerMaterialYouPlayground.js | 31 +++--- .../components/dividers/DividerText.js | 9 +- .../components/dividers/DividerText.tsx | 9 +- .../dividers/DividerText.tsx.preview | 2 +- .../components/dividers/DividerVariants.js | 37 +++++++ .../components/dividers/DividerVariants.tsx | 37 +++++++ .../components/dividers/FlexDivider.js | 28 +++++ .../components/dividers/FlexDivider.tsx | 28 +++++ .../dividers/FlexDivider.tsx.preview | 3 + .../components/dividers/InsetDividers.js | 49 --------- .../components/dividers/InsetDividers.tsx | 49 --------- .../components/dividers/IntroDivider.js | 39 +++++++ .../components/dividers/IntroDivider.tsx | 39 +++++++ .../components/dividers/ListDividers.js | 21 ++-- .../components/dividers/ListDividers.tsx | 21 ++-- .../dividers/ListDividers.tsx.preview | 16 --- .../components/dividers/MiddleDividers.js | 48 --------- .../components/dividers/MiddleDividers.tsx | 48 --------- .../components/dividers/SubheaderDividers.js | 58 ---------- .../components/dividers/SubheaderDividers.tsx | 58 ---------- .../dividers/VerticalDividerMiddle.js | 50 ++++----- .../dividers/VerticalDividerMiddle.tsx | 50 ++++----- .../dividers/VerticalDividerText.js | 36 ------- .../dividers/VerticalDividerText.tsx | 36 ------- .../dividers/VerticalDividerText.tsx.preview | 11 -- .../components/dividers/VerticalDividers.js | 50 ++++----- .../components/dividers/VerticalDividers.tsx | 50 ++++----- .../dividers/VerticalDividers.tsx.preview | 5 + .../material/components/dividers/dividers.md | 101 ++++++++++-------- 29 files changed, 414 insertions(+), 605 deletions(-) create mode 100644 docs/data/material/components/dividers/DividerVariants.js create mode 100644 docs/data/material/components/dividers/DividerVariants.tsx create mode 100644 docs/data/material/components/dividers/FlexDivider.js create mode 100644 docs/data/material/components/dividers/FlexDivider.tsx create mode 100644 docs/data/material/components/dividers/FlexDivider.tsx.preview delete mode 100644 docs/data/material/components/dividers/InsetDividers.js delete mode 100644 docs/data/material/components/dividers/InsetDividers.tsx create mode 100644 docs/data/material/components/dividers/IntroDivider.js create mode 100644 docs/data/material/components/dividers/IntroDivider.tsx delete mode 100644 docs/data/material/components/dividers/ListDividers.tsx.preview delete mode 100644 docs/data/material/components/dividers/MiddleDividers.js delete mode 100644 docs/data/material/components/dividers/MiddleDividers.tsx delete mode 100644 docs/data/material/components/dividers/SubheaderDividers.js delete mode 100644 docs/data/material/components/dividers/SubheaderDividers.tsx delete mode 100644 docs/data/material/components/dividers/VerticalDividerText.js delete mode 100644 docs/data/material/components/dividers/VerticalDividerText.tsx delete mode 100644 docs/data/material/components/dividers/VerticalDividerText.tsx.preview create mode 100644 docs/data/material/components/dividers/VerticalDividers.tsx.preview diff --git a/docs/data/material/components/dividers/DividerMaterialYouPlayground.js b/docs/data/material/components/dividers/DividerMaterialYouPlayground.js index eda28271c3e88a..06d2148815bb43 100644 --- a/docs/data/material/components/dividers/DividerMaterialYouPlayground.js +++ b/docs/data/material/components/dividers/DividerMaterialYouPlayground.js @@ -3,15 +3,24 @@ import Divider from '@mui/material-next/Divider'; import MaterialYouUsageDemo from 'docs/src/modules/components/MaterialYouUsageDemo'; import { Avatar, + Box, List, ListItem, ListItemAvatar, ListItemText, - Grid, } from '@mui/material'; import ImageIcon from '@mui/icons-material/Image'; import WorkIcon from '@mui/icons-material/Work'; +const listStyle = { + p: 0, + width: 300, + borderRadius: 2, + border: '1px solid', + borderColor: 'divider', + backgroundColor: 'background.paper', +}; + export default function DividerMaterialYouPlayground() { return ( { const content = ( -
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus id dignissim justo. Nulla ut facilisis ligula. -

+

); return props.orientation === 'horizontal' ? ( - + @@ -59,15 +68,11 @@ export default function DividerMaterialYouPlayground() { ) : ( - - - {content} - - - - {content} - - + + {content} + + {content} + ); }} /> diff --git a/docs/data/material/components/dividers/DividerText.js b/docs/data/material/components/dividers/DividerText.js index 56a1cd7dcb6ce5..aa4bd5c8f4178c 100644 --- a/docs/data/material/components/dividers/DividerText.js +++ b/docs/data/material/components/dividers/DividerText.js @@ -6,6 +6,7 @@ import Chip from '@mui/material/Chip'; const Root = styled('div')(({ theme }) => ({ width: '100%', ...theme.typography.body2, + color: theme.palette.text.secondary, '& > :not(style) ~ :not(style)': { marginTop: theme.spacing(2), }, @@ -13,11 +14,7 @@ const Root = styled('div')(({ theme }) => ({ export default function DividerText() { const content = ( -
- {`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus id dignissim justo. - Nulla ut facilisis ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. - Sed malesuada lobortis pretium.`} -
+

{`Lorem ipsum dolor sit amet, consectetur adipiscing elit.`}

); return ( @@ -30,7 +27,7 @@ export default function DividerText() { RIGHT {content} - + {content} diff --git a/docs/data/material/components/dividers/DividerText.tsx b/docs/data/material/components/dividers/DividerText.tsx index 56a1cd7dcb6ce5..aa4bd5c8f4178c 100644 --- a/docs/data/material/components/dividers/DividerText.tsx +++ b/docs/data/material/components/dividers/DividerText.tsx @@ -6,6 +6,7 @@ import Chip from '@mui/material/Chip'; const Root = styled('div')(({ theme }) => ({ width: '100%', ...theme.typography.body2, + color: theme.palette.text.secondary, '& > :not(style) ~ :not(style)': { marginTop: theme.spacing(2), }, @@ -13,11 +14,7 @@ const Root = styled('div')(({ theme }) => ({ export default function DividerText() { const content = ( -
- {`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus id dignissim justo. - Nulla ut facilisis ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. - Sed malesuada lobortis pretium.`} -
+

{`Lorem ipsum dolor sit amet, consectetur adipiscing elit.`}

); return ( @@ -30,7 +27,7 @@ export default function DividerText() { RIGHT {content} - + {content} diff --git a/docs/data/material/components/dividers/DividerText.tsx.preview b/docs/data/material/components/dividers/DividerText.tsx.preview index 3d929623082adc..5d7891ff1a12d9 100644 --- a/docs/data/material/components/dividers/DividerText.tsx.preview +++ b/docs/data/material/components/dividers/DividerText.tsx.preview @@ -7,7 +7,7 @@ RIGHT {content} - + {content} \ No newline at end of file diff --git a/docs/data/material/components/dividers/DividerVariants.js b/docs/data/material/components/dividers/DividerVariants.js new file mode 100644 index 00000000000000..995edc421280b7 --- /dev/null +++ b/docs/data/material/components/dividers/DividerVariants.js @@ -0,0 +1,37 @@ +import * as React from 'react'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import Divider from '@mui/material/Divider'; + +const style = { + py: 0, + width: '100%', + maxWidth: 360, + borderRadius: 2, + border: '1px solid', + borderColor: 'divider', + backgroundColor: 'background.paper', +}; + +export default function DividerVariants() { + return ( + + + + + + + + + + + + + + + + + + ); +} diff --git a/docs/data/material/components/dividers/DividerVariants.tsx b/docs/data/material/components/dividers/DividerVariants.tsx new file mode 100644 index 00000000000000..995edc421280b7 --- /dev/null +++ b/docs/data/material/components/dividers/DividerVariants.tsx @@ -0,0 +1,37 @@ +import * as React from 'react'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import Divider from '@mui/material/Divider'; + +const style = { + py: 0, + width: '100%', + maxWidth: 360, + borderRadius: 2, + border: '1px solid', + borderColor: 'divider', + backgroundColor: 'background.paper', +}; + +export default function DividerVariants() { + return ( + + + + + + + + + + + + + + + + + + ); +} diff --git a/docs/data/material/components/dividers/FlexDivider.js b/docs/data/material/components/dividers/FlexDivider.js new file mode 100644 index 00000000000000..6c8e46cfbc0f6a --- /dev/null +++ b/docs/data/material/components/dividers/FlexDivider.js @@ -0,0 +1,28 @@ +import * as React from 'react'; +import FormatBoldIcon from '@mui/icons-material/FormatBold'; +import FormatItalicIcon from '@mui/icons-material/FormatItalic'; +import Box from '@mui/material/Box'; +import Divider from '@mui/material/Divider'; + +export default function FlexDivider() { + return ( + + + + + + ); +} diff --git a/docs/data/material/components/dividers/FlexDivider.tsx b/docs/data/material/components/dividers/FlexDivider.tsx new file mode 100644 index 00000000000000..6c8e46cfbc0f6a --- /dev/null +++ b/docs/data/material/components/dividers/FlexDivider.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; +import FormatBoldIcon from '@mui/icons-material/FormatBold'; +import FormatItalicIcon from '@mui/icons-material/FormatItalic'; +import Box from '@mui/material/Box'; +import Divider from '@mui/material/Divider'; + +export default function FlexDivider() { + return ( + + + + + + ); +} diff --git a/docs/data/material/components/dividers/FlexDivider.tsx.preview b/docs/data/material/components/dividers/FlexDivider.tsx.preview new file mode 100644 index 00000000000000..36aa2cb757ab2d --- /dev/null +++ b/docs/data/material/components/dividers/FlexDivider.tsx.preview @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/docs/data/material/components/dividers/InsetDividers.js b/docs/data/material/components/dividers/InsetDividers.js deleted file mode 100644 index 96925c7c1f46b3..00000000000000 --- a/docs/data/material/components/dividers/InsetDividers.js +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from 'react'; -import List from '@mui/material/List'; -import ListItem from '@mui/material/ListItem'; -import ListItemText from '@mui/material/ListItemText'; -import ListItemAvatar from '@mui/material/ListItemAvatar'; -import Avatar from '@mui/material/Avatar'; -import ImageIcon from '@mui/icons-material/Image'; -import WorkIcon from '@mui/icons-material/Work'; -import BeachAccessIcon from '@mui/icons-material/BeachAccess'; -import Divider from '@mui/material/Divider'; - -export default function InsetDividers() { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -} diff --git a/docs/data/material/components/dividers/InsetDividers.tsx b/docs/data/material/components/dividers/InsetDividers.tsx deleted file mode 100644 index 96925c7c1f46b3..00000000000000 --- a/docs/data/material/components/dividers/InsetDividers.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as React from 'react'; -import List from '@mui/material/List'; -import ListItem from '@mui/material/ListItem'; -import ListItemText from '@mui/material/ListItemText'; -import ListItemAvatar from '@mui/material/ListItemAvatar'; -import Avatar from '@mui/material/Avatar'; -import ImageIcon from '@mui/icons-material/Image'; -import WorkIcon from '@mui/icons-material/Work'; -import BeachAccessIcon from '@mui/icons-material/BeachAccess'; -import Divider from '@mui/material/Divider'; - -export default function InsetDividers() { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -} diff --git a/docs/data/material/components/dividers/IntroDivider.js b/docs/data/material/components/dividers/IntroDivider.js new file mode 100644 index 00000000000000..7f97e9f02c93cf --- /dev/null +++ b/docs/data/material/components/dividers/IntroDivider.js @@ -0,0 +1,39 @@ +import * as React from 'react'; +import Card from '@mui/material/Card'; +import Box from '@mui/material/Box'; +import Chip from '@mui/material/Chip'; +import Stack from '@mui/material/Stack'; +import Divider from '@mui/material/Divider'; +import Typography from '@mui/material/Typography'; + +export default function IntroDivider() { + return ( + + + + + Toothbrush + + + $4.50 + + + + Pinstriped cornflower blue cotton blouse takes you on a walk to the park or + just down the hall. + + + + + + Select type + + + + + + + + + ); +} diff --git a/docs/data/material/components/dividers/IntroDivider.tsx b/docs/data/material/components/dividers/IntroDivider.tsx new file mode 100644 index 00000000000000..7f97e9f02c93cf --- /dev/null +++ b/docs/data/material/components/dividers/IntroDivider.tsx @@ -0,0 +1,39 @@ +import * as React from 'react'; +import Card from '@mui/material/Card'; +import Box from '@mui/material/Box'; +import Chip from '@mui/material/Chip'; +import Stack from '@mui/material/Stack'; +import Divider from '@mui/material/Divider'; +import Typography from '@mui/material/Typography'; + +export default function IntroDivider() { + return ( + + + + + Toothbrush + + + $4.50 + + + + Pinstriped cornflower blue cotton blouse takes you on a walk to the park or + just down the hall. + + + + + + Select type + + + + + + + + + ); +} diff --git a/docs/data/material/components/dividers/ListDividers.js b/docs/data/material/components/dividers/ListDividers.js index 3827783939aad3..1767cfd5189d3a 100644 --- a/docs/data/material/components/dividers/ListDividers.js +++ b/docs/data/material/components/dividers/ListDividers.js @@ -5,26 +5,31 @@ import ListItemText from '@mui/material/ListItemText'; import Divider from '@mui/material/Divider'; const style = { + p: 0, width: '100%', maxWidth: 360, - bgcolor: 'background.paper', + borderRadius: 2, + border: '1px solid', + borderColor: 'divider', + backgroundColor: 'background.paper', }; export default function ListDividers() { return ( - - + + - - + + - + + - - + + diff --git a/docs/data/material/components/dividers/ListDividers.tsx b/docs/data/material/components/dividers/ListDividers.tsx index 3827783939aad3..1767cfd5189d3a 100644 --- a/docs/data/material/components/dividers/ListDividers.tsx +++ b/docs/data/material/components/dividers/ListDividers.tsx @@ -5,26 +5,31 @@ import ListItemText from '@mui/material/ListItemText'; import Divider from '@mui/material/Divider'; const style = { + p: 0, width: '100%', maxWidth: 360, - bgcolor: 'background.paper', + borderRadius: 2, + border: '1px solid', + borderColor: 'divider', + backgroundColor: 'background.paper', }; export default function ListDividers() { return ( - - + + - - + + - + + - - + + diff --git a/docs/data/material/components/dividers/ListDividers.tsx.preview b/docs/data/material/components/dividers/ListDividers.tsx.preview deleted file mode 100644 index ef182b48ecd246..00000000000000 --- a/docs/data/material/components/dividers/ListDividers.tsx.preview +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/data/material/components/dividers/MiddleDividers.js b/docs/data/material/components/dividers/MiddleDividers.js deleted file mode 100644 index 00596c7a4d82bc..00000000000000 --- a/docs/data/material/components/dividers/MiddleDividers.js +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react'; -import Box from '@mui/material/Box'; -import Chip from '@mui/material/Chip'; -import Button from '@mui/material/Button'; -import Grid from '@mui/material/Grid'; -import Stack from '@mui/material/Stack'; -import Divider from '@mui/material/Divider'; -import Typography from '@mui/material/Typography'; - -export default function MiddleDividers() { - return ( - - - - - - Toothbrush - - - - - $4.50 - - - - - Pinstriped cornflower blue cotton blouse takes you on a walk to the park or - just down the hall. - - - - - - Select type - - - - - - - - - - - - - ); -} diff --git a/docs/data/material/components/dividers/MiddleDividers.tsx b/docs/data/material/components/dividers/MiddleDividers.tsx deleted file mode 100644 index 00596c7a4d82bc..00000000000000 --- a/docs/data/material/components/dividers/MiddleDividers.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react'; -import Box from '@mui/material/Box'; -import Chip from '@mui/material/Chip'; -import Button from '@mui/material/Button'; -import Grid from '@mui/material/Grid'; -import Stack from '@mui/material/Stack'; -import Divider from '@mui/material/Divider'; -import Typography from '@mui/material/Typography'; - -export default function MiddleDividers() { - return ( - - - - - - Toothbrush - - - - - $4.50 - - - - - Pinstriped cornflower blue cotton blouse takes you on a walk to the park or - just down the hall. - - - - - - Select type - - - - - - - - - - - - - ); -} diff --git a/docs/data/material/components/dividers/SubheaderDividers.js b/docs/data/material/components/dividers/SubheaderDividers.js deleted file mode 100644 index 488de12b0a0c5f..00000000000000 --- a/docs/data/material/components/dividers/SubheaderDividers.js +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; -import List from '@mui/material/List'; -import ListItem from '@mui/material/ListItem'; -import ListItemAvatar from '@mui/material/ListItemAvatar'; -import ListItemText from '@mui/material/ListItemText'; -import Avatar from '@mui/material/Avatar'; -import BeachAccessIcon from '@mui/icons-material/BeachAccess'; -import Divider from '@mui/material/Divider'; -import Typography from '@mui/material/Typography'; - -export default function SubheaderDividers() { - return ( - - - - - -
  • - - Divider - -
  • - - - - -
  • - - Leisure - -
  • - - - - - - - - -
    - ); -} diff --git a/docs/data/material/components/dividers/SubheaderDividers.tsx b/docs/data/material/components/dividers/SubheaderDividers.tsx deleted file mode 100644 index 488de12b0a0c5f..00000000000000 --- a/docs/data/material/components/dividers/SubheaderDividers.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import * as React from 'react'; -import List from '@mui/material/List'; -import ListItem from '@mui/material/ListItem'; -import ListItemAvatar from '@mui/material/ListItemAvatar'; -import ListItemText from '@mui/material/ListItemText'; -import Avatar from '@mui/material/Avatar'; -import BeachAccessIcon from '@mui/icons-material/BeachAccess'; -import Divider from '@mui/material/Divider'; -import Typography from '@mui/material/Typography'; - -export default function SubheaderDividers() { - return ( - - - - - -
  • - - Divider - -
  • - - - - -
  • - - Leisure - -
  • - - - - - - - - -
    - ); -} diff --git a/docs/data/material/components/dividers/VerticalDividerMiddle.js b/docs/data/material/components/dividers/VerticalDividerMiddle.js index cd823e4ad1489b..f11eb1f645a21c 100644 --- a/docs/data/material/components/dividers/VerticalDividerMiddle.js +++ b/docs/data/material/components/dividers/VerticalDividerMiddle.js @@ -1,39 +1,31 @@ import * as React from 'react'; +import Card from '@mui/material/Card'; +import Divider from '@mui/material/Divider'; import FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft'; import FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter'; import FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight'; import FormatBoldIcon from '@mui/icons-material/FormatBold'; -import FormatItalicIcon from '@mui/icons-material/FormatItalic'; -import Box from '@mui/material/Box'; -import Divider from '@mui/material/Divider'; export default function VerticalDividerMiddle() { return ( -
    - `1px solid ${theme.palette.divider}`, - borderRadius: 1, - bgcolor: 'background.paper', - color: 'text.secondary', - '& svg': { - m: 1.5, - }, - '& hr': { - mx: 0.5, - }, - }} - > - - - - - - - -
    + + + + + + + ); } diff --git a/docs/data/material/components/dividers/VerticalDividerMiddle.tsx b/docs/data/material/components/dividers/VerticalDividerMiddle.tsx index cd823e4ad1489b..f11eb1f645a21c 100644 --- a/docs/data/material/components/dividers/VerticalDividerMiddle.tsx +++ b/docs/data/material/components/dividers/VerticalDividerMiddle.tsx @@ -1,39 +1,31 @@ import * as React from 'react'; +import Card from '@mui/material/Card'; +import Divider from '@mui/material/Divider'; import FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft'; import FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter'; import FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight'; import FormatBoldIcon from '@mui/icons-material/FormatBold'; -import FormatItalicIcon from '@mui/icons-material/FormatItalic'; -import Box from '@mui/material/Box'; -import Divider from '@mui/material/Divider'; export default function VerticalDividerMiddle() { return ( -
    - `1px solid ${theme.palette.divider}`, - borderRadius: 1, - bgcolor: 'background.paper', - color: 'text.secondary', - '& svg': { - m: 1.5, - }, - '& hr': { - mx: 0.5, - }, - }} - > - - - - - - - -
    + + + + + + + ); } diff --git a/docs/data/material/components/dividers/VerticalDividerText.js b/docs/data/material/components/dividers/VerticalDividerText.js deleted file mode 100644 index 835df7b3494960..00000000000000 --- a/docs/data/material/components/dividers/VerticalDividerText.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -import { styled } from '@mui/material/styles'; -import MuiGrid from '@mui/material/Grid'; -import Divider from '@mui/material/Divider'; - -const Grid = styled(MuiGrid)(({ theme }) => ({ - width: '100%', - ...theme.typography.body2, - '& [role="separator"]': { - margin: theme.spacing(0, 2), - }, -})); - -export default function VerticalDividerText() { - const content = ( -
    - {`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus id dignissim justo. - Nulla ut facilisis ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. - Sed malesuada lobortis pretium.`} -
    - ); - - return ( - - - {content} - - - VERTICAL - - - {content} - - - ); -} diff --git a/docs/data/material/components/dividers/VerticalDividerText.tsx b/docs/data/material/components/dividers/VerticalDividerText.tsx deleted file mode 100644 index 835df7b3494960..00000000000000 --- a/docs/data/material/components/dividers/VerticalDividerText.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -import { styled } from '@mui/material/styles'; -import MuiGrid from '@mui/material/Grid'; -import Divider from '@mui/material/Divider'; - -const Grid = styled(MuiGrid)(({ theme }) => ({ - width: '100%', - ...theme.typography.body2, - '& [role="separator"]': { - margin: theme.spacing(0, 2), - }, -})); - -export default function VerticalDividerText() { - const content = ( -
    - {`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus id dignissim justo. - Nulla ut facilisis ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. - Sed malesuada lobortis pretium.`} -
    - ); - - return ( - - - {content} - - - VERTICAL - - - {content} - - - ); -} diff --git a/docs/data/material/components/dividers/VerticalDividerText.tsx.preview b/docs/data/material/components/dividers/VerticalDividerText.tsx.preview deleted file mode 100644 index 56dfe9cba3762a..00000000000000 --- a/docs/data/material/components/dividers/VerticalDividerText.tsx.preview +++ /dev/null @@ -1,11 +0,0 @@ - - - {content} - - - VERTICAL - - - {content} - - \ No newline at end of file diff --git a/docs/data/material/components/dividers/VerticalDividers.js b/docs/data/material/components/dividers/VerticalDividers.js index 8583bd6a84f223..c3a193154fc83c 100644 --- a/docs/data/material/components/dividers/VerticalDividers.js +++ b/docs/data/material/components/dividers/VerticalDividers.js @@ -3,37 +3,33 @@ import FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft'; import FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter'; import FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight'; import FormatBoldIcon from '@mui/icons-material/FormatBold'; -import FormatItalicIcon from '@mui/icons-material/FormatItalic'; import Box from '@mui/material/Box'; import Divider from '@mui/material/Divider'; export default function VerticalDividers() { return ( -
    - `1px solid ${theme.palette.divider}`, - borderRadius: 1, - bgcolor: 'background.paper', - color: 'text.secondary', - '& svg': { - m: 1.5, - }, - '& hr': { - mx: 0.5, - }, - }} - > - - - - - - - -
    + + + + + + + ); } diff --git a/docs/data/material/components/dividers/VerticalDividers.tsx b/docs/data/material/components/dividers/VerticalDividers.tsx index 8583bd6a84f223..c3a193154fc83c 100644 --- a/docs/data/material/components/dividers/VerticalDividers.tsx +++ b/docs/data/material/components/dividers/VerticalDividers.tsx @@ -3,37 +3,33 @@ import FormatAlignLeftIcon from '@mui/icons-material/FormatAlignLeft'; import FormatAlignCenterIcon from '@mui/icons-material/FormatAlignCenter'; import FormatAlignRightIcon from '@mui/icons-material/FormatAlignRight'; import FormatBoldIcon from '@mui/icons-material/FormatBold'; -import FormatItalicIcon from '@mui/icons-material/FormatItalic'; import Box from '@mui/material/Box'; import Divider from '@mui/material/Divider'; export default function VerticalDividers() { return ( -
    - `1px solid ${theme.palette.divider}`, - borderRadius: 1, - bgcolor: 'background.paper', - color: 'text.secondary', - '& svg': { - m: 1.5, - }, - '& hr': { - mx: 0.5, - }, - }} - > - - - - - - - -
    + + + + + + + ); } diff --git a/docs/data/material/components/dividers/VerticalDividers.tsx.preview b/docs/data/material/components/dividers/VerticalDividers.tsx.preview new file mode 100644 index 00000000000000..9821ca88280805 --- /dev/null +++ b/docs/data/material/components/dividers/VerticalDividers.tsx.preview @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/docs/data/material/components/dividers/dividers.md b/docs/data/material/components/dividers/dividers.md index c91802f4e142bf..356aafa9f09460 100644 --- a/docs/data/material/components/dividers/dividers.md +++ b/docs/data/material/components/dividers/dividers.md @@ -8,82 +8,99 @@ materialDesign: https://m2.material.io/components/dividers # Divider -

    A divider is a thin line that groups content in lists and layouts.

    - -Dividers separate content into clear groups. +

    The Divider component provides a thin, unobtrusive line for grouping elements to reinforce visual hierarchy.

    {{"component": "modules/components/ComponentLinkHeader.js"}} -## List dividers +## Introduction -The divider renders as an `
    ` by default. -You can save rendering this DOM element by using the `divider` prop on the `ListItem` component. +The Material UI Divider component renders as a dark gray `
    ` by default, and features several useful props for quick style adjustments. -{{"demo": "ListDividers.js", "bg": true}} +{{"demo": "IntroDivider.js", "bg": true}} -## HTML5 specification +:::success +Use the handy `light` prop to make the Divider slightly lighter. +::: -In a list, you should ensure the `Divider` is rendered as an `
  • ` to match the HTML5 specification. -The examples below show two ways of achieving this. +## Basics -## Inset dividers +```jsx +import Divider from '@mui/material/Divider'; +``` -{{"demo": "InsetDividers.js", "bg": true}} +### Variants -## Subheader dividers +The Divider component supports three variants: `fullWidth` (default), `inset`, and `middle`. -{{"demo": "SubheaderDividers.js", "bg": true}} +{{"demo": "DividerVariants.js", "bg": true}} -## Middle divider +### Orientation -{{"demo": "MiddleDividers.js", "bg": true}} +Use the `orientation` prop to change the Divider from horizontal to vertical. -## Dividers with text +{{"demo": "VerticalDividers.js", "bg": true}} -You can also render a divider with content. +### Flex item -{{"demo": "DividerText.js"}} +Use the `flexItem` prop to display the Divider when it's being used in a flex container. -:::warning -When using the `Divider` component for visual decoration, such as in a heading, explicitly specify `role="presentation"` to the divider to make sure screen readers can announce its content: +{{"demo": "FlexDivider.js", "bg": true}} -```js - - {/* any elements nested inside the role="presentation" preserve their semantics. */} - My Heading - -``` +### With children -::: +Use the `textAlign` prop to align elements that are wrapped by the Divider. -## Vertical divider +{{"demo": "DividerText.js", "bg": true}} -You can also render a divider vertically using the `orientation` prop. +## Customization -{{"demo": "VerticalDividers.js", "bg": true}} +### Use with a List -:::info -Note the use of the `flexItem` prop to accommodate for the flex container. -::: +When using the Divider to separate items in a List, use the `component` prop to render it as an `
  • `—otherwise it won't be a valid HTML element. + +{{"demo": "ListDividers.js", "bg": true}} -### Vertical with variant middle +### Icon grouping -You can also render a vertical divider with `variant="middle"`. +The demo below shows how to combine the props `variant="middle"` and `orientation="vertical"`. {{"demo": "VerticalDividerMiddle.js", "bg": true}} -### Vertical with text +## Accessibility -You can also render a vertical divider with content. +Due to its implicit role of `separator`, the Divider, which is a `
    ` element, will be announced by screen readers as a "Horziontal Splitter" (or vertical, if you're using the `orientation` prop). -{{"demo": "VerticalDividerText.js"}} +If you're using it as a purely stylistic element, we recommend setting `aria-hidden="true"` which will make screen readers bypass it. + +```js +
  • ) : null}
  • - + Date: Tue, 2 Jan 2024 16:44:39 +0100 Subject: [PATCH 24/26] [docs-infra] Fix missing button aria-label (#40394) --- docs/src/modules/components/ApiPage.js | 7 --- .../components/ApiPage/list/ClassesList.tsx | 5 ++- .../ApiPage/list/ExpandableApiItem.tsx | 40 +++++++---------- .../ApiPage/list/PropertiesList.tsx | 25 ++++------- .../components/ApiPage/list/SlotsList.tsx | 5 ++- .../ApiPage/sections/PropertiesSection.js | 44 +++++++++---------- .../ApiPage/sections/ToggleDisplayOption.tsx | 10 ----- .../ApiPage/table/PropertiesTable.tsx | 7 --- .../components/ComponentsApiContent.js | 8 ---- 9 files changed, 52 insertions(+), 99 deletions(-) diff --git a/docs/src/modules/components/ApiPage.js b/docs/src/modules/components/ApiPage.js index 907ead6b75628a..4eda17e5298d4f 100644 --- a/docs/src/modules/components/ApiPage.js +++ b/docs/src/modules/components/ApiPage.js @@ -252,14 +252,12 @@ export default function ApiPage(props) { /> ) : null} - - {cssComponent && ( )} -
    - {inheritance && ( @@ -297,7 +293,6 @@ export default function ApiPage(props) { )} - {pageContent.themeDefaultProps && ( @@ -311,7 +306,6 @@ export default function ApiPage(props) { )} - - - `${componentName ? `${componentName}-` : ''}classes-${className}`; +export function getHash({ componentName, className }: HashParams) { + return `${componentName ? `${componentName}-` : ''}classes-${className}`; +} export default function ClassesList(props: ClassesListProps) { const { classes, displayOption, componentName, displayClassKeys } = props; diff --git a/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx b/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx index 3018d0f6e5c38a..be8c66d1c193ca 100644 --- a/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx +++ b/docs/src/modules/components/ApiPage/list/ExpandableApiItem.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import PropTypes from 'prop-types'; import clsx from 'clsx'; import { alpha, styled } from '@mui/material/styles'; import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; @@ -170,30 +169,30 @@ const Root = styled('div')<{ ownerState: { type?: DescriptionType } }>( }), ); -export type ApiItemProps = { - id: string; - title: string; +type ExpandableApiItemProps = { + children?: React.ReactNode; + className?: string; description?: string; - note?: string; - type?: DescriptionType; + displayOption?: 'collapsed' | 'expanded'; + id: string; isExtendable?: boolean; - className?: string; - children?: React.ReactNode; + note?: string; sx?: SxProps; - displayOption?: 'collapsed' | 'expanded'; + title: string; + type?: DescriptionType; }; -function ApiItem(props: ApiItemProps) { +export default function ExpandableApiItem(props: ExpandableApiItemProps) { const { - title, - description, - note, children, - type, - id, - isExtendable = true, className, + description, displayOption, + id, + isExtendable = true, + note, + title, + type, ...other } = props; @@ -228,6 +227,7 @@ function ApiItem(props: ApiItemProps) { setIsExtended((prev) => !prev)} className="MuiApi-expend-button" + aria-label={isExtended ? 'Collapse' : 'Expand'} size="small" sx={{ p: 0, ml: 'auto', borderRadius: '6px' }} > @@ -245,16 +245,8 @@ function ApiItem(props: ApiItemProps) { ); } -ApiItem.propTypes = { - description: PropTypes.string, - note: PropTypes.string, - title: PropTypes.string.isRequired, -}; - export const ApiItemContaier = styled('div')({ width: '100%', display: 'flex', flexDirection: 'column', }); - -export default ApiItem; diff --git a/docs/src/modules/components/ApiPage/list/PropertiesList.tsx b/docs/src/modules/components/ApiPage/list/PropertiesList.tsx index ec89f6703dd947..e232a180ba023f 100644 --- a/docs/src/modules/components/ApiPage/list/PropertiesList.tsx +++ b/docs/src/modules/components/ApiPage/list/PropertiesList.tsx @@ -1,6 +1,5 @@ /* eslint-disable react/no-danger */ import * as React from 'react'; -import PropTypes from 'prop-types'; import { styled } from '@mui/material/styles'; import Alert from '@mui/material/Alert'; import WarningRoundedIcon from '@mui/icons-material/WarningRounded'; @@ -22,7 +21,7 @@ const StyledApiItem = styled(ExpandableApiItem)( display: 'flex', flexDirection: 'column', gap: 8, - '&>p': { + '& > p': { margin: 0, }, '& .prop-list-title': { @@ -38,7 +37,7 @@ const StyledApiItem = styled(ExpandableApiItem)( }, }, '& .prop-list-deprecated': { - '& code ': { all: 'unset' }, + '& code': { all: 'unset' }, }, '& .prop-list-default-props': { ...theme.typography.body2, @@ -55,7 +54,7 @@ const StyledApiItem = styled(ExpandableApiItem)( marginTop: 2, marginBottom: 0, }, - '&>code': { + '& > code': { borderRadius: 8, padding: 12, width: '100%', @@ -76,7 +75,6 @@ const StyledApiItem = styled(ExpandableApiItem)( }, }, }, - '& .prop-list-default-props': { color: `var(--muidocs-palette-grey-300, ${darkTheme.palette.grey[300]})`, }, @@ -84,7 +82,8 @@ const StyledApiItem = styled(ExpandableApiItem)( }), ); -function PropDescription({ description }: { description: string }) { +function PropDescription(props: { description: string }) { + const { description } = props; const isUlPresent = description.includes('