{"version":3,"sources":["webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VDataTable/VSimpleTable.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/mixins/mouse/index.ts","webpack:///../../../src/components/VDataTable/VDataTable.ts"],"names":["breakpoints","ALIGNMENT","makeProps","prefix","def","reduce","props","val","upperFirst","alignValidator","str","includes","alignProps","type","String","default","validator","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","Object","keys","justify","alignContent","classMap","breakpointClass","prop","className","breakpoint","replace","toLowerCase","cache","Map","Vue","extend","name","functional","tag","dense","Boolean","noGutters","render","h","data","children","cacheKey","classList","get","forEach","value","push","set","mergeData","staticClass","class","mixins","Themeable","fixedHeader","height","Number","computed","classes","this","$slots","top","bottom","themeClasses","methods","genWrapper","wrapper","$createElement","style","convertToUnit","getSlot","breakpointProps","offsetProps","orderProps","col","offset","order","cols","alignSelf","parent","hasColClasses","some","startsWith","inheritAttrs","items","Array","options","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","length","groupDiff","fillArray","itemsLength","filteredItems","pageCount","Math","ceil","pageStart","pageStop","min","isGrouped","pagination","slice","computedItems","paginateItems","groupedItems","scopedProps","sort","sortArray","group","updateOptions","originalItemsLength","computedOptions","watch","handler","old","deepEqual","deep","immediate","$emit","isArray","toggle","key","oldBy","oldDesc","by","desc","byIndex","findIndex","k","splice","map","s","i","max","$scopedSlots","required","itemsPerPageOptions","prevIcon","nextIcon","firstIcon","lastIcon","itemsPerPageText","itemsPerPageAllText","showFirstLastPage","showCurrentPage","disableItemsPerPage","pageText","disableNextPageIcon","computedDataItemsPerPageOptions","option","genDataItemsPerPageOption","obj","onFirstPage","onPreviousPage","onNextPage","onLastPage","onChangeItemsPerPage","text","$vuetify","lang","t","genItemsPerPageSelect","computedIPPO","find","ippo","VSelect","attrs","disabled","hideDetails","auto","minWidth","on","input","genPaginationInfo","genIcon","click","label","icon","VBtn","VIcon","genIcons","before","after","rtl","unshift","toString","Mobile","VData","itemKey","singleSelect","expanded","mobileBreakpoint","singleExpand","loading","noResultsText","noDataText","loadingText","hideDefaultFooter","footerProps","selectableKey","selection","expansion","internalCurrentItems","shiftKeyDown","lastEntry","everyItem","selectableItems","every","isSelected","someItems","sanitizedFooterProps","camelizeObjectKeys","filter","item","isSelectable","getObjectValueByPath","values","created","breakingProps","original","replacement","$attrs","hasOwnProperty","breaking","removedProps","removed","mounted","window","addEventListener","onKeyDown","onKeyUp","beforeDestroy","removeEventListener","e","keyCode","keyCodes","shift","shiftKey","toggleSelectAll","select","emit","index","x","lastEntryKey","lastEntryKeySelected","multipleSelect","start","end","currentItem","isExpanded","expand","createItemProps","v","isMobile","genEmptyWrapper","content","genEmpty","filteredItemsLength","noData","noResults","genItems","empty","genFooter","scopedSlots","getPrefixedScopedSlots","VDataFooter","genDefaultScopedSlot","outerProps","$props","update:options","directives","ripple","headers","checkboxColor","sortIcon","showGroupBy","genSelectAll","indeterminate","color","_a","VSimpleCheckbox","genSortIcon","size","header","sortByText","genSortChip","sortIndex","beingSorted","isDesc","sortable","active","asc","VChip","stopPropagation","genSortSelect","multiple","menuProps","closeOnContentClick","change","width","sortHeaders","th","undefined","tr","genGroupByToggle","getAria","$t","ariaSort","ariaLabel","join","genHeader","role","scope","divider","groupable","dedupeModelListeners","model","indexOf","callback","rebuildFunctionalSlots","slots","slot","mobile","rebuildSlots","VDataTableHeaderMobile","VDataTableHeaderDesktop","needsTd","computedSlots","columns","slotName","scopedSlot","regularSlot","textAlign","cellClass","headerClass","contentClass","summaryClass","hideDefaultHeader","mobileRowChildren","getDefaultMouseEventHandlers","suffix","getData","eventFirst","listeners","$listeners","endsWith","acc","event","getMouseEventHandlers","prevent","result","events","eventOptions","passive","once","capture","mouseEvent","button","buttons","preventDefault","stop","classSeparator","eventTargetClasses","currentTarget","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","from","$el","querySelectorAll","clientWidth","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-067989ff.676f31c0.js","sourcesContent":["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, getSlot } 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', getSlot(this)),\n ])\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-data-table',\n class: this.classes,\n }, [\n getSlot(this, 'top'),\n this.genWrapper(),\n getSlot(this, 'bottom'),\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 } 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 = getSlot(this, 'loading') || this.$vuetify.lang.t(this.loadingText)\n return this.genEmptyWrapper(loading)\n } else if (originalItemsLength === 0) {\n const noData = getSlot(this, 'noData') || this.$vuetify.lang.t(this.noDataText)\n return this.genEmptyWrapper(noData)\n } else if (filteredItemsLength === 0) {\n const noResults = getSlot(this, 'noResults') || 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 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":""}