{"version":3,"file":"timePicker.utils.cjs","sources":["../../../../../src/components/forms/time-picker/utils/timePicker.utils.ts"],"sourcesContent":["const TIME_REGEX = /^([01]\\d|2[0-3]):([0-5]\\d)$/\n\n/** Returns whether the value is a valid 24-hour `HH:mm` time. */\nexport const isValidTime = (value: string | undefined): value is string =>\n    value !== undefined && TIME_REGEX.test(value)\n\n/**\n * Splits a `HH:mm` time into its hour and minute parts.\n * Returns `undefined` when the value is empty or invalid.\n */\nexport const splitTime = (\n    value: string | undefined,\n): { hour: string; minute: string } | undefined => {\n    if (!isValidTime(value)) {return undefined}\n\n    const [hour, minute] = value.split(':')\n\n    return { hour, minute }\n}\n\n/** Builds a `HH:mm` time from an hour and a minute. */\nexport const joinTime = (hour: string, minute: string): string =>\n    `${hour}:${minute}`\n\nconst pad = (value: number): string => String(value).padStart(2, '0')\n\nconst getSafeStep = (step: number, max: number): number =>\n    Number.isInteger(step) && step >= 1 && step <= max ? step : 1\n\n/**\n * Lists the hours of the day as two-digit strings, every `step` hours.\n * Invalid steps fall back to one hour.\n */\nexport const getHourOptions = (step = 1): string[] => {\n    const safeStep = getSafeStep(step, 24)\n\n    return Array.from(\n        { length: Math.ceil(24 / safeStep) },\n        (_, index) => pad(index * safeStep),\n    )\n}\n\n/**\n * Lists the minutes of an hour as two-digit strings, every `step` minutes.\n * Invalid steps fall back to one minute.\n */\nexport const getMinuteOptions = (step: number): string[] => {\n    const safeStep = getSafeStep(step, 60)\n\n    return Array.from(\n        { length: Math.ceil(60 / safeStep) },\n        (_, index) => pad(index * safeStep),\n    )\n}\n\n/**\n * Returns whether a time sits within the optional `min` and `max` bounds\n * (inclusive). Invalid bounds are ignored.\n */\nexport const isTimeInRange = (\n    time: string,\n    min?: string,\n    max?: string,\n): boolean =>\n    (!isValidTime(min) || time >= min) && (!isValidTime(max) || time <= max)\n\n/** Moves a time to the nearest bound when it falls outside the range. */\nexport const clampTime = (time: string, min?: string, max?: string): string => {\n    if (isValidTime(min) && time < min) {return min}\n    if (isValidTime(max) && time > max) {return max}\n\n    return time\n}\n\n/** Returns the current local time as `HH:mm`. */\nexport const getCurrentTime = (now: Date = new Date()): string =>\n    `${pad(now.getHours())}:${pad(now.getMinutes())}`\r\n"],"names":["TIME_REGEX","isValidTime","value","splitTime","hour","minute","joinTime","pad","getSafeStep","step","max","getHourOptions","safeStep","_","index","getMinuteOptions","isTimeInRange","time","min","clampTime","getCurrentTime","now"],"mappings":"gFAAA,MAAMA,EAAa,8BAGNC,EAAeC,GACxBA,IAAU,QAAaF,EAAW,KAAKE,CAAK,EAMnCC,EACTD,GAC+C,CAC/C,GAAI,CAACD,EAAYC,CAAK,EAAI,OAE1B,KAAM,CAACE,EAAMC,CAAM,EAAIH,EAAM,MAAM,GAAG,EAEtC,MAAO,CAAE,KAAAE,EAAM,OAAAC,CAAA,CACnB,EAGaC,EAAW,CAACF,EAAcC,IACnC,GAAGD,CAAI,IAAIC,CAAM,GAEfE,EAAOL,GAA0B,OAAOA,CAAK,EAAE,SAAS,EAAG,GAAG,EAE9DM,EAAc,CAACC,EAAcC,IAC/B,OAAO,UAAUD,CAAI,GAAKA,GAAQ,GAAKA,GAAQC,EAAMD,EAAO,EAMnDE,EAAiB,CAACF,EAAO,IAAgB,CAClD,MAAMG,EAAWJ,EAAYC,EAAM,EAAE,EAErC,OAAO,MAAM,KACT,CAAE,OAAQ,KAAK,KAAK,GAAKG,CAAQ,CAAA,EACjC,CAACC,EAAGC,IAAUP,EAAIO,EAAQF,CAAQ,CAAA,CAE1C,EAMaG,EAAoBN,GAA2B,CACxD,MAAMG,EAAWJ,EAAYC,EAAM,EAAE,EAErC,OAAO,MAAM,KACT,CAAE,OAAQ,KAAK,KAAK,GAAKG,CAAQ,CAAA,EACjC,CAACC,EAAGC,IAAUP,EAAIO,EAAQF,CAAQ,CAAA,CAE1C,EAMaI,EAAgB,CACzBC,EACAC,EACAR,KAEC,CAACT,EAAYiB,CAAG,GAAKD,GAAQC,KAAS,CAACjB,EAAYS,CAAG,GAAKO,GAAQP,GAG3DS,EAAY,CAACF,EAAcC,EAAcR,IAC9CT,EAAYiB,CAAG,GAAKD,EAAOC,EAAaA,EACxCjB,EAAYS,CAAG,GAAKO,EAAOP,EAAaA,EAErCO,EAIEG,EAAiB,CAACC,EAAY,IAAI,OAC3C,GAAGd,EAAIc,EAAI,SAAA,CAAU,CAAC,IAAId,EAAIc,EAAI,WAAA,CAAY,CAAC"}