{"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/components/VDataTable/VDataTable.ts","webpack:///../../../src/mixins/mobile/index.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","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","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","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","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","directives","ripple","headers","checkboxColor","sortIcon","showGroupBy","genSelectAll","indeterminate","color","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","_slot$","computedSlots","columns","slotName","scopedSlot","regularSlot","textAlign","cellClass","headerClass","contentClass","summaryClass","hideDefaultHeader","mobileRowChildren","filterFn","searchTableItems","headersWithCustomFilters","headersWithoutCustomFilters","trim","matchesColumnFilters","defaultFilter","matchesSearchTerm","VDataIterator","Loadable","showSelect","showExpand","caption","headerProps","calculateWidths","headersLength","expandIcon","itemClass","loaderHeight","internalGroupBy","openCache","widths","computedHeaders","defaultHeader","colspanAttrs","colspan","columnSorters","acc","filterable","sanitizedHeaderProps","computedItemsPerPage","firstOption","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","contextmenu","event","dblclick","genBody","body","genFoot","foot","_this$$scopedSlots$fo","genFooters","simpleProps","VSimpleTable","proxySlot","isNaN","mobileWidth","parseInt","isNumber","deprecate"],"mappings":"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","file":"js/xprogrammatic-all-campaign-overview~xtrading-all-campaign-overview.0430e98d.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 } 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 './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 if (e.keyCode !== keyCodes.shift) return\n this.shiftKeyDown = true\n },\n onKeyUp (e: KeyboardEvent): void {\n if (e.keyCode !== keyCodes.shift) return\n this.shiftKeyDown = false\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 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 './VDataTable.sass'\n\n// Types\nimport { VNode, VNodeChildrenArrayContents, VNodeChildren } from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DataTableHeader,\n DataTableFilterFunction,\n DataScopeProps,\n DataOptions,\n DataPagination,\n DataTableCompareFunction,\n DataItemsPerPageOption,\n ItemGroup,\n RowClassFunction,\n DataTableItemProps,\n} from 'vuetify/types'\n\n// Components\nimport { VData } from '../VData'\nimport { VDataFooter, VDataIterator } from '../VDataIterator'\nimport VBtn from '../VBtn'\nimport VDataTableHeader from './VDataTableHeader'\n// import VVirtualTable from './VVirtualTable'\nimport VIcon from '../VIcon'\nimport Row from './Row'\nimport RowGroup from './RowGroup'\nimport VSimpleCheckbox from '../VCheckbox/VSimpleCheckbox'\nimport VSimpleTable from './VSimpleTable'\nimport MobileRow from './MobileRow'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Helpers\nimport mixins from '../../util/mixins'\nimport { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys, getPropertyFromItem } from '../../util/helpers'\nimport { breaking } from '../../util/console'\nimport { mergeClasses } from '../../util/mergeData'\n\nfunction filterFn (item: any, search: string | null, filter: DataTableFilterFunction) {\n return (header: DataTableHeader) => {\n const value = getObjectValueByPath(item, header.value)\n return header.filter ? header.filter(value, search, item) : filter(value, search, item)\n }\n}\n\nfunction searchTableItems (\n items: any[],\n search: string | null,\n headersWithCustomFilters: DataTableHeader[],\n headersWithoutCustomFilters: DataTableHeader[],\n customFilter: DataTableFilterFunction\n) {\n search = typeof search === 'string' ? search.trim() : null\n\n return items.filter(item => {\n // Headers with custom filters are evaluated whether or not a search term has been provided.\n // We need to match every filter to be included in the results.\n const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))\n\n // Headers without custom filters are only filtered by the `search` property if it is defined.\n // We only need a single column to match the search term to be included in the results.\n const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))\n\n return matchesColumnFilters && matchesSearchTerm\n })\n}\n\n/* @vue/component */\nexport default mixins(\n VDataIterator,\n Loadable,\n).extend({\n name: 'v-data-table',\n\n // https://github.com/vuejs/vue/issues/6872\n directives: {\n ripple,\n },\n\n props: {\n headers: {\n type: Array,\n default: () => [],\n } as PropValidator,\n showSelect: Boolean,\n 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 itemClass: {\n type: [String, Function],\n default: () => '',\n } as PropValidator,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n },\n\n data () {\n return {\n internalGroupBy: [] as string[],\n openCache: {} as { [key: string]: boolean },\n widths: [] as number[],\n }\n },\n\n computed: {\n computedHeaders (): DataTableHeader[] {\n if (!this.headers) return []\n const headers = this.headers.filter(h => h.value === undefined || !this.internalGroupBy.find(v => v === h.value))\n const defaultHeader = { text: '', sortable: false, width: '1px' }\n\n if (this.showSelect) {\n const index = headers.findIndex(h => h.value === 'data-table-select')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-select' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n if (this.showExpand) {\n const index = headers.findIndex(h => h.value === 'data-table-expand')\n if (index < 0) headers.unshift({ ...defaultHeader, value: 'data-table-expand' })\n else headers.splice(index, 1, { ...defaultHeader, ...headers[index] })\n }\n\n return headers\n },\n colspanAttrs (): object | undefined {\n return this.isMobile ? undefined : {\n colspan: this.headersLength || this.computedHeaders.length,\n }\n },\n columnSorters (): Record {\n return this.computedHeaders.reduce>((acc, header) => {\n if (header.sort) acc[header.value] = header.sort\n return acc\n }, {})\n },\n headersWithCustomFilters (): DataTableHeader[] {\n return this.headers.filter(header => header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n headersWithoutCustomFilters (): DataTableHeader[] {\n return this.headers.filter(header => !header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true))\n },\n sanitizedHeaderProps (): Record {\n return camelizeObjectKeys(this.headerProps)\n },\n computedItemsPerPage (): number {\n const itemsPerPage = this.options && this.options.itemsPerPage ? this.options.itemsPerPage : this.itemsPerPage\n const itemsPerPageOptions: DataItemsPerPageOption[] | undefined = this.sanitizedFooterProps.itemsPerPageOptions\n\n if (\n itemsPerPageOptions &&\n !itemsPerPageOptions.find(item => typeof item === 'number' ? item === itemsPerPage : item.value === itemsPerPage)\n ) {\n const firstOption = itemsPerPageOptions[0]\n return typeof firstOption === 'object' ? firstOption.value : firstOption\n }\n\n return itemsPerPage\n },\n },\n\n created () {\n const breakingProps = [\n ['sort-icon', 'header-props.sort-icon'],\n ['hide-headers', 'hide-default-header'],\n ['select-all', 'show-select'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n mounted () {\n // if ((!this.sortBy || !this.sortBy.length) && (!this.options.sortBy || !this.options.sortBy.length)) {\n // const firstSortable = this.headers.find(h => !('sortable' in h) || !!h.sortable)\n // if (firstSortable) this.updateOptions({ sortBy: [firstSortable.value], sortDesc: [false] })\n // }\n\n if (this.calculateWidths) {\n window.addEventListener('resize', this.calcWidths)\n this.calcWidths()\n }\n },\n\n beforeDestroy () {\n if (this.calculateWidths) {\n window.removeEventListener('resize', this.calcWidths)\n }\n },\n\n methods: {\n calcWidths () {\n this.widths = Array.from(this.$el.querySelectorAll('th')).map(e => e.clientWidth)\n },\n customFilterWithColumns (items: any[], search: string) {\n return searchTableItems(items, search, this.headersWithCustomFilters, this.headersWithoutCustomFilters, this.customFilter)\n },\n customSortWithHeaders (items: any[], sortBy: string[], sortDesc: boolean[], locale: string) {\n return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters)\n },\n createItemProps (item: any, index: number): DataTableItemProps {\n const props = VDataIterator.options.methods.createItemProps.call(this, item, index)\n\n return Object.assign(props, { headers: this.computedHeaders })\n },\n genCaption (props: DataScopeProps) {\n if (this.caption) return [this.$createElement('caption', [this.caption])]\n\n return getSlot(this, 'caption', props, true)\n },\n genColgroup (props: DataScopeProps) {\n return this.$createElement('colgroup', this.computedHeaders.map(header => {\n return this.$createElement('col', {\n class: {\n divider: header.divider,\n },\n })\n }))\n },\n genLoading () {\n const th = this.$createElement('th', {\n staticClass: 'column',\n attrs: this.colspanAttrs,\n }, [this.genProgress()])\n\n const tr = this.$createElement('tr', {\n staticClass: 'v-data-table__progress',\n }, [th])\n\n return this.$createElement('thead', [tr])\n },\n genHeaders (props: DataScopeProps) {\n const data = {\n props: {\n ...this.sanitizedHeaderProps,\n headers: this.computedHeaders,\n options: props.options,\n mobile: this.isMobile,\n showGroupBy: this.showGroupBy,\n 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, `${props.options.groupBy[0]}: ${group}`, remove])\n\n children.unshift(this.$createElement('template', { slot: 'column.header' }, [column]))\n }\n\n if (this.$scopedSlots['group.summary']) {\n children.push(this.$createElement('template', { slot: 'column.summary' }, [\n this.$scopedSlots['group.summary']!({\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 props: {\n headers: this.computedHeaders,\n hideDefaultHeader: this.hideDefaultHeader,\n index,\n item,\n rtl: this.$vuetify.rtl,\n },\n scopedSlots,\n on: {\n // TODO: for click, the first argument should be the event, and the second argument should be data,\n // but this is a breaking change so it's for v3\n click: () => this.$emit('click:row', item, data),\n contextmenu: (event: MouseEvent) => this.$emit('contextmenu:row', event, data),\n dblclick: (event: MouseEvent) => this.$emit('dblclick:row', event, data),\n },\n })\n },\n genBody (props: DataScopeProps): VNode | string | VNodeChildren {\n const data = {\n ...props,\n expand: this.expand,\n headers: this.computedHeaders,\n isExpanded: this.isExpanded,\n isMobile: this.isMobile,\n isSelected: this.isSelected,\n select: this.select,\n }\n\n if (this.$scopedSlots.body) {\n return this.$scopedSlots.body!(data)\n }\n\n return this.$createElement('tbody', [\n getSlot(this, 'body.prepend', data, true),\n this.genItems(props.items, props),\n getSlot(this, 'body.append', data, true),\n ])\n },\n 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 },\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","// Types\nimport { BreakpointName } from 'vuetify/types/services/breakpoint'\nimport { deprecate } from '../../util/console'\nimport Vue, { PropType } from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'mobile',\n\n props: {\n mobileBreakpoint: {\n type: [Number, String] as PropType,\n default (): number | BreakpointName | undefined {\n // Avoid destroying unit\n // tests for users\n return this.$vuetify\n ? this.$vuetify.breakpoint.mobileBreakpoint\n : undefined\n },\n validator: v => (\n !isNaN(Number(v)) ||\n ['xs', 'sm', 'md', 'lg', 'xl'].includes(String(v))\n ),\n },\n },\n\n computed: {\n isMobile (): boolean {\n const {\n mobile,\n width,\n name,\n mobileBreakpoint,\n } = this.$vuetify.breakpoint\n\n // Check if local mobileBreakpoint matches\n // the application's mobileBreakpoint\n if (mobileBreakpoint === this.mobileBreakpoint) return mobile\n\n const mobileWidth = parseInt(this.mobileBreakpoint, 10)\n const isNumber = !isNaN(mobileWidth)\n\n return isNumber\n ? width < mobileWidth\n : name === this.mobileBreakpoint\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('mobile-break-point')) {\n deprecate('mobile-break-point', 'mobile-breakpoint', this)\n }\n },\n})\n"],"sourceRoot":""}