{"version":3,"sources":["webpack:///../../../src/components/VWindow/VWindowItem.ts","webpack:///../../../src/components/VToolbar/index.ts","webpack:///./node_modules/core-js/modules/es.math.sign.js","webpack:///../../../src/components/VDatePicker/VDatePickerTitle.ts","webpack:///../../../src/mixins/localable/index.ts","webpack:///../../../../src/components/VDatePicker/util/createNativeLocaleFormatter.ts","webpack:///../../../../src/components/VDatePicker/util/monthChange.ts","webpack:///../../../src/components/VDatePicker/VDatePickerHeader.ts","webpack:///../../../../src/components/VDatePicker/util/eventHelpers.ts","webpack:///../../../../src/components/VDatePicker/util/sanitizeDateString.ts","webpack:///../../../../src/components/VDatePicker/util/isDateAllowed.ts","webpack:///../../../../src/components/VDatePicker/mixins/date-picker-table.ts","webpack:///../../src/util/dateTimeUtils.ts","webpack:///../../../src/components/VDatePicker/VDatePickerDateTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerMonthTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerYears.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts","webpack:///../../../src/components/VDatePicker/VDatePicker.ts","webpack:///../../../src/mixins/validatable/index.ts","webpack:///../../../src/components/VPicker/VPicker.ts","webpack:///../../../src/components/VPicker/index.ts","webpack:///../../../src/mixins/picker/index.ts","webpack:///../../../../src/components/VDatePicker/util/pad.ts","webpack:///../../../src/components/VTabs/VTab.ts","webpack:///../../../src/components/VSlideGroup/VSlideGroup.ts","webpack:///../../../src/components/VGrid/grid.ts","webpack:///../../../src/components/VGrid/VContainer.ts","webpack:///../../../src/components/VTabs/VTabsItems.ts","webpack:///../../../src/components/VBtn/index.ts","webpack:///../../../src/components/VLabel/VLabel.ts","webpack:///../../../src/components/VLabel/index.ts","webpack:///../../../src/components/VMessages/VMessages.ts","webpack:///../../../src/components/VMessages/index.ts","webpack:///../../../src/components/VInput/VInput.ts","webpack:///../../../src/components/VInput/index.ts","webpack:///../../../src/components/VTabs/VTabItem.ts","webpack:///../../../src/mixins/picker-button/index.ts","webpack:///../../../src/components/VSubheader/VSubheader.ts","webpack:///../../../src/components/VWindow/VWindow.ts","webpack:///../../../src/components/VTabs/VTabsBar.ts","webpack:///../../../src/components/VTabs/VTabsSlider.ts","webpack:///../../../src/components/VTabs/VTabs.ts"],"names":["baseMixins","mixins","Bootable","GroupableFactory","extend","name","directives","Touch","props","disabled","Boolean","reverseTransition","type","String","default","undefined","transition","value","required","data","isActive","inTransition","computed","classes","this","groupClasses","computedTransition","windowGroup","internalReverse","methods","genDefaultSlot","getSlot","genWindowItem","$createElement","staticClass","class","on","$listeners","onAfterTransition","transitionCount","transitionHeight","onBeforeTransition","convertToUnit","$el","clientHeight","onTransitionCancelled","onEnter","el","_this","$nextTick","render","h","_this2","beforeEnter","afterEnter","enterCancelled","beforeLeave","afterLeave","leaveCancelled","enter","showLazyContent","VToolbarTitle","createSimpleFunctional","VToolbarItems","VToolbar","$","sign","target","stat","PickerButton","date","readonly","selectingYear","year","Number","yearIcon","isReversing","watch","val","prev","genYearIcon","VIcon","dark","getYearBtn","genPickerButton","genTitleText","domProps","innerHTML","key","genTitleDate","Vue","locale","currentLocale","$vuetify","lang","current","createNativeLocaleFormatter","options","substrOptions","arguments","length","start","makeIsoString","dateString","_dateString$trim$spli","trim","split","_dateString$trim$spli2","_slicedToArray","month","pad","join","intlFormatter","Intl","DateTimeFormat","format","Date","concat","e","substr","_value$split$map","map","_value$split$map2","Colorable","Localable","Themeable","Function","min","max","nextAriaLabel","nextIcon","prevAriaLabel","prevIcon","formatter","timeZone","newVal","oldVal","genBtn","change","ariaLabelId","ariaLabel","t","calculateChange","VBtn","attrs","icon","light","click","stopPropagation","$emit","rtl","_String$split$map","_String$split$map2","monthChange","genHeader","color","header","setTextColor","_objectSpread","themeClasses","createItemTypeNativeListeners","instance","itemTypeSuffix","Object","keys","reduce","eventName","endsWith","slice","event","createItemTypeListeners","_dateString$split","_dateString$split2","_dateString$split2$","_dateString$split2$2","isDateAllowed","allowedFn","allowedDates","events","Array","eventColor","range","scrollable","tableDate","wheelThrottle","displayedMonth","displayedYear","mounted","throttle","wheel","genButtonClasses","isAllowed","isFloating","isSelected","isCurrent","isFirst","isLast","genButtonEvents","mouseEventType","mergeListeners","genButton","isOtherMonth","setColor","setBackgroundColor","isArray","genEvents","getEventColors","eventData","arrayize","v","eventColors","includes","filter","isValidScroll","calculateTableDate","sanitizeType","sanitizeDateString","deltaY","touch","genTable","children","_this3","touchDirective","left","offsetX","right","preventDefault","_sort","_toConsumableArray","sort","_sort2","from","to","indexOf","createUTCDate","day","UTC","isFinite","getUTCFullYear","setUTCFullYear","firstWeekOffset","firstDayOfWeek","firstDayOfYear","firstWeekDayInFirstWeek","firstWeekDayOfYear","getUTCDay","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","weekNumber","localeFirstDayOfYear","week","Math","ceil","DatePickerTable","showAdjacentMonths","showWeek","weekdayFormat","weekdayFormatter","weekday","weekDays","first","parseInt","createRange","i","delta","genTHead","days","unshift","genTR","weekDaysBeforeFirstDayOfTheMonth","firstDayOfTheMonth","weekDay","getWeekNumber","dayInMonth","genWeekNumber","padStart","genTBody","daysInMonth","getDate","rows","push","prevMonthYear","prevMonth","firstDayFromPreviousMonth","cellsInRow","nextMonthYear","nextMonth","nextMonthDay","cols","fill","_loop","row","tds","_","col","defaultColor","setTimeout","activeItem","getElementsByClassName","scrollTop","offsetTop","offsetHeight","scrollHeight","genYearItem","formatted","active","genYearItems","selectedYear","getFullYear","maxYear","minYear","ref","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","Picker","activePicker","dayFormat","headerDateFormat","monthFormat","multiple","nextMonthAriaLabel","nextYearAriaLabel","pickerDate","prevMonthAriaLabel","prevYearAriaLabel","reactive","showCurrent","selectedItemsText","titleDateFormat","validator","yearFormat","now","internalActivePicker","toUpperCase","inputDay","inputMonth","inputYear","multipleValue","wrapInArray","getMonth","isMultiple","lastValue","selectedMonths","inputDate","tableMonth","tableYear","minMonth","maxMonth","formatters","titleDate","defaultTitleMultipleDateFormatter","defaultTitleDateFormatter","dates","titleFormats","titleDateFormatter","landscapeFormatter","replace","match","nonDigit","digit","landscape","immediate","handler","newValue","oldValue","checkMultipleProp","setInputDate","output","created","emitInput","newInput","x","valueType","constructor","expected","consoleWarn","yearClick","monthClick","_value$split","_value$split2","dateClick","_value$split3","_value$split4","genPickerTitle","VDatePickerTitle","slot","genTableHeader","_this4","VDatePickerHeader","toggle","input","genDateTable","_this5","VDatePickerDateTable","genMonthTable","_this6","VDatePickerMonthTable","genYears","VDatePickerYears","genPickerBody","array","genPicker","RegistrableInject","error","errorCount","errorMessages","messages","rules","success","successMessages","validateOnBlur","errorBucket","hasColor","hasFocused","hasInput","isFocused","isResetting","lazyValue","valid","computedColor","isDisabled","isDark","appIsDark","hasError","internalErrorMessages","hasSuccess","internalSuccessMessages","externalError","hasMessages","validationTarget","hasState","shouldValidate","genInternalMessages","internalMessages","internalValue","get","set","_a","form","isInteractive","isReadonly","validations","validationState","deepEqual","validate","deep","beforeMount","register","beforeDestroy","unregister","reset","resetValidation","force","index","rule","consoleError","_typeof","Elevatable","flat","fullWidth","noTitle","width","computedTitleColor","defaultTitleColor","genTitle","genBodyTransition","genBody","style","genActions","elevationClasses","$slots","title","actions","VPicker","headerColor","genPickerActionsSlot","$scopedSlots","save","cancel","body","elevation","string","targetLength","padString","repeat","n","Routable","ripple","tabValue","proxyClass","call","href","$router","resolve","$route","append","detail","blur","tabsBar","mandatory","_this$generateRouteLi","generateRouteLink","tag","role","tabindex","keydown","keyCode","keyCodes","bias","c","abs","calculateUpdatedOffset","selectedElement","widths","currentScrollOffset","clientWidth","offsetLeft","content","totalWidth","wrapper","itemOffset","additionalOffset","calculateCenteredOffset","offsetCentered","BaseSlideGroup","BaseItemGroup","Mobile","Resize","activeClass","centerActive","showArrows","isOverflowing","resizeTimeout","startX","isSwipingHorizontal","isSwiping","scrollOffset","canTouch","window","__cachedNext","genTransition","__cachedPrev","hasAffixes","isMobile","hasNext","_this$widths","hasPrev","scroll","$refs","transform","ResizeObserver","obs","onResize","observe","$on","disconnect","itemsLength","setWidths","onScroll","scrollLeft","onFocusin","_step","_iterator","_createForOfIteratorHelper","composedPath","s","done","_step2","_iterator2","items","vm","err","f","genNext","next","onAffixClick","genContent","focusin","genData","genIcon","location","upperLocation","hasAffix","genPrev","VFadeTransition","genWrapper","overflowCheck","onTouchStart","move","onTouchMove","end","onTouchEnd","calculateNewOffset","direction","newAbosluteOffset","scrollTo","_isDestroyed","touchstartX","setProperty","diffX","touchmoveX","diffY","touchmoveY","touchstartY","document","documentElement","overflowY","_this$$refs","maxScrollOffset","removeProperty","fn","scrollIntoView","selectedItem","lastItemPosition","getBoundingClientRect","wrapperPosition","selectedIndex","requestAnimationFrame","_this5$$refs","provide","slideGroup","VGrid","functional","id","_ref","startsWith","Grid","fluid","mergeData","VWindow","rootIsDark","getValue","item","absolute","focused","for","ctx","listeners","newData","functionalThemeClasses","position","VLabel","genChildren","genMessage","message","VMessages","BindsAttrs","Validatable","inheritAttrs","appendIcon","backgroundColor","dense","height","hideDetails","hideSpinButtons","hint","label","loading","persistentHint","prependIcon","hasMouseDown","showDetails","isLabelActive","isDirty","computedId","_uid","hasDetails","messagesToDisplay","hasHint","hasLabel","$_modelEvent","validation","validationResult","beforeCreate","$options","model","genPrependSlot","genControl","genAppendSlot","attrs$","genInputSlot","genMessages","genLabel","cb","extraData","kebabCase","hasListener","listeners$","localeKey","prepend","prependInner","appendOuter","clear","mouseup","onClick","mousedown","onMouseDown","onMouseUp","scopedSlots","genSlot","VInput","VWindowItem","prop","inset","$attrs","continuous","reverse","showArrowsOnHover","touchless","vertical","changedByDelimiters","internalHeight","isBooted","isReverse","axis","hasActiveItems","find","internalIndex","findIndex","updateReverse","genContainer","genControlIcons","_c","_b","large","icons","getNextIndex","nextIndex","getPrevIndex","prevIndex","lastIndex","SSRBootable","callSlider","onRouteChange","newPath","path","oldPath","hasNew","hasOld","Proxyable","alignWithTitle","centered","fixedTabs","grow","hideSlider","iconsAndText","mobileBreakpoint","optional","sliderColor","sliderSize","slider","top","transitionTime","isReversed","sliderStyles","selectedItems","activeTab","offsetWidth","scrollWidth","genBar","VTabsBar","genSlider","genItems","VTabsItems","VTabsSlider","clearTimeout","parseNodes","tab","vnode","componentOptions","Ctor","_this$parseNodes","modifiers","quiet"],"mappings":"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","file":"js/chunk-079a4340.75c5e5f3.js","sourcesContent":["// Components\nimport VWindow from './VWindow'\n\n// Mixins\nimport Bootable from '../../mixins/bootable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n Bootable,\n GroupableFactory('windowGroup', 'v-window-item', 'v-window')\n)\n\ninterface options extends ExtractVue {\n $el: HTMLElement\n windowGroup: InstanceType\n}\n\nexport default baseMixins.extend().extend(\n /* @vue/component */\n).extend({\n name: 'v-window-item',\n\n directives: {\n Touch,\n },\n\n props: {\n disabled: Boolean,\n reverseTransition: {\n type: [Boolean, String],\n default: undefined,\n },\n transition: {\n type: [Boolean, String],\n default: undefined,\n },\n value: {\n required: false,\n },\n },\n\n data () {\n return {\n isActive: false,\n inTransition: false,\n }\n },\n\n computed: {\n classes (): object {\n return this.groupClasses\n },\n computedTransition (): string | boolean {\n if (!this.windowGroup.internalReverse) {\n return typeof this.transition !== 'undefined'\n ? this.transition || ''\n : this.windowGroup.computedTransition\n }\n\n return typeof this.reverseTransition !== 'undefined'\n ? this.reverseTransition || ''\n : this.windowGroup.computedTransition\n },\n },\n\n methods: {\n genDefaultSlot () {\n return getSlot(this)\n },\n genWindowItem () {\n return this.$createElement('div', {\n staticClass: 'v-window-item',\n class: this.classes,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n on: this.$listeners,\n }, this.genDefaultSlot())\n },\n onAfterTransition () {\n if (!this.inTransition) {\n return\n }\n\n // Finalize transition state.\n this.inTransition = false\n if (this.windowGroup.transitionCount > 0) {\n this.windowGroup.transitionCount--\n\n // Remove container height if we are out of transition.\n if (this.windowGroup.transitionCount === 0) {\n this.windowGroup.transitionHeight = undefined\n }\n }\n },\n onBeforeTransition () {\n if (this.inTransition) {\n return\n }\n\n // Initialize transition state here.\n this.inTransition = true\n if (this.windowGroup.transitionCount === 0) {\n // Set initial height for height transition.\n this.windowGroup.transitionHeight = convertToUnit(this.windowGroup.$el.clientHeight)\n }\n this.windowGroup.transitionCount++\n },\n onTransitionCancelled () {\n this.onAfterTransition() // This should have the same path as normal transition end.\n },\n onEnter (el: HTMLElement) {\n if (!this.inTransition) {\n return\n }\n\n this.$nextTick(() => {\n // Do not set height if no transition or cancelled.\n if (!this.computedTransition || !this.inTransition) {\n return\n }\n\n // Set transition target height.\n this.windowGroup.transitionHeight = convertToUnit(el.clientHeight)\n })\n },\n },\n\n render (h): VNode {\n return h('transition', {\n props: {\n name: this.computedTransition,\n },\n on: {\n // Handlers for enter windows.\n beforeEnter: this.onBeforeTransition,\n afterEnter: this.onAfterTransition,\n enterCancelled: this.onTransitionCancelled,\n\n // Handlers for leave windows.\n beforeLeave: this.onBeforeTransition,\n afterLeave: this.onAfterTransition,\n leaveCancelled: this.onTransitionCancelled,\n\n // Enter handler for height transition.\n enter: this.onEnter,\n },\n }, this.showLazyContent(() => [this.genWindowItem()]))\n },\n})\n","// Components\nimport VToolbar from './VToolbar'\n\n// Utilities\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VToolbarTitle = createSimpleFunctional('v-toolbar__title')\nconst VToolbarItems = createSimpleFunctional('v-toolbar__items')\n\nexport {\n VToolbar,\n VToolbarItems,\n VToolbarTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VToolbar,\n VToolbarItems,\n VToolbarTitle,\n },\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar sign = require('../internals/math-sign');\n\n// `Math.sign` method\n// https://tc39.es/ecma262/#sec-math.sign\n$({ target: 'Math', stat: true }, {\n sign: sign\n});\n","import './VDatePickerTitle.sass'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport PickerButton from '../../mixins/picker-button'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n PickerButton\n/* @vue/component */\n).extend({\n name: 'v-date-picker-title',\n\n props: {\n date: {\n type: String,\n default: '',\n },\n disabled: Boolean,\n readonly: Boolean,\n selectingYear: Boolean,\n value: {\n type: String,\n },\n year: {\n type: [Number, String],\n default: '',\n },\n yearIcon: {\n type: String,\n },\n },\n\n data: () => ({\n isReversing: false,\n }),\n\n computed: {\n computedTransition (): string {\n return this.isReversing ? 'picker-reverse-transition' : 'picker-transition'\n },\n },\n\n watch: {\n value (val: string, prev: string) {\n this.isReversing = val < prev\n },\n },\n\n methods: {\n genYearIcon (): VNode {\n return this.$createElement(VIcon, {\n props: {\n dark: true,\n },\n }, this.yearIcon)\n },\n getYearBtn (): VNode {\n return this.genPickerButton('selectingYear', true, [\n String(this.year),\n this.yearIcon ? this.genYearIcon() : null,\n ], false, 'v-date-picker-title__year')\n },\n genTitleText (): VNode {\n return this.$createElement('transition', {\n props: {\n name: this.computedTransition,\n },\n }, [\n this.$createElement('div', {\n domProps: { innerHTML: this.date || ' ' },\n key: this.value,\n }),\n ])\n },\n genTitleDate (): VNode {\n return this.genPickerButton('selectingYear', false, [this.genTitleText()], false, 'v-date-picker-title__date')\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-date-picker-title',\n class: {\n 'v-date-picker-title--disabled': this.disabled,\n },\n }, [\n this.getYearBtn(),\n this.genTitleDate(),\n ])\n },\n})\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'localable',\n\n props: {\n locale: String,\n },\n\n computed: {\n currentLocale (): string {\n return this.locale || this.$vuetify.lang.current\n },\n },\n})\n","import pad from './pad'\nimport { DatePickerFormatter } from 'vuetify/types'\n\ninterface SubstrOptions {\n start?: number\n length: number\n}\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions\n): DatePickerFormatter | undefined\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions\n): DatePickerFormatter\n\nfunction createNativeLocaleFormatter (\n locale: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions = { start: 0, length: 0 }\n): DatePickerFormatter | undefined {\n const makeIsoString = (dateString: string) => {\n const [year, month, date] = dateString.trim().split(' ')[0].split('-')\n return [pad(year, 4), pad(month || 1), pad(date || 1)].join('-')\n }\n\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, options)\n return (dateString: string) => intlFormatter.format(new Date(`${makeIsoString(dateString)}T00:00:00+00:00`))\n } catch (e) {\n return (substrOptions.start || substrOptions.length)\n ? (dateString: string) => makeIsoString(dateString).substr(substrOptions.start || 0, substrOptions.length)\n : undefined\n }\n}\n\nexport default createNativeLocaleFormatter\n","import pad from './pad'\n\n/**\n * @param {String} value YYYY-MM format\n * @param {Number} sign -1 or +1\n */\nexport default (value: string, sign: number) => {\n const [year, month] = value.split('-').map(Number)\n\n if (month + sign === 0) {\n return `${year - 1}-12`\n } else if (month + sign === 13) {\n return `${year + 1}-01`\n } else {\n return `${year}-${pad(month + sign)}`\n }\n}\n","import './VDatePickerHeader.sass'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { createNativeLocaleFormatter, monthChange } from './util'\nimport mixins from '../../util/mixins'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-header',\n\n props: {\n disabled: Boolean,\n format: Function as PropType,\n min: String,\n max: String,\n nextAriaLabel: String,\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevAriaLabel: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n readonly: Boolean,\n value: {\n type: [Number, String],\n required: true,\n },\n },\n\n data () {\n return {\n isReversing: false,\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n if (this.format) {\n return this.format\n } else if (String(this.value).split('-')[1]) {\n return createNativeLocaleFormatter(this.currentLocale, { month: 'long', year: 'numeric', timeZone: 'UTC' }, { length: 7 })\n } else {\n return createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n }\n },\n },\n\n watch: {\n value (newVal, oldVal) {\n this.isReversing = newVal < oldVal\n },\n },\n\n methods: {\n genBtn (change: number) {\n const ariaLabelId = change > 0 ? this.nextAriaLabel : this.prevAriaLabel\n const ariaLabel = ariaLabelId ? this.$vuetify.lang.t(ariaLabelId) : undefined\n const disabled = this.disabled ||\n (change < 0 && this.min && this.calculateChange(change) < this.min) ||\n (change > 0 && this.max && this.calculateChange(change) > this.max)\n\n return this.$createElement(VBtn, {\n attrs: { 'aria-label': ariaLabel },\n props: {\n dark: this.dark,\n disabled,\n icon: true,\n light: this.light,\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n this.$emit('input', this.calculateChange(change))\n },\n },\n }, [\n this.$createElement(VIcon, ((change < 0) === !this.$vuetify.rtl) ? this.prevIcon : this.nextIcon),\n ])\n },\n calculateChange (sign: number) {\n const [year, month] = String(this.value).split('-').map(Number)\n\n if (month == null) {\n return `${year + sign}`\n } else {\n return monthChange(String(this.value), sign)\n }\n },\n genHeader () {\n const color = !this.disabled && (this.color || 'accent')\n const header = this.$createElement('div', this.setTextColor(color, {\n key: String(this.value),\n }), [this.$createElement('button', {\n attrs: {\n type: 'button',\n },\n on: {\n click: () => this.$emit('toggle'),\n },\n }, getSlot(this) || [this.formatter(String(this.value))])])\n\n const transition = this.$createElement('transition', {\n props: {\n name: (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition',\n },\n }, [header])\n\n return this.$createElement('div', {\n staticClass: 'v-date-picker-header__value',\n class: {\n 'v-date-picker-header__value--disabled': this.disabled,\n },\n }, [transition])\n },\n },\n\n render (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-date-picker-header',\n class: {\n 'v-date-picker-header--disabled': this.disabled,\n ...this.themeClasses,\n },\n }, [\n this.genBtn(-1),\n this.genHeader(),\n this.genBtn(+1),\n ])\n },\n})\n","import Vue from 'vue'\n\nexport function createItemTypeNativeListeners (instance: Vue, itemTypeSuffix: string, value: any) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName.slice(0, -itemTypeSuffix.length)] = (event: Event) => instance.$emit(eventName, value, event)\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n\nexport function createItemTypeListeners (instance: Vue, itemTypeSuffix: string) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName] = instance.$listeners[eventName]\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n","// Adds leading zero to month/day if necessary, returns 'YYYY' if type = 'year',\n// 'YYYY-MM' if 'month' and 'YYYY-MM-DD' if 'date'\nimport pad from './pad'\n\nexport default (dateString: string, type: 'date' | 'month' | 'year'): string => {\n const [year, month = 1, date = 1] = dateString.split('-')\n return `${year}-${pad(month)}-${pad(date)}`.substr(0, { date: 10, month: 7, year: 4 }[type])\n}\n","import { DatePickerAllowedDatesFunction } from 'vuetify/types'\n\nexport default function isDateAllowed (date: string, min: string, max: string, allowedFn: DatePickerAllowedDatesFunction | undefined) {\n return (!allowedFn || allowedFn(date)) &&\n (!min || date >= min.substr(0, 10)) &&\n (!max || date <= max)\n}\n","import '../VDatePickerTable.sass'\n\n// Directives\nimport Touch from '../../../directives/touch'\n\n// Mixins\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Themeable from '../../../mixins/themeable'\n\n// Utils\nimport { createItemTypeNativeListeners, sanitizeDateString } from '../util'\nimport isDateAllowed from '../util/isDateAllowed'\nimport { mergeListeners } from '../../../util/mergeData'\nimport mixins from '../../../util/mixins'\nimport { throttle } from '../../../util/helpers'\n\n// Types\nimport {\n PropType,\n VNodeChildren,\n} from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEventColorValue,\n DatePickerEvents,\n DatePickerFormatter,\n TouchWrapper,\n} from 'vuetify/types'\n\ntype CalculateTableDateFunction = (v: number) => string\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n directives: { Touch },\n\n props: {\n allowedDates: Function as PropType,\n current: String,\n disabled: Boolean,\n format: Function as PropType,\n events: {\n type: [Array, Function, Object],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n min: String,\n max: String,\n range: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n tableDate: {\n type: String,\n required: true,\n },\n value: [String, Array] as PropType,\n },\n\n data: () => ({\n isReversing: false,\n wheelThrottle: null as any,\n }),\n\n computed: {\n computedTransition (): string {\n return (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition'\n },\n displayedMonth (): number {\n return Number(this.tableDate.split('-')[1]) - 1\n },\n displayedYear (): number {\n return Number(this.tableDate.split('-')[0])\n },\n },\n\n watch: {\n tableDate (newVal: string, oldVal: string) {\n this.isReversing = newVal < oldVal\n },\n },\n\n mounted () {\n this.wheelThrottle = throttle(this.wheel, 250)\n },\n\n methods: {\n genButtonClasses (\n isAllowed: boolean,\n isFloating: boolean,\n isSelected: boolean,\n isCurrent: boolean,\n isFirst: boolean,\n isLast: boolean,\n ) {\n return {\n 'v-size--default': !isFloating,\n 'v-date-picker-table__current': isCurrent,\n 'v-btn--active': isSelected,\n 'v-btn--flat': !isAllowed || this.disabled,\n 'v-btn--text': isSelected === isCurrent,\n 'v-btn--rounded': isFloating,\n 'v-btn--disabled': !isAllowed || this.disabled,\n 'v-btn--outlined': isCurrent && !isSelected,\n 'v-date-picker--first-in-range': isFirst,\n 'v-date-picker--last-in-range': isLast,\n ...this.themeClasses,\n }\n },\n genButtonEvents (value: string, isAllowed: boolean, mouseEventType: string) {\n if (this.disabled) return undefined\n\n return mergeListeners({\n click: () => {\n if (isAllowed && !this.readonly) this.$emit('input', value)\n },\n }, createItemTypeNativeListeners(this, `:${mouseEventType}`, value))\n },\n genButton (value: string, isFloating: boolean, mouseEventType: string, formatter: DatePickerFormatter, isOtherMonth = false) {\n const isAllowed = isDateAllowed(value, this.min, this.max, this.allowedDates)\n const isSelected = this.isSelected(value) && isAllowed\n const isCurrent = value === this.current\n const setColor = isSelected ? this.setBackgroundColor : this.setTextColor\n const color = (isSelected || isCurrent) && (this.color || 'accent')\n let isFirst = false\n let isLast = false\n if (this.range && !!this.value && Array.isArray(this.value)) {\n isFirst = value === this.value[0]\n isLast = value === this.value[this.value.length - 1]\n }\n\n return this.$createElement('button', setColor(color, {\n staticClass: 'v-btn',\n class: this.genButtonClasses(\n isAllowed && !isOtherMonth,\n isFloating,\n isSelected,\n isCurrent,\n isFirst,\n isLast,\n ),\n attrs: {\n type: 'button',\n },\n domProps: {\n disabled: this.disabled || !isAllowed || isOtherMonth,\n },\n on: this.genButtonEvents(value, isAllowed, mouseEventType),\n }), [\n this.$createElement('div', {\n staticClass: 'v-btn__content',\n }, [formatter(value)]),\n this.genEvents(value),\n ])\n },\n getEventColors (date: string) {\n const arrayize = (v: string | string[]) => Array.isArray(v) ? v : [v]\n let eventData: boolean | DatePickerEventColorValue\n let eventColors: string[] = []\n\n if (Array.isArray(this.events)) {\n eventData = this.events.includes(date)\n } else if (this.events instanceof Function) {\n eventData = this.events(date) || false\n } else if (this.events) {\n eventData = this.events[date] || false\n } else {\n eventData = false\n }\n\n if (!eventData) {\n return []\n } else if (eventData !== true) {\n eventColors = arrayize(eventData)\n } else if (typeof this.eventColor === 'string') {\n eventColors = [this.eventColor]\n } else if (typeof this.eventColor === 'function') {\n eventColors = arrayize(this.eventColor(date))\n } else if (Array.isArray(this.eventColor)) {\n eventColors = this.eventColor\n } else {\n eventColors = arrayize(this.eventColor[date])\n }\n\n return eventColors.filter(v => v)\n },\n genEvents (date: string) {\n const eventColors = this.getEventColors(date)\n\n return eventColors.length ? this.$createElement('div', {\n staticClass: 'v-date-picker-table__events',\n }, eventColors.map(color => this.$createElement('div', this.setBackgroundColor(color)))) : null\n },\n isValidScroll (value: number, calculateTableDate: CalculateTableDateFunction) {\n const tableDate = calculateTableDate(value)\n // tableDate is 'YYYY-MM' for DateTable and 'YYYY' for MonthTable\n const sanitizeType = tableDate.split('-').length === 1 ? 'year' : 'month'\n return (value < 0 && (this.min ? tableDate >= sanitizeDateString(this.min, sanitizeType) : true)) ||\n (value > 0 && (this.max ? tableDate <= sanitizeDateString(this.max, sanitizeType) : true))\n },\n wheel (e: WheelEvent, calculateTableDate: CalculateTableDateFunction) {\n this.$emit('update:table-date', calculateTableDate(e.deltaY))\n },\n touch (value: number, calculateTableDate: CalculateTableDateFunction) {\n this.$emit('update:table-date', calculateTableDate(value))\n },\n genTable (staticClass: string, children: VNodeChildren, calculateTableDate: CalculateTableDateFunction) {\n const transition = this.$createElement('transition', {\n props: { name: this.computedTransition },\n }, [this.$createElement('table', { key: this.tableDate }, children)])\n\n const touchDirective = {\n name: 'touch',\n value: {\n left: (e: TouchWrapper) => (e.offsetX < -15) &&\n (this.isValidScroll(1, calculateTableDate) && this.touch(1, calculateTableDate)),\n right: (e: TouchWrapper) => (e.offsetX > 15) &&\n (this.isValidScroll(-1, calculateTableDate) && this.touch(-1, calculateTableDate)),\n },\n }\n\n return this.$createElement('div', {\n staticClass,\n class: {\n 'v-date-picker-table--disabled': this.disabled,\n ...this.themeClasses,\n },\n on: (!this.disabled && this.scrollable) ? {\n wheel: (e: WheelEvent) => {\n e.preventDefault()\n if (this.isValidScroll(e.deltaY, calculateTableDate)) { this.wheelThrottle(e, calculateTableDate) }\n },\n } : undefined,\n directives: [touchDirective],\n }, [transition])\n },\n isSelected (value: string): boolean {\n if (Array.isArray(this.value)) {\n if (this.range && this.value.length === 2) {\n const [from, to] = [...this.value].sort()\n return from <= value && value <= to\n } else {\n return this.value.indexOf(value) !== -1\n }\n }\n\n return value === this.value\n },\n },\n})\n","function createUTCDate (year: number, month = 0, day = 1) {\n let date\n if (year < 100 && year >= 0) {\n date = new Date(Date.UTC(year, month, day))\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(year)\n }\n } else {\n date = new Date(Date.UTC(year, month, day))\n }\n\n return date\n}\n\nfunction firstWeekOffset (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear\n const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7\n\n return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1\n}\n\nfunction dayOfYear (year: number, month: number, day: number, firstDayOfWeek: number) {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month]\n if (month > 1 && isLeapYear(year)) {\n dayOfYear++\n }\n\n return dayOfYear + day\n}\n\nfunction weeksInYear (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear)\n const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear)\n const daysInYear = isLeapYear(year) ? 366 : 365\n\n return (daysInYear - weekOffset + weekOffsetNext) / 7\n}\n\nexport function weekNumber (year: number, month: number, day: number, firstDayOfWeek: number, localeFirstDayOfYear: number): number {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear)\n const week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7)\n\n if (week < 1) {\n return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear)\n } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {\n return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)\n } else {\n return week\n }\n}\n\nexport function isLeapYear (year: number): boolean {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\n}\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport { pad, createNativeLocaleFormatter, monthChange } from './util'\nimport { createRange } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeChildren, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-date-table',\n\n props: {\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n showAdjacentMonths: Boolean,\n showWeek: Boolean,\n weekdayFormat: Function as PropType,\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { day: 'numeric', timeZone: 'UTC' }, { start: 8, length: 2 })\n },\n weekdayFormatter (): DatePickerFormatter | undefined {\n return this.weekdayFormat || createNativeLocaleFormatter(this.currentLocale, { weekday: 'narrow', timeZone: 'UTC' })\n },\n weekDays (): string[] {\n const first = parseInt(this.firstDayOfWeek, 10)\n\n return this.weekdayFormatter\n ? createRange(7).map(i => this.weekdayFormatter!(`2017-01-${first + i + 15}`)) // 2017-01-15 is Sunday\n : createRange(7).map(i => ['S', 'M', 'T', 'W', 'T', 'F', 'S'][(i + first) % 7])\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return monthChange(this.tableDate, Math.sign(delta || 1))\n },\n genTHead () {\n const days = this.weekDays.map(day => this.$createElement('th', day))\n if (this.showWeek) {\n days.unshift(this.$createElement('th'))\n }\n\n return this.$createElement('thead', this.genTR(days))\n },\n // Returns number of the days from the firstDayOfWeek to the first day of the current month\n weekDaysBeforeFirstDayOfTheMonth () {\n const firstDayOfTheMonth = new Date(`${this.displayedYear}-${pad(this.displayedMonth + 1)}-01T00:00:00+00:00`)\n const weekDay = firstDayOfTheMonth.getUTCDay()\n\n return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7\n },\n getWeekNumber (dayInMonth: number) {\n return weekNumber(\n this.displayedYear,\n this.displayedMonth,\n dayInMonth,\n parseInt(this.firstDayOfWeek),\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('td', [\n this.$createElement('small', {\n staticClass: 'v-date-picker-table--date__week',\n }, String(weekNumber).padStart(2, '0')),\n ])\n },\n // eslint-disable-next-line max-statements\n genTBody () {\n const children = []\n const daysInMonth = new Date(this.displayedYear, this.displayedMonth + 1, 0).getDate()\n let rows = []\n let day = this.weekDaysBeforeFirstDayOfTheMonth()\n\n if (this.showWeek) {\n rows.push(this.genWeekNumber(this.getWeekNumber(1)))\n }\n\n const prevMonthYear = this.displayedMonth ? this.displayedYear : this.displayedYear - 1\n const prevMonth = (this.displayedMonth + 11) % 12\n const firstDayFromPreviousMonth = new Date(this.displayedYear, this.displayedMonth, 0).getDate()\n const cellsInRow = this.showWeek ? 8 : 7\n\n while (day--) {\n const date = `${prevMonthYear}-${pad(prevMonth + 1)}-${pad(firstDayFromPreviousMonth - day)}`\n\n rows.push(this.$createElement('td', this.showAdjacentMonths ? [\n this.genButton(date, true, 'date', this.formatter, true),\n ] : []))\n }\n\n for (day = 1; day <= daysInMonth; day++) {\n const date = `${this.displayedYear}-${pad(this.displayedMonth + 1)}-${pad(day)}`\n\n rows.push(this.$createElement('td', [\n this.genButton(date, true, 'date', this.formatter),\n ]))\n\n if (rows.length % cellsInRow === 0) {\n children.push(this.genTR(rows))\n rows = []\n if (this.showWeek && (day < daysInMonth || this.showAdjacentMonths)) {\n rows.push(this.genWeekNumber(this.getWeekNumber(day + 7)))\n }\n }\n }\n\n const nextMonthYear = this.displayedMonth === 11 ? this.displayedYear + 1 : this.displayedYear\n const nextMonth = (this.displayedMonth + 1) % 12\n let nextMonthDay = 1\n\n while (rows.length < cellsInRow) {\n const date = `${nextMonthYear}-${pad(nextMonth + 1)}-${pad(nextMonthDay++)}`\n\n rows.push(this.$createElement('td', this.showAdjacentMonths ? [\n this.genButton(date, true, 'date', this.formatter, true),\n ] : []))\n }\n\n if (rows.length) {\n children.push(this.genTR(rows))\n }\n\n return this.$createElement('tbody', children)\n },\n genTR (children: VNodeChildren) {\n return [this.$createElement('tr', children)]\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--date', [\n this.genTHead(),\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { pad, createNativeLocaleFormatter } from './util'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-month-table',\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { month: 'short', timeZone: 'UTC' }, { start: 5, length: 2 })\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return `${parseInt(this.tableDate, 10) + Math.sign(delta || 1)}`\n },\n genTBody () {\n const children = []\n const cols = Array(3).fill(null)\n const rows = 12 / cols.length\n\n for (let row = 0; row < rows; row++) {\n const tds = cols.map((_, col) => {\n const month = row * cols.length + col\n const date = `${this.displayedYear}-${pad(month + 1)}`\n return this.$createElement('td', {\n key: month,\n }, [\n this.genButton(date, false, 'month', this.formatter),\n ])\n })\n\n children.push(this.$createElement('tr', {\n key: row,\n }, tds))\n }\n\n return this.$createElement('tbody', children)\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--month', [\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","import './VDatePickerYears.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\n\n// Utils\nimport {\n createItemTypeNativeListeners,\n createNativeLocaleFormatter,\n} from './util'\nimport { mergeListeners } from '../../util/mergeData'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\ninterface options extends Vue {\n $el: HTMLElement\n}\n\nexport default mixins\n/* eslint-enable indent */\n>(\n Colorable,\n Localable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-years',\n\n props: {\n format: Function as PropType,\n min: [Number, String],\n max: [Number, String],\n readonly: Boolean,\n value: [Number, String],\n },\n\n data () {\n return {\n defaultColor: 'primary',\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n },\n },\n\n mounted () {\n setTimeout(() => {\n const activeItem = this.$el.getElementsByClassName('active')[0]\n if (activeItem) {\n this.$el.scrollTop = activeItem.offsetTop - this.$el.offsetHeight / 2 + activeItem.offsetHeight / 2\n } else if (this.min && !this.max) {\n this.$el.scrollTop = this.$el.scrollHeight\n } else if (!this.min && this.max) {\n this.$el.scrollTop = 0\n } else {\n this.$el.scrollTop = this.$el.scrollHeight / 2 - this.$el.offsetHeight / 2\n }\n })\n },\n\n methods: {\n genYearItem (year: number): VNode {\n const formatted = this.formatter(`${year}`)\n const active = parseInt(this.value, 10) === year\n const color = active && (this.color || 'primary')\n\n return this.$createElement('li', this.setTextColor(color, {\n key: year,\n class: { active },\n on: mergeListeners({\n click: () => this.$emit('input', year),\n }, createItemTypeNativeListeners(this, ':year', year)),\n }), formatted)\n },\n\n genYearItems (): VNode[] {\n const children = []\n const selectedYear = this.value ? parseInt(this.value, 10) : new Date().getFullYear()\n const maxYear = this.max ? parseInt(this.max, 10) : (selectedYear + 100)\n const minYear = Math.min(maxYear, this.min ? parseInt(this.min, 10) : (selectedYear - 100))\n\n for (let year = maxYear; year >= minYear; year--) {\n children.push(this.genYearItem(year))\n }\n\n return children\n },\n },\n\n render (): VNode {\n return this.$createElement('ul', {\n staticClass: 'v-date-picker-years',\n ref: 'years',\n }, this.genYearItems())\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","// Components\nimport VDatePickerTitle from './VDatePickerTitle'\nimport VDatePickerHeader from './VDatePickerHeader'\nimport VDatePickerDateTable from './VDatePickerDateTable'\nimport VDatePickerMonthTable from './VDatePickerMonthTable'\nimport VDatePickerYears from './VDatePickerYears'\n\n// Mixins\nimport Localable from '../../mixins/localable'\nimport Picker from '../../mixins/picker'\n\n// Utils\nimport isDateAllowed from './util/isDateAllowed'\nimport mixins from '../../util/mixins'\nimport { wrapInArray } from '../../util/helpers'\nimport { daysInMonth } from '../VCalendar/util/timestamp'\nimport { consoleWarn } from '../../util/console'\nimport {\n createItemTypeListeners,\n createNativeLocaleFormatter,\n pad,\n sanitizeDateString,\n} from './util'\n\n// Types\nimport {\n PropType,\n PropValidator,\n} from 'vue/types/options'\nimport { VNode } from 'vue'\nimport {\n DatePickerFormatter,\n DatePickerMultipleFormatter,\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEvents,\n DatePickerType,\n} from 'vuetify/types'\n\ntype DatePickerValue = string | string[] | undefined\ninterface Formatters {\n year: DatePickerFormatter\n titleDate: DatePickerFormatter | DatePickerMultipleFormatter\n}\n\ntype ActivePicker = 'DATE' | 'MONTH' | 'YEAR';\n\nexport default mixins(\n Localable,\n Picker,\n/* @vue/component */\n).extend({\n name: 'v-date-picker',\n\n props: {\n activePicker: String as PropType,\n allowedDates: Function as PropType,\n // Function formatting the day in date picker table\n dayFormat: Function as PropType,\n disabled: Boolean,\n events: {\n type: [Array, Function, Object],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n // Function formatting the tableDate in the day/month table header\n headerDateFormat: Function as PropType,\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n max: String,\n min: String,\n // Function formatting month in the months table\n monthFormat: Function as PropType,\n multiple: Boolean,\n nextIcon: {\n type: String,\n default: '$next',\n },\n nextMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextMonthAriaLabel',\n },\n nextYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextYearAriaLabel',\n },\n pickerDate: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n prevMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevMonthAriaLabel',\n },\n prevYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevYearAriaLabel',\n },\n range: Boolean,\n reactive: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n showCurrent: {\n type: [Boolean, String],\n default: true,\n },\n selectedItemsText: {\n type: String,\n default: '$vuetify.datePicker.itemsSelected',\n },\n showAdjacentMonths: Boolean,\n showWeek: Boolean,\n // Function formatting currently selected date in the picker title\n titleDateFormat: Function as PropType,\n type: {\n type: String,\n default: 'date',\n validator: (type: any) => ['date', 'month'].includes(type), // TODO: year\n } as PropValidator,\n value: [Array, String] as PropType,\n weekdayFormat: Function as PropType,\n // Function formatting the year in table header and pickup title\n yearFormat: Function as PropType,\n yearIcon: String,\n },\n\n data () {\n const now = new Date()\n return {\n internalActivePicker: this.type.toUpperCase(),\n inputDay: null as number | null,\n inputMonth: null as number | null,\n inputYear: null as number | null,\n isReversing: false,\n now,\n // tableDate is a string in 'YYYY' / 'YYYY-M' format (leading zero for month is not required)\n tableDate: (() => {\n if (this.pickerDate) {\n return this.pickerDate\n }\n\n const multipleValue = wrapInArray(this.value)\n const date = multipleValue[multipleValue.length - 1] ||\n (typeof this.showCurrent === 'string' ? this.showCurrent : `${now.getFullYear()}-${now.getMonth() + 1}`)\n return sanitizeDateString(date as string, this.type === 'date' ? 'month' : 'year')\n })(),\n }\n },\n\n computed: {\n multipleValue (): string[] {\n return wrapInArray(this.value)\n },\n isMultiple (): boolean {\n return this.multiple || this.range\n },\n lastValue (): string | null {\n return this.isMultiple ? this.multipleValue[this.multipleValue.length - 1] : (this.value as string | null)\n },\n selectedMonths (): string | string[] | undefined {\n if (!this.value || this.type === 'month') {\n return this.value\n } else if (this.isMultiple) {\n return this.multipleValue.map(val => val.substr(0, 7))\n } else {\n return (this.value as string).substr(0, 7)\n }\n },\n current (): string | null {\n if (this.showCurrent === true) {\n return sanitizeDateString(`${this.now.getFullYear()}-${this.now.getMonth() + 1}-${this.now.getDate()}`, this.type)\n }\n\n return this.showCurrent || null\n },\n inputDate (): string {\n return this.type === 'date'\n ? `${this.inputYear}-${pad(this.inputMonth! + 1)}-${pad(this.inputDay!)}`\n : `${this.inputYear}-${pad(this.inputMonth! + 1)}`\n },\n tableMonth (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[1]) - 1\n },\n tableYear (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[0])\n },\n minMonth (): string | null {\n return this.min ? sanitizeDateString(this.min, 'month') : null\n },\n maxMonth (): string | null {\n return this.max ? sanitizeDateString(this.max, 'month') : null\n },\n minYear (): string | null {\n return this.min ? sanitizeDateString(this.min, 'year') : null\n },\n maxYear (): string | null {\n return this.max ? sanitizeDateString(this.max, 'year') : null\n },\n formatters (): Formatters {\n return {\n year: this.yearFormat || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 }),\n titleDate: this.titleDateFormat ||\n (this.isMultiple ? this.defaultTitleMultipleDateFormatter : this.defaultTitleDateFormatter),\n }\n },\n defaultTitleMultipleDateFormatter (): DatePickerMultipleFormatter {\n return dates => {\n if (!dates.length) {\n return '-'\n }\n\n if (dates.length === 1) {\n return this.defaultTitleDateFormatter(dates[0])\n }\n\n return this.$vuetify.lang.t(this.selectedItemsText, dates.length)\n }\n },\n defaultTitleDateFormatter (): DatePickerFormatter {\n const titleFormats = {\n year: { year: 'numeric', timeZone: 'UTC' },\n month: { month: 'long', timeZone: 'UTC' },\n date: { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' },\n } as const\n\n const titleDateFormatter = createNativeLocaleFormatter(this.currentLocale, titleFormats[this.type], {\n start: 0,\n length: { date: 10, month: 7, year: 4 }[this.type],\n })\n\n const landscapeFormatter = (date: string) => titleDateFormatter(date)\n .replace(/([^\\d\\s])([\\d])/g, (match, nonDigit, digit) => `${nonDigit} ${digit}`)\n .replace(', ', ',
')\n\n return this.landscape ? landscapeFormatter : titleDateFormatter\n },\n },\n\n watch: {\n internalActivePicker: {\n immediate: true,\n handler (val: ActivePicker) {\n this.$emit('update:active-picker', val)\n },\n },\n activePicker (val: ActivePicker) {\n this.internalActivePicker = val\n },\n tableDate (val: string, prev: string) {\n // Make a ISO 8601 strings from val and prev for comparision, otherwise it will incorrectly\n // compare for example '2000-9' and '2000-10'\n const sanitizeType = this.type === 'month' ? 'year' : 'month'\n this.isReversing = sanitizeDateString(val, sanitizeType) < sanitizeDateString(prev, sanitizeType)\n this.$emit('update:picker-date', val)\n },\n pickerDate (val: string | null) {\n if (val) {\n this.tableDate = val\n } else if (this.lastValue && this.type === 'date') {\n this.tableDate = sanitizeDateString(this.lastValue, 'month')\n } else if (this.lastValue && this.type === 'month') {\n this.tableDate = sanitizeDateString(this.lastValue, 'year')\n }\n },\n value (newValue: DatePickerValue, oldValue: DatePickerValue) {\n this.checkMultipleProp()\n this.setInputDate()\n\n if (\n (!this.isMultiple && this.value && !this.pickerDate) ||\n (this.isMultiple && this.multipleValue.length && (!oldValue || !oldValue.length) && !this.pickerDate)\n ) {\n this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month')\n }\n },\n type (type: DatePickerType) {\n this.internalActivePicker = type.toUpperCase()\n\n if (this.value && this.value.length) {\n const output = this.multipleValue\n .map((val: string) => sanitizeDateString(val, type))\n .filter(this.isDateAllowed)\n this.$emit('input', this.isMultiple ? output : output[0])\n }\n },\n },\n\n created () {\n this.checkMultipleProp()\n\n if (this.pickerDate !== this.tableDate) {\n this.$emit('update:picker-date', this.tableDate)\n }\n this.setInputDate()\n },\n\n methods: {\n emitInput (newInput: string) {\n if (this.range) {\n if (this.multipleValue.length !== 1) {\n this.$emit('input', [newInput])\n } else {\n const output = [this.multipleValue[0], newInput]\n this.$emit('input', output)\n this.$emit('change', output)\n }\n return\n }\n\n const output = this.multiple\n ? (\n this.multipleValue.indexOf(newInput) === -1\n ? this.multipleValue.concat([newInput])\n : this.multipleValue.filter(x => x !== newInput)\n )\n : newInput\n\n this.$emit('input', output)\n this.multiple || this.$emit('change', newInput)\n },\n checkMultipleProp () {\n if (this.value == null) return\n const valueType = this.value.constructor.name\n const expected = this.isMultiple ? 'Array' : 'String'\n if (valueType !== expected) {\n consoleWarn(`Value must be ${this.isMultiple ? 'an' : 'a'} ${expected}, got ${valueType}`, this)\n }\n },\n isDateAllowed (value: string): boolean {\n return isDateAllowed(value, this.min, this.max, this.allowedDates)\n },\n yearClick (value: number) {\n this.inputYear = value\n if (this.type === 'month') {\n this.tableDate = `${value}`\n } else {\n this.tableDate = `${value}-${pad((this.tableMonth || 0) + 1)}`\n }\n this.internalActivePicker = 'MONTH'\n if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {\n this.$emit('input', this.inputDate)\n }\n },\n monthClick (value: string) {\n const [year, month] = value.split('-')\n\n this.inputYear = parseInt(year, 10)\n this.inputMonth = parseInt(month, 10) - 1\n\n if (this.type === 'date') {\n if (this.inputDay) {\n this.inputDay = Math.min(this.inputDay, daysInMonth(this.inputYear, this.inputMonth + 1))\n }\n\n this.tableDate = value\n this.internalActivePicker = 'DATE'\n if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {\n this.$emit('input', this.inputDate)\n }\n } else {\n this.emitInput(this.inputDate)\n }\n },\n dateClick (value: string) {\n const [year, month, day] = value.split('-')\n\n this.inputYear = parseInt(year, 10)\n this.inputMonth = parseInt(month, 10) - 1\n this.inputDay = parseInt(day, 10)\n\n this.emitInput(this.inputDate)\n },\n genPickerTitle (): VNode {\n return this.$createElement(VDatePickerTitle, {\n props: {\n date: this.value ? (this.formatters.titleDate as (value: any) => string)(this.isMultiple ? this.multipleValue : this.value) : '',\n disabled: this.disabled,\n readonly: this.readonly,\n selectingYear: this.internalActivePicker === 'YEAR',\n year: this.formatters.year(this.multipleValue.length ? `${this.inputYear}` : this.tableDate),\n yearIcon: this.yearIcon,\n value: this.multipleValue[0],\n },\n slot: 'title',\n on: {\n 'update:selecting-year': (value: boolean) => this.internalActivePicker = value ? 'YEAR' : this.type.toUpperCase(),\n },\n })\n },\n genTableHeader (): VNode {\n return this.$createElement(VDatePickerHeader, {\n props: {\n nextIcon: this.nextIcon,\n color: this.color,\n dark: this.dark,\n disabled: this.disabled,\n format: this.headerDateFormat,\n light: this.light,\n locale: this.locale,\n min: this.internalActivePicker === 'DATE' ? this.minMonth : this.minYear,\n max: this.internalActivePicker === 'DATE' ? this.maxMonth : this.maxYear,\n nextAriaLabel: this.internalActivePicker === 'DATE' ? this.nextMonthAriaLabel : this.nextYearAriaLabel,\n prevAriaLabel: this.internalActivePicker === 'DATE' ? this.prevMonthAriaLabel : this.prevYearAriaLabel,\n prevIcon: this.prevIcon,\n readonly: this.readonly,\n value: this.internalActivePicker === 'DATE' ? `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}` : `${pad(this.tableYear, 4)}`,\n },\n on: {\n toggle: () => this.internalActivePicker = (this.internalActivePicker === 'DATE' ? 'MONTH' : 'YEAR'),\n input: (value: string) => this.tableDate = value,\n },\n })\n },\n genDateTable (): VNode {\n return this.$createElement(VDatePickerDateTable, {\n props: {\n allowedDates: this.allowedDates,\n color: this.color,\n current: this.current,\n dark: this.dark,\n disabled: this.disabled,\n events: this.events,\n eventColor: this.eventColor,\n firstDayOfWeek: this.firstDayOfWeek,\n format: this.dayFormat,\n light: this.light,\n locale: this.locale,\n localeFirstDayOfYear: this.localeFirstDayOfYear,\n min: this.min,\n max: this.max,\n range: this.range,\n readonly: this.readonly,\n scrollable: this.scrollable,\n showAdjacentMonths: this.showAdjacentMonths,\n showWeek: this.showWeek,\n tableDate: `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}`,\n value: this.value,\n weekdayFormat: this.weekdayFormat,\n },\n ref: 'table',\n on: {\n input: this.dateClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':date'),\n },\n })\n },\n genMonthTable (): VNode {\n return this.$createElement(VDatePickerMonthTable, {\n props: {\n allowedDates: this.type === 'month' ? this.allowedDates : null,\n color: this.color,\n current: this.current ? sanitizeDateString(this.current, 'month') : null,\n dark: this.dark,\n disabled: this.disabled,\n events: this.type === 'month' ? this.events : null,\n eventColor: this.type === 'month' ? this.eventColor : null,\n format: this.monthFormat,\n light: this.light,\n locale: this.locale,\n min: this.minMonth,\n max: this.maxMonth,\n range: this.range,\n readonly: this.readonly && this.type === 'month',\n scrollable: this.scrollable,\n value: this.selectedMonths,\n tableDate: `${pad(this.tableYear, 4)}`,\n },\n ref: 'table',\n on: {\n input: this.monthClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':month'),\n },\n })\n },\n genYears (): VNode {\n return this.$createElement(VDatePickerYears, {\n props: {\n color: this.color,\n format: this.yearFormat,\n locale: this.locale,\n min: this.minYear,\n max: this.maxYear,\n value: this.tableYear,\n },\n on: {\n input: this.yearClick,\n ...createItemTypeListeners(this, ':year'),\n },\n })\n },\n genPickerBody (): VNode {\n const children = this.internalActivePicker === 'YEAR' ? [\n this.genYears(),\n ] : [\n this.genTableHeader(),\n this.internalActivePicker === 'DATE' ? this.genDateTable() : this.genMonthTable(),\n ]\n\n return this.$createElement('div', {\n key: this.internalActivePicker,\n }, children)\n },\n setInputDate () {\n if (this.lastValue) {\n const array = this.lastValue.split('-')\n this.inputYear = parseInt(array[0], 10)\n this.inputMonth = parseInt(array[1], 10) - 1\n if (this.type === 'date') {\n this.inputDay = parseInt(array[2], 10)\n }\n } else {\n this.inputYear = this.inputYear || this.now.getFullYear()\n this.inputMonth = this.inputMonth == null ? this.inputMonth : this.now.getMonth()\n this.inputDay = this.inputDay || this.now.getDate()\n }\n },\n },\n\n render (): VNode {\n return this.genPicker('v-picker--date')\n },\n})\n","// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'form', any>('form'),\n Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'validatable',\n\n props: {\n disabled: {\n type: Boolean,\n default: null,\n },\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator,\n messages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator,\n readonly: {\n type: Boolean,\n default: null,\n },\n rules: {\n type: Array,\n default: () => [],\n } as PropValidator,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator,\n validateOnBlur: Boolean,\n value: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled ?? (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly ?? (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages && this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages && this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeDestroy () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage | null): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : null\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n },\n },\n})\n","import './VPicker.sass'\nimport '../VCard/VCard.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport { convertToUnit, getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Elevatable,\n Themeable\n).extend({\n name: 'v-picker',\n\n props: {\n flat: Boolean,\n fullWidth: Boolean,\n landscape: Boolean,\n noTitle: Boolean,\n transition: {\n type: String,\n default: 'fade-transition',\n },\n width: {\n type: [Number, String],\n default: 290,\n },\n },\n\n computed: {\n computedTitleColor (): string | false {\n const defaultTitleColor = this.isDark ? false : (this.color || 'primary')\n return this.color || defaultTitleColor\n },\n },\n\n methods: {\n genTitle () {\n return this.$createElement('div', this.setBackgroundColor(this.computedTitleColor, {\n staticClass: 'v-picker__title',\n class: {\n 'v-picker__title--landscape': this.landscape,\n },\n }), getSlot(this, 'title'))\n },\n genBodyTransition () {\n return this.$createElement('transition', {\n props: {\n name: this.transition,\n },\n }, getSlot(this))\n },\n genBody () {\n return this.$createElement('div', {\n staticClass: 'v-picker__body',\n class: {\n 'v-picker__body--no-title': this.noTitle,\n ...this.themeClasses,\n },\n style: this.fullWidth ? undefined : {\n width: convertToUnit(this.width),\n },\n }, [\n this.genBodyTransition(),\n ])\n },\n genActions () {\n return this.$createElement('div', {\n staticClass: 'v-picker__actions v-card__actions',\n class: {\n 'v-picker__actions--no-title': this.noTitle,\n },\n }, getSlot(this, 'actions'))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-picker v-card',\n class: {\n 'v-picker--flat': this.flat,\n 'v-picker--landscape': this.landscape,\n 'v-picker--full-width': this.fullWidth,\n ...this.themeClasses,\n ...this.elevationClasses,\n },\n }, [\n this.$slots.title ? this.genTitle() : null,\n this.genBody(),\n this.$slots.actions ? this.genActions() : null,\n ])\n },\n})\n","import VPicker from './VPicker'\n\nexport { VPicker }\nexport default VPicker\n","// Components\nimport VPicker from '../../components/VPicker'\n\n// Mixins\nimport Colorable from '../colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Themeable from '../themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Colorable,\n Elevatable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'picker',\n\n props: {\n flat: Boolean,\n fullWidth: Boolean,\n headerColor: String,\n landscape: Boolean,\n noTitle: Boolean,\n width: {\n type: [Number, String],\n default: 290,\n },\n },\n\n methods: {\n genPickerTitle (): VNode | null {\n return null\n },\n genPickerBody (): VNode | null {\n return null\n },\n genPickerActionsSlot () {\n return this.$scopedSlots.default ? this.$scopedSlots.default({\n save: (this as any).save,\n cancel: (this as any).cancel,\n }) : getSlot(this)\n },\n genPicker (staticClass: string) {\n const children: VNode[] = []\n\n if (!this.noTitle) {\n const title = this.genPickerTitle()\n title && children.push(title)\n }\n\n const body = this.genPickerBody()\n body && children.push(body)\n\n children.push(this.$createElement('template', { slot: 'actions' }, [this.genPickerActionsSlot()]))\n\n return this.$createElement(VPicker, {\n staticClass,\n props: {\n color: this.headerColor || this.color,\n dark: this.dark,\n elevation: this.elevation,\n flat: this.flat,\n fullWidth: this.fullWidth,\n landscape: this.landscape,\n light: this.light,\n width: this.width,\n noTitle: this.noTitle,\n },\n }, children)\n },\n },\n})\n","const padStart = (string: number | string, targetLength: number, padString: string) => {\n targetLength = targetLength >> 0\n string = String(string)\n padString = String(padString)\n if (string.length > targetLength) {\n return String(string)\n }\n\n targetLength = targetLength - string.length\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length)\n }\n return padString.slice(0, targetLength) + String(string)\n}\n\nexport default (n: string | number, length = 2) => padStart(n, length, '0')\n","// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { getSlot, keyCodes } from './../../util/helpers'\nimport mixins from '../../util/mixins'\nimport { ExtractVue } from './../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\n// Components\nimport VTabsBar from '../VTabs/VTabsBar'\n\nconst baseMixins = mixins(\n Routable,\n // Must be after routable\n // to overwrite activeClass\n GroupableFactory('tabsBar'),\n Themeable\n)\n\ntype VTabBarInstance = InstanceType\n\ninterface options extends ExtractVue {\n $el: HTMLElement\n tabsBar: VTabBarInstance\n}\n\nexport default baseMixins.extend().extend(\n /* @vue/component */\n).extend({\n name: 'v-tab',\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n tabValue: {\n required: false,\n },\n },\n\n data: () => ({\n proxyClass: 'v-tab--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-tab': true,\n ...Routable.options.computed.classes.call(this),\n 'v-tab--disabled': this.disabled,\n ...this.groupClasses,\n }\n },\n value (): any {\n if (this.tabValue != null) return this.tabValue\n\n let to = this.to || this.href\n\n if (to == null) return to\n\n if (this.$router &&\n this.to === Object(this.to)\n ) {\n const resolve = this.$router.resolve(\n this.to,\n this.$route,\n this.append\n )\n\n to = resolve.href\n }\n\n return to.replace('#', '')\n },\n },\n\n methods: {\n click (e: KeyboardEvent | MouseEvent): void {\n // Prevent keyboard actions\n // from children elements\n // within disabled tabs\n if (this.disabled) {\n e.preventDefault()\n return\n }\n\n // If user provides an\n // actual link, do not\n // prevent default\n if (this.href &&\n this.href.indexOf('#') > -1\n ) e.preventDefault()\n\n if (e.detail) this.$el.blur()\n\n this.$emit('click', e)\n\n this.to || this.toggle()\n },\n toggle () {\n // VItemGroup treats a change event as a click\n if (!this.isActive || (!this.tabsBar.mandatory && !this.to)) {\n this.$emit('change')\n }\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n 'aria-selected': String(this.isActive),\n role: 'tab',\n tabindex: this.disabled ? -1 : 0,\n }\n data.on = {\n ...data.on,\n keydown: (e: KeyboardEvent) => {\n if (e.keyCode === keyCodes.enter) this.click(e)\n\n this.$emit('keydown', e)\n },\n }\n\n return h(tag, data, getSlot(this))\n },\n})\n","// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport { VFadeTransition } from '../transitions'\n\n// Extensions\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\n\n// Directives\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode } from 'vue'\nimport { composedPath, getSlot } from '../../util/helpers'\n\ninterface TouchEvent {\n touchstartX: number\n touchstartY: number\n touchmoveX: number\n touchmoveY: number\n stopPropagation: Function\n}\n\ninterface Widths {\n content: number\n wrapper: number\n}\n\ninterface options extends Vue {\n $refs: {\n content: HTMLElement\n wrapper: HTMLElement\n }\n}\n\nfunction bias (val: number) {\n const c = 0.501\n const x = Math.abs(val)\n return Math.sign(val) * (x / ((1 / c - 2) * (1 - x) + 1))\n}\n\nexport function calculateUpdatedOffset (\n selectedElement: HTMLElement,\n widths: Widths,\n rtl: boolean,\n currentScrollOffset: number\n): number {\n const clientWidth = selectedElement.clientWidth\n const offsetLeft = rtl\n ? (widths.content - selectedElement.offsetLeft - clientWidth)\n : selectedElement.offsetLeft\n\n if (rtl) {\n currentScrollOffset = -currentScrollOffset\n }\n\n const totalWidth = widths.wrapper + currentScrollOffset\n const itemOffset = clientWidth + offsetLeft\n const additionalOffset = clientWidth * 0.4\n\n if (offsetLeft <= currentScrollOffset) {\n currentScrollOffset = Math.max(offsetLeft - additionalOffset, 0)\n } else if (totalWidth <= itemOffset) {\n currentScrollOffset = Math.min(currentScrollOffset - (totalWidth - itemOffset - additionalOffset), widths.content - widths.wrapper)\n }\n\n return rtl ? -currentScrollOffset : currentScrollOffset\n}\n\nexport function calculateCenteredOffset (\n selectedElement: HTMLElement,\n widths: Widths,\n rtl: boolean\n): number {\n const { offsetLeft, clientWidth } = selectedElement\n\n if (rtl) {\n const offsetCentered = widths.content - offsetLeft - clientWidth / 2 - widths.wrapper / 2\n return -Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered))\n } else {\n const offsetCentered = offsetLeft + clientWidth / 2 - widths.wrapper / 2\n return Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered))\n }\n}\n\nexport const BaseSlideGroup = mixins\n/* eslint-enable indent */\n>(\n BaseItemGroup,\n Mobile,\n /* @vue/component */\n).extend({\n name: 'base-slide-group',\n\n directives: {\n Resize,\n Touch,\n },\n\n props: {\n activeClass: {\n type: String,\n default: 'v-slide-item--active',\n },\n centerActive: Boolean,\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'never',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n },\n\n data: () => ({\n isOverflowing: false,\n resizeTimeout: 0,\n startX: 0,\n isSwipingHorizontal: false,\n isSwiping: false,\n scrollOffset: 0,\n widths: {\n content: 0,\n wrapper: 0,\n },\n }),\n\n computed: {\n canTouch (): boolean {\n return typeof window !== 'undefined'\n },\n __cachedNext (): VNode {\n return this.genTransition('next')\n },\n __cachedPrev (): VNode {\n return this.genTransition('prev')\n },\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-slide-group': true,\n 'v-slide-group--has-affixes': this.hasAffixes,\n 'v-slide-group--is-overflowing': this.isOverflowing,\n }\n },\n hasAffixes (): Boolean {\n switch (this.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !this.isMobile\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return this.isOverflowing || Math.abs(this.scrollOffset) > 0\n\n // Always show on mobile\n case 'mobile': return (\n this.isMobile ||\n (this.isOverflowing || Math.abs(this.scrollOffset) > 0)\n )\n\n // Always hide arrows\n case 'never': return false\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !this.isMobile &&\n (this.isOverflowing || Math.abs(this.scrollOffset) > 0)\n )\n }\n },\n hasNext (): boolean {\n if (!this.hasAffixes) return false\n\n const { content, wrapper } = this.widths\n\n // Check one scroll ahead to know the width of right-most item\n return content > Math.abs(this.scrollOffset) + wrapper\n },\n hasPrev (): boolean {\n return this.hasAffixes && this.scrollOffset !== 0\n },\n },\n\n watch: {\n internalValue: 'setWidths',\n // When overflow changes, the arrows alter\n // the widths of the content and wrapper\n // and need to be recalculated\n isOverflowing: 'setWidths',\n scrollOffset (val) {\n if (this.$vuetify.rtl) val = -val\n\n let scroll =\n val <= 0\n ? bias(-val)\n : val > this.widths.content - this.widths.wrapper\n ? -(this.widths.content - this.widths.wrapper) + bias(this.widths.content - this.widths.wrapper - val)\n : -val\n\n if (this.$vuetify.rtl) scroll = -scroll\n\n this.$refs.content.style.transform = `translateX(${scroll}px)`\n },\n },\n\n mounted () {\n if (typeof ResizeObserver !== 'undefined') {\n const obs = new ResizeObserver(() => {\n this.onResize()\n })\n obs.observe(this.$el)\n obs.observe(this.$refs.content)\n this.$on('hook:destroyed', () => {\n obs.disconnect()\n })\n } else {\n let itemsLength = 0\n this.$on('hook:beforeUpdate', () => {\n itemsLength = (this.$refs.content?.children || []).length\n })\n this.$on('hook:updated', () => {\n if (itemsLength === (this.$refs.content?.children || []).length) return\n this.setWidths()\n })\n }\n },\n\n methods: {\n onScroll () {\n this.$refs.wrapper.scrollLeft = 0\n },\n onFocusin (e: FocusEvent) {\n if (!this.isOverflowing) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of composedPath(e)) {\n for (const vm of this.items) {\n if (vm.$el === el) {\n this.scrollOffset = calculateUpdatedOffset(\n vm.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl,\n this.scrollOffset\n )\n return\n }\n }\n }\n },\n // Always generate next for scrollable hint\n genNext (): VNode | null {\n const slot = this.$scopedSlots.next\n ? this.$scopedSlots.next({})\n : getSlot(this, 'next') || this.__cachedNext\n\n return this.$createElement('div', {\n staticClass: 'v-slide-group__next',\n class: {\n 'v-slide-group__next--disabled': !this.hasNext,\n },\n on: {\n click: () => this.onAffixClick('next'),\n },\n key: 'next',\n }, [slot])\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__content',\n ref: 'content',\n on: {\n focusin: this.onFocusin,\n },\n }, getSlot(this))\n },\n genData (): object {\n return {\n class: this.classes,\n directives: [{\n name: 'resize',\n value: this.onResize,\n }],\n }\n },\n genIcon (location: 'prev' | 'next'): VNode | null {\n let icon = location\n\n if (this.$vuetify.rtl && location === 'prev') {\n icon = 'next'\n } else if (this.$vuetify.rtl && location === 'next') {\n icon = 'prev'\n }\n\n const upperLocation = `${location[0].toUpperCase()}${location.slice(1)}`\n const hasAffix = (this as any)[`has${upperLocation}`]\n\n if (\n !this.showArrows &&\n !hasAffix\n ) return null\n\n return this.$createElement(VIcon, {\n props: {\n disabled: !hasAffix,\n },\n }, (this as any)[`${icon}Icon`])\n },\n // Always generate prev for scrollable hint\n genPrev (): VNode | null {\n const slot = this.$scopedSlots.prev\n ? this.$scopedSlots.prev({})\n : getSlot(this, 'prev') || this.__cachedPrev\n\n return this.$createElement('div', {\n staticClass: 'v-slide-group__prev',\n class: {\n 'v-slide-group__prev--disabled': !this.hasPrev,\n },\n on: {\n click: () => this.onAffixClick('prev'),\n },\n key: 'prev',\n }, [slot])\n },\n genTransition (location: 'prev' | 'next') {\n return this.$createElement(VFadeTransition, [this.genIcon(location)])\n },\n genWrapper (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__wrapper',\n directives: [{\n name: 'touch',\n value: {\n start: (e: TouchEvent) => this.overflowCheck(e, this.onTouchStart),\n move: (e: TouchEvent) => this.overflowCheck(e, this.onTouchMove),\n end: (e: TouchEvent) => this.overflowCheck(e, this.onTouchEnd),\n },\n }],\n ref: 'wrapper',\n on: {\n scroll: this.onScroll,\n },\n }, [this.genContent()])\n },\n calculateNewOffset (direction: 'prev' | 'next', widths: Widths, rtl: boolean, currentScrollOffset: number) {\n const sign = rtl ? -1 : 1\n const newAbosluteOffset = sign * currentScrollOffset +\n (direction === 'prev' ? -1 : 1) * widths.wrapper\n\n return sign * Math.max(Math.min(newAbosluteOffset, widths.content - widths.wrapper), 0)\n },\n onAffixClick (location: 'prev' | 'next') {\n this.$emit(`click:${location}`)\n this.scrollTo(location)\n },\n onResize () {\n /* istanbul ignore next */\n if (this._isDestroyed) return\n\n this.setWidths()\n },\n onTouchStart (e: TouchEvent) {\n const { content } = this.$refs\n\n this.startX = this.scrollOffset + e.touchstartX as number\n\n content.style.setProperty('transition', 'none')\n content.style.setProperty('willChange', 'transform')\n },\n onTouchMove (e: TouchEvent) {\n if (!this.canTouch) return\n\n if (!this.isSwiping) {\n // only calculate disableSwipeHorizontal during the first onTouchMove invoke\n // in order to ensure disableSwipeHorizontal value is consistent between onTouchStart and onTouchEnd\n const diffX = e.touchmoveX - e.touchstartX\n const diffY = e.touchmoveY - e.touchstartY\n this.isSwipingHorizontal = Math.abs(diffX) > Math.abs(diffY)\n this.isSwiping = true\n }\n\n if (this.isSwipingHorizontal) {\n // sliding horizontally\n this.scrollOffset = this.startX - e.touchmoveX\n // temporarily disable window vertical scrolling\n document.documentElement.style.overflowY = 'hidden'\n }\n },\n onTouchEnd () {\n if (!this.canTouch) return\n\n const { content, wrapper } = this.$refs\n const maxScrollOffset = content.clientWidth - wrapper.clientWidth\n\n content.style.setProperty('transition', null)\n content.style.setProperty('willChange', null)\n\n if (this.$vuetify.rtl) {\n /* istanbul ignore else */\n if (this.scrollOffset > 0 || !this.isOverflowing) {\n this.scrollOffset = 0\n } else if (this.scrollOffset <= -maxScrollOffset) {\n this.scrollOffset = -maxScrollOffset\n }\n } else {\n /* istanbul ignore else */\n if (this.scrollOffset < 0 || !this.isOverflowing) {\n this.scrollOffset = 0\n } else if (this.scrollOffset >= maxScrollOffset) {\n this.scrollOffset = maxScrollOffset\n }\n }\n\n this.isSwiping = false\n // rollback whole page scrolling to default\n document.documentElement.style.removeProperty('overflow-y')\n },\n overflowCheck (e: TouchEvent, fn: (e: TouchEvent) => void) {\n e.stopPropagation()\n this.isOverflowing && fn(e)\n },\n scrollIntoView /* istanbul ignore next */ () {\n if (!this.selectedItem && this.items.length) {\n const lastItemPosition = this.items[this.items.length - 1].$el.getBoundingClientRect()\n const wrapperPosition = this.$refs.wrapper.getBoundingClientRect()\n\n if (\n (this.$vuetify.rtl && wrapperPosition.right < lastItemPosition.right) ||\n (!this.$vuetify.rtl && wrapperPosition.left > lastItemPosition.left)\n ) {\n this.scrollTo('prev')\n }\n }\n\n if (!this.selectedItem) {\n return\n }\n\n if (\n this.selectedIndex === 0 ||\n (!this.centerActive && !this.isOverflowing)\n ) {\n this.scrollOffset = 0\n } else if (this.centerActive) {\n this.scrollOffset = calculateCenteredOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl\n )\n } else if (this.isOverflowing) {\n this.scrollOffset = calculateUpdatedOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl,\n this.scrollOffset\n )\n }\n },\n scrollTo /* istanbul ignore next */ (location: 'prev' | 'next') {\n this.scrollOffset = this.calculateNewOffset(location, {\n // Force reflow\n content: this.$refs.content ? this.$refs.content.clientWidth : 0,\n wrapper: this.$refs.wrapper ? this.$refs.wrapper.clientWidth : 0,\n }, this.$vuetify.rtl, this.scrollOffset)\n },\n setWidths () {\n window.requestAnimationFrame(() => {\n if (this._isDestroyed) return\n\n const { content, wrapper } = this.$refs\n\n this.widths = {\n content: content ? content.clientWidth : 0,\n wrapper: wrapper ? wrapper.clientWidth : 0,\n }\n\n // https://github.com/vuetifyjs/vuetify/issues/13212\n // We add +1 to the wrappers width to prevent an issue where the `clientWidth`\n // gets calculated wrongly by the browser if using a different zoom-level.\n this.isOverflowing = this.widths.wrapper + 1 < this.widths.content\n\n this.scrollIntoView()\n })\n },\n },\n\n render (h): VNode {\n return h('div', this.genData(), [\n this.genPrev(),\n this.genWrapper(),\n this.genNext(),\n ])\n },\n})\n\nexport default BaseSlideGroup.extend({\n name: 'v-slide-group',\n\n provide (): object {\n return {\n slideGroup: this,\n }\n },\n})\n","// Types\nimport Vue, { VNode } from 'vue'\n\nexport default function VGrid (name: string) {\n /* @vue/component */\n return Vue.extend({\n name: `v-${name}`,\n\n functional: true,\n\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n render (h, { props, data, children }): VNode {\n data.staticClass = (`${name} ${data.staticClass || ''}`).trim()\n\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n const classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n\n if (classes.length) data.staticClass += ` ${classes.join(' ')}`\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(props.tag, data, children)\n },\n })\n}\n","import './_grid.sass'\nimport './VGrid.sass'\n\nimport Grid from './grid'\n\nimport mergeData from '../../util/mergeData'\n\n/* @vue/component */\nexport default Grid('container').extend({\n name: 'v-container',\n functional: true,\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n fluid: {\n type: Boolean,\n default: false,\n },\n },\n render (h, { props, data, children }) {\n let classes\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'container',\n class: Array({\n 'container--fluid': props.fluid,\n }).concat(classes || []),\n }),\n children\n )\n },\n})\n","// Extensions\nimport VWindow from '../VWindow/VWindow'\n\n// Types & Components\nimport { BaseItemGroup, GroupableInstance } from './../VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default VWindow.extend({\n name: 'v-tabs-items',\n\n props: {\n mandatory: {\n type: Boolean,\n default: false,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VWindow.options.computed.classes.call(this),\n 'v-tabs-items': true,\n }\n },\n isDark (): boolean {\n return this.rootIsDark\n },\n },\n\n methods: {\n getValue (item: GroupableInstance, i: number) {\n return item.id || BaseItemGroup.options.methods.getValue.call(this, item, i)\n },\n },\n})\n","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","// Styles\nimport './VLabel.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable, { functionalThemeClasses } from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\nimport mergeData from '../../util/mergeData'\n\n/* @vue/component */\nexport default mixins(Themeable).extend({\n name: 'v-label',\n\n functional: true,\n\n props: {\n absolute: Boolean,\n color: {\n type: String,\n default: 'primary',\n },\n disabled: Boolean,\n focused: Boolean,\n for: String,\n left: {\n type: [Number, String],\n default: 0,\n },\n right: {\n type: [Number, String],\n default: 'auto',\n },\n value: Boolean,\n },\n\n render (h, ctx): VNode {\n const { children, listeners, props, data } = ctx\n const newData = mergeData({\n staticClass: 'v-label',\n class: {\n 'v-label--active': props.value,\n 'v-label--is-disabled': props.disabled,\n ...functionalThemeClasses(ctx),\n },\n attrs: {\n for: props.for,\n 'aria-hidden': !props.for,\n },\n on: listeners,\n style: {\n left: convertToUnit(props.left),\n right: convertToUnit(props.right),\n position: props.absolute ? 'absolute' : 'relative',\n },\n ref: 'label',\n }, data)\n\n return h('label', Colorable.options.methods.setTextColor(props.focused && props.color, newData), children)\n },\n})\n","import VLabel from './VLabel'\n\nexport { VLabel }\nexport default VLabel\n","// Styles\nimport './VMessages.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../util/mixins'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n name: 'v-messages',\n\n props: {\n value: {\n type: Array,\n default: () => ([]),\n } as PropValidator,\n },\n\n methods: {\n genChildren () {\n return this.$createElement('transition-group', {\n staticClass: 'v-messages__wrapper',\n attrs: {\n name: 'message-transition',\n tag: 'div',\n },\n }, this.value.map(this.genMessage))\n },\n genMessage (message: string, key: number) {\n return this.$createElement('div', {\n staticClass: 'v-messages__message',\n key,\n }, getSlot(this, 'default', { message, key }) || [message])\n },\n },\n\n render (h): VNode {\n return h('div', this.setTextColor(this.color, {\n staticClass: 'v-messages',\n class: this.themeClasses,\n }), [this.genChildren()])\n },\n})\n","import VMessages from './VMessages'\n\nexport { VMessages }\nexport default VMessages\n","// Styles\nimport './VInput.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VLabel from '../VLabel'\nimport VMessages from '../VMessages'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Validatable from '../../mixins/validatable'\n\n// Utilities\nimport {\n convertToUnit,\n getSlot,\n kebabCase,\n} from '../../util/helpers'\nimport mergeData from '../../util/mergeData'\n\n// Types\nimport { VNode, VNodeData, PropType } from 'vue'\nimport mixins from '../../util/mixins'\nimport { InputValidationRule } from 'vuetify/types'\n\nconst baseMixins = mixins(\n BindsAttrs,\n Validatable,\n)\n\ninterface options extends InstanceType {\n /* eslint-disable-next-line camelcase */\n $_modelEvent: string\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'v-input',\n\n inheritAttrs: false,\n\n props: {\n appendIcon: String,\n backgroundColor: {\n type: String,\n default: '',\n },\n dense: Boolean,\n height: [Number, String],\n hideDetails: [Boolean, String] as PropType,\n hideSpinButtons: Boolean,\n hint: String,\n id: String,\n label: String,\n loading: Boolean,\n persistentHint: Boolean,\n prependIcon: String,\n value: null as any as PropType,\n },\n\n data () {\n return {\n lazyValue: this.value,\n hasMouseDown: false,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-input--has-state': this.hasState,\n 'v-input--hide-details': !this.showDetails,\n 'v-input--is-label-active': this.isLabelActive,\n 'v-input--is-dirty': this.isDirty,\n 'v-input--is-disabled': this.isDisabled,\n 'v-input--is-focused': this.isFocused,\n // .loading === '' so we can't just cast to boolean\n 'v-input--is-loading': this.loading !== false && this.loading != null,\n 'v-input--is-readonly': this.isReadonly,\n 'v-input--dense': this.dense,\n 'v-input--hide-spin-buttons': this.hideSpinButtons,\n ...this.themeClasses,\n }\n },\n computedId (): string {\n return this.id || `input-${this._uid}`\n },\n hasDetails (): boolean {\n return this.messagesToDisplay.length > 0\n },\n hasHint (): boolean {\n return !this.hasMessages &&\n !!this.hint &&\n (this.persistentHint || this.isFocused)\n },\n hasLabel (): boolean {\n return !!(this.$slots.label || this.label)\n },\n // Proxy for `lazyValue`\n // This allows an input\n // to function without\n // a provided model\n internalValue: {\n get (): any {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n this.$emit(this.$_modelEvent, val)\n },\n },\n isDirty (): boolean {\n return !!this.lazyValue\n },\n isLabelActive (): boolean {\n return this.isDirty\n },\n messagesToDisplay (): string[] {\n if (this.hasHint) return [this.hint]\n\n if (!this.hasMessages) return []\n\n return this.validations.map((validation: string | InputValidationRule) => {\n if (typeof validation === 'string') return validation\n\n const validationResult = validation(this.internalValue)\n\n return typeof validationResult === 'string' ? validationResult : ''\n }).filter(message => message !== '')\n },\n showDetails (): boolean {\n return this.hideDetails === false || (this.hideDetails === 'auto' && this.hasDetails)\n },\n },\n\n watch: {\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeCreate () {\n // v-radio-group needs to emit a different event\n // https://github.com/vuetifyjs/vuetify/issues/4752\n this.$_modelEvent = (this.$options.model && this.$options.model.event) || 'input'\n },\n\n methods: {\n genContent () {\n return [\n this.genPrependSlot(),\n this.genControl(),\n this.genAppendSlot(),\n ]\n },\n genControl () {\n return this.$createElement('div', {\n staticClass: 'v-input__control',\n attrs: { title: this.attrs$.title },\n }, [\n this.genInputSlot(),\n this.genMessages(),\n ])\n },\n genDefaultSlot () {\n return [\n this.genLabel(),\n getSlot(this),\n ]\n },\n genIcon (\n type: string,\n cb?: (e: Event) => void,\n extraData: VNodeData = {}\n ) {\n const icon = (this as any)[`${type}Icon`]\n const eventName = `click:${kebabCase(type)}`\n const hasListener = !!(this.listeners$[eventName] || cb)\n\n const localeKey = {\n prepend: 'prependAction',\n prependInner: 'prependAction',\n append: 'appendAction',\n appendOuter: 'appendAction',\n clear: 'clear',\n }[type]\n const label = hasListener && localeKey\n ? this.$vuetify.lang.t(`$vuetify.input.${localeKey}`, this.label ?? '')\n : undefined\n\n const data = mergeData({\n attrs: {\n 'aria-label': label,\n color: this.validationState,\n dark: this.dark,\n disabled: this.isDisabled,\n light: this.light,\n tabindex: type === 'clear' ? -1 : undefined,\n },\n on: !hasListener\n ? undefined\n : {\n click: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n\n this.$emit(eventName, e)\n cb && cb(e)\n },\n // Container has g event that will\n // trigger menu open if enclosed\n mouseup: (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n },\n },\n }, extraData)\n\n return this.$createElement('div', {\n staticClass: `v-input__icon`,\n class: type ? `v-input__icon--${kebabCase(type)}` : undefined,\n }, [\n this.$createElement(\n VIcon,\n data,\n icon\n ),\n ])\n },\n genInputSlot () {\n return this.$createElement('div', this.setBackgroundColor(this.backgroundColor, {\n staticClass: 'v-input__slot',\n style: { height: convertToUnit(this.height) },\n on: {\n click: this.onClick,\n mousedown: this.onMouseDown,\n mouseup: this.onMouseUp,\n },\n ref: 'input-slot',\n }), [this.genDefaultSlot()])\n },\n genLabel () {\n if (!this.hasLabel) return null\n\n return this.$createElement(VLabel, {\n props: {\n color: this.validationState,\n dark: this.dark,\n disabled: this.isDisabled,\n focused: this.hasState,\n for: this.computedId,\n light: this.light,\n },\n }, getSlot(this, 'label') || this.label)\n },\n genMessages () {\n if (!this.showDetails) return null\n\n return this.$createElement(VMessages, {\n props: {\n color: this.hasHint ? '' : this.validationState,\n dark: this.dark,\n light: this.light,\n value: this.messagesToDisplay,\n },\n attrs: {\n role: this.hasMessages ? 'alert' : null,\n },\n scopedSlots: {\n default: props => getSlot(this, 'message', props),\n },\n })\n },\n genSlot (\n type: string,\n location: string,\n slot: (VNode | VNode[])[]\n ) {\n if (!slot.length) return null\n\n const ref = `${type}-${location}`\n\n return this.$createElement('div', {\n staticClass: `v-input__${ref}`,\n ref,\n }, slot)\n },\n genPrependSlot () {\n const slot = []\n\n if (this.$slots.prepend) {\n slot.push(this.$slots.prepend)\n } else if (this.prependIcon) {\n slot.push(this.genIcon('prepend'))\n }\n\n return this.genSlot('prepend', 'outer', slot)\n },\n genAppendSlot () {\n const slot = []\n\n // Append icon for text field was really\n // an appended inner icon, v-text-field\n // will overwrite this method in order to obtain\n // backwards compat\n if (this.$slots.append) {\n slot.push(this.$slots.append)\n } else if (this.appendIcon) {\n slot.push(this.genIcon('append'))\n }\n\n return this.genSlot('append', 'outer', slot)\n },\n onClick (e: Event) {\n this.$emit('click', e)\n },\n onMouseDown (e: Event) {\n this.hasMouseDown = true\n this.$emit('mousedown', e)\n },\n onMouseUp (e: Event) {\n this.hasMouseDown = false\n this.$emit('mouseup', e)\n },\n },\n\n render (h): VNode {\n return h('div', this.setTextColor(this.validationState, {\n staticClass: 'v-input',\n class: this.classes,\n }), this.genContent())\n },\n})\n","import VInput from './VInput'\n\nexport { VInput }\nexport default VInput\n","// Extensions\nimport VWindowItem from '../VWindow/VWindowItem'\n\n/* @vue/component */\nexport default VWindowItem.extend({\n name: 'v-tab-item',\n\n props: {\n id: String,\n },\n\n methods: {\n genWindowItem () {\n const item = VWindowItem.options.methods.genWindowItem.call(this)\n\n item.data!.domProps = item.data!.domProps || {}\n item.data!.domProps.id = this.id || this.value\n\n return item\n },\n },\n})\n","// Mixins\nimport Colorable from '../colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { kebabCase } from '../../util/helpers'\n\n// Types\nimport { VNodeChildren } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Colorable\n).extend({\n methods: {\n genPickerButton (\n prop: string,\n value: any,\n content: VNodeChildren,\n readonly = false,\n staticClass = ''\n ) {\n const active = (this as any)[prop] === value\n const click = (event: Event) => {\n event.stopPropagation()\n this.$emit(`update:${kebabCase(prop)}`, value)\n }\n\n return this.$createElement('div', {\n staticClass: `v-picker__title__btn ${staticClass}`.trim(),\n class: {\n 'v-picker__title__btn--active': active,\n 'v-picker__title__btn--readonly': readonly,\n },\n on: (active || readonly) ? undefined : { click },\n }, Array.isArray(content) ? content : [content])\n },\n },\n})\n","// Styles\nimport './VSubheader.sass'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-subheader',\n\n props: {\n inset: Boolean,\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-subheader',\n class: {\n 'v-subheader--inset': this.inset,\n ...this.themeClasses,\n },\n attrs: this.$attrs,\n on: this.$listeners,\n }, getSlot(this))\n },\n})\n","// Styles\nimport './VWindow.sass'\n\n// Types\nimport { VNode, VNodeDirective } from 'vue/types/vnode'\nimport { PropType } from 'vue'\nimport { TouchHandlers } from 'vuetify/types'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\nimport { getSlot } from '../../util/helpers'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'v-window',\n\n directives: { Touch },\n\n provide (): object {\n return {\n windowGroup: this,\n }\n },\n\n props: {\n activeClass: {\n type: String,\n default: 'v-window-item--active',\n },\n continuous: Boolean,\n mandatory: {\n type: Boolean,\n default: true,\n },\n nextIcon: {\n type: [Boolean, String],\n default: '$next',\n },\n prevIcon: {\n type: [Boolean, String],\n default: '$prev',\n },\n reverse: Boolean,\n showArrows: Boolean,\n showArrowsOnHover: Boolean,\n touch: Object as PropType,\n touchless: Boolean,\n value: {\n required: false,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n changedByDelimiters: false,\n internalHeight: undefined as undefined | string, // This can be fixed by child class.\n transitionHeight: undefined as undefined | string, // Intermediate height during transition.\n transitionCount: 0, // Number of windows in transition state.\n isBooted: false,\n isReverse: false,\n }\n },\n\n computed: {\n isActive (): boolean {\n return this.transitionCount > 0\n },\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-window--show-arrows-on-hover': this.showArrowsOnHover,\n }\n },\n computedTransition (): string {\n if (!this.isBooted) return ''\n\n const axis = this.vertical ? 'y' : 'x'\n const reverse = this.internalReverse ? !this.isReverse : this.isReverse\n const direction = reverse ? '-reverse' : ''\n\n return `v-window-${axis}${direction}-transition`\n },\n hasActiveItems (): boolean {\n return Boolean(\n this.items.find(item => !item.disabled)\n )\n },\n hasNext (): boolean {\n return this.continuous || this.internalIndex < this.items.length - 1\n },\n hasPrev (): boolean {\n return this.continuous || this.internalIndex > 0\n },\n internalIndex (): number {\n return this.items.findIndex((item, i) => {\n return this.internalValue === this.getValue(item, i)\n })\n },\n internalReverse (): boolean {\n return this.$vuetify.rtl ? !this.reverse : this.reverse\n },\n },\n\n watch: {\n internalIndex (val, oldVal) {\n this.isReverse = this.updateReverse(val, oldVal)\n },\n },\n\n mounted () {\n window.requestAnimationFrame(() => (this.isBooted = true))\n },\n\n methods: {\n genDefaultSlot () {\n return getSlot(this)\n },\n genContainer (): VNode {\n const children = [this.genDefaultSlot()]\n\n if (this.showArrows) {\n children.push(this.genControlIcons())\n }\n\n return this.$createElement('div', {\n staticClass: 'v-window__container',\n class: {\n 'v-window__container--is-active': this.isActive,\n },\n style: {\n height: this.internalHeight || this.transitionHeight,\n },\n }, children)\n },\n genIcon (\n direction: 'prev' | 'next',\n icon: string,\n click: () => void\n ) {\n const on = {\n click: (e: Event) => {\n e.stopPropagation()\n this.changedByDelimiters = true\n click()\n },\n }\n const attrs = {\n 'aria-label': this.$vuetify.lang.t(`$vuetify.carousel.${direction}`),\n }\n const children = this.$scopedSlots[direction]?.({\n on,\n attrs,\n }) ?? [this.$createElement(VBtn, {\n props: { icon: true },\n attrs,\n on,\n }, [\n this.$createElement(VIcon, {\n props: { large: true },\n }, icon),\n ])]\n\n return this.$createElement('div', {\n staticClass: `v-window__${direction}`,\n }, children)\n },\n genControlIcons () {\n const icons = []\n\n const prevIcon = this.$vuetify.rtl\n ? this.nextIcon\n : this.prevIcon\n\n /* istanbul ignore else */\n if (\n this.hasPrev &&\n prevIcon &&\n typeof prevIcon === 'string'\n ) {\n const icon = this.genIcon('prev', prevIcon, this.prev)\n icon && icons.push(icon)\n }\n\n const nextIcon = this.$vuetify.rtl\n ? this.prevIcon\n : this.nextIcon\n\n /* istanbul ignore else */\n if (\n this.hasNext &&\n nextIcon &&\n typeof nextIcon === 'string'\n ) {\n const icon = this.genIcon('next', nextIcon, this.next)\n icon && icons.push(icon)\n }\n\n return icons\n },\n getNextIndex (index: number): number {\n const nextIndex = (index + 1) % this.items.length\n const item = this.items[nextIndex]\n\n if (item.disabled) return this.getNextIndex(nextIndex)\n\n return nextIndex\n },\n getPrevIndex (index: number): number {\n const prevIndex = (index + this.items.length - 1) % this.items.length\n const item = this.items[prevIndex]\n\n if (item.disabled) return this.getPrevIndex(prevIndex)\n\n return prevIndex\n },\n next () {\n /* istanbul ignore if */\n if (!this.hasActiveItems || !this.hasNext) return\n\n const nextIndex = this.getNextIndex(this.internalIndex)\n const item = this.items[nextIndex]\n\n this.internalValue = this.getValue(item, nextIndex)\n },\n prev () {\n /* istanbul ignore if */\n if (!this.hasActiveItems || !this.hasPrev) return\n\n const lastIndex = this.getPrevIndex(this.internalIndex)\n const item = this.items[lastIndex]\n\n this.internalValue = this.getValue(item, lastIndex)\n },\n updateReverse (val: number, oldVal: number) {\n const itemsLength = this.items.length\n const lastIndex = itemsLength - 1\n\n if (itemsLength <= 2) return val < oldVal\n\n if (val === lastIndex && oldVal === 0) {\n return true\n } else if (val === 0 && oldVal === lastIndex) {\n return false\n } else {\n return val < oldVal\n }\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-window',\n class: this.classes,\n directives: [] as VNodeDirective[],\n }\n\n if (!this.touchless) {\n const value = this.touch || {\n left: () => {\n this.$vuetify.rtl ? this.prev() : this.next()\n },\n right: () => {\n this.$vuetify.rtl ? this.next() : this.prev()\n },\n end: (e: TouchEvent) => {\n e.stopPropagation()\n },\n start: (e: TouchEvent) => {\n e.stopPropagation()\n },\n }\n\n data.directives.push({\n name: 'touch',\n value,\n })\n }\n\n return h('div', data, [this.genContainer()])\n },\n})\n","// Extensions\nimport { BaseSlideGroup } from '../VSlideGroup/VSlideGroup'\n\n// Components\nimport VTab from './VTab'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport SSRBootable from '../../mixins/ssr-bootable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { Route } from 'vue-router'\nimport { VNode } from 'vue'\n\ntype VTabInstance = InstanceType\n\nexport default mixins(\n BaseSlideGroup,\n SSRBootable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-tabs-bar',\n\n provide () {\n return {\n tabsBar: this,\n }\n },\n\n computed: {\n classes () {\n return {\n ...BaseSlideGroup.options.computed.classes.call(this),\n 'v-tabs-bar': true,\n 'v-tabs-bar--is-mobile': this.isMobile,\n // TODO: Remove this and move to v-slide-group\n 'v-tabs-bar--show-arrows': this.showArrows,\n ...this.themeClasses,\n }\n },\n },\n\n watch: {\n items: 'callSlider',\n internalValue: 'callSlider',\n $route: 'onRouteChange',\n },\n\n methods: {\n callSlider () {\n if (!this.isBooted) return\n\n this.$emit('call:slider')\n },\n genContent () {\n const render = BaseSlideGroup.options.methods.genContent.call(this)\n\n render.data = render.data || {}\n render.data.staticClass += ' v-tabs-bar__content'\n\n return render\n },\n onRouteChange (val: Route, oldVal: Route) {\n /* istanbul ignore next */\n if (this.mandatory) return\n\n const items = this.items as unknown as VTabInstance[]\n const newPath = val.path\n const oldPath = oldVal.path\n\n let hasNew = false\n let hasOld = false\n\n for (const item of items) {\n if (item.to === oldPath) hasOld = true\n else if (item.to === newPath) hasNew = true\n\n if (hasNew && hasOld) break\n }\n\n // If we have an old item and not a new one\n // it's assumed that the user navigated to\n // a path that is not present in the items\n if (!hasNew && hasOld) this.internalValue = undefined\n },\n },\n\n render (h): VNode {\n const render = BaseSlideGroup.options.render.call(this, h)\n\n render.data!.attrs = {\n role: 'tablist',\n }\n\n return render\n },\n})\n","// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(Colorable).extend({\n name: 'v-tabs-slider',\n\n render (h): VNode {\n return h('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-tabs-slider',\n }))\n },\n})\n","// Styles\nimport './VTabs.sass'\n\n// Components\nimport VTabsBar from './VTabsBar'\nimport VTabsItems from './VTabsItems'\nimport VTabsSlider from './VTabsSlider'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Colorable,\n Proxyable,\n Themeable\n)\n\ninterface options extends ExtractVue {\n $refs: {\n items: InstanceType\n }\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-tabs',\n\n directives: {\n Resize,\n },\n\n props: {\n activeClass: {\n type: String,\n default: '',\n },\n alignWithTitle: Boolean,\n backgroundColor: String,\n centerActive: Boolean,\n centered: Boolean,\n fixedTabs: Boolean,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: undefined,\n },\n hideSlider: Boolean,\n iconsAndText: Boolean,\n mobileBreakpoint: [String, Number],\n nextIcon: {\n type: String,\n default: '$next',\n },\n optional: Boolean,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n right: Boolean,\n showArrows: [Boolean, String],\n sliderColor: String,\n sliderSize: {\n type: [Number, String],\n default: 2,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n resizeTimeout: 0,\n slider: {\n height: null as null | number,\n left: null as null | number,\n right: null as null | number,\n top: null as null | number,\n width: null as null | number,\n },\n transitionTime: 300,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-tabs--align-with-title': this.alignWithTitle,\n 'v-tabs--centered': this.centered,\n 'v-tabs--fixed-tabs': this.fixedTabs,\n 'v-tabs--grow': this.grow,\n 'v-tabs--icons-and-text': this.iconsAndText,\n 'v-tabs--right': this.right,\n 'v-tabs--vertical': this.vertical,\n ...this.themeClasses,\n }\n },\n isReversed (): boolean {\n return this.$vuetify.rtl && this.vertical\n },\n sliderStyles (): object {\n return {\n height: convertToUnit(this.slider.height),\n left: this.isReversed ? undefined : convertToUnit(this.slider.left),\n right: this.isReversed ? convertToUnit(this.slider.right) : undefined,\n top: this.vertical ? convertToUnit(this.slider.top) : undefined,\n transition: this.slider.left != null ? null : 'none',\n width: convertToUnit(this.slider.width),\n }\n },\n computedColor (): string {\n if (this.color) return this.color\n else if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n },\n\n watch: {\n alignWithTitle: 'callSlider',\n centered: 'callSlider',\n centerActive: 'callSlider',\n fixedTabs: 'callSlider',\n grow: 'callSlider',\n iconsAndText: 'callSlider',\n right: 'callSlider',\n showArrows: 'callSlider',\n vertical: 'callSlider',\n '$vuetify.application.left': 'onResize',\n '$vuetify.application.right': 'onResize',\n '$vuetify.rtl': 'onResize',\n },\n\n mounted () {\n if (typeof ResizeObserver !== 'undefined') {\n const obs = new ResizeObserver(() => {\n this.onResize()\n })\n obs.observe(this.$el)\n this.$on('hook:destroyed', () => {\n obs.disconnect()\n })\n }\n\n this.$nextTick(() => {\n window.setTimeout(this.callSlider, 30)\n })\n },\n\n methods: {\n callSlider () {\n if (\n this.hideSlider ||\n !this.$refs.items ||\n !this.$refs.items.selectedItems.length\n ) {\n this.slider.width = 0\n return false\n }\n\n this.$nextTick(() => {\n // Give screen time to paint\n const activeTab = this.$refs.items.selectedItems[0]\n /* istanbul ignore if */\n if (!activeTab || !activeTab.$el) {\n this.slider.width = 0\n this.slider.left = 0\n return\n }\n const el = activeTab.$el as HTMLElement\n\n this.slider = {\n height: !this.vertical ? Number(this.sliderSize) : el.scrollHeight,\n left: this.vertical ? 0 : el.offsetLeft,\n right: this.vertical ? 0 : el.offsetLeft + el.offsetWidth,\n top: el.offsetTop,\n width: this.vertical ? Number(this.sliderSize) : el.scrollWidth,\n }\n })\n\n return true\n },\n genBar (items: VNode[], slider: VNode | null) {\n const data = {\n style: {\n height: convertToUnit(this.height),\n },\n props: {\n activeClass: this.activeClass,\n centerActive: this.centerActive,\n dark: this.dark,\n light: this.light,\n mandatory: !this.optional,\n mobileBreakpoint: this.mobileBreakpoint,\n nextIcon: this.nextIcon,\n prevIcon: this.prevIcon,\n showArrows: this.showArrows,\n value: this.internalValue,\n },\n on: {\n 'call:slider': this.callSlider,\n change: (val: any) => {\n this.internalValue = val\n },\n },\n ref: 'items',\n }\n\n this.setTextColor(this.computedColor, data)\n this.setBackgroundColor(this.backgroundColor, data)\n\n return this.$createElement(VTabsBar, data, [\n this.genSlider(slider),\n items,\n ])\n },\n genItems (items: VNode | null, item: VNode[]) {\n // If user provides items\n // opt to use theirs\n if (items) return items\n\n // If no tabs are provided\n // render nothing\n if (!item.length) return null\n\n return this.$createElement(VTabsItems, {\n props: {\n value: this.internalValue,\n },\n on: {\n change: (val: any) => {\n this.internalValue = val\n },\n },\n }, item)\n },\n genSlider (slider: VNode | null) {\n if (this.hideSlider) return null\n\n if (!slider) {\n slider = this.$createElement(VTabsSlider, {\n props: { color: this.sliderColor },\n })\n }\n\n return this.$createElement('div', {\n staticClass: 'v-tabs-slider-wrapper',\n style: this.sliderStyles,\n }, [slider])\n },\n onResize () {\n if (this._isDestroyed) return\n\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.callSlider, 0)\n },\n parseNodes () {\n let items = null\n let slider = null\n const item = []\n const tab = []\n const slot = getSlot(this) || []\n const length = slot.length\n\n for (let i = 0; i < length; i++) {\n const vnode = slot[i]\n\n if (vnode.componentOptions) {\n switch (vnode.componentOptions.Ctor.options.name) {\n case 'v-tabs-slider': slider = vnode\n break\n case 'v-tabs-items': items = vnode\n break\n case 'v-tab-item': item.push(vnode)\n break\n // case 'v-tab' - intentionally omitted\n default: tab.push(vnode)\n }\n } else {\n tab.push(vnode)\n }\n }\n\n /**\n * tab: array of `v-tab`\n * slider: single `v-tabs-slider`\n * items: single `v-tabs-items`\n * item: array of `v-tab-item`\n */\n return { tab, slider, items, item }\n },\n },\n\n render (h): VNode {\n const { tab, slider, items, item } = this.parseNodes()\n\n return h('div', {\n staticClass: 'v-tabs',\n class: this.classes,\n directives: [{\n name: 'resize',\n modifiers: { quiet: true },\n value: this.onResize,\n }],\n }, [\n this.genBar(tab, slider),\n this.genItems(items, item),\n ])\n },\n})\n"],"sourceRoot":""}