Skip to main content

Overview

The useDisclosure hook provides a simple way to control the open/closed state of UI components like modals, drawers, dropdowns, and other overlay elements. It returns boolean state along with convenient control functions.

Usage

import { useDisclosure } from '@kivora/react';

function Example() {
  const { isOpen, open, close, toggle } = useDisclosure();

  return (
    <>
      <Button onClick={open}>Open Modal</Button>
      <Modal open={isOpen} onClose={close}>
        <p>Modal content</p>
        <Button onClick={close}>Close</Button>
      </Modal>
    </>
  );
}

Parameters

initialState
boolean
default:"false"
Whether the disclosure starts in an open state

Returns

Returns an object with the following properties:
isOpen
boolean
Current open/closed state
open
() => void
Function to set state to open
close
() => void
Function to set state to closed
toggle
() => void
Function to toggle between open and closed states

Examples

import { useDisclosure } from '@kivora/react';

function DeleteConfirmation() {
  const { isOpen, open, close } = useDisclosure();

  return (
    <>
      <Button onClick={open} color="danger">Delete</Button>
      <Modal open={isOpen} onClose={close}>
        <h2>Confirm Deletion</h2>
        <p>Are you sure you want to delete this item?</p>
        <Button onClick={close}>Cancel</Button>
        <Button onClick={() => {
          // Perform delete
          close();
        }}>Delete</Button>
      </Modal>
    </>
  );
}
import { useDisclosure } from '@kivora/react';

function UserMenu() {
  const { isOpen, toggle, close } = useDisclosure();

  return (
    <div>
      <Button onClick={toggle}>Menu</Button>
      {isOpen && (
        <Dropdown onClickOutside={close}>
          <MenuItem>Profile</MenuItem>
          <MenuItem>Settings</MenuItem>
          <MenuItem>Logout</MenuItem>
        </Dropdown>
      )}
    </div>
  );
}

Drawer with Initial State

import { useDisclosure } from '@kivora/react';

function Sidebar() {
  // Start with drawer open
  const { isOpen, close, toggle } = useDisclosure(true);

  return (
    <>
      <Button onClick={toggle}>
        {isOpen ? 'Close' : 'Open'} Sidebar
      </Button>
      <Drawer open={isOpen} onClose={close}>
        <nav>
          <a href="/home">Home</a>
          <a href="/about">About</a>
          <a href="/contact">Contact</a>
        </nav>
      </Drawer>
    </>
  );
}

Type Definition

interface UseDisclosureReturn {
  isOpen: boolean;
  open: () => void;
  close: () => void;
  toggle: () => void;
}

function useDisclosure(initialState?: boolean): UseDisclosureReturn;

Build docs developers (and LLMs) love