import { EventEmitter } from '../../stencil-public-runtime';
import type { DimensionCols, DimensionType, ElementScroll, ScrollCoordinateEvent, ViewPortResizeEvent, ViewPortScrollEvent } from "../../types/index";
type Delta = 'deltaX' | 'deltaY';
type LocalScrollEvent = {
    preventDefault(): void;
} & {
    [x in Delta]: number;
};
/**
 * Viewport scroll component for RevoGrid
 * @slot - content
 * @slot header - header
 * @slot footer - footer
 */
export declare class RevogrViewportScroll implements ElementScroll {
    /**
     * Enable row header
     */
    readonly rowHeader: boolean;
    /**
     * Width of inner content
     */
    contentWidth: number;
    /**
     * Height of inner content
     */
    contentHeight: number;
    colType: DimensionCols | 'rowHeaders';
    noHorizontalScrollTransfer: boolean;
    /**
     * Before scroll event
     */
    scrollViewport: EventEmitter<ViewPortScrollEvent>;
    /**
     * Viewport resize
     */
    resizeViewport: EventEmitter<ViewPortResizeEvent>;
    /**
     * Triggered on scroll change, can be used to get information about scroll visibility
     */
    scrollchange: EventEmitter<{
        type: DimensionType;
        hasScroll: boolean;
    }>;
    /**
     * Silently scroll to coordinate
     * Made to align negative coordinates for mobile devices
     */
    silentScroll: EventEmitter<ViewPortScrollEvent>;
    horizontalScroll: HTMLElement;
    private verticalScroll?;
    private header?;
    private footer?;
    /**
     * Static functions to bind wheel change
     */
    private horizontalMouseWheel;
    private verticalMouseWheel;
    private resizeService?;
    private localScrollService;
    private localScrollTimer;
    setScroll(e: ViewPortScrollEvent): Promise<void>;
    /**
     * update on delta in case we don't know existing position or external change
     * @param e
     */
    changeScroll(e: ViewPortScrollEvent, silent?: boolean): Promise<ViewPortScrollEvent | undefined>;
    /**
     * Dispatch this event to trigger vertical mouse wheel from plugins
     */
    mousewheelVertical({ detail: e, }: CustomEvent<LocalScrollEvent>): void;
    /**
     * Dispatch this event to trigger horizontal mouse wheel from plugins
     */
    mousewheelHorizontal({ detail: e, }: CustomEvent<LocalScrollEvent>): void;
    /**
     * Allows to use outside listener
     */
    scrollApply({ detail: { type, coordinate }, }: CustomEvent<ScrollCoordinateEvent>): void;
    connectedCallback(): void;
    componentDidLoad(): void;
    /**
     * Check if scroll present or not per type
     * Trigger this method on inner content size change or on outer element size change
     * If inner content bigger then outer size then scroll is present and mousewheel binding required
     * @param type - dimension type 'rgRow/y' or 'rgCol/x'
     * @param size - outer content size
     * @param innerContentSize - inner content size
     */
    setScrollVisibility(type: DimensionType, size: number, innerContentSize: number): void;
    disconnectedCallback(): void;
    componentDidRender(): Promise<void>;
    render(): any;
    /**
     * Extra layer for scroll event monitoring, where MouseWheel event is not passing
     * We need to trigger scroll event in case there is no mousewheel event
     */
    applyScroll(type: DimensionType, e: UIEvent): Promise<void>;
    /**
     * Applies change on scroll event only if mousewheel event happened some time ago
     */
    private applyOnScroll;
    /**
     * On vertical mousewheel event
     * @param type
     * @param delta
     * @param e
     */
    private onVerticalMouseWheel;
    /**
     * On horizontal mousewheel event
     * @param type
     * @param delta
     * @param e
     */
    private onHorizontalMouseWheel;
}
export {};
