What this family solves
Single-select segmented toggle family with radiogroup semantics, keyboard navigation, and three visual variants (default, inverse, pill).
Marwes documentation
Single-select segmented toggle family with radiogroup semantics, keyboard navigation, and three visual variants (default, inverse, pill).
Single-select segmented toggle family with radiogroup semantics, keyboard navigation, and three visual variants (default, inverse, pill).
Use SegmentedControlField when a small set of mutually exclusive views or filters should stay visible at once.
Labeled set of mutually exclusive views or filters
Choose an adapter in the verified examples. The inventory below reflects each framework package exactly.
@marwes-ui/reactSegmentedControlField
SegmentedControlFieldProps, SegmentedControlItem
@marwes-ui/vueSegmentedControlField
SegmentedControlFieldProps, SegmentedControlItem
@marwes-ui/svelteSegmentedControlField
SegmentedControlFieldProps, SegmentedControlItem
These examples come from the same fixtures verified by the repository checks.
import { Icon, IconName, SegmentedControlField } from "@marwes-ui/react"
import { useState } from "react"
export function Example() {
const [density, setDensity] = useState("compact")
const [mode, setMode] = useState("compact")
const [theme, setTheme] = useState("light")
return (
<>
<SegmentedControlField
label="View density"
segmentedControl={{
items: [
{ value: "compact", label: "Compact" },
{ value: "wide", label: "Wide" },
],
value: density,
onValueChange: setDensity,
variant: "inverse",
fullWidth: true,
}}
/>
<SegmentedControlField
label="View mode"
segmentedControl={{
items: [
{
value: "compact",
icon: <Icon name={IconName.Star} decorative size={12} />,
label: "Compact",
},
{
value: "wide",
icon: <Icon name={IconName.Settings} decorative size={12} />,
label: "Wide",
},
{
value: "rich",
icon: <Icon name={IconName.Star} decorative size={12} />,
label: "Rich",
},
],
value: mode,
onValueChange: setMode,
variant: "inverse",
fullWidth: true,
}}
/>
<SegmentedControlField
label="Theme"
segmentedControl={{
items: [
{
value: "light",
icon: <Icon name={IconName.Sun} decorative size={12} />,
ariaLabel: "Light",
},
{
value: "dark",
icon: <Icon name={IconName.Moon} decorative size={12} />,
ariaLabel: "Dark",
},
],
value: theme,
onValueChange: setTheme,
variant: "inverse",
size: "sm",
}}
/>
</>
)
}<script setup lang="ts">
import { h } from "vue"
import { Icon, IconName, SegmentedControlField } from "@marwes-ui/vue"
const modeItems = [
{ value: "compact", icon: h(Icon, { name: IconName.Star, decorative: true, size: 12 }), label: "Compact" },
{ value: "wide", icon: h(Icon, { name: IconName.Settings, decorative: true, size: 12 }), label: "Wide" },
{ value: "rich", icon: h(Icon, { name: IconName.Star, decorative: true, size: 12 }), label: "Rich" },
]
const themeItems = [
{ value: "light", icon: h(Icon, { name: IconName.Sun, decorative: true, size: 12 }), ariaLabel: "Light" },
{ value: "dark", icon: h(Icon, { name: IconName.Moon, decorative: true, size: 12 }), ariaLabel: "Dark" },
]
</script>
<template>
<SegmentedControlField
label="View density"
:segmented-control="{ items: [
{ value: 'compact', label: 'Compact' },
{ value: 'wide', label: 'Wide' },
], variant: 'inverse', fullWidth: true }"
/>
<SegmentedControlField label="View mode" :segmented-control="{ items: modeItems, variant: 'inverse', fullWidth: true }" />
<SegmentedControlField label="Theme" :segmented-control="{ items: themeItems, variant: 'inverse', size: 'sm' }" />
</template><script lang="ts">
import { SegmentedControlField } from "@marwes-ui/svelte"
let density = $state("compact")
let mode = $state("compact")
let theme = $state("light")
</script>
<SegmentedControlField
label="View density"
segmentedControl={{ items: [
{ value: "compact", label: "Compact" },
{ value: "wide", label: "Wide" },
], value: density, onvaluechange: (value) => (density = value), variant: "inverse", fullWidth: true }}
/>
<SegmentedControlField
label="View mode"
segmentedControl={{ items: [
{ value: "compact", label: "Compact" },
{ value: "wide", label: "Wide" },
{ value: "rich", label: "Rich" },
], value: mode, onvaluechange: (value) => (mode = value), variant: "inverse", fullWidth: true }}
/>
<SegmentedControlField
label="Theme"
segmentedControl={{ items: [
{ value: "light", ariaLabel: "Light" },
{ value: "dark", ariaLabel: "Dark" },
], value: theme, onvaluechange: (value) => (theme = value), variant: "inverse", size: "sm" }}
/>Segmented Control uses Marwes preset CSS and theme variables. Customize it through the theme passed to MarwesProvider; do not add a second component stylesheet. See the theming guide for configuration and token details.