vuetify 2.6.7 → 2.6.10

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 (228) hide show
  1. package/dist/json/web-types.json +49 -7
  2. package/dist/vuetify.css +10 -2
  3. package/dist/vuetify.css.map +1 -1
  4. package/dist/vuetify.js +405 -310
  5. package/dist/vuetify.js.map +1 -1
  6. package/dist/vuetify.min.css +2 -2
  7. package/dist/vuetify.min.js +2 -2
  8. package/es5/components/VAutocomplete/VAutocomplete.js +3 -3
  9. package/es5/components/VAutocomplete/VAutocomplete.js.map +1 -1
  10. package/es5/components/VBtn/VBtn.js +2 -2
  11. package/es5/components/VBtn/VBtn.js.map +1 -1
  12. package/es5/components/VCalendar/VCalendar.js +3 -0
  13. package/es5/components/VCalendar/VCalendar.js.map +1 -1
  14. package/es5/components/VCalendar/VCalendarWeekly.js +15 -3
  15. package/es5/components/VCalendar/VCalendarWeekly.js.map +1 -1
  16. package/es5/components/VCalendar/mixins/calendar-with-events.js +16 -18
  17. package/es5/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  18. package/es5/components/VCalendar/mixins/mouse.js +18 -26
  19. package/es5/components/VCalendar/mixins/mouse.js.map +1 -1
  20. package/es5/components/VCarousel/VCarousel.js +2 -1
  21. package/es5/components/VCarousel/VCarousel.js.map +1 -1
  22. package/es5/components/VCheckbox/VSimpleCheckbox.js +5 -5
  23. package/es5/components/VCheckbox/VSimpleCheckbox.js.map +1 -1
  24. package/es5/components/VCombobox/VCombobox.js +2 -2
  25. package/es5/components/VCombobox/VCombobox.js.map +1 -1
  26. package/es5/components/VDataIterator/VDataFooter.js +5 -2
  27. package/es5/components/VDataIterator/VDataFooter.js.map +1 -1
  28. package/es5/components/VDataTable/Row.js +2 -2
  29. package/es5/components/VDataTable/Row.js.map +1 -1
  30. package/es5/components/VDataTable/VDataTable.js +54 -43
  31. package/es5/components/VDataTable/VDataTable.js.map +1 -1
  32. package/es5/components/VDataTable/mixins/header.js +4 -3
  33. package/es5/components/VDataTable/mixins/header.js.map +1 -1
  34. package/es5/components/VDatePicker/VDatePicker.js +2 -1
  35. package/es5/components/VDatePicker/VDatePicker.js.map +1 -1
  36. package/es5/components/VDialog/VDialog.js +13 -15
  37. package/es5/components/VDialog/VDialog.js.map +1 -1
  38. package/es5/components/VInput/VInput.js +2 -1
  39. package/es5/components/VInput/VInput.js.map +1 -1
  40. package/es5/components/VItemGroup/VItemGroup.js +4 -2
  41. package/es5/components/VItemGroup/VItemGroup.js.map +1 -1
  42. package/es5/components/VMenu/VMenu.js +2 -2
  43. package/es5/components/VMenu/VMenu.js.map +1 -1
  44. package/es5/components/VOtpInput/VOtpInput.js +8 -7
  45. package/es5/components/VOtpInput/VOtpInput.js.map +1 -1
  46. package/es5/components/VPagination/VPagination.js +1 -1
  47. package/es5/components/VPagination/VPagination.js.map +1 -1
  48. package/es5/components/VRadioGroup/VRadio.js +3 -1
  49. package/es5/components/VRadioGroup/VRadio.js.map +1 -1
  50. package/es5/components/VRangeSlider/VRangeSlider.js +4 -3
  51. package/es5/components/VRangeSlider/VRangeSlider.js.map +1 -1
  52. package/es5/components/VSelect/VSelect.js +8 -8
  53. package/es5/components/VSelect/VSelect.js.map +1 -1
  54. package/es5/components/VSelect/VSelectList.js +8 -10
  55. package/es5/components/VSelect/VSelectList.js.map +1 -1
  56. package/es5/components/VSkeletonLoader/VSkeletonLoader.js +4 -4
  57. package/es5/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  58. package/es5/components/VSlideGroup/VSlideGroup.js +4 -4
  59. package/es5/components/VSlideGroup/VSlideGroup.js.map +1 -1
  60. package/es5/components/VSlider/VSlider.js +8 -11
  61. package/es5/components/VSlider/VSlider.js.map +1 -1
  62. package/es5/components/VSparkline/VSparkline.js +2 -1
  63. package/es5/components/VSparkline/VSparkline.js.map +1 -1
  64. package/es5/components/VTextField/VTextField.js +5 -5
  65. package/es5/components/VTextField/VTextField.js.map +1 -1
  66. package/es5/components/VTextarea/VTextarea.js +2 -2
  67. package/es5/components/VTextarea/VTextarea.js.map +1 -1
  68. package/es5/components/VTimePicker/VTimePicker.js.map +1 -1
  69. package/es5/components/VTreeview/VTreeview.js +5 -4
  70. package/es5/components/VTreeview/VTreeview.js.map +1 -1
  71. package/es5/components/VTreeview/VTreeviewNode.js +2 -1
  72. package/es5/components/VTreeview/VTreeviewNode.js.map +1 -1
  73. package/es5/components/VWindow/VWindow.js +5 -6
  74. package/es5/components/VWindow/VWindow.js.map +1 -1
  75. package/es5/directives/click-outside/index.js +2 -2
  76. package/es5/directives/click-outside/index.js.map +1 -1
  77. package/es5/directives/intersect/index.js +5 -5
  78. package/es5/directives/intersect/index.js.map +1 -1
  79. package/es5/directives/mutate/index.js +2 -2
  80. package/es5/directives/mutate/index.js.map +1 -1
  81. package/es5/directives/resize/index.js +2 -2
  82. package/es5/directives/resize/index.js.map +1 -1
  83. package/es5/directives/scroll/index.js +2 -2
  84. package/es5/directives/scroll/index.js.map +1 -1
  85. package/es5/framework.js +1 -1
  86. package/es5/mixins/activatable/index.js +1 -3
  87. package/es5/mixins/activatable/index.js.map +1 -1
  88. package/es5/mixins/binds-attrs/index.js.map +1 -1
  89. package/es5/mixins/menuable/index.js +5 -1
  90. package/es5/mixins/menuable/index.js.map +1 -1
  91. package/es5/mixins/overlayable/index.js +1 -1
  92. package/es5/mixins/overlayable/index.js.map +1 -1
  93. package/es5/mixins/routable/index.js +2 -2
  94. package/es5/mixins/routable/index.js.map +1 -1
  95. package/es5/util/helpers.js +1 -14
  96. package/es5/util/helpers.js.map +1 -1
  97. package/lib/components/VAutocomplete/VAutocomplete.js +3 -3
  98. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  99. package/lib/components/VBtn/VBtn.js +2 -2
  100. package/lib/components/VBtn/VBtn.js.map +1 -1
  101. package/lib/components/VCalendar/VCalendar.js +3 -0
  102. package/lib/components/VCalendar/VCalendar.js.map +1 -1
  103. package/lib/components/VCalendar/VCalendarWeekly.js +15 -3
  104. package/lib/components/VCalendar/VCalendarWeekly.js.map +1 -1
  105. package/lib/components/VCalendar/mixins/calendar-with-events.js +15 -18
  106. package/lib/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  107. package/lib/components/VCalendar/mixins/mouse.js +11 -32
  108. package/lib/components/VCalendar/mixins/mouse.js.map +1 -1
  109. package/lib/components/VCarousel/VCarousel.js +2 -1
  110. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  111. package/lib/components/VCheckbox/VSimpleCheckbox.js +3 -2
  112. package/lib/components/VCheckbox/VSimpleCheckbox.js.map +1 -1
  113. package/lib/components/VCombobox/VCombobox.js +2 -2
  114. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  115. package/lib/components/VDataIterator/VDataFooter.js +5 -2
  116. package/lib/components/VDataIterator/VDataFooter.js.map +1 -1
  117. package/lib/components/VDataTable/Row.js +2 -2
  118. package/lib/components/VDataTable/Row.js.map +1 -1
  119. package/lib/components/VDataTable/VDataTable.js +15 -5
  120. package/lib/components/VDataTable/VDataTable.js.map +1 -1
  121. package/lib/components/VDataTable/mixins/header.js +2 -2
  122. package/lib/components/VDataTable/mixins/header.js.map +1 -1
  123. package/lib/components/VDatePicker/VDatePicker.js +2 -1
  124. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  125. package/lib/components/VDialog/VDialog.js +11 -13
  126. package/lib/components/VDialog/VDialog.js.map +1 -1
  127. package/lib/components/VInput/VInput.js +2 -1
  128. package/lib/components/VInput/VInput.js.map +1 -1
  129. package/lib/components/VItemGroup/VItemGroup.js +2 -2
  130. package/lib/components/VItemGroup/VItemGroup.js.map +1 -1
  131. package/lib/components/VMenu/VMenu.js +2 -2
  132. package/lib/components/VMenu/VMenu.js.map +1 -1
  133. package/lib/components/VOtpInput/VOtpInput.js +8 -7
  134. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  135. package/lib/components/VPagination/VPagination.js +1 -1
  136. package/lib/components/VPagination/VPagination.js.map +1 -1
  137. package/lib/components/VRadioGroup/VRadio.js +3 -1
  138. package/lib/components/VRadioGroup/VRadio.js.map +1 -1
  139. package/lib/components/VRangeSlider/VRangeSlider.js +2 -2
  140. package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
  141. package/lib/components/VSelect/VSelect.js +8 -8
  142. package/lib/components/VSelect/VSelect.js.map +1 -1
  143. package/lib/components/VSelect/VSelectList.js +9 -11
  144. package/lib/components/VSelect/VSelectList.js.map +1 -1
  145. package/lib/components/VSkeletonLoader/VSkeletonLoader.js +4 -4
  146. package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  147. package/lib/components/VSlideGroup/VSlideGroup.js +4 -4
  148. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  149. package/lib/components/VSlider/VSlider.js +6 -11
  150. package/lib/components/VSlider/VSlider.js.map +1 -1
  151. package/lib/components/VSparkline/VSparkline.js +2 -1
  152. package/lib/components/VSparkline/VSparkline.js.map +1 -1
  153. package/lib/components/VTextField/VTextField.js +5 -5
  154. package/lib/components/VTextField/VTextField.js.map +1 -1
  155. package/lib/components/VTextarea/VTextarea.js +2 -2
  156. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  157. package/lib/components/VTimePicker/VTimePicker.js.map +1 -1
  158. package/lib/components/VTreeview/VTreeview.js +5 -4
  159. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  160. package/lib/components/VTreeview/VTreeviewNode.js +2 -1
  161. package/lib/components/VTreeview/VTreeviewNode.js.map +1 -1
  162. package/lib/components/VWindow/VWindow.js +3 -3
  163. package/lib/components/VWindow/VWindow.js.map +1 -1
  164. package/lib/directives/click-outside/index.js +2 -2
  165. package/lib/directives/click-outside/index.js.map +1 -1
  166. package/lib/directives/intersect/index.js +4 -4
  167. package/lib/directives/intersect/index.js.map +1 -1
  168. package/lib/directives/mutate/index.js +2 -2
  169. package/lib/directives/mutate/index.js.map +1 -1
  170. package/lib/directives/resize/index.js +2 -2
  171. package/lib/directives/resize/index.js.map +1 -1
  172. package/lib/directives/scroll/index.js +2 -2
  173. package/lib/directives/scroll/index.js.map +1 -1
  174. package/lib/framework.js +1 -1
  175. package/lib/mixins/activatable/index.js +1 -3
  176. package/lib/mixins/activatable/index.js.map +1 -1
  177. package/lib/mixins/binds-attrs/index.js.map +1 -1
  178. package/lib/mixins/menuable/index.js +5 -1
  179. package/lib/mixins/menuable/index.js.map +1 -1
  180. package/lib/mixins/overlayable/index.js +1 -1
  181. package/lib/mixins/overlayable/index.js.map +1 -1
  182. package/lib/mixins/routable/index.js +4 -3
  183. package/lib/mixins/routable/index.js.map +1 -1
  184. package/lib/util/helpers.js +1 -9
  185. package/lib/util/helpers.js.map +1 -1
  186. package/package.json +2 -2
  187. package/src/components/VCalendar/VCalendar.ts +3 -0
  188. package/src/components/VCalendar/VCalendarWeekly.ts +12 -0
  189. package/src/components/VCalendar/__tests__/__snapshots__/VCalendar.spec.ts.snap +165 -55
  190. package/src/components/VCalendar/mixins/__tests__/mouse.spec.ts +2 -2
  191. package/src/components/VCalendar/mixins/calendar-with-events.ts +14 -13
  192. package/src/components/VCalendar/mixins/mouse.ts +8 -9
  193. package/src/components/VCarousel/VCarousel.ts +1 -0
  194. package/src/components/VCheckbox/VSimpleCheckbox.ts +3 -2
  195. package/src/components/VDataTable/VDataTable.ts +4 -1
  196. package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +14 -14
  197. package/src/components/VDatePicker/VDatePicker.ts +1 -1
  198. package/src/components/VDialog/VDialog.ts +2 -2
  199. package/src/components/VFileInput/__tests__/__snapshots__/VFileInput.spec.ts.snap +7 -0
  200. package/src/components/VInput/VInput.sass +1 -1
  201. package/src/components/VInput/VInput.ts +1 -0
  202. package/src/components/VItemGroup/VItemGroup.ts +2 -2
  203. package/src/components/VItemGroup/__tests__/VItemGroup.spec.ts +29 -0
  204. package/src/components/VOverflowBtn/__tests__/__snapshots__/VOverflowBtn.spec.ts.snap +14 -10
  205. package/src/components/VPagination/VPagination.ts +1 -1
  206. package/src/components/VRadioGroup/VRadio.ts +1 -0
  207. package/src/components/VRangeSlider/__tests__/VRangeSlider.spec.ts +2 -2
  208. package/src/components/VRangeSlider/__tests__/__snapshots__/VRangeSlider.spec.ts.snap +2 -2
  209. package/src/components/VSelect/VSelectList.ts +10 -15
  210. package/src/components/VSelect/__tests__/__snapshots__/VSelect2.spec.ts.snap +2 -0
  211. package/src/components/VSlideGroup/VSlideGroup.ts +1 -1
  212. package/src/components/VSlider/VSlider.ts +1 -7
  213. package/src/components/VSlider/__tests__/VSlider.spec.ts +3 -2
  214. package/src/components/VSwitch/VSwitch.sass +3 -2
  215. package/src/components/VTextField/VTextField.sass +9 -0
  216. package/src/components/VTimePicker/VTimePicker.ts +1 -1
  217. package/src/globals.d.ts +6 -6
  218. package/src/mixins/applicationable/__tests__/applicationable.spec.ts +1 -1
  219. package/src/mixins/binds-attrs/index.ts +2 -2
  220. package/src/mixins/menuable/index.ts +4 -1
  221. package/src/mixins/overlayable/index.ts +7 -7
  222. package/src/util/helpers.ts +2 -12
  223. package/types/index.d.ts +2 -2
  224. package/es5/util/component.js +0 -11
  225. package/es5/util/component.js.map +0 -1
  226. package/lib/util/component.js +0 -4
  227. package/lib/util/component.js.map +0 -1
  228. package/src/util/component.ts +0 -21
@@ -6911,7 +6911,7 @@ exports[`VDataTable.ts should render item slot when using group-by function 1`]
6911
6911
  </i>
6912
6912
  </span>
6913
6913
  </button>
6914
- name: Frozen Yogurt
6914
+ Dessert (100g serving): Frozen Yogurt
6915
6915
  <button type="button"
6916
6916
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
6917
6917
  >
@@ -6941,7 +6941,7 @@ exports[`VDataTable.ts should render item slot when using group-by function 1`]
6941
6941
  </i>
6942
6942
  </span>
6943
6943
  </button>
6944
- name: Ice cream sandwich
6944
+ Dessert (100g serving): Ice cream sandwich
6945
6945
  <button type="button"
6946
6946
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
6947
6947
  >
@@ -8477,7 +8477,7 @@ exports[`VDataTable.ts should render with group.summary scoped slot 1`] = `
8477
8477
  </i>
8478
8478
  </span>
8479
8479
  </button>
8480
- calories: 159
8480
+ Calories: 159
8481
8481
  <button type="button"
8482
8482
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
8483
8483
  >
@@ -8551,7 +8551,7 @@ exports[`VDataTable.ts should render with group.summary scoped slot 1`] = `
8551
8551
  </i>
8552
8552
  </span>
8553
8553
  </button>
8554
- calories: 237
8554
+ Calories: 237
8555
8555
  <button type="button"
8556
8556
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
8557
8557
  >
@@ -8625,7 +8625,7 @@ exports[`VDataTable.ts should render with group.summary scoped slot 1`] = `
8625
8625
  </i>
8626
8626
  </span>
8627
8627
  </button>
8628
- calories: 262
8628
+ Calories: 262
8629
8629
  <button type="button"
8630
8630
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
8631
8631
  >
@@ -8699,7 +8699,7 @@ exports[`VDataTable.ts should render with group.summary scoped slot 1`] = `
8699
8699
  </i>
8700
8700
  </span>
8701
8701
  </button>
8702
- calories: 305
8702
+ Calories: 305
8703
8703
  <button type="button"
8704
8704
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
8705
8705
  >
@@ -8773,7 +8773,7 @@ exports[`VDataTable.ts should render with group.summary scoped slot 1`] = `
8773
8773
  </i>
8774
8774
  </span>
8775
8775
  </button>
8776
- calories: 356
8776
+ Calories: 356
8777
8777
  <button type="button"
8778
8778
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
8779
8779
  >
@@ -8988,7 +8988,7 @@ exports[`VDataTable.ts should render with grouped rows 1`] = `
8988
8988
  </i>
8989
8989
  </span>
8990
8990
  </button>
8991
- protein: 0
8991
+ Protein (g): 0
8992
8992
  <button type="button"
8993
8993
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
8994
8994
  >
@@ -9099,7 +9099,7 @@ exports[`VDataTable.ts should render with grouped rows 1`] = `
9099
9099
  </i>
9100
9100
  </span>
9101
9101
  </button>
9102
- protein: 3.9
9102
+ Protein (g): 3.9
9103
9103
  <button type="button"
9104
9104
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
9105
9105
  >
@@ -9168,7 +9168,7 @@ exports[`VDataTable.ts should render with grouped rows 1`] = `
9168
9168
  </i>
9169
9169
  </span>
9170
9170
  </button>
9171
- protein: 4
9171
+ Protein (g): 4
9172
9172
  <button type="button"
9173
9173
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
9174
9174
  >
@@ -9237,7 +9237,7 @@ exports[`VDataTable.ts should render with grouped rows 1`] = `
9237
9237
  </i>
9238
9238
  </span>
9239
9239
  </button>
9240
- protein: 4.3
9240
+ Protein (g): 4.3
9241
9241
  <button type="button"
9242
9242
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
9243
9243
  >
@@ -11644,7 +11644,7 @@ exports[`VDataTable.ts should search group-by column 1`] = `
11644
11644
  </i>
11645
11645
  </span>
11646
11646
  </button>
11647
- name: Assistance
11647
+ Name: Assistance
11648
11648
  <button type="button"
11649
11649
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
11650
11650
  >
@@ -11681,7 +11681,7 @@ exports[`VDataTable.ts should search group-by column 1`] = `
11681
11681
  </i>
11682
11682
  </span>
11683
11683
  </button>
11684
- name: Candidat
11684
+ Name: Candidat
11685
11685
  <button type="button"
11686
11686
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
11687
11687
  >
@@ -11856,7 +11856,7 @@ exports[`VDataTable.ts should search group-by column 2`] = `
11856
11856
  </i>
11857
11857
  </span>
11858
11858
  </button>
11859
- name: Candidat
11859
+ Name: Candidat
11860
11860
  <button type="button"
11861
11861
  class="ma-0 v-btn v-btn--icon v-btn--round theme--light v-size--small"
11862
11862
  >
@@ -231,7 +231,7 @@ export default mixins(
231
231
  year: { year: 'numeric', timeZone: 'UTC' },
232
232
  month: { month: 'long', timeZone: 'UTC' },
233
233
  date: { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' },
234
- }
234
+ } as const
235
235
 
236
236
  const titleDateFormatter = createNativeLocaleFormatter(this.currentLocale, titleFormats[this.type], {
237
237
  start: 0,
@@ -234,8 +234,8 @@ export default baseMixins.extend({
234
234
  // So we must have focused something outside the dialog and its children
235
235
  ) {
236
236
  // Find and focus the first available element inside the dialog
237
- const focusable = this.$refs.dialog.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')
238
- const el = [...focusable].find(el => !el.hasAttribute('disabled')) as HTMLElement | undefined
237
+ const focusable = this.$refs.dialog.querySelectorAll('button, [href], input:not([type="hidden"]), select, textarea, [tabindex]:not([tabindex="-1"])')
238
+ const el = [...focusable].find(el => !el.hasAttribute('disabled') && !el.matches('[tabindex="-1"]')) as HTMLElement | undefined
239
239
  el && el.focus()
240
240
  }
241
241
  },
@@ -61,6 +61,7 @@ exports[`VFileInput.ts should display file size 1`] = `
61
61
  <div class="v-input__icon v-input__icon--clear">
62
62
  <button type="button"
63
63
  aria-label="clear icon"
64
+ tabindex="-1"
64
65
  class="v-icon notranslate v-icon--link material-icons theme--light"
65
66
  >
66
67
  $clear
@@ -107,6 +108,7 @@ exports[`VFileInput.ts should display file size 2`] = `
107
108
  <div class="v-input__icon v-input__icon--clear">
108
109
  <button type="button"
109
110
  aria-label="clear icon"
111
+ tabindex="-1"
110
112
  class="v-icon notranslate v-icon--link material-icons theme--light"
111
113
  >
112
114
  $clear
@@ -153,6 +155,7 @@ exports[`VFileInput.ts should display total size in counter 1`] = `
153
155
  <div class="v-input__icon v-input__icon--clear">
154
156
  <button type="button"
155
157
  aria-label="clear icon"
158
+ tabindex="-1"
156
159
  class="v-icon notranslate v-icon--link material-icons theme--light"
157
160
  >
158
161
  $clear
@@ -202,6 +205,7 @@ exports[`VFileInput.ts should display total size in counter 2`] = `
202
205
  <div class="v-input__icon v-input__icon--clear">
203
206
  <button type="button"
204
207
  aria-label="clear icon"
208
+ tabindex="-1"
205
209
  class="v-icon notranslate v-icon--link material-icons theme--light"
206
210
  >
207
211
  $clear
@@ -294,6 +298,7 @@ exports[`VFileInput.ts should render chips 1`] = `
294
298
  <div class="v-input__icon v-input__icon--clear">
295
299
  <button type="button"
296
300
  aria-label="clear icon"
301
+ tabindex="-1"
297
302
  class="v-icon notranslate v-icon--link material-icons theme--light"
298
303
  >
299
304
  $clear
@@ -340,6 +345,7 @@ exports[`VFileInput.ts should render counter 1`] = `
340
345
  <div class="v-input__icon v-input__icon--clear">
341
346
  <button type="button"
342
347
  aria-label="clear icon"
348
+ tabindex="-1"
343
349
  class="v-icon notranslate v-icon--link material-icons theme--light"
344
350
  >
345
351
  $clear
@@ -433,6 +439,7 @@ exports[`VFileInput.ts should render small chips 1`] = `
433
439
  <div class="v-input__icon v-input__icon--clear">
434
440
  <button type="button"
435
441
  aria-label="clear icon"
442
+ tabindex="-1"
436
443
  class="v-icon notranslate v-icon--link material-icons theme--light"
437
444
  >
438
445
  $clear
@@ -100,12 +100,12 @@
100
100
 
101
101
  &__slot
102
102
  align-items: center
103
- color: inherit
104
103
  display: flex
105
104
  margin-bottom: $input-slot-margin-bottom
106
105
  min-height: inherit
107
106
  position: relative
108
107
  transition: $primary-transition
108
+ transition-property: height, min-height
109
109
  width: 100%
110
110
 
111
111
  &--dense > .v-input__control > .v-input__slot
@@ -184,6 +184,7 @@ export default baseMixins.extend<options>().extend({
184
184
  dark: this.dark,
185
185
  disabled: this.isDisabled,
186
186
  light: this.light,
187
+ tabindex: type === 'clear' ? -1 : undefined,
187
188
  },
188
189
  on: !hasListener
189
190
  ? undefined
@@ -219,7 +219,7 @@ export const BaseItemGroup = mixins(
219
219
  ? this.internalValue
220
220
  : []
221
221
  const internalValue = defaultValue.slice()
222
- const index = internalValue.findIndex(val => val === value)
222
+ const index = internalValue.findIndex(val => this.valueComparator(val, value))
223
223
 
224
224
  if (
225
225
  this.mandatory &&
@@ -245,7 +245,7 @@ export const BaseItemGroup = mixins(
245
245
  this.internalValue = internalValue
246
246
  },
247
247
  updateSingle (value: any) {
248
- const isSame = value === this.internalValue
248
+ const isSame = this.valueComparator(this.internalValue, value)
249
249
 
250
250
  if (this.mandatory && isSame) return
251
251
 
@@ -217,6 +217,18 @@ describe('VItemGroup', () => {
217
217
  wrapper.vm.updateSingle('foo')
218
218
  expect(wrapper.vm.internalValue).toBeUndefined()
219
219
 
220
+ // Toggling on and off object references
221
+ wrapper.vm.updateSingle({ foo: 'foo' })
222
+ expect(wrapper.vm.internalValue).toEqual({ foo: 'foo' })
223
+ wrapper.vm.updateSingle({ foo: 'foo' })
224
+ expect(wrapper.vm.internalValue).toBeUndefined()
225
+
226
+ // Toggling on and off with custom comparator
227
+ wrapper.setProps({ valueComparator: (a: any, b: any) => a?.startsWith(b?.[0]), value: 'foo' })
228
+ expect(wrapper.vm.internalValue).toBe('foo')
229
+ wrapper.vm.updateSingle('foobar')
230
+ expect(wrapper.vm.internalValue).toBeUndefined()
231
+
220
232
  wrapper.setProps({ mandatory: true })
221
233
 
222
234
  // Toggling off single mandatory
@@ -237,6 +249,12 @@ describe('VItemGroup', () => {
237
249
  wrapper.vm.updateMultiple('foo')
238
250
  expect(wrapper.vm.internalValue).toEqual([])
239
251
 
252
+ // Toggling on and off object references
253
+ wrapper.vm.updateMultiple({ foo: 'foo' })
254
+ expect(wrapper.vm.internalValue).toEqual([{ foo: 'foo' }])
255
+ wrapper.vm.updateMultiple({ foo: 'foo' })
256
+ expect(wrapper.vm.internalValue).toEqual([])
257
+
240
258
  wrapper.setProps({ mandatory: true })
241
259
 
242
260
  // Toggling off single mandatory
@@ -256,6 +274,17 @@ describe('VItemGroup', () => {
256
274
  expect(wrapper.vm.internalValue).toEqual(['foo', 'bar', 'fizz'])
257
275
  })
258
276
 
277
+ it('should update a multiple item group with a custom comparator', () => {
278
+ const wrapper = mountFunction({
279
+ propsData: { multiple: true },
280
+ })
281
+
282
+ wrapper.setProps({ valueComparator: (a: any, b: any) => a?.startsWith(b?.[0]), value: ['foo'] })
283
+ expect(wrapper.vm.internalValue).toEqual(['foo'])
284
+ wrapper.vm.updateMultiple('foobar')
285
+ expect(wrapper.vm.internalValue).toEqual([])
286
+ })
287
+
259
288
  it('should update value if mandatory and dynamic items', async () => {
260
289
  const wrapper = mountFunction({
261
290
  propsData: {
@@ -6,17 +6,17 @@ exports[`VOverflowBtn.js should show label with persistentPlaceholder property s
6
6
  <div role="combobox"
7
7
  aria-haspopup="listbox"
8
8
  aria-expanded="false"
9
- aria-owns="list-14"
9
+ aria-owns="list-15"
10
10
  class="v-input__slot"
11
11
  >
12
12
  <div class="v-select__slot">
13
- <label for="input-14"
13
+ <label for="input-15"
14
14
  class="v-label theme--light"
15
15
  >
16
16
  Some label
17
17
  </label>
18
18
  <div class="v-select__selections">
19
- <input id="input-14"
19
+ <input id="input-15"
20
20
  readonly="readonly"
21
21
  type="text"
22
22
  >
@@ -54,17 +54,17 @@ exports[`VOverflowBtn.js should show label with persistentPlaceholder property s
54
54
  <div role="combobox"
55
55
  aria-haspopup="listbox"
56
56
  aria-expanded="true"
57
- aria-owns="list-14"
57
+ aria-owns="list-15"
58
58
  class="v-input__slot"
59
59
  >
60
60
  <div class="v-select__slot">
61
- <label for="input-14"
61
+ <label for="input-15"
62
62
  class="v-label theme--light"
63
63
  >
64
64
  Some label
65
65
  </label>
66
66
  <div class="v-select__selections">
67
- <input id="input-14"
67
+ <input id="input-15"
68
68
  readonly="readonly"
69
69
  type="text"
70
70
  >
@@ -145,7 +145,7 @@ exports[`VOverflowBtn.js should use default autocomplete selections 1`] = `
145
145
  `;
146
146
 
147
147
  exports[`VOverflowBtn.js should use default autocomplete selections 2`] = `
148
- <div class="v-input v-input--is-label-active v-input--is-dirty theme--light v-text-field v-text-field--single-line v-select v-select--is-multi v-autocomplete v-overflow-btn">
148
+ <div class="v-input v-input--is-label-active v-input--is-dirty theme--light v-text-field v-text-field--single-line v-select v-autocomplete v-overflow-btn v-overflow-btn--segmented">
149
149
  <div class="v-input__control">
150
150
  <div role="combobox"
151
151
  aria-haspopup="listbox"
@@ -155,9 +155,13 @@ exports[`VOverflowBtn.js should use default autocomplete selections 2`] = `
155
155
  >
156
156
  <div class="v-select__slot">
157
157
  <div class="v-select__selections">
158
- <div class="v-select__selection v-select__selection--comma">
159
- foo
160
- </div>
158
+ <button type="button"
159
+ class="v-btn v-btn--text theme--light v-size--default"
160
+ >
161
+ <span class="v-btn__content">
162
+ foo
163
+ </span>
164
+ </button>
161
165
  <input id="input-1"
162
166
  readonly="readonly"
163
167
  type="text"
@@ -89,7 +89,7 @@ export default mixins(
89
89
  items (): (string | number)[] {
90
90
  const totalVisible = parseInt(this.totalVisible, 10)
91
91
 
92
- if (totalVisible === 0) {
92
+ if (totalVisible === 0 || isNaN(this.length) || this.length > Number.MAX_SAFE_INTEGER) {
93
93
  return []
94
94
  }
95
95
 
@@ -74,6 +74,7 @@ export default baseMixins.extend<options>().extend({
74
74
  }
75
75
  },
76
76
  computedColor (): string | undefined {
77
+ if (this.isDisabled) return undefined
77
78
  return Selectable.options.computed.computedColor.call(this)
78
79
  },
79
80
  computedIcon (): string {
@@ -5,7 +5,7 @@ import {
5
5
  Wrapper,
6
6
  } from '@vue/test-utils'
7
7
 
8
- describe('VRangeSlider.ts', () => {
8
+ describe('VRangeSlider', () => {
9
9
  type Instance = InstanceType<typeof VRangeSlider>
10
10
  let mountFunction: (options?: MountOptions<Instance>) => Wrapper<Instance>
11
11
 
@@ -33,7 +33,7 @@ describe('VRangeSlider.ts', () => {
33
33
  document.body.removeChild(el)
34
34
  })
35
35
 
36
- it('should provide a default value if non provided', async () => {
36
+ it('should provide a default value if none provided', async () => {
37
37
  const wrapper = mountFunction()
38
38
 
39
39
  expect(wrapper.vm.lazyValue).toEqual([0, 0])
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`VRangeSlider.ts should render a vertical slider 1`] = `
3
+ exports[`VRangeSlider should render a vertical slider 1`] = `
4
4
  <div class="v-input v-input--is-label-active v-input--is-dirty theme--light v-input__slider v-input__slider--vertical v-input--range-slider">
5
5
  <div class="v-input__control">
6
6
  <div class="v-input__slot">
@@ -64,7 +64,7 @@ exports[`VRangeSlider.ts should render a vertical slider 1`] = `
64
64
  </div>
65
65
  `;
66
66
 
67
- exports[`VRangeSlider.ts should render disabled slider 1`] = `
67
+ exports[`VRangeSlider should render disabled slider 1`] = `
68
68
  <div class="v-input v-input--is-label-active v-input--is-dirty v-input--is-disabled theme--light v-input__slider v-input--range-slider">
69
69
  <div class="v-input__control">
70
70
  <div class="v-input__slot">
@@ -18,10 +18,7 @@ import Colorable from '../../mixins/colorable'
18
18
  import Themeable from '../../mixins/themeable'
19
19
 
20
20
  // Helpers
21
- import {
22
- escapeHTML,
23
- getPropertyFromItem,
24
- } from '../../util/helpers'
21
+ import { getPropertyFromItem } from '../../util/helpers'
25
22
 
26
23
  // Types
27
24
  import mixins from '../../util/mixins'
@@ -113,17 +110,17 @@ export default mixins(Colorable, Themeable).extend({
113
110
  genFilteredText (text: string) {
114
111
  text = text || ''
115
112
 
116
- if (!this.searchInput || this.noFilter) return escapeHTML(text)
113
+ if (!this.searchInput || this.noFilter) return text
117
114
 
118
115
  const { start, middle, end } = this.getMaskedCharacters(text)
119
116
 
120
- return `${escapeHTML(start)}${this.genHighlight(middle)}${escapeHTML(end)}`
117
+ return [start, this.genHighlight(middle), end]
121
118
  },
122
119
  genHeader (props: { [key: string]: any }): VNode {
123
120
  return this.$createElement(VSubheader, { props }, props.header)
124
121
  },
125
- genHighlight (text: string): string {
126
- return `<span class="v-list-item__mask">${escapeHTML(text)}</span>`
122
+ genHighlight (text: string) {
123
+ return this.$createElement('span', { staticClass: 'v-list-item__mask' }, text)
127
124
  },
128
125
  getMaskedCharacters (text: string): {
129
126
  start: string
@@ -202,13 +199,11 @@ export default mixins(Colorable, Themeable).extend({
202
199
  : scopedSlot
203
200
  },
204
201
  genTileContent (item: any, index = 0): VNode {
205
- const innerHTML = this.genFilteredText(this.getText(item))
206
-
207
- return this.$createElement(VListItemContent,
208
- [this.$createElement(VListItemTitle, {
209
- domProps: { innerHTML },
210
- })]
211
- )
202
+ return this.$createElement(VListItemContent, [
203
+ this.$createElement(VListItemTitle, [
204
+ this.genFilteredText(this.getText(item)),
205
+ ]),
206
+ ])
212
207
  },
213
208
  hasItem (item: object) {
214
209
  return this.parsedItems.indexOf(this.getValue(item)) > -1
@@ -25,6 +25,7 @@ exports[`VSelect.ts should be clearable with prop, dirty and multi select 1`] =
25
25
  <div class="v-input__icon v-input__icon--clear">
26
26
  <button type="button"
27
27
  aria-label="clear icon"
28
+ tabindex="-1"
28
29
  class="v-icon notranslate v-icon--link material-icons theme--light"
29
30
  >
30
31
  $clear
@@ -85,6 +86,7 @@ exports[`VSelect.ts should be clearable with prop, dirty and single select 1`] =
85
86
  <div class="v-input__icon v-input__icon--clear">
86
87
  <button type="button"
87
88
  aria-label="clear icon"
89
+ tabindex="-1"
88
90
  class="v-icon notranslate v-icon--link material-icons theme--light"
89
91
  >
90
92
  $clear
@@ -127,7 +127,7 @@ export const BaseSlideGroup = mixins<options &
127
127
  },
128
128
  showArrows: {
129
129
  type: [Boolean, String],
130
- validator: v => (
130
+ validator: (v: any) => (
131
131
  typeof v === 'boolean' || [
132
132
  'always',
133
133
  'desktop',
@@ -221,16 +221,10 @@ export default mixins<options &
221
221
  handler (v: number) {
222
222
  this.internalValue = v
223
223
  },
224
+ immediate: true,
224
225
  },
225
226
  },
226
227
 
227
- // If done in as immediate in
228
- // value watcher, causes issues
229
- // with vue-test-utils
230
- beforeMount () {
231
- this.internalValue = this.value
232
- },
233
-
234
228
  mounted () {
235
229
  // Without a v-app, iOS does not work with body selectors
236
230
  this.app = document.querySelector('[data-app]') ||
@@ -559,7 +559,7 @@ describe('VSlider.ts', () => {
559
559
 
560
560
  it('should set value to min value if given a NaN value', () => {
561
561
  const input = jest.fn()
562
- const wrapper = mountFunction({
562
+ mountFunction({
563
563
  propsData: {
564
564
  min: -20,
565
565
  max: 20,
@@ -570,7 +570,8 @@ describe('VSlider.ts', () => {
570
570
  },
571
571
  })
572
572
 
573
- expect(wrapper.vm.internalValue).toBe(-20)
573
+ expect(input).toHaveBeenCalledTimes(1)
574
+ expect(input).toHaveBeenCalledWith(-20)
574
575
  })
575
576
 
576
577
  it('should correctly handle initial value of zero (#7320)', () => {
@@ -45,6 +45,7 @@
45
45
 
46
46
  .v-input--selection-controls__input
47
47
  width: $switch-width
48
+ transition: opacity $primary-transition
48
49
 
49
50
  .v-input--selection-controls__ripple
50
51
  top: $switch-ripple-top
@@ -68,8 +69,8 @@
68
69
  .v-input--selection-controls__ripple
69
70
  top: $switch-ripple-dense-top
70
71
 
71
- &.v-input--is-dirty
72
- &.v-input--is-disabled
72
+ &.v-input--is-dirty.v-input--is-disabled
73
+ .v-input--selection-controls__input
73
74
  opacity: $switch-disabled-opacity
74
75
 
75
76
  +ltr()
@@ -504,6 +504,15 @@
504
504
  &.v-input--has-state > .v-input__control > .v-input__slot:before
505
505
  border-color: currentColor
506
506
 
507
+ .v-input__icon--clear
508
+ opacity: 0
509
+ transition: opacity $primary-transition
510
+
511
+ &.v-input--is-focused,
512
+ &.v-input--is-dirty:hover
513
+ .v-input__icon--clear
514
+ opacity: 1
515
+
507
516
  // TODO: where are the corresponding rules for LTR?
508
517
  //
509
518
  // +rtl()
@@ -40,7 +40,7 @@ export default mixins(
40
40
  format: {
41
41
  type: String as PropType<'ampm' | '24hr'>,
42
42
  default: 'ampm',
43
- validator (val) {
43
+ validator (val: any) {
44
44
  return ['ampm', '24hr'].includes(val)
45
45
  },
46
46
  },
package/src/globals.d.ts CHANGED
@@ -105,8 +105,8 @@ declare module 'vue/types/options' {
105
105
  }
106
106
 
107
107
  declare module 'vue/types/vue' {
108
- export type OptionsVue<Instance extends Vue, Data, Methods, Computed, Props, Options = {}> = VueConstructor<
109
- CombinedVueInstance<Instance, Data, Methods, Computed, Props> & Vue,
108
+ export type OptionsVue<Instance extends Vue, Data, Methods, Computed, Props, SetupBindings, Options = {}> = VueConstructor<
109
+ CombinedVueInstance<Instance, Data, Methods, Computed, Props, SetupBindings> & Vue,
110
110
  Options
111
111
  >
112
112
 
@@ -154,10 +154,10 @@ declare module 'vue/types/vue' {
154
154
  $_vuetify_installed?: true
155
155
  options: Options
156
156
 
157
- extend<Data, Methods, Computed, Options, PropNames extends string = never> (options?: ThisTypedComponentOptionsWithArrayProps<V, Data, Methods, Computed, PropNames> & Options): OptionsVue<V, Data, Methods, Computed, Record<PropNames, any>, Options>
158
- extend<Data, Methods, Computed, Props, Options> (options?: ThisTypedComponentOptionsWithRecordProps<V, Data, Methods, Computed, Props> & Options): OptionsVue<V, Data, Methods, Computed, Props, Options>
159
- extend<Options, PropNames extends string = never> (definition: FunctionalComponentOptions<Record<PropNames, any>, PropNames[]> & Options): OptionsVue<V, {}, {}, {}, Record<PropNames, any>, Options>
157
+ extend<Data, Methods, Computed, Options, SetupBindings, PropNames extends string = never> (options?: ThisTypedComponentOptionsWithArrayProps<V, Data, Methods, Computed, PropNames, SetupBindings> & Options): OptionsVue<V, Data, Methods, Computed, Record<PropNames, any>, SetupBindings, Options>
158
+ extend<Data, Methods, Computed, Props, Options, SetupBindings> (options?: ThisTypedComponentOptionsWithRecordProps<V, Data, Methods, Computed, Props, SetupBindings> & Options): OptionsVue<V, Data, Methods, Computed, Props, SetupBindings, Options>
159
+ extend<Options, SetupBindings, PropNames extends string = never> (definition: FunctionalComponentOptions<Record<PropNames, any>, PropNames[]> & Options): OptionsVue<V, {}, {}, {}, Record<PropNames, any>, SetupBindings, Options>
160
160
  extend<Props, Options> (definition: FunctionalComponentOptions<Props, RecordPropsDefinition<Props>> & Options): OptionsVue<V, {}, {}, {}, Props, Options>
161
- extend<V extends Vue = Vue> (options?: ComponentOptions<V> & Options): OptionsVue<V, {}, {}, {}, {}, Options>
161
+ extend<V extends Vue = Vue> (options?: ComponentOptions<V> & Options): OptionsVue<V, {}, {}, {}, {}, {}, Options>
162
162
  }
163
163
  }
@@ -68,7 +68,7 @@ describe('applicationable.js', () => {
68
68
  mixins: [Applicationable(null, ['foo', 'bar'])],
69
69
  })
70
70
 
71
- expect(wrapper.vm._watchers).toHaveLength(6)
71
+ expect(wrapper.vm._scope.effects).toHaveLength(6)
72
72
  })
73
73
 
74
74
  it('should call to remove application on destroy', async () => {
@@ -1,11 +1,11 @@
1
- import Vue, { WatchHandler } from 'vue'
1
+ import Vue from 'vue'
2
2
 
3
3
  /**
4
4
  * This mixin provides `attrs$` and `listeners$` to work around
5
5
  * vue bug https://github.com/vuejs/vue/issues/10115
6
6
  */
7
7
 
8
- function makeWatcher (property: string): ThisType<Vue> & WatchHandler<any> {
8
+ function makeWatcher (property: string): ThisType<Vue> & ((val: any, oldVal: any) => void) {
9
9
  return function (this: Vue, val, oldVal) {
10
10
  for (const attr in oldVal) {
11
11
  if (!Object.prototype.hasOwnProperty.call(val, attr)) {
@@ -281,7 +281,10 @@ export default baseMixins.extend<options>().extend({
281
281
  }
282
282
  },
283
283
  checkActivatorFixed () {
284
- if (this.attach !== false) return
284
+ if (this.attach !== false) {
285
+ this.activatorFixed = false
286
+ return
287
+ }
285
288
  let el = this.getActivator()
286
289
  while (el) {
287
290
  if (window.getComputedStyle(el).position === 'fixed') {