{"version":3,"sources":["../../src/use-now/index.ts"],"sourcesContent":["import { useIntervalFn } from '../use-interval-fn'\nimport { useLatest } from '../use-latest'\nimport { useSafeState } from '../use-safe-state'\n\nimport type { UseIntervalFnInterval, UseIntervalFnOptions } from '../use-interval-fn'\nimport type { Pausable } from '../use-pausable'\n\nexport interface UseNowOptions<Controls extends boolean> extends UseIntervalFnOptions {\n  /**\n   * Expose more controls\n   *\n   * @defaultValue false\n   */\n  controls?: Controls\n  /**\n   * Update interval in milliseconds, or use requestAnimationFrame\n   *\n   * @defaultValue requestAnimationFrame\n   */\n  interval?: UseIntervalFnInterval\n  /**\n   * Callback on each update\n   */\n  callback?: (now: Date) => void\n}\n\nexport type UseNowReturns<Controls extends boolean> = Controls extends true ? { now: Date } & Pausable : Date\n\n/**\n * A React Hook that tracks the current date.\n */\nexport function useNow(options?: UseNowOptions<false>): UseNowReturns<false>\nexport function useNow(options: UseNowOptions<true>): UseNowReturns<true>\nexport function useNow(options: UseNowOptions<boolean> = {}): UseNowReturns<boolean> {\n  const {\n    controls: exposeControls = false,\n    callback,\n    interval = 'requestAnimationFrame',\n    ...useIntervalFnOptions\n  } = options\n\n  const latest = useLatest({ callback })\n  const [now, setNow] = useSafeState(() => new Date())\n\n  const controls = useIntervalFn(\n    () => {\n      const now = new Date()\n      setNow(now)\n      latest.current.callback?.(now)\n    },\n    interval,\n    useIntervalFnOptions,\n  )\n\n  return exposeControls ? { now, ...controls } : now\n}\n"],"names":["useNow","options","exposeControls","controls","callback","interval","useIntervalFnOptions","latest","useLatest","useSafeState","Date","now","setNow","useIntervalFn","current"],"mappings":";;;;+BAiCgBA;;;eAAAA;;;6BAjCc;yBACJ;4BACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BtB,SAASA;QAAOC,UAAAA,iEAAkC,CAAC;IACxD,IACYC,MAIRD,QAJFE,UAAUD,iBAAAA,iBAAiB,QAAjBA,KACVE,WAGEH,QAHFG,8BAGEH,QAFFI,UAAAA,0CAAW,6CACRC,kDACDL;;;;;IAEJ,IAAMM,SAASC,IAAAA,oBAAS,EAAC;QAAEJ,UAAAA;IAAS;IACpC,IAAsBK,iCAAAA,IAAAA,0BAAY,EAAC;eAAM,IAAIC;YAAtCC,MAAeF,kBAAVG,SAAUH;IAEtB,IAAMN,WAAWU,IAAAA,4BAAa,EAC5B;YAGEN,0BAAAA;QAFA,IAAMI,MAAM,IAAID;QAChBE,OAAOD;SACPJ,2BAAAA,CAAAA,kBAAAA,OAAOO,OAAO,EAACV,QAAQ,cAAvBG,+CAAAA,8BAAAA,iBAA0BI;IAC5B,GACAN,UACAC;IAGF,OAAOJ,iBAAiB;QAAES,KAAAA;OAAQR,YAAaQ;AACjD"}