import { ReactNode, MouseEvent as ReactMouseEvent, KeyboardEvent as ReactKeyboardEvent, HTMLAttributes, CSSProperties, PropsWithChildren } from "react";
import { ITheme } from "../../theme/ITheme";
export interface ISimpleSlider extends Required<Pick<ISliderProps, "showStepMarks" | "step" | "min" | "max" | "marks">> {
    simpleValue: Required<ISliderProps<false>>["value"];
    rangeValue: Required<ISliderProps<true>>["value"];
    colorSchemeValue: string;
    position: boolean;
    showTooltips: boolean;
    markLabels: boolean;
    showMarks: boolean;
    isDragMarks: boolean;
    mark: number;
    slider: string;
    sliderWidth: number;
    valuesOrder: boolean;
    disableHandlersCrossing: boolean;
    minRange: number;
}
export declare type Formatter = (value: number) => string;
export declare type ISliderProps<IsRange extends boolean = boolean> = {
    className?: string;
    vertical?: boolean;
    disabled?: boolean;
    sliderWidth?: string | number;
    showStepMarks?: boolean;
    markLabels?: boolean;
    showTooltips?: boolean;
    primary?: boolean;
    secondary?: boolean;
    error?: boolean;
    autoFocus?: boolean;
    min?: number;
    max?: number;
    step?: number;
    marks?: number[];
    isDragMarks?: boolean;
    labelFormatter?: Formatter;
    tipFormatter?: Formatter;
    tabIndex?: number[] | number;
    lowerTrackBackground?: string;
    range?: IsRange;
    trackTooltip?: string;
    tooltipPosition?: "top" | "bottom" | "right" | "left";
    minRange?: number;
    children?: ReactNode;
    onChangeMarks?: (marks: number[]) => void;
    /**
     * Range slider option
     * @name disableHandlersCrossing
     * @description Allows to prevent crossing of left/right side handler more than right/left side handler
     */
    disableHandlersCrossing?: boolean;
    /**
     * Range slider option
     * @name valuesOrder
     * @description Output value always will have order of min max values.
     */
    valuesOrder?: boolean;
} & SliderCommonType<IsRange>;
declare type SliderCommonType<T extends boolean> = T extends true ? {
    value: [number, number];
    onChange?: (newValue: [number, number]) => void;
    onStop?: (newValue: [number, number]) => void;
} : T extends false | never | void ? {
    value: number;
    onChange?: (newValue: number) => void;
    onStop?: (newValue: number) => void;
} : {};
export declare type SimpleValue = ISliderProps<false>["value"];
export declare type RangeValue = ISliderProps<true>["value"];
export interface IHandle extends PropsWithChildren {
    vertical?: boolean;
    colorScheme: {
        primary?: boolean;
        secondary?: boolean;
        error?: boolean;
    };
    offset?: number;
    disabled?: boolean;
    tabIndex?: number;
    onMouseDown?: (e: ReactMouseEvent<HTMLDivElement>) => void;
    onHandleRef?: (ref: HTMLDivElement) => void;
    isDefaultTheme?: boolean;
}
export declare enum Handlers {
    From = 0,
    To = 1
}
export declare type Value = Required<ISliderProps>["value"];
export declare type ProcessedValues = {
    trimmedValueFrom: number;
    trimmedValueTo: number;
    offsetFrom: number;
    offsetTo: number;
    lowerBound: number;
    upperBound: number;
};
export interface IHandleContainer {
    disabled?: boolean;
    primary?: boolean;
    secondary?: boolean;
    error?: boolean;
    vertical?: boolean;
    offset?: number;
    isDefaultTheme?: boolean;
}
export interface ILabel {
    vertical?: boolean;
    left: string;
    bottom: string;
    isDragMarks?: boolean;
    isHoverMark?: boolean;
}
export interface ILabels {
    vertical?: boolean;
    marks?: number[];
    upperBound: number;
    lowerBound: number;
    max: number;
    min: number;
    step: number;
    labelFormatter?: Formatter;
    sliderWidth?: string | number;
    showStepMarks?: boolean;
    markLabels?: boolean;
    hoverMark?: number | null;
    isDragMarks?: boolean;
}
export interface ILabelsContainer {
    vertical?: boolean;
    isDragMarks?: boolean;
    sliderWidth?: string | number;
}
export interface ILowerTrack {
    vertical?: boolean;
    showStepMarks?: boolean;
    isDefaultTheme?: boolean;
    disabled?: boolean;
    lowerTrackBackground?: string;
    theme: ITheme;
}
export interface IMain {
    disabled?: boolean;
    vertical?: boolean;
    sliderWidth?: number | string;
    showStepMarks?: boolean;
    isDefaultTheme?: boolean;
    lowerTrackBackground?: string;
    isDragMarks?: boolean;
}
export interface IMark extends HTMLAttributes<HTMLDivElement> {
    primary?: boolean;
    secondary?: boolean;
    error?: boolean;
    vertical: boolean;
    offset: string;
}
export interface IDragMark extends IMark {
    style?: CSSProperties;
    closable?: boolean;
    disabled?: boolean;
    onRemove?: VoidFunction;
}
export interface IMarks {
    vertical: boolean;
    marks?: number[];
    isDragMarks?: boolean;
    step: number;
    lowerBound: number;
    upperBound: number;
    max: number;
    min: number;
    isDefaultTheme: boolean;
    disabled?: boolean;
    showStepMarks?: boolean;
    activeMark?: number | null;
    hoverMark?: number | null;
    colorScheme: {
        primary?: boolean;
        secondary?: boolean;
        error?: boolean;
    };
    onAdd?: (point: number) => void;
    onRemove?: (point: number) => void;
    onMouseDown?: (e: ReactMouseEvent<HTMLSpanElement>, point: number) => void;
    onMouseOver?: (e: ReactMouseEvent<HTMLSpanElement>) => void;
    onKeyDown?: (e: ReactKeyboardEvent<HTMLSpanElement>) => void;
}
export interface IMarksContainer {
    vertical: boolean;
    showStepMarks?: boolean;
}
export interface ITrack {
    className?: string;
    vertical?: boolean;
    offset?: number;
    length?: number;
    colorScheme?: {
        primary?: boolean;
        secondary?: boolean;
        error?: boolean;
    };
    disabled?: boolean;
    showStepMarks?: boolean;
    itemsAmount?: number;
    index?: number;
    max?: number;
    step?: number;
    min?: number;
    lowerBound: number;
    upperBound: number;
    point: number;
    range?: boolean;
    tooltip?: string;
    isDefaultTheme?: boolean;
    isDragMarks?: boolean;
}
export interface ITrackContainerProps {
    primary?: boolean;
    secondary?: boolean;
    error?: boolean;
    disabled?: boolean;
    vertical?: boolean;
    isDefaultTheme?: boolean;
    isDragMarks?: boolean;
    showStepMarks?: boolean;
    theme?: any;
    offset?: number;
    length?: number;
    size?: string;
    position?: string;
    range?: boolean;
}
export interface ITracks {
    showStepMarks?: boolean;
    vertical?: boolean;
    disabled?: boolean;
    isDefaultTheme?: boolean;
    offset?: number;
    min?: number;
    max?: number;
    step?: number;
    colorScheme: {
        primary?: boolean;
        secondary?: boolean;
        error?: boolean;
    };
    point?: number;
    length?: number;
    range?: boolean;
    lowerBound: number;
    upperBound: number;
    tooltip?: string;
    className?: string;
    isDragMarks?: boolean;
}
export {};
