/// <reference types="@rbxts/types" />
/// <reference types="roact" />
import Roact from "@rbxts/roact";
import { WidgetAxisPadding, WidgetPadding } from "./Padding";
interface ScrollViewEvents {
    ContentSizeChanged?: (size: Vector2, view: ScrollView<never>) => void;
    CanvasPositionChanged?: (position: Vector2, view: ScrollView<never>) => void;
}
export declare type InferEnumNames<T> = T extends {
    EnumType: Enum.EnumType<infer A>;
} ? A["Name"] : never;
interface ScrollViewProps extends ScrollViewEvents {
    Size?: UDim2;
    Position?: UDim2;
    Bordered?: boolean;
    Style?: "NoButtons" | "ButtonsOnBar" | "Buttons";
    Padding?: WidgetPadding;
    ViewRef?: (view: ScrollView<never>) => void;
    AutoScrollToEnd?: boolean;
    SortOrder?: Enum.SortOrder | Enum.SortOrder["Name"];
    /**
     * Enables GridLayout mode
     *
     * Note: Will require a `ItemSize` prop.
     */
    GridLayout?: boolean;
    /**
     * Percentage scroll for the auto scroll feature
     */
    AutoScrollToEndThreshold?: number;
}
interface GridContent {
    GridLayout: true;
    ItemPadding?: WidgetAxisPadding;
    ItemSize: UDim2;
}
interface ListContent {
    ItemPadding?: number | UDim;
    ItemAlignment?: Enum.VerticalAlignment | InferEnumNames<Enum.VerticalAlignment>;
}
interface ScrollViewState {
    size: Vector2;
    barScale: number;
    barPos: number;
    loaded: boolean;
    barShown: boolean;
}
declare type ScrollViewInfer<T> = T extends {
    GridLayout: true;
} ? ScrollViewProps & GridContent : ScrollViewProps & ListContent;
export declare type ScrollViewLike = ScrollView<ScrollViewProps>;
export declare type GridScrollViewProps = ScrollViewProps & GridContent;
export default class ScrollView<T extends ScrollViewProps> extends Roact.Component<ScrollViewInfer<T>, ScrollViewState> {
    private scrollFrame;
    private maid;
    private scrollListLayout;
    /** weird hack for AutoScrollToEnd with frames that start not scrollable */
    private initScrollToBottom;
    constructor(props: ScrollViewInfer<T>);
    invokeUpdate: () => void;
    canvasPositionUpdated: () => void;
    absoluteContentSizeChanged: () => void;
    didMount(): void;
    willUnmount(): void;
    renderBar(): Roact.Element | undefined;
    scrollToPositionY(position: number): void;
    scrollToEnd(): void;
    getScrollFrame(): ScrollingFrame;
    renderContentHandler(): Roact.Element;
    render(): Roact.Element;
}
export {};
