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
@@ -29,16 +29,18 @@ describe('mutate.ts', () => {
29
29
 
30
30
  Mutate.inserted(el, {
31
31
  value: callback,
32
- } as any)
32
+ } as any, { context: { _uid: 1 } } as any)
33
33
 
34
34
  expect(el._mutate).toBeTruthy()
35
35
  expect(callback).not.toHaveBeenCalled()
36
36
 
37
37
  document.body.removeChild(el)
38
38
 
39
- Mutate.unbind(el)
39
+ Mutate.unbind(el, {
40
+ value: callback,
41
+ } as any, { context: { _uid: 1 } } as any)
40
42
 
41
- expect(el._mutate).toBeFalsy()
43
+ expect(el._mutate[1]).toBeFalsy()
42
44
  })
43
45
 
44
46
  it('should fire event on mutation', () => {
@@ -48,15 +50,17 @@ describe('mutate.ts', () => {
48
50
 
49
51
  Mutate.inserted(el, {
50
52
  value: callback,
51
- } as any)
53
+ } as any, { context: { _uid: 1 } } as any)
52
54
 
53
- el._mutate.observer.trigger([{}])
55
+ el._mutate[1].observer.trigger([{}])
54
56
 
55
57
  expect(callback).toHaveBeenCalledTimes(1)
56
58
 
57
59
  document.body.removeChild(el)
58
60
 
59
- Mutate.unbind(el)
61
+ Mutate.unbind(el, {
62
+ value: callback,
63
+ } as any, { context: { _uid: 1 } } as any)
60
64
  })
61
65
 
62
66
  it('should fire event once', () => {
@@ -69,12 +73,12 @@ describe('mutate.ts', () => {
69
73
  modifiers: {
70
74
  once: true,
71
75
  },
72
- } as any)
76
+ } as any, { context: { _uid: 1 } } as any)
73
77
 
74
- el._mutate.observer.trigger([{}])
78
+ el._mutate[1].observer.trigger([{}])
75
79
 
76
80
  expect(callback).toHaveBeenCalledTimes(1)
77
- expect(el._mutate).toBeFalsy()
81
+ expect(el._mutate[1]).toBeFalsy()
78
82
 
79
83
  document.body.removeChild(el)
80
84
  })
@@ -92,16 +96,24 @@ describe('mutate.ts', () => {
92
96
  },
93
97
  handler: callback,
94
98
  },
95
- } as any)
99
+ } as any, { context: { _uid: 1 } } as any)
96
100
 
97
- el._mutate.observer.trigger([{}])
101
+ el._mutate[1].observer.trigger([{}])
98
102
 
99
103
  expect(callback).toHaveBeenCalledTimes(1)
100
- expect(el._mutate.observer._observe).toHaveBeenLastCalledWith({ attributes: false, subtree: true })
104
+ expect(el._mutate[1].observer._observe).toHaveBeenLastCalledWith({ attributes: false, subtree: true })
101
105
 
102
106
  document.body.removeChild(el)
103
107
 
104
- Mutate.unbind(el)
108
+ Mutate.unbind(el, {
109
+ value: {
110
+ options: {
111
+ attributes: false,
112
+ subtree: true,
113
+ },
114
+ handler: callback,
115
+ },
116
+ } as any, { context: { _uid: 1 } } as any)
105
117
  })
106
118
 
107
119
  it('should work with observer modifiers', () => {
@@ -116,15 +128,22 @@ describe('mutate.ts', () => {
116
128
  child: true,
117
129
  sub: true,
118
130
  },
119
- } as any)
131
+ } as any, { context: { _uid: 1 } } as any)
120
132
 
121
- el._mutate.observer.trigger([{}])
133
+ el._mutate[1].observer.trigger([{}])
122
134
 
123
135
  expect(callback).toHaveBeenCalledTimes(1)
124
- expect(el._mutate.observer._observe).toHaveBeenLastCalledWith({ attributes: true, childList: true, subtree: true })
136
+ expect(el._mutate[1].observer._observe).toHaveBeenLastCalledWith({ attributes: true, childList: true, subtree: true })
125
137
 
126
138
  document.body.removeChild(el)
127
139
 
128
- Mutate.unbind(el)
140
+ Mutate.unbind(el, {
141
+ value: callback,
142
+ modifiers: {
143
+ attr: true,
144
+ child: true,
145
+ sub: true,
146
+ },
147
+ } as any, { context: { _uid: 1 } } as any)
129
148
  })
130
149
  })
@@ -1,4 +1,4 @@
1
- import { VNodeDirective } from 'vue'
1
+ import { VNode, VNodeDirective } from 'vue'
2
2
 
3
3
  type MutateHandler = (
4
4
  mutationsList: MutationRecord[],
@@ -16,7 +16,7 @@ interface MutateVNodeDirective extends Omit<VNodeDirective, 'modifiers'> {
16
16
  }
17
17
  }
18
18
 
19
- function inserted (el: HTMLElement, binding: MutateVNodeDirective) {
19
+ function inserted (el: HTMLElement, binding: MutateVNodeDirective, vnode: VNode) {
20
20
  const modifiers = binding.modifiers || {}
21
21
  const value = binding.value
22
22
  const callback = typeof value === 'object' ? value.handler : value!
@@ -52,19 +52,20 @@ function inserted (el: HTMLElement, binding: MutateVNodeDirective) {
52
52
  callback(mutationsList, observer)
53
53
 
54
54
  // If has the once modifier, unbind
55
- once && unbind(el)
55
+ once && unbind(el, binding, vnode)
56
56
  })
57
57
 
58
58
  observer.observe(el, options)
59
- el._mutate = { observer }
59
+ el._mutate = Object(el._mutate)
60
+ el._mutate![vnode.context!._uid] = { observer }
60
61
  }
61
62
 
62
- function unbind (el: HTMLElement) {
63
+ function unbind (el: HTMLElement, binding: MutateVNodeDirective, vnode: VNode) {
63
64
  /* istanbul ignore if */
64
65
  if (!el._mutate) return
65
66
 
66
- el._mutate.observer.disconnect()
67
- delete el._mutate
67
+ el._mutate[vnode.context!._uid].observer.disconnect()
68
+ delete el._mutate[vnode.context!._uid]
68
69
  }
69
70
 
70
71
  export const Mutate = {
@@ -8,10 +8,10 @@ describe('resize.ts', () => {
8
8
  jest.spyOn(window, 'removeEventListener')
9
9
  const el = {}
10
10
 
11
- Resize.inserted(el as HTMLElement, { value: callback } as any)
11
+ Resize.inserted(el as HTMLElement, { value: callback } as any, { context: { _uid: 1 } } as any)
12
12
  expect(callback).toHaveBeenCalled()
13
13
  expect(window.addEventListener).toHaveBeenCalledWith('resize', callback, { passive: true })
14
- Resize.unbind(el as HTMLElement)
14
+ Resize.unbind(el as HTMLElement, { value: callback } as any, { context: { _uid: 1 } } as any)
15
15
  expect(window.removeEventListener).toHaveBeenCalledWith('resize', callback, { passive: true })
16
16
  })
17
17
 
@@ -21,10 +21,10 @@ describe('resize.ts', () => {
21
21
  jest.spyOn(window, 'removeEventListener')
22
22
  const el = {}
23
23
 
24
- Resize.inserted(el as HTMLElement, { value: callback, modifiers: { quiet: true } } as any)
24
+ Resize.inserted(el as HTMLElement, { value: callback, modifiers: { quiet: true } } as any, { context: { _uid: 1 } } as any)
25
25
  expect(callback).not.toHaveBeenCalled()
26
26
  expect(window.addEventListener).toHaveBeenCalledWith('resize', callback, { passive: true })
27
- Resize.unbind(el as HTMLElement)
27
+ Resize.unbind(el as HTMLElement, { value: callback, modifiers: { quiet: true } } as any, { context: { _uid: 1 } } as any)
28
28
  expect(window.removeEventListener).toHaveBeenCalledWith('resize', callback, { passive: true })
29
29
  })
30
30
  })
@@ -1,16 +1,19 @@
1
1
  import { VNodeDirective } from 'vue/types/vnode'
2
+ import { VNode } from 'vue'
2
3
 
3
4
  interface ResizeVNodeDirective extends VNodeDirective {
4
5
  value?: () => void
5
6
  options?: boolean | AddEventListenerOptions
6
7
  }
7
8
 
8
- function inserted (el: HTMLElement, binding: ResizeVNodeDirective) {
9
+ function inserted (el: HTMLElement, binding: ResizeVNodeDirective, vnode: VNode) {
9
10
  const callback = binding.value!
10
11
  const options = binding.options || { passive: true }
11
12
 
12
13
  window.addEventListener('resize', callback, options)
13
- el._onResize = {
14
+
15
+ el._onResize = Object(el._onResize)
16
+ el._onResize![vnode.context!._uid] = {
14
17
  callback,
15
18
  options,
16
19
  }
@@ -20,12 +23,14 @@ function inserted (el: HTMLElement, binding: ResizeVNodeDirective) {
20
23
  }
21
24
  }
22
25
 
23
- function unbind (el: HTMLElement) {
26
+ function unbind (el: HTMLElement, binding: ResizeVNodeDirective, vnode: VNode) {
24
27
  if (!el._onResize) return
25
28
 
26
- const { callback, options } = el._onResize
29
+ const { callback, options } = el._onResize[vnode.context!._uid]
30
+
27
31
  window.removeEventListener('resize', callback, options)
28
- delete el._onResize
32
+
33
+ delete el._onResize[vnode.context!._uid]
29
34
  }
30
35
 
31
36
  export const Resize = {
@@ -12,7 +12,7 @@ describe('scroll.ts', () => {
12
12
  let vnode
13
13
 
14
14
  beforeEach(() => {
15
- vnode = null as any
15
+ vnode = { context: { _uid: 1 } } as any
16
16
  options = { passive: true }
17
17
  binding = {
18
18
  value: jest.fn(),
@@ -32,7 +32,7 @@ describe('scroll.ts', () => {
32
32
  inserted(el, binding, vnode, vnode)
33
33
 
34
34
  expect(spyOnWindowAddListener).toHaveBeenCalledWith('scroll', binding.value, options)
35
- expect(el._onScroll).toEqual({
35
+ expect(el._onScroll[1]).toEqual({
36
36
  handler: binding.value,
37
37
  options,
38
38
  target: window,
@@ -41,7 +41,7 @@ describe('scroll.ts', () => {
41
41
  unbind(el, binding, vnode, vnode)
42
42
 
43
43
  expect(spyOnWindowRemoveListener).toHaveBeenCalledWith('scroll', binding.value, options)
44
- expect(el._onScroll).toBeUndefined()
44
+ expect(el._onScroll[1]).toBeUndefined()
45
45
  })
46
46
 
47
47
  it('should work with a provided valid querySelector string', () => {
@@ -66,7 +66,7 @@ describe('scroll.ts', () => {
66
66
  inserted(el, binding, vnode, vnode)
67
67
 
68
68
  expect(spyOnFooAddListener).toHaveBeenCalledWith('scroll', binding.value, options)
69
- expect(el._onScroll).toEqual({
69
+ expect(el._onScroll[1]).toEqual({
70
70
  handler: binding.value,
71
71
  options,
72
72
  target,
@@ -75,7 +75,7 @@ describe('scroll.ts', () => {
75
75
  unbind(el, binding, vnode, vnode)
76
76
 
77
77
  expect(spyOnFooRemoveListener).toHaveBeenCalledWith('scroll', binding.value, options)
78
- expect(el._onScroll).toBeUndefined()
78
+ expect(el._onScroll[1]).toBeUndefined()
79
79
 
80
80
  document.body.removeChild(target)
81
81
  })
@@ -86,7 +86,7 @@ describe('scroll.ts', () => {
86
86
  inserted(el, binding, vnode, vnode)
87
87
 
88
88
  expect(el.addEventListener).toHaveBeenCalledWith('scroll', binding.value, options)
89
- expect(el._onScroll).toEqual({
89
+ expect(el._onScroll[1]).toEqual({
90
90
  handler: binding.value,
91
91
  options,
92
92
  target: undefined,
@@ -95,7 +95,7 @@ describe('scroll.ts', () => {
95
95
  unbind(el, binding, vnode, vnode)
96
96
 
97
97
  expect(el.removeEventListener).toHaveBeenCalledWith('scroll', binding.value, options)
98
- expect(el._onScroll).toBeUndefined()
98
+ expect(el._onScroll[1]).toBeUndefined()
99
99
  })
100
100
 
101
101
  it('should not remove listeners if no _onScroll property present', () => {
@@ -111,7 +111,7 @@ describe('scroll.ts', () => {
111
111
 
112
112
  inserted(el, binding, vnode, vnode)
113
113
 
114
- expect(el._onScroll).toEqual({
114
+ expect(el._onScroll[1]).toEqual({
115
115
  handler,
116
116
  target: window,
117
117
  options: { passive: true },
@@ -121,7 +121,7 @@ describe('scroll.ts', () => {
121
121
 
122
122
  inserted(el, binding, vnode, vnode)
123
123
 
124
- expect(el._onScroll).toEqual({
124
+ expect(el._onScroll[1]).toEqual({
125
125
  handler,
126
126
  target: window,
127
127
  options: { passive: false },
@@ -1,5 +1,5 @@
1
1
  import { VNodeDirective } from 'vue/types/vnode'
2
- import { DirectiveOptions } from 'vue'
2
+ import { DirectiveOptions, VNode } from 'vue'
3
3
 
4
4
  interface ScrollVNodeDirective extends Omit<VNodeDirective, 'modifiers'> {
5
5
  value: EventListener | {
@@ -11,7 +11,7 @@ interface ScrollVNodeDirective extends Omit<VNodeDirective, 'modifiers'> {
11
11
  }
12
12
  }
13
13
 
14
- function inserted (el: HTMLElement, binding: ScrollVNodeDirective) {
14
+ function inserted (el: HTMLElement, binding: ScrollVNodeDirective, vnode: VNode) {
15
15
  const { self = false } = binding.modifiers || {}
16
16
  const value = binding.value
17
17
  const options = (typeof value === 'object' && value.options) || { passive: true }
@@ -27,7 +27,8 @@ function inserted (el: HTMLElement, binding: ScrollVNodeDirective) {
27
27
 
28
28
  target.addEventListener('scroll', handler, options)
29
29
 
30
- el._onScroll = {
30
+ el._onScroll = Object(el._onScroll)
31
+ el._onScroll![vnode.context!._uid] = {
31
32
  handler,
32
33
  options,
33
34
  // Don't reference self
@@ -35,13 +36,13 @@ function inserted (el: HTMLElement, binding: ScrollVNodeDirective) {
35
36
  }
36
37
  }
37
38
 
38
- function unbind (el: HTMLElement) {
39
- if (!el._onScroll) return
39
+ function unbind (el: HTMLElement, binding: ScrollVNodeDirective, vnode: VNode) {
40
+ if (!el._onScroll?.[vnode.context!._uid]) return
40
41
 
41
- const { handler, options, target = el } = el._onScroll
42
+ const { handler, options, target = el } = el._onScroll[vnode.context!._uid]
42
43
 
43
44
  target.removeEventListener('scroll', handler, options)
44
- delete el._onScroll
45
+ delete el._onScroll[vnode.context!._uid]
45
46
  }
46
47
 
47
48
  export const Scroll = {
package/src/globals.d.ts CHANGED
@@ -29,15 +29,14 @@ declare global {
29
29
  }
30
30
 
31
31
  interface HTMLElement {
32
- _clickOutside?: {
33
- lastMousedownWasOutside: boolean
32
+ _clickOutside?: Record<number, {
34
33
  onClick: EventListener
35
34
  onMousedown: EventListener
36
- }
37
- _onResize?: {
35
+ }> & { lastMousedownWasOutside: boolean }
36
+ _onResize?: Record<number, {
38
37
  callback: () => void
39
38
  options?: boolean | AddEventListenerOptions
40
- }
39
+ }>
41
40
  _ripple?: {
42
41
  enabled?: boolean
43
42
  centered?: boolean
@@ -48,18 +47,18 @@ declare global {
48
47
  showTimer?: number
49
48
  showTimerCommit?: (() => void) | null
50
49
  }
51
- _observe?: {
50
+ _observe?: Record<number, {
52
51
  init: boolean
53
52
  observer: IntersectionObserver
54
- }
55
- _mutate?: {
53
+ }>
54
+ _mutate?: Record<number, {
56
55
  observer: MutationObserver
57
- }
58
- _onScroll?: {
56
+ }>
57
+ _onScroll?: Record<number, {
59
58
  handler: EventListenerOrEventListenerObject
60
59
  options: boolean | AddEventListenerOptions
61
60
  target?: EventTarget
62
- }
61
+ }>
63
62
  _touchHandlers?: {
64
63
  [_uid: number]: TouchStoredHandlers
65
64
  }
@@ -70,7 +69,6 @@ declare global {
70
69
  width: string
71
70
  height: string
72
71
  }
73
- _initialDisplay?: [string, string]
74
72
  }
75
73
 
76
74
  interface WheelEvent {
@@ -15,11 +15,14 @@ export default function intersectable (options: { onVisible: string[] }) {
15
15
  Intersect.inserted(this.$el as HTMLElement, {
16
16
  name: 'intersect',
17
17
  value: this.onObserve,
18
- })
18
+ }, this.$vnode)
19
19
  },
20
20
 
21
21
  destroyed () {
22
- Intersect.unbind(this.$el as HTMLElement)
22
+ Intersect.unbind(this.$el as HTMLElement, {
23
+ name: 'intersect',
24
+ value: this.onObserve,
25
+ }, this.$vnode)
23
26
  },
24
27
 
25
28
  methods: {
@@ -156,20 +156,32 @@ export default Vue.extend<Vue & Toggleable & Stackable & options>().extend({
156
156
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false
157
157
 
158
158
  const style = window.getComputedStyle(el)
159
- return ['auto', 'scroll'].includes(style.overflowY!) && el.scrollHeight > el.clientHeight
159
+ return ((['auto', 'scroll'].includes(style.overflowY!) || el.tagName === 'SELECT') && el.scrollHeight > el.clientHeight) ||
160
+ ((['auto', 'scroll'].includes(style.overflowX!)) && el.scrollWidth > el.clientWidth)
160
161
  },
161
- shouldScroll (el: Element, delta: number): boolean {
162
+ shouldScroll (el: Element, e: WheelEvent): boolean {
162
163
  if (el.hasAttribute('data-app')) return false
163
164
 
164
- const alreadyAtTop = el.scrollTop === 0
165
- const alreadyAtBottom = el.scrollTop + el.clientHeight === el.scrollHeight
165
+ const dir = e.shiftKey || e.deltaX ? 'x' : 'y'
166
+ const delta = dir === 'y' ? e.deltaY : e.deltaX || e.deltaY
167
+
168
+ let alreadyAtStart: boolean
169
+ let alreadyAtEnd: boolean
170
+ if (dir === 'y') {
171
+ alreadyAtStart = el.scrollTop === 0
172
+ alreadyAtEnd = el.scrollTop + el.clientHeight === el.scrollHeight
173
+ } else {
174
+ alreadyAtStart = el.scrollLeft === 0
175
+ alreadyAtEnd = el.scrollLeft + el.clientWidth === el.scrollWidth
176
+ }
177
+
166
178
  const scrollingUp = delta < 0
167
179
  const scrollingDown = delta > 0
168
180
 
169
- if (!alreadyAtTop && scrollingUp) return true
170
- if (!alreadyAtBottom && scrollingDown) return true
171
- if ((alreadyAtTop || alreadyAtBottom)) {
172
- return this.shouldScroll(el.parentNode as Element, delta)
181
+ if (!alreadyAtStart && scrollingUp) return true
182
+ if (!alreadyAtEnd && scrollingDown) return true
183
+ if ((alreadyAtStart || alreadyAtEnd)) {
184
+ return this.shouldScroll(el.parentNode as Element, e)
173
185
  }
174
186
 
175
187
  return false
@@ -185,14 +197,13 @@ export default Vue.extend<Vue & Toggleable & Stackable & options>().extend({
185
197
  },
186
198
  checkPath (e: WheelEvent) {
187
199
  const path = composedPath(e)
188
- const delta = e.deltaY
189
200
 
190
201
  if (e.type === 'keydown' && path[0] === document.body) {
191
202
  const dialog = this.$refs.dialog
192
203
  // getSelection returns null in firefox in some edge cases, can be ignored
193
204
  const selected = window.getSelection()!.anchorNode as Element
194
205
  if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {
195
- return !this.shouldScroll(dialog, delta)
206
+ return !this.shouldScroll(dialog, e)
196
207
  }
197
208
  return true
198
209
  }
@@ -204,7 +215,7 @@ export default Vue.extend<Vue & Toggleable & Stackable & options>().extend({
204
215
  if (el === document.documentElement) return true
205
216
  if (el === this.$refs.content) return true
206
217
 
207
- if (this.hasScrollbar(el as Element)) return !this.shouldScroll(el as Element, delta)
218
+ if (this.hasScrollbar(el as Element)) return !this.shouldScroll(el as Element, e)
208
219
  }
209
220
 
210
221
  return true