You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Audited under ariston-ui Wave AshUI-3.7 comp-fidelity audit. The :tabs canonical widget is missing a count badge per tab — comps show "Feed (12)", "Threads (3)", "Tasks (1)" across Chat feed, Pane 3, and Talk surfaces.
Badge style: same as proposed for :segmented_button_group count badge (sibling issue) — should both use the same visual primitive? Possibly compose with :unread_badge?
Active vs inactive count rendering: do active tabs show count differently (e.g., bolder)? Comp suggests visually consistent.
Cap (e.g., "99+"): spec-it explicitly or leave consumer-side?
Multi-counter per tab: some tabs in comp show "Inbox (3 / 12)" with two numbers (unread / total). Extension scope creep or in scope?
ARIA: redundant text in tab label is OK (count is meaningful UI text); badge can be aria-hidden="true" since label includes the count. Same convention as :segmented_button_group.
ARIA implications
Tab label: includes count text in accessible name (count is meaningful for tab selection)
Context
Audited under ariston-ui Wave AshUI-3.7 comp-fidelity audit. The
:tabscanonical widget is missing acountbadge per tab — comps show "Feed (12)", "Threads (3)", "Tasks (1)" across Chat feed, Pane 3, and Talk surfaces.Canonical-kind grep proof:
packages/live_ui/lib/live_ui/renderer.ex:564—def render(%{element: %Element{kind: :tabs}})packages/unified_iur/lib/unified_iur/widgets.ex:34—@navigation_kinds [:menu, :tabs]packages/unified-ui/lib/unified_ui/widget_components.excatalog — this canonical kind predates the new 7-shell-primitive catalog (PR Catalog schema relaxation: drop source field (per Pascal Discord 2026-05-16) #178/Shell primitives: author 7 widgets (top_strip, mode_nav, sidebar_*, unread_badge, command_palette) #179 schema relaxation). Confirming current canonical status with Pascal: is:tabsstill authoritative as defined inunified_iur/widgets.ex, or does it need migration into the newwidget_components.excatalog as part of this extension?Comp gap (audit finding implied; extension table line 242)
Comps show tab labels with trailing count badges across multiple surfaces:
Currently ariston-ui works around with custom HEEx tab rendering instead of canonical
:tabs.Proposed extension
Adding optional
countattr per tab item:Default value rationale
count: nil= no badge rendered (default behavior preserved)Open questions for Pascal
:tabsinunified_iur/widgets.exstill the canonical definition, or should this extension first migrate:tabsinto the newwidget_components.excatalog (PR Catalog schema relaxation: drop source field (per Pascal Discord 2026-05-16) #178/Shell primitives: author 7 widgets (top_strip, mode_nav, sidebar_*, unread_badge, command_palette) #179 pattern)?:segmented_button_groupcount badge (sibling issue) — should both use the same visual primitive? Possibly compose with:unread_badge?:segmented_button_groupdecision.aria-hidden="true"since label includes the count. Same convention as:segmented_button_group.ARIA implications
<span class="live-ui-tabs-item-count" aria-hidden="true">{count}</span>Cross-references
docs/wave-ashui-3-7-comp-fidelity-audit.mdextension table line 242:segmented_button_groupcount extension proposal:unread_badgeprecedent:packages/unified-ui/lib/unified_ui/widget_components.ex:204(composition consideration per Q2)docs/wave-ashui-3-7-a-retrospective.mdStatus
DRAFT extension proposal — Pascal's design call on canonical authority (Q1) and
:unread_badgecomposition (Q2) determines the implementation shape and scope.