UNPKG

@yamada-ui/react

Version:

React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion

55 lines (51 loc) 1.88 kB
"use client"; const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs'); const require_ref = require('../../utils/ref.cjs'); let react = require("react"); react = require_rolldown_runtime.__toESM(react); //#region src/hooks/use-disclosure/use-disclosure.ts /** * `useDisclosure` is a custom hook that helps handle common open/close or toggle scenarios. * It can be used to control components such as `Modal`, `Dialog`, `Drawer`, etc. * * @see https://yamada-ui.com/docs/hooks/use-disclosure */ const useDisclosure = ({ defaultOpen = false, open: controlledOpen, timing, onClose: onCloseProp, onOpen: onOpenProp } = {}) => { const [uncontrolledOpen, setUncontrolledOpen] = (0, react.useState)(defaultOpen); const timingRef = (0, react.useRef)(timing ?? "after"); const handleOpen = require_ref.useCallbackRef(onOpenProp); const handleClose = require_ref.useCallbackRef(onCloseProp); const controlled = controlledOpen !== void 0; const open = controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen; const onOpen = (0, react.useCallback)(async (value) => { if (timingRef.current === "before") await handleOpen(value); if (!controlled) setUncontrolledOpen(true); if (timingRef.current === "after") await handleOpen(value); }, [ controlled, handleOpen, timingRef ]); const onClose = (0, react.useCallback)(async (value) => { if (timingRef.current === "before") await handleClose(value); if (!controlled) setUncontrolledOpen(false); if (timingRef.current === "after") await handleClose(value); }, [ controlled, handleClose, timingRef ]); return { open, onClose, onOpen, onToggle: (0, react.useCallback)(async (value) => !open ? await onOpen(value) : await onClose(value), [ open, onOpen, onClose ]) }; }; //#endregion exports.useDisclosure = useDisclosure; //# sourceMappingURL=use-disclosure.cjs.map