Getting StartedInstallation and setup guides 5
LayoutWorkflow and structural layout components 7
OverlayModal and floating layer surfaces 3
FeedbackStatus, empty, progress, and loading placeholder patterns 5
FormInput and selection components 17
UtilityGeneral-purpose interface utilities 7
NavigationMenu surfaces and hierarchical actions 7

Styling contract

The wrapper contributes a default .tng-tabs shell, but the stable styling hooks still come from the primitive parts you place inside it.

Stable hooks

HookValuesWhere
data-slottabs, tab-list, tab, tab-panelRoot wrapper and primitive parts.
data-selectedtrue | falseTab triggers.
data-focusedtrue | falseTab triggers.
data-disabledtrue | falseRoot and tab triggers.
data-activetrue | falseTab panels.
data-orientation, data-activationorientation / activation modeRoot wrapper.

Default shell

The wrapper root already renders a bordered, padded .tng-tabs shell. You can keep it, extend it, or replace it with your own utility classes around the tab parts.

Owner guidance

Keep trigger, list, and panel styles on the primitive hooks rather than assuming more wrapper DOM than .tng-tabs.

tabs.contract.css

css
.tng-tabs {
  display: grid;
  gap: 0.75rem;
}

[data-slot="tab-list"] {
  display: flex;
  gap: 0.5rem;
}

[data-slot="tab"][data-selected="true"] {
  background: var(--tng-semantic-background-surface);
  border-color: var(--tng-semantic-border-subtle);
}

[data-slot="tab-panel"][hidden] {
  display: none !important;
}