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.
selectedIndexnumber—Controlled selected index.
defaultIndexnumber0Initial uncontrolled index.
onChange(index: number, value: string) => void—Callback when segment changes.
sizeComponentSize"md"Size preset (sm, md, lg).
toneComponentTone"primary"Color tone.
disabledbooleanfalseDisable all segments.
hapticFeedbackbooleantrueEnable haptic feedback.

SegmentedOption

PropTypeDefaultDescription
label*string—Segment label text.
value*string—Segment value identifier.
iconRenderIcon—Leading icon.
badgestring | number—Badge indicator.
disabledboolean—Disable this specific segment.