UNPKG

@chakra-ui/react-use-disclosure

Version:

A Quick description of the component

71 lines (70 loc) 1.75 kB
'use client' // src/index.ts import { useCallbackRef } from "@chakra-ui/react-use-callback-ref"; import { useCallback, useState, useId } from "react"; function useDisclosure(props = {}) { const { onClose: onCloseProp, onOpen: onOpenProp, isOpen: isOpenProp, id: idProp } = props; const handleOpen = useCallbackRef(onOpenProp); const handleClose = useCallbackRef(onCloseProp); const [isOpenState, setIsOpen] = useState(props.defaultIsOpen || false); const isOpen = isOpenProp !== void 0 ? isOpenProp : isOpenState; const isControlled = isOpenProp !== void 0; const uid = useId(); const id = idProp != null ? idProp : `disclosure-${uid}`; const onClose = useCallback(() => { if (!isControlled) { setIsOpen(false); } handleClose == null ? void 0 : handleClose(); }, [isControlled, handleClose]); const onOpen = useCallback(() => { if (!isControlled) { setIsOpen(true); } handleOpen == null ? void 0 : handleOpen(); }, [isControlled, handleOpen]); const onToggle = useCallback(() => { if (isOpen) { onClose(); } else { onOpen(); } }, [isOpen, onOpen, onClose]); function getButtonProps(props2 = {}) { return { ...props2, "aria-expanded": isOpen, "aria-controls": id, onClick(event) { var _a; (_a = props2.onClick) == null ? void 0 : _a.call(props2, event); onToggle(); } }; } function getDisclosureProps(props2 = {}) { return { ...props2, hidden: !isOpen, id }; } return { isOpen, onOpen, onClose, onToggle, isControlled, getButtonProps, getDisclosureProps }; } export { useDisclosure }; //# sourceMappingURL=index.mjs.map