{"version":3,"sources":["webpack:///../../../src/components/VToolbar/index.ts","webpack:///../../../src/components/VRadioGroup/VRadioGroup.ts","webpack:///./src/components/controls/DateMenu.vue?c33d","webpack:///src/components/controls/DateMenu.vue","webpack:///./src/components/controls/DateMenu.vue?4941","webpack:///../../../src/mixins/picker-button/index.ts","webpack:///../../../src/components/VDatePicker/VDatePickerTitle.ts","webpack:///../../../src/mixins/localable/index.ts","webpack:///../../../../src/components/VDatePicker/util/pad.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/isDateAllowed.ts","webpack:///../../../../src/components/VDatePicker/mixins/date-picker-table.ts","webpack:///../../../src/components/VDatePicker/VDatePickerDateTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerMonthTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerYears.ts","webpack:///../../../src/components/VPicker/VPicker.ts","webpack:///../../../src/components/VPicker/index.ts","webpack:///../../../src/mixins/picker/index.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts","webpack:///../../../src/components/VDatePicker/VDatePicker.ts","webpack:///./src/components/controls/DateMenu.vue","webpack:///../../../src/components/VRadioGroup/VRadio.ts","webpack:///../../../src/components/VPagination/VPagination.ts","webpack:///../../../src/components/VData/VData.ts","webpack:///../../../src/components/VDataIterator/VDataFooter.ts","webpack:///../../../src/components/VDataIterator/VDataIterator.ts","webpack:///../../src/util/dedupeModelListeners.ts","webpack:///../../src/util/rebuildFunctionalSlots.ts","webpack:///../../../../src/components/VDataTable/mixins/header.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderMobile.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderDesktop.ts","webpack:///../../../src/components/VDataTable/VDataTableHeader.ts","webpack:///../../../src/components/VDataTable/Row.ts","webpack:///../../../src/components/VDataTable/RowGroup.ts","webpack:///../../../src/components/VDataTable/VSimpleTable.ts","webpack:///../../../src/components/VDataTable/MobileRow.ts","webpack:///../../../src/components/VDataTable/VDataTable.ts","webpack:///../../../src/components/VBtn/index.ts","webpack:///../../../src/directives/touch/index.ts"],"names":["VToolbarTitle","VToolbarItems","baseMixins","name","provide","radioGroup","this","props","column","type","default","height","Number","row","value","computed","classes","methods","genDefaultSlot","$createElement","staticClass","attrs","id","role","computedId","genInputSlot","render","genLabel","label","onClick","_vm","_h","_c","_self","ref","disabled","scopedSlots","_u","key","fn","on","valueText","errorMessages","$event","preventDefault","stopPropagation","click","textFieldChange","$emit","slot","coloredAssetUrls","calendar","keydown","model","callback","$$v","menu","expression","colorHex","valueDate","datePickerInput","datePickerChange","staticRenderFns","components","data","valueMoment","valueValid","isValid","dateValue","date","m","format","mixins","genPickerButton","readonly","active","event","class","selectingYear","String","year","yearIcon","isReversing","computedTransition","watch","val","genYearIcon","VIcon","dark","getYearBtn","genTitleText","domProps","innerHTML","genTitleDate","h","locale","currentLocale","$vuetify","lang","padStart","string","targetLength","padString","length","n","createNativeLocaleFormatter","substrOptions","start","makeIsoString","dateString","pad","month","intlFormatter","Intl","Date","e","min","max","nextIcon","prevIcon","required","formatter","timeZone","newVal","genBtn","change","calculateChange","VBtn","icon","light","nativeOn","monthChange","genHeader","color","header","setTextColor","$slots","transition","themeClasses","allowedFn","directives","Touch","allowedDates","current","events","Array","Function","eventColor","Object","range","scrollable","tableDate","displayedMonth","split","displayedYear","genButtonClasses","isAllowed","isSelected","isCurrent","genButtonEvents","dblclick","genButton","setColor","isFloating","mouseEventType","genEvents","getEventColors","arrayize","v","eventColors","eventData","includes","wheel","calculateTableDate","touch","genTable","touchDirective","left","right","from","indexOf","firstDayOfWeek","showWeek","weekdayFormat","day","weekdayFormatter","weekday","weekDays","first","i","Math","delta","genTHead","days","map","genTR","weekDaysBeforeFirstDayOfTheMonth","firstDayOfTheMonth","weekDay","getWeekNumber","dayOfYear","offset","genWeekNumber","genTBody","children","daysInMonth","rows","weekNumber","cols","tds","defaultColor","mounted","setTimeout","activeItem","genYearItem","formatted","genYearItems","selectedYear","maxYear","minYear","fullWidth","landscape","noTitle","width","computedTitleColor","defaultTitleColor","isDark","genTitle","setBackgroundColor","genBodyTransition","genBody","style","undefined","genActions","title","actions","headerColor","genPickerTitle","genPickerBody","genPickerActionsSlot","$scopedSlots","save","cancel","genPicker","body","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","isLeapYear","sanitizeDateString","dayFormat","headerDateFormat","monthFormat","multiple","pickerDate","reactive","showCurrent","Boolean","selectedItemsText","titleDateFormat","validator","yearFormat","now","activePicker","inputDay","inputMonth","inputYear","isMultiple","lastValue","selectedMonths","getFullYear","getMonth","inputDate","tableMonth","tableYear","minMonth","maxMonth","formatters","titleDate","defaultTitleMultipleDateFormatter","dates","t","defaultTitleDateFormatter","titleFormats","titleDateFormatter","landscapeFormatter","nonDigit","sanitizeType","prev","oldValue","output","created","emitInput","x","checkMultipleProp","valueType","constructor","expected","console","isDateAllowed","yearClick","monthClick","dateClick","genTableHeader","toggle","input","genDateTable","VDatePickerDateTable","genMonthTable","VDatePickerMonthTable","genYears","setInputDate","array","component","VDatePicker","VMenu","VTextField","inheritAttrs","offIcon","onIcon","isFocused","groupClasses","computedColor","computedIcon","isActive","hasLabel","hasState","isDisabled","isReadonly","computedName","validationState","genInput","for","focused","genRadio","attrs$","genRipple","dense","onFocus","onBlur","onChange","onKeydown","Resize","circle","totalVisible","maxButtons","selected","items","maxLength","even","end","init","onResize","$el","parentElement","window","next","previous","genIcon","genItem","genItems","index","isNaN","rtl","modifiers","quiet","options","sortBy","sortDesc","customSort","mustSort","multiSort","page","itemsPerPage","groupBy","groupDesc","customGroup","disableSort","disablePagination","disableFiltering","search","customFilter","serverItemsLength","internalOptions","itemsLength","filteredItems","pageCount","pageStart","pageStop","isGrouped","pagination","computedItems","sortItems","paginateItems","groupedItems","groupItems","scopedProps","sort","sortArray","group","updateOptions","originalItemsLength","computedOptions","handler","deep","immediate","by","oldBy","desc","oldDesc","byIndex","k","s","concat","itemsPerPageOptions","firstIcon","lastIcon","itemsPerPageText","itemsPerPageAllText","showFirstLastPage","showCurrentPage","disableItemsPerPage","pageText","disableNextPageIcon","computedDataItemsPerPageOptions","option","onFirstPage","onPreviousPage","onNextPage","onLastPage","onChangeItemsPerPage","genDataItemsPerPageOption","text","genItemsPerPageSelect","computedIPPO","ippo","VSelect","hideDetails","auto","minWidth","genPaginationInfo","genIcons","before","after","VData","itemKey","singleSelect","expanded","singleExpand","loading","noResultsText","noDataText","loadingText","hideDefaultFooter","footerProps","selectableKey","selection","expansion","internalCurrentItems","everyItem","selectableItems","every","someItems","some","sanitizedFooterProps","filter","item","keys","breakingProps","original","replacement","removedProps","prop","toggleSelectAll","isSelectable","select","emit","old","isExpanded","expand","createItemProps","genEmptyWrapper","genEmpty","noData","filteredItemsLength","noResults","empty","genFooter","genDefaultScopedSlot","outerProps","slots","ripple","headers","sortIcon","showGroupBy","genSelectAll","indeterminate","VSimpleCheckbox","genSortIcon","size","sortByText","genSortChip","sortIndex","findIndex","beingSorted","isDesc","sortable","asc","VChip","genSortSelect","find","sortHeaders","th","tr","genGroupByToggle","listeners","scope","styles","functional","mobile","dedupeModelListeners","VDataTableHeaderMobile","VDataTableHeaderDesktop","computedSlots","columns","slotName","scopedSlot","regularSlot","textAlign","divider","headerClass","contentClass","summaryClass","fixedHeader","genWrapper","wrapper","mobileRowChildren","filterFn","searchTableItems","filtered","headersWithoutCustomFilters","headersWithCustomFilters","VDataIterator","showSelect","showExpand","mobileBreakpoint","hideDefaultHeader","caption","headerProps","calculateWidths","headersLength","expandIcon","internalGroupBy","openCache","widths","computedHeaders","defaultHeader","colspanAttrs","isMobile","colspan","breakpoint","columnSorters","reduce","acc","sanitizedHeaderProps","computedItemsPerPage","firstOption","beforeDestroy","calcWidths","querySelectorAll","customFilterWithColumns","customSortWithHeaders","genCaption","genColgroup","genLoading","progress","VProgressLinear","genHeaders","genGroupedRows","genRows","groups","genDefaultGroupedRow","isOpen","genDefaultRows","toggleFn","removeFn","remove","small","RowGroup","genScopedRows","genDefaultExpandedRow","headerRow","genDefaultSimpleRow","expandedRow","MobileRow","genFooters","simpleProps","proxySlot","handleGesture","touchendY","dirRatio","minDistance","touchendX","touchstartX","touchstartY","createHandlers","touchmoveX","touchmoveY","offsetX","offsetY","up","down","move","touchstart","touchend","touchmove","inserted","binding","target","el","passive","handlers","vnode","eventName","unbind"],"mappings":"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","file":"js/chunk-219c1340.fd54202a.js","sourcesContent":["// 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","// Styles\nimport '../../styles/components/_selection-controls.sass'\nimport './VRadioGroup.sass'\n\n// Extensions\nimport VInput from '../VInput'\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\n\n// Types\nimport mixins from '../../util/mixins'\nimport { PropType } from 'vue'\n\nconst baseMixins = mixins(\n Comparable,\n BaseItemGroup,\n VInput\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-radio-group',\n\n provide () {\n return {\n radioGroup: this,\n }\n },\n\n props: {\n column: {\n type: Boolean,\n default: true,\n },\n height: {\n type: [Number, String],\n default: 'auto',\n },\n name: String,\n row: Boolean,\n // If no value set on VRadio\n // will match valueComparator\n // force default to null\n value: null as unknown as PropType,\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls v-input--radio-group': true,\n 'v-input--radio-group--column': this.column && !this.row,\n 'v-input--radio-group--row': this.row,\n }\n },\n },\n\n methods: {\n genDefaultSlot () {\n return this.$createElement('div', {\n staticClass: 'v-input--radio-group__input',\n attrs: {\n id: this.id,\n role: 'radiogroup',\n 'aria-labelledby': this.computedId,\n },\n }, VInput.options.methods.genDefaultSlot.call(this))\n },\n genInputSlot () {\n const render = VInput.options.methods.genInputSlot.call(this)\n\n delete render.data!.on!.click\n\n return render\n },\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return null\n\n label.data!.attrs!.id = this.computedId\n // WAI considers this an orphaned label\n delete label.data!.attrs!.for\n label.tag = 'legend'\n\n return label\n },\n onClick: BaseItemGroup.options.methods.onClick,\n },\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-menu',{ref:\"menu\",attrs:{\"close-on-content-click\":false,\"bottom\":\"\",\"offset-y\":\"\",\"max-width\":\"290px\",\"min-width\":\"290px\",\"nudge-bottom\":\"-25px\",\"disabled\":_vm.disabled},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-text-field',{staticClass:\"date-menu-input\",attrs:{\"value\":_vm.valueText,\"error-messages\":_vm.errorMessages,\"disabled\":_vm.disabled,\"solo\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return on.click($event)},\"change\":_vm.textFieldChange,\"blur\":function($event){return _vm.$emit('blur', $event)}}},[_c('template',{slot:\"append-outer\"},[_c('image-button',{staticClass:\"date-menu-button\",attrs:{\"icon\":\"\",\"disabled\":_vm.disabled,\"image\":_vm.coloredAssetUrls.calendar},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return on.click($event)},\"keydown\":function($event){$event.preventDefault();$event.stopPropagation();return on.keydown($event)}}})],1)],2)]}}]),model:{value:(_vm.menu),callback:function ($$v) {_vm.menu=$$v},expression:\"menu\"}},[_c('v-date-picker',{staticClass:\"date-menu-picker\",attrs:{\"color\":_vm.colorHex,\"value\":_vm.valueDate,\"disabled\":_vm.disabled},on:{\"input\":_vm.datePickerInput,\"change\":_vm.datePickerChange,\"blur\":function($event){return _vm.$emit('blur', $event)}}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vuetify-loader/lib/loader.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vuetify-loader/lib/loader.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateMenu.vue?vue&type=script&lang=js&\"","// 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","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","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","import pad from './pad'\nimport { DatePickerFormatter } from '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'\n\n// Types\nimport { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from '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 nextIcon: {\n type: String,\n default: '$next',\n },\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 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 props: {\n dark: this.dark,\n disabled,\n icon: true,\n light: this.light,\n },\n nativeOn: {\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 }, [this.$slots.default || 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 { DatePickerAllowedDatesFunction } from '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 isDateAllowed from '../util/isDateAllowed'\nimport mixins from '../../../util/mixins'\n\n// Types\nimport { VNodeChildren, PropType } from 'vue'\nimport { DatePickerAllowedDatesFunction, DatePickerFormatter, DatePickerEvents, DatePickerEventColors, DatePickerEventColorValue, TouchWrapper } from '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] as PropType,\n default: () => null,\n },\n eventColor: {\n type: [Array, Function, Object, String] as PropType,\n default: () => 'warning',\n },\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 }),\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 methods: {\n genButtonClasses (isAllowed: boolean, isFloating: boolean, isSelected: boolean, isCurrent: boolean) {\n return {\n 'v-size--default': !isFloating,\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 ...this.themeClasses,\n }\n },\n genButtonEvents (value: string, isAllowed: boolean, mouseEventType: string) {\n if (this.disabled) return undefined\n\n return {\n click: () => {\n isAllowed && !this.readonly && this.$emit('input', value)\n this.$emit(`click:${mouseEventType}`, value)\n },\n dblclick: () => this.$emit(`dblclick:${mouseEventType}`, value),\n }\n },\n genButton (value: string, isFloating: boolean, mouseEventType: string, formatter: DatePickerFormatter) {\n const isAllowed = isDateAllowed(value, this.min, this.max, this.allowedDates)\n const isSelected = this.isSelected(value)\n const isCurrent = value === this.current\n const setColor = isSelected ? this.setBackgroundColor : this.setTextColor\n const color = (isSelected || isCurrent) && (this.color || 'accent')\n\n return this.$createElement('button', setColor(color, {\n staticClass: 'v-btn',\n class: this.genButtonClasses(isAllowed, isFloating, isSelected, isCurrent),\n attrs: {\n type: 'button',\n },\n domProps: {\n disabled: this.disabled || !isAllowed,\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 wheel (e: WheelEvent, calculateTableDate: CalculateTableDateFunction) {\n e.preventDefault()\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) && this.touch(1, calculateTableDate),\n right: (e: TouchWrapper) => (e.offsetX > 15) && 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) => this.wheel(e, calculateTableDate),\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","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\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 '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 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 this.showWeek && days.unshift(this.$createElement('th'))\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 return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7\n },\n getWeekNumber () {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][this.displayedMonth]\n if (this.displayedMonth > 1 &&\n (((this.displayedYear % 4 === 0) && (this.displayedYear % 100 !== 0)) || (this.displayedYear % 400 === 0))\n ) {\n dayOfYear++\n }\n const offset = (\n this.displayedYear +\n ((this.displayedYear - 1) >> 2) -\n Math.floor((this.displayedYear - 1) / 100) +\n Math.floor((this.displayedYear - 1) / 400) -\n Number(this.firstDayOfWeek)\n ) % 7 // https://en.wikipedia.org/wiki/Zeller%27s_congruence\n return Math.floor((dayOfYear + offset) / 7) + 1\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 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 let weekNumber = this.getWeekNumber()\n\n this.showWeek && rows.push(this.genWeekNumber(weekNumber++))\n\n while (day--) rows.push(this.$createElement('td'))\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 % (this.showWeek ? 8 : 7) === 0) {\n children.push(this.genTR(rows))\n rows = []\n day < daysInMonth && this.showWeek && rows.push(this.genWeekNumber(weekNumber++))\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 '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 { createNativeLocaleFormatter } from './util'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from '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: {\n click: () => this.$emit('input', year),\n },\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 './VPicker.sass'\nimport '../VCard/VCard.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n name: 'v-picker',\n\n props: {\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 }), this.$slots.title)\n },\n genBodyTransition () {\n return this.$createElement('transition', {\n props: {\n name: this.transition,\n },\n }, this.$slots.default)\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 }, this.$slots.actions)\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-picker v-card',\n class: {\n 'v-picker--landscape': this.landscape,\n 'v-picker--full-width': this.fullWidth,\n ...this.themeClasses,\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 Themeable from '../themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Colorable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'picker',\n\n props: {\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 }) : this.$slots.default\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 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","import { CalendarTimestamp, CalendarFormatter } from 'types'\n\nexport const PARSE_REGEX: RegExp = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME: RegExp = /(\\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 HOURS_IN_DAY = 24\nexport const FIRST_HOUR = 0\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 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 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 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 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 return end\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 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 return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): boolean {\n return !!PARSE_REGEX.exec(input)\n}\n\nexport function parseTimestamp (input: string, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: string, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: string, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\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 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 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 * 10000 + timestamp.month * 100 + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * 100 + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * 10000 + 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 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 isLeapYear (year: number): boolean {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\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 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 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 const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n return intlFormatter.format(new Date(`${date}T${time}:00+00:00`))\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 { pad, createNativeLocaleFormatter } from './util'\nimport isDateAllowed from './util/isDateAllowed'\nimport { consoleWarn } from '../../util/console'\nimport { daysInMonth } from '../VCalendar/util/timestamp'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropType, PropValidator } from 'vue/types/options'\nimport { VNode } from 'vue'\nimport {\n DatePickerFormatter,\n DatePickerMultipleFormatter,\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEvents,\n DatePickerType,\n} from 'types'\n\ntype DatePickerValue = string | string[] | undefined\ninterface Formatters {\n year: DatePickerFormatter\n titleDate: DatePickerFormatter | DatePickerMultipleFormatter\n}\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'\nfunction sanitizeDateString (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\nexport default mixins(\n Localable,\n Picker\n/* @vue/component */\n).extend({\n name: 'v-date-picker',\n\n props: {\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] as PropType,\n default: () => null,\n },\n eventColor: {\n type: [Array, Function, Object, String] as PropType,\n default: () => 'warning',\n },\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 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 pickerDate: String,\n prevIcon: {\n type: String,\n default: '$prev',\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 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 activePicker: 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 date = (this.multiple || this.range ? (this.value as string[])[(this.value as string[]).length - 1] : this.value) ||\n `${now.getFullYear()}-${now.getMonth() + 1}`\n return sanitizeDateString(date as string, this.type === 'date' ? 'month' : 'year')\n })(),\n }\n },\n\n computed: {\n isMultiple (): boolean {\n return this.multiple || this.range\n },\n lastValue (): string | null {\n return this.isMultiple ? (this.value as string[])[(this.value as string[]).length - 1] : (this.value as string | null)\n },\n selectedMonths (): string | string[] | undefined {\n if (!this.value || !this.value.length || this.type === 'month') {\n return this.value\n } else if (this.isMultiple) {\n return (this.value as string[]).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 }\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 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 (!this.isMultiple && this.value && !this.pickerDate) {\n this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month')\n } else if (this.isMultiple && (this.value as string[]).length && !(oldValue as string[]).length && !this.pickerDate) {\n this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month')\n }\n },\n type (type: DatePickerType) {\n this.activePicker = type.toUpperCase()\n\n if (this.value && this.value.length) {\n const output = (this.isMultiple ? (this.value as string[]) : [this.value as string])\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 && this.value) {\n if (this.value.length === 2) {\n this.$emit('input', [newInput])\n } else {\n const output = [...this.value, newInput]\n this.$emit('input', output)\n this.$emit('change', output)\n }\n return\n }\n\n const output = this.multiple\n ? (\n (this.value as string[]).indexOf(newInput) === -1\n ? (this.value as string[]).concat([newInput])\n : (this.value as string[]).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) {\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.activePicker = '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 this.inputYear = parseInt(value.split('-')[0], 10)\n this.inputMonth = parseInt(value.split('-')[1], 10) - 1\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.activePicker = '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 this.inputYear = parseInt(value.split('-')[0], 10)\n this.inputMonth = parseInt(value.split('-')[1], 10) - 1\n this.inputDay = parseInt(value.split('-')[2], 10)\n this.emitInput(this.inputDate)\n },\n genPickerTitle () {\n return this.$createElement(VDatePickerTitle, {\n props: {\n date: this.value ? (this.formatters.titleDate as (value: any) => string)(this.value) : '',\n disabled: this.disabled,\n readonly: this.readonly,\n selectingYear: this.activePicker === 'YEAR',\n year: this.formatters.year(this.value ? `${this.inputYear}` : this.tableDate),\n yearIcon: this.yearIcon,\n value: this.isMultiple ? (this.value as string[])[0] : this.value,\n },\n slot: 'title',\n on: {\n 'update:selecting-year': (value: boolean) => this.activePicker = value ? 'YEAR' : this.type.toUpperCase(),\n },\n })\n },\n genTableHeader () {\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.activePicker === 'DATE' ? this.minMonth : this.minYear,\n max: this.activePicker === 'DATE' ? this.maxMonth : this.maxYear,\n prevIcon: this.prevIcon,\n readonly: this.readonly,\n value: this.activePicker === 'DATE' ? `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}` : `${pad(this.tableYear, 4)}`,\n },\n on: {\n toggle: () => this.activePicker = (this.activePicker === 'DATE' ? 'MONTH' : 'YEAR'),\n input: (value: string) => this.tableDate = value,\n },\n })\n },\n genDateTable () {\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 min: this.min,\n max: this.max,\n range: this.range,\n readonly: this.readonly,\n scrollable: this.scrollable,\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 'click:date': (value: string) => this.$emit('click:date', value),\n 'dblclick:date': (value: string) => this.$emit('dblclick:date', value),\n },\n })\n },\n genMonthTable () {\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 'click:month': (value: string) => this.$emit('click:month', value),\n 'dblclick:month': (value: string) => this.$emit('dblclick:month', value),\n },\n })\n },\n genYears () {\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 },\n })\n },\n genPickerBody () {\n const children = this.activePicker === 'YEAR' ? [\n this.genYears(),\n ] : [\n this.genTableHeader(),\n this.activePicker === 'DATE' ? this.genDateTable() : this.genMonthTable(),\n ]\n\n return this.$createElement('div', {\n key: this.activePicker,\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 { render, staticRenderFns } from \"./DateMenu.vue?vue&type=template&id=b6a277fc&\"\nimport script from \"./DateMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./DateMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VDatePicker } from 'vuetify/lib/components/VDatePicker';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VDatePicker,VMenu,VTextField})\n","// Styles\nimport './VRadio.sass'\n\n// Components\nimport VRadioGroup from './VRadioGroup'\nimport VLabel from '../VLabel'\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Rippleable from '../../mixins/rippleable'\nimport Themeable from '../../mixins/themeable'\nimport Selectable from '../../mixins/selectable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\n\nconst baseMixins = mixins(\n BindsAttrs,\n Colorable,\n Rippleable,\n GroupableFactory('radioGroup'),\n Themeable\n)\n\ninterface options extends InstanceType {\n radioGroup: InstanceType\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'v-radio',\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n id: String,\n label: String,\n name: String,\n offIcon: {\n type: String,\n default: '$radioOff',\n },\n onIcon: {\n type: String,\n default: '$radioOn',\n },\n readonly: Boolean,\n value: {\n default: null,\n },\n },\n\n data: () => ({\n isFocused: false,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-radio--is-disabled': this.isDisabled,\n 'v-radio--is-focused': this.isFocused,\n ...this.themeClasses,\n ...this.groupClasses,\n }\n },\n computedColor (): string | undefined {\n return Selectable.options.computed.computedColor.call(this)\n },\n computedIcon (): string {\n return this.isActive\n ? this.onIcon\n : this.offIcon\n },\n computedId (): string {\n return VInput.options.computed.computedId.call(this)\n },\n hasLabel: VInput.options.computed.hasLabel,\n hasState (): boolean {\n return (this.radioGroup || {}).hasState\n },\n isDisabled (): boolean {\n return this.disabled || !!(this.radioGroup || {}).disabled\n },\n isReadonly (): boolean {\n return this.readonly || !!(this.radioGroup || {}).readonly\n },\n computedName (): string {\n if (this.name || !this.radioGroup) {\n return this.name\n }\n\n return this.radioGroup.name || `radio-${this.radioGroup._uid}`\n },\n validationState (): string | undefined {\n return (this.radioGroup || {}).validationState || this.computedColor\n },\n },\n\n methods: {\n genInput (args: any) {\n // We can't actually use the mixin directly because\n // it's made for standalone components, but its\n // genInput method is exactly what we need\n return Selectable.options.methods.genInput.call(this, 'radio', args)\n },\n genLabel () {\n if (!this.hasLabel) return null\n\n return this.$createElement(VLabel, {\n on: {\n click: (e: Event) => {\n // Prevent label from\n // causing the input\n // to focus\n e.preventDefault()\n\n this.onChange()\n },\n },\n attrs: {\n for: this.computedId,\n },\n props: {\n color: this.validationState,\n focused: this.hasState,\n },\n }, getSlot(this, 'label') || this.label)\n },\n genRadio () {\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.genInput({\n name: this.computedName,\n value: this.value,\n ...this.attrs$,\n }),\n this.genRipple(this.setTextColor(this.validationState)),\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.radioGroup && this.radioGroup.dense,\n },\n }), this.computedIcon),\n ])\n },\n onFocus (e: Event) {\n this.isFocused = true\n this.$emit('focus', e)\n },\n onBlur (e: Event) {\n this.isFocused = false\n this.$emit('blur', e)\n },\n onChange () {\n if (this.isDisabled || this.isReadonly || this.isActive) return\n\n this.toggle()\n },\n onKeydown: () => {}, // Override default with noop\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-radio',\n class: this.classes,\n } as VNodeData\n\n return h('div', data, [\n this.genRadio(),\n this.genLabel(),\n ])\n },\n})\n","import './VPagination.sass'\n\nimport VIcon from '../VIcon'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\n\n// Types\nimport { VNode, CreateElement } from 'vue'\n\n/* @vue/component */\nexport default mixins(Colorable, Themeable).extend({\n name: 'v-pagination',\n\n directives: { Resize },\n\n props: {\n circle: Boolean,\n disabled: Boolean,\n length: {\n type: Number,\n default: 0,\n validator: (val: number) => val % 1 === 0,\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n totalVisible: [Number, String],\n value: {\n type: Number,\n default: 0,\n },\n },\n\n data () {\n return {\n maxButtons: 0,\n selected: null as number | null,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-pagination': true,\n 'v-pagination--circle': this.circle,\n 'v-pagination--disabled': this.disabled,\n ...this.themeClasses,\n }\n },\n\n items (): (string | number)[] {\n const totalVisible = parseInt(this.totalVisible, 10)\n\n const maxLength = Math.min(\n Math.max(0, totalVisible) || this.length,\n Math.max(0, this.maxButtons) || this.length,\n this.length\n )\n\n if (this.length <= maxLength) {\n return this.range(1, this.length)\n }\n\n const even = maxLength % 2 === 0 ? 1 : 0\n const left = Math.floor(maxLength / 2)\n const right = this.length - left + 1 + even\n\n if (this.value > left && this.value < right) {\n const start = this.value - left + 2\n const end = this.value + left - 2 - even\n\n return [1, '...', ...this.range(start, end), '...', this.length]\n } else if (this.value === left) {\n const end = this.value + left - 1 - even\n return [...this.range(1, end), '...', this.length]\n } else if (this.value === right) {\n const start = this.value - left + 1\n return [1, '...', ...this.range(start, this.length)]\n } else {\n return [\n ...this.range(1, left),\n '...',\n ...this.range(right, this.length),\n ]\n }\n },\n },\n\n watch: {\n value () {\n this.init()\n },\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init () {\n this.selected = null\n\n this.$nextTick(this.onResize)\n // TODO: Change this (f75dee3a, cbdf7caa)\n setTimeout(() => (this.selected = this.value), 100)\n },\n onResize () {\n const width = this.$el && this.$el.parentElement\n ? this.$el.parentElement.clientWidth\n : window.innerWidth\n\n this.maxButtons = Math.floor((width - 96) / 42)\n },\n next (e: Event) {\n e.preventDefault()\n this.$emit('input', this.value + 1)\n this.$emit('next')\n },\n previous (e: Event) {\n e.preventDefault()\n this.$emit('input', this.value - 1)\n this.$emit('previous')\n },\n range (from: number, to: number) {\n const range = []\n\n from = from > 0 ? from : 1\n\n for (let i = from; i <= to; i++) {\n range.push(i)\n }\n\n return range\n },\n genIcon (h: CreateElement, icon: string, disabled: boolean, fn: EventListener): VNode {\n return h('li', [\n h('button', {\n staticClass: 'v-pagination__navigation',\n class: {\n 'v-pagination__navigation--disabled': disabled,\n },\n attrs: {\n type: 'button',\n },\n on: disabled ? {} : { click: fn },\n }, [h(VIcon, [icon])]),\n ])\n },\n genItem (h: CreateElement, i: string | number): VNode {\n const color: string | false = (i === this.value) && (this.color || 'primary')\n return h('button', this.setBackgroundColor(color, {\n staticClass: 'v-pagination__item',\n class: {\n 'v-pagination__item--active': i === this.value,\n },\n attrs: {\n type: 'button',\n },\n on: {\n click: () => this.$emit('input', i),\n },\n }), [i.toString()])\n },\n genItems (h: CreateElement): VNode[] {\n return this.items.map((i, index) => {\n return h('li', { key: index }, [\n isNaN(Number(i)) ? h('span', { class: 'v-pagination__more' }, [i.toString()]) : this.genItem(h, i),\n ])\n })\n },\n },\n\n render (h): VNode {\n const children = [\n this.genIcon(h, this.$vuetify.rtl ? this.nextIcon : this.prevIcon, this.value <= 1, this.previous),\n this.genItems(h),\n this.genIcon(h, this.$vuetify.rtl ? this.prevIcon : this.nextIcon, this.value >= this.length, this.next),\n ]\n\n return h('ul', {\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n class: this.classes,\n }, children)\n },\n})\n","// Helpers\nimport { wrapInArray, sortItems, deepEqual, groupItems, searchItems } from '../../util/helpers'\nimport Vue, { VNode } from 'vue'\n\n// Types\nimport {\n DataOptions,\n DataPagination,\n DataScopeProps,\n DataSortFunction,\n DataGroupFunction,\n DataSearchFunction,\n} from 'types'\nimport { PropValidator, PropType } from 'vue/types/options'\n\nexport default Vue.extend({\n name: 'v-data',\n\n inheritAttrs: false,\n\n props: {\n items: {\n type: Array as PropType,\n default: () => [],\n },\n options: {\n type: Object,\n default: () => ({}),\n } as PropValidator>,\n sortBy: {\n type: [String, Array] as PropType,\n default: () => [],\n },\n sortDesc: {\n type: [Boolean, Array] as PropType,\n default: () => [],\n },\n customSort: {\n type: Function as PropType,\n default: sortItems,\n },\n mustSort: Boolean,\n multiSort: Boolean,\n page: {\n type: Number,\n default: 1,\n },\n itemsPerPage: {\n type: Number,\n default: 10,\n },\n groupBy: {\n type: [String, Array] as PropType,\n default: () => [],\n },\n groupDesc: {\n type: [Boolean, Array] as PropType,\n default: () => [],\n },\n customGroup: {\n type: Function as PropType,\n default: groupItems,\n },\n locale: {\n type: String,\n default: 'en-US',\n },\n disableSort: Boolean,\n disablePagination: Boolean,\n disableFiltering: Boolean,\n search: String,\n customFilter: {\n type: Function as PropType,\n default: searchItems,\n },\n serverItemsLength: {\n type: Number,\n default: -1,\n },\n },\n\n data () {\n let internalOptions: DataOptions = {\n page: this.page,\n itemsPerPage: this.itemsPerPage,\n sortBy: wrapInArray(this.sortBy),\n sortDesc: wrapInArray(this.sortDesc),\n groupBy: wrapInArray(this.groupBy),\n groupDesc: wrapInArray(this.groupDesc),\n mustSort: this.mustSort,\n multiSort: this.multiSort,\n }\n\n if (this.options) {\n internalOptions = Object.assign(internalOptions, this.options)\n }\n\n return {\n internalOptions,\n }\n },\n\n computed: {\n itemsLength (): number {\n return this.serverItemsLength >= 0 ? this.serverItemsLength : this.filteredItems.length\n },\n pageCount (): number {\n return this.internalOptions.itemsPerPage === -1\n ? 1\n : Math.ceil(this.itemsLength / this.internalOptions.itemsPerPage) // TODO: can't use items.length here\n },\n pageStart (): number {\n if (this.internalOptions.itemsPerPage === -1 || !this.items.length) return 0\n\n return (this.internalOptions.page - 1) * this.internalOptions.itemsPerPage\n },\n pageStop (): number {\n if (this.internalOptions.itemsPerPage === -1) return this.itemsLength\n if (!this.items.length) return 0\n\n return Math.min(this.itemsLength, this.internalOptions.page * this.internalOptions.itemsPerPage)\n },\n isGrouped (): boolean {\n return !!this.internalOptions.groupBy.length\n },\n pagination (): DataPagination {\n return {\n page: this.internalOptions.page,\n itemsPerPage: this.internalOptions.itemsPerPage,\n pageStart: this.pageStart,\n pageStop: this.pageStop,\n pageCount: this.pageCount,\n itemsLength: this.itemsLength,\n }\n },\n filteredItems (): any[] {\n let items = this.items.slice()\n\n if (!this.disableFiltering && this.serverItemsLength <= 0) {\n items = this.customFilter(items, this.search)\n }\n\n return items\n },\n computedItems (): any[] {\n let items = this.filteredItems.slice()\n\n if (!this.disableSort && this.serverItemsLength <= 0) {\n items = this.sortItems(items)\n }\n\n if (!this.disablePagination && this.serverItemsLength <= 0) {\n items = this.paginateItems(items)\n }\n\n return items\n },\n groupedItems (): Record | null {\n return this.isGrouped ? this.groupItems(this.computedItems) : null\n },\n scopedProps (): DataScopeProps {\n const props = {\n sort: this.sort,\n sortArray: this.sortArray,\n group: this.group,\n items: this.computedItems,\n options: this.internalOptions,\n updateOptions: this.updateOptions,\n pagination: this.pagination,\n groupedItems: this.groupedItems,\n originalItemsLength: this.items.length,\n }\n\n return props\n },\n computedOptions (): DataOptions {\n return { ...this.options } as DataOptions\n },\n },\n\n watch: {\n computedOptions: {\n handler (options: DataOptions, old: DataOptions) {\n if (deepEqual(options, old)) return\n\n this.updateOptions(options)\n },\n deep: true,\n immediate: true,\n },\n internalOptions: {\n handler (options: DataOptions, old: DataOptions) {\n if (deepEqual(options, old)) return\n this.$emit('update:options', options)\n this.$emit('pagination', this.pagination)\n },\n deep: true,\n immediate: true,\n },\n page (page: number) {\n this.updateOptions({ page })\n },\n 'internalOptions.page' (page: number) {\n this.$emit('update:page', page)\n },\n itemsPerPage (itemsPerPage: number) {\n this.updateOptions({ itemsPerPage })\n },\n 'internalOptions.itemsPerPage' (itemsPerPage: number) {\n this.$emit('update:items-per-page', itemsPerPage)\n },\n sortBy (sortBy: string | string[]) {\n this.updateOptions({ sortBy: wrapInArray(sortBy) })\n },\n 'internalOptions.sortBy' (sortBy: string[], old: string[]) {\n !deepEqual(sortBy, old) && this.$emit('update:sort-by', Array.isArray(this.sortBy) ? sortBy : sortBy[0])\n },\n sortDesc (sortDesc: boolean | boolean[]) {\n this.updateOptions({ sortDesc: wrapInArray(sortDesc) })\n },\n 'internalOptions.sortDesc' (sortDesc: boolean[], old: boolean[]) {\n !deepEqual(sortDesc, old) && this.$emit('update:sort-desc', Array.isArray(this.sortDesc) ? sortDesc : sortDesc[0])\n },\n groupBy (groupBy: string | string[]) {\n this.updateOptions({ groupBy: wrapInArray(groupBy) })\n },\n 'internalOptions.groupBy' (groupBy: string[], old: string[]) {\n !deepEqual(groupBy, old) && this.$emit('update:group-by', Array.isArray(this.groupBy) ? groupBy : groupBy[0])\n },\n groupDesc (groupDesc: boolean | boolean[]) {\n this.updateOptions({ groupDesc: wrapInArray(groupDesc) })\n },\n 'internalOptions.groupDesc' (groupDesc: boolean[], old: boolean[]) {\n !deepEqual(groupDesc, old) && this.$emit('update:group-desc', Array.isArray(this.groupDesc) ? groupDesc : groupDesc[0])\n },\n multiSort (multiSort: boolean) {\n this.updateOptions({ multiSort })\n },\n 'internalOptions.multiSort' (multiSort: boolean) {\n this.$emit('update:multi-sort', multiSort)\n },\n mustSort (mustSort: boolean) {\n this.updateOptions({ mustSort })\n },\n 'internalOptions.mustSort' (mustSort: boolean) {\n this.$emit('update:must-sort', mustSort)\n },\n pageCount: {\n handler (pageCount: number) {\n this.$emit('page-count', pageCount)\n },\n immediate: true,\n },\n computedItems: {\n handler (computedItems: any[]) {\n this.$emit('current-items', computedItems)\n },\n immediate: true,\n },\n },\n\n methods: {\n toggle (key: string, oldBy: string[], oldDesc: boolean[], page: number, mustSort: boolean, multiSort: boolean) {\n let by = oldBy.slice()\n let desc = oldDesc.slice()\n const byIndex = by.findIndex((k: string) => k === key)\n\n if (byIndex < 0) {\n if (!multiSort) {\n by = []\n desc = []\n }\n\n by.push(key)\n desc.push(false)\n } else if (byIndex >= 0 && !desc[byIndex]) {\n desc[byIndex] = true\n } else if (!mustSort) {\n by.splice(byIndex, 1)\n desc.splice(byIndex, 1)\n } else {\n desc[byIndex] = false\n }\n\n // Reset page to 1 if sortBy or sortDesc have changed\n if (!deepEqual(by, oldBy) || !deepEqual(desc, oldDesc)) {\n page = 1\n }\n\n return { by, desc, page }\n },\n group (key: string): void {\n const { by: groupBy, desc: groupDesc, page } = this.toggle(\n key,\n this.internalOptions.groupBy,\n this.internalOptions.groupDesc,\n this.internalOptions.page,\n true,\n false\n )\n this.updateOptions({ groupBy, groupDesc, page })\n },\n sort (key: string | string[]): void {\n if (Array.isArray(key)) return this.sortArray(key)\n\n const { by: sortBy, desc: sortDesc, page } = this.toggle(\n key,\n this.internalOptions.sortBy,\n this.internalOptions.sortDesc,\n this.internalOptions.page,\n this.mustSort,\n this.multiSort\n )\n this.updateOptions({ sortBy, sortDesc, page })\n },\n sortArray (sortBy: string[]) {\n const sortDesc = sortBy.map(s => {\n const i = this.internalOptions.sortBy.findIndex((k: string) => k === s)\n return i > -1 ? this.internalOptions.sortDesc[i] : false\n })\n\n this.updateOptions({ sortBy, sortDesc })\n },\n updateOptions (options: any) {\n this.internalOptions = {\n ...this.internalOptions,\n ...options,\n page: this.serverItemsLength < 0\n ? Math.max(1, Math.min(options.page || this.internalOptions.page, this.pageCount))\n : options.page || this.internalOptions.page,\n }\n },\n sortItems (items: any[]) {\n const sortBy = this.internalOptions.groupBy.concat(this.internalOptions.sortBy)\n const sortDesc = this.internalOptions.groupDesc.concat(this.internalOptions.sortDesc)\n return this.customSort(items, sortBy, sortDesc, this.locale)\n },\n groupItems (items: any[]) {\n return this.customGroup(items, this.internalOptions.groupBy, this.internalOptions.groupDesc)\n },\n paginateItems (items: any[]) {\n // Make sure we don't try to display non-existant page if items suddenly change\n // TODO: Could possibly move this to pageStart/pageStop?\n if (this.serverItemsLength === -1 && items.length <= this.pageStart) {\n this.internalOptions.page = Math.max(1, this.internalOptions.page - 1)\n }\n\n return items.slice(this.pageStart, this.pageStop)\n },\n },\n\n render (): VNode {\n return this.$scopedSlots.default && this.$scopedSlots.default(this.scopedProps) as any\n },\n})\n","import './VDataFooter.sass'\n\n// Components\nimport VSelect from '../VSelect/VSelect'\nimport VIcon from '../VIcon'\nimport VBtn from '../VBtn'\n\n// Types\nimport Vue, { VNode, VNodeChildrenArrayContents, PropType } from 'vue'\nimport { DataPagination, DataOptions, DataItemsPerPageOption } from 'types'\nimport { PropValidator } from 'vue/types/options'\n\nexport default Vue.extend({\n name: 'v-data-footer',\n\n props: {\n options: {\n type: Object as PropType,\n required: true,\n },\n pagination: {\n type: Object as PropType,\n required: true,\n },\n itemsPerPageOptions: {\n type: Array,\n default: () => ([5, 10, 15, -1]),\n } as PropValidator,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n firstIcon: {\n type: String,\n default: '$first',\n },\n lastIcon: {\n type: String,\n default: '$last',\n },\n itemsPerPageText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageText',\n },\n itemsPerPageAllText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageAll',\n },\n showFirstLastPage: Boolean,\n showCurrentPage: Boolean,\n disablePagination: Boolean,\n disableItemsPerPage: Boolean,\n pageText: {\n type: String,\n default: '$vuetify.dataFooter.pageText',\n },\n },\n\n computed: {\n disableNextPageIcon (): boolean {\n return this.options.itemsPerPage < 0 ||\n this.options.page * this.options.itemsPerPage >= this.pagination.itemsLength ||\n this.pagination.pageStop < 0\n },\n computedDataItemsPerPageOptions (): any[] {\n return this.itemsPerPageOptions.map(option => {\n if (typeof option === 'object') return option\n else return this.genDataItemsPerPageOption(option)\n })\n },\n },\n\n methods: {\n updateOptions (obj: object) {\n this.$emit('update:options', Object.assign({}, this.options, obj))\n },\n onFirstPage () {\n this.updateOptions({ page: 1 })\n },\n onPreviousPage () {\n this.updateOptions({ page: this.options.page - 1 })\n },\n onNextPage () {\n this.updateOptions({ page: this.options.page + 1 })\n },\n onLastPage () {\n this.updateOptions({ page: this.pagination.pageCount })\n },\n onChangeItemsPerPage (itemsPerPage: number) {\n this.updateOptions({ itemsPerPage, page: 1 })\n },\n genDataItemsPerPageOption (option: number) {\n return {\n text: option === -1 ? this.$vuetify.lang.t(this.itemsPerPageAllText) : String(option),\n value: option,\n }\n },\n genItemsPerPageSelect () {\n let value = this.options.itemsPerPage\n const computedIPPO = this.computedDataItemsPerPageOptions\n\n if (computedIPPO.length <= 1) return null\n\n if (!computedIPPO.find(ippo => ippo.value === value)) value = computedIPPO[0]\n\n return this.$createElement('div', {\n staticClass: 'v-data-footer__select',\n }, [\n this.$vuetify.lang.t(this.itemsPerPageText),\n this.$createElement(VSelect, {\n attrs: {\n 'aria-label': this.itemsPerPageText,\n },\n props: {\n disabled: this.disableItemsPerPage,\n items: computedIPPO,\n value,\n hideDetails: true,\n auto: true,\n minWidth: '75px',\n },\n on: {\n input: this.onChangeItemsPerPage,\n },\n }),\n ])\n },\n genPaginationInfo () {\n let children: VNodeChildrenArrayContents = ['–']\n\n if (this.pagination.itemsLength) {\n const itemsLength = this.pagination.itemsLength\n const pageStart = this.pagination.pageStart + 1\n const pageStop = itemsLength < this.pagination.pageStop || this.pagination.pageStop < 0\n ? itemsLength\n : this.pagination.pageStop\n\n children = this.$scopedSlots['page-text']\n ? [this.$scopedSlots['page-text']!({ pageStart, pageStop, itemsLength })]\n : [this.$vuetify.lang.t(this.pageText, pageStart, pageStop, itemsLength)]\n }\n\n return this.$createElement('div', {\n class: 'v-data-footer__pagination',\n }, children)\n },\n genIcon (click: Function, disabled: boolean, label: string, icon: string): VNode {\n return this.$createElement(VBtn, {\n props: {\n disabled: disabled || this.disablePagination,\n icon: true,\n text: true,\n // dark: this.dark, // TODO: add mixin\n // light: this.light // TODO: add mixin\n },\n on: {\n click,\n },\n attrs: {\n 'aria-label': label, // TODO: Localization\n },\n }, [this.$createElement(VIcon, icon)])\n },\n genIcons () {\n const before: VNodeChildrenArrayContents = []\n const after: VNodeChildrenArrayContents = []\n\n before.push(this.genIcon(\n this.onPreviousPage,\n this.options.page === 1,\n this.$vuetify.lang.t('$vuetify.dataFooter.prevPage'),\n this.$vuetify.rtl ? this.nextIcon : this.prevIcon\n ))\n\n after.push(this.genIcon(\n this.onNextPage,\n this.disableNextPageIcon,\n this.$vuetify.lang.t('$vuetify.dataFooter.nextPage'),\n this.$vuetify.rtl ? this.prevIcon : this.nextIcon\n ))\n\n if (this.showFirstLastPage) {\n before.unshift(this.genIcon(\n this.onFirstPage,\n this.options.page === 1,\n this.$vuetify.lang.t('$vuetify.dataFooter.firstPage'),\n this.$vuetify.rtl ? this.lastIcon : this.firstIcon\n ))\n\n after.push(this.genIcon(\n this.onLastPage,\n this.options.page >= this.pagination.pageCount || this.options.itemsPerPage === -1,\n this.$vuetify.lang.t('$vuetify.dataFooter.lastPage'),\n this.$vuetify.rtl ? this.firstIcon : this.lastIcon\n ))\n }\n\n return [\n this.$createElement('div', {\n staticClass: 'v-data-footer__icons-before',\n }, before),\n this.showCurrentPage && this.$createElement('span', [this.options.page.toString()]),\n this.$createElement('div', {\n staticClass: 'v-data-footer__icons-after',\n }, after),\n ]\n },\n },\n\n render (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-data-footer',\n }, [\n this.genItemsPerPageSelect(),\n this.genPaginationInfo(),\n this.genIcons(),\n ])\n },\n})\n","// Components\nimport { VData } from '../VData'\nimport VDataFooter from './VDataFooter'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, camelizeObjectKeys } from '../../util/helpers'\nimport { breaking, removed } from '../../util/console'\n\n// Types\nimport { VNode, VNodeChildren, PropType } from 'vue'\nimport { DataScopeProps } from 'types'\n\n/* @vue/component */\nexport default Themeable.extend({\n name: 'v-data-iterator',\n\n props: {\n ...VData.options.props, // TODO: filter out props not used\n itemKey: {\n type: String,\n default: 'id',\n },\n value: {\n type: Array as PropType,\n default: () => [],\n },\n singleSelect: Boolean,\n expanded: {\n type: Array as PropType,\n default: () => [],\n },\n singleExpand: Boolean,\n loading: [Boolean, String],\n noResultsText: {\n type: String,\n default: '$vuetify.dataIterator.noResultsText',\n },\n noDataText: {\n type: String,\n default: '$vuetify.noDataText',\n },\n loadingText: {\n type: String,\n default: '$vuetify.dataIterator.loadingText',\n },\n hideDefaultFooter: Boolean,\n footerProps: Object,\n selectableKey: {\n type: String,\n default: 'isSelectable',\n },\n },\n\n data: () => ({\n selection: {} as Record,\n expansion: {} as Record,\n internalCurrentItems: [] as any[],\n }),\n\n computed: {\n everyItem (): boolean {\n return !!this.selectableItems.length && this.selectableItems.every((i: any) => this.isSelected(i))\n },\n someItems (): boolean {\n return this.selectableItems.some((i: any) => this.isSelected(i))\n },\n sanitizedFooterProps (): Record {\n return camelizeObjectKeys(this.footerProps)\n },\n selectableItems (): any[] {\n return this.internalCurrentItems.filter(item => this.isSelectable(item))\n },\n },\n\n watch: {\n value: {\n handler (value: any[]) {\n this.selection = value.reduce((selection, item) => {\n selection[getObjectValueByPath(item, this.itemKey)] = item\n return selection\n }, {})\n },\n immediate: true,\n },\n selection (value: Record, old: Record) {\n if (deepEqual(Object.keys(value), Object.keys(old))) return\n\n this.$emit('input', Object.values(value))\n },\n expanded: {\n handler (value: any[]) {\n this.expansion = value.reduce((expansion, item) => {\n expansion[getObjectValueByPath(item, this.itemKey)] = true\n return expansion\n }, {})\n },\n immediate: true,\n },\n expansion (value: Record, old: Record) {\n if (deepEqual(value, old)) return\n const keys = Object.keys(value).filter(k => value[k])\n const expanded = !keys.length ? [] : this.items.filter(i => keys.includes(String(getObjectValueByPath(i, this.itemKey))))\n this.$emit('update:expanded', expanded)\n },\n },\n\n created () {\n const breakingProps = [\n ['disable-initial-sort', 'sort-by'],\n ['filter', 'custom-filter'],\n ['pagination', 'options'],\n ['total-items', 'server-items-length'],\n ['hide-actions', 'hide-default-footer'],\n ['rows-per-page-items', 'footer-props.items-per-page-options'],\n ['rows-per-page-text', 'footer-props.items-per-page-text'],\n ['prev-icon', 'footer-props.prev-icon'],\n ['next-icon', 'footer-props.next-icon'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n\n const removedProps = [\n 'expand',\n 'content-class',\n 'content-props',\n 'content-tag',\n ]\n\n /* istanbul ignore next */\n removedProps.forEach(prop => {\n if (this.$attrs.hasOwnProperty(prop)) removed(prop)\n })\n },\n\n methods: {\n toggleSelectAll (value: boolean): void {\n const selection = Object.assign({}, this.selection)\n\n for (let i = 0; i < this.selectableItems.length; i++) {\n const item = this.selectableItems[i]\n\n if (!this.isSelectable(item)) continue\n\n const key = getObjectValueByPath(item, this.itemKey)\n if (value) selection[key] = item\n else delete selection[key]\n }\n\n this.selection = selection\n this.$emit('toggle-select-all', { items: this.internalCurrentItems, value })\n },\n isSelectable (item: any): boolean {\n return getObjectValueByPath(item, this.selectableKey) !== false\n },\n isSelected (item: any): boolean {\n return !!this.selection[getObjectValueByPath(item, this.itemKey)] || false\n },\n select (item: any, value = true, emit = true): void {\n if (!this.isSelectable(item)) return\n\n const selection = this.singleSelect ? {} : Object.assign({}, this.selection)\n const key = getObjectValueByPath(item, this.itemKey)\n\n if (value) selection[key] = item\n else delete selection[key]\n\n if (this.singleSelect && emit) {\n const keys = Object.keys(this.selection)\n const old = keys.length && getObjectValueByPath(this.selection[keys[0]], this.itemKey)\n old && old !== key && this.$emit('item-selected', { item: this.selection[old], value: false })\n }\n this.selection = selection\n emit && this.$emit('item-selected', { item, value })\n },\n isExpanded (item: any): boolean {\n return this.expansion[getObjectValueByPath(item, this.itemKey)] || false\n },\n expand (item: any, value = true): void {\n const expansion = this.singleExpand ? {} : Object.assign({}, this.expansion)\n const key = getObjectValueByPath(item, this.itemKey)\n\n if (value) expansion[key] = true\n else delete expansion[key]\n\n this.expansion = expansion\n this.$emit('item-expanded', { item, value })\n },\n createItemProps (item: any) {\n const props = {\n item,\n select: (v: boolean) => this.select(item, v),\n isSelected: this.isSelected(item),\n expand: (v: boolean) => this.expand(item, v),\n isExpanded: this.isExpanded(item),\n }\n\n return props\n },\n genEmptyWrapper (content: VNodeChildren) {\n return this.$createElement('div', content)\n },\n genEmpty (originalItemsLength: number, filteredItemsLength: number) {\n if (originalItemsLength === 0 && this.loading) {\n const loading = this.$slots['loading'] || this.$vuetify.lang.t(this.loadingText)\n return this.genEmptyWrapper(loading)\n } else if (originalItemsLength === 0) {\n const noData = this.$slots['no-data'] || this.$vuetify.lang.t(this.noDataText)\n return this.genEmptyWrapper(noData)\n } else if (filteredItemsLength === 0) {\n const noResults = this.$slots['no-results'] || this.$vuetify.lang.t(this.noResultsText)\n return this.genEmptyWrapper(noResults)\n }\n\n return null\n },\n genItems (props: DataScopeProps) {\n const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n if (empty) return [empty]\n\n if (this.$scopedSlots.default) {\n return this.$scopedSlots.default({\n ...props,\n isSelected: this.isSelected,\n select: this.select,\n isExpanded: this.isExpanded,\n expand: this.expand,\n })\n }\n\n if (this.$scopedSlots.item) {\n return props.items.map((item: any) => this.$scopedSlots.item!(this.createItemProps(item)))\n }\n\n return []\n },\n genFooter (props: DataScopeProps) {\n if (this.hideDefaultFooter) return null\n\n const data = {\n props: {\n ...this.sanitizedFooterProps,\n options: props.options,\n pagination: props.pagination,\n },\n on: {\n 'update:options': (value: any) => props.updateOptions(value),\n },\n }\n\n const scopedSlots = getPrefixedScopedSlots('footer.', this.$scopedSlots)\n\n return this.$createElement(VDataFooter, {\n scopedSlots,\n ...data,\n })\n },\n genDefaultScopedSlot (props: any) {\n const outerProps = {\n ...props,\n someItems: this.someItems,\n everyItem: this.everyItem,\n toggleSelectAll: this.toggleSelectAll,\n }\n\n return this.$createElement('div', {\n staticClass: 'v-data-iterator',\n }, [\n getSlot(this, 'header', outerProps, true),\n this.genItems(props),\n this.genFooter(props),\n getSlot(this, 'footer', outerProps, true),\n ])\n },\n },\n\n render (): VNode {\n return this.$createElement(VData, {\n props: this.$props,\n on: {\n 'update:options': (v: any, old: any) => !deepEqual(v, old) && this.$emit('update:options', v),\n 'update:page': (v: any) => this.$emit('update:page', v),\n 'update:items-per-page': (v: any) => this.$emit('update:items-per-page', v),\n 'update:sort-by': (v: any) => this.$emit('update:sort-by', v),\n 'update:sort-desc': (v: any) => this.$emit('update:sort-desc', v),\n 'update:group-by': (v: any) => this.$emit('update:group-by', v),\n 'update:group-desc': (v: any) => this.$emit('update:group-desc', v),\n pagination: (v: any, old: any) => !deepEqual(v, old) && this.$emit('pagination', v),\n 'current-items': (v: any[]) => {\n this.internalCurrentItems = v\n this.$emit('current-items', v)\n },\n },\n scopedSlots: {\n default: this.genDefaultScopedSlot,\n },\n })\n },\n})\n","import { VNodeData } from 'vue'\n\n/**\n * Removes duplicate `@input` listeners when\n * using v-model with functional components\n *\n * @see https://github.com/vuetifyjs/vuetify/issues/4460\n */\nexport default function dedupeModelListeners (data: VNodeData): void {\n if (data.model && data.on && data.on.input) {\n if (Array.isArray(data.on.input)) {\n const i = data.on.input.indexOf(data.model.callback)\n if (i > -1) data.on.input.splice(i, 1)\n } else {\n delete data.on.input\n }\n }\n}\n","import { CreateElement, VNode } from 'vue'\n\nexport default function rebuildFunctionalSlots (slots: { [key: string]: VNode[] | undefined }, h: CreateElement) {\n const children: VNode[] = []\n\n for (const slot in slots) {\n if (slots.hasOwnProperty(slot)) {\n children.push(h('template', { slot }, slots[slot]))\n }\n }\n\n return children\n}\n","import { VDataTable } from '../'\nimport VIcon from '../../VIcon'\nimport VSimpleCheckbox from '../../VCheckbox/VSimpleCheckbox'\nimport ripple from '../../../directives/ripple'\n\nimport Vue, { PropType } from 'vue'\nimport mixins from '../../../util/mixins'\nimport { DataOptions, DataTableHeader } from 'types'\n\ntype VDataTableInstance = InstanceType\n\ninterface options extends Vue {\n dataTable: VDataTableInstance\n}\n\nexport default mixins().extend({\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n headers: {\n type: Array as PropType,\n required: true,\n },\n options: {\n type: Object as PropType,\n default: () => ({\n page: 1,\n itemsPerPage: 10,\n sortBy: [],\n sortDesc: [],\n groupBy: [],\n groupDesc: [],\n multiSort: false,\n mustSort: false,\n }),\n },\n sortIcon: {\n type: String,\n default: '$sort',\n },\n everyItem: Boolean,\n someItems: Boolean,\n showGroupBy: Boolean,\n singleSelect: Boolean,\n disableSort: Boolean,\n },\n\n methods: {\n genSelectAll () {\n const data = {\n props: {\n value: this.everyItem,\n indeterminate: !this.everyItem && this.someItems,\n },\n on: {\n input: (v: boolean) => this.$emit('toggle-select-all', v),\n },\n }\n\n if (this.$scopedSlots['data-table-select']) {\n return this.$scopedSlots['data-table-select']!(data)\n }\n\n return this.$createElement(VSimpleCheckbox, {\n staticClass: 'v-data-table__checkbox',\n ...data,\n })\n },\n genSortIcon () {\n return this.$createElement(VIcon, {\n staticClass: 'v-data-table-header__icon',\n props: {\n size: 18,\n },\n }, [this.sortIcon])\n },\n },\n})\n","import { VNode, VNodeChildrenArrayContents } from 'vue'\nimport mixins from '../../util/mixins'\nimport VSelect from '../VSelect/VSelect'\nimport VChip from '../VChip'\nimport header from './mixins/header'\nimport { wrapInArray } from '../../util/helpers'\nimport { DataTableHeader } from 'types'\n\nexport default mixins(header).extend({\n name: 'v-data-table-header-mobile',\n\n props: {\n sortByText: {\n type: String,\n default: '$vuetify.dataTable.sortBy',\n },\n },\n\n methods: {\n genSortChip (props: any) {\n const children: VNodeChildrenArrayContents = [props.item.text]\n\n const sortIndex = this.options.sortBy.findIndex(k => k === props.item.value)\n const beingSorted = sortIndex >= 0\n const isDesc = this.options.sortDesc[sortIndex]\n\n children.push(this.$createElement('div', {\n staticClass: 'v-chip__close',\n class: {\n sortable: true,\n active: beingSorted,\n asc: beingSorted && !isDesc,\n desc: beingSorted && isDesc,\n },\n }, [this.genSortIcon()]))\n\n return this.$createElement(VChip, {\n staticClass: 'sortable',\n nativeOn: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n this.$emit('sort', props.item.value)\n },\n },\n }, children)\n },\n genSortSelect (items: any[]) {\n return this.$createElement(VSelect, {\n props: {\n label: this.$vuetify.lang.t(this.sortByText),\n items,\n hideDetails: true,\n multiple: this.options.multiSort,\n value: this.options.multiSort ? this.options.sortBy : this.options.sortBy[0],\n },\n on: {\n change: (v: string | string[]) => this.$emit('sort', v),\n },\n scopedSlots: {\n selection: props => this.genSortChip(props) as any, // TODO: whyyy?\n },\n })\n },\n },\n\n render (h): VNode {\n const children: VNodeChildrenArrayContents = []\n\n const header = this.headers.find(h => h.value === 'data-table-select')\n if (header && !this.singleSelect) {\n children.push(this.$createElement('div', {\n class: [\n 'v-data-table-header-mobile__select',\n ...wrapInArray(header.class),\n ],\n attrs: {\n width: header.width,\n },\n }, [this.genSelectAll()]))\n }\n\n const sortHeaders: DataTableHeader[] = this.headers.filter(h => h.sortable !== false && h.value !== 'data-table-select')\n if (!this.disableSort && sortHeaders.length) {\n children.push(this.genSortSelect(sortHeaders))\n }\n\n const th = h('th', [h('div', { staticClass: 'v-data-table-header-mobile__wrapper' }, children)])\n\n const tr = h('tr', [th])\n\n return h('thead', {\n staticClass: 'v-data-table-header v-data-table-header-mobile',\n }, [tr])\n },\n})\n","// Helpers\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\nimport header from './mixins/header'\nimport { wrapInArray, convertToUnit } from '../../util/helpers'\nimport { DataTableHeader } from 'types'\n\nexport default mixins(header).extend({\n name: 'v-data-table-header-desktop',\n\n methods: {\n genGroupByToggle (header: DataTableHeader) {\n return this.$createElement('span', {\n on: {\n click: () => this.$emit('group', header.value),\n },\n }, ['group'])\n },\n // eslint-disable-next-line max-statements\n genHeader (header: DataTableHeader) {\n const listeners: any = {}\n const children = []\n const attrs = {\n role: 'columnheader',\n scope: 'col',\n 'aria-label': header.text || '',\n 'aria-sort': 'none',\n }\n\n const styles = {\n width: convertToUnit(header.width),\n minWidth: convertToUnit(header.width),\n }\n\n const classes = [\n `text-${header.align || 'start'}`,\n ...wrapInArray(header.class),\n header.divider && 'v-data-table__divider',\n ]\n\n if (header.value === 'data-table-select' && !this.singleSelect) {\n children.push(this.genSelectAll())\n } else {\n children.push(this.$scopedSlots[header.value]\n ? this.$scopedSlots[header.value]!({ header })\n : this.$createElement('span', [header.text])\n )\n\n if (!this.disableSort && (header.sortable || !header.hasOwnProperty('sortable'))) {\n listeners['click'] = () => this.$emit('sort', header.value)\n\n const sortIndex = this.options.sortBy.findIndex(k => k === header.value)\n const beingSorted = sortIndex >= 0\n const isDesc = this.options.sortDesc[sortIndex]\n\n classes.push('sortable')\n\n if (beingSorted) {\n classes.push('active')\n classes.push(isDesc ? 'desc' : 'asc')\n\n attrs['aria-sort'] = isDesc ? 'descending' : 'ascending'\n attrs['aria-label'] += isDesc\n ? this.$vuetify.lang.t('$vuetify.dataTable.ariaLabel.sortDescending')\n : this.$vuetify.lang.t('$vuetify.dataTable.ariaLabel.sortAscending')\n } else {\n attrs['aria-label'] += this.$vuetify.lang.t('$vuetify.dataTable.ariaLabel.sortNone')\n }\n\n if (header.align === 'end') children.unshift(this.genSortIcon())\n else children.push(this.genSortIcon())\n\n if (this.options.multiSort && beingSorted) {\n children.push(this.$createElement('span', { class: 'v-data-table-header__sort-badge' }, [String(sortIndex + 1)]))\n }\n }\n\n if (this.showGroupBy) {\n children.push(this.genGroupByToggle(header))\n }\n }\n\n return this.$createElement('th', {\n attrs,\n class: classes,\n style: styles,\n on: listeners,\n }, children)\n },\n },\n\n render (): VNode {\n return this.$createElement('thead', {\n staticClass: 'v-data-table-header',\n }, [\n this.$createElement('tr', this.headers.map(header => this.genHeader(header))),\n ])\n },\n})\n","import './VDataTableHeader.sass'\n\nimport Vue from 'vue'\nimport dedupeModelListeners from '../../util/dedupeModelListeners'\nimport rebuildSlots from '../../util/rebuildFunctionalSlots'\n\nimport VDataTableHeaderMobile from './VDataTableHeaderMobile'\nimport VDataTableHeaderDesktop from './VDataTableHeaderDesktop'\n\nexport default Vue.extend({\n name: 'v-data-table-header',\n\n functional: true,\n\n props: {\n mobile: Boolean,\n },\n\n render (h, { props, data, slots }) {\n dedupeModelListeners(data)\n const children = rebuildSlots(slots(), h)\n\n if (props.mobile) {\n return h(VDataTableHeaderMobile, data, children)\n } else {\n return h(VDataTableHeaderDesktop, data, children)\n }\n },\n})\n","// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DataTableHeader } from 'types'\n\n// Utils\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType,\n item: Object,\n rtl: Boolean,\n },\n\n render (h, { props, slots, data }): VNode {\n const computedSlots = slots()\n\n const columns: VNode[] = props.headers.map((header: DataTableHeader) => {\n const children = []\n const value = getObjectValueByPath(props.item, header.value)\n\n const slotName = header.value\n const scopedSlot = data.scopedSlots && data.scopedSlots[slotName]\n const regularSlot = computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(scopedSlot({ item: props.item, header, value }))\n } else if (regularSlot) {\n children.push(regularSlot)\n } else {\n children.push(value == null ? value : String(value))\n }\n\n const textAlign = `text-${header.align || 'start'}`\n\n return h('td', {\n class: {\n [textAlign]: true,\n 'v-data-table__divider': header.divider,\n },\n }, children)\n })\n\n return h('tr', data, columns)\n },\n})\n","import Vue, { VNode } from 'vue'\n\nexport default Vue.extend({\n name: 'row-group',\n\n functional: true,\n\n props: {\n value: {\n type: Boolean,\n default: true,\n },\n headerClass: {\n type: String,\n default: 'v-row-group__header',\n },\n contentClass: String,\n summaryClass: {\n type: String,\n default: 'v-row-group__summary',\n },\n },\n\n render (h, { slots, props }): VNode {\n const computedSlots = slots()\n const children = []\n\n if (computedSlots['column.header']) {\n children.push(h('tr', {\n staticClass: props.headerClass,\n }, computedSlots['column.header']))\n } else if (computedSlots['row.header']) {\n children.push(...computedSlots['row.header'])\n }\n\n if (computedSlots['row.content'] && props.value) children.push(...computedSlots['row.content'])\n\n if (computedSlots['column.summary']) {\n children.push(h('tr', {\n staticClass: props.summaryClass,\n }, computedSlots['column.summary']))\n } else if (computedSlots['row.summary']) {\n children.push(...computedSlots['row.summary'])\n }\n\n return children as any\n },\n})\n","import './VSimpleTable.sass'\n\nimport { convertToUnit } from '../../util/helpers'\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\n\nexport default mixins(Themeable).extend({\n name: 'v-simple-table',\n\n props: {\n dense: Boolean,\n fixedHeader: Boolean,\n height: [Number, String],\n },\n\n computed: {\n classes (): Record {\n return {\n 'v-data-table--dense': this.dense,\n 'v-data-table--fixed-height': !!this.height && !this.fixedHeader,\n 'v-data-table--fixed-header': this.fixedHeader,\n ...this.themeClasses,\n }\n },\n },\n\n methods: {\n genWrapper () {\n return this.$slots.wrapper || this.$createElement('div', {\n staticClass: 'v-data-table__wrapper',\n style: {\n height: convertToUnit(this.height),\n },\n }, [\n this.$createElement('table', this.$slots.default),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-data-table',\n class: this.classes,\n }, [\n this.$slots.top,\n this.genWrapper(),\n this.$slots.bottom,\n ])\n },\n})\n","import Vue, { VNode, PropType } from 'vue'\nimport { getObjectValueByPath } from '../../util/helpers'\nimport { DataTableHeader } from 'types'\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType,\n item: Object,\n rtl: Boolean,\n },\n\n render (h, { props, slots, data }): VNode {\n const computedSlots = slots()\n\n const columns: VNode[] = props.headers.map((header: DataTableHeader) => {\n const classes = {\n 'v-data-table__mobile-row': true,\n }\n\n const children = []\n const value = getObjectValueByPath(props.item, header.value)\n\n const slotName = header.value\n const scopedSlot = data.scopedSlots && data.scopedSlots[slotName]\n const regularSlot = computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(scopedSlot({ item: props.item, header, value }))\n } else if (regularSlot) {\n children.push(regularSlot)\n } else {\n children.push(value == null ? value : String(value))\n }\n\n const mobileRowChildren = [\n h('div', {\n staticClass: 'v-data-table__mobile-row__cell',\n }, children),\n ]\n\n if (header.value !== 'dataTableSelect') {\n mobileRowChildren.unshift(\n h('div', {\n staticClass: 'v-data-table__mobile-row__header',\n }, [header.text])\n )\n }\n\n return h('td', { class: classes }, mobileRowChildren)\n })\n\n return h('tr', { ...data, staticClass: 'v-data-table__mobile-table-row' }, columns)\n },\n})\n","import './VDataTable.sass'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents, VNodeChildren, PropType } from 'vue'\nimport {\n DataTableHeader,\n DataTableFilterFunction,\n DataScopeProps,\n DataOptions,\n DataPagination,\n DataTableCompareFunction,\n DataItemsPerPageOption,\n} from 'types'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport { VData } from '../VData'\nimport { VDataFooter, VDataIterator } from '../VDataIterator'\nimport VBtn from '../VBtn'\nimport VDataTableHeader from './VDataTableHeader'\n// import VVirtualTable from './VVirtualTable'\nimport VIcon from '../VIcon'\nimport VProgressLinear from '../VProgressLinear'\nimport Row from './Row'\nimport RowGroup from './RowGroup'\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VSimpleTable from './VSimpleTable'\nimport MobileRow from './MobileRow'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Helpers\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys } from '../../util/helpers'\nimport { breaking } from '../../util/console'\n\nfunction filterFn (item: any, search: string | null, filter: DataTableFilterFunction) {\n return (header: DataTableHeader) => {\n const value = getObjectValueByPath(item, header.value)\n return header.filter ? header.filter(value, search, item) : filter(value, search, item)\n }\n}\n\nfunction searchTableItems (\n items: any[],\n search: string | null,\n headersWithCustomFilters: DataTableHeader[],\n headersWithoutCustomFilters: DataTableHeader[],\n customFilter: DataTableFilterFunction\n) {\n let filtered = items\n search = typeof search === 'string' ? search.trim() : null\n if (search && headersWithoutCustomFilters.length) {\n filtered = items.filter(item => headersWithoutCustomFilters.some(filterFn(item, search, customFilter)))\n }\n\n if (headersWithCustomFilters.length) {\n filtered = filtered.filter(item => headersWithCustomFilters.every(filterFn(item, search, defaultFilter)))\n }\n\n return filtered\n}\n\n/* @vue/component */\nexport default VDataIterator.extend({\n name: 'v-data-table',\n\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n headers: {\n type: Array,\n default: () => [],\n } as PropValidator,\n showSelect: Boolean,\n showExpand: Boolean,\n showGroupBy: Boolean,\n // TODO: Fix\n // virtualRows: Boolean,\n mobileBreakpoint: {\n type: Number,\n default: 600,\n },\n height: [Number, String],\n hideDefaultHeader: Boolean,\n caption: String,\n dense: Boolean,\n headerProps: Object,\n calculateWidths: Boolean,\n fixedHeader: Boolean,\n headersLength: Number,\n expandIcon: {\n type: String,\n default: '$expand',\n },\n customFilter: {\n type: Function as PropType,\n default: defaultFilter,\n },\n },\n\n data () {\n return {\n internalGroupBy: [] as string[],\n openCache: {} as { [key: string]: boolean },\n widths: [] as number[],\n }\n },\n\n computed: {\n computedHeaders (): DataTableHeader[] {\n if (!this.headers) return []\n const headers = this.headers.filter(h => h.value === undefined || !this.internalGroupBy.find(v => v === h.value))\n const defaultHeader = { text: '', sortable: false, width: '1px' }\n\n if (this.showSelect) {\n const index = headers.findIndex(h => h.value === 'data-table-select')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-select' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n if (this.showExpand) {\n const index = headers.findIndex(h => h.value === 'data-table-expand')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-expand' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n return headers\n },\n colspanAttrs (): object | undefined {\n return this.isMobile ? undefined : {\n colspan: this.headersLength || this.computedHeaders.length,\n }\n },\n isMobile (): boolean {\n // Guard against SSR render\n // https://github.com/vuetifyjs/vuetify/issues/7410\n if (this.$vuetify.breakpoint.width === 0) return false\n\n return this.$vuetify.breakpoint.width < this.mobileBreakpoint\n },\n columnSorters (): Record {\n return this.computedHeaders.reduce>((acc, header) => {\n if (header.sort) acc[header.value] = header.sort\n return acc\n }, {})\n },\n headersWithCustomFilters (): DataTableHeader[] {\n return this.computedHeaders.filter(header => header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n headersWithoutCustomFilters (): DataTableHeader[] {\n return this.computedHeaders.filter(header => !header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n sanitizedHeaderProps (): Record {\n return camelizeObjectKeys(this.headerProps)\n },\n computedItemsPerPage (): number {\n const itemsPerPage = this.options && this.options.itemsPerPage ? this.options.itemsPerPage : this.itemsPerPage\n const itemsPerPageOptions: DataItemsPerPageOption[] | undefined = this.sanitizedFooterProps.itemsPerPageOptions\n\n if (\n itemsPerPageOptions &&\n !itemsPerPageOptions.find(item => typeof item === 'number' ? item === itemsPerPage : item.value === itemsPerPage)\n ) {\n const firstOption = itemsPerPageOptions[0]\n return typeof firstOption === 'object' ? firstOption.value : firstOption\n }\n\n return itemsPerPage\n },\n },\n\n created () {\n const breakingProps = [\n ['sort-icon', 'header-props.sort-icon'],\n ['hide-headers', 'hide-default-header'],\n ['select-all', 'show-select'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n mounted () {\n // if ((!this.sortBy || !this.sortBy.length) && (!this.options.sortBy || !this.options.sortBy.length)) {\n // const firstSortable = this.headers.find(h => !('sortable' in h) || !!h.sortable)\n // if (firstSortable) this.updateOptions({ sortBy: [firstSortable.value], sortDesc: [false] })\n // }\n\n if (this.calculateWidths) {\n window.addEventListener('resize', this.calcWidths)\n this.calcWidths()\n }\n },\n\n beforeDestroy () {\n if (this.calculateWidths) {\n window.removeEventListener('resize', this.calcWidths)\n }\n },\n\n methods: {\n calcWidths () {\n this.widths = Array.from(this.$el.querySelectorAll('th')).map(e => e.clientWidth)\n },\n customFilterWithColumns (items: any[], search: string) {\n return searchTableItems(items, search, this.headersWithCustomFilters, this.headersWithoutCustomFilters, this.customFilter)\n },\n customSortWithHeaders (items: any[], sortBy: string[], sortDesc: boolean[], locale: string) {\n return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters)\n },\n createItemProps (item: any) {\n const props = VDataIterator.options.methods.createItemProps.call(this, item)\n\n return Object.assign(props, { headers: this.computedHeaders })\n },\n genCaption (props: DataScopeProps) {\n if (this.caption) return [this.$createElement('caption', [this.caption])]\n\n return getSlot(this, 'caption', props, true)\n },\n genColgroup (props: DataScopeProps) {\n return this.$createElement('colgroup', this.computedHeaders.map(header => {\n return this.$createElement('col', {\n class: {\n divider: header.divider,\n },\n })\n }))\n },\n genLoading () {\n const progress = this.$slots['progress'] ? this.$slots.progress : this.$createElement(VProgressLinear, {\n props: {\n color: this.loading === true ? 'primary' : this.loading,\n height: 2,\n indeterminate: true,\n },\n })\n\n const th = this.$createElement('th', {\n staticClass: 'column',\n attrs: this.colspanAttrs,\n }, [progress])\n\n const tr = this.$createElement('tr', {\n staticClass: 'v-data-table__progress',\n }, [th])\n\n return this.$createElement('thead', [tr])\n },\n genHeaders (props: DataScopeProps) {\n const data = {\n props: {\n ...this.sanitizedHeaderProps,\n headers: this.computedHeaders,\n options: props.options,\n mobile: this.isMobile,\n showGroupBy: this.showGroupBy,\n someItems: this.someItems,\n everyItem: this.everyItem,\n singleSelect: this.singleSelect,\n disableSort: this.disableSort,\n },\n on: {\n sort: props.sort,\n group: props.group,\n 'toggle-select-all': this.toggleSelectAll,\n },\n }\n\n const children: VNodeChildrenArrayContents = [getSlot(this, 'header', data)]\n\n if (!this.hideDefaultHeader) {\n const scopedSlots = getPrefixedScopedSlots('header.', this.$scopedSlots)\n children.push(this.$createElement(VDataTableHeader, {\n ...data,\n scopedSlots,\n }))\n }\n\n if (this.loading) children.push(this.genLoading())\n\n return children\n },\n genEmptyWrapper (content: VNodeChildrenArrayContents) {\n return this.$createElement('tr', {\n staticClass: 'v-data-table__empty-wrapper',\n }, [\n this.$createElement('td', {\n attrs: this.colspanAttrs,\n }, content),\n ])\n },\n genItems (items: any[], props: DataScopeProps) {\n const empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength)\n if (empty) return [empty]\n\n return props.groupedItems\n ? this.genGroupedRows(props.groupedItems, props)\n : this.genRows(items, props)\n },\n genGroupedRows (groupedItems: Record, props: DataScopeProps) {\n const groups = Object.keys(groupedItems || {})\n\n return groups.map(group => {\n if (!this.openCache.hasOwnProperty(group)) this.$set(this.openCache, group, true)\n\n if (this.$scopedSlots.group) {\n return this.$scopedSlots.group({\n group,\n options: props.options,\n items: groupedItems![group],\n headers: this.computedHeaders,\n })\n } else {\n return this.genDefaultGroupedRow(group, groupedItems[group], props)\n }\n })\n },\n genDefaultGroupedRow (group: string, items: any[], props: DataScopeProps) {\n const isOpen = !!this.openCache[group]\n const children: VNodeChildren = [\n this.$createElement('template', { slot: 'row.content' }, this.genDefaultRows(items, props)),\n ]\n const toggleFn = () => this.$set(this.openCache, group, !this.openCache[group])\n const removeFn = () => props.updateOptions({ groupBy: [], groupDesc: [] })\n\n if (this.$scopedSlots['group.header']) {\n children.unshift(this.$createElement('template', { slot: 'column.header' }, [\n this.$scopedSlots['group.header']!({ group, groupBy: props.options.groupBy, items, headers: this.computedHeaders, isOpen, toggle: toggleFn, remove: removeFn }),\n ]))\n } else {\n const toggle = this.$createElement(VBtn, {\n staticClass: 'ma-0',\n props: {\n icon: true,\n small: true,\n },\n on: {\n click: toggleFn,\n },\n }, [this.$createElement(VIcon, [isOpen ? '$minus' : '$plus'])])\n\n const remove = this.$createElement(VBtn, {\n staticClass: 'ma-0',\n props: {\n icon: true,\n small: true,\n },\n on: {\n click: removeFn,\n },\n }, [this.$createElement(VIcon, ['$close'])])\n\n const column = this.$createElement('td', {\n staticClass: 'text-start',\n attrs: this.colspanAttrs,\n }, [toggle, `${props.options.groupBy[0]}: ${group}`, remove])\n\n children.unshift(this.$createElement('template', { slot: 'column.header' }, [column]))\n }\n\n if (this.$scopedSlots['group.summary']) {\n children.push(this.$createElement('template', { slot: 'column.summary' }, [\n this.$scopedSlots['group.summary']!({ group, groupBy: props.options.groupBy, items, headers: this.computedHeaders }),\n ]))\n }\n\n return this.$createElement(RowGroup, {\n key: group,\n props: {\n value: isOpen,\n },\n }, children)\n },\n genRows (items: any[], props: DataScopeProps) {\n return this.$scopedSlots.item ? this.genScopedRows(items, props) : this.genDefaultRows(items, props)\n },\n genScopedRows (items: any[], props: DataScopeProps) {\n const rows = []\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n rows.push(this.$scopedSlots.item!({\n ...this.createItemProps(item),\n index: i,\n }))\n\n if (this.isExpanded(item)) {\n rows.push(this.$scopedSlots['expanded-item']!({ item, headers: this.computedHeaders }))\n }\n }\n\n return rows\n },\n genDefaultRows (items: any[], props: DataScopeProps) {\n return this.$scopedSlots['expanded-item']\n ? items.map(item => this.genDefaultExpandedRow(item))\n : items.map(item => this.genDefaultSimpleRow(item))\n },\n genDefaultExpandedRow (item: any): VNode {\n const isExpanded = this.isExpanded(item)\n const classes = {\n 'v-data-table__expanded v-data-table__expanded__row': isExpanded,\n }\n const headerRow = this.genDefaultSimpleRow(item, classes)\n const expandedRow = this.$createElement('tr', {\n staticClass: 'v-data-table__expanded v-data-table__expanded__content',\n }, [this.$scopedSlots['expanded-item']!({ item, headers: this.computedHeaders })])\n\n return this.$createElement(RowGroup, {\n props: {\n value: isExpanded,\n },\n }, [\n this.$createElement('template', { slot: 'row.header' }, [headerRow]),\n this.$createElement('template', { slot: 'row.content' }, [expandedRow]),\n ])\n },\n genDefaultSimpleRow (item: any, classes: Record = {}): VNode {\n const scopedSlots = getPrefixedScopedSlots('item.', this.$scopedSlots)\n\n const data = this.createItemProps(item)\n\n if (this.showSelect) {\n const slot = scopedSlots['data-table-select']\n scopedSlots['data-table-select'] = slot ? () => slot(data) : () => this.$createElement(VSimpleCheckbox, {\n staticClass: 'v-data-table__checkbox',\n props: {\n value: data.isSelected,\n disabled: !this.isSelectable(item),\n },\n on: {\n input: (val: boolean) => data.select(val),\n },\n })\n }\n\n if (this.showExpand) {\n const slot = scopedSlots['data-table-expand']\n scopedSlots['data-table-expand'] = slot ? () => slot(data) : () => this.$createElement(VIcon, {\n staticClass: 'v-data-table__expand-icon',\n class: {\n 'v-data-table__expand-icon--active': data.isExpanded,\n },\n on: {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n data.expand(!data.isExpanded)\n },\n },\n }, [this.expandIcon])\n }\n\n return this.$createElement(this.isMobile ? MobileRow : Row, {\n key: getObjectValueByPath(item, this.itemKey),\n class: {\n ...classes,\n 'v-data-table__selected': data.isSelected,\n },\n props: {\n headers: this.computedHeaders,\n item,\n rtl: this.$vuetify.rtl,\n },\n scopedSlots,\n on: {\n // TODO: first argument should be the data object\n // but this is a breaking change so it's for v3\n click: () => this.$emit('click:row', item, data),\n },\n })\n },\n genBody (props: DataScopeProps): VNode | string | VNodeChildren {\n const data = {\n ...props,\n expand: this.expand,\n headers: this.computedHeaders,\n isExpanded: this.isExpanded,\n isMobile: this.isMobile,\n isSelected: this.isSelected,\n select: this.select,\n }\n\n if (this.$scopedSlots.body) {\n return this.$scopedSlots.body!(data)\n }\n\n return this.$createElement('tbody', [\n getSlot(this, 'body.prepend', data, true),\n this.genItems(props.items, props),\n getSlot(this, 'body.append', data, true),\n ])\n },\n genFooters (props: DataScopeProps) {\n const data = {\n props: {\n options: props.options,\n pagination: props.pagination,\n itemsPerPageText: '$vuetify.dataTable.itemsPerPageText',\n ...this.sanitizedFooterProps,\n },\n on: {\n 'update:options': (value: any) => props.updateOptions(value),\n },\n widths: this.widths,\n headers: this.computedHeaders,\n }\n\n const children: VNodeChildren = [\n getSlot(this, 'footer', data, true),\n ]\n\n if (!this.hideDefaultFooter) {\n children.push(this.$createElement(VDataFooter, {\n ...data,\n scopedSlots: getPrefixedScopedSlots('footer.', this.$scopedSlots),\n }))\n }\n\n return children\n },\n genDefaultScopedSlot (props: DataScopeProps): VNode {\n const simpleProps = {\n height: this.height,\n fixedHeader: this.fixedHeader,\n dense: this.dense,\n }\n\n // if (this.virtualRows) {\n // return this.$createElement(VVirtualTable, {\n // props: Object.assign(simpleProps, {\n // items: props.items,\n // height: this.height,\n // rowHeight: this.dense ? 24 : 48,\n // headerHeight: this.dense ? 32 : 48,\n // // TODO: expose rest of props from virtual table?\n // }),\n // scopedSlots: {\n // items: ({ items }) => this.genItems(items, props) as any,\n // },\n // }, [\n // this.proxySlot('body.before', [this.genCaption(props), this.genHeaders(props)]),\n // this.proxySlot('bottom', this.genFooters(props)),\n // ])\n // }\n\n return this.$createElement(VSimpleTable, {\n props: simpleProps,\n }, [\n this.proxySlot('top', getSlot(this, 'top', props, true)),\n this.genCaption(props),\n this.genColgroup(props),\n this.genHeaders(props),\n this.genBody(props),\n this.proxySlot('bottom', this.genFooters(props)),\n ])\n },\n proxySlot (slot: string, content: VNodeChildren) {\n return this.$createElement('template', { slot }, content)\n },\n },\n\n render (): VNode {\n return this.$createElement(VData, {\n props: {\n ...this.$props,\n customFilter: this.customFilterWithColumns,\n customSort: this.customSortWithHeaders,\n itemsPerPage: this.computedItemsPerPage,\n },\n on: {\n 'update:options': (v: DataOptions, old: DataOptions) => {\n this.internalGroupBy = v.groupBy || []\n !deepEqual(v, old) && this.$emit('update:options', v)\n },\n 'update:page': (v: number) => this.$emit('update:page', v),\n 'update:items-per-page': (v: number) => this.$emit('update:items-per-page', v),\n 'update:sort-by': (v: string | string[]) => this.$emit('update:sort-by', v),\n 'update:sort-desc': (v: boolean | boolean[]) => this.$emit('update:sort-desc', v),\n 'update:group-by': (v: string | string[]) => this.$emit('update:group-by', v),\n 'update:group-desc': (v: boolean | boolean[]) => this.$emit('update:group-desc', v),\n pagination: (v: DataPagination, old: DataPagination) => !deepEqual(v, old) && this.$emit('pagination', v),\n 'current-items': (v: any[]) => {\n this.internalCurrentItems = v\n this.$emit('current-items', v)\n },\n 'page-count': (v: number) => this.$emit('page-count', v),\n },\n scopedSlots: {\n default: this.genDefaultScopedSlot as any,\n },\n })\n },\n})\n","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","import { VNodeDirective, VNode } from 'vue/types/vnode'\nimport { keys } from '../../util/helpers'\nimport { TouchHandlers, TouchValue, TouchWrapper } from 'types'\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\ninterface TouchVNodeDirective extends VNodeDirective {\n value?: TouchValue\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start &&\n wrapper.start(Object.assign(event, wrapper))\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end &&\n wrapper.end(Object.assign(event, wrapper))\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move && wrapper.move(Object.assign(event, wrapper))\n}\n\nfunction createHandlers (value: TouchHandlers): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end,\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper),\n }\n}\n\nfunction inserted (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n const value = binding.value!\n const target = value.parent ? el.parentElement : el\n const options = value.options || { passive: true }\n\n // Needed to pass unit tests\n if (!target) return\n\n const handlers = createHandlers(binding.value!)\n target._touchHandlers = Object(target._touchHandlers)\n target._touchHandlers![vnode.context!._uid] = handlers\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(eventName, handlers[eventName] as EventListener, options)\n })\n}\n\nfunction unbind (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n const target = binding.value!.parent ? el.parentElement : el\n if (!target || !target._touchHandlers) return\n\n const handlers = target._touchHandlers[vnode.context!._uid]\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n delete target._touchHandlers[vnode.context!._uid]\n}\n\nexport const Touch = {\n inserted,\n unbind,\n}\n\nexport default Touch\n"],"sourceRoot":""}