@vela-ui/react
Version:
Vela UI React components
40 lines (37 loc) • 1.03 kB
JavaScript
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
};