Segmented Control
Segmented controls let users switch between related options.
Basic
Source Code
import { Segmented, SegmentedItem } from '@ocean-network-express/magenta-ui/react';
export const Basic = () => {
return (
<Segmented>
<SegmentedItem>First section</SegmentedItem>
<SegmentedItem>Second section</SegmentedItem>
<SegmentedItem>Third section</SegmentedItem>
</Segmented>
);
};
Default Selected Segment
- You can set the default selected segment by using the
defaultIndexprop. - The
defaultIndexis0by default.
Controlled
- To control Segmented state, use
selectedIndexandonChangeprops.
Source Code
import { Segmented, SegmentedItem } from '@ocean-network-express/magenta-ui/react';
import React from 'react';
export const Controlled = () => {
const [selectedIndex, setSelectedIndex] = React.useState(0);
return (
<Segmented selectedIndex={selectedIndex} onChange={setSelectedIndex}>
<SegmentedItem>First section</SegmentedItem>
<SegmentedItem>Second section</SegmentedItem>
<SegmentedItem>Third section</SegmentedItem>
</Segmented>
);Disabled
- To disable a
SegmentedItem, set thedisabledprop totrue.
Source Code
import { Segmented, SegmentedItem } from '@ocean-network-express/magenta-ui/react';
export const Disabled = () => {
return (
<Segmented>
<SegmentedItem>First section</SegmentedItem>
<SegmentedItem disabled>Second section</SegmentedItem>
<SegmentedItem>Third section</SegmentedItem>
</Segmented>
);
};
Sizes
- Segmented supports 4 sizes
sm,md,lgandresponsiveand can be changed by passing thesizeprop. - Default size is
lg.
Source Code
import { Segmented, SegmentedItem } from '@ocean-network-express/magenta-ui/react';
export const Sizes = () => {
return (
<div className="flex flex-col gap-y-8">
<Segmented size="lg">
<SegmentedItem>First section</SegmentedItem>
<SegmentedItem>Second section</SegmentedItem>
<SegmentedItem>Third section</SegmentedItem>
</Segmented>
<Segmented size="md">
<SegmentedItem>First section</SegmentedItem>- With size
responsive, the component will be responsive to the viewport.
Screen prefix | Screen width | Component size |
|---|---|---|
xs → xl | 0px → 1279px | sm |
xl → 3xl | 1280px → 1919px | md |
3xl → ∞ | 1920px → ∞ | lg |
Source Code
import { Segmented, SegmentedItem } from '@ocean-network-express/magenta-ui/react';
export const Responsive = () => {
return (
<Segmented size="responsive">
<SegmentedItem>First section</SegmentedItem>
<SegmentedItem>Second section</SegmentedItem>
<SegmentedItem>Third section</SegmentedItem>
</Segmented>
);
};
Customization
Segmented control with indicator
Source Code
import { Indicator, Segmented, SegmentedItem } from '@ocean-network-express/magenta-ui/react';
export const SegmentedWithIndicator = () => {
return (
<div className="flex flex-col gap-y-24 items-center">
<Segmented size="lg">
<SegmentedItem>
First section <Indicator size="lg" label="89" />
</SegmentedItem>
<SegmentedItem>Second section</SegmentedItem>
<SegmentedItem>
Third section <Indicator size="lg" label="25" />Segmented control with overflow menu
Source Code
import { ChevronDownOutline, ChevronUpOutline } from '@ocean-network-express/magenta-ui/icons';
import {
DropdownMenu,
DropdownMenuTrigger,
Menu,
MenuBody,
MenuItem,
MenuList,
Segmented,
SegmentedItem,
TabPanel,
TabPanels,Accessibility
Roles and properties
- The
SegmentedItemcomponent has thetype="button",role="radio",tabIndex="-1"anddata-segmented-item-indexis current index of this item in aSegmentedcomponent. - The selected
SegmentedItemhas thearia-checked="true"andtabIndex="0"
Keyboard interactions
- The
Segmentedcomponent supports the following keyboard interactions when focus is on theSegmentedItemcomponent:
Key | Description |
|---|---|
Right Arrow | - Moves focus to the next segmented item. |
Left Arrow | - Moves focus to the previous segmented item. |
Home | Moves focus to the first segmented item. |
End | Moves focus to the last segmented item. |
Was this page helpful?
Toggle Group
Option Switch
Segmented Button
SegmentedItem
Segmented Control - Examples