vuetify 2.5.12 → 2.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/json/web-types.json +5 -5
  2. package/dist/vuetify.css +7 -1
  3. package/dist/vuetify.css.map +1 -1
  4. package/dist/vuetify.js +105 -69
  5. package/dist/vuetify.js.map +1 -1
  6. package/dist/vuetify.min.css +2 -2
  7. package/dist/vuetify.min.js +2 -2
  8. package/es5/components/VCalendar/mixins/calendar-with-events.js +4 -2
  9. package/es5/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  10. package/es5/components/VOverlay/VOverlay.js +1 -0
  11. package/es5/components/VOverlay/VOverlay.js.map +1 -1
  12. package/es5/components/VRadioGroup/VRadioGroup.js +7 -0
  13. package/es5/components/VRadioGroup/VRadioGroup.js.map +1 -1
  14. package/es5/components/VRangeSlider/VRangeSlider.js +4 -1
  15. package/es5/components/VRangeSlider/VRangeSlider.js.map +1 -1
  16. package/es5/components/VTabs/VTab.js +6 -3
  17. package/es5/components/VTabs/VTab.js.map +1 -1
  18. package/es5/components/transitions/createTransition.js +0 -20
  19. package/es5/components/transitions/createTransition.js.map +1 -1
  20. package/es5/directives/click-outside/index.js +18 -9
  21. package/es5/directives/click-outside/index.js.map +1 -1
  22. package/es5/directives/intersect/index.js +12 -11
  23. package/es5/directives/intersect/index.js.map +1 -1
  24. package/es5/directives/mutate/index.js +7 -6
  25. package/es5/directives/mutate/index.js.map +1 -1
  26. package/es5/directives/resize/index.js +8 -7
  27. package/es5/directives/resize/index.js.map +1 -1
  28. package/es5/directives/scroll/index.js +13 -10
  29. package/es5/directives/scroll/index.js.map +1 -1
  30. package/es5/framework.js +1 -1
  31. package/es5/mixins/intersectable/index.js +5 -2
  32. package/es5/mixins/intersectable/index.js.map +1 -1
  33. package/es5/mixins/overlayable/index.js +21 -11
  34. package/es5/mixins/overlayable/index.js.map +1 -1
  35. package/lib/components/VCalendar/mixins/calendar-with-events.js +4 -2
  36. package/lib/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  37. package/lib/components/VOverlay/VOverlay.js +1 -0
  38. package/lib/components/VOverlay/VOverlay.js.map +1 -1
  39. package/lib/components/VRadioGroup/VRadioGroup.js +9 -0
  40. package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
  41. package/lib/components/VRangeSlider/VRangeSlider.js +4 -1
  42. package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
  43. package/lib/components/VTabs/VTab.js +7 -5
  44. package/lib/components/VTabs/VTab.js.map +1 -1
  45. package/lib/components/transitions/createTransition.js +0 -6
  46. package/lib/components/transitions/createTransition.js.map +1 -1
  47. package/lib/directives/click-outside/index.js +19 -9
  48. package/lib/directives/click-outside/index.js.map +1 -1
  49. package/lib/directives/intersect/index.js +12 -10
  50. package/lib/directives/intersect/index.js.map +1 -1
  51. package/lib/directives/mutate/index.js +7 -6
  52. package/lib/directives/mutate/index.js.map +1 -1
  53. package/lib/directives/resize/index.js +6 -5
  54. package/lib/directives/resize/index.js.map +1 -1
  55. package/lib/directives/scroll/index.js +9 -6
  56. package/lib/directives/scroll/index.js.map +1 -1
  57. package/lib/framework.js +1 -1
  58. package/lib/mixins/intersectable/index.js +5 -2
  59. package/lib/mixins/intersectable/index.js.map +1 -1
  60. package/lib/mixins/overlayable/index.js +21 -11
  61. package/lib/mixins/overlayable/index.js.map +1 -1
  62. package/package.json +2 -2
  63. package/src/components/VCalendar/mixins/calendar-with-events.sass +7 -1
  64. package/src/components/VCalendar/mixins/calendar-with-events.ts +3 -3
  65. package/src/components/VImg/__tests__/VImg.spec.ts +1 -1
  66. package/src/components/VOverlay/VOverlay.ts +1 -0
  67. package/src/components/VRadioGroup/VRadioGroup.ts +8 -0
  68. package/src/components/VRangeSlider/VRangeSlider.ts +3 -1
  69. package/src/components/VTabs/VTab.ts +6 -4
  70. package/src/components/transitions/createTransition.ts +0 -8
  71. package/src/directives/click-outside/__tests__/click-outside-shadow-dom.spec.ts +9 -6
  72. package/src/directives/click-outside/__tests__/click-outside.spec.ts +7 -4
  73. package/src/directives/click-outside/index.ts +18 -9
  74. package/src/directives/intersect/__tests__/intersect.spec.ts +13 -10
  75. package/src/directives/intersect/index.ts +13 -12
  76. package/src/directives/mutate/__tests__/mutate.spec.ts +36 -17
  77. package/src/directives/mutate/index.ts +8 -7
  78. package/src/directives/resize/__tests__/resize.spec.ts +4 -4
  79. package/src/directives/resize/index.ts +10 -5
  80. package/src/directives/scroll/__tests__/scroll.spec.ts +9 -9
  81. package/src/directives/scroll/index.ts +8 -7
  82. package/src/globals.d.ts +10 -12
  83. package/src/mixins/intersectable/index.ts +5 -2
  84. package/src/mixins/overlayable/index.ts +22 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/intersectable/index.ts"],"names":[],"mappings":"AAAA;AACA,OAAO,SAAP,MAAsB,4BAAtB,C,CAEA;;AACA,SAAS,WAAT,QAA4B,oBAA5B,C,CAEA;;AACA,OAAO,GAAP,MAAgB,KAAhB;AAEA,eAAc,SAAU,aAAV,CAAyB,OAAzB,EAAyD;AACrE,SAAO,GAAG,CAAC,MAAJ,CAAW;AAChB,IAAA,IAAI,EAAE,eADU;;AAGhB,IAAA,OAAO,GAAA;AACL,MAAA,SAAS,CAAC,QAAV,CAAmB,KAAK,GAAxB,EAA4C;AAC1C,QAAA,IAAI,EAAE,WADoC;AAE1C,QAAA,KAAK,EAAE,KAAK;AAF8B,OAA5C;AAID,KARe;;AAUhB,IAAA,SAAS,GAAA;AACP,MAAA,SAAS,CAAC,MAAV,CAAiB,KAAK,GAAtB;AACD,KAZe;;AAchB,IAAA,OAAO,EAAE;AACP,MAAA,SAAS,CAAE,OAAF,EAAwC,QAAxC,EAAwE,cAAxE,EAA+F;AACtG,YAAI,CAAC,cAAL,EAAqB;;AAErB,aAAK,IAAI,CAAC,GAAG,CAAR,EAAW,MAAM,GAAG,OAAO,CAAC,SAAR,CAAkB,MAA3C,EAAmD,CAAC,GAAG,MAAvD,EAA+D,CAAC,EAAhE,EAAoE;AAClE,gBAAM,QAAQ,GAAI,KAAa,OAAO,CAAC,SAAR,CAAkB,CAAlB,CAAb,CAAlB;;AAEA,cAAI,OAAO,QAAP,KAAoB,UAAxB,EAAoC;AAClC,YAAA,QAAQ;AACR;AACD;;AAED,UAAA,WAAW,CAAC,OAAO,CAAC,SAAR,CAAkB,CAAlB,IAAuB,wFAAxB,CAAX;AACD;AACF;;AAdM;AAdO,GAAX,CAAP;AA+BD","sourcesContent":["// Directives\nimport Intersect from '../../directives/intersect'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport Vue from 'vue'\n\nexport default function intersectable (options: { onVisible: string[] }) {\n return Vue.extend({\n name: 'intersectable',\n\n mounted () {\n Intersect.inserted(this.$el as HTMLElement, {\n name: 'intersect',\n value: this.onObserve,\n })\n },\n\n destroyed () {\n Intersect.unbind(this.$el as HTMLElement)\n },\n\n methods: {\n onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n if (!isIntersecting) return\n\n for (let i = 0, length = options.onVisible.length; i < length; i++) {\n const callback = (this as any)[options.onVisible[i]]\n\n if (typeof callback === 'function') {\n callback()\n continue\n }\n\n consoleWarn(options.onVisible[i] + ' method is not available on the instance but referenced in intersectable mixin options')\n }\n },\n },\n })\n}\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/mixins/intersectable/index.ts"],"names":[],"mappings":"AAAA;AACA,OAAO,SAAP,MAAsB,4BAAtB,C,CAEA;;AACA,SAAS,WAAT,QAA4B,oBAA5B,C,CAEA;;AACA,OAAO,GAAP,MAAgB,KAAhB;AAEA,eAAc,SAAU,aAAV,CAAyB,OAAzB,EAAyD;AACrE,SAAO,GAAG,CAAC,MAAJ,CAAW;AAChB,IAAA,IAAI,EAAE,eADU;;AAGhB,IAAA,OAAO,GAAA;AACL,MAAA,SAAS,CAAC,QAAV,CAAmB,KAAK,GAAxB,EAA4C;AAC1C,QAAA,IAAI,EAAE,WADoC;AAE1C,QAAA,KAAK,EAAE,KAAK;AAF8B,OAA5C,EAGG,KAAK,MAHR;AAID,KARe;;AAUhB,IAAA,SAAS,GAAA;AACP,MAAA,SAAS,CAAC,MAAV,CAAiB,KAAK,GAAtB,EAA0C;AACxC,QAAA,IAAI,EAAE,WADkC;AAExC,QAAA,KAAK,EAAE,KAAK;AAF4B,OAA1C,EAGG,KAAK,MAHR;AAID,KAfe;;AAiBhB,IAAA,OAAO,EAAE;AACP,MAAA,SAAS,CAAE,OAAF,EAAwC,QAAxC,EAAwE,cAAxE,EAA+F;AACtG,YAAI,CAAC,cAAL,EAAqB;;AAErB,aAAK,IAAI,CAAC,GAAG,CAAR,EAAW,MAAM,GAAG,OAAO,CAAC,SAAR,CAAkB,MAA3C,EAAmD,CAAC,GAAG,MAAvD,EAA+D,CAAC,EAAhE,EAAoE;AAClE,gBAAM,QAAQ,GAAI,KAAa,OAAO,CAAC,SAAR,CAAkB,CAAlB,CAAb,CAAlB;;AAEA,cAAI,OAAO,QAAP,KAAoB,UAAxB,EAAoC;AAClC,YAAA,QAAQ;AACR;AACD;;AAED,UAAA,WAAW,CAAC,OAAO,CAAC,SAAR,CAAkB,CAAlB,IAAuB,wFAAxB,CAAX;AACD;AACF;;AAdM;AAjBO,GAAX,CAAP;AAkCD","sourcesContent":["// Directives\nimport Intersect from '../../directives/intersect'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport Vue from 'vue'\n\nexport default function intersectable (options: { onVisible: string[] }) {\n return Vue.extend({\n name: 'intersectable',\n\n mounted () {\n Intersect.inserted(this.$el as HTMLElement, {\n name: 'intersect',\n value: this.onObserve,\n }, this.$vnode)\n },\n\n destroyed () {\n Intersect.unbind(this.$el as HTMLElement, {\n name: 'intersect',\n value: this.onObserve,\n }, this.$vnode)\n },\n\n methods: {\n onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n if (!isIntersecting) return\n\n for (let i = 0, length = options.onVisible.length; i < length; i++) {\n const callback = (this as any)[options.onVisible[i]]\n\n if (typeof callback === 'function') {\n callback()\n continue\n }\n\n consoleWarn(options.onVisible[i] + ' method is not available on the instance but referenced in intersectable mixin options')\n }\n },\n },\n })\n}\n"],"sourceRoot":"","file":"index.js"}
@@ -108,20 +108,31 @@ export default Vue.extend().extend({
108
108
  hasScrollbar(el) {
109
109
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
110
110
  const style = window.getComputedStyle(el);
111
- return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight;
111
+ return (['auto', 'scroll'].includes(style.overflowY) || el.tagName === 'SELECT') && el.scrollHeight > el.clientHeight || ['auto', 'scroll'].includes(style.overflowX) && el.scrollWidth > el.clientWidth;
112
112
  },
113
113
 
114
- shouldScroll(el, delta) {
114
+ shouldScroll(el, e) {
115
115
  if (el.hasAttribute('data-app')) return false;
116
- const alreadyAtTop = el.scrollTop === 0;
117
- const alreadyAtBottom = el.scrollTop + el.clientHeight === el.scrollHeight;
116
+ const dir = e.shiftKey || e.deltaX ? 'x' : 'y';
117
+ const delta = dir === 'y' ? e.deltaY : e.deltaX || e.deltaY;
118
+ let alreadyAtStart;
119
+ let alreadyAtEnd;
120
+
121
+ if (dir === 'y') {
122
+ alreadyAtStart = el.scrollTop === 0;
123
+ alreadyAtEnd = el.scrollTop + el.clientHeight === el.scrollHeight;
124
+ } else {
125
+ alreadyAtStart = el.scrollLeft === 0;
126
+ alreadyAtEnd = el.scrollLeft + el.clientWidth === el.scrollWidth;
127
+ }
128
+
118
129
  const scrollingUp = delta < 0;
119
130
  const scrollingDown = delta > 0;
120
- if (!alreadyAtTop && scrollingUp) return true;
121
- if (!alreadyAtBottom && scrollingDown) return true;
131
+ if (!alreadyAtStart && scrollingUp) return true;
132
+ if (!alreadyAtEnd && scrollingDown) return true;
122
133
 
123
- if (alreadyAtTop || alreadyAtBottom) {
124
- return this.shouldScroll(el.parentNode, delta);
134
+ if (alreadyAtStart || alreadyAtEnd) {
135
+ return this.shouldScroll(el.parentNode, e);
125
136
  }
126
137
 
127
138
  return false;
@@ -139,7 +150,6 @@ export default Vue.extend().extend({
139
150
 
140
151
  checkPath(e) {
141
152
  const path = composedPath(e);
142
- const delta = e.deltaY;
143
153
 
144
154
  if (e.type === 'keydown' && path[0] === document.body) {
145
155
  const dialog = this.$refs.dialog; // getSelection returns null in firefox in some edge cases, can be ignored
@@ -147,7 +157,7 @@ export default Vue.extend().extend({
147
157
  const selected = window.getSelection().anchorNode;
148
158
 
149
159
  if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {
150
- return !this.shouldScroll(dialog, delta);
160
+ return !this.shouldScroll(dialog, e);
151
161
  }
152
162
 
153
163
  return true;
@@ -158,7 +168,7 @@ export default Vue.extend().extend({
158
168
  if (el === document) return true;
159
169
  if (el === document.documentElement) return true;
160
170
  if (el === this.$refs.content) return true;
161
- if (this.hasScrollbar(el)) return !this.shouldScroll(el, delta);
171
+ if (this.hasScrollbar(el)) return !this.shouldScroll(el, e);
162
172
  }
163
173
 
164
174
  return true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/overlayable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Components\nimport VOverlay from '../../components/VOverlay'\n\n// Utilities\nimport {\n keyCodes,\n addOnceEventListener,\n addPassiveEventListener,\n getZIndex,\n composedPath,\n} 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 overlayColor: String,\n overlayOpacity: [Number, String],\n },\n\n data () {\n return {\n animationFrame: 0,\n overlay: null as InstanceType<typeof VOverlay> | null,\n }\n },\n\n watch: {\n hideOverlay (value) {\n if (!this.isActive) return\n\n if (value) this.removeOverlay()\n else this.genOverlay()\n },\n },\n\n beforeDestroy () {\n this.removeOverlay()\n },\n\n methods: {\n createOverlay () {\n const overlay = new VOverlay({\n propsData: {\n absolute: this.absolute,\n value: false,\n color: this.overlayColor,\n opacity: this.overlayOpacity,\n },\n })\n\n overlay.$mount()\n\n const parent = this.absolute\n ? this.$el.parentNode\n : document.querySelector('[data-app]')\n\n parent && parent.insertBefore(overlay.$el, parent.firstChild)\n\n this.overlay = overlay\n },\n genOverlay () {\n this.hideScroll()\n\n if (this.hideOverlay) return\n\n if (!this.overlay) this.createOverlay()\n\n this.animationFrame = requestAnimationFrame(() => {\n if (!this.overlay) return\n\n if (this.activeZIndex !== undefined) {\n this.overlay.zIndex = String(this.activeZIndex - 1)\n } else if (this.$el) {\n this.overlay.zIndex = getZIndex(this.$el)\n }\n\n this.overlay.value = true\n })\n\n return true\n },\n /** removeOverlay(false) will not restore the scollbar afterwards */\n removeOverlay (showScroll = true) {\n if (this.overlay) {\n addOnceEventListener(this.overlay.$el, 'transitionend', () => {\n if (\n !this.overlay ||\n !this.overlay.$el ||\n !this.overlay.$el.parentNode ||\n this.overlay.value ||\n this.isActive\n ) return\n\n this.overlay.$el.parentNode.removeChild(this.overlay.$el)\n this.overlay.$destroy()\n this.overlay = null\n })\n\n // Cancel animation frame in case\n // overlay is removed before it\n // has finished its animation\n cancelAnimationFrame(this.animationFrame)\n\n this.overlay.value = false\n }\n\n showScroll && this.showScroll()\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): boolean {\n if (el.hasAttribute('data-app')) return false\n\n const alreadyAtTop = el.scrollTop === 0\n const alreadyAtBottom = el.scrollTop + el.clientHeight === el.scrollHeight\n const scrollingUp = delta < 0\n const scrollingDown = delta > 0\n\n if (!alreadyAtTop && scrollingUp) return true\n if (!alreadyAtBottom && scrollingDown) return true\n if ((alreadyAtTop || alreadyAtBottom)) {\n return this.shouldScroll(el.parentNode as Element, delta)\n }\n\n return false\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 = composedPath(e)\n const delta = e.deltaY\n\n if (e.type === 'keydown' && path[0] === document.body) {\n const dialog = this.$refs.dialog\n // getSelection returns null in firefox in some edge cases, can be ignored\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 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":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/mixins/overlayable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Components\nimport VOverlay from '../../components/VOverlay'\n\n// Utilities\nimport {\n keyCodes,\n addOnceEventListener,\n addPassiveEventListener,\n getZIndex,\n composedPath,\n} 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 overlayColor: String,\n overlayOpacity: [Number, String],\n },\n\n data () {\n return {\n animationFrame: 0,\n overlay: null as InstanceType<typeof VOverlay> | null,\n }\n },\n\n watch: {\n hideOverlay (value) {\n if (!this.isActive) return\n\n if (value) this.removeOverlay()\n else this.genOverlay()\n },\n },\n\n beforeDestroy () {\n this.removeOverlay()\n },\n\n methods: {\n createOverlay () {\n const overlay = new VOverlay({\n propsData: {\n absolute: this.absolute,\n value: false,\n color: this.overlayColor,\n opacity: this.overlayOpacity,\n },\n })\n\n overlay.$mount()\n\n const parent = this.absolute\n ? this.$el.parentNode\n : document.querySelector('[data-app]')\n\n parent && parent.insertBefore(overlay.$el, parent.firstChild)\n\n this.overlay = overlay\n },\n genOverlay () {\n this.hideScroll()\n\n if (this.hideOverlay) return\n\n if (!this.overlay) this.createOverlay()\n\n this.animationFrame = requestAnimationFrame(() => {\n if (!this.overlay) return\n\n if (this.activeZIndex !== undefined) {\n this.overlay.zIndex = String(this.activeZIndex - 1)\n } else if (this.$el) {\n this.overlay.zIndex = getZIndex(this.$el)\n }\n\n this.overlay.value = true\n })\n\n return true\n },\n /** removeOverlay(false) will not restore the scollbar afterwards */\n removeOverlay (showScroll = true) {\n if (this.overlay) {\n addOnceEventListener(this.overlay.$el, 'transitionend', () => {\n if (\n !this.overlay ||\n !this.overlay.$el ||\n !this.overlay.$el.parentNode ||\n this.overlay.value ||\n this.isActive\n ) return\n\n this.overlay.$el.parentNode.removeChild(this.overlay.$el)\n this.overlay.$destroy()\n this.overlay = null\n })\n\n // Cancel animation frame in case\n // overlay is removed before it\n // has finished its animation\n cancelAnimationFrame(this.animationFrame)\n\n this.overlay.value = false\n }\n\n showScroll && this.showScroll()\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.tagName === 'SELECT') && el.scrollHeight > el.clientHeight) ||\n ((['auto', 'scroll'].includes(style.overflowX!)) && el.scrollWidth > el.clientWidth)\n },\n shouldScroll (el: Element, e: WheelEvent): boolean {\n if (el.hasAttribute('data-app')) return false\n\n const dir = e.shiftKey || e.deltaX ? 'x' : 'y'\n const delta = dir === 'y' ? e.deltaY : e.deltaX || e.deltaY\n\n let alreadyAtStart: boolean\n let alreadyAtEnd: boolean\n if (dir === 'y') {\n alreadyAtStart = el.scrollTop === 0\n alreadyAtEnd = el.scrollTop + el.clientHeight === el.scrollHeight\n } else {\n alreadyAtStart = el.scrollLeft === 0\n alreadyAtEnd = el.scrollLeft + el.clientWidth === el.scrollWidth\n }\n\n const scrollingUp = delta < 0\n const scrollingDown = delta > 0\n\n if (!alreadyAtStart && scrollingUp) return true\n if (!alreadyAtEnd && scrollingDown) return true\n if ((alreadyAtStart || alreadyAtEnd)) {\n return this.shouldScroll(el.parentNode as Element, e)\n }\n\n return false\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 = composedPath(e)\n\n if (e.type === 'keydown' && path[0] === document.body) {\n const dialog = this.$refs.dialog\n // getSelection returns null in firefox in some edge cases, can be ignored\n const selected = window.getSelection()!.anchorNode as Element\n if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {\n return !this.shouldScroll(dialog, e)\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, e)\n }\n\n return true\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":"","file":"index.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vuetify",
3
3
  "description": "Vue Material Component Framework",
4
- "version": "2.5.12",
4
+ "version": "2.5.13",
5
5
  "author": {
6
6
  "name": "John Leider",
7
7
  "email": "john@vuetifyjs.com"
@@ -112,5 +112,5 @@
112
112
  "attributes": "dist/json/attributes.json"
113
113
  },
114
114
  "web-types": "dist/json/web-types.json",
115
- "gitHead": "705cb6a5fce63aa2baaa75e1dc934d5f352ae367"
115
+ "gitHead": "836d4fb5073abc0d18595377cec1427fd207fce1"
116
116
  }
@@ -45,7 +45,6 @@
45
45
 
46
46
  .v-event-timed
47
47
  position: absolute
48
- overflow: hidden
49
48
  white-space: nowrap
50
49
  text-overflow: ellipsis
51
50
  font-size: $calendar-event-font-size
@@ -53,6 +52,13 @@
53
52
  border-radius: $calendar-event-border-radius
54
53
  pointer-events: all
55
54
 
55
+ .v-event-summary
56
+ display: inline-block
57
+ overflow: hidden
58
+ text-overflow: ellipsis
59
+ width: 100%
60
+ white-space: nowrap
61
+
56
62
  &.v-calendar-events
57
63
  .v-calendar-weekly__head-weekday
58
64
  margin-right: -$calendar-line-width
@@ -302,17 +302,17 @@ export default CalendarBase.extend({
302
302
  const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)
303
303
  const eventSummary = () => {
304
304
  const name = this.eventNameFunction(event, timedEvent)
305
-
306
305
  if (event.start.hasTime) {
306
+ const eventSummaryClass = 'v-event-summary'
307
307
  if (timedEvent) {
308
308
  const time = timeSummary()
309
309
  const delimiter = singline ? ', ' : '<br>'
310
310
 
311
- return `<strong>${name}</strong>${delimiter}${time}`
311
+ return `<span class="${eventSummaryClass}"><strong>${name}</strong>${delimiter}${time}</span>`
312
312
  } else {
313
313
  const time = formatTime(event.start, true)
314
314
 
315
- return `<strong>${time}</strong> ${name}`
315
+ return `<span class="${eventSummaryClass}"><strong>${time}</strong> ${name}</span>`
316
316
  }
317
317
  }
318
318
 
@@ -104,7 +104,7 @@ describe('VImg.ts', () => {
104
104
 
105
105
  jest.runOnlyPendingTimers()
106
106
 
107
- expect(error).toHaveBeenCalledTimes(2)
107
+ expect(error).toHaveBeenCalledTimes(1)
108
108
  expect(error).toHaveBeenCalledWith(LOAD_FAILURE_SRC)
109
109
  })
110
110
 
@@ -86,6 +86,7 @@ export default mixins(
86
86
 
87
87
  return h('div', {
88
88
  staticClass: 'v-overlay',
89
+ on: this.$listeners,
89
90
  class: this.classes,
90
91
  style: this.styles,
91
92
  }, children)
@@ -89,4 +89,12 @@ export default baseMixins.extend({
89
89
  },
90
90
  onClick: BaseItemGroup.options.methods.onClick,
91
91
  },
92
+
93
+ render (h) {
94
+ const vnode = VInput.options.render.call(this, h)
95
+
96
+ this._b(vnode.data!, 'div', this.attrs$)
97
+
98
+ return vnode
99
+ },
92
100
  })
@@ -229,7 +229,9 @@ export default VSlider.extend({
229
229
  this.thumbPressed = true
230
230
  }
231
231
 
232
- this.activeThumb = this.getIndexOfClosestValue(this.internalValue, value)
232
+ if (this.activeThumb === null) {
233
+ this.activeThumb = this.getIndexOfClosestValue(this.internalValue, value)
234
+ }
233
235
 
234
236
  this.setInternalValue(value)
235
237
  },
@@ -67,10 +67,6 @@ export default baseMixins.extend<options>().extend(
67
67
  },
68
68
  },
69
69
 
70
- mounted () {
71
- this.onRouteChange()
72
- },
73
-
74
70
  methods: {
75
71
  click (e: KeyboardEvent | MouseEvent): void {
76
72
  // Prevent keyboard actions
@@ -94,6 +90,12 @@ export default baseMixins.extend<options>().extend(
94
90
 
95
91
  this.to || this.toggle()
96
92
  },
93
+ toggle () {
94
+ // VItemGroup treats a change event as a click
95
+ if (!this.isActive) {
96
+ this.$emit('change')
97
+ }
98
+ },
97
99
  },
98
100
 
99
101
  render (h): VNode {
@@ -87,16 +87,8 @@ export function createSimpleTransition (
87
87
  }
88
88
  if (context.props.hideOnLeave) {
89
89
  data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => {
90
- el._initialDisplay = [el.style.display, el.style.getPropertyPriority('display')]
91
90
  el.style.setProperty('display', 'none', 'important')
92
91
  })
93
- data.on!.afterLeave = mergeTransitions(data.on!.afterLeave, (el?: HTMLElement) => {
94
- if (el) {
95
- el._initialDisplay
96
- ? el.style.setProperty('display', ...el._initialDisplay)
97
- : el.style.removeProperty('display')
98
- }
99
- })
100
92
  }
101
93
 
102
94
  return h(tag, mergeData(context.data, data), context.children)
@@ -13,7 +13,8 @@ function bootstrap (args?: object) {
13
13
  handler: jest.fn(),
14
14
  ...args,
15
15
  },
16
- }
16
+ } as any
17
+ const vnode = { context: { _uid: 1 } } as any
17
18
 
18
19
  let shadowClickHandler
19
20
  let outsideClickHandler
@@ -37,9 +38,11 @@ function bootstrap (args?: object) {
37
38
  jest.spyOn(window.document, 'removeEventListener')
38
39
  jest.spyOn(shadowRoot, 'removeEventListener')
39
40
 
40
- ClickOutside.inserted(shadowEl as HTMLElement, binding as any)
41
+ ClickOutside.inserted(shadowEl as HTMLElement, binding, vnode)
41
42
 
42
43
  return {
44
+ binding,
45
+ vnode,
43
46
  callback: binding.value.handler,
44
47
  shadowEl: shadowEl as HTMLElement,
45
48
  outsideEl: outsideEl as HTMLElement,
@@ -53,18 +56,18 @@ function bootstrap (args?: object) {
53
56
 
54
57
  describe('click-outside.js within the Shadow DOM', () => {
55
58
  it('should register and unregister handler outside of the shadow DOM', () => {
56
- const { outsideClickHandler, shadowEl } = bootstrap()
59
+ const { outsideClickHandler, shadowEl, binding, vnode } = bootstrap()
57
60
  expect(window.document.addEventListener).toHaveBeenCalledWith('click', outsideClickHandler, true)
58
61
 
59
- ClickOutside.unbind(shadowEl)
62
+ ClickOutside.unbind(shadowEl, binding, vnode)
60
63
  expect(window.document.removeEventListener).toHaveBeenCalledWith('click', outsideClickHandler, true)
61
64
  })
62
65
 
63
66
  it('should register and unregister handler within the shadow DOM', () => {
64
- const { shadowClickHandler, shadowRoot, shadowEl } = bootstrap()
67
+ const { shadowClickHandler, shadowRoot, shadowEl, binding, vnode } = bootstrap()
65
68
  expect(shadowRoot.addEventListener).toHaveBeenCalledWith('click', shadowClickHandler, true)
66
69
 
67
- ClickOutside.unbind(shadowEl)
70
+ ClickOutside.unbind(shadowEl, binding, vnode)
68
71
  expect(shadowRoot.removeEventListener).toHaveBeenCalledWith('click', shadowClickHandler, true)
69
72
  })
70
73
 
@@ -10,7 +10,8 @@ function bootstrap (args?: object) {
10
10
  handler: jest.fn(),
11
11
  ...args,
12
12
  },
13
- }
13
+ } as any
14
+ const vnode = { context: { _uid: 1 } } as any
14
15
 
15
16
  let clickHandler
16
17
  let mousedownHandler
@@ -20,9 +21,11 @@ function bootstrap (args?: object) {
20
21
  })
21
22
  jest.spyOn(window.document, 'removeEventListener')
22
23
 
23
- ClickOutside.inserted(el as HTMLElement, binding as any)
24
+ ClickOutside.inserted(el as HTMLElement, binding, vnode)
24
25
 
25
26
  return {
27
+ binding,
28
+ vnode,
26
29
  callback: binding.value.handler,
27
30
  el: el as HTMLElement,
28
31
  clickHandler,
@@ -32,10 +35,10 @@ function bootstrap (args?: object) {
32
35
 
33
36
  describe('click-outside', () => {
34
37
  it('should register and unregister handler', () => {
35
- const { clickHandler, el } = bootstrap()
38
+ const { clickHandler, el, binding, vnode } = bootstrap()
36
39
  expect(window.document.addEventListener).toHaveBeenCalledWith('click', clickHandler, true)
37
40
 
38
- ClickOutside.unbind(el)
41
+ ClickOutside.unbind(el, binding, vnode)
39
42
  expect(window.document.removeEventListener).toHaveBeenCalledWith('click', clickHandler, true)
40
43
  })
41
44
 
@@ -1,5 +1,6 @@
1
1
  import { attachedRoot } from '../../util/dom'
2
2
  import { VNodeDirective } from 'vue/types/vnode'
3
+ import { VNode } from 'vue'
3
4
 
4
5
  interface ClickOutsideBindingArgs {
5
6
  handler: (e: Event) => void
@@ -52,7 +53,7 @@ function checkIsActive (e: PointerEvent, binding: ClickOutsideDirective): boolea
52
53
  return isActive(e)
53
54
  }
54
55
 
55
- function directive (e: PointerEvent, el: HTMLElement, binding: ClickOutsideDirective) {
56
+ function directive (e: PointerEvent, el: HTMLElement, binding: ClickOutsideDirective, vnode: VNode) {
56
57
  const handler = typeof binding.value === 'function' ? binding.value : binding.value!.handler
57
58
 
58
59
  el._clickOutside!.lastMousedownWasOutside && checkEvent(e, el, binding) && setTimeout(() => {
@@ -76,8 +77,8 @@ export const ClickOutside = {
76
77
  // sure that the root element is
77
78
  // available, iOS does not support
78
79
  // clicks on body
79
- inserted (el: HTMLElement, binding: ClickOutsideDirective) {
80
- const onClick = (e: Event) => directive(e as PointerEvent, el, binding)
80
+ inserted (el: HTMLElement, binding: ClickOutsideDirective, vnode: VNode) {
81
+ const onClick = (e: Event) => directive(e as PointerEvent, el, binding, vnode)
81
82
  const onMousedown = (e: Event) => {
82
83
  el._clickOutside!.lastMousedownWasOutside = checkEvent(e as PointerEvent, el, binding)
83
84
  }
@@ -87,23 +88,31 @@ export const ClickOutside = {
87
88
  app.addEventListener('mousedown', onMousedown, true)
88
89
  })
89
90
 
90
- el._clickOutside = {
91
- lastMousedownWasOutside: true,
91
+ if (!el._clickOutside) {
92
+ el._clickOutside = {
93
+ lastMousedownWasOutside: true,
94
+ }
95
+ }
96
+
97
+ el._clickOutside[vnode.context!._uid] = {
92
98
  onClick,
93
99
  onMousedown,
94
100
  }
95
101
  },
96
102
 
97
- unbind (el: HTMLElement) {
103
+ unbind (el: HTMLElement, binding: ClickOutsideDirective, vnode: VNode) {
98
104
  if (!el._clickOutside) return
99
105
 
100
106
  handleShadow(el, (app: HTMLElement) => {
101
107
  if (!app || !el._clickOutside) return
102
- app.removeEventListener('click', el._clickOutside.onClick, true)
103
- app.removeEventListener('mousedown', el._clickOutside.onMousedown, true)
108
+
109
+ const { onClick, onMousedown } = el._clickOutside[vnode.context!._uid]
110
+
111
+ app.removeEventListener('click', onClick, true)
112
+ app.removeEventListener('mousedown', onMousedown, true)
104
113
  })
105
114
 
106
- delete el._clickOutside
115
+ delete el._clickOutside[vnode.context!._uid]
107
116
  },
108
117
  }
109
118
 
@@ -10,16 +10,19 @@ describe('intersect', () => {
10
10
  Intersect.inserted(el, {
11
11
  value: callback,
12
12
  modifiers: { quiet: true },
13
- } as any)
13
+ } as any, { context: { _uid: 1 } } as any)
14
14
 
15
15
  expect((el as any)._observe).toBeTruthy()
16
16
  expect(callback).not.toHaveBeenCalled()
17
17
 
18
18
  document.body.removeChild(el)
19
19
 
20
- Intersect.unbind(el)
20
+ Intersect.unbind(el, {
21
+ value: callback,
22
+ modifiers: { quiet: true },
23
+ } as any, { context: { _uid: 1 } } as any)
21
24
 
22
- expect((el as any)._observe).toBeFalsy()
25
+ expect((el as any)._observe[1]).toBeFalsy()
23
26
  })
24
27
 
25
28
  it('should invoke callback once and unbind', () => {
@@ -32,19 +35,19 @@ describe('intersect', () => {
32
35
  Intersect.inserted(el, {
33
36
  value: callback,
34
37
  modifiers: { once: true },
35
- } as any)
38
+ } as any, { context: { _uid: 1 } } as any)
36
39
 
37
- expect(callback).toHaveBeenCalledTimes(1)
38
- expect((el as any)._observe).toBeTruthy()
40
+ expect(callback).toHaveBeenCalledTimes(0)
41
+ expect((el as any)._observe[1]).toBeTruthy()
39
42
 
40
- ;(el as any)._observe.observer.callback([{ isIntersecting: false }])
43
+ ;(el as any)._observe[1].observer.callback([{ isIntersecting: false }])
41
44
 
42
45
  expect(callback).toHaveBeenCalledTimes(1)
43
- expect((el as any)._observe).toBeTruthy()
46
+ expect((el as any)._observe[1]).toBeTruthy()
44
47
 
45
- ;(el as any)._observe.observer.callback([{ isIntersecting: true }])
48
+ ;(el as any)._observe[1].observer.callback([{ isIntersecting: true }])
46
49
 
47
50
  expect(callback).toHaveBeenCalledTimes(2)
48
- expect((el as any)._observe).toBeFalsy()
51
+ expect((el as any)._observe[1]).toBeFalsy()
49
52
  })
50
53
  })
@@ -1,4 +1,5 @@
1
1
  import { VNodeDirective } from 'vue/types/vnode'
2
+ import { VNode } from 'vue'
2
3
 
3
4
  type ObserveHandler = (
4
5
  entries: IntersectionObserverEntry[],
@@ -14,7 +15,7 @@ interface ObserveVNodeDirective extends Omit<VNodeDirective, 'modifiers'> {
14
15
  }
15
16
  }
16
17
 
17
- function inserted (el: HTMLElement, binding: ObserveVNodeDirective) {
18
+ function inserted (el: HTMLElement, binding: ObserveVNodeDirective, vnode: VNode) {
18
19
  if (typeof window === 'undefined' || !('IntersectionObserver' in window)) return
19
20
 
20
21
  const modifiers = binding.modifiers || {}
@@ -26,9 +27,9 @@ function inserted (el: HTMLElement, binding: ObserveVNodeDirective) {
26
27
  entries: IntersectionObserverEntry[] = [],
27
28
  observer: IntersectionObserver
28
29
  ) => {
29
- /* istanbul ignore if */
30
- if (!el._observe) return // Just in case, should never fire
30
+ if (!el._observe?.[vnode.context!._uid]) return // Just in case, should never fire
31
31
 
32
+ const _observe = el._observe[vnode.context!._uid]
32
33
  const isIntersecting = entries.some(entry => entry.isIntersecting)
33
34
 
34
35
  // If is not quiet or has already been
@@ -36,31 +37,31 @@ function inserted (el: HTMLElement, binding: ObserveVNodeDirective) {
36
37
  if (
37
38
  handler && (
38
39
  !modifiers.quiet ||
39
- el._observe.init
40
+ _observe.init
40
41
  ) && (
41
42
  !modifiers.once ||
42
43
  isIntersecting ||
43
- !el._observe.init
44
+ _observe.init
44
45
  )
45
46
  ) {
46
47
  handler(entries, observer, isIntersecting)
47
48
  }
48
49
 
49
- if (isIntersecting && modifiers.once) unbind(el)
50
- else el._observe.init = true
50
+ if (isIntersecting && modifiers.once) unbind(el, binding, vnode)
51
+ else _observe.init = true
51
52
  }, options)
52
53
 
53
- el._observe = { init: false, observer }
54
+ el._observe = Object(el._observe)
55
+ el._observe![vnode.context!._uid] = { init: false, observer }
54
56
 
55
57
  observer.observe(el)
56
58
  }
57
59
 
58
- function unbind (el: HTMLElement) {
59
- /* istanbul ignore if */
60
+ function unbind (el: HTMLElement, binding: ObserveVNodeDirective, vnode: VNode) {
60
61
  if (!el._observe) return
61
62
 
62
- el._observe.observer.unobserve(el)
63
- delete el._observe
63
+ el._observe[vnode.context!._uid].observer.unobserve(el)
64
+ delete el._observe[vnode.context!._uid]
64
65
  }
65
66
 
66
67
  export const Intersect = {