{"version":3,"file":"use-promise-disclosure.cjs","names":["useDisclosure","value"],"sources":["../../../../src/hooks/use-disclosure/use-promise-disclosure.ts"],"sourcesContent":["\"use client\"\n\nimport type { DisclosureCallback, UseDisclosureProps } from \"./use-disclosure\"\nimport { useCallback, useRef } from \"react\"\nimport { noop } from \"../../utils\"\nimport { useDisclosure } from \"./use-disclosure\"\n\nexport interface UsePromiseDisclosureProps<\n  Y = never,\n  M = never,\n  D = never,\n  H = Promise<void> | void,\n  R = Promise<void> | void,\n> extends UseDisclosureProps<M, D | Y, H, R> {\n  disableCloseOnSuccess?: boolean\n  error?: unknown\n}\n\n/**\n * `usePromiseDisclosure` is a custom hook that helps handle common open/close or toggle scenarios with promises.\n * It can be used to control components such as `Modal`, `Dialog`, `Drawer`, etc.\n *\n * @see https://yamada-ui.com/docs/hooks/use-promise-disclosure\n */\nexport const usePromiseDisclosure = <\n  Y = never,\n  M = never,\n  D = never,\n  H = Promise<void> | void,\n  R = Promise<void> | void,\n>({\n  disableCloseOnSuccess = false,\n  error,\n  ...rest\n}: UsePromiseDisclosureProps<Y, M, D, H, R> = {}) => {\n  const {\n    open,\n    onClose: onInternalClose,\n    onOpen: onInternalOpen,\n    onToggle,\n  } = useDisclosure<M, D | Y, H, R>(rest)\n\n  const rejectRef = useRef<((reason?: any) => void) | undefined>(undefined)\n  const resolveRef = useRef(noop as DisclosureCallback<Y, R>)\n\n  const onOpen = useCallback(\n    async (value: M) => {\n      const promise = new Promise<Y>((resolve, reject) => {\n        resolveRef.current = (async (value: Y) => {\n          rejectRef.current = undefined\n\n          resolve(value)\n\n          if (!disableCloseOnSuccess) await onInternalClose(value)\n        }) as DisclosureCallback<Y, R>\n\n        rejectRef.current = reject\n      })\n\n      await onInternalOpen(value)\n\n      return await promise\n    },\n    [onInternalOpen, onInternalClose, disableCloseOnSuccess],\n  ) as DisclosureCallback<M, [Y] extends [never] ? Promise<void> : Promise<Y>>\n\n  const onClose = useCallback(\n    async (value: D) => {\n      rejectRef.current?.(error)\n\n      await onInternalClose(value)\n    },\n    [onInternalClose, error],\n  ) as DisclosureCallback<D, R>\n\n  return {\n    open,\n    onClose,\n    onOpen,\n    onSuccess: resolveRef.current,\n    onToggle,\n  }\n}\n\nexport type UsePromiseDisclosureReturn<\n  Y = never,\n  M = never,\n  D = never,\n  H = Promise<void> | void,\n  R = Promise<void> | void,\n> = ReturnType<typeof usePromiseDisclosure<Y, M, D, H, R>>\n"],"mappings":";;;;;;;;;;;;;;;;AAwBA,MAAa,wBAMX,EACA,wBAAwB,OACxB,MACA,GAAG,SACyC,EAAE,KAAK;CACnD,MAAM,EACJ,MACA,SAAS,iBACT,QAAQ,gBACR,aACEA,qCAA8B,KAAK;CAEvC,MAAM,8BAAyD,OAAU;CACzE,MAAM,iEAAoB,KAAiC;CAE3D,MAAM,gCACJ,OAAO,UAAa;EAClB,MAAM,UAAU,IAAI,SAAY,SAAS,WAAW;AAClD,cAAW,WAAW,OAAO,YAAa;AACxC,cAAU,UAAU;AAEpB,YAAQC,QAAM;AAEd,QAAI,CAAC,sBAAuB,OAAM,gBAAgBA,QAAM;;AAG1D,aAAU,UAAU;IACpB;AAEF,QAAM,eAAe,MAAM;AAE3B,SAAO,MAAM;IAEf;EAAC;EAAgB;EAAiB;EAAsB,CACzD;AAWD,QAAO;EACL;EACA,gCAVA,OAAO,UAAa;AAClB,aAAU,UAAU,MAAM;AAE1B,SAAM,gBAAgB,MAAM;KAE9B,CAAC,iBAAiB,MAAM,CACzB;EAKC;EACA,WAAW,WAAW;EACtB;EACD"}