{"version":3,"file":"use-disclosure.mjs","names":[],"sources":["../../src/use-disclosure/use-disclosure.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nexport interface UseDisclosureOptions {\n  onOpen?: () => void;\n  onClose?: () => void;\n}\n\nexport interface UseDisclosureHandlers {\n  set: (value: boolean) => void;\n  open: () => void;\n  close: () => void;\n  toggle: () => void;\n}\n\nexport type UseDisclosureReturnValue = [boolean, UseDisclosureHandlers];\n\nexport function useDisclosure(\n  initialState = false,\n  options: UseDisclosureOptions = {}\n): UseDisclosureReturnValue {\n  const [opened, setOpened] = useState(initialState);\n\n  const open = useCallback(() => {\n    setOpened((isOpened) => {\n      if (!isOpened) {\n        options.onOpen?.();\n        return true;\n      }\n      return isOpened;\n    });\n  }, [options.onOpen]);\n\n  const close = useCallback(() => {\n    setOpened((isOpened) => {\n      if (isOpened) {\n        options.onClose?.();\n        return false;\n      }\n      return isOpened;\n    });\n  }, [options.onClose]);\n\n  const toggle = useCallback(() => {\n    opened ? close() : open();\n  }, [close, open, opened]);\n\n  return [opened, { open, close, toggle, set: setOpened }];\n}\n\nexport namespace useDisclosure {\n  export type Options = UseDisclosureOptions;\n  export type Handlers = UseDisclosureHandlers;\n  export type ReturnValue = UseDisclosureReturnValue;\n}\n"],"mappings":";;;AAgBA,SAAgB,cACd,eAAe,OACf,UAAgC,CAAC,GACP;CAC1B,MAAM,CAAC,QAAQ,aAAa,SAAS,YAAY;CAEjD,MAAM,OAAO,kBAAkB;EAC7B,WAAW,aAAa;GACtB,IAAI,CAAC,UAAU;IACb,QAAQ,SAAS;IACjB,OAAO;GACT;GACA,OAAO;EACT,CAAC;CACH,GAAG,CAAC,QAAQ,MAAM,CAAC;CAEnB,MAAM,QAAQ,kBAAkB;EAC9B,WAAW,aAAa;GACtB,IAAI,UAAU;IACZ,QAAQ,UAAU;IAClB,OAAO;GACT;GACA,OAAO;EACT,CAAC;CACH,GAAG,CAAC,QAAQ,OAAO,CAAC;CAMpB,OAAO,CAAC,QAAQ;EAAE;EAAM;EAAO,QAJhB,kBAAkB;GAC/B,SAAS,MAAM,IAAI,KAAK;EAC1B,GAAG;GAAC;GAAO;GAAM;EAAM,CAEa;EAAG,KAAK;CAAU,CAAC;AACzD"}