{"version":3,"sources":["webpack:///../../../src/components/VExpansionPanel/VExpansionPanels.ts","webpack:///../../../src/components/VExpansionPanel/VExpansionPanelContent.ts","webpack:///../../../src/components/VSlideGroup/VSlideGroup.ts","webpack:///../../../src/components/VBtn/index.ts","webpack:///../../../src/components/VExpansionPanel/VExpansionPanelHeader.ts","webpack:///../../../src/components/VExpansionPanel/VExpansionPanel.ts"],"names":["name","provide","expansionPanels","this","props","accordion","disabled","flat","hover","focusable","inset","popout","readonly","tile","Boolean","computed","classes","created","$attrs","hasOwnProperty","Array","value","length","methods","updateItem","getValue","item","nextValue","index","toggleMethod","baseMixins","isActive","expansionPanel","beforeDestroy","render","h","showLazyContent","staticClass","directives","class","BaseSlideGroup","Resize","Touch","activeClass","type","default","centerActive","nextIcon","prevIcon","showArrows","validator","v","data","internalItemsLength","isOverflowing","resizeTimeout","startX","scrollOffset","widths","content","wrapper","__cachedNext","genTransition","__cachedPrev","hasAffixes","isMobile","hasNext","Math","hasPrev","watch","internalValue","beforeUpdate","$children","updated","genNext","slot","$scopedSlots","next","$slots","$createElement","on","click","key","genContent","ref","genData","onResize","genIcon","icon","$vuetify","rtl","location","upperLocation","hasAffix","genPrev","prev","genWrapper","start","e","move","end","calculateNewOffset","sign","newAbosluteOffset","direction","onAffixClick","onTouchStart","onTouchMove","onTouchEnd","maxScrollOffset","overflowCheck","fn","scrollIntoView","selectedIndex","calculateCenteredOffset","selectedItem","calculateUpdatedOffset","clientWidth","selectedElement","offsetLeft","currentScrollOffset","totalWidth","itemOffset","additionalOffset","offsetCentered","scrollTo","$refs","setWidths","window","slideGroup","ripple","disableIconRotate","expandIcon","hideActions","hasMousedown","isDisabled","isReadonly","onClick","setBackgroundColor","attrs","tabindex","mousedown","mouseup","open","header","nextIsActive","groupClasses","registerContent","unregisterContent","registerHeader","vm","unregisterHeader","toggle","isBooted","String"],"mappings":"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","file":"js/chunk-266b7fca.e97e6839.js","sourcesContent":["// Styles\nimport './VExpansionPanel.sass'\n\n// Components\nimport { BaseItemGroup, GroupableInstance } from '../VItemGroup/VItemGroup'\nimport VExpansionPanel from './VExpansionPanel'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\ninterface VExpansionPanelInstance extends InstanceType {}\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'v-expansion-panels',\n\n provide (): object {\n return {\n expansionPanels: this,\n }\n },\n\n props: {\n accordion: Boolean,\n disabled: Boolean,\n flat: Boolean,\n hover: Boolean,\n focusable: Boolean,\n inset: Boolean,\n popout: Boolean,\n readonly: Boolean,\n tile: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-expansion-panels': true,\n 'v-expansion-panels--accordion': this.accordion,\n 'v-expansion-panels--flat': this.flat,\n 'v-expansion-panels--hover': this.hover,\n 'v-expansion-panels--focusable': this.focusable,\n 'v-expansion-panels--inset': this.inset,\n 'v-expansion-panels--popout': this.popout,\n 'v-expansion-panels--tile': this.tile,\n }\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('expand')) {\n breaking('expand', 'multiple', this)\n }\n\n /* istanbul ignore next */\n if (\n Array.isArray(this.value) &&\n this.value.length > 0 &&\n typeof this.value[0] === 'boolean'\n ) {\n breaking(':value=\"[true, false, true]\"', ':value=\"[0, 2]\"', this)\n }\n },\n\n methods: {\n updateItem (item: GroupableInstance & VExpansionPanelInstance, index: number) {\n const value = this.getValue(item, index)\n const nextValue = this.getValue(item, index + 1)\n\n item.isActive = this.toggleMethod(value)\n item.nextIsActive = this.toggleMethod(nextValue)\n },\n },\n})\n","// Components\nimport VExpansionPanel from './VExpansionPanel'\nimport { VExpandTransition } from '../transitions'\n\n// Mixins\nimport Bootable from '../../mixins/bootable'\nimport Colorable from '../../mixins/colorable'\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, VueConstructor } from 'vue'\n\nconst baseMixins = mixins(\n Bootable,\n Colorable,\n RegistrableInject<'expansionPanel', VueConstructor>('expansionPanel', 'v-expansion-panel-content', 'v-expansion-panel')\n)\n\ninterface options extends ExtractVue {\n expansionPanel: InstanceType\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'v-expansion-panel-content',\n\n computed: {\n isActive (): boolean {\n return this.expansionPanel.isActive\n },\n },\n\n created () {\n this.expansionPanel.registerContent(this)\n },\n\n beforeDestroy () {\n this.expansionPanel.unregisterContent()\n },\n\n render (h): VNode {\n return h(VExpandTransition, this.showLazyContent(() => [\n h('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-expansion-panel-content',\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }), [\n h('div', { class: 'v-expansion-panel-content__wrap' }, getSlot(this)),\n ]),\n ]))\n },\n})\n","// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport { VFadeTransition } from '../transitions'\n\n// Extensions\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\n\n// Directives\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode } from 'vue'\n\ninterface TouchEvent {\n touchstartX: number\n touchmoveX: number\n stopPropagation: Function\n}\n\ninterface Widths {\n content: number\n wrapper: number\n}\n\ninterface options extends Vue {\n $refs: {\n content: HTMLElement\n wrapper: HTMLElement\n }\n}\n\nexport const BaseSlideGroup = mixins\n/* eslint-enable indent */\n>(\n BaseItemGroup,\n Mobile,\n /* @vue/component */\n).extend({\n name: 'base-slide-group',\n\n directives: {\n Resize,\n Touch,\n },\n\n props: {\n activeClass: {\n type: String,\n default: 'v-slide-item--active',\n },\n centerActive: Boolean,\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: v => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n },\n\n data: () => ({\n internalItemsLength: 0,\n isOverflowing: false,\n resizeTimeout: 0,\n startX: 0,\n scrollOffset: 0,\n widths: {\n content: 0,\n wrapper: 0,\n },\n }),\n\n computed: {\n __cachedNext (): VNode {\n return this.genTransition('next')\n },\n __cachedPrev (): VNode {\n return this.genTransition('prev')\n },\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-slide-group': true,\n 'v-slide-group--has-affixes': this.hasAffixes,\n 'v-slide-group--is-overflowing': this.isOverflowing,\n }\n },\n hasAffixes (): Boolean {\n switch (this.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !this.isMobile\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return this.isOverflowing\n\n // Always show on mobile\n case 'mobile': return (\n this.isMobile ||\n this.isOverflowing\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !this.isMobile &&\n this.isOverflowing\n )\n }\n },\n hasNext (): boolean {\n if (!this.hasAffixes) return false\n\n const { content, wrapper } = this.widths\n\n // Check one scroll ahead to know the width of right-most item\n return content > Math.abs(this.scrollOffset) + wrapper\n },\n hasPrev (): boolean {\n return this.hasAffixes && this.scrollOffset !== 0\n },\n },\n\n watch: {\n internalValue: 'setWidths',\n // When overflow changes, the arrows alter\n // the widths of the content and wrapper\n // and need to be recalculated\n isOverflowing: 'setWidths',\n scrollOffset (val) {\n this.$refs.content.style.transform = `translateX(${-val}px)`\n },\n },\n\n beforeUpdate () {\n this.internalItemsLength = (this.$children || []).length\n },\n\n updated () {\n if (this.internalItemsLength === (this.$children || []).length) return\n this.setWidths()\n },\n\n methods: {\n // Always generate next for scrollable hint\n genNext (): VNode | null {\n const slot = this.$scopedSlots.next\n ? this.$scopedSlots.next({})\n : this.$slots.next || this.__cachedNext\n\n return this.$createElement('div', {\n staticClass: 'v-slide-group__next',\n class: {\n 'v-slide-group__next--disabled': !this.hasNext,\n },\n on: {\n click: () => this.onAffixClick('next'),\n },\n key: 'next',\n }, [slot])\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__content',\n ref: 'content',\n }, this.$slots.default)\n },\n genData (): object {\n return {\n class: this.classes,\n directives: [{\n name: 'resize',\n value: this.onResize,\n }],\n }\n },\n genIcon (location: 'prev' | 'next'): VNode | null {\n let icon = location\n\n if (this.$vuetify.rtl && location === 'prev') {\n icon = 'next'\n } else if (this.$vuetify.rtl && location === 'next') {\n icon = 'prev'\n }\n\n const upperLocation = `${location[0].toUpperCase()}${location.slice(1)}`\n const hasAffix = (this as any)[`has${upperLocation}`]\n\n if (\n !this.showArrows &&\n !hasAffix\n ) return null\n\n return this.$createElement(VIcon, {\n props: {\n disabled: !hasAffix,\n },\n }, (this as any)[`${icon}Icon`])\n },\n // Always generate prev for scrollable hint\n genPrev (): VNode | null {\n const slot = this.$scopedSlots.prev\n ? this.$scopedSlots.prev({})\n : this.$slots.prev || this.__cachedPrev\n\n return this.$createElement('div', {\n staticClass: 'v-slide-group__prev',\n class: {\n 'v-slide-group__prev--disabled': !this.hasPrev,\n },\n on: {\n click: () => this.onAffixClick('prev'),\n },\n key: 'prev',\n }, [slot])\n },\n genTransition (location: 'prev' | 'next') {\n return this.$createElement(VFadeTransition, [this.genIcon(location)])\n },\n genWrapper (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__wrapper',\n directives: [{\n name: 'touch',\n value: {\n start: (e: TouchEvent) => this.overflowCheck(e, this.onTouchStart),\n move: (e: TouchEvent) => this.overflowCheck(e, this.onTouchMove),\n end: (e: TouchEvent) => this.overflowCheck(e, this.onTouchEnd),\n },\n }],\n ref: 'wrapper',\n }, [this.genContent()])\n },\n calculateNewOffset (direction: 'prev' | 'next', widths: Widths, rtl: boolean, currentScrollOffset: number) {\n const sign = rtl ? -1 : 1\n const newAbosluteOffset = sign * currentScrollOffset +\n (direction === 'prev' ? -1 : 1) * widths.wrapper\n\n return sign * Math.max(Math.min(newAbosluteOffset, widths.content - widths.wrapper), 0)\n },\n onAffixClick (location: 'prev' | 'next') {\n this.$emit(`click:${location}`)\n this.scrollTo(location)\n },\n onResize () {\n /* istanbul ignore next */\n if (this._isDestroyed) return\n\n this.setWidths()\n },\n onTouchStart (e: TouchEvent) {\n const { content } = this.$refs\n\n this.startX = this.scrollOffset + e.touchstartX as number\n\n content.style.setProperty('transition', 'none')\n content.style.setProperty('willChange', 'transform')\n },\n onTouchMove (e: TouchEvent) {\n this.scrollOffset = this.startX - e.touchmoveX\n },\n onTouchEnd () {\n const { content, wrapper } = this.$refs\n const maxScrollOffset = content.clientWidth - wrapper.clientWidth\n\n content.style.setProperty('transition', null)\n content.style.setProperty('willChange', null)\n\n if (this.$vuetify.rtl) {\n /* istanbul ignore else */\n if (this.scrollOffset > 0 || !this.isOverflowing) {\n this.scrollOffset = 0\n } else if (this.scrollOffset <= -maxScrollOffset) {\n this.scrollOffset = -maxScrollOffset\n }\n } else {\n /* istanbul ignore else */\n if (this.scrollOffset < 0 || !this.isOverflowing) {\n this.scrollOffset = 0\n } else if (this.scrollOffset >= maxScrollOffset) {\n this.scrollOffset = maxScrollOffset\n }\n }\n },\n overflowCheck (e: TouchEvent, fn: (e: TouchEvent) => void) {\n e.stopPropagation()\n this.isOverflowing && fn(e)\n },\n scrollIntoView /* istanbul ignore next */ () {\n if (!this.selectedItem) {\n return\n }\n\n if (\n this.selectedIndex === 0 ||\n (!this.centerActive && !this.isOverflowing)\n ) {\n this.scrollOffset = 0\n } else if (this.centerActive) {\n this.scrollOffset = this.calculateCenteredOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl\n )\n } else if (this.isOverflowing) {\n this.scrollOffset = this.calculateUpdatedOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl,\n this.scrollOffset\n )\n }\n },\n calculateUpdatedOffset (selectedElement: HTMLElement, widths: Widths, rtl: boolean, currentScrollOffset: number): number {\n const clientWidth = selectedElement.clientWidth\n const offsetLeft = rtl\n ? (widths.content - selectedElement.offsetLeft - clientWidth)\n : selectedElement.offsetLeft\n\n if (rtl) {\n currentScrollOffset = -currentScrollOffset\n }\n\n const totalWidth = widths.wrapper + currentScrollOffset\n const itemOffset = clientWidth + offsetLeft\n const additionalOffset = clientWidth * 0.4\n\n if (offsetLeft <= currentScrollOffset) {\n currentScrollOffset = Math.max(offsetLeft - additionalOffset, 0)\n } else if (totalWidth <= itemOffset) {\n currentScrollOffset = Math.min(currentScrollOffset - (totalWidth - itemOffset - additionalOffset), widths.content - widths.wrapper)\n }\n\n return rtl ? -currentScrollOffset : currentScrollOffset\n },\n calculateCenteredOffset (selectedElement: HTMLElement, widths: Widths, rtl: boolean): number {\n const { offsetLeft, clientWidth } = selectedElement\n\n if (rtl) {\n const offsetCentered = widths.content - offsetLeft - clientWidth / 2 - widths.wrapper / 2\n return -Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered))\n } else {\n const offsetCentered = offsetLeft + clientWidth / 2 - widths.wrapper / 2\n return Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered))\n }\n },\n scrollTo /* istanbul ignore next */ (location: 'prev' | 'next') {\n this.scrollOffset = this.calculateNewOffset(location, {\n // Force reflow\n content: this.$refs.content ? this.$refs.content.clientWidth : 0,\n wrapper: this.$refs.wrapper ? this.$refs.wrapper.clientWidth : 0,\n }, this.$vuetify.rtl, this.scrollOffset)\n },\n setWidths /* istanbul ignore next */ () {\n window.requestAnimationFrame(() => {\n const { content, wrapper } = this.$refs\n\n this.widths = {\n content: content ? content.clientWidth : 0,\n wrapper: wrapper ? wrapper.clientWidth : 0,\n }\n\n this.isOverflowing = this.widths.wrapper < this.widths.content\n\n this.scrollIntoView()\n })\n },\n },\n\n render (h): VNode {\n return h('div', this.genData(), [\n this.genPrev(),\n this.genWrapper(),\n this.genNext(),\n ])\n },\n})\n\nexport default BaseSlideGroup.extend({\n name: 'v-slide-group',\n\n provide (): object {\n return {\n slideGroup: this,\n }\n },\n})\n","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","// Components\nimport { VFadeTransition } from '../transitions'\nimport VExpansionPanel from './VExpansionPanel'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { inject as RegistrableInject } from '../../mixins/registrable'\n\n// Directives\nimport ripple from '../../directives/ripple'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, VueConstructor } from 'vue'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'expansionPanel', VueConstructor>('expansionPanel', 'v-expansion-panel-header', 'v-expansion-panel')\n)\n\ninterface options extends ExtractVue {\n $el: HTMLElement\n expansionPanel: InstanceType\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-expansion-panel-header',\n\n directives: { ripple },\n\n props: {\n disableIconRotate: Boolean,\n expandIcon: {\n type: String,\n default: '$expand',\n },\n hideActions: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: false,\n },\n },\n\n data: () => ({\n hasMousedown: false,\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-expansion-panel-header--active': this.isActive,\n 'v-expansion-panel-header--mousedown': this.hasMousedown,\n }\n },\n isActive (): boolean {\n return this.expansionPanel.isActive\n },\n isDisabled (): boolean {\n return this.expansionPanel.isDisabled\n },\n isReadonly (): boolean {\n return this.expansionPanel.isReadonly\n },\n },\n\n created () {\n this.expansionPanel.registerHeader(this)\n },\n\n beforeDestroy () {\n this.expansionPanel.unregisterHeader()\n },\n\n methods: {\n onClick (e: MouseEvent) {\n this.$emit('click', e)\n },\n genIcon () {\n const icon = getSlot(this, 'actions') ||\n [this.$createElement(VIcon, this.expandIcon)]\n\n return this.$createElement(VFadeTransition, [\n this.$createElement('div', {\n staticClass: 'v-expansion-panel-header__icon',\n class: {\n 'v-expansion-panel-header__icon--disable-rotate': this.disableIconRotate,\n },\n directives: [{\n name: 'show',\n value: !this.isDisabled,\n }],\n }, icon),\n ])\n },\n },\n\n render (h): VNode {\n return h('button', this.setBackgroundColor(this.color, {\n staticClass: 'v-expansion-panel-header',\n class: this.classes,\n attrs: {\n tabindex: this.isDisabled ? -1 : null,\n type: 'button',\n },\n directives: [{\n name: 'ripple',\n value: this.ripple,\n }],\n on: {\n ...this.$listeners,\n click: this.onClick,\n mousedown: () => (this.hasMousedown = true),\n mouseup: () => (this.hasMousedown = false),\n },\n }), [\n getSlot(this, 'default', { open: this.isActive }, true),\n this.hideActions || this.genIcon(),\n ])\n },\n})\n","// Components\nimport VExpansionPanels from './VExpansionPanels'\nimport VExpansionPanelHeader from './VExpansionPanelHeader'\nimport VExpansionPanelContent from './VExpansionPanelContent'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Utilities\nimport { getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\ntype VExpansionPanelHeaderInstance = InstanceType\ntype VExpansionPanelContentInstance = InstanceType\n\nexport default mixins(\n GroupableFactory<'expansionPanels', typeof VExpansionPanels>('expansionPanels', 'v-expansion-panel', 'v-expansion-panels'),\n RegistrableProvide('expansionPanel', true)\n /* @vue/component */\n).extend({\n name: 'v-expansion-panel',\n\n props: {\n disabled: Boolean,\n readonly: Boolean,\n },\n\n data () {\n return {\n content: null as VExpansionPanelContentInstance | null,\n header: null as VExpansionPanelHeaderInstance | null,\n nextIsActive: false,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-expansion-panel--active': this.isActive,\n 'v-expansion-panel--next-active': this.nextIsActive,\n 'v-expansion-panel--disabled': this.isDisabled,\n ...this.groupClasses,\n }\n },\n isDisabled (): boolean {\n return this.expansionPanels.disabled || this.disabled\n },\n isReadonly (): boolean {\n return this.expansionPanels.readonly || this.readonly\n },\n },\n\n methods: {\n registerContent (vm: VExpansionPanelContentInstance) {\n this.content = vm\n },\n unregisterContent () {\n this.content = null\n },\n registerHeader (vm: VExpansionPanelHeaderInstance) {\n this.header = vm\n vm.$on('click', this.onClick)\n },\n unregisterHeader () {\n this.header = null\n },\n onClick (e: MouseEvent) {\n if (e.detail) this.header!.$el.blur()\n\n this.$emit('click', e)\n\n this.isReadonly || this.isDisabled || this.toggle()\n },\n toggle () {\n /* istanbul ignore else */\n if (this.content) this.content.isBooted = true\n this.$nextTick(() => this.$emit('change'))\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-expansion-panel',\n class: this.classes,\n attrs: {\n 'aria-expanded': String(this.isActive),\n },\n }, getSlot(this))\n },\n})\n"],"sourceRoot":""}