Tabs
Underline tabs: icons + a count badge; the underline slides, the panel swaps (Tab in, Arrow keys)
Enclosed tabs: the sliding cyan underline, seated inside a recessed well (not a filled pill)
A disabled tab: skipped by arrow keys, still legible
Scrollable / overflow: many tabs scroll horizontally with edge fades
Small size: same indicator, tighter rhythm
Active section: overview · enclosed chat · workspace overview. Each tab swaps its panel below. The island is live.
Parameters
Section titled “Parameters”Tabs are the sectioned-content switcher: each tab owns a tabpanel
(role="tablist"), distinct from a segmented control,
which flips mutually-exclusive views/modes with no panels
(role="radiogroup", one sliding pill on a connected track). Reach for tabs when
each choice reveals its own body of content; reach for the segmented control
for a compact view/mode toggle.
Real divergences between the shipped platforms:
- A shipped component (all three platforms). Web, Android, AND Voice/Swift now expose the
bespoke
NockerlTabs-with-panels. Android uses Material 3SecondaryTabRow+Tab+HorizontalPager(the all-cyanPrimaryTabRowwas deliberately retired: muted inactive, cyan active + underline; seeInboxSheet.kt). Voice/Swift ships the first-classNockerlTabs(v1.15.0). The nativeTabViewwas retired for Nockerl surfaces after it failed the contained-panel bar on a real Voice surface. - The slide (ratified, later amended): the indicator
slides (transform + width, never the fill) on all three: web + Compose (its
SecondaryIndicatoranimates viatabIndicatorOffset) + Swift (matchedGeometryEffect, teleporting under Reduce Motion). No raw systemTabViewremains on a Nockerl surface (Law 9 honored in spirit, sinceNockerlTabsis built to feel native). - Enclosed variant. This was a deliberate call and it holds: the enclosed variant is the
same sliding cyan underline seated inside a recessed well, never
a filled pill (a fill would ape the segmented control). Web, Compose, and Swift ship it
(
NockerlTabsVariant.enclosedseats the underline row inside a recessedNockerlWell).