From 52477bff45920454159e0db150e2208defac98fb Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Wed, 7 Oct 2026 12:03:16 -0700 Subject: [PATCH 1/2] feat(site-builder): menus that follow pages, with dropdowns - utils/nav-links.ts: shared NavLink type (source/pageId/children), pageHref, buildPageLinks, mergeLinks, adoptPageLinks, rewriteHeaderLinks - PageData.nav {show, parentId, label} + updatePageNav; a nav-sync effect in PageProvider materialises page-following links into the stored header (or the live header nodes while it is being edited); string/identity guards keep it a no-op when nothing changed - Navbar/Menu: followPages prop (default false; the default header seed is true), one-level dropdowns (hover/focus-within + inline click toggle, indented in the hamburger layout), hover/CTA colours default to the primary token - NavStylePanel: Follow pages toggle (adopts matching manual links, keeps custom text as the page's menu label), read-only page rows with Hide from menu, sub-link editor for manual links, LinkPicker records pageId - Page Settings: Show in menu / Menu label / Nest under; Pages panel badge - useWhpApi: nav passes through pages_craft_state on save and load Legacy navs (no followPages) are never rewritten. Refs #53 Co-Authored-By: Claude Opus 5.5 --- .../src/components/basic/Menu.toHtml.test.ts | 40 ++++ craft/src/components/basic/Menu.tsx | 92 +++++++-- .../components/basic/Navbar.toHtml.test.ts | 45 +++++ craft/src/components/basic/Navbar.tsx | 105 +++++++---- craft/src/hooks/useWhpApi.nav.test.tsx | 129 +++++++++++++ craft/src/hooks/useWhpApi.ts | 7 +- .../left/PageSettingsModal.nav.test.tsx | 76 ++++++++ craft/src/panels/left/PageSettingsModal.tsx | 75 +++++++- craft/src/panels/left/PagesPanel.tsx | 12 ++ .../right/styles/NavStylePanel.test.tsx | 98 +++++++++- .../src/panels/right/styles/NavStylePanel.tsx | 176 +++++++++++++++--- craft/src/panels/right/styles/shared.tsx | 11 +- craft/src/state/PageContext.nav.test.tsx | 155 +++++++++++++++ craft/src/state/PageContext.tsx | 83 ++++++++- craft/src/styles/editor.css | 79 ++++++++ craft/src/types/index.ts | 16 ++ craft/src/utils/nav-links.test.ts | 170 +++++++++++++++++ craft/src/utils/nav-links.ts | 167 +++++++++++++++++ 18 files changed, 1439 insertions(+), 97 deletions(-) create mode 100644 craft/src/hooks/useWhpApi.nav.test.tsx create mode 100644 craft/src/panels/left/PageSettingsModal.nav.test.tsx create mode 100644 craft/src/state/PageContext.nav.test.tsx create mode 100644 craft/src/utils/nav-links.test.ts create mode 100644 craft/src/utils/nav-links.ts diff --git a/craft/src/components/basic/Menu.toHtml.test.ts b/craft/src/components/basic/Menu.toHtml.test.ts index e46bd00..0661456 100644 --- a/craft/src/components/basic/Menu.toHtml.test.ts +++ b/craft/src/components/basic/Menu.toHtml.test.ts @@ -67,3 +67,43 @@ describe('Menu.toHtml XSS hardening (linkHoverColor into breakout -> arbitrary