@vuetify/nightly 3.11.8-dev.2026-02-01 → 3.11.8-dev.2026-02-07

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 (37) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +3962 -3918
  4. package/dist/json/importMap-labs.json +18 -14
  5. package/dist/json/importMap.json +156 -156
  6. package/dist/json/tags.json +16 -0
  7. package/dist/json/web-types.json +7051 -6886
  8. package/dist/vuetify-labs.cjs +86 -3
  9. package/dist/vuetify-labs.css +4728 -4680
  10. package/dist/vuetify-labs.d.ts +350 -55
  11. package/dist/vuetify-labs.esm.js +86 -3
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +86 -3
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.cjs +3 -3
  16. package/dist/vuetify.css +3116 -3116
  17. package/dist/vuetify.d.ts +55 -54
  18. package/dist/vuetify.esm.js +3 -3
  19. package/dist/vuetify.js +3 -3
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +3 -3
  22. package/lib/entry-bundler.js +1 -1
  23. package/lib/framework.d.ts +55 -54
  24. package/lib/framework.js +1 -1
  25. package/lib/labs/VAvatarGroup/VAvatarGroup.css +49 -0
  26. package/lib/labs/VAvatarGroup/VAvatarGroup.d.ts +401 -0
  27. package/lib/labs/VAvatarGroup/VAvatarGroup.js +91 -0
  28. package/lib/labs/VAvatarGroup/VAvatarGroup.js.map +1 -0
  29. package/lib/labs/VAvatarGroup/VAvatarGroup.scss +79 -0
  30. package/lib/labs/VAvatarGroup/_variables.scss +6 -0
  31. package/lib/labs/VAvatarGroup/index.d.ts +1 -0
  32. package/lib/labs/VAvatarGroup/index.js +2 -0
  33. package/lib/labs/VAvatarGroup/index.js.map +1 -0
  34. package/lib/labs/components.d.ts +1 -0
  35. package/lib/labs/components.js +1 -0
  36. package/lib/labs/components.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,401 @@
1
+ // Styles
2
+
3
+ // Types
4
+ import type { PropType } from 'vue';
5
+ import type { SelectItemKey } from '../../util/index.js';
6
+ export type AvatarGroupItem = string | Record<string, any>;
7
+ export type VAvatarGroupSlots = {
8
+ default: never;
9
+ prepend: never;
10
+ append: never;
11
+ item: {
12
+ props: any;
13
+ index: number;
14
+ };
15
+ overflow: {
16
+ overflow: number;
17
+ };
18
+ };
19
+ export declare const makeVAvatarGroupProps: <Defaults extends {
20
+ class?: unknown;
21
+ style?: unknown;
22
+ tag?: unknown;
23
+ border?: unknown;
24
+ gap?: unknown;
25
+ hoverable?: unknown;
26
+ items?: unknown;
27
+ itemProps?: unknown;
28
+ limit?: unknown;
29
+ overflowText?: unknown;
30
+ reverse?: unknown;
31
+ size?: unknown;
32
+ vertical?: unknown;
33
+ } = {}>(defaults?: Defaults | undefined) => {
34
+ class: unknown extends Defaults["class"] ? PropType<any> : {
35
+ type: PropType<unknown extends Defaults["class"] ? any : any>;
36
+ default: unknown extends Defaults["class"] ? any : any;
37
+ };
38
+ style: unknown extends Defaults["style"] ? {
39
+ type: PropType<import("vue").StyleValue>;
40
+ default: null;
41
+ } : Omit<{
42
+ type: PropType<import("vue").StyleValue>;
43
+ default: null;
44
+ }, "default" | "type"> & {
45
+ type: PropType<unknown extends Defaults["style"] ? import("vue").StyleValue : Defaults["style"] | import("vue").StyleValue>;
46
+ default: unknown extends Defaults["style"] ? import("vue").StyleValue : Defaults["style"] | NonNullable<import("vue").StyleValue>;
47
+ };
48
+ tag: unknown extends Defaults["tag"] ? {
49
+ type: PropType<string | import("../../util/index.js").JSXComponent>;
50
+ default: string;
51
+ } : Omit<{
52
+ type: PropType<string | import("../../util/index.js").JSXComponent>;
53
+ default: string;
54
+ }, "default" | "type"> & {
55
+ type: PropType<unknown extends Defaults["tag"] ? string | import("../../util/index.js").JSXComponent : string | Defaults["tag"] | import("../../util/index.js").JSXComponent>;
56
+ default: unknown extends Defaults["tag"] ? string | import("../../util/index.js").JSXComponent : Defaults["tag"] | NonNullable<string | import("../../util/index.js").JSXComponent>;
57
+ };
58
+ border: unknown extends Defaults["border"] ? (BooleanConstructor | NumberConstructor | StringConstructor)[] : {
59
+ type: PropType<unknown extends Defaults["border"] ? string | number | boolean : string | number | boolean | Defaults["border"]>;
60
+ default: unknown extends Defaults["border"] ? string | number | boolean : Defaults["border"] | NonNullable<string | number | boolean>;
61
+ };
62
+ gap: unknown extends Defaults["gap"] ? (NumberConstructor | StringConstructor)[] : {
63
+ type: PropType<unknown extends Defaults["gap"] ? string | number : string | number | Defaults["gap"]>;
64
+ default: unknown extends Defaults["gap"] ? string | number : Defaults["gap"] | NonNullable<string | number>;
65
+ };
66
+ hoverable: unknown extends Defaults["hoverable"] ? BooleanConstructor : {
67
+ type: PropType<unknown extends Defaults["hoverable"] ? boolean : boolean | Defaults["hoverable"]>;
68
+ default: unknown extends Defaults["hoverable"] ? boolean : boolean | Defaults["hoverable"];
69
+ };
70
+ items: unknown extends Defaults["items"] ? {
71
+ type: PropType<AvatarGroupItem[]>;
72
+ default: () => never[];
73
+ } : Omit<{
74
+ type: PropType<AvatarGroupItem[]>;
75
+ default: () => never[];
76
+ }, "default" | "type"> & {
77
+ type: PropType<unknown extends Defaults["items"] ? AvatarGroupItem[] : AvatarGroupItem[] | Defaults["items"]>;
78
+ default: unknown extends Defaults["items"] ? AvatarGroupItem[] : AvatarGroupItem[] | Defaults["items"];
79
+ };
80
+ itemProps: unknown extends Defaults["itemProps"] ? {
81
+ type: PropType<SelectItemKey>;
82
+ default: null;
83
+ } : Omit<{
84
+ type: PropType<SelectItemKey>;
85
+ default: null;
86
+ }, "default" | "type"> & {
87
+ type: PropType<unknown extends Defaults["itemProps"] ? SelectItemKey : Defaults["itemProps"] | SelectItemKey>;
88
+ default: unknown extends Defaults["itemProps"] ? SelectItemKey : Defaults["itemProps"] | NonNullable<SelectItemKey>;
89
+ };
90
+ limit: unknown extends Defaults["limit"] ? NumberConstructor : {
91
+ type: PropType<unknown extends Defaults["limit"] ? number : number | Defaults["limit"]>;
92
+ default: unknown extends Defaults["limit"] ? number : number | Defaults["limit"];
93
+ };
94
+ overflowText: unknown extends Defaults["overflowText"] ? StringConstructor : {
95
+ type: PropType<unknown extends Defaults["overflowText"] ? string : string | Defaults["overflowText"]>;
96
+ default: unknown extends Defaults["overflowText"] ? string : string | Defaults["overflowText"];
97
+ };
98
+ reverse: unknown extends Defaults["reverse"] ? BooleanConstructor : {
99
+ type: PropType<unknown extends Defaults["reverse"] ? boolean : boolean | Defaults["reverse"]>;
100
+ default: unknown extends Defaults["reverse"] ? boolean : boolean | Defaults["reverse"];
101
+ };
102
+ size: unknown extends Defaults["size"] ? (NumberConstructor | StringConstructor)[] : {
103
+ type: PropType<unknown extends Defaults["size"] ? string | number : string | number | Defaults["size"]>;
104
+ default: unknown extends Defaults["size"] ? string | number : Defaults["size"] | NonNullable<string | number>;
105
+ };
106
+ vertical: unknown extends Defaults["vertical"] ? BooleanConstructor : {
107
+ type: PropType<unknown extends Defaults["vertical"] ? boolean : boolean | Defaults["vertical"]>;
108
+ default: unknown extends Defaults["vertical"] ? boolean : boolean | Defaults["vertical"];
109
+ };
110
+ };
111
+ export declare const VAvatarGroup: {
112
+ new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
113
+ style: string | false | import("vue").StyleValue[] | import("vue").CSSProperties | null;
114
+ tag: string | import("../../util/index.js").JSXComponent;
115
+ hoverable: boolean;
116
+ items: AvatarGroupItem[];
117
+ itemProps: string | boolean | readonly (string | number)[] | ((item: Record<string, any>, fallback?: any) => any) | null;
118
+ reverse: boolean;
119
+ vertical: boolean;
120
+ } & {
121
+ class?: any;
122
+ border?: string | number | boolean | undefined;
123
+ gap?: string | number | undefined;
124
+ limit?: number | undefined;
125
+ overflowText?: string | undefined;
126
+ size?: string | number | undefined;
127
+ } & {
128
+ $children?: {
129
+ default?: (() => import("vue").VNodeChild) | undefined;
130
+ prepend?: (() => import("vue").VNodeChild) | undefined;
131
+ append?: (() => import("vue").VNodeChild) | undefined;
132
+ item?: ((arg: {
133
+ props: any;
134
+ index: number;
135
+ }) => import("vue").VNodeChild) | undefined;
136
+ overflow?: ((arg: {
137
+ overflow: number;
138
+ }) => import("vue").VNodeChild) | undefined;
139
+ } | {
140
+ $stable?: boolean | undefined;
141
+ } | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
142
+ "v-slots"?: {
143
+ default?: false | (() => import("vue").VNodeChild) | undefined;
144
+ prepend?: false | (() => import("vue").VNodeChild) | undefined;
145
+ append?: false | (() => import("vue").VNodeChild) | undefined;
146
+ item?: false | ((arg: {
147
+ props: any;
148
+ index: number;
149
+ }) => import("vue").VNodeChild) | undefined;
150
+ overflow?: false | ((arg: {
151
+ overflow: number;
152
+ }) => import("vue").VNodeChild) | undefined;
153
+ } | undefined;
154
+ } & {
155
+ "v-slot:append"?: false | (() => import("vue").VNodeChild) | undefined;
156
+ "v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
157
+ "v-slot:item"?: false | ((arg: {
158
+ props: any;
159
+ index: number;
160
+ }) => import("vue").VNodeChild) | undefined;
161
+ "v-slot:overflow"?: false | ((arg: {
162
+ overflow: number;
163
+ }) => import("vue").VNodeChild) | undefined;
164
+ "v-slot:prepend"?: false | (() => import("vue").VNodeChild) | undefined;
165
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
166
+ style: import("vue").StyleValue;
167
+ tag: string | import("../../util/index.js").JSXComponent;
168
+ hoverable: boolean;
169
+ items: AvatarGroupItem[];
170
+ itemProps: SelectItemKey;
171
+ reverse: boolean;
172
+ vertical: boolean;
173
+ }, true, {}, import("vue").SlotsType<Partial<{
174
+ default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
175
+ [key: string]: any;
176
+ }>[];
177
+ prepend: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
178
+ [key: string]: any;
179
+ }>[];
180
+ append: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
181
+ [key: string]: any;
182
+ }>[];
183
+ item: (arg: {
184
+ props: any;
185
+ index: number;
186
+ }) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
187
+ [key: string]: any;
188
+ }>[];
189
+ overflow: (arg: {
190
+ overflow: number;
191
+ }) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
192
+ [key: string]: any;
193
+ }>[];
194
+ }>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
195
+ P: {};
196
+ B: {};
197
+ D: {};
198
+ C: {};
199
+ M: {};
200
+ Defaults: {};
201
+ }, {
202
+ style: string | false | import("vue").StyleValue[] | import("vue").CSSProperties | null;
203
+ tag: string | import("../../util/index.js").JSXComponent;
204
+ hoverable: boolean;
205
+ items: AvatarGroupItem[];
206
+ itemProps: string | boolean | readonly (string | number)[] | ((item: Record<string, any>, fallback?: any) => any) | null;
207
+ reverse: boolean;
208
+ vertical: boolean;
209
+ } & {
210
+ class?: any;
211
+ border?: string | number | boolean | undefined;
212
+ gap?: string | number | undefined;
213
+ limit?: number | undefined;
214
+ overflowText?: string | undefined;
215
+ size?: string | number | undefined;
216
+ } & {
217
+ $children?: {
218
+ default?: (() => import("vue").VNodeChild) | undefined;
219
+ prepend?: (() => import("vue").VNodeChild) | undefined;
220
+ append?: (() => import("vue").VNodeChild) | undefined;
221
+ item?: ((arg: {
222
+ props: any;
223
+ index: number;
224
+ }) => import("vue").VNodeChild) | undefined;
225
+ overflow?: ((arg: {
226
+ overflow: number;
227
+ }) => import("vue").VNodeChild) | undefined;
228
+ } | {
229
+ $stable?: boolean | undefined;
230
+ } | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
231
+ "v-slots"?: {
232
+ default?: false | (() => import("vue").VNodeChild) | undefined;
233
+ prepend?: false | (() => import("vue").VNodeChild) | undefined;
234
+ append?: false | (() => import("vue").VNodeChild) | undefined;
235
+ item?: false | ((arg: {
236
+ props: any;
237
+ index: number;
238
+ }) => import("vue").VNodeChild) | undefined;
239
+ overflow?: false | ((arg: {
240
+ overflow: number;
241
+ }) => import("vue").VNodeChild) | undefined;
242
+ } | undefined;
243
+ } & {
244
+ "v-slot:append"?: false | (() => import("vue").VNodeChild) | undefined;
245
+ "v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
246
+ "v-slot:item"?: false | ((arg: {
247
+ props: any;
248
+ index: number;
249
+ }) => import("vue").VNodeChild) | undefined;
250
+ "v-slot:overflow"?: false | ((arg: {
251
+ overflow: number;
252
+ }) => import("vue").VNodeChild) | undefined;
253
+ "v-slot:prepend"?: false | (() => import("vue").VNodeChild) | undefined;
254
+ }, {}, {}, {}, {}, {
255
+ style: import("vue").StyleValue;
256
+ tag: string | import("../../util/index.js").JSXComponent;
257
+ hoverable: boolean;
258
+ items: AvatarGroupItem[];
259
+ itemProps: SelectItemKey;
260
+ reverse: boolean;
261
+ vertical: boolean;
262
+ }>;
263
+ __isFragment?: undefined;
264
+ __isTeleport?: undefined;
265
+ __isSuspense?: undefined;
266
+ } & import("vue").ComponentOptionsBase<{
267
+ style: string | false | import("vue").StyleValue[] | import("vue").CSSProperties | null;
268
+ tag: string | import("../../util/index.js").JSXComponent;
269
+ hoverable: boolean;
270
+ items: AvatarGroupItem[];
271
+ itemProps: string | boolean | readonly (string | number)[] | ((item: Record<string, any>, fallback?: any) => any) | null;
272
+ reverse: boolean;
273
+ vertical: boolean;
274
+ } & {
275
+ class?: any;
276
+ border?: string | number | boolean | undefined;
277
+ gap?: string | number | undefined;
278
+ limit?: number | undefined;
279
+ overflowText?: string | undefined;
280
+ size?: string | number | undefined;
281
+ } & {
282
+ $children?: {
283
+ default?: (() => import("vue").VNodeChild) | undefined;
284
+ prepend?: (() => import("vue").VNodeChild) | undefined;
285
+ append?: (() => import("vue").VNodeChild) | undefined;
286
+ item?: ((arg: {
287
+ props: any;
288
+ index: number;
289
+ }) => import("vue").VNodeChild) | undefined;
290
+ overflow?: ((arg: {
291
+ overflow: number;
292
+ }) => import("vue").VNodeChild) | undefined;
293
+ } | {
294
+ $stable?: boolean | undefined;
295
+ } | (() => import("vue").VNodeChild) | import("vue").VNodeChild;
296
+ "v-slots"?: {
297
+ default?: false | (() => import("vue").VNodeChild) | undefined;
298
+ prepend?: false | (() => import("vue").VNodeChild) | undefined;
299
+ append?: false | (() => import("vue").VNodeChild) | undefined;
300
+ item?: false | ((arg: {
301
+ props: any;
302
+ index: number;
303
+ }) => import("vue").VNodeChild) | undefined;
304
+ overflow?: false | ((arg: {
305
+ overflow: number;
306
+ }) => import("vue").VNodeChild) | undefined;
307
+ } | undefined;
308
+ } & {
309
+ "v-slot:append"?: false | (() => import("vue").VNodeChild) | undefined;
310
+ "v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
311
+ "v-slot:item"?: false | ((arg: {
312
+ props: any;
313
+ index: number;
314
+ }) => import("vue").VNodeChild) | undefined;
315
+ "v-slot:overflow"?: false | ((arg: {
316
+ overflow: number;
317
+ }) => import("vue").VNodeChild) | undefined;
318
+ "v-slot:prepend"?: false | (() => import("vue").VNodeChild) | undefined;
319
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
320
+ style: import("vue").StyleValue;
321
+ tag: string | import("../../util/index.js").JSXComponent;
322
+ hoverable: boolean;
323
+ items: AvatarGroupItem[];
324
+ itemProps: SelectItemKey;
325
+ reverse: boolean;
326
+ vertical: boolean;
327
+ }, {}, string, import("vue").SlotsType<Partial<{
328
+ default: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
329
+ [key: string]: any;
330
+ }>[];
331
+ prepend: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
332
+ [key: string]: any;
333
+ }>[];
334
+ append: () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
335
+ [key: string]: any;
336
+ }>[];
337
+ item: (arg: {
338
+ props: any;
339
+ index: number;
340
+ }) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
341
+ [key: string]: any;
342
+ }>[];
343
+ overflow: (arg: {
344
+ overflow: number;
345
+ }) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
346
+ [key: string]: any;
347
+ }>[];
348
+ }>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("../../util/index.js").FilterPropsOptions<{
349
+ class: PropType<any>;
350
+ style: {
351
+ type: PropType<import("vue").StyleValue>;
352
+ default: null;
353
+ };
354
+ tag: {
355
+ type: PropType<string | import("../../util/index.js").JSXComponent>;
356
+ default: string;
357
+ };
358
+ border: (BooleanConstructor | NumberConstructor | StringConstructor)[];
359
+ gap: (NumberConstructor | StringConstructor)[];
360
+ hoverable: BooleanConstructor;
361
+ items: {
362
+ type: PropType<AvatarGroupItem[]>;
363
+ default: () => never[];
364
+ };
365
+ itemProps: {
366
+ type: PropType<SelectItemKey>;
367
+ default: null;
368
+ };
369
+ limit: NumberConstructor;
370
+ overflowText: StringConstructor;
371
+ reverse: BooleanConstructor;
372
+ size: (NumberConstructor | StringConstructor)[];
373
+ vertical: BooleanConstructor;
374
+ }, import("vue").ExtractPropTypes<{
375
+ class: PropType<any>;
376
+ style: {
377
+ type: PropType<import("vue").StyleValue>;
378
+ default: null;
379
+ };
380
+ tag: {
381
+ type: PropType<string | import("../../util/index.js").JSXComponent>;
382
+ default: string;
383
+ };
384
+ border: (BooleanConstructor | NumberConstructor | StringConstructor)[];
385
+ gap: (NumberConstructor | StringConstructor)[];
386
+ hoverable: BooleanConstructor;
387
+ items: {
388
+ type: PropType<AvatarGroupItem[]>;
389
+ default: () => never[];
390
+ };
391
+ itemProps: {
392
+ type: PropType<SelectItemKey>;
393
+ default: null;
394
+ };
395
+ limit: NumberConstructor;
396
+ overflowText: StringConstructor;
397
+ reverse: BooleanConstructor;
398
+ size: (NumberConstructor | StringConstructor)[];
399
+ vertical: BooleanConstructor;
400
+ }>>;
401
+ export type VAvatarGroup = InstanceType<typeof VAvatarGroup>;
@@ -0,0 +1,91 @@
1
+ import { createVNode as _createVNode, Fragment as _Fragment, mergeProps as _mergeProps, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from "vue";
2
+ // Styles
3
+ import "./VAvatarGroup.css";
4
+
5
+ // Components
6
+ import { VAvatar } from "../../components/VAvatar/index.js";
7
+ import { VDefaultsProvider } from "../../components/VDefaultsProvider/index.js"; // Composables
8
+ import { makeComponentProps } from "../../composables/component.js";
9
+ import { makeTagProps } from "../../composables/tag.js"; // Utilities
10
+ import { computed } from 'vue';
11
+ import { convertToUnit, genericComponent, getPropertyFromItem, isObject, propsFactory, useRender } from "../../util/index.js"; // Types
12
+ export const makeVAvatarGroupProps = propsFactory({
13
+ border: [Boolean, Number, String],
14
+ gap: [Number, String],
15
+ hoverable: Boolean,
16
+ items: {
17
+ type: Array,
18
+ default: () => []
19
+ },
20
+ itemProps: {
21
+ type: [Boolean, String, Array, Function],
22
+ default: null
23
+ },
24
+ limit: Number,
25
+ overflowText: String,
26
+ reverse: Boolean,
27
+ size: [Number, String],
28
+ vertical: Boolean,
29
+ ...makeComponentProps(),
30
+ ...makeTagProps()
31
+ }, 'VAvatarGroup');
32
+ export const VAvatarGroup = genericComponent()({
33
+ name: 'VAvatarGroup',
34
+ props: makeVAvatarGroupProps(),
35
+ setup(props, _ref) {
36
+ let {
37
+ slots
38
+ } = _ref;
39
+ const items = computed(() => {
40
+ const visibleItems = props.limit ? props.items.slice(0, props.limit) : props.items;
41
+ const orderedItems = props.reverse ? visibleItems.toReversed() : visibleItems;
42
+ return orderedItems.map(item => {
43
+ const avatarProps = props.itemProps === true ? isObject(item) ? item : {
44
+ image: item
45
+ } : getPropertyFromItem(item, props.itemProps, item);
46
+ if (avatarProps != null) return avatarProps;
47
+ if (!isObject(item)) return {
48
+ image: item
49
+ };
50
+ return item;
51
+ });
52
+ });
53
+ const overflow = computed(() => props.limit ? Math.max(props.items.length - props.limit, 0) : 0);
54
+ const overflowText = computed(() => props.overflowText ?? (overflow.value ? `+${overflow.value}` : ''));
55
+ const overflowItem = () => slots.overflow?.({
56
+ overflow: overflow.value
57
+ }) ?? _createVNode(VAvatar, {
58
+ "class": "v-avatar-group__overflow",
59
+ "text": overflowText.value
60
+ }, null);
61
+ useRender(() => _createVNode(props.tag, {
62
+ "class": _normalizeClass(['v-avatar-group', `v-avatar-group--${props.vertical ? 'vertical' : 'horizontal'}`, {
63
+ 'v-avatar-group--hoverable': props.hoverable,
64
+ 'v-avatar-group--reverse': props.reverse
65
+ }, props.class]),
66
+ "style": _normalizeStyle([{
67
+ '--v-avatar-group-gap': convertToUnit(props.gap)
68
+ }, props.style])
69
+ }, {
70
+ default: () => [slots.prepend?.(), _createElementVNode("div", {
71
+ "class": "v-avatar-group__content"
72
+ }, [_createVNode(VDefaultsProvider, {
73
+ "defaults": {
74
+ VAvatar: {
75
+ size: props.size,
76
+ border: props.border
77
+ }
78
+ }
79
+ }, {
80
+ default: () => [slots.default?.() ?? _createElementVNode(_Fragment, null, [props.reverse && overflowText.value && overflowItem(), items.value.map((item, index) => slots.item?.({
81
+ props: item,
82
+ index
83
+ }) ?? _createVNode(VAvatar, _mergeProps({
84
+ "key": index
85
+ }, item), null)), !props.reverse && overflowText.value && overflowItem()])]
86
+ })]), slots.append?.()]
87
+ }));
88
+ return {};
89
+ }
90
+ });
91
+ //# sourceMappingURL=VAvatarGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VAvatarGroup.js","names":["VAvatar","VDefaultsProvider","makeComponentProps","makeTagProps","computed","convertToUnit","genericComponent","getPropertyFromItem","isObject","propsFactory","useRender","makeVAvatarGroupProps","border","Boolean","Number","String","gap","hoverable","items","type","Array","default","itemProps","Function","limit","overflowText","reverse","size","vertical","VAvatarGroup","name","props","setup","_ref","slots","visibleItems","slice","orderedItems","toReversed","map","item","avatarProps","image","overflow","Math","max","length","value","overflowItem","_createVNode","tag","_normalizeClass","class","_normalizeStyle","style","prepend","_createElementVNode","_Fragment","index","_mergeProps","append"],"sources":["../../../src/labs/VAvatarGroup/VAvatarGroup.tsx"],"sourcesContent":["// Styles\nimport './VAvatarGroup.scss'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, genericComponent, getPropertyFromItem, isObject, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { SelectItemKey } from '@/util'\n\nexport type AvatarGroupItem = string | Record<string, any>\n\nexport type VAvatarGroupSlots = {\n default: never\n prepend: never\n append: never\n item: { props: any, index: number }\n overflow: { overflow: number }\n}\n\nexport const makeVAvatarGroupProps = propsFactory({\n border: [Boolean, Number, String],\n gap: [Number, String],\n hoverable: Boolean,\n items: {\n type: Array as PropType<AvatarGroupItem[]>,\n default: () => ([]),\n },\n itemProps: {\n type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n default: null,\n },\n limit: Number,\n overflowText: String,\n reverse: Boolean,\n size: [Number, String],\n vertical: Boolean,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n}, 'VAvatarGroup')\n\nexport const VAvatarGroup = genericComponent<VAvatarGroupSlots>()({\n name: 'VAvatarGroup',\n\n props: makeVAvatarGroupProps(),\n\n setup (props, { slots }) {\n const items = computed(() => {\n const visibleItems = props.limit\n ? props.items.slice(0, props.limit)\n : props.items\n\n const orderedItems = props.reverse\n ? visibleItems.toReversed()\n : visibleItems\n\n return orderedItems.map(item => {\n const avatarProps = props.itemProps === true\n ? (isObject(item) ? item : { image: item })\n : getPropertyFromItem(item, props.itemProps, item)\n\n if (avatarProps != null) return avatarProps\n\n if (!isObject(item)) return { image: item }\n\n return item\n })\n })\n\n const overflow = computed(() => props.limit ? Math.max(props.items.length - props.limit, 0) : 0)\n const overflowText = computed(() => props.overflowText ?? (overflow.value ? `+${overflow.value}` : ''))\n\n const overflowItem = () => (\n slots.overflow?.({ overflow: overflow.value }) ?? (\n <VAvatar class=\"v-avatar-group__overflow\" text={ overflowText.value } />\n )\n )\n\n useRender(() => (\n <props.tag\n class={[\n 'v-avatar-group',\n `v-avatar-group--${props.vertical ? 'vertical' : 'horizontal'}`,\n {\n 'v-avatar-group--hoverable': props.hoverable,\n 'v-avatar-group--reverse': props.reverse,\n },\n props.class,\n ]}\n style={[\n { '--v-avatar-group-gap': convertToUnit(props.gap) },\n props.style,\n ]}\n >\n { slots.prepend?.() }\n\n <div class=\"v-avatar-group__content\">\n <VDefaultsProvider\n defaults={{\n VAvatar: {\n size: props.size,\n border: props.border,\n },\n }}\n >\n { slots.default?.() ?? (\n <>\n { props.reverse && overflowText.value && overflowItem() }\n { items.value.map((item, index) => (\n slots.item?.({ props: item, index }) ?? (\n <VAvatar\n key={ index }\n { ...item }\n />\n )\n ))}\n { !props.reverse && overflowText.value && overflowItem() }\n </>\n )}\n </VDefaultsProvider>\n </div>\n\n { slots.append?.() }\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VAvatarGroup = InstanceType<typeof VAvatarGroup>\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,79 @@
1
+ @use '../../styles/settings';
2
+ @use '../../styles/tools';
3
+ @use './variables' as *;
4
+
5
+ @include tools.layer('components') {
6
+ .v-avatar-group {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ gap: $avatar-group-container-gap;
10
+
11
+ &--hoverable {
12
+ .v-avatar {
13
+ cursor: pointer;
14
+ transition: transform 0.25s settings.$standard-easing;
15
+
16
+ &:hover {
17
+ transform: $avatar-group-hoverable-horizontal-transform;
18
+ }
19
+ }
20
+
21
+ &.v-avatar-group--vertical .v-avatar:hover {
22
+ transform: $avatar-group-hoverable-vertical-transform;
23
+ }
24
+ }
25
+
26
+ &__content {
27
+ display: flex;
28
+ align-items: center;
29
+ }
30
+
31
+ .v-avatar-group__overflow {
32
+ background: $avatar-group-overflow-background;
33
+ color: $avatar-group-overflow-color;
34
+ }
35
+
36
+ &--horizontal {
37
+ .v-avatar:not(:first-child) {
38
+ margin-inline-start: var(--v-avatar-group-gap, $avatar-group-gap);
39
+ }
40
+
41
+ &.v-avatar-group--reverse {
42
+ .v-avatar-group__content {
43
+ flex-direction: row-reverse;
44
+ }
45
+
46
+ /* upgrade someday: https://caniuse.com/wf-sibling-count */
47
+ // .v-avatar {
48
+ // z-index: calc(99 - sibling-index());
49
+ // }
50
+
51
+ .v-avatar:not(:first-child) {
52
+ margin-inline-start: 0;
53
+ margin-inline-end: var(--v-avatar-group-gap, $avatar-group-gap);
54
+ }
55
+ }
56
+ }
57
+
58
+ &--vertical {
59
+ .v-avatar-group__content {
60
+ flex-direction: column;
61
+ }
62
+
63
+ .v-avatar:not(:first-child) {
64
+ margin-block-start: var(--v-avatar-group-gap, $avatar-group-gap);
65
+ }
66
+
67
+ &.v-avatar-group--reverse {
68
+ .v-avatar-group__content {
69
+ flex-direction: column-reverse;
70
+ }
71
+
72
+ .v-avatar:not(:first-child) {
73
+ margin-block-start: 0;
74
+ margin-block-end: var(--v-avatar-group-gap, $avatar-group-gap);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,6 @@
1
+ $avatar-group-container-gap: 8px !default;
2
+ $avatar-group-gap: -12px !default;
3
+ $avatar-group-hoverable-horizontal-transform: translateY(-8px) !default;
4
+ $avatar-group-hoverable-vertical-transform: translateX(8px) !default;
5
+ $avatar-group-overflow-background: rgb(var(--v-theme-surface-light)) !default;
6
+ $avatar-group-overflow-color: rgb(var(--v-theme-on-surface-light)) !default;
@@ -0,0 +1 @@
1
+ export { VAvatarGroup } from './VAvatarGroup.js';
@@ -0,0 +1,2 @@
1
+ export { VAvatarGroup } from "./VAvatarGroup.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["VAvatarGroup"],"sources":["../../../src/labs/VAvatarGroup/index.ts"],"sourcesContent":["export { VAvatarGroup } from './VAvatarGroup'\n"],"mappings":"SAASA,YAAY","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ export * from './VAvatarGroup/index.js';
1
2
  export * from './VColorInput/index.js';
2
3
  export * from './VCommandPalette/index.js';
3
4
  export * from './VDateInput/index.js';
@@ -1,3 +1,4 @@
1
+ export * from "./VAvatarGroup/index.js";
1
2
  export * from "./VColorInput/index.js";
2
3
  export * from "./VCommandPalette/index.js";
3
4
  export * from "./VDateInput/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","names":[],"sources":["../../src/labs/components.ts"],"sourcesContent":["export * from './VColorInput'\nexport * from './VCommandPalette'\nexport * from './VDateInput'\nexport * from './VFileUpload'\nexport * from './VIconBtn'\nexport * from './VMaskInput'\nexport * from './VPicker'\nexport * from './VPie'\nexport * from './VStepperVertical'\nexport * from './VPullToRefresh'\nexport * from './VVideo'\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"components.js","names":[],"sources":["../../src/labs/components.ts"],"sourcesContent":["export * from './VAvatarGroup'\nexport * from './VColorInput'\nexport * from './VCommandPalette'\nexport * from './VDateInput'\nexport * from './VFileUpload'\nexport * from './VIconBtn'\nexport * from './VMaskInput'\nexport * from './VPicker'\nexport * from './VPie'\nexport * from './VStepperVertical'\nexport * from './VPullToRefresh'\nexport * from './VVideo'\n"],"mappings":"","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vuetify/nightly",
3
3
  "description": "Vue Material Component Framework",
4
- "version": "3.11.8-dev.2026-02-01",
4
+ "version": "3.11.8-dev.2026-02-07",
5
5
  "author": {
6
6
  "name": "John Leider",
7
7
  "email": "john@vuetifyjs.com"