vuetify 3.3.3 → 3.3.4

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 (308) hide show
  1. package/dist/_component-variables-labs.sass +2 -0
  2. package/dist/json/attributes.json +452 -12
  3. package/dist/json/importMap-labs.json +32 -0
  4. package/dist/json/importMap.json +20 -20
  5. package/dist/json/tags.json +150 -0
  6. package/dist/json/web-types.json +1609 -21
  7. package/dist/vuetify-labs.css +469 -192
  8. package/dist/vuetify-labs.d.ts +5178 -217
  9. package/dist/vuetify-labs.esm.js +1902 -990
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1902 -990
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +210 -203
  14. package/dist/vuetify.d.ts +60 -45
  15. package/dist/vuetify.esm.js +142 -104
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +142 -104
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +159 -160
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/blueprints/index.d.mts +32 -25
  23. package/lib/blueprints/md1.d.mts +32 -25
  24. package/lib/blueprints/md2.d.mts +32 -25
  25. package/lib/blueprints/md3.d.mts +32 -25
  26. package/lib/components/VAppBar/VAppBar.mjs +3 -10
  27. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  28. package/lib/components/VAutocomplete/VAutocomplete.css +4 -22
  29. package/lib/components/VAutocomplete/VAutocomplete.mjs +1 -1
  30. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  31. package/lib/components/VAutocomplete/VAutocomplete.sass +6 -17
  32. package/lib/components/VBreadcrumbs/index.d.mts +7 -7
  33. package/lib/components/VBtn/VBtn.css +11 -11
  34. package/lib/components/VBtn/VBtn.sass +1 -1
  35. package/lib/components/VBtn/_mixins.scss +1 -1
  36. package/lib/components/VChip/VChip.css +67 -67
  37. package/lib/components/VChip/_variables.scss +1 -1
  38. package/lib/components/VCombobox/VCombobox.css +4 -22
  39. package/lib/components/VCombobox/VCombobox.sass +6 -17
  40. package/lib/components/VCombobox/_variables.scss +3 -3
  41. package/lib/components/VCounter/index.d.mts +8 -8
  42. package/lib/components/VField/VField.css +71 -8
  43. package/lib/components/VField/VField.sass +9 -5
  44. package/lib/components/VField/_mixins.sass +7 -0
  45. package/lib/components/VFileInput/VFileInput.css +2 -17
  46. package/lib/components/VFileInput/VFileInput.mjs +0 -2
  47. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  48. package/lib/components/VFileInput/VFileInput.sass +2 -11
  49. package/lib/components/VFileInput/_variables.scss +3 -3
  50. package/lib/components/VInput/VInput.css +14 -1
  51. package/lib/components/VInput/VInput.sass +6 -0
  52. package/lib/components/VInput/_variables.scss +5 -1
  53. package/lib/components/VList/VListItem.mjs +1 -1
  54. package/lib/components/VList/VListItem.mjs.map +1 -1
  55. package/lib/components/VSelect/VSelect.css +2 -20
  56. package/lib/components/VSelect/VSelect.mjs +1 -1
  57. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  58. package/lib/components/VSelect/VSelect.sass +2 -12
  59. package/lib/components/VSelect/_variables.scss +3 -3
  60. package/lib/components/VTabs/VTab.mjs +2 -2
  61. package/lib/components/VTabs/VTab.mjs.map +1 -1
  62. package/lib/components/VTimePicker/VTimePickerTitle.mjs +1 -1
  63. package/lib/components/index.d.mts +15 -15
  64. package/lib/components/index.mjs +1 -2
  65. package/lib/components/index.mjs.map +1 -1
  66. package/lib/composables/icons.mjs.map +1 -1
  67. package/lib/composables/list-items.mjs +5 -2
  68. package/lib/composables/list-items.mjs.map +1 -1
  69. package/lib/composables/nested/nested.mjs +1 -1
  70. package/lib/composables/nested/nested.mjs.map +1 -1
  71. package/lib/entry-bundler.mjs +1 -1
  72. package/lib/framework.mjs +1 -1
  73. package/lib/iconsets/fa-svg.d.mts +1 -0
  74. package/lib/iconsets/fa.d.mts +1 -0
  75. package/lib/iconsets/fa.mjs +2 -1
  76. package/lib/iconsets/fa.mjs.map +1 -1
  77. package/lib/iconsets/fa4.d.mts +1 -0
  78. package/lib/iconsets/fa4.mjs +2 -1
  79. package/lib/iconsets/fa4.mjs.map +1 -1
  80. package/lib/iconsets/md.d.mts +1 -0
  81. package/lib/iconsets/md.mjs +2 -1
  82. package/lib/iconsets/md.mjs.map +1 -1
  83. package/lib/iconsets/mdi-svg.d.mts +1 -0
  84. package/lib/iconsets/mdi-svg.mjs +2 -1
  85. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  86. package/lib/iconsets/mdi.d.mts +1 -0
  87. package/lib/iconsets/mdi.mjs +2 -1
  88. package/lib/iconsets/mdi.mjs.map +1 -1
  89. package/lib/index.d.mts +45 -30
  90. package/lib/labs/VDataTable/VDataTableVirtual.mjs +16 -12
  91. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  92. package/lib/labs/VDataTable/composables/headers.mjs +2 -5
  93. package/lib/labs/VDataTable/composables/headers.mjs.map +1 -1
  94. package/lib/labs/VDateInput/VDateInput.mjs +127 -0
  95. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -0
  96. package/lib/labs/VDateInput/VDateInput.sass +11 -0
  97. package/lib/labs/VDateInput/VDateRangeInput.mjs +223 -0
  98. package/lib/labs/VDateInput/VDateRangeInput.mjs.map +1 -0
  99. package/lib/labs/VDateInput/VDateRangeInput.sass +10 -0
  100. package/lib/labs/VDateInput/composables.mjs +59 -0
  101. package/lib/labs/VDateInput/composables.mjs.map +1 -0
  102. package/lib/labs/VDateInput/index.d.mts +1352 -0
  103. package/lib/labs/VDateInput/index.mjs +3 -0
  104. package/lib/labs/VDateInput/index.mjs.map +1 -0
  105. package/lib/labs/VDatePicker/VDateCard.css +33 -0
  106. package/lib/labs/VDatePicker/VDateCard.mjs +112 -0
  107. package/lib/labs/VDatePicker/VDateCard.mjs.map +1 -0
  108. package/lib/labs/VDatePicker/VDateCard.sass +32 -0
  109. package/lib/labs/VDatePicker/VDatePicker.css +23 -0
  110. package/lib/labs/VDatePicker/VDatePicker.mjs +172 -0
  111. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -0
  112. package/lib/labs/VDatePicker/VDatePicker.sass +23 -0
  113. package/lib/labs/VDatePicker/VDatePickerControls.css +15 -0
  114. package/lib/labs/VDatePicker/VDatePickerControls.mjs +80 -0
  115. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -0
  116. package/lib/labs/VDatePicker/VDatePickerControls.sass +15 -0
  117. package/lib/labs/VDatePicker/VDatePickerHeader.css +54 -0
  118. package/lib/labs/VDatePicker/VDatePickerHeader.mjs +75 -0
  119. package/lib/labs/VDatePicker/VDatePickerHeader.mjs.map +1 -0
  120. package/lib/labs/VDatePicker/VDatePickerHeader.sass +51 -0
  121. package/lib/labs/VDatePicker/VDatePickerInput.sass +17 -0
  122. package/lib/labs/VDatePicker/VDatePickerMonth.css +77 -0
  123. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +286 -0
  124. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -0
  125. package/lib/labs/VDatePicker/VDatePickerMonth.sass +69 -0
  126. package/lib/{components → labs}/VDatePicker/VDatePickerTitle.mjs +1 -1
  127. package/lib/labs/VDatePicker/VDatePickerTitle.mjs.map +1 -0
  128. package/lib/labs/VDatePicker/VDatePickerYears.css +18 -0
  129. package/lib/labs/VDatePicker/VDatePickerYears.mjs +64 -0
  130. package/lib/labs/VDatePicker/VDatePickerYears.mjs.map +1 -0
  131. package/lib/labs/VDatePicker/VDatePickerYears.sass +16 -0
  132. package/lib/labs/VDatePicker/composables.mjs +33 -0
  133. package/lib/labs/VDatePicker/composables.mjs.map +1 -0
  134. package/lib/labs/VDatePicker/index.d.mts +4430 -0
  135. package/lib/labs/VDatePicker/index.mjs +7 -0
  136. package/lib/labs/VDatePicker/index.mjs.map +1 -0
  137. package/lib/labs/VDatePicker/mixins/date-picker-table.mjs.map +1 -0
  138. package/lib/labs/VDatePicker/util/createNativeLocaleFormatter.mjs.map +1 -0
  139. package/lib/labs/VDatePicker/util/eventHelpers.mjs.map +1 -0
  140. package/lib/labs/VDatePicker/util/index.mjs.map +1 -0
  141. package/lib/labs/VDatePicker/util/isDateAllowed.mjs.map +1 -0
  142. package/lib/labs/VDatePicker/util/monthChange.mjs.map +1 -0
  143. package/lib/labs/VDatePicker/util/pad.mjs.map +1 -0
  144. package/lib/labs/VDatePicker/util/sanitizeDateString.mjs.map +1 -0
  145. package/lib/labs/VDatePicker/utils.mjs +69 -0
  146. package/lib/labs/VDatePicker/utils.mjs.map +1 -0
  147. package/lib/labs/VDateRangePicker/VDateRangeCard.mjs +87 -0
  148. package/lib/labs/VDateRangePicker/VDateRangeCard.mjs.map +1 -0
  149. package/lib/labs/VDateRangePicker/VDateRangeCard.sass +33 -0
  150. package/lib/labs/VDateRangePicker/VDateRangePicker.mjs +131 -0
  151. package/lib/labs/VDateRangePicker/VDateRangePicker.mjs.map +1 -0
  152. package/lib/labs/VDateRangePicker/VDateRangePicker.sass +21 -0
  153. package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs +103 -0
  154. package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs.map +1 -0
  155. package/lib/labs/VDateRangePicker/VDateRangePickerHeader.sass +39 -0
  156. package/lib/labs/VDateRangePicker/VDateRangePickerMonth.mjs +61 -0
  157. package/lib/labs/VDateRangePicker/VDateRangePickerMonth.mjs.map +1 -0
  158. package/lib/labs/VDateRangePicker/VDateRangePickerMonth.sass +12 -0
  159. package/lib/labs/VDateRangePicker/index.d.mts +1065 -0
  160. package/lib/labs/VDateRangePicker/index.mjs +3 -0
  161. package/lib/labs/VDateRangePicker/index.mjs.map +1 -0
  162. package/lib/labs/VPicker/VPicker.css +57 -0
  163. package/lib/labs/VPicker/VPicker.mjs +47 -0
  164. package/lib/labs/VPicker/VPicker.mjs.map +1 -0
  165. package/lib/labs/VPicker/VPicker.sass +53 -0
  166. package/lib/labs/VPicker/VPickerTitle.mjs +4 -0
  167. package/lib/labs/VPicker/VPickerTitle.mjs.map +1 -0
  168. package/lib/labs/VPicker/index.d.mts +541 -0
  169. package/lib/labs/VPicker/index.mjs +3 -0
  170. package/lib/labs/VPicker/index.mjs.map +1 -0
  171. package/lib/labs/components.d.mts +5136 -198
  172. package/lib/labs/components.mjs +2 -0
  173. package/lib/labs/components.mjs.map +1 -1
  174. package/lib/labs/date/DateAdapter.mjs.map +1 -1
  175. package/lib/labs/date/adapters/vuetify.d.mts +28 -25
  176. package/lib/labs/date/adapters/vuetify.mjs +65 -75
  177. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  178. package/lib/labs/date/date.mjs +82 -11
  179. package/lib/labs/date/date.mjs.map +1 -1
  180. package/lib/labs/date/index.d.mts +31 -30
  181. package/lib/locale/af.mjs +14 -5
  182. package/lib/locale/af.mjs.map +1 -1
  183. package/lib/locale/ar.mjs +14 -5
  184. package/lib/locale/ar.mjs.map +1 -1
  185. package/lib/locale/az.mjs +14 -5
  186. package/lib/locale/az.mjs.map +1 -1
  187. package/lib/locale/bg.mjs +14 -5
  188. package/lib/locale/bg.mjs.map +1 -1
  189. package/lib/locale/ca.mjs +14 -5
  190. package/lib/locale/ca.mjs.map +1 -1
  191. package/lib/locale/ckb.mjs +14 -5
  192. package/lib/locale/ckb.mjs.map +1 -1
  193. package/lib/locale/cs.mjs +14 -5
  194. package/lib/locale/cs.mjs.map +1 -1
  195. package/lib/locale/da.mjs +14 -5
  196. package/lib/locale/da.mjs.map +1 -1
  197. package/lib/locale/de.mjs +14 -5
  198. package/lib/locale/de.mjs.map +1 -1
  199. package/lib/locale/el.mjs +14 -5
  200. package/lib/locale/el.mjs.map +1 -1
  201. package/lib/locale/en.mjs +14 -5
  202. package/lib/locale/en.mjs.map +1 -1
  203. package/lib/locale/es.mjs +14 -5
  204. package/lib/locale/es.mjs.map +1 -1
  205. package/lib/locale/et.mjs +14 -5
  206. package/lib/locale/et.mjs.map +1 -1
  207. package/lib/locale/fa.mjs +14 -5
  208. package/lib/locale/fa.mjs.map +1 -1
  209. package/lib/locale/fi.mjs +14 -5
  210. package/lib/locale/fi.mjs.map +1 -1
  211. package/lib/locale/fr.mjs +14 -5
  212. package/lib/locale/fr.mjs.map +1 -1
  213. package/lib/locale/he.mjs +14 -5
  214. package/lib/locale/he.mjs.map +1 -1
  215. package/lib/locale/hr.mjs +14 -5
  216. package/lib/locale/hr.mjs.map +1 -1
  217. package/lib/locale/hu.mjs +14 -5
  218. package/lib/locale/hu.mjs.map +1 -1
  219. package/lib/locale/id.mjs +14 -5
  220. package/lib/locale/id.mjs.map +1 -1
  221. package/lib/locale/index.d.mts +588 -210
  222. package/lib/locale/it.mjs +14 -5
  223. package/lib/locale/it.mjs.map +1 -1
  224. package/lib/locale/ja.mjs +14 -5
  225. package/lib/locale/ja.mjs.map +1 -1
  226. package/lib/locale/ko.mjs +14 -5
  227. package/lib/locale/ko.mjs.map +1 -1
  228. package/lib/locale/lt.mjs +14 -5
  229. package/lib/locale/lt.mjs.map +1 -1
  230. package/lib/locale/lv.mjs +14 -5
  231. package/lib/locale/lv.mjs.map +1 -1
  232. package/lib/locale/nl.mjs +14 -5
  233. package/lib/locale/nl.mjs.map +1 -1
  234. package/lib/locale/no.mjs +14 -5
  235. package/lib/locale/no.mjs.map +1 -1
  236. package/lib/locale/pl.mjs +14 -5
  237. package/lib/locale/pl.mjs.map +1 -1
  238. package/lib/locale/pt.mjs +14 -5
  239. package/lib/locale/pt.mjs.map +1 -1
  240. package/lib/locale/ro.mjs +14 -5
  241. package/lib/locale/ro.mjs.map +1 -1
  242. package/lib/locale/ru.mjs +14 -5
  243. package/lib/locale/ru.mjs.map +1 -1
  244. package/lib/locale/sk.mjs +14 -5
  245. package/lib/locale/sk.mjs.map +1 -1
  246. package/lib/locale/sl.mjs +14 -5
  247. package/lib/locale/sl.mjs.map +1 -1
  248. package/lib/locale/sr-Cyrl.mjs +14 -5
  249. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  250. package/lib/locale/sr-Latn.mjs +14 -5
  251. package/lib/locale/sr-Latn.mjs.map +1 -1
  252. package/lib/locale/sv.mjs +14 -5
  253. package/lib/locale/sv.mjs.map +1 -1
  254. package/lib/locale/th.mjs +14 -5
  255. package/lib/locale/th.mjs.map +1 -1
  256. package/lib/locale/tr.mjs +14 -5
  257. package/lib/locale/tr.mjs.map +1 -1
  258. package/lib/locale/uk.mjs +14 -5
  259. package/lib/locale/uk.mjs.map +1 -1
  260. package/lib/locale/vi.mjs +14 -5
  261. package/lib/locale/vi.mjs.map +1 -1
  262. package/lib/locale/zh-Hans.mjs +14 -5
  263. package/lib/locale/zh-Hans.mjs.map +1 -1
  264. package/lib/locale/zh-Hant.mjs +14 -5
  265. package/lib/locale/zh-Hant.mjs.map +1 -1
  266. package/lib/util/dateTimeUtils.mjs +68 -0
  267. package/lib/util/dateTimeUtils.mjs.map +1 -1
  268. package/package.json +5 -2
  269. package/lib/components/VDatePicker/VDatePicker.mjs +0 -475
  270. package/lib/components/VDatePicker/VDatePicker.mjs.map +0 -1
  271. package/lib/components/VDatePicker/VDatePickerDateTable.mjs +0 -120
  272. package/lib/components/VDatePicker/VDatePickerDateTable.mjs.map +0 -1
  273. package/lib/components/VDatePicker/VDatePickerHeader.mjs +0 -136
  274. package/lib/components/VDatePicker/VDatePickerHeader.mjs.map +0 -1
  275. package/lib/components/VDatePicker/VDatePickerHeader.sass +0 -46
  276. package/lib/components/VDatePicker/VDatePickerMonthTable.mjs +0 -48
  277. package/lib/components/VDatePicker/VDatePickerMonthTable.mjs.map +0 -1
  278. package/lib/components/VDatePicker/VDatePickerTitle.mjs.map +0 -1
  279. package/lib/components/VDatePicker/VDatePickerYears.mjs +0 -84
  280. package/lib/components/VDatePicker/VDatePickerYears.mjs.map +0 -1
  281. package/lib/components/VDatePicker/VDatePickerYears.sass +0 -30
  282. package/lib/components/VDatePicker/index.mjs +0 -18
  283. package/lib/components/VDatePicker/index.mjs.map +0 -1
  284. package/lib/components/VDatePicker/mixins/date-picker-table.mjs.map +0 -1
  285. package/lib/components/VDatePicker/util/createNativeLocaleFormatter.mjs.map +0 -1
  286. package/lib/components/VDatePicker/util/eventHelpers.mjs.map +0 -1
  287. package/lib/components/VDatePicker/util/index.mjs.map +0 -1
  288. package/lib/components/VDatePicker/util/isDateAllowed.mjs.map +0 -1
  289. package/lib/components/VDatePicker/util/monthChange.mjs.map +0 -1
  290. package/lib/components/VDatePicker/util/pad.mjs.map +0 -1
  291. package/lib/components/VDatePicker/util/sanitizeDateString.mjs.map +0 -1
  292. package/lib/components/VPicker/VPicker.mjs +0 -86
  293. package/lib/components/VPicker/VPicker.mjs.map +0 -1
  294. package/lib/components/VPicker/VPicker.sass +0 -94
  295. package/lib/components/VPicker/index.mjs +0 -4
  296. package/lib/components/VPicker/index.mjs.map +0 -1
  297. /package/lib/{components → labs}/VDatePicker/VDatePickerTable.sass +0 -0
  298. /package/lib/{components → labs}/VDatePicker/VDatePickerTitle.sass +0 -0
  299. /package/lib/{components → labs}/VDatePicker/_variables.scss +0 -0
  300. /package/lib/{components → labs}/VDatePicker/mixins/date-picker-table.mjs +0 -0
  301. /package/lib/{components → labs}/VDatePicker/util/createNativeLocaleFormatter.mjs +0 -0
  302. /package/lib/{components → labs}/VDatePicker/util/eventHelpers.mjs +0 -0
  303. /package/lib/{components → labs}/VDatePicker/util/index.mjs +0 -0
  304. /package/lib/{components → labs}/VDatePicker/util/isDateAllowed.mjs +0 -0
  305. /package/lib/{components → labs}/VDatePicker/util/monthChange.mjs +0 -0
  306. /package/lib/{components → labs}/VDatePicker/util/pad.mjs +0 -0
  307. /package/lib/{components → labs}/VDatePicker/util/sanitizeDateString.mjs +0 -0
  308. /package/lib/{components → labs}/VPicker/_variables.scss +0 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.3.3
2
+ * Vuetify v3.3.4
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1643,12 +1643,21 @@ var en = {
1643
1643
  lastPage: 'Last page',
1644
1644
  pageText: '{0}-{1} of {2}'
1645
1645
  },
1646
+ dateRangeInput: {
1647
+ divider: 'to'
1648
+ },
1646
1649
  datePicker: {
1647
- itemsSelected: '{0} selected',
1648
- nextMonthAriaLabel: 'Next month',
1649
- nextYearAriaLabel: 'Next year',
1650
- prevMonthAriaLabel: 'Previous month',
1651
- prevYearAriaLabel: 'Previous year'
1650
+ ok: 'OK',
1651
+ cancel: 'Cancel',
1652
+ range: {
1653
+ title: 'Select dates',
1654
+ header: 'Enter dates'
1655
+ },
1656
+ title: 'Select date',
1657
+ header: 'Enter date',
1658
+ input: {
1659
+ placeholder: 'Enter date'
1660
+ }
1652
1661
  },
1653
1662
  noDataText: 'No data available',
1654
1663
  carousel: {
@@ -3631,7 +3640,7 @@ const VAppBar = genericComponent()({
3631
3640
  const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3632
3641
  return height + extensionHeight;
3633
3642
  });
3634
- function setActive() {
3643
+ watchEffect(() => {
3635
3644
  if (scrollBehavior.value.hide) {
3636
3645
  if (scrollBehavior.value.inverted) {
3637
3646
  isActive.value = currentScroll.value > scrollThreshold.value;
@@ -3641,12 +3650,6 @@ const VAppBar = genericComponent()({
3641
3650
  } else {
3642
3651
  isActive.value = true;
3643
3652
  }
3644
- }
3645
- useToggleScope(() => !!props.scrollBehavior, () => {
3646
- watch(currentScroll, setActive, {
3647
- immediate: true
3648
- });
3649
- watch(scrollBehavior, setActive);
3650
3653
  });
3651
3654
  const {
3652
3655
  ssrBootStyles
@@ -4101,7 +4104,8 @@ const aliases = {
4101
4104
  unfold: 'mdi-unfold-more-horizontal',
4102
4105
  file: 'mdi-paperclip',
4103
4106
  plus: 'mdi-plus',
4104
- minus: 'mdi-minus'
4107
+ minus: 'mdi-minus',
4108
+ calendar: 'mdi-calendar'
4105
4109
  };
4106
4110
  const mdi = {
4107
4111
  // Not using mergeProps here, functional components merge props by default (?)
@@ -7311,7 +7315,7 @@ const useNested = props => {
7311
7315
  const useNestedItem = (id, isGroup) => {
7312
7316
  const parent = inject$1(VNestedSymbol, emptyNested);
7313
7317
  const uidSymbol = Symbol(getUid());
7314
- const computedId = computed(() => id.value ?? uidSymbol);
7318
+ const computedId = computed(() => id.value !== undefined ? id.value : uidSymbol);
7315
7319
  const item = {
7316
7320
  ...parent,
7317
7321
  id: computedId,
@@ -7511,7 +7515,7 @@ const VListItem = genericComponent()({
7511
7515
  emit
7512
7516
  } = _ref;
7513
7517
  const link = useLink(props, attrs);
7514
- const id = computed(() => props.value ?? link.href.value);
7518
+ const id = computed(() => props.value === undefined ? link.href.value : props.value);
7515
7519
  const {
7516
7520
  select,
7517
7521
  isSelected,
@@ -7908,10 +7912,13 @@ function useItems(props) {
7908
7912
  }
7909
7913
  function useTransformItems(items, transform) {
7910
7914
  function transformIn(value) {
7911
- return value.map(v => {
7915
+ return value
7916
+ // When the model value is null, returns an InternalItem based on null
7917
+ // only if null is one of the items
7918
+ .filter(v => v !== null || items.value.some(item => item.value === null)).map(v => {
7912
7919
  const existingItem = items.value.find(item => deepEqual(v, item.value));
7913
7920
  // Nullish existingItem means value is a custom input value from combobox
7914
- // In this case, use transformItem to create an { value: unknown } based on value
7921
+ // In this case, use transformItem to create an InternalItem based on value
7915
7922
  return existingItem ?? transform(v);
7916
7923
  });
7917
7924
  }
@@ -10441,7 +10448,7 @@ const VSelect = genericComponent()({
10441
10448
  transformIn,
10442
10449
  transformOut
10443
10450
  } = useItems(props);
10444
- const model = useProxiedModel(props, 'modelValue', [], v => transformIn(wrapInArray(v)), v => {
10451
+ const model = useProxiedModel(props, 'modelValue', [], v => transformIn(v === null ? [null] : wrapInArray(v)), v => {
10445
10452
  const transformed = transformOut(v);
10446
10453
  return props.multiple ? transformed : transformed[0] ?? null;
10447
10454
  });
@@ -10866,7 +10873,7 @@ const VAutocomplete = genericComponent()({
10866
10873
  textColorStyles
10867
10874
  } = useTextColor(color);
10868
10875
  const search = useProxiedModel(props, 'search', '');
10869
- const model = useProxiedModel(props, 'modelValue', [], v => transformIn(wrapInArray(v)), v => {
10876
+ const model = useProxiedModel(props, 'modelValue', [], v => transformIn(v === null ? [null] : wrapInArray(v)), v => {
10870
10877
  const transformed = transformOut(v);
10871
10878
  return props.multiple ? transformed : transformed[0] ?? null;
10872
10879
  });
@@ -15193,8 +15200,6 @@ const VFileInput = genericComponent()({
15193
15200
  "modelValue": model.value,
15194
15201
  "onUpdate:modelValue": $event => model.value = $event,
15195
15202
  "class": ['v-file-input', {
15196
- 'v-file-input--chips': !!props.chips,
15197
- 'v-file-input--selection-slot': !!slots.selection,
15198
15203
  'v-text-field--plain-underlined': isPlainOrUnderlined.value
15199
15204
  }, props.class],
15200
15205
  "style": props.style,
@@ -18191,8 +18196,8 @@ const VTab = genericComponent()({
18191
18196
  const initialScale = prevBox[widthHeight] / nextBox[widthHeight];
18192
18197
  const sigma = 1.5;
18193
18198
  animate(nextEl, {
18194
- backgroundColor: [color, ''],
18195
- transform: [`translate${XY}(${delta}px) scale${XY}(${initialScale})`, `translate${XY}(${delta / sigma}px) scale${XY}(${(scale - 1) / sigma + 1})`, ''],
18199
+ backgroundColor: [color, 'currentcolor'],
18200
+ transform: [`translate${XY}(${delta}px) scale${XY}(${initialScale})`, `translate${XY}(${delta / sigma}px) scale${XY}(${(scale - 1) / sigma + 1})`, 'none'],
18196
18201
  transformOrigin: Array(3).fill(origin)
18197
18202
  }, {
18198
18203
  duration: 225,
@@ -20231,7 +20236,7 @@ const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');
20231
20236
  function createHeaders(props, options) {
20232
20237
  const headers = ref([]);
20233
20238
  const columns = ref([]);
20234
- watch(() => props.headers, () => {
20239
+ watchEffect(() => {
20235
20240
  const wrapped = !props.headers.length ? [] : Array.isArray(props.headers[0]) ? props.headers : [props.headers];
20236
20241
  const flat = wrapped.flatMap((row, index) => row.map(column => ({
20237
20242
  column,
@@ -20351,9 +20356,6 @@ function createHeaders(props, options) {
20351
20356
  return filtered;
20352
20357
  });
20353
20358
  columns.value = fixedRows.at(-1) ?? [];
20354
- }, {
20355
- deep: true,
20356
- immediate: true
20357
20359
  });
20358
20360
  const data = {
20359
20361
  headers,
@@ -21186,18 +21188,22 @@ const VDataTableVirtual = genericComponent()({
21186
21188
  "items": displayItems.value
21187
21189
  }), {
21188
21190
  ...slots,
21189
- item: itemSlotProps => {
21190
- return slots.item?.(itemSlotProps) ?? createVNode(VVirtualScrollItem, {
21191
- "key": itemSlotProps.item.index,
21192
- "dynamicHeight": true,
21193
- "renderless": true,
21194
- "onUpdate:height": height => handleItemResize(itemSlotProps.item.index, height)
21195
- }, {
21196
- default: slotProps => createVNode(VDataTableRow, mergeProps(itemSlotProps.props, slotProps?.props, {
21197
- "key": itemSlotProps.item.index
21198
- }), slots)
21199
- });
21200
- }
21191
+ item: itemSlotProps => createVNode(VVirtualScrollItem, {
21192
+ "key": itemSlotProps.item.index,
21193
+ "dynamicHeight": true,
21194
+ "renderless": true,
21195
+ "onUpdate:height": height => handleItemResize(itemSlotProps.item.index, height)
21196
+ }, {
21197
+ default: slotProps => slots.item?.({
21198
+ ...itemSlotProps,
21199
+ props: {
21200
+ ...itemSlotProps.props,
21201
+ ...slotProps?.props
21202
+ }
21203
+ }) ?? createVNode(VDataTableRow, mergeProps(itemSlotProps.props, slotProps?.props, {
21204
+ "key": itemSlotProps.item.index
21205
+ }), slots)
21206
+ })
21201
21207
  }), createVNode("tr", {
21202
21208
  "style": {
21203
21209
  height: convertToUnit(paddingBottom.value),
@@ -21385,835 +21391,220 @@ const VDataTableServer = genericComponent()({
21385
21391
  }
21386
21392
  });
21387
21393
 
21388
- // Types
21389
-
21390
- const makeVInfiniteScrollProps = propsFactory({
21391
- color: String,
21392
- direction: {
21393
- type: String,
21394
- default: 'vertical',
21395
- validator: v => ['vertical', 'horizontal'].includes(v)
21396
- },
21397
- side: {
21398
- type: String,
21399
- default: 'end',
21400
- validator: v => ['start', 'end', 'both'].includes(v)
21401
- },
21402
- mode: {
21403
- type: String,
21404
- default: 'intersect',
21405
- validator: v => ['intersect', 'manual'].includes(v)
21406
- },
21407
- margin: [Number, String],
21408
- loadMoreText: {
21409
- type: String,
21410
- default: '$vuetify.infiniteScroll.loadMore'
21411
- },
21412
- emptyText: {
21413
- type: String,
21414
- default: '$vuetify.infiniteScroll.empty'
21415
- },
21416
- ...makeDimensionProps(),
21417
- ...makeTagProps()
21418
- }, 'VInfiniteScroll');
21419
- const VInfiniteScrollIntersect = defineComponent({
21420
- name: 'VInfiniteScrollIntersect',
21421
- props: {
21422
- side: {
21423
- type: String,
21424
- required: true
21425
- },
21426
- rootRef: null,
21427
- rootMargin: String
21428
- },
21429
- emits: {
21430
- intersect: side => true
21431
- },
21432
- setup(props, _ref) {
21433
- let {
21434
- emit
21435
- } = _ref;
21436
- const {
21437
- intersectionRef,
21438
- isIntersecting
21439
- } = useIntersectionObserver(entries => {}, props.rootMargin ? {
21440
- root: props.rootRef,
21441
- rootMargin: props.rootMargin
21442
- } : undefined);
21443
- watch(isIntersecting, async val => {
21444
- if (val) emit('intersect', props.side);
21445
- });
21446
- useRender(() => createVNode("div", {
21447
- "class": "v-infinite-scroll-intersect",
21448
- "ref": intersectionRef
21449
- }, [createTextVNode("\xA0")]));
21450
- return {};
21451
- }
21452
- });
21453
- const VInfiniteScroll = genericComponent()({
21454
- name: 'VInfiniteScroll',
21455
- props: makeVInfiniteScrollProps(),
21456
- emits: {
21457
- load: options => true
21458
- },
21459
- setup(props, _ref2) {
21460
- let {
21461
- slots,
21462
- emit
21463
- } = _ref2;
21464
- const rootEl = ref();
21465
- const startStatus = ref('ok');
21466
- const endStatus = ref('ok');
21467
- const margin = computed(() => convertToUnit(props.margin));
21468
- function setScrollAmount(amount) {
21469
- if (!rootEl.value) return;
21470
- const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
21471
- rootEl.value[property] = amount;
21472
- }
21473
- function getScrollAmount() {
21474
- if (!rootEl.value) return 0;
21475
- const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
21476
- return rootEl.value[property];
21477
- }
21478
- function getScrollSize() {
21479
- if (!rootEl.value) return 0;
21480
- const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
21481
- return rootEl.value[property];
21482
- }
21483
- function getContainerSize() {
21484
- if (!rootEl.value) return 0;
21485
- const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
21486
- return rootEl.value[property];
21487
- }
21488
- onMounted(() => {
21489
- if (!rootEl.value) return;
21490
- if (props.side === 'start') {
21491
- setScrollAmount(getScrollSize());
21492
- } else if (props.side === 'both') {
21493
- setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
21494
- }
21495
- });
21496
- function setStatus(side, status) {
21497
- if (side === 'start') {
21498
- startStatus.value = status;
21499
- } else if (side === 'end') {
21500
- endStatus.value = status;
21501
- }
21502
- }
21503
- function getStatus(side) {
21504
- return side === 'start' ? startStatus.value : endStatus.value;
21505
- }
21506
- let previousScrollSize = 0;
21507
- function handleIntersect(side) {
21508
- const status = getStatus(side);
21509
- if (!rootEl.value || status === 'loading') return;
21510
- previousScrollSize = getScrollSize();
21511
- setStatus(side, 'loading');
21512
- function done(status) {
21513
- setStatus(side, status);
21514
- nextTick(() => {
21515
- if (status === 'ok' && side === 'start') {
21516
- setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
21517
- }
21518
- });
21519
- }
21520
- emit('load', {
21521
- side,
21522
- done
21523
- });
21524
- }
21525
- const {
21526
- t
21527
- } = useLocale();
21528
- function renderSide(side, status) {
21529
- if (props.side !== side && props.side !== 'both') return;
21530
- const onClick = () => handleIntersect(side);
21531
- const slotProps = {
21532
- side,
21533
- props: {
21534
- onClick,
21535
- color: props.color
21536
- }
21537
- };
21538
- if (status === 'error') return slots.error?.(slotProps);
21539
- if (status === 'empty') return slots.empty?.(slotProps) ?? createVNode("div", null, [t(props.emptyText)]);
21540
- if (props.mode === 'manual') {
21541
- if (status === 'loading') {
21542
- return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
21543
- "indeterminate": true,
21544
- "color": props.color
21545
- }, null);
21546
- }
21547
- return slots['load-more']?.(slotProps) ?? createVNode(VBtn, {
21548
- "variant": "outlined",
21549
- "color": props.color,
21550
- "onClick": onClick
21551
- }, {
21552
- default: () => [t(props.loadMoreText)]
21553
- });
21554
- }
21555
- return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
21556
- "indeterminate": true,
21557
- "color": props.color
21558
- }, null);
21559
- }
21560
- const {
21561
- dimensionStyles
21562
- } = useDimension(props);
21563
- useRender(() => {
21564
- const Tag = props.tag;
21565
- const hasStartIntersect = props.side === 'start' || props.side === 'both';
21566
- const hasEndIntersect = props.side === 'end' || props.side === 'both';
21567
- const intersectMode = props.mode === 'intersect';
21568
- return createVNode(Tag, {
21569
- "ref": rootEl,
21570
- "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
21571
- 'v-infinite-scroll--start': hasStartIntersect,
21572
- 'v-infinite-scroll--end': hasEndIntersect
21573
- }],
21574
- "style": dimensionStyles.value
21575
- }, {
21576
- default: () => [createVNode("div", {
21577
- "class": "v-infinite-scroll__side"
21578
- }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
21579
- "key": "start",
21580
- "side": "start",
21581
- "onIntersect": handleIntersect,
21582
- "rootRef": rootEl.value,
21583
- "rootMargin": margin.value
21584
- }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
21585
- "key": "end",
21586
- "side": "end",
21587
- "onIntersect": handleIntersect,
21588
- "rootRef": rootEl.value,
21589
- "rootMargin": margin.value
21590
- }, null), createVNode("div", {
21591
- "class": "v-infinite-scroll__side"
21592
- }, [renderSide('end', endStatus.value)])]
21593
- });
21594
- });
21595
- }
21596
- });
21394
+ // Utilities
21597
21395
 
21598
21396
  // Types
21599
21397
 
21600
- const rootTypes = {
21601
- actions: 'button@2',
21602
- article: 'heading, paragraph',
21603
- avatar: 'avatar',
21604
- button: 'button',
21605
- card: 'image, heading',
21606
- 'card-avatar': 'image, list-item-avatar',
21607
- chip: 'chip',
21608
- 'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',
21609
- 'date-picker-options': 'text, avatar@2',
21610
- 'date-picker-days': 'avatar@28',
21611
- divider: 'divider',
21612
- heading: 'heading',
21613
- image: 'image',
21614
- 'list-item': 'text',
21615
- 'list-item-avatar': 'avatar, text',
21616
- 'list-item-two-line': 'sentences',
21617
- 'list-item-avatar-two-line': 'avatar, sentences',
21618
- 'list-item-three-line': 'paragraph',
21619
- 'list-item-avatar-three-line': 'avatar, paragraph',
21620
- paragraph: 'text@3',
21621
- sentences: 'text@2',
21622
- subtitle: 'text',
21623
- table: 'table-heading, table-thead, table-tbody, table-tfoot',
21624
- 'table-heading': 'chip, text',
21625
- 'table-thead': 'heading@6',
21626
- 'table-tbody': 'table-row-divider@6',
21627
- 'table-row-divider': 'table-row, divider',
21628
- 'table-row': 'text@6',
21629
- 'table-tfoot': 'text@2, avatar@2',
21630
- text: 'text'
21398
+ const firstDay = {
21399
+ '001': 1,
21400
+ AD: 1,
21401
+ AE: 6,
21402
+ AF: 6,
21403
+ AG: 0,
21404
+ AI: 1,
21405
+ AL: 1,
21406
+ AM: 1,
21407
+ AN: 1,
21408
+ AR: 1,
21409
+ AS: 0,
21410
+ AT: 1,
21411
+ AU: 1,
21412
+ AX: 1,
21413
+ AZ: 1,
21414
+ BA: 1,
21415
+ BD: 0,
21416
+ BE: 1,
21417
+ BG: 1,
21418
+ BH: 6,
21419
+ BM: 1,
21420
+ BN: 1,
21421
+ BR: 0,
21422
+ BS: 0,
21423
+ BT: 0,
21424
+ BW: 0,
21425
+ BY: 1,
21426
+ BZ: 0,
21427
+ CA: 0,
21428
+ CH: 1,
21429
+ CL: 1,
21430
+ CM: 1,
21431
+ CN: 1,
21432
+ CO: 0,
21433
+ CR: 1,
21434
+ CY: 1,
21435
+ CZ: 1,
21436
+ DE: 1,
21437
+ DJ: 6,
21438
+ DK: 1,
21439
+ DM: 0,
21440
+ DO: 0,
21441
+ DZ: 6,
21442
+ EC: 1,
21443
+ EE: 1,
21444
+ EG: 6,
21445
+ ES: 1,
21446
+ ET: 0,
21447
+ FI: 1,
21448
+ FJ: 1,
21449
+ FO: 1,
21450
+ FR: 1,
21451
+ GB: 1,
21452
+ 'GB-alt-variant': 0,
21453
+ GE: 1,
21454
+ GF: 1,
21455
+ GP: 1,
21456
+ GR: 1,
21457
+ GT: 0,
21458
+ GU: 0,
21459
+ HK: 0,
21460
+ HN: 0,
21461
+ HR: 1,
21462
+ HU: 1,
21463
+ ID: 0,
21464
+ IE: 1,
21465
+ IL: 0,
21466
+ IN: 0,
21467
+ IQ: 6,
21468
+ IR: 6,
21469
+ IS: 1,
21470
+ IT: 1,
21471
+ JM: 0,
21472
+ JO: 6,
21473
+ JP: 0,
21474
+ KE: 0,
21475
+ KG: 1,
21476
+ KH: 0,
21477
+ KR: 0,
21478
+ KW: 6,
21479
+ KZ: 1,
21480
+ LA: 0,
21481
+ LB: 1,
21482
+ LI: 1,
21483
+ LK: 1,
21484
+ LT: 1,
21485
+ LU: 1,
21486
+ LV: 1,
21487
+ LY: 6,
21488
+ MC: 1,
21489
+ MD: 1,
21490
+ ME: 1,
21491
+ MH: 0,
21492
+ MK: 1,
21493
+ MM: 0,
21494
+ MN: 1,
21495
+ MO: 0,
21496
+ MQ: 1,
21497
+ MT: 0,
21498
+ MV: 5,
21499
+ MX: 0,
21500
+ MY: 1,
21501
+ MZ: 0,
21502
+ NI: 0,
21503
+ NL: 1,
21504
+ NO: 1,
21505
+ NP: 0,
21506
+ NZ: 1,
21507
+ OM: 6,
21508
+ PA: 0,
21509
+ PE: 0,
21510
+ PH: 0,
21511
+ PK: 0,
21512
+ PL: 1,
21513
+ PR: 0,
21514
+ PT: 0,
21515
+ PY: 0,
21516
+ QA: 6,
21517
+ RE: 1,
21518
+ RO: 1,
21519
+ RS: 1,
21520
+ RU: 1,
21521
+ SA: 0,
21522
+ SD: 6,
21523
+ SE: 1,
21524
+ SG: 0,
21525
+ SI: 1,
21526
+ SK: 1,
21527
+ SM: 1,
21528
+ SV: 0,
21529
+ SY: 6,
21530
+ TH: 0,
21531
+ TJ: 1,
21532
+ TM: 1,
21533
+ TR: 1,
21534
+ TT: 0,
21535
+ TW: 0,
21536
+ UA: 1,
21537
+ UM: 0,
21538
+ US: 0,
21539
+ UY: 1,
21540
+ UZ: 1,
21541
+ VA: 1,
21542
+ VE: 0,
21543
+ VI: 0,
21544
+ VN: 1,
21545
+ WS: 0,
21546
+ XK: 1,
21547
+ YE: 0,
21548
+ ZA: 0,
21549
+ ZW: 0
21631
21550
  };
21632
- function genBone(type) {
21633
- let children = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
21634
- return createVNode("div", {
21635
- "class": ['v-skeleton-loader__bone', `v-skeleton-loader__${type}`]
21636
- }, [children]);
21637
- }
21638
- function genBones(bone) {
21639
- // e.g. 'text@3'
21640
- const [type, length] = bone.split('@');
21641
-
21642
- // Generate a length array based upon
21643
- // value after @ in the bone string
21644
- return Array.from({
21645
- length
21646
- }).map(() => genStructure(type));
21647
- }
21648
- function genStructure(type) {
21649
- let children = [];
21650
- if (!type) return children;
21551
+ function getWeekArray(date, locale) {
21552
+ const weeks = [];
21553
+ let currentWeek = [];
21554
+ const firstDayOfMonth = startOfMonth(date);
21555
+ const lastDayOfMonth = endOfMonth(date);
21556
+ const firstDayWeekIndex = firstDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()];
21557
+ const lastDayWeekIndex = lastDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()];
21558
+ for (let i = 0; i < firstDayWeekIndex; i++) {
21559
+ const adjacentDay = new Date(firstDayOfMonth);
21560
+ adjacentDay.setDate(adjacentDay.getDate() - (firstDayWeekIndex - i));
21561
+ currentWeek.push(adjacentDay);
21562
+ }
21563
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21564
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21651
21565
 
21652
- // TODO: figure out a better way to type this
21653
- const bone = rootTypes[type];
21566
+ // Add the day to the current week
21567
+ currentWeek.push(day);
21654
21568
 
21655
- // End of recursion, do nothing
21656
- /* eslint-disable-next-line no-empty, brace-style */
21657
- if (type === bone) ;
21658
- // Array of values - e.g. 'heading, paragraph, text@2'
21659
- else if (type.includes(',')) return mapBones(type);
21660
- // Array of values - e.g. 'paragraph@4'
21661
- else if (type.includes('@')) return genBones(type);
21662
- // Array of values - e.g. 'card@2'
21663
- else if (bone.includes(',')) children = mapBones(bone);
21664
- // Array of values - e.g. 'list-item@2'
21665
- else if (bone.includes('@')) children = genBones(bone);
21666
- // Single value - e.g. 'card-heading'
21667
- else if (bone) children.push(genStructure(bone));
21668
- return [genBone(type, children)];
21569
+ // If the current week has 7 days, add it to the weeks array and start a new week
21570
+ if (currentWeek.length === 7) {
21571
+ weeks.push(currentWeek);
21572
+ currentWeek = [];
21573
+ }
21574
+ }
21575
+ for (let i = 1; i < 7 - lastDayWeekIndex; i++) {
21576
+ const adjacentDay = new Date(lastDayOfMonth);
21577
+ adjacentDay.setDate(adjacentDay.getDate() + i);
21578
+ currentWeek.push(adjacentDay);
21579
+ }
21580
+ weeks.push(currentWeek);
21581
+ return weeks;
21669
21582
  }
21670
- function mapBones(bones) {
21671
- // Remove spaces and return array of structures
21672
- return bones.replace(/\s/g, '').split(',').map(genStructure);
21583
+ function startOfMonth(date) {
21584
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21673
21585
  }
21674
- const makeVSkeletonLoaderProps = propsFactory({
21675
- boilerplate: Boolean,
21676
- color: String,
21677
- loading: Boolean,
21678
- loadingText: {
21679
- type: String,
21680
- default: '$vuetify.loading'
21681
- },
21682
- type: {
21683
- type: [String, Array],
21684
- default: 'image'
21685
- },
21686
- ...makeDimensionProps(),
21687
- ...makeElevationProps(),
21688
- ...makeThemeProps()
21689
- }, 'VSkeletonLoader');
21690
- const VSkeletonLoader = genericComponent()({
21691
- name: 'VSkeletonLoader',
21692
- props: makeVSkeletonLoaderProps(),
21693
- setup(props, _ref) {
21694
- let {
21695
- slots
21696
- } = _ref;
21697
- const {
21698
- backgroundColorClasses,
21699
- backgroundColorStyles
21700
- } = useBackgroundColor(toRef(props, 'color'));
21701
- const {
21702
- dimensionStyles
21703
- } = useDimension(props);
21704
- const {
21705
- elevationClasses
21706
- } = useElevation(props);
21707
- const {
21708
- themeClasses
21709
- } = provideTheme(props);
21710
- const {
21711
- t
21712
- } = useLocale();
21713
- const items = computed(() => genStructure(wrapInArray(props.type).join(',')));
21714
- useRender(() => {
21715
- const isLoading = !slots.default || props.loading;
21716
- return createVNode("div", {
21717
- "class": ['v-skeleton-loader', {
21718
- 'v-skeleton-loader--boilerplate': props.boilerplate
21719
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
21720
- "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
21721
- "aria-busy": !props.boilerplate ? isLoading : undefined,
21722
- "aria-live": !props.boilerplate ? 'polite' : undefined,
21723
- "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
21724
- "role": !props.boilerplate ? 'alert' : undefined
21725
- }, [isLoading ? items.value : slots.default?.()]);
21726
- });
21727
- return {};
21728
- }
21729
- });
21730
-
21731
- var components = /*#__PURE__*/Object.freeze({
21732
- __proto__: null,
21733
- VAlert: VAlert,
21734
- VAlertTitle: VAlertTitle,
21735
- VApp: VApp,
21736
- VAppBar: VAppBar,
21737
- VAppBarNavIcon: VAppBarNavIcon,
21738
- VAppBarTitle: VAppBarTitle,
21739
- VAutocomplete: VAutocomplete,
21740
- VAvatar: VAvatar,
21741
- VBadge: VBadge,
21742
- VBanner: VBanner,
21743
- VBannerActions: VBannerActions,
21744
- VBannerText: VBannerText,
21745
- VBottomNavigation: VBottomNavigation,
21746
- VBottomSheet: VBottomSheet,
21747
- VBreadcrumbs: VBreadcrumbs,
21748
- VBreadcrumbsDivider: VBreadcrumbsDivider,
21749
- VBreadcrumbsItem: VBreadcrumbsItem,
21750
- VBtn: VBtn,
21751
- VBtnGroup: VBtnGroup,
21752
- VBtnToggle: VBtnToggle,
21753
- VCard: VCard,
21754
- VCardActions: VCardActions,
21755
- VCardItem: VCardItem,
21756
- VCardSubtitle: VCardSubtitle,
21757
- VCardText: VCardText,
21758
- VCardTitle: VCardTitle,
21759
- VCarousel: VCarousel,
21760
- VCarouselItem: VCarouselItem,
21761
- VCheckbox: VCheckbox,
21762
- VCheckboxBtn: VCheckboxBtn,
21763
- VChip: VChip,
21764
- VChipGroup: VChipGroup,
21765
- VClassIcon: VClassIcon,
21766
- VCode: VCode,
21767
- VCol: VCol,
21768
- VColorPicker: VColorPicker,
21769
- VCombobox: VCombobox,
21770
- VComponentIcon: VComponentIcon,
21771
- VContainer: VContainer,
21772
- VCounter: VCounter,
21773
- VDataIterator: VDataIterator,
21774
- VDataTable: VDataTable,
21775
- VDataTableFooter: VDataTableFooter,
21776
- VDataTableRow: VDataTableRow,
21777
- VDataTableRows: VDataTableRows,
21778
- VDataTableServer: VDataTableServer,
21779
- VDataTableVirtual: VDataTableVirtual,
21780
- VDefaultsProvider: VDefaultsProvider,
21781
- VDialog: VDialog,
21782
- VDialogBottomTransition: VDialogBottomTransition,
21783
- VDialogTopTransition: VDialogTopTransition,
21784
- VDialogTransition: VDialogTransition,
21785
- VDivider: VDivider,
21786
- VExpandTransition: VExpandTransition,
21787
- VExpandXTransition: VExpandXTransition,
21788
- VExpansionPanel: VExpansionPanel,
21789
- VExpansionPanelText: VExpansionPanelText,
21790
- VExpansionPanelTitle: VExpansionPanelTitle,
21791
- VExpansionPanels: VExpansionPanels,
21792
- VFabTransition: VFabTransition,
21793
- VFadeTransition: VFadeTransition,
21794
- VField: VField,
21795
- VFieldLabel: VFieldLabel,
21796
- VFileInput: VFileInput,
21797
- VFooter: VFooter,
21798
- VForm: VForm,
21799
- VHover: VHover,
21800
- VIcon: VIcon,
21801
- VImg: VImg,
21802
- VInfiniteScroll: VInfiniteScroll,
21803
- VInput: VInput,
21804
- VItem: VItem,
21805
- VItemGroup: VItemGroup,
21806
- VKbd: VKbd,
21807
- VLabel: VLabel,
21808
- VLayout: VLayout,
21809
- VLayoutItem: VLayoutItem,
21810
- VLazy: VLazy,
21811
- VLigatureIcon: VLigatureIcon,
21812
- VList: VList,
21813
- VListGroup: VListGroup,
21814
- VListImg: VListImg,
21815
- VListItem: VListItem,
21816
- VListItemAction: VListItemAction,
21817
- VListItemMedia: VListItemMedia,
21818
- VListItemSubtitle: VListItemSubtitle,
21819
- VListItemTitle: VListItemTitle,
21820
- VListSubheader: VListSubheader,
21821
- VLocaleProvider: VLocaleProvider,
21822
- VMain: VMain,
21823
- VMenu: VMenu,
21824
- VMessages: VMessages,
21825
- VNavigationDrawer: VNavigationDrawer,
21826
- VNoSsr: VNoSsr,
21827
- VOverlay: VOverlay,
21828
- VPagination: VPagination,
21829
- VParallax: VParallax,
21830
- VProgressCircular: VProgressCircular,
21831
- VProgressLinear: VProgressLinear,
21832
- VRadio: VRadio,
21833
- VRadioGroup: VRadioGroup,
21834
- VRangeSlider: VRangeSlider,
21835
- VRating: VRating,
21836
- VResponsive: VResponsive,
21837
- VRow: VRow,
21838
- VScaleTransition: VScaleTransition,
21839
- VScrollXReverseTransition: VScrollXReverseTransition,
21840
- VScrollXTransition: VScrollXTransition,
21841
- VScrollYReverseTransition: VScrollYReverseTransition,
21842
- VScrollYTransition: VScrollYTransition,
21843
- VSelect: VSelect,
21844
- VSelectionControl: VSelectionControl,
21845
- VSelectionControlGroup: VSelectionControlGroup,
21846
- VSheet: VSheet,
21847
- VSkeletonLoader: VSkeletonLoader,
21848
- VSlideGroup: VSlideGroup,
21849
- VSlideGroupItem: VSlideGroupItem,
21850
- VSlideXReverseTransition: VSlideXReverseTransition,
21851
- VSlideXTransition: VSlideXTransition,
21852
- VSlideYReverseTransition: VSlideYReverseTransition,
21853
- VSlideYTransition: VSlideYTransition,
21854
- VSlider: VSlider,
21855
- VSnackbar: VSnackbar,
21856
- VSpacer: VSpacer,
21857
- VSvgIcon: VSvgIcon,
21858
- VSwitch: VSwitch,
21859
- VSystemBar: VSystemBar,
21860
- VTab: VTab,
21861
- VTable: VTable,
21862
- VTabs: VTabs,
21863
- VTextField: VTextField,
21864
- VTextarea: VTextarea,
21865
- VThemeProvider: VThemeProvider,
21866
- VTimeline: VTimeline,
21867
- VTimelineItem: VTimelineItem,
21868
- VToolbar: VToolbar,
21869
- VToolbarItems: VToolbarItems,
21870
- VToolbarTitle: VToolbarTitle,
21871
- VTooltip: VTooltip,
21872
- VValidation: VValidation,
21873
- VVirtualScroll: VVirtualScroll,
21874
- VWindow: VWindow,
21875
- VWindowItem: VWindowItem
21876
- });
21877
-
21878
- // Types
21879
-
21880
- function mounted$2(el, binding) {
21881
- const modifiers = binding.modifiers || {};
21882
- const value = binding.value;
21883
- const {
21884
- once,
21885
- immediate,
21886
- ...modifierKeys
21887
- } = modifiers;
21888
- const defaultValue = !Object.keys(modifierKeys).length;
21889
- const {
21890
- handler,
21891
- options
21892
- } = typeof value === 'object' ? value : {
21893
- handler: value,
21894
- options: {
21895
- attributes: modifierKeys?.attr ?? defaultValue,
21896
- characterData: modifierKeys?.char ?? defaultValue,
21897
- childList: modifierKeys?.child ?? defaultValue,
21898
- subtree: modifierKeys?.sub ?? defaultValue
21899
- }
21900
- };
21901
- const observer = new MutationObserver(function () {
21902
- let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
21903
- let observer = arguments.length > 1 ? arguments[1] : undefined;
21904
- handler?.(mutations, observer);
21905
- if (once) unmounted$2(el, binding);
21906
- });
21907
- if (immediate) handler?.([], observer);
21908
- el._mutate = Object(el._mutate);
21909
- el._mutate[binding.instance.$.uid] = {
21910
- observer
21911
- };
21912
- observer.observe(el, options);
21913
- }
21914
- function unmounted$2(el, binding) {
21915
- if (!el._mutate?.[binding.instance.$.uid]) return;
21916
- el._mutate[binding.instance.$.uid].observer.disconnect();
21917
- delete el._mutate[binding.instance.$.uid];
21586
+ function endOfMonth(date) {
21587
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21918
21588
  }
21919
- const Mutate = {
21920
- mounted: mounted$2,
21921
- unmounted: unmounted$2
21922
- };
21923
-
21924
- // Types
21925
-
21926
- function mounted$1(el, binding) {
21927
- const handler = binding.value;
21928
- const options = {
21929
- passive: !binding.modifiers?.active
21930
- };
21931
- window.addEventListener('resize', handler, options);
21932
- el._onResize = Object(el._onResize);
21933
- el._onResize[binding.instance.$.uid] = {
21934
- handler,
21935
- options
21936
- };
21937
- if (!binding.modifiers?.quiet) {
21938
- handler();
21589
+ function date(value) {
21590
+ if (value == null) return new Date();
21591
+ if (value instanceof Date) return value;
21592
+ if (typeof value === 'string') {
21593
+ const parsed = Date.parse(value);
21594
+ if (!isNaN(parsed)) return new Date(parsed);
21939
21595
  }
21596
+ return null;
21940
21597
  }
21941
- function unmounted$1(el, binding) {
21942
- if (!el._onResize?.[binding.instance.$.uid]) return;
21943
- const {
21944
- handler,
21945
- options
21946
- } = el._onResize[binding.instance.$.uid];
21947
- window.removeEventListener('resize', handler, options);
21948
- delete el._onResize[binding.instance.$.uid];
21949
- }
21950
- const Resize = {
21951
- mounted: mounted$1,
21952
- unmounted: unmounted$1
21953
- };
21954
-
21955
- // Types
21956
-
21957
- function mounted(el, binding) {
21958
- const {
21959
- self = false
21960
- } = binding.modifiers ?? {};
21961
- const value = binding.value;
21962
- const options = typeof value === 'object' && value.options || {
21963
- passive: true
21964
- };
21965
- const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
21966
- const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
21967
- if (!target) return;
21968
- target.addEventListener('scroll', handler, options);
21969
- el._onScroll = Object(el._onScroll);
21970
- el._onScroll[binding.instance.$.uid] = {
21971
- handler,
21972
- options,
21973
- // Don't reference self
21974
- target: self ? undefined : target
21975
- };
21976
- }
21977
- function unmounted(el, binding) {
21978
- if (!el._onScroll?.[binding.instance.$.uid]) return;
21979
- const {
21980
- handler,
21981
- options,
21982
- target = el
21983
- } = el._onScroll[binding.instance.$.uid];
21984
- target.removeEventListener('scroll', handler, options);
21985
- delete el._onScroll[binding.instance.$.uid];
21986
- }
21987
- function updated(el, binding) {
21988
- if (binding.value === binding.oldValue) return;
21989
- unmounted(el, binding);
21990
- mounted(el, binding);
21991
- }
21992
- const Scroll = {
21993
- mounted,
21994
- unmounted,
21995
- updated
21996
- };
21997
-
21998
- var directives = /*#__PURE__*/Object.freeze({
21999
- __proto__: null,
22000
- ClickOutside: ClickOutside,
22001
- Intersect: Intersect,
22002
- Mutate: Mutate,
22003
- Resize: Resize,
22004
- Ripple: Ripple,
22005
- Scroll: Scroll,
22006
- Touch: Touch
22007
- });
22008
-
22009
- // Utilities
22010
-
22011
- // Types
22012
-
22013
- function getWeekArray(date) {
22014
- let currentWeek = [];
22015
- const weeks = [];
22016
- const firstDayOfMonth = startOfMonth(date);
22017
- const lastDayOfMonth = endOfMonth(date);
22018
- for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
22019
- currentWeek.push(null);
22020
- }
22021
- for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
22022
- const day = new Date(date.getFullYear(), date.getMonth(), i);
22023
-
22024
- // Add the day to the current week
22025
- currentWeek.push(day);
22026
-
22027
- // If the current week has 7 days, add it to the weeks array and start a new week
22028
- if (currentWeek.length === 7) {
22029
- weeks.push(currentWeek);
22030
- currentWeek = [];
22031
- }
22032
- }
22033
- for (let i = currentWeek.length; i < 7; i++) {
22034
- currentWeek.push(null);
22035
- }
22036
- weeks.push(currentWeek);
22037
- return weeks;
22038
- }
22039
- function startOfMonth(date) {
22040
- return new Date(date.getFullYear(), date.getMonth(), 1);
22041
- }
22042
- function endOfMonth(date) {
22043
- return new Date(date.getFullYear(), date.getMonth() + 1, 0);
22044
- }
22045
- function date(value) {
22046
- if (value == null) return null;
22047
- if (value instanceof Date) return value;
22048
- if (typeof value === 'string') {
22049
- const parsed = Date.parse(value);
22050
- if (!isNaN(parsed)) return new Date(parsed);
22051
- }
22052
- return null;
22053
- }
22054
- const firstDay = {
22055
- '001': 1,
22056
- AD: 1,
22057
- AE: 6,
22058
- AF: 6,
22059
- AG: 0,
22060
- AI: 1,
22061
- AL: 1,
22062
- AM: 1,
22063
- AN: 1,
22064
- AR: 1,
22065
- AS: 0,
22066
- AT: 1,
22067
- AU: 0,
22068
- AX: 1,
22069
- AZ: 1,
22070
- BA: 1,
22071
- BD: 0,
22072
- BE: 1,
22073
- BG: 1,
22074
- BH: 6,
22075
- BM: 1,
22076
- BN: 1,
22077
- BR: 0,
22078
- BS: 0,
22079
- BT: 0,
22080
- BW: 0,
22081
- BY: 1,
22082
- BZ: 0,
22083
- CA: 0,
22084
- CH: 1,
22085
- CL: 1,
22086
- CM: 1,
22087
- CN: 0,
22088
- CO: 0,
22089
- CR: 1,
22090
- CY: 1,
22091
- CZ: 1,
22092
- DE: 1,
22093
- DJ: 6,
22094
- DK: 1,
22095
- DM: 0,
22096
- DO: 0,
22097
- DZ: 6,
22098
- EC: 1,
22099
- EE: 1,
22100
- EG: 6,
22101
- ES: 1,
22102
- ET: 0,
22103
- FI: 1,
22104
- FJ: 1,
22105
- FO: 1,
22106
- FR: 1,
22107
- GB: 1,
22108
- 'GB-alt-variant': 0,
22109
- GE: 1,
22110
- GF: 1,
22111
- GP: 1,
22112
- GR: 1,
22113
- GT: 0,
22114
- GU: 0,
22115
- HK: 0,
22116
- HN: 0,
22117
- HR: 1,
22118
- HU: 1,
22119
- ID: 0,
22120
- IE: 1,
22121
- IL: 0,
22122
- IN: 0,
22123
- IQ: 6,
22124
- IR: 6,
22125
- IS: 1,
22126
- IT: 1,
22127
- JM: 0,
22128
- JO: 6,
22129
- JP: 0,
22130
- KE: 0,
22131
- KG: 1,
22132
- KH: 0,
22133
- KR: 0,
22134
- KW: 6,
22135
- KZ: 1,
22136
- LA: 0,
22137
- LB: 1,
22138
- LI: 1,
22139
- LK: 1,
22140
- LT: 1,
22141
- LU: 1,
22142
- LV: 1,
22143
- LY: 6,
22144
- MC: 1,
22145
- MD: 1,
22146
- ME: 1,
22147
- MH: 0,
22148
- MK: 1,
22149
- MM: 0,
22150
- MN: 1,
22151
- MO: 0,
22152
- MQ: 1,
22153
- MT: 0,
22154
- MV: 5,
22155
- MX: 0,
22156
- MY: 1,
22157
- MZ: 0,
22158
- NI: 0,
22159
- NL: 1,
22160
- NO: 1,
22161
- NP: 0,
22162
- NZ: 1,
22163
- OM: 6,
22164
- PA: 0,
22165
- PE: 0,
22166
- PH: 0,
22167
- PK: 0,
22168
- PL: 1,
22169
- PR: 0,
22170
- PT: 0,
22171
- PY: 0,
22172
- QA: 6,
22173
- RE: 1,
22174
- RO: 1,
22175
- RS: 1,
22176
- RU: 1,
22177
- SA: 0,
22178
- SD: 6,
22179
- SE: 1,
22180
- SG: 0,
22181
- SI: 1,
22182
- SK: 1,
22183
- SM: 1,
22184
- SV: 0,
22185
- SY: 6,
22186
- TH: 0,
22187
- TJ: 1,
22188
- TM: 1,
22189
- TR: 1,
22190
- TT: 0,
22191
- TW: 0,
22192
- UA: 1,
22193
- UM: 0,
22194
- US: 0,
22195
- UY: 1,
22196
- UZ: 1,
22197
- VA: 1,
22198
- VE: 0,
22199
- VI: 0,
22200
- VN: 1,
22201
- WS: 0,
22202
- XK: 1,
22203
- YE: 0,
22204
- ZA: 0,
22205
- ZW: 0
22206
- };
22207
- const sundayJanuarySecond2000 = new Date(2000, 0, 2);
22208
- function getWeekdays(locale) {
22209
- const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
22210
- return createRange(7).map(i => {
22211
- const weekday = new Date(sundayJanuarySecond2000);
22212
- weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
22213
- return new Intl.DateTimeFormat(locale, {
22214
- weekday: 'long'
22215
- }).format(weekday);
22216
- });
21598
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21599
+ function getWeekdays(locale) {
21600
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21601
+ return createRange(7).map(i => {
21602
+ const weekday = new Date(sundayJanuarySecond2000);
21603
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21604
+ return new Intl.DateTimeFormat(locale, {
21605
+ weekday: 'short'
21606
+ }).format(weekday);
21607
+ });
22217
21608
  }
22218
21609
  function format(value, formatString, locale) {
22219
21610
  const date = new Date(value);
@@ -22231,8 +21622,7 @@ function format(value, formatString, locale) {
22231
21622
  options = {
22232
21623
  weekday: 'short',
22233
21624
  day: 'numeric',
22234
- month: 'short',
22235
- year: 'numeric'
21625
+ month: 'short'
22236
21626
  };
22237
21627
  break;
22238
21628
  case 'keyboardDate':
@@ -22250,6 +21640,11 @@ function format(value, formatString, locale) {
22250
21640
  year: 'numeric'
22251
21641
  };
22252
21642
  break;
21643
+ case 'dayOfMonth':
21644
+ options = {
21645
+ day: 'numeric'
21646
+ };
21647
+ break;
22253
21648
  default:
22254
21649
  options = {
22255
21650
  timeZone: 'UTC',
@@ -22274,149 +21669,1666 @@ function getYear(date) {
22274
21669
  function getMonth(date) {
22275
21670
  return date.getMonth();
22276
21671
  }
22277
- function startOfYear(date) {
22278
- return new Date(date.getFullYear(), 0, 1);
21672
+ function startOfYear(date) {
21673
+ return new Date(date.getFullYear(), 0, 1);
21674
+ }
21675
+ function endOfYear(date) {
21676
+ return new Date(date.getFullYear(), 11, 31);
21677
+ }
21678
+ function isWithinRange(date, range) {
21679
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21680
+ }
21681
+ function isValid(date) {
21682
+ const d = new Date(date);
21683
+ return d instanceof Date && !isNaN(d.getTime());
21684
+ }
21685
+ function isAfter(date, comparing) {
21686
+ return date.getTime() > comparing.getTime();
21687
+ }
21688
+ function isBefore(date, comparing) {
21689
+ return date.getTime() < comparing.getTime();
21690
+ }
21691
+ function isEqual(date, comparing) {
21692
+ return date.getTime() === comparing.getTime();
21693
+ }
21694
+ function isSameDay(date, comparing) {
21695
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21696
+ }
21697
+ function isSameMonth(date, comparing) {
21698
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21699
+ }
21700
+ function getDiff(date, comparing, unit) {
21701
+ const d = new Date(date);
21702
+ const c = new Date(comparing);
21703
+ if (unit === 'month') {
21704
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21705
+ }
21706
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21707
+ }
21708
+ function setYear(date, year) {
21709
+ const d = new Date(date);
21710
+ d.setFullYear(year);
21711
+ return d;
21712
+ }
21713
+ class VuetifyDateAdapter {
21714
+ constructor(options) {
21715
+ this.locale = options.locale;
21716
+ }
21717
+ date(value) {
21718
+ return date(value);
21719
+ }
21720
+ toJsDate(date) {
21721
+ return date;
21722
+ }
21723
+ addDays(date, amount) {
21724
+ return addDays(date, amount);
21725
+ }
21726
+ addMonths(date, amount) {
21727
+ return addMonths(date, amount);
21728
+ }
21729
+ getWeekArray(date) {
21730
+ return getWeekArray(date, this.locale);
21731
+ }
21732
+ startOfMonth(date) {
21733
+ return startOfMonth(date);
21734
+ }
21735
+ endOfMonth(date) {
21736
+ return endOfMonth(date);
21737
+ }
21738
+ format(date, formatString) {
21739
+ return format(date, formatString, this.locale);
21740
+ }
21741
+ isEqual(date, comparing) {
21742
+ return isEqual(date, comparing);
21743
+ }
21744
+ isValid(date) {
21745
+ return isValid(date);
21746
+ }
21747
+ isWithinRange(date, range) {
21748
+ return isWithinRange(date, range);
21749
+ }
21750
+ isAfter(date, comparing) {
21751
+ return isAfter(date, comparing);
21752
+ }
21753
+ isBefore(date, comparing) {
21754
+ return !isAfter(date, comparing) && !isEqual(date, comparing);
21755
+ }
21756
+ isSameDay(date, comparing) {
21757
+ return isSameDay(date, comparing);
21758
+ }
21759
+ isSameMonth(date, comparing) {
21760
+ return isSameMonth(date, comparing);
21761
+ }
21762
+ setYear(date, year) {
21763
+ return setYear(date, year);
21764
+ }
21765
+ getDiff(date, comparing, unit) {
21766
+ return getDiff(date, comparing, unit);
21767
+ }
21768
+ getWeekdays() {
21769
+ return getWeekdays(this.locale);
21770
+ }
21771
+ getYear(date) {
21772
+ return getYear(date);
21773
+ }
21774
+ getMonth(date) {
21775
+ return getMonth(date);
21776
+ }
21777
+ startOfYear(date) {
21778
+ return startOfYear(date);
21779
+ }
21780
+ endOfYear(date) {
21781
+ return endOfYear(date);
21782
+ }
21783
+ }
21784
+
21785
+ // Composables
21786
+
21787
+ // Types
21788
+
21789
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21790
+ function createDate(options) {
21791
+ return mergeDeep({
21792
+ adapter: VuetifyDateAdapter,
21793
+ locale: {
21794
+ af: 'af-ZA',
21795
+ // ar: '', # not the same value for all variants
21796
+ bg: 'bg-BG',
21797
+ ca: 'ca-ES',
21798
+ ckb: '',
21799
+ cs: '',
21800
+ de: 'de-DE',
21801
+ el: 'el-GR',
21802
+ en: 'en-US',
21803
+ // es: '', # not the same value for all variants
21804
+ et: 'et-EE',
21805
+ fa: 'fa-IR',
21806
+ fi: 'fi-FI',
21807
+ // fr: '', #not the same value for all variants
21808
+ hr: 'hr-HR',
21809
+ hu: 'hu-HU',
21810
+ he: 'he-IL',
21811
+ id: 'id-ID',
21812
+ it: 'it-IT',
21813
+ ja: 'ja-JP',
21814
+ ko: 'ko-KR',
21815
+ lv: 'lv-LV',
21816
+ lt: 'lt-LT',
21817
+ nl: 'nl-NL',
21818
+ no: 'nn-NO',
21819
+ pl: 'pl-PL',
21820
+ pt: 'pt-PT',
21821
+ ro: 'ro-RO',
21822
+ ru: 'ru-RU',
21823
+ sk: 'sk-SK',
21824
+ sl: 'sl-SI',
21825
+ srCyrl: 'sr-SP',
21826
+ srLatn: 'sr-SP',
21827
+ sv: 'sv-SE',
21828
+ th: 'th-TH',
21829
+ tr: 'tr-TR',
21830
+ az: 'az-AZ',
21831
+ uk: 'uk-UA',
21832
+ vi: 'vi-VN',
21833
+ zhHans: 'zh-CN',
21834
+ zhHant: 'zh-TW'
21835
+ }
21836
+ }, options);
21837
+ }
21838
+ function useDate() {
21839
+ const date = inject$1(DateAdapterSymbol);
21840
+ const locale = useLocale();
21841
+ if (!date) throw new Error('[Vuetify] Could not find injected date');
21842
+ const instance = typeof date.adapter === 'function'
21843
+ // eslint-disable-next-line new-cap
21844
+ ? new date.adapter({
21845
+ locale: date.locale?.[locale.current.value] ?? locale.current.value
21846
+ }) : date.adapter;
21847
+ watch(locale.current, value => {
21848
+ const newLocale = date.locale ? date.locale[value] : value;
21849
+ instance.locale = newLocale ?? instance.locale;
21850
+ });
21851
+ return instance;
21852
+ }
21853
+ function toIso(adapter, value) {
21854
+ const date = adapter.toJsDate(value);
21855
+ return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
21856
+ }
21857
+ function getMondayOfFirstWeekOfYear(year) {
21858
+ return new Date(year, 0, 1);
21859
+ }
21860
+
21861
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21862
+ function getWeek(adapter, value) {
21863
+ const date = adapter.toJsDate(value);
21864
+ let year = date.getFullYear();
21865
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21866
+ if (date < d1w1) {
21867
+ year = year - 1;
21868
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21869
+ } else {
21870
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21871
+ if (date >= tv) {
21872
+ year = year + 1;
21873
+ d1w1 = tv;
21874
+ }
21875
+ }
21876
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21877
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21878
+ return Math.floor(diffDays / 7) + 1;
21879
+ }
21880
+
21881
+ // Composables
21882
+
21883
+ // Types
21884
+
21885
+ const makeDateProps = propsFactory({
21886
+ modelValue: {
21887
+ type: null,
21888
+ default: () => []
21889
+ },
21890
+ displayDate: {
21891
+ type: null,
21892
+ default: new Date()
21893
+ },
21894
+ inputMode: {
21895
+ type: String,
21896
+ default: 'calendar'
21897
+ },
21898
+ viewMode: {
21899
+ type: String,
21900
+ default: 'month'
21901
+ },
21902
+ format: String
21903
+ }, 'date');
21904
+ const dateEmits = {
21905
+ 'update:modelValue': date => true,
21906
+ 'update:displayDate': date => true,
21907
+ 'update:focused': focused => true,
21908
+ 'update:inputMode': inputMode => true,
21909
+ 'update:viewMode': viewMode => true
21910
+ };
21911
+
21912
+ const makeVDatePickerControlsProps = propsFactory({
21913
+ nextIcon: {
21914
+ type: [String],
21915
+ default: '$next'
21916
+ },
21917
+ prevIcon: {
21918
+ type: [String],
21919
+ default: '$prev'
21920
+ },
21921
+ expandIcon: {
21922
+ type: [String],
21923
+ default: '$expand'
21924
+ },
21925
+ collapseIcon: {
21926
+ type: [String],
21927
+ default: '$collapse'
21928
+ },
21929
+ range: {
21930
+ default: false,
21931
+ type: [String, Boolean],
21932
+ validator: v => v === false || ['start', 'end'].includes(v)
21933
+ },
21934
+ ...omit(makeDateProps(), ['modelValue', 'inputMode'])
21935
+ }, 'VDatePickerControls');
21936
+ const VDatePickerControls = genericComponent()({
21937
+ name: 'VDatePickerControls',
21938
+ props: makeVDatePickerControlsProps(),
21939
+ emits: {
21940
+ ...omit(dateEmits, ['update:modelValue', 'update:inputMode'])
21941
+ },
21942
+ setup(props, _ref) {
21943
+ let {
21944
+ emit
21945
+ } = _ref;
21946
+ const adapter = useDate();
21947
+ const monthAndYear = computed(() => {
21948
+ const month = props.range === 'end' ? adapter.addMonths(props.displayDate, 1) : props.displayDate;
21949
+ return adapter.format(month, 'monthAndYear');
21950
+ });
21951
+ useRender(() => {
21952
+ const prevBtn = createVNode(VBtn, {
21953
+ "variant": "text",
21954
+ "icon": props.prevIcon,
21955
+ "onClick": () => emit('update:displayDate', adapter.addMonths(props.displayDate, -1))
21956
+ }, null);
21957
+ const nextBtn = createVNode(VBtn, {
21958
+ "variant": "text",
21959
+ "icon": props.nextIcon,
21960
+ "onClick": () => emit('update:displayDate', adapter.addMonths(props.displayDate, 1))
21961
+ }, null);
21962
+ return createVNode("div", {
21963
+ "class": "v-date-picker-controls"
21964
+ }, [props.viewMode === 'month' && props.range === 'start' && prevBtn, !!props.range && createVNode(VSpacer, {
21965
+ "key": "range-spacer"
21966
+ }, null), createVNode("div", {
21967
+ "class": "v-date-picker-controls__date"
21968
+ }, [monthAndYear.value]), createVNode(VBtn, {
21969
+ "key": "expand-btn",
21970
+ "variant": "text",
21971
+ "icon": props.viewMode === 'month' ? props.expandIcon : props.collapseIcon,
21972
+ "onClick": () => emit('update:viewMode', props.viewMode === 'month' ? 'year' : 'month')
21973
+ }, null), createVNode(VSpacer, null, null), props.viewMode === 'month' && !props.range && createVNode("div", {
21974
+ "key": "month-buttons"
21975
+ }, [prevBtn, nextBtn]), props.viewMode === 'month' && props.range === 'end' && nextBtn]);
21976
+ });
21977
+ return {};
21978
+ }
21979
+ });
21980
+
21981
+ // Utilities
21982
+
21983
+ // Types
21984
+
21985
+ const DatePickerSymbol = Symbol.for('vuetify:date-picker');
21986
+ function createDatePicker(props) {
21987
+ const hoverDate = ref();
21988
+ const hoverMonth = ref();
21989
+ const isDragging = ref(false);
21990
+ const dragHandle = ref(null);
21991
+ const hasScrolled = ref(false);
21992
+ provide(DatePickerSymbol, {
21993
+ hoverDate,
21994
+ hoverMonth,
21995
+ isDragging,
21996
+ dragHandle,
21997
+ hasScrolled
21998
+ });
21999
+ return {
22000
+ hoverDate,
22001
+ hoverMonth,
22002
+ isDragging,
22003
+ dragHandle,
22004
+ hasScrolled
22005
+ };
22006
+ }
22007
+ function useDatePicker() {
22008
+ const datePicker = inject$1(DatePickerSymbol);
22009
+ if (!datePicker) throw new Error('foo');
22010
+ return datePicker;
22011
+ }
22012
+
22013
+ const makeVDatePickerMonthProps = propsFactory({
22014
+ color: String,
22015
+ showAdjacentMonths: Boolean,
22016
+ hideWeekdays: Boolean,
22017
+ showWeek: Boolean,
22018
+ range: {
22019
+ default: false,
22020
+ type: [String, Boolean],
22021
+ validator: v => typeof v === 'boolean' || ['start', 'end'].includes(v)
22022
+ },
22023
+ hoverDate: null,
22024
+ multiple: Boolean,
22025
+ side: {
22026
+ type: String
22027
+ },
22028
+ ...omit(makeDateProps(), ['inputMode', 'viewMode'])
22029
+ }, 'VDatePickerMonth');
22030
+ const VDatePickerMonth = genericComponent()({
22031
+ name: 'VDatePickerMonth',
22032
+ props: makeVDatePickerMonthProps({
22033
+ color: 'surface-variant'
22034
+ }),
22035
+ emits: {
22036
+ ...omit(dateEmits, ['update:inputMode', 'update:viewMode']),
22037
+ 'update:hoverDate': date => true
22038
+ },
22039
+ setup(props, _ref) {
22040
+ let {
22041
+ emit,
22042
+ slots
22043
+ } = _ref;
22044
+ const adapter = useDate();
22045
+ const {
22046
+ isDragging,
22047
+ dragHandle,
22048
+ hasScrolled
22049
+ } = useDatePicker();
22050
+ const month = computed(() => props.displayDate);
22051
+ const findClosestDate = (date, dates) => {
22052
+ const {
22053
+ isSameDay,
22054
+ getDiff
22055
+ } = adapter;
22056
+ const [startDate, endDate] = dates;
22057
+ if (isSameDay(startDate, endDate)) {
22058
+ return getDiff(date, startDate, 'days') > 0 ? endDate : startDate;
22059
+ }
22060
+ const distStart = Math.abs(getDiff(date, startDate));
22061
+ const distEnd = Math.abs(getDiff(date, endDate));
22062
+ return distStart < distEnd ? startDate : endDate;
22063
+ };
22064
+
22065
+ // const hoverRange = computed<[any, any] | null>(() => {
22066
+ // if (!props.hoverDate) return null
22067
+
22068
+ // const closestDate = findClosestDate(props.hoverDate, props.modelValue)
22069
+
22070
+ // if (!closestDate) return null
22071
+
22072
+ // return adapter.isAfter(props.hoverDate, closestDate) ? [closestDate, props.hoverDate] : [props.hoverDate, closestDate]
22073
+ // })
22074
+
22075
+ const weeksInMonth = computed(() => {
22076
+ const weeks = adapter.getWeekArray(month.value);
22077
+ const days = weeks.flat();
22078
+
22079
+ // Make sure there's always 6 weeks in month (6 * 7 days)
22080
+ // But only do it if we're not hiding adjacent months?
22081
+ const daysInMonth = 6 * 7;
22082
+ if (days.length < daysInMonth && props.showAdjacentMonths) {
22083
+ const lastDay = days[days.length - 1];
22084
+ let week = [];
22085
+ for (let day = 1; day <= daysInMonth - days.length; day++) {
22086
+ week.push(adapter.addDays(lastDay, day));
22087
+ if (day % 7 === 0) {
22088
+ weeks.push(week);
22089
+ week = [];
22090
+ }
22091
+ }
22092
+ }
22093
+ return weeks;
22094
+ });
22095
+ const daysInMonth = computed(() => {
22096
+ const validDates = props.modelValue.filter(v => !!v);
22097
+ const isRange = validDates.length > 1;
22098
+ const days = weeksInMonth.value.flat();
22099
+ const today = adapter.date();
22100
+ const startDate = validDates[0];
22101
+ const endDate = validDates[1];
22102
+ return days.map((date, index) => {
22103
+ const isStart = startDate && adapter.isSameDay(date, startDate);
22104
+ const isEnd = endDate && adapter.isSameDay(date, endDate);
22105
+ const isAdjacent = !adapter.isSameMonth(date, month.value);
22106
+ const isSame = validDates.length === 2 && adapter.isSameDay(startDate, endDate);
22107
+ return {
22108
+ date,
22109
+ isoDate: toIso(adapter, date),
22110
+ formatted: adapter.format(date, 'keyboardDate'),
22111
+ year: adapter.getYear(date),
22112
+ month: adapter.getMonth(date),
22113
+ isWeekStart: index % 7 === 0,
22114
+ isWeekEnd: index % 7 === 6,
22115
+ isSelected: isStart || isEnd,
22116
+ isStart,
22117
+ isEnd,
22118
+ isToday: adapter.isSameDay(date, today),
22119
+ isAdjacent,
22120
+ isHidden: isAdjacent && !props.showAdjacentMonths,
22121
+ inRange: isRange && !isSame && (isStart || isEnd || validDates.length === 2 && adapter.isWithinRange(date, validDates)),
22122
+ // isHovered: props.hoverDate === date,
22123
+ // inHover: hoverRange.value && isWithinRange(date, hoverRange.value),
22124
+ isHovered: false,
22125
+ inHover: false,
22126
+ localized: adapter.format(date, 'dayOfMonth')
22127
+ };
22128
+ });
22129
+ });
22130
+ const weeks = computed(() => {
22131
+ return weeksInMonth.value.map(week => {
22132
+ return getWeek(adapter, week[0]);
22133
+ });
22134
+ });
22135
+ const {
22136
+ backgroundColorClasses,
22137
+ backgroundColorStyles
22138
+ } = useBackgroundColor(props, 'color');
22139
+ function selectDate(date) {
22140
+ let newModel = props.modelValue.slice();
22141
+ if (props.multiple) {
22142
+ if (isDragging.value && dragHandle.value != null) {
22143
+ const otherIndex = (dragHandle.value + 1) % 2;
22144
+ const fn = otherIndex === 0 ? 'isBefore' : 'isAfter';
22145
+ if (adapter[fn](date, newModel[otherIndex])) {
22146
+ newModel[dragHandle.value] = newModel[otherIndex];
22147
+ newModel[otherIndex] = date;
22148
+ dragHandle.value = otherIndex;
22149
+ } else {
22150
+ newModel[dragHandle.value] = date;
22151
+ }
22152
+ } else {
22153
+ if (newModel.find(d => adapter.isSameDay(d, date))) {
22154
+ newModel = newModel.filter(v => !adapter.isSameDay(v, date));
22155
+ } else if (newModel.length === 2) {
22156
+ let index;
22157
+ if (!props.side || adapter.isSameMonth(newModel[0], newModel[1])) {
22158
+ const closest = findClosestDate(date, newModel);
22159
+ index = newModel.indexOf(closest);
22160
+ } else {
22161
+ index = props.side === 'start' ? 0 : props.side === 'end' ? 1 : undefined;
22162
+ }
22163
+ newModel = newModel.map((v, i) => i === index ? date : v);
22164
+ } else {
22165
+ if (newModel[0] && adapter.isBefore(newModel[0], date)) {
22166
+ newModel = [newModel[0], date];
22167
+ } else {
22168
+ newModel = [date, newModel[0]];
22169
+ }
22170
+ }
22171
+ }
22172
+ } else {
22173
+ newModel = [date];
22174
+ }
22175
+ emit('update:modelValue', newModel.filter(v => !!v));
22176
+ }
22177
+ const daysRef = ref();
22178
+ function findElement(el) {
22179
+ if (!el || el === daysRef.value) return null;
22180
+ if ('vDate' in el.dataset) {
22181
+ return adapter.date(el.dataset.vDate);
22182
+ }
22183
+ return findElement(el.parentElement);
22184
+ }
22185
+ function findDate(e) {
22186
+ const x = 'changedTouches' in e ? e.changedTouches[0]?.clientX : e.clientX;
22187
+ const y = 'changedTouches' in e ? e.changedTouches[0]?.clientY : e.clientY;
22188
+ const el = document.elementFromPoint(x, y);
22189
+ return findElement(el);
22190
+ }
22191
+ let canDrag = false;
22192
+ function handleMousedown(e) {
22193
+ hasScrolled.value = false;
22194
+ const selected = findDate(e);
22195
+ if (!selected) return;
22196
+ const modelIndex = props.modelValue.findIndex(d => adapter.isEqual(d, selected));
22197
+ if (modelIndex >= 0) {
22198
+ canDrag = true;
22199
+ dragHandle.value = modelIndex;
22200
+ window.addEventListener('touchmove', handleTouchmove, {
22201
+ passive: false
22202
+ });
22203
+ window.addEventListener('mousemove', handleTouchmove, {
22204
+ passive: false
22205
+ });
22206
+ e.preventDefault();
22207
+ }
22208
+ window.addEventListener('touchend', handleTouchend, {
22209
+ passive: false
22210
+ });
22211
+ window.addEventListener('mouseup', handleTouchend, {
22212
+ passive: false
22213
+ });
22214
+ }
22215
+ function handleTouchmove(e) {
22216
+ if (!canDrag) return;
22217
+ e.preventDefault();
22218
+ isDragging.value = true;
22219
+ const over = findDate(e);
22220
+ if (!over) return;
22221
+ selectDate(over);
22222
+ }
22223
+ function handleTouchend(e) {
22224
+ if (e.cancelable) e.preventDefault();
22225
+ window.removeEventListener('touchmove', handleTouchmove);
22226
+ window.removeEventListener('mousemove', handleTouchmove);
22227
+ window.removeEventListener('touchend', handleTouchend);
22228
+ window.removeEventListener('mouseup', handleTouchend);
22229
+ const end = findDate(e);
22230
+ if (!end) return;
22231
+ if (!hasScrolled.value) {
22232
+ selectDate(end);
22233
+ }
22234
+ isDragging.value = false;
22235
+ dragHandle.value = null;
22236
+ canDrag = false;
22237
+ }
22238
+ return () => createVNode("div", {
22239
+ "class": "v-date-picker-month"
22240
+ }, [props.showWeek && createVNode("div", {
22241
+ "key": "weeks",
22242
+ "class": "v-date-picker-month__weeks"
22243
+ }, [!props.hideWeekdays && createVNode("div", {
22244
+ "key": "hide-week-days",
22245
+ "class": "v-date-picker-month__day"
22246
+ }, [createTextVNode("\xA0")]), weeks.value.map(week => createVNode("div", {
22247
+ "class": ['v-date-picker-month__day', 'v-date-picker-month__day--adjacent']
22248
+ }, [week]))]), createVNode("div", {
22249
+ "ref": daysRef,
22250
+ "class": "v-date-picker-month__days",
22251
+ "onMousedown": handleMousedown,
22252
+ "onTouchstart": handleMousedown
22253
+ }, [!props.hideWeekdays && adapter.getWeekdays().map(weekDay => createVNode("div", {
22254
+ "class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
22255
+ }, [weekDay.charAt(0)])), daysInMonth.value.map((item, index) => createVNode("div", {
22256
+ "class": ['v-date-picker-month__day', {
22257
+ 'v-date-picker-month__day--selected': item.isSelected,
22258
+ 'v-date-picker-month__day--start': item.isStart,
22259
+ 'v-date-picker-month__day--end': item.isEnd,
22260
+ 'v-date-picker-month__day--adjacent': item.isAdjacent,
22261
+ 'v-date-picker-month__day--hide-adjacent': item.isHidden,
22262
+ 'v-date-picker-month__day--week-start': item.isWeekStart,
22263
+ 'v-date-picker-month__day--week-end': item.isWeekEnd,
22264
+ 'v-date-picker-month__day--hovered': item.isHovered
22265
+ }],
22266
+ "data-v-date": !item.isHidden ? item.isoDate : undefined
22267
+ }, [item.inRange && createVNode("div", {
22268
+ "key": "in-range",
22269
+ "class": ['v-date-picker-month__day--range', backgroundColorClasses.value],
22270
+ "style": backgroundColorStyles.value
22271
+ }, null), item.inHover && !item.isStart && !item.isEnd && !item.isHovered && !item.inRange && createVNode("div", {
22272
+ "key": "in-hover",
22273
+ "class": "v-date-picker-month__day--hover"
22274
+ }, null), (props.showAdjacentMonths || !item.isAdjacent) && createVNode(VBtn, {
22275
+ "icon": true,
22276
+ "ripple": false,
22277
+ "variant": (item.isToday || item.isHovered) && !item.isSelected ? 'outlined' : 'flat',
22278
+ "active": item.isSelected,
22279
+ "color": item.isSelected || item.isToday ? props.color : item.isHovered ? undefined : 'transparent'
22280
+ }, {
22281
+ default: () => [item.localized]
22282
+ })]))])]);
22283
+ }
22284
+ });
22285
+
22286
+ const makeVDatePickerYearsProps = propsFactory({
22287
+ color: String,
22288
+ min: Number,
22289
+ max: Number,
22290
+ height: [String, Number],
22291
+ displayDate: null
22292
+ }, 'VDatePickerYears');
22293
+ const VDatePickerYears = genericComponent()({
22294
+ name: 'VDatePickerYears',
22295
+ props: makeVDatePickerYearsProps(),
22296
+ emits: {
22297
+ 'update:displayDate': date => true,
22298
+ 'update:viewMode': date => true
22299
+ },
22300
+ setup(props, _ref) {
22301
+ let {
22302
+ emit
22303
+ } = _ref;
22304
+ const adapter = useDate();
22305
+ const displayYear = computed(() => adapter.getYear(props.displayDate ?? new Date()));
22306
+ const years = computed(() => {
22307
+ const min = props.min ?? displayYear.value - 50 - 2;
22308
+ const max = props.max ?? displayYear.value + 50;
22309
+ return createRange(max - min, min);
22310
+ });
22311
+ const yearRef = ref();
22312
+ onMounted(() => {
22313
+ yearRef.value?.$el.scrollIntoView({
22314
+ block: 'center'
22315
+ });
22316
+ });
22317
+ useRender(() => createVNode("div", {
22318
+ "class": "v-date-picker-years",
22319
+ "style": {
22320
+ height: convertToUnit(props.height)
22321
+ }
22322
+ }, [createVNode("div", {
22323
+ "class": "v-date-picker-years__content"
22324
+ }, [years.value.map(year => createVNode(VBtn, {
22325
+ "ref": year === displayYear.value ? yearRef : undefined,
22326
+ "variant": year === displayYear.value ? 'flat' : 'text',
22327
+ "rounded": "xl",
22328
+ "active": year === displayYear.value,
22329
+ "color": year === displayYear.value ? props.color : undefined,
22330
+ "onClick": () => {
22331
+ emit('update:displayDate', adapter.setYear(props.displayDate, year));
22332
+ emit('update:viewMode', 'month');
22333
+ }
22334
+ }, {
22335
+ default: () => [year]
22336
+ }))])]));
22337
+ return {};
22338
+ }
22339
+ });
22340
+
22341
+ // Types
22342
+
22343
+ const makeVDateCardProps = propsFactory({
22344
+ cancelText: {
22345
+ type: String,
22346
+ default: '$vuetify.datePicker.cancel'
22347
+ },
22348
+ okText: {
22349
+ type: String,
22350
+ default: '$vuetify.datePicker.ok'
22351
+ },
22352
+ inputMode: {
22353
+ type: String,
22354
+ default: 'calendar'
22355
+ },
22356
+ hideActions: Boolean,
22357
+ ...makeVDatePickerControlsProps(),
22358
+ ...makeVDatePickerMonthProps(),
22359
+ ...makeVDatePickerYearsProps(),
22360
+ ...makeTransitionProps({
22361
+ transition: {
22362
+ component: VFadeTransition,
22363
+ leaveAbsolute: true
22364
+ }
22365
+ })
22366
+ }, 'VDateCard');
22367
+ const VDateCard = genericComponent()({
22368
+ name: 'VDateCard',
22369
+ props: makeVDateCardProps(),
22370
+ emits: {
22371
+ save: () => true,
22372
+ cancel: () => true,
22373
+ 'update:displayDate': value => true,
22374
+ 'update:inputMode': value => true,
22375
+ 'update:modelValue': value => true,
22376
+ 'update:viewMode': mode => true
22377
+ },
22378
+ setup(props, _ref) {
22379
+ let {
22380
+ emit,
22381
+ slots
22382
+ } = _ref;
22383
+ const model = useProxiedModel(props, 'modelValue');
22384
+ const {
22385
+ t
22386
+ } = useLocale();
22387
+ createDatePicker();
22388
+ function onDisplayUpdate(val) {
22389
+ emit('update:displayDate', val);
22390
+ }
22391
+ function onViewModeUpdate(val) {
22392
+ emit('update:viewMode', val);
22393
+ }
22394
+ function onSave() {
22395
+ emit('update:modelValue', model.value);
22396
+ emit('save');
22397
+ }
22398
+ function onCancel() {
22399
+ emit('cancel');
22400
+ }
22401
+ useRender(() => {
22402
+ const [cardProps] = VCard.filterProps(props);
22403
+ const [datePickerControlsProps] = VDatePickerControls.filterProps(props);
22404
+ const [datePickerMonthProps] = VDatePickerMonth.filterProps(props);
22405
+ const [datePickerYearsProps] = VDatePickerYears.filterProps(props);
22406
+ const hasActions = !props.hideActions || !!slots.actions;
22407
+ return createVNode(VCard, mergeProps(cardProps, {
22408
+ "class": "v-date-card"
22409
+ }), {
22410
+ ...slots,
22411
+ default: () => createVNode(Fragment, null, [createVNode(VDatePickerControls, mergeProps(datePickerControlsProps, {
22412
+ "onUpdate:displayDate": onDisplayUpdate,
22413
+ "onUpdate:viewMode": onViewModeUpdate
22414
+ }), null), createVNode(MaybeTransition, {
22415
+ "transition": props.transition
22416
+ }, {
22417
+ default: () => [props.viewMode === 'month' ? createVNode(VDatePickerMonth, mergeProps(datePickerMonthProps, {
22418
+ "modelValue": model.value,
22419
+ "onUpdate:modelValue": $event => model.value = $event,
22420
+ "onUpdate:displayDate": onDisplayUpdate
22421
+ }), null) : createVNode(VDatePickerYears, mergeProps(datePickerYearsProps, {
22422
+ "onUpdate:displayDate": onDisplayUpdate,
22423
+ "onUpdate:viewMode": onViewModeUpdate
22424
+ }), null)]
22425
+ })]),
22426
+ actions: !hasActions ? undefined : () => createVNode(Fragment, null, [slots.actions?.() ?? createVNode(Fragment, null, [createVNode(VBtn, {
22427
+ "onClick": onCancel,
22428
+ "text": t(props.cancelText)
22429
+ }, null), createVNode(VBtn, {
22430
+ "onClick": onSave,
22431
+ "text": t(props.okText)
22432
+ }, null)])])
22433
+ });
22434
+ });
22435
+ return {};
22436
+ }
22437
+ });
22438
+
22439
+ // Types
22440
+
22441
+ const makeVDatePickerHeaderProps = propsFactory({
22442
+ appendIcon: String,
22443
+ color: String,
22444
+ header: String,
22445
+ transition: String
22446
+ }, 'VDatePickerHeader');
22447
+ const VDatePickerHeader = genericComponent()({
22448
+ name: 'VDatePickerHeader',
22449
+ props: makeVDatePickerHeaderProps(),
22450
+ emits: {
22451
+ 'click:append': () => true
22452
+ },
22453
+ setup(props, _ref) {
22454
+ let {
22455
+ emit,
22456
+ slots
22457
+ } = _ref;
22458
+ const {
22459
+ backgroundColorClasses,
22460
+ backgroundColorStyles
22461
+ } = useBackgroundColor(props, 'color');
22462
+ function onClickAppend() {
22463
+ emit('click:append');
22464
+ }
22465
+ useRender(() => {
22466
+ const hasContent = !!(slots.default || props.header);
22467
+ const hasAppend = !!(slots.append || props.appendIcon);
22468
+ return createVNode("div", {
22469
+ "class": ['v-date-picker-header', backgroundColorClasses.value],
22470
+ "style": backgroundColorStyles.value
22471
+ }, [slots.prepend && createVNode("div", {
22472
+ "key": "prepend",
22473
+ "class": "v-date-picker-header__prepend"
22474
+ }, [slots.prepend()]), hasContent && createVNode(MaybeTransition, {
22475
+ "key": "content",
22476
+ "name": props.transition
22477
+ }, {
22478
+ default: () => [createVNode("div", {
22479
+ "key": props.header,
22480
+ "class": "v-date-picker-header__content"
22481
+ }, [slots.default?.() ?? props.header])]
22482
+ }), hasAppend && createVNode("div", {
22483
+ "class": "v-date-picker-header__append"
22484
+ }, [!slots.append ? createVNode(VBtn, {
22485
+ "key": "append-btn",
22486
+ "icon": props.appendIcon,
22487
+ "variant": "text",
22488
+ "onClick": onClickAppend
22489
+ }, null) : createVNode(VDefaultsProvider, {
22490
+ "key": "append-defaults",
22491
+ "disabled": !props.appendIcon,
22492
+ "defaults": {
22493
+ VBtn: {
22494
+ icon: props.appendIcon,
22495
+ variant: 'text'
22496
+ }
22497
+ }
22498
+ }, {
22499
+ default: () => [slots.append?.()]
22500
+ })])]);
22501
+ });
22502
+ return {};
22503
+ }
22504
+ });
22505
+
22506
+ // Utilities
22507
+ const VPickerTitle = createSimpleFunctional('v-picker-title');
22508
+
22509
+ // Types
22510
+
22511
+ const makeVPickerProps = propsFactory({
22512
+ landscape: Boolean,
22513
+ title: String,
22514
+ ...omit(makeVSheetProps(), ['color'])
22515
+ }, 'VPicker');
22516
+ const VPicker = genericComponent()({
22517
+ name: 'VPicker',
22518
+ props: makeVPickerProps(),
22519
+ setup(props, _ref) {
22520
+ let {
22521
+ slots
22522
+ } = _ref;
22523
+ useRender(() => {
22524
+ const [sheetProps] = VSheet.filterProps(props);
22525
+ const hasTitle = !!(props.title || slots.title);
22526
+ return createVNode(VSheet, mergeProps(sheetProps, {
22527
+ "class": ['v-picker', {
22528
+ 'v-picker--landscape': props.landscape,
22529
+ 'v-picker--with-actions': !!slots.actions
22530
+ }, props.class],
22531
+ "style": props.style
22532
+ }), {
22533
+ default: () => [hasTitle && createVNode(VPickerTitle, {
22534
+ "key": "picker-title"
22535
+ }, {
22536
+ default: () => [slots.title?.() ?? props.title]
22537
+ }), slots.header && createVNode("div", {
22538
+ "class": "v-picker__header"
22539
+ }, [slots.header()]), createVNode("div", {
22540
+ "class": "v-picker__body"
22541
+ }, [slots.default?.()]), slots.actions && createVNode("div", {
22542
+ "class": "v-picker__actions"
22543
+ }, [slots.actions()])]
22544
+ });
22545
+ });
22546
+ return {};
22547
+ }
22548
+ });
22549
+
22550
+ // Types
22551
+
22552
+ const makeVDatePickerProps = propsFactory({
22553
+ calendarIcon: {
22554
+ type: String,
22555
+ default: '$calendar'
22556
+ },
22557
+ keyboardIcon: {
22558
+ type: String,
22559
+ default: '$edit'
22560
+ },
22561
+ cancelText: {
22562
+ type: String,
22563
+ default: '$vuetify.datePicker.cancel'
22564
+ },
22565
+ okText: {
22566
+ type: String,
22567
+ default: '$vuetify.datePicker.ok'
22568
+ },
22569
+ inputText: {
22570
+ type: String,
22571
+ default: '$vuetify.datePicker.input.placeholder'
22572
+ },
22573
+ header: {
22574
+ type: String,
22575
+ default: '$vuetify.datePicker.header'
22576
+ },
22577
+ hideActions: Boolean,
22578
+ ...makeDateProps(),
22579
+ ...makeTransitionProps({
22580
+ transition: 'fade'
22581
+ }),
22582
+ ...makeVDatePickerControlsProps(),
22583
+ ...makeVDatePickerMonthProps(),
22584
+ ...makeVDatePickerYearsProps(),
22585
+ ...makeVPickerProps({
22586
+ title: '$vuetify.datePicker.title'
22587
+ })
22588
+ }, 'VDatePicker');
22589
+ const VDatePicker = genericComponent()({
22590
+ name: 'VDatePicker',
22591
+ props: makeVDatePickerProps(),
22592
+ emits: {
22593
+ 'click:cancel': () => true,
22594
+ 'click:save': () => true,
22595
+ ...dateEmits
22596
+ },
22597
+ setup(props, _ref) {
22598
+ let {
22599
+ emit,
22600
+ slots
22601
+ } = _ref;
22602
+ const adapter = useDate();
22603
+ const {
22604
+ t
22605
+ } = useLocale();
22606
+ createDatePicker();
22607
+ const model = ref(props.modelValue ?? []);
22608
+ const isReversing = ref(false);
22609
+ const displayDate = useProxiedModel(props, 'displayDate', props.displayDate);
22610
+ const inputMode = useProxiedModel(props, 'inputMode', props.inputMode);
22611
+ const viewMode = useProxiedModel(props, 'viewMode', props.viewMode);
22612
+ const inputModel = computed(() => model.value.length ? adapter.format(model.value[0], 'keyboardDate') : '');
22613
+ const title = computed(() => t(props.title));
22614
+ const header = computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header));
22615
+ const headerIcon = computed(() => inputMode.value === 'calendar' ? props.keyboardIcon : props.calendarIcon);
22616
+ const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
22617
+ watch(inputModel, () => {
22618
+ const {
22619
+ isValid,
22620
+ date
22621
+ } = adapter;
22622
+ model.value = isValid(inputModel.value) ? [date(inputModel.value)] : [];
22623
+ });
22624
+ watch(model, (val, oldVal) => {
22625
+ if (props.hideActions) {
22626
+ emit('update:modelValue', val);
22627
+ }
22628
+ isReversing.value = adapter.isBefore(val[0], oldVal[0]);
22629
+ });
22630
+ function onClickCancel() {
22631
+ emit('click:cancel');
22632
+ }
22633
+ function onClickSave() {
22634
+ emit('click:save');
22635
+ emit('update:modelValue', model.value);
22636
+ }
22637
+ function onClickAppend() {
22638
+ inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar';
22639
+ }
22640
+ const headerSlotProps = computed(() => ({
22641
+ header: header.value,
22642
+ appendIcon: headerIcon.value,
22643
+ transition: headerTransition.value,
22644
+ 'onClick:append': onClickAppend
22645
+ }));
22646
+ useRender(() => {
22647
+ const [pickerProps] = VPicker.filterProps(props);
22648
+ const [datePickerControlsProps] = VDatePickerControls.filterProps(props);
22649
+ const [datePickerMonthProps] = VDatePickerMonth.filterProps(props);
22650
+ const [datePickerYearsProps] = VDatePickerYears.filterProps(props);
22651
+ return createVNode(VPicker, mergeProps(pickerProps, {
22652
+ "class": ['v-date-picker', props.class],
22653
+ "style": props.style,
22654
+ "title": title.value
22655
+ }), {
22656
+ header: () => slots.header?.(headerSlotProps.value) ?? createVNode(VDatePickerHeader, mergeProps({
22657
+ "key": "header"
22658
+ }, headerSlotProps.value), null),
22659
+ default: () => inputMode.value === 'calendar' ? createVNode(Fragment, null, [createVNode(VDatePickerControls, mergeProps(datePickerControlsProps, {
22660
+ "displayDate": displayDate.value,
22661
+ "onUpdate:displayDate": $event => displayDate.value = $event,
22662
+ "viewMode": viewMode.value,
22663
+ "onUpdate:viewMode": $event => viewMode.value = $event
22664
+ }), null), createVNode(MaybeTransition, {
22665
+ "transition": props.transition,
22666
+ "mode": "out-in"
22667
+ }, {
22668
+ default: () => [viewMode.value === 'month' ? createVNode(VDatePickerMonth, mergeProps(datePickerMonthProps, {
22669
+ "modelValue": model.value,
22670
+ "onUpdate:modelValue": $event => model.value = $event,
22671
+ "displayDate": displayDate.value,
22672
+ "onUpdate:displayDate": $event => displayDate.value = $event
22673
+ }), null) : createVNode(VDatePickerYears, mergeProps(datePickerYearsProps, {
22674
+ "displayDate": displayDate.value,
22675
+ "onUpdate:displayDate": $event => displayDate.value = $event,
22676
+ "viewMode": viewMode.value,
22677
+ "onUpdate:viewMode": $event => viewMode.value = $event
22678
+ }), null)]
22679
+ })]) : createVNode("div", {
22680
+ "class": "v-date-picker__input"
22681
+ }, [createVNode(VTextField, {
22682
+ "modelValue": inputModel.value,
22683
+ "onUpdate:modelValue": $event => inputModel.value = $event,
22684
+ "label": t(props.inputText),
22685
+ "placeholder": "dd/mm/yyyy"
22686
+ }, null)]),
22687
+ actions: !props.hideActions ? () => createVNode("div", null, [createVNode(VBtn, {
22688
+ "variant": "text",
22689
+ "color": props.color,
22690
+ "onClick": onClickCancel,
22691
+ "text": t(props.cancelText)
22692
+ }, null), createVNode(VBtn, {
22693
+ "variant": "text",
22694
+ "color": props.color,
22695
+ "onClick": onClickSave,
22696
+ "text": t(props.okText)
22697
+ }, null)]) : undefined
22698
+ });
22699
+ });
22700
+ return {};
22701
+ }
22702
+ });
22703
+
22704
+ // Types
22705
+
22706
+ const makeVInfiniteScrollProps = propsFactory({
22707
+ color: String,
22708
+ direction: {
22709
+ type: String,
22710
+ default: 'vertical',
22711
+ validator: v => ['vertical', 'horizontal'].includes(v)
22712
+ },
22713
+ side: {
22714
+ type: String,
22715
+ default: 'end',
22716
+ validator: v => ['start', 'end', 'both'].includes(v)
22717
+ },
22718
+ mode: {
22719
+ type: String,
22720
+ default: 'intersect',
22721
+ validator: v => ['intersect', 'manual'].includes(v)
22722
+ },
22723
+ margin: [Number, String],
22724
+ loadMoreText: {
22725
+ type: String,
22726
+ default: '$vuetify.infiniteScroll.loadMore'
22727
+ },
22728
+ emptyText: {
22729
+ type: String,
22730
+ default: '$vuetify.infiniteScroll.empty'
22731
+ },
22732
+ ...makeDimensionProps(),
22733
+ ...makeTagProps()
22734
+ }, 'VInfiniteScroll');
22735
+ const VInfiniteScrollIntersect = defineComponent({
22736
+ name: 'VInfiniteScrollIntersect',
22737
+ props: {
22738
+ side: {
22739
+ type: String,
22740
+ required: true
22741
+ },
22742
+ rootRef: null,
22743
+ rootMargin: String
22744
+ },
22745
+ emits: {
22746
+ intersect: side => true
22747
+ },
22748
+ setup(props, _ref) {
22749
+ let {
22750
+ emit
22751
+ } = _ref;
22752
+ const {
22753
+ intersectionRef,
22754
+ isIntersecting
22755
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
22756
+ root: props.rootRef,
22757
+ rootMargin: props.rootMargin
22758
+ } : undefined);
22759
+ watch(isIntersecting, async val => {
22760
+ if (val) emit('intersect', props.side);
22761
+ });
22762
+ useRender(() => createVNode("div", {
22763
+ "class": "v-infinite-scroll-intersect",
22764
+ "ref": intersectionRef
22765
+ }, [createTextVNode("\xA0")]));
22766
+ return {};
22767
+ }
22768
+ });
22769
+ const VInfiniteScroll = genericComponent()({
22770
+ name: 'VInfiniteScroll',
22771
+ props: makeVInfiniteScrollProps(),
22772
+ emits: {
22773
+ load: options => true
22774
+ },
22775
+ setup(props, _ref2) {
22776
+ let {
22777
+ slots,
22778
+ emit
22779
+ } = _ref2;
22780
+ const rootEl = ref();
22781
+ const startStatus = ref('ok');
22782
+ const endStatus = ref('ok');
22783
+ const margin = computed(() => convertToUnit(props.margin));
22784
+ function setScrollAmount(amount) {
22785
+ if (!rootEl.value) return;
22786
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
22787
+ rootEl.value[property] = amount;
22788
+ }
22789
+ function getScrollAmount() {
22790
+ if (!rootEl.value) return 0;
22791
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
22792
+ return rootEl.value[property];
22793
+ }
22794
+ function getScrollSize() {
22795
+ if (!rootEl.value) return 0;
22796
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
22797
+ return rootEl.value[property];
22798
+ }
22799
+ function getContainerSize() {
22800
+ if (!rootEl.value) return 0;
22801
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
22802
+ return rootEl.value[property];
22803
+ }
22804
+ onMounted(() => {
22805
+ if (!rootEl.value) return;
22806
+ if (props.side === 'start') {
22807
+ setScrollAmount(getScrollSize());
22808
+ } else if (props.side === 'both') {
22809
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
22810
+ }
22811
+ });
22812
+ function setStatus(side, status) {
22813
+ if (side === 'start') {
22814
+ startStatus.value = status;
22815
+ } else if (side === 'end') {
22816
+ endStatus.value = status;
22817
+ }
22818
+ }
22819
+ function getStatus(side) {
22820
+ return side === 'start' ? startStatus.value : endStatus.value;
22821
+ }
22822
+ let previousScrollSize = 0;
22823
+ function handleIntersect(side) {
22824
+ const status = getStatus(side);
22825
+ if (!rootEl.value || status === 'loading') return;
22826
+ previousScrollSize = getScrollSize();
22827
+ setStatus(side, 'loading');
22828
+ function done(status) {
22829
+ setStatus(side, status);
22830
+ nextTick(() => {
22831
+ if (status === 'ok' && side === 'start') {
22832
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
22833
+ }
22834
+ });
22835
+ }
22836
+ emit('load', {
22837
+ side,
22838
+ done
22839
+ });
22840
+ }
22841
+ const {
22842
+ t
22843
+ } = useLocale();
22844
+ function renderSide(side, status) {
22845
+ if (props.side !== side && props.side !== 'both') return;
22846
+ const onClick = () => handleIntersect(side);
22847
+ const slotProps = {
22848
+ side,
22849
+ props: {
22850
+ onClick,
22851
+ color: props.color
22852
+ }
22853
+ };
22854
+ if (status === 'error') return slots.error?.(slotProps);
22855
+ if (status === 'empty') return slots.empty?.(slotProps) ?? createVNode("div", null, [t(props.emptyText)]);
22856
+ if (props.mode === 'manual') {
22857
+ if (status === 'loading') {
22858
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
22859
+ "indeterminate": true,
22860
+ "color": props.color
22861
+ }, null);
22862
+ }
22863
+ return slots['load-more']?.(slotProps) ?? createVNode(VBtn, {
22864
+ "variant": "outlined",
22865
+ "color": props.color,
22866
+ "onClick": onClick
22867
+ }, {
22868
+ default: () => [t(props.loadMoreText)]
22869
+ });
22870
+ }
22871
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
22872
+ "indeterminate": true,
22873
+ "color": props.color
22874
+ }, null);
22875
+ }
22876
+ const {
22877
+ dimensionStyles
22878
+ } = useDimension(props);
22879
+ useRender(() => {
22880
+ const Tag = props.tag;
22881
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
22882
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
22883
+ const intersectMode = props.mode === 'intersect';
22884
+ return createVNode(Tag, {
22885
+ "ref": rootEl,
22886
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
22887
+ 'v-infinite-scroll--start': hasStartIntersect,
22888
+ 'v-infinite-scroll--end': hasEndIntersect
22889
+ }],
22890
+ "style": dimensionStyles.value
22891
+ }, {
22892
+ default: () => [createVNode("div", {
22893
+ "class": "v-infinite-scroll__side"
22894
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
22895
+ "key": "start",
22896
+ "side": "start",
22897
+ "onIntersect": handleIntersect,
22898
+ "rootRef": rootEl.value,
22899
+ "rootMargin": margin.value
22900
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
22901
+ "key": "end",
22902
+ "side": "end",
22903
+ "onIntersect": handleIntersect,
22904
+ "rootRef": rootEl.value,
22905
+ "rootMargin": margin.value
22906
+ }, null), createVNode("div", {
22907
+ "class": "v-infinite-scroll__side"
22908
+ }, [renderSide('end', endStatus.value)])]
22909
+ });
22910
+ });
22911
+ }
22912
+ });
22913
+
22914
+ // Types
22915
+
22916
+ const rootTypes = {
22917
+ actions: 'button@2',
22918
+ article: 'heading, paragraph',
22919
+ avatar: 'avatar',
22920
+ button: 'button',
22921
+ card: 'image, heading',
22922
+ 'card-avatar': 'image, list-item-avatar',
22923
+ chip: 'chip',
22924
+ 'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',
22925
+ 'date-picker-options': 'text, avatar@2',
22926
+ 'date-picker-days': 'avatar@28',
22927
+ divider: 'divider',
22928
+ heading: 'heading',
22929
+ image: 'image',
22930
+ 'list-item': 'text',
22931
+ 'list-item-avatar': 'avatar, text',
22932
+ 'list-item-two-line': 'sentences',
22933
+ 'list-item-avatar-two-line': 'avatar, sentences',
22934
+ 'list-item-three-line': 'paragraph',
22935
+ 'list-item-avatar-three-line': 'avatar, paragraph',
22936
+ paragraph: 'text@3',
22937
+ sentences: 'text@2',
22938
+ subtitle: 'text',
22939
+ table: 'table-heading, table-thead, table-tbody, table-tfoot',
22940
+ 'table-heading': 'chip, text',
22941
+ 'table-thead': 'heading@6',
22942
+ 'table-tbody': 'table-row-divider@6',
22943
+ 'table-row-divider': 'table-row, divider',
22944
+ 'table-row': 'text@6',
22945
+ 'table-tfoot': 'text@2, avatar@2',
22946
+ text: 'text'
22947
+ };
22948
+ function genBone(type) {
22949
+ let children = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
22950
+ return createVNode("div", {
22951
+ "class": ['v-skeleton-loader__bone', `v-skeleton-loader__${type}`]
22952
+ }, [children]);
22953
+ }
22954
+ function genBones(bone) {
22955
+ // e.g. 'text@3'
22956
+ const [type, length] = bone.split('@');
22957
+
22958
+ // Generate a length array based upon
22959
+ // value after @ in the bone string
22960
+ return Array.from({
22961
+ length
22962
+ }).map(() => genStructure(type));
22279
22963
  }
22280
- function endOfYear(date) {
22281
- return new Date(date.getFullYear(), 11, 31);
22964
+ function genStructure(type) {
22965
+ let children = [];
22966
+ if (!type) return children;
22967
+
22968
+ // TODO: figure out a better way to type this
22969
+ const bone = rootTypes[type];
22970
+
22971
+ // End of recursion, do nothing
22972
+ /* eslint-disable-next-line no-empty, brace-style */
22973
+ if (type === bone) ;
22974
+ // Array of values - e.g. 'heading, paragraph, text@2'
22975
+ else if (type.includes(',')) return mapBones(type);
22976
+ // Array of values - e.g. 'paragraph@4'
22977
+ else if (type.includes('@')) return genBones(type);
22978
+ // Array of values - e.g. 'card@2'
22979
+ else if (bone.includes(',')) children = mapBones(bone);
22980
+ // Array of values - e.g. 'list-item@2'
22981
+ else if (bone.includes('@')) children = genBones(bone);
22982
+ // Single value - e.g. 'card-heading'
22983
+ else if (bone) children.push(genStructure(bone));
22984
+ return [genBone(type, children)];
22282
22985
  }
22283
- function getMondayOfFirstWeekOfYear(year) {
22284
- return new Date(year, 0, 1);
22986
+ function mapBones(bones) {
22987
+ // Remove spaces and return array of structures
22988
+ return bones.replace(/\s/g, '').split(',').map(genStructure);
22285
22989
  }
22990
+ const makeVSkeletonLoaderProps = propsFactory({
22991
+ boilerplate: Boolean,
22992
+ color: String,
22993
+ loading: Boolean,
22994
+ loadingText: {
22995
+ type: String,
22996
+ default: '$vuetify.loading'
22997
+ },
22998
+ type: {
22999
+ type: [String, Array],
23000
+ default: 'image'
23001
+ },
23002
+ ...makeDimensionProps(),
23003
+ ...makeElevationProps(),
23004
+ ...makeThemeProps()
23005
+ }, 'VSkeletonLoader');
23006
+ const VSkeletonLoader = genericComponent()({
23007
+ name: 'VSkeletonLoader',
23008
+ props: makeVSkeletonLoaderProps(),
23009
+ setup(props, _ref) {
23010
+ let {
23011
+ slots
23012
+ } = _ref;
23013
+ const {
23014
+ backgroundColorClasses,
23015
+ backgroundColorStyles
23016
+ } = useBackgroundColor(toRef(props, 'color'));
23017
+ const {
23018
+ dimensionStyles
23019
+ } = useDimension(props);
23020
+ const {
23021
+ elevationClasses
23022
+ } = useElevation(props);
23023
+ const {
23024
+ themeClasses
23025
+ } = provideTheme(props);
23026
+ const {
23027
+ t
23028
+ } = useLocale();
23029
+ const items = computed(() => genStructure(wrapInArray(props.type).join(',')));
23030
+ useRender(() => {
23031
+ const isLoading = !slots.default || props.loading;
23032
+ return createVNode("div", {
23033
+ "class": ['v-skeleton-loader', {
23034
+ 'v-skeleton-loader--boilerplate': props.boilerplate
23035
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
23036
+ "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
23037
+ "aria-busy": !props.boilerplate ? isLoading : undefined,
23038
+ "aria-live": !props.boilerplate ? 'polite' : undefined,
23039
+ "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
23040
+ "role": !props.boilerplate ? 'alert' : undefined
23041
+ }, [isLoading ? items.value : slots.default?.()]);
23042
+ });
23043
+ return {};
23044
+ }
23045
+ });
23046
+
23047
+ var components = /*#__PURE__*/Object.freeze({
23048
+ __proto__: null,
23049
+ VAlert: VAlert,
23050
+ VAlertTitle: VAlertTitle,
23051
+ VApp: VApp,
23052
+ VAppBar: VAppBar,
23053
+ VAppBarNavIcon: VAppBarNavIcon,
23054
+ VAppBarTitle: VAppBarTitle,
23055
+ VAutocomplete: VAutocomplete,
23056
+ VAvatar: VAvatar,
23057
+ VBadge: VBadge,
23058
+ VBanner: VBanner,
23059
+ VBannerActions: VBannerActions,
23060
+ VBannerText: VBannerText,
23061
+ VBottomNavigation: VBottomNavigation,
23062
+ VBottomSheet: VBottomSheet,
23063
+ VBreadcrumbs: VBreadcrumbs,
23064
+ VBreadcrumbsDivider: VBreadcrumbsDivider,
23065
+ VBreadcrumbsItem: VBreadcrumbsItem,
23066
+ VBtn: VBtn,
23067
+ VBtnGroup: VBtnGroup,
23068
+ VBtnToggle: VBtnToggle,
23069
+ VCard: VCard,
23070
+ VCardActions: VCardActions,
23071
+ VCardItem: VCardItem,
23072
+ VCardSubtitle: VCardSubtitle,
23073
+ VCardText: VCardText,
23074
+ VCardTitle: VCardTitle,
23075
+ VCarousel: VCarousel,
23076
+ VCarouselItem: VCarouselItem,
23077
+ VCheckbox: VCheckbox,
23078
+ VCheckboxBtn: VCheckboxBtn,
23079
+ VChip: VChip,
23080
+ VChipGroup: VChipGroup,
23081
+ VClassIcon: VClassIcon,
23082
+ VCode: VCode,
23083
+ VCol: VCol,
23084
+ VColorPicker: VColorPicker,
23085
+ VCombobox: VCombobox,
23086
+ VComponentIcon: VComponentIcon,
23087
+ VContainer: VContainer,
23088
+ VCounter: VCounter,
23089
+ VDataIterator: VDataIterator,
23090
+ VDataTable: VDataTable,
23091
+ VDataTableFooter: VDataTableFooter,
23092
+ VDataTableRow: VDataTableRow,
23093
+ VDataTableRows: VDataTableRows,
23094
+ VDataTableServer: VDataTableServer,
23095
+ VDataTableVirtual: VDataTableVirtual,
23096
+ VDateCard: VDateCard,
23097
+ VDatePicker: VDatePicker,
23098
+ VDatePickerControls: VDatePickerControls,
23099
+ VDatePickerHeader: VDatePickerHeader,
23100
+ VDatePickerMonth: VDatePickerMonth,
23101
+ VDatePickerYears: VDatePickerYears,
23102
+ VDefaultsProvider: VDefaultsProvider,
23103
+ VDialog: VDialog,
23104
+ VDialogBottomTransition: VDialogBottomTransition,
23105
+ VDialogTopTransition: VDialogTopTransition,
23106
+ VDialogTransition: VDialogTransition,
23107
+ VDivider: VDivider,
23108
+ VExpandTransition: VExpandTransition,
23109
+ VExpandXTransition: VExpandXTransition,
23110
+ VExpansionPanel: VExpansionPanel,
23111
+ VExpansionPanelText: VExpansionPanelText,
23112
+ VExpansionPanelTitle: VExpansionPanelTitle,
23113
+ VExpansionPanels: VExpansionPanels,
23114
+ VFabTransition: VFabTransition,
23115
+ VFadeTransition: VFadeTransition,
23116
+ VField: VField,
23117
+ VFieldLabel: VFieldLabel,
23118
+ VFileInput: VFileInput,
23119
+ VFooter: VFooter,
23120
+ VForm: VForm,
23121
+ VHover: VHover,
23122
+ VIcon: VIcon,
23123
+ VImg: VImg,
23124
+ VInfiniteScroll: VInfiniteScroll,
23125
+ VInput: VInput,
23126
+ VItem: VItem,
23127
+ VItemGroup: VItemGroup,
23128
+ VKbd: VKbd,
23129
+ VLabel: VLabel,
23130
+ VLayout: VLayout,
23131
+ VLayoutItem: VLayoutItem,
23132
+ VLazy: VLazy,
23133
+ VLigatureIcon: VLigatureIcon,
23134
+ VList: VList,
23135
+ VListGroup: VListGroup,
23136
+ VListImg: VListImg,
23137
+ VListItem: VListItem,
23138
+ VListItemAction: VListItemAction,
23139
+ VListItemMedia: VListItemMedia,
23140
+ VListItemSubtitle: VListItemSubtitle,
23141
+ VListItemTitle: VListItemTitle,
23142
+ VListSubheader: VListSubheader,
23143
+ VLocaleProvider: VLocaleProvider,
23144
+ VMain: VMain,
23145
+ VMenu: VMenu,
23146
+ VMessages: VMessages,
23147
+ VNavigationDrawer: VNavigationDrawer,
23148
+ VNoSsr: VNoSsr,
23149
+ VOverlay: VOverlay,
23150
+ VPagination: VPagination,
23151
+ VParallax: VParallax,
23152
+ VPicker: VPicker,
23153
+ VPickerTitle: VPickerTitle,
23154
+ VProgressCircular: VProgressCircular,
23155
+ VProgressLinear: VProgressLinear,
23156
+ VRadio: VRadio,
23157
+ VRadioGroup: VRadioGroup,
23158
+ VRangeSlider: VRangeSlider,
23159
+ VRating: VRating,
23160
+ VResponsive: VResponsive,
23161
+ VRow: VRow,
23162
+ VScaleTransition: VScaleTransition,
23163
+ VScrollXReverseTransition: VScrollXReverseTransition,
23164
+ VScrollXTransition: VScrollXTransition,
23165
+ VScrollYReverseTransition: VScrollYReverseTransition,
23166
+ VScrollYTransition: VScrollYTransition,
23167
+ VSelect: VSelect,
23168
+ VSelectionControl: VSelectionControl,
23169
+ VSelectionControlGroup: VSelectionControlGroup,
23170
+ VSheet: VSheet,
23171
+ VSkeletonLoader: VSkeletonLoader,
23172
+ VSlideGroup: VSlideGroup,
23173
+ VSlideGroupItem: VSlideGroupItem,
23174
+ VSlideXReverseTransition: VSlideXReverseTransition,
23175
+ VSlideXTransition: VSlideXTransition,
23176
+ VSlideYReverseTransition: VSlideYReverseTransition,
23177
+ VSlideYTransition: VSlideYTransition,
23178
+ VSlider: VSlider,
23179
+ VSnackbar: VSnackbar,
23180
+ VSpacer: VSpacer,
23181
+ VSvgIcon: VSvgIcon,
23182
+ VSwitch: VSwitch,
23183
+ VSystemBar: VSystemBar,
23184
+ VTab: VTab,
23185
+ VTable: VTable,
23186
+ VTabs: VTabs,
23187
+ VTextField: VTextField,
23188
+ VTextarea: VTextarea,
23189
+ VThemeProvider: VThemeProvider,
23190
+ VTimeline: VTimeline,
23191
+ VTimelineItem: VTimelineItem,
23192
+ VToolbar: VToolbar,
23193
+ VToolbarItems: VToolbarItems,
23194
+ VToolbarTitle: VToolbarTitle,
23195
+ VTooltip: VTooltip,
23196
+ VValidation: VValidation,
23197
+ VVirtualScroll: VVirtualScroll,
23198
+ VWindow: VWindow,
23199
+ VWindowItem: VWindowItem
23200
+ });
22286
23201
 
22287
- // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
22288
- function getWeek(date) {
22289
- let year = date.getFullYear();
22290
- let d1w1 = getMondayOfFirstWeekOfYear(year);
22291
- if (date < d1w1) {
22292
- year = year - 1;
22293
- d1w1 = getMondayOfFirstWeekOfYear(year);
22294
- } else {
22295
- const tv = getMondayOfFirstWeekOfYear(year + 1);
22296
- if (date >= tv) {
22297
- year = year + 1;
22298
- d1w1 = tv;
23202
+ // Types
23203
+
23204
+ function mounted$2(el, binding) {
23205
+ const modifiers = binding.modifiers || {};
23206
+ const value = binding.value;
23207
+ const {
23208
+ once,
23209
+ immediate,
23210
+ ...modifierKeys
23211
+ } = modifiers;
23212
+ const defaultValue = !Object.keys(modifierKeys).length;
23213
+ const {
23214
+ handler,
23215
+ options
23216
+ } = typeof value === 'object' ? value : {
23217
+ handler: value,
23218
+ options: {
23219
+ attributes: modifierKeys?.attr ?? defaultValue,
23220
+ characterData: modifierKeys?.char ?? defaultValue,
23221
+ childList: modifierKeys?.child ?? defaultValue,
23222
+ subtree: modifierKeys?.sub ?? defaultValue
22299
23223
  }
22300
- }
22301
- const diffTime = Math.abs(date.getTime() - d1w1.getTime());
22302
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
22303
- return Math.floor(diffDays / 7) + 1;
22304
- }
22305
- function isWithinRange(date, range) {
22306
- return isAfter(date, range[0]) && isBefore(date, range[1]);
22307
- }
22308
- function isValid(date) {
22309
- const d = new Date(date);
22310
- return d instanceof Date && !isNaN(d.getTime());
22311
- }
22312
- function isAfter(date, comparing) {
22313
- return date.getTime() > comparing.getTime();
22314
- }
22315
- function isBefore(date, comparing) {
22316
- return date.getTime() < comparing.getTime();
22317
- }
22318
- function isEqual(date, comparing) {
22319
- return date.getTime() === comparing.getTime();
22320
- }
22321
- function isSameDay(date, comparing) {
22322
- return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
23224
+ };
23225
+ const observer = new MutationObserver(function () {
23226
+ let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
23227
+ let observer = arguments.length > 1 ? arguments[1] : undefined;
23228
+ handler?.(mutations, observer);
23229
+ if (once) unmounted$2(el, binding);
23230
+ });
23231
+ if (immediate) handler?.([], observer);
23232
+ el._mutate = Object(el._mutate);
23233
+ el._mutate[binding.instance.$.uid] = {
23234
+ observer
23235
+ };
23236
+ observer.observe(el, options);
22323
23237
  }
22324
- function isSameMonth(date, comparing) {
22325
- return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
23238
+ function unmounted$2(el, binding) {
23239
+ if (!el._mutate?.[binding.instance.$.uid]) return;
23240
+ el._mutate[binding.instance.$.uid].observer.disconnect();
23241
+ delete el._mutate[binding.instance.$.uid];
22326
23242
  }
22327
- function getDiff(date, comparing, unit) {
22328
- const d = new Date(date);
22329
- const c = new Date(comparing);
22330
- if (unit === 'month') {
22331
- return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
23243
+ const Mutate = {
23244
+ mounted: mounted$2,
23245
+ unmounted: unmounted$2
23246
+ };
23247
+
23248
+ // Types
23249
+
23250
+ function mounted$1(el, binding) {
23251
+ const handler = binding.value;
23252
+ const options = {
23253
+ passive: !binding.modifiers?.active
23254
+ };
23255
+ window.addEventListener('resize', handler, options);
23256
+ el._onResize = Object(el._onResize);
23257
+ el._onResize[binding.instance.$.uid] = {
23258
+ handler,
23259
+ options
23260
+ };
23261
+ if (!binding.modifiers?.quiet) {
23262
+ handler();
22332
23263
  }
22333
- return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
22334
- }
22335
- function setYear(date, year) {
22336
- const d = new Date(date);
22337
- d.setFullYear(year);
22338
- return d;
22339
23264
  }
22340
- class VuetifyDateAdapter {
22341
- constructor() {
22342
- let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
22343
- this.locale = locale;
22344
- }
22345
- date(value) {
22346
- return date(value);
22347
- }
22348
- addDays(date, amount) {
22349
- return addDays(date, amount);
22350
- }
22351
- addMonths(date, amount) {
22352
- return addMonths(date, amount);
22353
- }
22354
- getWeekArray(date) {
22355
- return getWeekArray(date);
22356
- }
22357
- startOfMonth(date) {
22358
- return startOfMonth(date);
22359
- }
22360
- endOfMonth(date) {
22361
- return endOfMonth(date);
22362
- }
22363
- format(date, formatString) {
22364
- return format(date, formatString, this.locale);
22365
- }
22366
- isEqual(date, comparing) {
22367
- return isEqual(date, comparing);
22368
- }
22369
- isValid(date) {
22370
- return isValid(date);
22371
- }
22372
- isWithinRange(date, range) {
22373
- return isWithinRange(date, range);
22374
- }
22375
- isAfter(date, comparing) {
22376
- return isAfter(date, comparing);
22377
- }
22378
- isSameDay(date, comparing) {
22379
- return isSameDay(date, comparing);
22380
- }
22381
- isSameMonth(date, comparing) {
22382
- return isSameMonth(date, comparing);
22383
- }
22384
- setYear(date, year) {
22385
- return setYear(date, year);
22386
- }
22387
- getDiff(date, comparing, unit) {
22388
- return getDiff(date, comparing, unit);
22389
- }
22390
- getWeek(date) {
22391
- return getWeek(date);
22392
- }
22393
- getWeekdays() {
22394
- return getWeekdays(this.locale);
22395
- }
22396
- getYear(date) {
22397
- return getYear(date);
22398
- }
22399
- getMonth(date) {
22400
- return getMonth(date);
22401
- }
22402
- startOfYear(date) {
22403
- return startOfYear(date);
22404
- }
22405
- endOfYear(date) {
22406
- return endOfYear(date);
22407
- }
23265
+ function unmounted$1(el, binding) {
23266
+ if (!el._onResize?.[binding.instance.$.uid]) return;
23267
+ const {
23268
+ handler,
23269
+ options
23270
+ } = el._onResize[binding.instance.$.uid];
23271
+ window.removeEventListener('resize', handler, options);
23272
+ delete el._onResize[binding.instance.$.uid];
22408
23273
  }
22409
-
22410
- // Composables
23274
+ const Resize = {
23275
+ mounted: mounted$1,
23276
+ unmounted: unmounted$1
23277
+ };
22411
23278
 
22412
23279
  // Types
22413
23280
 
22414
- const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
22415
- function createDate(options) {
22416
- return options ?? {
22417
- adapter: VuetifyDateAdapter
23281
+ function mounted(el, binding) {
23282
+ const {
23283
+ self = false
23284
+ } = binding.modifiers ?? {};
23285
+ const value = binding.value;
23286
+ const options = typeof value === 'object' && value.options || {
23287
+ passive: true
23288
+ };
23289
+ const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
23290
+ const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
23291
+ if (!target) return;
23292
+ target.addEventListener('scroll', handler, options);
23293
+ el._onScroll = Object(el._onScroll);
23294
+ el._onScroll[binding.instance.$.uid] = {
23295
+ handler,
23296
+ options,
23297
+ // Don't reference self
23298
+ target: self ? undefined : target
22418
23299
  };
22419
23300
  }
23301
+ function unmounted(el, binding) {
23302
+ if (!el._onScroll?.[binding.instance.$.uid]) return;
23303
+ const {
23304
+ handler,
23305
+ options,
23306
+ target = el
23307
+ } = el._onScroll[binding.instance.$.uid];
23308
+ target.removeEventListener('scroll', handler, options);
23309
+ delete el._onScroll[binding.instance.$.uid];
23310
+ }
23311
+ function updated(el, binding) {
23312
+ if (binding.value === binding.oldValue) return;
23313
+ unmounted(el, binding);
23314
+ mounted(el, binding);
23315
+ }
23316
+ const Scroll = {
23317
+ mounted,
23318
+ unmounted,
23319
+ updated
23320
+ };
23321
+
23322
+ var directives = /*#__PURE__*/Object.freeze({
23323
+ __proto__: null,
23324
+ ClickOutside: ClickOutside,
23325
+ Intersect: Intersect,
23326
+ Mutate: Mutate,
23327
+ Resize: Resize,
23328
+ Ripple: Ripple,
23329
+ Scroll: Scroll,
23330
+ Touch: Touch
23331
+ });
22420
23332
 
22421
23333
  // Composables
22422
23334
  function createVuetify$1() {
@@ -22503,7 +23415,7 @@ function createVuetify$1() {
22503
23415
  date
22504
23416
  };
22505
23417
  }
22506
- const version$1 = "3.3.3";
23418
+ const version$1 = "3.3.4";
22507
23419
  createVuetify$1.version = version$1;
22508
23420
 
22509
23421
  // Vue's inject() can only be used in setup
@@ -22517,7 +23429,7 @@ function inject(key) {
22517
23429
 
22518
23430
  /* eslint-disable local-rules/sort-imports */
22519
23431
 
22520
- const version = "3.3.3";
23432
+ const version = "3.3.4";
22521
23433
 
22522
23434
  /* eslint-disable local-rules/sort-imports */
22523
23435