vuetify 3.3.19 → 3.3.21

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 (105) hide show
  1. package/dist/json/attributes.json +43 -31
  2. package/dist/json/importMap-labs.json +4 -4
  3. package/dist/json/importMap.json +4 -4
  4. package/dist/json/tags.json +3 -0
  5. package/dist/json/web-types.json +97 -70
  6. package/dist/vuetify-labs.css +5073 -5056
  7. package/dist/vuetify-labs.d.ts +240 -220
  8. package/dist/vuetify-labs.esm.js +101 -62
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +101 -62
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +5452 -5440
  13. package/dist/vuetify.d.ts +168 -166
  14. package/dist/vuetify.esm.js +56 -41
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +56 -41
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +775 -773
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/blueprints/index.d.mts +2 -0
  22. package/lib/blueprints/md1.d.mts +2 -0
  23. package/lib/blueprints/md2.d.mts +2 -0
  24. package/lib/blueprints/md3.d.mts +2 -0
  25. package/lib/components/VAutocomplete/index.d.mts +14 -14
  26. package/lib/components/VCheckbox/index.d.mts +8 -8
  27. package/lib/components/VChip/VChip.css +67 -67
  28. package/lib/components/VChip/_variables.scss +1 -1
  29. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +1 -0
  30. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  31. package/lib/components/VCombobox/VCombobox.mjs +1 -1
  32. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  33. package/lib/components/VCombobox/index.d.mts +14 -14
  34. package/lib/components/VField/VField.css +3 -0
  35. package/lib/components/VField/VField.sass +3 -0
  36. package/lib/components/VField/_variables.scss +1 -0
  37. package/lib/components/VFileInput/index.d.mts +20 -20
  38. package/lib/components/VInput/index.d.mts +8 -8
  39. package/lib/components/VList/VList.css +0 -3
  40. package/lib/components/VList/VList.sass +0 -4
  41. package/lib/components/VList/VListItem.css +9 -1
  42. package/lib/components/VList/VListItem.sass +12 -1
  43. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +8 -7
  44. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  45. package/lib/components/VRadioGroup/index.d.mts +8 -8
  46. package/lib/components/VRangeSlider/index.d.mts +8 -8
  47. package/lib/components/VSelect/index.d.mts +14 -14
  48. package/lib/components/VSlider/VSliderThumb.css +2 -0
  49. package/lib/components/VSlider/VSliderThumb.mjs +7 -6
  50. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  51. package/lib/components/VSlider/VSliderThumb.sass +2 -0
  52. package/lib/components/VSlider/VSliderTrack.mjs +5 -7
  53. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  54. package/lib/components/VSlider/index.d.mts +8 -8
  55. package/lib/components/VSlider/slider.mjs +4 -10
  56. package/lib/components/VSlider/slider.mjs.map +1 -1
  57. package/lib/components/VSwitch/index.d.mts +8 -8
  58. package/lib/components/VTable/VTable.css +3 -0
  59. package/lib/components/VTable/VTable.sass +3 -0
  60. package/lib/components/VTextField/VTextField.mjs +1 -1
  61. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  62. package/lib/components/VTextField/index.d.mts +26 -26
  63. package/lib/components/VTextarea/index.d.mts +20 -20
  64. package/lib/components/VTimeline/VTimeline.css +0 -1
  65. package/lib/components/VTimeline/VTimeline.sass +0 -1
  66. package/lib/components/VValidation/index.d.mts +8 -8
  67. package/lib/components/index.d.mts +164 -164
  68. package/lib/composables/forwardRefs.mjs +4 -4
  69. package/lib/composables/forwardRefs.mjs.map +1 -1
  70. package/lib/composables/validation.mjs +2 -2
  71. package/lib/composables/validation.mjs.map +1 -1
  72. package/lib/entry-bundler.mjs +1 -1
  73. package/lib/framework.mjs +1 -1
  74. package/lib/index.d.mts +4 -2
  75. package/lib/labs/VDataTable/VDataTableFooter.mjs +12 -4
  76. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  77. package/lib/labs/VDataTable/VDataTableVirtual.mjs +5 -5
  78. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  79. package/lib/labs/VDataTable/composables/select.mjs +6 -6
  80. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  81. package/lib/labs/VDataTable/index.d.mts +48 -48
  82. package/lib/labs/VDateInput/index.d.mts +14 -14
  83. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +14 -2
  84. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  85. package/lib/labs/VDatePicker/index.d.mts +18 -0
  86. package/lib/labs/VDateRangePicker/index.d.mts +12 -0
  87. package/lib/labs/VOtpInput/VOtpInput.css +3 -2
  88. package/lib/labs/VOtpInput/VOtpInput.mjs +7 -4
  89. package/lib/labs/VOtpInput/VOtpInput.mjs.map +1 -1
  90. package/lib/labs/VOtpInput/VOtpInput.sass +9 -8
  91. package/lib/labs/VOtpInput/_variables.scss +9 -0
  92. package/lib/labs/VSkeletonLoader/VSkeletonLoader.css +4 -0
  93. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs +2 -1
  94. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  95. package/lib/labs/VSkeletonLoader/VSkeletonLoader.sass +4 -0
  96. package/lib/labs/VSkeletonLoader/index.d.mts +8 -8
  97. package/lib/labs/components.d.mts +74 -56
  98. package/lib/labs/date/DateAdapter.mjs.map +1 -1
  99. package/lib/labs/date/adapters/vuetify.d.mts +4 -0
  100. package/lib/labs/date/adapters/vuetify.mjs +18 -1
  101. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  102. package/lib/labs/date/date.mjs +1 -1
  103. package/lib/labs/date/date.mjs.map +1 -1
  104. package/lib/labs/date/index.d.mts +4 -0
  105. package/package.json +2 -2
@@ -146,6 +146,8 @@ interface DateAdapter<T> {
146
146
  date(value?: any): T | null;
147
147
  format(date: T, formatString: string): string;
148
148
  toJsDate(value: T): Date;
149
+ parseISO(date: string): T;
150
+ toISO(date: T): string;
149
151
  startOfDay(date: T): T;
150
152
  endOfDay(date: T): T;
151
153
  startOfMonth(date: T): T;
@@ -146,6 +146,8 @@ interface DateAdapter<T> {
146
146
  date(value?: any): T | null;
147
147
  format(date: T, formatString: string): string;
148
148
  toJsDate(value: T): Date;
149
+ parseISO(date: string): T;
150
+ toISO(date: T): string;
149
151
  startOfDay(date: T): T;
150
152
  endOfDay(date: T): T;
151
153
  startOfMonth(date: T): T;
@@ -146,6 +146,8 @@ interface DateAdapter<T> {
146
146
  date(value?: any): T | null;
147
147
  format(date: T, formatString: string): string;
148
148
  toJsDate(value: T): Date;
149
+ parseISO(date: string): T;
150
+ toISO(date: T): string;
149
151
  startOfDay(date: T): T;
150
152
  endOfDay(date: T): T;
151
153
  startOfMonth(date: T): T;
@@ -146,6 +146,8 @@ interface DateAdapter<T> {
146
146
  date(value?: any): T | null;
147
147
  format(date: T, formatString: string): string;
148
148
  toJsDate(value: T): Date;
149
+ parseISO(date: string): T;
150
+ toISO(date: T): string;
149
151
  startOfDay(date: T): T;
150
152
  endOfDay(date: T): T;
151
153
  startOfMonth(date: T): T;
@@ -232,7 +232,7 @@ declare const VAutocomplete: {
232
232
  valueComparator?: typeof deepEqual | undefined;
233
233
  clearIcon?: IconValue | undefined;
234
234
  focused?: boolean | undefined;
235
- errorMessages?: string | readonly string[] | undefined;
235
+ errorMessages?: string | readonly string[] | null | undefined;
236
236
  maxErrors?: string | number | undefined;
237
237
  rules?: readonly ValidationRule[] | undefined;
238
238
  centerAffix?: boolean | undefined;
@@ -271,7 +271,7 @@ declare const VAutocomplete: {
271
271
  ref_for?: boolean | undefined;
272
272
  ref_key?: string | undefined;
273
273
  theme?: string | undefined;
274
- counter?: string | number | true | undefined;
274
+ counter?: string | number | boolean | undefined;
275
275
  onVnodeBeforeMount?: ((vnode: vue.VNode<vue.RendererNode, vue.RendererElement, {
276
276
  [key: string]: any;
277
277
  }>) => void) | ((vnode: vue.VNode<vue.RendererNode, vue.RendererElement, {
@@ -544,7 +544,7 @@ declare const VAutocomplete: {
544
544
  valueComparator: typeof deepEqual;
545
545
  clearIcon: IconValue;
546
546
  focused: boolean;
547
- errorMessages: string | readonly string[];
547
+ errorMessages: string | readonly string[] | null;
548
548
  maxErrors: string | number;
549
549
  rules: readonly ValidationRule[];
550
550
  persistentHint: boolean;
@@ -579,7 +579,7 @@ declare const VAutocomplete: {
579
579
  class?: any;
580
580
  placeholder?: string | undefined;
581
581
  theme?: string | undefined;
582
- counter?: string | number | true | undefined;
582
+ counter?: string | number | boolean | undefined;
583
583
  rounded?: string | number | boolean | undefined;
584
584
  bgColor?: string | undefined;
585
585
  prependIcon?: IconValue | undefined;
@@ -752,7 +752,7 @@ declare const VAutocomplete: {
752
752
  valueComparator: typeof deepEqual;
753
753
  clearIcon: IconValue;
754
754
  focused: boolean;
755
- errorMessages: string | readonly string[];
755
+ errorMessages: string | readonly string[] | null;
756
756
  maxErrors: string | number;
757
757
  rules: readonly ValidationRule[];
758
758
  centerAffix: boolean;
@@ -881,7 +881,7 @@ declare const VAutocomplete: {
881
881
  valueComparator: typeof deepEqual;
882
882
  clearIcon: IconValue;
883
883
  focused: boolean;
884
- errorMessages: string | readonly string[];
884
+ errorMessages: string | readonly string[] | null;
885
885
  maxErrors: string | number;
886
886
  rules: readonly ValidationRule[];
887
887
  persistentHint: boolean;
@@ -916,7 +916,7 @@ declare const VAutocomplete: {
916
916
  class?: any;
917
917
  placeholder?: string | undefined;
918
918
  theme?: string | undefined;
919
- counter?: string | number | true | undefined;
919
+ counter?: string | number | boolean | undefined;
920
920
  rounded?: string | number | boolean | undefined;
921
921
  bgColor?: string | undefined;
922
922
  prependIcon?: IconValue | undefined;
@@ -1087,7 +1087,7 @@ declare const VAutocomplete: {
1087
1087
  valueComparator: typeof deepEqual;
1088
1088
  clearIcon: IconValue;
1089
1089
  focused: boolean;
1090
- errorMessages: string | readonly string[];
1090
+ errorMessages: string | readonly string[] | null;
1091
1091
  maxErrors: string | number;
1092
1092
  rules: readonly ValidationRule[];
1093
1093
  persistentHint: boolean;
@@ -1122,7 +1122,7 @@ declare const VAutocomplete: {
1122
1122
  class?: any;
1123
1123
  placeholder?: string | undefined;
1124
1124
  theme?: string | undefined;
1125
- counter?: string | number | true | undefined;
1125
+ counter?: string | number | boolean | undefined;
1126
1126
  rounded?: string | number | boolean | undefined;
1127
1127
  bgColor?: string | undefined;
1128
1128
  prependIcon?: IconValue | undefined;
@@ -1295,7 +1295,7 @@ declare const VAutocomplete: {
1295
1295
  valueComparator: typeof deepEqual;
1296
1296
  clearIcon: IconValue;
1297
1297
  focused: boolean;
1298
- errorMessages: string | readonly string[];
1298
+ errorMessages: string | readonly string[] | null;
1299
1299
  maxErrors: string | number;
1300
1300
  rules: readonly ValidationRule[];
1301
1301
  centerAffix: boolean;
@@ -1482,7 +1482,7 @@ declare const VAutocomplete: {
1482
1482
  class: PropType<any>;
1483
1483
  placeholder: StringConstructor;
1484
1484
  theme: StringConstructor;
1485
- counter: PropType<string | number | true>;
1485
+ counter: (StringConstructor | BooleanConstructor | NumberConstructor)[];
1486
1486
  messages: {
1487
1487
  type: PropType<string | readonly string[]>;
1488
1488
  default: () => never[];
@@ -1522,7 +1522,7 @@ declare const VAutocomplete: {
1522
1522
  'onUpdate:focused': PropType<EventProp<[boolean], (args_0: boolean) => any>>;
1523
1523
  validateOn: PropType<"lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined>;
1524
1524
  errorMessages: {
1525
- type: PropType<string | readonly string[]>;
1525
+ type: PropType<string | readonly string[] | null>;
1526
1526
  default: () => never[];
1527
1527
  };
1528
1528
  maxErrors: {
@@ -1787,7 +1787,7 @@ declare const VAutocomplete: {
1787
1787
  class: PropType<any>;
1788
1788
  placeholder: StringConstructor;
1789
1789
  theme: StringConstructor;
1790
- counter: PropType<string | number | true>;
1790
+ counter: (StringConstructor | BooleanConstructor | NumberConstructor)[];
1791
1791
  messages: {
1792
1792
  type: PropType<string | readonly string[]>;
1793
1793
  default: () => never[];
@@ -1827,7 +1827,7 @@ declare const VAutocomplete: {
1827
1827
  'onUpdate:focused': PropType<EventProp<[boolean], (args_0: boolean) => any>>;
1828
1828
  validateOn: PropType<"lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined>;
1829
1829
  errorMessages: {
1830
- type: PropType<string | readonly string[]>;
1830
+ type: PropType<string | readonly string[] | null>;
1831
1831
  default: () => never[];
1832
1832
  };
1833
1833
  maxErrors: {
@@ -70,7 +70,7 @@ declare const VCheckbox: {
70
70
  valueComparator?: typeof deepEqual | undefined;
71
71
  indeterminateIcon?: IconValue | undefined;
72
72
  focused?: boolean | undefined;
73
- errorMessages?: string | readonly string[] | undefined;
73
+ errorMessages?: string | readonly string[] | null | undefined;
74
74
  maxErrors?: string | number | undefined;
75
75
  rules?: readonly ValidationRule[] | undefined;
76
76
  centerAffix?: boolean | undefined;
@@ -241,7 +241,7 @@ declare const VCheckbox: {
241
241
  valueComparator: typeof deepEqual;
242
242
  indeterminateIcon: IconValue;
243
243
  focused: boolean;
244
- errorMessages: string | readonly string[];
244
+ errorMessages: string | readonly string[] | null;
245
245
  maxErrors: string | number;
246
246
  rules: readonly ValidationRule[];
247
247
  centerAffix: boolean;
@@ -338,7 +338,7 @@ declare const VCheckbox: {
338
338
  valueComparator: typeof deepEqual;
339
339
  indeterminateIcon: IconValue;
340
340
  focused: boolean;
341
- errorMessages: string | readonly string[];
341
+ errorMessages: string | readonly string[] | null;
342
342
  maxErrors: string | number;
343
343
  rules: readonly ValidationRule[];
344
344
  centerAffix: boolean;
@@ -407,7 +407,7 @@ declare const VCheckbox: {
407
407
  valueComparator: typeof deepEqual;
408
408
  indeterminateIcon: IconValue;
409
409
  focused: boolean;
410
- errorMessages: string | readonly string[];
410
+ errorMessages: string | readonly string[] | null;
411
411
  maxErrors: string | number;
412
412
  rules: readonly ValidationRule[];
413
413
  centerAffix: boolean;
@@ -505,7 +505,7 @@ declare const VCheckbox: {
505
505
  valueComparator: typeof deepEqual;
506
506
  indeterminateIcon: IconValue;
507
507
  focused: boolean;
508
- errorMessages: string | readonly string[];
508
+ errorMessages: string | readonly string[] | null;
509
509
  maxErrors: string | number;
510
510
  rules: readonly ValidationRule[];
511
511
  centerAffix: boolean;
@@ -602,7 +602,7 @@ declare const VCheckbox: {
602
602
  valueComparator: typeof deepEqual;
603
603
  indeterminateIcon: IconValue;
604
604
  focused: boolean;
605
- errorMessages: string | readonly string[];
605
+ errorMessages: string | readonly string[] | null;
606
606
  maxErrors: string | number;
607
607
  rules: readonly ValidationRule[];
608
608
  centerAffix: boolean;
@@ -691,7 +691,7 @@ declare const VCheckbox: {
691
691
  focused: BooleanConstructor;
692
692
  'onUpdate:focused': vue.PropType<EventProp<[boolean], (args_0: boolean) => any>>;
693
693
  errorMessages: {
694
- type: vue.PropType<string | readonly string[]>;
694
+ type: vue.PropType<string | readonly string[] | null>;
695
695
  default: () => never[];
696
696
  };
697
697
  maxErrors: {
@@ -780,7 +780,7 @@ declare const VCheckbox: {
780
780
  focused: BooleanConstructor;
781
781
  'onUpdate:focused': vue.PropType<EventProp<[boolean], (args_0: boolean) => any>>;
782
782
  errorMessages: {
783
- type: vue.PropType<string | readonly string[]>;
783
+ type: vue.PropType<string | readonly string[] | null>;
784
784
  default: () => never[];
785
785
  };
786
786
  maxErrors: {
@@ -17,162 +17,162 @@
17
17
  }
18
18
  .v-chip.v-chip--size-x-small {
19
19
  --v-chip-size: 0.625rem;
20
- --v-chip-height: 18px;
20
+ --v-chip-height: 20px;
21
21
  font-size: 0.625rem;
22
- padding: 0 7px;
22
+ padding: 0 8px;
23
23
  }
24
24
  .v-chip.v-chip--size-x-small .v-avatar {
25
- --v-avatar-height: 12px;
25
+ --v-avatar-height: 14px;
26
26
  }
27
27
  .v-chip--pill.v-chip.v-chip--size-x-small .v-avatar {
28
- --v-avatar-height: 18px;
28
+ --v-avatar-height: 20px;
29
29
  }
30
30
 
31
31
  .v-chip.v-chip--size-x-small .v-avatar--start {
32
- margin-inline-start: -4.9px;
33
- margin-inline-end: 3.5px;
32
+ margin-inline-start: -5.6px;
33
+ margin-inline-end: 4px;
34
34
  }
35
35
  .v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--start {
36
- margin-inline-start: -7px;
36
+ margin-inline-start: -8px;
37
37
  }
38
38
 
39
39
  .v-chip.v-chip--size-x-small .v-avatar--end {
40
- margin-inline-start: 3.5px;
41
- margin-inline-end: -4.9px;
40
+ margin-inline-start: 4px;
41
+ margin-inline-end: -5.6px;
42
42
  }
43
43
  .v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--end {
44
- margin-inline-end: -7px;
44
+ margin-inline-end: -8px;
45
45
  }
46
46
 
47
47
  .v-chip--pill.v-chip.v-chip--size-x-small .v-avatar--end + .v-chip__close {
48
- margin-inline-start: 10.5px;
48
+ margin-inline-start: 12px;
49
49
  }
50
50
 
51
51
  .v-chip.v-chip--size-x-small .v-icon--start,
52
52
  .v-chip.v-chip--size-x-small .v-chip__filter {
53
- margin-inline-start: -3.5px;
54
- margin-inline-end: 3.5px;
53
+ margin-inline-start: -4px;
54
+ margin-inline-end: 4px;
55
55
  }
56
56
  .v-chip.v-chip--size-x-small .v-icon--end,
57
57
  .v-chip.v-chip--size-x-small .v-chip__close {
58
- margin-inline-start: 3.5px;
59
- margin-inline-end: -3.5px;
58
+ margin-inline-start: 4px;
59
+ margin-inline-end: -4px;
60
60
  }
61
61
  .v-chip.v-chip--size-x-small .v-icon--end + .v-chip__close,
62
62
  .v-chip.v-chip--size-x-small .v-avatar--end + .v-chip__close,
63
63
  .v-chip.v-chip--size-x-small .v-chip__append + .v-chip__close {
64
- margin-inline-start: 7px;
64
+ margin-inline-start: 8px;
65
65
  }
66
66
 
67
67
  .v-chip.v-chip--size-small {
68
68
  --v-chip-size: 0.75rem;
69
- --v-chip-height: 24px;
69
+ --v-chip-height: 26px;
70
70
  font-size: 0.75rem;
71
- padding: 0 9px;
71
+ padding: 0 10px;
72
72
  }
73
73
  .v-chip.v-chip--size-small .v-avatar {
74
- --v-avatar-height: 18px;
74
+ --v-avatar-height: 20px;
75
75
  }
76
76
  .v-chip--pill.v-chip.v-chip--size-small .v-avatar {
77
- --v-avatar-height: 24px;
77
+ --v-avatar-height: 26px;
78
78
  }
79
79
 
80
80
  .v-chip.v-chip--size-small .v-avatar--start {
81
- margin-inline-start: -6.3px;
82
- margin-inline-end: 4.5px;
81
+ margin-inline-start: -7px;
82
+ margin-inline-end: 5px;
83
83
  }
84
84
  .v-chip--pill.v-chip.v-chip--size-small .v-avatar--start {
85
- margin-inline-start: -9px;
85
+ margin-inline-start: -10px;
86
86
  }
87
87
 
88
88
  .v-chip.v-chip--size-small .v-avatar--end {
89
- margin-inline-start: 4.5px;
90
- margin-inline-end: -6.3px;
89
+ margin-inline-start: 5px;
90
+ margin-inline-end: -7px;
91
91
  }
92
92
  .v-chip--pill.v-chip.v-chip--size-small .v-avatar--end {
93
- margin-inline-end: -9px;
93
+ margin-inline-end: -10px;
94
94
  }
95
95
 
96
96
  .v-chip--pill.v-chip.v-chip--size-small .v-avatar--end + .v-chip__close {
97
- margin-inline-start: 13.5px;
97
+ margin-inline-start: 15px;
98
98
  }
99
99
 
100
100
  .v-chip.v-chip--size-small .v-icon--start,
101
101
  .v-chip.v-chip--size-small .v-chip__filter {
102
- margin-inline-start: -4.5px;
103
- margin-inline-end: 4.5px;
102
+ margin-inline-start: -5px;
103
+ margin-inline-end: 5px;
104
104
  }
105
105
  .v-chip.v-chip--size-small .v-icon--end,
106
106
  .v-chip.v-chip--size-small .v-chip__close {
107
- margin-inline-start: 4.5px;
108
- margin-inline-end: -4.5px;
107
+ margin-inline-start: 5px;
108
+ margin-inline-end: -5px;
109
109
  }
110
110
  .v-chip.v-chip--size-small .v-icon--end + .v-chip__close,
111
111
  .v-chip.v-chip--size-small .v-avatar--end + .v-chip__close,
112
112
  .v-chip.v-chip--size-small .v-chip__append + .v-chip__close {
113
- margin-inline-start: 9px;
113
+ margin-inline-start: 10px;
114
114
  }
115
115
 
116
116
  .v-chip.v-chip--size-default {
117
117
  --v-chip-size: 0.875rem;
118
- --v-chip-height: 30px;
118
+ --v-chip-height: 32px;
119
119
  font-size: 0.875rem;
120
- padding: 0 11px;
120
+ padding: 0 12px;
121
121
  }
122
122
  .v-chip.v-chip--size-default .v-avatar {
123
- --v-avatar-height: 24px;
123
+ --v-avatar-height: 26px;
124
124
  }
125
125
  .v-chip--pill.v-chip.v-chip--size-default .v-avatar {
126
- --v-avatar-height: 30px;
126
+ --v-avatar-height: 32px;
127
127
  }
128
128
 
129
129
  .v-chip.v-chip--size-default .v-avatar--start {
130
- margin-inline-start: -7.7px;
131
- margin-inline-end: 5.5px;
130
+ margin-inline-start: -8.4px;
131
+ margin-inline-end: 6px;
132
132
  }
133
133
  .v-chip--pill.v-chip.v-chip--size-default .v-avatar--start {
134
- margin-inline-start: -11px;
134
+ margin-inline-start: -12px;
135
135
  }
136
136
 
137
137
  .v-chip.v-chip--size-default .v-avatar--end {
138
- margin-inline-start: 5.5px;
139
- margin-inline-end: -7.7px;
138
+ margin-inline-start: 6px;
139
+ margin-inline-end: -8.4px;
140
140
  }
141
141
  .v-chip--pill.v-chip.v-chip--size-default .v-avatar--end {
142
- margin-inline-end: -11px;
142
+ margin-inline-end: -12px;
143
143
  }
144
144
 
145
145
  .v-chip--pill.v-chip.v-chip--size-default .v-avatar--end + .v-chip__close {
146
- margin-inline-start: 16.5px;
146
+ margin-inline-start: 18px;
147
147
  }
148
148
 
149
149
  .v-chip.v-chip--size-default .v-icon--start,
150
150
  .v-chip.v-chip--size-default .v-chip__filter {
151
- margin-inline-start: -5.5px;
152
- margin-inline-end: 5.5px;
151
+ margin-inline-start: -6px;
152
+ margin-inline-end: 6px;
153
153
  }
154
154
  .v-chip.v-chip--size-default .v-icon--end,
155
155
  .v-chip.v-chip--size-default .v-chip__close {
156
- margin-inline-start: 5.5px;
157
- margin-inline-end: -5.5px;
156
+ margin-inline-start: 6px;
157
+ margin-inline-end: -6px;
158
158
  }
159
159
  .v-chip.v-chip--size-default .v-icon--end + .v-chip__close,
160
160
  .v-chip.v-chip--size-default .v-avatar--end + .v-chip__close,
161
161
  .v-chip.v-chip--size-default .v-chip__append + .v-chip__close {
162
- margin-inline-start: 11px;
162
+ margin-inline-start: 12px;
163
163
  }
164
164
 
165
165
  .v-chip.v-chip--size-large {
166
166
  --v-chip-size: 1rem;
167
- --v-chip-height: 36px;
167
+ --v-chip-height: 38px;
168
168
  font-size: 1rem;
169
169
  padding: 0 14px;
170
170
  }
171
171
  .v-chip.v-chip--size-large .v-avatar {
172
- --v-avatar-height: 30px;
172
+ --v-avatar-height: 32px;
173
173
  }
174
174
  .v-chip--pill.v-chip.v-chip--size-large .v-avatar {
175
- --v-avatar-height: 36px;
175
+ --v-avatar-height: 38px;
176
176
  }
177
177
 
178
178
  .v-chip.v-chip--size-large .v-avatar--start {
@@ -213,51 +213,51 @@
213
213
 
214
214
  .v-chip.v-chip--size-x-large {
215
215
  --v-chip-size: 1.125rem;
216
- --v-chip-height: 42px;
216
+ --v-chip-height: 44px;
217
217
  font-size: 1.125rem;
218
- padding: 0 16px;
218
+ padding: 0 17px;
219
219
  }
220
220
  .v-chip.v-chip--size-x-large .v-avatar {
221
- --v-avatar-height: 36px;
221
+ --v-avatar-height: 38px;
222
222
  }
223
223
  .v-chip--pill.v-chip.v-chip--size-x-large .v-avatar {
224
- --v-avatar-height: 42px;
224
+ --v-avatar-height: 44px;
225
225
  }
226
226
 
227
227
  .v-chip.v-chip--size-x-large .v-avatar--start {
228
- margin-inline-start: -11.2px;
229
- margin-inline-end: 8px;
228
+ margin-inline-start: -11.9px;
229
+ margin-inline-end: 8.5px;
230
230
  }
231
231
  .v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--start {
232
- margin-inline-start: -16px;
232
+ margin-inline-start: -17px;
233
233
  }
234
234
 
235
235
  .v-chip.v-chip--size-x-large .v-avatar--end {
236
- margin-inline-start: 8px;
237
- margin-inline-end: -11.2px;
236
+ margin-inline-start: 8.5px;
237
+ margin-inline-end: -11.9px;
238
238
  }
239
239
  .v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--end {
240
- margin-inline-end: -16px;
240
+ margin-inline-end: -17px;
241
241
  }
242
242
 
243
243
  .v-chip--pill.v-chip.v-chip--size-x-large .v-avatar--end + .v-chip__close {
244
- margin-inline-start: 24px;
244
+ margin-inline-start: 25.5px;
245
245
  }
246
246
 
247
247
  .v-chip.v-chip--size-x-large .v-icon--start,
248
248
  .v-chip.v-chip--size-x-large .v-chip__filter {
249
- margin-inline-start: -8px;
250
- margin-inline-end: 8px;
249
+ margin-inline-start: -8.5px;
250
+ margin-inline-end: 8.5px;
251
251
  }
252
252
  .v-chip.v-chip--size-x-large .v-icon--end,
253
253
  .v-chip.v-chip--size-x-large .v-chip__close {
254
- margin-inline-start: 8px;
255
- margin-inline-end: -8px;
254
+ margin-inline-start: 8.5px;
255
+ margin-inline-end: -8.5px;
256
256
  }
257
257
  .v-chip.v-chip--size-x-large .v-icon--end + .v-chip__close,
258
258
  .v-chip.v-chip--size-x-large .v-avatar--end + .v-chip__close,
259
259
  .v-chip.v-chip--size-x-large .v-chip__append + .v-chip__close {
260
- margin-inline-start: 16px;
260
+ margin-inline-start: 17px;
261
261
  }
262
262
 
263
263
  .v-chip.v-chip--density-default {
@@ -17,7 +17,7 @@ $chip-disabled-opacity: 0.3 !default;
17
17
  $chip-elevation: 1 !default;
18
18
  $chip-font-size: tools.map-deep-get(settings.$typography, "button", "size") !default;
19
19
  $chip-font-weight: 400 !default;
20
- $chip-height: 30px !default;
20
+ $chip-height: 32px !default;
21
21
  $chip-icon-font-size: 1.25rem !default;
22
22
  $chip-label-border-radius: settings.$border-radius-root !default;
23
23
  $chip-max-width: 100% !default;
@@ -53,6 +53,7 @@ export const VColorPickerCanvas = defineComponent({
53
53
  x,
54
54
  y
55
55
  } = val;
56
+ _dotPosition.value = val;
56
57
  emit('update:color', {
57
58
  h: props.color?.h ?? 0,
58
59
  s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
@@ -1 +1 @@
1
- {"version":3,"file":"VColorPickerCanvas.mjs","names":["makeComponentProps","useResizeObserver","computed","onMounted","ref","shallowRef","watch","clamp","convertToUnit","defineComponent","getEventCoordinates","propsFactory","useRender","makeVColorPickerCanvasProps","color","type","Object","disabled","Boolean","dotSize","Number","String","default","height","width","VColorPickerCanvas","name","props","emits","hue","setup","_ref","emit","isInteracting","canvasRef","canvasWidth","parseFloat","canvasHeight","_dotPosition","x","y","dotPosition","get","value","set","val","h","s","v","a","dotStyles","radius","parseInt","transform","resizeRef","entries","offsetParent","contentRect","updateDotPosition","rect","left","top","handleMouseDown","e","preventDefault","handleMouseMove","window","addEventListener","handleMouseUp","coords","clientX","clientY","getBoundingClientRect","removeEventListener","updateCanvas","canvas","ctx","getContext","saturationGradient","createLinearGradient","addColorStop","fillStyle","fillRect","valueGradient","immediate","newVal","oldVal","flush","deep","_createVNode","class","style"],"sources":["../../../src/components/VColorPicker/VColorPickerCanvas.tsx"],"sourcesContent":["// Styles\nimport './VColorPickerCanvas.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { clamp, convertToUnit, defineComponent, getEventCoordinates, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { HSV } from '@/util'\n\nexport const makeVColorPickerCanvasProps = propsFactory({\n color: {\n type: Object as PropType<HSV | null>,\n },\n disabled: Boolean,\n dotSize: {\n type: [Number, String],\n default: 10,\n },\n height: {\n type: [Number, String],\n default: 150,\n },\n width: {\n type: [Number, String],\n default: 300,\n },\n\n ...makeComponentProps(),\n}, 'VColorPickerCanvas')\n\nexport const VColorPickerCanvas = defineComponent({\n name: 'VColorPickerCanvas',\n\n props: makeVColorPickerCanvasProps(),\n\n emits: {\n 'update:color': (color: HSV) => true,\n 'update:position': (hue: any) => true,\n },\n\n setup (props, { emit }) {\n const isInteracting = shallowRef(false)\n const canvasRef = ref<HTMLCanvasElement | null>()\n const canvasWidth = shallowRef(parseFloat(props.width))\n const canvasHeight = shallowRef(parseFloat(props.height))\n\n const _dotPosition = ref({ x: 0, y: 0 })\n const dotPosition = computed({\n get: () => _dotPosition.value,\n set (val) {\n if (!canvasRef.value) return\n\n const { x, y } = val\n\n emit('update:color', {\n h: props.color?.h ?? 0,\n s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,\n v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,\n a: props.color?.a ?? 1,\n })\n },\n })\n\n const dotStyles = computed(() => {\n const { x, y } = dotPosition.value\n const radius = parseInt(props.dotSize, 10) / 2\n\n return {\n width: convertToUnit(props.dotSize),\n height: convertToUnit(props.dotSize),\n transform: `translate(${convertToUnit(x - radius)}, ${convertToUnit(y - radius)})`,\n }\n })\n\n const { resizeRef } = useResizeObserver(entries => {\n if (!resizeRef.value?.offsetParent) return\n\n const { width, height } = entries[0].contentRect\n\n canvasWidth.value = width\n canvasHeight.value = height\n })\n\n function updateDotPosition (x: number, y: number, rect: DOMRect) {\n const { left, top, width, height } = rect\n dotPosition.value = {\n x: clamp(x - left, 0, width),\n y: clamp(y - top, 0, height),\n }\n }\n\n function handleMouseDown (e: MouseEvent | TouchEvent) {\n if (e.type === 'mousedown') {\n // Prevent text selection while dragging\n e.preventDefault()\n }\n\n if (props.disabled) return\n\n handleMouseMove(e)\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n window.addEventListener('touchmove', handleMouseMove)\n window.addEventListener('touchend', handleMouseUp)\n }\n\n function handleMouseMove (e: MouseEvent | TouchEvent) {\n if (props.disabled || !canvasRef.value) return\n\n isInteracting.value = true\n\n const coords = getEventCoordinates(e)\n\n updateDotPosition(coords.clientX, coords.clientY, canvasRef.value.getBoundingClientRect())\n }\n\n function handleMouseUp () {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n window.removeEventListener('touchmove', handleMouseMove)\n window.removeEventListener('touchend', handleMouseUp)\n }\n\n function updateCanvas () {\n if (!canvasRef.value) return\n\n const canvas = canvasRef.value\n const ctx = canvas.getContext('2d')\n\n if (!ctx) return\n\n const saturationGradient = ctx.createLinearGradient(0, 0, canvas.width, 0)\n saturationGradient.addColorStop(0, 'hsla(0, 0%, 100%, 1)') // white\n saturationGradient.addColorStop(1, `hsla(${props.color?.h ?? 0}, 100%, 50%, 1)`)\n ctx.fillStyle = saturationGradient\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n\n const valueGradient = ctx.createLinearGradient(0, 0, 0, canvas.height)\n valueGradient.addColorStop(0, 'hsla(0, 0%, 100%, 0)') // transparent\n valueGradient.addColorStop(1, 'hsla(0, 0%, 0%, 1)') // black\n ctx.fillStyle = valueGradient\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n }\n\n watch(() => props.color?.h, updateCanvas, { immediate: true })\n watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {\n updateCanvas()\n _dotPosition.value = {\n x: dotPosition.value.x * newVal[0] / oldVal[0],\n y: dotPosition.value.y * newVal[1] / oldVal[1],\n }\n }, { flush: 'post' })\n\n watch(() => props.color, () => {\n if (isInteracting.value) {\n isInteracting.value = false\n return\n }\n\n _dotPosition.value = props.color ? {\n x: props.color.s * canvasWidth.value,\n y: (1 - props.color.v) * canvasHeight.value,\n } : { x: 0, y: 0 }\n }, { deep: true, immediate: true })\n\n onMounted(() => updateCanvas())\n\n useRender(() => (\n <div\n ref={ resizeRef }\n class={[\n 'v-color-picker-canvas',\n props.class,\n ]}\n style={ props.style }\n onMousedown={ handleMouseDown }\n onTouchstartPassive={ handleMouseDown }\n >\n <canvas\n ref={ canvasRef }\n width={ canvasWidth.value }\n height={ canvasHeight.value }\n />\n { props.color && (\n <div\n class={[\n 'v-color-picker-canvas__dot',\n {\n 'v-color-picker-canvas__dot--disabled': props.disabled,\n },\n ]}\n style={ dotStyles.value }\n />\n )}\n </div>\n ))\n\n return {}\n },\n})\n\nexport type VColorPickerCanvas = InstanceType<typeof VColorPickerCanvas>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VColorPickerCanvas.mjs","names":["makeComponentProps","useResizeObserver","computed","onMounted","ref","shallowRef","watch","clamp","convertToUnit","defineComponent","getEventCoordinates","propsFactory","useRender","makeVColorPickerCanvasProps","color","type","Object","disabled","Boolean","dotSize","Number","String","default","height","width","VColorPickerCanvas","name","props","emits","hue","setup","_ref","emit","isInteracting","canvasRef","canvasWidth","parseFloat","canvasHeight","_dotPosition","x","y","dotPosition","get","value","set","val","h","s","v","a","dotStyles","radius","parseInt","transform","resizeRef","entries","offsetParent","contentRect","updateDotPosition","rect","left","top","handleMouseDown","e","preventDefault","handleMouseMove","window","addEventListener","handleMouseUp","coords","clientX","clientY","getBoundingClientRect","removeEventListener","updateCanvas","canvas","ctx","getContext","saturationGradient","createLinearGradient","addColorStop","fillStyle","fillRect","valueGradient","immediate","newVal","oldVal","flush","deep","_createVNode","class","style"],"sources":["../../../src/components/VColorPicker/VColorPickerCanvas.tsx"],"sourcesContent":["// Styles\nimport './VColorPickerCanvas.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { clamp, convertToUnit, defineComponent, getEventCoordinates, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { HSV } from '@/util'\n\nexport const makeVColorPickerCanvasProps = propsFactory({\n color: {\n type: Object as PropType<HSV | null>,\n },\n disabled: Boolean,\n dotSize: {\n type: [Number, String],\n default: 10,\n },\n height: {\n type: [Number, String],\n default: 150,\n },\n width: {\n type: [Number, String],\n default: 300,\n },\n\n ...makeComponentProps(),\n}, 'VColorPickerCanvas')\n\nexport const VColorPickerCanvas = defineComponent({\n name: 'VColorPickerCanvas',\n\n props: makeVColorPickerCanvasProps(),\n\n emits: {\n 'update:color': (color: HSV) => true,\n 'update:position': (hue: any) => true,\n },\n\n setup (props, { emit }) {\n const isInteracting = shallowRef(false)\n const canvasRef = ref<HTMLCanvasElement | null>()\n const canvasWidth = shallowRef(parseFloat(props.width))\n const canvasHeight = shallowRef(parseFloat(props.height))\n\n const _dotPosition = ref({ x: 0, y: 0 })\n const dotPosition = computed({\n get: () => _dotPosition.value,\n set (val) {\n if (!canvasRef.value) return\n\n const { x, y } = val\n _dotPosition.value = val\n\n emit('update:color', {\n h: props.color?.h ?? 0,\n s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,\n v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,\n a: props.color?.a ?? 1,\n })\n },\n })\n\n const dotStyles = computed(() => {\n const { x, y } = dotPosition.value\n const radius = parseInt(props.dotSize, 10) / 2\n\n return {\n width: convertToUnit(props.dotSize),\n height: convertToUnit(props.dotSize),\n transform: `translate(${convertToUnit(x - radius)}, ${convertToUnit(y - radius)})`,\n }\n })\n\n const { resizeRef } = useResizeObserver(entries => {\n if (!resizeRef.value?.offsetParent) return\n\n const { width, height } = entries[0].contentRect\n\n canvasWidth.value = width\n canvasHeight.value = height\n })\n\n function updateDotPosition (x: number, y: number, rect: DOMRect) {\n const { left, top, width, height } = rect\n dotPosition.value = {\n x: clamp(x - left, 0, width),\n y: clamp(y - top, 0, height),\n }\n }\n\n function handleMouseDown (e: MouseEvent | TouchEvent) {\n if (e.type === 'mousedown') {\n // Prevent text selection while dragging\n e.preventDefault()\n }\n\n if (props.disabled) return\n\n handleMouseMove(e)\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n window.addEventListener('touchmove', handleMouseMove)\n window.addEventListener('touchend', handleMouseUp)\n }\n\n function handleMouseMove (e: MouseEvent | TouchEvent) {\n if (props.disabled || !canvasRef.value) return\n\n isInteracting.value = true\n\n const coords = getEventCoordinates(e)\n\n updateDotPosition(coords.clientX, coords.clientY, canvasRef.value.getBoundingClientRect())\n }\n\n function handleMouseUp () {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n window.removeEventListener('touchmove', handleMouseMove)\n window.removeEventListener('touchend', handleMouseUp)\n }\n\n function updateCanvas () {\n if (!canvasRef.value) return\n\n const canvas = canvasRef.value\n const ctx = canvas.getContext('2d')\n\n if (!ctx) return\n\n const saturationGradient = ctx.createLinearGradient(0, 0, canvas.width, 0)\n saturationGradient.addColorStop(0, 'hsla(0, 0%, 100%, 1)') // white\n saturationGradient.addColorStop(1, `hsla(${props.color?.h ?? 0}, 100%, 50%, 1)`)\n ctx.fillStyle = saturationGradient\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n\n const valueGradient = ctx.createLinearGradient(0, 0, 0, canvas.height)\n valueGradient.addColorStop(0, 'hsla(0, 0%, 100%, 0)') // transparent\n valueGradient.addColorStop(1, 'hsla(0, 0%, 0%, 1)') // black\n ctx.fillStyle = valueGradient\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n }\n\n watch(() => props.color?.h, updateCanvas, { immediate: true })\n watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {\n updateCanvas()\n _dotPosition.value = {\n x: dotPosition.value.x * newVal[0] / oldVal[0],\n y: dotPosition.value.y * newVal[1] / oldVal[1],\n }\n }, { flush: 'post' })\n\n watch(() => props.color, () => {\n if (isInteracting.value) {\n isInteracting.value = false\n return\n }\n\n _dotPosition.value = props.color ? {\n x: props.color.s * canvasWidth.value,\n y: (1 - props.color.v) * canvasHeight.value,\n } : { x: 0, y: 0 }\n }, { deep: true, immediate: true })\n\n onMounted(() => updateCanvas())\n\n useRender(() => (\n <div\n ref={ resizeRef }\n class={[\n 'v-color-picker-canvas',\n props.class,\n ]}\n style={ props.style }\n onMousedown={ handleMouseDown }\n onTouchstartPassive={ handleMouseDown }\n >\n <canvas\n ref={ canvasRef }\n width={ canvasWidth.value }\n height={ canvasHeight.value }\n />\n { props.color && (\n <div\n class={[\n 'v-color-picker-canvas__dot',\n {\n 'v-color-picker-canvas__dot--disabled': props.disabled,\n },\n ]}\n style={ dotStyles.value }\n />\n )}\n </div>\n ))\n\n return {}\n },\n})\n\nexport type VColorPickerCanvas = InstanceType<typeof VColorPickerCanvas>\n"],"mappings":"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"}
@@ -110,7 +110,7 @@ export const VCombobox = genericComponent()({
110
110
  return _search.value;
111
111
  },
112
112
  set: val => {
113
- _search.value = val;
113
+ _search.value = val ?? '';
114
114
  if (!props.multiple) {
115
115
  model.value = [transformItem(props, val)];
116
116
  }