vuetify 3.3.4 → 3.3.6

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 (94) hide show
  1. package/dist/json/attributes.json +4 -12
  2. package/dist/json/importMap.json +20 -20
  3. package/dist/json/tags.json +0 -2
  4. package/dist/json/web-types.json +7 -27
  5. package/dist/vuetify-labs.css +49 -27
  6. package/dist/vuetify-labs.d.ts +36 -98
  7. package/dist/vuetify-labs.esm.js +85 -53
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +85 -53
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +66 -43
  12. package/dist/vuetify.d.ts +5 -5
  13. package/dist/vuetify.esm.js +43 -34
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +43 -34
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +21 -22
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAppBar/VAppBar.mjs +12 -9
  21. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.css +12 -4
  23. package/lib/components/VAutocomplete/VAutocomplete.sass +17 -9
  24. package/lib/components/VAutocomplete/_variables.scss +1 -0
  25. package/lib/components/VBreadcrumbs/VBreadcrumbs.css +4 -0
  26. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +1 -1
  27. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  28. package/lib/components/VBreadcrumbs/VBreadcrumbs.sass +4 -0
  29. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +8 -7
  30. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  31. package/lib/components/VBtn/VBtn.css +1 -1
  32. package/lib/components/VBtn/VBtn.sass +1 -1
  33. package/lib/components/VCombobox/VCombobox.css +12 -4
  34. package/lib/components/VCombobox/VCombobox.sass +17 -9
  35. package/lib/components/VCombobox/_variables.scss +1 -0
  36. package/lib/components/VFooter/VFooter.mjs +4 -2
  37. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  38. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  39. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  40. package/lib/components/VOverlay/VOverlay.mjs +1 -1
  41. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  42. package/lib/components/VSelect/VSelect.css +4 -3
  43. package/lib/components/VSelect/VSelect.sass +10 -12
  44. package/lib/components/VSlider/VSliderThumb.mjs +6 -2
  45. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  46. package/lib/components/VTextField/VTextField.css +2 -0
  47. package/lib/components/VTextField/VTextField.mjs +2 -4
  48. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  49. package/lib/components/VTextField/VTextField.sass +3 -1
  50. package/lib/composables/validation.mjs +2 -2
  51. package/lib/composables/validation.mjs.map +1 -1
  52. package/lib/composables/virtual.mjs +7 -5
  53. package/lib/composables/virtual.mjs.map +1 -1
  54. package/lib/entry-bundler.mjs +1 -1
  55. package/lib/framework.mjs +1 -1
  56. package/lib/iconsets/fa.mjs +2 -2
  57. package/lib/iconsets/fa.mjs.map +1 -1
  58. package/lib/iconsets/fa4.mjs +2 -2
  59. package/lib/iconsets/fa4.mjs.map +1 -1
  60. package/lib/index.d.mts +5 -5
  61. package/lib/labs/VDataTable/composables/sort.mjs +4 -1
  62. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  63. package/lib/labs/VDatePicker/VDatePicker.css +3 -5
  64. package/lib/labs/VDatePicker/VDatePicker.mjs +12 -10
  65. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  66. package/lib/labs/VDatePicker/VDatePicker.sass +3 -5
  67. package/lib/labs/VDatePicker/VDatePickerControls.css +3 -1
  68. package/lib/labs/VDatePicker/VDatePickerControls.mjs +1 -1
  69. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
  70. package/lib/labs/VDatePicker/VDatePickerControls.sass +3 -3
  71. package/lib/labs/VDatePicker/VDatePickerMonth.css +0 -1
  72. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +0 -5
  73. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  74. package/lib/labs/VDatePicker/VDatePickerMonth.sass +0 -1
  75. package/lib/labs/VDatePicker/VDatePickerTitle.sass +1 -1
  76. package/lib/labs/VDatePicker/VDatePickerYears.css +1 -1
  77. package/lib/labs/VDatePicker/VDatePickerYears.sass +1 -1
  78. package/lib/labs/VDatePicker/_variables.scss +0 -5
  79. package/lib/labs/VDatePicker/index.d.mts +36 -98
  80. package/lib/labs/VDateRangePicker/index.d.mts +34 -44
  81. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +24 -4
  82. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
  83. package/lib/labs/VPicker/VPicker.css +1 -1
  84. package/lib/labs/VPicker/VPicker.sass +1 -1
  85. package/lib/labs/VPicker/_variables.scss +2 -2
  86. package/lib/labs/components.d.mts +36 -98
  87. package/lib/util/helpers.mjs +3 -0
  88. package/lib/util/helpers.mjs.map +1 -1
  89. package/lib/util/injectSelf.mjs +1 -0
  90. package/lib/util/injectSelf.mjs.map +1 -1
  91. package/package.json +2 -2
  92. package/lib/labs/VDatePicker/VDatePickerTable.sass +0 -84
  93. package/lib/labs/VDatePicker/mixins/date-picker-table.mjs +0 -210
  94. package/lib/labs/VDatePicker/mixins/date-picker-table.mjs.map +0 -1
@@ -57,12 +57,14 @@ export function useVirtual(props, items, offset) {
57
57
  const direction = scrollTop < lastScrollTop ? UP : DOWN;
58
58
  const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
59
59
  const buffer = Math.round(visibleItems.value / 3);
60
- if (direction === UP && midPointIndex <= first.value + buffer * 2 - 1) {
61
- first.value = clamp(midPointIndex - buffer, 0, items.value.length);
62
- } else if (direction === DOWN && midPointIndex >= first.value + buffer * 2 - 1) {
63
- first.value = clamp(midPointIndex - buffer, 0, items.value.length - visibleItems.value);
60
+ const firstIndex = midPointIndex - buffer;
61
+ const lastIndex = first.value + buffer * 2 - 1;
62
+ if (direction === UP && midPointIndex <= lastIndex) {
63
+ first.value = clamp(firstIndex, 0, items.value.length);
64
+ } else if (direction === DOWN && midPointIndex >= lastIndex) {
65
+ first.value = clamp(firstIndex, 0, items.value.length - visibleItems.value);
64
66
  }
65
- lastScrollTop = containerRef.value.scrollTop;
67
+ lastScrollTop = scrollTop;
66
68
  }
67
69
  function scrollToIndex(index) {
68
70
  if (!containerRef.value) return;
@@ -1 +1 @@
1
- {"version":3,"file":"virtual.mjs","names":["useDisplay","useResizeObserver","computed","onMounted","ref","shallowRef","watch","watchEffect","clamp","createRange","propsFactory","UP","DOWN","makeVirtualProps","itemHeight","Number","String","useVirtual","props","items","offset","first","baseItemHeight","get","parseInt","value","set","val","containerRef","resizeRef","contentRect","display","sizeMap","Map","sizes","length","map","visibleItems","height","Math","max","ceil","handleItemResize","index","calculateOffset","slice","reduce","curr","calculateMidPointIndex","scrollTop","end","middle","middleOffset","lastScrollTop","handleScroll","direction","midPointIndex","buffer","round","scrollToIndex","allItems","item","raw","last","min","computedItems","paddingTop","paddingBottom","forEach","indexOf","delete"],"sources":["../../src/composables/virtual.ts"],"sourcesContent":["// Composables\nimport { useDisplay } from '@/composables/display'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, onMounted, ref, shallowRef, watch, watchEffect } from 'vue'\nimport {\n clamp,\n createRange,\n propsFactory,\n} from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nconst UP = -1\nconst DOWN = 1\n\ntype VirtualProps = {\n itemHeight?: number | string\n}\n\nexport const makeVirtualProps = propsFactory({\n itemHeight: [Number, String],\n}, 'virtual')\n\nexport function useVirtual <T> (props: VirtualProps, items: Ref<readonly T[]>, offset?: Ref<number>) {\n const first = shallowRef(0)\n const baseItemHeight = shallowRef(props.itemHeight)\n const itemHeight = computed({\n get: () => parseInt(baseItemHeight.value ?? 0, 10),\n set (val) {\n baseItemHeight.value = val\n },\n })\n const containerRef = ref<HTMLDivElement>()\n const { resizeRef, contentRect } = useResizeObserver()\n watchEffect(() => {\n resizeRef.value = containerRef.value\n })\n const display = useDisplay()\n\n const sizeMap = new Map<any, number>()\n let sizes = createRange(items.value.length).map(() => itemHeight.value)\n const visibleItems = computed(() => {\n const height = (contentRect.value?.height ?? display.height.value) - (offset?.value ?? 0)\n return itemHeight.value\n ? Math.max(12,\n Math.ceil((height / itemHeight.value) * 1.7 + 1)\n )\n : 12\n })\n\n function handleItemResize (index: number, height: number) {\n itemHeight.value = Math.max(itemHeight.value, height)\n sizes[index] = height\n sizeMap.set(items.value[index], height)\n }\n\n function calculateOffset (index: number) {\n return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0)\n }\n\n function calculateMidPointIndex (scrollTop: number) {\n const end = items.value.length\n\n let middle = 0\n let middleOffset = 0\n while (middleOffset < scrollTop && middle < end) {\n middleOffset += sizes[middle++] || itemHeight.value\n }\n\n return middle - 1\n }\n\n let lastScrollTop = 0\n function handleScroll () {\n if (!containerRef.value || !contentRect.value) return\n\n const height = contentRect.value.height - 56\n const scrollTop = containerRef.value.scrollTop\n const direction = scrollTop < lastScrollTop ? UP : DOWN\n\n const midPointIndex = calculateMidPointIndex(scrollTop + height / 2)\n const buffer = Math.round(visibleItems.value / 3)\n if (direction === UP && midPointIndex <= first.value + (buffer * 2) - 1) {\n first.value = clamp(midPointIndex - buffer, 0, items.value.length)\n } else if (direction === DOWN && midPointIndex >= first.value + (buffer * 2) - 1) {\n first.value = clamp(midPointIndex - buffer, 0, items.value.length - visibleItems.value)\n }\n\n lastScrollTop = containerRef.value.scrollTop\n }\n\n function scrollToIndex (index: number) {\n if (!containerRef.value) return\n\n const offset = calculateOffset(index)\n containerRef.value.scrollTop = offset\n }\n\n const allItems = computed(() => items.value.map((item, index) => ({\n raw: item,\n index,\n })))\n const last = computed(() => Math.min(items.value.length, first.value + visibleItems.value))\n const computedItems = computed(() => allItems.value.slice(first.value, last.value))\n const paddingTop = computed(() => calculateOffset(first.value))\n const paddingBottom = computed(() => calculateOffset(items.value.length) - calculateOffset(last.value))\n\n onMounted(() => {\n if (!itemHeight.value) {\n // If itemHeight prop is not set, then calculate an estimated height from the average of inital items\n itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / (visibleItems.value)\n }\n })\n\n watch(() => items.value.length, () => {\n sizes = createRange(items.value.length).map(() => itemHeight.value)\n sizeMap.forEach((height, item) => {\n const index = items.value.indexOf(item)\n if (index === -1) {\n sizeMap.delete(item)\n } else {\n sizes[index] = height\n }\n })\n })\n\n return {\n containerRef,\n computedItems,\n itemHeight,\n paddingTop,\n paddingBottom,\n scrollToIndex,\n handleScroll,\n handleItemResize,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"virtual.mjs","names":["useDisplay","useResizeObserver","computed","onMounted","ref","shallowRef","watch","watchEffect","clamp","createRange","propsFactory","UP","DOWN","makeVirtualProps","itemHeight","Number","String","useVirtual","props","items","offset","first","baseItemHeight","get","parseInt","value","set","val","containerRef","resizeRef","contentRect","display","sizeMap","Map","sizes","length","map","visibleItems","height","Math","max","ceil","handleItemResize","index","calculateOffset","slice","reduce","curr","calculateMidPointIndex","scrollTop","end","middle","middleOffset","lastScrollTop","handleScroll","direction","midPointIndex","buffer","round","firstIndex","lastIndex","scrollToIndex","allItems","item","raw","last","min","computedItems","paddingTop","paddingBottom","forEach","indexOf","delete"],"sources":["../../src/composables/virtual.ts"],"sourcesContent":["// Composables\nimport { useDisplay } from '@/composables/display'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, onMounted, ref, shallowRef, watch, watchEffect } from 'vue'\nimport {\n clamp,\n createRange,\n propsFactory,\n} from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nconst UP = -1\nconst DOWN = 1\n\ntype VirtualProps = {\n itemHeight?: number | string\n}\n\nexport const makeVirtualProps = propsFactory({\n itemHeight: [Number, String],\n}, 'virtual')\n\nexport function useVirtual <T> (props: VirtualProps, items: Ref<readonly T[]>, offset?: Ref<number>) {\n const first = shallowRef(0)\n const baseItemHeight = shallowRef(props.itemHeight)\n const itemHeight = computed({\n get: () => parseInt(baseItemHeight.value ?? 0, 10),\n set (val) {\n baseItemHeight.value = val\n },\n })\n const containerRef = ref<HTMLDivElement>()\n const { resizeRef, contentRect } = useResizeObserver()\n watchEffect(() => {\n resizeRef.value = containerRef.value\n })\n const display = useDisplay()\n\n const sizeMap = new Map<any, number>()\n let sizes = createRange(items.value.length).map(() => itemHeight.value)\n const visibleItems = computed(() => {\n const height = (contentRect.value?.height ?? display.height.value) - (offset?.value ?? 0)\n return itemHeight.value\n ? Math.max(12,\n Math.ceil((height / itemHeight.value) * 1.7 + 1)\n )\n : 12\n })\n\n function handleItemResize (index: number, height: number) {\n itemHeight.value = Math.max(itemHeight.value, height)\n sizes[index] = height\n sizeMap.set(items.value[index], height)\n }\n\n function calculateOffset (index: number) {\n return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0)\n }\n\n function calculateMidPointIndex (scrollTop: number) {\n const end = items.value.length\n\n let middle = 0\n let middleOffset = 0\n while (middleOffset < scrollTop && middle < end) {\n middleOffset += sizes[middle++] || itemHeight.value\n }\n\n return middle - 1\n }\n\n let lastScrollTop = 0\n function handleScroll () {\n if (!containerRef.value || !contentRect.value) return\n\n const height = contentRect.value.height - 56\n const scrollTop = containerRef.value.scrollTop\n const direction = scrollTop < lastScrollTop ? UP : DOWN\n\n const midPointIndex = calculateMidPointIndex(scrollTop + height / 2)\n const buffer = Math.round(visibleItems.value / 3)\n const firstIndex = midPointIndex - buffer\n const lastIndex = first.value + (buffer * 2) - 1\n if (direction === UP && midPointIndex <= lastIndex) {\n first.value = clamp(firstIndex, 0, items.value.length)\n } else if (direction === DOWN && midPointIndex >= lastIndex) {\n first.value = clamp(firstIndex, 0, items.value.length - visibleItems.value)\n }\n\n lastScrollTop = scrollTop\n }\n\n function scrollToIndex (index: number) {\n if (!containerRef.value) return\n\n const offset = calculateOffset(index)\n containerRef.value.scrollTop = offset\n }\n\n const allItems = computed(() => items.value.map((item, index) => ({\n raw: item,\n index,\n })))\n const last = computed(() => Math.min(items.value.length, first.value + visibleItems.value))\n const computedItems = computed(() => allItems.value.slice(first.value, last.value))\n const paddingTop = computed(() => calculateOffset(first.value))\n const paddingBottom = computed(() => calculateOffset(items.value.length) - calculateOffset(last.value))\n\n onMounted(() => {\n if (!itemHeight.value) {\n // If itemHeight prop is not set, then calculate an estimated height from the average of inital items\n itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / (visibleItems.value)\n }\n })\n\n watch(() => items.value.length, () => {\n sizes = createRange(items.value.length).map(() => itemHeight.value)\n sizeMap.forEach((height, item) => {\n const index = items.value.indexOf(item)\n if (index === -1) {\n sizeMap.delete(item)\n } else {\n sizes[index] = height\n }\n })\n })\n\n return {\n containerRef,\n computedItems,\n itemHeight,\n paddingTop,\n paddingBottom,\n scrollToIndex,\n handleScroll,\n handleItemResize,\n }\n}\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ export const createVuetify = function () {
15
15
  ...options
16
16
  });
17
17
  };
18
- export const version = "3.3.4";
18
+ export const version = "3.3.6";
19
19
  createVuetify.version = version;
20
20
  export { components, directives };
21
21
  export * from "./composables/index.mjs";
package/lib/framework.mjs CHANGED
@@ -92,7 +92,7 @@ export function createVuetify() {
92
92
  date
93
93
  };
94
94
  }
95
- export const version = "3.3.4";
95
+ export const version = "3.3.6";
96
96
  createVuetify.version = version;
97
97
 
98
98
  // Vue's inject() can only be used in setup
@@ -21,8 +21,8 @@ const aliases = {
21
21
  checkboxIndeterminate: 'fas fa-minus-square',
22
22
  delimiter: 'fas fa-circle',
23
23
  // for carousel
24
- sortAsc: 'fas fa-sort-up',
25
- sortDesc: 'fas fa-sort-down',
24
+ sortAsc: 'fas fa-arrow-up',
25
+ sortDesc: 'fas fa-arrow-down',
26
26
  expand: 'fas fa-chevron-down',
27
27
  menu: 'fas fa-bars',
28
28
  subgroup: 'fas fa-caret-down',
@@ -1 +1 @@
1
- {"version":3,"file":"fa.mjs","names":["VClassIcon","aliases","collapse","complete","cancel","close","delete","clear","success","info","warning","error","prev","next","checkboxOn","checkboxOff","checkboxIndeterminate","delimiter","sortAsc","sortDesc","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","loading","first","last","unfold","file","plus","minus","calendar","fa","component"],"sources":["../../src/iconsets/fa.ts"],"sourcesContent":["// Composables\nimport { VClassIcon } from '@/composables/icons'\n\n// Types\nimport type { IconAliases, IconSet } from '@/composables/icons'\n\nconst aliases: IconAliases = {\n collapse: 'fas fa-chevron-up',\n complete: 'fas fa-check',\n cancel: 'fas fa-times-circle',\n close: 'fas fa-times',\n delete: 'fas fa-times-circle', // delete (e.g. v-chip close)\n clear: 'fas fa-times-circle', // delete (e.g. v-chip close)\n success: 'fas fa-check-circle',\n info: 'fas fa-info-circle',\n warning: 'fas fa-exclamation',\n error: 'fas fa-exclamation-triangle',\n prev: 'fas fa-chevron-left',\n next: 'fas fa-chevron-right',\n checkboxOn: 'fas fa-check-square',\n checkboxOff: 'far fa-square', // note 'far'\n checkboxIndeterminate: 'fas fa-minus-square',\n delimiter: 'fas fa-circle', // for carousel\n sortAsc: 'fas fa-sort-up',\n sortDesc: 'fas fa-sort-down',\n expand: 'fas fa-chevron-down',\n menu: 'fas fa-bars',\n subgroup: 'fas fa-caret-down',\n dropdown: 'fas fa-caret-down',\n radioOn: 'far fa-dot-circle',\n radioOff: 'far fa-circle',\n edit: 'fas fa-edit',\n ratingEmpty: 'far fa-star',\n ratingFull: 'fas fa-star',\n ratingHalf: 'fas fa-star-half',\n loading: 'fas fa-sync',\n first: 'fas fa-step-backward',\n last: 'fas fa-step-forward',\n unfold: 'fas fa-arrows-alt-v',\n file: 'fas fa-paperclip',\n plus: 'fas fa-plus',\n minus: 'fas fa-minus',\n calendar: 'fas fa-calendar',\n}\n\nconst fa: IconSet = {\n component: VClassIcon,\n}\n\nexport { aliases, fa }\n"],"mappings":"AAAA;AAAA,SACSA,UAAU,oCAEnB;AAGA,MAAMC,OAAoB,GAAG;EAC3BC,QAAQ,EAAE,mBAAmB;EAC7BC,QAAQ,EAAE,cAAc;EACxBC,MAAM,EAAE,qBAAqB;EAC7BC,KAAK,EAAE,cAAc;EACrBC,MAAM,EAAE,qBAAqB;EAAE;EAC/BC,KAAK,EAAE,qBAAqB;EAAE;EAC9BC,OAAO,EAAE,qBAAqB;EAC9BC,IAAI,EAAE,oBAAoB;EAC1BC,OAAO,EAAE,oBAAoB;EAC7BC,KAAK,EAAE,6BAA6B;EACpCC,IAAI,EAAE,qBAAqB;EAC3BC,IAAI,EAAE,sBAAsB;EAC5BC,UAAU,EAAE,qBAAqB;EACjCC,WAAW,EAAE,eAAe;EAAE;EAC9BC,qBAAqB,EAAE,qBAAqB;EAC5CC,SAAS,EAAE,eAAe;EAAE;EAC5BC,OAAO,EAAE,gBAAgB;EACzBC,QAAQ,EAAE,kBAAkB;EAC5BC,MAAM,EAAE,qBAAqB;EAC7BC,IAAI,EAAE,aAAa;EACnBC,QAAQ,EAAE,mBAAmB;EAC7BC,QAAQ,EAAE,mBAAmB;EAC7BC,OAAO,EAAE,mBAAmB;EAC5BC,QAAQ,EAAE,eAAe;EACzBC,IAAI,EAAE,aAAa;EACnBC,WAAW,EAAE,aAAa;EAC1BC,UAAU,EAAE,aAAa;EACzBC,UAAU,EAAE,kBAAkB;EAC9BC,OAAO,EAAE,aAAa;EACtBC,KAAK,EAAE,sBAAsB;EAC7BC,IAAI,EAAE,qBAAqB;EAC3BC,MAAM,EAAE,qBAAqB;EAC7BC,IAAI,EAAE,kBAAkB;EACxBC,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,cAAc;EACrBC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,EAAW,GAAG;EAClBC,SAAS,EAAEvC;AACb,CAAC;AAED,SAASC,OAAO,EAAEqC,EAAE"}
1
+ {"version":3,"file":"fa.mjs","names":["VClassIcon","aliases","collapse","complete","cancel","close","delete","clear","success","info","warning","error","prev","next","checkboxOn","checkboxOff","checkboxIndeterminate","delimiter","sortAsc","sortDesc","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","loading","first","last","unfold","file","plus","minus","calendar","fa","component"],"sources":["../../src/iconsets/fa.ts"],"sourcesContent":["// Composables\nimport { VClassIcon } from '@/composables/icons'\n\n// Types\nimport type { IconAliases, IconSet } from '@/composables/icons'\n\nconst aliases: IconAliases = {\n collapse: 'fas fa-chevron-up',\n complete: 'fas fa-check',\n cancel: 'fas fa-times-circle',\n close: 'fas fa-times',\n delete: 'fas fa-times-circle', // delete (e.g. v-chip close)\n clear: 'fas fa-times-circle', // delete (e.g. v-chip close)\n success: 'fas fa-check-circle',\n info: 'fas fa-info-circle',\n warning: 'fas fa-exclamation',\n error: 'fas fa-exclamation-triangle',\n prev: 'fas fa-chevron-left',\n next: 'fas fa-chevron-right',\n checkboxOn: 'fas fa-check-square',\n checkboxOff: 'far fa-square', // note 'far'\n checkboxIndeterminate: 'fas fa-minus-square',\n delimiter: 'fas fa-circle', // for carousel\n sortAsc: 'fas fa-arrow-up',\n sortDesc: 'fas fa-arrow-down',\n expand: 'fas fa-chevron-down',\n menu: 'fas fa-bars',\n subgroup: 'fas fa-caret-down',\n dropdown: 'fas fa-caret-down',\n radioOn: 'far fa-dot-circle',\n radioOff: 'far fa-circle',\n edit: 'fas fa-edit',\n ratingEmpty: 'far fa-star',\n ratingFull: 'fas fa-star',\n ratingHalf: 'fas fa-star-half',\n loading: 'fas fa-sync',\n first: 'fas fa-step-backward',\n last: 'fas fa-step-forward',\n unfold: 'fas fa-arrows-alt-v',\n file: 'fas fa-paperclip',\n plus: 'fas fa-plus',\n minus: 'fas fa-minus',\n calendar: 'fas fa-calendar',\n}\n\nconst fa: IconSet = {\n component: VClassIcon,\n}\n\nexport { aliases, fa }\n"],"mappings":"AAAA;AAAA,SACSA,UAAU,oCAEnB;AAGA,MAAMC,OAAoB,GAAG;EAC3BC,QAAQ,EAAE,mBAAmB;EAC7BC,QAAQ,EAAE,cAAc;EACxBC,MAAM,EAAE,qBAAqB;EAC7BC,KAAK,EAAE,cAAc;EACrBC,MAAM,EAAE,qBAAqB;EAAE;EAC/BC,KAAK,EAAE,qBAAqB;EAAE;EAC9BC,OAAO,EAAE,qBAAqB;EAC9BC,IAAI,EAAE,oBAAoB;EAC1BC,OAAO,EAAE,oBAAoB;EAC7BC,KAAK,EAAE,6BAA6B;EACpCC,IAAI,EAAE,qBAAqB;EAC3BC,IAAI,EAAE,sBAAsB;EAC5BC,UAAU,EAAE,qBAAqB;EACjCC,WAAW,EAAE,eAAe;EAAE;EAC9BC,qBAAqB,EAAE,qBAAqB;EAC5CC,SAAS,EAAE,eAAe;EAAE;EAC5BC,OAAO,EAAE,iBAAiB;EAC1BC,QAAQ,EAAE,mBAAmB;EAC7BC,MAAM,EAAE,qBAAqB;EAC7BC,IAAI,EAAE,aAAa;EACnBC,QAAQ,EAAE,mBAAmB;EAC7BC,QAAQ,EAAE,mBAAmB;EAC7BC,OAAO,EAAE,mBAAmB;EAC5BC,QAAQ,EAAE,eAAe;EACzBC,IAAI,EAAE,aAAa;EACnBC,WAAW,EAAE,aAAa;EAC1BC,UAAU,EAAE,aAAa;EACzBC,UAAU,EAAE,kBAAkB;EAC9BC,OAAO,EAAE,aAAa;EACtBC,KAAK,EAAE,sBAAsB;EAC7BC,IAAI,EAAE,qBAAqB;EAC3BC,MAAM,EAAE,qBAAqB;EAC7BC,IAAI,EAAE,kBAAkB;EACxBC,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,cAAc;EACrBC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,EAAW,GAAG;EAClBC,SAAS,EAAEvC;AACb,CAAC;AAED,SAASC,OAAO,EAAEqC,EAAE"}
@@ -24,8 +24,8 @@ const aliases = {
24
24
  checkboxIndeterminate: 'fa-minus-square',
25
25
  delimiter: 'fa-circle',
26
26
  // for carousel
27
- sortAsc: 'fa-sort-up',
28
- sortDesc: 'fa-sort-down',
27
+ sortAsc: 'fa-arrow-up',
28
+ sortDesc: 'fa-arrow-down',
29
29
  expand: 'fa-chevron-down',
30
30
  menu: 'fa-bars',
31
31
  subgroup: 'fa-caret-down',
@@ -1 +1 @@
1
- {"version":3,"file":"fa4.mjs","names":["VClassIcon","h","aliases","collapse","complete","cancel","close","delete","clear","success","info","warning","error","prev","next","checkboxOn","checkboxOff","checkboxIndeterminate","delimiter","sortAsc","sortDesc","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","loading","first","last","unfold","file","plus","minus","calendar","fa","component","props","class"],"sources":["../../src/iconsets/fa4.ts"],"sourcesContent":["// Composables\nimport { VClassIcon } from '@/composables/icons'\n\n// Utilities\nimport { h } from 'vue'\n\n// Types\nimport type { IconAliases, IconSet } from '@/composables/icons'\n\nconst aliases: IconAliases = {\n collapse: 'fa-chevron-up',\n complete: 'fa-check',\n cancel: 'fa-times-circle',\n close: 'fa-times',\n delete: 'fa-times-circle', // delete (e.g. v-chip close)\n clear: 'fa-check-circle', // delete (e.g. v-chip close)\n success: 'fa-check-circle',\n info: 'fa-info-circle',\n warning: 'fa-exclamation',\n error: 'fa-exclamation-triangle',\n prev: 'fa-chevron-left',\n next: 'fa-chevron-right',\n checkboxOn: 'fa-check-square',\n checkboxOff: 'fa-square-o',\n checkboxIndeterminate: 'fa-minus-square',\n delimiter: 'fa-circle', // for carousel\n sortAsc: 'fa-sort-up',\n sortDesc: 'fa-sort-down',\n expand: 'fa-chevron-down',\n menu: 'fa-bars',\n subgroup: 'fa-caret-down',\n dropdown: 'fa-caret-down',\n radioOn: 'fa-dot-circle-o',\n radioOff: 'fa-circle-o',\n edit: 'fa-pencil',\n ratingEmpty: 'fa-star-o',\n ratingFull: 'fa-star',\n ratingHalf: 'fa-star-half-o',\n loading: 'fa-refresh',\n first: 'fa-step-backward',\n last: 'fa-step-forward',\n unfold: 'fa-angle-double-down',\n file: 'fa-paperclip',\n plus: 'fa-plus',\n minus: 'fa-minus',\n calendar: 'fa-calendar',\n}\n\nconst fa: IconSet = {\n // Not using mergeProps here, functional components merge props by default (?)\n component: props => h(VClassIcon, { ...props, class: 'fa' }),\n}\n\nexport { aliases, fa }\n"],"mappings":"AAAA;AAAA,SACSA,UAAU,oCAEnB;AACA,SAASC,CAAC,QAAQ,KAAK;;AAEvB;;AAGA,MAAMC,OAAoB,GAAG;EAC3BC,QAAQ,EAAE,eAAe;EACzBC,QAAQ,EAAE,UAAU;EACpBC,MAAM,EAAE,iBAAiB;EACzBC,KAAK,EAAE,UAAU;EACjBC,MAAM,EAAE,iBAAiB;EAAE;EAC3BC,KAAK,EAAE,iBAAiB;EAAE;EAC1BC,OAAO,EAAE,iBAAiB;EAC1BC,IAAI,EAAE,gBAAgB;EACtBC,OAAO,EAAE,gBAAgB;EACzBC,KAAK,EAAE,yBAAyB;EAChCC,IAAI,EAAE,iBAAiB;EACvBC,IAAI,EAAE,kBAAkB;EACxBC,UAAU,EAAE,iBAAiB;EAC7BC,WAAW,EAAE,aAAa;EAC1BC,qBAAqB,EAAE,iBAAiB;EACxCC,SAAS,EAAE,WAAW;EAAE;EACxBC,OAAO,EAAE,YAAY;EACrBC,QAAQ,EAAE,cAAc;EACxBC,MAAM,EAAE,iBAAiB;EACzBC,IAAI,EAAE,SAAS;EACfC,QAAQ,EAAE,eAAe;EACzBC,QAAQ,EAAE,eAAe;EACzBC,OAAO,EAAE,iBAAiB;EAC1BC,QAAQ,EAAE,aAAa;EACvBC,IAAI,EAAE,WAAW;EACjBC,WAAW,EAAE,WAAW;EACxBC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,gBAAgB;EAC5BC,OAAO,EAAE,YAAY;EACrBC,KAAK,EAAE,kBAAkB;EACzBC,IAAI,EAAE,iBAAiB;EACvBC,MAAM,EAAE,sBAAsB;EAC9BC,IAAI,EAAE,cAAc;EACpBC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,UAAU;EACjBC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,EAAW,GAAG;EAClB;EACAC,SAAS,EAAEC,KAAK,IAAIxC,CAAC,CAACD,UAAU,EAAE;IAAE,GAAGyC,KAAK;IAAEC,KAAK,EAAE;EAAK,CAAC;AAC7D,CAAC;AAED,SAASxC,OAAO,EAAEqC,EAAE"}
1
+ {"version":3,"file":"fa4.mjs","names":["VClassIcon","h","aliases","collapse","complete","cancel","close","delete","clear","success","info","warning","error","prev","next","checkboxOn","checkboxOff","checkboxIndeterminate","delimiter","sortAsc","sortDesc","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","loading","first","last","unfold","file","plus","minus","calendar","fa","component","props","class"],"sources":["../../src/iconsets/fa4.ts"],"sourcesContent":["// Composables\nimport { VClassIcon } from '@/composables/icons'\n\n// Utilities\nimport { h } from 'vue'\n\n// Types\nimport type { IconAliases, IconSet } from '@/composables/icons'\n\nconst aliases: IconAliases = {\n collapse: 'fa-chevron-up',\n complete: 'fa-check',\n cancel: 'fa-times-circle',\n close: 'fa-times',\n delete: 'fa-times-circle', // delete (e.g. v-chip close)\n clear: 'fa-check-circle', // delete (e.g. v-chip close)\n success: 'fa-check-circle',\n info: 'fa-info-circle',\n warning: 'fa-exclamation',\n error: 'fa-exclamation-triangle',\n prev: 'fa-chevron-left',\n next: 'fa-chevron-right',\n checkboxOn: 'fa-check-square',\n checkboxOff: 'fa-square-o',\n checkboxIndeterminate: 'fa-minus-square',\n delimiter: 'fa-circle', // for carousel\n sortAsc: 'fa-arrow-up',\n sortDesc: 'fa-arrow-down',\n expand: 'fa-chevron-down',\n menu: 'fa-bars',\n subgroup: 'fa-caret-down',\n dropdown: 'fa-caret-down',\n radioOn: 'fa-dot-circle-o',\n radioOff: 'fa-circle-o',\n edit: 'fa-pencil',\n ratingEmpty: 'fa-star-o',\n ratingFull: 'fa-star',\n ratingHalf: 'fa-star-half-o',\n loading: 'fa-refresh',\n first: 'fa-step-backward',\n last: 'fa-step-forward',\n unfold: 'fa-angle-double-down',\n file: 'fa-paperclip',\n plus: 'fa-plus',\n minus: 'fa-minus',\n calendar: 'fa-calendar',\n}\n\nconst fa: IconSet = {\n // Not using mergeProps here, functional components merge props by default (?)\n component: props => h(VClassIcon, { ...props, class: 'fa' }),\n}\n\nexport { aliases, fa }\n"],"mappings":"AAAA;AAAA,SACSA,UAAU,oCAEnB;AACA,SAASC,CAAC,QAAQ,KAAK;;AAEvB;;AAGA,MAAMC,OAAoB,GAAG;EAC3BC,QAAQ,EAAE,eAAe;EACzBC,QAAQ,EAAE,UAAU;EACpBC,MAAM,EAAE,iBAAiB;EACzBC,KAAK,EAAE,UAAU;EACjBC,MAAM,EAAE,iBAAiB;EAAE;EAC3BC,KAAK,EAAE,iBAAiB;EAAE;EAC1BC,OAAO,EAAE,iBAAiB;EAC1BC,IAAI,EAAE,gBAAgB;EACtBC,OAAO,EAAE,gBAAgB;EACzBC,KAAK,EAAE,yBAAyB;EAChCC,IAAI,EAAE,iBAAiB;EACvBC,IAAI,EAAE,kBAAkB;EACxBC,UAAU,EAAE,iBAAiB;EAC7BC,WAAW,EAAE,aAAa;EAC1BC,qBAAqB,EAAE,iBAAiB;EACxCC,SAAS,EAAE,WAAW;EAAE;EACxBC,OAAO,EAAE,aAAa;EACtBC,QAAQ,EAAE,eAAe;EACzBC,MAAM,EAAE,iBAAiB;EACzBC,IAAI,EAAE,SAAS;EACfC,QAAQ,EAAE,eAAe;EACzBC,QAAQ,EAAE,eAAe;EACzBC,OAAO,EAAE,iBAAiB;EAC1BC,QAAQ,EAAE,aAAa;EACvBC,IAAI,EAAE,WAAW;EACjBC,WAAW,EAAE,WAAW;EACxBC,UAAU,EAAE,SAAS;EACrBC,UAAU,EAAE,gBAAgB;EAC5BC,OAAO,EAAE,YAAY;EACrBC,KAAK,EAAE,kBAAkB;EACzBC,IAAI,EAAE,iBAAiB;EACvBC,MAAM,EAAE,sBAAsB;EAC9BC,IAAI,EAAE,cAAc;EACpBC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,UAAU;EACjBC,QAAQ,EAAE;AACZ,CAAC;AAED,MAAMC,EAAW,GAAG;EAClB;EACAC,SAAS,EAAEC,KAAK,IAAIxC,CAAC,CAACD,UAAU,EAAE;IAAE,GAAGyC,KAAK;IAAEC,KAAK,EAAE;EAAK,CAAC;AAC7D,CAAC;AAED,SAASxC,OAAO,EAAEqC,EAAE"}
package/lib/index.d.mts CHANGED
@@ -385,13 +385,13 @@ declare module '@vue/runtime-core' {
385
385
  VCardSubtitle: typeof import('vuetify/components')['VCardSubtitle']
386
386
  VCardText: typeof import('vuetify/components')['VCardText']
387
387
  VCardTitle: typeof import('vuetify/components')['VCardTitle']
388
+ VCarousel: typeof import('vuetify/components')['VCarousel']
389
+ VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
388
390
  VCheckbox: typeof import('vuetify/components')['VCheckbox']
389
391
  VCheckboxBtn: typeof import('vuetify/components')['VCheckboxBtn']
390
392
  VChip: typeof import('vuetify/components')['VChip']
391
393
  VChipGroup: typeof import('vuetify/components')['VChipGroup']
392
394
  VCode: typeof import('vuetify/components')['VCode']
393
- VCarousel: typeof import('vuetify/components')['VCarousel']
394
- VCarouselItem: typeof import('vuetify/components')['VCarouselItem']
395
395
  VColorPicker: typeof import('vuetify/components')['VColorPicker']
396
396
  VCombobox: typeof import('vuetify/components')['VCombobox']
397
397
  VCounter: typeof import('vuetify/components')['VCounter']
@@ -442,12 +442,13 @@ declare module '@vue/runtime-core' {
442
442
  VSlideGroup: typeof import('vuetify/components')['VSlideGroup']
443
443
  VSlideGroupItem: typeof import('vuetify/components')['VSlideGroupItem']
444
444
  VSlider: typeof import('vuetify/components')['VSlider']
445
- VSwitch: typeof import('vuetify/components')['VSwitch']
446
445
  VSnackbar: typeof import('vuetify/components')['VSnackbar']
446
+ VSwitch: typeof import('vuetify/components')['VSwitch']
447
447
  VSystemBar: typeof import('vuetify/components')['VSystemBar']
448
448
  VTabs: typeof import('vuetify/components')['VTabs']
449
449
  VTab: typeof import('vuetify/components')['VTab']
450
450
  VTable: typeof import('vuetify/components')['VTable']
451
+ VTextarea: typeof import('vuetify/components')['VTextarea']
451
452
  VTextField: typeof import('vuetify/components')['VTextField']
452
453
  VTimeline: typeof import('vuetify/components')['VTimeline']
453
454
  VTimelineItem: typeof import('vuetify/components')['VTimelineItem']
@@ -459,11 +460,11 @@ declare module '@vue/runtime-core' {
459
460
  VWindowItem: typeof import('vuetify/components')['VWindowItem']
460
461
  VDefaultsProvider: typeof import('vuetify/components')['VDefaultsProvider']
461
462
  VForm: typeof import('vuetify/components')['VForm']
462
- VHover: typeof import('vuetify/components')['VHover']
463
463
  VContainer: typeof import('vuetify/components')['VContainer']
464
464
  VCol: typeof import('vuetify/components')['VCol']
465
465
  VRow: typeof import('vuetify/components')['VRow']
466
466
  VSpacer: typeof import('vuetify/components')['VSpacer']
467
+ VHover: typeof import('vuetify/components')['VHover']
467
468
  VLayout: typeof import('vuetify/components')['VLayout']
468
469
  VLayoutItem: typeof import('vuetify/components')['VLayoutItem']
469
470
  VLazy: typeof import('vuetify/components')['VLazy']
@@ -492,7 +493,6 @@ declare module '@vue/runtime-core' {
492
493
  VExpandTransition: typeof import('vuetify/components')['VExpandTransition']
493
494
  VExpandXTransition: typeof import('vuetify/components')['VExpandXTransition']
494
495
  VDialogTransition: typeof import('vuetify/components')['VDialogTransition']
495
- VTextarea: typeof import('vuetify/components')['VTextarea']
496
496
  VBottomSheet: typeof import('vuetify/labs/components')['VBottomSheet']
497
497
  VDataTable: typeof import('vuetify/labs/components')['VDataTable']
498
498
  VDataTableFooter: typeof import('vuetify/labs/components')['VDataTableFooter']
@@ -2,7 +2,7 @@
2
2
  import { useLocale } from "../../../composables/index.mjs";
3
3
  import { useProxiedModel } from "../../../composables/proxiedModel.mjs"; // Utilities
4
4
  import { computed, inject, provide, toRef } from 'vue';
5
- import { getObjectValueByPath, propsFactory } from "../../../util/index.mjs"; // Types
5
+ import { getObjectValueByPath, isEmpty, propsFactory } from "../../../util/index.mjs"; // Types
6
6
  export const makeDataTableSortProps = propsFactory({
7
7
  sortBy: {
8
8
  type: Array,
@@ -108,6 +108,9 @@ export function sortItems(items, sortByItems, locale, customSorters) {
108
108
  }
109
109
  [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s);
110
110
  if (sortA !== sortB) {
111
+ if (isEmpty(sortA) && isEmpty(sortB)) return 0;
112
+ if (isEmpty(sortA)) return -1;
113
+ if (isEmpty(sortB)) return 1;
111
114
  if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB);
112
115
  return stringCollator.compare(sortA, sortB);
113
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sort.mjs","names":["useLocale","useProxiedModel","computed","inject","provide","toRef","getObjectValueByPath","propsFactory","makeDataTableSortProps","sortBy","type","Array","default","customKeySort","Object","multiSort","Boolean","mustSort","VDataTableSortSymbol","Symbol","for","createSort","props","provideSort","options","page","toggleSort","column","newSortBy","value","map","x","item","find","key","order","filter","isSorted","data","useSort","Error","useSortedItems","items","locale","sortedItems","length","sortItems","current","sortByItems","customSorters","stringCollator","Intl","Collator","sensitivity","usage","sort","a","b","i","sortKey","sortOrder","sortA","raw","sortB","customResult","Date","getTime","s","toString","toLocaleLowerCase","isNaN","Number","compare"],"sources":["../../../../src/labs/VDataTable/composables/sort.ts"],"sourcesContent":["// Composables\nimport { useLocale } from '@/composables'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, toRef } from 'vue'\nimport { getObjectValueByPath, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableCompareFunction, InternalDataTableHeader } from '../types'\n\nexport const makeDataTableSortProps = propsFactory({\n sortBy: {\n type: Array as PropType<readonly SortItem[]>,\n default: () => ([]),\n },\n customKeySort: Object as PropType<Record<string, DataTableCompareFunction>>,\n multiSort: Boolean,\n mustSort: Boolean,\n}, 'DataTable-sort')\n\nconst VDataTableSortSymbol: InjectionKey<{\n sortBy: Ref<readonly SortItem[]>\n toggleSort: (column: InternalDataTableHeader) => void\n isSorted: (column: InternalDataTableHeader) => boolean\n}> = Symbol.for('vuetify:data-table-sort')\n\nexport type SortItem = { key: string, order?: boolean | 'asc' | 'desc' }\n\ntype SortProps = {\n sortBy: readonly SortItem[]\n 'onUpdate:sortBy': ((value: any) => void) | undefined\n mustSort: boolean\n multiSort: boolean\n}\n\nexport function createSort (props: SortProps) {\n const sortBy = useProxiedModel(props, 'sortBy')\n const mustSort = toRef(props, 'mustSort')\n const multiSort = toRef(props, 'multiSort')\n\n return { sortBy, mustSort, multiSort }\n}\n\nexport function provideSort (options: {\n sortBy: Ref<readonly SortItem[]>\n mustSort: Ref<boolean>\n multiSort: Ref<boolean>\n page?: Ref<number>\n}) {\n const { sortBy, mustSort, multiSort, page } = options\n\n const toggleSort = (column: InternalDataTableHeader) => {\n let newSortBy = sortBy.value.map(x => ({ ...x })) ?? []\n const item = newSortBy.find(x => x.key === column.key)\n\n if (!item) {\n if (multiSort.value) newSortBy = [...newSortBy, { key: column.key, order: 'asc' }]\n else newSortBy = [{ key: column.key, order: 'asc' }]\n } else if (item.order === 'desc') {\n if (mustSort.value) {\n item.order = 'asc'\n } else {\n newSortBy = newSortBy.filter(x => x.key !== column.key)\n }\n } else {\n item.order = 'desc'\n }\n\n sortBy.value = newSortBy\n if (page) page.value = 1\n }\n\n function isSorted (column: InternalDataTableHeader) {\n return !!sortBy.value.find(item => item.key === column.key)\n }\n\n const data = { sortBy, toggleSort, isSorted }\n\n provide(VDataTableSortSymbol, data)\n\n return data\n}\n\nexport function useSort () {\n const data = inject(VDataTableSortSymbol)\n\n if (!data) throw new Error('Missing sort!')\n\n return data\n}\n\nexport function useSortedItems <T extends Record<string, any>> (\n props: { customKeySort?: Record<string, DataTableCompareFunction> },\n items: Ref<T[]>,\n sortBy: Ref<readonly SortItem[]>,\n) {\n const locale = useLocale()\n const sortedItems = computed(() => {\n if (!sortBy.value.length) return items.value\n\n return sortItems(items.value, sortBy.value, locale.current.value, props.customKeySort)\n })\n\n return { sortedItems }\n}\n\nexport function sortItems<T extends Record<string, any>> (\n items: T[],\n sortByItems: readonly SortItem[],\n locale: string,\n customSorters?: Record<string, DataTableCompareFunction>\n): T[] {\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return [...items].sort((a, b) => {\n for (let i = 0; i < sortByItems.length; i++) {\n const sortKey = sortByItems[i].key\n const sortOrder = sortByItems[i].order ?? 'asc'\n\n if (sortOrder === false) continue\n\n let sortA = getObjectValueByPath(a.raw, sortKey)\n let sortB = getObjectValueByPath(b.raw, sortKey)\n\n if (sortOrder === 'desc') {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters?.[sortKey]) {\n const customResult = customSorters[sortKey](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s)\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sort.mjs","names":["useLocale","useProxiedModel","computed","inject","provide","toRef","getObjectValueByPath","isEmpty","propsFactory","makeDataTableSortProps","sortBy","type","Array","default","customKeySort","Object","multiSort","Boolean","mustSort","VDataTableSortSymbol","Symbol","for","createSort","props","provideSort","options","page","toggleSort","column","newSortBy","value","map","x","item","find","key","order","filter","isSorted","data","useSort","Error","useSortedItems","items","locale","sortedItems","length","sortItems","current","sortByItems","customSorters","stringCollator","Intl","Collator","sensitivity","usage","sort","a","b","i","sortKey","sortOrder","sortA","raw","sortB","customResult","Date","getTime","s","toString","toLocaleLowerCase","isNaN","Number","compare"],"sources":["../../../../src/labs/VDataTable/composables/sort.ts"],"sourcesContent":["// Composables\nimport { useLocale } from '@/composables'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, toRef } from 'vue'\nimport { getObjectValueByPath, isEmpty, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableCompareFunction, InternalDataTableHeader } from '../types'\n\nexport const makeDataTableSortProps = propsFactory({\n sortBy: {\n type: Array as PropType<readonly SortItem[]>,\n default: () => ([]),\n },\n customKeySort: Object as PropType<Record<string, DataTableCompareFunction>>,\n multiSort: Boolean,\n mustSort: Boolean,\n}, 'DataTable-sort')\n\nconst VDataTableSortSymbol: InjectionKey<{\n sortBy: Ref<readonly SortItem[]>\n toggleSort: (column: InternalDataTableHeader) => void\n isSorted: (column: InternalDataTableHeader) => boolean\n}> = Symbol.for('vuetify:data-table-sort')\n\nexport type SortItem = { key: string, order?: boolean | 'asc' | 'desc' }\n\ntype SortProps = {\n sortBy: readonly SortItem[]\n 'onUpdate:sortBy': ((value: any) => void) | undefined\n mustSort: boolean\n multiSort: boolean\n}\n\nexport function createSort (props: SortProps) {\n const sortBy = useProxiedModel(props, 'sortBy')\n const mustSort = toRef(props, 'mustSort')\n const multiSort = toRef(props, 'multiSort')\n\n return { sortBy, mustSort, multiSort }\n}\n\nexport function provideSort (options: {\n sortBy: Ref<readonly SortItem[]>\n mustSort: Ref<boolean>\n multiSort: Ref<boolean>\n page?: Ref<number>\n}) {\n const { sortBy, mustSort, multiSort, page } = options\n\n const toggleSort = (column: InternalDataTableHeader) => {\n let newSortBy = sortBy.value.map(x => ({ ...x })) ?? []\n const item = newSortBy.find(x => x.key === column.key)\n\n if (!item) {\n if (multiSort.value) newSortBy = [...newSortBy, { key: column.key, order: 'asc' }]\n else newSortBy = [{ key: column.key, order: 'asc' }]\n } else if (item.order === 'desc') {\n if (mustSort.value) {\n item.order = 'asc'\n } else {\n newSortBy = newSortBy.filter(x => x.key !== column.key)\n }\n } else {\n item.order = 'desc'\n }\n\n sortBy.value = newSortBy\n if (page) page.value = 1\n }\n\n function isSorted (column: InternalDataTableHeader) {\n return !!sortBy.value.find(item => item.key === column.key)\n }\n\n const data = { sortBy, toggleSort, isSorted }\n\n provide(VDataTableSortSymbol, data)\n\n return data\n}\n\nexport function useSort () {\n const data = inject(VDataTableSortSymbol)\n\n if (!data) throw new Error('Missing sort!')\n\n return data\n}\n\nexport function useSortedItems <T extends Record<string, any>> (\n props: { customKeySort?: Record<string, DataTableCompareFunction> },\n items: Ref<T[]>,\n sortBy: Ref<readonly SortItem[]>,\n) {\n const locale = useLocale()\n const sortedItems = computed(() => {\n if (!sortBy.value.length) return items.value\n\n return sortItems(items.value, sortBy.value, locale.current.value, props.customKeySort)\n })\n\n return { sortedItems }\n}\n\nexport function sortItems<T extends Record<string, any>> (\n items: T[],\n sortByItems: readonly SortItem[],\n locale: string,\n customSorters?: Record<string, DataTableCompareFunction>\n): T[] {\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return [...items].sort((a, b) => {\n for (let i = 0; i < sortByItems.length; i++) {\n const sortKey = sortByItems[i].key\n const sortOrder = sortByItems[i].order ?? 'asc'\n\n if (sortOrder === false) continue\n\n let sortA = getObjectValueByPath(a.raw, sortKey)\n let sortB = getObjectValueByPath(b.raw, sortKey)\n\n if (sortOrder === 'desc') {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters?.[sortKey]) {\n const customResult = customSorters[sortKey](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s)\n\n if (sortA !== sortB) {\n if (isEmpty(sortA) && isEmpty(sortB)) return 0\n if (isEmpty(sortA)) return -1\n if (isEmpty(sortB)) return 1\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n"],"mappings":"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"}
@@ -6,18 +6,16 @@
6
6
 
7
7
  .v-date-picker {
8
8
  overflow: hidden;
9
- width: 358px;
10
9
  }
11
10
  .v-date-picker .v-date-picker-month {
12
- padding-bottom: 8px;
13
11
  padding-inline-start: 12px;
14
12
  padding-inline-end: 12px;
15
13
  }
16
14
  .v-date-picker .v-date-picker-month .v-date-picker-month__day {
17
- height: 40px;
18
- width: 40px;
15
+ height: 48px;
16
+ width: 48px;
19
17
  }
20
18
  .v-date-picker .v-date-picker-month .v-date-picker-month__day .v-btn {
21
- --v-btn-height: 24px;
19
+ --v-btn-height: 28px;
22
20
  --v-btn-size: 0.85rem;
23
21
  }
@@ -7,6 +7,7 @@ import { makeVDatePickerControlsProps, VDatePickerControls } from "./VDatePicker
7
7
  import { VDatePickerHeader } from "./VDatePickerHeader.mjs";
8
8
  import { makeVDatePickerMonthProps, VDatePickerMonth } from "./VDatePickerMonth.mjs";
9
9
  import { makeVDatePickerYearsProps, VDatePickerYears } from "./VDatePickerYears.mjs";
10
+ import { VFadeTransition } from "../../components/transitions/index.mjs";
10
11
  import { VBtn } from "../../components/VBtn/index.mjs";
11
12
  import { VTextField } from "../../components/VTextField/index.mjs";
12
13
  import { dateEmits, makeDateProps } from "../VDateInput/composables.mjs";
@@ -14,7 +15,6 @@ import { makeVPickerProps, VPicker } from "../VPicker/VPicker.mjs"; // Composabl
14
15
  import { createDatePicker } from "./composables.mjs";
15
16
  import { useLocale } from "../../composables/locale.mjs";
16
17
  import { useProxiedModel } from "../../composables/proxiedModel.mjs";
17
- import { makeTransitionProps, MaybeTransition } from "../../composables/transition.mjs";
18
18
  import { useDate } from "../date/index.mjs"; // Utilities
19
19
  import { computed, ref, watch } from 'vue';
20
20
  import { genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // Types
@@ -45,9 +45,6 @@ export const makeVDatePickerProps = propsFactory({
45
45
  },
46
46
  hideActions: Boolean,
47
47
  ...makeDateProps(),
48
- ...makeTransitionProps({
49
- transition: 'fade'
50
- }),
51
48
  ...makeVDatePickerControlsProps(),
52
49
  ...makeVDatePickerMonthProps(),
53
50
  ...makeVDatePickerYearsProps(),
@@ -94,7 +91,9 @@ export const VDatePicker = genericComponent()({
94
91
  if (props.hideActions) {
95
92
  emit('update:modelValue', val);
96
93
  }
97
- isReversing.value = adapter.isBefore(val[0], oldVal[0]);
94
+ if (val[0] && oldVal[0]) {
95
+ isReversing.value = adapter.isBefore(val[0], oldVal[0]);
96
+ }
98
97
  });
99
98
  function onClickCancel() {
100
99
  emit('click:cancel');
@@ -130,16 +129,19 @@ export const VDatePicker = genericComponent()({
130
129
  "onUpdate:displayDate": $event => displayDate.value = $event,
131
130
  "viewMode": viewMode.value,
132
131
  "onUpdate:viewMode": $event => viewMode.value = $event
133
- }), null), _createVNode(MaybeTransition, {
134
- "transition": props.transition,
135
- "mode": "out-in"
132
+ }), null), _createVNode(VFadeTransition, {
133
+ "hideOnLeave": true
136
134
  }, {
137
- default: () => [viewMode.value === 'month' ? _createVNode(VDatePickerMonth, _mergeProps(datePickerMonthProps, {
135
+ default: () => [viewMode.value === 'month' ? _createVNode(VDatePickerMonth, _mergeProps({
136
+ "key": "date-picker-month"
137
+ }, datePickerMonthProps, {
138
138
  "modelValue": model.value,
139
139
  "onUpdate:modelValue": $event => model.value = $event,
140
140
  "displayDate": displayDate.value,
141
141
  "onUpdate:displayDate": $event => displayDate.value = $event
142
- }), null) : _createVNode(VDatePickerYears, _mergeProps(datePickerYearsProps, {
142
+ }), null) : _createVNode(VDatePickerYears, _mergeProps({
143
+ "key": "date-picker-years"
144
+ }, datePickerYearsProps, {
143
145
  "displayDate": displayDate.value,
144
146
  "onUpdate:displayDate": $event => displayDate.value = $event,
145
147
  "viewMode": viewMode.value,
@@ -1 +1 @@
1
- {"version":3,"file":"VDatePicker.mjs","names":["makeVDatePickerControlsProps","VDatePickerControls","VDatePickerHeader","makeVDatePickerMonthProps","VDatePickerMonth","makeVDatePickerYearsProps","VDatePickerYears","VBtn","VTextField","dateEmits","makeDateProps","makeVPickerProps","VPicker","createDatePicker","useLocale","useProxiedModel","makeTransitionProps","MaybeTransition","useDate","computed","ref","watch","genericComponent","propsFactory","useRender","makeVDatePickerProps","calendarIcon","type","String","default","keyboardIcon","cancelText","okText","inputText","header","hideActions","Boolean","transition","title","VDatePicker","name","props","emits","click:cancel","click:save","setup","_ref","emit","slots","adapter","t","model","modelValue","isReversing","displayDate","inputMode","viewMode","inputModel","value","length","format","headerIcon","headerTransition","isValid","date","val","oldVal","isBefore","onClickCancel","onClickSave","onClickAppend","headerSlotProps","appendIcon","pickerProps","filterProps","datePickerControlsProps","datePickerMonthProps","datePickerYearsProps","_createVNode","_mergeProps","class","style","_Fragment","$event","actions","color","undefined"],"sources":["../../../src/labs/VDatePicker/VDatePicker.tsx"],"sourcesContent":["// Styles\nimport './VDatePicker.sass'\n\n// Components\nimport { makeVDatePickerControlsProps, VDatePickerControls } from './VDatePickerControls'\nimport { VDatePickerHeader } from './VDatePickerHeader'\nimport { makeVDatePickerMonthProps, VDatePickerMonth } from './VDatePickerMonth'\nimport { makeVDatePickerYearsProps, VDatePickerYears } from './VDatePickerYears'\nimport { VBtn } from '@/components/VBtn'\nimport { VTextField } from '@/components/VTextField'\nimport { dateEmits, makeDateProps } from '@/labs/VDateInput/composables'\nimport { makeVPickerProps, VPicker } from '@/labs/VPicker/VPicker'\n\n// Composables\nimport { createDatePicker } from './composables'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useDate } from '@/labs/date'\n\n// Utilities\nimport { computed, ref, watch } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nexport type VDatePickerSlots = {\n header: {\n header: string\n appendIcon: string\n 'onClick:append': () => void\n }\n}\n\nexport const makeVDatePickerProps = propsFactory({\n calendarIcon: {\n type: String,\n default: '$calendar',\n },\n keyboardIcon: {\n type: String,\n default: '$edit',\n },\n cancelText: {\n type: String,\n default: '$vuetify.datePicker.cancel',\n },\n okText: {\n type: String,\n default: '$vuetify.datePicker.ok',\n },\n inputText: {\n type: String,\n default: '$vuetify.datePicker.input.placeholder',\n },\n header: {\n type: String,\n default: '$vuetify.datePicker.header',\n },\n hideActions: Boolean,\n\n ...makeDateProps(),\n ...makeTransitionProps({ transition: 'fade' }),\n ...makeVDatePickerControlsProps(),\n ...makeVDatePickerMonthProps(),\n ...makeVDatePickerYearsProps(),\n ...makeVPickerProps({ title: '$vuetify.datePicker.title' }),\n}, 'VDatePicker')\n\nexport const VDatePicker = genericComponent<VDatePickerSlots>()({\n name: 'VDatePicker',\n\n props: makeVDatePickerProps(),\n\n emits: {\n 'click:cancel': () => true,\n 'click:save': () => true,\n ...dateEmits,\n },\n\n setup (props, { emit, slots }) {\n const adapter = useDate()\n const { t } = useLocale()\n\n createDatePicker(props)\n\n const model = ref<any[]>(props.modelValue ?? [])\n const isReversing = ref(false)\n\n const displayDate = useProxiedModel(props, 'displayDate', props.displayDate)\n const inputMode = useProxiedModel(props, 'inputMode', props.inputMode)\n const viewMode = useProxiedModel(props, 'viewMode', props.viewMode)\n\n const inputModel = computed(() => model.value.length ? adapter.format(model.value[0], 'keyboardDate') : '')\n const title = computed(() => t(props.title))\n const header = computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header))\n const headerIcon = computed(() => inputMode.value === 'calendar' ? props.keyboardIcon : props.calendarIcon)\n const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`)\n\n watch(inputModel, () => {\n const { isValid, date } = adapter\n\n model.value = isValid(inputModel.value) ? [date(inputModel.value)] : []\n })\n\n watch(model, (val, oldVal) => {\n if (props.hideActions) {\n emit('update:modelValue', val)\n }\n\n isReversing.value = adapter.isBefore(val[0], oldVal[0])\n })\n\n function onClickCancel () {\n emit('click:cancel')\n }\n function onClickSave () {\n emit('click:save')\n emit('update:modelValue', model.value)\n }\n function onClickAppend () {\n inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar'\n }\n\n const headerSlotProps = computed(() => ({\n header: header.value,\n appendIcon: headerIcon.value,\n transition: headerTransition.value,\n 'onClick:append': onClickAppend,\n }))\n\n useRender(() => {\n const [pickerProps] = VPicker.filterProps(props)\n const [datePickerControlsProps] = VDatePickerControls.filterProps(props)\n const [datePickerMonthProps] = VDatePickerMonth.filterProps(props)\n const [datePickerYearsProps] = VDatePickerYears.filterProps(props)\n\n return (\n <VPicker\n { ...pickerProps }\n class={[\n 'v-date-picker',\n props.class,\n ]}\n style={ props.style }\n title={ title.value }\n v-slots={{\n header: () => slots.header?.(headerSlotProps.value) ?? (\n <VDatePickerHeader\n key=\"header\"\n { ...headerSlotProps.value }\n />\n ),\n default: () => inputMode.value === 'calendar' ? (\n <>\n <VDatePickerControls\n { ...datePickerControlsProps }\n v-model:displayDate={ displayDate.value }\n v-model:viewMode={ viewMode.value }\n />\n\n <MaybeTransition transition={ props.transition } mode=\"out-in\">\n { viewMode.value === 'month' ? (\n <VDatePickerMonth\n { ...datePickerMonthProps }\n v-model={ model.value }\n v-model:displayDate={ displayDate.value }\n />\n ) : (\n <VDatePickerYears\n { ...datePickerYearsProps }\n v-model:displayDate={ displayDate.value }\n v-model:viewMode={ viewMode.value }\n />\n )}\n </MaybeTransition>\n </>\n ) : (\n <div class=\"v-date-picker__input\">\n <VTextField\n v-model={ inputModel.value }\n label={ t(props.inputText) }\n placeholder=\"dd/mm/yyyy\"\n />\n </div>\n ),\n actions: !props.hideActions ? () => (\n <div>\n <VBtn\n variant=\"text\"\n color={ props.color }\n onClick={ onClickCancel }\n text={ t(props.cancelText) }\n />\n\n <VBtn\n variant=\"text\"\n color={ props.color }\n onClick={ onClickSave }\n text={ t(props.okText) }\n />\n </div>\n ) : undefined,\n }}\n />\n )\n })\n\n return {}\n },\n})\n\nexport type VDatePicker = InstanceType<typeof VDatePicker>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VDatePicker.mjs","names":["makeVDatePickerControlsProps","VDatePickerControls","VDatePickerHeader","makeVDatePickerMonthProps","VDatePickerMonth","makeVDatePickerYearsProps","VDatePickerYears","VFadeTransition","VBtn","VTextField","dateEmits","makeDateProps","makeVPickerProps","VPicker","createDatePicker","useLocale","useProxiedModel","useDate","computed","ref","watch","genericComponent","propsFactory","useRender","makeVDatePickerProps","calendarIcon","type","String","default","keyboardIcon","cancelText","okText","inputText","header","hideActions","Boolean","title","VDatePicker","name","props","emits","click:cancel","click:save","setup","_ref","emit","slots","adapter","t","model","modelValue","isReversing","displayDate","inputMode","viewMode","inputModel","value","length","format","headerIcon","headerTransition","isValid","date","val","oldVal","isBefore","onClickCancel","onClickSave","onClickAppend","headerSlotProps","appendIcon","transition","pickerProps","filterProps","datePickerControlsProps","datePickerMonthProps","datePickerYearsProps","_createVNode","_mergeProps","class","style","_Fragment","$event","actions","color","undefined"],"sources":["../../../src/labs/VDatePicker/VDatePicker.tsx"],"sourcesContent":["// Styles\nimport './VDatePicker.sass'\n\n// Components\nimport { makeVDatePickerControlsProps, VDatePickerControls } from './VDatePickerControls'\nimport { VDatePickerHeader } from './VDatePickerHeader'\nimport { makeVDatePickerMonthProps, VDatePickerMonth } from './VDatePickerMonth'\nimport { makeVDatePickerYearsProps, VDatePickerYears } from './VDatePickerYears'\nimport { VFadeTransition } from '@/components/transitions'\nimport { VBtn } from '@/components/VBtn'\nimport { VTextField } from '@/components/VTextField'\nimport { dateEmits, makeDateProps } from '@/labs/VDateInput/composables'\nimport { makeVPickerProps, VPicker } from '@/labs/VPicker/VPicker'\n\n// Composables\nimport { createDatePicker } from './composables'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useDate } from '@/labs/date'\n\n// Utilities\nimport { computed, ref, watch } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nexport type VDatePickerSlots = {\n header: {\n header: string\n appendIcon: string\n 'onClick:append': () => void\n }\n}\n\nexport const makeVDatePickerProps = propsFactory({\n calendarIcon: {\n type: String,\n default: '$calendar',\n },\n keyboardIcon: {\n type: String,\n default: '$edit',\n },\n cancelText: {\n type: String,\n default: '$vuetify.datePicker.cancel',\n },\n okText: {\n type: String,\n default: '$vuetify.datePicker.ok',\n },\n inputText: {\n type: String,\n default: '$vuetify.datePicker.input.placeholder',\n },\n header: {\n type: String,\n default: '$vuetify.datePicker.header',\n },\n hideActions: Boolean,\n\n ...makeDateProps(),\n ...makeVDatePickerControlsProps(),\n ...makeVDatePickerMonthProps(),\n ...makeVDatePickerYearsProps(),\n ...makeVPickerProps({ title: '$vuetify.datePicker.title' }),\n}, 'VDatePicker')\n\nexport const VDatePicker = genericComponent<VDatePickerSlots>()({\n name: 'VDatePicker',\n\n props: makeVDatePickerProps(),\n\n emits: {\n 'click:cancel': () => true,\n 'click:save': () => true,\n ...dateEmits,\n },\n\n setup (props, { emit, slots }) {\n const adapter = useDate()\n const { t } = useLocale()\n\n createDatePicker(props)\n\n const model = ref<any[]>(props.modelValue ?? [])\n const isReversing = ref(false)\n\n const displayDate = useProxiedModel(props, 'displayDate', props.displayDate)\n const inputMode = useProxiedModel(props, 'inputMode', props.inputMode)\n const viewMode = useProxiedModel(props, 'viewMode', props.viewMode)\n\n const inputModel = computed(() => model.value.length ? adapter.format(model.value[0], 'keyboardDate') : '')\n const title = computed(() => t(props.title))\n const header = computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header))\n const headerIcon = computed(() => inputMode.value === 'calendar' ? props.keyboardIcon : props.calendarIcon)\n const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`)\n\n watch(inputModel, () => {\n const { isValid, date } = adapter\n\n model.value = isValid(inputModel.value) ? [date(inputModel.value)] : []\n })\n\n watch(model, (val, oldVal) => {\n if (props.hideActions) {\n emit('update:modelValue', val)\n }\n\n if (val[0] && oldVal[0]) {\n isReversing.value = adapter.isBefore(val[0], oldVal[0])\n }\n })\n\n function onClickCancel () {\n emit('click:cancel')\n }\n function onClickSave () {\n emit('click:save')\n emit('update:modelValue', model.value)\n }\n function onClickAppend () {\n inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar'\n }\n\n const headerSlotProps = computed(() => ({\n header: header.value,\n appendIcon: headerIcon.value,\n transition: headerTransition.value,\n 'onClick:append': onClickAppend,\n }))\n\n useRender(() => {\n const [pickerProps] = VPicker.filterProps(props)\n const [datePickerControlsProps] = VDatePickerControls.filterProps(props)\n const [datePickerMonthProps] = VDatePickerMonth.filterProps(props)\n const [datePickerYearsProps] = VDatePickerYears.filterProps(props)\n\n return (\n <VPicker\n { ...pickerProps }\n class={[\n 'v-date-picker',\n props.class,\n ]}\n style={ props.style }\n title={ title.value }\n v-slots={{\n header: () => slots.header?.(headerSlotProps.value) ?? (\n <VDatePickerHeader\n key=\"header\"\n { ...headerSlotProps.value }\n />\n ),\n default: () => inputMode.value === 'calendar' ? (\n <>\n <VDatePickerControls\n { ...datePickerControlsProps }\n v-model:displayDate={ displayDate.value }\n v-model:viewMode={ viewMode.value }\n />\n\n <VFadeTransition hideOnLeave>\n { viewMode.value === 'month' ? (\n <VDatePickerMonth\n key=\"date-picker-month\"\n { ...datePickerMonthProps }\n v-model={ model.value }\n v-model:displayDate={ displayDate.value }\n />\n ) : (\n <VDatePickerYears\n key=\"date-picker-years\"\n { ...datePickerYearsProps }\n v-model:displayDate={ displayDate.value }\n v-model:viewMode={ viewMode.value }\n />\n )}\n </VFadeTransition>\n </>\n ) : (\n <div class=\"v-date-picker__input\">\n <VTextField\n v-model={ inputModel.value }\n label={ t(props.inputText) }\n placeholder=\"dd/mm/yyyy\"\n />\n </div>\n ),\n actions: !props.hideActions ? () => (\n <div>\n <VBtn\n variant=\"text\"\n color={ props.color }\n onClick={ onClickCancel }\n text={ t(props.cancelText) }\n />\n\n <VBtn\n variant=\"text\"\n color={ props.color }\n onClick={ onClickSave }\n text={ t(props.okText) }\n />\n </div>\n ) : undefined,\n }}\n />\n )\n })\n\n return {}\n },\n})\n\nexport type VDatePicker = InstanceType<typeof VDatePicker>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,4BAA4B,EAAEC,mBAAmB;AAAA,SACjDC,iBAAiB;AAAA,SACjBC,yBAAyB,EAAEC,gBAAgB;AAAA,SAC3CC,yBAAyB,EAAEC,gBAAgB;AAAA,SAC3CC,eAAe;AAAA,SACfC,IAAI;AAAA,SACJC,UAAU;AAAA,SACVC,SAAS,EAAEC,aAAa;AAAA,SACxBC,gBAAgB,EAAEC,OAAO,kCAElC;AAAA,SACSC,gBAAgB;AAAA,SAChBC,SAAS;AAAA,SACTC,eAAe;AAAA,SACfC,OAAO,6BAEhB;AACA,SAASC,QAAQ,EAAEC,GAAG,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACjCC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAElD;AASA,OAAO,MAAMC,oBAAoB,GAAGF,YAAY,CAAC;EAC/CG,YAAY,EAAE;IACZC,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDC,YAAY,EAAE;IACZH,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDE,UAAU,EAAE;IACVJ,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDG,MAAM,EAAE;IACNL,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDI,SAAS,EAAE;IACTN,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDK,MAAM,EAAE;IACNP,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX,CAAC;EACDM,WAAW,EAAEC,OAAO;EAEpB,GAAGxB,aAAa,EAAE;EAClB,GAAGX,4BAA4B,EAAE;EACjC,GAAGG,yBAAyB,EAAE;EAC9B,GAAGE,yBAAyB,EAAE;EAC9B,GAAGO,gBAAgB,CAAC;IAAEwB,KAAK,EAAE;EAA4B,CAAC;AAC5D,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,MAAMC,WAAW,GAAGhB,gBAAgB,EAAoB,CAAC;EAC9DiB,IAAI,EAAE,aAAa;EAEnBC,KAAK,EAAEf,oBAAoB,EAAE;EAE7BgB,KAAK,EAAE;IACL,cAAc,EAAEC,CAAA,KAAM,IAAI;IAC1B,YAAY,EAAEC,CAAA,KAAM,IAAI;IACxB,GAAGhC;EACL,CAAC;EAEDiC,KAAKA,CAAEJ,KAAK,EAAAK,IAAA,EAAmB;IAAA,IAAjB;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAAF,IAAA;IAC3B,MAAMG,OAAO,GAAG9B,OAAO,EAAE;IACzB,MAAM;MAAE+B;IAAE,CAAC,GAAGjC,SAAS,EAAE;IAEzBD,gBAAgB,CAACyB,KAAK,CAAC;IAEvB,MAAMU,KAAK,GAAG9B,GAAG,CAAQoB,KAAK,CAACW,UAAU,IAAI,EAAE,CAAC;IAChD,MAAMC,WAAW,GAAGhC,GAAG,CAAC,KAAK,CAAC;IAE9B,MAAMiC,WAAW,GAAGpC,eAAe,CAACuB,KAAK,EAAE,aAAa,EAAEA,KAAK,CAACa,WAAW,CAAC;IAC5E,MAAMC,SAAS,GAAGrC,eAAe,CAACuB,KAAK,EAAE,WAAW,EAAEA,KAAK,CAACc,SAAS,CAAC;IACtE,MAAMC,QAAQ,GAAGtC,eAAe,CAACuB,KAAK,EAAE,UAAU,EAAEA,KAAK,CAACe,QAAQ,CAAC;IAEnE,MAAMC,UAAU,GAAGrC,QAAQ,CAAC,MAAM+B,KAAK,CAACO,KAAK,CAACC,MAAM,GAAGV,OAAO,CAACW,MAAM,CAACT,KAAK,CAACO,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC;IAC3G,MAAMpB,KAAK,GAAGlB,QAAQ,CAAC,MAAM8B,CAAC,CAACT,KAAK,CAACH,KAAK,CAAC,CAAC;IAC5C,MAAMH,MAAM,GAAGf,QAAQ,CAAC,MAAM+B,KAAK,CAACO,KAAK,CAACC,MAAM,GAAGV,OAAO,CAACW,MAAM,CAACT,KAAK,CAACO,KAAK,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,GAAGR,CAAC,CAACT,KAAK,CAACN,MAAM,CAAC,CAAC;IAC7H,MAAM0B,UAAU,GAAGzC,QAAQ,CAAC,MAAMmC,SAAS,CAACG,KAAK,KAAK,UAAU,GAAGjB,KAAK,CAACV,YAAY,GAAGU,KAAK,CAACd,YAAY,CAAC;IAC3G,MAAMmC,gBAAgB,GAAG1C,QAAQ,CAAC,MAAO,qBAAoBiC,WAAW,CAACK,KAAK,GAAG,UAAU,GAAG,EAAG,aAAY,CAAC;IAE9GpC,KAAK,CAACmC,UAAU,EAAE,MAAM;MACtB,MAAM;QAAEM,OAAO;QAAEC;MAAK,CAAC,GAAGf,OAAO;MAEjCE,KAAK,CAACO,KAAK,GAAGK,OAAO,CAACN,UAAU,CAACC,KAAK,CAAC,GAAG,CAACM,IAAI,CAACP,UAAU,CAACC,KAAK,CAAC,CAAC,GAAG,EAAE;IACzE,CAAC,CAAC;IAEFpC,KAAK,CAAC6B,KAAK,EAAE,CAACc,GAAG,EAAEC,MAAM,KAAK;MAC5B,IAAIzB,KAAK,CAACL,WAAW,EAAE;QACrBW,IAAI,CAAC,mBAAmB,EAAEkB,GAAG,CAAC;MAChC;MAEA,IAAIA,GAAG,CAAC,CAAC,CAAC,IAAIC,MAAM,CAAC,CAAC,CAAC,EAAE;QACvBb,WAAW,CAACK,KAAK,GAAGT,OAAO,CAACkB,QAAQ,CAACF,GAAG,CAAC,CAAC,CAAC,EAAEC,MAAM,CAAC,CAAC,CAAC,CAAC;MACzD;IACF,CAAC,CAAC;IAEF,SAASE,aAAaA,CAAA,EAAI;MACxBrB,IAAI,CAAC,cAAc,CAAC;IACtB;IACA,SAASsB,WAAWA,CAAA,EAAI;MACtBtB,IAAI,CAAC,YAAY,CAAC;MAClBA,IAAI,CAAC,mBAAmB,EAAEI,KAAK,CAACO,KAAK,CAAC;IACxC;IACA,SAASY,aAAaA,CAAA,EAAI;MACxBf,SAAS,CAACG,KAAK,GAAGH,SAAS,CAACG,KAAK,KAAK,UAAU,GAAG,UAAU,GAAG,UAAU;IAC5E;IAEA,MAAMa,eAAe,GAAGnD,QAAQ,CAAC,OAAO;MACtCe,MAAM,EAAEA,MAAM,CAACuB,KAAK;MACpBc,UAAU,EAAEX,UAAU,CAACH,KAAK;MAC5Be,UAAU,EAAEX,gBAAgB,CAACJ,KAAK;MAClC,gBAAgB,EAAEY;IACpB,CAAC,CAAC,CAAC;IAEH7C,SAAS,CAAC,MAAM;MACd,MAAM,CAACiD,WAAW,CAAC,GAAG3D,OAAO,CAAC4D,WAAW,CAAClC,KAAK,CAAC;MAChD,MAAM,CAACmC,uBAAuB,CAAC,GAAGzE,mBAAmB,CAACwE,WAAW,CAAClC,KAAK,CAAC;MACxE,MAAM,CAACoC,oBAAoB,CAAC,GAAGvE,gBAAgB,CAACqE,WAAW,CAAClC,KAAK,CAAC;MAClE,MAAM,CAACqC,oBAAoB,CAAC,GAAGtE,gBAAgB,CAACmE,WAAW,CAAClC,KAAK,CAAC;MAElE,OAAAsC,YAAA,CAAAhE,OAAA,EAAAiE,WAAA,CAESN,WAAW;QAAA,SACT,CACL,eAAe,EACfjC,KAAK,CAACwC,KAAK,CACZ;QAAA,SACOxC,KAAK,CAACyC,KAAK;QAAA,SACX5C,KAAK,CAACoB;MAAK,IACV;QACPvB,MAAM,EAAEA,CAAA,KAAMa,KAAK,CAACb,MAAM,GAAGoC,eAAe,CAACb,KAAK,CAAC,IAAAqB,YAAA,CAAA3E,iBAAA,EAAA4E,WAAA;UAAA,OAE3C;QAAQ,GACPT,eAAe,CAACb,KAAK,QAE7B;QACD5B,OAAO,EAAEA,CAAA,KAAMyB,SAAS,CAACG,KAAK,KAAK,UAAU,GAAAqB,YAAA,CAAAI,SAAA,SAAAJ,YAAA,CAAA5E,mBAAA,EAAA6E,WAAA,CAGlCJ,uBAAuB;UAAA,eACNtB,WAAW,CAACI,KAAK;UAAA,wBAAA0B,MAAA,IAAjB9B,WAAW,CAACI,KAAK,GAAA0B,MAAA;UAAA,YACpB5B,QAAQ,CAACE,KAAK;UAAA,qBAAA0B,MAAA,IAAd5B,QAAQ,CAACE,KAAK,GAAA0B;QAAA,WAAAL,YAAA,CAAAtE,eAAA;UAAA;QAAA;UAAAqB,OAAA,EAAAA,CAAA,MAI/B0B,QAAQ,CAACE,KAAK,KAAK,OAAO,GAAAqB,YAAA,CAAAzE,gBAAA,EAAA0E,WAAA;YAAA,OAEpB;UAAmB,GAClBH,oBAAoB;YAAA,cACf1B,KAAK,CAACO,KAAK;YAAA,uBAAA0B,MAAA,IAAXjC,KAAK,CAACO,KAAK,GAAA0B,MAAA;YAAA,eACC9B,WAAW,CAACI,KAAK;YAAA,wBAAA0B,MAAA,IAAjB9B,WAAW,CAACI,KAAK,GAAA0B;UAAA,YAAAL,YAAA,CAAAvE,gBAAA,EAAAwE,WAAA;YAAA,OAInC;UAAmB,GAClBF,oBAAoB;YAAA,eACHxB,WAAW,CAACI,KAAK;YAAA,wBAAA0B,MAAA,IAAjB9B,WAAW,CAACI,KAAK,GAAA0B,MAAA;YAAA,YACpB5B,QAAQ,CAACE,KAAK;YAAA,qBAAA0B,MAAA,IAAd5B,QAAQ,CAACE,KAAK,GAAA0B;UAAA,SAEpC;QAAA,OAAAL,YAAA;UAAA,SAIM;QAAsB,IAAAA,YAAA,CAAApE,UAAA;UAAA,cAEnB8C,UAAU,CAACC,KAAK;UAAA,uBAAA0B,MAAA,IAAhB3B,UAAU,CAACC,KAAK,GAAA0B,MAAA;UAAA,SAClBlC,CAAC,CAACT,KAAK,CAACP,SAAS,CAAC;UAAA,eACd;QAAY,UAG7B;QACDmD,OAAO,EAAE,CAAC5C,KAAK,CAACL,WAAW,GAAG,MAAA2C,YAAA,eAAAA,YAAA,CAAArE,IAAA;UAAA,WAGhB,MAAM;UAAA,SACN+B,KAAK,CAAC6C,KAAK;UAAA,WACTlB,aAAa;UAAA,QAChBlB,CAAC,CAACT,KAAK,CAACT,UAAU;QAAC,UAAA+C,YAAA,CAAArE,IAAA;UAAA,WAIlB,MAAM;UAAA,SACN+B,KAAK,CAAC6C,KAAK;UAAA,WACTjB,WAAW;UAAA,QACdnB,CAAC,CAACT,KAAK,CAACR,MAAM;QAAC,UAG3B,GAAGsD;MACN,CAAC;IAGP,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
@@ -7,17 +7,15 @@
7
7
 
8
8
  .v-date-picker
9
9
  overflow: hidden
10
- width: 358px
11
10
 
12
11
  .v-date-picker-month
13
- padding-bottom: 8px
14
12
  padding-inline-start: 12px
15
13
  padding-inline-end: 12px
16
14
 
17
15
  .v-date-picker-month__day
18
- height: 40px
19
- width: 40px
16
+ height: 48px
17
+ width: 48px
20
18
 
21
19
  .v-btn
22
- --v-btn-height: 24px
20
+ --v-btn-height: 28px
23
21
  --v-btn-size: 0.85rem
@@ -4,10 +4,12 @@
4
4
  justify-content: space-between;
5
5
  font-size: 0.875rem;
6
6
  padding-inline-start: 24px;
7
+ padding-top: 4px;
8
+ padding-bottom: 4px;
7
9
  padding-inline-end: 12px;
8
10
  }
9
11
  .v-date-picker-controls .v-btn:last-child {
10
- margin-left: 24px;
12
+ margin-left: 4px;
11
13
  }
12
14
 
13
15
  .v-date-picker-controls__date {
@@ -28,7 +28,7 @@ export const makeVDatePickerControlsProps = propsFactory({
28
28
  },
29
29
  range: {
30
30
  default: false,
31
- type: [String, Boolean],
31
+ type: [Boolean, String],
32
32
  validator: v => v === false || ['start', 'end'].includes(v)
33
33
  },
34
34
  ...omit(makeDateProps(), ['modelValue', 'inputMode'])
@@ -1 +1 @@
1
- {"version":3,"file":"VDatePickerControls.mjs","names":["VBtn","VSpacer","useDate","computed","dateEmits","makeDateProps","genericComponent","omit","propsFactory","useRender","makeVDatePickerControlsProps","nextIcon","type","String","default","prevIcon","expandIcon","collapseIcon","range","Boolean","validator","v","includes","VDatePickerControls","name","props","emits","setup","_ref","emit","adapter","monthAndYear","month","addMonths","displayDate","format","prevBtn","_createVNode","onClick","nextBtn","viewMode","value"],"sources":["../../../src/labs/VDatePicker/VDatePickerControls.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerControls.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VSpacer } from '@/components/VGrid'\n\n// Composables\nimport { useDate } from '@/labs/date'\n\n// Utilities\nimport { computed } from 'vue'\nimport { dateEmits, makeDateProps } from '../VDateInput/composables'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\nexport const makeVDatePickerControlsProps = propsFactory({\n nextIcon: {\n type: [String],\n default: '$next',\n },\n prevIcon: {\n type: [String],\n default: '$prev',\n },\n expandIcon: {\n type: [String],\n default: '$expand',\n },\n collapseIcon: {\n type: [String],\n default: '$collapse',\n },\n range: {\n default: false,\n type: [String, Boolean],\n validator: (v: any) => v === false || ['start', 'end'].includes(v),\n },\n ...omit(makeDateProps(), ['modelValue', 'inputMode']),\n}, 'VDatePickerControls')\n\nexport const VDatePickerControls = genericComponent()({\n name: 'VDatePickerControls',\n\n props: makeVDatePickerControlsProps(),\n\n emits: {\n ...omit(dateEmits, ['update:modelValue', 'update:inputMode']),\n },\n\n setup (props, { emit }) {\n const adapter = useDate()\n const monthAndYear = computed(() => {\n const month = props.range === 'end' ? adapter.addMonths(props.displayDate, 1) : props.displayDate\n return adapter.format(month, 'monthAndYear')\n })\n\n useRender(() => {\n const prevBtn = (\n <VBtn\n variant=\"text\"\n icon={ props.prevIcon }\n onClick={ () => emit('update:displayDate', adapter.addMonths(props.displayDate, -1)) }\n />\n )\n\n const nextBtn = (\n <VBtn\n variant=\"text\"\n icon={ props.nextIcon }\n onClick={ () => emit('update:displayDate', adapter.addMonths(props.displayDate, 1)) }\n />\n )\n\n return (\n <div class=\"v-date-picker-controls\">\n { props.viewMode === 'month' && props.range === 'start' && prevBtn }\n { !!props.range && <VSpacer key=\"range-spacer\" /> }\n <div class=\"v-date-picker-controls__date\">{ monthAndYear.value }</div>\n <VBtn\n key=\"expand-btn\"\n variant=\"text\"\n icon={ props.viewMode === 'month' ? props.expandIcon : props.collapseIcon }\n onClick={ () => emit('update:viewMode', props.viewMode === 'month' ? 'year' : 'month') }\n />\n <VSpacer />\n { (props.viewMode === 'month' && !props.range) && (\n <div key=\"month-buttons\">\n { prevBtn }\n { nextBtn }\n </div>\n )}\n { props.viewMode === 'month' && props.range === 'end' && nextBtn }\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VDatePickerControls = InstanceType<typeof VDatePickerControls>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VDatePickerControls.mjs","names":["VBtn","VSpacer","useDate","computed","dateEmits","makeDateProps","genericComponent","omit","propsFactory","useRender","makeVDatePickerControlsProps","nextIcon","type","String","default","prevIcon","expandIcon","collapseIcon","range","Boolean","validator","v","includes","VDatePickerControls","name","props","emits","setup","_ref","emit","adapter","monthAndYear","month","addMonths","displayDate","format","prevBtn","_createVNode","onClick","nextBtn","viewMode","value"],"sources":["../../../src/labs/VDatePicker/VDatePickerControls.tsx"],"sourcesContent":["// Styles\nimport './VDatePickerControls.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VSpacer } from '@/components/VGrid'\n\n// Composables\nimport { useDate } from '@/labs/date'\n\n// Utilities\nimport { computed } from 'vue'\nimport { dateEmits, makeDateProps } from '../VDateInput/composables'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\nexport const makeVDatePickerControlsProps = propsFactory({\n nextIcon: {\n type: [String],\n default: '$next',\n },\n prevIcon: {\n type: [String],\n default: '$prev',\n },\n expandIcon: {\n type: [String],\n default: '$expand',\n },\n collapseIcon: {\n type: [String],\n default: '$collapse',\n },\n range: {\n default: false,\n type: [Boolean, String],\n validator: (v: any) => v === false || ['start', 'end'].includes(v),\n },\n ...omit(makeDateProps(), ['modelValue', 'inputMode']),\n}, 'VDatePickerControls')\n\nexport const VDatePickerControls = genericComponent()({\n name: 'VDatePickerControls',\n\n props: makeVDatePickerControlsProps(),\n\n emits: {\n ...omit(dateEmits, ['update:modelValue', 'update:inputMode']),\n },\n\n setup (props, { emit }) {\n const adapter = useDate()\n const monthAndYear = computed(() => {\n const month = props.range === 'end' ? adapter.addMonths(props.displayDate, 1) : props.displayDate\n return adapter.format(month, 'monthAndYear')\n })\n\n useRender(() => {\n const prevBtn = (\n <VBtn\n variant=\"text\"\n icon={ props.prevIcon }\n onClick={ () => emit('update:displayDate', adapter.addMonths(props.displayDate, -1)) }\n />\n )\n\n const nextBtn = (\n <VBtn\n variant=\"text\"\n icon={ props.nextIcon }\n onClick={ () => emit('update:displayDate', adapter.addMonths(props.displayDate, 1)) }\n />\n )\n\n return (\n <div class=\"v-date-picker-controls\">\n { props.viewMode === 'month' && props.range === 'start' && prevBtn }\n { !!props.range && <VSpacer key=\"range-spacer\" /> }\n <div class=\"v-date-picker-controls__date\">{ monthAndYear.value }</div>\n <VBtn\n key=\"expand-btn\"\n variant=\"text\"\n icon={ props.viewMode === 'month' ? props.expandIcon : props.collapseIcon }\n onClick={ () => emit('update:viewMode', props.viewMode === 'month' ? 'year' : 'month') }\n />\n <VSpacer />\n { (props.viewMode === 'month' && !props.range) && (\n <div key=\"month-buttons\">\n { prevBtn }\n { nextBtn }\n </div>\n )}\n { props.viewMode === 'month' && props.range === 'end' && nextBtn }\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VDatePickerControls = InstanceType<typeof VDatePickerControls>\n"],"mappings":"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"}
@@ -4,12 +4,12 @@
4
4
  justify-content: space-between
5
5
  font-size: .875rem
6
6
  padding-inline-start: 24px
7
- // padding-top: 4px
8
- // padding-bottom: 4px
7
+ padding-top: 4px
8
+ padding-bottom: 4px
9
9
  padding-inline-end: 12px
10
10
 
11
11
  .v-btn:last-child
12
- margin-left: 24px
12
+ margin-left: 4px
13
13
 
14
14
  .v-date-picker-controls__date
15
15
  margin-right: 4px
@@ -1,7 +1,6 @@
1
1
  .v-date-picker-month {
2
2
  display: flex;
3
3
  justify-content: center;
4
- height: 268px;
5
4
  min-width: 328px;
6
5
  --v-date-picker-month-day-diff: 4px;
7
6
  }
@@ -16,11 +16,6 @@ export const makeVDatePickerMonthProps = propsFactory({
16
16
  showAdjacentMonths: Boolean,
17
17
  hideWeekdays: Boolean,
18
18
  showWeek: Boolean,
19
- range: {
20
- default: false,
21
- type: [String, Boolean],
22
- validator: v => typeof v === 'boolean' || ['start', 'end'].includes(v)
23
- },
24
19
  hoverDate: null,
25
20
  multiple: Boolean,
26
21
  side: {