{"version":3,"sources":["../../src/index.ts","../../src/helpers/getTimeParts.ts","../../src/hook/useTimeModel.ts","../../src/helpers/now.ts","../../src/models/TimeModelState.ts","../../src/models/TimeModel.ts","../../src/instances/timeModel.ts"],"sourcesContent":["import { getTimeParts } from './helpers/getTimeParts';\nimport { useTimeModel } from './hook/useTimeModel';\nimport { createTimeModel } from './instances/timeModel';\n\nexport * from './types';\n\nexport {\n  createTimeModel,\n  useTimeModel,\n  getTimeParts,\n};\n","import { Unit, TimeParts } from \"../types\";\n\nexport function getTimeParts(\n  time: number,\n  lastUnit: Unit,\n  roundUnit: Unit = \"ms\"\n): TimeParts {\n  const units: Unit[] = [\"ms\", \"s\", \"m\", \"h\", \"d\"];\n  const lastUnitIndex = units.findIndex((unit) => unit === lastUnit);\n  const roundUnitIndex = units.findIndex((unit) => unit === roundUnit);\n\n  if (roundUnitIndex > lastUnitIndex) {\n    throw new Error(\"roundUnitIndex must be less or equal than lastUnitIndex\");\n  }\n\n  const dividers = [1000, 60, 60, 24, 1];\n  const dividersAcc = [1, 1000, 60000, 3600000, 86400000];\n\n  const startValue = {\n    ms: 0,\n    s: 0,\n    m: 0,\n    h: 0,\n    d: 0,\n  };\n\n  const output = units.reduce((obj, unit, index) => {\n    if (index > lastUnitIndex) {\n      obj[unit] = 0;\n    } else if (index === lastUnitIndex) {\n      obj[unit] = Math.floor(time / dividersAcc[index]);\n    } else {\n      obj[unit] = Math.floor(time / dividersAcc[index]) % dividers[index];\n    }\n\n    return obj;\n  }, startValue);\n\n  if (roundUnitIndex > 0) {\n    const unitToDecideOnRoundIndex = roundUnitIndex - 1;\n    const unitToDecideOnRound = units[unitToDecideOnRoundIndex];\n    const isRoundNeeded = output[unitToDecideOnRound] >= dividers[unitToDecideOnRoundIndex] / 2;\n\n    if (isRoundNeeded) {\n      output[roundUnit] = output[roundUnit] + 1;\n    }\n\n    for (let i = 0; i < roundUnitIndex; i++) {\n      output[units[i]] = 0;\n    }\n  }\n\n  return output;\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { TimeModel } from \"../models/TimeModel\";\nimport { TimerValue } from \"../types\";\n\nexport const useTimeModel = (timer: TimeModel) => {\n  const [timerValue, setTimerValue] = useState(timer.value);\n\n  useEffect(() => {\n    setTimerValue(timer.value);\n\n    const onChange = (timerValue: TimerValue) => {\n      setTimerValue(timerValue);\n    };\n\n    timer.events = {\n      ...timer.events,\n      onChange,\n    };\n\n    return () => {\n      timer.events = {\n        ...timer.events,\n        onChange: undefined,\n      };\n    };\n  }, [timer]);\n\n  const value = useMemo(\n    () => ({\n      value: timerValue,\n      changeTime: timer.changeTime,\n      changeLastUnit: timer.changeLastUnit,\n      changeTimeToUpdate: timer.changeTimeToUpdate,\n      changeDirection: timer.changeDirection,\n      changeCheckpoints: timer.changeCheckpoints,\n      start: timer.start,\n      pause: timer.pause,\n      resume: timer.resume,\n      stop: timer.stop,\n      reset: timer.reset,\n    }),\n    [timer, timerValue]\n  );\n\n  return value;\n};\n","export function now(): number {\n  // if (typeof window === 'undefined' || !('performance' in window)) {\n  //   return Date.now();\n  // }\n  // return performance.now();\n\n  // we do not use performance.now() anymore, read links below for more info\n  // https://medium.com/@mihai/performance-now-sleep-16a5b774560c\n  // https://persistent.info/web-experiments/performance-now-sleep/\n  return Date.now();\n}\n","import { TimeModelStateValues } from \"../types\";\n\nexport const INITED = \"INITED\";\nexport const PLAYING = \"PLAYING\";\nexport const PAUSED = \"PAUSED\";\nexport const STOPPED = \"STOPPED\";\n\nexport class TimeModelState {\n  private onStateChange: (obj: { state: TimeModelStateValues }) => void;\n  private state: TimeModelStateValues = INITED;\n\n  constructor(\n    initialStatus: TimeModelStateValues = INITED,\n    onStateChange: (obj: { state: TimeModelStateValues }) => void = () => {}\n  ) {\n    this.state = initialStatus;\n    this.onStateChange = onStateChange;\n  }\n\n  public setOnStateChange(\n    onStateChange: (obj: { state: TimeModelStateValues }) => void\n  ) {\n    this.onStateChange = onStateChange;\n  }\n\n  public getState() {\n    return this.state;\n  }\n\n  public setInited() {\n    if (this.state === INITED) {\n      return false;\n    }\n\n    this.state = INITED;\n\n    this.onChange();\n\n    return true;\n  }\n\n  public isInited() {\n    return this.state === INITED;\n  }\n\n  public setPlaying() {\n    if (this.state === PLAYING) {\n      return false;\n    }\n\n    this.state = PLAYING;\n\n    this.onChange();\n\n    return true;\n  }\n\n  public isPlaying() {\n    return this.state === PLAYING;\n  }\n\n  public setPaused() {\n    if (this.state !== PLAYING) {\n      return false;\n    }\n\n    this.state = PAUSED;\n\n    this.onChange();\n\n    return true;\n  }\n\n  public isPaused() {\n    return this.state === PAUSED;\n  }\n\n  public setStopped() {\n    if (this.state === INITED) {\n      return false;\n    }\n\n    this.state = STOPPED;\n\n    this.onChange();\n\n    return true;\n  }\n\n  public isStopped() {\n    return this.state === STOPPED;\n  }\n\n  private onChange() {\n    this.onStateChange({ state: this.state });\n  }\n}\n","import { getTimeParts } from \"../helpers/getTimeParts\";\nimport { now } from \"../helpers/now\";\n\nimport { TimeModelState } from \"./TimeModelState\";\nimport { TimerValue, Unit, Checkpoints, Direction } from \"../types\";\n\nexport interface TimeModelOptions {\n  initialTime: number;\n  startImmediately: boolean;\n  direction: \"forward\" | \"backward\";\n  timeToUpdate: number;\n  lastUnit: Unit;\n  roundUnit: Unit;\n  checkpoints: Checkpoints;\n}\n\nexport interface TimeModelEvents {\n  onChange?: (timerValue: TimerValue) => void;\n  onStart?: () => void;\n  onResume?: () => void;\n  onPause?: () => void;\n  onStop?: () => void;\n  onReset?: () => void;\n}\n\nexport class TimeModel {\n  private options: TimeModelOptions;\n  public events: TimeModelEvents;\n\n  private internalTime: number;\n  private time: number;\n  private innerState: TimeModelState;\n  private timerId: number | null;\n\n  constructor(options: TimeModelOptions, events: TimeModelEvents = {}) {\n    this.internalTime = now();\n    this.options = options;\n    this.events = events;\n    this.time = options.initialTime;\n    this.innerState = new TimeModelState(\"INITED\", () => {\n      if (this.events.onChange) {\n        this.events.onChange(this.value);\n      }\n    });\n\n    this.timerId = null;\n\n    if (this.options.startImmediately) {\n      this.start();\n    }\n  }\n\n  get value() {\n    return this.getTimerValue(this.computeTime());\n  }\n\n  get currentOptions(): TimeModelOptions {\n    return JSON.parse(JSON.stringify(this.options));\n  }\n\n  /**\n   * Change options methods\n   **/\n\n  public changeTime = (time: number) => {\n    this.internalTime = now();\n    this.options.initialTime = time;\n    this.time = this.options.initialTime;\n\n    if (this.events.onChange) {\n      this.events.onChange(this.getTimerValue(this.time));\n    }\n  };\n\n  public changeLastUnit = (lastUnit: Unit) => {\n    if (this.innerState.isPlaying()) {\n      this.pause();\n      this.options.lastUnit = lastUnit;\n      this.resume(true);\n    } else {\n      this.options.lastUnit = lastUnit;\n    }\n  };\n\n  public changeRoundUnit = (roundUnit: Unit) => {\n    if (this.innerState.isPlaying()) {\n      this.pause();\n      this.options.roundUnit = roundUnit;\n      this.resume(true);\n    } else {\n      this.options.roundUnit = roundUnit;\n    }\n  };\n\n  public changeTimeToUpdate = (interval: number) => {\n    if (this.innerState.isPlaying()) {\n      this.pause();\n      this.options.timeToUpdate = interval;\n      this.resume();\n    } else {\n      this.options.timeToUpdate = interval;\n    }\n  };\n\n  public changeDirection = (direction: Direction) => {\n    this.options.direction = direction;\n  };\n\n  public changeCheckpoints = (checkpoints: Checkpoints) => {\n    this.options.checkpoints = checkpoints;\n  };\n\n  /**\n   * Timer controls methods\n   **/\n\n  public start = () => {\n    if (this.innerState.setPlaying()) {\n      this.setTimerInterval(true);\n\n      if (this.events.onStart) {\n        this.events.onStart();\n      }\n    }\n  };\n\n  public resume = (callImmediately = false) => {\n    if (this.innerState.isPaused() && this.innerState.setPlaying()) {\n      this.setTimerInterval(callImmediately);\n\n      if (this.events.onResume) {\n        this.events.onResume();\n      }\n    }\n  };\n\n  public pause = () => {\n    if (this.innerState.setPaused()) {\n      if (this.timerId) {\n        clearInterval(this.timerId);\n      }\n\n      if (this.events.onPause) {\n        this.events.onPause();\n      }\n    }\n  };\n\n  public stop = () => {\n    if (this.innerState.setStopped()) {\n      if (this.timerId) {\n        clearInterval(this.timerId);\n      }\n\n      if (this.events.onStop) {\n        this.events.onStop();\n      }\n    }\n  };\n\n  public reset = () => {\n    this.time = this.options.initialTime;\n\n    if (this.events.onChange) {\n      this.events.onChange(this.getTimerValue(this.time));\n    }\n\n    if (this.events.onReset) {\n      this.events.onReset();\n    }\n  };\n\n  /**\n   * Private methods\n   **/\n\n  private setTimerInterval = (callImmediately = false) => {\n    if (this.timerId) {\n      clearInterval(this.timerId);\n    }\n\n    this.internalTime = now();\n\n    const repeatedFunc = () => {\n      const oldTime = this.time;\n      const updatedTime = this.computeTime();\n\n      if (this.events.onChange) {\n        this.events.onChange(this.getTimerValue(updatedTime));\n      }\n\n      this.options.checkpoints.map(({ time, callback }) => {\n        const checkForForward = time > oldTime && time <= updatedTime;\n        const checkForBackward = time < oldTime && time >= updatedTime;\n        const checkIntersection =\n          this.options.direction === \"backward\"\n            ? checkForBackward\n            : checkForForward;\n\n        if (checkIntersection) {\n          callback();\n        }\n      });\n    };\n\n    if (callImmediately && this.events.onChange) {\n      this.events.onChange(this.getTimerValue(this.time));\n    }\n\n    this.timerId = window.setInterval(repeatedFunc, this.options.timeToUpdate);\n  };\n\n  private getTimerValue = (time: number): TimerValue => {\n    return {\n      ...getTimeParts(time, this.options.lastUnit, this.options.roundUnit),\n      state: this.innerState.getState(),\n    };\n  };\n\n  private computeTime = () => {\n    if (this.innerState.isPlaying()) {\n      const currentInternalTime = now();\n      const delta = Math.abs(currentInternalTime - this.internalTime);\n\n      switch (this.options.direction) {\n        case \"forward\":\n          this.time = this.time + delta;\n          this.internalTime = currentInternalTime;\n\n          return this.time;\n\n        case \"backward\": {\n          this.time = this.time - delta;\n          this.internalTime = currentInternalTime;\n\n          if (this.time < 0) {\n            this.stop();\n\n            return 0;\n          }\n\n          return this.time;\n        }\n\n        default:\n          return this.time;\n      }\n    }\n\n    return this.time < 0 ? 0 : this.time;\n  };\n}\n","import {\n  TimeModel,\n  TimeModelEvents,\n  TimeModelOptions,\n} from \"../models/TimeModel\";\n\nconst defaultOptions: TimeModelOptions = {\n  initialTime: 0,\n  direction: \"forward\",\n  timeToUpdate: 250,\n  startImmediately: true,\n  lastUnit: \"d\",\n  roundUnit: \"ms\",\n  checkpoints: [],\n};\n\nexport const createTimeModel = (\n  options: Partial<TimeModelOptions> = {},\n  events: TimeModelEvents = {}\n) => {\n  const resultOptions = {\n    ...defaultOptions,\n    ...options,\n  };\n\n  return new TimeModel(resultOptions, events);\n};\n"],"mappings":"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","names":["timerValue"]}