Fix release hub navigation and unify search recovery UX - #1699
David Pine (IEvangelist) merged 6 commits into
Conversation
Preserve Astro ClientRouter lifecycle and history ownership, restore deferred artwork after navigation, and align search controls and contextual recovery across the hub, API reference and galleries. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Retain brand artwork, button backgrounds and visible focus indicators while removing accent-colored header text and icons. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Address the dark-theme header contrast, missing locale translations, and sidebar touch-height regression.
Pull request overview
This PR unifies search and recovery UX across the Hub, API references, catalogs, sidebar, and Pagefind while improving navigation lifecycle handling and deferred artwork.
Changes:
- Adds shared search controls, empty states, recovery actions, and styling.
- Preserves filter intent and history across navigation.
- Expands unit, browser, visual, and accessibility regression coverage.
Three moderate follow-ups remain: dark-theme header contrast, translations for supported locales, and sidebar touch-target sizing.
File summaries
| File | Summary |
|---|---|
src/frontend/tests/unit/search-recovery.vitest.test.ts |
Tests recovery decisions. |
src/frontend/tests/unit/search-presentation.vitest.test.ts |
Tests shared search presentation. |
src/frontend/tests/unit/resource-browser.vitest.test.ts |
Tests Browse rendering and images. |
src/frontend/tests/unit/filter-history.vitest.test.ts |
Tests filter history behavior. |
src/frontend/tests/unit/dev-glossary.vitest.test.ts |
Tests Glossary recovery. |
src/frontend/tests/unit/custom-components.vitest.test.ts |
Expands component coverage. |
src/frontend/tests/unit/api-search-recovery.vitest.test.ts |
Tests API recovery. |
src/frontend/tests/unit/api-search-lifecycle.vitest.test.ts |
Tests API lifecycle behavior. |
src/frontend/tests/typecheck/component-props.contracts.ts |
Validates component contracts. |
src/frontend/tests/e2e/site-search.spec.ts |
Tests Pagefind search behavior. |
src/frontend/tests/e2e/search-visual-parity.spec.ts |
Tests visual consistency. |
src/frontend/tests/e2e/filter-navigation.spec.ts |
Tests filter navigation. |
src/frontend/tests/e2e/dev-navigation.spec.ts |
Tests Hub navigation. |
src/frontend/tests/e2e/dev-layout.spec.ts |
Tests themed header controls. |
src/frontend/tests/e2e/dev-grain.spec.ts |
Tests Hub grain styling. |
src/frontend/tests/e2e/dev-glossary.spec.ts |
Tests Glossary interactions. |
src/frontend/tests/e2e/dev-empty-recovery.spec.ts |
Tests contextual recovery. |
src/frontend/tests/e2e/dev-browse.spec.ts |
Tests Browse behavior. |
src/frontend/tests/e2e/api-search-contract.spec.ts |
Tests API search contracts. |
src/frontend/src/utils/dev-center/resource-card-html.ts |
Adds deferred image fallback markup. |
src/frontend/src/styles/site.css |
Aligns theme-aware site colors. |
src/frontend/src/styles/search-controls.css |
Adds shared search styling. |
src/frontend/src/styles/dev-hub.css |
Adds Hub grain styling. |
src/frontend/src/pages/reference/api/typescript/index.astro |
Integrates TypeScript API search. |
src/frontend/src/pages/reference/api/typescript/[module]/index.astro |
Integrates module search. |
src/frontend/src/pages/reference/api/typescript/[module]/[item]/index.astro |
Integrates item search. |
src/frontend/src/pages/reference/api/csharp/index.astro |
Integrates C# API search. |
src/frontend/src/pages/reference/api/csharp/[package]/index.astro |
Integrates package search. |
src/frontend/src/pages/reference/api/csharp/[package]/[type]/index.astro |
Integrates type search. |
src/frontend/src/pages/reference/api/_search-presentation.ts |
Centralizes API recovery presentation. |
src/frontend/src/pages/hub/index.astro |
Migrates the Hub layout. |
src/frontend/src/pages/hub/glossary/index.astro |
Migrates the Glossary layout. |
src/frontend/src/pages/hub/glossary/[term].astro |
Migrates Glossary detail layout. |
src/frontend/src/pages/hub/browse/index.astro |
Migrates Browse layout. |
src/frontend/src/content/i18n/en.json |
Adds catalog search strings. |
src/frontend/src/content/docs/community/contributor-guide.mdx |
Documents search conventions. |
src/frontend/src/components/starlight/Search.astro |
Aligns native Pagefind UX. |
src/frontend/src/components/starlight/Header.astro |
Updates header theme colors. |
src/frontend/src/components/SessionGrid.astro |
Adds shared search presentation. |
src/frontend/src/components/search/SearchField.astro |
Provides reusable search input. |
src/frontend/src/components/search/SearchEmptyState.astro |
Provides reusable empty state. |
src/frontend/src/components/search/search-empty-state.ts |
Implements recovery helpers. |
src/frontend/src/components/Integrations.astro |
Adds integration search recovery. |
src/frontend/src/components/dev-center/ResourceBrowser.ts |
Adds Browse recovery and history sync. |
src/frontend/src/components/dev-center/ResourceBrowser.astro |
Adds Browse controls and fallback markup. |
src/frontend/src/components/dev-center/HubLayout.astro |
Defines Hub layout behavior. |
src/frontend/src/components/dev-center/GlossaryBrowser.ts |
Adds Glossary recovery and history sync. |
src/frontend/src/components/dev-center/GlossaryBrowser.astro |
Adds Glossary empty-state markup. |
src/frontend/src/components/dev-center/filter-history.ts |
Preserves router history and lifecycle state. |
src/frontend/src/components/dev-center/empty-results.ts |
Builds contextual recovery messages. |
src/frontend/src/components/dev-center/BrowseDropdown.astro |
Updates filter control styling. |
src/frontend/src/components/CatalogSearchActiveFilters.astro |
Renders active-filter chips. |
src/frontend/src/components/api-reference/VersionFilter.astro |
Improves filter reset behavior. |
src/frontend/src/components/api-reference/InpageSearch.astro |
Composes shared API search controls. |
src/frontend/src/components/api-reference/inpage-search-sync.ts |
Initializes clear-button state. |
src/frontend/src/components/api-reference/ApiSearchBar.astro |
Uses shared API search controls. |
Review details
Suppressed comments (3)
src/frontend/src/components/starlight/Header.astro:431
- On dark theme,
--sl-color-textis white while this active Dev Hub button uses--sl-color-text-accent(--aspire-color-secondary, a light lavender) as its background, producing insufficient contrast for the icon. The previousvar(--sl-color-bg)foreground was contrast-safe; retain a contrast-safe foreground here or use a theme-specific token.
color: var(--aspire-color-black);
src/frontend/src/content/i18n/en.json:2
- The new
catalogSearchnamespace is added only toen.json, while the repository ships 15 other locale files (for examplesrc/frontend/src/content/i18n/fr.jsonalready carries translatedintegrationskeys). Every localized page now calls these keys for search labels, statuses, and recovery actions, so non-English builds will render missing-key/English fallback text instead of a localized shared UX. Add the namespace to each supported locale (or provide an explicit, tested fallback) before enabling these strings everywhere.
"catalogSearch": {
src/frontend/src/styles/search-controls.css:144
- This coarse-pointer rule applies to every
.search-field, including the sidebar'sdata-search-size="sm"wrapper. It overrides the small 2.5rem token and makes the sidebar input 3rem tall on touch viewports, undoing the sidebar's compact 2.75rem mobile sizing. Scope the touch-target override to non-small fields (or add a sidebar-specific override) so the sidebar remains compact.
- Files reviewed: 59/59 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Keep Install CLI, Videos, Hub and Cookies in DOM order on both layouts; share the selected Hub treatment with Videos and cover route changes, focus and responsive geometry. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Frontend HTML artifact readyThe latest frontend build uploaded the This comment updates automatically when a new frontend build artifact is uploaded. |
Reserve room for touch-sized reset actions before filters activate. Align glossary and surface assertions with the requested UX, and use an exact Pagefind phrase to test zero results without prefix fallback matches. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Refresh query URLs even when shortcut nodes are unchanged. Reproduce native clear behavior in both themes across the browser matrix, retaining production-index coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Summary
Targets
release/13.6.<ClientRouter fallback="swap" />while repairing deferred resource artwork, navigation-aware loading recovery, and Browse/Glossary router-owned history and lifecycle restoration.Third-party links and affiliations
None. New URL literals are test fixtures or the SVG XML namespace, not new third-party navigation links.
Validation
No local full-site build was run. Native Pagefind UI was exercised with a controlled fixture; production search-index/ranking behavior remains a CI-built-site validation. Full CI status is tracked by the PR checks.