Files
sencho/docs
Anso b6766572df feat(navigation): make Compact Launcher the default desktop style (#1890)
* feat(navigation): make Compact Launcher the default desktop style

Compact Launcher replaces Smart bar as the default desktop navigation
style; Classic bar is fully retired (rendering, settings option, and
persisted-value migration to Compact). Quick-link capacity increases
from 7 to 8, and the recommended default set becomes Home, Fleet,
Resources, Security, Update, and Schedules.

Quick-link seeding and Reset now use a settled, role-aware eligibility
computation distinct from the existing current-context display
filtering, so an operator's recommended defaults reflect their role
rather than which node happens to be active, and a Reset produces the
same result regardless of node context.

Also fixes two issues surfaced while touching this code: a disabled
quick-link control showing a duplicate tooltip (native title plus the
Radix tooltip), and the Navigate launcher panel being unable to scroll
at constrained viewport heights (now uses the shared ScrollArea
component). The launcher hamburger icon animates into an X on open,
respecting Reduced motion.

* test(e2e): fix the launcher morph and panel scroll navigation assertions

Three assertions in the new navigation specs were wrong against a real
browser, all in the tests rather than the product:

- The morph check read getComputedStyle().transform, which Tailwind v4
  no longer writes: rotate-45 compiles to `rotate:45deg` and the
  translate utilities to the standalone `translate` property, so both
  the open and closed reads returned "none". It now snapshots translate
  and rotate alongside transform. The animation itself was always
  correct, since Tailwind's transition-transform covers translate,
  scale, and rotate.
- The reduced-motion check assumed motion starts enabled. A fresh
  install defaults to the Calm visual style, which turns Reduced motion
  on, so the clamp was already active and the pre-toggle duration
  assertion could never hold. It now drives the toggle in both
  directions from a known state.
- The panel scroll check asserted a specific overflow measurement,
  which depends on Radix having applied its available-height variable
  at read time and on how many destinations the account can reach. It
  now asserts the property the fix actually guarantees: the ScrollArea
  viewport owns vertical scrolling while the outer menu only clips,
  with no horizontal overflow and the panel inside the viewport.

Verified by running the spec against live dev servers: 7 passed, twice.

* fix(nav): make the Navigate launcher panel actually scroll with the mouse

Live QA found that the panel only reached destinations below the fold
by keyboard; a real mouse wheel did nothing. The Radix ScrollArea
viewport is sized with h-full, and a percentage height only resolves
against a containing block with a definite height. The popper content
is height:auto clamped by max-height, which is not definite, so
nothing sized from it is either, so the viewport fell back to its full
content height with no internal overflow, no scrollbar, and no
response to wheel input, while an ancestor's overflow-hidden silently
clipped everything past the fold.

Moves the available-height cap onto the viewport itself and moves the
masthead inside the scroll region so the cap needs no masthead-height
arithmetic. Verified live: the previous structure measured
scrollHeight === clientHeight === 594 with zero wheel movement; the
fix measures 646/357 with the wheel reaching the true maximum.

Also hardens the panel's e2e coverage, which passed on the broken
structure because it asserted only computed overflow properties and
never drove a real scroll: adds a keyboard-reach assertion using End
rather than ArrowDown (ArrowDown landing on the first item is stock
roving focus and proves nothing about scrolling), a genuine
mouse-wheel assertion that scrolls to the true bottom rather than
assuming one gesture covers the range, and a companion test proving
the cap tracks the popper's available height rather than a hardcoded
pixel value. Confirmed the rewritten test fails on the previous
structure and passes on the fix.
2026-09-05 20:03:48 -04:00
..