import { cn } from '@/lib/utils'; import * as React from 'react'; export declare type SegmentedValue = string | number; export declare type SegmentedRawOption = SegmentedValue; export interface SegmentedLabeledOption { className?: string; disabled?: boolean; label: React.ReactNode; value: SegmentedRawOption; /** * html `title` property for label */ title?: string; } declare type SegmentedOptions = (SegmentedRawOption | SegmentedLabeledOption)[]; export interface SegmentedProps extends Omit, 'onChange'> { options: SegmentedOptions; defaultValue?: SegmentedValue; value?: SegmentedValue; onChange?: (value: SegmentedValue) => void; disabled?: boolean; prefixCls?: string; direction?: 'ltr' | 'rtl'; motionName?: string; activeClassName?: string; } export function Segmented({ options, value, onChange, className, activeClassName, }: SegmentedProps) { const [selectedValue, setSelectedValue] = React.useState< SegmentedValue | undefined >(value); const handleOnChange = (e: SegmentedValue) => { if (onChange) { onChange(e); } setSelectedValue(e); }; return (
{options.map((option) => { const isObject = typeof option === 'object'; const actualValue = isObject ? option.value : option; return (
handleOnChange(actualValue)} > {isObject ? option.label : option}
); })}
); }