{"version":3,"file":"get-day-time-intervals.cjs","names":["clampIntervalMinutes","parseTimeString","toTimeString"],"sources":["../../../src/utils/get-day-time-intervals/get-day-time-intervals.ts"],"sourcesContent":["import { clampIntervalMinutes } from '../clamp-interval-minutes/clamp-interval-minutes';\nimport { parseTimeString } from '../parse-time-string/parse-time-string';\nimport { toTimeString } from '../to-time-string/to-time-string';\n\nexport interface DayTimeInterval {\n  /** Start time of the interval in HH:mm:ss format */\n  startTime: string;\n\n  /** End time of the interval in HH:mm:ss format */\n  endTime: string;\n\n  /** Duration of the interval in seconds */\n  duration: number;\n\n  /** Indicates if the interval starts at the beginning of an hour */\n  isHourStart: boolean;\n}\n\nexport interface GetDayTimeIntervalsInput {\n  /** Start time in HH:mm:ss format */\n  startTime: string;\n\n  /** End time in HH:mm:ss format, end of the day by default */\n  endTime?: string;\n\n  /** Interval in minutes, 60 by default */\n  intervalMinutes?: number;\n}\n\nexport function getDayTimeIntervals({\n  startTime,\n  endTime,\n  intervalMinutes: _intervalMinutes = 60,\n}: GetDayTimeIntervalsInput): DayTimeInterval[] {\n  const intervalMinutes = clampIntervalMinutes(_intervalMinutes);\n\n  const start = parseTimeString(startTime);\n  const end = endTime ? parseTimeString(endTime) : { hours: 23, minutes: 59, seconds: 59 };\n\n  const startSeconds = start.hours * 3600 + start.minutes * 60 + start.seconds;\n  const endSeconds = end.hours * 3600 + end.minutes * 60 + end.seconds;\n  const intervalSeconds = intervalMinutes * 60;\n\n  const intervals: DayTimeInterval[] = [];\n  let currentSeconds = startSeconds;\n\n  while (currentSeconds < endSeconds) {\n    const intervalStartSeconds = currentSeconds;\n    let intervalEndSeconds = currentSeconds + intervalSeconds;\n\n    if (intervalEndSeconds > endSeconds) {\n      intervalEndSeconds = endSeconds;\n    }\n\n    const startHours = Math.floor(intervalStartSeconds / 3600);\n    const startMinutes = Math.floor((intervalStartSeconds % 3600) / 60);\n    const startSecs = intervalStartSeconds % 60;\n\n    const endHours = Math.floor(intervalEndSeconds / 3600);\n    const endMinutes = Math.floor((intervalEndSeconds % 3600) / 60);\n    const endSecs = intervalEndSeconds % 60;\n\n    const durationSeconds = intervalEndSeconds - intervalStartSeconds;\n    const isHourStart = startMinutes === 0 && startSecs === 0;\n\n    intervals.push({\n      startTime: toTimeString({ hours: startHours, minutes: startMinutes, seconds: startSecs }),\n      endTime: toTimeString({ hours: endHours, minutes: endMinutes, seconds: endSecs }),\n      duration: durationSeconds,\n      isHourStart,\n    });\n\n    currentSeconds = intervalEndSeconds;\n  }\n\n  return intervals;\n}\n"],"mappings":";;;;;AA6BA,SAAgB,oBAAoB,EAClC,WACA,SACA,iBAAiB,mBAAmB,MACU;CAC9C,MAAM,kBAAkBA,+BAAAA,qBAAqB,gBAAgB;CAE7D,MAAM,QAAQC,0BAAAA,gBAAgB,SAAS;CACvC,MAAM,MAAM,UAAUA,0BAAAA,gBAAgB,OAAO,IAAI;EAAE,OAAO;EAAI,SAAS;EAAI,SAAS;CAAG;CAEvF,MAAM,eAAe,MAAM,QAAQ,OAAO,MAAM,UAAU,KAAK,MAAM;CACrE,MAAM,aAAa,IAAI,QAAQ,OAAO,IAAI,UAAU,KAAK,IAAI;CAC7D,MAAM,kBAAkB,kBAAkB;CAE1C,MAAM,YAA+B,CAAC;CACtC,IAAI,iBAAiB;CAErB,OAAO,iBAAiB,YAAY;EAClC,MAAM,uBAAuB;EAC7B,IAAI,qBAAqB,iBAAiB;EAE1C,IAAI,qBAAqB,YACvB,qBAAqB;EAGvB,MAAM,aAAa,KAAK,MAAM,uBAAuB,IAAI;EACzD,MAAM,eAAe,KAAK,MAAO,uBAAuB,OAAQ,EAAE;EAClE,MAAM,YAAY,uBAAuB;EAEzC,MAAM,WAAW,KAAK,MAAM,qBAAqB,IAAI;EACrD,MAAM,aAAa,KAAK,MAAO,qBAAqB,OAAQ,EAAE;EAC9D,MAAM,UAAU,qBAAqB;EAErC,MAAM,kBAAkB,qBAAqB;EAC7C,MAAM,cAAc,iBAAiB,KAAK,cAAc;EAExD,UAAU,KAAK;GACb,WAAWC,uBAAAA,aAAa;IAAE,OAAO;IAAY,SAAS;IAAc,SAAS;GAAU,CAAC;GACxF,SAASA,uBAAAA,aAAa;IAAE,OAAO;IAAU,SAAS;IAAY,SAAS;GAAQ,CAAC;GAChF,UAAU;GACV;EACF,CAAC;EAED,iBAAiB;CACnB;CAEA,OAAO;AACT"}