{"version":3,"sources":["../../../src/components/VMenu/VMenu.js"],"names":[],"mappings":"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","sourcesContent":["import '../../stylus/components/_menus.styl'\n\nimport Vue from 'vue'\n\n// Mixins\nimport Delayable from '../../mixins/delayable'\nimport Dependent from '../../mixins/dependent'\nimport Detachable from '../../mixins/detachable'\nimport Menuable from '../../mixins/menuable.js'\nimport Returnable from '../../mixins/returnable'\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\n\n// Component level mixins\nimport Activator from './mixins/menu-activator'\nimport Generators from './mixins/menu-generators'\nimport Keyable from './mixins/menu-keyable'\nimport Position from './mixins/menu-position'\n\n// Directives\nimport ClickOutside from '../../directives/click-outside'\nimport Resize from '../../directives/resize'\n\n// Helpers\nimport { convertToUnit, getSlotType } from '../../util/helpers'\nimport ThemeProvider from '../../util/ThemeProvider'\nimport { consoleError } from '../../util/console'\n\n/* @vue/component */\nexport default Vue.extend({\n  name: 'v-menu',\n\n  provide () {\n    return {\n      // Pass theme through to default slot\n      theme: this.theme\n    }\n  },\n\n  directives: {\n    ClickOutside,\n    Resize\n  },\n\n  mixins: [\n    Activator,\n    Dependent,\n    Delayable,\n    Detachable,\n    Generators,\n    Keyable,\n    Menuable,\n    Position,\n    Returnable,\n    Toggleable,\n    Themeable\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    fullWidth: Boolean,\n    maxHeight: { default: 'auto' },\n    openOnClick: {\n      type: Boolean,\n      default: true\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      defaultOffset: 8,\n      hasJustFocused: false,\n      resizeTimeout: null\n    }\n  },\n\n  computed: {\n    calculatedLeft () {\n      const menuWidth = Math.max(this.dimensions.content.width, parseFloat(this.calculatedMinWidth))\n\n      if (!this.auto) return this.calcLeft(menuWidth)\n\n      return `${this.calcXOverflow(this.calcLeftAuto(), menuWidth)}px`\n    },\n    calculatedMaxHeight () {\n      return this.auto ? '200px' : convertToUnit(this.maxHeight)\n    },\n    calculatedMaxWidth () {\n      return isNaN(this.maxWidth)\n        ? this.maxWidth\n        : `${this.maxWidth}px`\n    },\n    calculatedMinWidth () {\n      if (this.minWidth) {\n        return isNaN(this.minWidth)\n          ? this.minWidth\n          : `${this.minWidth}px`\n      }\n\n      const minWidth = Math.min(\n        this.dimensions.activator.width +\n        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 `${Math.min(\n        calculatedMaxWidth,\n        minWidth\n      )}px`\n    },\n    calculatedTop () {\n      if (!this.auto || this.isAttached) return this.calcTop()\n\n      return `${this.calcYOverflow(this.calculatedTopAuto)}px`\n    },\n    styles () {\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    activator (newActivator, oldActivator) {\n      this.removeActivatorEvents(oldActivator)\n      this.addActivatorEvents(newActivator)\n    },\n    disabled (disabled) {\n      if (!this.activator) return\n\n      if (disabled) {\n        this.removeActivatorEvents(this.activator)\n      } else {\n        this.addActivatorEvents(this.activator)\n      }\n    },\n    isContentActive (val) {\n      this.hasJustFocused = val\n    }\n  },\n\n  mounted () {\n    this.isActive && this.activate()\n\n    if (getSlotType(this, 'activator', true) === 'v-slot') {\n      consoleError(`v-tooltip's activator slot must be bound, try '<template #activator=\"data\"><v-btn v-on=\"data.on>'`, this)\n    }\n  },\n\n  methods: {\n    activate () {\n      // This exists primarily for v-select\n      // helps determine which tiles to activate\n      this.getTiles()\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    closeConditional (e) {\n      return this.isActive &&\n        this.closeOnClick &&\n        !this.$refs.content.contains(e.target)\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 = setTimeout(this.updateDimensions, 100)\n    }\n  },\n\n  render (h) {\n    const data = {\n      staticClass: 'v-menu',\n      class: { 'v-menu--inline': !this.fullWidth && this.$slots.activator },\n      directives: [{\n        arg: 500,\n        name: 'resize',\n        value: this.onResize\n      }],\n      on: this.disableKeys ? undefined : {\n        keydown: this.onKeyDown\n      }\n    }\n\n    return h('div', data, [\n      this.genActivator(),\n      this.$createElement(ThemeProvider, {\n        props: {\n          root: true,\n          light: this.light,\n          dark: this.dark\n        }\n      }, [this.genTransition()])\n    ])\n  }\n})\n"],"sourceRoot":""}