From 262fb039a858c0c7d9f618cb97c71bf42f51e4ce Mon Sep 17 00:00:00 2001 From: Padreug Date: Tue, 9 Jun 2026 23:16:27 +0200 Subject: [PATCH] feat(header): shadcn NavigationMenu replaces hand-rolled dropdowns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Install the shadcn-vue NavigationMenu component family at src/components/ui/navigation-menu (NavigationMenu / NavigationMenuList / NavigationMenuItem / NavigationMenuTrigger / NavigationMenuContent / NavigationMenuLink / NavigationMenuIndicator / NavigationMenuViewport + navigationMenuTriggerStyle cva). Files came in via the registry JSON (www.shadcn-vue.com/r/styles/default/navigation-menu.json) because the CLI's corepack pnpm shim conflicts with our nix-managed pnpm — handle that more cleanly later. Adds @vueuse/core as a runtime dependency (reactiveOmit / useForwardProps inside the navigation-menu primitives). Two upstream fixes applied: 1. NavigationMenuTrigger imports ChevronDown from "@lucide/vue", not the deprecated "lucide-vue-next" the registry ships by default. 2. NavigationMenuViewport's height/width CSS variable references use Tailwind v3 syntax — h-[--reka-navigation-menu-viewport-height] — which renders as a literal string under Tailwind v4, collapsing the viewport to 2px. Wrap them in var() so v4 resolves them correctly: h-[var(--reka-navigation-menu-viewport-height)]. SiteHeader desktop nav: drop the custom openGroup ref, the document-level click/keydown listeners and the v-show toggle in favour of NavigationMenuTrigger + NavigationMenuContent for the four group dropdowns (Concept / What's On / Collaborate / Reservations), plus a flat Marketplace link styled with navigationMenuTriggerStyle. Hover/focus/open states all use bg-muted + text-primary to preserve the green-bg/gold-text feel from the hand-rolled nav. Mobile menu stays hand-rolled for this commit; Sheet refactor lands in a follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) --- package.json | 1 + pnpm-lock.yaml | 3 + src/components/SiteHeader.vue | 117 ++++++++---------- .../ui/navigation-menu/NavigationMenu.vue | 29 +++++ .../navigation-menu/NavigationMenuContent.vue | 30 +++++ .../NavigationMenuIndicator.vue | 22 ++++ .../ui/navigation-menu/NavigationMenuItem.vue | 12 ++ .../ui/navigation-menu/NavigationMenuLink.vue | 18 +++ .../ui/navigation-menu/NavigationMenuList.vue | 27 ++++ .../navigation-menu/NavigationMenuTrigger.vue | 31 +++++ .../NavigationMenuViewport.vue | 30 +++++ src/components/ui/navigation-menu/index.ts | 14 +++ 12 files changed, 272 insertions(+), 62 deletions(-) create mode 100644 src/components/ui/navigation-menu/NavigationMenu.vue create mode 100644 src/components/ui/navigation-menu/NavigationMenuContent.vue create mode 100644 src/components/ui/navigation-menu/NavigationMenuIndicator.vue create mode 100644 src/components/ui/navigation-menu/NavigationMenuItem.vue create mode 100644 src/components/ui/navigation-menu/NavigationMenuLink.vue create mode 100644 src/components/ui/navigation-menu/NavigationMenuList.vue create mode 100644 src/components/ui/navigation-menu/NavigationMenuTrigger.vue create mode 100644 src/components/ui/navigation-menu/NavigationMenuViewport.vue create mode 100644 src/components/ui/navigation-menu/index.ts diff --git a/package.json b/package.json index 482316c..d306d8e 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "dependencies": { "@lucide/vue": "^1.16.0", "@vee-validate/zod": "^4.15.1", + "@vueuse/core": "^14.3.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "pinia": "^3.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0a409bb..d9abe51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@vee-validate/zod': specifier: ^4.15.1 version: 4.15.1(vue@3.5.34(typescript@6.0.3))(zod@3.25.76) + '@vueuse/core': + specifier: ^14.3.0 + version: 14.3.0(vue@3.5.34(typescript@6.0.3)) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 diff --git a/src/components/SiteHeader.vue b/src/components/SiteHeader.vue index 285caf1..8f7600d 100644 --- a/src/components/SiteHeader.vue +++ b/src/components/SiteHeader.vue @@ -1,15 +1,23 @@