@vuetify/nightly 3.9.5-dev.2025-08-12 → 3.9.5-dev.2025-08-24
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.
- package/CHANGELOG.md +6 -3
- package/dist/json/attributes.json +2183 -2175
- package/dist/json/importMap-labs.json +40 -40
- package/dist/json/importMap.json +156 -156
- package/dist/json/tags.json +4 -1
- package/dist/json/web-types.json +4199 -4178
- package/dist/vuetify-labs.cjs +202 -98
- package/dist/vuetify-labs.css +5261 -5261
- package/dist/vuetify-labs.d.ts +112 -84
- package/dist/vuetify-labs.esm.js +202 -98
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +202 -98
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +85 -65
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2218 -2218
- package/dist/vuetify.d.ts +91 -63
- package/dist/vuetify.esm.js +85 -65
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +85 -65
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +367 -366
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VCard/VCardActions.d.ts +44 -0
- package/lib/components/VCard/VCardActions.js +11 -6
- package/lib/components/VCard/VCardActions.js.map +1 -1
- package/lib/components/VCard/VCardItem.d.ts +25 -0
- package/lib/components/VCard/VCardItem.js +64 -60
- package/lib/components/VCard/VCardItem.js.map +1 -1
- package/lib/composables/filter.d.ts +1 -0
- package/lib/composables/filter.js +13 -0
- package/lib/composables/filter.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +63 -63
- package/lib/framework.js +1 -1
- package/lib/labs/VMaskInput/VMaskInput.d.ts +22 -21
- package/lib/labs/VMaskInput/VMaskInput.js +118 -34
- package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,37 @@
|
|
|
1
|
+
export declare const makeVCardActionsProps: <Defaults extends {
|
|
2
|
+
tag?: unknown;
|
|
3
|
+
class?: unknown;
|
|
4
|
+
style?: unknown;
|
|
5
|
+
} = {}>(defaults?: Defaults | undefined) => {
|
|
6
|
+
tag: unknown extends Defaults["tag"] ? {
|
|
7
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
8
|
+
default: string;
|
|
9
|
+
} : Omit<{
|
|
10
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
11
|
+
default: string;
|
|
12
|
+
}, "type" | "default"> & {
|
|
13
|
+
type: import("vue").PropType<unknown extends Defaults["tag"] ? string | import("../../util/index.js").JSXComponent : string | import("../../util/index.js").JSXComponent | Defaults["tag"]>;
|
|
14
|
+
default: unknown extends Defaults["tag"] ? string | import("../../util/index.js").JSXComponent : NonNullable<string | import("../../util/index.js").JSXComponent> | Defaults["tag"];
|
|
15
|
+
};
|
|
16
|
+
class: unknown extends Defaults["class"] ? import("vue").PropType<any> : {
|
|
17
|
+
type: import("vue").PropType<unknown extends Defaults["class"] ? any : any>;
|
|
18
|
+
default: unknown extends Defaults["class"] ? any : any;
|
|
19
|
+
};
|
|
20
|
+
style: unknown extends Defaults["style"] ? {
|
|
21
|
+
type: import("vue").PropType<import("vue").StyleValue>;
|
|
22
|
+
default: null;
|
|
23
|
+
} : Omit<{
|
|
24
|
+
type: import("vue").PropType<import("vue").StyleValue>;
|
|
25
|
+
default: null;
|
|
26
|
+
}, "type" | "default"> & {
|
|
27
|
+
type: import("vue").PropType<unknown extends Defaults["style"] ? import("vue").StyleValue : import("vue").StyleValue | Defaults["style"]>;
|
|
28
|
+
default: unknown extends Defaults["style"] ? import("vue").StyleValue : NonNullable<import("vue").StyleValue> | Defaults["style"];
|
|
29
|
+
};
|
|
30
|
+
};
|
|
1
31
|
export declare const VCardActions: {
|
|
2
32
|
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
|
|
3
33
|
style: import("vue").StyleValue;
|
|
34
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
4
35
|
} & {
|
|
5
36
|
class?: any;
|
|
6
37
|
} & {
|
|
@@ -16,6 +47,7 @@ export declare const VCardActions: {
|
|
|
16
47
|
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
|
17
48
|
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
|
|
18
49
|
style: import("vue").StyleValue;
|
|
50
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
19
51
|
}, true, {}, import("vue").SlotsType<Partial<{
|
|
20
52
|
default: () => import("vue").VNode[];
|
|
21
53
|
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
|
|
@@ -27,6 +59,7 @@ export declare const VCardActions: {
|
|
|
27
59
|
Defaults: {};
|
|
28
60
|
}, {
|
|
29
61
|
style: import("vue").StyleValue;
|
|
62
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
30
63
|
} & {
|
|
31
64
|
class?: any;
|
|
32
65
|
} & {
|
|
@@ -42,12 +75,14 @@ export declare const VCardActions: {
|
|
|
42
75
|
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
|
43
76
|
}, {}, {}, {}, {}, {
|
|
44
77
|
style: import("vue").StyleValue;
|
|
78
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
45
79
|
}>;
|
|
46
80
|
__isFragment?: never;
|
|
47
81
|
__isTeleport?: never;
|
|
48
82
|
__isSuspense?: never;
|
|
49
83
|
} & import("vue").ComponentOptionsBase<{
|
|
50
84
|
style: import("vue").StyleValue;
|
|
85
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
51
86
|
} & {
|
|
52
87
|
class?: any;
|
|
53
88
|
} & {
|
|
@@ -63,15 +98,24 @@ export declare const VCardActions: {
|
|
|
63
98
|
"v-slot:default"?: false | (() => import("vue").VNodeChild) | undefined;
|
|
64
99
|
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
|
|
65
100
|
style: import("vue").StyleValue;
|
|
101
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
66
102
|
}, {}, string, import("vue").SlotsType<Partial<{
|
|
67
103
|
default: () => import("vue").VNode[];
|
|
68
104
|
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("../../util/index.js").FilterPropsOptions<{
|
|
105
|
+
tag: {
|
|
106
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
107
|
+
default: string;
|
|
108
|
+
};
|
|
69
109
|
class: import("vue").PropType<import("../../composables/component.js").ClassValue>;
|
|
70
110
|
style: {
|
|
71
111
|
type: import("vue").PropType<import("vue").StyleValue>;
|
|
72
112
|
default: null;
|
|
73
113
|
};
|
|
74
114
|
}, import("vue").ExtractPropTypes<{
|
|
115
|
+
tag: {
|
|
116
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
117
|
+
default: string;
|
|
118
|
+
};
|
|
75
119
|
class: import("vue").PropType<import("../../composables/component.js").ClassValue>;
|
|
76
120
|
style: {
|
|
77
121
|
type: import("vue").PropType<import("vue").StyleValue>;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle,
|
|
1
|
+
import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from "vue";
|
|
2
2
|
// Composables
|
|
3
3
|
import { makeComponentProps } from "../../composables/component.js";
|
|
4
|
-
import { provideDefaults } from "../../composables/defaults.js";
|
|
5
|
-
import {
|
|
4
|
+
import { provideDefaults } from "../../composables/defaults.js";
|
|
5
|
+
import { makeTagProps } from "../../composables/tag.js"; // Utilities
|
|
6
|
+
import { genericComponent, propsFactory, useRender } from "../../util/index.js";
|
|
7
|
+
export const makeVCardActionsProps = propsFactory({
|
|
8
|
+
...makeComponentProps(),
|
|
9
|
+
...makeTagProps()
|
|
10
|
+
}, 'VCardActions');
|
|
6
11
|
export const VCardActions = genericComponent()({
|
|
7
12
|
name: 'VCardActions',
|
|
8
|
-
props:
|
|
13
|
+
props: makeVCardActionsProps(),
|
|
9
14
|
setup(props, _ref) {
|
|
10
15
|
let {
|
|
11
16
|
slots
|
|
@@ -16,10 +21,10 @@ export const VCardActions = genericComponent()({
|
|
|
16
21
|
variant: 'text'
|
|
17
22
|
}
|
|
18
23
|
});
|
|
19
|
-
useRender(() =>
|
|
24
|
+
useRender(() => _createVNode(props.tag, {
|
|
20
25
|
"class": _normalizeClass(['v-card-actions', props.class]),
|
|
21
26
|
"style": _normalizeStyle(props.style)
|
|
22
|
-
},
|
|
27
|
+
}, slots));
|
|
23
28
|
return {};
|
|
24
29
|
}
|
|
25
30
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCardActions.js","names":["makeComponentProps","provideDefaults","genericComponent","useRender","VCardActions","name","props","setup","_ref","slots","VBtn","slim","variant","
|
|
1
|
+
{"version":3,"file":"VCardActions.js","names":["makeComponentProps","provideDefaults","makeTagProps","genericComponent","propsFactory","useRender","makeVCardActionsProps","VCardActions","name","props","setup","_ref","slots","VBtn","slim","variant","_createVNode","tag","_normalizeClass","class","_normalizeStyle","style"],"sources":["../../../src/components/VCard/VCardActions.tsx"],"sourcesContent":["// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVCardActionsProps = propsFactory({\n ...makeComponentProps(),\n ...makeTagProps(),\n}, 'VCardActions')\n\nexport const VCardActions = genericComponent()({\n name: 'VCardActions',\n\n props: makeVCardActionsProps(),\n\n setup (props, { slots }) {\n provideDefaults({\n VBtn: {\n slim: true,\n variant: 'text',\n },\n })\n\n useRender(() => (\n <props.tag\n class={[\n 'v-card-actions',\n props.class,\n ]}\n style={ props.style }\n v-slots={ slots }\n />\n ))\n\n return {}\n },\n})\n\nexport type VCardActions = InstanceType<typeof VCardActions>\n"],"mappings":";AAAA;AAAA,SACSA,kBAAkB;AAAA,SAClBC,eAAe;AAAA,SACfC,YAAY,oCAErB;AAAA,SACSC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS;AAElD,OAAO,MAAMC,qBAAqB,GAAGF,YAAY,CAAC;EAChD,GAAGJ,kBAAkB,CAAC,CAAC;EACvB,GAAGE,YAAY,CAAC;AAClB,CAAC,EAAE,cAAc,CAAC;AAElB,OAAO,MAAMK,YAAY,GAAGJ,gBAAgB,CAAC,CAAC,CAAC;EAC7CK,IAAI,EAAE,cAAc;EAEpBC,KAAK,EAAEH,qBAAqB,CAAC,CAAC;EAE9BI,KAAKA,CAAED,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrBV,eAAe,CAAC;MACdY,IAAI,EAAE;QACJC,IAAI,EAAE,IAAI;QACVC,OAAO,EAAE;MACX;IACF,CAAC,CAAC;IAEFV,SAAS,CAAC,MAAAW,YAAA,CAAAP,KAAA,CAAAQ,GAAA;MAAA,SAAAC,eAAA,CAEC,CACL,gBAAgB,EAChBT,KAAK,CAACU,KAAK,CACZ;MAAA,SAAAC,eAAA,CACOX,KAAK,CAACY,KAAK;IAAA,GACTT,KAAK,CAElB,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -7,6 +7,7 @@ export type VCardItemSlots = {
|
|
|
7
7
|
subtitle: never;
|
|
8
8
|
};
|
|
9
9
|
export declare const makeCardItemProps: <Defaults extends {
|
|
10
|
+
tag?: unknown;
|
|
10
11
|
density?: unknown;
|
|
11
12
|
class?: unknown;
|
|
12
13
|
style?: unknown;
|
|
@@ -17,6 +18,16 @@ export declare const makeCardItemProps: <Defaults extends {
|
|
|
17
18
|
subtitle?: unknown;
|
|
18
19
|
title?: unknown;
|
|
19
20
|
} = {}>(defaults?: Defaults | undefined) => {
|
|
21
|
+
tag: unknown extends Defaults["tag"] ? {
|
|
22
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
23
|
+
default: string;
|
|
24
|
+
} : Omit<{
|
|
25
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
26
|
+
default: string;
|
|
27
|
+
}, "type" | "default"> & {
|
|
28
|
+
type: import("vue").PropType<unknown extends Defaults["tag"] ? string | import("../../util/index.js").JSXComponent : string | import("../../util/index.js").JSXComponent | Defaults["tag"]>;
|
|
29
|
+
default: unknown extends Defaults["tag"] ? string | import("../../util/index.js").JSXComponent : NonNullable<string | import("../../util/index.js").JSXComponent> | Defaults["tag"];
|
|
30
|
+
};
|
|
20
31
|
density: unknown extends Defaults["density"] ? {
|
|
21
32
|
type: import("vue").PropType<import("../../composables/density.js").Density>;
|
|
22
33
|
default: string;
|
|
@@ -83,6 +94,7 @@ export declare const makeCardItemProps: <Defaults extends {
|
|
|
83
94
|
export declare const VCardItem: {
|
|
84
95
|
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<{
|
|
85
96
|
style: import("vue").StyleValue;
|
|
97
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
86
98
|
density: import("../../composables/density.js").Density;
|
|
87
99
|
} & {
|
|
88
100
|
title?: string | number | boolean | undefined;
|
|
@@ -118,6 +130,7 @@ export declare const VCardItem: {
|
|
|
118
130
|
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
|
|
119
131
|
style: import("vue").StyleValue;
|
|
120
132
|
title: string | number | boolean;
|
|
133
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
121
134
|
density: import("../../composables/density.js").Density;
|
|
122
135
|
subtitle: string | number | boolean;
|
|
123
136
|
}, true, {}, import("vue").SlotsType<Partial<{
|
|
@@ -135,6 +148,7 @@ export declare const VCardItem: {
|
|
|
135
148
|
Defaults: {};
|
|
136
149
|
}, {
|
|
137
150
|
style: import("vue").StyleValue;
|
|
151
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
138
152
|
density: import("../../composables/density.js").Density;
|
|
139
153
|
} & {
|
|
140
154
|
title?: string | number | boolean | undefined;
|
|
@@ -170,6 +184,7 @@ export declare const VCardItem: {
|
|
|
170
184
|
}, {}, {}, {}, {}, {
|
|
171
185
|
style: import("vue").StyleValue;
|
|
172
186
|
title: string | number | boolean;
|
|
187
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
173
188
|
density: import("../../composables/density.js").Density;
|
|
174
189
|
subtitle: string | number | boolean;
|
|
175
190
|
}>;
|
|
@@ -178,6 +193,7 @@ export declare const VCardItem: {
|
|
|
178
193
|
__isSuspense?: never;
|
|
179
194
|
} & import("vue").ComponentOptionsBase<{
|
|
180
195
|
style: import("vue").StyleValue;
|
|
196
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
181
197
|
density: import("../../composables/density.js").Density;
|
|
182
198
|
} & {
|
|
183
199
|
title?: string | number | boolean | undefined;
|
|
@@ -213,6 +229,7 @@ export declare const VCardItem: {
|
|
|
213
229
|
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, {
|
|
214
230
|
style: import("vue").StyleValue;
|
|
215
231
|
title: string | number | boolean;
|
|
232
|
+
tag: string | import("../../util/index.js").JSXComponent;
|
|
216
233
|
density: import("../../composables/density.js").Density;
|
|
217
234
|
subtitle: string | number | boolean;
|
|
218
235
|
}, {}, string, import("vue").SlotsType<Partial<{
|
|
@@ -222,6 +239,10 @@ export declare const VCardItem: {
|
|
|
222
239
|
title: () => import("vue").VNode[];
|
|
223
240
|
subtitle: () => import("vue").VNode[];
|
|
224
241
|
}>>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & import("../../util/index.js").FilterPropsOptions<{
|
|
242
|
+
tag: {
|
|
243
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
244
|
+
default: string;
|
|
245
|
+
};
|
|
225
246
|
density: {
|
|
226
247
|
type: import("vue").PropType<import("../../composables/density.js").Density>;
|
|
227
248
|
default: string;
|
|
@@ -245,6 +266,10 @@ export declare const VCardItem: {
|
|
|
245
266
|
default: undefined;
|
|
246
267
|
};
|
|
247
268
|
}, import("vue").ExtractPropTypes<{
|
|
269
|
+
tag: {
|
|
270
|
+
type: import("vue").PropType<string | import("../../util/index.js").JSXComponent>;
|
|
271
|
+
default: string;
|
|
272
|
+
};
|
|
248
273
|
density: {
|
|
249
274
|
type: import("vue").PropType<import("../../composables/density.js").Density>;
|
|
250
275
|
default: string;
|
|
@@ -7,7 +7,8 @@ import { VDefaultsProvider } from "../VDefaultsProvider/index.js";
|
|
|
7
7
|
import { VIcon } from "../VIcon/index.js"; // Composables
|
|
8
8
|
import { makeComponentProps } from "../../composables/component.js";
|
|
9
9
|
import { makeDensityProps } from "../../composables/density.js";
|
|
10
|
-
import { IconValue } from "../../composables/icons.js";
|
|
10
|
+
import { IconValue } from "../../composables/icons.js";
|
|
11
|
+
import { makeTagProps } from "../../composables/tag.js"; // Utilities
|
|
11
12
|
import { toDisplayString } from 'vue';
|
|
12
13
|
import { genericComponent, propsFactory, useRender } from "../../util/index.js";
|
|
13
14
|
export const makeCardItemProps = propsFactory({
|
|
@@ -24,7 +25,8 @@ export const makeCardItemProps = propsFactory({
|
|
|
24
25
|
default: undefined
|
|
25
26
|
},
|
|
26
27
|
...makeComponentProps(),
|
|
27
|
-
...makeDensityProps()
|
|
28
|
+
...makeDensityProps(),
|
|
29
|
+
...makeTagProps()
|
|
28
30
|
}, 'VCardItem');
|
|
29
31
|
export const VCardItem = genericComponent()({
|
|
30
32
|
name: 'VCardItem',
|
|
@@ -40,68 +42,70 @@ export const VCardItem = genericComponent()({
|
|
|
40
42
|
const hasAppend = !!(hasAppendMedia || slots.append);
|
|
41
43
|
const hasTitle = !!(props.title != null || slots.title);
|
|
42
44
|
const hasSubtitle = !!(props.subtitle != null || slots.subtitle);
|
|
43
|
-
return
|
|
45
|
+
return _createVNode(props.tag, {
|
|
44
46
|
"class": _normalizeClass(['v-card-item', props.class]),
|
|
45
47
|
"style": _normalizeStyle(props.style)
|
|
46
|
-
}, [hasPrepend && _createElementVNode("div", {
|
|
47
|
-
"key": "prepend",
|
|
48
|
-
"class": "v-card-item__prepend"
|
|
49
|
-
}, [!slots.prepend ? _createElementVNode(_Fragment, null, [props.prependAvatar && _createVNode(VAvatar, {
|
|
50
|
-
"key": "prepend-avatar",
|
|
51
|
-
"density": props.density,
|
|
52
|
-
"image": props.prependAvatar
|
|
53
|
-
}, null), props.prependIcon && _createVNode(VIcon, {
|
|
54
|
-
"key": "prepend-icon",
|
|
55
|
-
"density": props.density,
|
|
56
|
-
"icon": props.prependIcon
|
|
57
|
-
}, null)]) : _createVNode(VDefaultsProvider, {
|
|
58
|
-
"key": "prepend-defaults",
|
|
59
|
-
"disabled": !hasPrependMedia,
|
|
60
|
-
"defaults": {
|
|
61
|
-
VAvatar: {
|
|
62
|
-
density: props.density,
|
|
63
|
-
image: props.prependAvatar
|
|
64
|
-
},
|
|
65
|
-
VIcon: {
|
|
66
|
-
density: props.density,
|
|
67
|
-
icon: props.prependIcon
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}, slots.prepend)]), _createElementVNode("div", {
|
|
71
|
-
"class": "v-card-item__content"
|
|
72
|
-
}, [hasTitle && _createVNode(VCardTitle, {
|
|
73
|
-
"key": "title"
|
|
74
|
-
}, {
|
|
75
|
-
default: () => [slots.title?.() ?? toDisplayString(props.title)]
|
|
76
|
-
}), hasSubtitle && _createVNode(VCardSubtitle, {
|
|
77
|
-
"key": "subtitle"
|
|
78
48
|
}, {
|
|
79
|
-
default: () => [
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
49
|
+
default: () => [hasPrepend && _createElementVNode("div", {
|
|
50
|
+
"key": "prepend",
|
|
51
|
+
"class": "v-card-item__prepend"
|
|
52
|
+
}, [!slots.prepend ? _createElementVNode(_Fragment, null, [props.prependAvatar && _createVNode(VAvatar, {
|
|
53
|
+
"key": "prepend-avatar",
|
|
54
|
+
"density": props.density,
|
|
55
|
+
"image": props.prependAvatar
|
|
56
|
+
}, null), props.prependIcon && _createVNode(VIcon, {
|
|
57
|
+
"key": "prepend-icon",
|
|
58
|
+
"density": props.density,
|
|
59
|
+
"icon": props.prependIcon
|
|
60
|
+
}, null)]) : _createVNode(VDefaultsProvider, {
|
|
61
|
+
"key": "prepend-defaults",
|
|
62
|
+
"disabled": !hasPrependMedia,
|
|
63
|
+
"defaults": {
|
|
64
|
+
VAvatar: {
|
|
65
|
+
density: props.density,
|
|
66
|
+
image: props.prependAvatar
|
|
67
|
+
},
|
|
68
|
+
VIcon: {
|
|
69
|
+
density: props.density,
|
|
70
|
+
icon: props.prependIcon
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}, slots.prepend)]), _createElementVNode("div", {
|
|
74
|
+
"class": "v-card-item__content"
|
|
75
|
+
}, [hasTitle && _createVNode(VCardTitle, {
|
|
76
|
+
"key": "title"
|
|
77
|
+
}, {
|
|
78
|
+
default: () => [slots.title?.() ?? toDisplayString(props.title)]
|
|
79
|
+
}), hasSubtitle && _createVNode(VCardSubtitle, {
|
|
80
|
+
"key": "subtitle"
|
|
81
|
+
}, {
|
|
82
|
+
default: () => [slots.subtitle?.() ?? toDisplayString(props.subtitle)]
|
|
83
|
+
}), slots.default?.()]), hasAppend && _createElementVNode("div", {
|
|
84
|
+
"key": "append",
|
|
85
|
+
"class": "v-card-item__append"
|
|
86
|
+
}, [!slots.append ? _createElementVNode(_Fragment, null, [props.appendIcon && _createVNode(VIcon, {
|
|
87
|
+
"key": "append-icon",
|
|
88
|
+
"density": props.density,
|
|
89
|
+
"icon": props.appendIcon
|
|
90
|
+
}, null), props.appendAvatar && _createVNode(VAvatar, {
|
|
91
|
+
"key": "append-avatar",
|
|
92
|
+
"density": props.density,
|
|
93
|
+
"image": props.appendAvatar
|
|
94
|
+
}, null)]) : _createVNode(VDefaultsProvider, {
|
|
95
|
+
"key": "append-defaults",
|
|
96
|
+
"disabled": !hasAppendMedia,
|
|
97
|
+
"defaults": {
|
|
98
|
+
VAvatar: {
|
|
99
|
+
density: props.density,
|
|
100
|
+
image: props.appendAvatar
|
|
101
|
+
},
|
|
102
|
+
VIcon: {
|
|
103
|
+
density: props.density,
|
|
104
|
+
icon: props.appendIcon
|
|
105
|
+
}
|
|
102
106
|
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
107
|
+
}, slots.append)])]
|
|
108
|
+
});
|
|
105
109
|
});
|
|
106
110
|
return {};
|
|
107
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCardItem.js","names":["VCardSubtitle","VCardTitle","VAvatar","VDefaultsProvider","VIcon","makeComponentProps","makeDensityProps","IconValue","toDisplayString","genericComponent","propsFactory","useRender","makeCardItemProps","appendAvatar","String","appendIcon","prependAvatar","prependIcon","subtitle","type","Number","Boolean","default","undefined","title","VCardItem","name","props","setup","_ref","slots","hasPrependMedia","hasPrepend","prepend","hasAppendMedia","hasAppend","append","hasTitle","hasSubtitle","
|
|
1
|
+
{"version":3,"file":"VCardItem.js","names":["VCardSubtitle","VCardTitle","VAvatar","VDefaultsProvider","VIcon","makeComponentProps","makeDensityProps","IconValue","makeTagProps","toDisplayString","genericComponent","propsFactory","useRender","makeCardItemProps","appendAvatar","String","appendIcon","prependAvatar","prependIcon","subtitle","type","Number","Boolean","default","undefined","title","VCardItem","name","props","setup","_ref","slots","hasPrependMedia","hasPrepend","prepend","hasAppendMedia","hasAppend","append","hasTitle","hasSubtitle","_createVNode","tag","_normalizeClass","class","_normalizeStyle","style","_createElementVNode","_Fragment","density","image","icon"],"sources":["../../../src/components/VCard/VCardItem.tsx"],"sourcesContent":["// Components\nimport { VCardSubtitle } from './VCardSubtitle'\nimport { VCardTitle } from './VCardTitle'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { toDisplayString } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport type VCardItemSlots = {\n default: never\n prepend: never\n append: never\n title: never\n subtitle: never\n}\n\nexport const makeCardItemProps = propsFactory({\n appendAvatar: String,\n appendIcon: IconValue,\n prependAvatar: String,\n prependIcon: IconValue,\n subtitle: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n title: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeTagProps(),\n}, 'VCardItem')\n\nexport const VCardItem = genericComponent<VCardItemSlots>()({\n name: 'VCardItem',\n\n props: makeCardItemProps(),\n\n setup (props, { slots }) {\n useRender(() => {\n const hasPrependMedia = !!(props.prependAvatar || props.prependIcon)\n const hasPrepend = !!(hasPrependMedia || slots.prepend)\n const hasAppendMedia = !!(props.appendAvatar || props.appendIcon)\n const hasAppend = !!(hasAppendMedia || slots.append)\n const hasTitle = !!(props.title != null || slots.title)\n const hasSubtitle = !!(props.subtitle != null || slots.subtitle)\n\n return (\n <props.tag\n class={[\n 'v-card-item',\n props.class,\n ]}\n style={ props.style }\n >\n { hasPrepend && (\n <div key=\"prepend\" class=\"v-card-item__prepend\">\n { !slots.prepend ? (\n <>\n { props.prependAvatar && (\n <VAvatar\n key=\"prepend-avatar\"\n density={ props.density }\n image={ props.prependAvatar }\n />\n )}\n\n { props.prependIcon && (\n <VIcon\n key=\"prepend-icon\"\n density={ props.density }\n icon={ props.prependIcon }\n />\n )}\n </>\n ) : (\n <VDefaultsProvider\n key=\"prepend-defaults\"\n disabled={ !hasPrependMedia }\n defaults={{\n VAvatar: {\n density: props.density,\n image: props.prependAvatar,\n },\n VIcon: {\n density: props.density,\n icon: props.prependIcon,\n },\n }}\n v-slots:default={ slots.prepend }\n />\n )}\n </div>\n )}\n\n <div class=\"v-card-item__content\">\n { hasTitle && (\n <VCardTitle key=\"title\">\n { slots.title?.() ?? toDisplayString(props.title) }\n </VCardTitle>\n )}\n\n { hasSubtitle && (\n <VCardSubtitle key=\"subtitle\">\n { slots.subtitle?.() ?? toDisplayString(props.subtitle) }\n </VCardSubtitle>\n )}\n\n { slots.default?.() }\n </div>\n\n { hasAppend && (\n <div key=\"append\" class=\"v-card-item__append\">\n { !slots.append ? (\n <>\n { props.appendIcon && (\n <VIcon\n key=\"append-icon\"\n density={ props.density }\n icon={ props.appendIcon }\n />\n )}\n\n { props.appendAvatar && (\n <VAvatar\n key=\"append-avatar\"\n density={ props.density }\n image={ props.appendAvatar }\n />\n )}\n </>\n ) : (\n <VDefaultsProvider\n key=\"append-defaults\"\n disabled={ !hasAppendMedia }\n defaults={{\n VAvatar: {\n density: props.density,\n image: props.appendAvatar,\n },\n VIcon: {\n density: props.density,\n icon: props.appendIcon,\n },\n }}\n v-slots:default={ slots.append }\n />\n )}\n </div>\n )}\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VCardItem = InstanceType<typeof VCardItem>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -70,6 +70,7 @@ export declare function filterItems(items: readonly (readonly [item: InternalIte
|
|
|
70
70
|
}): {
|
|
71
71
|
index: number;
|
|
72
72
|
matches: Record<string, FilterMatchArrayMultiple | undefined>;
|
|
73
|
+
type?: "divider" | "subheader";
|
|
73
74
|
}[];
|
|
74
75
|
export declare function useFilter<T extends InternalItem>(props: FilterProps, items: MaybeRef<T[]>, query: Ref<string | undefined> | (() => string | undefined), options?: {
|
|
75
76
|
transform?: (item: T) => {};
|
|
@@ -47,6 +47,7 @@ export function filterItems(items, query, options) {
|
|
|
47
47
|
const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false;
|
|
48
48
|
const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length;
|
|
49
49
|
if (!items?.length) return array;
|
|
50
|
+
let lookAheadItem = null;
|
|
50
51
|
loop: for (let i = 0; i < items.length; i++) {
|
|
51
52
|
const [item, transformed = item] = wrapInArray(items[i]);
|
|
52
53
|
const customMatches = {};
|
|
@@ -55,6 +56,14 @@ export function filterItems(items, query, options) {
|
|
|
55
56
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
|
56
57
|
if (typeof item === 'object') {
|
|
57
58
|
if (item.type === 'divider' || item.type === 'subheader') {
|
|
59
|
+
if (lookAheadItem?.type === 'divider' && item.type === 'subheader') {
|
|
60
|
+
array.push(lookAheadItem); // divider before subheader
|
|
61
|
+
}
|
|
62
|
+
lookAheadItem = {
|
|
63
|
+
index: i,
|
|
64
|
+
matches: {},
|
|
65
|
+
type: item.type
|
|
66
|
+
};
|
|
58
67
|
continue;
|
|
59
68
|
}
|
|
60
69
|
const filterKeys = keys || Object.keys(transformed);
|
|
@@ -80,6 +89,10 @@ export function filterItems(items, query, options) {
|
|
|
80
89
|
if (options?.filterMode === 'union' && customMatchesLength !== customFiltersLength && !defaultMatchesLength) continue;
|
|
81
90
|
if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength)) continue;
|
|
82
91
|
}
|
|
92
|
+
if (lookAheadItem) {
|
|
93
|
+
array.push(lookAheadItem);
|
|
94
|
+
lookAheadItem = null;
|
|
95
|
+
}
|
|
83
96
|
array.push({
|
|
84
97
|
index: i,
|
|
85
98
|
matches: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","names":["computed","shallowRef","unref","watchEffect","normalizeClass","_normalizeClass","createElementVNode","_createElementVNode","Fragment","_Fragment","getPropertyFromItem","propsFactory","wrapInArray","defaultFilter","value","query","item","length","toString","toLocaleLowerCase","result","idx","indexOf","push","normaliseMatch","match","Array","isArray","makeFilterProps","customFilter","Function","customKeyFilter","Object","filterKeys","String","filterMode","type","default","noFilter","Boolean","filterItems","items","options","array","filter","keys","customFiltersLength","loop","i","transformed","customMatches","defaultMatches","key","keyFilter","title","defaultMatchesLength","customMatchesLength","index","matches","useFilter","props","filteredItems","filteredMatches","Map","transformedItems","transform","map","_query","strQuery","results","originalItems","_filteredItems","_filteredMatches","forEach","_ref","set","getMatches","get","highlightResult","name","text","start","slice"],"sources":["../../src/composables/filter.tsx"],"sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable no-labels */\n\n// Utilities\nimport { computed, shallowRef, unref, watchEffect } from 'vue'\nimport { getPropertyFromItem, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\n/**\n * - boolean: match without highlight\n * - number: single match (index), length already known\n * - []: single match (start, end)\n * - [][]: multiple matches (start, end), shouldn't overlap\n */\nexport type FilterMatchArraySingle = readonly [number, number]\nexport type FilterMatchArrayMultiple = readonly FilterMatchArraySingle[]\nexport type FilterMatchArray = FilterMatchArraySingle | FilterMatchArrayMultiple\nexport type FilterMatch = boolean | number | FilterMatchArray\nexport type FilterFunction = (value: string, query: string, item?: InternalItem) => FilterMatch\nexport type FilterKeyFunctions = Record<string, FilterFunction>\nexport type FilterKeys = string | string[]\nexport type FilterMode = 'some' | 'every' | 'union' | 'intersection'\n\nexport interface FilterProps {\n customFilter?: FilterFunction\n customKeyFilter?: FilterKeyFunctions\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n}\n\nexport interface InternalItem<T = any> {\n value: any\n raw: T\n type?: string\n}\n\n// Composables\nexport const defaultFilter: FilterFunction = (value, query, item) => {\n if (value == null || query == null) return -1\n if (!query.length) return 0\n\n value = value.toString().toLocaleLowerCase()\n query = query.toString().toLocaleLowerCase()\n\n const result = []\n let idx = value.indexOf(query)\n while (~idx) {\n result.push([idx, idx + query.length] as const)\n\n idx = value.indexOf(query, idx + query.length)\n }\n\n return result.length ? result : -1\n}\n\nfunction normaliseMatch (match: FilterMatch, query: string): FilterMatchArrayMultiple | undefined {\n if (match == null || typeof match === 'boolean' || match === -1) return\n if (typeof match === 'number') return [[match, match + query.length]]\n if (Array.isArray(match[0])) return match as FilterMatchArrayMultiple\n return [match] as FilterMatchArrayMultiple\n}\n\nexport const makeFilterProps = propsFactory({\n customFilter: Function as PropType<FilterFunction>,\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection',\n },\n noFilter: Boolean,\n}, 'filter')\n\nexport function filterItems (\n items: readonly (readonly [item: InternalItem, transformed: {}])[] | readonly InternalItem[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions\n default?: FilterFunction\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n },\n) {\n const array: { index: number, matches: Record<string, FilterMatchArrayMultiple | undefined> }[] = []\n // always ensure we fall back to a functioning filter\n const filter = options?.default ?? defaultFilter\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length\n\n if (!items?.length) return array\n\n loop:\n for (let i = 0; i < items.length; i++) {\n const [item, transformed = item] = wrapInArray(items[i]) as readonly [InternalItem, {}]\n const customMatches: Record<string, FilterMatchArrayMultiple | undefined> = {}\n const defaultMatches: Record<string, FilterMatchArrayMultiple | undefined> = {}\n let match: FilterMatch = -1\n\n if ((query || customFiltersLength > 0) && !options?.noFilter) {\n if (typeof item === 'object') {\n if (item.type === 'divider' || item.type === 'subheader') {\n continue\n }\n\n const filterKeys = keys || Object.keys(transformed)\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(transformed, key)\n const keyFilter = options?.customKeyFilter?.[key]\n\n match = keyFilter\n ? keyFilter(value, query, item)\n : filter(value, query, item)\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = normaliseMatch(match, query)\n else defaultMatches[key] = normaliseMatch(match, query)\n } else if (options?.filterMode === 'every') {\n continue loop\n }\n }\n } else {\n match = filter(item, query, item)\n if (match !== -1 && match !== false) {\n defaultMatches.title = normaliseMatch(match, query)\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length\n const customMatchesLength = Object.keys(customMatches).length\n\n if (!defaultMatchesLength && !customMatchesLength) continue\n\n if (\n options?.filterMode === 'union' &&\n customMatchesLength !== customFiltersLength &&\n !defaultMatchesLength\n ) continue\n\n if (\n options?.filterMode === 'intersection' &&\n (\n customMatchesLength !== customFiltersLength ||\n !defaultMatchesLength\n )\n ) continue\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } })\n }\n\n return array\n}\n\nexport function useFilter <T extends InternalItem> (\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined> | (() => string | undefined),\n options?: {\n transform?: (item: T) => {}\n customKeyFilter?: MaybeRef<FilterKeyFunctions | undefined>\n }\n) {\n const filteredItems = shallowRef<T[]>([])\n const filteredMatches = shallowRef(new Map<unknown, Record<string, FilterMatchArrayMultiple | undefined>>())\n const transformedItems = computed(() => (\n options?.transform\n ? unref(items).map(item => ([item, options.transform!(item)] as const))\n : unref(items)\n ))\n\n watchEffect(() => {\n const _query = typeof query === 'function' ? query() : unref(query)\n const strQuery = (\n typeof _query !== 'string' &&\n typeof _query !== 'number'\n ) ? '' : String(_query)\n\n const results = filterItems(\n transformedItems.value,\n strQuery,\n {\n customKeyFilter: {\n ...props.customKeyFilter,\n ...unref(options?.customKeyFilter),\n },\n default: props.customFilter,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter,\n },\n )\n\n const originalItems = unref(items)\n\n const _filteredItems: typeof filteredItems['value'] = []\n const _filteredMatches: typeof filteredMatches['value'] = new Map()\n results.forEach(({ index, matches }) => {\n const item = originalItems[index]\n _filteredItems.push(item)\n _filteredMatches.set(item.value, matches)\n })\n filteredItems.value = _filteredItems\n filteredMatches.value = _filteredMatches\n })\n\n function getMatches (item: T) {\n return filteredMatches.value.get(item.value)\n }\n\n return { filteredItems, filteredMatches, getMatches }\n}\n\nexport function highlightResult (name: string, text: string, matches: FilterMatchArrayMultiple | undefined) {\n if (matches == null || !matches.length) return text\n\n return matches.map((match, i) => {\n const start = i === 0 ? 0 : matches[i - 1][1]\n const result = [\n <span class={ `${name}__unmask` }>{ text.slice(start, match[0]) }</span>,\n <span class={ `${name}__mask` }>{ text.slice(match[0], match[1]) }</span>,\n ]\n if (i === matches.length - 1) {\n result.push(<span class={ `${name}__unmask` }>{ text.slice(match[1]) }</span>)\n }\n return <>{ result }</>\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"filter.js","names":["computed","shallowRef","unref","watchEffect","normalizeClass","_normalizeClass","createElementVNode","_createElementVNode","Fragment","_Fragment","getPropertyFromItem","propsFactory","wrapInArray","defaultFilter","value","query","item","length","toString","toLocaleLowerCase","result","idx","indexOf","push","normaliseMatch","match","Array","isArray","makeFilterProps","customFilter","Function","customKeyFilter","Object","filterKeys","String","filterMode","type","default","noFilter","Boolean","filterItems","items","options","array","filter","keys","customFiltersLength","lookAheadItem","loop","i","transformed","customMatches","defaultMatches","index","matches","key","keyFilter","title","defaultMatchesLength","customMatchesLength","useFilter","props","filteredItems","filteredMatches","Map","transformedItems","transform","map","_query","strQuery","results","originalItems","_filteredItems","_filteredMatches","forEach","_ref","set","getMatches","get","highlightResult","name","text","start","slice"],"sources":["../../src/composables/filter.tsx"],"sourcesContent":["/* eslint-disable max-statements */\n/* eslint-disable no-labels */\n\n// Utilities\nimport { computed, shallowRef, unref, watchEffect } from 'vue'\nimport { getPropertyFromItem, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\n/**\n * - boolean: match without highlight\n * - number: single match (index), length already known\n * - []: single match (start, end)\n * - [][]: multiple matches (start, end), shouldn't overlap\n */\nexport type FilterMatchArraySingle = readonly [number, number]\nexport type FilterMatchArrayMultiple = readonly FilterMatchArraySingle[]\nexport type FilterMatchArray = FilterMatchArraySingle | FilterMatchArrayMultiple\nexport type FilterMatch = boolean | number | FilterMatchArray\nexport type FilterFunction = (value: string, query: string, item?: InternalItem) => FilterMatch\nexport type FilterKeyFunctions = Record<string, FilterFunction>\nexport type FilterKeys = string | string[]\nexport type FilterMode = 'some' | 'every' | 'union' | 'intersection'\n\nexport interface FilterProps {\n customFilter?: FilterFunction\n customKeyFilter?: FilterKeyFunctions\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n}\n\nexport interface InternalItem<T = any> {\n value: any\n raw: T\n type?: string\n}\n\n// Composables\nexport const defaultFilter: FilterFunction = (value, query, item) => {\n if (value == null || query == null) return -1\n if (!query.length) return 0\n\n value = value.toString().toLocaleLowerCase()\n query = query.toString().toLocaleLowerCase()\n\n const result = []\n let idx = value.indexOf(query)\n while (~idx) {\n result.push([idx, idx + query.length] as const)\n\n idx = value.indexOf(query, idx + query.length)\n }\n\n return result.length ? result : -1\n}\n\nfunction normaliseMatch (match: FilterMatch, query: string): FilterMatchArrayMultiple | undefined {\n if (match == null || typeof match === 'boolean' || match === -1) return\n if (typeof match === 'number') return [[match, match + query.length]]\n if (Array.isArray(match[0])) return match as FilterMatchArrayMultiple\n return [match] as FilterMatchArrayMultiple\n}\n\nexport const makeFilterProps = propsFactory({\n customFilter: Function as PropType<FilterFunction>,\n customKeyFilter: Object as PropType<FilterKeyFunctions>,\n filterKeys: [Array, String] as PropType<FilterKeys>,\n filterMode: {\n type: String as PropType<FilterMode>,\n default: 'intersection',\n },\n noFilter: Boolean,\n}, 'filter')\n\nexport function filterItems (\n items: readonly (readonly [item: InternalItem, transformed: {}])[] | readonly InternalItem[],\n query: string,\n options?: {\n customKeyFilter?: FilterKeyFunctions\n default?: FilterFunction\n filterKeys?: FilterKeys\n filterMode?: FilterMode\n noFilter?: boolean\n },\n) {\n type FilterResult = { index: number, matches: Record<string, FilterMatchArrayMultiple | undefined>, type?: 'divider' | 'subheader' }\n const array: FilterResult[] = []\n // always ensure we fall back to a functioning filter\n const filter = options?.default ?? defaultFilter\n const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false\n const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length\n\n if (!items?.length) return array\n\n let lookAheadItem: FilterResult | null = null\n\n loop:\n for (let i = 0; i < items.length; i++) {\n const [item, transformed = item] = wrapInArray(items[i]) as readonly [InternalItem, {}]\n const customMatches: Record<string, FilterMatchArrayMultiple | undefined> = {}\n const defaultMatches: Record<string, FilterMatchArrayMultiple | undefined> = {}\n let match: FilterMatch = -1\n\n if ((query || customFiltersLength > 0) && !options?.noFilter) {\n if (typeof item === 'object') {\n if (item.type === 'divider' || item.type === 'subheader') {\n if (lookAheadItem?.type === 'divider' && item.type === 'subheader') {\n array.push(lookAheadItem) // divider before subheader\n }\n\n lookAheadItem = { index: i, matches: { }, type: item.type }\n continue\n }\n\n const filterKeys = keys || Object.keys(transformed)\n\n for (const key of filterKeys) {\n const value = getPropertyFromItem(transformed, key)\n const keyFilter = options?.customKeyFilter?.[key]\n\n match = keyFilter\n ? keyFilter(value, query, item)\n : filter(value, query, item)\n\n if (match !== -1 && match !== false) {\n if (keyFilter) customMatches[key] = normaliseMatch(match, query)\n else defaultMatches[key] = normaliseMatch(match, query)\n } else if (options?.filterMode === 'every') {\n continue loop\n }\n }\n } else {\n match = filter(item, query, item)\n if (match !== -1 && match !== false) {\n defaultMatches.title = normaliseMatch(match, query)\n }\n }\n\n const defaultMatchesLength = Object.keys(defaultMatches).length\n const customMatchesLength = Object.keys(customMatches).length\n\n if (!defaultMatchesLength && !customMatchesLength) continue\n\n if (\n options?.filterMode === 'union' &&\n customMatchesLength !== customFiltersLength &&\n !defaultMatchesLength\n ) continue\n\n if (\n options?.filterMode === 'intersection' &&\n (\n customMatchesLength !== customFiltersLength ||\n !defaultMatchesLength\n )\n ) continue\n }\n\n if (lookAheadItem) {\n array.push(lookAheadItem)\n lookAheadItem = null\n }\n\n array.push({ index: i, matches: { ...defaultMatches, ...customMatches } })\n }\n\n return array\n}\n\nexport function useFilter <T extends InternalItem> (\n props: FilterProps,\n items: MaybeRef<T[]>,\n query: Ref<string | undefined> | (() => string | undefined),\n options?: {\n transform?: (item: T) => {}\n customKeyFilter?: MaybeRef<FilterKeyFunctions | undefined>\n }\n) {\n const filteredItems = shallowRef<T[]>([])\n const filteredMatches = shallowRef(new Map<unknown, Record<string, FilterMatchArrayMultiple | undefined>>())\n const transformedItems = computed(() => (\n options?.transform\n ? unref(items).map(item => ([item, options.transform!(item)] as const))\n : unref(items)\n ))\n\n watchEffect(() => {\n const _query = typeof query === 'function' ? query() : unref(query)\n const strQuery = (\n typeof _query !== 'string' &&\n typeof _query !== 'number'\n ) ? '' : String(_query)\n\n const results = filterItems(\n transformedItems.value,\n strQuery,\n {\n customKeyFilter: {\n ...props.customKeyFilter,\n ...unref(options?.customKeyFilter),\n },\n default: props.customFilter,\n filterKeys: props.filterKeys,\n filterMode: props.filterMode,\n noFilter: props.noFilter,\n },\n )\n\n const originalItems = unref(items)\n\n const _filteredItems: typeof filteredItems['value'] = []\n const _filteredMatches: typeof filteredMatches['value'] = new Map()\n results.forEach(({ index, matches }) => {\n const item = originalItems[index]\n _filteredItems.push(item)\n _filteredMatches.set(item.value, matches)\n })\n filteredItems.value = _filteredItems\n filteredMatches.value = _filteredMatches\n })\n\n function getMatches (item: T) {\n return filteredMatches.value.get(item.value)\n }\n\n return { filteredItems, filteredMatches, getMatches }\n}\n\nexport function highlightResult (name: string, text: string, matches: FilterMatchArrayMultiple | undefined) {\n if (matches == null || !matches.length) return text\n\n return matches.map((match, i) => {\n const start = i === 0 ? 0 : matches[i - 1][1]\n const result = [\n <span class={ `${name}__unmask` }>{ text.slice(start, match[0]) }</span>,\n <span class={ `${name}__mask` }>{ text.slice(match[0], match[1]) }</span>,\n ]\n if (i === matches.length - 1) {\n result.push(<span class={ `${name}__unmask` }>{ text.slice(match[1]) }</span>)\n }\n return <>{ result }</>\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/entry-bundler.js
CHANGED
|
@@ -16,7 +16,7 @@ export const createVuetify = function () {
|
|
|
16
16
|
...options
|
|
17
17
|
});
|
|
18
18
|
};
|
|
19
|
-
export const version = "3.9.5-dev.2025-08-
|
|
19
|
+
export const version = "3.9.5-dev.2025-08-24";
|
|
20
20
|
createVuetify.version = version;
|
|
21
21
|
export { blueprints, components, directives };
|
|
22
22
|
export * from "./composables/index.js";
|