Skip to content

feat(dashboard): hoverable info icons for in-context help - #178

Merged
Sam123ben merged 1 commit into
mainfrom
feat/dashboard-hover-help
Aug 12, 2026
Merged

feat(dashboard): hoverable info icons for in-context help#178
Sam123ben merged 1 commit into
mainfrom
feat/dashboard-hover-help

Conversation

@Sam123ben

Copy link
Copy Markdown
Member

Follow-up to #177. Guidance was only reachable through the dismissible panel at
the top of each page, so once a user dismissed it the explanation was gone for
good — the dismissal persists in localStorage. Nav rows relied on the native
title tooltip, which is slow, unstyled, and invisible on touch.

InfoHint

One shared affordance, opening on hover, focus or click. Click is kept because
touch devices have no hover, and it pins the popover open for longer copy.

Positioned fixed off the trigger's rect rather than absolutely — the left nav
is an overflow-y-auto scroll container, so an absolute popover was clipped at
the rail edge. It clamps to the viewport, uses hover-intent delays (120ms in,
180ms out) so it does not flicker as the pointer crosses a row, and closes on
Esc, outside click, scroll and resize.

Where it is used

  • Every nav row — what that page is for. Revealed on row hover, always in the
    tab order for keyboard and screen readers.
  • Each nav section header — why those items are grouped together.
  • Every page title (19 pages), via GuidanceInfo, which renders the page
    explainer. Dismissing the panel now tidies the page instead of destroying the
    help.
  • SRE dashboard header, via a local ExplainerInfo — that app deliberately
    shares no code with this one.

HelpPopover now renders through InfoHint, so the 14 existing term popovers
gain hover and swap the ? glyph for i.

Bug fixed

<HelpPopover term="delegation-plan" /> on the run detail page referenced a
HELP_TERMS key that does not exist. getHelpTerm is a plain record lookup, so
it returned undefined and the affordance never rendered. Added the entry; a
reference check now confirms 20 guidance ids and 10 help terms all resolve.

Verification

tsc --noEmit clean and next build green on both apps. Rendered output checked
against a live dev server on five routes — icons present with the expected
accessible labels.

Guidance was only reachable through the dismissible panel at the top of each
page, so once a user dismissed it the explanation was gone for good, and nav
rows relied on the native title tooltip (slow, unstyled, invisible to touch).

- InfoHint: shared "i" affordance opening on hover, focus or click. Positioned
  fixed off the trigger rect so it is not clipped by the nav's scroll container;
  hover intent delays prevent flicker; closes on Esc, outside click and scroll.
- GuidanceInfo puts the page explainer behind that icon, next to every page
  title — the panel can be dismissed without losing the help.
- HelpPopover now renders through InfoHint, so the 14 existing term popovers
  gain hover and drop the "?" for the "i" users expect.
- Nav rows and section headers carry their own hint, replacing title tooltips.
- SRE dashboard gets the equivalent ExplainerInfo, local to that app.

Fixes a silent failure: HelpPopover term="delegation-plan" had no HELP_TERMS
entry, so the run detail page rendered no affordance at all.
@Sam123ben
Sam123ben merged commit 4a806b0 into main Aug 12, 2026
7 checks passed
@Sam123ben
Sam123ben deleted the feat/dashboard-hover-help branch August 12, 2026 05:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant