/*!--------------------------------------------------------------------------------------------- * Copyright (c) StackBlitz. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ export interface StickToBottomState { scrollTop: number; lastScrollTop?: number; ignoreScrollToTop?: number; targetScrollTop: number; calculatedTargetScrollTop: number; scrollDifference: number; resizeDifference: number; animation?: { behavior: "instant" | Required; ignoreEscapes: boolean; promise: Promise; }; lastTick?: number; velocity: number; accumulated: number; escapedFromLock: boolean; isAtBottom: boolean; isNearBottom: boolean; resizeObserver?: ResizeObserver; } declare const DEFAULT_SPRING_ANIMATION: { /** * A value from 0 to 1, on how much to damp the animation. * 0 means no damping, 1 means full damping. * * @default 0.7 */ damping: number; /** * The stiffness of how fast/slow the animation gets up to speed. * * @default 0.05 */ stiffness: number; /** * The inertial mass associated with the animation. * Higher numbers make the animation slower. * * @default 1.25 */ mass: number; }; export interface SpringAnimation extends Partial { } export type Animation = ScrollBehavior | SpringAnimation; export interface ScrollElements { scrollElement: HTMLElement; contentElement: HTMLElement; } export type GetTargetScrollTop = (targetScrollTop: number, context: ScrollElements) => number; export interface StickToBottomOptions extends SpringAnimation { resize?: Animation; initial?: Animation | boolean; targetScrollTop?: GetTargetScrollTop; } export type ScrollToBottomOptions = ScrollBehavior | { animation?: Animation; /** * Whether to wait for any existing scrolls to finish before * performing this one. Or if a millisecond is passed, * it will wait for that duration before performing the scroll. * * @default false */ wait?: boolean | number; /** * Whether to prevent the user from escaping the scroll, * by scrolling up with their mouse. */ ignoreEscapes?: boolean; /** * Only scroll to the bottom if we're already at the bottom. * * @default false */ preserveScrollPosition?: boolean; /** * The extra duration in ms that this scroll event should persist for. * (in addition to the time that it takes to get to the bottom) * * Not to be confused with the duration of the animation - * for that you should adjust the animation option. * * @default 0 */ duration?: number | Promise; }; export type ScrollToBottom = (scrollOptions?: ScrollToBottomOptions) => Promise | boolean; export type StopScroll = () => void; export declare const useStickToBottom: (options?: StickToBottomOptions) => StickToBottomInstance; export interface StickToBottomInstance { contentRef: React.MutableRefObject & React.RefCallback; scrollRef: React.MutableRefObject & React.RefCallback; scrollToBottom: ScrollToBottom; stopScroll: StopScroll; isAtBottom: boolean; isNearBottom: boolean; escapedFromLock: boolean; state: StickToBottomState; } export {};