diff --git a/src/client/dd-hub-react/src/layouts/dashboard/css-vars.ts b/src/client/dd-hub-react/src/layouts/dashboard/css-vars.ts index da390bc..4a5c867 100644 --- a/src/client/dd-hub-react/src/layouts/dashboard/css-vars.ts +++ b/src/client/dd-hub-react/src/layouts/dashboard/css-vars.ts @@ -5,7 +5,7 @@ import type { Theme } from '@mui/material/styles'; export function dashboardLayoutVars(theme: Theme) { return { '--layout-transition-easing': 'linear', - '--layout-transition-duration': '120ms', + '--layout-transition-duration': '100ms', '--layout-nav-vertical-width': '300px', '--layout-dashboard-content-pt': theme.spacing(1), '--layout-dashboard-content-pb': theme.spacing(8), diff --git a/src/client/dd-hub-react/src/layouts/dashboard/layout.tsx b/src/client/dd-hub-react/src/layouts/dashboard/layout.tsx index 539df4a..8dfb781 100644 --- a/src/client/dd-hub-react/src/layouts/dashboard/layout.tsx +++ b/src/client/dd-hub-react/src/layouts/dashboard/layout.tsx @@ -6,6 +6,7 @@ import { useBoolean } from 'minimal-shared/hooks'; import Box from '@mui/material/Box'; import Alert from '@mui/material/Alert'; import { useTheme } from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; import { _langs, _notifications } from 'src/_mock'; @@ -48,8 +49,19 @@ export function DashboardLayout({ layoutQuery = 'lg', }: DashboardLayoutProps) { const theme = useTheme(); + const isDesktop = useMediaQuery(theme.breakpoints.up(layoutQuery)); - const { value: open, onFalse: onClose, onToggle } = useBoolean(); + const { + value: mobileOpen, + onFalse: onMobileClose, + onToggle: onMobileToggle, + } = useBoolean(); + + const { + value: desktopOpen, + onFalse: onDesktopClose, + onToggle: onDesktopToggle, + } = useBoolean(true); const renderHeader = () => { const headerSlotProps: HeaderSectionProps['slotProps'] = { @@ -96,11 +108,14 @@ export function DashboardLayout({ leftArea: ( <> {/** @slot Nav mobile */} - + @@ -150,7 +165,12 @@ export function DashboardLayout({ * @Sidebar *************************************** */ sidebarSection={ - + } /** ************************************** * @Footer @@ -164,7 +184,7 @@ export function DashboardLayout({ { [`& .${layoutClasses.main}`]: { [theme.breakpoints.up(layoutQuery)]: { - pl: 'var(--layout-nav-vertical-width)', + pl: desktopOpen ? 'var(--layout-nav-vertical-width)' : 0, transition: theme.transitions.create(['padding-left'], { easing: 'var(--layout-transition-easing)', duration: 'var(--layout-transition-duration)', diff --git a/src/client/dd-hub-react/src/layouts/dashboard/nav.tsx b/src/client/dd-hub-react/src/layouts/dashboard/nav.tsx index 34ce149..e555999 100644 --- a/src/client/dd-hub-react/src/layouts/dashboard/nav.tsx +++ b/src/client/dd-hub-react/src/layouts/dashboard/nav.tsx @@ -39,7 +39,8 @@ export function NavDesktop({ slots, workspaces, layoutQuery, -}: NavContentProps & { layoutQuery: Breakpoint }) { + open = true, +}: NavContentProps & { layoutQuery: Breakpoint; open?: boolean }) { const theme = useTheme(); return ( @@ -58,6 +59,12 @@ export function NavDesktop({ bgcolor: '#ffffff', color: '#5a1a22', borderRight: `1px solid ${varAlpha('90 24 34', 0.08)}`, + transform: open ? 'translateX(0)' : 'translateX(-100%)', + transition: theme.transitions.create(['transform'], { + easing: 'var(--layout-transition-easing)', + duration: 'var(--layout-transition-duration)', + }), + pointerEvents: open ? 'auto' : 'none', [theme.breakpoints.up(layoutQuery)]: { display: 'flex', },