import React from 'react';
import type { CommonProps } from '../../internal/CommonWrapper';
import type { Nullable } from '../../typings/utility-types';
import type { TGetRootNode } from '../../lib/rootNode';
import type { ScrollAxis } from './ScrollBar';
export type ScrollContainerScrollStateX = 'left' | 'scroll' | 'right';
export type ScrollContainerScrollStateY = 'top' | 'scroll' | 'bottom';
export type ScrollContainerScrollState = ScrollContainerScrollStateY;
export type ScrollBehaviour = 'auto' | 'smooth';
type OffsetCSSPropsY = 'top' | 'right' | 'bottom';
type OffsetCSSPropsX = 'right' | 'bottom' | 'left';
export interface ScrollContainerProps extends CommonProps {
    /** Инвертирует цвет скроллбара.
     * @default false */
    invert?: boolean;
    /** Задает максимальную высоту. */
    maxHeight?: React.CSSProperties['maxHeight'];
    /** Задает максимальную ширину. */
    maxWidth?: React.CSSProperties['maxWidth'];
    /** Отключает скролл окна, когда меню открыто.
     * @default false */
    preventWindowScroll?: boolean;
    /** Задает поведение скролла. (https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior)
     * @default 'auto' */
    scrollBehaviour?: ScrollBehaviour;
    /** Задает функцию, которая вызывается при скроле по горизонтали. */
    onScrollStateChangeX?: (scrollState: ScrollContainerScrollStateX) => void;
    /** Задает функцию, которая вызывается при скроле по вертикали. */
    onScrollStateChangeY?: (scrollState: ScrollContainerScrollStateY) => void;
    /** Задает функцию, которая вызывается при скроле.
     * @deprecated use onScroll */
    onScrollStateChange?: (scrollYState: ScrollContainerScrollState) => void;
    /** Задает функцию, которая вызывается при скроле. */
    onScroll?: (e: React.UIEvent<HTMLDivElement>) => void;
    /** Отключает кастомный скролл. */
    disabled?: boolean;
    /** Задает смещение вертикального скроллбара. */
    offsetY?: Partial<Record<OffsetCSSPropsY, React.CSSProperties[OffsetCSSPropsY]>>;
    /** Задает смещение горизонтального скроллбара. */
    offsetX?: Partial<Record<OffsetCSSPropsX, React.CSSProperties[OffsetCSSPropsX]>>;
    /** Определяет, нужно ли показывать скроллбар. */
    showScrollBar?: 'always' | 'scroll' | 'hover' | 'never';
    /** Устанавливает задержку в миллисекундах перед скрытием скроллбара.
     * Работает только при hideScrollBar = true или showScrollBar = 'scroll' | 'hover'. */
    hideScrollBarDelay?: number;
    /** Отключает анимацию. */
    disableAnimations?: boolean;
    scrollRef?: React.Ref<HTMLDivElement | null>;
}
export declare const ScrollContainerDataTids: {
    readonly root: "ScrollContainer__root";
    readonly inner: "ScrollContainer__inner";
};
type DefaultProps = Required<Pick<ScrollContainerProps, 'invert' | 'scrollBehaviour' | 'preventWindowScroll' | 'disableAnimations' | 'hideScrollBarDelay' | 'showScrollBar'>>;
interface ScrollContainerState {
    isScrollBarXVisible: boolean;
    isScrollBarYVisible: boolean;
    isHovered: boolean;
}
/**
 * `ScrollContainer` используется для создания контейнера с кастомными полосами прокрутки, который обеспечивает прокрутку содержимого по горизонтали или вертикали.
 */
export declare class ScrollContainer extends React.Component<ScrollContainerProps, ScrollContainerState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    inner: Nullable<HTMLElement>;
    static defaultProps: DefaultProps;
    private getProps;
    private scrollX;
    private scrollY;
    getRootNode: TGetRootNode;
    private setRootNode;
    private initialIsScrollBarVisible;
    state: ScrollContainerState;
    componentDidMount(): void;
    componentDidUpdate(prevProps: ScrollContainerProps): void;
    render: () => string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
    /**
     * @public
     * @param {Element} element
     */
    scrollTo(element: Nullable<HTMLElement>): void;
    /**
     * @public
     */
    scrollToTop(): void;
    /**
     * @public
     */
    scrollToBottom(): void;
    /**
     * @public
     */
    scrollToLeft(): void;
    /**
     * @public
     */
    scrollToRight(): void;
    hasScrollBar(axis: ScrollAxis): boolean;
    private renderScrollbar;
    private handleScrollStateChange;
    private handleScroll;
    private refScrollBarY;
    private refScrollBarX;
    private refInner;
    private handleNativeScroll;
    private showScrollBarOnMouseWheel;
    private readonly hideScrollBar;
    private handleInnerScrollWheel;
    private handleMouseMove;
    private handleMouseLeave;
    private updateInnerElement;
}
export {};
