{"version":3,"sources":["webpack:///../../../src/components/VAlert/VAlert.ts","webpack:///../../../src/components/VCounter/VCounter.ts","webpack:///../../../src/components/VCounter/index.ts","webpack:///../../../src/components/VChip/index.ts","webpack:///../../../src/components/VAvatar/VAvatar.ts","webpack:///../../../src/components/VCard/index.ts","webpack:///../../../src/components/VCheckbox/VSimpleCheckbox.ts","webpack:///../../../src/components/VCheckbox/VCheckbox.ts","webpack:///../../../src/components/VBtn/index.ts","webpack:///../../../src/components/VAutocomplete/VAutocomplete.ts","webpack:///../../../src/components/VChip/VChip.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts"],"names":["mixins","VSheet","Toggleable","Transitionable","extend","name","props","border","type","String","validator","val","includes","closeLabel","default","coloredBorder","Boolean","dense","dismissible","closeIcon","icon","outlined","prominent","text","value","computed","__cachedBorder","this","data","staticClass","class","setBackgroundColor","computedColor","$createElement","__cachedDismissible","color","iconColor","VBtn","small","attrs","$vuetify","lang","t","on","click","isActive","VIcon","__cachedIcon","computedIcon","classes","options","call","hasColoredIcon","hasText","undefined","isDark","Themeable","created","$attrs","hasOwnProperty","breaking","methods","genWrapper","children","$slots","prepend","genContent","append","$scopedSlots","close","toggle","genAlert","role","listeners$","style","styles","directives","setColor","setTextColor","render","h","transition","origin","mode","functional","Number","max","ctx","parseInt","content","isGreater","functionalThemeClasses","VCounter","VChip","Colorable","Measurable","Roundable","left","right","size","roundedClasses","height","convertToUnit","minWidth","width","measurableStyles","$listeners","VCardActions","createSimpleFunctional","VCardSubtitle","VCardText","VCardTitle","VCard","Vue","Ripple","disabled","ripple","indeterminate","indeterminateIcon","onIcon","offIcon","listeners","push","dark","light","def","center","mergeData","e","stopPropagation","input","wrapInArray","forEach","f","Selectable","inputIndeterminate","VInput","validationState","isDisabled","hasError","shouldValidate","hasSuccess","hasColor","watch","$nextTick","$emit","genCheckbox","title","checkboxAttrs","attrs$","genInput","toString","genRipple","rippleState","genDefaultSlot","genLabel","defaultMenuProps","VSelectMenuProps","offsetY","offsetOverflow","VSelect","allowOverflow","autoSelectFirst","filter","Function","item","queryText","itemText","toLocaleLowerCase","indexOf","hideNoData","menuProps","noFilter","searchInput","lazySearch","selectedIndex","computedItems","filteredItems","selectedValues","selectedItems","map","getValue","hasDisplayedItems","hideSelected","some","hasItem","length","currentRange","selectedItem","getText","isSearching","internalSearch","allItems","getPropertyFromItem","get","set","isAnyValueAllowed","isDirty","searchIsDirty","multiple","menuCanShow","isFocused","$_menuProps","contentClass","trim","find","i","valueComparator","internalValue","listData","items","virtualizedItems","document","addEventListener","onCopy","$refs","select","removeEventListener","blur","updateSelf","isMenuActive","hasSlot","oldVal","activateMenu","setSearch","destroyed","onFilteredItemsChanged","preSelectedItem","menu","listIndex","setMenuIndex","findIndex","getTiles","onInternalSearchChanged","updateMenuDimensions","updateDimensions","changeSelectedIndex","keyCode","keyCodes","backspace","delete","deleteCurrentItem","curIndex","curItem","isInteractive","getDisabled","lastIndex","nextIndex","nextItem","selectItem","setValue","clearableCallback","VTextField","getObjectValueByPath","autocomplete","domProps","genInputSlot","slot","genSelections","onClick","onFocus","isAppendInner","target","onInput","badInput","validity","onKeyDown","ctrlKey","home","end","onSpaceDown","onTabDown","onUpDown","preventDefault","setSelectedItems","event","currentItem","currentItemText","clipboardData","_a","setData","_b","Sizeable","Routable","GroupableFactory","ToggleableFactory","active","activeClass","chipGroup","draggable","filterIcon","label","link","pill","tag","textColor","proxyClass","isClickable","isLink","hasClose","themeClasses","sizeableClasses","groupClasses","breakingProps","original","replacement","genFilter","VExpandXTransition","genClose","generateRouteLink","tabindex","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","daysInMonth","year","month","isLeapYear"],"mappings":"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","file":"js/chunk-732db92a.531acc58.js","sourcesContent":["// Styles\nimport './VAlert.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\nimport Transitionable from '../../mixins/transitionable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNodeData } from 'vue'\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(\n VSheet,\n Toggleable,\n Transitionable\n).extend({\n name: 'v-alert',\n\n props: {\n border: {\n type: String,\n validator (val: string) {\n return [\n 'top',\n 'right',\n 'bottom',\n 'left',\n ].includes(val)\n },\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n coloredBorder: Boolean,\n dense: Boolean,\n dismissible: Boolean,\n closeIcon: {\n type: String,\n default: '$cancel',\n },\n icon: {\n default: '',\n type: [Boolean, String],\n validator (val: boolean | string) {\n return typeof val === 'string' || val === false\n },\n },\n outlined: Boolean,\n prominent: Boolean,\n text: Boolean,\n type: {\n type: String,\n validator (val: string) {\n return [\n 'info',\n 'error',\n 'success',\n 'warning',\n ].includes(val)\n },\n },\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n computed: {\n __cachedBorder (): VNode | null {\n if (!this.border) return null\n\n let data: VNodeData = {\n staticClass: 'v-alert__border',\n class: {\n [`v-alert__border--${this.border}`]: true,\n },\n }\n\n if (this.coloredBorder) {\n data = this.setBackgroundColor(this.computedColor, data)\n data.class['v-alert__border--has-color'] = true\n }\n\n return this.$createElement('div', data)\n },\n __cachedDismissible (): VNode | null {\n if (!this.dismissible) return null\n\n const color = this.iconColor\n\n return this.$createElement(VBtn, {\n staticClass: 'v-alert__dismissible',\n props: {\n color,\n icon: true,\n small: true,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: () => (this.isActive = false),\n },\n }, [\n this.$createElement(VIcon, {\n props: { color },\n }, this.closeIcon),\n ])\n },\n __cachedIcon (): VNode | null {\n if (!this.computedIcon) return null\n\n return this.$createElement(VIcon, {\n staticClass: 'v-alert__icon',\n props: { color: this.iconColor },\n }, this.computedIcon)\n },\n classes (): object {\n const classes: Record = {\n ...VSheet.options.computed.classes.call(this),\n 'v-alert--border': Boolean(this.border),\n 'v-alert--dense': this.dense,\n 'v-alert--outlined': this.outlined,\n 'v-alert--prominent': this.prominent,\n 'v-alert--text': this.text,\n }\n\n if (this.border) {\n classes[`v-alert--border-${this.border}`] = true\n }\n\n return classes\n },\n computedColor (): string {\n return this.color || this.type\n },\n computedIcon (): string | boolean {\n if (this.icon === false) return false\n if (typeof this.icon === 'string' && this.icon) return this.icon\n if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false\n\n return `$${this.type}`\n },\n hasColoredIcon (): boolean {\n return (\n this.hasText ||\n (Boolean(this.border) && this.coloredBorder)\n )\n },\n hasText (): boolean {\n return this.text || this.outlined\n },\n iconColor (): string | undefined {\n return this.hasColoredIcon ? this.computedColor : undefined\n },\n isDark (): boolean {\n if (\n this.type &&\n !this.coloredBorder &&\n !this.outlined\n ) return true\n\n return Themeable.options.computed.isDark.call(this)\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('outline')) {\n breaking('outline', 'outlined', this)\n }\n },\n\n methods: {\n genWrapper (): VNode {\n const children = [\n this.$slots.prepend || this.__cachedIcon,\n this.genContent(),\n this.__cachedBorder,\n this.$slots.append,\n this.$scopedSlots.close\n ? this.$scopedSlots.close({ toggle: this.toggle })\n : this.__cachedDismissible,\n ]\n\n const data: VNodeData = {\n staticClass: 'v-alert__wrapper',\n }\n\n return this.$createElement('div', data, children)\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-alert__content',\n }, this.$slots.default)\n },\n genAlert (): VNode {\n let data: VNodeData = {\n staticClass: 'v-alert',\n attrs: {\n role: 'alert',\n },\n on: this.listeners$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n if (!this.coloredBorder) {\n const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor\n data = setColor(this.computedColor, data)\n }\n\n return this.$createElement('div', data, [this.genWrapper()])\n },\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n },\n\n render (h): VNode {\n const render = this.genAlert()\n\n if (!this.transition) return render\n\n return h('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n },\n }, [render])\n },\n})\n","// Styles\nimport './VCounter.sass'\n\n// Mixins\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n name: 'v-counter',\n\n functional: true,\n\n props: {\n value: {\n type: [Number, String],\n default: '',\n },\n max: [Number, String],\n },\n\n render (h, ctx): VNode {\n const { props } = ctx\n const max = parseInt(props.max, 10)\n const value = parseInt(props.value, 10)\n const content = max ? `${value} / ${max}` : String(props.value)\n const isGreater = max && (value > max)\n\n return h('div', {\n staticClass: 'v-counter',\n class: {\n 'error--text': isGreater,\n ...functionalThemeClasses(ctx),\n },\n }, content)\n },\n})\n","import VCounter from './VCounter'\n\nexport { VCounter }\nexport default VCounter\n","import VChip from './VChip'\n\nexport { VChip }\nexport default VChip\n","import './VAvatar.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Measurable from '../../mixins/measurable'\nimport Roundable from '../../mixins/roundable'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\nexport default mixins(\n Colorable,\n Measurable,\n Roundable,\n /* @vue/component */\n).extend({\n name: 'v-avatar',\n\n props: {\n left: Boolean,\n right: Boolean,\n size: {\n type: [Number, String],\n default: 48,\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-avatar--left': this.left,\n 'v-avatar--right': this.right,\n ...this.roundedClasses,\n }\n },\n styles (): object {\n return {\n height: convertToUnit(this.size),\n minWidth: convertToUnit(this.size),\n width: convertToUnit(this.size),\n ...this.measurableStyles,\n }\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-avatar',\n class: this.classes,\n style: this.styles,\n on: this.$listeners,\n }\n\n return h('div', this.setBackgroundColor(this.color, data), this.$slots.default)\n },\n})\n","import VCard from './VCard'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VCardActions = createSimpleFunctional('v-card__actions')\nconst VCardSubtitle = createSimpleFunctional('v-card__subtitle')\nconst VCardText = createSimpleFunctional('v-card__text')\nconst VCardTitle = createSimpleFunctional('v-card__title')\n\nexport {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n },\n}\n","import './VSimpleCheckbox.sass'\n\nimport Ripple from '../../directives/ripple'\n\nimport Vue, { VNode, VNodeDirective } from 'vue'\nimport { VIcon } from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport { wrapInArray } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'v-simple-checkbox',\n\n functional: true,\n\n directives: {\n Ripple,\n },\n\n props: {\n ...Colorable.options.props,\n ...Themeable.options.props,\n disabled: Boolean,\n ripple: {\n type: Boolean,\n default: true,\n },\n value: Boolean,\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n },\n\n render (h, { props, data, listeners }): VNode {\n const children = []\n let icon = props.offIcon\n if (props.indeterminate) icon = props.indeterminateIcon\n else if (props.value) icon = props.onIcon\n\n children.push(h(VIcon, Colorable.options.methods.setTextColor(props.value && props.color, {\n props: {\n disabled: props.disabled,\n dark: props.dark,\n light: props.light,\n },\n }), icon))\n\n if (props.ripple && !props.disabled) {\n const ripple = h('div', Colorable.options.methods.setTextColor(props.color, {\n staticClass: 'v-input--selection-controls__ripple',\n directives: [{\n def: Ripple,\n name: 'ripple',\n value: { center: true },\n }] as VNodeDirective[],\n }))\n\n children.push(ripple)\n }\n\n return h('div',\n mergeData(data, {\n class: {\n 'v-simple-checkbox': true,\n 'v-simple-checkbox--disabled': props.disabled,\n },\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n\n if (data.on && data.on.input && !props.disabled) {\n wrapInArray(data.on.input).forEach(f => f(!props.value))\n }\n },\n },\n }), [\n h('div', { staticClass: 'v-input--selection-controls__input' }, children),\n ])\n },\n})\n","// Styles\nimport './VCheckbox.sass'\nimport '../../styles/components/_selection-controls.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-checkbox',\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n data () {\n return {\n inputIndeterminate: this.indeterminate,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls': true,\n 'v-input--checkbox': true,\n 'v-input--indeterminate': this.inputIndeterminate,\n }\n },\n computedIcon (): string {\n if (this.inputIndeterminate) {\n return this.indeterminateIcon\n } else if (this.isActive) {\n return this.onIcon\n } else {\n return this.offIcon\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.isDisabled && !this.inputIndeterminate) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n },\n\n watch: {\n indeterminate (val) {\n // https://github.com/vuetifyjs/vuetify/issues/8270\n this.$nextTick(() => (this.inputIndeterminate = val))\n },\n inputIndeterminate (val) {\n this.$emit('update:indeterminate', val)\n },\n isActive () {\n if (!this.indeterminate) return\n this.inputIndeterminate = false\n },\n },\n\n methods: {\n genCheckbox () {\n const { title, ...checkboxAttrs } = this.attrs$\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.dense,\n dark: this.dark,\n light: this.light,\n },\n }), this.computedIcon),\n this.genInput('checkbox', {\n ...checkboxAttrs,\n 'aria-checked': this.inputIndeterminate\n ? 'mixed'\n : this.isActive.toString(),\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n genDefaultSlot () {\n return [\n this.genCheckbox(),\n this.genLabel(),\n ]\n },\n },\n})\n","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","// Styles\nimport './VAutocomplete.sass'\n\n// Extensions\nimport VSelect, { defaultMenuProps as VSelectMenuProps } from '../VSelect/VSelect'\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mergeData from '../../util/mergeData'\nimport {\n getObjectValueByPath,\n getPropertyFromItem,\n keyCodes,\n} from '../../util/helpers'\n\n// Types\nimport { PropType, VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nconst defaultMenuProps = {\n ...VSelectMenuProps,\n offsetY: true,\n offsetOverflow: true,\n transition: false,\n}\n\n/* @vue/component */\nexport default VSelect.extend({\n name: 'v-autocomplete',\n\n props: {\n allowOverflow: {\n type: Boolean,\n default: true,\n },\n autoSelectFirst: {\n type: Boolean,\n default: false,\n },\n filter: {\n type: Function,\n default: (item: any, queryText: string, itemText: string) => {\n return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1\n },\n } as PropValidator<(item: any, queryText: string, itemText: string) => boolean>,\n hideNoData: Boolean,\n menuProps: {\n type: VSelect.options.props.menuProps.type,\n default: () => defaultMenuProps,\n },\n noFilter: Boolean,\n searchInput: {\n type: String as PropType,\n },\n },\n\n data () {\n return {\n lazySearch: this.searchInput,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VSelect.options.computed.classes.call(this),\n 'v-autocomplete': true,\n 'v-autocomplete--is-selecting-index': this.selectedIndex > -1,\n }\n },\n computedItems (): object[] {\n return this.filteredItems\n },\n selectedValues (): object[] {\n return this.selectedItems.map(item => this.getValue(item))\n },\n hasDisplayedItems (): boolean {\n return this.hideSelected\n ? this.filteredItems.some(item => !this.hasItem(item))\n : this.filteredItems.length > 0\n },\n currentRange (): number {\n if (this.selectedItem == null) return 0\n\n return String(this.getText(this.selectedItem)).length\n },\n filteredItems (): object[] {\n if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems\n\n return this.allItems.filter(item => {\n const value = getPropertyFromItem(item, this.itemText)\n const text = value != null ? String(value) : ''\n\n return this.filter(item, String(this.internalSearch), text)\n })\n },\n internalSearch: {\n get (): string | null {\n return this.lazySearch\n },\n set (val: any) { // TODO: this should be `string | null` but it breaks lots of other types\n // emit update event only when the new\n // search value is different from previous\n if (this.lazySearch !== val) {\n this.lazySearch = val\n this.$emit('update:search-input', val)\n }\n },\n },\n isAnyValueAllowed (): boolean {\n return false\n },\n isDirty (): boolean {\n return this.searchIsDirty || this.selectedItems.length > 0\n },\n isSearching (): boolean {\n return (\n this.multiple &&\n this.searchIsDirty\n ) || (\n this.searchIsDirty &&\n this.internalSearch !== this.getText(this.selectedItem)\n )\n },\n menuCanShow (): boolean {\n if (!this.isFocused) return false\n\n return this.hasDisplayedItems || !this.hideNoData\n },\n $_menuProps (): object {\n const props = VSelect.options.computed.$_menuProps.call(this);\n (props as any).contentClass = `v-autocomplete__content ${(props as any).contentClass || ''}`.trim()\n return {\n ...defaultMenuProps,\n ...props,\n }\n },\n searchIsDirty (): boolean {\n return this.internalSearch != null &&\n this.internalSearch !== ''\n },\n selectedItem (): any {\n if (this.multiple) return null\n\n return this.selectedItems.find(i => {\n return this.valueComparator(this.getValue(i), this.getValue(this.internalValue))\n })\n },\n listData () {\n const data = VSelect.options.computed.listData.call(this) as any\n\n data.props = {\n ...data.props,\n items: this.virtualizedItems,\n noFilter: (\n this.noFilter ||\n !this.isSearching ||\n !this.filteredItems.length\n ),\n searchInput: this.internalSearch,\n }\n\n return data\n },\n },\n\n watch: {\n filteredItems: 'onFilteredItemsChanged',\n internalValue: 'setSearch',\n isFocused (val) {\n if (val) {\n document.addEventListener('copy', this.onCopy)\n this.$refs.input && this.$refs.input.select()\n } else {\n document.removeEventListener('copy', this.onCopy)\n this.blur()\n this.updateSelf()\n }\n },\n isMenuActive (val) {\n if (val || !this.hasSlot) return\n\n this.lazySearch = null\n },\n items (val, oldVal) {\n // If we are focused, the menu\n // is not active, hide no data is enabled,\n // and items change\n // User is probably async loading\n // items, try to activate the menu\n if (\n !(oldVal && oldVal.length) &&\n this.hideNoData &&\n this.isFocused &&\n !this.isMenuActive &&\n val.length\n ) this.activateMenu()\n },\n searchInput (val: string) {\n this.lazySearch = val\n },\n internalSearch: 'onInternalSearchChanged',\n itemText: 'updateSelf',\n },\n\n created () {\n this.setSearch()\n },\n\n destroyed () {\n document.removeEventListener('copy', this.onCopy)\n },\n\n methods: {\n onFilteredItemsChanged (val: never[], oldVal: never[]) {\n // TODO: How is the watcher triggered\n // for duplicate items? no idea\n if (val === oldVal) return\n\n if (!this.autoSelectFirst) {\n const preSelectedItem = oldVal[this.$refs.menu.listIndex]\n\n if (preSelectedItem) {\n this.setMenuIndex(val.findIndex(i => i === preSelectedItem))\n } else {\n this.setMenuIndex(-1)\n }\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n\n this.$nextTick(() => {\n if (\n !this.internalSearch ||\n (val.length !== 1 &&\n !this.autoSelectFirst)\n ) return\n\n this.$refs.menu.getTiles()\n\n if (this.autoSelectFirst && val.length) {\n this.setMenuIndex(0)\n this.$emit('update:list-index', this.$refs.menu.listIndex)\n }\n })\n },\n onInternalSearchChanged () {\n this.updateMenuDimensions()\n },\n updateMenuDimensions () {\n // Type from menuable is not making it through\n this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions()\n },\n changeSelectedIndex (keyCode: number) {\n // Do not allow changing of selectedIndex\n // when search is dirty\n if (this.searchIsDirty) return\n\n if (this.multiple && keyCode === keyCodes.left) {\n if (this.selectedIndex === -1) {\n this.selectedIndex = this.selectedItems.length - 1\n } else {\n this.selectedIndex--\n }\n } else if (this.multiple && keyCode === keyCodes.right) {\n if (this.selectedIndex >= this.selectedItems.length - 1) {\n this.selectedIndex = -1\n } else {\n this.selectedIndex++\n }\n } else if (keyCode === keyCodes.backspace || keyCode === keyCodes.delete) {\n this.deleteCurrentItem()\n }\n },\n deleteCurrentItem () {\n const curIndex = this.selectedIndex\n const curItem = this.selectedItems[curIndex]\n\n // Do nothing if input or item is disabled\n if (\n !this.isInteractive ||\n this.getDisabled(curItem)\n ) return\n\n const lastIndex = this.selectedItems.length - 1\n\n // Select the last item if\n // there is no selection\n if (\n this.selectedIndex === -1 &&\n lastIndex !== 0\n ) {\n this.selectedIndex = lastIndex\n\n return\n }\n\n const length = this.selectedItems.length\n const nextIndex = curIndex !== length - 1\n ? curIndex\n : curIndex - 1\n const nextItem = this.selectedItems[nextIndex]\n\n if (!nextItem) {\n this.setValue(this.multiple ? [] : null)\n } else {\n this.selectItem(curItem)\n }\n\n this.selectedIndex = nextIndex\n },\n clearableCallback () {\n this.internalSearch = null\n\n VSelect.options.methods.clearableCallback.call(this)\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.data = mergeData(input.data!, {\n attrs: {\n 'aria-activedescendant': getObjectValueByPath(this.$refs.menu, 'activeTile.id'),\n autocomplete: getObjectValueByPath(input.data!, 'attrs.autocomplete', 'off'),\n },\n domProps: { value: this.internalSearch },\n })\n\n return input\n },\n genInputSlot () {\n const slot = VSelect.options.methods.genInputSlot.call(this)\n\n slot.data!.attrs!.role = 'combobox'\n\n return slot\n },\n genSelections (): VNode | never[] {\n return this.hasSlot || this.multiple\n ? VSelect.options.methods.genSelections.call(this)\n : []\n },\n onClick (e: MouseEvent) {\n if (!this.isInteractive) return\n\n this.selectedIndex > -1\n ? (this.selectedIndex = -1)\n : this.onFocus()\n\n if (!this.isAppendInner(e.target)) this.activateMenu()\n },\n onInput (e: Event) {\n if (\n this.selectedIndex > -1 ||\n !e.target\n ) return\n\n const target = e.target as HTMLInputElement\n const value = target.value\n\n // If typing and menu is not currently active\n if (target.value) this.activateMenu()\n\n if (!this.multiple && value === '') this.deleteCurrentItem()\n\n this.internalSearch = value\n this.badInput = target.validity && target.validity.badInput\n },\n onKeyDown (e: KeyboardEvent) {\n const keyCode = e.keyCode\n\n if (\n e.ctrlKey ||\n ![keyCodes.home, keyCodes.end].includes(keyCode)\n ) {\n VSelect.options.methods.onKeyDown.call(this, e)\n }\n\n // The ordering is important here\n // allows new value to be updated\n // and then moves the index to the\n // proper location\n this.changeSelectedIndex(keyCode)\n },\n onSpaceDown (e: KeyboardEvent) { /* noop */ },\n onTabDown (e: KeyboardEvent) {\n VSelect.options.methods.onTabDown.call(this, e)\n this.updateSelf()\n },\n onUpDown (e: Event) {\n // Prevent screen from scrolling\n e.preventDefault()\n\n // For autocomplete / combobox, cycling\n // interfers with native up/down behavior\n // instead activate the menu\n this.activateMenu()\n },\n selectItem (item: object) {\n VSelect.options.methods.selectItem.call(this, item)\n this.setSearch()\n },\n setSelectedItems () {\n VSelect.options.methods.setSelectedItems.call(this)\n\n // #4273 Don't replace if searching\n // #4403 Don't replace if focused\n if (!this.isFocused) this.setSearch()\n },\n setSearch () {\n // Wait for nextTick so selectedItem\n // has had time to update\n this.$nextTick(() => {\n if (\n !this.multiple ||\n !this.internalSearch ||\n !this.isMenuActive\n ) {\n this.internalSearch = (\n !this.selectedItems.length ||\n this.multiple ||\n this.hasSlot\n )\n ? null\n : this.getText(this.selectedItem)\n }\n })\n },\n updateSelf () {\n if (\n !this.searchIsDirty &&\n !this.internalValue\n ) return\n\n if (\n !this.multiple &&\n !this.valueComparator(\n this.internalSearch,\n this.getValue(this.internalValue)\n )\n ) {\n this.setSearch()\n }\n },\n hasItem (item: any): boolean {\n return this.selectedValues.indexOf(this.getValue(item)) > -1\n },\n onCopy (event: ClipboardEvent) {\n if (this.selectedIndex === -1) return\n\n const currentItem = this.selectedItems[this.selectedIndex]\n const currentItemText = this.getText(currentItem)\n event.clipboardData?.setData('text/plain', currentItemText)\n event.clipboardData?.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText)\n event.preventDefault()\n },\n },\n})\n","// Styles\nimport './VChip.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport { VExpandXTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\nimport { PropValidator, PropType } from 'vue/types/options'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Sizeable,\n Routable,\n Themeable,\n GroupableFactory('chipGroup'),\n ToggleableFactory('inputValue')\n).extend({\n name: 'v-chip',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.chipGroup) return ''\n\n return this.chipGroup.activeClass\n },\n } as any as PropValidator,\n close: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n outlined: Boolean,\n pill: Boolean,\n tag: {\n type: String,\n default: 'span',\n },\n textColor: String,\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-chip--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-chip': true,\n ...Routable.options.computed.classes.call(this),\n 'v-chip--clickable': this.isClickable,\n 'v-chip--disabled': this.disabled,\n 'v-chip--draggable': this.draggable,\n 'v-chip--label': this.label,\n 'v-chip--link': this.isLink,\n 'v-chip--no-color': !this.color,\n 'v-chip--outlined': this.outlined,\n 'v-chip--pill': this.pill,\n 'v-chip--removable': this.hasClose,\n ...this.themeClasses,\n ...this.sizeableClasses,\n ...this.groupClasses,\n }\n },\n hasClose (): boolean {\n return Boolean(this.close)\n },\n isClickable (): boolean {\n return Boolean(\n Routable.options.computed.isClickable.call(this) ||\n this.chipGroup\n )\n },\n },\n\n created () {\n const breakingProps = [\n ['outline', 'outlined'],\n ['selected', 'input-value'],\n ['value', 'active'],\n ['@input', '@active.sync'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n\n this.chipGroup && this.toggle()\n },\n genFilter (): VNode {\n const children = []\n\n if (this.isActive) {\n children.push(\n this.$createElement(VIcon, {\n staticClass: 'v-chip__filter',\n props: { left: true },\n }, this.filterIcon)\n )\n }\n\n return this.$createElement(VExpandXTransition, children)\n },\n genClose (): VNode {\n return this.$createElement(VIcon, {\n staticClass: 'v-chip__close',\n props: {\n right: true,\n size: 18,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n e.preventDefault()\n\n this.$emit('click:close')\n this.$emit('update:active', false)\n },\n },\n }, this.closeIcon)\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-chip__content',\n }, [\n this.filter && this.genFilter(),\n this.$slots.default,\n this.hasClose && this.genClose(),\n ])\n },\n },\n\n render (h): VNode {\n const children = [this.genContent()]\n let { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n draggable: this.draggable ? 'true' : undefined,\n tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs!.tabindex,\n }\n data.directives!.push({\n name: 'show',\n value: this.active,\n })\n data = this.setBackgroundColor(this.color, data)\n\n const color = this.textColor || (this.outlined && this.color)\n\n return h(tag, this.setTextColor(color, data), children)\n },\n})\n","import { 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"],"sourceRoot":""}