import React from 'react';
/**
 * Slider component props
 * @property {SliderSize} size - The size of the slider
 * @property {SliderState} state - The state of the slider (default, disabled, invalid)
 * @property {string} label - Optional label text for the slider
 * @property {string} helperText - Optional helper text displayed below the slider
 * @property {number} min - Minimum value for the slider
 * @property {number} max - Maximum value for the slider
 * @property {number} step - Step value for slider increments
 * @property {number | number[]} value - Current value(s) of the slider
 * @property {number | number[]} defaultValue - Default value(s) for uncontrolled usage
 * @property {function} onChange - Callback fired when the value changes
 * @property {function} onChangeCommitted - Callback fired when the user stops dragging
 * @property {boolean} showValue - Whether to show the current value
 * @property {string} unit - Unit to display with the value (e.g., "px", "%", "°")
 * @property {boolean} showMinMax - Whether to show min/max labels
 * @property {boolean} showTicks - Whether to show tick marks
 * @property {number} tickStep - Step for tick marks (defaults to step)
 * @property {boolean} range - Whether this is a range slider (dual thumbs)
 * @property {React.ReactNode} iconStart - Icon to display at the start of the slider
 * @property {React.ReactNode} iconEnd - Icon to display at the end of the slider
 * @property {boolean} required - Whether the slider is required
 */
export interface SliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
    /** The state of the slider (default, disabled, invalid) */
    state?: SliderState;
    /** Optional label text for the slider */
    label?: string;
    /** Optional helper text displayed below the slider */
    helperText?: string;
    /** Minimum value for the slider */
    min?: number;
    /** Maximum value for the slider */
    max?: number;
    /** Step value for slider increments */
    step?: number;
    /** Current value(s) of the slider */
    value?: number | number[];
    /** Default value(s) for uncontrolled usage */
    defaultValue?: number | number[];
    /** Callback fired when the value changes */
    onChange?: (value: number | number[]) => void;
    /** Callback fired when the user stops dragging */
    onChangeCommitted?: (value: number | number[]) => void;
    /** Whether to show the current value */
    showValue?: boolean;
    /** Unit to display with the value (e.g., "px", "%", "°") */
    unit?: string;
    /** Whether to show min/max labels */
    showMinMax?: boolean;
    /** Whether to show tick marks */
    showTicks?: boolean;
    /** Step for tick marks (defaults to step) */
    tickStep?: number;
    /** Whether this is a range slider (dual thumbs) */
    range?: boolean;
    /** Icon to display at the start of the slider */
    iconStart?: React.ReactNode;
    /** Icon to display at the end of the slider */
    iconEnd?: React.ReactNode;
    /** Additional class name for the slider */
    className?: string;
    /** Additional class name for the label */
    labelClassName?: string;
    /** Additional class name for the helper text */
    helperTextClassName?: string;
    /** Additional class name for the wrapper */
    wrapperClassName?: string;
    /** Component-level theme overrides */
    theme?: SliderThemeOverrides;
    /** Whether the slider is required */
    required?: boolean;
    /** Name attribute for form submission */
    name?: string;
    /** ARIA label for accessibility */
    'aria-label'?: string;
    /** ARIA labelledby for accessibility */
    'aria-labelledby'?: string;
    /** ARIA describedby for accessibility */
    'aria-describedby'?: string;
}
export type SliderState = 'default' | 'disabled' | 'invalid';
/**
 * Theme overrides for the Slider component
 * Simplified flat structure following shadcn pattern
 */
export interface SliderThemeOverrides {
    /** Style for the outermost wrapper */
    wrapperStyle?: string;
    /** Style for the label */
    labelStyle?: string;
    /** Style for the helper text */
    helperTextStyle?: string;
    /** Style for the root slider container */
    rootStyle?: string;
    /** Style for the slider track (background) */
    trackStyle?: string;
    /** Style for the range (filled portion) */
    rangeStyle?: string;
    /** Base style for the slider thumb */
    thumbStyle?: string;
    /** Style for the value display */
    valueDisplayStyle?: string;
    /** Style for min/max labels */
    minMaxLabelStyle?: string;
    /** Style for tick marks */
    tickStyle?: string;
}
