123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /** @public */
- export declare const compute: (
- target: Element,
- options: Options
- ) => ScrollAction[]
- /** @public */
- export declare interface Options {
- /**
- * Control the logical scroll position on the y-axis. The spec states that the `block` direction is related to the [writing-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode), but this is not implemented yet in this library.
- * This means that `block: 'start'` aligns to the top edge and `block: 'end'` to the bottom.
- * @defaultValue 'center'
- */
- block?: ScrollLogicalPosition
- /**
- * Like `block` this is affected by the [writing-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode). In left-to-right pages `inline: 'start'` will align to the left edge. In right-to-left it should be flipped. This will be supported in a future release.
- * @defaultValue 'nearest'
- */
- inline?: ScrollLogicalPosition
- /**
- * This is a proposed addition to the spec that you can track here: https://github.com/w3c/csswg-drafts/pull/5677
- *
- * This library will be updated to reflect any changes to the spec and will provide a migration path.
- * To be backwards compatible with `Element.scrollIntoViewIfNeeded` if something is not 100% visible it will count as "needs scrolling". If you need a different visibility ratio your best option would be to implement an [Intersection Observer](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API).
- * @defaultValue 'always'
- */
- scrollMode?: ScrollMode
- /**
- * By default there is no boundary. All the parent elements of your target is checked until it reaches the viewport ([`document.scrollingElement`](https://developer.mozilla.org/en-US/docs/Web/API/document/scrollingElement)) when calculating layout and what to scroll.
- * By passing a boundary you can short-circuit this loop depending on your needs:
- *
- * - Prevent the browser window from scrolling.
- * - Scroll elements into view in a list, without scrolling container elements.
- *
- * You can also pass a function to do more dynamic checks to override the scroll scoping:
- *
- * ```js
- * let actions = compute(target, {
- * boundary: (parent) => {
- * // By default `overflow: hidden` elements are allowed, only `overflow: visible | clip` is skipped as
- * // this is required by the CSSOM spec
- * if (getComputedStyle(parent)['overflow'] === 'hidden') {
- * return false
- * }
- * return true
- * },
- * })
- * ```
- * @defaultValue null
- */
- boundary?: Element | ((parent: Element) => boolean) | null
- /**
- * New option that skips auto-scrolling all nodes with overflow: hidden set
- * See FF implementation: https://hg.mozilla.org/integration/fx-team/rev/c48c3ec05012#l7.18
- * @defaultValue false
- * @public
- */
- skipOverflowHiddenElements?: boolean
- }
- /** @public */
- export declare interface ScrollAction {
- el: Element
- top: number
- left: number
- }
- /**
- * This new option is tracked in this PR, which is the most likely candidate at the time: https://github.com/w3c/csswg-drafts/pull/1805
- * @public
- */
- export declare type ScrollMode = 'always' | 'if-needed'
- export {}
|