{"version":3,"file":"date.mjs","names":[],"sources":["../../src/date.ts"],"sourcesContent":["const MILLISECONDS_IN_DAY = 86400000;\n\n/**\n *\n */\nexport function dateTo12HourTime(date: Date): string {\n  if (!date) {\n    return '';\n  }\n  return date.toLocaleString('en-US', {\n    hour: '2-digit',\n    minute: 'numeric',\n    hour12: true,\n  });\n}\n\n/**\n *\n */\nexport function differenceInCalendarDays(a: Date, b: Date, { absolute = true } = {}): number {\n  if (!a || !b) {\n    return 0;\n  }\n  const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n  const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n  const diff = Math.floor((utcB - utcA) / MILLISECONDS_IN_DAY);\n  return absolute ? Math.abs(diff) : diff;\n}\n\n/**\n *\n */\nexport function normalizeDate(d: Date | string | number): Date {\n  try {\n    return new Date(d || new Date());\n  } catch {\n    return new Date();\n  }\n}\n\ntype DateFormatRelativeParams = {\n  date: Date | string | number;\n  relativeTo: Date | string | number;\n};\n\nexport type RelativeDateCase = 'previous6Days' | 'lastDay' | 'sameDay' | 'nextDay' | 'next6Days' | 'other';\ntype RelativeDateReturn = { relativeDateCase: RelativeDateCase; date: Date } | null;\n\n/**\n *\n */\nexport function formatRelative(props: DateFormatRelativeParams): RelativeDateReturn {\n  const { date, relativeTo } = props;\n  if (!date || !relativeTo) {\n    return null;\n  }\n  const a = normalizeDate(date);\n  const b = normalizeDate(relativeTo);\n  const differenceInDays = differenceInCalendarDays(b, a, { absolute: false });\n\n  if (differenceInDays < -6) {\n    return { relativeDateCase: 'other', date: a };\n  }\n  if (differenceInDays < -1) {\n    return { relativeDateCase: 'previous6Days', date: a };\n  }\n  if (differenceInDays === -1) {\n    return { relativeDateCase: 'lastDay', date: a };\n  }\n  if (differenceInDays === 0) {\n    return { relativeDateCase: 'sameDay', date: a };\n  }\n  if (differenceInDays === 1) {\n    return { relativeDateCase: 'nextDay', date: a };\n  }\n  if (differenceInDays < 7) {\n    return { relativeDateCase: 'next6Days', date: a };\n  }\n  return { relativeDateCase: 'other', date: a };\n}\n\n/**\n *\n */\nexport function addYears(initialDate: Date | number | string, yearsToAdd: number): Date {\n  const date = normalizeDate(initialDate);\n  date.setFullYear(date.getFullYear() + yearsToAdd);\n  return date;\n}\n"],"mappings":";AAAA,MAAM,sBAAsB;;;;AAK5B,SAAgB,iBAAiB,MAAoB;AACnD,KAAI,CAAC,KACH,QAAO;AAET,QAAO,KAAK,eAAe,SAAS;EAClC,MAAM;EACN,QAAQ;EACR,QAAQ;EACT,CAAC;;;;;AAMJ,SAAgB,yBAAyB,GAAS,GAAS,EAAE,WAAW,SAAS,EAAE,EAAU;AAC3F,KAAI,CAAC,KAAK,CAAC,EACT,QAAO;CAET,MAAM,OAAO,KAAK,IAAI,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC;CACjE,MAAM,OAAO,KAAK,IAAI,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC;CACjE,MAAM,OAAO,KAAK,OAAO,OAAO,QAAQ,oBAAoB;AAC5D,QAAO,WAAW,KAAK,IAAI,KAAK,GAAG;;;;;AAMrC,SAAgB,cAAc,GAAiC;AAC7D,KAAI;AACF,SAAO,IAAI,KAAK,qBAAK,IAAI,MAAM,CAAC;SAC1B;AACN,yBAAO,IAAI,MAAM;;;;;;AAerB,SAAgB,eAAe,OAAqD;CAClF,MAAM,EAAE,MAAM,eAAe;AAC7B,KAAI,CAAC,QAAQ,CAAC,WACZ,QAAO;CAET,MAAM,IAAI,cAAc,KAAK;CAE7B,MAAM,mBAAmB,yBADf,cAAc,WAAW,EACkB,GAAG,EAAE,UAAU,OAAO,CAAC;AAE5E,KAAI,mBAAmB,GACrB,QAAO;EAAE,kBAAkB;EAAS,MAAM;EAAG;AAE/C,KAAI,mBAAmB,GACrB,QAAO;EAAE,kBAAkB;EAAiB,MAAM;EAAG;AAEvD,KAAI,qBAAqB,GACvB,QAAO;EAAE,kBAAkB;EAAW,MAAM;EAAG;AAEjD,KAAI,qBAAqB,EACvB,QAAO;EAAE,kBAAkB;EAAW,MAAM;EAAG;AAEjD,KAAI,qBAAqB,EACvB,QAAO;EAAE,kBAAkB;EAAW,MAAM;EAAG;AAEjD,KAAI,mBAAmB,EACrB,QAAO;EAAE,kBAAkB;EAAa,MAAM;EAAG;AAEnD,QAAO;EAAE,kBAAkB;EAAS,MAAM;EAAG;;;;;AAM/C,SAAgB,SAAS,aAAqC,YAA0B;CACtF,MAAM,OAAO,cAAc,YAAY;AACvC,MAAK,YAAY,KAAK,aAAa,GAAG,WAAW;AACjD,QAAO"}