import * as PropTypes from "prop-types"; import * as React from "react"; import Emittr from "./Emittr"; import { ScrollbarThumbProps } from "./ScrollbarThumb"; import { ScrollbarTrackProps } from "./ScrollbarTrack"; import { ElementPropsWithElementRefAndRenderer, ScrollState, TRACK_CLICK_BEHAVIOR } from "./types"; export declare type ScrollbarProps = ElementPropsWithElementRefAndRenderer & { createContext?: boolean; rtl?: boolean; momentum?: boolean; native?: boolean; mobileNative?: boolean; noScrollX?: boolean; noScrollY?: boolean; noScroll?: boolean; permanentTrackX?: boolean; permanentTrackY?: boolean; permanentTracks?: boolean; removeTracksWhenNotUsed?: boolean; removeTrackYWhenNotUsed?: boolean; removeTrackXWhenNotUsed?: boolean; minimalThumbSize?: number; maximalThumbSize?: number; minimalThumbXSize?: number; maximalThumbXSize?: number; minimalThumbYSize?: number; maximalThumbYSize?: number; scrollbarWidth?: number; fallbackScrollbarWidth?: number; scrollTop?: number; scrollLeft?: number; scrollDetectionThreshold?: number; translateContentSizesToHolder?: boolean; translateContentSizeYToHolder?: boolean; translateContentSizeXToHolder?: boolean; noDefaultStyles?: boolean; disableTracksMousewheelScrolling?: boolean; disableTrackXMousewheelScrolling?: boolean; disableTrackYMousewheelScrolling?: boolean; disableTracksWidthCompensation?: boolean; disableTrackXWidthCompensation?: boolean; disableTrackYWidthCompensation?: boolean; trackClickBehavior?: TRACK_CLICK_BEHAVIOR; wrapperProps?: ElementPropsWithElementRefAndRenderer; scrollerProps?: ElementPropsWithElementRefAndRenderer; contentProps?: ElementPropsWithElementRefAndRenderer; trackXProps?: Pick>; trackYProps?: Pick>; thumbXProps?: Pick>; thumbYProps?: Pick>; onUpdate?: (scrollValues: ScrollState, prevScrollState: ScrollState) => void; onScroll?: (scrollValues: ScrollState, prevScrollState: ScrollState) => void; onScrollStart?: (scrollValues: ScrollState) => void; onScrollStop?: (scrollValues: ScrollState) => void; }; export declare type ScrollbarState = { trackXVisible: boolean; trackYVisible: boolean; isRTL?: boolean; }; export declare type ScrollbarContextValue = { parentScrollbar: Scrollbar | null; }; export declare const ScrollbarContext: React.Context; export default class Scrollbar extends React.Component { static contextType: React.Context; static propTypes: { createContext: PropTypes.Requireable; rtl: PropTypes.Requireable; native: PropTypes.Requireable; mobileNative: PropTypes.Requireable; momentum: PropTypes.Requireable; noDefaultStyles: PropTypes.Requireable; disableTracksMousewheelScrolling: PropTypes.Requireable; disableTrackXMousewheelScrolling: PropTypes.Requireable; disableTrackYMousewheelScrolling: PropTypes.Requireable; disableTracksWidthCompensation: PropTypes.Requireable; disableTrackXWidthCompensation: PropTypes.Requireable; disableTrackYWidthCompensation: PropTypes.Requireable; minimalThumbSize: PropTypes.Requireable; maximalThumbSize: PropTypes.Requireable; minimalThumbXSize: PropTypes.Requireable; maximalThumbXSize: PropTypes.Requireable; minimalThumbYSize: PropTypes.Requireable; maximalThumbYSize: PropTypes.Requireable; noScrollX: PropTypes.Requireable; noScrollY: PropTypes.Requireable; noScroll: PropTypes.Requireable; permanentTrackX: PropTypes.Requireable; permanentTrackY: PropTypes.Requireable; permanentTracks: PropTypes.Requireable; translateContentSizesToHolder: PropTypes.Requireable; translateContentSizeYToHolder: PropTypes.Requireable; translateContentSizeXToHolder: PropTypes.Requireable; removeTracksWhenNotUsed: PropTypes.Requireable; removeTrackYWhenNotUsed: PropTypes.Requireable; removeTrackXWhenNotUsed: PropTypes.Requireable; trackClickBehavior: PropTypes.Requireable; scrollbarWidth: PropTypes.Requireable; fallbackScrollbarWidth: PropTypes.Requireable; scrollDetectionThreshold: PropTypes.Requireable; scrollTop: PropTypes.Requireable; scrollLeft: PropTypes.Requireable; className: PropTypes.Requireable; wrapperProps: PropTypes.Requireable; contentProps: PropTypes.Requireable; trackXProps: PropTypes.Requireable; trackYProps: PropTypes.Requireable; thumbXProps: PropTypes.Requireable; thumbYProps: PropTypes.Requireable; onUpdate: PropTypes.Requireable<(...args: any[]) => any>; onScroll: PropTypes.Requireable<(...args: any[]) => any>; onScrollStart: PropTypes.Requireable<(...args: any[]) => any>; onScrollStop: PropTypes.Requireable<(...args: any[]) => any>; }; static defaultProps: { momentum: boolean; minimalThumbSize: number; fallbackScrollbarWidth: number; trackClickBehavior: TRACK_CLICK_BEHAVIOR; scrollDetectionThreshold: number; wrapperProps: {}; scrollerProps: {}; contentProps: {}; trackXProps: {}; trackYProps: {}; thumbXProps: {}; thumbYProps: {}; }; /** * @description UUID identifying scrollbar instance */ readonly id: string; /** * @description Reference to the holder HTMLDivElement or null if it wasn't rendered or native property is true */ holderElement: HTMLDivElement | null; /** * @description Reference to the wrapper HTMLDivElement or null if it wasn't rendered or native property is true */ wrapperElement: HTMLDivElement | null; /** * @description Reference to the HTMLDivElement that actually has browser's scrollbars */ scrollerElement: HTMLDivElement | null; /** * @description Reference to the content HTMLDivElement that contains component's children (and has browser's scrollbars) */ contentElement: HTMLDivElement | null; /** * @description Reference to the horizontal track HTMLDivElement or null if it wasn't rendered */ trackXElement: HTMLDivElement | null; /** * @description Reference to the vertical track HTMLDivElement or null if it wasn't rendered */ trackYElement: HTMLDivElement | null; /** * @description Reference to the horizontal thumb HTMLDivElement or null if it wasn't rendered */ thumbXElement: HTMLDivElement | null; /** * @description Reference to the vertical thumb HTMLDivElement or null if it wasn't rendered */ thumbYElement: HTMLDivElement | null; readonly eventEmitter: Emittr; /** * @description Current ScrollState (cached) */ private scrollValues; private _scrollDetectionTO; constructor(props: any); scrollTop: number; scrollLeft: number; readonly scrollHeight: number; readonly scrollWidth: number; readonly clientHeight: number; readonly clientWidth: number; static calculateStyles(props: ScrollbarProps, state: ScrollbarState, scrollValues: any, scrollbarWidth: number): { holder: React.CSSProperties; wrapper: React.CSSProperties; content: React.CSSProperties; scroller: React.CSSProperties; trackX: React.CSSProperties; trackY: React.CSSProperties; thumbX: React.CSSProperties; thumbY: React.CSSProperties; }; componentDidMount(): void; componentWillUnmount(): void; componentDidUpdate(prevProps: Readonly, prevState: Readonly): void; /** * @description Get current scroll-related values.
* If force if truthy - will recalculate them instead of returning cached values. * * @return ScrollState */ getScrollState: (force?: boolean) => ScrollState; /** * @description Scroll to top border */ scrollToTop: () => this; /** * @description Scroll to left border */ scrollToLeft: () => this; /** * @description Scroll to bottom border */ scrollToBottom: () => this; /** * @description Scroll to right border */ scrollToRight: () => this; /** * @description Set the scrolls at given coordinates.
* If coordinate is undefined - current scroll value will persist. */ scrollTo: (x?: number | undefined, y?: number | undefined) => this; /** * @description Center the viewport at given coordinates.
* If coordinate is undefined - current scroll value will persist. */ centerAt: (x?: number | undefined, y?: number | undefined) => this; update: (force?: boolean) => void | ScrollState; render(): React.ReactNode; private updaterNative; private updaterCustom; private elementRefHolder; private elementRefWrapper; private elementRefScroller; private elementRefContent; private elementRefTrackX; private elementRefTrackY; private elementRefThumbX; private elementRefThumbY; private handleTrackXClick; private handleTrackYClick; private handleTrackYMouseWheel; private handleTrackXMouseWheel; private handleThumbXDrag; private handleThumbYDrag; private handleScrollerScroll; private _scrollDetection; private _scrollDetectionCallback; }