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.
Files changed (167) hide show
  1. package/dist/index.css +1 -1
  2. package/es/component.mjs +9 -6
  3. package/es/component.mjs.map +1 -1
  4. package/es/components/avatar/avatar.vue2.mjs +12 -11
  5. package/es/components/avatar/avatar.vue2.mjs.map +1 -1
  6. package/es/components/avatar/index.mjs +2 -0
  7. package/es/components/avatar/index.mjs.map +1 -1
  8. package/es/components/back-top/back-top.vue2.mjs +20 -18
  9. package/es/components/back-top/back-top.vue2.mjs.map +1 -1
  10. package/es/components/back-top/index.mjs +2 -0
  11. package/es/components/back-top/index.mjs.map +1 -1
  12. package/es/components/divider/divider.vue2.mjs +4 -2
  13. package/es/components/divider/divider.vue2.mjs.map +1 -1
  14. package/es/components/divider/index.mjs +5 -3
  15. package/es/components/divider/index.mjs.map +1 -1
  16. package/es/components/empty/empty.vue2.mjs.map +1 -1
  17. package/es/components/empty/index.mjs +7 -5
  18. package/es/components/empty/index.mjs.map +1 -1
  19. package/es/components/exception/index.mjs +5 -3
  20. package/es/components/exception/index.mjs.map +1 -1
  21. package/es/components/icon/icon.vue2.mjs +11 -10
  22. package/es/components/icon/icon.vue2.mjs.map +1 -1
  23. package/es/components/icon/index.mjs +5 -3
  24. package/es/components/icon/index.mjs.map +1 -1
  25. package/es/components/index.d.ts +1 -0
  26. package/es/components/index.mjs +11 -6
  27. package/es/components/index.mjs.map +1 -1
  28. package/es/components/result/index.mjs +5 -3
  29. package/es/components/result/index.mjs.map +1 -1
  30. package/es/components/result/result.vue2.mjs +4 -2
  31. package/es/components/result/result.vue2.mjs.map +1 -1
  32. package/es/components/tabs/index.d.ts +356 -0
  33. package/es/components/tabs/index.mjs +15 -0
  34. package/es/components/tabs/index.mjs.map +1 -0
  35. package/es/components/tabs/style/css.d.ts +0 -0
  36. package/es/components/tabs/style/css.mjs +3 -0
  37. package/es/components/tabs/style/css.mjs.map +1 -0
  38. package/es/components/tabs/style/index.d.ts +0 -0
  39. package/es/components/tabs/style/index.mjs +3 -0
  40. package/es/components/tabs/style/index.mjs.map +1 -0
  41. package/es/components/tabs/tab-bar.vue.d.ts +51 -0
  42. package/es/components/tabs/tab-bar.vue.mjs +5 -0
  43. package/es/components/tabs/tab-bar.vue.mjs.map +1 -0
  44. package/es/components/tabs/tab-bar.vue2.mjs +53 -0
  45. package/es/components/tabs/tab-bar.vue2.mjs.map +1 -0
  46. package/es/components/tabs/tab-nav.vue.d.ts +121 -0
  47. package/es/components/tabs/tab-nav.vue.mjs +5 -0
  48. package/es/components/tabs/tab-nav.vue.mjs.map +1 -0
  49. package/es/components/tabs/tab-nav.vue2.mjs +167 -0
  50. package/es/components/tabs/tab-nav.vue2.mjs.map +1 -0
  51. package/es/components/tabs/tab-pane.vue.d.ts +45 -0
  52. package/es/components/tabs/tab-pane.vue.mjs +5 -0
  53. package/es/components/tabs/tab-pane.vue.mjs.map +1 -0
  54. package/es/components/tabs/tab-pane.vue2.mjs +57 -0
  55. package/es/components/tabs/tab-pane.vue2.mjs.map +1 -0
  56. package/es/components/tabs/tabs.vue.d.ts +159 -0
  57. package/es/components/tabs/tabs.vue.mjs +5 -0
  58. package/es/components/tabs/tabs.vue.mjs.map +1 -0
  59. package/es/components/tabs/tabs.vue2.mjs +151 -0
  60. package/es/components/tabs/tabs.vue2.mjs.map +1 -0
  61. package/es/components/tabs/types.d.ts +58 -0
  62. package/es/components/tabs/types.mjs +5 -0
  63. package/es/components/tabs/types.mjs.map +1 -0
  64. package/es/hooks/index.d.ts +1 -0
  65. package/es/hooks/index.mjs +6 -4
  66. package/es/hooks/index.mjs.map +1 -1
  67. package/es/hooks/use-ordered-children/index.d.ts +8 -0
  68. package/es/hooks/use-ordered-children/index.mjs +27 -0
  69. package/es/hooks/use-ordered-children/index.mjs.map +1 -0
  70. package/es/index.d.ts +1 -1
  71. package/es/index.mjs +42 -35
  72. package/es/index.mjs.map +1 -1
  73. package/es/package.json.mjs +1 -1
  74. package/es/style.css +1 -1
  75. package/es/theme-style/src/tabs.scss.mjs +5 -0
  76. package/es/theme-style/src/tabs.scss.mjs.map +1 -0
  77. package/es/utils/index.mjs +23 -10
  78. package/es/utils/index.mjs.map +1 -1
  79. package/es/utils/vue/index.d.ts +1 -0
  80. package/es/utils/vue/index.mjs +18 -5
  81. package/es/utils/vue/index.mjs.map +1 -1
  82. package/es/utils/vue/vnode.d.ts +51 -0
  83. package/es/utils/vue/vnode.mjs +67 -0
  84. package/es/utils/vue/vnode.mjs.map +1 -0
  85. package/lib/component.js +1 -1
  86. package/lib/component.js.map +1 -1
  87. package/lib/components/avatar/avatar.vue2.js +1 -1
  88. package/lib/components/avatar/avatar.vue2.js.map +1 -1
  89. package/lib/components/avatar/index.js +1 -1
  90. package/lib/components/avatar/index.js.map +1 -1
  91. package/lib/components/back-top/back-top.vue2.js +1 -1
  92. package/lib/components/back-top/back-top.vue2.js.map +1 -1
  93. package/lib/components/back-top/index.js +1 -1
  94. package/lib/components/back-top/index.js.map +1 -1
  95. package/lib/components/divider/divider.vue2.js +1 -1
  96. package/lib/components/divider/divider.vue2.js.map +1 -1
  97. package/lib/components/divider/index.js +1 -1
  98. package/lib/components/divider/index.js.map +1 -1
  99. package/lib/components/empty/empty.vue2.js.map +1 -1
  100. package/lib/components/empty/index.js +1 -1
  101. package/lib/components/empty/index.js.map +1 -1
  102. package/lib/components/exception/index.js +1 -1
  103. package/lib/components/exception/index.js.map +1 -1
  104. package/lib/components/icon/icon.vue2.js +1 -1
  105. package/lib/components/icon/icon.vue2.js.map +1 -1
  106. package/lib/components/icon/index.js +1 -1
  107. package/lib/components/icon/index.js.map +1 -1
  108. package/lib/components/index.d.ts +1 -0
  109. package/lib/components/index.js +1 -1
  110. package/lib/components/result/index.js +1 -1
  111. package/lib/components/result/index.js.map +1 -1
  112. package/lib/components/result/result.vue2.js +1 -1
  113. package/lib/components/result/result.vue2.js.map +1 -1
  114. package/lib/components/tabs/index.d.ts +356 -0
  115. package/lib/components/tabs/index.js +2 -0
  116. package/lib/components/tabs/index.js.map +1 -0
  117. package/lib/components/tabs/style/css.d.ts +0 -0
  118. package/lib/components/tabs/style/css.js +2 -0
  119. package/lib/components/tabs/style/css.js.map +1 -0
  120. package/lib/components/tabs/style/index.d.ts +0 -0
  121. package/lib/components/tabs/style/index.js +2 -0
  122. package/lib/components/tabs/style/index.js.map +1 -0
  123. package/lib/components/tabs/tab-bar.vue.d.ts +51 -0
  124. package/lib/components/tabs/tab-bar.vue.js +2 -0
  125. package/lib/components/tabs/tab-bar.vue.js.map +1 -0
  126. package/lib/components/tabs/tab-bar.vue2.js +2 -0
  127. package/lib/components/tabs/tab-bar.vue2.js.map +1 -0
  128. package/lib/components/tabs/tab-nav.vue.d.ts +121 -0
  129. package/lib/components/tabs/tab-nav.vue.js +2 -0
  130. package/lib/components/tabs/tab-nav.vue.js.map +1 -0
  131. package/lib/components/tabs/tab-nav.vue2.js +2 -0
  132. package/lib/components/tabs/tab-nav.vue2.js.map +1 -0
  133. package/lib/components/tabs/tab-pane.vue.d.ts +45 -0
  134. package/lib/components/tabs/tab-pane.vue.js +2 -0
  135. package/lib/components/tabs/tab-pane.vue.js.map +1 -0
  136. package/lib/components/tabs/tab-pane.vue2.js +2 -0
  137. package/lib/components/tabs/tab-pane.vue2.js.map +1 -0
  138. package/lib/components/tabs/tabs.vue.d.ts +159 -0
  139. package/lib/components/tabs/tabs.vue.js +2 -0
  140. package/lib/components/tabs/tabs.vue.js.map +1 -0
  141. package/lib/components/tabs/tabs.vue2.js +2 -0
  142. package/lib/components/tabs/tabs.vue2.js.map +1 -0
  143. package/lib/components/tabs/types.d.ts +58 -0
  144. package/lib/components/tabs/types.js +2 -0
  145. package/lib/components/tabs/types.js.map +1 -0
  146. package/lib/hooks/index.d.ts +1 -0
  147. package/lib/hooks/index.js +1 -1
  148. package/lib/hooks/use-ordered-children/index.d.ts +8 -0
  149. package/lib/hooks/use-ordered-children/index.js +2 -0
  150. package/lib/hooks/use-ordered-children/index.js.map +1 -0
  151. package/lib/index.d.ts +1 -1
  152. package/lib/index.js +1 -1
  153. package/lib/index.js.map +1 -1
  154. package/lib/package.json.js +1 -1
  155. package/lib/theme-style/src/tabs.scss.js +2 -0
  156. package/lib/theme-style/src/tabs.scss.js.map +1 -0
  157. package/lib/utils/index.js +1 -1
  158. package/lib/utils/vue/index.d.ts +1 -0
  159. package/lib/utils/vue/index.js +1 -1
  160. package/lib/utils/vue/vnode.d.ts +51 -0
  161. package/lib/utils/vue/vnode.js +2 -0
  162. package/lib/utils/vue/vnode.js.map +1 -0
  163. package/package.json +4 -1
  164. package/theme-style/index.css +1 -1
  165. package/theme-style/src/index.scss +1 -0
  166. package/theme-style/src/tabs.scss +582 -0
  167. 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,2 @@
1
+ "use strict";require("vft/theme-style/base.css");require("vft/theme-style/vft-tabs.css");
2
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";require("../../../theme-style/src/base.scss.js");require("../../../theme-style/src/tabs.scss.js");
2
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./tab-bar.vue2.js");exports.default=e.default;
2
+ //# sourceMappingURL=tab-bar.vue.js.map
@@ -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,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./tab-nav.vue2.js");exports.default=e.default;
2
+ //# sourceMappingURL=tab-nav.vue.js.map
@@ -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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"}