vft 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -1
- package/es/component.mjs +9 -6
- package/es/component.mjs.map +1 -1
- package/es/components/avatar/avatar.vue2.mjs +12 -11
- package/es/components/avatar/avatar.vue2.mjs.map +1 -1
- package/es/components/avatar/index.mjs +2 -0
- package/es/components/avatar/index.mjs.map +1 -1
- package/es/components/back-top/back-top.vue2.mjs +20 -18
- package/es/components/back-top/back-top.vue2.mjs.map +1 -1
- package/es/components/back-top/index.mjs +2 -0
- package/es/components/back-top/index.mjs.map +1 -1
- package/es/components/divider/divider.vue2.mjs +4 -2
- package/es/components/divider/divider.vue2.mjs.map +1 -1
- package/es/components/divider/index.mjs +5 -3
- package/es/components/divider/index.mjs.map +1 -1
- package/es/components/empty/empty.vue2.mjs.map +1 -1
- package/es/components/empty/index.mjs +7 -5
- package/es/components/empty/index.mjs.map +1 -1
- package/es/components/exception/index.mjs +5 -3
- package/es/components/exception/index.mjs.map +1 -1
- package/es/components/icon/icon.vue2.mjs +11 -10
- package/es/components/icon/icon.vue2.mjs.map +1 -1
- package/es/components/icon/index.mjs +5 -3
- package/es/components/icon/index.mjs.map +1 -1
- package/es/components/index.d.ts +1 -0
- package/es/components/index.mjs +11 -6
- package/es/components/index.mjs.map +1 -1
- package/es/components/result/index.mjs +5 -3
- package/es/components/result/index.mjs.map +1 -1
- package/es/components/result/result.vue2.mjs +4 -2
- package/es/components/result/result.vue2.mjs.map +1 -1
- package/es/components/tabs/index.d.ts +356 -0
- package/es/components/tabs/index.mjs +15 -0
- package/es/components/tabs/index.mjs.map +1 -0
- package/es/components/tabs/style/css.d.ts +0 -0
- package/es/components/tabs/style/css.mjs +3 -0
- package/es/components/tabs/style/css.mjs.map +1 -0
- package/es/components/tabs/style/index.d.ts +0 -0
- package/es/components/tabs/style/index.mjs +3 -0
- package/es/components/tabs/style/index.mjs.map +1 -0
- package/es/components/tabs/tab-bar.vue.d.ts +51 -0
- package/es/components/tabs/tab-bar.vue.mjs +5 -0
- package/es/components/tabs/tab-bar.vue.mjs.map +1 -0
- package/es/components/tabs/tab-bar.vue2.mjs +53 -0
- package/es/components/tabs/tab-bar.vue2.mjs.map +1 -0
- package/es/components/tabs/tab-nav.vue.d.ts +121 -0
- package/es/components/tabs/tab-nav.vue.mjs +5 -0
- package/es/components/tabs/tab-nav.vue.mjs.map +1 -0
- package/es/components/tabs/tab-nav.vue2.mjs +167 -0
- package/es/components/tabs/tab-nav.vue2.mjs.map +1 -0
- package/es/components/tabs/tab-pane.vue.d.ts +45 -0
- package/es/components/tabs/tab-pane.vue.mjs +5 -0
- package/es/components/tabs/tab-pane.vue.mjs.map +1 -0
- package/es/components/tabs/tab-pane.vue2.mjs +57 -0
- package/es/components/tabs/tab-pane.vue2.mjs.map +1 -0
- package/es/components/tabs/tabs.vue.d.ts +159 -0
- package/es/components/tabs/tabs.vue.mjs +5 -0
- package/es/components/tabs/tabs.vue.mjs.map +1 -0
- package/es/components/tabs/tabs.vue2.mjs +151 -0
- package/es/components/tabs/tabs.vue2.mjs.map +1 -0
- package/es/components/tabs/types.d.ts +58 -0
- package/es/components/tabs/types.mjs +5 -0
- package/es/components/tabs/types.mjs.map +1 -0
- package/es/hooks/index.d.ts +1 -0
- package/es/hooks/index.mjs +6 -4
- package/es/hooks/index.mjs.map +1 -1
- package/es/hooks/use-ordered-children/index.d.ts +8 -0
- package/es/hooks/use-ordered-children/index.mjs +27 -0
- package/es/hooks/use-ordered-children/index.mjs.map +1 -0
- package/es/index.d.ts +1 -1
- package/es/index.mjs +42 -35
- package/es/index.mjs.map +1 -1
- package/es/package.json.mjs +1 -1
- package/es/style.css +1 -1
- package/es/theme-style/src/tabs.scss.mjs +5 -0
- package/es/theme-style/src/tabs.scss.mjs.map +1 -0
- package/es/utils/index.mjs +23 -10
- package/es/utils/index.mjs.map +1 -1
- package/es/utils/vue/index.d.ts +1 -0
- package/es/utils/vue/index.mjs +18 -5
- package/es/utils/vue/index.mjs.map +1 -1
- package/es/utils/vue/vnode.d.ts +51 -0
- package/es/utils/vue/vnode.mjs +67 -0
- package/es/utils/vue/vnode.mjs.map +1 -0
- package/lib/component.js +1 -1
- package/lib/component.js.map +1 -1
- package/lib/components/avatar/avatar.vue2.js +1 -1
- package/lib/components/avatar/avatar.vue2.js.map +1 -1
- package/lib/components/avatar/index.js +1 -1
- package/lib/components/avatar/index.js.map +1 -1
- package/lib/components/back-top/back-top.vue2.js +1 -1
- package/lib/components/back-top/back-top.vue2.js.map +1 -1
- package/lib/components/back-top/index.js +1 -1
- package/lib/components/back-top/index.js.map +1 -1
- package/lib/components/divider/divider.vue2.js +1 -1
- package/lib/components/divider/divider.vue2.js.map +1 -1
- package/lib/components/divider/index.js +1 -1
- package/lib/components/divider/index.js.map +1 -1
- package/lib/components/empty/empty.vue2.js.map +1 -1
- package/lib/components/empty/index.js +1 -1
- package/lib/components/empty/index.js.map +1 -1
- package/lib/components/exception/index.js +1 -1
- package/lib/components/exception/index.js.map +1 -1
- package/lib/components/icon/icon.vue2.js +1 -1
- package/lib/components/icon/icon.vue2.js.map +1 -1
- package/lib/components/icon/index.js +1 -1
- package/lib/components/icon/index.js.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +1 -1
- package/lib/components/result/index.js +1 -1
- package/lib/components/result/index.js.map +1 -1
- package/lib/components/result/result.vue2.js +1 -1
- package/lib/components/result/result.vue2.js.map +1 -1
- package/lib/components/tabs/index.d.ts +356 -0
- package/lib/components/tabs/index.js +2 -0
- package/lib/components/tabs/index.js.map +1 -0
- package/lib/components/tabs/style/css.d.ts +0 -0
- package/lib/components/tabs/style/css.js +2 -0
- package/lib/components/tabs/style/css.js.map +1 -0
- package/lib/components/tabs/style/index.d.ts +0 -0
- package/lib/components/tabs/style/index.js +2 -0
- package/lib/components/tabs/style/index.js.map +1 -0
- package/lib/components/tabs/tab-bar.vue.d.ts +51 -0
- package/lib/components/tabs/tab-bar.vue.js +2 -0
- package/lib/components/tabs/tab-bar.vue.js.map +1 -0
- package/lib/components/tabs/tab-bar.vue2.js +2 -0
- package/lib/components/tabs/tab-bar.vue2.js.map +1 -0
- package/lib/components/tabs/tab-nav.vue.d.ts +121 -0
- package/lib/components/tabs/tab-nav.vue.js +2 -0
- package/lib/components/tabs/tab-nav.vue.js.map +1 -0
- package/lib/components/tabs/tab-nav.vue2.js +2 -0
- package/lib/components/tabs/tab-nav.vue2.js.map +1 -0
- package/lib/components/tabs/tab-pane.vue.d.ts +45 -0
- package/lib/components/tabs/tab-pane.vue.js +2 -0
- package/lib/components/tabs/tab-pane.vue.js.map +1 -0
- package/lib/components/tabs/tab-pane.vue2.js +2 -0
- package/lib/components/tabs/tab-pane.vue2.js.map +1 -0
- package/lib/components/tabs/tabs.vue.d.ts +159 -0
- package/lib/components/tabs/tabs.vue.js +2 -0
- package/lib/components/tabs/tabs.vue.js.map +1 -0
- package/lib/components/tabs/tabs.vue2.js +2 -0
- package/lib/components/tabs/tabs.vue2.js.map +1 -0
- package/lib/components/tabs/types.d.ts +58 -0
- package/lib/components/tabs/types.js +2 -0
- package/lib/components/tabs/types.js.map +1 -0
- package/lib/hooks/index.d.ts +1 -0
- package/lib/hooks/index.js +1 -1
- package/lib/hooks/use-ordered-children/index.d.ts +8 -0
- package/lib/hooks/use-ordered-children/index.js +2 -0
- package/lib/hooks/use-ordered-children/index.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json.js +1 -1
- package/lib/theme-style/src/tabs.scss.js +2 -0
- package/lib/theme-style/src/tabs.scss.js.map +1 -0
- package/lib/utils/index.js +1 -1
- package/lib/utils/vue/index.d.ts +1 -0
- package/lib/utils/vue/index.js +1 -1
- package/lib/utils/vue/vnode.d.ts +51 -0
- package/lib/utils/vue/vnode.js +2 -0
- package/lib/utils/vue/vnode.js.map +1 -0
- package/package.json +4 -1
- package/theme-style/index.css +1 -1
- package/theme-style/src/index.scss +1 -0
- package/theme-style/src/tabs.scss +582 -0
- package/theme-style/vft-tabs.css +1 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
export declare const VftTabs: import("vft/es/utils").SFCWithInstall<import("vue").DefineComponent<{
|
|
2
|
+
type: {
|
|
3
|
+
type: import("vue").PropType<import("./types").TabsType | undefined>;
|
|
4
|
+
required: false;
|
|
5
|
+
};
|
|
6
|
+
closable: {
|
|
7
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
8
|
+
required: false;
|
|
9
|
+
};
|
|
10
|
+
addable: {
|
|
11
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
12
|
+
required: false;
|
|
13
|
+
};
|
|
14
|
+
modelValue: {
|
|
15
|
+
type: import("vue").PropType<Numberish>;
|
|
16
|
+
required: true;
|
|
17
|
+
};
|
|
18
|
+
editable: {
|
|
19
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
20
|
+
required: false;
|
|
21
|
+
};
|
|
22
|
+
tabPosition: {
|
|
23
|
+
type: import("vue").PropType<"left" | "right" | "top" | "bottom" | undefined>;
|
|
24
|
+
required: false;
|
|
25
|
+
};
|
|
26
|
+
beforeLeave: {
|
|
27
|
+
type: import("vue").PropType<Function | undefined>;
|
|
28
|
+
required: false;
|
|
29
|
+
};
|
|
30
|
+
stretch: {
|
|
31
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
32
|
+
required: false;
|
|
33
|
+
};
|
|
34
|
+
closeIconCfg: {
|
|
35
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
36
|
+
required: false;
|
|
37
|
+
};
|
|
38
|
+
addIconCfg: {
|
|
39
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
40
|
+
required: false;
|
|
41
|
+
};
|
|
42
|
+
arrowLeftIconCfg: {
|
|
43
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
44
|
+
required: false;
|
|
45
|
+
};
|
|
46
|
+
arrowRightIconCfg: {
|
|
47
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
48
|
+
required: false;
|
|
49
|
+
};
|
|
50
|
+
}, {
|
|
51
|
+
currentName: import("vue").Ref<Numberish>;
|
|
52
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
53
|
+
"update:modelValue": (name: Numberish) => boolean;
|
|
54
|
+
tabClick: (pane: {
|
|
55
|
+
uid: number;
|
|
56
|
+
slots: Readonly<{
|
|
57
|
+
[name: string]: import("vue").Slot | undefined;
|
|
58
|
+
}>;
|
|
59
|
+
props: {
|
|
60
|
+
label: string;
|
|
61
|
+
name: Numberish;
|
|
62
|
+
closable: boolean;
|
|
63
|
+
disabled: boolean;
|
|
64
|
+
lazy: boolean;
|
|
65
|
+
};
|
|
66
|
+
paneName: string | number | undefined;
|
|
67
|
+
active: boolean;
|
|
68
|
+
index: string | undefined;
|
|
69
|
+
isClosable: boolean;
|
|
70
|
+
attrs: Record<string, any>;
|
|
71
|
+
}, ev: Event) => boolean;
|
|
72
|
+
tabContextMenu: (pane: {
|
|
73
|
+
uid: number;
|
|
74
|
+
slots: Readonly<{
|
|
75
|
+
[name: string]: import("vue").Slot | undefined;
|
|
76
|
+
}>;
|
|
77
|
+
props: {
|
|
78
|
+
label: string;
|
|
79
|
+
name: Numberish;
|
|
80
|
+
closable: boolean;
|
|
81
|
+
disabled: boolean;
|
|
82
|
+
lazy: boolean;
|
|
83
|
+
};
|
|
84
|
+
paneName: string | number | undefined;
|
|
85
|
+
active: boolean;
|
|
86
|
+
index: string | undefined;
|
|
87
|
+
isClosable: boolean;
|
|
88
|
+
attrs: Record<string, any>;
|
|
89
|
+
}, index: number, ev: Event) => boolean;
|
|
90
|
+
tabChange: (name: Numberish) => boolean;
|
|
91
|
+
edit: (paneName: Numberish | undefined, action: "remove" | "add") => boolean;
|
|
92
|
+
tabRemove: (name: Numberish) => boolean;
|
|
93
|
+
tabAdd: () => true;
|
|
94
|
+
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
95
|
+
type: {
|
|
96
|
+
type: import("vue").PropType<import("./types").TabsType | undefined>;
|
|
97
|
+
required: false;
|
|
98
|
+
};
|
|
99
|
+
closable: {
|
|
100
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
101
|
+
required: false;
|
|
102
|
+
};
|
|
103
|
+
addable: {
|
|
104
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
105
|
+
required: false;
|
|
106
|
+
};
|
|
107
|
+
modelValue: {
|
|
108
|
+
type: import("vue").PropType<Numberish>;
|
|
109
|
+
required: true;
|
|
110
|
+
};
|
|
111
|
+
editable: {
|
|
112
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
113
|
+
required: false;
|
|
114
|
+
};
|
|
115
|
+
tabPosition: {
|
|
116
|
+
type: import("vue").PropType<"left" | "right" | "top" | "bottom" | undefined>;
|
|
117
|
+
required: false;
|
|
118
|
+
};
|
|
119
|
+
beforeLeave: {
|
|
120
|
+
type: import("vue").PropType<Function | undefined>;
|
|
121
|
+
required: false;
|
|
122
|
+
};
|
|
123
|
+
stretch: {
|
|
124
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
125
|
+
required: false;
|
|
126
|
+
};
|
|
127
|
+
closeIconCfg: {
|
|
128
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
129
|
+
required: false;
|
|
130
|
+
};
|
|
131
|
+
addIconCfg: {
|
|
132
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
133
|
+
required: false;
|
|
134
|
+
};
|
|
135
|
+
arrowLeftIconCfg: {
|
|
136
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
137
|
+
required: false;
|
|
138
|
+
};
|
|
139
|
+
arrowRightIconCfg: {
|
|
140
|
+
type: import("vue").PropType<import("..").IconProps | undefined>;
|
|
141
|
+
required: false;
|
|
142
|
+
};
|
|
143
|
+
}>> & {
|
|
144
|
+
"onUpdate:modelValue"?: ((name: Numberish) => any) | undefined;
|
|
145
|
+
onTabClick?: ((pane: {
|
|
146
|
+
uid: number;
|
|
147
|
+
slots: Readonly<{
|
|
148
|
+
[name: string]: import("vue").Slot | undefined;
|
|
149
|
+
}>;
|
|
150
|
+
props: {
|
|
151
|
+
label: string;
|
|
152
|
+
name: Numberish;
|
|
153
|
+
closable: boolean;
|
|
154
|
+
disabled: boolean;
|
|
155
|
+
lazy: boolean;
|
|
156
|
+
};
|
|
157
|
+
paneName: string | number | undefined;
|
|
158
|
+
active: boolean;
|
|
159
|
+
index: string | undefined;
|
|
160
|
+
isClosable: boolean;
|
|
161
|
+
attrs: Record<string, any>;
|
|
162
|
+
}, ev: Event) => any) | undefined;
|
|
163
|
+
onTabContextMenu?: ((pane: {
|
|
164
|
+
uid: number;
|
|
165
|
+
slots: Readonly<{
|
|
166
|
+
[name: string]: import("vue").Slot | undefined;
|
|
167
|
+
}>;
|
|
168
|
+
props: {
|
|
169
|
+
label: string;
|
|
170
|
+
name: Numberish;
|
|
171
|
+
closable: boolean;
|
|
172
|
+
disabled: boolean;
|
|
173
|
+
lazy: boolean;
|
|
174
|
+
};
|
|
175
|
+
paneName: string | number | undefined;
|
|
176
|
+
active: boolean;
|
|
177
|
+
index: string | undefined;
|
|
178
|
+
isClosable: boolean;
|
|
179
|
+
attrs: Record<string, any>;
|
|
180
|
+
}, index: number, ev: Event) => any) | undefined;
|
|
181
|
+
onTabChange?: ((name: Numberish) => any) | undefined;
|
|
182
|
+
onEdit?: ((paneName: Numberish | undefined, action: "remove" | "add") => any) | undefined;
|
|
183
|
+
onTabRemove?: ((name: Numberish) => any) | undefined;
|
|
184
|
+
onTabAdd?: (() => any) | undefined;
|
|
185
|
+
}, {}>> & {
|
|
186
|
+
new (...args: any[]): {
|
|
187
|
+
$: import("vue").ComponentInternalInstance;
|
|
188
|
+
$data: {};
|
|
189
|
+
$props: Partial<{}> & Omit<Readonly<import("vue").ExtractPropTypes<{
|
|
190
|
+
label: {
|
|
191
|
+
type: import("vue").PropType<string | undefined>;
|
|
192
|
+
required: false;
|
|
193
|
+
};
|
|
194
|
+
name: {
|
|
195
|
+
type: import("vue").PropType<Numberish | undefined>;
|
|
196
|
+
required: false;
|
|
197
|
+
};
|
|
198
|
+
closable: {
|
|
199
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
200
|
+
required: false;
|
|
201
|
+
};
|
|
202
|
+
disabled: {
|
|
203
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
204
|
+
required: false;
|
|
205
|
+
};
|
|
206
|
+
lazy: {
|
|
207
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
208
|
+
required: false;
|
|
209
|
+
};
|
|
210
|
+
}>> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>;
|
|
211
|
+
$attrs: {
|
|
212
|
+
[x: string]: unknown;
|
|
213
|
+
};
|
|
214
|
+
$refs: {
|
|
215
|
+
[x: string]: unknown;
|
|
216
|
+
};
|
|
217
|
+
$slots: Readonly<{
|
|
218
|
+
[name: string]: import("vue").Slot | undefined;
|
|
219
|
+
}>;
|
|
220
|
+
$root: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null;
|
|
221
|
+
$parent: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null;
|
|
222
|
+
$emit: (event: string, ...args: any[]) => void;
|
|
223
|
+
$el: any;
|
|
224
|
+
$options: import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
|
|
225
|
+
label: {
|
|
226
|
+
type: import("vue").PropType<string | undefined>;
|
|
227
|
+
required: false;
|
|
228
|
+
};
|
|
229
|
+
name: {
|
|
230
|
+
type: import("vue").PropType<Numberish | undefined>;
|
|
231
|
+
required: false;
|
|
232
|
+
};
|
|
233
|
+
closable: {
|
|
234
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
235
|
+
required: false;
|
|
236
|
+
};
|
|
237
|
+
disabled: {
|
|
238
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
239
|
+
required: false;
|
|
240
|
+
};
|
|
241
|
+
lazy: {
|
|
242
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
243
|
+
required: false;
|
|
244
|
+
};
|
|
245
|
+
}>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {}, {}, string> & {
|
|
246
|
+
beforeCreate?: ((() => void) | (() => void)[]) | undefined;
|
|
247
|
+
created?: ((() => void) | (() => void)[]) | undefined;
|
|
248
|
+
beforeMount?: ((() => void) | (() => void)[]) | undefined;
|
|
249
|
+
mounted?: ((() => void) | (() => void)[]) | undefined;
|
|
250
|
+
beforeUpdate?: ((() => void) | (() => void)[]) | undefined;
|
|
251
|
+
updated?: ((() => void) | (() => void)[]) | undefined;
|
|
252
|
+
activated?: ((() => void) | (() => void)[]) | undefined;
|
|
253
|
+
deactivated?: ((() => void) | (() => void)[]) | undefined;
|
|
254
|
+
beforeDestroy?: ((() => void) | (() => void)[]) | undefined;
|
|
255
|
+
beforeUnmount?: ((() => void) | (() => void)[]) | undefined;
|
|
256
|
+
destroyed?: ((() => void) | (() => void)[]) | undefined;
|
|
257
|
+
unmounted?: ((() => void) | (() => void)[]) | undefined;
|
|
258
|
+
renderTracked?: (((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[]) | undefined;
|
|
259
|
+
renderTriggered?: (((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[]) | undefined;
|
|
260
|
+
errorCaptured?: (((err: unknown, instance: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null, info: string) => boolean | void) | ((err: unknown, instance: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null, info: string) => boolean | void)[]) | undefined;
|
|
261
|
+
};
|
|
262
|
+
$forceUpdate: () => void;
|
|
263
|
+
$nextTick: typeof import("vue").nextTick;
|
|
264
|
+
$watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (args_0: R, args_1: R) => any : (...args: any) => any, options?: import("vue").WatchOptions<boolean> | undefined): import("vue").WatchStopHandle;
|
|
265
|
+
} & Readonly<import("vue").ExtractPropTypes<{
|
|
266
|
+
label: {
|
|
267
|
+
type: import("vue").PropType<string | undefined>;
|
|
268
|
+
required: false;
|
|
269
|
+
};
|
|
270
|
+
name: {
|
|
271
|
+
type: import("vue").PropType<Numberish | undefined>;
|
|
272
|
+
required: false;
|
|
273
|
+
};
|
|
274
|
+
closable: {
|
|
275
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
276
|
+
required: false;
|
|
277
|
+
};
|
|
278
|
+
disabled: {
|
|
279
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
280
|
+
required: false;
|
|
281
|
+
};
|
|
282
|
+
lazy: {
|
|
283
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
284
|
+
required: false;
|
|
285
|
+
};
|
|
286
|
+
}>> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {};
|
|
287
|
+
__isFragment?: undefined;
|
|
288
|
+
__isTeleport?: undefined;
|
|
289
|
+
__isSuspense?: undefined;
|
|
290
|
+
} & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
|
|
291
|
+
label: {
|
|
292
|
+
type: import("vue").PropType<string | undefined>;
|
|
293
|
+
required: false;
|
|
294
|
+
};
|
|
295
|
+
name: {
|
|
296
|
+
type: import("vue").PropType<Numberish | undefined>;
|
|
297
|
+
required: false;
|
|
298
|
+
};
|
|
299
|
+
closable: {
|
|
300
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
301
|
+
required: false;
|
|
302
|
+
};
|
|
303
|
+
disabled: {
|
|
304
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
305
|
+
required: false;
|
|
306
|
+
};
|
|
307
|
+
lazy: {
|
|
308
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
309
|
+
required: false;
|
|
310
|
+
};
|
|
311
|
+
}>>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {}, {}, string> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
|
|
312
|
+
export declare const VftTabPane: import("vft/es/utils").SFCWithInstall<import("vue").DefineComponent<{
|
|
313
|
+
label: {
|
|
314
|
+
type: import("vue").PropType<string | undefined>;
|
|
315
|
+
required: false;
|
|
316
|
+
};
|
|
317
|
+
name: {
|
|
318
|
+
type: import("vue").PropType<Numberish | undefined>;
|
|
319
|
+
required: false;
|
|
320
|
+
};
|
|
321
|
+
closable: {
|
|
322
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
323
|
+
required: false;
|
|
324
|
+
};
|
|
325
|
+
disabled: {
|
|
326
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
327
|
+
required: false;
|
|
328
|
+
};
|
|
329
|
+
lazy: {
|
|
330
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
331
|
+
required: false;
|
|
332
|
+
};
|
|
333
|
+
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
334
|
+
label: {
|
|
335
|
+
type: import("vue").PropType<string | undefined>;
|
|
336
|
+
required: false;
|
|
337
|
+
};
|
|
338
|
+
name: {
|
|
339
|
+
type: import("vue").PropType<Numberish | undefined>;
|
|
340
|
+
required: false;
|
|
341
|
+
};
|
|
342
|
+
closable: {
|
|
343
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
344
|
+
required: false;
|
|
345
|
+
};
|
|
346
|
+
disabled: {
|
|
347
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
348
|
+
required: false;
|
|
349
|
+
};
|
|
350
|
+
lazy: {
|
|
351
|
+
type: import("vue").PropType<boolean | undefined>;
|
|
352
|
+
required: false;
|
|
353
|
+
};
|
|
354
|
+
}>>, {}>>;
|
|
355
|
+
export default VftTabs;
|
|
356
|
+
export * from './types';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../../utils/vue/install.js");require("vue");require("@vue/shared");require("@vft/utils");const a=require("./tabs.vue2.js"),t=require("./tab-pane.vue2.js"),r=require("./types.js"),u=e.withInstall(a.default,t.default),s=e.withNoopInstall(t.default);exports.TabsRootContextKey=r.TabsRootContextKey;exports.VftTabPane=s;exports.VftTabs=u;exports.default=u;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../packages/components/tabs/index.ts"],"sourcesContent":["import { withInstall, withNoopInstall } from '@vft-ui/utils'\nimport Tabs from './tabs.vue';\nimport TabPane from './tab-pane.vue';\n\nexport const VftTabs = withInstall(Tabs, TabPane)\nexport const VftTabPane = withNoopInstall(TabPane)\nexport default VftTabs\n\nexport * from './types';\n"],"names":["VftTabs","withInstall","Tabs","TabPane","VftTabPane","withNoopInstall"],"mappings":"gTAIaA,EAAUC,EAAAA,YAAYC,EAAA,QAAMC,SAAO,EACnCC,EAAaC,kBAAgBF,EAAO,OAAA"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { PropType as __PropType } from 'vue';
|
|
2
|
+
import type { CSSProperties } from 'vue';
|
|
3
|
+
declare const _sfc_main: import("vue").DefineComponent<{
|
|
4
|
+
tabs: {
|
|
5
|
+
type: __PropType<{
|
|
6
|
+
uid: number;
|
|
7
|
+
slots: Readonly<{
|
|
8
|
+
[name: string]: import("vue").Slot | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
props: {
|
|
11
|
+
label: string;
|
|
12
|
+
name: Numberish;
|
|
13
|
+
closable: boolean;
|
|
14
|
+
disabled: boolean;
|
|
15
|
+
lazy: boolean;
|
|
16
|
+
};
|
|
17
|
+
paneName: string | number | undefined;
|
|
18
|
+
active: boolean;
|
|
19
|
+
index: string | undefined;
|
|
20
|
+
isClosable: boolean;
|
|
21
|
+
attrs: Record<string, any>;
|
|
22
|
+
}[]>;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
}, {
|
|
26
|
+
ref: import("vue").Ref<HTMLDivElement | undefined>;
|
|
27
|
+
update: () => CSSProperties;
|
|
28
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
29
|
+
tabs: {
|
|
30
|
+
type: __PropType<{
|
|
31
|
+
uid: number;
|
|
32
|
+
slots: Readonly<{
|
|
33
|
+
[name: string]: import("vue").Slot | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
props: {
|
|
36
|
+
label: string;
|
|
37
|
+
name: Numberish;
|
|
38
|
+
closable: boolean;
|
|
39
|
+
disabled: boolean;
|
|
40
|
+
lazy: boolean;
|
|
41
|
+
};
|
|
42
|
+
paneName: string | number | undefined;
|
|
43
|
+
active: boolean;
|
|
44
|
+
index: string | undefined;
|
|
45
|
+
isClosable: boolean;
|
|
46
|
+
attrs: Record<string, any>;
|
|
47
|
+
}[]>;
|
|
48
|
+
required: true;
|
|
49
|
+
};
|
|
50
|
+
}>>, {}>;
|
|
51
|
+
export default _sfc_main;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-bar.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),S=require("./types.js"),w=require("../../hooks/use-namespace/index.js");require("@vue/shared");const u=require("@vft/utils"),$=require("@vueuse/core"),q=e.defineComponent({__name:"tab-bar",props:{tabs:null},setup(g,{expose:v}){const a=g,_=e.getCurrentInstance(),l=e.inject(S.TabsRootContextKey),p=w.useNamespace("tabs"),o=e.ref(),f=e.ref(),h=()=>{let t=0,r=0;const s=["top","bottom"].includes(l.props.tabPosition)?"width":"height",b=s==="width"?"x":"y",x=b==="x"?"left":"top";return a.tabs.every(d=>{var m,y;const n=(y=(m=_.parent)==null?void 0:m.refs)==null?void 0:y[`tab-${d.uid}`];if(!n)return!1;if(!d.active)return!0;t=n[`offset${u.capitalize(x)}`],r=n[`client${u.capitalize(s)}`];const c=window.getComputedStyle(n);return s==="width"&&(a.tabs.length>1&&(r-=Number.parseFloat(c.paddingLeft)+Number.parseFloat(c.paddingRight)),t+=Number.parseFloat(c.paddingLeft)),!1}),{[s]:`${r}px`,transform:`translate${u.capitalize(b)}(${t}px)`}},i=()=>f.value=h();e.watch(()=>a.tabs,async()=>{await e.nextTick(),i()},{immediate:!0});const z=e.computed(()=>l.props.tabPosition);return $.useResizeObserver(o,()=>i()),v({ref:o,update:i}),(t,r)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"barRef",ref:o,class:e.normalizeClass([e.unref(p).e("active-bar"),e.unref(p).is(e.unref(z))]),style:e.normalizeStyle(f.value)},null,6))}});exports.default=q;
|
|
2
|
+
//# sourceMappingURL=tab-bar.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-bar.vue2.js","sources":["../../../../../packages/components/tabs/tab-bar.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { type TabsPaneContext, TabsRootContextKey } from './types';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { capitalize } from '@vft/utils';\nimport { getCurrentInstance, inject, nextTick, ref, watch, computed } from 'vue';\nimport { useResizeObserver } from '@vueuse/core';\n\nimport type { CSSProperties } from 'vue';\n\nconst props = defineProps({\n \"tabs\": null\n});\n\nconst instance = getCurrentInstance()!;\nconst rootTabs = inject(TabsRootContextKey)!;\n\nconst ns = useNamespace('tabs');\n\nconst barRef = ref<HTMLDivElement>();\nconst barStyle = ref<CSSProperties>();\n\nconst getBarStyle = (): CSSProperties => {\n let offset = 0;\n let tabSize = 0;\n\n const sizeName = ['top', 'bottom'].includes(rootTabs.props.tabPosition!)\n ? 'width'\n : 'height';\n const sizeDir = sizeName === 'width' ? 'x' : 'y';\n const position = sizeDir === 'x' ? 'left' : 'top';\n\n props.tabs.every((tab) => {\n const $el = instance.parent?.refs?.[`tab-${tab.uid}`] as HTMLElement;\n if (!$el) return false;\n\n if (!tab.active) {\n return true;\n }\n offset = $el[`offset${capitalize(position)}`];\n tabSize = $el[`client${capitalize(sizeName)}`];\n\n const tabStyles = window.getComputedStyle($el);\n\n if (sizeName === 'width') {\n if (props.tabs.length > 1) {\n tabSize -=\n Number.parseFloat(tabStyles.paddingLeft) +\n Number.parseFloat(tabStyles.paddingRight);\n }\n offset += Number.parseFloat(tabStyles.paddingLeft);\n }\n return false;\n });\n\n return {\n [sizeName]: `${tabSize}px`,\n transform: `translate${capitalize(sizeDir)}(${offset}px)`\n };\n};\n\nconst update = () => (barStyle.value = getBarStyle());\n\nwatch(\n () => props.tabs,\n async () => {\n await nextTick();\n update();\n },\n { immediate: true }\n);\n\nconst _tabPosition = computed(() => {\n return rootTabs.props.tabPosition!;\n});\n\nuseResizeObserver(barRef, () => update());\n\ndefineExpose({\n ref: barRef,\n update\n});\n</script>\n\n<template>\n <div\n ref=\"barRef\"\n :class=\"[ns.e('active-bar'), ns.is(_tabPosition)]\"\n :style=\"barStyle\"\n />\n</template>\n"],"names":["instance","getCurrentInstance","rootTabs","inject","TabsRootContextKey","ns","useNamespace","barRef","ref","barStyle","getBarStyle","offset","tabSize","sizeName","sizeDir","position","props","tab","$el","_b","_a","capitalize","tabStyles","update","watch","nextTick","_tabPosition","computed","useResizeObserver","expose"],"mappings":"gXAaMA,EAAWC,EAAAA,qBACXC,EAAWC,SAAOC,EAAAA,kBAAkB,EAEpCC,EAAKC,eAAa,MAAM,EAExBC,EAASC,EAAAA,MACTC,EAAWD,EAAAA,MAEXE,EAAc,IAAqB,CACvC,IAAIC,EAAS,EACTC,EAAU,EAER,MAAAC,EAAW,CAAC,MAAO,QAAQ,EAAE,SAASX,EAAS,MAAM,WAAY,EACnE,QACA,SACEY,EAAUD,IAAa,QAAU,IAAM,IACvCE,EAAWD,IAAY,IAAM,OAAS,MAEtC,OAAAE,EAAA,KAAK,MAAOC,GAAQ,SACxB,MAAMC,GAAMC,GAAAC,EAAApB,EAAS,SAAT,YAAAoB,EAAiB,OAAjB,YAAAD,EAAwB,OAAOF,EAAI,OAC/C,GAAI,CAACC,EAAY,MAAA,GAEb,GAAA,CAACD,EAAI,OACA,MAAA,GAETN,EAASO,EAAI,SAASG,EAAW,WAAAN,CAAQ,GAAG,EAC5CH,EAAUM,EAAI,SAASG,EAAW,WAAAR,CAAQ,GAAG,EAEvC,MAAAS,EAAY,OAAO,iBAAiBJ,CAAG,EAE7C,OAAIL,IAAa,UACXG,EAAM,KAAK,OAAS,IAEpBJ,GAAA,OAAO,WAAWU,EAAU,WAAW,EACvC,OAAO,WAAWA,EAAU,YAAY,GAElCX,GAAA,OAAO,WAAWW,EAAU,WAAW,GAE5C,EAAA,CACR,EAEM,CACL,CAACT,CAAQ,EAAG,GAAGD,MACf,UAAW,YAAYS,EAAW,WAAAP,CAAO,KAAKH,MAAA,CAChD,EAGIY,EAAS,IAAOd,EAAS,MAAQC,EAAY,EAEnDc,EAAA,MACE,IAAMR,EAAM,KACZ,SAAY,CACV,MAAMS,EAAS,SAAA,EACRF,GACT,EACA,CAAE,UAAW,EAAK,CAAA,EAGd,MAAAG,EAAeC,EAAAA,SAAS,IACrBzB,EAAS,MAAM,WACvB,EAEiB0B,OAAAA,EAAAA,kBAAArB,EAAQ,IAAMgB,EAAA,CAAQ,EAE3BM,EAAA,CACX,IAAKtB,EACL,OAAAgB,CAAA,CACD"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { PropType as __PropType } from 'vue';
|
|
2
|
+
import { type IconProps } from 'vft/es/components';
|
|
3
|
+
import type { TabsType } from './types';
|
|
4
|
+
declare const _sfc_main: import("vue").DefineComponent<{
|
|
5
|
+
panes: {
|
|
6
|
+
type: __PropType<{
|
|
7
|
+
uid: number;
|
|
8
|
+
slots: Readonly<{
|
|
9
|
+
[name: string]: import("vue").Slot | undefined;
|
|
10
|
+
}>;
|
|
11
|
+
props: {
|
|
12
|
+
label: string;
|
|
13
|
+
name: Numberish;
|
|
14
|
+
closable: boolean;
|
|
15
|
+
disabled: boolean;
|
|
16
|
+
lazy: boolean;
|
|
17
|
+
};
|
|
18
|
+
paneName: string | number | undefined;
|
|
19
|
+
active: boolean;
|
|
20
|
+
index: string | undefined;
|
|
21
|
+
isClosable: boolean;
|
|
22
|
+
attrs: Record<string, any>;
|
|
23
|
+
}[]>;
|
|
24
|
+
required: true;
|
|
25
|
+
};
|
|
26
|
+
editable: {
|
|
27
|
+
type: __PropType<boolean | undefined>;
|
|
28
|
+
required: false;
|
|
29
|
+
};
|
|
30
|
+
addable: {
|
|
31
|
+
type: __PropType<boolean | undefined>;
|
|
32
|
+
required: false;
|
|
33
|
+
};
|
|
34
|
+
type: {
|
|
35
|
+
type: __PropType<TabsType | undefined>;
|
|
36
|
+
required: false;
|
|
37
|
+
};
|
|
38
|
+
stretch: {
|
|
39
|
+
type: __PropType<boolean | undefined>;
|
|
40
|
+
required: false;
|
|
41
|
+
};
|
|
42
|
+
closeIconCfg: {
|
|
43
|
+
type: __PropType<IconProps | undefined>;
|
|
44
|
+
required: false;
|
|
45
|
+
};
|
|
46
|
+
addIconCfg: {
|
|
47
|
+
type: __PropType<IconProps | undefined>;
|
|
48
|
+
required: false;
|
|
49
|
+
};
|
|
50
|
+
arrowLeftIconCfg: {
|
|
51
|
+
type: __PropType<IconProps | undefined>;
|
|
52
|
+
required: false;
|
|
53
|
+
};
|
|
54
|
+
arrowRightIconCfg: {
|
|
55
|
+
type: __PropType<IconProps | undefined>;
|
|
56
|
+
required: false;
|
|
57
|
+
};
|
|
58
|
+
}, {
|
|
59
|
+
scrollToActiveTab: () => Promise<void>;
|
|
60
|
+
removeFocus: () => boolean;
|
|
61
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("tabClick" | "tabRemove" | "tabAdd" | "tabContextmenu")[], "tabClick" | "tabRemove" | "tabAdd" | "tabContextmenu", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
62
|
+
panes: {
|
|
63
|
+
type: __PropType<{
|
|
64
|
+
uid: number;
|
|
65
|
+
slots: Readonly<{
|
|
66
|
+
[name: string]: import("vue").Slot | undefined;
|
|
67
|
+
}>;
|
|
68
|
+
props: {
|
|
69
|
+
label: string;
|
|
70
|
+
name: Numberish;
|
|
71
|
+
closable: boolean;
|
|
72
|
+
disabled: boolean;
|
|
73
|
+
lazy: boolean;
|
|
74
|
+
};
|
|
75
|
+
paneName: string | number | undefined;
|
|
76
|
+
active: boolean;
|
|
77
|
+
index: string | undefined;
|
|
78
|
+
isClosable: boolean;
|
|
79
|
+
attrs: Record<string, any>;
|
|
80
|
+
}[]>;
|
|
81
|
+
required: true;
|
|
82
|
+
};
|
|
83
|
+
editable: {
|
|
84
|
+
type: __PropType<boolean | undefined>;
|
|
85
|
+
required: false;
|
|
86
|
+
};
|
|
87
|
+
addable: {
|
|
88
|
+
type: __PropType<boolean | undefined>;
|
|
89
|
+
required: false;
|
|
90
|
+
};
|
|
91
|
+
type: {
|
|
92
|
+
type: __PropType<TabsType | undefined>;
|
|
93
|
+
required: false;
|
|
94
|
+
};
|
|
95
|
+
stretch: {
|
|
96
|
+
type: __PropType<boolean | undefined>;
|
|
97
|
+
required: false;
|
|
98
|
+
};
|
|
99
|
+
closeIconCfg: {
|
|
100
|
+
type: __PropType<IconProps | undefined>;
|
|
101
|
+
required: false;
|
|
102
|
+
};
|
|
103
|
+
addIconCfg: {
|
|
104
|
+
type: __PropType<IconProps | undefined>;
|
|
105
|
+
required: false;
|
|
106
|
+
};
|
|
107
|
+
arrowLeftIconCfg: {
|
|
108
|
+
type: __PropType<IconProps | undefined>;
|
|
109
|
+
required: false;
|
|
110
|
+
};
|
|
111
|
+
arrowRightIconCfg: {
|
|
112
|
+
type: __PropType<IconProps | undefined>;
|
|
113
|
+
required: false;
|
|
114
|
+
};
|
|
115
|
+
}>> & {
|
|
116
|
+
onTabClick?: ((...args: any[]) => any) | undefined;
|
|
117
|
+
onTabRemove?: ((...args: any[]) => any) | undefined;
|
|
118
|
+
onTabAdd?: ((...args: any[]) => any) | undefined;
|
|
119
|
+
onTabContextmenu?: ((...args: any[]) => any) | undefined;
|
|
120
|
+
}, {}>;
|
|
121
|
+
export default _sfc_main;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-nav.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const o=require("vue");require("../divider/index.js");const N=require("../icon/index.js");require("../avatar/index.js");require("../empty/index.js");require("../result/index.js");require("../exception/index.js");require("./index.js");const X=require("../../hooks/use-namespace/index.js");require("@vue/shared");const V=require("@vft/utils"),y=require("@vft/constants"),Y=require("./types.js"),T=require("@vueuse/core"),G=require("./tab-bar.vue2.js"),J=o.defineComponent({__name:"tab-nav",props:{panes:null,editable:{type:Boolean},addable:{type:Boolean},type:null,stretch:{type:Boolean},closeIconCfg:null,addIconCfg:null,arrowLeftIconCfg:null,arrowRightIconCfg:null},emits:["tabClick","tabRemove","tabAdd","tabContextmenu"],setup(l,{expose:R,emit:m}){var S;const P=o.getCurrentInstance(),C=o.inject(Y.TabsRootContextKey),n=X.useNamespace("tabs"),A=T.useDocumentVisibility(),D=T.useWindowFocus(),x=o.ref(),b=o.ref(),h=o.ref(),f=o.ref(!1),d=o.ref(0),I=o.ref(!1),w=o.ref(!0),p=o.computed(()=>["top","bottom"].includes(C.props.tabPosition)?"width":"height"),F=o.computed(()=>({transform:`translate${p.value==="width"?"X":"Y"}(-${d.value}px)`})),L=()=>{if(!b.value)return;const t=b.value[`offset${V.capitalize(p.value)}`],e=d.value;e&&(d.value=e>t?e-t:0)},M=()=>{if(!b.value||!h.value)return;const t=h.value[`offset${V.capitalize(p.value)}`],e=b.value[`offset${V.capitalize(p.value)}`],a=d.value;t-a<=e||(d.value=t-a>e*2?a+e:t-e)},$=async()=>{const t=h.value;if(!f.value||!x.value||!b.value||!t)return;await o.nextTick();const e=x.value.querySelector(".is-active");if(!e)return;const a=b.value,g=["top","bottom"].includes(C.props.tabPosition),i=e.getBoundingClientRect(),s=a.getBoundingClientRect(),u=g?t.offsetWidth-s.width:t.offsetHeight-s.height,r=d.value;let c=r;g?(i.left<s.left&&(c=r-(s.left-i.left)),i.right>s.right&&(c=r+i.right-s.right)):(i.top<s.top&&(c=r-(s.top-i.top)),i.bottom>s.bottom&&(c=r+(i.bottom-s.bottom))),c=Math.max(c,0),d.value=Math.min(c,u)},O=()=>{if(!h.value||!b.value)return;const t=h.value[`offset${V.capitalize(p.value)}`],e=b.value[`offset${V.capitalize(p.value)}`],a=d.value;e<t?(f.value=f.value||{},f.value.prev=a,f.value.next=a+e<t,t-a<e&&(d.value=t-e)):(f.value=!1,a>0&&(d.value=0))},K=t=>{const e=t.code,{up:a,down:g,left:i,right:s}=y.EVENT_CODE;if(![a,g,i,s].includes(e))return;const u=Array.from(t.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)")),r=u.indexOf(t.target);let c;e===i||e===a?r===0?c=u.length-1:c=r-1:r<u.length-1?c=r+1:c=0,u[c].focus(),u[c].click(),z()},z=()=>{w.value&&(I.value=!0)},q=()=>I.value=!1;o.watch(A,t=>{t==="hidden"?w.value=!1:t==="visible"&&setTimeout(()=>w.value=!0,50)}),o.watch(D,t=>{t?setTimeout(()=>w.value=!0,50):w.value=!1}),T.useResizeObserver(x,O),o.onMounted(()=>setTimeout(()=>$(),0)),o.onUpdated(()=>O()),R({scrollToActiveTab:$,removeFocus:q}),o.watch(()=>l.panes,()=>P.update(),{flush:"post"});const j=o.computed(()=>{var t,e;return f.value?[o.createVNode("span",{class:[n.e("nav-prev"),n.is("disabled",!f.value.prev)],onClick:L},[(t=l.arrowLeftIconCfg)!=null&&t.icon?o.createVNode(N.VftIcon,l.arrowLeftIconCfg,null):null]),o.createVNode("span",{class:[n.e("nav-next"),n.is("disabled",!f.value.next)],onClick:M},[(e=l.arrowRightIconCfg)!=null&&e.icon?o.createVNode(N.VftIcon,l.arrowRightIconCfg,null):null])]:null}),H=o.computed(()=>{var t;return(t=l.panes)==null?void 0:t.map((e,a)=>{var E,k,B;const g=e.uid,i=e.props.disabled,s=e.props.name??e.index??`${a}`,u=!i&&(e.isClosable||l.editable);e.index=`${a}`;const r=u?o.createVNode("span",{class:"is-icon-close",onClick:v=>m("tabRemove",e,v)},[(E=l.closeIconCfg)!=null&&E.icon?o.createVNode(N.VftIcon,l.closeIconCfg,null):null]):null,c=((B=(k=e.slots).label)==null?void 0:B.call(k))||e.props.label,U=!i&&e.active?0:-1;return o.createVNode("div",{ref:`tab-${g}`,class:[n.e("item"),n.is(C.props.tabPosition),n.is("active",e.active),n.is("disabled",i),n.is("closable",u),n.is("focus",I.value)],id:`tab-${s}`,key:`tab-${g}`,"aria-controls":`pane-${s}`,role:"tab","aria-selected":e.active,tabindex:U,onFocus:()=>z(),onBlur:()=>q(),onClick:v=>{q(),m("tabClick",e,s,v)},onContextmenu:v=>{v.preventDefault(),m("tabContextmenu",{pane:e,index:a,event:v})},onKeydown:v=>{u&&(v.code===y.EVENT_CODE.delete||v.code===y.EVENT_CODE.backspace)&&m("tabRemove",e,v)}},[c,r])})}),W=l.editable||l.addable?o.createVNode("span",{class:n.e("new-tab"),tabindex:"0",onClick:()=>m("tabAdd"),onKeydown:t=>{t.code===y.EVENT_CODE.enter&&m("tabAdd")}},[(S=l.addIconCfg)!=null&&S.icon?o.createVNode(N.VftIcon,l.addIconCfg,null):null]):null;return()=>o.createVNode("div",{ref:x,class:[n.e("nav-wrap"),n.is("scrollable",!!f.value),n.is(C.props.tabPosition)]},[j.value,o.createVNode("div",{class:n.e("nav-scroll"),ref:b},[o.createVNode("div",{class:[n.e("nav"),n.is(C.props.tabPosition),n.is("stretch",l.stretch&&["top","bottom"].includes(C.props.tabPosition))],ref:h,style:F.value,role:"tablist",onKeydown:K},[l.type?null:o.createVNode(G.default,{tabs:[...l.panes]},null),H.value]),W])])}});exports.default=J;
|
|
2
|
+
//# sourceMappingURL=tab-nav.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-nav.vue2.js","sources":["../../../../../packages/components/tabs/tab-nav.vue"],"sourcesContent":["<script lang=\"tsx\" setup>\nimport {\n computed,\n type CSSProperties,\n getCurrentInstance,\n inject,\n nextTick,\n onMounted,\n onUpdated,\n ref,\n watch\n} from 'vue';\nimport { type IconProps, VftIcon } from '@vft-ui/components';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { capitalize } from '@vft/utils';\nimport { EVENT_CODE } from '@vft/constants';\nimport { TabsRootContextKey } from './types';\nimport type { TabsPaneContext, TabsType, Scrollable } from './types';\nimport { useDocumentVisibility, useResizeObserver, useWindowFocus } from '@vueuse/core';\nimport TabBar from './tab-bar.vue';\n\ninterface TabNavProps {\n panes: TabsPaneContext[];\n /** 标签是否同时可增加和关闭 */\n editable?: boolean;\n /** 标签是否可增加 */\n addable?: boolean;\n /** tab 类型 */\n type?: TabsType;\n stretch?: boolean;\n /** 图标配置 */\n closeIconCfg?: IconProps;\n addIconCfg?: IconProps;\n arrowLeftIconCfg?: IconProps;\n arrowRightIconCfg?: IconProps;\n}\n\ndefineProps({\n \"panes\": null,\n \"editable\": { type: Boolean, },\n \"addable\": { type: Boolean, },\n \"type\": null,\n \"stretch\": { type: Boolean, },\n \"closeIconCfg\": null,\n \"addIconCfg\": null,\n \"arrowLeftIconCfg\": null,\n \"arrowRightIconCfg\": null\n})\n\nconst emit = defineEmits(['tabClick', 'tabRemove', 'tabAdd', 'tabContextmenu']);\n\nconst vm = getCurrentInstance()!;\n\n// 获取从 index.vue 提供的数据信息\nconst rootTabs = inject(TabsRootContextKey)!;\n\nconst ns = useNamespace('tabs');\nconst visibility = useDocumentVisibility();\nconst focused = useWindowFocus();\n\n// 整个 nav dom 包含前进后退 btn (vri-tabs__nav-wrap)\nconst el$ = ref<HTMLDivElement>();\n// el$ 子节点 包含 newButton (vri-tabs__nav-scroll)\nconst navScroll$ = ref<HTMLDivElement>();\n// navScroll$ 子节点 (vri-tabs__nav)\nconst nav$ = ref<HTMLDivElement>();\n\n/** 是否展示左右滚动 */\nconst scrollable = ref<false | Scrollable>(false);\n// 记录滚动时的偏移量\nconst navOffset = ref(0);\nconst isFocus = ref(false);\nconst focusable = ref(true);\n\n// 根据 tabPosition 确定 sizeName 是 width or height\nconst sizeName = computed(() => ['top', 'bottom'].includes(rootTabs.props.tabPosition!) ? 'width' : 'height');\n\n// 设置 tab 导航栏的 translateX or translateY 的偏移量\nconst navStyle = computed<CSSProperties>(() => {\n const dir = sizeName.value === 'width' ? 'X' : 'Y';\n return {\n transform: `translate${dir}(-${navOffset.value}px)`\n };\n});\n\n// 向前滚动\nconst scrollPrev = () => {\n if (!navScroll$.value) return;\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\n\n if (!currentOffset) return;\n\n navOffset.value = currentOffset > containerSize ? currentOffset - containerSize : 0;\n};\n\n// 向后滚动\nconst scrollNext = () => {\n if (!navScroll$.value || !nav$.value) return;\n\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];\n const containerSize =\n navScroll$.value[`offset${capitalize(sizeName.value)}`];\n const currentOffset = navOffset.value;\n\n if (navSize - currentOffset <= containerSize) return;\n\n navOffset.value = navSize - currentOffset > containerSize * 2\n ? currentOffset + containerSize\n : navSize - containerSize;\n};\n\n// 滚动到激活的 tab 主要是获取 navOffset 的值\nconst scrollToActiveTab = async() => {\n const nav = nav$.value;\n if (!scrollable.value || !el$.value || !navScroll$.value || !nav) return;\n\n await nextTick();\n\n const activeTab = el$.value.querySelector('.is-active');\n if (!activeTab) return;\n\n const navScroll = navScroll$.value;\n const isHorizontal = ['top', 'bottom'].includes(\n rootTabs.props.tabPosition!\n );\n const activeTabBounding = activeTab.getBoundingClientRect();\n // vri-tabs__nav-scroll\n const navScrollBounding = navScroll.getBoundingClientRect();\n const maxOffset = isHorizontal\n ? nav.offsetWidth - navScrollBounding.width\n : nav.offsetHeight - navScrollBounding.height;\n\n const currentOffset = navOffset.value;\n\n let newOffset = currentOffset;\n\n if (isHorizontal) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset =\n currentOffset - (navScrollBounding.left - activeTabBounding.left);\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset =\n currentOffset + activeTabBounding.right - navScrollBounding.right;\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset =\n currentOffset - (navScrollBounding.top - activeTabBounding.top);\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset =\n currentOffset +\n (activeTabBounding.bottom - navScrollBounding.bottom);\n }\n }\n newOffset = Math.max(newOffset, 0);\n navOffset.value = Math.min(newOffset, maxOffset);\n};\n\nconst update = () => {\n if (!nav$.value || !navScroll$.value) return;\n // 根据 position 的不同 获取 nav$(vri-tabs__nav) 的 offsetWidth or offsetHeight\n const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];\n // 获取到 navScroll$ 的 offsetWidth or offsetHeight\n const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];\n // 获取到当前的偏移量\n const currentOffset = navOffset.value;\n // 由于 navScroll$ 的 overflow 是 hidden,所以当 vri-tabs__nav 撑开时其宽度可能会超过 vri-tabs__nav-scroll\n if (containerSize < navSize) {\n scrollable.value = scrollable.value || {};\n scrollable.value.prev = currentOffset;\n scrollable.value.next = currentOffset + containerSize < navSize;\n if (navSize - currentOffset < containerSize) {\n navOffset.value = navSize - containerSize;\n }\n } else {\n scrollable.value = false;\n if (currentOffset > 0) {\n navOffset.value = 0;\n }\n }\n};\n\nconst changeTab = (e: KeyboardEvent) => {\n const code = e.code;\n\n const { up, down, left, right } = EVENT_CODE;\n if (![up, down, left, right].includes(code)) return;\n\n // 左右上下键更换tab\n const tabList = Array.from(\n (e.currentTarget as HTMLDivElement).querySelectorAll<HTMLDivElement>(\n '[role=tab]:not(.is-disabled)'\n )\n );\n const currentIndex = tabList.indexOf(e.target as HTMLDivElement);\n\n let nextIndex: number;\n if (code === left || code === up) {\n // left\n if (currentIndex === 0) {\n // first\n nextIndex = tabList.length - 1;\n } else {\n nextIndex = currentIndex - 1;\n }\n } else {\n // right\n if (currentIndex < tabList.length - 1) {\n // not last\n nextIndex = currentIndex + 1;\n } else {\n nextIndex = 0;\n }\n }\n tabList[nextIndex].focus(); // 改变焦点元素\n tabList[nextIndex].click(); // 选中下一个tab\n setFocus();\n};\n\nconst setFocus = () => {\n if (focusable.value) isFocus.value = true;\n};\nconst removeFocus = () => (isFocus.value = false);\n\nwatch(visibility, (visibility) => {\n if (visibility === 'hidden') {\n focusable.value = false;\n } else if (visibility === 'visible') {\n setTimeout(() => (focusable.value = true), 50);\n }\n});\n\nwatch(focused, (focused) => {\n if (focused) {\n setTimeout(() => (focusable.value = true), 50);\n } else {\n focusable.value = false;\n }\n});\n\n// 监听 resize 触发 update\nuseResizeObserver(el$, update);\n\nonMounted(() => setTimeout(() => scrollToActiveTab(), 0));\nonUpdated(() => update());\n\ndefineExpose({\n scrollToActiveTab,\n removeFocus\n});\n\nwatch(\n () => __props.panes,\n () => vm.update(),\n { flush: 'post' }\n);\n\n// 前进后退标签\nconst scrollBtn = computed(() => {\n return scrollable.value\n ? [\n <span\n class={[\n ns.e('nav-prev'),\n ns.is('disabled', !scrollable.value.prev)\n ]}\n onClick={scrollPrev}\n >\n {__props.arrowLeftIconCfg?.icon ? <VftIcon {...__props.arrowLeftIconCfg}></VftIcon> : null}\n </span>,\n <span\n class={[\n ns.e('nav-next'),\n ns.is('disabled', !scrollable.value.next)\n ]}\n onClick={scrollNext}\n >\n {__props.arrowRightIconCfg?.icon ? <VftIcon {...__props.arrowRightIconCfg}></VftIcon> : null}\n </span>\n ]\n : null;\n});\n\n// 渲染 tab-pane\nconst tabs = computed(() => {\n return __props.panes?.map((pane, index) => {\n const uid = pane.uid;\n const disabled = pane.props.disabled;\n const tabName = pane.props.name ?? pane.index ?? `${index}`;\n const closable = !disabled && (pane.isClosable || __props.editable);\n pane.index = `${index}`;\n\n // 关闭标签图标\n const btnClose = closable ? (\n <span class=\"is-icon-close\" onClick={(ev: MouseEvent) => emit('tabRemove', pane, ev)}>\n {__props.closeIconCfg?.icon ? <VftIcon {...__props.closeIconCfg}></VftIcon> : null}\n </span>\n ) : null;\n\n const tabLabelContent = pane.slots.label?.() || pane.props.label;\n const tabindex = !disabled && pane.active ? 0 : -1;\n\n return (\n <div\n ref={`tab-${uid}`}\n class={[\n ns.e('item'),\n ns.is(rootTabs.props.tabPosition!),\n ns.is('active', pane.active),\n ns.is('disabled', disabled),\n ns.is('closable', closable),\n ns.is('focus', isFocus.value)\n ]}\n id={`tab-${tabName}`}\n key={`tab-${uid}`}\n aria-controls={`pane-${tabName}`}\n role=\"tab\"\n aria-selected={pane.active}\n tabindex={tabindex}\n onFocus={() => setFocus()}\n onBlur={() => removeFocus()}\n onClick={(ev: MouseEvent) => {\n removeFocus();\n emit('tabClick', pane, tabName, ev);\n }}\n onContextmenu={(event) => {\n event.preventDefault();\n emit('tabContextmenu', { pane, index, event });\n }}\n onKeydown={(ev: KeyboardEvent) => {\n if (\n closable &&\n (ev.code === EVENT_CODE.delete ||\n ev.code === EVENT_CODE.backspace)\n ) {\n emit('tabRemove', pane, ev);\n }\n }}\n >\n {...[tabLabelContent, btnClose]}\n </div>\n );\n });\n});\n\n// 增加 tab 的 dom\nconst newButton =\n __props.editable || __props.addable ? (\n <span\n class={ns.e('new-tab')}\n tabindex=\"0\"\n onClick={() => emit('tabAdd')}\n onKeydown={(ev: KeyboardEvent) => {\n if (ev.code === EVENT_CODE.enter) emit('tabAdd');\n }}\n >\n {__props.addIconCfg?.icon ? <VftIcon {...__props.addIconCfg}></VftIcon> : null}\n </span>\n ) : null;\n\ndefineRender(() => {\n return (\n <div\n ref={el$}\n class={[\n ns.e('nav-wrap'),\n ns.is('scrollable', !!scrollable.value),\n ns.is(rootTabs.props.tabPosition!)\n ]}\n >\n {scrollBtn.value}\n <div class={ns.e('nav-scroll')} ref={navScroll$}>\n <div\n class={[\n ns.e('nav'),\n ns.is(rootTabs.props.tabPosition!),\n ns.is(\n 'stretch',\n __props.stretch &&\n ['top', 'bottom'].includes(rootTabs.props.tabPosition!)\n )\n ]}\n ref={nav$}\n style={navStyle.value}\n role=\"tablist\"\n onKeydown={changeTab}\n >\n {...[\n !__props.type ? <TabBar tabs={[...__props.panes]} /> : null,\n tabs.value\n ]}\n </div>\n {newButton}\n </div>\n </div>\n );\n});\n</script>\n"],"names":["vm","getCurrentInstance","rootTabs","inject","TabsRootContextKey","ns","useNamespace","visibility","useDocumentVisibility","focused","useWindowFocus","el$","ref","navScroll$","nav$","scrollable","navOffset","isFocus","focusable","sizeName","computed","includes","props","tabPosition","navStyle","transform","value","scrollPrev","containerSize","capitalize","currentOffset","scrollNext","navSize","scrollToActiveTab","nav","nextTick","activeTab","querySelector","navScroll","isHorizontal","activeTabBounding","getBoundingClientRect","navScrollBounding","maxOffset","offsetWidth","width","offsetHeight","height","newOffset","left","right","top","bottom","Math","max","min","update","prev","next","changeTab","e","code","up","down","EVENT_CODE","tabList","Array","from","currentTarget","querySelectorAll","currentIndex","indexOf","target","nextIndex","length","focus","click","setFocus","removeFocus","watch","setTimeout","useResizeObserver","onMounted","onUpdated","expose","__props","panes","flush","scrollBtn","_createVNode","is","arrowLeftIconCfg","icon","VftIcon","arrowRightIconCfg","tabs","map","pane","index","uid","disabled","tabName","name","closable","isClosable","editable","btnClose","ev","emit","closeIconCfg","tabLabelContent","slots","label","tabindex","active","onFocus","onBlur","event","preventDefault","delete","backspace","newButton","addable","onClick","enter","addIconCfg","stretch","type","TabBar"],"mappings":"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"}
|