{"version":3,"sources":["../../src/mixins/overlayable.ts"],"names":[],"mappings":"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","sourcesContent":["// Styles\nimport '../stylus/components/_overlay.styl'\n\n// Utilities\nimport { keyCodes, addPassiveEventListener } from '../util/helpers'\n\n// Types\nimport Vue from 'vue'\n\ninterface Toggleable extends Vue {\n  isActive?: boolean\n}\n\ninterface Stackable extends Vue {\n  activeZIndex: number\n}\n\ninterface options {\n  absolute?: boolean\n  $refs: {\n    dialog?: HTMLElement\n    content?: HTMLElement\n  }\n}\n\n/* @vue/component */\nexport default Vue.extend<Vue & Toggleable & Stackable & options>().extend({\n  name: 'overlayable',\n\n  props: {\n    hideOverlay: Boolean\n  },\n\n  data () {\n    return {\n      overlay: null as HTMLElement | null,\n      overlayOffset: 0,\n      overlayTimeout: undefined as number | undefined,\n      overlayTransitionDuration: 500 + 150 // transition + delay\n    }\n  },\n\n  watch: {\n    hideOverlay (value) {\n      if (value) this.removeOverlay()\n      else this.genOverlay()\n    }\n  },\n\n  beforeDestroy () {\n    this.removeOverlay()\n  },\n\n  methods: {\n    genOverlay () {\n      // If fn is called and timeout is active\n      // or overlay already exists\n      // cancel removal of overlay and re-add active\n      if ((!this.isActive || this.hideOverlay) ||\n        (this.isActive && this.overlayTimeout) ||\n        this.overlay\n      ) {\n        clearTimeout(this.overlayTimeout)\n\n        return this.overlay &&\n          this.overlay.classList.add('v-overlay--active')\n      }\n\n      this.overlay = document.createElement('div')\n      this.overlay.className = 'v-overlay'\n\n      if (this.absolute) this.overlay.className += ' v-overlay--absolute'\n\n      this.hideScroll()\n\n      const parent = this.absolute\n        ? this.$el.parentNode\n        : document.querySelector('[data-app]')\n\n      parent && parent.insertBefore(this.overlay, parent.firstChild)\n\n      // eslint-disable-next-line no-unused-expressions\n      this.overlay.clientHeight // Force repaint\n      requestAnimationFrame(() => {\n        // https://github.com/vuetifyjs/vuetify/issues/4678\n        if (!this.overlay) return\n\n        this.overlay.className += ' v-overlay--active'\n\n        if (this.activeZIndex !== undefined) {\n          this.overlay.style.zIndex = String(this.activeZIndex - 1)\n        }\n      })\n\n      return true\n    },\n    /** removeOverlay(false) will not restore the scollbar afterwards */\n    removeOverlay (showScroll = true) {\n      if (!this.overlay) {\n        return showScroll && this.showScroll()\n      }\n\n      this.overlay.classList.remove('v-overlay--active')\n\n      this.overlayTimeout = window.setTimeout(() => {\n        // IE11 Fix\n        try {\n          if (this.overlay && this.overlay.parentNode) {\n            this.overlay.parentNode.removeChild(this.overlay)\n          }\n          this.overlay = null\n          showScroll && this.showScroll()\n        } catch (e) { console.log(e) }\n\n        clearTimeout(this.overlayTimeout)\n        this.overlayTimeout = undefined\n      }, this.overlayTransitionDuration)\n    },\n    scrollListener (e: WheelEvent & KeyboardEvent) {\n      if (e.type === 'keydown') {\n        if (\n          ['INPUT', 'TEXTAREA', 'SELECT'].includes((e.target as Element).tagName) ||\n          // https://github.com/vuetifyjs/vuetify/issues/4715\n          (e.target as HTMLElement).isContentEditable\n        ) return\n\n        const up = [keyCodes.up, keyCodes.pageup]\n        const down = [keyCodes.down, keyCodes.pagedown]\n\n        if (up.includes(e.keyCode)) {\n          (e as any).deltaY = -1\n        } else if (down.includes(e.keyCode)) {\n          (e as any).deltaY = 1\n        } else {\n          return\n        }\n      }\n\n      if (e.target === this.overlay ||\n        (e.type !== 'keydown' && e.target === document.body) ||\n        this.checkPath(e)) e.preventDefault()\n    },\n    hasScrollbar (el?: Element) {\n      if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n      const style = window.getComputedStyle(el)\n      return ['auto', 'scroll'].includes(style.overflowY!) && el.scrollHeight > el.clientHeight\n    },\n    shouldScroll (el: Element, delta: number) {\n      if (el.scrollTop === 0 && delta < 0) return true\n      return el.scrollTop + el.clientHeight === el.scrollHeight && delta > 0\n    },\n    isInside (el: Element, parent: Element): boolean {\n      if (el === parent) {\n        return true\n      } else if (el === null || el === document.body) {\n        return false\n      } else {\n        return this.isInside(el.parentNode as Element, parent)\n      }\n    },\n    checkPath (e: WheelEvent) {\n      const path = e.path || this.composedPath(e)\n      const delta = e.deltaY\n\n      if (e.type === 'keydown' && path[0] === document.body) {\n        const dialog = this.$refs.dialog\n        const selected = window.getSelection().anchorNode as Element\n        if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {\n          return this.shouldScroll(dialog, delta)\n        }\n        return true\n      }\n\n      for (let index = 0; index < path.length; index++) {\n        const el = path[index]\n\n        if (el === document) return true\n        if (el === document.documentElement) return true\n        if (el === this.$refs.content) return true\n\n        if (this.hasScrollbar(el as Element)) return this.shouldScroll(el as Element, delta)\n      }\n\n      return true\n    },\n    /**\n     * Polyfill for Event.prototype.composedPath\n     */\n    composedPath (e: WheelEvent): EventTarget[] {\n      if (e.composedPath) return e.composedPath()\n\n      const path = []\n      let el = e.target as Element\n\n      while (el) {\n        path.push(el)\n\n        if (el.tagName === 'HTML') {\n          path.push(document)\n          path.push(window)\n\n          return path\n        }\n\n        el = el.parentElement!\n      }\n      return path\n    },\n    hideScroll () {\n      if (this.$vuetify.breakpoint.smAndDown) {\n        document.documentElement!.classList.add('overflow-y-hidden')\n      } else {\n        addPassiveEventListener(window, 'wheel', this.scrollListener as EventHandlerNonNull, { passive: false })\n        window.addEventListener('keydown', this.scrollListener as EventHandlerNonNull)\n      }\n    },\n    showScroll () {\n      document.documentElement!.classList.remove('overflow-y-hidden')\n      window.removeEventListener('wheel', this.scrollListener as EventHandlerNonNull)\n      window.removeEventListener('keydown', this.scrollListener as EventHandlerNonNull)\n    }\n  }\n})\n"],"sourceRoot":""}