Skip to content
Actions

Segmented Button

MD3 segmented button.

Walkthrough

1. Basic

One choice out of a few, all visible at once. Items are data, not children.

<script lang="ts">	import { SegmentedButton } from 'omaris';​	let range = $state('week');</script>​<SegmentedButton	label="Range"	bind:value={range}	items={[		{ value: 'day', label: 'Day' },		{ value: 'week', label: 'Week' },		{ value: 'month', label: 'Month' }	]}/>

2. Multiple

multiple for a few that can all apply — Bold, Italic; it binds values and lets the set be empty.

<script lang="ts">	import { SegmentedButton } from 'omaris';​	let styles = $state<string[]>(['bold']);</script>​<SegmentedButton	multiple	mandatory={false}	label="Text style"	bind:values={styles}	items={[		{ value: 'bold', label: 'Bold' },		{ value: 'italic', label: 'Italic' },		{ value: 'underline', label: 'Underline' }	]}/>

3. Icons

A selected segment swaps its icon for the tick, unless keepIcon — which is what an icon-only set needs, or it loses its meaning when picked.

<script lang="ts">	import { SegmentedButton } from 'omaris';​	let view = $state('grid');	let align = $state('start');</script>​{#snippet grid()}	...{/snippet}{#snippet list()}	...{/snippet}​<div class="flex w-full flex-col items-center gap-4">	<SegmentedButton		label="View"		bind:value={view}		items={[			{ value: 'grid', label: 'Grid', icon: grid },			{ value: 'list', label: 'List', icon: list }		]}	/>​	<SegmentedButton		label="Alignment"		keepIcon		bind:value={align}		items={[			{ value: 'start', icon: list, ariaLabel: 'Align start' },			{ value: 'center', icon: grid, ariaLabel: 'Align centre' }		]}	/></div>