import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import { ResizeSensor } from 'css-element-queries';
import PageHeader, { HeaderProps } from './components/Header';
import { SectionProps } from './components/Section';
import { ContentProps, PageProps, TailProps, FixedContentProps, FixedFooterProps } from './Page.types';
type DefaultProps = Required<Pick<PageProps, 'minWidth' | 'maxWidth' | 'scrollProps'>>;
type Props = PageProps & DefaultProps;
type State = {
    headerContainerHeight: number;
    headerWrapperHeight: number;
    tailHeight: number;
    footerHeight: number;
    pageHeight?: number;
    windowHeight?: number;
    minimized: boolean;
};
type HeaderElement = React.ReactElement<HeaderProps>;
type SectionElement = React.ReactElement<SectionProps>;
type ContentElement = React.ReactElement<ContentProps>;
type FixedContentElement = React.ReactElement<FixedContentProps>;
type TailElement = React.ReactElement<TailProps>;
type FixedFooterElement = React.ReactElement<FixedFooterProps>;
type ChildrenObject = {
    PageHeader?: HeaderElement;
    Section?: SectionElement;
    PageContent?: ContentElement;
    PageFixedContent?: FixedContentElement;
    PageTail?: TailElement;
    FixedFooter?: FixedFooterElement;
};
declare class Page extends PureComponent<Props, State> {
    static displayName: string;
    static defaultProps: DefaultProps;
    static propTypes: {
        dataHook: PropTypes.Requireable<string>;
        backgroundImageUrl: PropTypes.Requireable<string>;
        maxWidth: PropTypes.Requireable<number>;
        minWidth: PropTypes.Requireable<number>;
        horizontalScroll: PropTypes.Requireable<boolean>;
        height: PropTypes.Requireable<string>;
        sidePadding: PropTypes.Requireable<number>;
        className: PropTypes.Requireable<string>;
        gradientClassName: PropTypes.Requireable<string>;
        scrollableContentRef: PropTypes.Requireable<(...args: any[]) => any>;
        scrollProps: PropTypes.Requireable<PropTypes.InferProps<{
            onScrollAreaChanged: React.Validator<((scrollChangedData: import("../common/ScrollableContainer").ScrollAreaData) => void) | null | undefined> | undefined;
            onScrollChanged: React.Validator<((target: HTMLElement) => void) | null | undefined> | undefined;
        }>>;
        children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        zIndex: PropTypes.Requireable<number>;
    };
    static Header: typeof PageHeader;
    static Section: {
        ({ dataHook, showDivider, title, subtitle, actionsBar, className, }: SectionProps): React.JSX.Element;
        displayName: string;
        propTypes: {
            dataHook: PropTypes.Requireable<string>;
            className: PropTypes.Requireable<string>;
            title: PropTypes.Requireable<PropTypes.ReactNodeLike>;
            subtitle: PropTypes.Requireable<PropTypes.ReactNodeLike>;
            actionsBar: PropTypes.Requireable<PropTypes.ReactNodeLike>;
            showDivider: PropTypes.Requireable<boolean>;
        };
    };
    static Content: {
        ({ children, stickyStyle }: ContentProps): any;
        displayName: string;
        propTypes: {
            children: PropTypes.Validator<NonNullable<PropTypes.ReactNodeLike>>;
            className: PropTypes.Requireable<string>;
            fullScreen: PropTypes.Requireable<boolean>;
        };
    };
    static FixedContent: {
        (props: {
            children: React.ReactNode;
        }): React.ReactNode;
        displayName: string;
        propTypes: {
            children: PropTypes.Validator<PropTypes.ReactElementLike>;
        };
    };
    static Tail: {
        ({ children, minimized }: TailProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
        displayName: string;
        propTypes: {
            children: PropTypes.Validator<PropTypes.ReactElementLike>;
            minimized: PropTypes.Requireable<boolean>;
        };
    };
    static FixedFooter: {
        ({ children }: FixedContentProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
        displayName: string;
        propTypes: {
            children: PropTypes.Validator<PropTypes.ReactElementLike>;
        };
    };
    static Sticky: {
        ({ children, className, style, ...props }: import("./Page.types").StickyProps): React.JSX.Element;
        displayName: string;
        propTypes: {
            children: PropTypes.Validator<PropTypes.ReactElementLike>;
            style: PropTypes.Requireable<object>;
        };
    };
    static Footer: {
        ({ divider, className, children, dataHook, ...props }: import("./components/Footer").FooterProps): React.JSX.Element;
        displayName: string;
        propTypes: {
            children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
            dataHook: PropTypes.Requireable<string>;
            className: PropTypes.Requireable<string>;
            divider: PropTypes.Requireable<boolean>;
            showDivider: PropTypes.Requireable<boolean>;
        };
        Start: typeof import("./components/Footer/components/Start/Start").default;
        Center: typeof import("./components/Footer/components/Center/Center").default;
        End: typeof import("./components/Footer/components/End/End").default;
    };
    scrollableContainerRef: React.RefObject<HTMLDivElement>;
    headerWrapperRef: HTMLDivElement | null;
    headerContainerRef: HTMLDivElement | null;
    pageHeaderTailRef: HTMLDivElement | null;
    pageRef: HTMLDivElement | null;
    footerWrapperRef: HTMLDivElement | null;
    pageScrollContextValue: {
        scrollableContentRef: React.RefObject<HTMLDivElement>;
    };
    contentResizeListener: ResizeSensor | undefined;
    timerId: NodeJS.Timeout | undefined;
    constructor(props: Props);
    componentDidMount(): void;
    componentDidUpdate(): void;
    componentWillUnmount(): void;
    _getNamedChildren(): ChildrenObject;
    _calculateComponentsHeights(): void;
    _getScrollContainer(): HTMLDivElement | null;
    _getMinimizedHeaderWrapperHeight(): number;
    _getMinimizationDiff(): number | null;
    _handleScroll(e: HTMLElement): void;
    _handleWidthResize(): void;
    _handleWindowResize(): void;
    _safeGetChildren(element?: ContentElement): string | number | true | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode>;
    _getPageDimensionsStyle(): React.CSSProperties | undefined;
    _hasBackgroundImage(): boolean;
    _hasGradientClassName(): boolean;
    _renderContentHorizontalLayout(props: React.HTMLAttributes<HTMLDivElement> & {
        horizontalScroll?: boolean;
    }): React.JSX.Element;
    _renderHeader(): React.JSX.Element | undefined;
    _renderHeaderContainer(): React.JSX.Element;
    _renderScrollableContainer(): React.JSX.Element;
    _hasTail(): boolean;
    _hasHeader(): boolean;
    _renderScrollableBackground(): React.JSX.Element | null;
    _renderTail(): React.JSX.Element | undefined;
    _renderContentContainer(): React.JSX.Element;
    _renderFixedFooter: () => React.JSX.Element | null;
    render(): React.JSX.Element;
    /**
     * Scrolls the page to a particular set of coordinates
     * @param {ScrollToOptions} scrollTo { left: number, top: number, behavior: 'smooth' | 'auto' }
     */
    scrollTo(scrollTo?: ScrollToOptions): void;
}
export default Page;
//# sourceMappingURL=Page.d.ts.map