import { IconComponent } from '@consta/icons/Icon';
import React from 'react';
import { PropsWithHTMLAttributes } from '../../utils/types/PropsWithHTMLAttributes';
import { Direction } from '../Popover';
import { ActiveButton } from './useSlider/helper';
export declare const sliderPropStatus: readonly ["alert", "warning", "success"];
export type SliderPropStatus = typeof sliderPropStatus[number];
export declare const sliderPropStatusDefault: "alert";
export type SliderPropView = 'default' | 'division';
export declare const sliderPropSize: readonly ["s", "xs", "m", "l"];
export type SliderPropSize = typeof sliderPropSize[number];
export declare const sliderPropSizeDefault: SliderPropSize;
export type SliderValue<RANGE> = RANGE extends true ? [number, number] : number;
export type SliderPropOnChange<RANGE> = (value: SliderValue<RANGE>, prop: {
    e?: Event | React.TouchEvent | React.MouseEvent | React.KeyboardEvent | React.ChangeEvent;
}) => void;
type SliderPropTooltipFormatter = (value: number | undefined) => string;
type Side = IconComponent | 'input';
type Props<RANGE extends boolean = false> = {
    className?: string;
    step?: number | number[];
    view?: SliderPropView;
    disabled?: boolean;
    range?: RANGE;
    withTooltip?: boolean;
    value: SliderValue<RANGE>;
    label?: string;
    labelIcon?: IconComponent;
    caption?: string;
    status?: SliderPropStatus;
    min?: number;
    size?: SliderPropSize;
    max?: number;
    onChange?: SliderPropOnChange<RANGE>;
    onAfterChange?: SliderPropOnChange<RANGE>;
    leftSide?: Side;
    tooltipFormatter?: SliderPropTooltipFormatter;
    rightSide?: Side;
    tooltipDirection?: Direction;
    tooltipPossibleDirections?: Direction[];
};
export type Line = {
    width: number;
    active: boolean;
    size?: number[];
};
export type SliderLineProps = {
    view?: SliderPropView;
    lines: Line[];
    disabled?: boolean;
    hovered?: boolean;
    onHover?: (hovered: boolean) => void;
};
export type SliderPointProps = PropsWithHTMLAttributes<{
    value?: number;
    disabled?: boolean;
    focused?: boolean;
    hovered?: boolean;
    withTooltip?: boolean;
    handlePress?: (typeButton: ActiveButton) => void;
    buttonLabel?: ActiveButton;
    buttonRef?: React.RefObject<HTMLButtonElement>;
    popoverPosition?: TrackPosition;
    tooltipFormatter?: SliderPropTooltipFormatter;
    onFocus?: (e: React.FocusEvent<HTMLButtonElement> | React.MouseEvent, button: ActiveButton) => void;
    onKeyPress?: (e: React.KeyboardEvent, typeButton?: ActiveButton) => void;
    onHover?: (hovered: boolean) => void;
    position: number;
    active?: boolean;
    tooltipZIndex?: number;
    tooltipDirection?: Direction;
    tooltipPossibleDirections?: Direction[];
}, HTMLButtonElement>;
export type SliderProps<RANGE extends boolean> = PropsWithHTMLAttributes<Props<RANGE>, HTMLDivElement>;
export type SliderComponent = <RANGE extends boolean = false>(props: SliderProps<RANGE>) => React.ReactElement | null;
export declare const isRangeParams: (params: Props<boolean>) => params is Props<true>;
export declare const isNotRangeParams: (params: Props<boolean>) => params is Props<false>;
export declare const defaultTooltipFormatter: SliderPropTooltipFormatter;
export type TrackPosition = {
    x: number;
    y: number;
} | null;
export declare const getValueForInput: (props: SliderProps<boolean>, field: 0 | 1) => number;
type GetOnChangeForInputReturned = (props: {
    e?: React.ChangeEvent | React.MouseEvent | React.KeyboardEvent;
    value: number;
}) => void;
export declare const getOnChangeForInput: (props: SliderProps<boolean>, field: 0 | 1) => GetOnChangeForInputReturned;
export declare const getIcon: (side?: Side) => IconComponent | undefined;
export declare const getMaxForStartField: (props: SliderProps<boolean>) => number | undefined;
export declare const getMinForEndField: (props: SliderProps<boolean>) => number | undefined;
export declare const getValidStep: (min: number, max: number, step?: number | number[]) => number | number[];
export {};
