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.
- package/dist/json/web-types.json +5 -5
- package/dist/vuetify.css +7 -1
- package/dist/vuetify.css.map +1 -1
- package/dist/vuetify.js +105 -69
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +2 -2
- package/es5/components/VCalendar/mixins/calendar-with-events.js +4 -2
- package/es5/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
- package/es5/components/VOverlay/VOverlay.js +1 -0
- package/es5/components/VOverlay/VOverlay.js.map +1 -1
- package/es5/components/VRadioGroup/VRadioGroup.js +7 -0
- package/es5/components/VRadioGroup/VRadioGroup.js.map +1 -1
- package/es5/components/VRangeSlider/VRangeSlider.js +4 -1
- package/es5/components/VRangeSlider/VRangeSlider.js.map +1 -1
- package/es5/components/VTabs/VTab.js +6 -3
- package/es5/components/VTabs/VTab.js.map +1 -1
- package/es5/components/transitions/createTransition.js +0 -20
- package/es5/components/transitions/createTransition.js.map +1 -1
- package/es5/directives/click-outside/index.js +18 -9
- package/es5/directives/click-outside/index.js.map +1 -1
- package/es5/directives/intersect/index.js +12 -11
- package/es5/directives/intersect/index.js.map +1 -1
- package/es5/directives/mutate/index.js +7 -6
- package/es5/directives/mutate/index.js.map +1 -1
- package/es5/directives/resize/index.js +8 -7
- package/es5/directives/resize/index.js.map +1 -1
- package/es5/directives/scroll/index.js +13 -10
- package/es5/directives/scroll/index.js.map +1 -1
- package/es5/framework.js +1 -1
- package/es5/mixins/intersectable/index.js +5 -2
- package/es5/mixins/intersectable/index.js.map +1 -1
- package/es5/mixins/overlayable/index.js +21 -11
- package/es5/mixins/overlayable/index.js.map +1 -1
- package/lib/components/VCalendar/mixins/calendar-with-events.js +4 -2
- package/lib/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.js +1 -0
- package/lib/components/VOverlay/VOverlay.js.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.js +9 -0
- package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
- package/lib/components/VRangeSlider/VRangeSlider.js +4 -1
- package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
- package/lib/components/VTabs/VTab.js +7 -5
- package/lib/components/VTabs/VTab.js.map +1 -1
- package/lib/components/transitions/createTransition.js +0 -6
- package/lib/components/transitions/createTransition.js.map +1 -1
- package/lib/directives/click-outside/index.js +19 -9
- package/lib/directives/click-outside/index.js.map +1 -1
- package/lib/directives/intersect/index.js +12 -10
- package/lib/directives/intersect/index.js.map +1 -1
- package/lib/directives/mutate/index.js +7 -6
- package/lib/directives/mutate/index.js.map +1 -1
- package/lib/directives/resize/index.js +6 -5
- package/lib/directives/resize/index.js.map +1 -1
- package/lib/directives/scroll/index.js +9 -6
- package/lib/directives/scroll/index.js.map +1 -1
- package/lib/framework.js +1 -1
- package/lib/mixins/intersectable/index.js +5 -2
- package/lib/mixins/intersectable/index.js.map +1 -1
- package/lib/mixins/overlayable/index.js +21 -11
- package/lib/mixins/overlayable/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/VCalendar/mixins/calendar-with-events.sass +7 -1
- package/src/components/VCalendar/mixins/calendar-with-events.ts +3 -3
- package/src/components/VImg/__tests__/VImg.spec.ts +1 -1
- package/src/components/VOverlay/VOverlay.ts +1 -0
- package/src/components/VRadioGroup/VRadioGroup.ts +8 -0
- package/src/components/VRangeSlider/VRangeSlider.ts +3 -1
- package/src/components/VTabs/VTab.ts +6 -4
- package/src/components/transitions/createTransition.ts +0 -8
- package/src/directives/click-outside/__tests__/click-outside-shadow-dom.spec.ts +9 -6
- package/src/directives/click-outside/__tests__/click-outside.spec.ts +7 -4
- package/src/directives/click-outside/index.ts +18 -9
- package/src/directives/intersect/__tests__/intersect.spec.ts +13 -10
- package/src/directives/intersect/index.ts +13 -12
- package/src/directives/mutate/__tests__/mutate.spec.ts +36 -17
- package/src/directives/mutate/index.ts +8 -7
- package/src/directives/resize/__tests__/resize.spec.ts +4 -4
- package/src/directives/resize/index.ts +10 -5
- package/src/directives/scroll/__tests__/scroll.spec.ts +9 -9
- package/src/directives/scroll/index.ts +8 -7
- package/src/globals.d.ts +10 -12
- package/src/mixins/intersectable/index.ts +5 -2
- 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;
|
|
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,
|
|
114
|
+
shouldScroll(el, e) {
|
|
115
115
|
if (el.hasAttribute('data-app')) return false;
|
|
116
|
-
const
|
|
117
|
-
const
|
|
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 (!
|
|
121
|
-
if (!
|
|
131
|
+
if (!alreadyAtStart && scrollingUp) return true;
|
|
132
|
+
if (!alreadyAtEnd && scrollingDown) return true;
|
|
122
133
|
|
|
123
|
-
if (
|
|
124
|
-
return this.shouldScroll(el.parentNode,
|
|
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,
|
|
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,
|
|
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.
|
|
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": "
|
|
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
|
|
|
@@ -229,7 +229,9 @@ export default VSlider.extend({
|
|
|
229
229
|
this.thumbPressed = true
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
this.activeThumb
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
103
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
40
|
+
_observe.init
|
|
40
41
|
) && (
|
|
41
42
|
!modifiers.once ||
|
|
42
43
|
isIntersecting ||
|
|
43
|
-
|
|
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
|
|
50
|
+
if (isIntersecting && modifiers.once) unbind(el, binding, vnode)
|
|
51
|
+
else _observe.init = true
|
|
51
52
|
}, options)
|
|
52
53
|
|
|
53
|
-
el._observe =
|
|
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 = {
|