vuetify 2.6.0-beta.0 → 2.6.0

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 (166) hide show
  1. package/dist/json/attributes.json +64 -60
  2. package/dist/json/tags.json +1 -0
  3. package/dist/json/web-types.json +128 -92
  4. package/dist/vuetify.css +37 -33
  5. package/dist/vuetify.css.map +1 -1
  6. package/dist/vuetify.js +244 -146
  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/VCalendar/VCalendarDaily.js +13 -15
  13. package/es5/components/VCalendar/VCalendarDaily.js.map +1 -1
  14. package/es5/components/VCalendar/mixins/calendar-with-events.js +4 -2
  15. package/es5/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  16. package/es5/components/VCalendar/mixins/mouse.js +1 -1
  17. package/es5/components/VCalendar/mixins/mouse.js.map +1 -1
  18. package/es5/components/VCombobox/VCombobox.js +0 -5
  19. package/es5/components/VCombobox/VCombobox.js.map +1 -1
  20. package/es5/components/VDialog/VDialog.js +4 -2
  21. package/es5/components/VDialog/VDialog.js.map +1 -1
  22. package/es5/components/VList/VListItem.js +8 -1
  23. package/es5/components/VList/VListItem.js.map +1 -1
  24. package/es5/components/VMenu/VMenu.js +1 -1
  25. package/es5/components/VMenu/VMenu.js.map +1 -1
  26. package/es5/components/VOtpInput/VOtpInput.js +14 -25
  27. package/es5/components/VOtpInput/VOtpInput.js.map +1 -1
  28. package/es5/components/VOverlay/VOverlay.js +1 -0
  29. package/es5/components/VOverlay/VOverlay.js.map +1 -1
  30. package/es5/components/VRadioGroup/VRadioGroup.js +7 -0
  31. package/es5/components/VRadioGroup/VRadioGroup.js.map +1 -1
  32. package/es5/components/VRangeSlider/VRangeSlider.js +4 -1
  33. package/es5/components/VRangeSlider/VRangeSlider.js.map +1 -1
  34. package/es5/components/VSelect/VSelect.js +1 -1
  35. package/es5/components/VSelect/VSelect.js.map +1 -1
  36. package/es5/components/VTabs/VTab.js +15 -4
  37. package/es5/components/VTabs/VTab.js.map +1 -1
  38. package/es5/components/VTextField/VTextField.js +6 -1
  39. package/es5/components/VTextField/VTextField.js.map +1 -1
  40. package/es5/components/VTreeview/VTreeviewNode.js +3 -1
  41. package/es5/components/VTreeview/VTreeviewNode.js.map +1 -1
  42. package/es5/components/transitions/createTransition.js +0 -20
  43. package/es5/components/transitions/createTransition.js.map +1 -1
  44. package/es5/directives/click-outside/index.js +21 -10
  45. package/es5/directives/click-outside/index.js.map +1 -1
  46. package/es5/directives/intersect/index.js +16 -12
  47. package/es5/directives/intersect/index.js.map +1 -1
  48. package/es5/directives/mutate/index.js +10 -8
  49. package/es5/directives/mutate/index.js.map +1 -1
  50. package/es5/directives/resize/index.js +11 -8
  51. package/es5/directives/resize/index.js.map +1 -1
  52. package/es5/directives/scroll/index.js +13 -10
  53. package/es5/directives/scroll/index.js.map +1 -1
  54. package/es5/framework.js +1 -1
  55. package/es5/locale/fr.js +1 -1
  56. package/es5/locale/fr.js.map +1 -1
  57. package/es5/mixins/detachable/index.js +32 -14
  58. package/es5/mixins/detachable/index.js.map +1 -1
  59. package/es5/mixins/intersectable/index.js +11 -2
  60. package/es5/mixins/intersectable/index.js.map +1 -1
  61. package/es5/mixins/overlayable/index.js +21 -11
  62. package/es5/mixins/overlayable/index.js.map +1 -1
  63. package/es5/mixins/routable/index.js +9 -3
  64. package/es5/mixins/routable/index.js.map +1 -1
  65. package/lib/components/VAutocomplete/VAutocomplete.js +18 -2
  66. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  67. package/lib/components/VCalendar/VCalendarDaily.js +9 -9
  68. package/lib/components/VCalendar/VCalendarDaily.js.map +1 -1
  69. package/lib/components/VCalendar/mixins/calendar-with-events.js +4 -2
  70. package/lib/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  71. package/lib/components/VCalendar/mixins/mouse.js +1 -1
  72. package/lib/components/VCalendar/mixins/mouse.js.map +1 -1
  73. package/lib/components/VCombobox/VCombobox.js +0 -5
  74. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  75. package/lib/components/VDialog/VDialog.js +5 -2
  76. package/lib/components/VDialog/VDialog.js.map +1 -1
  77. package/lib/components/VList/VListItem.js +9 -1
  78. package/lib/components/VList/VListItem.js.map +1 -1
  79. package/lib/components/VMenu/VMenu.js +1 -1
  80. package/lib/components/VMenu/VMenu.js.map +1 -1
  81. package/lib/components/VOtpInput/VOtpInput.js +14 -25
  82. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  83. package/lib/components/VOverlay/VOverlay.js +1 -0
  84. package/lib/components/VOverlay/VOverlay.js.map +1 -1
  85. package/lib/components/VRadioGroup/VRadioGroup.js +9 -0
  86. package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
  87. package/lib/components/VRangeSlider/VRangeSlider.js +4 -1
  88. package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
  89. package/lib/components/VSelect/VSelect.js +1 -1
  90. package/lib/components/VSelect/VSelect.js.map +1 -1
  91. package/lib/components/VTabs/VTab.js +16 -6
  92. package/lib/components/VTabs/VTab.js.map +1 -1
  93. package/lib/components/VTextField/VTextField.js +8 -1
  94. package/lib/components/VTextField/VTextField.js.map +1 -1
  95. package/lib/components/VTreeview/VTreeviewNode.js +3 -1
  96. package/lib/components/VTreeview/VTreeviewNode.js.map +1 -1
  97. package/lib/components/transitions/createTransition.js +0 -6
  98. package/lib/components/transitions/createTransition.js.map +1 -1
  99. package/lib/directives/click-outside/index.js +22 -10
  100. package/lib/directives/click-outside/index.js.map +1 -1
  101. package/lib/directives/intersect/index.js +16 -12
  102. package/lib/directives/intersect/index.js.map +1 -1
  103. package/lib/directives/mutate/index.js +10 -8
  104. package/lib/directives/mutate/index.js.map +1 -1
  105. package/lib/directives/resize/index.js +9 -6
  106. package/lib/directives/resize/index.js.map +1 -1
  107. package/lib/directives/scroll/index.js +9 -6
  108. package/lib/directives/scroll/index.js.map +1 -1
  109. package/lib/framework.js +1 -1
  110. package/lib/locale/fr.js +1 -1
  111. package/lib/locale/fr.js.map +1 -1
  112. package/lib/mixins/detachable/index.js +28 -13
  113. package/lib/mixins/detachable/index.js.map +1 -1
  114. package/lib/mixins/intersectable/index.js +9 -2
  115. package/lib/mixins/intersectable/index.js.map +1 -1
  116. package/lib/mixins/overlayable/index.js +21 -11
  117. package/lib/mixins/overlayable/index.js.map +1 -1
  118. package/lib/mixins/routable/index.js +12 -3
  119. package/lib/mixins/routable/index.js.map +1 -1
  120. package/package.json +2 -2
  121. package/src/components/VAutocomplete/VAutocomplete.ts +15 -2
  122. package/src/components/VCalendar/VCalendarDaily.ts +7 -7
  123. package/src/components/VCalendar/mixins/calendar-with-events.sass +7 -1
  124. package/src/components/VCalendar/mixins/calendar-with-events.ts +3 -3
  125. package/src/components/VCalendar/mixins/mouse.ts +1 -1
  126. package/src/components/VCombobox/VCombobox.ts +0 -5
  127. package/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts +113 -0
  128. package/src/components/VCombobox/__tests__/VCombobox.spec.ts +30 -0
  129. package/src/components/VDialog/VDialog.ts +4 -2
  130. package/src/components/VImg/__tests__/VImg.spec.ts +1 -1
  131. package/src/components/VList/VListItem.sass +2 -1
  132. package/src/components/VList/VListItem.ts +7 -1
  133. package/src/components/VList/__tests__/VListItem.spec.ts +16 -0
  134. package/src/components/VMenu/VMenu.ts +1 -1
  135. package/src/components/VOtpInput/VOtpInput.sass +13 -16
  136. package/src/components/VOtpInput/VOtpInput.ts +12 -28
  137. package/src/components/VOtpInput/_variables.scss +2 -4
  138. package/src/components/VOverlay/VOverlay.ts +1 -0
  139. package/src/components/VRadioGroup/VRadioGroup.ts +8 -0
  140. package/src/components/VRangeSlider/VRangeSlider.ts +3 -1
  141. package/src/components/VSelect/VSelect.ts +1 -1
  142. package/src/components/VTabs/VTab.ts +14 -4
  143. package/src/components/VTabs/VTabs.sass +5 -2
  144. package/src/components/VTextField/VTextField.ts +8 -3
  145. package/src/components/VTreeview/VTreeviewNode.ts +3 -1
  146. package/src/components/transitions/createTransition.ts +0 -8
  147. package/src/directives/click-outside/__tests__/click-outside-shadow-dom.spec.ts +9 -6
  148. package/src/directives/click-outside/__tests__/click-outside.spec.ts +7 -4
  149. package/src/directives/click-outside/index.ts +19 -10
  150. package/src/directives/intersect/__tests__/intersect.spec.ts +13 -10
  151. package/src/directives/intersect/index.ts +15 -13
  152. package/src/directives/mutate/__tests__/mutate.spec.ts +36 -17
  153. package/src/directives/mutate/index.ts +9 -9
  154. package/src/directives/resize/__tests__/resize.spec.ts +4 -4
  155. package/src/directives/resize/index.ts +11 -6
  156. package/src/directives/scroll/__tests__/scroll.spec.ts +9 -9
  157. package/src/directives/scroll/index.ts +8 -7
  158. package/src/globals.d.ts +10 -12
  159. package/src/locale/fr.ts +1 -1
  160. package/src/mixins/detachable/index.ts +32 -15
  161. package/src/mixins/intersectable/index.ts +11 -2
  162. package/src/mixins/overlayable/index.ts +22 -11
  163. package/src/mixins/routable/__tests__/routable.spec.ts +82 -5
  164. package/src/mixins/routable/index.ts +10 -3
  165. package/src/styles/generic/_transitions.scss +219 -215
  166. package/src/styles/settings/_variables.scss +10 -9
@@ -108,20 +108,31 @@ export default Vue.extend().extend({
108
108
  hasScrollbar(el) {
109
109
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
110
110
  const style = window.getComputedStyle(el);
111
- return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight;
111
+ return (['auto', 'scroll'].includes(style.overflowY) || el.tagName === 'SELECT') && el.scrollHeight > el.clientHeight || ['auto', 'scroll'].includes(style.overflowX) && el.scrollWidth > el.clientWidth;
112
112
  },
113
113
 
114
- shouldScroll(el, delta) {
114
+ shouldScroll(el, e) {
115
115
  if (el.hasAttribute('data-app')) return false;
116
- const alreadyAtTop = el.scrollTop === 0;
117
- const alreadyAtBottom = el.scrollTop + el.clientHeight === el.scrollHeight;
116
+ const dir = e.shiftKey || e.deltaX ? 'x' : 'y';
117
+ const delta = dir === 'y' ? e.deltaY : e.deltaX || e.deltaY;
118
+ let alreadyAtStart;
119
+ let alreadyAtEnd;
120
+
121
+ if (dir === 'y') {
122
+ alreadyAtStart = el.scrollTop === 0;
123
+ alreadyAtEnd = el.scrollTop + el.clientHeight === el.scrollHeight;
124
+ } else {
125
+ alreadyAtStart = el.scrollLeft === 0;
126
+ alreadyAtEnd = el.scrollLeft + el.clientWidth === el.scrollWidth;
127
+ }
128
+
118
129
  const scrollingUp = delta < 0;
119
130
  const scrollingDown = delta > 0;
120
- if (!alreadyAtTop && scrollingUp) return true;
121
- if (!alreadyAtBottom && scrollingDown) return true;
131
+ if (!alreadyAtStart && scrollingUp) return true;
132
+ if (!alreadyAtEnd && scrollingDown) return true;
122
133
 
123
- if (alreadyAtTop || alreadyAtBottom) {
124
- return this.shouldScroll(el.parentNode, delta);
134
+ if (alreadyAtStart || alreadyAtEnd) {
135
+ return this.shouldScroll(el.parentNode, e);
125
136
  }
126
137
 
127
138
  return false;
@@ -139,7 +150,6 @@ export default Vue.extend().extend({
139
150
 
140
151
  checkPath(e) {
141
152
  const path = composedPath(e);
142
- const delta = e.deltaY;
143
153
 
144
154
  if (e.type === 'keydown' && path[0] === document.body) {
145
155
  const dialog = this.$refs.dialog; // getSelection returns null in firefox in some edge cases, can be ignored
@@ -147,7 +157,7 @@ export default Vue.extend().extend({
147
157
  const selected = window.getSelection().anchorNode;
148
158
 
149
159
  if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {
150
- return !this.shouldScroll(dialog, delta);
160
+ return !this.shouldScroll(dialog, e);
151
161
  }
152
162
 
153
163
  return true;
@@ -158,7 +168,7 @@ export default Vue.extend().extend({
158
168
  if (el === document) return true;
159
169
  if (el === document.documentElement) return true;
160
170
  if (el === this.$refs.content) return true;
161
- if (this.hasScrollbar(el)) return !this.shouldScroll(el, delta);
171
+ if (this.hasScrollbar(el)) return !this.shouldScroll(el, e);
162
172
  }
163
173
 
164
174
  return true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/overlayable/index.ts"],"names":[],"mappings":"AAAA;AACA,OAAO,QAAP,MAAqB,2BAArB,C,CAEA;;AACA,SACE,QADF,EAEE,oBAFF,EAGE,uBAHF,EAIE,SAJF,EAKE,YALF,QAMO,oBANP,C,CAQA;;AACA,OAAO,GAAP,MAAgB,KAAhB;AAkBA;;AACA,eAAe,GAAG,CAAC,MAAJ,GAAqD,MAArD,CAA4D;AACzE,EAAA,IAAI,EAAE,aADmE;AAGzE,EAAA,KAAK,EAAE;AACL,IAAA,WAAW,EAAE,OADR;AAEL,IAAA,YAAY,EAAE,MAFT;AAGL,IAAA,cAAc,EAAE,CAAC,MAAD,EAAS,MAAT;AAHX,GAHkE;;AASzE,EAAA,IAAI,GAAA;AACF,WAAO;AACL,MAAA,cAAc,EAAE,CADX;AAEL,MAAA,OAAO,EAAE;AAFJ,KAAP;AAID,GAdwE;;AAgBzE,EAAA,KAAK,EAAE;AACL,IAAA,WAAW,CAAE,KAAF,EAAO;AAChB,UAAI,CAAC,KAAK,QAAV,EAAoB;AAEpB,UAAI,KAAJ,EAAW,KAAK,aAAL,GAAX,KACK,KAAK,UAAL;AACN;;AANI,GAhBkE;;AAyBzE,EAAA,aAAa,GAAA;AACX,SAAK,aAAL;AACD,GA3BwE;;AA6BzE,EAAA,OAAO,EAAE;AACP,IAAA,aAAa,GAAA;AACX,YAAM,OAAO,GAAG,IAAI,QAAJ,CAAa;AAC3B,QAAA,SAAS,EAAE;AACT,UAAA,QAAQ,EAAE,KAAK,QADN;AAET,UAAA,KAAK,EAAE,KAFE;AAGT,UAAA,KAAK,EAAE,KAAK,YAHH;AAIT,UAAA,OAAO,EAAE,KAAK;AAJL;AADgB,OAAb,CAAhB;AASA,MAAA,OAAO,CAAC,MAAR;AAEA,YAAM,MAAM,GAAG,KAAK,QAAL,GACX,KAAK,GAAL,CAAS,UADE,GAEX,QAAQ,CAAC,aAAT,CAAuB,YAAvB,CAFJ;AAIA,MAAA,MAAM,IAAI,MAAM,CAAC,YAAP,CAAoB,OAAO,CAAC,GAA5B,EAAiC,MAAM,CAAC,UAAxC,CAAV;AAEA,WAAK,OAAL,GAAe,OAAf;AACD,KApBM;;AAqBP,IAAA,UAAU,GAAA;AACR,WAAK,UAAL;AAEA,UAAI,KAAK,WAAT,EAAsB;AAEtB,UAAI,CAAC,KAAK,OAAV,EAAmB,KAAK,aAAL;AAEnB,WAAK,cAAL,GAAsB,qBAAqB,CAAC,MAAK;AAC/C,YAAI,CAAC,KAAK,OAAV,EAAmB;;AAEnB,YAAI,KAAK,YAAL,KAAsB,SAA1B,EAAqC;AACnC,eAAK,OAAL,CAAa,MAAb,GAAsB,MAAM,CAAC,KAAK,YAAL,GAAoB,CAArB,CAA5B;AACD,SAFD,MAEO,IAAI,KAAK,GAAT,EAAc;AACnB,eAAK,OAAL,CAAa,MAAb,GAAsB,SAAS,CAAC,KAAK,GAAN,CAA/B;AACD;;AAED,aAAK,OAAL,CAAa,KAAb,GAAqB,IAArB;AACD,OAV0C,CAA3C;AAYA,aAAO,IAAP;AACD,KAzCM;;AA0CP;AACA,IAAA,aAAa,CAAE,UAAU,GAAG,IAAf,EAAmB;AAC9B,UAAI,KAAK,OAAT,EAAkB;AAChB,QAAA,oBAAoB,CAAC,KAAK,OAAL,CAAa,GAAd,EAAmB,eAAnB,EAAoC,MAAK;AAC3D,cACE,CAAC,KAAK,OAAN,IACA,CAAC,KAAK,OAAL,CAAa,GADd,IAEA,CAAC,KAAK,OAAL,CAAa,GAAb,CAAiB,UAFlB,IAGA,KAAK,OAAL,CAAa,KAHb,IAIA,KAAK,QALP,EAME;AAEF,eAAK,OAAL,CAAa,GAAb,CAAiB,UAAjB,CAA4B,WAA5B,CAAwC,KAAK,OAAL,CAAa,GAArD;AACA,eAAK,OAAL,CAAa,QAAb;AACA,eAAK,OAAL,GAAe,IAAf;AACD,SAZmB,CAApB,CADgB,CAehB;AACA;AACA;;AACA,QAAA,oBAAoB,CAAC,KAAK,cAAN,CAApB;AAEA,aAAK,OAAL,CAAa,KAAb,GAAqB,KAArB;AACD;;AAED,MAAA,UAAU,IAAI,KAAK,UAAL,EAAd;AACD,KApEM;;AAqEP,IAAA,cAAc,CAAE,CAAF,EAA+B;AAC3C,UAAI,CAAC,CAAC,IAAF,KAAW,SAAf,EAA0B;AACxB,YACE,CAAC,OAAD,EAAU,UAAV,EAAsB,QAAtB,EAAgC,QAAhC,CAA0C,CAAC,CAAC,MAAF,CAAqB,OAA/D,KACA;AACC,QAAA,CAAC,CAAC,MAAF,CAAyB,iBAH5B,EAIE;AAEF,cAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAV,EAAc,QAAQ,CAAC,MAAvB,CAAX;AACA,cAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAV,EAAgB,QAAQ,CAAC,QAAzB,CAAb;;AAEA,YAAI,EAAE,CAAC,QAAH,CAAY,CAAC,CAAC,OAAd,CAAJ,EAA4B;AACzB,UAAA,CAAS,CAAC,MAAV,GAAmB,CAAC,CAApB;AACF,SAFD,MAEO,IAAI,IAAI,CAAC,QAAL,CAAc,CAAC,CAAC,OAAhB,CAAJ,EAA8B;AAClC,UAAA,CAAS,CAAC,MAAV,GAAmB,CAAnB;AACF,SAFM,MAEA;AACL;AACD;AACF;;AAED,UAAI,CAAC,CAAC,MAAF,KAAa,KAAK,OAAlB,IACD,CAAC,CAAC,IAAF,KAAW,SAAX,IAAwB,CAAC,CAAC,MAAF,KAAa,QAAQ,CAAC,IAD7C,IAEF,KAAK,SAAL,CAAe,CAAf,CAFF,EAEqB,CAAC,CAAC,cAAF;AACtB,KA5FM;;AA6FP,IAAA,YAAY,CAAE,EAAF,EAAc;AACxB,UAAI,CAAC,EAAD,IAAO,EAAE,CAAC,QAAH,KAAgB,IAAI,CAAC,YAAhC,EAA8C,OAAO,KAAP;AAE9C,YAAM,KAAK,GAAG,MAAM,CAAC,gBAAP,CAAwB,EAAxB,CAAd;AACA,aAAO,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,CAA4B,KAAK,CAAC,SAAlC,KAAiD,EAAE,CAAC,YAAH,GAAkB,EAAE,CAAC,YAA7E;AACD,KAlGM;;AAmGP,IAAA,YAAY,CAAE,EAAF,EAAe,KAAf,EAA4B;AACtC,UAAI,EAAE,CAAC,YAAH,CAAgB,UAAhB,CAAJ,EAAiC,OAAO,KAAP;AAEjC,YAAM,YAAY,GAAG,EAAE,CAAC,SAAH,KAAiB,CAAtC;AACA,YAAM,eAAe,GAAG,EAAE,CAAC,SAAH,GAAe,EAAE,CAAC,YAAlB,KAAmC,EAAE,CAAC,YAA9D;AACA,YAAM,WAAW,GAAG,KAAK,GAAG,CAA5B;AACA,YAAM,aAAa,GAAG,KAAK,GAAG,CAA9B;AAEA,UAAI,CAAC,YAAD,IAAiB,WAArB,EAAkC,OAAO,IAAP;AAClC,UAAI,CAAC,eAAD,IAAoB,aAAxB,EAAuC,OAAO,IAAP;;AACvC,UAAK,YAAY,IAAI,eAArB,EAAuC;AACrC,eAAO,KAAK,YAAL,CAAkB,EAAE,CAAC,UAArB,EAA4C,KAA5C,CAAP;AACD;;AAED,aAAO,KAAP;AACD,KAlHM;;AAmHP,IAAA,QAAQ,CAAE,EAAF,EAAe,MAAf,EAA8B;AACpC,UAAI,EAAE,KAAK,MAAX,EAAmB;AACjB,eAAO,IAAP;AACD,OAFD,MAEO,IAAI,EAAE,KAAK,IAAP,IAAe,EAAE,KAAK,QAAQ,CAAC,IAAnC,EAAyC;AAC9C,eAAO,KAAP;AACD,OAFM,MAEA;AACL,eAAO,KAAK,QAAL,CAAc,EAAE,CAAC,UAAjB,EAAwC,MAAxC,CAAP;AACD;AACF,KA3HM;;AA4HP,IAAA,SAAS,CAAE,CAAF,EAAe;AACtB,YAAM,IAAI,GAAG,YAAY,CAAC,CAAD,CAAzB;AACA,YAAM,KAAK,GAAG,CAAC,CAAC,MAAhB;;AAEA,UAAI,CAAC,CAAC,IAAF,KAAW,SAAX,IAAwB,IAAI,CAAC,CAAD,CAAJ,KAAY,QAAQ,CAAC,IAAjD,EAAuD;AACrD,cAAM,MAAM,GAAG,KAAK,KAAL,CAAW,MAA1B,CADqD,CAErD;;AACA,cAAM,QAAQ,GAAG,MAAM,CAAC,YAAP,GAAuB,UAAxC;;AACA,YAAI,MAAM,IAAI,KAAK,YAAL,CAAkB,MAAlB,CAAV,IAAuC,KAAK,QAAL,CAAc,QAAd,EAAwB,MAAxB,CAA3C,EAA4E;AAC1E,iBAAO,CAAC,KAAK,YAAL,CAAkB,MAAlB,EAA0B,KAA1B,CAAR;AACD;;AACD,eAAO,IAAP;AACD;;AAED,WAAK,IAAI,KAAK,GAAG,CAAjB,EAAoB,KAAK,GAAG,IAAI,CAAC,MAAjC,EAAyC,KAAK,EAA9C,EAAkD;AAChD,cAAM,EAAE,GAAG,IAAI,CAAC,KAAD,CAAf;AAEA,YAAI,EAAE,KAAK,QAAX,EAAqB,OAAO,IAAP;AACrB,YAAI,EAAE,KAAK,QAAQ,CAAC,eAApB,EAAqC,OAAO,IAAP;AACrC,YAAI,EAAE,KAAK,KAAK,KAAL,CAAW,OAAtB,EAA+B,OAAO,IAAP;AAE/B,YAAI,KAAK,YAAL,CAAkB,EAAlB,CAAJ,EAAsC,OAAO,CAAC,KAAK,YAAL,CAAkB,EAAlB,EAAiC,KAAjC,CAAR;AACvC;;AAED,aAAO,IAAP;AACD,KArJM;;AAsJP,IAAA,UAAU,GAAA;AACR,UAAI,KAAK,QAAL,CAAc,UAAd,CAAyB,SAA7B,EAAwC;AACtC,QAAA,QAAQ,CAAC,eAAT,CAA0B,SAA1B,CAAoC,GAApC,CAAwC,mBAAxC;AACD,OAFD,MAEO;AACL,QAAA,uBAAuB,CAAC,MAAD,EAAS,OAAT,EAAkB,KAAK,cAAvB,EAA8D;AAAE,UAAA,OAAO,EAAE;AAAX,SAA9D,CAAvB;AACA,QAAA,MAAM,CAAC,gBAAP,CAAwB,SAAxB,EAAmC,KAAK,cAAxC;AACD;AACF,KA7JM;;AA8JP,IAAA,UAAU,GAAA;AACR,MAAA,QAAQ,CAAC,eAAT,CAA0B,SAA1B,CAAoC,MAApC,CAA2C,mBAA3C;AACA,MAAA,MAAM,CAAC,mBAAP,CAA2B,OAA3B,EAAoC,KAAK,cAAzC;AACA,MAAA,MAAM,CAAC,mBAAP,CAA2B,SAA3B,EAAsC,KAAK,cAA3C;AACD;;AAlKM;AA7BgE,CAA5D,CAAf","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"}
@@ -63,6 +63,11 @@ export default Vue.extend({
63
63
  watch: {
64
64
  $route: 'onRouteChange'
65
65
  },
66
+
67
+ mounted() {
68
+ this.onRouteChange();
69
+ },
70
+
66
71
  methods: {
67
72
  click(e) {
68
73
  this.$emit('click', e);
@@ -128,16 +133,20 @@ export default Vue.extend({
128
133
  onRouteChange() {
129
134
  if (!this.to || !this.$refs.link || !this.$route) return;
130
135
  const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim();
131
- const path = `_vnode.data.class.${activeClass}`;
136
+ const exactActiveClass = `${this.exactActiveClass} ${this.proxyClass || ''}`.trim() || activeClass;
137
+ const path = '_vnode.data.class.' + (this.exact ? exactActiveClass : activeClass);
132
138
  this.$nextTick(() => {
133
139
  /* istanbul ignore else */
134
- if (getObjectValueByPath(this.$refs.link, path)) {
140
+ if (!getObjectValueByPath(this.$refs.link, path) === this.isActive) {
135
141
  this.toggle();
136
142
  }
137
143
  });
138
144
  },
139
145
 
140
- toggle: () => {}
146
+ toggle() {
147
+ this.isActive = !this.isActive;
148
+ }
149
+
141
150
  }
142
151
  });
143
152
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/routable/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n exactPath: Boolean,\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record<string, boolean> = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click,\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n exactPath: this.exactPath,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim()\n\n const path = `_vnode.data.class.${activeClass}`\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (getObjectValueByPath(this.$refs.link, path)) {\n this.toggle()\n }\n })\n },\n toggle: () => { /* noop */ },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/mixins/routable/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n exactPath: Boolean,\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record<string, boolean> = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n mounted () {\n this.onRouteChange()\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click,\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n exactPath: this.exactPath,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim()\n const exactActiveClass = `${this.exactActiveClass} ${this.proxyClass || ''}`.trim() || activeClass\n\n const path = '_vnode.data.class.' + (this.exact ? exactActiveClass : activeClass)\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (!getObjectValueByPath(this.$refs.link, path) === this.isActive) {\n this.toggle()\n }\n })\n },\n toggle () {\n this.isActive = !this.isActive\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.6.0-beta.0",
4
+ "version": "2.6.0",
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": "f8e7086821e6279c25bf7a2ba9d272d37118fedd"
115
+ "gitHead": "b786cdd1bbe74c7daca08af7adc37cfc15827b1b"
116
116
  }
@@ -217,7 +217,16 @@ export default VSelect.extend({
217
217
  // for duplicate items? no idea
218
218
  if (val === oldVal) return
219
219
 
220
- this.setMenuIndex(-1)
220
+ if (!this.autoSelectFirst) {
221
+ const preSelectedItem = oldVal[this.$refs.menu.listIndex]
222
+
223
+ if (preSelectedItem) {
224
+ this.setMenuIndex(val.findIndex(i => i === preSelectedItem))
225
+ } else {
226
+ this.setMenuIndex(-1)
227
+ }
228
+ this.$emit('update:list-index', this.$refs.menu.listIndex)
229
+ }
221
230
 
222
231
  this.$nextTick(() => {
223
232
  if (
@@ -227,7 +236,11 @@ export default VSelect.extend({
227
236
  ) return
228
237
 
229
238
  this.$refs.menu.getTiles()
230
- this.setMenuIndex(0)
239
+
240
+ if (this.autoSelectFirst && val.length) {
241
+ this.setMenuIndex(0)
242
+ this.$emit('update:list-index', this.$refs.menu.listIndex)
243
+ }
231
244
  })
232
245
  },
233
246
  onInternalSearchChanged () {
@@ -167,18 +167,21 @@ export default CalendarWithIntervals.extend({
167
167
  key: day.date,
168
168
  staticClass: 'v-calendar-daily__day',
169
169
  class: this.getRelativeClasses(day),
170
+ on: this.getDefaultMouseEventHandlers(':time', e => {
171
+ return this.getSlotScope(this.getTimestampAtEvent(e, day))
172
+ }),
170
173
  }, [
171
- ...this.genDayIntervals(index, day),
174
+ ...this.genDayIntervals(index),
172
175
  ...this.genDayBody(day),
173
176
  ])
174
177
  },
175
178
  genDayBody (day: CalendarTimestamp): VNode[] {
176
179
  return getSlot(this, 'day-body', () => this.getSlotScope(day)) || []
177
180
  },
178
- genDayIntervals (index: number, day: CalendarTimestamp): VNode[] {
179
- return this.intervals[index].map(i => this.genDayInterval(i, day))
181
+ genDayIntervals (index: number): VNode[] {
182
+ return this.intervals[index].map(this.genDayInterval)
180
183
  },
181
- genDayInterval (interval: CalendarTimestamp, day: CalendarTimestamp): VNode {
184
+ genDayInterval (interval: CalendarTimestamp): VNode {
182
185
  const height: string | undefined = convertToUnit(this.intervalHeight)
183
186
  const styler = this.intervalStyle || this.intervalStyleDefault
184
187
 
@@ -189,9 +192,6 @@ export default CalendarWithIntervals.extend({
189
192
  height,
190
193
  ...styler(interval),
191
194
  },
192
- on: this.getDefaultMouseEventHandlers(':time', e => {
193
- return this.getSlotScope(this.getTimestampAtEvent(e, day))
194
- }),
195
195
  }
196
196
 
197
197
  const children = getSlot(this, 'interval', () => this.getSlotScope(interval))
@@ -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
 
@@ -64,7 +64,7 @@ export default Vue.extend({
64
64
  // Even if touch point has since moved outside the interactive area of that element
65
65
  // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target
66
66
  // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at
67
- if (e instanceof TouchEvent) {
67
+ if (e && 'touches' in e) {
68
68
  const currentTarget = document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)
69
69
 
70
70
  if (currentTarget &&
@@ -108,11 +108,6 @@ export default VAutocomplete.extend({
108
108
 
109
109
  this.$nextTick(this.updateSelf)
110
110
  },
111
- onFilteredItemsChanged (val: never[], oldVal: never[]) {
112
- if (!this.autoSelectFirst) return
113
-
114
- VAutocomplete.options.methods.onFilteredItemsChanged.call(this, val, oldVal)
115
- },
116
111
  onKeyDown (e: KeyboardEvent) {
117
112
  const keyCode = e.keyCode
118
113
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable max-statements */
1
2
  // Components
2
3
  import VCombobox from '../VCombobox'
3
4
 
@@ -578,4 +579,116 @@ describe('VCombobox.ts', () => {
578
579
 
579
580
  expect(change).toHaveBeenLastCalledWith(['bar', 'foo'])
580
581
  })
582
+
583
+ // example 1 in https://github.com/vuetifyjs/vuetify/issues/14194
584
+ it('should not point to a result that does not exist as in example 1', async () => {
585
+ const { wrapper } = createMultipleCombobox({
586
+ items: ['a', 'aa', 'aaa', 'bar'],
587
+ })
588
+
589
+ const input = wrapper.find('input')
590
+ const element = input.element as HTMLInputElement
591
+
592
+ const listIndexUpdate = jest.fn()
593
+ wrapper.vm.$on('update:list-index', listIndexUpdate)
594
+
595
+ input.trigger('focus')
596
+ await wrapper.vm.$nextTick()
597
+ element.value = 'a'
598
+ input.trigger('input')
599
+ await wrapper.vm.$nextTick()
600
+
601
+ input.trigger('keydown.down')
602
+ await wrapper.vm.$nextTick()
603
+
604
+ input.trigger('keydown.down')
605
+ await wrapper.vm.$nextTick()
606
+
607
+ input.trigger('keydown.down')
608
+ await wrapper.vm.$nextTick()
609
+
610
+ input.trigger('keydown.down')
611
+ await wrapper.vm.$nextTick()
612
+
613
+ element.value = 'aa'
614
+ input.trigger('input')
615
+ await wrapper.vm.$nextTick()
616
+ expect(listIndexUpdate.mock.calls.length === 6).toBe(true)
617
+ expect(listIndexUpdate.mock.calls[0][0]).toBe(-1)
618
+ expect(listIndexUpdate.mock.calls[1][0]).toBe(0)
619
+ expect(listIndexUpdate.mock.calls[2][0]).toBe(1)
620
+ expect(listIndexUpdate.mock.calls[3][0]).toBe(2)
621
+ expect(listIndexUpdate.mock.calls[4][0]).toBe(3)
622
+ expect(listIndexUpdate.mock.calls[5][0]).toBe(-1)
623
+ })
624
+
625
+ // example 2 in https://github.com/vuetifyjs/vuetify/issues/14194
626
+ it('should not change selection on search input as in example 2', async () => {
627
+ const { wrapper } = createMultipleCombobox({
628
+ items: ['a', 'aa', 'aaa', 'bar'],
629
+ })
630
+
631
+ const input = wrapper.find('input')
632
+ const element = input.element as HTMLInputElement
633
+
634
+ const listIndexUpdate = jest.fn()
635
+ wrapper.vm.$on('update:list-index', listIndexUpdate)
636
+
637
+ input.trigger('focus')
638
+ await wrapper.vm.$nextTick()
639
+ element.value = 'a'
640
+ input.trigger('input')
641
+ await wrapper.vm.$nextTick()
642
+
643
+ input.trigger('keydown.down')
644
+ await wrapper.vm.$nextTick()
645
+
646
+ input.trigger('keydown.down')
647
+ await wrapper.vm.$nextTick()
648
+
649
+ input.trigger('keydown.down')
650
+ await wrapper.vm.$nextTick()
651
+
652
+ element.value = 'aa'
653
+ input.trigger('input')
654
+ await wrapper.vm.$nextTick()
655
+
656
+ expect(listIndexUpdate.mock.calls.length === 5).toBe(true)
657
+ expect(listIndexUpdate.mock.calls[0][0]).toBe(-1)
658
+ expect(listIndexUpdate.mock.calls[1][0]).toBe(0)
659
+ expect(listIndexUpdate.mock.calls[2][0]).toBe(1)
660
+ expect(listIndexUpdate.mock.calls[3][0]).toBe(2)
661
+ expect(listIndexUpdate.mock.calls[4][0]).toBe(1)
662
+ })
663
+
664
+ // example 3 in https://github.com/vuetifyjs/vuetify/issues/14194
665
+ it('should not point to a result that does not exist as in example 3', async () => {
666
+ const { wrapper } = createMultipleCombobox({
667
+ items: ['a', 'aa', 'aaa', 'bar'],
668
+ })
669
+
670
+ const input = wrapper.find('input')
671
+ const element = input.element as HTMLInputElement
672
+
673
+ const listIndexUpdate = jest.fn()
674
+ wrapper.vm.$on('update:list-index', listIndexUpdate)
675
+
676
+ input.trigger('focus')
677
+ await wrapper.vm.$nextTick()
678
+ element.value = 'a'
679
+ input.trigger('input')
680
+ await wrapper.vm.$nextTick()
681
+
682
+ input.trigger('keydown.down')
683
+ await wrapper.vm.$nextTick()
684
+
685
+ element.value = 'aaaa'
686
+ input.trigger('input')
687
+ await wrapper.vm.$nextTick()
688
+
689
+ expect(listIndexUpdate.mock.calls.length === 3).toBe(true)
690
+ expect(listIndexUpdate.mock.calls[0][0]).toBe(-1)
691
+ expect(listIndexUpdate.mock.calls[1][0]).toBe(0)
692
+ expect(listIndexUpdate.mock.calls[2][0]).toBe(-1)
693
+ })
581
694
  })
@@ -321,4 +321,34 @@ describe('VCombobox.ts', () => {
321
321
 
322
322
  expect(wrapper.vm.$attrs.autocomplete).toBe('on')
323
323
  })
324
+
325
+ // https://github.com/vuetifyjs/vuetify/issues/6607
326
+ it('should select first row when autoSelectFirst true is applied', async () => {
327
+ const wrapper = mountFunction({
328
+ propsData: {
329
+ autoSelectFirst: true,
330
+ items: [
331
+ { text: 'Learn JavaScript', done: false },
332
+ { text: 'Learn Vue', done: false },
333
+ { text: 'Play around in JSFiddle', done: true },
334
+ { text: 'Build something awesome', done: true },
335
+ ],
336
+ },
337
+ })
338
+
339
+ const input = wrapper.find('input')
340
+ const element = input.element as HTMLInputElement
341
+
342
+ const listIndexUpdate = jest.fn()
343
+ wrapper.vm.$on('update:list-index', listIndexUpdate)
344
+
345
+ input.trigger('focus')
346
+ await wrapper.vm.$nextTick()
347
+ element.value = 'L'
348
+ input.trigger('input')
349
+ await wrapper.vm.$nextTick()
350
+
351
+ expect(listIndexUpdate.mock.calls.length === 1).toBe(true)
352
+ expect(listIndexUpdate.mock.calls[0][0]).toBe(0)
353
+ })
324
354
  })
@@ -187,8 +187,10 @@ export default baseMixins.extend({
187
187
  // Double nextTick to wait for lazy content to be generated
188
188
  this.$nextTick(() => {
189
189
  this.$nextTick(() => {
190
- this.previousActiveElement = document.activeElement as HTMLElement
191
- this.$refs.content.focus()
190
+ if (!this.$refs.content.contains(document.activeElement)) {
191
+ this.previousActiveElement = document.activeElement as HTMLElement
192
+ this.$refs.content.focus()
193
+ }
192
194
  this.bind()
193
195
  })
194
196
  })
@@ -104,7 +104,7 @@ describe('VImg.ts', () => {
104
104
 
105
105
  jest.runOnlyPendingTimers()
106
106
 
107
- expect(error).toHaveBeenCalledTimes(2)
107
+ expect(error).toHaveBeenCalledTimes(1)
108
108
  expect(error).toHaveBeenCalledWith(LOAD_FAILURE_SRC)
109
109
  })
110
110
 
@@ -6,7 +6,7 @@
6
6
  color: map-deep-get($material, 'text', 'disabled')
7
7
 
8
8
  &:not(.v-list-item--active):not(.v-list-item--disabled)
9
- color: map-deep-get($material, 'text', 'primary') !important
9
+ color: map-deep-get($material, 'text', 'primary')
10
10
 
11
11
  .v-list-item__mask
12
12
  color: map-deep-get($material, 'text', 'disabled')
@@ -265,3 +265,4 @@
265
265
  -webkit-line-clamp: 2
266
266
  -webkit-box-orient: vertical
267
267
  display: -webkit-box
268
+
@@ -150,6 +150,12 @@ export default baseMixins.extend<options>().extend({
150
150
 
151
151
  return attrs
152
152
  },
153
+ toggle () {
154
+ if (this.to && this.inputValue === undefined) {
155
+ this.isActive = !this.isActive
156
+ }
157
+ this.$emit('change')
158
+ },
153
159
  },
154
160
 
155
161
  render (h): VNode {
@@ -182,6 +188,6 @@ export default baseMixins.extend<options>().extend({
182
188
  })
183
189
  : this.$slots.default
184
190
 
185
- return h(tag, this.setTextColor(this.color, data), children)
191
+ return h(tag, this.isActive ? this.setTextColor(this.color, data) : data, children)
186
192
  },
187
193
  })
@@ -218,4 +218,20 @@ describe('VListItem.ts', () => {
218
218
  })
219
219
  expect(wrapper5.element.getAttribute('role')).toBe('listitem')
220
220
  })
221
+
222
+ it('should not have an internal state unless its a router-link', async () => {
223
+ const wrapper = mountFunction({})
224
+
225
+ expect(wrapper.vm.isActive).toBeFalsy()
226
+ wrapper.vm.toggle()
227
+ expect(wrapper.vm.isActive).toBeFalsy()
228
+ wrapper.vm.toggle()
229
+ expect(wrapper.vm.isActive).toBeFalsy()
230
+
231
+ const wrapper2 = mountFunction({ propsData: { to: { name: 'test' } }, stubs: ['router-link'] })
232
+
233
+ expect(wrapper2.vm.isActive).toBeFalsy()
234
+ wrapper2.vm.toggle()
235
+ expect(wrapper2.vm.isActive).toBeTruthy()
236
+ })
221
237
  })
@@ -391,7 +391,7 @@ export default baseMixins.extend({
391
391
  getTiles () {
392
392
  if (!this.$refs.content) return
393
393
 
394
- this.tiles = Array.from(this.$refs.content.querySelectorAll('.v-list-item'))
394
+ this.tiles = Array.from(this.$refs.content.querySelectorAll('.v-list-item, .v-divider, .v-subheader'))
395
395
  },
396
396
  mouseEnterHandler () {
397
397
  this.runDelay('open', () => {
@@ -9,32 +9,29 @@
9
9
  background: map-get($material, 'bg-color')
10
10
 
11
11
  .v-otp-input
12
+ display: flex
13
+ flex-wrap: wrap
14
+ flex: 1 1 auto
15
+ margin-right: -$otp-gutter
16
+ margin-left: -$otp-gutter
17
+
12
18
  input
13
19
  text-align: center
20
+
14
21
  .v-input
15
22
  margin: 0
16
- padding: 0
17
- .v-input__control
18
- .v-input__slot
19
- background: #ffffff
23
+ flex: 1 0 $otp-width + $otp-gutter * 2
24
+ max-width: 100%
25
+ width: 100%
26
+ padding: $otp-gutter
27
+
20
28
  &.v-otp-input--plain
21
29
  fieldset
22
30
  display: none
31
+
23
32
  input[type=number]::-webkit-outer-spin-button,
24
33
  input[type=number]::-webkit-inner-spin-button
25
34
  -webkit-appearance: none
26
35
  margin: 0
27
36
  input[type=number]
28
37
  -moz-appearance: textfield
29
- .row-container
30
- display: flex
31
- flex-wrap: wrap
32
- flex: 1 1 auto
33
- margin-right: $otp-row-container-margin-x
34
- margin-left: $otp-row-container-margin-x
35
- >.col-input
36
- flex-basis: 0
37
- flex-grow: $otp-col-flex-grow
38
- max-width: $otp-col-width
39
- width: $otp-col-width
40
- padding: $otp-col-padding