{"version":3,"sources":["../../src/use-time-ago/index.ts"],"sourcesContent":["import { useCreation } from '../use-creation'\nimport { useNow } from '../use-now'\nexport { formatTimeAgo } from './format-time-ago'\nimport { normalizeDate } from '../use-date-format'\nimport { unwrapGettable } from '../utils/unwrap'\nimport { DEFAULT_MESSAGES, formatTimeAgo } from './format-time-ago'\n\nimport type { DateLike } from '../use-date-format'\nimport type { Pausable } from '../use-pausable'\nimport type { Gettable } from '../utils/basic'\nexport type { FormatTimeAgoOptions } from './format-time-ago'\nimport type { FormatTimeAgoOptions, TimeAgoMessages, TimeAgoUnitNamesDefault } from './format-time-ago'\n\nexport type UseTimeAgoReturns<Controls extends boolean = false> = Controls extends true\n  ? { timeAgo: string } & Pausable\n  : string\n\nexport interface UseTimeAgoOptions<Controls extends boolean, UnitNames extends string = TimeAgoUnitNamesDefault>\n  extends FormatTimeAgoOptions<UnitNames> {\n  /**\n   * Expose more controls\n   *\n   * @defaultValue false\n   */\n  controls?: Controls\n  /**\n   * Intervals to update, set 0 to disable auto update\n   *\n   * @defaultValue 30_000\n   */\n  updateInterval?: number\n}\n\n/**\n * A React Hook that helps to format a date to a human-readable time ago string. It will automatically update the time ago string every 30 seconds by default.\n */\nexport function useTimeAgo<UnitNames extends string = TimeAgoUnitNamesDefault>(\n  time: Gettable<DateLike>,\n  options?: UseTimeAgoOptions<false, UnitNames>,\n): UseTimeAgoReturns<false>\nexport function useTimeAgo<UnitNames extends string = TimeAgoUnitNamesDefault>(\n  time: Gettable<DateLike>,\n  options: UseTimeAgoOptions<true, UnitNames>,\n): UseTimeAgoReturns<true>\nexport function useTimeAgo<UnitNames extends string = TimeAgoUnitNamesDefault>(\n  time: Gettable<DateLike>,\n  options: UseTimeAgoOptions<boolean, UnitNames> = {},\n) {\n  const { controls: exposeControls = false, updateInterval = 30_000, ...restOptions } = options\n  const timeValue = unwrapGettable(time)\n  const { now, ...controls } = useNow({ interval: updateInterval, controls: true })\n\n  const timeAgo = useCreation(\n    () => formatTimeAgo(new Date(normalizeDate(timeValue)), restOptions, now),\n    [timeValue, now, restOptions.max, restOptions.showSecond, restOptions.units, restOptions.rounding],\n  )\n\n  return exposeControls ? { timeAgo, ...controls } : timeAgo\n}\n\n/**\n * Default messages for Chinese Simplified language\n */\nexport const CHINESE_MESSAGES: TimeAgoMessages<TimeAgoUnitNamesDefault> = {\n  justNow: '刚刚',\n  past: (n) => (n.match(/\\d/) ? `${n}前` : n),\n  future: (n) => (n.match(/\\d/) ? `${n}后` : n),\n  month: (n, past) => (n === 1 ? (past ? '上个月' : '下个月') : `${n} 个月`),\n  year: (n, past) => (n === 1 ? (past ? '去年' : '明年') : `${n} 年`),\n  day: (n, past) => (n === 1 ? (past ? '昨天' : '明天') : `${n} 天`),\n  week: (n, past) => (n === 1 ? (past ? '上周' : '下周') : `${n} 周`),\n  hour: (n) => `${n} 小时`,\n  minute: (n) => `${n} 分钟`,\n  second: (n) => `${n} 秒`,\n  invalid: '',\n}\n\n/**\n * Default messages for Chinese Traditional language\n */\nexport const CHINESE_TRADITIONAL_MESSAGES: TimeAgoMessages<TimeAgoUnitNamesDefault> = {\n  justNow: '剛剛',\n  past: (n) => (n.match(/\\d/) ? `${n}前` : n),\n  future: (n) => (n.match(/\\d/) ? `${n}後` : n),\n  month: (n, past) => (n === 1 ? (past ? '上個月' : '下個月') : `${n} 個月`),\n  year: (n, past) => (n === 1 ? (past ? '去年' : '明年') : `${n} 年`),\n  day: (n, past) => (n === 1 ? (past ? '昨天' : '明天') : `${n} 天`),\n  week: (n, past) => (n === 1 ? (past ? '上週' : '下週') : `${n} 週`),\n  hour: (n) => `${n} 小時`,\n  minute: (n) => `${n} 分鐘`,\n  second: (n) => `${n} 秒`,\n  invalid: '',\n}\n\n/**\n * Default messages for Japanese language\n */\nexport const JAPANESE_MESSAGES: TimeAgoMessages<TimeAgoUnitNamesDefault> = {\n  justNow: 'たった今',\n  past: (n) => (n.match(/\\d/) ? `${n}前` : n),\n  future: (n) => (n.match(/\\d/) ? `${n}後` : n),\n  month: (n, past) => (n === 1 ? (past ? '先月' : '来月') : `${n} ヶ月`),\n  year: (n, past) => (n === 1 ? (past ? '去年' : '来年') : `${n} 年`),\n  day: (n, past) => (n === 1 ? (past ? '昨日' : '明日') : `${n} 日`),\n  week: (n, past) => (n === 1 ? (past ? '先週' : '来週') : `${n} 週間`),\n  hour: (n) => `${n} 時間`,\n  minute: (n) => `${n} 分`,\n  second: (n) => `${n} 秒`,\n  invalid: '',\n}\n\n/**\n * Default messages for English language\n */\nexport const ENGLISH_MESSAGES: TimeAgoMessages<TimeAgoUnitNamesDefault> = DEFAULT_MESSAGES\n"],"names":["CHINESE_MESSAGES","CHINESE_TRADITIONAL_MESSAGES","ENGLISH_MESSAGES","JAPANESE_MESSAGES","formatTimeAgo","useTimeAgo","time","options","exposeControls","controls","updateInterval","restOptions","timeValue","unwrapGettable","useNow","interval","now","timeAgo","useCreation","Date","normalizeDate","max","showSecond","units","rounding","justNow","past","n","match","future","month","year","day","week","hour","minute","second","invalid","DEFAULT_MESSAGES"],"mappings":"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"}