11import { scroll as motionScroll } from 'motion' ;
22import type { Action } from 'svelte/action' ;
33
4- export type ScrollParams = Parameters < typeof motionScroll > ;
4+ type ScrollParams = Parameters < typeof motionScroll > ;
55
6+ /**
7+ * Type for typing the parameters of the `scroll` action.
8+ *
9+ * [👍 Read Best Practices](https://rootenginear.github.io/svelte-action-motionone/#best-practices)
10+ * @example
11+ * const scrollParams = [onScroll, options] satisfies ScrollActionParams
12+ * // <div use:scroll={scrollParams} />
13+ */
614export type ScrollActionParams = ScrollParams | ( ( node : HTMLElement ) => ScrollParams ) ;
715
816const createScroll = ( node : HTMLElement ) => ( params : ScrollActionParams ) => {
917 const [ onScroll , options ] = typeof params === 'function' ? params ( node ) : params ;
1018 return motionScroll ( onScroll , options ) ;
1119} ;
1220
21+ /**
22+ * Motion's `scroll(onScroll, options)` equivalent.
23+ * - [📑 Read Documentation](https://rootenginear.github.io/svelte-action-motionone/#use-scroll)
24+ * - [👍 Read Best Practices](https://rootenginear.github.io/svelte-action-motionone/#best-practices)
25+ * @example
26+ * <div use:scroll={[onScroll, options]} />
27+ * @example
28+ * <div use:scroll={(node) => [onScroll, options]} />
29+ */
1330export const scroll : Action < HTMLElement , ScrollActionParams > = ( node , params ) => {
1431 const instanceScroll = createScroll ( node ) ;
1532 let stop = instanceScroll ( params ) ;
@@ -33,6 +50,18 @@ const createContainerScroll = (node: HTMLElement) => (params: ScrollActionParams
3350 } ) ;
3451} ;
3552
53+ /**
54+ * Watch the scroll of that element. It's a shortcut for:
55+ * ```svelte
56+ * <div use:scroll={(node) => [..., { container: node }]} />
57+ * ```
58+ * - [📑 Read Documentation](https://rootenginear.github.io/svelte-action-motionone/#use-container-scroll)
59+ * - [👍 Read Best Practices](https://rootenginear.github.io/svelte-action-motionone/#best-practices)
60+ * @example
61+ * <div use:containerScroll={[onScroll, options]} />
62+ * @example
63+ * <div use:containerScroll={(node) => [onScroll, options]} />
64+ */
3665export const containerScroll : Action < HTMLElement , ScrollActionParams > = ( node , params ) => {
3766 const instanceScroll = createContainerScroll ( node ) ;
3867 let stop = instanceScroll ( params ) ;
@@ -56,6 +85,18 @@ const createScrollInView = (node: HTMLElement) => (params: ScrollActionParams) =
5685 } ) ;
5786} ;
5887
88+ /**
89+ * Watch the progress of that element in viewport. It's a shortcut for:
90+ * ```svelte
91+ * <div use:scroll={(node) => [..., { target: node }]} />
92+ * ```
93+ * - [📑 Read Documentation](https://rootenginear.github.io/svelte-action-motionone/#use-scroll-in-view)
94+ * - [👍 Read Best Practices](https://rootenginear.github.io/svelte-action-motionone/#best-practices)
95+ * @example
96+ * <div use:scrollInView={[onScroll, options]} />
97+ * @example
98+ * <div use:scrollInView={(node) => [onScroll, options]} />
99+ */
59100export const scrollInView : Action < HTMLElement , ScrollActionParams > = ( node , params ) => {
60101 const instanceScroll = createScrollInView ( node ) ;
61102 let stop = instanceScroll ( params ) ;
0 commit comments