From 351529009dff9587320a7ca9f7707519bc0d0177 Mon Sep 17 00:00:00 2001 From: Ross Lovas Date: Tue, 18 Aug 2026 10:33:58 +0930 Subject: [PATCH] Implement responsive navigation design --- src/assets/icons/bars.svg | 3 + src/assets/icons/close.svg | 3 + src/components/Menu.astro | 38 ++++- src/components/ProfileMenu.astro | 139 ++++++++++++++--- src/components/TopNav.astro | 227 ++++++++++++++++++++++++++- src/components/TopNavSearch.astro | 11 ++ src/pages/components.mdx | 41 ----- src/scripts/modules/nav-sticky.js | 6 + src/scripts/top-nav-drawer.ts | 142 +++++++++++++++++ src/styles/button.css | 6 + src/styles/main.css | 22 +++ tests/profile-menu.spec.ts | 26 ++-- tests/topnav-responsive.spec.ts | 246 ++++++++++++++++++++++++++++++ tests/topnav-signedin.spec.ts | 22 +-- 14 files changed, 838 insertions(+), 94 deletions(-) create mode 100644 src/assets/icons/bars.svg create mode 100644 src/assets/icons/close.svg create mode 100644 src/scripts/top-nav-drawer.ts create mode 100644 tests/topnav-responsive.spec.ts diff --git a/src/assets/icons/bars.svg b/src/assets/icons/bars.svg new file mode 100644 index 0000000000..9ad10944c1 --- /dev/null +++ b/src/assets/icons/bars.svg @@ -0,0 +1,3 @@ + diff --git a/src/assets/icons/close.svg b/src/assets/icons/close.svg new file mode 100644 index 0000000000..7e35d6fcd4 --- /dev/null +++ b/src/assets/icons/close.svg @@ -0,0 +1,3 @@ + diff --git a/src/components/Menu.astro b/src/components/Menu.astro index 5c7c58e821..0e6677760c 100644 --- a/src/components/Menu.astro +++ b/src/components/Menu.astro @@ -33,6 +33,8 @@ type Props = HTMLAttributes<'details'> & { align?: 'start' | 'end'; density?: 'default' | 'compact'; width?: string; + // Render inline rather than as a popup + inline?: boolean; }; const { @@ -41,6 +43,7 @@ const { align = 'start', density = 'default', width, + inline = false, class: className, ...rest } = Astro.props satisfies Props; @@ -73,14 +76,15 @@ const iconDetails = (name: string | undefined) => { 'menu', `menu--${align}`, density === 'compact' && 'menu--compact', + inline && 'menu--inline', className, ]} - style={width ? `--menu-width: ${width}` : undefined} - data-menu + style={width && !inline ? `--menu-width: ${width}` : undefined} + data-menu={inline ? undefined : ''} {...rest} > -