{"version":3,"sources":["../../src/use-toggle/index.ts"],"sourcesContent":["import { useCreation } from '../use-creation'\nimport { useLatest } from '../use-latest'\nimport { useSafeState } from '../use-safe-state'\nimport { useStableFn } from '../use-stable-fn'\nimport { isDefined } from '../utils/basic'\nimport { unwrapArrayable } from '../utils/unwrap'\n\nimport type { ReactSetState } from '../use-safe-state'\n\nexport interface UseToggleReturnsActions<O, T> {\n  /**\n   * Toggle the state between the left and right values.\n   */\n  toggle(): void\n  /**\n   * Set the state to the left value.\n   */\n  setLeft(): void\n  /**\n   * Set the state to the right value.\n   */\n  setRight(): void\n  /**\n   * Set the state to a new value.\n   */\n  setState: ReactSetState<O | T>\n}\n\nexport type UseToggleReturns<O, T> = readonly [O | T, UseToggleReturnsActions<O, T>]\n\n/**\n * A React Hook for managing togglable states.\n */\nexport function useToggle(one: true): UseToggleReturns<true, false>\nexport function useToggle(one: false): UseToggleReturns<false, true>\nexport function useToggle(one: boolean, theOther?: boolean): UseToggleReturns<boolean, boolean>\nexport function useToggle<O, T>(maybeTuple: readonly [one: O, theOther: T]): UseToggleReturns<O, T>\nexport function useToggle<O, T>(maybeTuple: O | T | readonly [one: O, theOther: T]): UseToggleReturns<O, T> {\n  const [one, theOther] = unwrapArrayable(maybeTuple) as [O, T]\n  const [state, setState] = useSafeState<O | T>(one)\n  const latest = useLatest({ one, theOther: isDefined(theOther) ? theOther : (!one as T) })\n\n  const toggle = useStableFn(() => {\n    const { one, theOther } = latest.current\n    setState((prev) => (prev === one ? theOther : one))\n  })\n\n  const setLeft = useStableFn(() => setState(latest.current.one))\n  const setRight = useStableFn(() => setState(latest.current.theOther))\n  const actions = useCreation(() => ({ setLeft, toggle, setRight, setState }))\n\n  return [state, actions] as const\n}\n"],"names":["useToggle","maybeTuple","unwrapArrayable","one","theOther","useSafeState","state","setState","latest","useLatest","isDefined","toggle","useStableFn","current","prev","setLeft","setRight","actions","useCreation"],"mappings":";;;;+BAqCgBA;;;eAAAA;;;2BArCY;yBACF;4BACG;2BACD;qBACF;sBACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCzB,SAASA,UAAgBC,UAAkD;IAChF,IAAwBC,oCAAAA,IAAAA,uBAAe,EAACD,iBAAjCE,MAAiBD,qBAAZE,WAAYF;IACxB,IAA0BG,iCAAAA,IAAAA,0BAAY,EAAQF,UAAvCG,QAAmBD,kBAAZE,WAAYF;IAC1B,IAAMG,SAASC,IAAAA,oBAAS,EAAC;QAAEN,KAAAA;QAAKC,UAAUM,IAAAA,gBAAS,EAACN,YAAYA,WAAY,CAACD;IAAU;IAEvF,IAAMQ,SAASC,IAAAA,wBAAW,EAAC;QACzB,IAA0BJ,kBAAAA,OAAOK,OAAO,EAAhCV,MAAkBK,gBAAlBL,KAAKC,WAAaI,gBAAbJ;QACbG,SAAS,SAACO;mBAAUA,SAASX,MAAMC,WAAWD;;IAChD;IAEA,IAAMY,UAAUH,IAAAA,wBAAW,EAAC;eAAML,SAASC,OAAOK,OAAO,CAACV,GAAG;;IAC7D,IAAMa,WAAWJ,IAAAA,wBAAW,EAAC;eAAML,SAASC,OAAOK,OAAO,CAACT,QAAQ;;IACnE,IAAMa,UAAUC,IAAAA,wBAAW,EAAC;eAAO;YAAEH,SAAAA;YAASJ,QAAAA;YAAQK,UAAAA;YAAUT,UAAAA;QAAS;;IAEzE,OAAO;QAACD;QAAOW;KAAQ;AACzB"}