{"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/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/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","Elevatable","flat","fullWidth","noTitle","width","computedTitleColor","defaultTitleColor","isDark","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","internalValue","scroll","$refs","transform","ResizeObserver","obs","onResize","observe","$on","disconnect","itemsLength","_a","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","VWindowItem","prop","kebabCase","inset","$attrs","continuous","reverse","showArrowsOnHover","touchless","vertical","changedByDelimiters","internalHeight","isBooted","isReverse","axis","hasActiveItems","find","internalIndex","findIndex","updateReverse","genContainer","genControlIcons","height","_c","_b","large","icons","getNextIndex","index","nextIndex","getPrevIndex","prevIndex","lastIndex","SSRBootable","callSlider","onRouteChange","newPath","path","oldPath","hasNew","hasOld","Proxyable","alignWithTitle","backgroundColor","centered","fixedTabs","grow","hideSlider","iconsAndText","mobileBreakpoint","optional","sliderColor","sliderSize","slider","top","transitionTime","isReversed","sliderStyles","computedColor","appIsDark","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-fd6564a8.33d87689.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","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","// 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":""}