{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { useCallbackRef } from \"@chakra-ui/react-use-callback-ref\"\nimport React, { useCallback, useState, useId } from \"react\"\n\nexport interface UseDisclosureProps {\n  isOpen?: boolean\n  defaultIsOpen?: boolean\n  onClose?(): void\n  onOpen?(): void\n  id?: string\n}\n\ntype HTMLProps = React.HTMLAttributes<HTMLElement>\n\n/**\n * `useDisclosure` is a custom hook used to help handle common open, close, or toggle scenarios.\n * It can be used to control feedback component such as `Modal`, `AlertDialog`, `Drawer`, etc.\n *\n * @see Docs https://chakra-ui.com/docs/hooks/use-disclosure\n */\nexport function useDisclosure(props: UseDisclosureProps = {}) {\n  const {\n    onClose: onCloseProp,\n    onOpen: onOpenProp,\n    isOpen: isOpenProp,\n    id: idProp,\n  } = props\n\n  const handleOpen = useCallbackRef(onOpenProp)\n  const handleClose = useCallbackRef(onCloseProp)\n\n  const [isOpenState, setIsOpen] = useState(props.defaultIsOpen || false)\n\n  const isOpen = isOpenProp !== undefined ? isOpenProp : isOpenState\n\n  const isControlled = isOpenProp !== undefined\n\n  const uid = useId()\n  const id = idProp ?? `disclosure-${uid}`\n\n  const onClose = useCallback(() => {\n    if (!isControlled) {\n      setIsOpen(false)\n    }\n    handleClose?.()\n  }, [isControlled, handleClose])\n\n  const onOpen = useCallback(() => {\n    if (!isControlled) {\n      setIsOpen(true)\n    }\n    handleOpen?.()\n  }, [isControlled, handleOpen])\n\n  const onToggle = useCallback(() => {\n    if (isOpen) {\n      onClose()\n    } else {\n      onOpen()\n    }\n  }, [isOpen, onOpen, onClose])\n\n  function getButtonProps(props: HTMLProps = {}): HTMLProps {\n    return {\n      ...props,\n      \"aria-expanded\": isOpen,\n      \"aria-controls\": id,\n      onClick(event) {\n        props.onClick?.(event)\n        onToggle()\n      },\n    }\n  }\n\n  function getDisclosureProps(props: HTMLProps = {}): HTMLProps {\n    return {\n      ...props,\n      hidden: !isOpen,\n      id,\n    }\n  }\n\n  return {\n    isOpen,\n    onOpen,\n    onClose,\n    onToggle,\n    isControlled,\n    getButtonProps,\n    getDisclosureProps,\n  }\n}\n\nexport type UseDisclosureReturn = ReturnType<typeof useDisclosure>\n"],"mappings":";;;AAAA,SAAS,sBAAsB;AAC/B,SAAgB,aAAa,UAAU,aAAa;AAkB7C,SAAS,cAAc,QAA4B,CAAC,GAAG;AAC5D,QAAM;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,IAAI;AAAA,EACN,IAAI;AAEJ,QAAM,aAAa,eAAe,UAAU;AAC5C,QAAM,cAAc,eAAe,WAAW;AAE9C,QAAM,CAAC,aAAa,SAAS,IAAI,SAAS,MAAM,iBAAiB,KAAK;AAEtE,QAAM,SAAS,eAAe,SAAY,aAAa;AAEvD,QAAM,eAAe,eAAe;AAEpC,QAAM,MAAM,MAAM;AAClB,QAAM,KAAK,0BAAU,cAAc;AAEnC,QAAM,UAAU,YAAY,MAAM;AAChC,QAAI,CAAC,cAAc;AACjB,gBAAU,KAAK;AAAA,IACjB;AACA;AAAA,EACF,GAAG,CAAC,cAAc,WAAW,CAAC;AAE9B,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,CAAC,cAAc;AACjB,gBAAU,IAAI;AAAA,IAChB;AACA;AAAA,EACF,GAAG,CAAC,cAAc,UAAU,CAAC;AAE7B,QAAM,WAAW,YAAY,MAAM;AACjC,QAAI,QAAQ;AACV,cAAQ;AAAA,IACV,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,OAAO,CAAC;AAE5B,WAAS,eAAeA,SAAmB,CAAC,GAAc;AACxD,WAAO;AAAA,MACL,GAAGA;AAAA,MACH,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,QAAQ,OAAO;AAlErB;AAmEQ,cAAAA,OAAM,YAAN,wBAAAA,QAAgB;AAChB,iBAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,WAAS,mBAAmBA,SAAmB,CAAC,GAAc;AAC5D,WAAO;AAAA,MACL,GAAGA;AAAA,MACH,QAAQ,CAAC;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["props"]}