Tabs
Tabs are interactive elements that work alongside Tab and Tab Panel to organise content into separate sections or views.
import '@vonage/vivid/tabs';
import '@vonage/vivid/tab';
import '@vonage/vivid/tab-panel';
or, if you need to use a unique prefix:
import { registerTabs, registerTab, registerTabPanel } from '@vonage/vivid';
registerTabs('your-prefix');
registerTab('your-prefix');
registerTabPanel('your-prefix');
<!-- Feel free to edit the code below. The live preview will update as you make changes. -->
<script type="module">
import { registerTabs, registerTab, registerTabPanel } from 'vivid-bundle';
registerTabs('your-prefix');
registerTab('your-prefix');
registerTabPanel('your-prefix');
</script>
<your-prefix-tabs>
<your-prefix-tab label="Tab one"></your-prefix-tab>
<your-prefix-tab label="Tab two"></your-prefix-tab>
<your-prefix-tab label="Tab three"></your-prefix-tab>
<your-prefix-tab-panel>Tab Panel one</your-prefix-tab-panel>
<your-prefix-tab-panel>Tab Panel two</your-prefix-tab-panel>
<your-prefix-tab-panel>Tab Panel three</your-prefix-tab-panel>
</your-prefix-tabs>
<script setup lang="ts">
import { VTabs, VTab, VTabPanel } from '@vonage/vivid-vue';
</script>
<template>
<VTabs>
<VTab label="Tab one"></VTab>
<VTab label="Tab two"></VTab>
<VTab label="Tab three"></VTab>
<VTabPanel>Tab Panel one</VTabPanel>
<VTabPanel>Tab Panel two</VTabPanel>
<VTabPanel>Tab Panel three</VTabPanel>
</VTabs>
</template>
The icon slot on the Tab component can be used to display a custom icon. If set, the icon attribute is ignored.
<!-- Feel free to edit the code below. The live preview will update as you make changes. --> <vwc-tabs> <vwc-tab label="Tab one"> <vwc-icon slot="icon" name="check-circle-solid" connotation="success" ></vwc-icon> </vwc-tab> <vwc-tab label="Tab two"> <vwc-icon slot="icon" name="close-circle-solid" connotation="alert" ></vwc-icon> </vwc-tab> <vwc-tab-panel>Tab Panel one</vwc-tab-panel> <vwc-tab-panel>Tab Panel two</vwc-tab-panel> </vwc-tabs>
The action-items slot on the Tabs component can be used to add action items after the last Tab in the tabs bar.
In the example below, a Button is provided that adds a new Tab when clicked.
<!-- Feel free to edit the code below. The live preview will update as you make changes. -->
<vwc-tabs>
<vwc-tab label="Tab one"></vwc-tab>
<vwc-tab label="Tab two"></vwc-tab>
<vwc-tab-panel>Tab Panel one</vwc-tab-panel>
<vwc-tab-panel>Tab Panel two</vwc-tab-panel>
<vwc-button
slot="action-items"
icon="plus-line"
shape="pill"
size="condensed"
onclick="addTab()"
></vwc-button>
</vwc-tabs>
<script>
function addTab() {
const tab = document.createElement('vwc-tab');
tab.label = 'New tab';
document.querySelector('vwc-tabs').appendChild(tab);
const tabPanel = document.createElement('vwc-tab-panel');
tabPanel.textContent = 'New tab content';
document.querySelector('vwc-tabs').appendChild(tabPanel);
}
</script>
Use the --tabs-block-size CSS variable to set the block-size of the base element.
When using Tabs inside flex structure, setting --tabs-block-size: 100% with flex:1 or with any specific block-size on Tabs will stretch the tabs to full height.
<!-- Feel free to edit the code below. The live preview will update as you make changes. -->
<div class="wrapper flex">
<vwc-tabs scrollable-panel class="tabs">
<vwc-tab icon="chat-line" label="Comments"></vwc-tab>
<vwc-tab icon="playlist-line" label="Playlist"></vwc-tab>
<vwc-tab icon="star-line" label="Favourites"></vwc-tab>
<vwc-tab-panel>
<vwc-empty-state
icon="error-solid"
headline="No results"
connotation="alert"
>
</vwc-empty-state>
</vwc-tab-panel>
<vwc-tab-panel>Playlist</vwc-tab-panel>
<vwc-tab-panel>Favourites</vwc-tab-panel>
</vwc-tabs>
</div>
<style>
body {
height: 100%;
}
.wrapper {
display: flex;
flex-direction: column;
block-size: 100%;
}
.tabs {
--tabs-block-size: 100%;
flex: 1;
block-size: 100%;
}
.tabs::part(tab-panel) {
display: flex;
flex-direction: column;
justify-content: center;
}
</style>
Use the CSS part tab-panel to provide custom styling to the Tab Panel components.
<!-- Feel free to edit the code below. The live preview will update as you make changes. -->
<vwc-tabs class="tabs">
<vwc-tab label="Tab one"></vwc-tab>
<vwc-tab label="Tab two"></vwc-tab>
<vwc-tab label="Tab three"></vwc-tab>
<vwc-tab-panel>Tab Panel one</vwc-tab-panel>
<vwc-tab-panel>Tab Panel two</vwc-tab-panel>
<vwc-tab-panel>Tab Panel three</vwc-tab-panel>
</vwc-tabs>
<style>
.tabs::part(tab-panel) {
background-color: var(--vvd-color-cta-50);
}
</style>
Properties
| Name | Type | Description |
|---|---|---|
| activeid | string |
Match with an id set on a Tab to mark it as active on initial load |
| connotation | accent (default), cta |
Sets the connotation color of the active tab |
| gutters | none, small (default) |
Sets the spacing inside the Tab Panels |
| orientation | horizontal (default), vertical |
Sets axis on which the tabs are aligned |
| scrollable-panel | boolean |
Sets whether the Tab Panel will be scrollable (if content height exceeds block-size) |
Slots
| Name | Description |
|---|---|
| default | For Tab and Tab Panel components |
| action-items | To add action items after the last Tab in the tabs bar |
Events
| Name | Type | Bubbles | Composed | Description |
|---|---|---|---|---|
change |
CustomEvent<HTMLElement> |
Yes | Yes | Fired when a tab is clicked or during keyboard navigation |
Properties
| Name | Type | Description |
|---|---|---|
| disabled | boolean |
Sets the disabled state |
| icon | Enum: [icon-name] |
A decorative icon the custom element should have. See the Vivid Icon Gallery for available icons and icon-names |
| icon-trailing | boolean |
Places the icon after the label text |
| label | string |
Sets the label text |
| removable | boolean |
Adds a close button |
| shape | rounded (default), sharp |
Shape of the background when hovered |
Slots
| Name | Description |
|---|---|
| icon | For custom icons |
Events
| Name | Type | Bubbles | Composed | Description |
|---|---|---|---|---|
| close | CustomEvent |
Yes | Yes | When removable is set, fired when the close button is clicked or the DELETE key is pressed |
Slots
| Name | Description |
|---|---|
| default | For Tab Panel content |