Skip to content

refactor: adopt OverflowTabs for hand-rolled tab/nav strips (design-system p9/p10) #1925

Description

@vybe

Summary

OverflowTabs.vue (#1114) is the tab primitive — overflowing tabs collapse into a counted "+N more" menu, re-measured on resize (principles 9/10). Three audited surfaces hand-roll tab/nav strips instead, and the raw-color scanner counts 13 overflow-x-auto strips repo-wide that are adoption candidates.

Context

Found by the 2026-07-31 design-system audit (dev@022710dc). The worst case is NavBar: its link row is an overflow-x-auto strip with the scrollbar suppressed, so overflowed links are invisible and undiscoverable — there is no signal that more navigation exists. Settings mitigated its ten-tab overflow by widening the page (#1862) rather than adopting the primitive, so sub-7xl widths still overflow silently.

Acceptance Criteria

  • src/frontend/src/views/Settings.vue:23 renders its tabs through OverflowTabs
  • src/frontend/src/views/Operations.vue:22 renders its six tabs through OverflowTabs (v-model on activeTab)
  • src/frontend/src/components/NavBar.vue:25 nav links use a priority+ pattern: visible links + counted "More ▾" menu, no hidden-scrollbar overflow
  • Scanner candidates below are triaged: tab-strip-like ones migrate; legitimate horizontal-scroll containers (wide tables) are marked as such
  • No tab strip wraps to a second row or truncates silently

Technical Notes

Scanner candidates (overflow-x-auto, tab-nav-shaped) to triage:

  • src/frontend/src/components/DashboardPanel.vue:283
  • src/frontend/src/components/FileSharingPanel.vue:55
  • src/frontend/src/components/LoopsPanel.vue:314
  • src/frontend/src/components/NeverminedPanel.vue:187
  • src/frontend/src/components/SharingPanel.vue:232
  • src/frontend/src/components/process/RoleMatrix.vue:63
  • src/frontend/src/components/reports/ReportTable.vue:2
  • src/frontend/src/components/settings/McpKeysTab.vue:34 (+ :260)
  • src/frontend/src/views/enterprise/Audit.vue:619 (+ :667)

Several of these are bounded tables where horizontal scroll inside the container is correct per principle 7 — triage, don't blanket-convert. Advisory from the audit: src/frontend/src/views/enterprise/Audit.vue:526 hand-rolls a two-tab role="tablist" pill strip (cannot overflow, but diverges from the primitive).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions