{"version":3,"sources":["webpack:///../../../src/components/VPagination/VPagination.ts","webpack:///../../../src/components/VData/VData.ts","webpack:///../../../src/components/VDataIterator/VDataFooter.ts","webpack:///../../../src/components/VDataIterator/VDataIterator.ts","webpack:///../../../../src/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/VSimpleTable.ts","webpack:///../../../src/components/VDataTable/MobileRow.ts","webpack:///../../../src/mixins/mouse/index.ts","webpack:///../../../src/components/VDataTable/VDataTable.ts"],"names":["mixins","Colorable","Intersectable","onVisible","Themeable","extend","name","directives","Resize","props","circle","Boolean","disabled","navigationColor","String","navigationTextColor","length","type","Number","default","validator","val","nextIcon","prevIcon","totalVisible","value","pageAriaLabel","currentPageAriaLabel","previousAriaLabel","nextAriaLabel","wrapperAriaLabel","data","maxButtons","selected","computed","classes","this","themeClasses","items","parseInt","isNaN","MAX_SAFE_INTEGER","maxLength","Math","min","max","range","even","left","floor","right","firstItem","lastItem","start","end","secondItem","beforeLastItem","watch","init","beforeMount","methods","onResize","$nextTick","setTimeout","width","$el","parentElement","clientWidth","window","innerWidth","next","e","preventDefault","$emit","previous","from","to","i","push","genIcon","h","icon","fn","label","setBackgroundColor","staticClass","class","attrs","on","click","VIcon","color","genItem","isCurrentPage","ariaLabel","$vuetify","lang","t","toString","genItems","map","index","key","genList","children","modifiers","quiet","render","rtl","role","Vue","inheritAttrs","Array","options","Object","sortBy","sortDesc","customSort","Function","sortItems","mustSort","multiSort","page","itemsPerPage","groupBy","groupDesc","customGroup","groupItems","locale","disableSort","disablePagination","disableFiltering","search","customFilter","searchItems","serverItemsLength","internalOptions","wrapInArray","assign","sortDiff","groupDiff","fillArray","itemsLength","filteredItems","pageCount","ceil","pageStart","pageStop","isGrouped","pagination","slice","computedItems","paginateItems","groupedItems","scopedProps","sort","sortArray","group","updateOptions","originalItemsLength","computedOptions","handler","old","deepEqual","deep","immediate","isArray","toggle","oldBy","oldDesc","by","desc","byIndex","findIndex","k","splice","s","$scopedSlots","required","itemsPerPageOptions","firstIcon","lastIcon","itemsPerPageText","itemsPerPageAllText","showFirstLastPage","showCurrentPage","disableItemsPerPage","pageText","disableNextPageIcon","computedDataItemsPerPageOptions","option","genDataItemsPerPageOption","obj","onFirstPage","onPreviousPage","onNextPage","onLastPage","onChangeItemsPerPage","text","genItemsPerPageSelect","computedIPPO","find","ippo","$createElement","VSelect","hideDetails","auto","minWidth","input","genPaginationInfo","VBtn","genIcons","before","after","unshift","getSlot","Mobile","VData","itemKey","singleSelect","expanded","mobileBreakpoint","singleExpand","loading","noResultsText","noDataText","loadingText","hideDefaultFooter","footerProps","selectableKey","selection","expansion","internalCurrentItems","shiftKeyDown","lastEntry","everyItem","selectableItems","every","isSelected","someItems","some","sanitizedFooterProps","camelizeObjectKeys","filter","item","isSelectable","reduce","getObjectValueByPath","keys","values","includes","created","breakingProps","forEach","original","replacement","$attrs","hasOwnProperty","breaking","removedProps","prop","removed","mounted","addEventListener","onKeyDown","onKeyUp","beforeDestroy","removeEventListener","keyCode","keyCodes","shift","shiftKey","toggleSelectAll","select","emit","x","lastEntryKey","lastEntryKeySelected","multipleSelect","currentItem","isExpanded","expand","createItemProps","v","isMobile","genEmptyWrapper","content","genEmpty","filteredItemsLength","$slots","noData","noResults","empty","genFooter","scopedSlots","getPrefixedScopedSlots","VDataFooter","genDefaultScopedSlot","outerProps","$props","update:options","ripple","headers","checkboxColor","sortIcon","showGroupBy","genSelectAll","indeterminate","_a","VSimpleCheckbox","genSortIcon","size","header","sortByText","genSortChip","sortIndex","beingSorted","isDesc","sortable","active","asc","VChip","stopPropagation","genSortSelect","multiple","menuProps","closeOnContentClick","change","sortHeaders","th","undefined","tr","genGroupByToggle","getAria","$t","ariaSort","join","genHeader","scope","style","convertToUnit","align","divider","groupable","dedupeModelListeners","model","indexOf","callback","rebuildFunctionalSlots","slots","slot","functional","mobile","rebuildSlots","mergeData","VDataTableHeaderMobile","VDataTableHeaderDesktop","needsTd","tag","computedSlots","columns","slotName","scopedSlot","regularSlot","textAlign","cellClass","headerClass","contentClass","summaryClass","dense","fixedHeader","height","top","bottom","genWrapper","wrapper","hideDefaultHeader","mobileRowChildren","getDefaultMouseEventHandlers","suffix","getData","eventFirst","listeners","$listeners","endsWith","acc","event","getMouseEventHandlers","prevent","result","events","eventOptions","prefix","passive","once","capture","mouseEvent","button","buttons","stop","classSeparator","eventTargetClasses","currentTarget","className","split","currentTargets","document","elementsFromPoint","changedTouches","clientX","clientY","c","_b","target","isSameNode","dispatchEvent","TouchEvent","targetTouches","touches","filterFn","searchTableItems","headersWithCustomFilters","headersWithoutCustomFilters","filterMode","trim","defaultFilter","matchesColumnFilters","matchesSearchTerm","VDataIterator","Loadable","Mouse","showSelect","showExpand","caption","headerProps","calculateWidths","headersLength","expandIcon","itemClass","itemStyle","loaderHeight","internalGroupBy","openCache","widths","computedHeaders","defaultHeader","colspanAttrs","colspan","columnSorters","filterable","sanitizedHeaderProps","computedItemsPerPage","firstOption","groupByText","_c","calcWidths","querySelectorAll","customFilterWithColumns","customSortWithHeaders","call","genCaption","genColgroup","genLoading","genProgress","genHeaders","VDataTableHeader","genGroupedRows","genRows","$set","genDefaultGroupedRow","isOpen","toggleFn","removeFn","remove","small","column","RowGroup","genScopedRows","genDefaultRows","rows","genDefaultExpandedRow","genDefaultSimpleRow","headerRow","expandedRow","MobileRow","Row","mergeClasses","getPropertyFromItem","mergeStyles","genBody","body","genFoot","foot","genFooters","simpleProps","VSimpleTable","proxySlot"],"mappings":"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","file":"js/chunk-bfc869ac.dfbfb9a9.js","sourcesContent":["import './VPagination.sass'\n\nimport VIcon from '../VIcon'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Intersectable from '../../mixins/intersectable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, CreateElement, VNodeChildrenArrayContents } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Intersectable({ onVisible: ['init'] }),\n Themeable\n).extend({\n name: 'v-pagination',\n\n directives: { Resize },\n\n props: {\n circle: Boolean,\n disabled: Boolean,\n navigationColor: String,\n navigationTextColor: String,\n length: {\n type: Number,\n default: 0,\n validator: (val: number) => val % 1 === 0,\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n totalVisible: [Number, String],\n value: {\n type: Number,\n default: 0,\n },\n pageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.page',\n },\n currentPageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.currentPage',\n },\n previousAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.previous',\n },\n nextAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.next',\n },\n wrapperAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.wrapper',\n },\n },\n\n data () {\n return {\n maxButtons: 0,\n selected: null as number | null,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-pagination': true,\n 'v-pagination--circle': this.circle,\n 'v-pagination--disabled': this.disabled,\n ...this.themeClasses,\n }\n },\n\n items (): (string | number)[] {\n const totalVisible = parseInt(this.totalVisible, 10)\n\n if (totalVisible === 0 || isNaN(this.length) || this.length > Number.MAX_SAFE_INTEGER) {\n return []\n }\n\n const maxLength = Math.min(\n Math.max(0, totalVisible) || this.length,\n Math.max(0, this.maxButtons) || this.length,\n this.length\n )\n\n if (this.length <= maxLength) {\n return this.range(1, this.length)\n }\n\n const even = maxLength % 2 === 0 ? 1 : 0\n const left = Math.floor(maxLength / 2)\n const right = this.length - left + 1 + even\n\n if (this.value > left && this.value < right) {\n const firstItem = 1\n const lastItem = this.length\n const start = this.value - left + 2\n const end = this.value + left - 2 - even\n const secondItem = start - 1 === firstItem + 1 ? 2 : '...'\n const beforeLastItem = end + 1 === lastItem - 1 ? end + 1 : '...'\n\n return [1, secondItem, ...this.range(start, end), beforeLastItem, this.length]\n } else if (this.value === left) {\n const end = this.value + left - 1 - even\n return [...this.range(1, end), '...', this.length]\n } else if (this.value === right) {\n const start = this.value - left + 1\n return [1, '...', ...this.range(start, this.length)]\n } else {\n return [\n ...this.range(1, left),\n '...',\n ...this.range(right, this.length),\n ]\n }\n },\n },\n\n watch: {\n value () {\n this.init()\n },\n },\n\n beforeMount () {\n this.init()\n },\n\n methods: {\n init () {\n this.selected = null\n\n this.onResize()\n this.$nextTick(this.onResize)\n // TODO: Change this (f75dee3a, cbdf7caa)\n setTimeout(() => (this.selected = this.value), 100)\n },\n onResize () {\n const width = this.$el && this.$el.parentElement\n ? this.$el.parentElement.clientWidth\n : window.innerWidth\n\n this.maxButtons = Math.floor((width - 96) / 42)\n },\n next (e: Event) {\n e.preventDefault()\n this.$emit('input', this.value + 1)\n this.$emit('next')\n },\n previous (e: Event) {\n e.preventDefault()\n this.$emit('input', this.value - 1)\n this.$emit('previous')\n },\n range (from: number, to: number) {\n const range = []\n\n from = from > 0 ? from : 1\n\n for (let i = from; i <= to; i++) {\n range.push(i)\n }\n\n return range\n },\n genIcon (h: CreateElement, icon: string, disabled: boolean, fn: EventListener, label: String): VNode {\n return h('li', [\n h('button',\n this.setBackgroundColor(this.navigationColor, {\n staticClass: 'v-pagination__navigation',\n class: {\n 'v-pagination__navigation--disabled': disabled,\n },\n attrs: {\n disabled,\n type: 'button',\n 'aria-label': label,\n },\n on: disabled ? {} : { click: fn },\n }),\n [h(VIcon, { props: { color: this.navigationTextColor } }, [icon])]\n ),\n ])\n },\n genItem (h: CreateElement, i: string | number): VNode {\n const color: string | false = (i === this.value) && (this.color || 'primary')\n const isCurrentPage = i === this.value\n const ariaLabel = isCurrentPage ? this.currentPageAriaLabel : this.pageAriaLabel\n\n return h('button', this.setBackgroundColor(color, {\n staticClass: 'v-pagination__item',\n class: {\n 'v-pagination__item--active': i === this.value,\n },\n attrs: {\n type: 'button',\n 'aria-current': isCurrentPage,\n 'aria-label': this.$vuetify.lang.t(ariaLabel, i),\n },\n on: {\n click: () => this.$emit('input', i),\n },\n }), [i.toString()])\n },\n genItems (h: CreateElement): VNode[] {\n return this.items.map((i, index) => {\n return h('li', { key: index }, [\n isNaN(Number(i)) ? h('span', { class: 'v-pagination__more' }, [i.toString()]) : this.genItem(h, i),\n ])\n })\n },\n genList (h: CreateElement, children: VNodeChildrenArrayContents): VNode {\n return h('ul', {\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n class: this.classes,\n }, children)\n },\n },\n\n render (h): VNode {\n const children = [\n this.genIcon(h,\n this.$vuetify.rtl ? this.nextIcon : this.prevIcon,\n this.value <= 1,\n this.previous,\n this.$vuetify.lang.t(this.previousAriaLabel)),\n this.genItems(h),\n this.genIcon(h,\n this.$vuetify.rtl ? this.prevIcon : this.nextIcon,\n this.value >= this.length,\n this.next,\n this.$vuetify.lang.t(this.nextAriaLabel)),\n ]\n\n return h('nav', {\n attrs: {\n role: 'navigation',\n 'aria-label': this.$vuetify.lang.t(this.wrapperAriaLabel),\n },\n }, [this.genList(h, 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 } as PropValidator,\n sortDesc: {\n type: [Boolean, Array],\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.internalOptions.groupBy.length) && 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 return {\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 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: string[] = []\n let sortDesc: boolean[] = []\n\n if (!this.disableSort) {\n sortBy = this.internalOptions.sortBy\n sortDesc = this.internalOptions.sortDesc\n }\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, Math.ceil(items.length / this.internalOptions.itemsPerPage)) || 1 // Prevent NaN\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'\nimport { getSlot } from '../../util/helpers'\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.$vuetify.lang.t(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 const itemsLength: number = this.pagination.itemsLength\n let pageStart: number = this.pagination.pageStart\n let pageStop: number = this.pagination.pageStop\n\n if (this.pagination.itemsLength && this.pagination.itemsPerPage) {\n pageStart = this.pagination.pageStart + 1\n 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 } else if (this.$scopedSlots['page-text']) {\n children = [this.$scopedSlots['page-text']!({ 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 getSlot(this, 'prepend'),\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, keyCodes } 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 shiftKeyDown: false,\n lastEntry: -1,\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 mounted () {\n window.addEventListener('keydown', this.onKeyDown)\n window.addEventListener('keyup', this.onKeyUp)\n },\n beforeDestroy () {\n window.removeEventListener('keydown', this.onKeyDown)\n window.removeEventListener('keyup', this.onKeyUp)\n },\n\n methods: {\n onKeyDown (e: KeyboardEvent): void {\n this.shiftKeyDown = e.keyCode === keyCodes.shift || e.shiftKey\n },\n onKeyUp (e: KeyboardEvent): void {\n if (e.keyCode === keyCodes.shift || !e.shiftKey) {\n this.shiftKeyDown = false\n }\n },\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 const index = this.selectableItems.findIndex(x => getObjectValueByPath(x, this.itemKey) === key)\n if (this.lastEntry === -1) this.lastEntry = index\n else if (this.shiftKeyDown && !this.singleSelect && emit) {\n const lastEntryKey = getObjectValueByPath(this.selectableItems[this.lastEntry], this.itemKey)\n const lastEntryKeySelected = Object.keys(this.selection).includes(String(lastEntryKey))\n this.multipleSelect(lastEntryKeySelected, emit, selection, index)\n }\n this.lastEntry = index\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 multipleSelect (value = true, emit = true, selection: any, index: number): void {\n const start = index < this.lastEntry ? index : this.lastEntry\n const end = index < this.lastEntry ? this.lastEntry : index\n for (let i = start; i <= end; i++) {\n const currentItem = this.selectableItems[i]\n const key = getObjectValueByPath(currentItem, this.itemKey)\n if (value) selection[key] = currentItem\n else delete selection[key]\n emit && this.$emit('item-selected', { currentItem, value })\n }\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, index: number): DataItemProps {\n return {\n item,\n index,\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 isMobile: this.isMobile,\n expand: this.expand,\n })\n }\n\n if (this.$scopedSlots.item) {\n return props.items.map((item: any, index) => this.$scopedSlots.item!(this.createItemProps(\n item,\n index\n )))\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 checkboxColor: String,\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 color: this.checkboxColor ?? '',\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 = children.length\n ? h('th', [h('div', { staticClass: 'v-data-table-header-mobile__wrapper' }, children)])\n : undefined\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.hasOwnProperty(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, wrapInArray } from '../../util/helpers'\n\nfunction needsTd (slot: VNode[] | undefined) {\n return slot!.length !== 1 ||\n !['td', 'th'].includes(slot![0]?.tag!)\n}\n\nexport default Vue.extend({\n name: 'row',\n\n functional: true,\n\n props: {\n headers: Array as PropType,\n index: Number,\n item: Object,\n rtl: Boolean,\n },\n\n render (h, { props, slots, data }): VNode {\n const computedSlots = slots()\n\n const columns = 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.hasOwnProperty(slotName) && data.scopedSlots[slotName]\n const regularSlot = computedSlots.hasOwnProperty(slotName) && computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(...wrapInArray(scopedSlot({\n item: props.item,\n isMobile: false,\n header,\n index: props.index,\n value,\n })))\n } else if (regularSlot) {\n children.push(...wrapInArray(regularSlot))\n } else {\n children.push(value == null ? value : String(value))\n }\n\n const textAlign = `text-${header.align || 'start'}`\n\n return needsTd(children)\n ? h('td', {\n class: [\n textAlign,\n header.cellClass,\n {\n 'v-data-table__divider': header.divider,\n },\n ],\n }, children)\n : children\n })\n\n return h('tr', data, columns)\n },\n})\n","import Vue, { VNode } from 'vue'\n\nexport default Vue.extend({\n name: 'row-group',\n\n functional: true,\n\n props: {\n value: {\n type: Boolean,\n default: true,\n },\n headerClass: {\n type: String,\n default: 'v-row-group__header',\n },\n contentClass: String,\n summaryClass: {\n type: String,\n default: 'v-row-group__summary',\n },\n },\n\n render (h, { slots, props }): VNode {\n const computedSlots = slots()\n const children = []\n\n if (computedSlots['column.header']) {\n children.push(h('tr', {\n staticClass: props.headerClass,\n }, computedSlots['column.header']))\n } else if (computedSlots['row.header']) {\n children.push(...computedSlots['row.header'])\n }\n\n if (computedSlots['row.content'] && props.value) children.push(...computedSlots['row.content'])\n\n if (computedSlots['column.summary']) {\n children.push(h('tr', {\n staticClass: props.summaryClass,\n }, computedSlots['column.summary']))\n } else if (computedSlots['row.summary']) {\n children.push(...computedSlots['row.summary'])\n }\n\n return children as any\n },\n})\n","import './VSimpleTable.sass'\n\nimport { convertToUnit } from '../../util/helpers'\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\nimport { VNode } from 'vue'\n\nexport default mixins(Themeable).extend({\n name: 'v-simple-table',\n\n props: {\n dense: Boolean,\n fixedHeader: Boolean,\n height: [Number, String],\n },\n\n computed: {\n classes (): Record {\n return {\n 'v-data-table--dense': this.dense,\n 'v-data-table--fixed-height': !!this.height && !this.fixedHeader,\n 'v-data-table--fixed-header': this.fixedHeader,\n 'v-data-table--has-top': !!this.$slots.top,\n 'v-data-table--has-bottom': !!this.$slots.bottom,\n ...this.themeClasses,\n }\n },\n },\n\n methods: {\n genWrapper () {\n return this.$slots.wrapper || this.$createElement('div', {\n staticClass: 'v-data-table__wrapper',\n style: {\n height: convertToUnit(this.height),\n },\n }, [\n this.$createElement('table', this.$slots.default),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-data-table',\n class: this.classes,\n }, [\n this.$slots.top,\n this.genWrapper(),\n this.$slots.bottom,\n ])\n },\n})\n","import Vue, { VNode, PropType } from 'vue'\nimport { getObjectValueByPath } from '../../util/helpers'\nimport { DataTableHeader } from '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 index: Number,\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.hasOwnProperty(slotName) && data.scopedSlots[slotName]\n const regularSlot = computedSlots.hasOwnProperty(slotName) && computedSlots[slotName]\n\n if (scopedSlot) {\n children.push(scopedSlot({\n item: props.item,\n isMobile: true,\n header,\n index: props.index,\n value,\n }))\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 Vue from 'vue'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nexport default Vue.extend({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const listeners = Object.keys(this.$listeners)\n .filter(key => key.endsWith(suffix))\n .reduce((acc, key) => {\n acc[key] = { event: key.slice(0, -suffix.length) }\n return acc\n }, {} as MouseEvents)\n\n return this.getMouseEventHandlers({\n ...listeners,\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n }, getData, eventFirst)\n },\n getMouseEventHandlers (events: MouseEvents, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$listeners[event]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n\n // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n if (e && 'touches' in e) {\n const classSeparator = ' '\n\n const eventTargetClasses = (e.currentTarget as HTMLElement)?.className.split(classSeparator)\n const currentTargets = document.elementsFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)\n\n // Get \"the same kind\" current hovering target by checking\n // If element has the same class of initial touch start element (which has touch event listener registered)\n const currentTarget = currentTargets.find(t => t.className.split(classSeparator).some(c => eventTargetClasses.includes(c)))\n\n if (currentTarget &&\n !(e.target as HTMLElement)?.isSameNode(currentTarget)\n ) {\n currentTarget.dispatchEvent(new TouchEvent(e.type, {\n changedTouches: e.changedTouches as unknown as Touch[],\n targetTouches: e.targetTouches as unknown as Touch[],\n touches: e.touches as unknown as Touch[],\n }))\n return\n }\n }\n\n // TODO: VCalendar emits the calendar event as the first argument,\n // but it really should be the native event instead so modifiers can be used\n if (eventFirst) {\n this.$emit(event, e, getData(e))\n } else {\n this.$emit(event, getData(e), e)\n }\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n },\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 RowStyleFunction,\n DataTableItemProps,\n DataTableFilterMode,\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'\nimport Mouse from '../../mixins/mouse'\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, mergeStyles } 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 filterMode: DataTableFilterMode,\n) {\n search = typeof search === 'string' ? search.trim() : null\n\n if (filterMode === 'union') {\n // If the `search` property is empty and there are no custom filters in use, there is nothing to do.\n if (!(search && headersWithoutCustomFilters.length) && !headersWithCustomFilters.length) return items\n\n return items.filter(item => {\n // Headers with custom filters are evaluated whether or not a search term has been provided.\n if (headersWithCustomFilters.length && headersWithCustomFilters.every(filterFn(item, search, defaultFilter))) {\n return true\n }\n\n // Otherwise, the `search` property is used to filter columns without a custom filter.\n return (search && headersWithoutCustomFilters.some(filterFn(item, search, customFilter)))\n })\n } else if (filterMode === 'intersection') {\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 } else {\n return items\n }\n}\n\n/* @vue/component */\nexport default mixins(\n VDataIterator,\n Loadable,\n Mouse,\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 checkboxColor: String,\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 filterMode: {\n type: String,\n default: 'intersection',\n } as PropValidator,\n itemClass: {\n type: [String, Function],\n default: () => '',\n } as PropValidator,\n itemStyle: {\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 groupByText (): string {\n return this.headers?.find(header => header.value === this.internalGroupBy?.[0])?.text ?? ''\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(\n items,\n search,\n this.headersWithCustomFilters,\n this.headersWithoutCustomFilters,\n this.customFilter,\n this.filterMode\n )\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, index: number): DataTableItemProps {\n const data = {\n ...VDataIterator.options.methods.createItemProps.call(this, item, index),\n headers: this.computedHeaders,\n }\n\n return {\n ...data,\n attrs: {\n class: {\n 'v-data-table__selected': data.isSelected,\n },\n },\n on: {\n ...this.getDefaultMouseEventHandlers(':row', () => data, true),\n // TODO: 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: (event: MouseEvent) => this.$emit('click:row', item, data, event),\n },\n }\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 checkboxColor: this.checkboxColor,\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 // TODO: rename to 'head'? (thead, tbody, tfoot)\n const children: VNodeChildrenArrayContents = [getSlot(this, 'header', {\n ...data,\n isMobile: this.isMobile,\n })]\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 isMobile: this.isMobile,\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']!({\n group,\n groupBy: props.options.groupBy,\n isMobile: this.isMobile,\n items,\n headers: this.computedHeaders,\n isOpen,\n toggle: toggleFn,\n remove: removeFn,\n }),\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, `${this.groupByText}: ${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']!({\n group,\n groupBy: props.options.groupBy,\n isMobile: this.isMobile,\n items,\n headers: this.computedHeaders,\n isOpen,\n toggle: toggleFn,\n }),\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, i),\n isMobile: this.isMobile,\n }))\n\n if (this.isExpanded(item)) {\n rows.push(this.$scopedSlots['expanded-item']!({\n headers: this.computedHeaders,\n isMobile: this.isMobile,\n index: i,\n item,\n }))\n }\n }\n\n return rows\n },\n genDefaultRows (items: any[], props: DataScopeProps) {\n return this.$scopedSlots['expanded-item']\n ? items.map((item, index) => this.genDefaultExpandedRow(item, index))\n : items.map((item, index) => this.genDefaultSimpleRow(item, index))\n },\n genDefaultExpandedRow (item: any, index: number): 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, index, classes)\n const expandedRow = this.$createElement('tr', {\n staticClass: 'v-data-table__expanded v-data-table__expanded__content',\n }, [this.$scopedSlots['expanded-item']!({\n headers: this.computedHeaders,\n isMobile: this.isMobile,\n item,\n })])\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, index: number, classes: Record = {}): VNode {\n const scopedSlots = getPrefixedScopedSlots('item.', this.$scopedSlots)\n\n const data = this.createItemProps(item, index)\n\n if (this.showSelect) {\n const slot = scopedSlots['data-table-select']\n scopedSlots['data-table-select'] = slot ? () => slot({\n ...data,\n isMobile: this.isMobile,\n }) : () => this.$createElement(VSimpleCheckbox, {\n staticClass: 'v-data-table__checkbox',\n props: {\n value: data.isSelected,\n disabled: !this.isSelectable(item),\n color: this.checkboxColor ?? '',\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 style: mergeStyles({}, getPropertyFromItem(item, this.itemStyle)),\n props: {\n headers: this.computedHeaders,\n hideDefaultHeader: this.hideDefaultHeader,\n index,\n item,\n rtl: this.$vuetify.rtl,\n },\n scopedSlots,\n on: data.on,\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 genFoot (props: DataScopeProps): VNode[] | undefined {\n return this.$scopedSlots.foot?.(props)\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 class: {\n 'v-data-table--mobile': this.isMobile,\n 'v-data-table--selectable': this.showSelect,\n },\n }, [\n this.proxySlot('top', getSlot(this, 'top', {\n ...props,\n isMobile: this.isMobile,\n }, true)),\n this.genCaption(props),\n this.genColgroup(props),\n this.genHeaders(props),\n this.genBody(props),\n this.genFoot(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,\n },\n })\n },\n})\n"],"sourceRoot":""}