{"version":3,"sources":["webpack:///../../../src/directives/touch/index.ts","webpack:///../../../src/mixins/menuable/index.ts","webpack:///../../../src/components/VMenu/VMenu.ts"],"names":["handleGesture","wrapper","touchstartX","touchendX","touchstartY","touchendY","dirRatio","minDistance","offsetX","offsetY","Math","abs","left","right","up","down","touchstart","event","touch","changedTouches","clientX","clientY","start","Object","assign","touchend","end","touchmove","touchmoveX","touchmoveY","move","createHandlers","value","e","inserted","el","binding","vnode","target","parent","parentElement","options","passive","handlers","_touchHandlers","context","_uid","keys","forEach","eventName","addEventListener","unbind","removeEventListener","Touch","baseMixins","mixins","Stackable","positionableFactory","Activatable","Detachable","extend","name","props","allowOverflow","Boolean","light","dark","maxWidth","type","Number","String","default","minWidth","nudgeBottom","nudgeLeft","nudgeRight","nudgeTop","nudgeWidth","offsetOverflow","positionX","positionY","zIndex","data","activatorNode","absoluteX","absoluteY","activatedBy","activatorFixed","dimensions","activator","top","bottom","width","height","offsetTop","scrollHeight","offsetLeft","content","relativeYOffset","hasJustFocused","hasWindow","inputActivator","isContentActive","pageWidth","pageYOffset","stackClass","stackMinZIndex","computed","computedLeft","a","this","c","activatorLeft","attach","max","$vuetify","rtl","isNaN","min","parseInt","computedTop","hasActivator","$slots","$scopedSlots","absoluteYOffset","watch","disabled","val","callDeactivate","isActive","callActivate","beforeMount","window","updateDimensions","beforeDestroy","methods","absolutePosition","activate","calcLeft","menuWidth","convertToUnit","calcXOverflow","calcTop","calcYOverflow","xOverflow","getOffsetLeft","documentHeight","getInnerHeight","toTop","contentHeight","totalHeight","isOverflowing","deactivate","checkForPageYOffset","getOffsetTop","checkActivatorFixed","getActivator","getComputedStyle","position","offsetParent","genActivatorListeners","listeners","call","onClick","click","openOnClick","innerHeight","document","documentElement","clientHeight","pageXOffset","scrollLeft","scrollTop","getRoundedBoundedClientRect","rect","getBoundingClientRect","round","measure","style","marginLeft","marginTop","sneakPeek","cb","requestAnimationFrame","$refs","display","startTransition","Promise","resolve","clientWidth","absolute","offsetRect","Dependent","Delayable","Returnable","Roundable","Themeable","Menuable","directives","ClickOutside","Resize","provide","isInMenu","theme","auto","closeOnClick","closeOnContentClick","disableKeys","maxHeight","openOnHover","origin","transition","calculatedTopAuto","defaultOffset","listIndex","resizeTimeout","selectedIndex","tiles","activeTile","calculatedLeft","parseFloat","calculatedMinWidth","calcLeftAuto","calculatedMaxHeight","calculatedMaxWidth","calculatedTop","hasClickableTiles","find","tile","tabIndex","styles","transformOrigin","activeZIndex","next","prev","classList","add","goTo","appOffset","duration","container","remove","created","$attrs","hasOwnProperty","removed","mounted","then","calcTopAuto","calcScrollPosition","$el","querySelector","maxScrollTop","offsetHeight","Array","from","indexOf","tileDistanceFromMenuTop","firstTileOffsetTop","changeListIndex","getTiles","keyCode","keyCodes","tab","nextTile","prevTile","lastTile","home","firstTile","enter","preventDefault","closeConditional","_isDestroyed","contains","genActivatorAttributes","attributes","id","keydown","onKeyDown","genTransition","genContent","$createElement","genDirectives","push","handler","include","getOpenDependentElements","attrs","getScopeIdAttrs","role","staticClass","class","rootThemeClasses","roundedClasses","menuable__content__active","contentClass","trim","ref","on","getAttribute","$listeners","scroll","mouseenter","mouseEnterHandler","mouseleave","mouseLeaveHandler","getContentSlot","querySelectorAll","runDelay","_this$$refs$content","relatedTarget","length","esc","setTimeout","$nextTick","focus","includes","onResize","offsetWidth","clearTimeout","render","h","arg","genActivator","showLazyContent","VThemeProvider","root"],"mappings":"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","file":"js/chunk-8c1ac768.6790adda.js","sourcesContent":["import { VNodeDirective, VNode } from 'vue/types/vnode'\nimport { keys } from '../../util/helpers'\nimport { TouchHandlers, TouchValue, TouchWrapper } from 'vuetify/types'\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\ninterface TouchVNodeDirective extends VNodeDirective {\n value?: TouchValue\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start &&\n wrapper.start(Object.assign(event, wrapper))\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end &&\n wrapper.end(Object.assign(event, wrapper))\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move && wrapper.move(Object.assign(event, wrapper))\n}\n\nfunction createHandlers (value: TouchHandlers): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end,\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper),\n }\n}\n\nfunction inserted (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n const value = binding.value!\n const target = value.parent ? el.parentElement : el\n const options = value.options || { passive: true }\n\n // Needed to pass unit tests\n if (!target) return\n\n const handlers = createHandlers(binding.value!)\n target._touchHandlers = Object(target._touchHandlers)\n target._touchHandlers![vnode.context!._uid] = handlers\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(eventName, handlers[eventName] as EventListener, options)\n })\n}\n\nfunction unbind (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n const target = binding.value!.parent ? el.parentElement : el\n if (!target || !target._touchHandlers) return\n\n const handlers = target._touchHandlers[vnode.context!._uid]\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n delete target._touchHandlers[vnode.context!._uid]\n}\n\nexport const Touch = {\n inserted,\n unbind,\n}\n\nexport default Touch\n","// Mixins\nimport Stackable from '../stackable'\nimport { factory as positionableFactory } from '../positionable'\nimport Activatable from '../activatable'\nimport Detachable from '../detachable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n Stackable,\n positionableFactory(['top', 'right', 'bottom', 'left', 'absolute']),\n Activatable,\n Detachable,\n)\n\ninterface dimensions {\n top: number\n left: number\n bottom: number\n right: number\n width: number\n height: number\n offsetTop: number\n scrollHeight: number\n offsetLeft: number\n}\n\ninterface options extends ExtractVue {\n attach: boolean | string | Element\n offsetY: boolean\n offsetX: boolean\n dimensions: {\n activator: dimensions\n content: dimensions\n }\n $refs: {\n content: HTMLElement\n activator: HTMLElement\n }\n}\n\n/* @vue/component */\nexport default baseMixins.extend().extend({\n name: 'menuable',\n\n props: {\n allowOverflow: Boolean,\n light: Boolean,\n dark: Boolean,\n maxWidth: {\n type: [Number, String],\n default: 'auto',\n },\n minWidth: [Number, String],\n nudgeBottom: {\n type: [Number, String],\n default: 0,\n },\n nudgeLeft: {\n type: [Number, String],\n default: 0,\n },\n nudgeRight: {\n type: [Number, String],\n default: 0,\n },\n nudgeTop: {\n type: [Number, String],\n default: 0,\n },\n nudgeWidth: {\n type: [Number, String],\n default: 0,\n },\n offsetOverflow: Boolean,\n positionX: {\n type: Number,\n default: null,\n },\n positionY: {\n type: Number,\n default: null,\n },\n zIndex: {\n type: [Number, String],\n default: null,\n },\n },\n\n data: () => ({\n activatorNode: [] as VNode[],\n absoluteX: 0,\n absoluteY: 0,\n activatedBy: null as EventTarget | null,\n activatorFixed: false,\n dimensions: {\n activator: {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n offsetTop: 0,\n scrollHeight: 0,\n offsetLeft: 0,\n },\n content: {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0,\n offsetTop: 0,\n scrollHeight: 0,\n },\n },\n relativeYOffset: 0,\n hasJustFocused: false,\n hasWindow: false,\n inputActivator: false,\n isContentActive: false,\n pageWidth: 0,\n pageYOffset: 0,\n stackClass: 'v-menu__content--active',\n stackMinZIndex: 6,\n }),\n\n computed: {\n computedLeft () {\n const a = this.dimensions.activator\n const c = this.dimensions.content\n const activatorLeft = (this.attach !== false ? a.offsetLeft : a.left) || 0\n const minWidth = Math.max(a.width, c.width)\n let left = 0\n left += activatorLeft\n if (this.left || (this.$vuetify.rtl && !this.right)) left -= (minWidth - a.width)\n if (this.offsetX) {\n const maxWidth = isNaN(Number(this.maxWidth))\n ? a.width\n : Math.min(a.width, Number(this.maxWidth))\n\n left += this.left ? -maxWidth : a.width\n }\n if (this.nudgeLeft) left -= parseInt(this.nudgeLeft)\n if (this.nudgeRight) left += parseInt(this.nudgeRight)\n\n return left\n },\n computedTop () {\n const a = this.dimensions.activator\n const c = this.dimensions.content\n let top = 0\n\n if (this.top) top += a.height - c.height\n if (this.attach !== false) top += a.offsetTop\n else top += a.top + this.pageYOffset\n if (this.offsetY) top += this.top ? -a.height : a.height\n if (this.nudgeTop) top -= parseInt(this.nudgeTop)\n if (this.nudgeBottom) top += parseInt(this.nudgeBottom)\n\n return top\n },\n hasActivator (): boolean {\n return !!this.$slots.activator || !!this.$scopedSlots.activator || !!this.activator || !!this.inputActivator\n },\n absoluteYOffset (): number {\n return this.pageYOffset - this.relativeYOffset\n },\n },\n\n watch: {\n disabled (val) {\n val && this.callDeactivate()\n },\n isActive (val) {\n if (this.disabled) return\n\n val ? this.callActivate() : this.callDeactivate()\n },\n positionX: 'updateDimensions',\n positionY: 'updateDimensions',\n },\n\n beforeMount () {\n this.hasWindow = typeof window !== 'undefined'\n\n if (this.hasWindow) {\n window.addEventListener('resize', this.updateDimensions, false)\n }\n },\n\n beforeDestroy () {\n if (this.hasWindow) {\n window.removeEventListener('resize', this.updateDimensions, false)\n }\n },\n\n methods: {\n absolutePosition () {\n return {\n offsetTop: this.positionY || this.absoluteY,\n offsetLeft: this.positionX || this.absoluteX,\n scrollHeight: 0,\n top: this.positionY || this.absoluteY,\n bottom: this.positionY || this.absoluteY,\n left: this.positionX || this.absoluteX,\n right: this.positionX || this.absoluteX,\n height: 0,\n width: 0,\n }\n },\n activate () {},\n calcLeft (menuWidth: number) {\n return convertToUnit(this.attach !== false\n ? this.computedLeft\n : this.calcXOverflow(this.computedLeft, menuWidth))\n },\n calcTop () {\n return convertToUnit(this.attach !== false\n ? this.computedTop\n : this.calcYOverflow(this.computedTop))\n },\n calcXOverflow (left: number, menuWidth: number) {\n const xOverflow = left + menuWidth - this.pageWidth + 12\n\n if ((!this.left || this.right) && xOverflow > 0) {\n left = Math.max(left - xOverflow, 0)\n } else {\n left = Math.max(left, 12)\n }\n\n return left + this.getOffsetLeft()\n },\n calcYOverflow (top: number) {\n const documentHeight = this.getInnerHeight()\n const toTop = this.absoluteYOffset + documentHeight\n const activator = this.dimensions.activator\n const contentHeight = this.dimensions.content.height\n const totalHeight = top + contentHeight\n const isOverflowing = toTop < totalHeight\n\n // If overflowing bottom and offset\n // TODO: set 'bottom' position instead of 'top'\n if (isOverflowing &&\n this.offsetOverflow &&\n // If we don't have enough room to offset\n // the overflow, don't offset\n activator.top > contentHeight\n ) {\n top = this.pageYOffset + (activator.top - contentHeight)\n // If overflowing bottom\n } else if (isOverflowing && !this.allowOverflow) {\n top = toTop - contentHeight - 12\n // If overflowing top\n } else if (top < this.absoluteYOffset && !this.allowOverflow) {\n top = this.absoluteYOffset + 12\n }\n\n return top < 12 ? 12 : top\n },\n callActivate () {\n if (!this.hasWindow) return\n\n this.activate()\n },\n callDeactivate () {\n this.isContentActive = false\n\n this.deactivate()\n },\n checkForPageYOffset () {\n if (this.hasWindow) {\n this.pageYOffset = this.activatorFixed ? 0 : this.getOffsetTop()\n }\n },\n checkActivatorFixed () {\n if (this.attach !== false) return\n let el = this.getActivator()\n while (el) {\n if (window.getComputedStyle(el).position === 'fixed') {\n this.activatorFixed = true\n return\n }\n el = el.offsetParent as HTMLElement\n }\n this.activatorFixed = false\n },\n deactivate () {},\n genActivatorListeners () {\n const listeners = Activatable.options.methods.genActivatorListeners.call(this)\n\n const onClick = listeners.click\n\n if (onClick) {\n listeners.click = (e: MouseEvent & KeyboardEvent & FocusEvent) => {\n if (this.openOnClick) {\n onClick && onClick(e)\n }\n\n this.absoluteX = e.clientX\n this.absoluteY = e.clientY\n }\n }\n\n return listeners\n },\n getInnerHeight () {\n if (!this.hasWindow) return 0\n\n return window.innerHeight ||\n document.documentElement.clientHeight\n },\n getOffsetLeft () {\n if (!this.hasWindow) return 0\n\n return window.pageXOffset ||\n document.documentElement.scrollLeft\n },\n getOffsetTop () {\n if (!this.hasWindow) return 0\n\n return window.pageYOffset ||\n document.documentElement.scrollTop\n },\n getRoundedBoundedClientRect (el: Element) {\n const rect = el.getBoundingClientRect()\n return {\n top: Math.round(rect.top),\n left: Math.round(rect.left),\n bottom: Math.round(rect.bottom),\n right: Math.round(rect.right),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n }\n },\n measure (el: HTMLElement) {\n if (!el || !this.hasWindow) return null\n\n const rect = this.getRoundedBoundedClientRect(el)\n\n // Account for activator margin\n if (this.attach !== false) {\n const style = window.getComputedStyle(el)\n\n rect.left = parseInt(style.marginLeft!)\n rect.top = parseInt(style.marginTop!)\n }\n\n return rect\n },\n sneakPeek (cb: () => void) {\n requestAnimationFrame(() => {\n const el = this.$refs.content\n\n if (!el || el.style.display !== 'none') {\n cb()\n return\n }\n\n el.style.display = 'inline-block'\n cb()\n el.style.display = 'none'\n })\n },\n startTransition () {\n return new Promise(resolve => requestAnimationFrame(() => {\n this.isContentActive = this.hasJustFocused = this.isActive\n resolve()\n }))\n },\n updateDimensions () {\n this.hasWindow = typeof window !== 'undefined'\n this.checkActivatorFixed()\n this.checkForPageYOffset()\n this.pageWidth = document.documentElement.clientWidth\n\n const dimensions: any = {\n activator: { ...this.dimensions.activator },\n content: { ...this.dimensions.content },\n }\n\n // Activator should already be shown\n if (!this.hasActivator || this.absolute) {\n dimensions.activator = this.absolutePosition()\n } else {\n const activator = this.getActivator()\n if (!activator) return\n\n dimensions.activator = this.measure(activator)\n dimensions.activator.offsetLeft = activator.offsetLeft\n if (this.attach !== false) {\n // account for css padding causing things to not line up\n // this is mostly for v-autocomplete, hopefully it won't break anything\n dimensions.activator.offsetTop = activator.offsetTop\n } else {\n dimensions.activator.offsetTop = 0\n }\n }\n\n // Display and hide to get dimensions\n this.sneakPeek(() => {\n if (this.$refs.content) {\n if (this.$refs.content.offsetParent) {\n const offsetRect = this.getRoundedBoundedClientRect(this.$refs.content.offsetParent)\n\n this.relativeYOffset = window.pageYOffset + offsetRect.top\n dimensions.activator.top -= this.relativeYOffset\n dimensions.activator.left -= window.pageXOffset + offsetRect.left\n }\n\n dimensions.content = this.measure(this.$refs.content)\n }\n\n this.dimensions = dimensions\n })\n },\n },\n})\n","// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VThemeProvider } from '../VThemeProvider'\n\n// Mixins\nimport Activatable from '../../mixins/activatable'\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Menuable from '../../mixins/menuable'\nimport Returnable from '../../mixins/returnable'\nimport Roundable from '../../mixins/roundable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { removed } from '../../util/console'\nimport {\n convertToUnit,\n keyCodes,\n} from '../../util/helpers'\nimport goTo from '../../services/goto'\n\n// Types\nimport { VNode, VNodeDirective, VNodeData } from 'vue'\n\nconst baseMixins = mixins(\n Dependent,\n Delayable,\n Returnable,\n Roundable,\n Themeable,\n Menuable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-menu',\n\n directives: {\n ClickOutside,\n Resize,\n },\n\n provide (): object {\n return {\n isInMenu: true,\n // Pass theme through to default slot\n theme: this.theme,\n }\n },\n\n props: {\n auto: Boolean,\n closeOnClick: {\n type: Boolean,\n default: true,\n },\n closeOnContentClick: {\n type: Boolean,\n default: true,\n },\n disabled: Boolean,\n disableKeys: Boolean,\n maxHeight: {\n type: [Number, String],\n default: 'auto',\n },\n offsetX: Boolean,\n offsetY: Boolean,\n openOnHover: Boolean,\n origin: {\n type: String,\n default: 'top left',\n },\n transition: {\n type: [Boolean, String],\n default: 'v-menu-transition',\n },\n },\n\n data () {\n return {\n calculatedTopAuto: 0,\n defaultOffset: 8,\n hasJustFocused: false,\n listIndex: -1,\n resizeTimeout: 0,\n selectedIndex: null as null | number,\n tiles: [] as HTMLElement[],\n }\n },\n\n computed: {\n activeTile (): HTMLElement | undefined {\n return this.tiles[this.listIndex]\n },\n calculatedLeft (): string {\n const menuWidth = Math.max(this.dimensions.content.width, parseFloat(this.calculatedMinWidth))\n\n if (!this.auto) return this.calcLeft(menuWidth) || '0'\n\n return convertToUnit(this.calcXOverflow(this.calcLeftAuto(), menuWidth)) || '0'\n },\n calculatedMaxHeight (): string {\n const height = this.auto\n ? '200px'\n : convertToUnit(this.maxHeight)\n\n return height || '0'\n },\n calculatedMaxWidth (): string {\n return convertToUnit(this.maxWidth) || '0'\n },\n calculatedMinWidth (): string {\n if (this.minWidth) {\n return convertToUnit(this.minWidth) || '0'\n }\n\n const minWidth = Math.min(\n this.dimensions.activator.width +\n Number(this.nudgeWidth) +\n (this.auto ? 16 : 0),\n Math.max(this.pageWidth - 24, 0)\n )\n\n const calculatedMaxWidth = isNaN(parseInt(this.calculatedMaxWidth))\n ? minWidth\n : parseInt(this.calculatedMaxWidth)\n\n return convertToUnit(Math.min(\n calculatedMaxWidth,\n minWidth\n )) || '0'\n },\n calculatedTop (): string {\n const top = !this.auto\n ? this.calcTop()\n : convertToUnit(this.calcYOverflow(this.calculatedTopAuto))\n\n return top || '0'\n },\n hasClickableTiles (): boolean {\n return Boolean(this.tiles.find(tile => tile.tabIndex > -1))\n },\n styles (): object {\n return {\n maxHeight: this.calculatedMaxHeight,\n minWidth: this.calculatedMinWidth,\n maxWidth: this.calculatedMaxWidth,\n top: this.calculatedTop,\n left: this.calculatedLeft,\n transformOrigin: this.origin,\n zIndex: this.zIndex || this.activeZIndex,\n }\n },\n },\n\n watch: {\n isActive (val) {\n if (!val) this.listIndex = -1\n },\n isContentActive (val) {\n this.hasJustFocused = val\n },\n listIndex (next, prev) {\n if (next in this.tiles) {\n const tile = this.tiles[next]\n tile.classList.add('v-list-item--highlighted')\n const scrollTop = this.$refs.content.scrollTop\n const contentHeight = this.$refs.content.clientHeight\n\n if (scrollTop > tile.offsetTop - 8) {\n goTo(tile.offsetTop - tile.clientHeight, {\n appOffset: false,\n duration: 300,\n container: this.$refs.content,\n })\n } else if (scrollTop + contentHeight < tile.offsetTop + tile.clientHeight + 8) {\n goTo(tile.offsetTop - contentHeight + tile.clientHeight * 2, {\n appOffset: false,\n duration: 300,\n container: this.$refs.content,\n })\n }\n }\n\n prev in this.tiles &&\n this.tiles[prev].classList.remove('v-list-item--highlighted')\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('full-width')) {\n removed('full-width', this)\n }\n },\n\n mounted () {\n this.isActive && this.callActivate()\n },\n\n methods: {\n activate () {\n // Update coordinates and dimensions of menu\n // and its activator\n this.updateDimensions()\n // Start the transition\n requestAnimationFrame(() => {\n // Once transitioning, calculate scroll and top position\n this.startTransition().then(() => {\n if (this.$refs.content) {\n this.calculatedTopAuto = this.calcTopAuto()\n this.auto && (this.$refs.content.scrollTop = this.calcScrollPosition())\n }\n })\n })\n },\n calcScrollPosition () {\n const $el = this.$refs.content\n const activeTile = $el.querySelector('.v-list-item--active') as HTMLElement\n const maxScrollTop = $el.scrollHeight - $el.offsetHeight\n\n return activeTile\n ? Math.min(maxScrollTop, Math.max(0, activeTile.offsetTop - $el.offsetHeight / 2 + activeTile.offsetHeight / 2))\n : $el.scrollTop\n },\n calcLeftAuto () {\n return parseInt(this.dimensions.activator.left - this.defaultOffset * 2)\n },\n calcTopAuto () {\n const $el = this.$refs.content\n const activeTile = $el.querySelector('.v-list-item--active') as HTMLElement | null\n\n if (!activeTile) {\n this.selectedIndex = null\n }\n\n if (this.offsetY || !activeTile) {\n return this.computedTop\n }\n\n this.selectedIndex = Array.from(this.tiles).indexOf(activeTile)\n\n const tileDistanceFromMenuTop = activeTile.offsetTop - this.calcScrollPosition()\n const firstTileOffsetTop = ($el.querySelector('.v-list-item') as HTMLElement).offsetTop\n\n return this.computedTop - tileDistanceFromMenuTop - firstTileOffsetTop - 1\n },\n changeListIndex (e: KeyboardEvent) {\n // For infinite scroll and autocomplete, re-evaluate children\n this.getTiles()\n\n if (!this.isActive || !this.hasClickableTiles) {\n return\n } else if (e.keyCode === keyCodes.tab) {\n this.isActive = false\n return\n } else if (e.keyCode === keyCodes.down) {\n this.nextTile()\n } else if (e.keyCode === keyCodes.up) {\n this.prevTile()\n } else if (e.keyCode === keyCodes.end) {\n this.lastTile()\n } else if (e.keyCode === keyCodes.home) {\n this.firstTile()\n } else if (e.keyCode === keyCodes.enter && this.listIndex !== -1) {\n this.tiles[this.listIndex].click()\n } else { return }\n // One of the conditions was met, prevent default action (#2988)\n e.preventDefault()\n },\n closeConditional (e: Event) {\n const target = e.target as HTMLElement\n\n return this.isActive &&\n !this._isDestroyed &&\n this.closeOnClick &&\n !this.$refs.content.contains(target)\n },\n genActivatorAttributes () {\n const attributes = Activatable.options.methods.genActivatorAttributes.call(this)\n\n if (this.activeTile && this.activeTile.id) {\n return {\n ...attributes,\n 'aria-activedescendant': this.activeTile.id,\n }\n }\n\n return attributes\n },\n genActivatorListeners () {\n const listeners = Menuable.options.methods.genActivatorListeners.call(this)\n\n if (!this.disableKeys) {\n listeners.keydown = this.onKeyDown\n }\n\n return listeners\n },\n genTransition (): VNode {\n const content = this.genContent()\n\n if (!this.transition) return content\n\n return this.$createElement('transition', {\n props: {\n name: this.transition,\n },\n }, [content])\n },\n genDirectives (): VNodeDirective[] {\n const directives: VNodeDirective[] = [{\n name: 'show',\n value: this.isContentActive,\n }]\n\n // Do not add click outside for hover menu\n if (!this.openOnHover && this.closeOnClick) {\n directives.push({\n name: 'click-outside',\n value: {\n handler: () => { this.isActive = false },\n closeConditional: this.closeConditional,\n include: () => [this.$el, ...this.getOpenDependentElements()],\n },\n })\n }\n\n return directives\n },\n genContent (): VNode {\n const options = {\n attrs: {\n ...this.getScopeIdAttrs(),\n role: 'role' in this.$attrs ? this.$attrs.role : 'menu',\n },\n staticClass: 'v-menu__content',\n class: {\n ...this.rootThemeClasses,\n ...this.roundedClasses,\n 'v-menu__content--auto': this.auto,\n 'v-menu__content--fixed': this.activatorFixed,\n menuable__content__active: this.isActive,\n [this.contentClass.trim()]: true,\n },\n style: this.styles,\n directives: this.genDirectives(),\n ref: 'content',\n on: {\n click: (e: Event) => {\n const target = e.target as HTMLElement\n\n if (target.getAttribute('disabled')) return\n if (this.closeOnContentClick) this.isActive = false\n },\n keydown: this.onKeyDown,\n },\n } as VNodeData\n\n if (this.$listeners.scroll) {\n options.on = options.on || {}\n options.on.scroll = this.$listeners.scroll\n }\n\n if (!this.disabled && this.openOnHover) {\n options.on = options.on || {}\n options.on.mouseenter = this.mouseEnterHandler\n }\n\n if (this.openOnHover) {\n options.on = options.on || {}\n options.on.mouseleave = this.mouseLeaveHandler\n }\n\n return this.$createElement('div', options, this.getContentSlot())\n },\n getTiles () {\n if (!this.$refs.content) return\n\n this.tiles = Array.from(this.$refs.content.querySelectorAll('.v-list-item, .v-divider, .v-subheader'))\n },\n mouseEnterHandler () {\n this.runDelay('open', () => {\n if (this.hasJustFocused) return\n\n this.hasJustFocused = true\n })\n },\n mouseLeaveHandler (e: MouseEvent) {\n // Prevent accidental re-activation\n this.runDelay('close', () => {\n if (this.$refs.content?.contains(e.relatedTarget as HTMLElement)) return\n\n requestAnimationFrame(() => {\n this.isActive = false\n this.callDeactivate()\n })\n })\n },\n nextTile () {\n const tile = this.tiles[this.listIndex + 1]\n\n if (!tile) {\n if (!this.tiles.length) return\n\n this.listIndex = -1\n this.nextTile()\n\n return\n }\n\n this.listIndex++\n if (tile.tabIndex === -1) this.nextTile()\n },\n prevTile () {\n const tile = this.tiles[this.listIndex - 1]\n\n if (!tile) {\n if (!this.tiles.length) return\n\n this.listIndex = this.tiles.length\n this.prevTile()\n\n return\n }\n\n this.listIndex--\n if (tile.tabIndex === -1) this.prevTile()\n },\n lastTile () {\n const tile = this.tiles[this.tiles.length - 1]\n\n if (!tile) return\n\n this.listIndex = this.tiles.length - 1\n\n if (tile.tabIndex === -1) this.prevTile()\n },\n firstTile () {\n const tile = this.tiles[0]\n\n if (!tile) return\n\n this.listIndex = 0\n\n if (tile.tabIndex === -1) this.nextTile()\n },\n onKeyDown (e: KeyboardEvent) {\n if (e.keyCode === keyCodes.esc) {\n // Wait for dependent elements to close first\n setTimeout(() => { this.isActive = false })\n const activator = this.getActivator()\n this.$nextTick(() => activator && activator.focus())\n } else if (\n !this.isActive &&\n [keyCodes.up, keyCodes.down].includes(e.keyCode)\n ) {\n this.isActive = true\n }\n\n // Allow for isActive watcher to generate tile list\n this.$nextTick(() => this.changeListIndex(e))\n },\n onResize () {\n if (!this.isActive) return\n\n // Account for screen resize\n // and orientation change\n // eslint-disable-next-line no-unused-expressions\n this.$refs.content.offsetWidth\n this.updateDimensions()\n\n // When resizing to a smaller width\n // content width is evaluated before\n // the new activator width has been\n // set, causing it to not size properly\n // hacky but will revisit in the future\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.updateDimensions, 100)\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-menu',\n class: {\n 'v-menu--attached':\n this.attach === '' ||\n this.attach === true ||\n this.attach === 'attach',\n },\n directives: [{\n arg: '500',\n name: 'resize',\n value: this.onResize,\n }],\n }\n\n return h('div', data, [\n !this.activator && this.genActivator(),\n this.showLazyContent(() => [\n this.$createElement(VThemeProvider, {\n props: {\n root: true,\n light: this.light,\n dark: this.dark,\n },\n }, [this.genTransition()]),\n ]),\n ])\n },\n})\n"],"sourceRoot":""}