import React from 'react';

interface Indicator {
    activate?: React.ReactNode;
    deactivate?: React.ReactNode;
    release?: React.ReactNode;
    finish?: React.ReactNode;
}
interface PropsType {
    getScrollContainer: () => React.ReactNode;
    direction: 'down' | 'up' | 'both' | string;
    refreshing?: boolean;
    distanceToRefresh: number;
    onRefresh: () => void;
    onFooterRefresh?: () => void;
    indicator: Indicator;
    footerIndicator?: Indicator;
    indicatorHeight: number;
    footerIndicatorHeight?: number;
    prefixCls?: string;
    className?: string;
    style?: React.CSSProperties;
    damping?: number;
    scale?: number;
}

declare class PullToRefresh extends React.Component<PropsType, any> {
    static defaultProps: PropsType;
    state: {
        currSt: string;
        dragOnEdge: boolean;
    };
    containerRef: any;
    contentRef: any;
    _to: any;
    _ScreenY: any;
    _startScreenY: any;
    _startScreenX: any;
    _lastScreenY: any;
    _timer: any;
    _isMounted: boolean;
    shouldUpdateChildren: boolean;
    direction: string;
    currentMoveDirection: string;
    indicatorHeight: number;
    shouldComponentUpdate(nextProps: any): boolean;
    componentDidUpdate(prevProps: any): void;
    componentDidMount(): void;
    componentWillUnmount(): void;
    triggerPullToRefresh: () => void;
    init: (ele: any) => void;
    destroy: (ele: any) => void;
    onTouchStart: (_ele: any, e: any) => void;
    isEdge: (ele: any, direction: string) => boolean | undefined;
    damping: (dy: number) => number;
    onTouchMove: (ele: any, e: any) => void;
    onTouchEnd: () => void;
    reset: () => void;
    setContentStyle: (ty: number) => void;
    render(): JSX.Element;
}

export { PullToRefresh as default };
