@@ -15,35 +15,32 @@ export type HydrationStrategy = (
15
15
forEachElement : ( cb : ( el : Element ) => any ) => void ,
16
16
) => ( ( ) => void ) | void
17
17
18
- export type HydrationStrategyFactory < Options = any > = (
18
+ export type HydrationStrategyFactory < Options > = (
19
19
options ?: Options ,
20
20
) => HydrationStrategy
21
21
22
- export const hydrateOnIdle : HydrationStrategyFactory = ( ) => hydrate => {
23
- const id = requestIdleCallback ( hydrate )
24
- return ( ) => cancelIdleCallback ( id )
25
- }
26
-
27
- export const hydrateOnVisible : HydrationStrategyFactory < string | number > =
28
- ( margin = 0 ) =>
29
- ( hydrate , forEach ) => {
30
- const ob = new IntersectionObserver (
31
- entries => {
32
- for ( const e of entries ) {
33
- if ( ! e . isIntersecting ) continue
34
- ob . disconnect ( )
35
- hydrate ( )
36
- break
37
- }
38
- } ,
39
- {
40
- rootMargin : isString ( margin ) ? margin : margin + 'px' ,
41
- } ,
42
- )
43
- forEach ( el => ob . observe ( el ) )
44
- return ( ) => ob . disconnect ( )
22
+ export const hydrateOnIdle : HydrationStrategyFactory < number > =
23
+ ( timeout = 10000 ) =>
24
+ hydrate => {
25
+ const id = requestIdleCallback ( hydrate , { timeout } )
26
+ return ( ) => cancelIdleCallback ( id )
45
27
}
46
28
29
+ export const hydrateOnVisible : HydrationStrategyFactory <
30
+ IntersectionObserverInit
31
+ > = opts => ( hydrate , forEach ) => {
32
+ const ob = new IntersectionObserver ( entries => {
33
+ for ( const e of entries ) {
34
+ if ( ! e . isIntersecting ) continue
35
+ ob . disconnect ( )
36
+ hydrate ( )
37
+ break
38
+ }
39
+ } , opts )
40
+ forEach ( el => ob . observe ( el ) )
41
+ return ( ) => ob . disconnect ( )
42
+ }
43
+
47
44
export const hydrateOnMediaQuery : HydrationStrategyFactory < string > =
48
45
query => hydrate => {
49
46
if ( query ) {
@@ -58,7 +55,7 @@ export const hydrateOnMediaQuery: HydrationStrategyFactory<string> =
58
55
}
59
56
60
57
export const hydrateOnInteraction : HydrationStrategyFactory <
61
- string | string [ ]
58
+ keyof HTMLElementEventMap | Array < keyof HTMLElementEventMap >
62
59
> =
63
60
( interactions = [ ] ) =>
64
61
( hydrate , forEach ) => {
0 commit comments