{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "use-disclosure",
  "title": "UseDisclosure",
  "description": "Manages boolean state for UI components like dialogs, modals, and popovers.",
  "files": [
    {
      "path": "registry/hooks/use-disclosure.tsx",
      "content": "'use client';\n\nimport { useCallback, useRef, useState } from 'react';\n\ninterface DisclosureCallbacks {\n  onOpen?: () => void;\n  onClose?: () => void;\n}\n\ninterface DisclosureState {\n  isOpen: boolean;\n  open: () => void;\n  close: () => void;\n  toggle: () => void;\n}\n\nexport function useDisclosure(\n  initialState = false,\n  callbacks?: DisclosureCallbacks,\n): [boolean, Omit<DisclosureState, 'isOpen'>] {\n  const callbacksRef = useRef(callbacks);\n  callbacksRef.current = callbacks;\n\n  const [isOpen, setIsOpen] = useState(initialState);\n\n  const open = useCallback(() => {\n    setIsOpen((prev) => {\n      if (!prev) {\n        callbacksRef.current?.onOpen?.();\n        return true;\n      }\n      return prev;\n    });\n  }, []);\n\n  const close = useCallback(() => {\n    setIsOpen((prev) => {\n      if (prev) {\n        callbacksRef.current?.onClose?.();\n        return false;\n      }\n      return prev;\n    });\n  }, []);\n\n  const toggle = useCallback(() => {\n    setIsOpen((prev) => {\n      if (prev) {\n        callbacksRef.current?.onClose?.();\n        return false;\n      }\n      callbacksRef.current?.onOpen?.();\n      return true;\n    });\n  }, []);\n\n  return [isOpen, { open, close, toggle }];\n}\n",
      "type": "registry:hook",
      "target": "hooks/guarahooks/use-disclosure.tsx"
    }
  ],
  "categories": [
    "state-management"
  ],
  "type": "registry:hook"
}