Tabs allow users to navigation between grouped content in different views while within the same page context.

Preview

Variants

Default

Borderless

Remove the bottom border of any tablist.

Muted

All tabs render as muted buttons. The selected tab is distinguished with active styling.

Outlined

The selected tab renders with an outlined border instead of a filled style.

Muted Outlined

Combines muted kind with outlined selected state.

Disabled

Add disabled to a specific tab.

Add disabled to the tab group to disable all.

Inverted

In place of the inverted prop, use the v-dt-mode directive on the component element.

Spread

Control how tabs distribute available horizontal space within the tab list. It only applies to horizontal tabs, and has no effect with orientation="vertical".

Grow

Tabs expand proportionally to fill the container. Longer labels receive more space.

Equal

All tabs share the same width, regardless of label length.

Sizes

Slots

Icon

Use the #startIcon or #endIcon slot on dt-tab to add an icon. The slot provides iconSize to match the tab's size.

Leading & Trailing

Use the #leading and #trailing slots on dt-tab to render content like badges or count indicators alongside tab labels. Use leading-class and trailing-class to adjust padding.

Orientation

Set orientation="vertical" to stack tabs vertically alongside the panel.

Advanced Usages

Automatic Mode

By default, tabs use manual activation — the user must press Enter or Space after focusing a tab to select it. Set activation-mode="auto" to select tabs immediately on focus via arrow keys, following the WAI-ARIA Tabs pattern.

Validation Before Changing Tabs

If you need to do some validation before changing tabs, you can use the before-change event. If the event handler is prevented, the tab change will be cancelled.

Vue API

Tab Group

import { DtTabGroup, DtTab, DtTabPanel } from '@dialpad/dialtone-vue';

Slots

Name
Type
default

Default slot for Panel

tabs

Slot for Tabs

Props

Name
Default
Type
activationMode
'manual'
"auto" | "manual"

Controls whether tabs are selected on focus (auto) or on click/keypress (manual)

borderless
false
"true" | "false"

If true, applies borderless styles to the tab group

disabled
false
"true" | "false"

If true, disables the tab group

kind
'default'
"default" | "muted"

The visual style kind applied to tabs within this group. Maps to specific DtButton kind/importance combinations for selected/unselected states.

label
''
string

Identifies the tab group

orientation
'horizontal'
"horizontal" | "vertical"

The orientation of the tab list

outlined
false
"true" | "false"

If true, the selected tab renders with outlined importance instead of clear.

selected
''
string

The id of the selected tab panel which should be displayed

showIndicatorTransition
true
"true" | "false"

If true, the selection indicator animates between tabs on click.

size
300
"100" | "200" | "300" | "400" | "500"

If provided, applies size styles to the tab group

spread
'none'
"none" | "grow" | "equal"

Controls how tabs distribute available space within the tab list.

tabListChildProps
{}
object

Pass through props, used to customize the tab list

tabsClass
''
string|array|object

Pass through classes, used to customize the tab list

inverted Deprecated
false
"true" | "false"

If true, applies inverted styles to the tab group

Use v-dt-mode directive instead.

tabListClass Deprecated
string|array|object

Pass through classes, used to customize the tab list

Use tabsClass

Events

Name
Type
before-change
Event

Before change tab event with the event argument, useful to perform validations and prevent changing tabs if neccessary.

change
Object

Change tab event with the arguments: selected id of the current tab and disabled value

Tab Panel

Slots

Name
Type
default

Default slot for Tab Panel

Props

Name
Default
Type
id required
string

Id of the panel

tabId required
string

Id of the associated tab

hidden
false
"true" | "false"

If true, hides the tab content

tabPanelClass
''
string|array|object

Used to customize the tab element

Tab

Slots

Name
Type
default

default slot, defaults contains dt-button

endIcon
icon
leading
startIcon
trailing

Props

Name
Default
Type
id required
string

Id of the tab

panelId required
string

Id of the associated content panel

disabled
false
"true" | "false"

If true, disables the tab

label
''
string

Describes the tab

labelClass
''
string|array|object

Used to customize the label container

leadingClass
''
string|array|object

Used to customize the leading container

selected
false
"true" | "false"

Controls the state of the tab

tabClass
''
string|array|object

Used to customize the tab element

trailingClass
''
string|array|object

Used to customize the trailing container

Events

Name
Type
click
PointerEvent | KeyboardEvent

Native button click event

focus
FocusEvent

Native button focus in event

Classes

Class
Applies to
Description

Accessibility

To create accessible tabs, be sure to implement the proper keyboard navigation and utilize the following ARIA roles to properly declare element roles, content relationships, and current status:

Item
Applies to
Description

Tabs documentation last updated Thursday, June 18, 2026