{"version":3,"sources":["../../src/use-previous/index.ts"],"sourcesContent":["import { useRef } from 'react'\nimport { useFirstRender } from '../use-first-render'\nimport { deepEqual } from '../utils/equal'\n\ninterface UsePreviousOptions {\n  /**\n   * An `isEqual` function used to compare whether the previous value is equal to the current value, defaults to `Object.is`.\n   *\n   * @param previous The previous value.\n   * @param current The current value.\n   * @returns Returns `true` if equal, otherwise returns `false`.\n   *\n   * @defaultValue `Object.is`\n   */\n  isEqual?(previous: any, current: any): boolean\n  /**\n   * Whether to compare deeply, defaults to `false`.\n   *\n   * @defaultValue false\n   *\n   * @since 1.5.0\n   */\n  deep?: boolean\n}\n\n/**\n * A React Hook that retains the *different* value of the state from the last render.\n */\nexport function usePrevious<T = undefined>(state: T, options: UsePreviousOptions = {}): T | undefined {\n  const preRef = useRef<T>(undefined)\n  const curRef = useRef<T>(undefined)\n  const isFirstRender = useFirstRender()\n\n  const { deep = false, isEqual = deep ? deepEqual : Object.is } = options\n\n  // ignore the first render & update the previous `different` value\n  if (!isFirstRender && !isEqual(curRef.current, state)) {\n    preRef.current = curRef.current\n  }\n\n  // reduce unnecessary reassignment\n  if (!Object.is(curRef.current, state)) {\n    curRef.current = state\n  }\n\n  return preRef.current\n}\n"],"names":["usePrevious","state","options","preRef","useRef","undefined","curRef","isFirstRender","useFirstRender","deep","isEqual","deepEqual","Object","is","current"],"mappings":";;;;+BA4BgBA;;;eAAAA;;;qBA5BO;8BACQ;qBACL;AA0BnB,SAASA,YAA2BC,KAAQ;QAAEC,UAAAA,iEAA8B,CAAC;IAClF,IAAMC,SAASC,IAAAA,aAAM,EAAIC;IACzB,IAAMC,SAASF,IAAAA,aAAM,EAAIC;IACzB,IAAME,gBAAgBC,IAAAA,8BAAc;IAEpC,oBAAiEN,QAAzDO,MAAAA,kCAAO,0CAAkDP,QAA3CQ,SAAAA,wCAAUD,OAAOE,gBAAS,GAAGC,OAAOC,EAAE;IAE5D,kEAAkE;IAClE,IAAI,CAACN,iBAAiB,CAACG,QAAQJ,OAAOQ,OAAO,EAAEb,QAAQ;QACrDE,OAAOW,OAAO,GAAGR,OAAOQ,OAAO;IACjC;IAEA,kCAAkC;IAClC,IAAI,CAACF,OAAOC,EAAE,CAACP,OAAOQ,OAAO,EAAEb,QAAQ;QACrCK,OAAOQ,OAAO,GAAGb;IACnB;IAEA,OAAOE,OAAOW,OAAO;AACvB"}