vuetify 2.6.6 → 2.6.9

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 (245) hide show
  1. package/dist/json/web-types.json +21 -7
  2. package/dist/vuetify.css +50 -69
  3. package/dist/vuetify.css.map +1 -1
  4. package/dist/vuetify.js +442 -327
  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 +6 -5
  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 +20 -17
  37. package/es5/components/VDialog/VDialog.js.map +1 -1
  38. package/es5/components/VItemGroup/VItemGroup.js +4 -2
  39. package/es5/components/VItemGroup/VItemGroup.js.map +1 -1
  40. package/es5/components/VList/VListItem.js +5 -3
  41. package/es5/components/VList/VListItem.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 +33 -64
  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 +10 -6
  53. package/es5/components/VSelect/VSelect.js.map +1 -1
  54. package/es5/components/VSelect/VSelectList.js +2 -1
  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 +43 -23
  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/VTabs/VTabs.js +10 -0
  65. package/es5/components/VTabs/VTabs.js.map +1 -1
  66. package/es5/components/VTextField/VTextField.js +5 -5
  67. package/es5/components/VTextField/VTextField.js.map +1 -1
  68. package/es5/components/VTextarea/VTextarea.js +2 -2
  69. package/es5/components/VTextarea/VTextarea.js.map +1 -1
  70. package/es5/components/VTimePicker/VTimePicker.js.map +1 -1
  71. package/es5/components/VTreeview/VTreeview.js +5 -4
  72. package/es5/components/VTreeview/VTreeview.js.map +1 -1
  73. package/es5/components/VTreeview/VTreeviewNode.js +2 -1
  74. package/es5/components/VTreeview/VTreeviewNode.js.map +1 -1
  75. package/es5/components/VWindow/VWindow.js +5 -6
  76. package/es5/components/VWindow/VWindow.js.map +1 -1
  77. package/es5/directives/click-outside/index.js +2 -2
  78. package/es5/directives/click-outside/index.js.map +1 -1
  79. package/es5/directives/intersect/index.js +5 -5
  80. package/es5/directives/intersect/index.js.map +1 -1
  81. package/es5/directives/mutate/index.js +2 -2
  82. package/es5/directives/mutate/index.js.map +1 -1
  83. package/es5/directives/resize/index.js +2 -2
  84. package/es5/directives/resize/index.js.map +1 -1
  85. package/es5/directives/scroll/index.js +2 -2
  86. package/es5/directives/scroll/index.js.map +1 -1
  87. package/es5/framework.js +1 -1
  88. package/es5/mixins/activatable/index.js +1 -3
  89. package/es5/mixins/activatable/index.js.map +1 -1
  90. package/es5/mixins/binds-attrs/index.js.map +1 -1
  91. package/es5/mixins/dependent/index.js.map +1 -1
  92. package/es5/mixins/detachable/index.js.map +1 -1
  93. package/es5/mixins/overlayable/index.js +1 -1
  94. package/es5/mixins/overlayable/index.js.map +1 -1
  95. package/es5/mixins/routable/index.js +2 -2
  96. package/es5/mixins/routable/index.js.map +1 -1
  97. package/es5/util/helpers.js +1 -1
  98. package/es5/util/helpers.js.map +1 -1
  99. package/lib/components/VAutocomplete/VAutocomplete.js +3 -3
  100. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  101. package/lib/components/VBtn/VBtn.js +2 -2
  102. package/lib/components/VBtn/VBtn.js.map +1 -1
  103. package/lib/components/VCalendar/VCalendar.js +3 -0
  104. package/lib/components/VCalendar/VCalendar.js.map +1 -1
  105. package/lib/components/VCalendar/VCalendarWeekly.js +15 -3
  106. package/lib/components/VCalendar/VCalendarWeekly.js.map +1 -1
  107. package/lib/components/VCalendar/mixins/calendar-with-events.js +4 -4
  108. package/lib/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
  109. package/lib/components/VCalendar/mixins/mouse.js +11 -32
  110. package/lib/components/VCalendar/mixins/mouse.js.map +1 -1
  111. package/lib/components/VCarousel/VCarousel.js +2 -1
  112. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  113. package/lib/components/VCheckbox/VSimpleCheckbox.js +3 -2
  114. package/lib/components/VCheckbox/VSimpleCheckbox.js.map +1 -1
  115. package/lib/components/VCombobox/VCombobox.js +2 -2
  116. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  117. package/lib/components/VDataIterator/VDataFooter.js +5 -2
  118. package/lib/components/VDataIterator/VDataFooter.js.map +1 -1
  119. package/lib/components/VDataTable/Row.js +2 -2
  120. package/lib/components/VDataTable/Row.js.map +1 -1
  121. package/lib/components/VDataTable/VDataTable.js +15 -5
  122. package/lib/components/VDataTable/VDataTable.js.map +1 -1
  123. package/lib/components/VDataTable/mixins/header.js +2 -2
  124. package/lib/components/VDataTable/mixins/header.js.map +1 -1
  125. package/lib/components/VDatePicker/VDatePicker.js +2 -1
  126. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  127. package/lib/components/VDialog/VDialog.js +18 -14
  128. package/lib/components/VDialog/VDialog.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/VList/VListItem.js +5 -3
  132. package/lib/components/VList/VListItem.js.map +1 -1
  133. package/lib/components/VMenu/VMenu.js +2 -2
  134. package/lib/components/VMenu/VMenu.js.map +1 -1
  135. package/lib/components/VOtpInput/VOtpInput.js +32 -61
  136. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  137. package/lib/components/VPagination/VPagination.js +1 -1
  138. package/lib/components/VPagination/VPagination.js.map +1 -1
  139. package/lib/components/VRadioGroup/VRadio.js +3 -1
  140. package/lib/components/VRadioGroup/VRadio.js.map +1 -1
  141. package/lib/components/VRangeSlider/VRangeSlider.js +2 -2
  142. package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
  143. package/lib/components/VSelect/VSelect.js +10 -6
  144. package/lib/components/VSelect/VSelect.js.map +1 -1
  145. package/lib/components/VSelect/VSelectList.js +2 -1
  146. package/lib/components/VSelect/VSelectList.js.map +1 -1
  147. package/lib/components/VSkeletonLoader/VSkeletonLoader.js +4 -4
  148. package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  149. package/lib/components/VSlideGroup/VSlideGroup.js +23 -7
  150. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  151. package/lib/components/VSlider/VSlider.js +6 -11
  152. package/lib/components/VSlider/VSlider.js.map +1 -1
  153. package/lib/components/VSparkline/VSparkline.js +2 -1
  154. package/lib/components/VSparkline/VSparkline.js.map +1 -1
  155. package/lib/components/VTabs/VTabs.js +10 -0
  156. package/lib/components/VTabs/VTabs.js.map +1 -1
  157. package/lib/components/VTextField/VTextField.js +5 -5
  158. package/lib/components/VTextField/VTextField.js.map +1 -1
  159. package/lib/components/VTextarea/VTextarea.js +2 -2
  160. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  161. package/lib/components/VTimePicker/VTimePicker.js.map +1 -1
  162. package/lib/components/VTreeview/VTreeview.js +5 -4
  163. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  164. package/lib/components/VTreeview/VTreeviewNode.js +2 -1
  165. package/lib/components/VTreeview/VTreeviewNode.js.map +1 -1
  166. package/lib/components/VWindow/VWindow.js +3 -3
  167. package/lib/components/VWindow/VWindow.js.map +1 -1
  168. package/lib/directives/click-outside/index.js +2 -2
  169. package/lib/directives/click-outside/index.js.map +1 -1
  170. package/lib/directives/intersect/index.js +4 -4
  171. package/lib/directives/intersect/index.js.map +1 -1
  172. package/lib/directives/mutate/index.js +2 -2
  173. package/lib/directives/mutate/index.js.map +1 -1
  174. package/lib/directives/resize/index.js +2 -2
  175. package/lib/directives/resize/index.js.map +1 -1
  176. package/lib/directives/scroll/index.js +2 -2
  177. package/lib/directives/scroll/index.js.map +1 -1
  178. package/lib/framework.js +1 -1
  179. package/lib/mixins/activatable/index.js +1 -3
  180. package/lib/mixins/activatable/index.js.map +1 -1
  181. package/lib/mixins/binds-attrs/index.js.map +1 -1
  182. package/lib/mixins/dependent/index.js.map +1 -1
  183. package/lib/mixins/detachable/index.js.map +1 -1
  184. package/lib/mixins/overlayable/index.js +1 -1
  185. package/lib/mixins/overlayable/index.js.map +1 -1
  186. package/lib/mixins/routable/index.js +4 -3
  187. package/lib/mixins/routable/index.js.map +1 -1
  188. package/lib/util/helpers.js +1 -1
  189. package/lib/util/helpers.js.map +1 -1
  190. package/package.json +3 -2
  191. package/src/components/VAutocomplete/VAutocomplete.sass +0 -4
  192. package/src/components/VBtn/VBtn.sass +1 -1
  193. package/src/components/VCalendar/VCalendar.ts +3 -0
  194. package/src/components/VCalendar/VCalendarWeekly.ts +12 -0
  195. package/src/components/VCalendar/__tests__/__snapshots__/VCalendar.spec.ts.snap +165 -55
  196. package/src/components/VCalendar/mixins/__tests__/mouse.spec.ts +2 -2
  197. package/src/components/VCalendar/mixins/mouse.ts +8 -9
  198. package/src/components/VCarousel/VCarousel.ts +1 -0
  199. package/src/components/VCheckbox/VSimpleCheckbox.ts +3 -2
  200. package/src/components/VChip/VChip.sass +1 -1
  201. package/src/components/VDataTable/VDataTable.ts +4 -1
  202. package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +14 -14
  203. package/src/components/VDatePicker/VDatePicker.ts +1 -1
  204. package/src/components/VDialog/VDialog.sass +1 -1
  205. package/src/components/VDialog/VDialog.ts +9 -6
  206. package/src/components/VDialog/__tests__/VDialog.spec.ts +5 -5
  207. package/src/components/VDialog/__tests__/__snapshots__/VDialog.spec.ts.snap +4 -16
  208. package/src/components/VExpansionPanel/VExpansionPanel.sass +2 -2
  209. package/src/components/VInput/VInput.sass +3 -6
  210. package/src/components/VItemGroup/VItemGroup.ts +2 -2
  211. package/src/components/VItemGroup/__tests__/VItemGroup.spec.ts +29 -0
  212. package/src/components/VList/VListItem.ts +5 -3
  213. package/src/components/VList/__tests__/VListItem.spec.ts +12 -0
  214. package/src/components/VOtpInput/VOtpInput.ts +23 -43
  215. package/src/components/VOtpInput/__tests__/VOtpInput.spec.ts +3 -27
  216. package/src/components/VOverflowBtn/__tests__/__snapshots__/VOverflowBtn.spec.ts.snap +14 -10
  217. package/src/components/VPagination/VPagination.ts +1 -1
  218. package/src/components/VRadioGroup/VRadio.sass +0 -4
  219. package/src/components/VRadioGroup/VRadio.ts +1 -0
  220. package/src/components/VRangeSlider/__tests__/VRangeSlider.spec.ts +2 -2
  221. package/src/components/VRangeSlider/__tests__/__snapshots__/VRangeSlider.spec.ts.snap +2 -2
  222. package/src/components/VSelect/VSelect.sass +3 -1
  223. package/src/components/VSelect/VSelect.ts +2 -2
  224. package/src/components/VSkeletonLoader/VSkeletonLoader.sass +1 -1
  225. package/src/components/VSlideGroup/VSlideGroup.ts +21 -9
  226. package/src/components/VSlider/VSlider.ts +1 -7
  227. package/src/components/VSlider/__tests__/VSlider.spec.ts +3 -2
  228. package/src/components/VSwitch/VSwitch.sass +3 -2
  229. package/src/components/VTabs/VTabs.ts +10 -0
  230. package/src/components/VTimePicker/VTimePicker.ts +1 -1
  231. package/src/components/VTimeline/VTimeline.sass +16 -9
  232. package/src/components/VTimeline/_mixins.sass +4 -3
  233. package/src/globals.d.ts +6 -6
  234. package/src/mixins/applicationable/__tests__/applicationable.spec.ts +1 -1
  235. package/src/mixins/binds-attrs/index.ts +2 -2
  236. package/src/mixins/dependent/index.ts +3 -3
  237. package/src/mixins/detachable/index.ts +3 -3
  238. package/src/mixins/overlayable/index.ts +7 -7
  239. package/src/styles/components/_selection-controls.sass +3 -0
  240. package/src/util/helpers.ts +2 -2
  241. package/es5/util/component.js +0 -11
  242. package/es5/util/component.js.map +0 -1
  243. package/lib/util/component.js +0 -4
  244. package/lib/util/component.js.map +0 -1
  245. 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,
@@ -9,6 +9,7 @@
9
9
  transition: .3s map-get($transition, 'fast-in-fast-out')
10
10
  width: 100%
11
11
  z-index: inherit
12
+ outline: none
12
13
  +elevation($dialog-elevation)
13
14
 
14
15
  &:not(.v-dialog--fullscreen)
@@ -46,7 +47,6 @@
46
47
  transition: .2s map-get($transition, 'fast-in-fast-out'), z-index 1ms
47
48
  width: 100%
48
49
  z-index: 6
49
- outline: none
50
50
 
51
51
  .v-dialog__container
52
52
  display: none
@@ -178,9 +178,9 @@ export default baseMixins.extend({
178
178
  // Double nextTick to wait for lazy content to be generated
179
179
  this.$nextTick(() => {
180
180
  this.$nextTick(() => {
181
- if (!this.$refs.content.contains(document.activeElement)) {
181
+ if (!this.$refs.dialog?.contains(document.activeElement)) {
182
182
  this.previousActiveElement = document.activeElement as HTMLElement
183
- this.$refs.content.focus()
183
+ this.$refs.dialog?.focus()
184
184
  }
185
185
  this.bind()
186
186
  })
@@ -222,10 +222,11 @@ export default baseMixins.extend({
222
222
 
223
223
  if (
224
224
  !!target &&
225
+ this.$refs.dialog &&
225
226
  // It isn't the document or the dialog body
226
- ![document, this.$refs.content].includes(target) &&
227
+ ![document, this.$refs.dialog].includes(target) &&
227
228
  // It isn't inside the dialog body
228
- !this.$refs.content.contains(target) &&
229
+ !this.$refs.dialog.contains(target) &&
229
230
  // We're the topmost dialog
230
231
  this.activeZIndex >= this.getMaxZIndex() &&
231
232
  // It isn't inside a dependent element (like a menu)
@@ -233,7 +234,7 @@ export default baseMixins.extend({
233
234
  // So we must have focused something outside the dialog and its children
234
235
  ) {
235
236
  // Find and focus the first available element inside the dialog
236
- const focusable = this.$refs.content.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')
237
+ const focusable = this.$refs.dialog.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')
237
238
  const el = [...focusable].find(el => !el.hasAttribute('disabled')) as HTMLElement | undefined
238
239
  el && el.focus()
239
240
  }
@@ -251,7 +252,6 @@ export default baseMixins.extend({
251
252
  class: this.contentClasses,
252
253
  attrs: {
253
254
  role: 'dialog',
254
- tabindex: this.isActive ? 0 : undefined,
255
255
  'aria-modal': this.hideOverlay ? undefined : 'true',
256
256
  ...this.getScopeIdAttrs(),
257
257
  },
@@ -278,6 +278,9 @@ export default baseMixins.extend({
278
278
  genInnerContent () {
279
279
  const data: VNodeData = {
280
280
  class: this.classes,
281
+ attrs: {
282
+ tabindex: this.isActive ? 0 : undefined,
283
+ },
281
284
  ref: 'dialog',
282
285
  directives: [
283
286
  {
@@ -308,15 +308,15 @@ describe('VDialog.ts', () => {
308
308
  propsData: { eager: true },
309
309
  })
310
310
 
311
- const content = wrapper.find('.v-dialog__content')
311
+ const dialog = wrapper.find('.v-dialog')
312
312
 
313
- expect(content.html()).toMatchSnapshot()
314
- expect(content.element.tabIndex).toBe(-1)
313
+ expect(dialog.html()).toMatchSnapshot()
314
+ expect(dialog.element.tabIndex).toBe(-1)
315
315
 
316
316
  wrapper.setData({ isActive: true })
317
317
 
318
- expect(content.element.tabIndex).toBe(0)
319
- expect(content.html()).toMatchSnapshot()
318
+ expect(dialog.element.tabIndex).toBe(0)
319
+ expect(dialog.html()).toMatchSnapshot()
320
320
  })
321
321
 
322
322
  // https://github.com/vuetifyjs/vuetify/issues/8697
@@ -1,29 +1,17 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`VDialog.ts should only set tabindex if active 1`] = `
4
- <div role="dialog"
5
- aria-modal="true"
6
- class="v-dialog__content"
7
- style="z-index: 0;"
4
+ <div class="v-dialog"
5
+ style="transform-origin: center center; display: none;"
8
6
  >
9
- <div class="v-dialog"
10
- style="transform-origin: center center; display: none;"
11
- >
12
- </div>
13
7
  </div>
14
8
  `;
15
9
 
16
10
  exports[`VDialog.ts should only set tabindex if active 2`] = `
17
- <div role="dialog"
18
- aria-modal="true"
19
- class="v-dialog__content v-dialog__content--active"
20
- style="z-index: 202; z-index: 202;"
11
+ <div class="v-dialog v-dialog--active"
12
+ style="transform-origin: center center;"
21
13
  tabindex="0"
22
14
  >
23
- <div class="v-dialog v-dialog--active"
24
- style="transform-origin: center center;"
25
- >
26
- </div>
27
15
  </div>
28
16
  `;
29
17
 
@@ -24,8 +24,8 @@
24
24
  &.v-expansion-panels--hover
25
25
  > .v-expansion-panel
26
26
  > .v-expansion-panel-header
27
- &:hover
28
- +states($material)
27
+ &:hover::before
28
+ opacity: map-deep-get($material, 'states', 'hover')
29
29
 
30
30
  // Block
31
31
  .v-expansion-panels
@@ -100,20 +100,17 @@
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
112
112
  margin-bottom: $input-dense-slot-margin-bottom
113
113
 
114
- &--is-disabled:not(.v-input--is-readonly)
115
- pointer-events: none
116
-
117
114
  &--is-loading > .v-input__control > .v-input__slot
118
115
  &:before,
119
116
  &:after
@@ -128,8 +125,8 @@
128
125
 
129
126
  &--hide-spin-buttons
130
127
  input::-webkit-outer-spin-button,
131
- input::-webkit-inner-spin-button
128
+ input::-webkit-inner-spin-button
132
129
  -webkit-appearance: none
133
130
  margin: 0
134
- input[type=number]
131
+ input[type=number]
135
132
  -moz-appearance: textfield
@@ -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: {
@@ -168,10 +168,12 @@ export default baseMixins.extend<options>().extend({
168
168
  data[this.to ? 'nativeOn' : 'on'] = {
169
169
  ...data[this.to ? 'nativeOn' : 'on'],
170
170
  keydown: (e: KeyboardEvent) => {
171
- /* istanbul ignore else */
172
- if (e.keyCode === keyCodes.enter) this.click(e)
171
+ if (!this.disabled) {
172
+ /* istanbul ignore else */
173
+ if (e.keyCode === keyCodes.enter) this.click(e)
173
174
 
174
- this.$emit('keydown', e)
175
+ this.$emit('keydown', e)
176
+ }
175
177
  },
176
178
  }
177
179
 
@@ -234,4 +234,16 @@ describe('VListItem.ts', () => {
234
234
  wrapper2.vm.toggle()
235
235
  expect(wrapper2.vm.isActive).toBeTruthy()
236
236
  })
237
+
238
+ it('should not react to keydown.enter when disabled', () => {
239
+ const click = jest.fn()
240
+ const wrapper = mountFunction({
241
+ methods: { click },
242
+ propsData: { disabled: true },
243
+ })
244
+
245
+ wrapper.trigger('keydown.enter')
246
+
247
+ expect(click).not.toHaveBeenCalled()
248
+ })
237
249
  })
@@ -49,7 +49,6 @@ export default baseMixins.extend<options>().extend({
49
49
  },
50
50
 
51
51
  data: () => ({
52
- badInput: false,
53
52
  initialValue: null,
54
53
  isBooted: false,
55
54
  otp: [] as string[],
@@ -66,9 +65,6 @@ export default baseMixins.extend<options>().extend({
66
65
  'v-otp-input--plain': this.plain,
67
66
  }
68
67
  },
69
- isDirty (): boolean {
70
- return VInput.options.computed.isDirty.call(this) || this.badInput
71
- },
72
68
  },
73
69
 
74
70
  watch: {
@@ -159,18 +155,17 @@ export default baseMixins.extend<options>().extend({
159
155
  },
160
156
  attrs: {
161
157
  ...this.attrs$,
158
+ autocomplete: 'one-time-code',
162
159
  disabled: this.isDisabled,
163
160
  readonly: this.isReadonly,
164
161
  type: this.type,
165
162
  id: `${this.computedId}--${otpIdx}`,
166
163
  class: `otp-field-box--${otpIdx}`,
167
- maxlength: 1,
168
164
  },
169
165
  on: Object.assign(listeners, {
170
166
  blur: this.onBlur,
171
167
  input: (e: Event) => this.onInput(e, otpIdx),
172
168
  focus: (e: Event) => this.onFocus(e, otpIdx),
173
- paste: (e: ClipboardEvent) => this.onPaste(e, otpIdx),
174
169
  keydown: this.onKeyDown,
175
170
  keyup: (e: KeyboardEvent) => this.onKeyUp(e, otpIdx),
176
171
  }),
@@ -212,22 +207,31 @@ export default baseMixins.extend<options>().extend({
212
207
  e && this.$emit('focus', e)
213
208
  }
214
209
  },
215
- onInput (e: Event, otpIdx: number) {
210
+ onInput (e: Event, index: number) {
211
+ const maxCursor = +this.length - 1
212
+
216
213
  const target = e.target as HTMLInputElement
217
214
  const value = target.value
218
- this.applyValue(otpIdx, target.value, () => {
219
- this.internalValue = this.otp.join('')
220
- })
221
- this.badInput = target.validity && target.validity.badInput
215
+ const inputDataArray = value?.split('') || []
216
+
217
+ const newOtp: string[] = [...this.otp]
218
+ for (let i = 0; i < inputDataArray.length; i++) {
219
+ const appIdx = index + i
220
+ if (appIdx > maxCursor) break
221
+ newOtp[appIdx] = inputDataArray[i].toString()
222
+ }
223
+ if (!inputDataArray.length) {
224
+ newOtp.splice(index, 1)
225
+ }
226
+
227
+ this.otp = newOtp
228
+ this.internalValue = this.otp.join('')
222
229
 
223
- const nextIndex = otpIdx + 1
224
- if (value) {
225
- if (nextIndex < +this.length) {
226
- this.changeFocus(nextIndex)
227
- } else {
228
- this.clearFocus(otpIdx)
229
- this.onCompleted()
230
- }
230
+ if (index + inputDataArray.length >= +this.length) {
231
+ this.onCompleted()
232
+ this.clearFocus(index)
233
+ } else if (inputDataArray.length) {
234
+ this.changeFocus(index + inputDataArray.length)
231
235
  }
232
236
  },
233
237
  clearFocus (index: number) {
@@ -255,30 +259,6 @@ export default baseMixins.extend<options>().extend({
255
259
 
256
260
  VInput.options.methods.onMouseUp.call(this, e)
257
261
  },
258
- onPaste (event: ClipboardEvent, index: number) {
259
- const maxCursor = +this.length - 1
260
- const inputVal = event?.clipboardData?.getData('Text')
261
- const inputDataArray = inputVal?.split('') || []
262
- event.preventDefault()
263
- const newOtp: string[] = [...this.otp]
264
- for (let i = 0; i < inputDataArray.length; i++) {
265
- const appIdx = index + i
266
- if (appIdx > maxCursor) break
267
- newOtp[appIdx] = inputDataArray[i].toString()
268
- }
269
- this.otp = newOtp
270
- this.internalValue = this.otp.join('')
271
- const targetFocus = Math.min(index + inputDataArray.length, maxCursor)
272
- this.changeFocus(targetFocus)
273
-
274
- if (newOtp.length === +this.length) { this.onCompleted(); this.clearFocus(targetFocus) }
275
- },
276
- applyValue (index: number, inputVal: string, next: Function) {
277
- const newOtp: string[] = [...this.otp]
278
- newOtp[index] = inputVal
279
- this.otp = newOtp
280
- next()
281
- },
282
262
  changeFocus (index: number) {
283
263
  this.onFocus(undefined, index || 0)
284
264
  },
@@ -173,14 +173,7 @@ describe('VOtpInput.ts', () => {
173
173
  expect(change).toHaveBeenCalledTimes(2)
174
174
  })
175
175
 
176
- it('should process input when paste event', async () => {
177
- const getData = jest.fn(() => '1337078')
178
- const event = {
179
- clipboardData: {
180
- getData,
181
- },
182
- }
183
-
176
+ it('should process input on paste', async () => {
184
177
  const wrapper = mountFunction({})
185
178
 
186
179
  const input = wrapper.findAll('input').at(0)
@@ -190,30 +183,13 @@ describe('VOtpInput.ts', () => {
190
183
  await wrapper.vm.$nextTick()
191
184
  expect(document.activeElement === element).toBe(true)
192
185
 
193
- input.trigger('paste', event)
186
+ element.value = '1337078'
187
+ input.trigger('input')
194
188
  await wrapper.vm.$nextTick()
195
189
 
196
190
  expect(wrapper.vm.otp).toStrictEqual('133707'.split(''))
197
191
  })
198
192
 
199
- it('should process input when paste event with empty event', async () => {
200
- const event = {}
201
-
202
- const wrapper = mountFunction({})
203
-
204
- const input = wrapper.findAll('input').at(0)
205
-
206
- const element = input.element as HTMLInputElement
207
- input.trigger('focus')
208
- await wrapper.vm.$nextTick()
209
- expect(document.activeElement === element).toBe(true)
210
-
211
- input.trigger('paste', event)
212
- await wrapper.vm.$nextTick()
213
-
214
- expect(wrapper.vm.otp).toStrictEqual(''.split(''))
215
- })
216
-
217
193
  it('should clear cursor when input typing is done', async () => {
218
194
  const onFinish = jest.fn()
219
195
  const clearFocus = jest.fn()
@@ -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
 
@@ -6,10 +6,6 @@
6
6
  label
7
7
  color: map-deep-get($material, 'text', 'disabled')
8
8
 
9
- .v-icon
10
- // needed for helper override
11
- color: map-deep-get($material, 'selection-controls', 'disabled') !important
12
-
13
9
  .v-radio
14
10
  align-items: center
15
11
  display: flex
@@ -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 {