UNPKG

@vela-ui/react

Version:

Vela UI React components

40 lines (37 loc) 1.03 kB
import { useCallbackRef } from "./chunk-PARVIETC.mjs"; // src/hooks/use-disclosure.ts import { useCallback, useState } from "react"; function useDisclosure(props = {}) { const handleOpen = useCallbackRef(props.onOpen); const handleClose = useCallbackRef(props.onClose); const [openState, setOpen] = useState(props.defaultOpen || false); const isOpen = props.isOpen !== void 0 ? props.isOpen : openState; const controlled = props.isOpen !== void 0; const onClose = useCallback(() => { if (!controlled) setOpen(false); handleClose == null ? void 0 : handleClose(); }, [controlled, handleClose]); const onOpen = useCallback(() => { if (!controlled) setOpen(true); handleOpen == null ? void 0 : handleOpen(); }, [controlled, handleOpen]); const onOpenChange = useCallback(() => { if (isOpen) { onClose(); } else { onOpen(); } }, [isOpen, onOpen, onClose]); return { isOpen, onOpen, onClose, onOpenChange, setOpen }; } export { useDisclosure };