vuetify 3.1.14 → 3.1.15

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 (97) hide show
  1. package/dist/json/attributes.json +149 -97
  2. package/dist/json/importMap.json +70 -70
  3. package/dist/json/tags.json +13 -0
  4. package/dist/json/web-types.json +440 -209
  5. package/dist/vuetify-labs.css +161 -152
  6. package/dist/vuetify-labs.d.ts +518 -160
  7. package/dist/vuetify-labs.esm.js +176 -116
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +176 -116
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +11 -2
  12. package/dist/vuetify.d.ts +486 -161
  13. package/dist/vuetify.esm.js +118 -68
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +118 -68
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +728 -717
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAutocomplete/VAutocomplete.css +9 -0
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +50 -6
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VAutocomplete/VAutocomplete.sass +10 -0
  24. package/lib/components/VAutocomplete/index.d.ts +29 -17
  25. package/lib/components/VCard/VCard.mjs.map +1 -1
  26. package/lib/components/VCard/index.d.ts +21 -16
  27. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  28. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  29. package/lib/components/VCheckbox/index.d.ts +22 -1
  30. package/lib/components/VCombobox/VCombobox.css +1 -1
  31. package/lib/components/VCombobox/VCombobox.mjs +6 -4
  32. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  33. package/lib/components/VCombobox/VCombobox.sass +1 -1
  34. package/lib/components/VCombobox/index.d.ts +29 -17
  35. package/lib/components/VField/index.d.ts +6 -0
  36. package/lib/components/VFileInput/VFileInput.mjs +13 -17
  37. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  38. package/lib/components/VFileInput/index.d.ts +68 -23
  39. package/lib/components/VInput/VInput.mjs +14 -7
  40. package/lib/components/VInput/VInput.mjs.map +1 -1
  41. package/lib/components/VInput/index.d.ts +22 -1
  42. package/lib/components/VOverlay/locationStrategies.mjs +9 -4
  43. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  44. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  45. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  46. package/lib/components/VRadioGroup/index.d.ts +22 -1
  47. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -2
  48. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  49. package/lib/components/VRangeSlider/index.d.ts +22 -1
  50. package/lib/components/VSelect/VSelect.mjs +6 -0
  51. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  52. package/lib/components/VSelect/index.d.ts +32 -17
  53. package/lib/components/VSlider/VSlider.mjs +2 -2
  54. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  55. package/lib/components/VSlider/index.d.ts +22 -1
  56. package/lib/components/VSwitch/VSwitch.mjs +5 -3
  57. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  58. package/lib/components/VSwitch/index.d.ts +43 -1
  59. package/lib/components/VTextField/VTextField.mjs +4 -12
  60. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  61. package/lib/components/VTextField/index.d.ts +70 -22
  62. package/lib/components/VTextarea/VTextarea.mjs +4 -12
  63. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  64. package/lib/components/VTextarea/index.d.ts +61 -22
  65. package/lib/components/VTreeview/_mixins.sass +0 -0
  66. package/lib/components/VTreeview/util/filterTreeItems.mjs +0 -0
  67. package/lib/components/VValidation/index.d.ts +10 -1
  68. package/lib/components/index.d.ts +465 -140
  69. package/lib/composables/focus.mjs +3 -2
  70. package/lib/composables/focus.mjs.map +1 -1
  71. package/lib/composables/items.mjs +7 -2
  72. package/lib/composables/items.mjs.map +1 -1
  73. package/lib/entry-bundler.mjs +1 -1
  74. package/lib/framework.mjs +1 -1
  75. package/lib/iconsets/mdi-svg.mjs +2 -2
  76. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  77. package/lib/index.d.ts +21 -21
  78. package/lib/labs/VDataTable/VDataTable.mjs +2 -2
  79. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  80. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  81. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  82. package/lib/labs/VDataTable/VDataTableRows.mjs +52 -44
  83. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  84. package/lib/labs/VDataTable/VDataTableServer.mjs +2 -1
  85. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  86. package/lib/labs/VDataTable/VDataTableVirtual.mjs +0 -1
  87. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  88. package/lib/labs/VDataTable/composables/options.mjs +2 -1
  89. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  90. package/lib/labs/VDataTable/index.d.ts +44 -11
  91. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs +1 -0
  92. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  93. package/lib/labs/VSkeletonLoader/index.d.ts +9 -9
  94. package/lib/labs/components.d.ts +53 -20
  95. package/lib/locale/el.mjs +0 -0
  96. package/lib/locale/index.mjs +0 -0
  97. package/package.json +2 -2
@@ -178,10 +178,10 @@ declare const VCombobox: {
178
178
  errorMessages: string | string[];
179
179
  maxErrors: string | number;
180
180
  rules: ValidationRule[];
181
+ persistentHint: boolean;
181
182
  clearable: boolean;
182
183
  persistentClear: boolean;
183
184
  singleLine: boolean;
184
- persistentHint: boolean;
185
185
  persistentPlaceholder: boolean;
186
186
  persistentCounter: boolean;
187
187
  valueComparator: typeof deepEqual;
@@ -269,6 +269,7 @@ declare const VCombobox: {
269
269
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
270
270
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
271
271
  focused: BooleanConstructor;
272
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
272
273
  validateOn: PropType<"input" | "blur" | "submit" | undefined>;
273
274
  errorMessages: {
274
275
  type: PropType<string | string[]>;
@@ -282,12 +283,12 @@ declare const VCombobox: {
282
283
  type: PropType<ValidationRule[]>;
283
284
  default: () => never[];
284
285
  };
286
+ hint: StringConstructor;
287
+ persistentHint: BooleanConstructor;
285
288
  hideDetails: PropType<boolean | "auto">;
286
289
  clearable: BooleanConstructor;
287
290
  persistentClear: BooleanConstructor;
288
291
  singleLine: BooleanConstructor;
289
- hint: StringConstructor;
290
- persistentHint: BooleanConstructor;
291
292
  persistentPlaceholder: BooleanConstructor;
292
293
  persistentCounter: BooleanConstructor;
293
294
  suffix: StringConstructor;
@@ -671,9 +672,10 @@ declare const VCombobox: {
671
672
  noFilter: BooleanConstructor;
672
673
  delimiters: PropType<string[]>;
673
674
  }, "multiple" | "$children" | "$slots" | "v-slots" | "items" | "v-slot:append" | "v-slot:prepend" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:details" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner" | "v-slot:item" | "returnObject" | "v-slot:chip" | "v-slot:selection" | "v-slot:prepend-item" | "v-slot:append-item" | "v-slot:no-data">>> & {
675
+ "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
674
676
  "onUpdate:menu"?: ((val: boolean) => any) | undefined;
675
677
  "onUpdate:search"?: ((val: string) => any) | undefined;
676
- } & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, "reverse" | "type" | "error" | "active" | "direction" | "transition" | "menu" | "autofocus" | "eager" | "disabled" | "readonly" | "noDataText" | "messages" | "density" | "variant" | "clearIcon" | "focused" | "errorMessages" | "maxErrors" | "rules" | "clearable" | "persistentClear" | "singleLine" | "persistentHint" | "persistentPlaceholder" | "persistentCounter" | "valueComparator" | "itemTitle" | "itemValue" | "itemChildren" | "itemProps" | "chips" | "closableChips" | "hideNoData" | "hideSelected" | "menuIcon" | "openOnClear" | "filterMode" | "noFilter" | "filterKeys">;
678
+ } & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, "reverse" | "type" | "error" | "active" | "direction" | "transition" | "menu" | "autofocus" | "eager" | "disabled" | "readonly" | "noDataText" | "messages" | "density" | "variant" | "clearIcon" | "focused" | "errorMessages" | "maxErrors" | "rules" | "persistentHint" | "clearable" | "persistentClear" | "singleLine" | "persistentPlaceholder" | "persistentCounter" | "valueComparator" | "itemTitle" | "itemValue" | "itemChildren" | "itemProps" | "chips" | "closableChips" | "hideNoData" | "hideSelected" | "menuIcon" | "openOnClear" | "filterMode" | "noFilter" | "filterKeys">;
677
679
  $attrs: {
678
680
  [x: string]: unknown;
679
681
  };
@@ -685,7 +687,7 @@ declare const VCombobox: {
685
687
  }>;
686
688
  $root: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null;
687
689
  $parent: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null;
688
- $emit: ((event: "update:menu", val: boolean) => void) & ((event: "update:search", val: string) => void);
690
+ $emit: ((event: "update:focused", focused: boolean) => void) & ((event: "update:menu", val: boolean) => void) & ((event: "update:search", val: string) => void);
689
691
  $el: any;
690
692
  $options: vue.ComponentOptionsBase<Readonly<vue.ExtractPropTypes<Omit<{
691
693
  transition: Omit<{
@@ -758,6 +760,7 @@ declare const VCombobox: {
758
760
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
759
761
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
760
762
  focused: BooleanConstructor;
763
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
761
764
  validateOn: PropType<"input" | "blur" | "submit" | undefined>;
762
765
  errorMessages: {
763
766
  type: PropType<string | string[]>;
@@ -771,12 +774,12 @@ declare const VCombobox: {
771
774
  type: PropType<ValidationRule[]>;
772
775
  default: () => never[];
773
776
  };
777
+ hint: StringConstructor;
778
+ persistentHint: BooleanConstructor;
774
779
  hideDetails: PropType<boolean | "auto">;
775
780
  clearable: BooleanConstructor;
776
781
  persistentClear: BooleanConstructor;
777
782
  singleLine: BooleanConstructor;
778
- hint: StringConstructor;
779
- persistentHint: BooleanConstructor;
780
783
  persistentPlaceholder: BooleanConstructor;
781
784
  persistentCounter: BooleanConstructor;
782
785
  suffix: StringConstructor;
@@ -1160,6 +1163,7 @@ declare const VCombobox: {
1160
1163
  noFilter: BooleanConstructor;
1161
1164
  delimiters: PropType<string[]>;
1162
1165
  }, "multiple" | "$children" | "$slots" | "v-slots" | "items" | "v-slot:append" | "v-slot:prepend" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:details" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner" | "v-slot:item" | "returnObject" | "v-slot:chip" | "v-slot:selection" | "v-slot:prepend-item" | "v-slot:append-item" | "v-slot:no-data">>> & {
1166
+ "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
1163
1167
  "onUpdate:menu"?: ((val: boolean) => any) | undefined;
1164
1168
  "onUpdate:search"?: ((val: string) => any) | undefined;
1165
1169
  }, {
@@ -1171,6 +1175,7 @@ declare const VCombobox: {
1171
1175
  filteredItems: vue.Ref<InternalItem<any>[]>;
1172
1176
  select: (item: InternalItem) => void;
1173
1177
  } & Omit<any, string | number | symbol>, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
1178
+ 'update:focused': (focused: boolean) => true;
1174
1179
  'update:modelValue': (val: any) => true;
1175
1180
  'update:search': (val: string) => true;
1176
1181
  'update:menu': (val: boolean) => true;
@@ -1197,10 +1202,10 @@ declare const VCombobox: {
1197
1202
  errorMessages: string | string[];
1198
1203
  maxErrors: string | number;
1199
1204
  rules: ValidationRule[];
1205
+ persistentHint: boolean;
1200
1206
  clearable: boolean;
1201
1207
  persistentClear: boolean;
1202
1208
  singleLine: boolean;
1203
- persistentHint: boolean;
1204
1209
  persistentPlaceholder: boolean;
1205
1210
  persistentCounter: boolean;
1206
1211
  valueComparator: typeof deepEqual;
@@ -1308,6 +1313,7 @@ declare const VCombobox: {
1308
1313
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
1309
1314
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
1310
1315
  focused: BooleanConstructor;
1316
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
1311
1317
  validateOn: PropType<"input" | "blur" | "submit" | undefined>;
1312
1318
  errorMessages: {
1313
1319
  type: PropType<string | string[]>;
@@ -1321,12 +1327,12 @@ declare const VCombobox: {
1321
1327
  type: PropType<ValidationRule[]>;
1322
1328
  default: () => never[];
1323
1329
  };
1330
+ hint: StringConstructor;
1331
+ persistentHint: BooleanConstructor;
1324
1332
  hideDetails: PropType<boolean | "auto">;
1325
1333
  clearable: BooleanConstructor;
1326
1334
  persistentClear: BooleanConstructor;
1327
1335
  singleLine: BooleanConstructor;
1328
- hint: StringConstructor;
1329
- persistentHint: BooleanConstructor;
1330
1336
  persistentPlaceholder: BooleanConstructor;
1331
1337
  persistentCounter: BooleanConstructor;
1332
1338
  suffix: StringConstructor;
@@ -1710,6 +1716,7 @@ declare const VCombobox: {
1710
1716
  noFilter: BooleanConstructor;
1711
1717
  delimiters: PropType<string[]>;
1712
1718
  }, "multiple" | "$children" | "$slots" | "v-slots" | "items" | "v-slot:append" | "v-slot:prepend" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:details" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner" | "v-slot:item" | "returnObject" | "v-slot:chip" | "v-slot:selection" | "v-slot:prepend-item" | "v-slot:append-item" | "v-slot:no-data">>> & {
1719
+ "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
1713
1720
  "onUpdate:menu"?: ((val: boolean) => any) | undefined;
1714
1721
  "onUpdate:search"?: ((val: string) => any) | undefined;
1715
1722
  } & vue.ShallowUnwrapRef<{
@@ -1795,6 +1802,7 @@ declare const VCombobox: {
1795
1802
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
1796
1803
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
1797
1804
  focused: BooleanConstructor;
1805
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
1798
1806
  validateOn: PropType<"input" | "blur" | "submit" | undefined>;
1799
1807
  errorMessages: {
1800
1808
  type: PropType<string | string[]>;
@@ -1808,12 +1816,12 @@ declare const VCombobox: {
1808
1816
  type: PropType<ValidationRule[]>;
1809
1817
  default: () => never[];
1810
1818
  };
1819
+ hint: StringConstructor;
1820
+ persistentHint: BooleanConstructor;
1811
1821
  hideDetails: PropType<boolean | "auto">;
1812
1822
  clearable: BooleanConstructor;
1813
1823
  persistentClear: BooleanConstructor;
1814
1824
  singleLine: BooleanConstructor;
1815
- hint: StringConstructor;
1816
- persistentHint: BooleanConstructor;
1817
1825
  persistentPlaceholder: BooleanConstructor;
1818
1826
  persistentCounter: BooleanConstructor;
1819
1827
  suffix: StringConstructor;
@@ -2197,6 +2205,7 @@ declare const VCombobox: {
2197
2205
  noFilter: BooleanConstructor;
2198
2206
  delimiters: PropType<string[]>;
2199
2207
  }, "multiple" | "$children" | "$slots" | "v-slots" | "items" | "v-slot:append" | "v-slot:prepend" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:details" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner" | "v-slot:item" | "returnObject" | "v-slot:chip" | "v-slot:selection" | "v-slot:prepend-item" | "v-slot:append-item" | "v-slot:no-data">>> & {
2208
+ "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
2200
2209
  "onUpdate:menu"?: ((val: boolean) => any) | undefined;
2201
2210
  "onUpdate:search"?: ((val: string) => any) | undefined;
2202
2211
  }, {
@@ -2208,6 +2217,7 @@ declare const VCombobox: {
2208
2217
  filteredItems: vue.Ref<InternalItem<any>[]>;
2209
2218
  select: (item: InternalItem) => void;
2210
2219
  } & Omit<any, string | number | symbol>, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
2220
+ 'update:focused': (focused: boolean) => true;
2211
2221
  'update:modelValue': (val: any) => true;
2212
2222
  'update:search': (val: string) => true;
2213
2223
  'update:menu': (val: boolean) => true;
@@ -2234,10 +2244,10 @@ declare const VCombobox: {
2234
2244
  errorMessages: string | string[];
2235
2245
  maxErrors: string | number;
2236
2246
  rules: ValidationRule[];
2247
+ persistentHint: boolean;
2237
2248
  clearable: boolean;
2238
2249
  persistentClear: boolean;
2239
2250
  singleLine: boolean;
2240
- persistentHint: boolean;
2241
2251
  persistentPlaceholder: boolean;
2242
2252
  persistentCounter: boolean;
2243
2253
  valueComparator: typeof deepEqual;
@@ -2441,6 +2451,7 @@ declare const VCombobox: {
2441
2451
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
2442
2452
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
2443
2453
  focused: BooleanConstructor;
2454
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
2444
2455
  validateOn: PropType<"input" | "blur" | "submit" | undefined>;
2445
2456
  errorMessages: {
2446
2457
  type: PropType<string | string[]>;
@@ -2454,12 +2465,12 @@ declare const VCombobox: {
2454
2465
  type: PropType<ValidationRule[]>;
2455
2466
  default: () => never[];
2456
2467
  };
2468
+ hint: StringConstructor;
2469
+ persistentHint: BooleanConstructor;
2457
2470
  hideDetails: PropType<boolean | "auto">;
2458
2471
  clearable: BooleanConstructor;
2459
2472
  persistentClear: BooleanConstructor;
2460
2473
  singleLine: BooleanConstructor;
2461
- hint: StringConstructor;
2462
- persistentHint: BooleanConstructor;
2463
2474
  persistentPlaceholder: BooleanConstructor;
2464
2475
  persistentCounter: BooleanConstructor;
2465
2476
  suffix: StringConstructor;
@@ -2913,6 +2924,7 @@ declare const VCombobox: {
2913
2924
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
2914
2925
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
2915
2926
  focused: BooleanConstructor;
2927
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
2916
2928
  validateOn: PropType<"input" | "blur" | "submit" | undefined>;
2917
2929
  errorMessages: {
2918
2930
  type: PropType<string | string[]>;
@@ -2926,12 +2938,12 @@ declare const VCombobox: {
2926
2938
  type: PropType<ValidationRule[]>;
2927
2939
  default: () => never[];
2928
2940
  };
2941
+ hint: StringConstructor;
2942
+ persistentHint: BooleanConstructor;
2929
2943
  hideDetails: PropType<boolean | "auto">;
2930
2944
  clearable: BooleanConstructor;
2931
2945
  persistentClear: BooleanConstructor;
2932
2946
  singleLine: BooleanConstructor;
2933
- hint: StringConstructor;
2934
- persistentHint: BooleanConstructor;
2935
2947
  persistentPlaceholder: BooleanConstructor;
2936
2948
  persistentCounter: BooleanConstructor;
2937
2949
  suffix: StringConstructor;
@@ -85,6 +85,7 @@ declare const VField: {
85
85
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
86
86
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
87
87
  focused: BooleanConstructor;
88
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
88
89
  id: StringConstructor;
89
90
  }, "$children" | "v-slot:default" | "$slots" | "v-slots" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner">>> & {
90
91
  "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
@@ -131,6 +132,7 @@ declare const VField: {
131
132
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
132
133
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
133
134
  focused: BooleanConstructor;
135
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
134
136
  id: StringConstructor;
135
137
  }, "$children" | "v-slot:default" | "$slots" | "v-slots" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner">>> & {
136
138
  "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
@@ -200,6 +202,7 @@ declare const VField: {
200
202
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
201
203
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
202
204
  focused: BooleanConstructor;
205
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
203
206
  id: StringConstructor;
204
207
  }, "$children" | "v-slot:default" | "$slots" | "v-slots" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner">>> & {
205
208
  "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
@@ -238,6 +241,7 @@ declare const VField: {
238
241
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
239
242
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
240
243
  focused: BooleanConstructor;
244
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
241
245
  id: StringConstructor;
242
246
  }, "$children" | "v-slot:default" | "$slots" | "v-slots" | "modelValue" | "onUpdate:modelValue" | "v-slot:loader" | "v-slot:clear" | "v-slot:label" | "v-slot:prepend-inner" | "v-slot:append-inner">>> & {
243
247
  "onUpdate:focused"?: ((focused: boolean) => any) | undefined;
@@ -324,6 +328,7 @@ declare const VField: {
324
328
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
325
329
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
326
330
  focused: BooleanConstructor;
331
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
327
332
  id: StringConstructor;
328
333
  }, vue.ExtractPropTypes<{
329
334
  loading: (StringConstructor | BooleanConstructor)[];
@@ -354,6 +359,7 @@ declare const VField: {
354
359
  'onClick:appendInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
355
360
  'onClick:prependInner': PropType<EventProp<[MouseEvent], (args_0: MouseEvent) => any>>;
356
361
  focused: BooleanConstructor;
362
+ 'onUpdate:focused': PropType<EventProp<[FocusEvent], (args_0: FocusEvent) => any>>;
357
363
  id: StringConstructor;
358
364
  }>>;
359
365
  type VField = InstanceType<typeof VField>;
@@ -4,11 +4,12 @@ import "./VFileInput.css";
4
4
 
5
5
  // Components
6
6
  import { filterFieldProps, makeVFieldProps } from "../VField/VField.mjs";
7
- import { filterInputProps, makeVInputProps, VInput } from "../VInput/VInput.mjs";
7
+ import { makeVInputProps, VInput } from "../VInput/VInput.mjs";
8
8
  import { VChip } from "../VChip/index.mjs";
9
9
  import { VCounter } from "../VCounter/index.mjs";
10
10
  import { VField } from "../VField/index.mjs"; // Composables
11
11
  import { forwardRefs } from "../../composables/forwardRefs.mjs";
12
+ import { useFocus } from "../../composables/focus.mjs";
12
13
  import { useLocale } from "../../composables/locale.mjs";
13
14
  import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
14
15
  import { computed, nextTick, ref, watch } from 'vue';
@@ -28,8 +29,6 @@ export const VFileInput = genericComponent()({
28
29
  default: '$vuetify.fileInput.counter'
29
30
  },
30
31
  multiple: Boolean,
31
- hint: String,
32
- persistentHint: Boolean,
33
32
  showSize: {
34
33
  type: [Boolean, Number],
35
34
  default: false,
@@ -54,6 +53,7 @@ export const VFileInput = genericComponent()({
54
53
  emits: {
55
54
  'click:control': e => true,
56
55
  'mousedown:control': e => true,
56
+ 'update:focused': focused => true,
57
57
  'update:modelValue': files => true
58
58
  },
59
59
  setup(props, _ref) {
@@ -66,6 +66,11 @@ export const VFileInput = genericComponent()({
66
66
  t
67
67
  } = useLocale();
68
68
  const model = useProxiedModel(props, 'modelValue');
69
+ const {
70
+ isFocused,
71
+ focus,
72
+ blur
73
+ } = useFocus(props);
69
74
  const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined);
70
75
  const totalBytes = computed(() => (model.value ?? []).reduce((bytes, _ref2) => {
71
76
  let {
@@ -87,21 +92,14 @@ export const VFileInput = genericComponent()({
87
92
  });
88
93
  const vInputRef = ref();
89
94
  const vFieldRef = ref();
90
- const isFocused = ref(false);
91
95
  const inputRef = ref();
92
- const messages = computed(() => {
93
- return props.messages.length ? props.messages : props.persistentHint ? props.hint : '';
94
- });
95
96
  function onFocus() {
96
97
  if (inputRef.value !== document.activeElement) {
97
98
  inputRef.value?.focus();
98
99
  }
99
- if (!isFocused.value) {
100
- isFocused.value = true;
101
- }
100
+ if (!isFocused.value) focus();
102
101
  }
103
102
  function onClickPrepend(e) {
104
- callEvent(props['onClick:prepend'], e);
105
103
  onControlClick(e);
106
104
  }
107
105
  function onControlMousedown(e) {
@@ -132,18 +130,16 @@ export const VFileInput = genericComponent()({
132
130
  const [{
133
131
  modelValue: _,
134
132
  ...inputProps
135
- }] = filterInputProps(props);
133
+ }] = VInput.filterProps(props);
136
134
  const [fieldProps] = filterFieldProps(props);
137
135
  return _createVNode(VInput, _mergeProps({
138
136
  "ref": vInputRef,
139
137
  "modelValue": model.value,
140
138
  "onUpdate:modelValue": $event => model.value = $event,
141
139
  "class": "v-file-input",
142
- "onClick:prepend": onClickPrepend,
143
- "onClick:append": props['onClick:append']
140
+ "onClick:prepend": onClickPrepend
144
141
  }, rootAttrs, inputProps, {
145
- "focused": isFocused.value,
146
- "messages": messages.value
142
+ "focused": isFocused.value
147
143
  }), {
148
144
  ...slots,
149
145
  default: _ref3 => {
@@ -195,7 +191,7 @@ export const VFileInput = genericComponent()({
195
191
  model.value = [...(target.files ?? [])];
196
192
  },
197
193
  "onFocus": onFocus,
198
- "onBlur": () => isFocused.value = false
194
+ "onBlur": blur
199
195
  }, slotProps, inputAttrs), null), _createVNode("div", {
200
196
  "class": fieldClass
201
197
  }, [!!model.value?.length && (slots.selection ? slots.selection({
@@ -1 +1 @@
1
- {"version":3,"file":"VFileInput.mjs","names":["filterFieldProps","makeVFieldProps","filterInputProps","makeVInputProps","VInput","VChip","VCounter","VField","forwardRefs","useLocale","useProxiedModel","computed","nextTick","ref","watch","callEvent","filterInputAttrs","genericComponent","humanReadableFileSize","useRender","wrapInArray","VFileInput","name","inheritAttrs","props","chips","Boolean","counter","counterSizeString","type","String","default","counterString","multiple","hint","persistentHint","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","val","every","clearable","emits","e","files","setup","_ref","attrs","emit","slots","t","model","base","undefined","totalBytes","value","reduce","bytes","_ref2","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","isFocused","inputRef","messages","onFocus","document","activeElement","focus","onClickPrepend","onControlClick","onControlMousedown","click","onClear","stopPropagation","newValue","hasModelReset","isArray","hasCounter","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","fieldProps","_createVNode","_mergeProps","$event","_ref3","id","isDisabled","isDirty","isReadonly","isValid","_ref4","class","fieldClass","slotProps","_Fragment","target","onBlur","selection","text","color","join"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, watch } from 'vue'\nimport {\n callEvent,\n filterInputAttrs,\n genericComponent,\n humanReadableFileSize,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VFileInputSlots = VInputSlots & VFieldSlots & MakeSlots<{\n counter: []\n}>\n\nexport const VFileInput = genericComponent<VFileInputSlots>()({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: {\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n multiple: Boolean,\n hint: String,\n persistentHint: Boolean,\n showSize: {\n type: [Boolean, Number] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(v)\n )\n },\n },\n\n ...makeVInputProps({ prependIcon: '$file' }),\n\n modelValue: {\n type: Array as PropType<File[]>,\n default: () => ([]),\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n },\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(props, 'modelValue')\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const isFocused = ref(false)\n const inputRef = ref<HTMLInputElement>()\n const messages = computed(() => {\n return props.messages.length\n ? props.messages\n : (props.persistentHint) ? props.hint : ''\n })\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) {\n isFocused.value = true\n }\n }\n function onClickPrepend (e: MouseEvent) {\n callEvent(props['onClick:prepend'], e)\n onControlClick(e)\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n callEvent(props['onClick:clear'], e)\n })\n }\n\n watch(model, newValue => {\n const hasModelReset = !Array.isArray(newValue) || !newValue.length\n\n if (hasModelReset && inputRef.value) {\n inputRef.value.value = ''\n }\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [{ modelValue: _, ...inputProps }] = filterInputProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class=\"v-file-input\"\n onClick:prepend={ onClickPrepend }\n onClick:append={ props['onClick:append'] }\n { ...rootAttrs }\n { ...inputProps }\n focused={ isFocused.value }\n messages={ messages.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n prepend-icon={ props.prependIcon }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\n id={ id.value }\n active={ isDirty.value || isFocused.value }\n dirty={ isDirty.value }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n onFocus()\n }}\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n onFocus={ onFocus }\n onBlur={ () => (isFocused.value = false) }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n <div class={ fieldClass }>\n { !!model.value?.length && (\n slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n color={ props.color }\n >{ text }</VChip>\n ))\n : fileNames.value.join(', ')\n )}\n </div>\n </>\n ),\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ !!model.value?.length }\n value={ counterValue.value }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VFileInput.mjs","names":["filterFieldProps","makeVFieldProps","makeVInputProps","VInput","VChip","VCounter","VField","forwardRefs","useFocus","useLocale","useProxiedModel","computed","nextTick","ref","watch","callEvent","filterInputAttrs","genericComponent","humanReadableFileSize","useRender","wrapInArray","VFileInput","name","inheritAttrs","props","chips","Boolean","counter","counterSizeString","type","String","default","counterString","multiple","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","val","every","clearable","emits","e","focused","files","setup","_ref","attrs","emit","slots","t","model","isFocused","focus","blur","base","undefined","totalBytes","value","reduce","bytes","_ref2","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","inputRef","onFocus","document","activeElement","onClickPrepend","onControlClick","onControlMousedown","click","onClear","stopPropagation","newValue","hasModelReset","isArray","hasCounter","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","$event","_ref3","id","isDisabled","isDirty","isReadonly","isValid","_ref4","class","fieldClass","slotProps","_Fragment","target","selection","text","color","join"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useFocus } from '@/composables/focus'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, watch } from 'vue'\nimport {\n callEvent,\n filterInputAttrs,\n genericComponent,\n humanReadableFileSize,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VFileInputSlots = VInputSlots & VFieldSlots & MakeSlots<{\n counter: []\n}>\n\nexport const VFileInput = genericComponent<VFileInputSlots>()({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: {\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n multiple: Boolean,\n showSize: {\n type: [Boolean, Number] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(v)\n )\n },\n },\n\n ...makeVInputProps({ prependIcon: '$file' }),\n\n modelValue: {\n type: Array as PropType<File[]>,\n default: () => ([]),\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n },\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(props, 'modelValue')\n const { isFocused, focus, blur } = useFocus(props)\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const inputRef = ref<HTMLInputElement>()\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onClickPrepend (e: MouseEvent) {\n onControlClick(e)\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n callEvent(props['onClick:clear'], e)\n })\n }\n\n watch(model, newValue => {\n const hasModelReset = !Array.isArray(newValue) || !newValue.length\n\n if (hasModelReset && inputRef.value) {\n inputRef.value.value = ''\n }\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [{ modelValue: _, ...inputProps }] = VInput.filterProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class=\"v-file-input\"\n onClick:prepend={ onClickPrepend }\n { ...rootAttrs }\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n prepend-icon={ props.prependIcon }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\n id={ id.value }\n active={ isDirty.value || isFocused.value }\n dirty={ isDirty.value }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n onFocus()\n }}\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n <div class={ fieldClass }>\n { !!model.value?.length && (\n slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n color={ props.color }\n >{ text }</VChip>\n ))\n : fileNames.value.join(', ')\n )}\n </div>\n </>\n ),\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ !!model.value?.length }\n value={ counterValue.value }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n"],"mappings":"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"}