import { ElementProps, ValueProps } from '../../core/types';
import { ReactNode } from 'react';
import './RadioSlider.scss';
type RadioSliderOption<T> = T | {
    label: ReactNode;
    value: T;
};
export type RadioSliderProps<T> = ValueProps<T> & ElementProps & {
    options: RadioSliderOption<T>[];
    value?: T;
    threshold?: number;
};
/**
 * ListBox from react-aria-components supports multiple selection modes,
 * but we only need single selection mode for our RadioSlider.
 * @param props
 * @param props.value - The value of the selected option.
 * @param {(value: string) => void} props.onChange - The function to be called when the selected option changes.
 * @param props.options - Array of options to be displayed. The type of the option can be any string or an object with label and value properties.
 * @param {number} props.threshold - The threshold value to determine if the options should be displayed as a dropdown.
 * @param {ElementProps} props.rest - The rest of the props to be passed to the ListBox component.
 * @returns {JSX.Element} - The RadioSlider component.
 * @example
 * ```tsx
 * const [value, setValue] = useState<string>('option 1')
 *
 * return (
 *   <RadioSlider value={value} onChange={(v) => setValue(v)} options={['option 1', 'option 2', 'option 3']} />
 * )
 * ```
 * @example with enum
 * ```tsx
 * enum Fruit {
 *   Apple = 'Apple',
 *   Banana = 'Banana',
 *   Orange = 'Orange',
 * };
 *
 * const [value, setValue] = useState(Fruit.Apple)
 *
 * return (
 *   <RadioSlider<Fruit> value={value} onChange={(v) => setValue(v)} options={Object.values(Fruit)} />
 * )
 * ```
 */
export declare const RadioSlider: <T extends string>(props: RadioSliderProps<T>) => import("react/jsx-runtime").JSX.Element;
export default RadioSlider;
