vuetify
Version:
Vue Material Component Framework
1 lines • 31.5 kB
Source Map (JSON)
{"version":3,"file":"timestamp.mjs","names":["isLeapYear","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","DAYS_IN_MONTH_MIN","DAYS_IN_MONTH_MAX","MONTH_MAX","MONTH_MIN","DAY_MIN","DAYS_IN_WEEK","MINUTES_IN_HOUR","MINUTE_MAX","MINUTES_IN_DAY","HOURS_IN_DAY","HOUR_MAX","FIRST_HOUR","OFFSET_YEAR","OFFSET_MONTH","OFFSET_HOUR","OFFSET_TIME","getStartOfWeek","timestamp","weekdays","today","start","copyTimestamp","findWeekday","prevDay","updateFormatted","updateRelative","hasTime","getEndOfWeek","end","length","getStartOfMonth","day","updateWeekday","getEndOfMonth","daysInMonth","year","month","validateTime","input","isFinite","exec","hour","minute","parseTime","parts","parseInt","validateTimestamp","Date","parseTimestamp","required","arguments","undefined","now","date","parseDate","Error","time","weekday","hasDay","past","present","future","getFullYear","getMonth","getDate","getDay","getHours","getMinutes","getDayIdentifier","getTimeIdentifier","getTimestampIdentifier","a","b","isTimedless","updateHasTime","getTime","updateMinutes","minutes","Math","floor","getWeekday","_","k","m","C","Y","padNumber","x","padded","String","str","nextMinutes","nextDay","relativeDays","mover","days","diffMinutes","min","max","M","D","h","maxDays","getWeekdaySkips","skips","filled","i","skip","j","next","timestampToDate","createDayList","weekdaySkips","stop","current","currentIdentifier","stopped","push","createIntervalList","first","count","intervals","mins","int","createNativeLocaleFormatter","locale","getOptions","emptyFormatter","_t","_s","Intl","DateTimeFormat","short","intlFormatter","format","e"],"sources":["../../../../src/components/VCalendar/util/timestamp.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable */\n\nimport { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n"],"mappings":"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"}