Segmented control item
The segmented control item represents an individual segment within the segmented control. Each item carries a value; selecting it updates the segmented control's v-model to that value. An item can render an icon, a label, or fully custom content.
WARNING
This component is best used within a Segmented control.
Props
value: string | number
The value of the segment, bound to the segmented control's model.
disabled?: boolean
If the segment is disabled.
icon?: FluxIconName
The icon of the segment.
label?: string
The label of the segment.
Slots
default
The content of the segment. Falls back to the icon and label.
Examples
Basic
A basic segmented control item.
<template>
<FluxSegmentedControl v-model="view">
<FluxSegmentedControlItem
value="grid"
icon="grid-2"
label="Grid"/>
<FluxSegmentedControlItem
value="list"
icon="list"
label="List"/>
</FluxSegmentedControl>
</template>
<script
lang="ts"
setup>
import { FluxSegmentedControl, FluxSegmentedControlItem } from '@flux-ui/components';
import { ref } from 'vue';
const view = ref('grid');
</script>Disabled
A segmented control with a disabled item.
<template>
<FluxSegmentedControl v-model="view">
<FluxSegmentedControlItem
value="grid"
icon="grid-2"
label="Grid"/>
<FluxSegmentedControlItem
value="list"
icon="list"
label="List"/>
<FluxSegmentedControlItem
value="stack"
icon="rectangle-history"
label="Stack"
disabled/>
</FluxSegmentedControl>
</template>
<script
lang="ts"
setup>
import { FluxSegmentedControl, FluxSegmentedControlItem } from '@flux-ui/components';
import { ref } from 'vue';
const view = ref('grid');
</script>Icon only
Omit the label to render compact, icon-only segments.
<template>
<FluxSegmentedControl v-model="align">
<FluxSegmentedControlItem
value="left"
icon="align-left"/>
<FluxSegmentedControlItem
value="center"
icon="align-center"/>
<FluxSegmentedControlItem
value="right"
icon="align-right"/>
</FluxSegmentedControl>
</template>
<script
setup
lang="ts">
import { FluxSegmentedControl, FluxSegmentedControlItem } from '@flux-ui/components';
import { ref } from 'vue';
const align = ref('left');
</script>Labels only
Omit the icon to render text-only segments.
<template>
<FluxSegmentedControl v-model="range">
<FluxSegmentedControlItem
value="day"
label="Day"/>
<FluxSegmentedControlItem
value="week"
label="Week"/>
<FluxSegmentedControlItem
value="month"
label="Month"/>
</FluxSegmentedControl>
</template>
<script
setup
lang="ts">
import { FluxSegmentedControl, FluxSegmentedControlItem } from '@flux-ui/components';
import { ref } from 'vue';
const range = ref('week');
</script>Custom content
Use the default slot to render custom content such as an icon with a badge.
<template>
<FluxSegmentedControl v-model="folder">
<FluxSegmentedControlItem value="inbox">
<FluxIcon name="message"/>
<span>Inbox</span>
<FluxBadge label="12"/>
</FluxSegmentedControlItem>
<FluxSegmentedControlItem value="archive">
<FluxIcon name="box"/>
<span>Archive</span>
</FluxSegmentedControlItem>
</FluxSegmentedControl>
</template>
<script
setup
lang="ts">
import { FluxBadge, FluxIcon, FluxSegmentedControl, FluxSegmentedControlItem } from '@flux-ui/components';
import { ref } from 'vue';
const folder = ref('inbox');
</script>