<BaseTabs /> ยท A subnavigation component.
<template>
<BaseTabs
default-value="team"
variant="primary"
:tabs="[
{ label: 'Team', value: 'team' },
{ label: 'Projects', value: 'projects' },
{ label: 'Disabled', value: 'tasks', disabled: true },
]"
>
<BaseTabsContent value="team">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</template>
Use the <BaseTabs /> component to create a subnavigation component. Nest <BaseTabsContent /> components inside <BaseTabs /> to create the content for each tab.
<template>
<BaseTabs>
<BaseTabsContent>
<!-- Content goes here -->
</BaseTabsContent>
<BaseTabsContent>
<!-- Content goes here -->
</BaseTabsContent>
</BaseTabs>
</template>
This component has props that you can use to modify its visual style.
| Model | Type |
|---|---|
model-value | StringOrNumberThe controlled value of the tab to activate. Can be bind as `v-model`. |
| Prop | Type |
|---|---|
tabsdefault: - | BaseTabsTriggerProps[]An array of tab objects that contain a label and value |
labeldefault: - | stringAccessible label for the tabs |
variantdefault: "primary" | "primary" | "dark" | "muted"Defines the color of the active tab |
justifydefault: "start" | "start" | "center" | "end"The horizontal alignment of the tabs. |
roundeddefault: "md" | "none" | "sm" | "md" | "lg" | "full"The radius of the boxed tab. |
typedefault: "tabs" | "tabs" | "box"The type of tabs to display.. |
default-valuedefault: - | StringOrNumberThe value of the tab that should be active when initially rendered. Use when you do not need to control the state of the tabs |
orientationdefault: - | DataOrientationThe orientation the tabs are laid out. Mainly so arrow navigation is done accordingly (left & right vs. up & down) |
dirdefault: - | DirectionThe reading direction of the combobox when applicable. If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. |
activation-modedefault: - | "automatic" | "manual"Whether a tab is activated automatically (on focus) or manually (on click). |
unmount-on-hidedefault: - | booleanWhen `true`, the element will be unmounted on closed state. |
as-childdefault: - | booleanChange the default rendered element for the one passed as a child, merging their props and behavior. Read our [Composition](https://www.reka-ui.com/docs/guides/composition) guide for more details. |
asdefault: - | AsTag | ComponentThe element or component this component should render as. Can be overwritten by `asChild`. |
| Slot | Type |
|---|---|
#default | any |
#trigger | any |
| Prop | Type |
|---|---|
valuedefault: - | StringOrNumberA unique value that associates the content with a trigger. |
force-mountdefault: - | booleanUsed to force mounting when more control is needed. Useful when controlling animation with Vue animation libraries. |
as-childdefault: - | booleanChange the default rendered element for the one passed as a child, merging their props and behavior. Read our [Composition](https://www.reka-ui.com/docs/guides/composition) guide for more details. |
asdefault: - | AsTag | ComponentThe element or component this component should render as. Can be overwritten by `asChild`. |
| Slot | Type |
|---|---|
#default | any |
Use the justify prop to change alignment of the tabs.
<template>
<BaseTabs
default-value="team"
justify="center"
variant="primary"
:tabs="[
{ label: 'Team', value: 'team' },
{ label: 'Projects', value: 'projects' },
]"
>
<BaseTabsContent value="team">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</template>
Use the orientation prop to change orientation of the tabs.
<template>
<BaseTabs
default-value="team"
orientation="vertical"
:tabs="[
{ label: 'Team', value: 'team' },
{ label: 'Projects', value: 'projects' },
{ label: 'Disabled', value: 'tasks', disabled: true },
]"
>
<BaseTabsContent value="team">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</template>
Use the variant prop to change the color of the tabs.
<template>
<BaseTabs
default-value="team"
variant="primary"
:tabs="[
{ label: 'Team', value: 'team' },
{ label: 'Projects', value: 'projects' },
{ label: 'Disabled', value: 'tasks', disabled: true },
]"
>
<BaseTabsContent value="team">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</template>
Include icons in the tabs object to display icons.
<template>
<BaseTabs
default-value="tasks"
color="default"
:tabs
>
<BaseTabsContent value="team">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</template>
<script setup lang="ts">
const tabs = [
{
label: 'Team',
value: 'team',
icon: 'solar:users-group-rounded-linear',
},
{
label: 'Projects',
value: 'projects',
icon: 'solar:case-linear',
},
{
label: 'Tasks',
value: 'tasks',
icon: 'solar:scanner-2-linear',
},
]
</script>
Use the type prop to change the style of the tabs.
<template>
<BaseTabs
v-model="selectedTab"
type="box"
:tabs="tabs"
>
<BaseTabsContent value="team">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</template>
<script setup lang="ts">
const selectedTab = ref('team')
const tabs = [
{
label: 'Team',
value: 'team',
},
{
label: 'Projects',
value: 'projects',
},
{
label: 'Tasks',
value: 'tasks',
},
]
</script>
Include icons in the tabs object to display icons.
<template>
<BaseTabs
v-model="selectedTab"
type="box"
variant="dark"
>
<template #trigger>
<BaseTabsTrigger v-for="tab in tabs" :key="tab.value" label="Team" :icon="tab.icon" value="team" @click="selectedTab = tab.value" />
</template>
<BaseTabsContent value="team">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</template>
<script setup lang="ts">
const selectedTab = ref('team')
const tabs = [
{
label: 'Team',
value: 'team',
icon: 'solar:users-group-rounded-linear',
},
{
label: 'Projects',
value: 'projects',
icon: 'solar:case-linear',
},
{
label: 'Tasks',
value: 'tasks',
icon: 'solar:scanner-2-linear',
},
]
</script>
You can nest tabs within tabs.
<template>
<BaseTabs
default-value="team"
variant="dark"
:tabs="tabs"
>
<BaseTabsContent value="team">
<BaseTabs
default-value="team"
orientation="vertical"
type="box"
variant="dark"
:tabs="tabsNoIcon"
>
<BaseTabsContent value="team">
team Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
team Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
team Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</BaseTabsContent>
<BaseTabsContent value="projects">
<BaseTabs
default-value="team"
orientation="vertical"
type="box"
variant="dark"
:tabs="tabsNoIcon"
>
<BaseTabsContent value="team">
projects Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
projects Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
projects Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</BaseTabsContent>
<BaseTabsContent value="tasks">
<BaseTabs
default-value="team"
orientation="vertical"
type="box"
variant="dark"
:tabs="tabsNoIcon"
>
<BaseTabsContent value="team">
tasks Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quid
iudicant sensus? Primum quid tu dicis breve? Etiam beatissimum?
Ne discipulum abducam, times. ...
</BaseTabsContent>
<BaseTabsContent value="projects">
tasks Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada odio sed ante malesuada,
quis facilisis erat iaculis. Sed egestas porta fringilla. Ut ultrices, elit eget congue aliquet,
risus sem semper lorem, vitae efficitur nunc est eget mi. ...
</BaseTabsContent>
<BaseTabsContent value="tasks">
tasks Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris leo ipsum, efficitur eu finibus eu,
gravida quis enim. Fusce a elementum nunc. Nunc venenatis a elit quis ornare.
Pellentesque quis vehicula ipsum. ...
</BaseTabsContent>
</BaseTabs>
</BaseTabsContent>
</BaseTabs>
</template>
<script setup lang="ts">
const tabs = [
{
label: 'Team',
value: 'team',
icon: 'solar:users-group-rounded-linear',
},
{
label: 'Projects',
value: 'projects',
icon: 'solar:case-linear',
},
{
label: 'Tasks',
value: 'tasks',
icon: 'solar:scanner-2-linear',
},
]
const tabsNoIcon = [
{
label: 'Team',
value: 'team',
},
{
label: 'Projects',
value: 'projects',
},
{
label: 'Tasks',
value: 'tasks',
},
]
</script>