vuetify 2.6.16 → 2.7.1

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 (328) hide show
  1. package/dist/json/attributes.json +33 -1
  2. package/dist/json/tags.json +8 -0
  3. package/dist/json/web-types.json +144 -25
  4. package/dist/vuetify.css +52 -9
  5. package/dist/vuetify.css.map +1 -1
  6. package/dist/vuetify.js +688 -259
  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/VCalendar/mixins/calendar-base.js +1 -1
  11. package/es5/components/VCalendar/mixins/calendar-base.js.map +1 -1
  12. package/es5/components/VDataTable/VDataTable.js +96 -61
  13. package/es5/components/VDataTable/VDataTable.js.map +1 -1
  14. package/es5/components/VExpansionPanel/VExpansionPanelContent.js +3 -1
  15. package/es5/components/VExpansionPanel/VExpansionPanelContent.js.map +1 -1
  16. package/es5/components/VExpansionPanel/VExpansionPanelHeader.js +3 -1
  17. package/es5/components/VExpansionPanel/VExpansionPanelHeader.js.map +1 -1
  18. package/es5/components/VInput/VInput.js +12 -1
  19. package/es5/components/VInput/VInput.js.map +1 -1
  20. package/es5/components/VItemGroup/VItem.js +18 -2
  21. package/es5/components/VItemGroup/VItem.js.map +1 -1
  22. package/es5/components/VMenu/VMenu.js +11 -3
  23. package/es5/components/VMenu/VMenu.js.map +1 -1
  24. package/es5/components/VPagination/VPagination.js +8 -2
  25. package/es5/components/VPagination/VPagination.js.map +1 -1
  26. package/es5/components/VRadioGroup/VRadio.js +14 -4
  27. package/es5/components/VRadioGroup/VRadio.js.map +1 -1
  28. package/es5/components/VSelect/VSelect.js +3 -1
  29. package/es5/components/VSelect/VSelect.js.map +1 -1
  30. package/es5/components/VSkeletonLoader/VSkeletonLoader.js +10 -5
  31. package/es5/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  32. package/es5/components/VSlideGroup/VSlideGroup.js +5 -1
  33. package/es5/components/VSlideGroup/VSlideGroup.js.map +1 -1
  34. package/es5/components/VTabs/VTab.js +4 -0
  35. package/es5/components/VTabs/VTab.js.map +1 -1
  36. package/es5/components/VTimePicker/VTimePicker.js +17 -0
  37. package/es5/components/VTimePicker/VTimePicker.js.map +1 -1
  38. package/es5/framework.js +1 -1
  39. package/es5/locale/af.js +7 -1
  40. package/es5/locale/af.js.map +1 -1
  41. package/es5/locale/ar.js +7 -1
  42. package/es5/locale/ar.js.map +1 -1
  43. package/es5/locale/az.js +7 -1
  44. package/es5/locale/az.js.map +1 -1
  45. package/es5/locale/bg.js +7 -1
  46. package/es5/locale/bg.js.map +1 -1
  47. package/es5/locale/ca.js +7 -1
  48. package/es5/locale/ca.js.map +1 -1
  49. package/es5/locale/ckb.js +7 -1
  50. package/es5/locale/ckb.js.map +1 -1
  51. package/es5/locale/cs.js +7 -1
  52. package/es5/locale/cs.js.map +1 -1
  53. package/es5/locale/da.js +7 -1
  54. package/es5/locale/da.js.map +1 -1
  55. package/es5/locale/de.js +7 -1
  56. package/es5/locale/de.js.map +1 -1
  57. package/es5/locale/el.js +7 -1
  58. package/es5/locale/el.js.map +1 -1
  59. package/es5/locale/en.js +7 -1
  60. package/es5/locale/en.js.map +1 -1
  61. package/es5/locale/es.js +7 -1
  62. package/es5/locale/es.js.map +1 -1
  63. package/es5/locale/et.js +7 -1
  64. package/es5/locale/et.js.map +1 -1
  65. package/es5/locale/fa.js +7 -1
  66. package/es5/locale/fa.js.map +1 -1
  67. package/es5/locale/fi.js +7 -1
  68. package/es5/locale/fi.js.map +1 -1
  69. package/es5/locale/fr.js +7 -1
  70. package/es5/locale/fr.js.map +1 -1
  71. package/es5/locale/he.js +7 -1
  72. package/es5/locale/he.js.map +1 -1
  73. package/es5/locale/hr.js +7 -1
  74. package/es5/locale/hr.js.map +1 -1
  75. package/es5/locale/hu.js +7 -1
  76. package/es5/locale/hu.js.map +1 -1
  77. package/es5/locale/id.js +7 -1
  78. package/es5/locale/id.js.map +1 -1
  79. package/es5/locale/it.js +7 -1
  80. package/es5/locale/it.js.map +1 -1
  81. package/es5/locale/ja.js +7 -1
  82. package/es5/locale/ja.js.map +1 -1
  83. package/es5/locale/ko.js +7 -1
  84. package/es5/locale/ko.js.map +1 -1
  85. package/es5/locale/lt.js +7 -1
  86. package/es5/locale/lt.js.map +1 -1
  87. package/es5/locale/lv.js +7 -1
  88. package/es5/locale/lv.js.map +1 -1
  89. package/es5/locale/nl.js +7 -1
  90. package/es5/locale/nl.js.map +1 -1
  91. package/es5/locale/no.js +7 -1
  92. package/es5/locale/no.js.map +1 -1
  93. package/es5/locale/pl.js +7 -1
  94. package/es5/locale/pl.js.map +1 -1
  95. package/es5/locale/pt.js +7 -1
  96. package/es5/locale/pt.js.map +1 -1
  97. package/es5/locale/ro.js +7 -1
  98. package/es5/locale/ro.js.map +1 -1
  99. package/es5/locale/ru.js +7 -1
  100. package/es5/locale/ru.js.map +1 -1
  101. package/es5/locale/sk.js +7 -1
  102. package/es5/locale/sk.js.map +1 -1
  103. package/es5/locale/sl.js +7 -1
  104. package/es5/locale/sl.js.map +1 -1
  105. package/es5/locale/sr-Cyrl.js +7 -1
  106. package/es5/locale/sr-Cyrl.js.map +1 -1
  107. package/es5/locale/sr-Latn.js +7 -1
  108. package/es5/locale/sr-Latn.js.map +1 -1
  109. package/es5/locale/sv.js +7 -1
  110. package/es5/locale/sv.js.map +1 -1
  111. package/es5/locale/th.js +7 -1
  112. package/es5/locale/th.js.map +1 -1
  113. package/es5/locale/tr.js +7 -1
  114. package/es5/locale/tr.js.map +1 -1
  115. package/es5/locale/uk.js +7 -1
  116. package/es5/locale/uk.js.map +1 -1
  117. package/es5/locale/vi.js +7 -1
  118. package/es5/locale/vi.js.map +1 -1
  119. package/es5/locale/zh-Hans.js +7 -1
  120. package/es5/locale/zh-Hans.js.map +1 -1
  121. package/es5/locale/zh-Hant.js +7 -1
  122. package/es5/locale/zh-Hant.js.map +1 -1
  123. package/es5/mixins/groupable/index.js +9 -1
  124. package/es5/mixins/groupable/index.js.map +1 -1
  125. package/es5/{components/VCalendar/mixins/mouse.js → mixins/mouse/index.js} +14 -6
  126. package/es5/mixins/mouse/index.js.map +1 -0
  127. package/es5/mixins/validatable/index.js +14 -4
  128. package/es5/mixins/validatable/index.js.map +1 -1
  129. package/lib/components/VCalendar/mixins/calendar-base.js +1 -1
  130. package/lib/components/VCalendar/mixins/calendar-base.js.map +1 -1
  131. package/lib/components/VDataTable/VDataTable.js +56 -24
  132. package/lib/components/VDataTable/VDataTable.js.map +1 -1
  133. package/lib/components/VExpansionPanel/VExpansionPanelContent.js +3 -1
  134. package/lib/components/VExpansionPanel/VExpansionPanelContent.js.map +1 -1
  135. package/lib/components/VExpansionPanel/VExpansionPanelHeader.js +3 -1
  136. package/lib/components/VExpansionPanel/VExpansionPanelHeader.js.map +1 -1
  137. package/lib/components/VInput/VInput.js +11 -1
  138. package/lib/components/VInput/VInput.js.map +1 -1
  139. package/lib/components/VItemGroup/VItem.js +14 -3
  140. package/lib/components/VItemGroup/VItem.js.map +1 -1
  141. package/lib/components/VMenu/VMenu.js +7 -0
  142. package/lib/components/VMenu/VMenu.js.map +1 -1
  143. package/lib/components/VPagination/VPagination.js +8 -2
  144. package/lib/components/VPagination/VPagination.js.map +1 -1
  145. package/lib/components/VRadioGroup/VRadio.js +14 -4
  146. package/lib/components/VRadioGroup/VRadio.js.map +1 -1
  147. package/lib/components/VSelect/VSelect.js +4 -1
  148. package/lib/components/VSelect/VSelect.js.map +1 -1
  149. package/lib/components/VSkeletonLoader/VSkeletonLoader.js +10 -5
  150. package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  151. package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
  152. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  153. package/lib/components/VTabs/VTab.js +4 -0
  154. package/lib/components/VTabs/VTab.js.map +1 -1
  155. package/lib/components/VTimePicker/VTimePicker.js +19 -0
  156. package/lib/components/VTimePicker/VTimePicker.js.map +1 -1
  157. package/lib/framework.js +1 -1
  158. package/lib/locale/af.js +7 -1
  159. package/lib/locale/af.js.map +1 -1
  160. package/lib/locale/ar.js +7 -1
  161. package/lib/locale/ar.js.map +1 -1
  162. package/lib/locale/az.js +7 -1
  163. package/lib/locale/az.js.map +1 -1
  164. package/lib/locale/bg.js +7 -1
  165. package/lib/locale/bg.js.map +1 -1
  166. package/lib/locale/ca.js +7 -1
  167. package/lib/locale/ca.js.map +1 -1
  168. package/lib/locale/ckb.js +7 -1
  169. package/lib/locale/ckb.js.map +1 -1
  170. package/lib/locale/cs.js +7 -1
  171. package/lib/locale/cs.js.map +1 -1
  172. package/lib/locale/da.js +7 -1
  173. package/lib/locale/da.js.map +1 -1
  174. package/lib/locale/de.js +7 -1
  175. package/lib/locale/de.js.map +1 -1
  176. package/lib/locale/el.js +7 -1
  177. package/lib/locale/el.js.map +1 -1
  178. package/lib/locale/en.js +7 -1
  179. package/lib/locale/en.js.map +1 -1
  180. package/lib/locale/es.js +7 -1
  181. package/lib/locale/es.js.map +1 -1
  182. package/lib/locale/et.js +7 -1
  183. package/lib/locale/et.js.map +1 -1
  184. package/lib/locale/fa.js +7 -1
  185. package/lib/locale/fa.js.map +1 -1
  186. package/lib/locale/fi.js +7 -1
  187. package/lib/locale/fi.js.map +1 -1
  188. package/lib/locale/fr.js +7 -1
  189. package/lib/locale/fr.js.map +1 -1
  190. package/lib/locale/he.js +7 -1
  191. package/lib/locale/he.js.map +1 -1
  192. package/lib/locale/hr.js +7 -1
  193. package/lib/locale/hr.js.map +1 -1
  194. package/lib/locale/hu.js +7 -1
  195. package/lib/locale/hu.js.map +1 -1
  196. package/lib/locale/id.js +7 -1
  197. package/lib/locale/id.js.map +1 -1
  198. package/lib/locale/it.js +7 -1
  199. package/lib/locale/it.js.map +1 -1
  200. package/lib/locale/ja.js +7 -1
  201. package/lib/locale/ja.js.map +1 -1
  202. package/lib/locale/ko.js +7 -1
  203. package/lib/locale/ko.js.map +1 -1
  204. package/lib/locale/lt.js +7 -1
  205. package/lib/locale/lt.js.map +1 -1
  206. package/lib/locale/lv.js +7 -1
  207. package/lib/locale/lv.js.map +1 -1
  208. package/lib/locale/nl.js +7 -1
  209. package/lib/locale/nl.js.map +1 -1
  210. package/lib/locale/no.js +7 -1
  211. package/lib/locale/no.js.map +1 -1
  212. package/lib/locale/pl.js +7 -1
  213. package/lib/locale/pl.js.map +1 -1
  214. package/lib/locale/pt.js +7 -1
  215. package/lib/locale/pt.js.map +1 -1
  216. package/lib/locale/ro.js +7 -1
  217. package/lib/locale/ro.js.map +1 -1
  218. package/lib/locale/ru.js +7 -1
  219. package/lib/locale/ru.js.map +1 -1
  220. package/lib/locale/sk.js +7 -1
  221. package/lib/locale/sk.js.map +1 -1
  222. package/lib/locale/sl.js +7 -1
  223. package/lib/locale/sl.js.map +1 -1
  224. package/lib/locale/sr-Cyrl.js +7 -1
  225. package/lib/locale/sr-Cyrl.js.map +1 -1
  226. package/lib/locale/sr-Latn.js +7 -1
  227. package/lib/locale/sr-Latn.js.map +1 -1
  228. package/lib/locale/sv.js +7 -1
  229. package/lib/locale/sv.js.map +1 -1
  230. package/lib/locale/th.js +7 -1
  231. package/lib/locale/th.js.map +1 -1
  232. package/lib/locale/tr.js +7 -1
  233. package/lib/locale/tr.js.map +1 -1
  234. package/lib/locale/uk.js +7 -1
  235. package/lib/locale/uk.js.map +1 -1
  236. package/lib/locale/vi.js +7 -1
  237. package/lib/locale/vi.js.map +1 -1
  238. package/lib/locale/zh-Hans.js +7 -1
  239. package/lib/locale/zh-Hans.js.map +1 -1
  240. package/lib/locale/zh-Hant.js +7 -1
  241. package/lib/locale/zh-Hant.js.map +1 -1
  242. package/lib/mixins/groupable/index.js +9 -1
  243. package/lib/mixins/groupable/index.js.map +1 -1
  244. package/lib/{components/VCalendar/mixins/mouse.js → mixins/mouse/index.js} +12 -6
  245. package/lib/mixins/mouse/index.js.map +1 -0
  246. package/lib/mixins/validatable/index.js +14 -4
  247. package/lib/mixins/validatable/index.js.map +1 -1
  248. package/package.json +2 -2
  249. package/src/components/VCalendar/mixins/calendar-base.ts +1 -1
  250. package/src/components/VDataTable/VDataTable.ts +69 -21
  251. package/src/components/VDataTable/__tests__/VDataTable.spec.ts +28 -0
  252. package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +15 -15
  253. package/src/components/VExpansionPanel/VExpansionPanelContent.ts +1 -1
  254. package/src/components/VExpansionPanel/VExpansionPanelHeader.ts +1 -1
  255. package/src/components/VFileInput/__tests__/__snapshots__/VFileInput.spec.ts.snap +18 -18
  256. package/src/components/VForm/__tests__/VForm.spec.ts +22 -1
  257. package/src/components/VInput/VInput.ts +12 -1
  258. package/src/components/VInput/__tests__/VInput.spec.ts +7 -0
  259. package/src/components/VItemGroup/VItem.sass +4 -0
  260. package/src/components/VItemGroup/VItem.ts +12 -1
  261. package/src/components/VMenu/VMenu.ts +8 -1
  262. package/src/components/VMenu/__tests__/VMenu.spec.ts +130 -0
  263. package/src/components/VPagination/VPagination.ts +17 -12
  264. package/src/components/VRadioGroup/VRadio.ts +10 -4
  265. package/src/components/VSelect/VSelect.ts +4 -1
  266. package/src/components/VSelect/__tests__/__snapshots__/VSelect2.spec.ts.snap +2 -2
  267. package/src/components/VSkeletonLoader/VSkeletonLoader.ts +10 -5
  268. package/src/components/VSkeletonLoader/__tests__/VSkeletonLoader.spec.ts +7 -0
  269. package/src/components/VSkeletonLoader/__tests__/__snapshots__/VSkeletonLoader.spec.ts.snap +31 -0
  270. package/src/components/VSlideGroup/VSlideGroup.ts +4 -0
  271. package/src/components/VTabs/VTab.ts +5 -0
  272. package/src/components/VTabs/VTabs.sass +1 -1
  273. package/src/components/VTabs/__tests__/VTabs.spec.ts +22 -0
  274. package/src/components/VTabs/_variables.scss +1 -0
  275. package/src/components/VTextField/__tests__/VTextField.spec.ts +15 -8
  276. package/src/components/VTimePicker/VTimePicker.ts +18 -0
  277. package/src/components/VTimePicker/__tests__/VTimePicker.spec.ts +65 -0
  278. package/src/locale/af.ts +6 -0
  279. package/src/locale/ar.ts +6 -0
  280. package/src/locale/az.ts +6 -0
  281. package/src/locale/bg.ts +6 -0
  282. package/src/locale/ca.ts +6 -0
  283. package/src/locale/ckb.ts +6 -0
  284. package/src/locale/cs.ts +6 -0
  285. package/src/locale/da.ts +6 -0
  286. package/src/locale/de.ts +6 -0
  287. package/src/locale/el.ts +6 -0
  288. package/src/locale/en.ts +6 -0
  289. package/src/locale/es.ts +6 -0
  290. package/src/locale/et.ts +6 -0
  291. package/src/locale/fa.ts +6 -0
  292. package/src/locale/fi.ts +6 -0
  293. package/src/locale/fr.ts +6 -0
  294. package/src/locale/he.ts +6 -0
  295. package/src/locale/hr.ts +6 -0
  296. package/src/locale/hu.ts +6 -0
  297. package/src/locale/id.ts +6 -0
  298. package/src/locale/it.ts +6 -0
  299. package/src/locale/ja.ts +6 -0
  300. package/src/locale/ko.ts +6 -0
  301. package/src/locale/lt.ts +6 -0
  302. package/src/locale/lv.ts +6 -0
  303. package/src/locale/nl.ts +6 -0
  304. package/src/locale/no.ts +6 -0
  305. package/src/locale/pl.ts +6 -0
  306. package/src/locale/pt.ts +6 -0
  307. package/src/locale/ro.ts +6 -0
  308. package/src/locale/ru.ts +6 -0
  309. package/src/locale/sk.ts +6 -0
  310. package/src/locale/sl.ts +6 -0
  311. package/src/locale/sr-Cyrl.ts +6 -0
  312. package/src/locale/sr-Latn.ts +6 -0
  313. package/src/locale/sv.ts +6 -0
  314. package/src/locale/th.ts +6 -0
  315. package/src/locale/tr.ts +6 -0
  316. package/src/locale/uk.ts +6 -0
  317. package/src/locale/vi.ts +6 -0
  318. package/src/locale/zh-Hans.ts +6 -0
  319. package/src/locale/zh-Hant.ts +6 -0
  320. package/src/mixins/groupable/index.ts +9 -2
  321. package/src/{components/VCalendar/mixins → mixins/mouse}/__tests__/mouse.spec.ts +2 -2
  322. package/src/{components/VCalendar/mixins/mouse.ts → mixins/mouse/index.ts} +10 -4
  323. package/src/mixins/validatable/index.ts +10 -4
  324. package/src/services/presets/__tests__/__snapshots__/presets.spec.ts.snap +2 -2
  325. package/src/styles/settings/_variables.scss +3 -2
  326. package/types/index.d.ts +6 -0
  327. package/es5/components/VCalendar/mixins/mouse.js.map +0 -1
  328. package/lib/components/VCalendar/mixins/mouse.js.map +0 -1
@@ -12,7 +12,10 @@ const baseMixins = mixins(Colorable, RegistrableInject('form'), Themeable);
12
12
  export default baseMixins.extend({
13
13
  name: 'validatable',
14
14
  props: {
15
- disabled: Boolean,
15
+ disabled: {
16
+ type: Boolean,
17
+ default: null
18
+ },
16
19
  error: Boolean,
17
20
  errorCount: {
18
21
  type: [Number, String],
@@ -26,7 +29,10 @@ export default baseMixins.extend({
26
29
  type: [String, Array],
27
30
  default: () => []
28
31
  },
29
- readonly: Boolean,
32
+ readonly: {
33
+ type: Boolean,
34
+ default: null
35
+ },
30
36
  rules: {
31
37
  type: Array,
32
38
  default: () => []
@@ -115,7 +121,9 @@ export default baseMixins.extend({
115
121
  },
116
122
 
117
123
  isDisabled() {
118
- return this.disabled || !!this.form && this.form.disabled;
124
+ var _a;
125
+
126
+ return (_a = this.disabled) !== null && _a !== void 0 ? _a : !!this.form && this.form.disabled;
119
127
  },
120
128
 
121
129
  isInteractive() {
@@ -123,7 +131,9 @@ export default baseMixins.extend({
123
131
  },
124
132
 
125
133
  isReadonly() {
126
- return this.readonly || !!this.form && this.form.readonly;
134
+ var _a;
135
+
136
+ return (_a = this.readonly) !== null && _a !== void 0 ? _a : !!this.form && this.form.readonly;
127
137
  },
128
138
 
129
139
  shouldValidate() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/validatable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'form', any>('form'),\n Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'validatable',\n\n props: {\n disabled: Boolean,\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n messages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n readonly: Boolean,\n rules: {\n type: Array,\n default: () => [],\n } as PropValidator<InputValidationRules>,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n validateOnBlur: Boolean,\n value: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled || (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly || (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages && this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages && this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeDestroy () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage | null): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : null\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/mixins/validatable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'form', any>('form'),\n Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'validatable',\n\n props: {\n disabled: {\n type: Boolean,\n default: null,\n },\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n messages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n readonly: {\n type: Boolean,\n default: null,\n },\n rules: {\n type: Array,\n default: () => [],\n } as PropValidator<InputValidationRules>,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n validateOnBlur: Boolean,\n value: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled ?? (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly ?? (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages && this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages && this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeDestroy () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage | null): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : null\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\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.16",
4
+ "version": "2.7.1",
5
5
  "author": {
6
6
  "name": "John Leider",
7
7
  "email": "john@vuetifyjs.com"
@@ -114,5 +114,5 @@
114
114
  "attributes": "dist/json/attributes.json"
115
115
  },
116
116
  "web-types": "dist/json/web-types.json",
117
- "gitHead": "2b18f2c3baac3d99b9cf50294f267980c13aeae5"
117
+ "gitHead": "2127ff1fb332700f4e1a2e4a41843162217f5bb3"
118
118
  }
@@ -3,7 +3,7 @@
3
3
  import mixins from '../../../util/mixins'
4
4
  import Colorable from '../../../mixins/colorable'
5
5
  import Localable from '../../../mixins/localable'
6
- import Mouse from './mouse'
6
+ import Mouse from '../../../mixins/mouse'
7
7
  import Themeable from '../../../mixins/themeable'
8
8
  import Times from './times'
9
9
 
@@ -13,7 +13,9 @@ import {
13
13
  DataItemsPerPageOption,
14
14
  ItemGroup,
15
15
  RowClassFunction,
16
+ RowStyleFunction,
16
17
  DataTableItemProps,
18
+ DataTableFilterMode,
17
19
  } from 'vuetify/types'
18
20
 
19
21
  // Components
@@ -31,6 +33,7 @@ import MobileRow from './MobileRow'
31
33
 
32
34
  // Mixins
33
35
  import Loadable from '../../mixins/loadable'
36
+ import Mouse from '../../mixins/mouse'
34
37
 
35
38
  // Directives
36
39
  import ripple from '../../directives/ripple'
@@ -39,7 +42,7 @@ import ripple from '../../directives/ripple'
39
42
  import mixins from '../../util/mixins'
40
43
  import { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys, getPropertyFromItem } from '../../util/helpers'
41
44
  import { breaking } from '../../util/console'
42
- import { mergeClasses } from '../../util/mergeData'
45
+ import { mergeClasses, mergeStyles } from '../../util/mergeData'
43
46
 
44
47
  function filterFn (item: any, search: string | null, filter: DataTableFilterFunction) {
45
48
  return (header: DataTableHeader) => {
@@ -53,27 +56,46 @@ function searchTableItems (
53
56
  search: string | null,
54
57
  headersWithCustomFilters: DataTableHeader[],
55
58
  headersWithoutCustomFilters: DataTableHeader[],
56
- customFilter: DataTableFilterFunction
59
+ customFilter: DataTableFilterFunction,
60
+ filterMode: DataTableFilterMode,
57
61
  ) {
58
62
  search = typeof search === 'string' ? search.trim() : null
59
63
 
60
- return items.filter(item => {
61
- // Headers with custom filters are evaluated whether or not a search term has been provided.
62
- // We need to match every filter to be included in the results.
63
- const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))
64
+ if (filterMode === 'union') {
65
+ // If the `search` property is empty and there are no custom filters in use, there is nothing to do.
66
+ if (!(search && headersWithoutCustomFilters.length) && !headersWithCustomFilters.length) return items
64
67
 
65
- // Headers without custom filters are only filtered by the `search` property if it is defined.
66
- // We only need a single column to match the search term to be included in the results.
67
- const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))
68
+ return items.filter(item => {
69
+ // Headers with custom filters are evaluated whether or not a search term has been provided.
70
+ if (headersWithCustomFilters.length && headersWithCustomFilters.every(filterFn(item, search, defaultFilter))) {
71
+ return true
72
+ }
73
+
74
+ // Otherwise, the `search` property is used to filter columns without a custom filter.
75
+ return (search && headersWithoutCustomFilters.some(filterFn(item, search, customFilter)))
76
+ })
77
+ } else if (filterMode === 'intersection') {
78
+ return items.filter(item => {
79
+ // Headers with custom filters are evaluated whether or not a search term has been provided.
80
+ // We need to match every filter to be included in the results.
81
+ const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))
82
+
83
+ // Headers without custom filters are only filtered by the `search` property if it is defined.
84
+ // We only need a single column to match the search term to be included in the results.
85
+ const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))
68
86
 
69
- return matchesColumnFilters && matchesSearchTerm
70
- })
87
+ return matchesColumnFilters && matchesSearchTerm
88
+ })
89
+ } else {
90
+ return items
91
+ }
71
92
  }
72
93
 
73
94
  /* @vue/component */
74
95
  export default mixins(
75
96
  VDataIterator,
76
97
  Loadable,
98
+ Mouse,
77
99
  ).extend({
78
100
  name: 'v-data-table',
79
101
 
@@ -109,10 +131,18 @@ export default mixins(
109
131
  type: Function,
110
132
  default: defaultFilter,
111
133
  } as PropValidator<typeof defaultFilter>,
134
+ filterMode: {
135
+ type: String,
136
+ default: 'intersection',
137
+ } as PropValidator<DataTableFilterMode>,
112
138
  itemClass: {
113
139
  type: [String, Function],
114
140
  default: () => '',
115
141
  } as PropValidator<RowClassFunction | string>,
142
+ itemStyle: {
143
+ type: [String, Function],
144
+ default: () => '',
145
+ } as PropValidator<RowStyleFunction | string>,
116
146
  loaderHeight: {
117
147
  type: [Number, String],
118
148
  default: 4,
@@ -222,15 +252,38 @@ export default mixins(
222
252
  this.widths = Array.from(this.$el.querySelectorAll('th')).map(e => e.clientWidth)
223
253
  },
224
254
  customFilterWithColumns (items: any[], search: string) {
225
- return searchTableItems(items, search, this.headersWithCustomFilters, this.headersWithoutCustomFilters, this.customFilter)
255
+ return searchTableItems(
256
+ items,
257
+ search,
258
+ this.headersWithCustomFilters,
259
+ this.headersWithoutCustomFilters,
260
+ this.customFilter,
261
+ this.filterMode
262
+ )
226
263
  },
227
264
  customSortWithHeaders (items: any[], sortBy: string[], sortDesc: boolean[], locale: string) {
228
265
  return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters)
229
266
  },
230
267
  createItemProps (item: any, index: number): DataTableItemProps {
231
- const props = VDataIterator.options.methods.createItemProps.call(this, item, index)
268
+ const data = {
269
+ ...VDataIterator.options.methods.createItemProps.call(this, item, index),
270
+ headers: this.computedHeaders,
271
+ }
232
272
 
233
- return Object.assign(props, { headers: this.computedHeaders })
273
+ return {
274
+ ...data,
275
+ attrs: {
276
+ class: {
277
+ 'v-data-table__selected': data.isSelected,
278
+ },
279
+ },
280
+ on: {
281
+ ...this.getDefaultMouseEventHandlers(':row', () => data, true),
282
+ // TODO: the first argument should be the event, and the second argument should be data,
283
+ // but this is a breaking change so it's for v3
284
+ click: (event: MouseEvent) => this.$emit('click:row', item, data, event),
285
+ },
286
+ }
234
287
  },
235
288
  genCaption (props: DataScopeProps) {
236
289
  if (this.caption) return [this.$createElement('caption', [this.caption])]
@@ -502,6 +555,7 @@ export default mixins(
502
555
  { ...classes, 'v-data-table__selected': data.isSelected },
503
556
  getPropertyFromItem(item, this.itemClass)
504
557
  ),
558
+ style: mergeStyles({}, getPropertyFromItem(item, this.itemStyle)),
505
559
  props: {
506
560
  headers: this.computedHeaders,
507
561
  hideDefaultHeader: this.hideDefaultHeader,
@@ -510,13 +564,7 @@ export default mixins(
510
564
  rtl: this.$vuetify.rtl,
511
565
  },
512
566
  scopedSlots,
513
- on: {
514
- // TODO: for click, the first argument should be the event, and the second argument should be data,
515
- // but this is a breaking change so it's for v3
516
- click: (event: MouseEvent) => this.$emit('click:row', item, data, event),
517
- contextmenu: (event: MouseEvent) => this.$emit('contextmenu:row', event, data),
518
- dblclick: (event: MouseEvent) => this.$emit('dblclick:row', event, data),
519
- },
567
+ on: data.on,
520
568
  })
521
569
  },
522
570
  genBody (props: DataScopeProps): VNode | string | VNodeChildren {
@@ -957,11 +957,34 @@ describe('VDataTable.ts', () => {
957
957
  expect(wrapper.html()).toMatchSnapshot()
958
958
  })
959
959
 
960
+ // https://github.com/vuetifyjs/vuetify/issues/11600
961
+ it('should return rows from columns that match custom filters', async () => {
962
+ const wrapper = mountFunction({
963
+ propsData: {
964
+ items: testItems,
965
+ filterMode: 'union',
966
+ headers: [
967
+ { text: 'Dessert (100g serving)', align: 'left', value: 'name' },
968
+ { text: 'Calories', value: 'calories', filter: value => value === 159 },
969
+ { text: 'Fat (g)', value: 'fat' },
970
+ { text: 'Carbs (g)', value: 'carbs' },
971
+ { text: 'Protein (g)', value: 'protein' },
972
+ { text: 'Iron (%)', value: 'iron' },
973
+ ],
974
+ },
975
+ })
976
+
977
+ wrapper.setProps({ search: 'eclair' })
978
+ await wrapper.vm.$nextTick()
979
+ expect(wrapper.vm.internalCurrentItems).toHaveLength(2)
980
+ })
981
+
960
982
  // https://github.com/vuetifyjs/vuetify/issues/11179
961
983
  it('should return rows from columns that exclusively match custom filters', async () => {
962
984
  const wrapper = mountFunction({
963
985
  propsData: {
964
986
  items: testItems,
987
+ filterMode: 'intersection',
965
988
  headers: [
966
989
  { text: 'Dessert (100g serving)', align: 'left', value: 'name' },
967
990
  { text: 'Calories', value: 'calories', filter: value => value === 159 },
@@ -973,6 +996,11 @@ describe('VDataTable.ts', () => {
973
996
  },
974
997
  })
975
998
 
999
+ wrapper.setProps({ search: 'eclair' })
1000
+ await wrapper.vm.$nextTick()
1001
+ expect(wrapper.vm.internalCurrentItems).toHaveLength(0)
1002
+
1003
+ wrapper.setProps({ search: 'frozen' })
976
1004
  await wrapper.vm.$nextTick()
977
1005
  expect(wrapper.vm.internalCurrentItems).toHaveLength(1)
978
1006
  })
@@ -2874,18 +2874,18 @@ exports[`VDataTable.ts should hide group button when column is not groupable 1`]
2874
2874
  <div role="button"
2875
2875
  aria-haspopup="listbox"
2876
2876
  aria-expanded="false"
2877
- aria-owns="list-747"
2877
+ aria-owns="list-763"
2878
2878
  class="v-input__slot"
2879
2879
  >
2880
2880
  <div class="v-select__slot">
2881
- <label for="input-747"
2881
+ <label for="input-763"
2882
2882
  class="v-label theme--light"
2883
2883
  style="left: 0px; position: absolute;"
2884
2884
  >
2885
2885
  Sort by
2886
2886
  </label>
2887
2887
  <div class="v-select__selections">
2888
- <input id="input-747"
2888
+ <input id="input-763"
2889
2889
  readonly="readonly"
2890
2890
  type="text"
2891
2891
  aria-readonly="false"
@@ -3424,7 +3424,7 @@ exports[`VDataTable.ts should hide group button when column is not groupable 1`]
3424
3424
  <div role="button"
3425
3425
  aria-haspopup="listbox"
3426
3426
  aria-expanded="false"
3427
- aria-owns="list-751"
3427
+ aria-owns="list-767"
3428
3428
  class="v-input__slot"
3429
3429
  >
3430
3430
  <div class="v-select__slot">
@@ -3433,7 +3433,7 @@ exports[`VDataTable.ts should hide group button when column is not groupable 1`]
3433
3433
  10
3434
3434
  </div>
3435
3435
  <input aria-label="Rows per page:"
3436
- id="input-751"
3436
+ id="input-767"
3437
3437
  readonly="readonly"
3438
3438
  type="text"
3439
3439
  aria-readonly="false"
@@ -9436,19 +9436,19 @@ exports[`VDataTable.ts should render with item scoped slot 1`] = `
9436
9436
  </thead>
9437
9437
  <tbody>
9438
9438
  <div>
9439
- {"item":{"name":"Frozen Yogurt","calories":159,"fat":6,"carbs":24,"protein":4,"iron":"1%","class":"test"},"index":0,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
9439
+ {"item":{"name":"Frozen Yogurt","calories":159,"fat":6,"carbs":24,"protein":4,"iron":"1%","class":"test"},"index":0,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
9440
9440
  </div>
9441
9441
  <div>
9442
- {"item":{"name":"Ice cream sandwich","calories":237,"fat":9,"carbs":37,"protein":4.3,"iron":"1%","class":["test","second"]},"index":1,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
9442
+ {"item":{"name":"Ice cream sandwich","calories":237,"fat":9,"carbs":37,"protein":4.3,"iron":"1%","class":["test","second"]},"index":1,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
9443
9443
  </div>
9444
9444
  <div>
9445
- {"item":{"name":"Eclair","calories":262,"fat":16,"carbs":23,"protein":6,"iron":"7%","class":{"test":true,"second":false}},"index":2,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
9445
+ {"item":{"name":"Eclair","calories":262,"fat":16,"carbs":23,"protein":6,"iron":"7%","class":{"test":true,"second":false}},"index":2,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
9446
9446
  </div>
9447
9447
  <div>
9448
- {"item":{"name":"Cupcake","calories":305,"fat":3.7,"carbs":67,"protein":4.3,"iron":"8%"},"index":3,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
9448
+ {"item":{"name":"Cupcake","calories":305,"fat":3.7,"carbs":67,"protein":4.3,"iron":"8%"},"index":3,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
9449
9449
  </div>
9450
9450
  <div>
9451
- {"item":{"name":"Gingerbread","calories":356,"fat":16,"carbs":49,"protein":3.9,"iron":"16%"},"index":4,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
9451
+ {"item":{"name":"Gingerbread","calories":356,"fat":16,"carbs":49,"protein":3.9,"iron":"16%"},"index":4,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
9452
9452
  </div>
9453
9453
  </tbody>
9454
9454
  </table>
@@ -11354,18 +11354,18 @@ exports[`VDataTable.ts should respect mustSort property on options 1`] = `
11354
11354
  <div role="button"
11355
11355
  aria-haspopup="listbox"
11356
11356
  aria-expanded="false"
11357
- aria-owns="list-731"
11357
+ aria-owns="list-747"
11358
11358
  class="v-input__slot"
11359
11359
  >
11360
11360
  <div class="v-select__slot">
11361
- <label for="input-731"
11361
+ <label for="input-747"
11362
11362
  class="v-label theme--light"
11363
11363
  style="left: 0px; position: absolute;"
11364
11364
  >
11365
11365
  Sort by
11366
11366
  </label>
11367
11367
  <div class="v-select__selections">
11368
- <input id="input-731"
11368
+ <input id="input-747"
11369
11369
  readonly="readonly"
11370
11370
  type="text"
11371
11371
  aria-readonly="false"
@@ -11504,7 +11504,7 @@ exports[`VDataTable.ts should respect mustSort property on options 1`] = `
11504
11504
  <div role="button"
11505
11505
  aria-haspopup="listbox"
11506
11506
  aria-expanded="false"
11507
- aria-owns="list-735"
11507
+ aria-owns="list-751"
11508
11508
  class="v-input__slot"
11509
11509
  >
11510
11510
  <div class="v-select__slot">
@@ -11513,7 +11513,7 @@ exports[`VDataTable.ts should respect mustSort property on options 1`] = `
11513
11513
  10
11514
11514
  </div>
11515
11515
  <input aria-label="Rows per page:"
11516
- id="input-735"
11516
+ id="input-751"
11517
11517
  readonly="readonly"
11518
11518
  type="text"
11519
11519
  aria-readonly="false"
@@ -67,7 +67,7 @@ export default baseMixins.extend<options>().extend({
67
67
  value: this.isActive,
68
68
  }],
69
69
  }), [
70
- h('div', { class: 'v-expansion-panel-content__wrap' }, getSlot(this)),
70
+ h('div', { class: 'v-expansion-panel-content__wrap' }, getSlot(this, 'default', { open: this.isActive })),
71
71
  ]),
72
72
  ]))
73
73
  },
@@ -80,7 +80,7 @@ export default baseMixins.extend<options>().extend({
80
80
  this.$emit('click', e)
81
81
  },
82
82
  genIcon () {
83
- const icon = getSlot(this, 'actions') ||
83
+ const icon = getSlot(this, 'actions', { open: this.isActive }) ||
84
84
  [this.$createElement(VIcon, this.expandIcon)]
85
85
 
86
86
  return this.$createElement(VFadeTransition, [