import { type KeyEvent } from "../lib/index.js";
import { type ScrollAcceleration } from "../lib/scroll-acceleration.js";
import type { Renderable, RenderableOptions } from "../Renderable.js";
import type { MouseEvent } from "../renderer.js";
import type { RenderContext } from "../types.js";
import { BoxRenderable, type BoxOptions } from "./Box.js";
import type { VNode } from "./composition/vnode.js";
import { ScrollBarRenderable, type ScrollBarOptions, type ScrollUnit } from "./ScrollBar.js";
declare class ContentRenderable extends BoxRenderable {
    private viewport;
    private _viewportCulling;
    constructor(ctx: RenderContext, viewport: BoxRenderable, viewportCulling: boolean, options: RenderableOptions<BoxRenderable>);
    get viewportCulling(): boolean;
    set viewportCulling(value: boolean);
    protected _hasVisibleChildFilter(): boolean;
    protected _getVisibleChildren(): number[];
}
export interface ScrollBoxOptions extends BoxOptions<ScrollBoxRenderable> {
    rootOptions?: BoxOptions;
    wrapperOptions?: BoxOptions;
    viewportOptions?: BoxOptions;
    contentOptions?: BoxOptions;
    scrollbarOptions?: Omit<ScrollBarOptions, "orientation">;
    verticalScrollbarOptions?: Omit<ScrollBarOptions, "orientation">;
    horizontalScrollbarOptions?: Omit<ScrollBarOptions, "orientation">;
    stickyScroll?: boolean;
    stickyStart?: "bottom" | "top" | "left" | "right";
    scrollX?: boolean;
    scrollY?: boolean;
    scrollAcceleration?: ScrollAcceleration;
    viewportCulling?: boolean;
}
export declare class ScrollBoxRenderable extends BoxRenderable {
    static idCounter: number;
    private internalId;
    readonly wrapper: BoxRenderable;
    readonly viewport: BoxRenderable;
    readonly content: ContentRenderable;
    readonly horizontalScrollBar: ScrollBarRenderable;
    readonly verticalScrollBar: ScrollBarRenderable;
    protected _focusable: boolean;
    private selectionListener?;
    private autoScrollMouseX;
    private autoScrollMouseY;
    private readonly autoScrollThresholdVertical;
    private readonly autoScrollThresholdHorizontal;
    private readonly autoScrollSpeedSlow;
    private readonly autoScrollSpeedMedium;
    private readonly autoScrollSpeedFast;
    private isAutoScrolling;
    private cachedAutoScrollSpeed;
    private autoScrollAccumulatorX;
    private autoScrollAccumulatorY;
    private scrollAccumulatorX;
    private scrollAccumulatorY;
    private _stickyScroll;
    private _stickyScrollTop;
    private _stickyScrollBottom;
    private _stickyScrollLeft;
    private _stickyScrollRight;
    private _stickyStart?;
    private _hasManualScroll;
    private _isApplyingStickyScroll;
    private scrollAccel;
    get stickyScroll(): boolean;
    set stickyScroll(value: boolean);
    get stickyStart(): "bottom" | "top" | "left" | "right" | undefined;
    set stickyStart(value: "bottom" | "top" | "left" | "right" | undefined);
    get scrollTop(): number;
    set scrollTop(value: number);
    get scrollLeft(): number;
    set scrollLeft(value: number);
    get scrollWidth(): number;
    get scrollHeight(): number;
    private updateStickyState;
    private syncManualScrollState;
    private applyStickyStart;
    constructor(ctx: RenderContext, options: ScrollBoxOptions);
    protected onUpdate(deltaTime: number): void;
    scrollBy(delta: number | {
        x: number;
        y: number;
    }, unit?: ScrollUnit): void;
    scrollChildIntoView(childId: string): void;
    scrollTo(position: number | {
        x: number;
        y: number;
    }): void;
    private isAtStickyPosition;
    private isAtStickyReengagePoint;
    add(obj: Renderable | VNode<any, any[]>, index?: number): number;
    insertBefore(obj: Renderable | VNode<any, any[]> | unknown, anchor?: Renderable | unknown): number;
    remove(id: string): void;
    getChildren(): Renderable[];
    protected onMouseEvent(event: MouseEvent): void;
    handleKeyPress(key: KeyEvent): boolean;
    private resetScrollAccumulators;
    startAutoScroll(mouseX: number, mouseY: number): void;
    updateAutoScroll(mouseX: number, mouseY: number): void;
    stopAutoScroll(): void;
    private hasOtherLiveReasons;
    private handleAutoScroll;
    private getAutoScrollDirectionX;
    private getAutoScrollDirectionY;
    private getAutoScrollSpeed;
    private recalculateBarProps;
    set padding(value: number | `${number}%` | null | undefined);
    set paddingX(value: number | `${number}%` | null | undefined);
    set paddingY(value: number | `${number}%` | null | undefined);
    set paddingTop(value: number | `${number}%` | null | undefined);
    set paddingRight(value: number | `${number}%` | null | undefined);
    set paddingBottom(value: number | `${number}%` | null | undefined);
    set paddingLeft(value: number | `${number}%` | null | undefined);
    set rootOptions(options: ScrollBoxOptions["rootOptions"]);
    set wrapperOptions(options: ScrollBoxOptions["wrapperOptions"]);
    set viewportOptions(options: ScrollBoxOptions["viewportOptions"]);
    set contentOptions(options: ScrollBoxOptions["contentOptions"]);
    set scrollbarOptions(options: ScrollBoxOptions["scrollbarOptions"]);
    set verticalScrollbarOptions(options: ScrollBoxOptions["verticalScrollbarOptions"]);
    set horizontalScrollbarOptions(options: ScrollBoxOptions["horizontalScrollbarOptions"]);
    get scrollAcceleration(): ScrollAcceleration;
    set scrollAcceleration(value: ScrollAcceleration);
    get viewportCulling(): boolean;
    set viewportCulling(value: boolean);
    protected destroySelf(): void;
}
export {};
