Follow up on the drawer polish, replacing things it hand-rolled with what
the codebase already provides.
Reuse
- The navigation toggles now use the Switch component instead of ~30 lines
of CSS mirroring it, which carried a comment admitting the metrics were
kept in sync by hand. base-ui renders Switch.Root as a span, so the row
can be a label wrapping a real control, the same shape the params editor
already uses. The row stays clickable across its full width
- Remove scrollbar-width and scrollbar-color from three drawers. index.scss
already sets both on the universal selector, so these were not only
redundant, they overrode the app wide thumb and track tokens with local
values
- Collect the user facing view names in one map in viewerConfig, and derive
the navigation entries and the URL preset targets from it. The same nine
labels had been written out in three places
Simplify
- NavigationMenuToggle composes NavigationMenuItem rather than repeating its
markup and key handling, so a row reacts to input in one place only
- ViewParamsSection consulted collapsible five times in a render. Absence of
a toggle handler now represents a section which cannot collapse, and the
header owns its two shapes
- Share the small uppercase group heading through an eyebrow-label mixin,
which was copied across four stylesheets
Tests
- Cover that a collapsed section keeps its values through apply. The form
reads from the DOM, so unmounting collapsed fields would silently drop
them, and no existing test caught that
Also drops a comment claiming rows avoid being buttons because Space is a
global hotkey. Measured against the app, the hotkey does not fire while the
menu is open regardless of focus, so the rationale did not hold.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014L7R2LgjMSH2WQbiSP4uRn
* chore: upgrade vite
* fix: inconsistentCjsInterop for ReactQR
* chore: e2e tests should use relativve path and get host from playwright config
* refactor: drop qr code dependency
---------
Co-authored-by: alex-Arc <omnivox@LAPTOP-RC5SNBVV.localdomain>
* chore: migrate eslint to oxlint
* chore: migrate prettier to oxfmt
* chore: migrate typescript
* chore: toThrow should have a expected value
* chore: cast test value as Day
* chore: small title fix
* chore: mocks should be hoisted
* chore: incorrect async useage
* chore: test should be inside description
* chore: test sohuld include an expeced
* chore: oxfmt
---------
Co-authored-by: alex-Arc <omnivox@LAPTOP-RC5SNBVV.localdomain>