import { IconComponent } from '@consta/icons/Icon';
import React from 'react';
import { PropsWithHTMLAttributesAndRef } from '../../utils/types/PropsWithHTMLAttributes';
export declare const progressStepBarPropSize: readonly ["s", "xs", "m"];
export declare type ProgressStepBarPropSize = typeof progressStepBarPropSize[number];
export declare const progressStepBarPropSizeDefault: "s";
export declare const progressStepBarPropDirection: readonly ["horizontal", "vertical"];
export declare type ProgressStepBarPropDirection = typeof progressStepBarPropDirection[number];
export declare const progressStepBarPropDirectionDefault: "horizontal";
export declare const progressStepBarPropStatus: readonly ["normal", "success", "warning", "alert"];
export declare type ProgressStepBarPropStatus = typeof progressStepBarPropStatus[number];
export declare const progressStepBarPropStatusDefault: "normal";
export declare const progressStepBarPointNumbersMap: readonly [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
export declare type ProgressStepBarPointNumbersMap = typeof progressStepBarPointNumbersMap[number];
export declare const progressStepBarPropPosition: readonly ["center", "start", "end"];
export declare type ProgressStepBarPropPosition = typeof progressStepBarPropPosition[number];
export declare const progressStepBarPropPositionDefault: ProgressStepBarPropPosition;
export declare type ProgressStepBarPropGetItemLabel<ITEM> = (item: ITEM) => string | undefined;
export declare type ProgressStepBarPropGetItemKey<ITEM> = (item: ITEM) => string | number;
export declare type ProgressStepBarPropGetItemTooltipContent<ITEM> = (item: ITEM) => string | undefined;
export declare type ProgressStepBarPropGetItemLineStatus<ITEM> = (item: ITEM) => ProgressStepBarPropStatus | undefined;
export declare type ProgressStepBarPropGetItemPoint<ITEM> = (item: ITEM) => ProgressStepBarPointNumbersMap | IconComponent | undefined;
export declare type ProgressStepBarPropGetItemProgress<ITEM> = (item: ITEM) => boolean | undefined;
export declare type ProgressStepBarPropGetItemContent<ITEM> = (item: ITEM) => React.ReactNode | undefined;
export declare type ProgressStepBarPropGetItemStatus<ITEM> = (item: ITEM) => ProgressStepBarPropStatus | undefined;
export declare type ProgressStepBarPropGetItemOnClick<ITEM> = (item: ITEM) => React.EventHandler<React.MouseEvent> | undefined;
export declare type ProgressStepBarItemDefault = {
    label?: string;
    tooltipContent?: string;
    lineStatus?: ProgressStepBarPropStatus;
    point?: ProgressStepBarPointNumbersMap | IconComponent;
    status?: ProgressStepBarPropStatus;
    progress?: boolean;
    content?: React.ReactNode;
    onClick?: React.EventHandler<React.MouseEvent>;
};
export declare type Line = {
    status: ProgressStepBarPropStatus;
    size: number;
};
export declare type ProgressStepBarPropOnItemClick<ITEM> = (item: ITEM, props: {
    e: React.MouseEvent;
    index: number;
}) => void;
export declare type ProgressStepBarProps<ITEM = ProgressStepBarItemDefault> = PropsWithHTMLAttributesAndRef<{
    steps: ITEM[];
    direction?: ProgressStepBarPropDirection;
    size?: ProgressStepBarPropSize;
    activeStepIndex?: number;
    onItemClick?: ProgressStepBarPropOnItemClick<ITEM>;
    getItemLabel?: ProgressStepBarPropGetItemLabel<ITEM>;
    getItemLineStatus?: ProgressStepBarPropGetItemLineStatus<ITEM>;
    getItemTooltipContent?: ProgressStepBarPropGetItemTooltipContent<ITEM>;
    getItemPoint?: ProgressStepBarPropGetItemPoint<ITEM>;
    getItemProgress?: ProgressStepBarPropGetItemProgress<ITEM>;
    getItemContent?: ProgressStepBarPropGetItemContent<ITEM>;
    getItemStatus?: ProgressStepBarPropGetItemStatus<ITEM>;
    getItemOnClick?: ProgressStepBarPropGetItemOnClick<ITEM>;
}, HTMLDivElement> & (ITEM extends {
    label: ProgressStepBarItemDefault['label'];
} ? {} : {
    getItemLabel: ProgressStepBarPropGetItemLabel<ITEM>;
});
export declare type ProgressStepBarItemProps = {
    content?: React.ReactNode;
    label?: string;
    point?: ProgressStepBarPointNumbersMap | IconComponent;
    progress?: boolean;
    status?: ProgressStepBarPropStatus | 'system';
    tooltipContent?: string;
    tooltipZIndex?: number;
    position?: ProgressStepBarPropPosition;
    direction: ProgressStepBarPropDirection;
    size: ProgressStepBarPropSize;
    onClick?: (e: React.MouseEvent) => void;
    pointRef?: React.RefObject<HTMLButtonElement>;
    className?: string;
};
export declare const cnProgressStepBar: import("@bem-react/classname").ClassNameFormatter;
export declare const defaultGetItemLabel: ProgressStepBarPropGetItemLabel<ProgressStepBarItemDefault>;
export declare const defaultGetItemTooltipContent: ProgressStepBarPropGetItemTooltipContent<ProgressStepBarItemDefault>;
export declare const defaultGetItemPoint: ProgressStepBarPropGetItemPoint<ProgressStepBarItemDefault>;
export declare const defaultGetItemLineStatus: ProgressStepBarPropGetItemLineStatus<ProgressStepBarItemDefault>;
export declare const defaultGetItemProgress: ProgressStepBarPropGetItemProgress<ProgressStepBarItemDefault>;
export declare const defaultGetItemContent: ProgressStepBarPropGetItemContent<ProgressStepBarItemDefault>;
export declare const defaultGetItemStatus: ProgressStepBarPropGetItemStatus<ProgressStepBarItemDefault>;
export declare const defaultGetItemOnClick: ProgressStepBarPropGetItemOnClick<ProgressStepBarItemDefault>;
export declare type ProgressStepBarComponent = <ITEM = ProgressStepBarItemDefault>(props: ProgressStepBarProps<ITEM>) => React.ReactElement | null;
export declare type ProgressStepBarItemComponent = (props: PropsWithHTMLAttributesAndRef<ProgressStepBarItemProps, HTMLDivElement>) => React.ReactElement | null;
export declare function withDefaultGetters<ITEM>(props: ProgressStepBarProps<ITEM>): {
    steps: ITEM[];
    direction?: "horizontal" | "vertical" | undefined;
    size?: "s" | "m" | "xs" | undefined;
    activeStepIndex?: number | undefined;
    onItemClick?: ProgressStepBarPropOnItemClick<ITEM> | undefined;
    getItemLabel?: ProgressStepBarPropGetItemLabel<ITEM> | undefined;
    getItemLineStatus?: ProgressStepBarPropGetItemLineStatus<ITEM> | undefined;
    getItemTooltipContent?: ProgressStepBarPropGetItemTooltipContent<ITEM> | undefined;
    getItemPoint?: ProgressStepBarPropGetItemPoint<ITEM> | undefined;
    getItemProgress?: ProgressStepBarPropGetItemProgress<ITEM> | undefined;
    getItemContent?: ProgressStepBarPropGetItemContent<ITEM> | undefined;
    getItemStatus?: ProgressStepBarPropGetItemStatus<ITEM> | undefined;
    getItemOnClick?: ProgressStepBarPropGetItemOnClick<ITEM> | undefined;
} & Omit<React.HTMLAttributes<HTMLDivElement>, "size" | "css" | "getItemLabel" | "getItemStatus" | "onItemClick" | "getItemOnClick" | "direction" | "getItemContent" | "steps" | "activeStepIndex" | "getItemLineStatus" | "getItemTooltipContent" | "getItemPoint" | "getItemProgress"> & React.RefAttributes<HTMLDivElement> & (ITEM extends {
    label: string | undefined;
} ? {} : {
    getItemLabel: ProgressStepBarPropGetItemLabel<ITEM>;
}) & {
    getItemLabel: ProgressStepBarPropGetItemLabel<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemLabel<ITEM>;
    getItemTooltipContent: ProgressStepBarPropGetItemTooltipContent<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemTooltipContent<ITEM>;
    getItemPoint: ProgressStepBarPropGetItemPoint<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemPoint<ITEM>;
    getItemProgress: ProgressStepBarPropGetItemProgress<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemProgress<ITEM>;
    getItemContent: ProgressStepBarPropGetItemContent<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemContent<ITEM>;
    getItemStatus: ProgressStepBarPropGetItemStatus<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemStatus<ITEM>;
    getItemLineStatus: ProgressStepBarPropGetItemLineStatus<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemLineStatus<ITEM>;
    getItemOnClick: ProgressStepBarPropGetItemOnClick<ProgressStepBarItemDefault> | ProgressStepBarPropGetItemOnClick<ITEM>;
};
export declare const getItemPosition: (index: number, lendth: number) => "start" | "center" | "end";
export declare const getLineSize: (container: React.RefObject<HTMLElement>, activeElement: React.RefObject<HTMLElement>, direction: ProgressStepBarPropDirection) => number;
export declare const calculateLines: (refs: React.RefObject<HTMLElement>[], direction: ProgressStepBarPropDirection) => number[];
export declare const validateVisibleIndex: (lenght: number, index: number | undefined) => number | undefined;
