<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 | StringOrNumber The controlled value of the tab to activate. Can be bind as `v-model`. |
Prop | Type |
---|---|
tabs default: - | BaseTabsTriggerProps[] An array of tab objects that contain a label and value |
label default: - | string Accessible label for the tabs |
variant default: "primary" | "primary" | "dark" | "muted" Defines the color of the active tab |
justify default: "start" | "start" | "center" | "end" The horizontal alignment of the tabs. |
rounded default: "md" | "none" | "sm" | "md" | "lg" | "full" The radius of the boxed tab. |
type default: "tabs" | "tabs" | "box" The type of tabs to display.. |
default-value default: - | StringOrNumber The value of the tab that should be active when initially rendered. Use when you do not need to control the state of the tabs |
orientation default: - | DataOrientation The orientation the tabs are laid out. Mainly so arrow navigation is done accordingly (left & right vs. up & down) |
dir default: - | Direction The reading direction of the combobox when applicable. If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. |
activation-mode default: - | "automatic" | "manual" Whether a tab is activated automatically (on focus) or manually (on click). |
unmount-on-hide default: - | boolean When `true`, the element will be unmounted on closed state. |
as-child default: - | boolean Change 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. |
as default: - | AsTag | Component The element or component this component should render as. Can be overwritten by `asChild`. |
Slot | Type |
---|---|
#default | any |
#trigger | any |
Prop | Type |
---|---|
value default: - | StringOrNumber A unique value that associates the content with a trigger. |
force-mount default: - | boolean Used to force mounting when more control is needed. Useful when controlling animation with Vue animation libraries. |
as-child default: - | boolean Change 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. |
as default: - | AsTag | Component The 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>