1- import { useCallback , useEffect , useRef , useState } from 'preact/hooks' ;
1+ import { useCallback , useEffect , useState } from 'preact/hooks' ;
22
3+ import { useSyncedRef } from '../../hooks/use-synced-ref' ;
34import type { TransitionComponent } from '../../types' ;
5+ import { downcastRef } from '../../util/typing' ;
46
57const Slider : TransitionComponent = ( {
68 children,
79 direction = 'in' ,
810 onTransitionEnd,
911 delay,
12+ elementRef,
1013} ) => {
1114 const visible = direction === 'in' ;
12- const containerRef = useRef < HTMLDivElement | null > ( null ) ;
15+ const containerRef = useSyncedRef ( elementRef ) ;
1316 const [ containerHeight , setContainerHeight ] = useState ( visible ? 'auto' : 0 ) ;
1417
1518 // Whether the content is currently partially or wholly visible. This is
@@ -52,7 +55,7 @@ const Slider: TransitionComponent = ({
5255
5356 setContainerHeight ( 0 ) ;
5457 }
55- } , [ containerHeight , visible ] ) ;
58+ } , [ containerHeight , containerRef , visible ] ) ;
5659
5760 const handleTransitionEnd = useCallback (
5861 ( e : TransitionEvent ) => {
@@ -72,7 +75,7 @@ const Slider: TransitionComponent = ({
7275 }
7376 onTransitionEnd ?.( direction ) ;
7477 } ,
75- [ setContainerHeight , visible , onTransitionEnd , direction ] ,
78+ [ containerRef , visible , onTransitionEnd , direction ] ,
7679 ) ;
7780
7881 const isFullyVisible = containerHeight === 'auto' ;
@@ -84,7 +87,7 @@ const Slider: TransitionComponent = ({
8487 //
8588 // @ts -ignore
8689 ontransitionend = { handleTransitionEnd }
87- ref = { containerRef }
90+ ref = { downcastRef ( containerRef ) }
8891 style = { {
8992 display : contentVisible ? '' : 'none' ,
9093 height : containerHeight ,
0 commit comments