diff --git a/packages/manager/.changeset/pr-11962-changed-1743652792312.md b/packages/manager/.changeset/pr-11962-changed-1743652792312.md new file mode 100644 index 00000000000..2116ae7e2b7 --- /dev/null +++ b/packages/manager/.changeset/pr-11962-changed-1743652792312.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Changed +--- + +Update toast styling to Akamai Design System specs ([#11962](https://github.com/linode/manager/pull/11962)) diff --git a/packages/manager/src/components/Snackbar/CloseSnackbar.tsx b/packages/manager/src/components/Snackbar/CloseSnackbar.tsx index 7a2ae79136f..b5be1ed6653 100644 --- a/packages/manager/src/components/Snackbar/CloseSnackbar.tsx +++ b/packages/manager/src/components/Snackbar/CloseSnackbar.tsx @@ -1,5 +1,4 @@ -import { IconButton } from '@linode/ui'; -import Close from '@mui/icons-material/Close'; +import { CloseIcon, IconButton } from '@linode/ui'; import * as React from 'react'; interface Props { @@ -20,7 +19,7 @@ export const CloseSnackbar = (props: Props) => { size="large" title={text} > - + ); }; diff --git a/packages/manager/src/components/Snackbar/Snackbar.tsx b/packages/manager/src/components/Snackbar/Snackbar.tsx index d111476a7f9..c34633f19d5 100644 --- a/packages/manager/src/components/Snackbar/Snackbar.tsx +++ b/packages/manager/src/components/Snackbar/Snackbar.tsx @@ -5,14 +5,36 @@ import * as React from 'react'; import { CloseSnackbar } from './CloseSnackbar'; +import { + InfoOutlinedIcon, + TipOutlinedIcon, + WarningOutlinedIcon, + ErrorOutlinedIcon, + SuccessOutlinedIcon, +} from '@linode/ui'; + import type { Theme } from '@mui/material/styles'; import type { SnackbarProviderProps } from 'notistack'; +// Add override for "tip" variant which is Akamai specific and not built into Notistack +declare module 'notistack' { + interface VariantOverrides { + tip: true; + } +} + const StyledMaterialDesignContent = styled(MaterialDesignContent)( ({ theme }: { theme: Theme }) => ({ + '#notistack-snackbar > svg': { + position: 'absolute', + left: '14px', + }, '&.notistack-MuiContent': { color: theme.notificationToast.default.color, flexWrap: 'unset', + borderRadius: 0, + paddingLeft: theme.spacingFunction(12), + paddingRight: theme.spacingFunction(12), [theme.breakpoints.up('md')]: { maxWidth: '400px', }, @@ -25,7 +47,7 @@ const StyledMaterialDesignContent = styled(MaterialDesignContent)( backgroundColor: theme.notificationToast.error.backgroundColor, borderLeft: theme.notificationToast.error.borderLeft, }, - '&.notistack-MuiContent-info': { + '&.notistack-MuiContent-info, &.notistack-MuiContent-tip': { backgroundColor: theme.notificationToast.info.backgroundColor, borderLeft: theme.notificationToast.info.borderLeft, }, @@ -37,6 +59,9 @@ const StyledMaterialDesignContent = styled(MaterialDesignContent)( backgroundColor: theme.notificationToast.warning.backgroundColor, borderLeft: theme.notificationToast.warning.borderLeft, }, + '& #notistack-snackbar + div': { + paddingLeft: theme.spacingFunction(12), + }, }) ); @@ -50,13 +75,22 @@ export const Snackbar = (props: SnackbarProviderProps) => { return ( , + info: , + tip: , + warning: , + error: , + success: , + }} {...rest} Components={{ default: StyledMaterialDesignContent, - error: StyledMaterialDesignContent, info: StyledMaterialDesignContent, - success: StyledMaterialDesignContent, + tip: StyledMaterialDesignContent, warning: StyledMaterialDesignContent, + error: StyledMaterialDesignContent, + success: StyledMaterialDesignContent, }} action={(snackbarId) => ( ; export const Default: Story = { args: { anchorOrigin: { horizontal: 'right', vertical: 'bottom' }, - hideIconVariant: true, + hideIconVariant: false, maxSnack: 5, }, render: (args) =>