Components · Navigation
Tabs
A segmented control on a muted track; the active tab lifts onto a card surface with a soft shadow. Switch tabs in the preview below — it works in every theme.
Preview
Light
Your workspace overview and recent highlights.
A timeline of recent activity across the team.
Manage members, billing, and integrations.
Dark
Your workspace overview and recent highlights.
A timeline of recent activity across the team.
Manage members, billing, and integrations.
Accessibility
Your workspace overview and recent highlights.
A timeline of recent activity across the team.
Manage members, billing, and integrations.
Spec
Values and token references straight from the Zetta spec.
tabs-list
- display
- flex
- flexDirection
- row
- backgroundColor
- {colors.surface-secondary}
- borderRadius
- {rounded.base}
- padding
- 4px
- gap
- 4px
tabs-trigger
- backgroundColor
- transparent
- textColor
- {colors.muted}
- fontFamily
- Geist
- fontSize
- 14px
- fontWeight
- 500
- height
- 32px
- paddingX
- 16px
- borderRadius
- {rounded.base}
- display
- flex
- alignItems
- center
- justifyContent
- center
- cursor
- pointer
tabs-trigger-hover
- textColor
- {colors.ink}
- backgroundColor
- {colors.surface-muted}
tabs-trigger-active
- backgroundColor
- {colors.surface-card}
- textColor
- {colors.ink}
- shadow
- {shadows.sm}
tabs-trigger-focus
- outline
- 2px solid {colors.border-focus}
- outlineOffset
- 2px
tabs-trigger-disabled
- textColor
- {colors.disabled-text}
- cursor
- not-allowed
tabs-content
- paddingY
- {spacing.md}
- textColor
- {colors.body}
- fontFamily
- Geist
- fontSize
- 14px
- lineHeight
- 1.6
Build with the skill
No package to install — hand this to your AI to generate tabs in your stack.
Implement the Zetta "Tabs" component in this project's stack using the zetta-design-md skill.
- Apply the `tabs` spec from the skill (variants: list, trigger, active, disabled).
- Use this project's own component conventions and framework idioms.
- Reference the Zetta design tokens (CSS variables) for every color, radius, and shadow — never hardcode values.
- Implement all states (hover, focus, active, disabled, and invalid where applicable) with a visible 2px focus ring.
- Honor the Zetta guardrails (brand never shifts hue, shadows for overlays only, etc.) and verify in Light, Dark, and Accessibility. Anatomy & rules
- List:
surface-secondarytrack, 4px padding/gap, 8px radius. Triggers: 32px, muted → ink, active =surface-card+var(--shadow-sm). - Use
role="tablist"/role="tab"witharia-selected; panels userole="tabpanel".
Known gaps
- Roving-tabindex arrow-key navigation and an underline (non-segmented) variant are not yet specified.