DefaultBorderlessTabsBorderBackgroundWithDotsVerticalTabsBorderlessVerticalTabsStatelessTabsLinksOverflowTabsWithTooltipsGroupPanelsGroupVerticalPanelsGroupVerticalEndExternalControls
<nve-tabs-group id="tab-group-default">
<nve-tabs>
<nve-tabs-item selected command="--toggle" commandfor="tab-group-default" value="overview">Overview</nve-tabs-item>
<nve-tabs-item command="--toggle" commandfor="tab-group-default" value="details">Details</nve-tabs-item>
<nve-tabs-item command="--toggle" commandfor="tab-group-default" value="settings">Settings</nve-tabs-item>
</nve-tabs>
<div slot="overview">overview content</div>
<div slot="details">details content</div>
<div slot="settings">settings content</div>
</nve-tabs-group>
Overview
Details
Settings
overview content
details content
settings content
Edit Example
Tabs provide a selection UX, typically used for swapping content shown on a page, or within a navigation context.
Borderless Tabs
test-case
<nve-tabs borderless behavior-select>
<nve-tabs-item selected>Tab 1</nve-tabs-item>
<nve-tabs-item>Tab 2</nve-tabs-item>
<nve-tabs-item>Tab 3 </nve-tabs-item>
<nve-tabs-item disabled>Disabled</nve-tabs-item>
<nve-tabs-item>Tab 5</nve-tabs-item>
</nve-tabs>
Tab 1
Tab 2
Tab 3
Disabled
Tab 5
Edit Example
Borderless tabs variant for minimal visual styling without border emphasis.
Border Background
test-case
<nve-tabs
behavior-select
style="--indicator-background: var(--nve-ref-color-brand-green-900); --indicator-border-radius: none"
>
<nve-tabs-item selected> Tab 1 </nve-tabs-item>
<nve-tabs-item> Tab 2 </nve-tabs-item>
<nve-tabs-item> Tab 3 </nve-tabs-item>
</nve-tabs>
Edit Example
Tabs with custom border background styling for brand-specific visual customization.
<nve-tabs behavior-select>
<nve-tabs-item>Tab 1</nve-tabs-item>
<nve-tabs-item>Tab 2</nve-tabs-item>
<nve-tabs-item>Tab 3 </nve-tabs-item>
<nve-tabs-item selected>
Tab 4
<nve-dot aria-label="10 notifications">10</nve-dot>
</nve-tabs-item>
<nve-tabs-item>Tab 5</nve-tabs-item>
</nve-tabs>
Tab 1
Tab 2
Tab 3
Tab 4
10
Tab 5
Edit Example
Tabs with notification dots for indicating unread content or alerts within tab sections.
<nve-tabs vertical behavior-select style="width: 250px">
<nve-tabs-item selected>Tab 1</nve-tabs-item>
<nve-tabs-item>Tab 2</nve-tabs-item>
<nve-tabs-item>Tab 3</nve-tabs-item>
<nve-tabs-item disabled>Disabled</nve-tabs-item>
<nve-tabs-item>Tab 5</nve-tabs-item>
</nve-tabs>
Tab 1
Tab 2
Tab 3
Disabled
Tab 5
Edit Example
Vertical tabs layout for sidebar navigation and vertical content organization patterns.
Borderless Vertical Tabs
test-case
<nve-tabs vertical borderless behavior-select style="width: 250px">
<nve-tabs-item> <nve-icon name="gear"></nve-icon> Tab 1 </nve-tabs-item>
<nve-tabs-item> <nve-icon name="person"></nve-icon> Tab 2 </nve-tabs-item>
<nve-tabs-item selected> <nve-icon name="beaker"></nve-icon> Tab 3 </nve-tabs-item>
<nve-tabs-item> <nve-icon name="add-grid"></nve-icon> Tab 4 </nve-tabs-item>
</nve-tabs>
Edit Example
Borderless vertical tabs with icons for enhanced visual navigation and minimal styling.
<nve-tabs>
<nve-tabs-item selected>Tab 1</nve-tabs-item>
<nve-tabs-item>Tab 2</nve-tabs-item>
<nve-tabs-item>Tab 3</nve-tabs-item>
<nve-tabs-item>Tab 4</nve-tabs-item>
<nve-tabs-item disabled>Disabled</nve-tabs-item>
</nve-tabs>
Tab 1
Tab 2
Tab 3
Tab 4
Disabled
Edit Example
Stateless tabs for external state management without built-in selection behavior.
<nve-tabs>
<nve-tabs-item selected>
<a href="./docs/elements/tabs/#links">Tab 1</a>
</nve-tabs-item>
<nve-tabs-item>
<a href="./docs/elements/tabs/#links">Tab 2</a>
</nve-tabs-item>
<nve-tabs-item>
<a href="/docs/elements/tabs/#links">Tab 3</a>
</nve-tabs-item>
</nve-tabs>
Edit Example
Tabs with link navigation for routing-based tab switching and page navigation.
<nve-tabs behavior-select>
<nve-tabs-item selected>Tab 1</nve-tabs-item>
<nve-tabs-item>Tab 2</nve-tabs-item>
<nve-tabs-item>Tab 3</nve-tabs-item>
<nve-tabs-item>Tab 4</nve-tabs-item>
<nve-tabs-item>Tab 5</nve-tabs-item>
<nve-tabs-item>Tab 6</nve-tabs-item>
<nve-tabs-item>Tab 7</nve-tabs-item>
<nve-tabs-item>Tab 8</nve-tabs-item>
<nve-tabs-item>Tab 9</nve-tabs-item>
<nve-tabs-item>Tab 10</nve-tabs-item>
<nve-tabs-item>Tab 11</nve-tabs-item>
<nve-tabs-item>Tab 12</nve-tabs-item>
<nve-tabs-item>Tab 13</nve-tabs-item>
<nve-tabs-item>Tab 14</nve-tabs-item>
<nve-tabs-item>Tab 15</nve-tabs-item>
<nve-tabs-item>Tab 16</nve-tabs-item>
<nve-tabs-item>Tab 17</nve-tabs-item>
<nve-tabs-item>Tab 18</nve-tabs-item>
<nve-tabs-item>Tab 19</nve-tabs-item>
<nve-tabs-item>Tab 20</nve-tabs-item>
</nve-tabs>
Tab 1
Tab 2
Tab 3
Tab 4
Tab 5
Tab 6
Tab 7
Tab 8
Tab 9
Tab 10
Tab 11
Tab 12
Tab 13
Tab 14
Tab 15
Tab 16
Tab 17
Tab 18
Tab 19
Tab 20
Edit Example
Tabs with overflow handling for managing large numbers of tabs with scrolling behavior.
<nve-tooltip id="tab1">Tooltip for tab 1</nve-tooltip>
<nve-tooltip id="tab2">Tooltip for tab 2</nve-tooltip>
<nve-tooltip id="tab3">Tooltip for tab 3</nve-tooltip>
<nve-tabs behavior-select>
<nve-tabs-item selected popovertarget="tab1">Tab 1</nve-tabs-item>
<nve-tabs-item popovertarget="tab2">Tab 2</nve-tabs-item>
<nve-tabs-item id="tab-item-3" popovertarget="tab3">Tab 3</nve-tabs-item>
</nve-tabs>
Tooltip for tab 1
Tooltip for tab 2
Tooltip for tab 3
Tab 1
Tab 2
Tab 3
Edit Example
Tabs selection state and a popover working together without any CSS Anchor Positioning collisions.
<nve-tabs-group id="tab-group">
<nve-tabs>
<nve-tabs-item selected command="--toggle" commandfor="tab-group" value="overview">Overview</nve-tabs-item>
<nve-tabs-item command="--toggle" commandfor="tab-group" value="details">Details</nve-tabs-item>
<nve-tabs-item command="--toggle" commandfor="tab-group" value="settings">Settings</nve-tabs-item>
</nve-tabs>
<div slot="overview">
<nve-card style="width: 100%; min-width: 320px">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Overview</h2>
<p nve-text="body sm muted">High-level release status and current priorities.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Status</dt>
<dd nve-layout="span:8" nve-text="body">Ready for review</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Audience</dt>
<dd nve-layout="span:8" nve-text="body">Design and product owners</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Next step</dt>
<dd nve-layout="span:8" nve-text="body">Validate the tab labels and panel order</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="details">
<nve-card style="width: 100%; min-width: 320px">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Details</h2>
<p nve-text="body sm muted">Supporting context for teams that need implementation specifics.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Owner</dt>
<dd nve-layout="span:8" nve-text="body">Elements design system</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Coverage</dt>
<dd nve-layout="span:8" nve-text="body">Unit, SSR, and accessibility checks</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Focus</dt>
<dd nve-layout="span:8" nve-text="body">Selection sync and panel wiring</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="settings">
<nve-card style="width: 100%; min-width: 320px">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Settings</h2>
<p nve-text="body sm muted">Configuration notes for authors and downstream consumers.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Selection</dt>
<dd nve-layout="span:8" nve-text="body">Controlled by the active tab value</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Panels</dt>
<dd nve-layout="span:8" nve-text="body">Matched by slot name</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Actions</dt>
<dd nve-layout="span:8" nve-text="body">External buttons can drive the same group</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
</nve-tabs-group>
Overview
Details
Settings
Overview
High-level release status and current priorities.
- Status
- Ready for review
- Audience
- Design and product owners
- Next step
- Validate the tab labels and panel order
Details
Supporting context for teams that need implementation specifics.
- Owner
- Elements design system
- Coverage
- Unit, SSR, and accessibility checks
- Focus
- Selection sync and panel wiring
Settings
Configuration notes for authors and downstream consumers.
- Selection
- Controlled by the active tab value
- Panels
- Matched by slot name
- Actions
- External buttons can drive the same group
Edit Example
Group tabs with slot-matched panels and structured card content when one selected value should control both the tab state and revealed details.
<nve-tabs-group id="tab-group-vertical-start" alignment="start">
<nve-tabs vertical style="width: 250px">
<nve-tabs-item selected command="--toggle" commandfor="tab-group-vertical-start" value="overview"
>Overview</nve-tabs-item
>
<nve-tabs-item command="--toggle" commandfor="tab-group-vertical-start" value="details">Details</nve-tabs-item>
<nve-tabs-item command="--toggle" commandfor="tab-group-vertical-start" value="settings">Settings</nve-tabs-item>
</nve-tabs>
<div slot="overview" style="width: 100%; min-width: 320px">
<nve-card style="width: 100%">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Overview</h2>
<p nve-text="body sm muted">High-level release status and current priorities.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Status</dt>
<dd nve-layout="span:8" nve-text="body">Ready for review</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Audience</dt>
<dd nve-layout="span:8" nve-text="body">Design and product owners</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Next step</dt>
<dd nve-layout="span:8" nve-text="body">Validate the tab labels and panel order</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="details" style="width: 100%; min-width: 320px">
<nve-card style="width: 100%">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Details</h2>
<p nve-text="body sm muted">Supporting context for teams that need implementation specifics.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Owner</dt>
<dd nve-layout="span:8" nve-text="body">Elements design system</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Coverage</dt>
<dd nve-layout="span:8" nve-text="body">Unit, SSR, and accessibility checks</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Focus</dt>
<dd nve-layout="span:8" nve-text="body">Selection sync and panel wiring</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="settings" style="width: 100%; min-width: 320px">
<nve-card style="width: 100%">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Settings</h2>
<p nve-text="body sm muted">Configuration notes for authors and downstream consumers.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Selection</dt>
<dd nve-layout="span:8" nve-text="body">Controlled by the active tab value</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Panels</dt>
<dd nve-layout="span:8" nve-text="body">Matched by slot name</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Actions</dt>
<dd nve-layout="span:8" nve-text="body">External buttons can drive the same group</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
</nve-tabs-group>
Overview
Details
Settings
Overview
High-level release status and current priorities.
- Status
- Ready for review
- Audience
- Design and product owners
- Next step
- Validate the tab labels and panel order
Details
Supporting context for teams that need implementation specifics.
- Owner
- Elements design system
- Coverage
- Unit, SSR, and accessibility checks
- Focus
- Selection sync and panel wiring
Settings
Configuration notes for authors and downstream consumers.
- Selection
- Controlled by the active tab value
- Panels
- Matched by slot name
- Actions
- External buttons can drive the same group
Edit Example
Tab group with vertical tab strip at inline-start beside slot-matched panels for sidebar-style settings and details layouts in LTR.
<nve-tabs-group id="tab-group-vertical-end" alignment="end">
<nve-tabs vertical style="width: 250px">
<nve-tabs-item selected command="--toggle" commandfor="tab-group-vertical-end" value="overview"
>Overview</nve-tabs-item
>
<nve-tabs-item command="--toggle" commandfor="tab-group-vertical-end" value="details">Details</nve-tabs-item>
<nve-tabs-item command="--toggle" commandfor="tab-group-vertical-end" value="settings">Settings</nve-tabs-item>
</nve-tabs>
<div slot="overview" style="width: 100%; min-width: 320px">
<nve-card style="width: 100%">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Overview</h2>
<p nve-text="body sm muted">High-level release status and current priorities.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Status</dt>
<dd nve-layout="span:8" nve-text="body">Ready for review</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Audience</dt>
<dd nve-layout="span:8" nve-text="body">Design and product owners</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Next step</dt>
<dd nve-layout="span:8" nve-text="body">Validate the tab labels and panel order</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="details" style="width: 100%; min-width: 320px">
<nve-card style="width: 100%">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Details</h2>
<p nve-text="body sm muted">Supporting context for teams that need implementation specifics.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Owner</dt>
<dd nve-layout="span:8" nve-text="body">Elements design system</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Coverage</dt>
<dd nve-layout="span:8" nve-text="body">Unit, SSR, and accessibility checks</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Focus</dt>
<dd nve-layout="span:8" nve-text="body">Selection sync and panel wiring</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="settings" style="width: 100%; min-width: 320px">
<nve-card style="width: 100%">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Settings</h2>
<p nve-text="body sm muted">Configuration notes for authors and downstream consumers.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">Selection</dt>
<dd nve-layout="span:8" nve-text="body">Controlled by the active tab value</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Panels</dt>
<dd nve-layout="span:8" nve-text="body">Matched by slot name</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Actions</dt>
<dd nve-layout="span:8" nve-text="body">External buttons can drive the same group</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
</nve-tabs-group>
Overview
Details
Settings
Overview
High-level release status and current priorities.
- Status
- Ready for review
- Audience
- Design and product owners
- Next step
- Validate the tab labels and panel order
Details
Supporting context for teams that need implementation specifics.
- Owner
- Elements design system
- Coverage
- Unit, SSR, and accessibility checks
- Focus
- Selection sync and panel wiring
Settings
Configuration notes for authors and downstream consumers.
- Selection
- Controlled by the active tab value
- Panels
- Matched by slot name
- Actions
- External buttons can drive the same group
Edit Example
Tab group with vertical tab strip at inline-end beside slot-matched panels when the tab rail should sit on the opposite side from inline-start sidebars.
<div nve-layout="column gap:lg">
<nve-tabs-group id="tab-group-controls">
<nve-tabs>
<nve-tabs-item selected command="--toggle" commandfor="tab-group-controls" value="overview"
>Overview</nve-tabs-item
>
<nve-tabs-item command="--toggle" commandfor="tab-group-controls" value="details">Details</nve-tabs-item>
<nve-tabs-item command="--toggle" commandfor="tab-group-controls" value="settings">Settings</nve-tabs-item>
</nve-tabs>
<div slot="overview">
<nve-card style="width: 100%; min-width: 320px">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Overview</h2>
<p nve-text="body sm muted">Quick status for the current tab group.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">State</dt>
<dd nve-layout="span:8" nve-text="body">Overview is active</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Signal</dt>
<dd nve-layout="span:8" nve-text="body">Use this tab for a summary of the current workflow</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Tip</dt>
<dd nve-layout="span:8" nve-text="body">Pair it with external controls for quick switching</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="details">
<nve-card style="width: 100%; min-width: 320px">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Details</h2>
<p nve-text="body sm muted">Deeper context for follow-up tasks and implementation notes.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">State</dt>
<dd nve-layout="span:8" nve-text="body">Details are available on demand</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Signal</dt>
<dd nve-layout="span:8" nve-text="body">Use this tab when readers need extra context</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Tip</dt>
<dd nve-layout="span:8" nve-text="body">Keep the content specific to the selected tab</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
<div slot="settings">
<nve-card style="width: 100%; min-width: 320px">
<nve-card-header>
<div nve-layout="column gap:xs">
<h2 nve-text="heading sm bold">Settings</h2>
<p nve-text="body sm muted">Preferences and coordination notes for the shared tab group.</p>
</div>
</nve-card-header>
<nve-card-content>
<dl nve-layout="grid gap:sm">
<dt nve-layout="span:4" nve-text="body muted medium">State</dt>
<dd nve-layout="span:8" nve-text="body">Settings remain in sync with the selected value</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Signal</dt>
<dd nve-layout="span:8" nve-text="body">Useful for configuration and admin actions</dd>
<dt nve-layout="span:4" nve-text="body muted medium">Tip</dt>
<dd nve-layout="span:8" nve-text="body">Use external buttons when the layout needs extra actions</dd>
</dl>
</nve-card-content>
</nve-card>
</div>
</nve-tabs-group>
<div nve-layout="row gap:xs">
<nve-button command="--toggle" commandfor="tab-group-controls" value="overview">overview</nve-button>
<nve-button command="--toggle" commandfor="tab-group-controls" value="details">details</nve-button>
<nve-button command="--toggle" commandfor="tab-group-controls" value="settings">settings</nve-button>
</div>
</div>
Overview
Details
Settings
Overview
Quick status for the current tab group.
- State
- Overview is active
- Signal
- Use this tab for a summary of the current workflow
- Tip
- Pair it with external controls for quick switching
Details
Deeper context for follow-up tasks and implementation notes.
- State
- Details are available on demand
- Signal
- Use this tab when readers need extra context
- Tip
- Keep the content specific to the selected tab
Settings
Preferences and coordination notes for the shared tab group.
- State
- Settings remain in sync with the selected value
- Signal
- Useful for configuration and admin actions
- Tip
- Use external buttons when the layout needs extra actions
overview
details
settings
Edit Example
Drive the same tabs group from external buttons when layouts need tabs and secondary actions to stay in sync with structured panel content.