vuetify 3.8.7 → 3.8.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/json/attributes.json +1535 -1511
  3. package/dist/json/importMap-labs.json +20 -20
  4. package/dist/json/importMap.json +138 -138
  5. package/dist/json/tags.json +6 -0
  6. package/dist/json/web-types.json +2800 -2746
  7. package/dist/vuetify-labs.cjs +292 -154
  8. package/dist/vuetify-labs.css +6716 -6710
  9. package/dist/vuetify-labs.d.ts +96 -50
  10. package/dist/vuetify-labs.esm.js +293 -155
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +292 -154
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +272 -124
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3854 -3848
  17. package/dist/vuetify.d.ts +81 -50
  18. package/dist/vuetify.esm.js +273 -125
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +272 -124
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +489 -470
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.css +6 -6
  26. package/lib/components/VAutocomplete/VAutocomplete.sass +3 -9
  27. package/lib/components/VCarousel/VCarousel.js +3 -3
  28. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  29. package/lib/components/VChip/VChip.js +1 -0
  30. package/lib/components/VChip/VChip.js.map +1 -1
  31. package/lib/components/VColorPicker/VColorPickerPreview.js +3 -3
  32. package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
  33. package/lib/components/VColorPicker/VColorPickerSwatches.js +3 -3
  34. package/lib/components/VColorPicker/VColorPickerSwatches.js.map +1 -1
  35. package/lib/components/VCombobox/VCombobox.css +6 -6
  36. package/lib/components/VCombobox/VCombobox.sass +3 -9
  37. package/lib/components/VDataTable/VDataTableColumn.js +4 -3
  38. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  39. package/lib/components/VDataTable/VDataTableFooter.js +3 -1
  40. package/lib/components/VDataTable/VDataTableFooter.js.map +1 -1
  41. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +3 -3
  42. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
  43. package/lib/components/VDataTable/VDataTableHeaders.js +8 -1
  44. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  45. package/lib/components/VDataTable/VDataTableVirtual.js +7 -7
  46. package/lib/components/VDataTable/VDataTableVirtual.js.map +1 -1
  47. package/lib/components/VDatePicker/VDatePicker.d.ts +20 -0
  48. package/lib/components/VDatePicker/VDatePicker.js +39 -2
  49. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  50. package/lib/components/VDatePicker/VDatePickerControls.js +4 -4
  51. package/lib/components/VDatePicker/VDatePickerControls.js.map +1 -1
  52. package/lib/components/VDatePicker/VDatePickerMonth.js +5 -12
  53. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  54. package/lib/components/VDatePicker/VDatePickerMonths.d.ts +10 -0
  55. package/lib/components/VDatePicker/VDatePickerMonths.js +15 -5
  56. package/lib/components/VDatePicker/VDatePickerMonths.js.map +1 -1
  57. package/lib/components/VDatePicker/VDatePickerYears.d.ts +10 -0
  58. package/lib/components/VDatePicker/VDatePickerYears.js +17 -5
  59. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  60. package/lib/components/VEmptyState/VEmptyState.js +3 -3
  61. package/lib/components/VEmptyState/VEmptyState.js.map +1 -1
  62. package/lib/components/VFileInput/VFileInput.js +8 -3
  63. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  64. package/lib/components/VImg/VImg.js +7 -7
  65. package/lib/components/VImg/VImg.js.map +1 -1
  66. package/lib/components/VInfiniteScroll/VInfiniteScroll.js +3 -3
  67. package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
  68. package/lib/components/VNumberInput/VNumberInput.d.ts +5 -0
  69. package/lib/components/VNumberInput/VNumberInput.js +18 -21
  70. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  71. package/lib/components/VOtpInput/VOtpInput.js +7 -4
  72. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  73. package/lib/components/VProgressCircular/VProgressCircular.js +2 -2
  74. package/lib/components/VProgressCircular/VProgressCircular.js.map +1 -1
  75. package/lib/components/VProgressLinear/VProgressLinear.js +3 -3
  76. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  77. package/lib/components/VSelect/VSelect.css +6 -0
  78. package/lib/components/VSelect/VSelect.js +6 -5
  79. package/lib/components/VSelect/VSelect.js.map +1 -1
  80. package/lib/components/VSelect/VSelect.sass +3 -0
  81. package/lib/components/VSelect/_mixins.scss +14 -0
  82. package/lib/components/VSelectionControl/VSelectionControl.js +2 -2
  83. package/lib/components/VSelectionControl/VSelectionControl.js.map +1 -1
  84. package/lib/components/VSlider/VSliderThumb.js +16 -10
  85. package/lib/components/VSlider/VSliderThumb.js.map +1 -1
  86. package/lib/components/VSlider/VSliderTrack.js +6 -6
  87. package/lib/components/VSlider/VSliderTrack.js.map +1 -1
  88. package/lib/components/VSlider/slider.js +4 -1
  89. package/lib/components/VSlider/slider.js.map +1 -1
  90. package/lib/components/VTable/VTable.js +3 -3
  91. package/lib/components/VTable/VTable.js.map +1 -1
  92. package/lib/components/VTextField/VTextField.js +5 -4
  93. package/lib/components/VTextField/VTextField.js.map +1 -1
  94. package/lib/components/VToolbar/VToolbar.js +5 -5
  95. package/lib/components/VToolbar/VToolbar.js.map +1 -1
  96. package/lib/components/VVirtualScroll/VVirtualScroll.js +7 -7
  97. package/lib/components/VVirtualScroll/VVirtualScroll.js.map +1 -1
  98. package/lib/components/VWindow/VWindow.js +3 -3
  99. package/lib/components/VWindow/VWindow.js.map +1 -1
  100. package/lib/composables/date/adapters/vuetify.js +1 -1
  101. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  102. package/lib/composables/date/date.d.ts +1 -0
  103. package/lib/composables/date/date.js +12 -0
  104. package/lib/composables/date/date.js.map +1 -1
  105. package/lib/composables/fileDrop.d.ts +4 -0
  106. package/lib/composables/fileDrop.js +50 -0
  107. package/lib/composables/fileDrop.js.map +1 -0
  108. package/lib/composables/icons.d.ts +6 -0
  109. package/lib/composables/icons.js.map +1 -1
  110. package/lib/entry-bundler.js +1 -1
  111. package/lib/framework.d.ts +56 -50
  112. package/lib/framework.js +1 -1
  113. package/lib/iconsets/fa.js +3 -1
  114. package/lib/iconsets/fa.js.map +1 -1
  115. package/lib/iconsets/fa4.js +3 -1
  116. package/lib/iconsets/fa4.js.map +1 -1
  117. package/lib/iconsets/md.js +3 -1
  118. package/lib/iconsets/md.js.map +1 -1
  119. package/lib/iconsets/mdi-svg.js +3 -1
  120. package/lib/iconsets/mdi-svg.js.map +1 -1
  121. package/lib/labs/VColorInput/VColorInput.js +3 -8
  122. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  123. package/lib/labs/VDateInput/VDateInput.d.ts +25 -0
  124. package/lib/labs/VDateInput/VDateInput.js +9 -16
  125. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  126. package/lib/labs/VFileUpload/VFileUpload.js +7 -3
  127. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  128. package/lib/labs/VPullToRefresh/VPullToRefresh.js +7 -7
  129. package/lib/labs/VPullToRefresh/VPullToRefresh.js.map +1 -1
  130. package/lib/util/helpers.d.ts +1 -0
  131. package/lib/util/helpers.js +8 -1
  132. package/lib/util/helpers.js.map +1 -1
  133. package/package.json +3 -3
@@ -1,11 +1,11 @@
1
- import { createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, createVNode as _createVNode, normalizeClass as _normalizeClass } from "vue";
1
+ import { createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createVNode as _createVNode } from "vue";
2
2
  // Styles
3
3
  import "./VDatePickerMonth.css";
4
4
 
5
5
  // Components
6
6
  import { VBtn } from "../VBtn/index.js"; // Composables
7
7
  import { makeCalendarProps, useCalendar } from "../../composables/calendar.js";
8
- import { useDate } from "../../composables/date/date.js";
8
+ import { createDateRange, useDate } from "../../composables/date/date.js";
9
9
  import { MaybeTransition } from "../../composables/transition.js"; // Utilities
10
10
  import { computed, ref, shallowRef, toRef, watch } from 'vue';
11
11
  import { genericComponent, omit, propsFactory, useRender } from "../../util/index.js"; // Types
@@ -86,14 +86,7 @@ export const VDatePickerMonth = genericComponent()({
86
86
  } else {
87
87
  rangeStop.value = adapter.endOfDay(_value);
88
88
  }
89
- const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
90
- const datesInRange = [rangeStart.value];
91
- for (let i = 1; i < diff; i++) {
92
- const nextDate = adapter.addDays(rangeStart.value, i);
93
- datesInRange.push(nextDate);
94
- }
95
- datesInRange.push(rangeStop.value);
96
- model.value = datesInRange;
89
+ model.value = createDateRange(adapter, rangeStart.value, rangeStop.value);
97
90
  } else {
98
91
  rangeStart.value = value;
99
92
  rangeStop.value = undefined;
@@ -128,7 +121,7 @@ export const VDatePickerMonth = genericComponent()({
128
121
  "key": "hide-week-days",
129
122
  "class": "v-date-picker-month__day"
130
123
  }, [_createTextVNode("\xA0")]), weekNumbers.value.map(week => _createElementVNode("div", {
131
- "class": ['v-date-picker-month__day', 'v-date-picker-month__day--adjacent']
124
+ "class": _normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__day--adjacent'])
132
125
  }, [week]))]), _createVNode(MaybeTransition, {
133
126
  "name": transition.value
134
127
  }, {
@@ -137,7 +130,7 @@ export const VDatePickerMonth = genericComponent()({
137
130
  "key": daysInMonth.value[0].date?.toString(),
138
131
  "class": "v-date-picker-month__days"
139
132
  }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => _createElementVNode("div", {
140
- "class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
133
+ "class": _normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
141
134
  }, [weekDay])), daysInMonth.value.map((item, i) => {
142
135
  const slotProps = {
143
136
  props: {
@@ -1 +1 @@
1
- {"version":3,"file":"VDatePickerMonth.js","names":["VBtn","makeCalendarProps","useCalendar","useDate","MaybeTransition","computed","ref","shallowRef","toRef","watch","genericComponent","omit","propsFactory","useRender","makeVDatePickerMonthProps","color","String","hideWeekdays","Boolean","multiple","Number","showWeek","transition","type","default","reverseTransition","VDatePickerMonth","name","props","emits","date","setup","_ref","emit","slots","daysRef","daysInMonth","model","weekNumbers","adapter","rangeStart","rangeStop","isReverse","value","length","atMax","max","includes","Infinity","val","oldVal","isBefore","onRangeClick","_value","startOfDay","undefined","isSameDay","endOfDay","diff","getDiff","datesInRange","i","nextDate","addDays","push","onMultipleClick","index","findIndex","selection","splice","onClick","_createElementVNode","_createTextVNode","map","week","_createVNode","toString","getWeekdays","firstDayOfWeek","weekDay","item","slotProps","class","isSelected","isToday","disabled","isDisabled","icon","ripple","text","localized","variant","_normalizeClass","isAdjacent","isHidden","isWeekEnd","isWeekStart","isoDate","showAdjacentMonths","day"],"sources":["../../../src/components/VDatePicker/VDatePickerMonth.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerMonth.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeCalendarProps, useCalendar } from '@/composables/calendar'\nimport { useDate } from '@/composables/date/date'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, ref, shallowRef, toRef, watch } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VDatePickerMonthSlots = {\n day: {\n props: {\n onClick: () => void\n }\n item: any\n i: number\n }\n}\n\nexport const makeVDatePickerMonthProps = propsFactory({\n color: String,\n hideWeekdays: Boolean,\n multiple: [Boolean, Number, String] as PropType<boolean | 'range' | number | (string & {})>,\n showWeek: Boolean,\n transition: {\n type: String,\n default: 'picker-transition',\n },\n reverseTransition: {\n type: String,\n default: 'picker-reverse-transition',\n },\n\n ...omit(makeCalendarProps(), ['displayValue']),\n}, 'VDatePickerMonth')\n\nexport const VDatePickerMonth = genericComponent<VDatePickerMonthSlots>()({\n name: 'VDatePickerMonth',\n\n props: makeVDatePickerMonthProps(),\n\n emits: {\n 'update:modelValue': (date: unknown) => true,\n 'update:month': (date: number) => true,\n 'update:year': (date: number) => true,\n },\n\n setup (props, { emit, slots }) {\n const daysRef = ref()\n\n const { daysInMonth, model, weekNumbers } = useCalendar(props)\n const adapter = useDate()\n\n const rangeStart = shallowRef()\n const rangeStop = shallowRef()\n const isReverse = shallowRef(false)\n\n const transition = toRef(() => {\n return !isReverse.value ? props.transition : props.reverseTransition\n })\n\n if (props.multiple === 'range' && model.value.length > 0) {\n rangeStart.value = model.value[0]\n if (model.value.length > 1) {\n rangeStop.value = model.value[model.value.length - 1]\n }\n }\n\n const atMax = computed(() => {\n const max = ['number', 'string'].includes(typeof props.multiple) ? Number(props.multiple) : Infinity\n\n return model.value.length >= max\n })\n\n watch(daysInMonth, (val, oldVal) => {\n if (!oldVal) return\n\n isReverse.value = adapter.isBefore(val[0].date, oldVal[0].date)\n })\n\n function onRangeClick (value: unknown) {\n const _value = adapter.startOfDay(value)\n\n if (model.value.length === 0) {\n rangeStart.value = undefined\n } else if (model.value.length === 1) {\n rangeStart.value = model.value[0]\n rangeStop.value = undefined\n }\n if (!rangeStart.value) {\n rangeStart.value = _value\n model.value = [rangeStart.value]\n } else if (!rangeStop.value) {\n if (adapter.isSameDay(_value, rangeStart.value)) {\n rangeStart.value = undefined\n model.value = []\n return\n } else if (adapter.isBefore(_value, rangeStart.value)) {\n rangeStop.value = adapter.endOfDay(rangeStart.value)\n rangeStart.value = _value\n } else {\n rangeStop.value = adapter.endOfDay(_value)\n }\n\n const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days')\n const datesInRange = [rangeStart.value]\n\n for (let i = 1; i < diff; i++) {\n const nextDate = adapter.addDays(rangeStart.value, i)\n datesInRange.push(nextDate)\n }\n\n datesInRange.push(rangeStop.value)\n\n model.value = datesInRange\n } else {\n rangeStart.value = value\n rangeStop.value = undefined\n model.value = [rangeStart.value]\n }\n }\n\n function onMultipleClick (value: unknown) {\n const index = model.value.findIndex(selection => adapter.isSameDay(selection, value))\n\n if (index === -1) {\n model.value = [...model.value, value]\n } else {\n const value = [...model.value]\n value.splice(index, 1)\n model.value = value\n }\n }\n\n function onClick (value: unknown) {\n if (props.multiple === 'range') {\n onRangeClick(value)\n } else if (props.multiple) {\n onMultipleClick(value)\n } else {\n model.value = [value]\n }\n }\n\n useRender(() => (\n <div class=\"v-date-picker-month\">\n { props.showWeek && (\n <div key=\"weeks\" class=\"v-date-picker-month__weeks\">\n { !props.hideWeekdays && (\n <div key=\"hide-week-days\" class=\"v-date-picker-month__day\">&nbsp;</div>\n )}\n { weekNumbers.value.map(week => (\n <div\n class={[\n 'v-date-picker-month__day',\n 'v-date-picker-month__day--adjacent',\n ]}\n >{ week }</div>\n ))}\n </div>\n )}\n\n <MaybeTransition name={ transition.value }>\n <div\n ref={ daysRef }\n key={ daysInMonth.value[0].date?.toString() }\n class=\"v-date-picker-month__days\"\n >\n { !props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => (\n <div\n class={[\n 'v-date-picker-month__day',\n 'v-date-picker-month__weekday',\n ]}\n >{ weekDay }</div>\n ))}\n\n { daysInMonth.value.map((item, i) => {\n const slotProps = {\n props: {\n class: 'v-date-picker-month__day-btn',\n color: item.isSelected || item.isToday ? props.color : undefined,\n disabled: item.isDisabled,\n icon: true,\n ripple: false,\n text: item.localized,\n variant: item.isSelected ? 'flat' : item.isToday ? 'outlined' : 'text',\n onClick: () => onClick(item.date),\n },\n item,\n i,\n } as const\n\n if (atMax.value && !item.isSelected) {\n item.isDisabled = true\n }\n\n return (\n <div\n class={[\n 'v-date-picker-month__day',\n {\n 'v-date-picker-month__day--adjacent': item.isAdjacent,\n 'v-date-picker-month__day--hide-adjacent': item.isHidden,\n 'v-date-picker-month__day--selected': item.isSelected,\n 'v-date-picker-month__day--week-end': item.isWeekEnd,\n 'v-date-picker-month__day--week-start': item.isWeekStart,\n },\n ]}\n data-v-date={ !item.isDisabled ? item.isoDate : undefined }\n >\n { (props.showAdjacentMonths || !item.isAdjacent) && (\n slots.day?.(slotProps) ?? (<VBtn { ...slotProps.props } />)\n )}\n </div>\n )\n })}\n </div>\n </MaybeTransition>\n </div>\n ))\n },\n})\n\nexport type VDatePickerMonth = InstanceType<typeof VDatePickerMonth>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VDatePickerMonth.js","names":["VBtn","makeCalendarProps","useCalendar","createDateRange","useDate","MaybeTransition","computed","ref","shallowRef","toRef","watch","genericComponent","omit","propsFactory","useRender","makeVDatePickerMonthProps","color","String","hideWeekdays","Boolean","multiple","Number","showWeek","transition","type","default","reverseTransition","VDatePickerMonth","name","props","emits","date","setup","_ref","emit","slots","daysRef","daysInMonth","model","weekNumbers","adapter","rangeStart","rangeStop","isReverse","value","length","atMax","max","includes","Infinity","val","oldVal","isBefore","onRangeClick","_value","startOfDay","undefined","isSameDay","endOfDay","onMultipleClick","index","findIndex","selection","splice","onClick","_createElementVNode","_createTextVNode","map","week","_normalizeClass","_createVNode","toString","getWeekdays","firstDayOfWeek","weekDay","item","i","slotProps","class","isSelected","isToday","disabled","isDisabled","icon","ripple","text","localized","variant","isAdjacent","isHidden","isWeekEnd","isWeekStart","isoDate","showAdjacentMonths","day"],"sources":["../../../src/components/VDatePicker/VDatePickerMonth.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerMonth.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeCalendarProps, useCalendar } from '@/composables/calendar'\nimport { createDateRange, useDate } from '@/composables/date/date'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, ref, shallowRef, toRef, watch } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VDatePickerMonthSlots = {\n day: {\n props: {\n onClick: () => void\n }\n item: any\n i: number\n }\n}\n\nexport const makeVDatePickerMonthProps = propsFactory({\n color: String,\n hideWeekdays: Boolean,\n multiple: [Boolean, Number, String] as PropType<boolean | 'range' | number | (string & {})>,\n showWeek: Boolean,\n transition: {\n type: String,\n default: 'picker-transition',\n },\n reverseTransition: {\n type: String,\n default: 'picker-reverse-transition',\n },\n\n ...omit(makeCalendarProps(), ['displayValue']),\n}, 'VDatePickerMonth')\n\nexport const VDatePickerMonth = genericComponent<VDatePickerMonthSlots>()({\n name: 'VDatePickerMonth',\n\n props: makeVDatePickerMonthProps(),\n\n emits: {\n 'update:modelValue': (date: unknown) => true,\n 'update:month': (date: number) => true,\n 'update:year': (date: number) => true,\n },\n\n setup (props, { emit, slots }) {\n const daysRef = ref()\n\n const { daysInMonth, model, weekNumbers } = useCalendar(props)\n const adapter = useDate()\n\n const rangeStart = shallowRef()\n const rangeStop = shallowRef()\n const isReverse = shallowRef(false)\n\n const transition = toRef(() => {\n return !isReverse.value ? props.transition : props.reverseTransition\n })\n\n if (props.multiple === 'range' && model.value.length > 0) {\n rangeStart.value = model.value[0]\n if (model.value.length > 1) {\n rangeStop.value = model.value[model.value.length - 1]\n }\n }\n\n const atMax = computed(() => {\n const max = ['number', 'string'].includes(typeof props.multiple) ? Number(props.multiple) : Infinity\n\n return model.value.length >= max\n })\n\n watch(daysInMonth, (val, oldVal) => {\n if (!oldVal) return\n\n isReverse.value = adapter.isBefore(val[0].date, oldVal[0].date)\n })\n\n function onRangeClick (value: unknown) {\n const _value = adapter.startOfDay(value)\n\n if (model.value.length === 0) {\n rangeStart.value = undefined\n } else if (model.value.length === 1) {\n rangeStart.value = model.value[0]\n rangeStop.value = undefined\n }\n if (!rangeStart.value) {\n rangeStart.value = _value\n model.value = [rangeStart.value]\n } else if (!rangeStop.value) {\n if (adapter.isSameDay(_value, rangeStart.value)) {\n rangeStart.value = undefined\n model.value = []\n return\n } else if (adapter.isBefore(_value, rangeStart.value)) {\n rangeStop.value = adapter.endOfDay(rangeStart.value)\n rangeStart.value = _value\n } else {\n rangeStop.value = adapter.endOfDay(_value)\n }\n\n model.value = createDateRange(adapter, rangeStart.value, rangeStop.value)\n } else {\n rangeStart.value = value\n rangeStop.value = undefined\n model.value = [rangeStart.value]\n }\n }\n\n function onMultipleClick (value: unknown) {\n const index = model.value.findIndex(selection => adapter.isSameDay(selection, value))\n\n if (index === -1) {\n model.value = [...model.value, value]\n } else {\n const value = [...model.value]\n value.splice(index, 1)\n model.value = value\n }\n }\n\n function onClick (value: unknown) {\n if (props.multiple === 'range') {\n onRangeClick(value)\n } else if (props.multiple) {\n onMultipleClick(value)\n } else {\n model.value = [value]\n }\n }\n\n useRender(() => (\n <div class=\"v-date-picker-month\">\n { props.showWeek && (\n <div key=\"weeks\" class=\"v-date-picker-month__weeks\">\n { !props.hideWeekdays && (\n <div key=\"hide-week-days\" class=\"v-date-picker-month__day\">&nbsp;</div>\n )}\n { weekNumbers.value.map(week => (\n <div\n class={[\n 'v-date-picker-month__day',\n 'v-date-picker-month__day--adjacent',\n ]}\n >{ week }</div>\n ))}\n </div>\n )}\n\n <MaybeTransition name={ transition.value }>\n <div\n ref={ daysRef }\n key={ daysInMonth.value[0].date?.toString() }\n class=\"v-date-picker-month__days\"\n >\n { !props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => (\n <div\n class={[\n 'v-date-picker-month__day',\n 'v-date-picker-month__weekday',\n ]}\n >{ weekDay }</div>\n ))}\n\n { daysInMonth.value.map((item, i) => {\n const slotProps = {\n props: {\n class: 'v-date-picker-month__day-btn',\n color: item.isSelected || item.isToday ? props.color : undefined,\n disabled: item.isDisabled,\n icon: true,\n ripple: false,\n text: item.localized,\n variant: item.isSelected ? 'flat' : item.isToday ? 'outlined' : 'text',\n onClick: () => onClick(item.date),\n },\n item,\n i,\n } as const\n\n if (atMax.value && !item.isSelected) {\n item.isDisabled = true\n }\n\n return (\n <div\n class={[\n 'v-date-picker-month__day',\n {\n 'v-date-picker-month__day--adjacent': item.isAdjacent,\n 'v-date-picker-month__day--hide-adjacent': item.isHidden,\n 'v-date-picker-month__day--selected': item.isSelected,\n 'v-date-picker-month__day--week-end': item.isWeekEnd,\n 'v-date-picker-month__day--week-start': item.isWeekStart,\n },\n ]}\n data-v-date={ !item.isDisabled ? item.isoDate : undefined }\n >\n { (props.showAdjacentMonths || !item.isAdjacent) && (\n slots.day?.(slotProps) ?? (<VBtn { ...slotProps.props } />)\n )}\n </div>\n )\n })}\n </div>\n </MaybeTransition>\n </div>\n ))\n },\n})\n\nexport type VDatePickerMonth = InstanceType<typeof VDatePickerMonth>\n"],"mappings":"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","ignoreList":[]}
@@ -18,6 +18,7 @@ export declare const makeVDatePickerMonthsProps: <Defaults extends {
18
18
  max?: unknown;
19
19
  modelValue?: unknown;
20
20
  year?: unknown;
21
+ allowedMonths?: unknown;
21
22
  } = {}>(defaults?: Defaults | undefined) => {
22
23
  color: unknown extends Defaults["color"] ? StringConstructor : {
23
24
  type: PropType<unknown extends Defaults["color"] ? string : string | Defaults["color"]>;
@@ -43,6 +44,10 @@ export declare const makeVDatePickerMonthsProps: <Defaults extends {
43
44
  type: PropType<unknown extends Defaults["year"] ? number : number | Defaults["year"]>;
44
45
  default: unknown extends Defaults["year"] ? number : number | Defaults["year"];
45
46
  };
47
+ allowedMonths: unknown extends Defaults["allowedMonths"] ? PropType<number[] | ((date: number) => boolean)> : {
48
+ type: PropType<unknown extends Defaults["allowedMonths"] ? number[] | ((date: number) => boolean) : number[] | ((date: number) => boolean) | Defaults["allowedMonths"]>;
49
+ default: unknown extends Defaults["allowedMonths"] ? number[] | ((date: number) => boolean) : Defaults["allowedMonths"] | NonNullable<number[] | ((date: number) => boolean)>;
50
+ };
46
51
  };
47
52
  export declare const VDatePickerMonths: {
48
53
  new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{} & {
@@ -52,6 +57,7 @@ export declare const VDatePickerMonths: {
52
57
  color?: string | undefined;
53
58
  year?: number | undefined;
54
59
  modelValue?: number | undefined;
60
+ allowedMonths?: number[] | ((date: number) => boolean) | undefined;
55
61
  } & {
56
62
  $children?: {} | import("vue").VNodeChild | {
57
63
  month?: ((arg: {
@@ -117,6 +123,7 @@ export declare const VDatePickerMonths: {
117
123
  color?: string | undefined;
118
124
  year?: number | undefined;
119
125
  modelValue?: number | undefined;
126
+ allowedMonths?: number[] | ((date: number) => boolean) | undefined;
120
127
  } & {
121
128
  $children?: {} | import("vue").VNodeChild | {
122
129
  month?: ((arg: {
@@ -166,6 +173,7 @@ export declare const VDatePickerMonths: {
166
173
  color?: string | undefined;
167
174
  year?: number | undefined;
168
175
  modelValue?: number | undefined;
176
+ allowedMonths?: number[] | ((date: number) => boolean) | undefined;
169
177
  } & {
170
178
  $children?: {} | import("vue").VNodeChild | {
171
179
  month?: ((arg: {
@@ -224,6 +232,7 @@ export declare const VDatePickerMonths: {
224
232
  max: PropType<unknown>;
225
233
  modelValue: NumberConstructor;
226
234
  year: NumberConstructor;
235
+ allowedMonths: PropType<number[] | ((date: number) => boolean)>;
227
236
  }, import("vue").ExtractPropTypes<{
228
237
  color: StringConstructor;
229
238
  height: (StringConstructor | NumberConstructor)[];
@@ -231,5 +240,6 @@ export declare const VDatePickerMonths: {
231
240
  max: PropType<unknown>;
232
241
  modelValue: NumberConstructor;
233
242
  year: NumberConstructor;
243
+ allowedMonths: PropType<number[] | ((date: number) => boolean)>;
234
244
  }>>;
235
245
  export type VDatePickerMonths = InstanceType<typeof VDatePickerMonths>;
@@ -1,4 +1,4 @@
1
- import { mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle } from "vue";
1
+ import { mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode } from "vue";
2
2
  // Styles
3
3
  import "./VDatePickerMonths.css";
4
4
 
@@ -14,7 +14,8 @@ export const makeVDatePickerMonthsProps = propsFactory({
14
14
  min: null,
15
15
  max: null,
16
16
  modelValue: Number,
17
- year: Number
17
+ year: Number,
18
+ allowedMonths: [Array, Function]
18
19
  }, 'VDatePickerMonths');
19
20
  export const VDatePickerMonths = genericComponent()({
20
21
  name: 'VDatePickerMonths',
@@ -36,7 +37,7 @@ export const VDatePickerMonths = genericComponent()({
36
37
  }
37
38
  return createRange(12).map(i => {
38
39
  const text = adapter.format(date, 'monthShort');
39
- const isDisabled = !!(props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date) || props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))));
40
+ const isDisabled = !!(!isMonthAllowed(i) || props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date) || props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))));
40
41
  date = adapter.getNextMonth(date);
41
42
  return {
42
43
  isDisabled,
@@ -48,11 +49,20 @@ export const VDatePickerMonths = genericComponent()({
48
49
  watchEffect(() => {
49
50
  model.value = model.value ?? adapter.getMonth(adapter.date());
50
51
  });
52
+ function isMonthAllowed(month) {
53
+ if (Array.isArray(props.allowedMonths) && props.allowedMonths.length) {
54
+ return props.allowedMonths.includes(month);
55
+ }
56
+ if (typeof props.allowedMonths === 'function') {
57
+ return props.allowedMonths(month);
58
+ }
59
+ return true;
60
+ }
51
61
  useRender(() => _createElementVNode("div", {
52
62
  "class": "v-date-picker-months",
53
- "style": _normalizeStyle({
63
+ "style": {
54
64
  height: convertToUnit(props.height)
55
- })
65
+ }
56
66
  }, [_createElementVNode("div", {
57
67
  "class": "v-date-picker-months__content"
58
68
  }, [months.value.map((month, i) => {
@@ -1 +1 @@
1
- {"version":3,"file":"VDatePickerMonths.js","names":["VBtn","useDate","useProxiedModel","computed","watchEffect","convertToUnit","createRange","genericComponent","propsFactory","useRender","makeVDatePickerMonthsProps","color","String","height","Number","min","max","modelValue","year","VDatePickerMonths","name","props","emits","date","setup","_ref","emit","slots","adapter","model","months","startOfYear","setYear","map","i","text","format","isDisabled","isAfter","startOfMonth","getNextMonth","value","getMonth","_createElementVNode","_normalizeStyle","month","btnProps","active","undefined","disabled","rounded","variant","onClick","_createVNode","_mergeProps"],"sources":["../../../src/components/VDatePicker/VDatePickerMonths.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerMonths.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, watchEffect } from 'vue'\nimport { convertToUnit, createRange, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VDatePickerMonthsSlots = {\n month: {\n month: {\n text: string\n value: number\n }\n i: number\n props: {\n onClick: () => void\n }\n }\n}\n\nexport const makeVDatePickerMonthsProps = propsFactory({\n color: String,\n height: [String, Number],\n min: null as any as PropType<unknown>,\n max: null as any as PropType<unknown>,\n modelValue: Number,\n year: Number,\n}, 'VDatePickerMonths')\n\nexport const VDatePickerMonths = genericComponent<VDatePickerMonthsSlots>()({\n name: 'VDatePickerMonths',\n\n props: makeVDatePickerMonthsProps(),\n\n emits: {\n 'update:modelValue': (date: any) => true,\n },\n\n setup (props, { emit, slots }) {\n const adapter = useDate()\n const model = useProxiedModel(props, 'modelValue')\n\n const months = computed(() => {\n let date = adapter.startOfYear(adapter.date())\n if (props.year) {\n date = adapter.setYear(date, props.year)\n }\n return createRange(12).map(i => {\n const text = adapter.format(date, 'monthShort')\n const isDisabled =\n !!(\n (props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date)) ||\n (props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))))\n )\n date = adapter.getNextMonth(date)\n\n return {\n isDisabled,\n text,\n value: i,\n }\n })\n })\n\n watchEffect(() => {\n model.value = model.value ?? adapter.getMonth(adapter.date())\n })\n\n useRender(() => (\n <div\n class=\"v-date-picker-months\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <div class=\"v-date-picker-months__content\">\n { months.value.map((month, i) => {\n const btnProps = {\n active: model.value === i,\n color: model.value === i ? props.color : undefined,\n disabled: month.isDisabled,\n rounded: true,\n text: month.text,\n variant: model.value === month.value ? 'flat' : 'text',\n onClick: () => onClick(i),\n } as const\n\n function onClick (i: number) {\n if (model.value === i) {\n emit('update:modelValue', model.value)\n return\n }\n model.value = i\n }\n\n return slots.month?.({\n month,\n i,\n props: btnProps,\n }) ?? (\n <VBtn\n key=\"month\"\n { ...btnProps }\n />\n )\n })}\n </div>\n </div>\n ))\n\n return {}\n },\n})\n\nexport type VDatePickerMonths = InstanceType<typeof VDatePickerMonths>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,IAAI,4BAEb;AAAA,SACSC,OAAO;AAAA,SACPC,eAAe,6CAExB;AACA,SAASC,QAAQ,EAAEC,WAAW,QAAQ,KAAK;AAAA,SAClCC,aAAa,EAAEC,WAAW,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,+BAE9E;AAgBA,OAAO,MAAMC,0BAA0B,GAAGF,YAAY,CAAC;EACrDG,KAAK,EAAEC,MAAM;EACbC,MAAM,EAAE,CAACD,MAAM,EAAEE,MAAM,CAAC;EACxBC,GAAG,EAAE,IAAgC;EACrCC,GAAG,EAAE,IAAgC;EACrCC,UAAU,EAAEH,MAAM;EAClBI,IAAI,EAAEJ;AACR,CAAC,EAAE,mBAAmB,CAAC;AAEvB,OAAO,MAAMK,iBAAiB,GAAGZ,gBAAgB,CAAyB,CAAC,CAAC;EAC1Ea,IAAI,EAAE,mBAAmB;EAEzBC,KAAK,EAAEX,0BAA0B,CAAC,CAAC;EAEnCY,KAAK,EAAE;IACL,mBAAmB,EAAGC,IAAS,IAAK;EACtC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAmB;IAAA,IAAjB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC3B,MAAMG,OAAO,GAAG3B,OAAO,CAAC,CAAC;IACzB,MAAM4B,KAAK,GAAG3B,eAAe,CAACmB,KAAK,EAAE,YAAY,CAAC;IAElD,MAAMS,MAAM,GAAG3B,QAAQ,CAAC,MAAM;MAC5B,IAAIoB,IAAI,GAAGK,OAAO,CAACG,WAAW,CAACH,OAAO,CAACL,IAAI,CAAC,CAAC,CAAC;MAC9C,IAAIF,KAAK,CAACH,IAAI,EAAE;QACdK,IAAI,GAAGK,OAAO,CAACI,OAAO,CAACT,IAAI,EAAEF,KAAK,CAACH,IAAI,CAAC;MAC1C;MACA,OAAOZ,WAAW,CAAC,EAAE,CAAC,CAAC2B,GAAG,CAACC,CAAC,IAAI;QAC9B,MAAMC,IAAI,GAAGP,OAAO,CAACQ,MAAM,CAACb,IAAI,EAAE,YAAY,CAAC;QAC/C,MAAMc,UAAU,GACd,CAAC,EACEhB,KAAK,CAACN,GAAG,IAAIa,OAAO,CAACU,OAAO,CAACV,OAAO,CAACW,YAAY,CAACX,OAAO,CAACL,IAAI,CAACF,KAAK,CAACN,GAAG,CAAC,CAAC,EAAEQ,IAAI,CAAC,IACjFF,KAAK,CAACL,GAAG,IAAIY,OAAO,CAACU,OAAO,CAACf,IAAI,EAAEK,OAAO,CAACW,YAAY,CAACX,OAAO,CAACL,IAAI,CAACF,KAAK,CAACL,GAAG,CAAC,CAAC,CAAE,CACpF;QACHO,IAAI,GAAGK,OAAO,CAACY,YAAY,CAACjB,IAAI,CAAC;QAEjC,OAAO;UACLc,UAAU;UACVF,IAAI;UACJM,KAAK,EAAEP;QACT,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF9B,WAAW,CAAC,MAAM;MAChByB,KAAK,CAACY,KAAK,GAAGZ,KAAK,CAACY,KAAK,IAAIb,OAAO,CAACc,QAAQ,CAACd,OAAO,CAACL,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEFd,SAAS,CAAC,MAAAkC,mBAAA;MAAA;MAAA,SAAAC,eAAA,CAGC;QACL/B,MAAM,EAAER,aAAa,CAACgB,KAAK,CAACR,MAAM;MACpC,CAAC;IAAA,IAAA8B,mBAAA;MAAA;IAAA,IAGGb,MAAM,CAACW,KAAK,CAACR,GAAG,CAAC,CAACY,KAAK,EAAEX,CAAC,KAAK;MAC/B,MAAMY,QAAQ,GAAG;QACfC,MAAM,EAAElB,KAAK,CAACY,KAAK,KAAKP,CAAC;QACzBvB,KAAK,EAAEkB,KAAK,CAACY,KAAK,KAAKP,CAAC,GAAGb,KAAK,CAACV,KAAK,GAAGqC,SAAS;QAClDC,QAAQ,EAAEJ,KAAK,CAACR,UAAU;QAC1Ba,OAAO,EAAE,IAAI;QACbf,IAAI,EAAEU,KAAK,CAACV,IAAI;QAChBgB,OAAO,EAAEtB,KAAK,CAACY,KAAK,KAAKI,KAAK,CAACJ,KAAK,GAAG,MAAM,GAAG,MAAM;QACtDW,OAAO,EAAEA,CAAA,KAAMA,OAAO,CAAClB,CAAC;MAC1B,CAAU;MAEV,SAASkB,OAAOA,CAAElB,CAAS,EAAE;QAC3B,IAAIL,KAAK,CAACY,KAAK,KAAKP,CAAC,EAAE;UACrBR,IAAI,CAAC,mBAAmB,EAAEG,KAAK,CAACY,KAAK,CAAC;UACtC;QACF;QACAZ,KAAK,CAACY,KAAK,GAAGP,CAAC;MACjB;MAEA,OAAOP,KAAK,CAACkB,KAAK,GAAG;QACnBA,KAAK;QACLX,CAAC;QACDb,KAAK,EAAEyB;MACT,CAAC,CAAC,IAAAO,YAAA,CAAArD,IAAA,EAAAsD,WAAA;QAAA;MAAA,GAGOR,QAAQ,QAEhB;IACH,CAAC,CAAC,IAGP,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"VDatePickerMonths.js","names":["VBtn","useDate","useProxiedModel","computed","watchEffect","convertToUnit","createRange","genericComponent","propsFactory","useRender","makeVDatePickerMonthsProps","color","String","height","Number","min","max","modelValue","year","allowedMonths","Array","Function","VDatePickerMonths","name","props","emits","date","setup","_ref","emit","slots","adapter","model","months","startOfYear","setYear","map","i","text","format","isDisabled","isMonthAllowed","isAfter","startOfMonth","getNextMonth","value","getMonth","month","isArray","length","includes","_createElementVNode","btnProps","active","undefined","disabled","rounded","variant","onClick","_createVNode","_mergeProps"],"sources":["../../../src/components/VDatePicker/VDatePickerMonths.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerMonths.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, watchEffect } from 'vue'\nimport { convertToUnit, createRange, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VDatePickerMonthsSlots = {\n month: {\n month: {\n text: string\n value: number\n }\n i: number\n props: {\n onClick: () => void\n }\n }\n}\n\nexport const makeVDatePickerMonthsProps = propsFactory({\n color: String,\n height: [String, Number],\n min: null as any as PropType<unknown>,\n max: null as any as PropType<unknown>,\n modelValue: Number,\n year: Number,\n allowedMonths: [Array, Function] as PropType<number[] | ((date: number) => boolean)>,\n}, 'VDatePickerMonths')\n\nexport const VDatePickerMonths = genericComponent<VDatePickerMonthsSlots>()({\n name: 'VDatePickerMonths',\n\n props: makeVDatePickerMonthsProps(),\n\n emits: {\n 'update:modelValue': (date: any) => true,\n },\n\n setup (props, { emit, slots }) {\n const adapter = useDate()\n const model = useProxiedModel(props, 'modelValue')\n\n const months = computed(() => {\n let date = adapter.startOfYear(adapter.date())\n if (props.year) {\n date = adapter.setYear(date, props.year)\n }\n return createRange(12).map(i => {\n const text = adapter.format(date, 'monthShort')\n const isDisabled =\n !!(\n !isMonthAllowed(i) ||\n (props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date)) ||\n (props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))))\n )\n date = adapter.getNextMonth(date)\n\n return {\n isDisabled,\n text,\n value: i,\n }\n })\n })\n\n watchEffect(() => {\n model.value = model.value ?? adapter.getMonth(adapter.date())\n })\n\n function isMonthAllowed (month: number) {\n if (Array.isArray(props.allowedMonths) && props.allowedMonths.length) {\n return props.allowedMonths.includes(month)\n }\n\n if (typeof props.allowedMonths === 'function') {\n return props.allowedMonths(month)\n }\n\n return true\n }\n\n useRender(() => (\n <div\n class=\"v-date-picker-months\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <div class=\"v-date-picker-months__content\">\n { months.value.map((month, i) => {\n const btnProps = {\n active: model.value === i,\n color: model.value === i ? props.color : undefined,\n disabled: month.isDisabled,\n rounded: true,\n text: month.text,\n variant: model.value === month.value ? 'flat' : 'text',\n onClick: () => onClick(i),\n } as const\n\n function onClick (i: number) {\n if (model.value === i) {\n emit('update:modelValue', model.value)\n return\n }\n model.value = i\n }\n\n return slots.month?.({\n month,\n i,\n props: btnProps,\n }) ?? (\n <VBtn\n key=\"month\"\n { ...btnProps }\n />\n )\n })}\n </div>\n </div>\n ))\n\n return {}\n },\n})\n\nexport type VDatePickerMonths = InstanceType<typeof VDatePickerMonths>\n"],"mappings":"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","ignoreList":[]}
@@ -22,6 +22,7 @@ export declare const makeVDatePickerYearsProps: <Defaults extends {
22
22
  min?: unknown;
23
23
  max?: unknown;
24
24
  modelValue?: unknown;
25
+ allowedYears?: unknown;
25
26
  } = {}>(defaults?: Defaults | undefined) => {
26
27
  color: unknown extends Defaults["color"] ? StringConstructor : {
27
28
  type: PropType<unknown extends Defaults["color"] ? string : string | Defaults["color"]>;
@@ -43,6 +44,10 @@ export declare const makeVDatePickerYearsProps: <Defaults extends {
43
44
  type: PropType<unknown extends Defaults["modelValue"] ? number : number | Defaults["modelValue"]>;
44
45
  default: unknown extends Defaults["modelValue"] ? number : number | Defaults["modelValue"];
45
46
  };
47
+ allowedYears: unknown extends Defaults["allowedYears"] ? PropType<number[] | ((date: number) => boolean)> : {
48
+ type: PropType<unknown extends Defaults["allowedYears"] ? number[] | ((date: number) => boolean) : number[] | ((date: number) => boolean) | Defaults["allowedYears"]>;
49
+ default: unknown extends Defaults["allowedYears"] ? number[] | ((date: number) => boolean) : Defaults["allowedYears"] | NonNullable<number[] | ((date: number) => boolean)>;
50
+ };
46
51
  };
47
52
  export declare const VDatePickerYears: {
48
53
  new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{} & {
@@ -51,6 +56,7 @@ export declare const VDatePickerYears: {
51
56
  min?: unknown;
52
57
  color?: string | undefined;
53
58
  modelValue?: number | undefined;
59
+ allowedYears?: number[] | ((date: number) => boolean) | undefined;
54
60
  } & {
55
61
  $children?: {} | import("vue").VNodeChild | {
56
62
  year?: ((arg: {
@@ -135,6 +141,7 @@ export declare const VDatePickerYears: {
135
141
  min?: unknown;
136
142
  color?: string | undefined;
137
143
  modelValue?: number | undefined;
144
+ allowedYears?: number[] | ((date: number) => boolean) | undefined;
138
145
  } & {
139
146
  $children?: {} | import("vue").VNodeChild | {
140
147
  year?: ((arg: {
@@ -198,6 +205,7 @@ export declare const VDatePickerYears: {
198
205
  min?: unknown;
199
206
  color?: string | undefined;
200
207
  modelValue?: number | undefined;
208
+ allowedYears?: number[] | ((date: number) => boolean) | undefined;
201
209
  } & {
202
210
  $children?: {} | import("vue").VNodeChild | {
203
211
  year?: ((arg: {
@@ -275,11 +283,13 @@ export declare const VDatePickerYears: {
275
283
  min: PropType<unknown>;
276
284
  max: PropType<unknown>;
277
285
  modelValue: NumberConstructor;
286
+ allowedYears: PropType<number[] | ((date: number) => boolean)>;
278
287
  }, import("vue").ExtractPropTypes<{
279
288
  color: StringConstructor;
280
289
  height: (StringConstructor | NumberConstructor)[];
281
290
  min: PropType<unknown>;
282
291
  max: PropType<unknown>;
283
292
  modelValue: NumberConstructor;
293
+ allowedYears: PropType<number[] | ((date: number) => boolean)>;
284
294
  }>>;
285
295
  export type VDatePickerYears = InstanceType<typeof VDatePickerYears>;
@@ -1,4 +1,4 @@
1
- import { mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle } from "vue";
1
+ import { mergeProps as _mergeProps, createVNode as _createVNode, createElementVNode as _createElementVNode } from "vue";
2
2
  // Styles
3
3
  import "./VDatePickerYears.css";
4
4
 
@@ -14,7 +14,8 @@ export const makeVDatePickerYearsProps = propsFactory({
14
14
  height: [String, Number],
15
15
  min: null,
16
16
  max: null,
17
- modelValue: Number
17
+ modelValue: Number,
18
+ allowedYears: [Array, Function]
18
19
  }, 'VDatePickerYears');
19
20
  export const VDatePickerYears = genericComponent()({
20
21
  name: 'VDatePickerYears',
@@ -46,7 +47,8 @@ export const VDatePickerYears = genericComponent()({
46
47
  date = adapter.setYear(date, adapter.getYear(date) + 1);
47
48
  return {
48
49
  text,
49
- value: i
50
+ value: i,
51
+ isDisabled: !isYearAllowed(i)
50
52
  };
51
53
  });
52
54
  });
@@ -60,11 +62,20 @@ export const VDatePickerYears = genericComponent()({
60
62
  block: 'center'
61
63
  });
62
64
  });
65
+ function isYearAllowed(year) {
66
+ if (Array.isArray(props.allowedYears) && props.allowedYears.length) {
67
+ return props.allowedYears.includes(year);
68
+ }
69
+ if (typeof props.allowedYears === 'function') {
70
+ return props.allowedYears(year);
71
+ }
72
+ return true;
73
+ }
63
74
  useRender(() => _createElementVNode("div", {
64
75
  "class": "v-date-picker-years",
65
- "style": _normalizeStyle({
76
+ "style": {
66
77
  height: convertToUnit(props.height)
67
- })
78
+ }
68
79
  }, [_createElementVNode("div", {
69
80
  "class": "v-date-picker-years__content"
70
81
  }, [years.value.map((year, i) => {
@@ -74,6 +85,7 @@ export const VDatePickerYears = genericComponent()({
74
85
  color: model.value === year.value ? props.color : undefined,
75
86
  rounded: true,
76
87
  text: year.text,
88
+ disabled: year.isDisabled,
77
89
  variant: model.value === year.value ? 'flat' : 'text',
78
90
  onClick: () => {
79
91
  if (model.value === year.value) {
@@ -1 +1 @@
1
- {"version":3,"file":"VDatePickerYears.js","names":["VBtn","useDate","useProxiedModel","computed","nextTick","onMounted","watchEffect","convertToUnit","createRange","genericComponent","propsFactory","templateRef","useRender","makeVDatePickerYearsProps","color","String","height","Number","min","max","modelValue","VDatePickerYears","name","props","emits","year","setup","_ref","emit","slots","adapter","model","years","getYear","date","startOfYear","setYear","map","i","text","format","value","yearRef","el","scrollIntoView","block","_createElementVNode","_normalizeStyle","btnProps","ref","undefined","active","rounded","variant","onClick","_createVNode","_mergeProps"],"sources":["../../../src/components/VDatePicker/VDatePickerYears.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerYears.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, onMounted, watchEffect } from 'vue'\nimport { convertToUnit, createRange, genericComponent, propsFactory, templateRef, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport type VDatePickerYearsSlots = {\n year: {\n year: {\n text: string\n value: number\n }\n i: number\n props: {\n active: boolean\n color?: string\n rounded: boolean\n text: string\n variant: 'flat' | 'text'\n onClick: () => void\n }\n }\n}\n\nexport const makeVDatePickerYearsProps = propsFactory({\n color: String,\n height: [String, Number],\n min: null as any as PropType<unknown>,\n max: null as any as PropType<unknown>,\n modelValue: Number,\n}, 'VDatePickerYears')\n\nexport const VDatePickerYears = genericComponent<VDatePickerYearsSlots>()({\n name: 'VDatePickerYears',\n\n props: makeVDatePickerYearsProps(),\n\n emits: {\n 'update:modelValue': (year: number) => true,\n },\n\n setup (props, { emit, slots }) {\n const adapter = useDate()\n const model = useProxiedModel(props, 'modelValue')\n const years = computed(() => {\n const year = adapter.getYear(adapter.date())\n\n let min = year - 100\n let max = year + 52\n\n if (props.min) {\n min = adapter.getYear(adapter.date(props.min))\n }\n\n if (props.max) {\n max = adapter.getYear(adapter.date(props.max))\n }\n\n let date = adapter.startOfYear(adapter.date())\n\n date = adapter.setYear(date, min)\n\n return createRange(max - min + 1, min).map(i => {\n const text = adapter.format(date, 'year')\n date = adapter.setYear(date, adapter.getYear(date) + 1)\n\n return {\n text,\n value: i,\n }\n })\n })\n\n watchEffect(() => {\n model.value = model.value ?? adapter.getYear(adapter.date())\n })\n\n const yearRef = templateRef()\n\n onMounted(async () => {\n await nextTick()\n yearRef.el?.scrollIntoView({ block: 'center' })\n })\n\n useRender(() => (\n <div\n class=\"v-date-picker-years\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <div class=\"v-date-picker-years__content\">\n { years.value.map((year, i) => {\n const btnProps = {\n ref: model.value === year.value ? yearRef : undefined,\n active: model.value === year.value,\n color: model.value === year.value ? props.color : undefined,\n rounded: true,\n text: year.text,\n variant: model.value === year.value ? 'flat' : 'text',\n onClick: () => {\n if (model.value === year.value) {\n emit('update:modelValue', model.value)\n return\n }\n model.value = year.value\n },\n } as const\n\n return slots.year?.({\n year,\n i,\n props: btnProps,\n }) ?? (\n <VBtn\n key=\"month\"\n { ...btnProps }\n />\n )\n })}\n </div>\n </div>\n ))\n\n return {}\n },\n})\n\nexport type VDatePickerYears = InstanceType<typeof VDatePickerYears>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,IAAI,4BAEb;AAAA,SACSC,OAAO;AAAA,SACPC,eAAe,6CAExB;AACA,SAASC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,WAAW,QAAQ,KAAK;AAAA,SACvDC,aAAa,EAAEC,WAAW,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,WAAW,EAAEC,SAAS,+BAE3F;AAGA;AAmBA,OAAO,MAAMC,yBAAyB,GAAGH,YAAY,CAAC;EACpDI,KAAK,EAAEC,MAAM;EACbC,MAAM,EAAE,CAACD,MAAM,EAAEE,MAAM,CAAC;EACxBC,GAAG,EAAE,IAAgC;EACrCC,GAAG,EAAE,IAAgC;EACrCC,UAAU,EAAEH;AACd,CAAC,EAAE,kBAAkB,CAAC;AAEtB,OAAO,MAAMI,gBAAgB,GAAGZ,gBAAgB,CAAwB,CAAC,CAAC;EACxEa,IAAI,EAAE,kBAAkB;EAExBC,KAAK,EAAEV,yBAAyB,CAAC,CAAC;EAElCW,KAAK,EAAE;IACL,mBAAmB,EAAGC,IAAY,IAAK;EACzC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAmB;IAAA,IAAjB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC3B,MAAMG,OAAO,GAAG7B,OAAO,CAAC,CAAC;IACzB,MAAM8B,KAAK,GAAG7B,eAAe,CAACqB,KAAK,EAAE,YAAY,CAAC;IAClD,MAAMS,KAAK,GAAG7B,QAAQ,CAAC,MAAM;MAC3B,MAAMsB,IAAI,GAAGK,OAAO,CAACG,OAAO,CAACH,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC;MAE5C,IAAIhB,GAAG,GAAGO,IAAI,GAAG,GAAG;MACpB,IAAIN,GAAG,GAAGM,IAAI,GAAG,EAAE;MAEnB,IAAIF,KAAK,CAACL,GAAG,EAAE;QACbA,GAAG,GAAGY,OAAO,CAACG,OAAO,CAACH,OAAO,CAACI,IAAI,CAACX,KAAK,CAACL,GAAG,CAAC,CAAC;MAChD;MAEA,IAAIK,KAAK,CAACJ,GAAG,EAAE;QACbA,GAAG,GAAGW,OAAO,CAACG,OAAO,CAACH,OAAO,CAACI,IAAI,CAACX,KAAK,CAACJ,GAAG,CAAC,CAAC;MAChD;MAEA,IAAIe,IAAI,GAAGJ,OAAO,CAACK,WAAW,CAACL,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC;MAE9CA,IAAI,GAAGJ,OAAO,CAACM,OAAO,CAACF,IAAI,EAAEhB,GAAG,CAAC;MAEjC,OAAOV,WAAW,CAACW,GAAG,GAAGD,GAAG,GAAG,CAAC,EAAEA,GAAG,CAAC,CAACmB,GAAG,CAACC,CAAC,IAAI;QAC9C,MAAMC,IAAI,GAAGT,OAAO,CAACU,MAAM,CAACN,IAAI,EAAE,MAAM,CAAC;QACzCA,IAAI,GAAGJ,OAAO,CAACM,OAAO,CAACF,IAAI,EAAEJ,OAAO,CAACG,OAAO,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEvD,OAAO;UACLK,IAAI;UACJE,KAAK,EAAEH;QACT,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFhC,WAAW,CAAC,MAAM;MAChByB,KAAK,CAACU,KAAK,GAAGV,KAAK,CAACU,KAAK,IAAIX,OAAO,CAACG,OAAO,CAACH,OAAO,CAACI,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEF,MAAMQ,OAAO,GAAG/B,WAAW,CAAC,CAAC;IAE7BN,SAAS,CAAC,YAAY;MACpB,MAAMD,QAAQ,CAAC,CAAC;MAChBsC,OAAO,CAACC,EAAE,EAAEC,cAAc,CAAC;QAAEC,KAAK,EAAE;MAAS,CAAC,CAAC;IACjD,CAAC,CAAC;IAEFjC,SAAS,CAAC,MAAAkC,mBAAA;MAAA;MAAA,SAAAC,eAAA,CAGC;QACL/B,MAAM,EAAET,aAAa,CAACgB,KAAK,CAACP,MAAM;MACpC,CAAC;IAAA,IAAA8B,mBAAA;MAAA;IAAA,IAGGd,KAAK,CAACS,KAAK,CAACJ,GAAG,CAAC,CAACZ,IAAI,EAAEa,CAAC,KAAK;MAC7B,MAAMU,QAAQ,GAAG;QACfC,GAAG,EAAElB,KAAK,CAACU,KAAK,KAAKhB,IAAI,CAACgB,KAAK,GAAGC,OAAO,GAAGQ,SAAS;QACrDC,MAAM,EAAEpB,KAAK,CAACU,KAAK,KAAKhB,IAAI,CAACgB,KAAK;QAClC3B,KAAK,EAAEiB,KAAK,CAACU,KAAK,KAAKhB,IAAI,CAACgB,KAAK,GAAGlB,KAAK,CAACT,KAAK,GAAGoC,SAAS;QAC3DE,OAAO,EAAE,IAAI;QACbb,IAAI,EAAEd,IAAI,CAACc,IAAI;QACfc,OAAO,EAAEtB,KAAK,CAACU,KAAK,KAAKhB,IAAI,CAACgB,KAAK,GAAG,MAAM,GAAG,MAAM;QACrDa,OAAO,EAAEA,CAAA,KAAM;UACb,IAAIvB,KAAK,CAACU,KAAK,KAAKhB,IAAI,CAACgB,KAAK,EAAE;YAC9Bb,IAAI,CAAC,mBAAmB,EAAEG,KAAK,CAACU,KAAK,CAAC;YACtC;UACF;UACAV,KAAK,CAACU,KAAK,GAAGhB,IAAI,CAACgB,KAAK;QAC1B;MACF,CAAU;MAEV,OAAOZ,KAAK,CAACJ,IAAI,GAAG;QAClBA,IAAI;QACJa,CAAC;QACDf,KAAK,EAAEyB;MACT,CAAC,CAAC,IAAAO,YAAA,CAAAvD,IAAA,EAAAwD,WAAA;QAAA;MAAA,GAGOR,QAAQ,QAEhB;IACH,CAAC,CAAC,IAGP,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"VDatePickerYears.js","names":["VBtn","useDate","useProxiedModel","computed","nextTick","onMounted","watchEffect","convertToUnit","createRange","genericComponent","propsFactory","templateRef","useRender","makeVDatePickerYearsProps","color","String","height","Number","min","max","modelValue","allowedYears","Array","Function","VDatePickerYears","name","props","emits","year","setup","_ref","emit","slots","adapter","model","years","getYear","date","startOfYear","setYear","map","i","text","format","value","isDisabled","isYearAllowed","yearRef","el","scrollIntoView","block","isArray","length","includes","_createElementVNode","btnProps","ref","undefined","active","rounded","disabled","variant","onClick","_createVNode","_mergeProps"],"sources":["../../../src/components/VDatePicker/VDatePickerYears.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerYears.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, onMounted, watchEffect } from 'vue'\nimport { convertToUnit, createRange, genericComponent, propsFactory, templateRef, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport type VDatePickerYearsSlots = {\n year: {\n year: {\n text: string\n value: number\n }\n i: number\n props: {\n active: boolean\n color?: string\n rounded: boolean\n text: string\n variant: 'flat' | 'text'\n onClick: () => void\n }\n }\n}\n\nexport const makeVDatePickerYearsProps = propsFactory({\n color: String,\n height: [String, Number],\n min: null as any as PropType<unknown>,\n max: null as any as PropType<unknown>,\n modelValue: Number,\n allowedYears: [Array, Function] as PropType<number[] | ((date: number) => boolean)>,\n}, 'VDatePickerYears')\n\nexport const VDatePickerYears = genericComponent<VDatePickerYearsSlots>()({\n name: 'VDatePickerYears',\n\n props: makeVDatePickerYearsProps(),\n\n emits: {\n 'update:modelValue': (year: number) => true,\n },\n\n setup (props, { emit, slots }) {\n const adapter = useDate()\n const model = useProxiedModel(props, 'modelValue')\n const years = computed(() => {\n const year = adapter.getYear(adapter.date())\n\n let min = year - 100\n let max = year + 52\n\n if (props.min) {\n min = adapter.getYear(adapter.date(props.min))\n }\n\n if (props.max) {\n max = adapter.getYear(adapter.date(props.max))\n }\n\n let date = adapter.startOfYear(adapter.date())\n\n date = adapter.setYear(date, min)\n\n return createRange(max - min + 1, min).map(i => {\n const text = adapter.format(date, 'year')\n date = adapter.setYear(date, adapter.getYear(date) + 1)\n\n return {\n text,\n value: i,\n isDisabled: !isYearAllowed(i),\n }\n })\n })\n\n watchEffect(() => {\n model.value = model.value ?? adapter.getYear(adapter.date())\n })\n\n const yearRef = templateRef()\n\n onMounted(async () => {\n await nextTick()\n yearRef.el?.scrollIntoView({ block: 'center' })\n })\n\n function isYearAllowed (year: number) {\n if (Array.isArray(props.allowedYears) && props.allowedYears.length) {\n return props.allowedYears.includes(year)\n }\n\n if (typeof props.allowedYears === 'function') {\n return props.allowedYears(year)\n }\n\n return true\n }\n\n useRender(() => (\n <div\n class=\"v-date-picker-years\"\n style={{\n height: convertToUnit(props.height),\n }}\n >\n <div class=\"v-date-picker-years__content\">\n { years.value.map((year, i) => {\n const btnProps = {\n ref: model.value === year.value ? yearRef : undefined,\n active: model.value === year.value,\n color: model.value === year.value ? props.color : undefined,\n rounded: true,\n text: year.text,\n disabled: year.isDisabled,\n variant: model.value === year.value ? 'flat' : 'text',\n onClick: () => {\n if (model.value === year.value) {\n emit('update:modelValue', model.value)\n return\n }\n model.value = year.value\n },\n } as const\n\n return slots.year?.({\n year,\n i,\n props: btnProps,\n }) ?? (\n <VBtn\n key=\"month\"\n { ...btnProps }\n />\n )\n })}\n </div>\n </div>\n ))\n\n return {}\n },\n})\n\nexport type VDatePickerYears = InstanceType<typeof VDatePickerYears>\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { Fragment as _Fragment, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass } from "vue";
1
+ import { Fragment as _Fragment, createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from "vue";
2
2
  // Styles
3
3
  import "./VEmptyState.css";
4
4
 
@@ -116,9 +116,9 @@ export const VEmptyState = genericComponent()({
116
116
  }, [slots.title?.() ?? props.title]), hasText && _createElementVNode("div", {
117
117
  "key": "text",
118
118
  "class": "v-empty-state__text",
119
- "style": _normalizeStyle({
119
+ "style": {
120
120
  maxWidth: convertToUnit(props.textWidth)
121
- })
121
+ }
122
122
  }, [slots.text?.() ?? props.text]), slots.default && _createElementVNode("div", {
123
123
  "key": "content",
124
124
  "class": "v-empty-state__content"
@@ -1 +1 @@
1
- {"version":3,"file":"VEmptyState.js","names":["VBtn","VDefaultsProvider","VIcon","VImg","useBackgroundColor","makeComponentProps","makeDimensionProps","useDimension","useDisplay","IconValue","makeSizeProps","makeThemeProps","provideTheme","convertToUnit","genericComponent","propsFactory","useRender","makeVEmptyStateProps","actionText","String","bgColor","color","icon","image","justify","type","default","headline","title","text","textWidth","Number","href","to","size","undefined","VEmptyState","name","props","emits","e","setup","_ref","emit","slots","themeClasses","backgroundColorClasses","backgroundColorStyles","dimensionStyles","displayClasses","onClickAction","hasActions","actions","hasHeadline","hasTitle","hasText","hasMedia","media","_createElementVNode","_normalizeClass","value","class","_normalizeStyle","style","_Fragment","_createVNode","src","height","maxWidth","onClick"],"sources":["../../../src/components/VEmptyState/VEmptyState.tsx"],"sourcesContent":["// Styles\nimport './VEmptyState.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useDisplay } from '@/composables/display'\nimport { IconValue } from '@/composables/icons'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\n\nexport type VEmptyStateSlots = {\n actions: {\n props: {\n onClick: (e: Event) => void\n }\n }\n default: never\n headline: never\n title: never\n media: never\n text: never\n}\n\nexport const makeVEmptyStateProps = propsFactory({\n actionText: String,\n bgColor: String,\n color: String,\n icon: IconValue,\n image: String,\n justify: {\n type: String as PropType<'start' | 'center' | 'end'>,\n default: 'center',\n },\n headline: String,\n title: String,\n text: String,\n textWidth: {\n type: [Number, String],\n default: 500,\n },\n href: String,\n to: String,\n\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeSizeProps({ size: undefined }),\n ...makeThemeProps(),\n}, 'VEmptyState')\n\nexport const VEmptyState = genericComponent<VEmptyStateSlots>()({\n name: 'VEmptyState',\n\n props: makeVEmptyStateProps(),\n\n emits: {\n 'click:action': (e: Event) => true,\n },\n\n setup (props, { emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n const { dimensionStyles } = useDimension(props)\n const { displayClasses } = useDisplay()\n\n function onClickAction (e: Event) {\n emit('click:action', e)\n }\n\n useRender(() => {\n const hasActions = !!(slots.actions || props.actionText)\n const hasHeadline = !!(slots.headline || props.headline)\n const hasTitle = !!(slots.title || props.title)\n const hasText = !!(slots.text || props.text)\n const hasMedia = !!(slots.media || props.image || props.icon)\n const size = props.size || (props.image ? 200 : 96)\n\n return (\n <div\n class={[\n 'v-empty-state',\n {\n [`v-empty-state--${props.justify}`]: true,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n displayClasses.value,\n props.class,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n props.style,\n ]}\n >\n { hasMedia && (\n <div key=\"media\" class=\"v-empty-state__media\">\n { !slots.media ? (\n <>\n { props.image ? (\n <VImg\n key=\"image\"\n src={ props.image }\n height={ size }\n />\n ) : props.icon ? (\n <VIcon\n key=\"icon\"\n color={ props.color }\n size={ size }\n icon={ props.icon }\n />\n ) : undefined }\n </>\n ) : (\n <VDefaultsProvider\n key=\"media-defaults\"\n defaults={{\n VImg: {\n src: props.image,\n height: size,\n },\n VIcon: {\n size,\n icon: props.icon,\n },\n }}\n >\n { slots.media() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasHeadline && (\n <div key=\"headline\" class=\"v-empty-state__headline\">\n { slots.headline?.() ?? props.headline }\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-empty-state__title\">\n { slots.title?.() ?? props.title }\n </div>\n )}\n\n { hasText && (\n <div\n key=\"text\"\n class=\"v-empty-state__text\"\n style={{\n maxWidth: convertToUnit(props.textWidth),\n }}\n >\n { slots.text?.() ?? props.text }\n </div>\n )}\n\n { slots.default && (\n <div key=\"content\" class=\"v-empty-state__content\">\n { slots.default() }\n </div>\n )}\n\n { hasActions && (\n <div key=\"actions\" class=\"v-empty-state__actions\">\n <VDefaultsProvider\n defaults={{\n VBtn: {\n class: 'v-empty-state__action-btn',\n color: props.color ?? 'surface-variant',\n href: props.href,\n text: props.actionText,\n to: props.to,\n },\n }}\n >\n {\n slots.actions?.({ props: { onClick: onClickAction } }) ?? (\n <VBtn onClick={ onClickAction } />\n )\n }\n </VDefaultsProvider>\n </div>\n )}\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VEmptyState = InstanceType<typeof VEmptyState>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VEmptyState.js","names":["VBtn","VDefaultsProvider","VIcon","VImg","useBackgroundColor","makeComponentProps","makeDimensionProps","useDimension","useDisplay","IconValue","makeSizeProps","makeThemeProps","provideTheme","convertToUnit","genericComponent","propsFactory","useRender","makeVEmptyStateProps","actionText","String","bgColor","color","icon","image","justify","type","default","headline","title","text","textWidth","Number","href","to","size","undefined","VEmptyState","name","props","emits","e","setup","_ref","emit","slots","themeClasses","backgroundColorClasses","backgroundColorStyles","dimensionStyles","displayClasses","onClickAction","hasActions","actions","hasHeadline","hasTitle","hasText","hasMedia","media","_createElementVNode","_normalizeClass","value","class","_normalizeStyle","style","_Fragment","_createVNode","src","height","maxWidth","onClick"],"sources":["../../../src/components/VEmptyState/VEmptyState.tsx"],"sourcesContent":["// Styles\nimport './VEmptyState.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useDisplay } from '@/composables/display'\nimport { IconValue } from '@/composables/icons'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\n\nexport type VEmptyStateSlots = {\n actions: {\n props: {\n onClick: (e: Event) => void\n }\n }\n default: never\n headline: never\n title: never\n media: never\n text: never\n}\n\nexport const makeVEmptyStateProps = propsFactory({\n actionText: String,\n bgColor: String,\n color: String,\n icon: IconValue,\n image: String,\n justify: {\n type: String as PropType<'start' | 'center' | 'end'>,\n default: 'center',\n },\n headline: String,\n title: String,\n text: String,\n textWidth: {\n type: [Number, String],\n default: 500,\n },\n href: String,\n to: String,\n\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeSizeProps({ size: undefined }),\n ...makeThemeProps(),\n}, 'VEmptyState')\n\nexport const VEmptyState = genericComponent<VEmptyStateSlots>()({\n name: 'VEmptyState',\n\n props: makeVEmptyStateProps(),\n\n emits: {\n 'click:action': (e: Event) => true,\n },\n\n setup (props, { emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n const { dimensionStyles } = useDimension(props)\n const { displayClasses } = useDisplay()\n\n function onClickAction (e: Event) {\n emit('click:action', e)\n }\n\n useRender(() => {\n const hasActions = !!(slots.actions || props.actionText)\n const hasHeadline = !!(slots.headline || props.headline)\n const hasTitle = !!(slots.title || props.title)\n const hasText = !!(slots.text || props.text)\n const hasMedia = !!(slots.media || props.image || props.icon)\n const size = props.size || (props.image ? 200 : 96)\n\n return (\n <div\n class={[\n 'v-empty-state',\n {\n [`v-empty-state--${props.justify}`]: true,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n displayClasses.value,\n props.class,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n props.style,\n ]}\n >\n { hasMedia && (\n <div key=\"media\" class=\"v-empty-state__media\">\n { !slots.media ? (\n <>\n { props.image ? (\n <VImg\n key=\"image\"\n src={ props.image }\n height={ size }\n />\n ) : props.icon ? (\n <VIcon\n key=\"icon\"\n color={ props.color }\n size={ size }\n icon={ props.icon }\n />\n ) : undefined }\n </>\n ) : (\n <VDefaultsProvider\n key=\"media-defaults\"\n defaults={{\n VImg: {\n src: props.image,\n height: size,\n },\n VIcon: {\n size,\n icon: props.icon,\n },\n }}\n >\n { slots.media() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasHeadline && (\n <div key=\"headline\" class=\"v-empty-state__headline\">\n { slots.headline?.() ?? props.headline }\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-empty-state__title\">\n { slots.title?.() ?? props.title }\n </div>\n )}\n\n { hasText && (\n <div\n key=\"text\"\n class=\"v-empty-state__text\"\n style={{\n maxWidth: convertToUnit(props.textWidth),\n }}\n >\n { slots.text?.() ?? props.text }\n </div>\n )}\n\n { slots.default && (\n <div key=\"content\" class=\"v-empty-state__content\">\n { slots.default() }\n </div>\n )}\n\n { hasActions && (\n <div key=\"actions\" class=\"v-empty-state__actions\">\n <VDefaultsProvider\n defaults={{\n VBtn: {\n class: 'v-empty-state__action-btn',\n color: props.color ?? 'surface-variant',\n href: props.href,\n text: props.actionText,\n to: props.to,\n },\n }}\n >\n {\n slots.actions?.({ props: { onClick: onClickAction } }) ?? (\n <VBtn onClick={ onClickAction } />\n )\n }\n </VDefaultsProvider>\n </div>\n )}\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VEmptyState = InstanceType<typeof VEmptyState>\n"],"mappings":"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","ignoreList":[]}
@@ -8,6 +8,7 @@ import { VCounter } from "../VCounter/index.js";
8
8
  import { VField } from "../VField/index.js";
9
9
  import { makeVFieldProps } from "../VField/VField.js";
10
10
  import { makeVInputProps, VInput } from "../VInput/VInput.js"; // Composables
11
+ import { useFileDrop } from "../../composables/fileDrop.js";
11
12
  import { useFocus } from "../../composables/focus.js";
12
13
  import { forwardRefs } from "../../composables/forwardRefs.js";
13
14
  import { useLocale } from "../../composables/locale.js";
@@ -98,6 +99,10 @@ export const VFileInput = genericComponent()({
98
99
  const isActive = toRef(() => isFocused.value || props.active);
99
100
  const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));
100
101
  const isDragging = shallowRef(false);
102
+ const {
103
+ handleDrop,
104
+ hasFilesOrFolders
105
+ } = useFileDrop();
101
106
  function onFocus() {
102
107
  if (inputRef.value !== document.activeElement) {
103
108
  inputRef.value?.focus();
@@ -131,13 +136,13 @@ export const VFileInput = genericComponent()({
131
136
  e.preventDefault();
132
137
  isDragging.value = false;
133
138
  }
134
- function onDrop(e) {
139
+ async function onDrop(e) {
135
140
  e.preventDefault();
136
141
  e.stopImmediatePropagation();
137
142
  isDragging.value = false;
138
- if (!e.dataTransfer?.files?.length || !inputRef.value) return;
143
+ if (!inputRef.value || !hasFilesOrFolders(e)) return;
139
144
  const dataTransfer = new DataTransfer();
140
- for (const file of e.dataTransfer.files) {
145
+ for (const file of await handleDrop(e)) {
141
146
  dataTransfer.items.add(file);
142
147
  }
143
148
  inputRef.value.files = dataTransfer.files;