
package.dist.esm.hooks.use-disclosure.js Maven / Gradle / Ivy
"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 };
© 2015 - 2025 Weber Informatics LLC | Privacy Policy