vuetify 2.6.0-beta.0 → 2.6.3

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 (278) hide show
  1. package/dist/json/attributes.json +108 -60
  2. package/dist/json/tags.json +18 -6
  3. package/dist/json/web-types.json +250 -102
  4. package/dist/vuetify.css +92 -41
  5. package/dist/vuetify.css.map +1 -1
  6. package/dist/vuetify.js +411 -286
  7. package/dist/vuetify.js.map +1 -1
  8. package/dist/vuetify.min.css +2 -2
  9. package/dist/vuetify.min.js +2 -2
  10. package/es5/components/VAutocomplete/VAutocomplete.js +20 -2
  11. package/es5/components/VAutocomplete/VAutocomplete.js.map +1 -1
  12. package/es5/components/VBanner/VBanner.js +3 -2
  13. package/es5/components/VBanner/VBanner.js.map +1 -1
  14. package/es5/components/VBottomNavigation/VBottomNavigation.js +10 -2
  15. package/es5/components/VBottomNavigation/VBottomNavigation.js.map +1 -1
  16. package/es5/components/VBottomSheet/VBottomSheet.js +1 -4
  17. package/es5/components/VBottomSheet/VBottomSheet.js.map +1 -1
  18. package/es5/components/VCalendar/VCalendar.js.map +1 -1
  19. package/es5/components/VCalendar/VCalendarDaily.js +27 -21
  20. package/es5/components/VCalendar/VCalendarDaily.js.map +1 -1
  21. package/es5/components/VCalendar/VCalendarWeekly.js +14 -10
  22. package/es5/components/VCalendar/VCalendarWeekly.js.map +1 -1
  23. package/es5/components/VCalendar/mixins/calendar-with-events.js +23 -22
  24. package/es5/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  25. package/es5/components/VCalendar/mixins/mouse.js +13 -4
  26. package/es5/components/VCalendar/mixins/mouse.js.map +1 -1
  27. package/es5/components/VCombobox/VCombobox.js +1 -6
  28. package/es5/components/VCombobox/VCombobox.js.map +1 -1
  29. package/es5/components/VData/VData.js +2 -8
  30. package/es5/components/VData/VData.js.map +1 -1
  31. package/es5/components/VDataTable/MobileRow.js +2 -2
  32. package/es5/components/VDataTable/MobileRow.js.map +1 -1
  33. package/es5/components/VDataTable/Row.js +2 -2
  34. package/es5/components/VDataTable/Row.js.map +1 -1
  35. package/es5/components/VDataTable/VDataTableHeaderDesktop.js +1 -1
  36. package/es5/components/VDataTable/VDataTableHeaderDesktop.js.map +1 -1
  37. package/es5/components/VDialog/VDialog.js +11 -17
  38. package/es5/components/VDialog/VDialog.js.map +1 -1
  39. package/es5/components/VItemGroup/VItemGroup.js +8 -4
  40. package/es5/components/VItemGroup/VItemGroup.js.map +1 -1
  41. package/es5/components/VList/VListItem.js +8 -1
  42. package/es5/components/VList/VListItem.js.map +1 -1
  43. package/es5/components/VMenu/VMenu.js +4 -6
  44. package/es5/components/VMenu/VMenu.js.map +1 -1
  45. package/es5/components/VNavigationDrawer/VNavigationDrawer.js +8 -12
  46. package/es5/components/VNavigationDrawer/VNavigationDrawer.js.map +1 -1
  47. package/es5/components/VOtpInput/VOtpInput.js +16 -25
  48. package/es5/components/VOtpInput/VOtpInput.js.map +1 -1
  49. package/es5/components/VOverlay/VOverlay.js +1 -0
  50. package/es5/components/VOverlay/VOverlay.js.map +1 -1
  51. package/es5/components/VRadioGroup/VRadioGroup.js +8 -3
  52. package/es5/components/VRadioGroup/VRadioGroup.js.map +1 -1
  53. package/es5/components/VRangeSlider/VRangeSlider.js +4 -1
  54. package/es5/components/VRangeSlider/VRangeSlider.js.map +1 -1
  55. package/es5/components/VSelect/VSelect.js +7 -2
  56. package/es5/components/VSelect/VSelect.js.map +1 -1
  57. package/es5/components/VSlideGroup/VSlideGroup.js +4 -3
  58. package/es5/components/VSlideGroup/VSlideGroup.js.map +1 -1
  59. package/es5/components/VStepper/VStepperStep.js +12 -1
  60. package/es5/components/VStepper/VStepperStep.js.map +1 -1
  61. package/es5/components/VTabs/VTab.js +18 -6
  62. package/es5/components/VTabs/VTab.js.map +1 -1
  63. package/es5/components/VTextField/VTextField.js +6 -1
  64. package/es5/components/VTextField/VTextField.js.map +1 -1
  65. package/es5/components/VTooltip/VTooltip.js +14 -8
  66. package/es5/components/VTooltip/VTooltip.js.map +1 -1
  67. package/es5/components/VTreeview/VTreeviewNode.js +3 -1
  68. package/es5/components/VTreeview/VTreeviewNode.js.map +1 -1
  69. package/es5/components/transitions/createTransition.js +0 -20
  70. package/es5/components/transitions/createTransition.js.map +1 -1
  71. package/es5/directives/click-outside/index.js +21 -10
  72. package/es5/directives/click-outside/index.js.map +1 -1
  73. package/es5/directives/intersect/index.js +16 -12
  74. package/es5/directives/intersect/index.js.map +1 -1
  75. package/es5/directives/mutate/index.js +10 -8
  76. package/es5/directives/mutate/index.js.map +1 -1
  77. package/es5/directives/resize/index.js +11 -8
  78. package/es5/directives/resize/index.js.map +1 -1
  79. package/es5/directives/ripple/index.js +0 -7
  80. package/es5/directives/ripple/index.js.map +1 -1
  81. package/es5/directives/scroll/index.js +13 -10
  82. package/es5/directives/scroll/index.js.map +1 -1
  83. package/es5/framework.js +1 -1
  84. package/es5/locale/fr.js +1 -1
  85. package/es5/locale/fr.js.map +1 -1
  86. package/es5/locale/it.js +6 -6
  87. package/es5/locale/it.js.map +1 -1
  88. package/es5/mixins/activatable/index.js +6 -2
  89. package/es5/mixins/activatable/index.js.map +1 -1
  90. package/es5/mixins/detachable/index.js +32 -14
  91. package/es5/mixins/detachable/index.js.map +1 -1
  92. package/es5/mixins/intersectable/index.js +11 -2
  93. package/es5/mixins/intersectable/index.js.map +1 -1
  94. package/es5/mixins/menuable/index.js +11 -9
  95. package/es5/mixins/menuable/index.js.map +1 -1
  96. package/es5/mixins/overlayable/index.js +21 -11
  97. package/es5/mixins/overlayable/index.js.map +1 -1
  98. package/es5/mixins/routable/index.js +12 -9
  99. package/es5/mixins/routable/index.js.map +1 -1
  100. package/es5/services/application/index.js +1 -3
  101. package/es5/services/application/index.js.map +1 -1
  102. package/es5/util/helpers.js +5 -5
  103. package/es5/util/helpers.js.map +1 -1
  104. package/lib/components/VAutocomplete/VAutocomplete.js +18 -2
  105. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  106. package/lib/components/VBanner/VBanner.js +3 -2
  107. package/lib/components/VBanner/VBanner.js.map +1 -1
  108. package/lib/components/VBottomNavigation/VBottomNavigation.js +10 -2
  109. package/lib/components/VBottomNavigation/VBottomNavigation.js.map +1 -1
  110. package/lib/components/VBottomSheet/VBottomSheet.js +1 -4
  111. package/lib/components/VBottomSheet/VBottomSheet.js.map +1 -1
  112. package/lib/components/VCalendar/VCalendar.js.map +1 -1
  113. package/lib/components/VCalendar/VCalendarDaily.js +27 -15
  114. package/lib/components/VCalendar/VCalendarDaily.js.map +1 -1
  115. package/lib/components/VCalendar/VCalendarWeekly.js +10 -2
  116. package/lib/components/VCalendar/VCalendarWeekly.js.map +1 -1
  117. package/lib/components/VCalendar/mixins/calendar-with-events.js +10 -5
  118. package/lib/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  119. package/lib/components/VCalendar/mixins/mouse.js +9 -4
  120. package/lib/components/VCalendar/mixins/mouse.js.map +1 -1
  121. package/lib/components/VCombobox/VCombobox.js +1 -6
  122. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  123. package/lib/components/VData/VData.js +2 -4
  124. package/lib/components/VData/VData.js.map +1 -1
  125. package/lib/components/VDataTable/MobileRow.js +2 -2
  126. package/lib/components/VDataTable/MobileRow.js.map +1 -1
  127. package/lib/components/VDataTable/Row.js +2 -2
  128. package/lib/components/VDataTable/Row.js.map +1 -1
  129. package/lib/components/VDataTable/VDataTableHeaderDesktop.js +1 -1
  130. package/lib/components/VDataTable/VDataTableHeaderDesktop.js.map +1 -1
  131. package/lib/components/VDialog/VDialog.js +11 -16
  132. package/lib/components/VDialog/VDialog.js.map +1 -1
  133. package/lib/components/VItemGroup/VItemGroup.js +7 -5
  134. package/lib/components/VItemGroup/VItemGroup.js.map +1 -1
  135. package/lib/components/VList/VListItem.js +9 -1
  136. package/lib/components/VList/VListItem.js.map +1 -1
  137. package/lib/components/VMenu/VMenu.js +4 -6
  138. package/lib/components/VMenu/VMenu.js.map +1 -1
  139. package/lib/components/VNavigationDrawer/VNavigationDrawer.js +4 -8
  140. package/lib/components/VNavigationDrawer/VNavigationDrawer.js.map +1 -1
  141. package/lib/components/VOtpInput/VOtpInput.js +16 -25
  142. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  143. package/lib/components/VOverlay/VOverlay.js +1 -0
  144. package/lib/components/VOverlay/VOverlay.js.map +1 -1
  145. package/lib/components/VRadioGroup/VRadioGroup.js +11 -4
  146. package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
  147. package/lib/components/VRangeSlider/VRangeSlider.js +4 -1
  148. package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
  149. package/lib/components/VSelect/VSelect.js +7 -2
  150. package/lib/components/VSelect/VSelect.js.map +1 -1
  151. package/lib/components/VSlideGroup/VSlideGroup.js +5 -4
  152. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  153. package/lib/components/VStepper/VStepperStep.js +12 -1
  154. package/lib/components/VStepper/VStepperStep.js.map +1 -1
  155. package/lib/components/VTabs/VTab.js +19 -8
  156. package/lib/components/VTabs/VTab.js.map +1 -1
  157. package/lib/components/VTextField/VTextField.js +8 -1
  158. package/lib/components/VTextField/VTextField.js.map +1 -1
  159. package/lib/components/VTooltip/VTooltip.js +14 -8
  160. package/lib/components/VTooltip/VTooltip.js.map +1 -1
  161. package/lib/components/VTreeview/VTreeviewNode.js +3 -1
  162. package/lib/components/VTreeview/VTreeviewNode.js.map +1 -1
  163. package/lib/components/transitions/createTransition.js +0 -6
  164. package/lib/components/transitions/createTransition.js.map +1 -1
  165. package/lib/directives/click-outside/index.js +22 -10
  166. package/lib/directives/click-outside/index.js.map +1 -1
  167. package/lib/directives/intersect/index.js +16 -12
  168. package/lib/directives/intersect/index.js.map +1 -1
  169. package/lib/directives/mutate/index.js +10 -8
  170. package/lib/directives/mutate/index.js.map +1 -1
  171. package/lib/directives/resize/index.js +9 -6
  172. package/lib/directives/resize/index.js.map +1 -1
  173. package/lib/directives/ripple/index.js +0 -7
  174. package/lib/directives/ripple/index.js.map +1 -1
  175. package/lib/directives/scroll/index.js +9 -6
  176. package/lib/directives/scroll/index.js.map +1 -1
  177. package/lib/framework.js +1 -1
  178. package/lib/locale/fr.js +1 -1
  179. package/lib/locale/fr.js.map +1 -1
  180. package/lib/locale/it.js +6 -6
  181. package/lib/locale/it.js.map +1 -1
  182. package/lib/mixins/activatable/index.js +6 -2
  183. package/lib/mixins/activatable/index.js.map +1 -1
  184. package/lib/mixins/detachable/index.js +28 -13
  185. package/lib/mixins/detachable/index.js.map +1 -1
  186. package/lib/mixins/intersectable/index.js +9 -2
  187. package/lib/mixins/intersectable/index.js.map +1 -1
  188. package/lib/mixins/menuable/index.js +11 -9
  189. package/lib/mixins/menuable/index.js.map +1 -1
  190. package/lib/mixins/overlayable/index.js +21 -11
  191. package/lib/mixins/overlayable/index.js.map +1 -1
  192. package/lib/mixins/routable/index.js +16 -9
  193. package/lib/mixins/routable/index.js.map +1 -1
  194. package/lib/services/application/index.js +1 -3
  195. package/lib/services/application/index.js.map +1 -1
  196. package/lib/util/helpers.js +5 -5
  197. package/lib/util/helpers.js.map +1 -1
  198. package/package.json +2 -2
  199. package/src/components/VAutocomplete/VAutocomplete.ts +15 -2
  200. package/src/components/VBanner/VBanner.ts +16 -10
  201. package/src/components/VBottomNavigation/VBottomNavigation.ts +14 -2
  202. package/src/components/VBottomNavigation/__tests__/VBottomNavigation.spec.ts +9 -7
  203. package/src/components/VBottomSheet/VBottomSheet.ts +1 -4
  204. package/src/components/VCalendar/VCalendar.ts +1 -0
  205. package/src/components/VCalendar/VCalendarCategory.sass +10 -3
  206. package/src/components/VCalendar/VCalendarDaily.ts +14 -13
  207. package/src/components/VCalendar/VCalendarWeekly.ts +4 -2
  208. package/src/components/VCalendar/mixins/calendar-with-events.sass +7 -1
  209. package/src/components/VCalendar/mixins/calendar-with-events.ts +7 -6
  210. package/src/components/VCalendar/mixins/mouse.ts +10 -4
  211. package/src/components/VCombobox/VCombobox.ts +1 -6
  212. package/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts +113 -0
  213. package/src/components/VCombobox/__tests__/VCombobox.spec.ts +32 -2
  214. package/src/components/VData/VData.ts +2 -4
  215. package/src/components/VDataTable/MobileRow.ts +2 -2
  216. package/src/components/VDataTable/Row.ts +2 -2
  217. package/src/components/VDataTable/VDataTableHeaderDesktop.ts +1 -1
  218. package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +4 -4
  219. package/src/components/VDialog/VDialog.sass +1 -1
  220. package/src/components/VDialog/VDialog.ts +10 -14
  221. package/src/components/VDialog/__tests__/__snapshots__/VDialog.spec.ts.snap +14 -32
  222. package/src/components/VImg/__tests__/VImg.spec.ts +1 -1
  223. package/src/components/VItemGroup/VItemGroup.ts +5 -3
  224. package/src/components/VItemGroup/__tests__/VItemGroup.spec.ts +19 -2
  225. package/src/components/VList/VListItem.sass +2 -1
  226. package/src/components/VList/VListItem.ts +7 -1
  227. package/src/components/VList/__tests__/VListItem.spec.ts +16 -0
  228. package/src/components/VMenu/VMenu.ts +2 -6
  229. package/src/components/VNavigationDrawer/VNavigationDrawer.ts +4 -7
  230. package/src/components/VNavigationDrawer/__tests__/VNavigationDrawer.spec.ts +1 -1
  231. package/src/components/VOtpInput/VOtpInput.sass +13 -16
  232. package/src/components/VOtpInput/VOtpInput.ts +14 -28
  233. package/src/components/VOtpInput/_variables.scss +2 -4
  234. package/src/components/VOverlay/VOverlay.ts +1 -0
  235. package/src/components/VRadioGroup/VRadioGroup.ts +8 -4
  236. package/src/components/VRangeSlider/VRangeSlider.ts +3 -1
  237. package/src/components/VSelect/VSelect.ts +5 -1
  238. package/src/components/VSlideGroup/VSlideGroup.ts +8 -2
  239. package/src/components/VStepper/VStepper.sass +4 -4
  240. package/src/components/VStepper/VStepperStep.ts +14 -2
  241. package/src/components/VStepper/__tests__/__snapshots__/VStepperStep.spec.ts.snap +18 -6
  242. package/src/components/VTabs/VTab.ts +24 -6
  243. package/src/components/VTabs/VTabs.sass +5 -2
  244. package/src/components/VTextField/VTextField.ts +8 -3
  245. package/src/components/VTextarea/VTextarea.sass +13 -0
  246. package/src/components/VTooltip/VTooltip.ts +14 -7
  247. package/src/components/VTreeview/VTreeviewNode.ts +3 -1
  248. package/src/components/transitions/createTransition.ts +0 -8
  249. package/src/directives/click-outside/__tests__/click-outside-shadow-dom.spec.ts +9 -6
  250. package/src/directives/click-outside/__tests__/click-outside.spec.ts +7 -4
  251. package/src/directives/click-outside/index.ts +19 -10
  252. package/src/directives/intersect/__tests__/intersect.spec.ts +13 -10
  253. package/src/directives/intersect/index.ts +15 -13
  254. package/src/directives/mutate/__tests__/mutate.spec.ts +36 -17
  255. package/src/directives/mutate/index.ts +9 -9
  256. package/src/directives/resize/__tests__/resize.spec.ts +4 -4
  257. package/src/directives/resize/index.ts +11 -6
  258. package/src/directives/ripple/VRipple.sass +4 -1
  259. package/src/directives/ripple/index.ts +0 -7
  260. package/src/directives/scroll/__tests__/scroll.spec.ts +9 -9
  261. package/src/directives/scroll/index.ts +8 -7
  262. package/src/globals.d.ts +10 -12
  263. package/src/locale/fr.ts +1 -1
  264. package/src/locale/it.ts +6 -6
  265. package/src/mixins/activatable/__tests__/__snapshots__/activatable.spec.ts.snap +1 -2
  266. package/src/mixins/activatable/index.ts +6 -2
  267. package/src/mixins/detachable/index.ts +32 -15
  268. package/src/mixins/intersectable/index.ts +11 -2
  269. package/src/mixins/menuable/index.ts +10 -8
  270. package/src/mixins/overlayable/index.ts +22 -11
  271. package/src/mixins/routable/__tests__/routable.spec.ts +82 -5
  272. package/src/mixins/routable/index.ts +12 -8
  273. package/src/services/application/index.ts +1 -1
  274. package/src/styles/generic/_transitions.scss +219 -215
  275. package/src/styles/settings/_variables.scss +11 -10
  276. package/src/util/helpers.ts +5 -5
  277. package/types/lib.d.ts +2 -0
  278. package/src/directives/ripple/_variables.scss +0 -6
@@ -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
- if (!app || !el._clickOutside) return
102
- app.removeEventListener('click', el._clickOutside.onClick, true)
103
- app.removeEventListener('mousedown', el._clickOutside.onMousedown, true)
107
+ if (!app || !el._clickOutside?.[vnode.context!._uid]) return
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,8 +27,8 @@ 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
+ const _observe = el._observe?.[vnode.context!._uid]
31
+ if (!_observe) return // Just in case, should never fire
31
32
 
32
33
  const isIntersecting = entries.some(entry => entry.isIntersecting)
33
34
 
@@ -36,31 +37,32 @@ 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
- if (!el._observe) return
60
+ function unbind (el: HTMLElement, binding: ObserveVNodeDirective, vnode: VNode) {
61
+ const observe = el._observe?.[vnode.context!._uid]
62
+ if (!observe) return
61
63
 
62
- el._observe.observer.unobserve(el)
63
- delete el._observe
64
+ observe.observer.unobserve(el)
65
+ delete el._observe![vnode.context!._uid]
64
66
  }
65
67
 
66
68
  export const Intersect = {
@@ -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,19 @@ 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
- /* istanbul ignore if */
64
- if (!el._mutate) return
63
+ function unbind (el: HTMLElement, binding: MutateVNodeDirective, vnode: VNode) {
64
+ if (!el._mutate?.[vnode.context!._uid]) return
65
65
 
66
- el._mutate.observer.disconnect()
67
- delete el._mutate
66
+ el._mutate[vnode.context!._uid]!.observer.disconnect()
67
+ delete el._mutate[vnode.context!._uid]
68
68
  }
69
69
 
70
70
  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) {
24
- if (!el._onResize) return
26
+ function unbind (el: HTMLElement, binding: ResizeVNodeDirective, vnode: VNode) {
27
+ if (!el._onResize?.[vnode.context!._uid]) return
28
+
29
+ const { callback, options } = el._onResize[vnode.context!._uid]!
25
30
 
26
- const { callback, options } = el._onResize
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 = {
@@ -1,4 +1,4 @@
1
- @import './_variables.scss'
1
+ @import '../../styles/styles.sass'
2
2
 
3
3
  .v-ripple
4
4
  &__container
@@ -28,9 +28,12 @@
28
28
 
29
29
  &--enter
30
30
  transition: none
31
+ opacity: 0
31
32
 
32
33
  &--in
33
34
  transition: $ripple-animation-transition-in
35
+ opacity: $ripple-animation-visible-opacity
34
36
 
35
37
  &--out
36
38
  transition: $ripple-animation-transition-out
39
+ opacity: 0
@@ -17,10 +17,6 @@ function transform (el: HTMLElement, value: string) {
17
17
  el.style.webkitTransform = value
18
18
  }
19
19
 
20
- function opacity (el: HTMLElement, value: number) {
21
- el.style.opacity = value.toString()
22
- }
23
-
24
20
  export interface RippleOptions {
25
21
  class?: string
26
22
  center?: boolean
@@ -109,14 +105,12 @@ const ripples = {
109
105
  animation.classList.add('v-ripple__animation--enter')
110
106
  animation.classList.add('v-ripple__animation--visible')
111
107
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)
112
- opacity(animation, 0)
113
108
  animation.dataset.activated = String(performance.now())
114
109
 
115
110
  setTimeout(() => {
116
111
  animation.classList.remove('v-ripple__animation--enter')
117
112
  animation.classList.add('v-ripple__animation--in')
118
113
  transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)
119
- opacity(animation, 0.25)
120
114
  }, 0)
121
115
  },
122
116
 
@@ -137,7 +131,6 @@ const ripples = {
137
131
  setTimeout(() => {
138
132
  animation.classList.remove('v-ripple__animation--in')
139
133
  animation.classList.add('v-ripple__animation--out')
140
- opacity(animation, 0)
141
134
 
142
135
  setTimeout(() => {
143
136
  const ripples = el.getElementsByClassName('v-ripple__animation')
@@ -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
+ } | undefined> & { lastMousedownWasOutside: boolean }
36
+ _onResize?: Record<number, {
38
37
  callback: () => void
39
38
  options?: boolean | AddEventListenerOptions
40
- }
39
+ } | undefined>
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
+ } | undefined>
54
+ _mutate?: Record<number, {
56
55
  observer: MutationObserver
57
- }
58
- _onScroll?: {
56
+ } | undefined>
57
+ _onScroll?: Record<number, {
59
58
  handler: EventListenerOrEventListenerObject
60
59
  options: boolean | AddEventListenerOptions
61
60
  target?: EventTarget
62
- }
61
+ } | undefined>
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 {
package/src/locale/fr.ts CHANGED
@@ -63,7 +63,7 @@ export default {
63
63
  },
64
64
  rating: {
65
65
  ariaLabel: {
66
- icon: 'Rating {0} of {1}',
66
+ icon: 'Note de {0} sur {1}',
67
67
  },
68
68
  },
69
69
  }