/** * Brings `anchor` to the top of its scroll container with the browser's own kind of movement — * eased in and out, its length set by the distance — and keeps it there while the layout beneath * is still growing, so a drawer sliding open under a row carries the page with it instead of * opening out of sight below the fold. * * Why not `scrollIntoView({ behavior: 'smooth' })`: it fixes its destination when it is called, * and a page that is still growing cannot yet scroll that far, so the row stops short and the * drawer opens where the reader cannot see it. It also scrolls `overflow: hidden` ancestors * internally, which shifts the content of a container that is animating its height. This eases * the scroll position itself, re-reads the target and the scroll range on every frame, and keeps * following the range for `followMs` — how long the layout beneath takes to settle — so the page * and the drawer land together. * * Honours the anchor's `scroll-margin-top` and each container's `scroll-padding-top` (a host whose * fixed header covers the top of the page sets the latter on its scroller, as it would for * `scrollIntoView`), lands at once under reduced motion, and yields to the reader: a wheel, touch * or key cancels it. Returns a function that stops it early. */ export declare const revealBelow: (anchor: Element, followMs: number) => (() => void); /** * How long a scroll of `distance` pixels takes: the square-root law the browser uses for its own * smooth scrolls, so a short hop is brief and a long journey is long without being slow, held * between a floor that keeps a small nudge gentle and a ceiling that keeps a page-length one brisk. */ export declare const scrollDuration: (distance: number) => number;