{"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,EAAE,EACR;CAC1B,MAAM,CAAC,QAAQ,aAAa,SAAS,aAAa;CAElD,MAAM,OAAO,kBAAkB;AAC7B,aAAW,aAAa;AACtB,OAAI,CAAC,UAAU;AACb,YAAQ,UAAU;AAClB,WAAO;;AAET,UAAO;IACP;IACD,CAAC,QAAQ,OAAO,CAAC;CAEpB,MAAM,QAAQ,kBAAkB;AAC9B,aAAW,aAAa;AACtB,OAAI,UAAU;AACZ,YAAQ,WAAW;AACnB,WAAO;;AAET,UAAO;IACP;IACD,CAAC,QAAQ,QAAQ,CAAC;AAMrB,QAAO,CAAC,QAAQ;EAAE;EAAM;EAAO,QAJhB,kBAAkB;AAC/B,YAAS,OAAO,GAAG,MAAM;KACxB;GAAC;GAAO;GAAM;GAAO,CAAC;EAEc,KAAK;EAAW,CAAC"}