UNPKG

@chakra-ui/react

Version:

Responsive and accessible React UI components built with React and Emotion

41 lines (38 loc) 1.04 kB
"use strict"; "use client"; import { useState, useCallback } from 'react'; import { useCallbackRef } from './use-callback-ref.js'; function useDisclosure(props = {}) { const { onClose: onCloseProp, onOpen: onOpenProp, open: openProp } = props; const handleOpen = useCallbackRef(onOpenProp); const handleClose = useCallbackRef(onCloseProp); const [openState, setopen] = useState(props.defaultOpen || false); const open = openProp !== void 0 ? openProp : openState; const isControlled = openProp !== void 0; const onClose = useCallback(() => { if (!isControlled) { setopen(false); } handleClose?.(); }, [isControlled, handleClose]); const onOpen = useCallback(() => { if (!isControlled) { setopen(true); } handleOpen?.(); }, [isControlled, handleOpen]); const onToggle = useCallback(() => { if (open) { onClose(); } else { onOpen(); } }, [open, onOpen, onClose]); return { open, onOpen, onClose, onToggle }; } export { useDisclosure };