@@ -74,24 +74,13 @@ export const FloatingPanelProvider = ({
7474 </ FloatingPanelContext . Provider >
7575) ;
7676
77- const useLogic = ( open ?: boolean , onOpenChange ?: ( isOpen : boolean ) => void ) => {
78- const { container : containerRef } = useContext ( FloatingPanelContext ) ;
79- const [ isOpen , setIsOpen ] = useState ( Boolean ( open ) ) ;
80- const [ triggerRef , sideOffset ] = useSideOffset ( { isOpen, containerRef } ) ;
81- const handleOpenChange = ( open : boolean ) => {
82- setIsOpen ( open ) ;
83- onOpenChange ?.( open ) ;
84- } ;
85- return { isOpen, handleOpenChange, triggerRef, sideOffset } ;
86- } ;
87-
8877// @todo add support for positioning next to the left panel
8978type FloatingPanelProps = {
9079 title : string ;
9180 content : JSX . Element ;
9281 children : JSX . Element ;
93- open ?: boolean ;
94- onOpenChange ?: ( isOpen : boolean ) => void ;
82+ isOpen ?: boolean ;
83+ onIsOpenChange ?: ( isOpen : boolean ) => void ;
9584 // collisionPadding is the distance in pixels from the boundary edges where collision detection should occur.
9685 collisionPadding ?:
9786 | number
@@ -107,18 +96,19 @@ export const FloatingPanel = ({
10796 title,
10897 content,
10998 children,
110- open ,
99+ isOpen : externalIsOpen ,
111100 align,
112- onOpenChange ,
101+ onIsOpenChange : setExternalIsOpen ,
113102 collisionPadding,
114103} : FloatingPanelProps ) => {
115- const { isOpen, handleOpenChange, triggerRef, sideOffset } = useLogic (
116- open ,
117- onOpenChange
118- ) ;
104+ const [ internalIsOpen , setInternalIsOpen ] = useState ( false ) ;
105+ const isOpen = externalIsOpen ?? internalIsOpen ;
106+ const setIsOpen = setExternalIsOpen ?? setInternalIsOpen ;
107+ const { container : containerRef } = useContext ( FloatingPanelContext ) ;
108+ const [ triggerRef , sideOffset ] = useSideOffset ( { isOpen, containerRef } ) ;
119109
120110 return (
121- < FloatingPanelPopover open = { isOpen } onOpenChange = { handleOpenChange } modal >
111+ < FloatingPanelPopover open = { isOpen } onOpenChange = { setIsOpen } modal >
122112 < FloatingPanelPopoverTrigger asChild ref = { triggerRef } >
123113 { children }
124114 </ FloatingPanelPopoverTrigger >
0 commit comments