import React from "react";
import { UiBaseProps, UiSize } from "../types";
import { type SliderMark, type SliderMarksPosition, type SliderRangeMark, type SliderRangeValue } from "./lib";
type SliderMarksDisplay = "compact" | "full";
interface SliderCommonProps<TMark extends SliderMark> {
    /**
     * Минимальная координата шкалы. Marks вне этой границы отбрасываются.
     */
    min: number;
    /**
     * Максимальная координата шкалы. Marks вне этой границы отбрасываются.
     */
    max: number;
    /**
     * Шаг изменения, когда `marks` не заданы или после фильтрации не осталось валидных marks.
     */
    step?: number;
    /**
     * Дискретные точки выбора. Если заданы, бегунок всегда ходит только по marks.
     */
    marks?: readonly TMark[];
    /**
     * Способ визуального размещения marks и бегунка: по числовой координате `value` или равномерно по индексу.
     */
    marksPosition?: SliderMarksPosition;
    /**
     * Внешний CSS-класс контейнера поля.
     */
    className?: string;
    /**
     * Текст внешней ошибки, отображается через общую `InputUI`-обёртку.
     */
    error?: string;
    /**
     * Вызывается после успешного изменения значения, чтобы потребитель мог сбросить внешнюю ошибку.
     */
    onClearError?: () => void;
}
/**
 * Single-value slider. Возвращает координату шкалы, потому что single marks не используют `outputValue`.
 */
export interface SliderProps extends Omit<UiBaseProps<number, number | undefined>, "placeholder">, SliderCommonProps<SliderMark> {
}
/**
 * Range slider. Возвращает бизнес-значения `SliderRangeMark.outputValue`, если они заданы, иначе координаты `value`.
 */
export interface SliderRangeProps extends Omit<UiBaseProps<SliderRangeValue, SliderRangeValue | undefined>, "placeholder">, SliderCommonProps<SliderRangeMark> {
}
interface SliderBaseCommonProps<TMark extends SliderMark> extends SliderCommonProps<TMark> {
    /**
     * Подпись поля в общей `InputUI`-обёртке.
     */
    label?: React.ReactNode;
    /**
     * Описание поля под подписью.
     */
    description?: string;
    /**
     * Блокирует pointer, keyboard и click-взаимодействие.
     */
    disabled?: boolean;
    /**
     * Размер общей `InputUI`-обёртки.
     */
    size?: UiSize;
    /**
     * Compact показывает только ticks/tooltip внутри высоты control, full добавляет строку labels для popover.
     */
    marksDisplay?: SliderMarksDisplay;
}
interface SliderBaseSingleProps extends SliderBaseCommonProps<SliderMark> {
    mode: "single";
    value: number | undefined;
    onChange: (value: number) => void;
}
interface SliderBaseRangeProps extends SliderBaseCommonProps<SliderRangeMark> {
    mode: "range";
    value: SliderRangeValue | undefined;
    onChange: (value: SliderRangeValue) => void;
}
export type SliderBaseProps = SliderBaseSingleProps | SliderBaseRangeProps;
export declare function SliderBase(props: SliderBaseProps): React.JSX.Element;
export declare function Slider(props: SliderProps): React.JSX.Element;
export declare function SliderRange(props: SliderRangeProps): React.JSX.Element;
export {};
//# sourceMappingURL=Slider.d.ts.map