{"version":3,"sources":["../../../src/utils/date.ts","../../../src/hooks/date-range/presets.ts","../../../src/hooks/date-range/utils.ts","../../../src/hooks/date-range/useDateRange.ts"],"names":["startOfDay","date","newDate","endOfDay","addDays","days","result","startOfMonth","endOfMonth","daysBetween","start","end","getTodayRange","today","getYesterdayRange","yesterday","getLast7DaysRange","getLast30DaysRange","getThisMonthRange","getLastMonthRange","lastMonth","parseDate","value","format","timestamp","serializeDate","isValidRange","minDate","maxDate","maxDays","PRESETS","useDateRange","options","defaultPreset","startKey","endKey","presetKey","history","scroll","shallow","state","setState","useQueryStates","parseAsString","parseAsStringLiteral","startDate","useMemo","endDate","preset","isValid","daysDifference","setStartDate","useCallback","setEndDate","setRange","setPreset","newPreset","range","clearRange","presets"],"mappings":"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","file":"index.cjs","sourcesContent":["export function startOfDay(date: Date): Date {\n  const newDate = new Date(date)\n  newDate.setHours(0, 0, 0, 0)\n  return newDate\n}\n\nexport function endOfDay(date: Date): Date {\n  const newDate = new Date(date)\n  newDate.setHours(23, 59, 59, 999)\n  return newDate\n}\n\nexport function addDays(date: Date, days: number): Date {\n  const result = new Date(date)\n  result.setDate(result.getDate() + days)\n  return result\n}\n\nexport function startOfMonth(date: Date): Date {\n  return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nexport function endOfMonth(date: Date): Date {\n  return new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59, 999)\n}\n\nexport function daysBetween(start: Date, end: Date): number {\n  const msPerDay = 24 * 60 * 60 * 1000\n  return Math.round(Math.abs((end.getTime() - start.getTime()) / msPerDay))\n}\n","import { addDays, endOfDay, endOfMonth, startOfDay, startOfMonth } from '../../utils/date'\n\nexport function getTodayRange(): [Date, Date] {\n  const today = new Date()\n  return [startOfDay(today), endOfDay(today)]\n}\n\nexport function getYesterdayRange(): [Date, Date] {\n  const yesterday = addDays(new Date(), -1)\n  return [startOfDay(yesterday), endOfDay(yesterday)]\n}\n\nexport function getLast7DaysRange(): [Date, Date] {\n  const end = new Date()\n  const start = addDays(end, -6)\n  return [startOfDay(start), endOfDay(end)]\n}\n\nexport function getLast30DaysRange(): [Date, Date] {\n  const end = new Date()\n  const start = addDays(end, -29)\n  return [startOfDay(start), endOfDay(end)]\n}\n\nexport function getThisMonthRange(): [Date, Date] {\n  const today = new Date()\n  return [startOfMonth(today), endOfMonth(today)]\n}\n\nexport function getLastMonthRange(): [Date, Date] {\n  const today = new Date()\n  const lastMonth = new Date(today.getFullYear(), today.getMonth() - 1, 1)\n  return [startOfMonth(lastMonth), endOfMonth(lastMonth)]\n}\n","import type { DateFormat } from './types'\n\nexport function parseDate(value: string | null, format: DateFormat): Date | null {\n  if (!value) return null\n\n  if (format === 'timestamp') {\n    const timestamp = Number(value)\n    if (Number.isNaN(timestamp)) return null\n    return new Date(timestamp)\n  }\n\n  const date = new Date(value)\n  return Number.isNaN(date.getTime()) ? null : date\n}\n\nexport function serializeDate(date: Date | null, format: DateFormat): string | null {\n  if (!date) return null\n\n  if (format === 'timestamp') {\n    return String(date.getTime())\n  }\n\n  return date.toISOString()\n}\n\nexport function isValidRange(\n  start: Date | null,\n  end: Date | null,\n  minDate?: Date,\n  maxDate?: Date,\n  maxDays?: number\n): boolean {\n  if (!start || !end) return false\n  if (start > end) return false\n  if (minDate && start < minDate) return false\n  if (maxDate && end > maxDate) return false\n\n  if (maxDays !== undefined) {\n    const daysDiff = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))\n    if (daysDiff > maxDays) return false\n  }\n\n  return true\n}\n","import { parseAsString, parseAsStringLiteral, useQueryStates } from 'nuqs'\nimport { useCallback, useMemo } from 'react'\nimport { daysBetween } from '../../utils/date'\nimport {\n  getLast7DaysRange,\n  getLast30DaysRange,\n  getLastMonthRange,\n  getThisMonthRange,\n  getTodayRange,\n  getYesterdayRange,\n} from './presets'\nimport type { DatePreset, UseDateRangeOptions, UseDateRangeResult } from './types'\nimport { isValidRange, parseDate, serializeDate } from './utils'\n\nconst PRESETS = [\n  'today',\n  'yesterday',\n  'last7days',\n  'last30days',\n  'thisMonth',\n  'lastMonth',\n  'custom',\n] as const\n\nexport function useDateRange(options: UseDateRangeOptions = {}): UseDateRangeResult {\n  const {\n    defaultPreset = 'last7days',\n    minDate,\n    maxDate,\n    maxDays,\n    startKey = 'from',\n    endKey = 'to',\n    presetKey = 'range',\n    format = 'iso',\n    history = 'replace',\n    scroll = false,\n    shallow = true,\n  } = options\n\n  const [state, setState] = useQueryStates(\n    {\n      [startKey]: parseAsString,\n      [endKey]: parseAsString,\n      [presetKey]: parseAsStringLiteral(PRESETS).withDefault(defaultPreset),\n    },\n    {\n      history,\n      scroll,\n      shallow,\n    }\n  )\n\n  const startDate = useMemo(\n    () => parseDate(state[startKey] ?? null, format),\n    [state, startKey, format]\n  )\n\n  const endDate = useMemo(() => parseDate(state[endKey] ?? null, format), [state, endKey, format])\n\n  const preset = (state[presetKey] ?? defaultPreset) as DatePreset\n\n  const isValid = useMemo(\n    () => isValidRange(startDate, endDate, minDate, maxDate, maxDays),\n    [startDate, endDate, minDate, maxDate, maxDays]\n  )\n\n  const daysDifference = useMemo(() => {\n    if (!startDate || !endDate) return 0\n    return daysBetween(startDate, endDate)\n  }, [startDate, endDate])\n\n  const setStartDate = useCallback(\n    (date: Date | null) => {\n      setState({\n        [startKey]: serializeDate(date, format),\n        [presetKey]: 'custom',\n      })\n    },\n    [setState, startKey, presetKey, format]\n  )\n\n  const setEndDate = useCallback(\n    (date: Date | null) => {\n      setState({\n        [endKey]: serializeDate(date, format),\n        [presetKey]: 'custom',\n      })\n    },\n    [setState, endKey, presetKey, format]\n  )\n\n  const setRange = useCallback(\n    (start: Date, end: Date) => {\n      setState({\n        [startKey]: serializeDate(start, format),\n        [endKey]: serializeDate(end, format),\n        [presetKey]: 'custom',\n      })\n    },\n    [setState, startKey, endKey, presetKey, format]\n  )\n\n  const setPreset = useCallback(\n    (newPreset: DatePreset) => {\n      let range: [Date, Date] | null = null\n\n      switch (newPreset) {\n        case 'today':\n          range = getTodayRange()\n          break\n        case 'yesterday':\n          range = getYesterdayRange()\n          break\n        case 'last7days':\n          range = getLast7DaysRange()\n          break\n        case 'last30days':\n          range = getLast30DaysRange()\n          break\n        case 'thisMonth':\n          range = getThisMonthRange()\n          break\n        case 'lastMonth':\n          range = getLastMonthRange()\n          break\n        case 'custom':\n          setState({ [presetKey]: 'custom' })\n          return\n      }\n\n      if (range) {\n        setState({\n          [startKey]: serializeDate(range[0], format),\n          [endKey]: serializeDate(range[1], format),\n          [presetKey]: newPreset,\n        })\n      }\n    },\n    [setState, startKey, endKey, presetKey, format]\n  )\n\n  const clearRange = useCallback(() => {\n    setState({\n      [startKey]: null,\n      [endKey]: null,\n      [presetKey]: null,\n    })\n  }, [setState, startKey, endKey, presetKey])\n\n  const presets = useMemo(\n    () => ({\n      today: () => setPreset('today'),\n      yesterday: () => setPreset('yesterday'),\n      last7days: () => setPreset('last7days'),\n      last30days: () => setPreset('last30days'),\n      thisMonth: () => setPreset('thisMonth'),\n      lastMonth: () => setPreset('lastMonth'),\n      custom: () => setPreset('custom'),\n    }),\n    [setPreset]\n  )\n\n  return {\n    startDate,\n    endDate,\n    preset,\n    isValid,\n    daysDifference,\n    setStartDate,\n    setEndDate,\n    setRange,\n    setPreset,\n    clearRange,\n    presets,\n    isPending: false,\n  }\n}\n"]}