Skip to content

SegmentedControl

SegmentedControl provides an iOS-style segmented tab switcher with a fluid sliding pill indicator animation.

Usage

SegmentedExample.tsx
import { useState } from 'react';
import { SegmentedControl } from '@masumdev/rn-ui';
export function SegmentedExample() {
const [index, setIndex] = useState(0);
return (
<SegmentedControl
values={['Day', 'Week', 'Month']}
selectedIndex={index}
onChange={(i) => setIndex(i)}
/>
);
}

With Icons & Badges

SegmentedAdvanced.tsx
import { SegmentedControl } from '@masumdev/rn-ui';
import { List, Grid } from 'lucide-react-native';
const options = [
{ label: 'List', value: 'list', icon: (p) => <List {...p} /> },
{ label: 'Grid', value: 'grid', icon: (p) => <Grid {...p} /> },
];
<SegmentedControl values={options} tone="primary" size="sm" />

Props API

PropTypeDefaultDescription
values*(string | SegmentedOption)[]Segment labels or option objects.
selectedIndexnumberControlled selected index.
defaultIndexnumber0Initial uncontrolled index.
onChange(index: number, value: string) => voidCallback when segment changes.
sizeComponentSize"md"Size preset (sm, md, lg).
toneComponentTone"primary"Color tone.
disabledbooleanfalseDisable all segments.
hapticFeedbackbooleantrueEnable haptic feedback.

SegmentedOption

PropTypeDefaultDescription
label*stringSegment label text.
value*stringSegment value identifier.
iconRenderIconLeading icon.
badgestring | numberBadge indicator.
disabledbooleanDisable this specific segment.