{"version":3,"sources":["webpack:///../../../src/mixins/transitionable/index.ts","webpack:///../../../src/components/VAlert/VAlert.ts","webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VDataTable/VSimpleTable.ts","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/eventHelpers.ts","webpack:///../../../../src/components/VDatePicker/util/isDateAllowed.ts","webpack:///../../../../src/components/VDatePicker/mixins/date-picker-table.ts","webpack:///../../src/util/dateTimeUtils.ts","webpack:///../../../src/components/VDatePicker/VDatePickerDateTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerMonthTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerYears.ts","webpack:///../../../src/components/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/VForm/VForm.ts","webpack:///./node_modules/vee-validate/dist/rules.js","webpack:///../../../src/mixins/rippleable/index.ts","webpack:///../../../src/components/VGrid/VCol.ts","webpack:///../../../src/components/VData/VData.ts","webpack:///../../../src/components/VDataIterator/VDataFooter.ts","webpack:///../../../src/components/VDataIterator/VDataIterator.ts","webpack:///../../../../src/components/VDataTable/mixins/header.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderMobile.ts","webpack:///../../../src/components/VDataTable/VDataTableHeaderDesktop.ts","webpack:///../../src/util/dedupeModelListeners.ts","webpack:///../../src/util/rebuildFunctionalSlots.ts","webpack:///../../../src/components/VDataTable/VDataTableHeader.ts","webpack:///../../../src/components/VDataTable/Row.ts","webpack:///../../../src/components/VDataTable/RowGroup.ts","webpack:///../../../src/components/VDataTable/MobileRow.ts","webpack:///../../../src/components/VDataTable/VDataTable.ts","webpack:///../../../src/components/VGrid/grid.ts","webpack:///../../../src/components/VGrid/VContainer.ts","webpack:///../../../src/components/VTextarea/VTextarea.ts","webpack:///../../../src/components/VCheckbox/VCheckbox.ts","webpack:///../../../src/components/VBtn/index.ts","webpack:///../../../src/directives/touch/index.ts","webpack:///../../../src/mixins/mobile/index.ts","webpack:///../../../src/mixins/selectable/index.ts"],"names":["name","props","mode","origin","transition","String","mixins","border","type","validator","closeLabel","default","coloredBorder","dense","dismissible","closeIcon","icon","Boolean","val","outlined","prominent","text","value","computed","__cachedBorder","this","data","staticClass","class","setBackgroundColor","$createElement","__cachedDismissible","color","VBtn","small","attrs","$vuetify","lang","t","on","click","VIcon","__cachedIcon","iconColor","classes","VSheet","computedColor","computedIcon","includes","hasColoredIcon","hasText","isDark","created","$attrs","hasOwnProperty","methods","genWrapper","children","$slots","prepend","$scopedSlots","close","toggle","genContent","genAlert","role","style","directives","isActive","setColor","render","h","breakpoints","ALIGNMENT","makeProps","prefix","def","alignValidator","str","alignProps","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","Object","justify","alignContent","classMap","breakpointClass","className","breakpoint","prop","cache","functional","tag","noGutters","cacheKey","classList","fixedHeader","height","Number","themeClasses","wrapper","genPickerButton","readonly","active","event","Array","date","disabled","selectingYear","year","yearIcon","isReversing","computedTransition","watch","genYearIcon","dark","getYearBtn","genTitleText","domProps","innerHTML","key","genTitleDate","locale","currentLocale","padStart","string","targetLength","padString","length","n","createNativeLocaleFormatter","substrOptions","start","makeIsoString","dateString","pad","month","intlFormatter","Intl","Date","e","format","min","max","nextAriaLabel","nextIcon","prevAriaLabel","prevIcon","required","formatter","timeZone","newVal","genBtn","ariaLabelId","change","ariaLabel","calculateChange","light","monthChange","genHeader","header","setTextColor","instance","eventName","itemTypeSuffix","allowedFn","Touch","allowedDates","current","events","Function","eventColor","range","scrollable","tableDate","wheelThrottle","displayedMonth","split","displayedYear","mounted","genButtonClasses","isAllowed","isSelected","isCurrent","genButtonEvents","createItemTypeNativeListeners","genButton","isFloating","mouseEventType","genEvents","getEventColors","arrayize","v","eventColors","eventData","wheel","calculateTableDate","touch","genTable","touchDirective","left","right","from","indexOf","createUTCDate","day","isFinite","firstWeekOffset","firstWeekDayInFirstWeek","firstDayOfWeek","firstWeekDayOfYear","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","week","Math","localeFirstDayOfYear","showWeek","weekdayFormat","weekdayFormatter","weekday","weekDays","first","parseInt","i","delta","genTHead","days","map","genTR","weekDaysBeforeFirstDayOfTheMonth","firstDayOfTheMonth","weekDay","getWeekNumber","weekNumber","genWeekNumber","genTBody","daysInMonth","rows","cols","row","tds","defaultColor","setTimeout","activeItem","genYearItem","formatted","genYearItems","selectedYear","maxYear","minYear","ref","flat","fullWidth","landscape","noTitle","width","computedTitleColor","defaultTitleColor","genTitle","genBodyTransition","genBody","undefined","genActions","elevationClasses","title","actions","headerColor","genPickerTitle","genPickerBody","genPickerActionsSlot","save","cancel","genPicker","body","slot","elevation","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","sanitizeDateString","dayFormat","headerDateFormat","monthFormat","multiple","nextMonthAriaLabel","nextYearAriaLabel","pickerDate","prevMonthAriaLabel","prevYearAriaLabel","reactive","showCurrent","selectedItemsText","titleDateFormat","yearFormat","now","activePicker","inputDay","inputMonth","inputYear","multipleValue","isMultiple","lastValue","selectedMonths","getFullYear","getMonth","inputDate","tableMonth","tableYear","minMonth","maxMonth","formatters","titleDate","defaultTitleMultipleDateFormatter","dates","defaultTitleDateFormatter","titleFormats","titleDateFormatter","landscapeFormatter","nonDigit","sanitizeType","prev","oldValue","output","emitInput","newInput","concat","filter","x","$emit","checkMultipleProp","valueType","constructor","expected","console","isDateAllowed","yearClick","monthClick","dateClick","genTableHeader","input","genDateTable","VDatePickerDateTable","createItemTypeListeners","genMonthTable","VDatePickerMonthTable","genYears","setInputDate","array","provide","form","inheritAttrs","lazyValidation","inputs","watchers","errorBag","handler","errors","deep","immediate","watchInput","watcher","_uid","valid","shouldValidate","validate","reset","resetErrorBag","resetValidation","register","unregister","found","find","unwatch","novalidate","attrs$","submit","validate$8","_a","re","isArray","emailStr","trim","every","test","params$8","email","params","isNullOrUndefined","isEmptyArray","arr","collection","item","validate$i","params$d","cast","max_value","validate$l","params$f","min_value","validate$n","regex","params$g","RegExp","validate$o","allowFalse","result","computesRequired","params$h","testEmpty","validate$p","target","values","some","params$i","isTarget","computesRequired$1","required_if","ripple","genRipple","center","breakpointProps","offsetProps","orderProps","col","offset","order","alignSelf","parent","hasColClasses","items","options","sortBy","sortDesc","customSort","mustSort","multiSort","page","itemsPerPage","groupBy","groupDesc","customGroup","disableSort","disablePagination","disableFiltering","search","customFilter","serverItemsLength","internalOptions","sortDiff","groupDiff","itemsLength","filteredItems","pageCount","pageStart","pageStop","isGrouped","pagination","computedItems","sortItems","paginateItems","groupedItems","groupItems","scopedProps","sort","sortArray","group","updateOptions","originalItemsLength","computedOptions","by","oldBy","desc","oldDesc","byIndex","k","s","itemsPerPageOptions","firstIcon","lastIcon","itemsPerPageText","itemsPerPageAllText","showFirstLastPage","showCurrentPage","disableItemsPerPage","pageText","disableNextPageIcon","computedDataItemsPerPageOptions","option","onFirstPage","onPreviousPage","onNextPage","onLastPage","onChangeItemsPerPage","genDataItemsPerPageOption","genItemsPerPageSelect","computedIPPO","ippo","VSelect","hideDetails","auto","minWidth","genPaginationInfo","genIcon","label","genIcons","before","after","rtl","VData","itemKey","singleSelect","expanded","mobileBreakpoint","singleExpand","loading","noResultsText","noDataText","loadingText","hideDefaultFooter","footerProps","selectableKey","selection","expansion","internalCurrentItems","everyItem","selectableItems","someItems","sanitizedFooterProps","keys","breakingProps","original","replacement","removedProps","toggleSelectAll","isSelectable","select","emit","old","isExpanded","expand","createItemProps","isMobile","genEmptyWrapper","genEmpty","noData","filteredItemsLength","noResults","genItems","empty","genFooter","scopedSlots","genDefaultScopedSlot","outerProps","headers","sortIcon","showGroupBy","genSelectAll","indeterminate","VSimpleCheckbox","genSortIcon","size","sortByText","genSortChip","sortIndex","findIndex","beingSorted","isDesc","sortable","asc","VChip","genSortSelect","menuProps","closeOnContentClick","sortHeaders","th","tr","genGroupByToggle","getAria","$t","ariaSort","scope","slots","mobile","dedupeModelListeners","mergeData","VDataTableHeaderMobile","VDataTableHeaderDesktop","computedSlots","columns","slotName","scopedSlot","regularSlot","textAlign","divider","headerClass","contentClass","summaryClass","hideDefaultHeader","mobileRowChildren","filterFn","searchTableItems","matchesColumnFilters","headersWithCustomFilters","matchesSearchTerm","headersWithoutCustomFilters","showSelect","showExpand","caption","headerProps","calculateWidths","headersLength","expandIcon","itemClass","loaderHeight","internalGroupBy","openCache","widths","computedHeaders","defaultHeader","index","colspanAttrs","colspan","columnSorters","reduce","acc","sanitizedHeaderProps","computedItemsPerPage","firstOption","window","beforeDestroy","calcWidths","$el","querySelectorAll","customFilterWithColumns","customSortWithHeaders","VDataIterator","genCaption","genColgroup","genLoading","genHeaders","genGroupedRows","genRows","genDefaultGroupedRow","isOpen","toggleFn","removeFn","remove","column","RowGroup","genScopedRows","genDefaultRows","genDefaultExpandedRow","headerRow","genDefaultSimpleRow","expandedRow","MobileRow","contextmenu","dblclick","genFooters","simpleProps","VSimpleTable","proxySlot","id","fluid","baseMixins","autoGrow","noResize","rowHeight","isNaN","parseFloat","noResizeHandle","lazyValue","$nextTick","calculateInputHeight","$refs","minHeight","genInput","onInput","onKeyDown","isFocused","indeterminateIcon","offIcon","onIcon","inputIndeterminate","validationState","isDisabled","hasError","hasColor","genCheckbox","toString","genDefaultSlot","handleGesture","touchendY","dirRatio","minDistance","touchendX","touchstartX","touchstartY","createHandlers","touchmoveX","touchmoveY","offsetX","offsetY","up","down","move","end","touchstart","touchend","touchmove","inserted","binding","el","passive","handlers","vnode","unbind","mobileWidth","isNumber","model","inputValue","falseValue","trueValue","valueComparator","isDirty","rippleState","genLabel","prevent","checked","blur","focus","keydown","onBlur","onClick","onChange","onFocus","onKeydown"],"mappings":"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","file":"js/chunk-240a2d6f.5722be48.js","sourcesContent":["import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'transitionable',\n\n props: {\n mode: String,\n origin: String,\n transition: String,\n },\n})\n","// Styles\nimport './VAlert.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\nimport Transitionable from '../../mixins/transitionable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNodeData } from 'vue'\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(\n VSheet,\n Toggleable,\n Transitionable\n).extend({\n name: 'v-alert',\n\n props: {\n border: {\n type: String,\n validator (val: string) {\n return [\n 'top',\n 'right',\n 'bottom',\n 'left',\n ].includes(val)\n },\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n coloredBorder: Boolean,\n dense: Boolean,\n dismissible: Boolean,\n closeIcon: {\n type: String,\n default: '$cancel',\n },\n icon: {\n default: '',\n type: [Boolean, String],\n validator (val: boolean | string) {\n return typeof val === 'string' || val === false\n },\n },\n outlined: Boolean,\n prominent: Boolean,\n text: Boolean,\n type: {\n type: String,\n validator (val: string) {\n return [\n 'info',\n 'error',\n 'success',\n 'warning',\n ].includes(val)\n },\n },\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n computed: {\n __cachedBorder (): VNode | null {\n if (!this.border) return null\n\n let data: VNodeData = {\n staticClass: 'v-alert__border',\n class: {\n [`v-alert__border--${this.border}`]: true,\n },\n }\n\n if (this.coloredBorder) {\n data = this.setBackgroundColor(this.computedColor, data)\n data.class['v-alert__border--has-color'] = true\n }\n\n return this.$createElement('div', data)\n },\n __cachedDismissible (): VNode | null {\n if (!this.dismissible) return null\n\n const color = this.iconColor\n\n return this.$createElement(VBtn, {\n staticClass: 'v-alert__dismissible',\n props: {\n color,\n icon: true,\n small: true,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: () => (this.isActive = false),\n },\n }, [\n this.$createElement(VIcon, {\n props: { color },\n }, this.closeIcon),\n ])\n },\n __cachedIcon (): VNode | null {\n if (!this.computedIcon) return null\n\n return this.$createElement(VIcon, {\n staticClass: 'v-alert__icon',\n props: { color: this.iconColor },\n }, this.computedIcon)\n },\n classes (): object {\n const classes: Record = {\n ...VSheet.options.computed.classes.call(this),\n 'v-alert--border': Boolean(this.border),\n 'v-alert--dense': this.dense,\n 'v-alert--outlined': this.outlined,\n 'v-alert--prominent': this.prominent,\n 'v-alert--text': this.text,\n }\n\n if (this.border) {\n classes[`v-alert--border-${this.border}`] = true\n }\n\n return classes\n },\n computedColor (): string {\n return this.color || this.type\n },\n computedIcon (): string | boolean {\n if (this.icon === false) return false\n if (typeof this.icon === 'string' && this.icon) return this.icon\n if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false\n\n return `$${this.type}`\n },\n hasColoredIcon (): boolean {\n return (\n this.hasText ||\n (Boolean(this.border) && this.coloredBorder)\n )\n },\n hasText (): boolean {\n return this.text || this.outlined\n },\n iconColor (): string | undefined {\n return this.hasColoredIcon ? this.computedColor : undefined\n },\n isDark (): boolean {\n if (\n this.type &&\n !this.coloredBorder &&\n !this.outlined\n ) return true\n\n return Themeable.options.computed.isDark.call(this)\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('outline')) {\n breaking('outline', 'outlined', this)\n }\n },\n\n methods: {\n genWrapper (): VNode {\n const children = [\n this.$slots.prepend || this.__cachedIcon,\n this.genContent(),\n this.__cachedBorder,\n this.$slots.append,\n this.$scopedSlots.close\n ? this.$scopedSlots.close({ toggle: this.toggle })\n : this.__cachedDismissible,\n ]\n\n const data: VNodeData = {\n staticClass: 'v-alert__wrapper',\n }\n\n return this.$createElement('div', data, children)\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-alert__content',\n }, this.$slots.default)\n },\n genAlert (): VNode {\n let data: VNodeData = {\n staticClass: 'v-alert',\n attrs: {\n role: 'alert',\n },\n on: this.listeners$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n if (!this.coloredBorder) {\n const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor\n data = setColor(this.computedColor, data)\n }\n\n return this.$createElement('div', data, [this.genWrapper()])\n },\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n },\n\n render (h): VNode {\n const render = this.genAlert()\n\n if (!this.transition) return render\n\n return h('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n },\n }, [render])\n },\n})\n","import './VGrid.sass'\n\nimport Vue, { PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\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","// 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 'vuetify/types'\n\ninterface SubstrOptions {\n start?: number\n length: number\n}\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions\n): DatePickerFormatter | undefined\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions\n): DatePickerFormatter\n\nfunction createNativeLocaleFormatter (\n locale: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions = { start: 0, length: 0 }\n): DatePickerFormatter | undefined {\n const makeIsoString = (dateString: string) => {\n const [year, month, date] = dateString.trim().split(' ')[0].split('-')\n return [pad(year, 4), pad(month || 1), pad(date || 1)].join('-')\n }\n\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, options)\n return (dateString: string) => intlFormatter.format(new Date(`${makeIsoString(dateString)}T00:00:00+00:00`))\n } catch (e) {\n return (substrOptions.start || substrOptions.length)\n ? (dateString: string) => makeIsoString(dateString).substr(substrOptions.start || 0, substrOptions.length)\n : undefined\n }\n}\n\nexport default createNativeLocaleFormatter\n","import pad from './pad'\n\n/**\n * @param {String} value YYYY-MM format\n * @param {Number} sign -1 or +1\n */\nexport default (value: string, sign: number) => {\n const [year, month] = value.split('-').map(Number)\n\n if (month + sign === 0) {\n return `${year - 1}-12`\n } else if (month + sign === 13) {\n return `${year + 1}-01`\n } else {\n return `${year}-${pad(month + sign)}`\n }\n}\n","import './VDatePickerHeader.sass'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { createNativeLocaleFormatter, monthChange } from './util'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-header',\n\n props: {\n disabled: Boolean,\n format: Function as PropType,\n min: String,\n max: String,\n nextAriaLabel: String,\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevAriaLabel: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n readonly: Boolean,\n value: {\n type: [Number, String],\n required: true,\n },\n },\n\n data () {\n return {\n isReversing: false,\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n if (this.format) {\n return this.format\n } else if (String(this.value).split('-')[1]) {\n return createNativeLocaleFormatter(this.currentLocale, { month: 'long', year: 'numeric', timeZone: 'UTC' }, { length: 7 })\n } else {\n return createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n }\n },\n },\n\n watch: {\n value (newVal, oldVal) {\n this.isReversing = newVal < oldVal\n },\n },\n\n methods: {\n genBtn (change: number) {\n const ariaLabelId = change > 0 ? this.nextAriaLabel : this.prevAriaLabel\n const ariaLabel = ariaLabelId ? this.$vuetify.lang.t(ariaLabelId) : undefined\n const disabled = this.disabled ||\n (change < 0 && this.min && this.calculateChange(change) < this.min) ||\n (change > 0 && this.max && this.calculateChange(change) > this.max)\n\n return this.$createElement(VBtn, {\n attrs: { 'aria-label': ariaLabel },\n props: {\n dark: this.dark,\n disabled,\n icon: true,\n light: this.light,\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n this.$emit('input', this.calculateChange(change))\n },\n },\n }, [\n this.$createElement(VIcon, ((change < 0) === !this.$vuetify.rtl) ? this.prevIcon : this.nextIcon),\n ])\n },\n calculateChange (sign: number) {\n const [year, month] = String(this.value).split('-').map(Number)\n\n if (month == null) {\n return `${year + sign}`\n } else {\n return monthChange(String(this.value), sign)\n }\n },\n genHeader () {\n const color = !this.disabled && (this.color || 'accent')\n const header = this.$createElement('div', this.setTextColor(color, {\n key: String(this.value),\n }), [this.$createElement('button', {\n attrs: {\n type: 'button',\n },\n on: {\n click: () => this.$emit('toggle'),\n },\n }, [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 Vue from 'vue'\n\nexport function createItemTypeNativeListeners (instance: Vue, itemTypeSuffix: string, value: any) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName.slice(0, -itemTypeSuffix.length)] = (event: Event) => instance.$emit(eventName, value, event)\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n\nexport function createItemTypeListeners (instance: Vue, itemTypeSuffix: string) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName] = instance.$listeners[eventName]\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n","import { DatePickerAllowedDatesFunction } from 'vuetify/types'\n\nexport default function isDateAllowed (date: string, min: string, max: string, allowedFn: DatePickerAllowedDatesFunction | undefined) {\n return (!allowedFn || allowedFn(date)) &&\n (!min || date >= min.substr(0, 10)) &&\n (!max || date <= max)\n}\n","import '../VDatePickerTable.sass'\n\n// Directives\nimport Touch from '../../../directives/touch'\n\n// Mixins\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Themeable from '../../../mixins/themeable'\n\n// Utils\nimport { createItemTypeNativeListeners } from '../util'\nimport isDateAllowed from '../util/isDateAllowed'\nimport { mergeListeners } from '../../../util/mergeData'\nimport mixins from '../../../util/mixins'\nimport { throttle } from '../../../util/helpers'\n\n// Types\nimport {\n PropType,\n VNodeChildren,\n} from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEventColorValue,\n DatePickerEvents,\n DatePickerFormatter,\n TouchWrapper,\n} from 'vuetify/types'\n\ntype CalculateTableDateFunction = (v: number) => string\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n directives: { Touch },\n\n props: {\n allowedDates: Function as PropType,\n current: String,\n disabled: Boolean,\n format: Function as PropType,\n events: {\n type: [Array, Function, Object],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n min: String,\n max: String,\n range: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n tableDate: {\n type: String,\n required: true,\n },\n value: [String, Array] as PropType,\n },\n\n data: () => ({\n isReversing: false,\n wheelThrottle: null as any,\n }),\n\n computed: {\n computedTransition (): string {\n return (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition'\n },\n displayedMonth (): number {\n return Number(this.tableDate.split('-')[1]) - 1\n },\n displayedYear (): number {\n return Number(this.tableDate.split('-')[0])\n },\n },\n\n watch: {\n tableDate (newVal: string, oldVal: string) {\n this.isReversing = newVal < oldVal\n },\n },\n\n mounted () {\n this.wheelThrottle = throttle(this.wheel, 250)\n },\n\n methods: {\n genButtonClasses (isAllowed: boolean, isFloating: boolean, isSelected: boolean, isCurrent: boolean) {\n return {\n 'v-size--default': !isFloating,\n 'v-date-picker-table__current': isCurrent,\n 'v-btn--active': isSelected,\n 'v-btn--flat': !isAllowed || this.disabled,\n 'v-btn--text': isSelected === isCurrent,\n 'v-btn--rounded': isFloating,\n 'v-btn--disabled': !isAllowed || this.disabled,\n 'v-btn--outlined': isCurrent && !isSelected,\n ...this.themeClasses,\n }\n },\n genButtonEvents (value: string, isAllowed: boolean, mouseEventType: string) {\n if (this.disabled) return undefined\n\n return mergeListeners({\n click: () => {\n if (isAllowed && !this.readonly) this.$emit('input', value)\n },\n }, createItemTypeNativeListeners(this, `:${mouseEventType}`, value))\n },\n genButton (value: string, isFloating: boolean, mouseEventType: string, formatter: DatePickerFormatter) {\n const isAllowed = isDateAllowed(value, this.min, this.max, this.allowedDates)\n const isSelected = this.isSelected(value) && isAllowed\n const isCurrent = value === this.current\n const setColor = isSelected ? this.setBackgroundColor : this.setTextColor\n const color = (isSelected || isCurrent) && (this.color || 'accent')\n\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 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) => {\n e.preventDefault()\n this.wheelThrottle(e, calculateTableDate)\n },\n } : undefined,\n directives: [touchDirective],\n }, [transition])\n },\n isSelected (value: string): boolean {\n if (Array.isArray(this.value)) {\n if (this.range && this.value.length === 2) {\n const [from, to] = [...this.value].sort()\n return from <= value && value <= to\n } else {\n return this.value.indexOf(value) !== -1\n }\n }\n\n return value === this.value\n },\n },\n})\n","function createUTCDate (year: number, month = 0, day = 1) {\n let date\n if (year < 100 && year >= 0) {\n date = new Date(Date.UTC(year, month, day))\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(year)\n }\n } else {\n date = new Date(Date.UTC(year, month, day))\n }\n\n return date\n}\n\nfunction firstWeekOffset (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear\n const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7\n\n return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1\n}\n\nfunction dayOfYear (year: number, month: number, day: number, firstDayOfWeek: number) {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month]\n if (month > 1 && isLeapYear(year)) {\n dayOfYear++\n }\n\n return dayOfYear + day\n}\n\nfunction weeksInYear (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear)\n const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear)\n const daysInYear = isLeapYear(year) ? 366 : 365\n\n return (daysInYear - weekOffset + weekOffsetNext) / 7\n}\n\nexport function weekNumber (year: number, month: number, day: number, firstDayOfWeek: number, localeFirstDayOfYear: number): number {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear)\n const week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7)\n\n if (week < 1) {\n return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear)\n } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {\n return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)\n } else {\n return week\n }\n}\n\nexport function isLeapYear (year: number): boolean {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\n}\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport { pad, createNativeLocaleFormatter, monthChange } from './util'\nimport { createRange } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeChildren, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-date-table',\n\n props: {\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n showWeek: Boolean,\n weekdayFormat: Function as PropType,\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { day: 'numeric', timeZone: 'UTC' }, { start: 8, length: 2 })\n },\n weekdayFormatter (): DatePickerFormatter | undefined {\n return this.weekdayFormat || createNativeLocaleFormatter(this.currentLocale, { weekday: 'narrow', timeZone: 'UTC' })\n },\n weekDays (): string[] {\n const first = parseInt(this.firstDayOfWeek, 10)\n\n return this.weekdayFormatter\n ? createRange(7).map(i => this.weekdayFormatter!(`2017-01-${first + i + 15}`)) // 2017-01-15 is Sunday\n : createRange(7).map(i => ['S', 'M', 'T', 'W', 'T', 'F', 'S'][(i + first) % 7])\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return monthChange(this.tableDate, Math.sign(delta || 1))\n },\n genTHead () {\n const days = this.weekDays.map(day => this.$createElement('th', day))\n if (this.showWeek) {\n days.unshift(this.$createElement('th'))\n }\n\n return this.$createElement('thead', this.genTR(days))\n },\n // Returns number of the days from the firstDayOfWeek to the first day of the current month\n weekDaysBeforeFirstDayOfTheMonth () {\n const firstDayOfTheMonth = new Date(`${this.displayedYear}-${pad(this.displayedMonth + 1)}-01T00:00:00+00:00`)\n const weekDay = firstDayOfTheMonth.getUTCDay()\n\n return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7\n },\n getWeekNumber (dayInMonth: number) {\n return weekNumber(\n this.displayedYear,\n this.displayedMonth,\n dayInMonth,\n parseInt(this.firstDayOfWeek),\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('td', [\n this.$createElement('small', {\n staticClass: 'v-date-picker-table--date__week',\n }, String(weekNumber).padStart(2, '0')),\n ])\n },\n genTBody () {\n const children = []\n const daysInMonth = new Date(this.displayedYear, this.displayedMonth + 1, 0).getDate()\n let rows = []\n let day = this.weekDaysBeforeFirstDayOfTheMonth()\n\n if (this.showWeek) {\n rows.push(this.genWeekNumber(this.getWeekNumber(1)))\n }\n\n 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 if (this.showWeek && (day < daysInMonth)) {\n rows.push(this.genWeekNumber(this.getWeekNumber(day + 7)))\n }\n }\n }\n\n if (rows.length) {\n children.push(this.genTR(rows))\n }\n\n return this.$createElement('tbody', children)\n },\n genTR (children: VNodeChildren) {\n return [this.$createElement('tr', children)]\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--date', [\n this.genTHead(),\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { pad, createNativeLocaleFormatter } from './util'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-month-table',\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { month: 'short', timeZone: 'UTC' }, { start: 5, length: 2 })\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return `${parseInt(this.tableDate, 10) + Math.sign(delta || 1)}`\n },\n genTBody () {\n const children = []\n const cols = Array(3).fill(null)\n const rows = 12 / cols.length\n\n for (let row = 0; row < rows; row++) {\n const tds = cols.map((_, col) => {\n const month = row * cols.length + col\n const date = `${this.displayedYear}-${pad(month + 1)}`\n return this.$createElement('td', {\n key: month,\n }, [\n this.genButton(date, false, 'month', this.formatter),\n ])\n })\n\n children.push(this.$createElement('tr', {\n key: row,\n }, tds))\n }\n\n return this.$createElement('tbody', children)\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--month', [\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","import './VDatePickerYears.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\n\n// Utils\nimport {\n createItemTypeNativeListeners,\n createNativeLocaleFormatter,\n} from './util'\nimport { mergeListeners } from '../../util/mergeData'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\ninterface options extends Vue {\n $el: HTMLElement\n}\n\nexport default mixins\n/* eslint-enable indent */\n>(\n Colorable,\n Localable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-years',\n\n props: {\n format: Function as PropType,\n min: [Number, String],\n max: [Number, String],\n readonly: Boolean,\n value: [Number, String],\n },\n\n data () {\n return {\n defaultColor: 'primary',\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n },\n },\n\n mounted () {\n setTimeout(() => {\n const activeItem = this.$el.getElementsByClassName('active')[0]\n if (activeItem) {\n this.$el.scrollTop = activeItem.offsetTop - this.$el.offsetHeight / 2 + activeItem.offsetHeight / 2\n } else if (this.min && !this.max) {\n this.$el.scrollTop = this.$el.scrollHeight\n } else if (!this.min && this.max) {\n this.$el.scrollTop = 0\n } else {\n this.$el.scrollTop = this.$el.scrollHeight / 2 - this.$el.offsetHeight / 2\n }\n })\n },\n\n methods: {\n genYearItem (year: number): VNode {\n const formatted = this.formatter(`${year}`)\n const active = parseInt(this.value, 10) === year\n const color = active && (this.color || 'primary')\n\n return this.$createElement('li', this.setTextColor(color, {\n key: year,\n class: { active },\n on: mergeListeners({\n click: () => this.$emit('input', year),\n }, createItemTypeNativeListeners(this, ':year', year)),\n }), formatted)\n },\n\n genYearItems (): VNode[] {\n const children = []\n const selectedYear = this.value ? parseInt(this.value, 10) : new Date().getFullYear()\n const maxYear = this.max ? parseInt(this.max, 10) : (selectedYear + 100)\n const minYear = Math.min(maxYear, this.min ? parseInt(this.min, 10) : (selectedYear - 100))\n\n for (let year = maxYear; year >= minYear; year--) {\n children.push(this.genYearItem(year))\n }\n\n return children\n },\n },\n\n render (): VNode {\n return this.$createElement('ul', {\n staticClass: 'v-date-picker-years',\n ref: 'years',\n }, this.genYearItems())\n },\n})\n","import './VPicker.sass'\nimport '../VCard/VCard.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Elevatable,\n Themeable\n).extend({\n name: 'v-picker',\n\n props: {\n flat: Boolean,\n fullWidth: Boolean,\n landscape: Boolean,\n noTitle: Boolean,\n transition: {\n type: String,\n default: 'fade-transition',\n },\n width: {\n type: [Number, String],\n default: 290,\n },\n },\n\n computed: {\n computedTitleColor (): string | false {\n const defaultTitleColor = this.isDark ? false : (this.color || 'primary')\n return this.color || defaultTitleColor\n },\n },\n\n methods: {\n genTitle () {\n return this.$createElement('div', this.setBackgroundColor(this.computedTitleColor, {\n staticClass: 'v-picker__title',\n class: {\n 'v-picker__title--landscape': this.landscape,\n },\n }), 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--flat': this.flat,\n 'v-picker--landscape': this.landscape,\n 'v-picker--full-width': this.fullWidth,\n ...this.themeClasses,\n ...this.elevationClasses,\n },\n }, [\n this.$slots.title ? this.genTitle() : null,\n this.genBody(),\n this.$slots.actions ? this.genActions() : null,\n ])\n },\n})\n","import VPicker from './VPicker'\n\nexport { VPicker }\nexport default VPicker\n","// Components\nimport VPicker from '../../components/VPicker'\n\n// Mixins\nimport Colorable from '../colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Themeable from '../themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Colorable,\n Elevatable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'picker',\n\n props: {\n flat: Boolean,\n fullWidth: Boolean,\n headerColor: String,\n landscape: Boolean,\n noTitle: Boolean,\n width: {\n type: [Number, String],\n default: 290,\n },\n },\n\n methods: {\n genPickerTitle (): VNode | null {\n return null\n },\n genPickerBody (): VNode | null {\n return null\n },\n genPickerActionsSlot () {\n return this.$scopedSlots.default ? this.$scopedSlots.default({\n save: (this as any).save,\n cancel: (this as any).cancel,\n }) : 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 elevation: this.elevation,\n flat: this.flat,\n fullWidth: this.fullWidth,\n landscape: this.landscape,\n light: this.light,\n width: this.width,\n noTitle: this.noTitle,\n },\n }, children)\n },\n },\n})\n","import { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\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 MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n","// Components\nimport VDatePickerTitle from './VDatePickerTitle'\nimport VDatePickerHeader from './VDatePickerHeader'\nimport VDatePickerDateTable from './VDatePickerDateTable'\nimport VDatePickerMonthTable from './VDatePickerMonthTable'\nimport VDatePickerYears from './VDatePickerYears'\n\n// Mixins\nimport Localable from '../../mixins/localable'\nimport Picker from '../../mixins/picker'\n\n// Utils\nimport isDateAllowed from './util/isDateAllowed'\nimport mixins from '../../util/mixins'\nimport { wrapInArray } from '../../util/helpers'\nimport { daysInMonth } from '../VCalendar/util/timestamp'\nimport { consoleWarn } from '../../util/console'\nimport {\n createItemTypeListeners,\n createNativeLocaleFormatter,\n pad,\n} from './util'\n\n// Types\nimport {\n PropType,\n PropValidator,\n} from 'vue/types/options'\nimport { VNode } from 'vue'\nimport {\n DatePickerFormatter,\n DatePickerMultipleFormatter,\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEvents,\n DatePickerType,\n} from 'vuetify/types'\n\ntype DatePickerValue = string | string[] | undefined\ninterface Formatters {\n year: DatePickerFormatter\n titleDate: DatePickerFormatter | DatePickerMultipleFormatter\n}\n\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],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n // Function formatting the tableDate in the day/month table header\n headerDateFormat: Function as PropType,\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n max: String,\n min: String,\n // Function formatting month in the months table\n monthFormat: Function as PropType,\n multiple: Boolean,\n nextIcon: {\n type: String,\n default: '$next',\n },\n nextMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextMonthAriaLabel',\n },\n nextYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextYearAriaLabel',\n },\n pickerDate: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n prevMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevMonthAriaLabel',\n },\n prevYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevYearAriaLabel',\n },\n range: Boolean,\n reactive: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n showCurrent: {\n type: [Boolean, String],\n default: true,\n },\n selectedItemsText: {\n type: String,\n default: '$vuetify.datePicker.itemsSelected',\n },\n 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 multipleValue = wrapInArray(this.value)\n const date = multipleValue[multipleValue.length - 1] ||\n (typeof this.showCurrent === 'string' ? this.showCurrent : `${now.getFullYear()}-${now.getMonth() + 1}`)\n return sanitizeDateString(date as string, this.type === 'date' ? 'month' : 'year')\n })(),\n }\n },\n\n computed: {\n multipleValue (): string[] {\n return wrapInArray(this.value)\n },\n isMultiple (): boolean {\n return this.multiple || this.range\n },\n lastValue (): string | null {\n return this.isMultiple ? this.multipleValue[this.multipleValue.length - 1] : (this.value as string | null)\n },\n selectedMonths (): string | string[] | undefined {\n if (!this.value || this.type === 'month') {\n return this.value\n } else if (this.isMultiple) {\n return this.multipleValue.map(val => val.substr(0, 7))\n } else {\n return (this.value as string).substr(0, 7)\n }\n },\n current (): string | null {\n if (this.showCurrent === true) {\n return sanitizeDateString(`${this.now.getFullYear()}-${this.now.getMonth() + 1}-${this.now.getDate()}`, this.type)\n }\n\n return this.showCurrent || null\n },\n inputDate (): string {\n return this.type === 'date'\n ? `${this.inputYear}-${pad(this.inputMonth! + 1)}-${pad(this.inputDay!)}`\n : `${this.inputYear}-${pad(this.inputMonth! + 1)}`\n },\n tableMonth (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[1]) - 1\n },\n tableYear (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[0])\n },\n minMonth (): string | null {\n return this.min ? sanitizeDateString(this.min, 'month') : null\n },\n maxMonth (): string | null {\n return this.max ? sanitizeDateString(this.max, 'month') : null\n },\n minYear (): string | null {\n return this.min ? sanitizeDateString(this.min, 'year') : null\n },\n maxYear (): string | null {\n return this.max ? sanitizeDateString(this.max, 'year') : null\n },\n formatters (): Formatters {\n return {\n year: this.yearFormat || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 }),\n titleDate: this.titleDateFormat ||\n (this.isMultiple ? this.defaultTitleMultipleDateFormatter : this.defaultTitleDateFormatter),\n }\n },\n defaultTitleMultipleDateFormatter (): DatePickerMultipleFormatter {\n return dates => {\n if (!dates.length) {\n return '-'\n }\n\n if (dates.length === 1) {\n return this.defaultTitleDateFormatter(dates[0])\n }\n\n return this.$vuetify.lang.t(this.selectedItemsText, dates.length)\n }\n },\n defaultTitleDateFormatter (): DatePickerFormatter {\n const titleFormats = {\n year: { year: 'numeric', timeZone: 'UTC' },\n month: { month: 'long', timeZone: 'UTC' },\n date: { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' },\n }\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.multipleValue.length && (!oldValue || !(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.multipleValue\n .map((val: string) => sanitizeDateString(val, type))\n .filter(this.isDateAllowed)\n this.$emit('input', this.isMultiple ? output : output[0])\n }\n },\n },\n\n created () {\n this.checkMultipleProp()\n\n if (this.pickerDate !== this.tableDate) {\n this.$emit('update:picker-date', this.tableDate)\n }\n this.setInputDate()\n },\n\n methods: {\n emitInput (newInput: string) {\n if (this.range) {\n if (this.multipleValue.length !== 1) {\n this.$emit('input', [newInput])\n } else {\n const output = [this.multipleValue[0], newInput]\n this.$emit('input', output)\n this.$emit('change', output)\n }\n return\n }\n\n const output = this.multiple\n ? (\n this.multipleValue.indexOf(newInput) === -1\n ? this.multipleValue.concat([newInput])\n : this.multipleValue.filter(x => x !== newInput)\n )\n : newInput\n\n this.$emit('input', output)\n this.multiple || this.$emit('change', newInput)\n },\n checkMultipleProp () {\n if (this.value == null) return\n const valueType = this.value.constructor.name\n const expected = this.isMultiple ? 'Array' : 'String'\n if (valueType !== expected) {\n consoleWarn(`Value must be ${this.isMultiple ? 'an' : 'a'} ${expected}, got ${valueType}`, this)\n }\n },\n isDateAllowed (value: string): boolean {\n return isDateAllowed(value, this.min, this.max, this.allowedDates)\n },\n yearClick (value: number) {\n this.inputYear = value\n if (this.type === 'month') {\n this.tableDate = `${value}`\n } else {\n this.tableDate = `${value}-${pad((this.tableMonth || 0) + 1)}`\n }\n this.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 (): VNode {\n return this.$createElement(VDatePickerTitle, {\n props: {\n date: this.value ? (this.formatters.titleDate as (value: any) => string)(this.isMultiple ? this.multipleValue : this.value) : '',\n disabled: this.disabled,\n readonly: this.readonly,\n selectingYear: this.activePicker === 'YEAR',\n year: this.formatters.year(this.multipleValue.length ? `${this.inputYear}` : this.tableDate),\n yearIcon: this.yearIcon,\n value: this.multipleValue[0],\n },\n slot: 'title',\n on: {\n 'update:selecting-year': (value: boolean) => this.activePicker = value ? 'YEAR' : this.type.toUpperCase(),\n },\n })\n },\n genTableHeader (): VNode {\n return this.$createElement(VDatePickerHeader, {\n props: {\n nextIcon: this.nextIcon,\n color: this.color,\n dark: this.dark,\n disabled: this.disabled,\n format: this.headerDateFormat,\n light: this.light,\n locale: this.locale,\n min: this.activePicker === 'DATE' ? this.minMonth : this.minYear,\n max: this.activePicker === 'DATE' ? this.maxMonth : this.maxYear,\n nextAriaLabel: this.activePicker === 'DATE' ? this.nextMonthAriaLabel : this.nextYearAriaLabel,\n prevAriaLabel: this.activePicker === 'DATE' ? this.prevMonthAriaLabel : this.prevYearAriaLabel,\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 (): VNode {\n return this.$createElement(VDatePickerDateTable, {\n props: {\n allowedDates: this.allowedDates,\n color: this.color,\n current: this.current,\n dark: this.dark,\n disabled: this.disabled,\n events: this.events,\n eventColor: this.eventColor,\n firstDayOfWeek: this.firstDayOfWeek,\n format: this.dayFormat,\n light: this.light,\n locale: this.locale,\n localeFirstDayOfYear: this.localeFirstDayOfYear,\n min: this.min,\n max: this.max,\n range: this.range,\n readonly: this.readonly,\n scrollable: this.scrollable,\n showWeek: this.showWeek,\n tableDate: `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}`,\n value: this.value,\n weekdayFormat: this.weekdayFormat,\n },\n ref: 'table',\n on: {\n input: this.dateClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':date'),\n },\n })\n },\n genMonthTable (): VNode {\n return this.$createElement(VDatePickerMonthTable, {\n props: {\n allowedDates: this.type === 'month' ? this.allowedDates : null,\n color: this.color,\n current: this.current ? sanitizeDateString(this.current, 'month') : null,\n dark: this.dark,\n disabled: this.disabled,\n events: this.type === 'month' ? this.events : null,\n eventColor: this.type === 'month' ? this.eventColor : null,\n format: this.monthFormat,\n light: this.light,\n locale: this.locale,\n min: this.minMonth,\n max: this.maxMonth,\n range: this.range,\n readonly: this.readonly && this.type === 'month',\n scrollable: this.scrollable,\n value: this.selectedMonths,\n tableDate: `${pad(this.tableYear, 4)}`,\n },\n ref: 'table',\n on: {\n input: this.monthClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':month'),\n },\n })\n },\n genYears (): VNode {\n return this.$createElement(VDatePickerYears, {\n props: {\n color: this.color,\n format: this.yearFormat,\n locale: this.locale,\n min: this.minYear,\n max: this.maxYear,\n value: this.tableYear,\n },\n on: {\n input: this.yearClick,\n ...createItemTypeListeners(this, ':year'),\n },\n })\n },\n genPickerBody (): VNode {\n const children = this.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","// Components\nimport VInput from '../VInput/VInput'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Helpers\nimport { VNode } from 'vue'\n\ntype ErrorBag = Record\ntype VInputInstance = InstanceType\ntype Watchers = {\n _uid: number\n valid: () => void\n shouldValidate: () => void\n}\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n RegistrableProvide('form')\n /* @vue/component */\n).extend({\n name: 'v-form',\n\n provide (): object {\n return { form: this }\n },\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n value: Boolean,\n },\n\n data: () => ({\n inputs: [] as VInputInstance[],\n watchers: [] as Watchers[],\n errorBag: {} as ErrorBag,\n }),\n\n watch: {\n errorBag: {\n handler (val) {\n const errors = Object.values(val).includes(true)\n\n this.$emit('input', !errors)\n },\n deep: true,\n immediate: true,\n },\n },\n\n methods: {\n watchInput (input: any): Watchers {\n const watcher = (input: any): (() => void) => {\n return input.$watch('hasError', (val: boolean) => {\n this.$set(this.errorBag, input._uid, val)\n }, { immediate: true })\n }\n\n const watchers: Watchers = {\n _uid: input._uid,\n valid: () => {},\n shouldValidate: () => {},\n }\n\n if (this.lazyValidation) {\n // Only start watching inputs if we need to\n watchers.shouldValidate = input.$watch('shouldValidate', (val: boolean) => {\n if (!val) return\n\n // Only watch if we're not already doing it\n if (this.errorBag.hasOwnProperty(input._uid)) return\n\n watchers.valid = watcher(input)\n })\n } else {\n watchers.valid = watcher(input)\n }\n\n return watchers\n },\n /** @public */\n validate (): boolean {\n return this.inputs.filter(input => !input.validate(true)).length === 0\n },\n /** @public */\n reset (): void {\n this.inputs.forEach(input => input.reset())\n this.resetErrorBag()\n },\n resetErrorBag () {\n if (this.lazyValidation) {\n // Account for timeout in validatable\n setTimeout(() => {\n this.errorBag = {}\n }, 0)\n }\n },\n /** @public */\n resetValidation () {\n this.inputs.forEach(input => input.resetValidation())\n this.resetErrorBag()\n },\n register (input: VInputInstance) {\n this.inputs.push(input)\n this.watchers.push(this.watchInput(input))\n },\n unregister (input: VInputInstance) {\n const found = this.inputs.find(i => i._uid === input._uid)\n\n if (!found) return\n\n const unwatch = this.watchers.find(i => i._uid === found._uid)\n if (unwatch) {\n unwatch.valid()\n unwatch.shouldValidate()\n }\n\n this.watchers = this.watchers.filter(i => i._uid !== found._uid)\n this.inputs = this.inputs.filter(i => i._uid !== found._uid)\n this.$delete(this.errorBag, found._uid)\n },\n },\n\n render (h): VNode {\n return h('form', {\n staticClass: 'v-form',\n attrs: {\n novalidate: true,\n ...this.attrs$,\n },\n on: {\n submit: (e: Event) => this.$emit('submit', e),\n },\n }, this.$slots.default)\n },\n})\n","/**\n * vee-validate v3.3.7\n * (c) 2020 Abdelrahman Awad\n * @license MIT\n */\n/**\r\n * Some Alpha Regex helpers.\r\n * https://github.com/chriso/validator.js/blob/master/src/lib/alpha.js\r\n */\r\n/* eslint-disable no-misleading-character-class */\r\nvar alpha = {\r\n en: /^[A-Z]*$/i,\r\n cs: /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]*$/i,\r\n da: /^[A-ZÆØÅ]*$/i,\r\n de: /^[A-ZÄÖÜß]*$/i,\r\n es: /^[A-ZÁÉÍÑÓÚÜ]*$/i,\r\n fa: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,\r\n fr: /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]*$/i,\r\n it: /^[A-Z\\xC0-\\xFF]*$/i,\r\n lt: /^[A-ZĄČĘĖĮŠŲŪŽ]*$/i,\r\n nl: /^[A-ZÉËÏÓÖÜ]*$/i,\r\n hu: /^[A-ZÁÉÍÓÖŐÚÜŰ]*$/i,\r\n pl: /^[A-ZĄĆĘŚŁŃÓŻŹ]*$/i,\r\n pt: /^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]*$/i,\r\n ro: /^[A-ZĂÂÎŞŢ]*$/i,\r\n ru: /^[А-ЯЁ]*$/i,\r\n sk: /^[A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ]*$/i,\r\n sr: /^[A-ZČĆŽŠĐ]*$/i,\r\n sv: /^[A-ZÅÄÖ]*$/i,\r\n tr: /^[A-ZÇĞİıÖŞÜ]*$/i,\r\n uk: /^[А-ЩЬЮЯЄІЇҐ]*$/i,\r\n ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]*$/,\r\n az: /^[A-ZÇƏĞİıÖŞÜ]*$/i,\r\n el: /^[Α-ώ]*$/i\r\n};\r\nvar alphaSpaces = {\r\n en: /^[A-Z\\s]*$/i,\r\n cs: /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ\\s]*$/i,\r\n da: /^[A-ZÆØÅ\\s]*$/i,\r\n de: /^[A-ZÄÖÜß\\s]*$/i,\r\n es: /^[A-ZÁÉÍÑÓÚÜ\\s]*$/i,\r\n fa: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,\r\n fr: /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ\\s]*$/i,\r\n it: /^[A-Z\\xC0-\\xFF\\s]*$/i,\r\n lt: /^[A-ZĄČĘĖĮŠŲŪŽ\\s]*$/i,\r\n nl: /^[A-ZÉËÏÓÖÜ\\s]*$/i,\r\n hu: /^[A-ZÁÉÍÓÖŐÚÜŰ\\s]*$/i,\r\n pl: /^[A-ZĄĆĘŚŁŃÓŻŹ\\s]*$/i,\r\n pt: /^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ\\s]*$/i,\r\n ro: /^[A-ZĂÂÎŞŢ\\s]*$/i,\r\n ru: /^[А-ЯЁ\\s]*$/i,\r\n sk: /^[A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ\\s]*$/i,\r\n sr: /^[A-ZČĆŽŠĐ\\s]*$/i,\r\n sv: /^[A-ZÅÄÖ\\s]*$/i,\r\n tr: /^[A-ZÇĞİıÖŞÜ\\s]*$/i,\r\n uk: /^[А-ЩЬЮЯЄІЇҐ\\s]*$/i,\r\n ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ\\s]*$/,\r\n az: /^[A-ZÇƏĞİıÖŞÜ\\s]*$/i,\r\n el: /^[Α-ώ\\s]*$/i\r\n};\r\nvar alphanumeric = {\r\n en: /^[0-9A-Z]*$/i,\r\n cs: /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]*$/i,\r\n da: /^[0-9A-ZÆØÅ]$/i,\r\n de: /^[0-9A-ZÄÖÜß]*$/i,\r\n es: /^[0-9A-ZÁÉÍÑÓÚÜ]*$/i,\r\n fa: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,\r\n fr: /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]*$/i,\r\n it: /^[0-9A-Z\\xC0-\\xFF]*$/i,\r\n lt: /^[0-9A-ZĄČĘĖĮŠŲŪŽ]*$/i,\r\n hu: /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]*$/i,\r\n nl: /^[0-9A-ZÉËÏÓÖÜ]*$/i,\r\n pl: /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]*$/i,\r\n pt: /^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]*$/i,\r\n ro: /^[0-9A-ZĂÂÎŞŢ]*$/i,\r\n ru: /^[0-9А-ЯЁ]*$/i,\r\n sk: /^[0-9A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ]*$/i,\r\n sr: /^[0-9A-ZČĆŽŠĐ]*$/i,\r\n sv: /^[0-9A-ZÅÄÖ]*$/i,\r\n tr: /^[0-9A-ZÇĞİıÖŞÜ]*$/i,\r\n uk: /^[0-9А-ЩЬЮЯЄІЇҐ]*$/i,\r\n ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]*$/,\r\n az: /^[0-9A-ZÇƏĞİıÖŞÜ]*$/i,\r\n el: /^[0-9Α-ώ]*$/i\r\n};\r\nvar alphaDash = {\r\n en: /^[0-9A-Z_-]*$/i,\r\n cs: /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ_-]*$/i,\r\n da: /^[0-9A-ZÆØÅ_-]*$/i,\r\n de: /^[0-9A-ZÄÖÜß_-]*$/i,\r\n es: /^[0-9A-ZÁÉÍÑÓÚÜ_-]*$/i,\r\n fa: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,\r\n fr: /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ_-]*$/i,\r\n it: /^[0-9A-Z\\xC0-\\xFF_-]*$/i,\r\n lt: /^[0-9A-ZĄČĘĖĮŠŲŪŽ_-]*$/i,\r\n nl: /^[0-9A-ZÉËÏÓÖÜ_-]*$/i,\r\n hu: /^[0-9A-ZÁÉÍÓÖŐÚÜŰ_-]*$/i,\r\n pl: /^[0-9A-ZĄĆĘŚŁŃÓŻŹ_-]*$/i,\r\n pt: /^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ_-]*$/i,\r\n ro: /^[0-9A-ZĂÂÎŞŢ_-]*$/i,\r\n ru: /^[0-9А-ЯЁ_-]*$/i,\r\n sk: /^[0-9A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ_-]*$/i,\r\n sr: /^[0-9A-ZČĆŽŠĐ_-]*$/i,\r\n sv: /^[0-9A-ZÅÄÖ_-]*$/i,\r\n tr: /^[0-9A-ZÇĞİıÖŞÜ_-]*$/i,\r\n uk: /^[0-9А-ЩЬЮЯЄІЇҐ_-]*$/i,\r\n ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ_-]*$/,\r\n az: /^[0-9A-ZÇƏĞİıÖŞÜ_-]*$/i,\r\n el: /^[0-9Α-ώ_-]*$/i\r\n};\n\nvar validate = function (value, _a) {\r\n var _b = (_a === void 0 ? {} : _a).locale, locale = _b === void 0 ? '' : _b;\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate(val, { locale: locale }); });\r\n }\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alpha).some(function (loc) { return alpha[loc].test(value); });\r\n }\r\n return (alpha[locale] || alpha.en).test(value);\r\n};\r\nvar params = [\r\n {\r\n name: 'locale'\r\n }\r\n];\r\nvar alpha$1 = {\r\n validate: validate,\r\n params: params\r\n};\n\nvar validate$1 = function (value, _a) {\r\n var _b = (_a === void 0 ? {} : _a).locale, locale = _b === void 0 ? '' : _b;\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$1(val, { locale: locale }); });\r\n }\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alphaDash).some(function (loc) { return alphaDash[loc].test(value); });\r\n }\r\n return (alphaDash[locale] || alphaDash.en).test(value);\r\n};\r\nvar params$1 = [\r\n {\r\n name: 'locale'\r\n }\r\n];\r\nvar alpha_dash = {\r\n validate: validate$1,\r\n params: params$1\r\n};\n\nvar validate$2 = function (value, _a) {\r\n var _b = (_a === void 0 ? {} : _a).locale, locale = _b === void 0 ? '' : _b;\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$2(val, { locale: locale }); });\r\n }\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alphanumeric).some(function (loc) { return alphanumeric[loc].test(value); });\r\n }\r\n return (alphanumeric[locale] || alphanumeric.en).test(value);\r\n};\r\nvar params$2 = [\r\n {\r\n name: 'locale'\r\n }\r\n];\r\nvar alpha_num = {\r\n validate: validate$2,\r\n params: params$2\r\n};\n\nvar validate$3 = function (value, _a) {\r\n var _b = (_a === void 0 ? {} : _a).locale, locale = _b === void 0 ? '' : _b;\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$3(val, { locale: locale }); });\r\n }\r\n // Match at least one locale.\r\n if (!locale) {\r\n return Object.keys(alphaSpaces).some(function (loc) { return alphaSpaces[loc].test(value); });\r\n }\r\n return (alphaSpaces[locale] || alphaSpaces.en).test(value);\r\n};\r\nvar params$3 = [\r\n {\r\n name: 'locale'\r\n }\r\n];\r\nvar alpha_spaces = {\r\n validate: validate$3,\r\n params: params$3\r\n};\n\nvar validate$4 = function (value, _a) {\r\n var _b = _a === void 0 ? {} : _a, min = _b.min, max = _b.max;\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return !!validate$4(val, { min: min, max: max }); });\r\n }\r\n return Number(min) <= value && Number(max) >= value;\r\n};\r\nvar params$4 = [\r\n {\r\n name: 'min'\r\n },\r\n {\r\n name: 'max'\r\n }\r\n];\r\nvar between = {\r\n validate: validate$4,\r\n params: params$4\r\n};\n\nvar validate$5 = function (value, _a) {\r\n var target = _a.target;\r\n return String(value) === String(target);\r\n};\r\nvar params$5 = [\r\n {\r\n name: 'target',\r\n isTarget: true\r\n }\r\n];\r\nvar confirmed = {\r\n validate: validate$5,\r\n params: params$5\r\n};\n\nvar validate$6 = function (value, _a) {\r\n var length = _a.length;\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$6(val, { length: length }); });\r\n }\r\n var strVal = String(value);\r\n return /^[0-9]*$/.test(strVal) && strVal.length === length;\r\n};\r\nvar params$6 = [\r\n {\r\n name: 'length',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n }\r\n];\r\nvar digits = {\r\n validate: validate$6,\r\n params: params$6\r\n};\n\nvar validateImage = function (file, width, height) {\r\n var URL = window.URL || window.webkitURL;\r\n return new Promise(function (resolve) {\r\n var image = new Image();\r\n image.onerror = function () { return resolve(false); };\r\n image.onload = function () { return resolve(image.width === width && image.height === height); };\r\n image.src = URL.createObjectURL(file);\r\n });\r\n};\r\nvar validate$7 = function (files, _a) {\r\n var width = _a.width, height = _a.height;\r\n var list = [];\r\n files = Array.isArray(files) ? files : [files];\r\n for (var i = 0; i < files.length; i++) {\r\n // if file is not an image, reject.\r\n if (!/\\.(jpg|svg|jpeg|png|bmp|gif)$/i.test(files[i].name)) {\r\n return Promise.resolve(false);\r\n }\r\n list.push(files[i]);\r\n }\r\n return Promise.all(list.map(function (file) { return validateImage(file, width, height); })).then(function (values) {\r\n return values.every(function (v) { return v; });\r\n });\r\n};\r\nvar params$7 = [\r\n {\r\n name: 'width',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n },\r\n {\r\n name: 'height',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n }\r\n];\r\nvar dimensions = {\r\n validate: validate$7,\r\n params: params$7\r\n};\n\nvar validate$8 = function (value, _a) {\r\n var multiple = (_a === void 0 ? {} : _a).multiple;\r\n // eslint-disable-next-line\r\n var re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n if (multiple && !Array.isArray(value)) {\r\n value = String(value)\r\n .split(',')\r\n .map(function (emailStr) { return emailStr.trim(); });\r\n }\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return re.test(String(val)); });\r\n }\r\n return re.test(String(value));\r\n};\r\nvar params$8 = [\r\n {\r\n name: 'multiple',\r\n default: false\r\n }\r\n];\r\nvar email = {\r\n validate: validate$8,\r\n params: params$8\r\n};\n\nfunction isNullOrUndefined(value) {\r\n return value === null || value === undefined;\r\n}\r\nfunction isEmptyArray(arr) {\r\n return Array.isArray(arr) && arr.length === 0;\r\n}\r\nfunction isCallable(fn) {\r\n return typeof fn === 'function';\r\n}\n\nfunction includes(collection, item) {\r\n return collection.indexOf(item) !== -1;\r\n}\r\n/**\r\n * Converts an array-like object to array, provides a simple polyfill for Array.from\r\n */\r\nfunction toArray(arrayLike) {\r\n if (isCallable(Array.from)) {\r\n return Array.from(arrayLike);\r\n }\r\n /* istanbul ignore next */\r\n return _copyArray(arrayLike);\r\n}\r\n/* istanbul ignore next */\r\nfunction _copyArray(arrayLike) {\r\n var array = [];\r\n var length = arrayLike.length;\r\n for (var i = 0; i < length; i++) {\r\n array.push(arrayLike[i]);\r\n }\r\n return array;\r\n}\n\nvar validate$9 = function (value, options) {\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$9(val, options); });\r\n }\r\n return toArray(options).some(function (item) {\r\n // eslint-disable-next-line\r\n return item == value;\r\n });\r\n};\r\nvar oneOf = {\r\n validate: validate$9\r\n};\n\nvar validate$a = function (value, args) {\r\n return !validate$9(value, args);\r\n};\r\nvar excluded = {\r\n validate: validate$a\r\n};\n\nvar validate$b = function (files, extensions) {\r\n var regex = new RegExp(\".(\" + extensions.join('|') + \")$\", 'i');\r\n if (Array.isArray(files)) {\r\n return files.every(function (file) { return regex.test(file.name); });\r\n }\r\n return regex.test(files.name);\r\n};\r\nvar ext = {\r\n validate: validate$b\r\n};\n\nvar validate$c = function (files) {\r\n var regex = /\\.(jpg|svg|jpeg|png|bmp|gif|webp)$/i;\r\n if (Array.isArray(files)) {\r\n return files.every(function (file) { return regex.test(file.name); });\r\n }\r\n return regex.test(files.name);\r\n};\r\nvar image = {\r\n validate: validate$c\r\n};\n\nvar validate$d = function (value) {\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return /^-?[0-9]+$/.test(String(val)); });\r\n }\r\n return /^-?[0-9]+$/.test(String(value));\r\n};\r\nvar integer = {\r\n validate: validate$d\r\n};\n\nvar validate$e = function (value, _a) {\r\n var other = _a.other;\r\n return value === other;\r\n};\r\nvar params$9 = [\r\n {\r\n name: 'other'\r\n }\r\n];\r\nvar is = {\r\n validate: validate$e,\r\n params: params$9\r\n};\n\nvar validate$f = function (value, _a) {\r\n var other = _a.other;\r\n return value !== other;\r\n};\r\nvar params$a = [\r\n {\r\n name: 'other'\r\n }\r\n];\r\nvar is_not = {\r\n validate: validate$f,\r\n params: params$a\r\n};\n\nvar validate$g = function (value, _a) {\r\n var length = _a.length;\r\n if (isNullOrUndefined(value)) {\r\n return false;\r\n }\r\n if (typeof value === 'number') {\r\n value = String(value);\r\n }\r\n if (!value.length) {\r\n value = toArray(value);\r\n }\r\n return value.length === length;\r\n};\r\nvar params$b = [\r\n {\r\n name: 'length',\r\n cast: function (value) { return Number(value); }\r\n }\r\n];\r\nvar length = {\r\n validate: validate$g,\r\n params: params$b\r\n};\n\nvar validate$h = function (value, _a) {\r\n var length = _a.length;\r\n if (isNullOrUndefined(value)) {\r\n return length >= 0;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$h(val, { length: length }); });\r\n }\r\n return String(value).length <= length;\r\n};\r\nvar params$c = [\r\n {\r\n name: 'length',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n }\r\n];\r\nvar max = {\r\n validate: validate$h,\r\n params: params$c\r\n};\n\nvar validate$i = function (value, _a) {\r\n var max = _a.max;\r\n if (isNullOrUndefined(value) || value === '') {\r\n return false;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.length > 0 && value.every(function (val) { return validate$i(val, { max: max }); });\r\n }\r\n return Number(value) <= max;\r\n};\r\nvar params$d = [\r\n {\r\n name: 'max',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n }\r\n];\r\nvar max_value = {\r\n validate: validate$i,\r\n params: params$d\r\n};\n\nvar validate$j = function (files, mimes) {\r\n var regex = new RegExp(mimes.join('|').replace('*', '.+') + \"$\", 'i');\r\n if (Array.isArray(files)) {\r\n return files.every(function (file) { return regex.test(file.type); });\r\n }\r\n return regex.test(files.type);\r\n};\r\nvar mimes = {\r\n validate: validate$j\r\n};\n\nvar validate$k = function (value, _a) {\r\n var length = _a.length;\r\n if (isNullOrUndefined(value)) {\r\n return false;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$k(val, { length: length }); });\r\n }\r\n return String(value).length >= length;\r\n};\r\nvar params$e = [\r\n {\r\n name: 'length',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n }\r\n];\r\nvar min = {\r\n validate: validate$k,\r\n params: params$e\r\n};\n\nvar validate$l = function (value, _a) {\r\n var min = _a.min;\r\n if (isNullOrUndefined(value) || value === '') {\r\n return false;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.length > 0 && value.every(function (val) { return validate$l(val, { min: min }); });\r\n }\r\n return Number(value) >= min;\r\n};\r\nvar params$f = [\r\n {\r\n name: 'min',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n }\r\n];\r\nvar min_value = {\r\n validate: validate$l,\r\n params: params$f\r\n};\n\nvar ar = /^[٠١٢٣٤٥٦٧٨٩]+$/;\r\nvar en = /^[0-9]+$/;\r\nvar validate$m = function (value) {\r\n var testValue = function (val) {\r\n var strValue = String(val);\r\n return en.test(strValue) || ar.test(strValue);\r\n };\r\n if (Array.isArray(value)) {\r\n return value.every(testValue);\r\n }\r\n return testValue(value);\r\n};\r\nvar numeric = {\r\n validate: validate$m\r\n};\n\nvar validate$n = function (value, _a) {\r\n var regex = _a.regex;\r\n if (Array.isArray(value)) {\r\n return value.every(function (val) { return validate$n(val, { regex: regex }); });\r\n }\r\n return regex.test(String(value));\r\n};\r\nvar params$g = [\r\n {\r\n name: 'regex',\r\n cast: function (value) {\r\n if (typeof value === 'string') {\r\n return new RegExp(value);\r\n }\r\n return value;\r\n }\r\n }\r\n];\r\nvar regex = {\r\n validate: validate$n,\r\n params: params$g\r\n};\n\nvar validate$o = function (value, _a) {\r\n var allowFalse = (_a === void 0 ? { allowFalse: true } : _a).allowFalse;\r\n var result = {\r\n valid: false,\r\n required: true\r\n };\r\n if (isNullOrUndefined(value) || isEmptyArray(value)) {\r\n return result;\r\n }\r\n // incase a field considers `false` as an empty value like checkboxes.\r\n if (value === false && !allowFalse) {\r\n return result;\r\n }\r\n result.valid = !!String(value).trim().length;\r\n return result;\r\n};\r\nvar computesRequired = true;\r\nvar params$h = [\r\n {\r\n name: 'allowFalse',\r\n default: true\r\n }\r\n];\r\nvar required = {\r\n validate: validate$o,\r\n params: params$h,\r\n computesRequired: computesRequired\r\n};\n\nvar testEmpty = function (value) {\r\n return isEmptyArray(value) || includes([false, null, undefined], value) || !String(value).trim().length;\r\n};\r\nvar validate$p = function (value, _a) {\r\n var target = _a.target, values = _a.values;\r\n var required;\r\n if (values && values.length) {\r\n if (!Array.isArray(values) && typeof values === 'string') {\r\n values = [values];\r\n }\r\n // eslint-disable-next-line\r\n required = values.some(function (val) { return val == String(target).trim(); });\r\n }\r\n else {\r\n required = !testEmpty(target);\r\n }\r\n if (!required) {\r\n return {\r\n valid: true,\r\n required: required\r\n };\r\n }\r\n return {\r\n valid: !testEmpty(value),\r\n required: required\r\n };\r\n};\r\nvar params$i = [\r\n {\r\n name: 'target',\r\n isTarget: true\r\n },\r\n {\r\n name: 'values'\r\n }\r\n];\r\nvar computesRequired$1 = true;\r\nvar required_if = {\r\n validate: validate$p,\r\n params: params$i,\r\n computesRequired: computesRequired$1\r\n};\n\nvar validate$q = function (files, _a) {\r\n var size = _a.size;\r\n if (isNaN(size)) {\r\n return false;\r\n }\r\n var nSize = size * 1024;\r\n if (!Array.isArray(files)) {\r\n return files.size <= nSize;\r\n }\r\n for (var i = 0; i < files.length; i++) {\r\n if (files[i].size > nSize) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\r\nvar params$j = [\r\n {\r\n name: 'size',\r\n cast: function (value) {\r\n return Number(value);\r\n }\r\n }\r\n];\r\nvar size = {\r\n validate: validate$q,\r\n params: params$j\r\n};\n\nexport { alpha$1 as alpha, alpha_dash, alpha_num, alpha_spaces, between, confirmed, digits, dimensions, email, excluded, ext, image, integer, is, is_not, length, max, max_value, mimes, min, min_value, numeric, oneOf, regex, required, required_if, size };\n","// Directives\nimport ripple from '../../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n name: 'rippleable',\n\n directives: { ripple },\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n methods: {\n genRipple (data: VNodeData = {}): VNode | null {\n if (!this.ripple) return null\n\n data.staticClass = 'v-input--selection-controls__ripple'\n\n data.directives = data.directives || []\n data.directives.push({\n name: 'ripple',\n value: { center: true },\n } as VNodeDirective)\n\n return this.$createElement('div', data)\n },\n },\n})\n","import './VGrid.sass'\n\nimport Vue, { VNode, PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-col',\n functional: true,\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String,\n default: null,\n validator: (str: any) => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str),\n },\n tag: {\n type: String,\n default: 'div',\n },\n },\n render (h, { props, data, children, parent }): VNode {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('col-'))\n\n classList.push({\n // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.\n col: !hasColClasses || !props.cols,\n [`col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(props.tag, mergeData(data, { class: classList }), children)\n },\n})\n","// Helpers\nimport { wrapInArray, sortItems, deepEqual, groupItems, searchItems, fillArray } 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 ItemGroup,\n} from 'vuetify/types'\nimport { PropValidator } 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,\n default: () => [],\n } as PropValidator,\n options: {\n type: Object,\n default: () => ({}),\n } as PropValidator>,\n sortBy: {\n type: [String, Array],\n default: () => [],\n } as PropValidator,\n sortDesc: {\n type: [Boolean, Array],\n default: () => [],\n } as PropValidator,\n customSort: {\n type: Function,\n default: sortItems,\n } as PropValidator,\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],\n default: () => [],\n } as PropValidator,\n groupDesc: {\n type: [Boolean, Array],\n default: () => [],\n } as PropValidator,\n customGroup: {\n type: Function,\n default: groupItems,\n } as PropValidator,\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,\n default: searchItems,\n } as PropValidator,\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 const { sortBy, sortDesc, groupBy, groupDesc } = internalOptions\n const sortDiff = sortBy.length - sortDesc.length\n const groupDiff = groupBy.length - groupDesc.length\n\n if (sortDiff > 0) {\n internalOptions.sortDesc.push(...fillArray(sortDiff, false))\n }\n\n if (groupDiff > 0) {\n internalOptions.groupDesc.push(...fillArray(groupDiff, false))\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 <= 0\n ? 1\n : Math.ceil(this.itemsLength / this.internalOptions.itemsPerPage)\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 (): ItemGroup[] | 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 },\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 pagination: {\n handler (pagination: DataPagination, old: DataPagination) {\n if (deepEqual(pagination, old)) return\n this.$emit('pagination', this.pagination)\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.internalOptions.mustSort,\n this.internalOptions.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[]): any[] {\n let sortBy = this.internalOptions.sortBy\n let sortDesc = this.internalOptions.sortDesc\n\n if (this.internalOptions.groupBy.length) {\n sortBy = [...this.internalOptions.groupBy, ...sortBy]\n sortDesc = [...this.internalOptions.groupDesc, ...sortDesc]\n }\n\n return this.customSort(items, sortBy, sortDesc, this.locale)\n },\n groupItems (items: any[]): ItemGroup[] {\n return this.customGroup(items, this.internalOptions.groupBy, this.internalOptions.groupDesc)\n },\n paginateItems (items: any[]): 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 'vuetify/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 && this.pagination.itemsPerPage) {\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 Mobile from '../../mixins/mobile'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, camelizeObjectKeys } from '../../util/helpers'\nimport { breaking, removed } from '../../util/console'\n\n// Types\nimport { VNode, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { DataItemProps, DataScopeProps } from 'vuetify/types'\n\n/* @vue/component */\nexport default mixins(\n Mobile,\n Themeable\n).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,\n default: () => [],\n } as PropValidator,\n singleSelect: Boolean,\n expanded: {\n type: Array,\n default: () => [],\n } as PropValidator,\n mobileBreakpoint: {\n ...Mobile.options.props.mobileBreakpoint,\n default: 600,\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): DataItemProps {\n return {\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 isMobile: this.isMobile,\n }\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 'page-count': (v: number) => this.$emit('page-count', v),\n },\n scopedSlots: {\n default: this.genDefaultScopedSlot,\n },\n })\n },\n})\n","import { VDataTable } from '../'\nimport VIcon from '../../VIcon'\nimport VSimpleCheckbox from '../../VCheckbox/VSimpleCheckbox'\nimport ripple from '../../../directives/ripple'\n\nimport Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport mixins from '../../../util/mixins'\nimport { DataOptions, DataTableHeader } from 'vuetify/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,\n default: () => ([]),\n } as PropValidator,\n options: {\n type: Object,\n default: () => ({\n page: 1,\n itemsPerPage: 10,\n sortBy: [],\n sortDesc: [],\n groupBy: [],\n groupDesc: [],\n multiSort: false,\n mustSort: false,\n }),\n } as PropValidator,\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'\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 on: {\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 menuProps: { closeOnContentClick: true },\n },\n on: {\n change: (v: string | string[]) => this.$emit('sort', v),\n },\n scopedSlots: {\n selection: props => this.genSortChip(props),\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 = this.headers\n .filter(h => h.sortable !== false && h.value !== 'data-table-select')\n .map(h => ({\n text: h.text,\n value: h.value,\n }))\n\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, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport header from './mixins/header'\nimport { wrapInArray, convertToUnit } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/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: (e: MouseEvent) => {\n e.stopPropagation()\n this.$emit('group', header.value)\n },\n },\n }, ['group'])\n },\n getAria (beingSorted: boolean, isDesc: boolean) {\n const $t = (key: string) => this.$vuetify.lang.t(`$vuetify.dataTable.ariaLabel.${key}`)\n\n let ariaSort = 'none'\n let ariaLabel = [\n $t('sortNone'),\n $t('activateAscending'),\n ]\n\n if (!beingSorted) {\n return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n }\n\n if (isDesc) {\n ariaSort = 'descending'\n ariaLabel = [\n $t('sortDescending'),\n $t(this.options.mustSort ? 'activateAscending' : 'activateNone'),\n ]\n } else {\n ariaSort = 'ascending'\n ariaLabel = [\n $t('sortAscending'),\n $t('activateDescending'),\n ]\n }\n\n return { ariaSort, ariaLabel: ariaLabel.join(' ') }\n },\n genHeader (header: DataTableHeader) {\n const data: Required> = {\n attrs: {\n role: 'columnheader',\n scope: 'col',\n 'aria-label': header.text || '',\n },\n style: {\n width: convertToUnit(header.width),\n minWidth: convertToUnit(header.width),\n },\n class: [\n `text-${header.align || 'start'}`,\n ...wrapInArray(header.class),\n header.divider && 'v-data-table__divider',\n ],\n on: {},\n }\n const children = []\n\n if (header.value === 'data-table-select' && !this.singleSelect) {\n return this.$createElement('th', data, [this.genSelectAll()])\n }\n\n children.push(\n 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 data.on['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 data.class.push('sortable')\n\n const { ariaLabel, ariaSort } = this.getAria(beingSorted, isDesc)\n\n data.attrs['aria-label'] += `${header.text ? ': ' : ''}${ariaLabel}`\n data.attrs['aria-sort'] = ariaSort\n\n if (beingSorted) {\n data.class.push('active')\n data.class.push(isDesc ? 'desc' : 'asc')\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 && header.groupable !== false) children.push(this.genGroupByToggle(header))\n\n return this.$createElement('th', data, 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 { 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","// Styles\nimport './VDataTableHeader.sass'\n\n// Components\nimport VDataTableHeaderMobile from './VDataTableHeaderMobile'\nimport VDataTableHeaderDesktop from './VDataTableHeaderDesktop'\n\n// Mixins\nimport header from './mixins/header'\n\n// Utilities\nimport dedupeModelListeners from '../../util/dedupeModelListeners'\nimport mergeData from '../../util/mergeData'\nimport rebuildSlots from '../../util/rebuildFunctionalSlots'\n\n// Types\nimport Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'v-data-table-header',\n\n functional: true,\n\n props: {\n ...header.options.props,\n mobile: Boolean,\n },\n\n render (h, { props, data, slots }) {\n dedupeModelListeners(data)\n const children = rebuildSlots(slots(), h)\n\n data = mergeData(data, { props })\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 'vuetify/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 Vue, { VNode, PropType } from 'vue'\nimport { getObjectValueByPath } from '../../util/helpers'\nimport { DataTableHeader } from 'vuetify/types'\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType,\n hideDefaultHeader: Boolean,\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' && !props.hideDefaultHeader) {\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 } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DataTableHeader,\n DataTableFilterFunction,\n DataScopeProps,\n DataOptions,\n DataPagination,\n DataTableCompareFunction,\n DataItemsPerPageOption,\n ItemGroup,\n RowClassFunction,\n DataTableItemProps,\n} from 'vuetify/types'\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 Row from './Row'\nimport RowGroup from './RowGroup'\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VSimpleTable from './VSimpleTable'\nimport MobileRow from './MobileRow'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys, getPropertyFromItem } from '../../util/helpers'\nimport { breaking } from '../../util/console'\nimport { mergeClasses } from '../../util/mergeData'\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 search = typeof search === 'string' ? search.trim() : null\n\n return items.filter(item => {\n // Headers with custom filters are evaluated whether or not a search term has been provided.\n // We need to match every filter to be included in the results.\n const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))\n\n // Headers without custom filters are only filtered by the `search` property if it is defined.\n // We only need a single column to match the search term to be included in the results.\n const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))\n\n return matchesColumnFilters && matchesSearchTerm\n })\n}\n\n/* @vue/component */\nexport default mixins(\n VDataIterator,\n Loadable,\n).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 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,\n default: defaultFilter,\n } as PropValidator,\n itemClass: {\n type: [String, Function],\n default: () => '',\n } as PropValidator,\n loaderHeight: {\n type: [Number, String],\n default: 4,\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 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.headers.filter(header => header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n headersWithoutCustomFilters (): DataTableHeader[] {\n return this.headers.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): DataTableItemProps {\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 th = this.$createElement('th', {\n staticClass: 'column',\n attrs: this.colspanAttrs,\n }, [this.genProgress()])\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: ItemGroup[], props: DataScopeProps) {\n return groupedItems.map(group => {\n if (!this.openCache.hasOwnProperty(group.name)) this.$set(this.openCache, group.name, true)\n\n if (this.$scopedSlots.group) {\n return this.$scopedSlots.group({\n group: group.name,\n options: props.options,\n items: group.items,\n headers: this.computedHeaders,\n })\n } else {\n return this.genDefaultGroupedRow(group.name, group.items, 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.genRows(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, isOpen, toggle: toggleFn }),\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: mergeClasses(\n { ...classes, 'v-data-table__selected': data.isSelected },\n getPropertyFromItem(item, this.itemClass)\n ),\n props: {\n headers: this.computedHeaders,\n hideDefaultHeader: this.hideDefaultHeader,\n item,\n rtl: this.$vuetify.rtl,\n },\n scopedSlots,\n on: {\n // TODO: for click, the first argument should be the event, and the second argument should be data,\n // but this is a breaking change so it's for v3\n click: () => this.$emit('click:row', item, data),\n contextmenu: (event: MouseEvent) => this.$emit('contextmenu:row', event, data),\n dblclick: (event: MouseEvent) => this.$emit('dblclick:row', event, 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","// Types\nimport Vue, { VNode } from 'vue'\n\nexport default function VGrid (name: string) {\n /* @vue/component */\n return Vue.extend({\n name: `v-${name}`,\n\n functional: true,\n\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n render (h, { props, data, children }): VNode {\n data.staticClass = (`${name} ${data.staticClass || ''}`).trim()\n\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n const classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n\n if (classes.length) data.staticClass += ` ${classes.join(' ')}`\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(props.tag, data, children)\n },\n })\n}\n","import './_grid.sass'\nimport './VGrid.sass'\n\nimport Grid from './grid'\n\nimport mergeData from '../../util/mergeData'\n\n/* @vue/component */\nexport default Grid('container').extend({\n name: 'v-container',\n functional: true,\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n fluid: {\n type: Boolean,\n default: false,\n },\n },\n render (h, { props, data, children }) {\n let classes\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'container',\n class: Array({\n 'container--fluid': props.fluid,\n }).concat(classes || []),\n }),\n children\n )\n },\n})\n","// Styles\nimport './VTextarea.sass'\n\n// Extensions\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport Vue from 'vue'\n\ninterface options extends Vue {\n $refs: {\n input: HTMLTextAreaElement\n }\n}\n\nconst baseMixins = mixins\n>(\n VTextField\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-textarea',\n\n props: {\n autoGrow: Boolean,\n noResize: Boolean,\n rowHeight: {\n type: [Number, String],\n default: 24,\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n rows: {\n type: [Number, String],\n default: 5,\n validator: (v: any) => !isNaN(parseInt(v, 10)),\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-textarea': true,\n 'v-textarea--auto-grow': this.autoGrow,\n 'v-textarea--no-resize': this.noResizeHandle,\n ...VTextField.options.computed.classes.call(this),\n }\n },\n noResizeHandle (): boolean {\n return this.noResize || this.autoGrow\n },\n },\n\n watch: {\n lazyValue () {\n this.autoGrow && this.$nextTick(this.calculateInputHeight)\n },\n rowHeight () {\n this.autoGrow && this.$nextTick(this.calculateInputHeight)\n },\n },\n\n mounted () {\n setTimeout(() => {\n this.autoGrow && this.calculateInputHeight()\n }, 0)\n },\n\n methods: {\n calculateInputHeight () {\n const input = this.$refs.input\n if (!input) return\n\n input.style.height = '0'\n const height = input.scrollHeight\n const minHeight = parseInt(this.rows, 10) * parseFloat(this.rowHeight)\n // This has to be done ASAP, waiting for Vue\n // to update the DOM causes ugly layout jumping\n input.style.height = Math.max(minHeight, height) + 'px'\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.tag = 'textarea'\n delete input.data!.attrs!.type\n input.data!.attrs!.rows = this.rows\n\n return input\n },\n onInput (e: Event) {\n VTextField.options.methods.onInput.call(this, e)\n this.autoGrow && this.calculateInputHeight()\n },\n onKeyDown (e: KeyboardEvent) {\n // Prevents closing of a\n // dialog when pressing\n // enter\n if (this.isFocused && e.keyCode === 13) {\n e.stopPropagation()\n }\n\n this.$emit('keydown', e)\n },\n },\n})\n","// Styles\nimport './VCheckbox.sass'\nimport '../../styles/components/_selection-controls.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport VInput from '../VInput'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-checkbox',\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n offIcon: {\n type: String,\n default: '$checkboxOff',\n },\n onIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n data () {\n return {\n inputIndeterminate: this.indeterminate,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls': true,\n 'v-input--checkbox': true,\n 'v-input--indeterminate': this.inputIndeterminate,\n }\n },\n computedIcon (): string {\n if (this.inputIndeterminate) {\n return this.indeterminateIcon\n } else if (this.isActive) {\n return this.onIcon\n } else {\n return this.offIcon\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.isDisabled && !this.inputIndeterminate) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n },\n\n watch: {\n indeterminate (val) {\n // https://github.com/vuetifyjs/vuetify/issues/8270\n this.$nextTick(() => (this.inputIndeterminate = val))\n },\n inputIndeterminate (val) {\n this.$emit('update:indeterminate', val)\n },\n isActive () {\n if (!this.indeterminate) return\n this.inputIndeterminate = false\n },\n },\n\n methods: {\n genCheckbox () {\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.$createElement(VIcon, this.setTextColor(this.validationState, {\n props: {\n dense: this.dense,\n dark: this.dark,\n light: this.light,\n },\n }), this.computedIcon),\n this.genInput('checkbox', {\n ...this.attrs$,\n 'aria-checked': this.inputIndeterminate\n ? 'mixed'\n : this.isActive.toString(),\n }),\n this.genRipple(this.setTextColor(this.rippleState)),\n ])\n },\n genDefaultSlot () {\n return [\n this.genCheckbox(),\n this.genLabel(),\n ]\n },\n },\n})\n","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","import { VNodeDirective, VNode } from 'vue/types/vnode'\nimport { keys } from '../../util/helpers'\nimport { TouchHandlers, TouchValue, TouchWrapper } from 'vuetify/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","// Types\nimport { BreakpointName } from 'vuetify/types/services/breakpoint'\nimport { deprecate } from '../../util/console'\nimport Vue, { PropType } from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'mobile',\n\n props: {\n mobileBreakpoint: {\n type: [Number, String] as PropType,\n default (): BreakpointName | undefined {\n // Avoid destroying unit\n // tests for users\n return this.$vuetify\n ? this.$vuetify.breakpoint.mobileBreakpoint\n : undefined\n },\n validator: v => (\n !isNaN(Number(v)) ||\n ['xs', 'sm', 'md', 'lg', 'xl'].includes(String(v))\n ),\n },\n },\n\n computed: {\n isMobile (): boolean {\n const {\n mobile,\n width,\n name,\n mobileBreakpoint,\n } = this.$vuetify.breakpoint\n\n // Check if local mobileBreakpoint matches\n // the application's mobileBreakpoint\n if (mobileBreakpoint === this.mobileBreakpoint) return mobile\n\n const mobileWidth = parseInt(this.mobileBreakpoint, 10)\n const isNumber = !isNaN(mobileWidth)\n\n return isNumber\n ? width < mobileWidth\n : name === this.mobileBreakpoint\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('mobile-break-point')) {\n deprecate('mobile-break-point', 'mobile-breakpoint', this)\n }\n },\n})\n","// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n model: {\n prop: 'inputValue',\n event: 'change',\n },\n\n props: {\n id: String,\n inputValue: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.inputValue,\n lazyValue: this.inputValue,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n inputValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return label\n\n label!.data!.on = {\n // Label shouldn't cause the input to focus\n click: prevent,\n }\n\n return label\n },\n genInput (type: string, attrs: object) {\n return this.$createElement('input', {\n attrs: Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n domProps: {\n value: this.value,\n checked: this.isActive,\n },\n on: {\n blur: this.onBlur,\n change: this.onChange,\n focus: this.onFocus,\n keydown: this.onKeydown,\n click: prevent,\n },\n ref: 'input',\n })\n },\n onBlur () {\n this.isFocused = false\n },\n onClick (e: Event) {\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus () {\n this.isFocused = true\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n"],"sourceRoot":""}