vft 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/es/component.mjs +8 -6
  2. package/es/component.mjs.map +1 -1
  3. package/es/components/back-top/back-top.vue2.mjs +8 -6
  4. package/es/components/back-top/back-top.vue2.mjs.map +1 -1
  5. package/es/components/context-menu/context-menu.vue.d.ts +39 -0
  6. package/es/components/context-menu/context-menu.vue.mjs +5 -0
  7. package/es/components/context-menu/context-menu.vue.mjs.map +1 -0
  8. package/es/components/context-menu/context-menu.vue2.mjs +93 -0
  9. package/es/components/context-menu/context-menu.vue2.mjs.map +1 -0
  10. package/es/components/context-menu/createContextMenu.d.ts +3 -0
  11. package/es/components/context-menu/createContextMenu.mjs +41 -0
  12. package/es/components/context-menu/createContextMenu.mjs.map +1 -0
  13. package/es/components/context-menu/index.d.ts +3 -0
  14. package/es/components/context-menu/index.mjs +8 -0
  15. package/es/components/context-menu/index.mjs.map +1 -0
  16. package/es/components/context-menu/style/css.d.ts +0 -0
  17. package/es/components/context-menu/style/css.mjs +3 -0
  18. package/es/components/context-menu/style/css.mjs.map +1 -0
  19. package/es/components/context-menu/style/index.d.ts +0 -0
  20. package/es/components/context-menu/style/index.mjs +3 -0
  21. package/es/components/context-menu/style/index.mjs.map +1 -0
  22. package/es/components/context-menu/types.d.ts +23 -0
  23. package/es/components/context-menu/types.mjs +2 -0
  24. package/es/components/context-menu/types.mjs.map +1 -0
  25. package/es/components/context-menu/useContextMenu.d.ts +3 -0
  26. package/es/components/context-menu/useContextMenu.mjs +11 -0
  27. package/es/components/context-menu/useContextMenu.mjs.map +1 -0
  28. package/es/components/index.d.ts +2 -0
  29. package/es/components/index.mjs +44 -32
  30. package/es/components/index.mjs.map +1 -1
  31. package/es/components/menu/menu-item.vue2.mjs +12 -10
  32. package/es/components/menu/menu-item.vue2.mjs.map +1 -1
  33. package/es/components/menu/sub-menu.vue2.mjs +5 -3
  34. package/es/components/menu/sub-menu.vue2.mjs.map +1 -1
  35. package/es/components/multiple-tabs/index.d.ts +30 -0
  36. package/es/components/multiple-tabs/index.mjs +16 -0
  37. package/es/components/multiple-tabs/index.mjs.map +1 -0
  38. package/es/components/multiple-tabs/multiple-tabs.vue.d.ts +29 -0
  39. package/es/components/multiple-tabs/multiple-tabs.vue.mjs +5 -0
  40. package/es/components/multiple-tabs/multiple-tabs.vue.mjs.map +1 -0
  41. package/es/components/multiple-tabs/multiple-tabs.vue2.mjs +152 -0
  42. package/es/components/multiple-tabs/multiple-tabs.vue2.mjs.map +1 -0
  43. package/es/components/multiple-tabs/style/css.d.ts +0 -0
  44. package/es/components/multiple-tabs/style/css.mjs +3 -0
  45. package/es/components/multiple-tabs/style/css.mjs.map +1 -0
  46. package/es/components/multiple-tabs/style/index.d.ts +0 -0
  47. package/es/components/multiple-tabs/style/index.mjs +3 -0
  48. package/es/components/multiple-tabs/style/index.mjs.map +1 -0
  49. package/es/components/multiple-tabs/tab-content.vue.d.ts +32 -0
  50. package/es/components/multiple-tabs/tab-content.vue.mjs +5 -0
  51. package/es/components/multiple-tabs/tab-content.vue.mjs.map +1 -0
  52. package/es/components/multiple-tabs/tab-content.vue2.mjs +49 -0
  53. package/es/components/multiple-tabs/tab-content.vue2.mjs.map +1 -0
  54. package/es/components/multiple-tabs/types.d.ts +3 -0
  55. package/es/components/multiple-tabs/types.mjs +2 -0
  56. package/es/components/multiple-tabs/types.mjs.map +1 -0
  57. package/es/components/multiple-tabs/use/index.d.ts +2 -0
  58. package/es/components/multiple-tabs/use/index.mjs +8 -0
  59. package/es/components/multiple-tabs/use/index.mjs.map +1 -0
  60. package/es/components/multiple-tabs/use/use-multiple-tabs.d.ts +9 -0
  61. package/es/components/multiple-tabs/use/use-multiple-tabs.mjs +54 -0
  62. package/es/components/multiple-tabs/use/use-multiple-tabs.mjs.map +1 -0
  63. package/es/components/multiple-tabs/use/use-tab-dropdown.d.ts +6 -0
  64. package/es/components/multiple-tabs/use/use-tab-dropdown.mjs +71 -0
  65. package/es/components/multiple-tabs/use/use-tab-dropdown.mjs.map +1 -0
  66. package/es/components/result/result.vue2.mjs +15 -13
  67. package/es/components/result/result.vue2.mjs.map +1 -1
  68. package/es/components/tabs/tab-nav.vue2.mjs +5 -3
  69. package/es/components/tabs/tab-nav.vue2.mjs.map +1 -1
  70. package/es/index.mjs +90 -78
  71. package/es/index.mjs.map +1 -1
  72. package/es/package.json.mjs +1 -1
  73. package/es/style.css +1 -1
  74. package/es/theme-style/src/multiple-tabs.scss.mjs +5 -0
  75. package/es/theme-style/src/multiple-tabs.scss.mjs.map +1 -0
  76. package/lib/component.js +1 -1
  77. package/lib/component.js.map +1 -1
  78. package/lib/components/back-top/back-top.vue2.js +1 -1
  79. package/lib/components/back-top/back-top.vue2.js.map +1 -1
  80. package/lib/components/context-menu/context-menu.vue.d.ts +39 -0
  81. package/lib/components/context-menu/context-menu.vue.js +2 -0
  82. package/lib/components/context-menu/context-menu.vue.js.map +1 -0
  83. package/lib/components/context-menu/context-menu.vue2.js +2 -0
  84. package/lib/components/context-menu/context-menu.vue2.js.map +1 -0
  85. package/lib/components/context-menu/createContextMenu.d.ts +3 -0
  86. package/lib/components/context-menu/createContextMenu.js +2 -0
  87. package/lib/components/context-menu/createContextMenu.js.map +1 -0
  88. package/lib/components/context-menu/index.d.ts +3 -0
  89. package/lib/components/context-menu/index.js +2 -0
  90. package/lib/components/context-menu/index.js.map +1 -0
  91. package/lib/components/context-menu/style/css.d.ts +0 -0
  92. package/lib/components/context-menu/style/css.js +2 -0
  93. package/lib/components/context-menu/style/css.js.map +1 -0
  94. package/lib/components/context-menu/style/index.d.ts +0 -0
  95. package/lib/components/context-menu/style/index.js +2 -0
  96. package/lib/components/context-menu/style/index.js.map +1 -0
  97. package/lib/components/context-menu/types.d.ts +23 -0
  98. package/lib/components/context-menu/types.js +2 -0
  99. package/lib/components/context-menu/types.js.map +1 -0
  100. package/lib/components/context-menu/useContextMenu.d.ts +3 -0
  101. package/lib/components/context-menu/useContextMenu.js +2 -0
  102. package/lib/components/context-menu/useContextMenu.js.map +1 -0
  103. package/lib/components/index.d.ts +2 -0
  104. package/lib/components/index.js +1 -1
  105. package/lib/components/menu/menu-item.vue2.js +1 -1
  106. package/lib/components/menu/menu-item.vue2.js.map +1 -1
  107. package/lib/components/menu/sub-menu.vue2.js +1 -1
  108. package/lib/components/menu/sub-menu.vue2.js.map +1 -1
  109. package/lib/components/multiple-tabs/index.d.ts +30 -0
  110. package/lib/components/multiple-tabs/index.js +2 -0
  111. package/lib/components/multiple-tabs/index.js.map +1 -0
  112. package/lib/components/multiple-tabs/multiple-tabs.vue.d.ts +29 -0
  113. package/lib/components/multiple-tabs/multiple-tabs.vue.js +2 -0
  114. package/lib/components/multiple-tabs/multiple-tabs.vue.js.map +1 -0
  115. package/lib/components/multiple-tabs/multiple-tabs.vue2.js +2 -0
  116. package/lib/components/multiple-tabs/multiple-tabs.vue2.js.map +1 -0
  117. package/lib/components/multiple-tabs/style/css.d.ts +0 -0
  118. package/lib/components/multiple-tabs/style/css.js +2 -0
  119. package/lib/components/multiple-tabs/style/css.js.map +1 -0
  120. package/lib/components/multiple-tabs/style/index.d.ts +0 -0
  121. package/lib/components/multiple-tabs/style/index.js +2 -0
  122. package/lib/components/multiple-tabs/style/index.js.map +1 -0
  123. package/lib/components/multiple-tabs/tab-content.vue.d.ts +32 -0
  124. package/lib/components/multiple-tabs/tab-content.vue.js +2 -0
  125. package/lib/components/multiple-tabs/tab-content.vue.js.map +1 -0
  126. package/lib/components/multiple-tabs/tab-content.vue2.js +2 -0
  127. package/lib/components/multiple-tabs/tab-content.vue2.js.map +1 -0
  128. package/lib/components/multiple-tabs/types.d.ts +3 -0
  129. package/lib/components/multiple-tabs/types.js +2 -0
  130. package/lib/components/multiple-tabs/types.js.map +1 -0
  131. package/lib/components/multiple-tabs/use/index.d.ts +2 -0
  132. package/lib/components/multiple-tabs/use/index.js +2 -0
  133. package/lib/components/multiple-tabs/use/index.js.map +1 -0
  134. package/lib/components/multiple-tabs/use/use-multiple-tabs.d.ts +9 -0
  135. package/lib/components/multiple-tabs/use/use-multiple-tabs.js +2 -0
  136. package/lib/components/multiple-tabs/use/use-multiple-tabs.js.map +1 -0
  137. package/lib/components/multiple-tabs/use/use-tab-dropdown.d.ts +6 -0
  138. package/lib/components/multiple-tabs/use/use-tab-dropdown.js +2 -0
  139. package/lib/components/multiple-tabs/use/use-tab-dropdown.js.map +1 -0
  140. package/lib/components/result/result.vue2.js +1 -1
  141. package/lib/components/result/result.vue2.js.map +1 -1
  142. package/lib/components/tabs/tab-nav.vue2.js +1 -1
  143. package/lib/components/tabs/tab-nav.vue2.js.map +1 -1
  144. package/lib/index.js +1 -1
  145. package/lib/index.js.map +1 -1
  146. package/lib/package.json.js +1 -1
  147. package/lib/theme-style/src/multiple-tabs.scss.js +2 -0
  148. package/lib/theme-style/src/multiple-tabs.scss.js.map +1 -0
  149. package/package.json +4 -2
  150. package/theme-style/src/context-menu.css +0 -0
  151. package/theme-style/src/multiple-tabs.scss +19 -0
  152. package/theme-style/vft-multiple-tabs.css +1 -0
@@ -0,0 +1,54 @@
1
+ import { useSortable as m } from "@vft/use";
2
+ import { isNullOrUndefined as u, arrSort as b } from "@vft/utils";
3
+ import { ref as d, nextTick as x, toRaw as p } from "vue";
4
+ import { useRouter as T } from "vue-router";
5
+ import { useMultipleTabStore as c } from "@vft/store";
6
+ function R() {
7
+ const o = d([]), n = c(), f = T();
8
+ function i(e) {
9
+ const t = [];
10
+ return e && e.forEach((s) => {
11
+ var l;
12
+ (l = s.meta) != null && l.affix && t.push(p(s));
13
+ }), t;
14
+ }
15
+ function a() {
16
+ const e = i(f.getRoutes());
17
+ b(e, ["meta", "order"]), o.value = e;
18
+ for (const t of e)
19
+ n.addTab({
20
+ meta: t.meta,
21
+ name: t.name,
22
+ path: t.path
23
+ });
24
+ }
25
+ let r = !1;
26
+ return r || (a(), r = !0), o.value.map((e) => {
27
+ var t;
28
+ return (t = e.meta) == null ? void 0 : t.title;
29
+ }).filter(Boolean);
30
+ }
31
+ function w(o) {
32
+ const n = c();
33
+ x(() => {
34
+ var a;
35
+ const f = (a = document.querySelectorAll(".vft-tabs__nav")) == null ? void 0 : a[0], { initSortable: i } = m(f, {
36
+ draggable: ".is-closable",
37
+ filter: (r) => {
38
+ var t;
39
+ const e = (t = r == null ? void 0 : r.target) == null ? void 0 : t.innerText;
40
+ return e ? o.includes(e) : !1;
41
+ },
42
+ onEnd: (r) => {
43
+ const { oldIndex: e, newIndex: t } = r;
44
+ u(e) || u(t) || e === t || n.sortTabs(e, t);
45
+ }
46
+ });
47
+ i();
48
+ });
49
+ }
50
+ export {
51
+ R as initAffixTabs,
52
+ w as useTabsDrag
53
+ };
54
+ //# sourceMappingURL=use-multiple-tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-multiple-tabs.mjs","sources":["../../../../../../packages/components/multiple-tabs/use/use-multiple-tabs.ts"],"sourcesContent":["import { useSortable } from '@vft/use';\nimport { arrSort, isNullOrUndefined } from '@vft/utils';\nimport type { SortableEvent } from 'sortablejs';\nimport { nextTick, ref, toRaw } from 'vue';\nimport type { RouteLocationNormalized } from 'vue-router';\nimport { useRouter } from 'vue-router';\nimport { useMultipleTabStore } from '@vft/store';\n\n/**\n * @description 初始化需要固定的 tab 标签\n * @author wfd\n * @date 2022/10/15 19:03\n * @example\n * @returns {string[]}\n */\nexport function initAffixTabs(): string[] {\n const affixList = ref<RouteLocationNormalized[]>([]);\n\n const tabStore = useMultipleTabStore();\n const router = useRouter();\n\n // 过滤需要固定的标签\n function filterAffixTabs(routes: RouteLocationNormalized[]) {\n const tabs: RouteLocationNormalized[] = [];\n routes &&\n routes.forEach((route) => {\n if (route.meta?.affix) {\n // console.log(route, 777, toRaw(route));\n tabs.push(toRaw(route));\n }\n });\n return tabs;\n }\n\n function addAffixTabs() {\n const affixTabs = filterAffixTabs(router.getRoutes() as unknown as RouteLocationNormalized[]);\n\n arrSort(affixTabs, ['meta', 'order']);\n\n affixList.value = affixTabs;\n\n for (const tab of affixTabs) {\n tabStore.addTab({\n meta: tab.meta,\n name: tab.name,\n path: tab.path\n } as RouteLocationNormalized);\n }\n }\n\n let isAddAffix = false;\n\n // 开始执行固定标签\n if (!isAddAffix) {\n addAffixTabs();\n isAddAffix = true;\n }\n return affixList.value.map((item) => item.meta?.title).filter(Boolean) as string[];\n}\n\nexport function useTabsDrag(affixTextList: string[]) {\n const tabStore = useMultipleTabStore();\n nextTick(() => {\n const el = document.querySelectorAll('.vft-tabs__nav')?.[0] as HTMLElement;\n\n const { initSortable } = useSortable(el, {\n draggable: '.is-closable',\n filter: (e) => {\n const text = (e?.target as HTMLElement)?.innerText;\n if (!text) return false;\n return affixTextList.includes(text);\n },\n\n onEnd: (evt: SortableEvent) => {\n const { oldIndex, newIndex } = evt;\n\n if (isNullOrUndefined(oldIndex) || isNullOrUndefined(newIndex) || oldIndex === newIndex) {\n return;\n }\n\n tabStore.sortTabs(oldIndex, newIndex);\n }\n });\n initSortable();\n });\n}\n"],"names":["initAffixTabs","affixList","ref","tabStore","useMultipleTabStore","router","useRouter","filterAffixTabs","routes","tabs","route","_a","toRaw","addAffixTabs","affixTabs","arrSort","tab","isAddAffix","item","useTabsDrag","affixTextList","nextTick","el","initSortable","useSortable","e","text","evt","oldIndex","newIndex","isNullOrUndefined"],"mappings":";;;;;AAeO,SAASA,IAA0B;AAClC,QAAAC,IAAYC,EAA+B,CAAA,CAAE,GAE7CC,IAAWC,KACXC,IAASC;AAGf,WAASC,EAAgBC,GAAmC;AAC1D,UAAMC,IAAkC,CAAA;AAEtC,WAAAD,KAAAA,EAAO,QAAQ,CAACE,MAAU;;AACpB,OAAAC,IAAAD,EAAM,SAAN,QAAAC,EAAY,SAETF,EAAA,KAAKG,EAAMF,CAAK,CAAC;AAAA,IACxB,CACD,GACID;AAAA,EACT;AAEA,WAASI,IAAe;AACtB,UAAMC,IAAYP,EAAgBF,EAAO,UAAmD,CAAA;AAE5F,IAAAU,EAAQD,GAAW,CAAC,QAAQ,OAAO,CAAC,GAEpCb,EAAU,QAAQa;AAElB,eAAWE,KAAOF;AAChB,MAAAX,EAAS,OAAO;AAAA,QACd,MAAMa,EAAI;AAAA,QACV,MAAMA,EAAI;AAAA,QACV,MAAMA,EAAI;AAAA,MAAA,CACgB;AAAA,EAEhC;AAEA,MAAIC,IAAa;AAGjB,SAAKA,MACUJ,KACAI,IAAA,KAERhB,EAAU,MAAM,IAAI,CAACiB,MAAA;;AAAS,YAAAP,IAAAO,EAAK,SAAL,gBAAAP,EAAW;AAAA,GAAK,EAAE,OAAO,OAAO;AACvE;AAEO,SAASQ,EAAYC,GAAyB;AACnD,QAAMjB,IAAWC;AACjB,EAAAiB,EAAS,MAAM;;AACb,UAAMC,KAAKX,IAAA,SAAS,iBAAiB,gBAAgB,MAA1C,gBAAAA,EAA8C,IAEnD,EAAE,cAAAY,EAAA,IAAiBC,EAAYF,GAAI;AAAA,MACvC,WAAW;AAAA,MACX,QAAQ,CAACG,MAAM;;AACP,cAAAC,KAAQf,IAAAc,KAAA,gBAAAA,EAAG,WAAH,gBAAAd,EAA2B;AACzC,eAAKe,IACEN,EAAc,SAASM,CAAI,IADhB;AAAA,MAEpB;AAAA,MAEA,OAAO,CAACC,MAAuB;AACvB,cAAA,EAAE,UAAAC,GAAU,UAAAC,EAAa,IAAAF;AAE/B,QAAIG,EAAkBF,CAAQ,KAAKE,EAAkBD,CAAQ,KAAKD,MAAaC,KAItE1B,EAAA,SAASyB,GAAUC,CAAQ;AAAA,MACtC;AAAA,IAAA,CACD;AACY,IAAAN;EAAA,CACd;AACH;"}
@@ -0,0 +1,6 @@
1
+ import { type RouteLocationNormalized } from 'vue-router';
2
+ import { type ContextMenuItem } from 'vft/es/components/context-menu';
3
+ export declare function useTabDropdown(tabItem: RouteLocationNormalized, affixNum: number): {
4
+ getDropMenuList: import("vue").ComputedRef<ContextMenuItem[] | undefined>;
5
+ handleContextMenu: (tabItem: RouteLocationNormalized) => (e: Event) => void;
6
+ };
@@ -0,0 +1,71 @@
1
+ import { getRouterKeyPath as d } from "@vft/router";
2
+ import { reactive as T, computed as C } from "vue";
3
+ import { useMultipleTabStore as D, useTabs as M } from "@vft/store";
4
+ function S(e, r) {
5
+ const i = T({
6
+ current: null,
7
+ currentIndex: 0
8
+ }), t = D(), { refreshPage: g, closeAll: a, close: h, closeLeft: u, closeOther: f, closeRight: p, newWinTab: x } = M(), L = C(() => {
9
+ if (!e)
10
+ return;
11
+ const { meta: o } = e, n = i.currentIndex, s = n === 0 || n <= r, c = t.getTabList.length <= r || n === t.getTabList.length - 1 && t.getLastDragEndIndex >= 0, b = t.getTabList.length === r || t.getTabList.length === r + 1 && n === r, l = t.getTabList.length === r;
12
+ return [
13
+ {
14
+ iconCfg: { icon: "vi-refresh" },
15
+ text: "刷新",
16
+ handler: () => g(e)
17
+ },
18
+ {
19
+ iconCfg: { icon: "vi-new-page" },
20
+ text: "新页面打开",
21
+ handler: () => x(e),
22
+ divider: !0
23
+ },
24
+ {
25
+ iconCfg: { icon: "vi-close" },
26
+ text: "关闭标签页",
27
+ disabled: !!(o != null && o.affix) || l,
28
+ handler: () => h(e)
29
+ },
30
+ {
31
+ iconCfg: { icon: "vi-close-left" },
32
+ text: "关闭左侧标签页",
33
+ disabled: s,
34
+ handler: () => u(e)
35
+ },
36
+ {
37
+ iconCfg: { icon: "vi-close-right" },
38
+ text: "关闭右侧标签页",
39
+ disabled: c,
40
+ divider: !0,
41
+ handler: () => p(e)
42
+ },
43
+ {
44
+ iconCfg: { icon: "vi-close-other" },
45
+ text: "关闭其它标签页",
46
+ disabled: b,
47
+ handler: () => f(e)
48
+ },
49
+ {
50
+ iconCfg: { icon: "vi-close-all" },
51
+ text: "关闭所有标签页",
52
+ disabled: l,
53
+ handler: () => a()
54
+ }
55
+ ];
56
+ });
57
+ function v(o) {
58
+ return (n) => {
59
+ if (!o)
60
+ return;
61
+ n == null || n.preventDefault();
62
+ const s = t.getTabList.findIndex((c) => d(c) === d(o));
63
+ i.current = o, i.currentIndex = s;
64
+ };
65
+ }
66
+ return { getDropMenuList: L, handleContextMenu: v };
67
+ }
68
+ export {
69
+ S as useTabDropdown
70
+ };
71
+ //# sourceMappingURL=use-tab-dropdown.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tab-dropdown.mjs","sources":["../../../../../../packages/components/multiple-tabs/use/use-tab-dropdown.ts"],"sourcesContent":["import { getRouterKeyPath } from '@vft/router';\nimport { computed, reactive, unref } from 'vue';\nimport { type RouteLocationNormalized } from 'vue-router';\nimport { type ContextMenuItem } from '@vft-ui/components/context-menu';\nimport { useMultipleTabStore, useTabs } from '@vft/store';\n\nexport function useTabDropdown(tabItem: RouteLocationNormalized, affixNum: number) {\n // 记录当前点击多 tab 的索引与 tab 的信息\n const state = reactive({\n current: null as Nullable<RouteLocationNormalized>,\n currentIndex: 0\n });\n\n const tabStore = useMultipleTabStore();\n const { refreshPage, closeAll, close, closeLeft, closeOther, closeRight, newWinTab } = useTabs();\n\n /**\n * @description 多 tab 菜单列表\n */\n const getDropMenuList = computed(() => {\n if (!tabItem) {\n return;\n }\n const { meta } = tabItem;\n\n const index = state.currentIndex;\n\n // 关闭左侧标签页\n const closeLeftDisabled = index === 0 || index <= affixNum;\n // 关闭右侧标签页\n const closeRightDisabled = tabStore.getTabList.length <= affixNum || (index === tabStore.getTabList.length - 1 && tabStore.getLastDragEndIndex >= 0);\n // 关闭其他\n const closeOtherDisabled = tabStore.getTabList.length === affixNum || (tabStore.getTabList.length === affixNum + 1 && index === affixNum);\n // 关闭所有\n const disabled = tabStore.getTabList.length === affixNum;\n\n const dropMenuList: ContextMenuItem[] = [\n {\n iconCfg: { icon: 'vi-refresh' },\n text: '刷新',\n handler: () => refreshPage(tabItem)\n },\n {\n iconCfg: { icon: 'vi-new-page' },\n text: '新页面打开',\n handler: () => newWinTab(tabItem),\n divider: true\n },\n {\n iconCfg: { icon: 'vi-close' },\n text: '关闭标签页',\n disabled: !!meta?.affix || disabled,\n handler: () => close(tabItem)\n },\n {\n iconCfg: { icon: 'vi-close-left' },\n text: '关闭左侧标签页',\n disabled: closeLeftDisabled,\n handler: () => closeLeft(tabItem)\n },\n {\n iconCfg: { icon: 'vi-close-right' },\n text: '关闭右侧标签页',\n disabled: closeRightDisabled,\n divider: true,\n handler: () => closeRight(tabItem)\n },\n {\n iconCfg: { icon: 'vi-close-other' },\n text: '关闭其它标签页',\n disabled: closeOtherDisabled,\n handler: () => closeOther(tabItem)\n },\n {\n iconCfg: { icon: 'vi-close-all' },\n text: '关闭所有标签页',\n disabled,\n handler: () => closeAll()\n }\n ];\n\n return dropMenuList;\n });\n\n // 点击 tab 右侧菜单事件\n function handleContextMenu(tabItem: RouteLocationNormalized) {\n return (e: Event) => {\n if (!tabItem) {\n return;\n }\n e?.preventDefault();\n\n // 获取当前点击的 tab 在多 tab 列表中的位置\n const index = tabStore.getTabList.findIndex((tab) => getRouterKeyPath(tab) === getRouterKeyPath(tabItem));\n state.current = tabItem;\n state.currentIndex = index;\n };\n }\n\n return { getDropMenuList, handleContextMenu };\n}\n"],"names":["useTabDropdown","tabItem","affixNum","state","reactive","tabStore","useMultipleTabStore","refreshPage","closeAll","close","closeLeft","closeOther","closeRight","newWinTab","useTabs","getDropMenuList","computed","meta","index","closeLeftDisabled","closeRightDisabled","closeOtherDisabled","disabled","handleContextMenu","e","tab","getRouterKeyPath"],"mappings":";;;AAMgB,SAAAA,EAAeC,GAAkCC,GAAkB;AAEjF,QAAMC,IAAQC,EAAS;AAAA,IACrB,SAAS;AAAA,IACT,cAAc;AAAA,EAAA,CACf,GAEKC,IAAWC,KACX,EAAE,aAAAC,GAAa,UAAAC,GAAU,OAAAC,GAAO,WAAAC,GAAW,YAAAC,GAAY,YAAAC,GAAY,WAAAC,MAAcC,KAKjFC,IAAkBC,EAAS,MAAM;AACrC,QAAI,CAACf;AACH;AAEI,UAAA,EAAE,MAAAgB,EAAS,IAAAhB,GAEXiB,IAAQf,EAAM,cAGdgB,IAAoBD,MAAU,KAAKA,KAAShB,GAE5CkB,IAAqBf,EAAS,WAAW,UAAUH,KAAagB,MAAUb,EAAS,WAAW,SAAS,KAAKA,EAAS,uBAAuB,GAE5IgB,IAAqBhB,EAAS,WAAW,WAAWH,KAAaG,EAAS,WAAW,WAAWH,IAAW,KAAKgB,MAAUhB,GAE1HoB,IAAWjB,EAAS,WAAW,WAAWH;AA+CzC,WA7CiC;AAAA,MACtC;AAAA,QACE,SAAS,EAAE,MAAM,aAAa;AAAA,QAC9B,MAAM;AAAA,QACN,SAAS,MAAMK,EAAYN,CAAO;AAAA,MACpC;AAAA,MACA;AAAA,QACE,SAAS,EAAE,MAAM,cAAc;AAAA,QAC/B,MAAM;AAAA,QACN,SAAS,MAAMY,EAAUZ,CAAO;AAAA,QAChC,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,SAAS,EAAE,MAAM,WAAW;AAAA,QAC5B,MAAM;AAAA,QACN,UAAU,CAAC,EAACgB,KAAA,QAAAA,EAAM,UAASK;AAAA,QAC3B,SAAS,MAAMb,EAAMR,CAAO;AAAA,MAC9B;AAAA,MACA;AAAA,QACE,SAAS,EAAE,MAAM,gBAAgB;AAAA,QACjC,MAAM;AAAA,QACN,UAAUkB;AAAA,QACV,SAAS,MAAMT,EAAUT,CAAO;AAAA,MAClC;AAAA,MACA;AAAA,QACE,SAAS,EAAE,MAAM,iBAAiB;AAAA,QAClC,MAAM;AAAA,QACN,UAAUmB;AAAA,QACV,SAAS;AAAA,QACT,SAAS,MAAMR,EAAWX,CAAO;AAAA,MACnC;AAAA,MACA;AAAA,QACE,SAAS,EAAE,MAAM,iBAAiB;AAAA,QAClC,MAAM;AAAA,QACN,UAAUoB;AAAA,QACV,SAAS,MAAMV,EAAWV,CAAO;AAAA,MACnC;AAAA,MACA;AAAA,QACE,SAAS,EAAE,MAAM,eAAe;AAAA,QAChC,MAAM;AAAA,QACN,UAAAqB;AAAA,QACA,SAAS,MAAMd,EAAS;AAAA,MAC1B;AAAA,IAAA;AAAA,EAGK,CACR;AAGD,WAASe,EAAkBtB,GAAkC;AAC3D,WAAO,CAACuB,MAAa;AACnB,UAAI,CAACvB;AACH;AAEF,MAAAuB,KAAA,QAAAA,EAAG;AAGG,YAAAN,IAAQb,EAAS,WAAW,UAAU,CAACoB,MAAQC,EAAiBD,CAAG,MAAMC,EAAiBzB,CAAO,CAAC;AACxG,MAAAE,EAAM,UAAUF,GAChBE,EAAM,eAAee;AAAA,IAAA;AAAA,EAEzB;AAEO,SAAA,EAAE,iBAAAH,GAAiB,mBAAAQ;AAC5B;"}
@@ -18,12 +18,14 @@ import "../collapse-transition/index.mjs";
18
18
  import "../tooltip/index.mjs";
19
19
  import "../popover/index.mjs";
20
20
  import "../menu/index.mjs";
21
- const n = (
21
+ import "@vft/use";
22
+ import "../multiple-tabs/index.mjs";
23
+ const e = (
22
24
  /* hoist-static*/
23
25
  x("result")
24
26
  ), I = l({
25
- name: n.b()
26
- }), J = /* @__PURE__ */ l({
27
+ name: e.b()
28
+ }), L = /* @__PURE__ */ l({
27
29
  ...I,
28
30
  props: {
29
31
  title: null,
@@ -32,29 +34,29 @@ const n = (
32
34
  },
33
35
  setup(s) {
34
36
  var m, p;
35
- const u = d(), t = f(), r = v(() => _(s.icon, "icon")), a = (m = r.value) != null && m.icon ? o("div", {
36
- class: n.e("icon")
37
- }, [o(C, { ...r.value })]) : (p = t.default) == null ? void 0 : p.call(t), i = (e) => {
38
- const c = b(u, e);
37
+ const u = d(), t = f(), n = v(() => _(s.icon, "icon")), a = (m = n.value) != null && m.icon ? o("div", {
38
+ class: e.e("icon")
39
+ }, [o(C, { ...n.value })]) : (p = t.default) == null ? void 0 : p.call(t), i = (r) => {
40
+ const c = b(u, r);
39
41
  return c ? o(
40
42
  "div",
41
43
  {
42
- class: n.e(e)
44
+ class: e.e(r)
43
45
  },
44
46
  [o("p", {}, { default: () => c })]
45
47
  ) : null;
46
48
  };
47
49
  return () => o(
48
50
  "div",
49
- { class: n.b() },
51
+ { class: e.b() },
50
52
  {
51
53
  default: () => [
52
54
  a,
53
55
  i("title"),
54
56
  i("sub-title"),
55
- t.extra ? o("div", { class: n.e("extra") }, { default: () => {
56
- var e;
57
- return (e = t.extra) == null ? void 0 : e.call(t);
57
+ t.extra ? o("div", { class: e.e("extra") }, { default: () => {
58
+ var r;
59
+ return (r = t.extra) == null ? void 0 : r.call(t);
58
60
  } }) : null
59
61
  ]
60
62
  }
@@ -62,6 +64,6 @@ const n = (
62
64
  }
63
65
  });
64
66
  export {
65
- J as default
67
+ L as default
66
68
  };
67
69
  //# sourceMappingURL=result.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.vue2.mjs","sources":["../../../../../packages/components/result/result.vue"],"sourcesContent":["<script lang=\"ts\">\nconst ns = /* hoist-static*/ useNamespace('result')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script setup lang=\"ts\">\nimport { renderTNode, singleAttrToObj } from '@vft/utils';\nimport { h, getCurrentInstance, computed, useSlots } from 'vue';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { type IconProps, VftIcon } from '@vft-ui/components';\n\ninterface Props {\n title?: string | number;\n subTitle?: string | number;\n icon?: IconProps;\n}\n\ndefineProps({\n \"title\": null,\n \"subTitle\": null,\n \"icon\": null\n})\n\n\n\n;\n\nconst instance = getCurrentInstance()!;\n\nconst slots = useSlots();\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst vIcon = _icon.value?.icon ? h('div', {\n class: ns.e('icon')\n}, [h(VftIcon, { ..._icon.value })]) : slots.default?.();\n\nconst vCon = (attrName: string) => {\n const nodeCon = renderTNode(instance, attrName);\n return nodeCon ? h(\n 'div',\n {\n class: ns.e(attrName)\n }, [h('p', {}, { default: () => nodeCon })]\n ) : null;\n};\n\ndefineRender(() => {\n return (\n h(\n 'div', { class: ns.b() }, {\n default: () => [\n vIcon,\n vCon('title'),\n vCon('sub-title'),\n slots.extra ? h('div', { class: ns.e('extra') }, { default: ()=> slots.extra?.() }) : null\n ]\n }\n )\n );\n});\n</script>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","instance","getCurrentInstance","slots","useSlots","_icon","computed","singleAttrToObj","__props","vIcon","_a","h","VftIcon","_b","vCon","attrName","nodeCon","renderTNode"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,MAAMA;AAAA;AAAA,EAAuBC,EAAa,QAAQ;AAAA,GAGlDC,IAA6BC,EAAmB;AAAA,EAC9C,MAAMH,EAAG,EAAE;AACb,CAAC;;;;;;;;;AAuBD,UAAMI,IAAWC,KAEXC,IAAQC,KAERC,IAAQC,EAAS,MACdC,EAAgBC,EAAQ,MAAM,MAAM,CAC5C,GAEKC,KAAQC,IAAAL,EAAM,UAAN,QAAAK,EAAa,OAAOC,EAAE,OAAO;AAAA,MACzC,OAAOd,EAAG,EAAE,MAAM;AAAA,IACjB,GAAA,CAACc,EAAEC,GAAS,EAAE,GAAGP,EAAM,MAAO,CAAA,CAAC,CAAC,KAAIQ,IAAAV,EAAM,YAAN,gBAAAU,EAAA,KAAAV,IAEjCW,IAAO,CAACC,MAAqB;AAC3B,YAAAC,IAAUC,EAAYhB,GAAUc,CAAQ;AAC9C,aAAOC,IAAUL;AAAA,QACf;AAAA,QACA;AAAA,UACE,OAAOd,EAAG,EAAEkB,CAAQ;AAAA,QACtB;AAAA,QAAG,CAACJ,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,MAAMK,EAAQ,CAAC,CAAC;AAAA,MACxC,IAAA;AAAA,IAAA;AAGO,WAAA,MAETL;AAAA,MACE;AAAA,MAAO,EAAE,OAAOd,EAAG,IAAI;AAAA,MAAG;AAAA,QACxB,SAAS,MAAM;AAAA,UACbY;AAAA,UACAK,EAAK,OAAO;AAAA,UACZA,EAAK,WAAW;AAAA,UAChBX,EAAM,QAAQQ,EAAE,OAAO,EAAE,OAAOd,EAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,MAAA;;AAAK,oBAAAa,IAAAP,EAAM,UAAN,gBAAAO,EAAA,KAAAP;AAAA,YAAiB,CAAA,IAAI;AAAA,QACxF;AAAA,MACF;AAAA,IAAA;AAAA;;"}
1
+ {"version":3,"file":"result.vue2.mjs","sources":["../../../../../packages/components/result/result.vue"],"sourcesContent":["<script lang=\"ts\">\nconst ns = /* hoist-static*/ useNamespace('result')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script setup lang=\"ts\">\nimport { renderTNode, singleAttrToObj } from '@vft/utils';\nimport { h, getCurrentInstance, computed, useSlots } from 'vue';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { type IconProps, VftIcon } from '@vft-ui/components';\n\ninterface Props {\n title?: string | number;\n subTitle?: string | number;\n icon?: IconProps;\n}\n\ndefineProps({\n \"title\": null,\n \"subTitle\": null,\n \"icon\": null\n})\n\n\n\n;\n\nconst instance = getCurrentInstance()!;\n\nconst slots = useSlots();\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst vIcon = _icon.value?.icon ? h('div', {\n class: ns.e('icon')\n}, [h(VftIcon, { ..._icon.value })]) : slots.default?.();\n\nconst vCon = (attrName: string) => {\n const nodeCon = renderTNode(instance, attrName);\n return nodeCon ? h(\n 'div',\n {\n class: ns.e(attrName)\n }, [h('p', {}, { default: () => nodeCon })]\n ) : null;\n};\n\ndefineRender(() => {\n return (\n h(\n 'div', { class: ns.b() }, {\n default: () => [\n vIcon,\n vCon('title'),\n vCon('sub-title'),\n slots.extra ? h('div', { class: ns.e('extra') }, { default: ()=> slots.extra?.() }) : null\n ]\n }\n )\n );\n});\n</script>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","instance","getCurrentInstance","slots","useSlots","_icon","computed","singleAttrToObj","__props","vIcon","_a","h","VftIcon","_b","vCon","attrName","nodeCon","renderTNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AACA,MAAMA;AAAA;AAAA,EAAuBC,EAAa,QAAQ;AAAA,GAGlDC,IAA6BC,EAAmB;AAAA,EAC9C,MAAMH,EAAG,EAAE;AACb,CAAC;;;;;;;;;AAuBD,UAAMI,IAAWC,KAEXC,IAAQC,KAERC,IAAQC,EAAS,MACdC,EAAgBC,EAAQ,MAAM,MAAM,CAC5C,GAEKC,KAAQC,IAAAL,EAAM,UAAN,QAAAK,EAAa,OAAOC,EAAE,OAAO;AAAA,MACzC,OAAOd,EAAG,EAAE,MAAM;AAAA,IACjB,GAAA,CAACc,EAAEC,GAAS,EAAE,GAAGP,EAAM,MAAO,CAAA,CAAC,CAAC,KAAIQ,IAAAV,EAAM,YAAN,gBAAAU,EAAA,KAAAV,IAEjCW,IAAO,CAACC,MAAqB;AAC3B,YAAAC,IAAUC,EAAYhB,GAAUc,CAAQ;AAC9C,aAAOC,IAAUL;AAAA,QACf;AAAA,QACA;AAAA,UACE,OAAOd,EAAG,EAAEkB,CAAQ;AAAA,QACtB;AAAA,QAAG,CAACJ,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,MAAMK,EAAQ,CAAC,CAAC;AAAA,MACxC,IAAA;AAAA,IAAA;AAGO,WAAA,MAETL;AAAA,MACE;AAAA,MAAO,EAAE,OAAOd,EAAG,IAAI;AAAA,MAAG;AAAA,QACxB,SAAS,MAAM;AAAA,UACbY;AAAA,UACAK,EAAK,OAAO;AAAA,UACZA,EAAK,WAAW;AAAA,UAChBX,EAAM,QAAQQ,EAAE,OAAO,EAAE,OAAOd,EAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,MAAA;;AAAK,oBAAAa,IAAAP,EAAM,UAAN,gBAAAO,EAAA,KAAAP;AAAA,YAAiB,CAAA,IAAI;AAAA,QACxF;AAAA,MACF;AAAA,IAAA;AAAA;;"}
@@ -13,12 +13,14 @@ import "../collapse-transition/index.mjs";
13
13
  import "../tooltip/index.mjs";
14
14
  import "../popover/index.mjs";
15
15
  import "../menu/index.mjs";
16
+ import { capitalize as y } from "@vft/utils";
17
+ import "@vft/use";
18
+ import "../multiple-tabs/index.mjs";
16
19
  import { useNamespace as K } from "../../hooks/use-namespace/index.mjs";
17
20
  import "@popperjs/core";
18
21
  import "lodash";
19
22
  import "../../hooks/use-z-index/index.mjs";
20
23
  import { useDocumentVisibility as lt, useWindowFocus as at, useResizeObserver as st } from "@vueuse/core";
21
- import { capitalize as y } from "@vft/utils";
22
24
  import { EVENT_CODE as k } from "@vft/constants";
23
25
  import { TabsRootContextKey as it } from "./types.mjs";
24
26
  import ct from "./tab-bar.vue2.mjs";
@@ -27,7 +29,7 @@ const V = (
27
29
  K("tab-nav")
28
30
  ), rt = E({
29
31
  name: V.b()
30
- }), Nt = /* @__PURE__ */ E({
32
+ }), Lt = /* @__PURE__ */ E({
31
33
  ...rt,
32
34
  props: {
33
35
  panes: null,
@@ -178,6 +180,6 @@ const V = (
178
180
  }
179
181
  });
180
182
  export {
181
- Nt as default
183
+ Lt as default
182
184
  };
183
185
  //# sourceMappingURL=tab-nav.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-nav.vue2.mjs","sources":["../../../../../packages/components/tabs/tab-nav.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst ns_nav = /* hoist-static*/ useNamespace('tab-nav')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: ns_nav.b()\n});</script>\n<script lang=\"tsx\" setup>\nimport { throwError } from '@vft-ui/utils';\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\n\n\n;\n\nconst vm = getCurrentInstance()!;\n\n// 获取从 index.vue 提供的数据信息\nconst rootTabs = inject(TabsRootContextKey)!;\nif (!rootTabs) throwError(ns_nav.b(), `<vft-tabs><tab-nav /></vft-tabs>`)\n\nconst ns = useNamespace('tabs');\nconst visibility = useDocumentVisibility();\nconst focused = useWindowFocus();\n\n// 整个 nav dom 包含前进后退 btn (vft-tabs__nav-wrap)\nconst el$ = ref<HTMLDivElement>();\n// el$ 子节点 包含 newButton (vft-tabs__nav-scroll)\nconst navScroll$ = ref<HTMLDivElement>();\n// navScroll$ 子节点 (vft-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 // vft-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$(vft-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,所以当 vft-tabs__nav 撑开时其宽度可能会超过 vft-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":["ns_nav","useNamespace","__default__","DO_defineComponent","name","b","vm","getCurrentInstance","rootTabs","inject","TabsRootContextKey","throwError","ns","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","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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"}
1
+ {"version":3,"file":"tab-nav.vue2.mjs","sources":["../../../../../packages/components/tabs/tab-nav.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst ns_nav = /* hoist-static*/ useNamespace('tab-nav')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: ns_nav.b()\n});</script>\n<script lang=\"tsx\" setup>\nimport { throwError } from '@vft-ui/utils';\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\n\n\n;\n\nconst vm = getCurrentInstance()!;\n\n// 获取从 index.vue 提供的数据信息\nconst rootTabs = inject(TabsRootContextKey)!;\nif (!rootTabs) throwError(ns_nav.b(), `<vft-tabs><tab-nav /></vft-tabs>`)\n\nconst ns = useNamespace('tabs');\nconst visibility = useDocumentVisibility();\nconst focused = useWindowFocus();\n\n// 整个 nav dom 包含前进后退 btn (vft-tabs__nav-wrap)\nconst el$ = ref<HTMLDivElement>();\n// el$ 子节点 包含 newButton (vft-tabs__nav-scroll)\nconst navScroll$ = ref<HTMLDivElement>();\n// navScroll$ 子节点 (vft-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 // vft-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$(vft-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,所以当 vft-tabs__nav 撑开时其宽度可能会超过 vft-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":["ns_nav","useNamespace","__default__","DO_defineComponent","name","b","vm","getCurrentInstance","rootTabs","inject","TabsRootContextKey","throwError","ns","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","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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"}
package/es/index.mjs CHANGED
@@ -3,94 +3,106 @@ import { VftDivider as m } from "./components/divider/index.mjs";
3
3
  import { VftIcon as s } from "./components/icon/index.mjs";
4
4
  import { VftAvatar as n } from "./components/avatar/index.mjs";
5
5
  import { VftEmpty as l } from "./components/empty/index.mjs";
6
- import { VftResult as i } from "./components/result/index.mjs";
7
- import { VftException as V } from "./components/exception/index.mjs";
8
- import { VftTabPane as I, VftTabs as c } from "./components/tabs/index.mjs";
9
- import { VftPopper as C } from "./components/popper/index.mjs";
10
- import { VftCollapseTransition as P } from "./components/collapse-transition/index.mjs";
11
- import { VftTooltip as g } from "./components/tooltip/index.mjs";
12
- import { VftPopover as y } from "./components/popover/index.mjs";
13
- import { VftMenu as A, VftMenuItem as K, VftMenuItemGroup as R, VftSubMenu as b } from "./components/menu/index.mjs";
14
- import { EVENT_CODE as S } from "./constants/aria.mjs";
15
- import { WEEK_DAYS as Y, datePickTypes as w } from "./constants/date.mjs";
16
- import { CHANGE_EVENT as G, INPUT_EVENT as L, UPDATE_MODEL_EVENT as j } from "./constants/event.mjs";
17
- import { INSTALLED_KEY as J } from "./constants/key.mjs";
18
- import { componentSizeMap as W, componentSizes as h } from "./constants/size.mjs";
19
- import { _bem as Z, defaultNamespace as q, namespaceContextKey as B, useGetDerivedNamespace as Q, useNamespace as X } from "./hooks/use-namespace/index.mjs";
20
- import { usePopper as ee } from "./hooks/use-popper/index.mjs";
21
- import { useZIndex as re, zIndexContextKey as te } from "./hooks/use-z-index/index.mjs";
22
- import { FORWARD_REF_INJECTION_KEY as fe, useForwardRef as me, useForwardRefDirective as ae } from "./hooks/use-forward-ref/index.mjs";
23
- import { ID_INJECTION_KEY as xe, useId as ne, useIdInjection as ue } from "./hooks/use-id/index.mjs";
24
- import { usePopperContainer as Ee, usePopperContainerId as ie } from "./hooks/use-popper-container/index.mjs";
25
- import { useDelayedToggle as Ve } from "./hooks/use-delayed-toggle/index.mjs";
26
- import { useTimeout as Ie } from "./hooks/use-timeout/index.mjs";
27
- import { useOrderedChildren as Ne } from "./hooks/use-ordered-children/index.mjs";
28
- import { createModelToggleComposable as _e, useModelToggle as Pe, useModelToggleEmits as De } from "./hooks/use-model-toggle/index.mjs";
29
- import { makeInstaller as Me } from "./make-installer.mjs";
30
- import { default as ve } from "dayjs";
31
- import { EmptyEnum as Ke } from "./components/empty/constants.mjs";
32
- import { TabsRootContextKey as be } from "./components/tabs/types.mjs";
33
- import { default as Se } from "./components/popper/arrow.vue2.mjs";
34
- import { default as Ye } from "./components/popper/trigger.vue2.mjs";
35
- import { default as ze } from "./components/popper/content.vue2.mjs";
6
+ import { VftResult as d } from "./components/result/index.mjs";
7
+ import { VftException as T } from "./components/exception/index.mjs";
8
+ import { VftTabPane as I, VftTabs as C } from "./components/tabs/index.mjs";
9
+ import { VftPopper as N } from "./components/popper/index.mjs";
10
+ import { VftCollapseTransition as M } from "./components/collapse-transition/index.mjs";
11
+ import { VftTooltip as P } from "./components/tooltip/index.mjs";
12
+ import { VftPopover as b } from "./components/popover/index.mjs";
13
+ import { VftMenu as A, VftMenuItem as v, VftMenuItemGroup as K, VftSubMenu as R } from "./components/menu/index.mjs";
14
+ import { createContextMenu as S, destroyContextMenu as w } from "./components/context-menu/createContextMenu.mjs";
15
+ import { useContextMenu as Y } from "./components/context-menu/useContextMenu.mjs";
16
+ import { VftMultipleTabs as G } from "./components/multiple-tabs/index.mjs";
17
+ import { EVENT_CODE as j } from "./constants/aria.mjs";
18
+ import { WEEK_DAYS as J, datePickTypes as U } from "./constants/date.mjs";
19
+ import { CHANGE_EVENT as h, INPUT_EVENT as H, UPDATE_MODEL_EVENT as Z } from "./constants/event.mjs";
20
+ import { INSTALLED_KEY as B } from "./constants/key.mjs";
21
+ import { componentSizeMap as X, componentSizes as $ } from "./constants/size.mjs";
22
+ import { _bem as oe, defaultNamespace as re, namespaceContextKey as te, useGetDerivedNamespace as pe, useNamespace as fe } from "./hooks/use-namespace/index.mjs";
23
+ import { usePopper as xe } from "./hooks/use-popper/index.mjs";
24
+ import { useZIndex as ae, zIndexContextKey as ne } from "./hooks/use-z-index/index.mjs";
25
+ import { FORWARD_REF_INJECTION_KEY as le, useForwardRef as ie, useForwardRefDirective as de } from "./hooks/use-forward-ref/index.mjs";
26
+ import { ID_INJECTION_KEY as Te, useId as Ve, useIdInjection as Ie } from "./hooks/use-id/index.mjs";
27
+ import { usePopperContainer as ce, usePopperContainerId as Ne } from "./hooks/use-popper-container/index.mjs";
28
+ import { useDelayedToggle as Me } from "./hooks/use-delayed-toggle/index.mjs";
29
+ import { useTimeout as Pe } from "./hooks/use-timeout/index.mjs";
30
+ import { useOrderedChildren as be } from "./hooks/use-ordered-children/index.mjs";
31
+ import { createModelToggleComposable as Ae, useModelToggle as ve, useModelToggleEmits as Ke } from "./hooks/use-model-toggle/index.mjs";
32
+ import { makeInstaller as Oe } from "./make-installer.mjs";
33
+ import { default as we } from "dayjs";
34
+ import { EmptyEnum as Ye } from "./components/empty/constants.mjs";
35
+ import { TabsRootContextKey as Ge } from "./components/tabs/types.mjs";
36
+ import { default as je } from "./components/popper/arrow.vue2.mjs";
37
+ import { default as Je } from "./components/popper/trigger.vue2.mjs";
38
+ import { default as We } from "./components/popper/content.vue2.mjs";
39
+ import { useTabDropdown as He } from "./components/multiple-tabs/use/use-tab-dropdown.mjs";
40
+ import { initAffixTabs as qe, useTabsDrag as Be } from "./components/multiple-tabs/use/use-multiple-tabs.mjs";
36
41
  const r = e.install, t = e.version;
37
42
  export {
38
- G as CHANGE_EVENT,
39
- S as EVENT_CODE,
40
- Ke as EmptyEnum,
41
- fe as FORWARD_REF_INJECTION_KEY,
42
- xe as ID_INJECTION_KEY,
43
- L as INPUT_EVENT,
44
- J as INSTALLED_KEY,
45
- be as TabsRootContextKey,
46
- j as UPDATE_MODEL_EVENT,
43
+ h as CHANGE_EVENT,
44
+ j as EVENT_CODE,
45
+ Ye as EmptyEnum,
46
+ le as FORWARD_REF_INJECTION_KEY,
47
+ Te as ID_INJECTION_KEY,
48
+ H as INPUT_EVENT,
49
+ B as INSTALLED_KEY,
50
+ Ge as TabsRootContextKey,
51
+ Z as UPDATE_MODEL_EVENT,
47
52
  n as VftAvatar,
48
- P as VftCollapseTransition,
53
+ M as VftCollapseTransition,
49
54
  m as VftDivider,
50
55
  l as VftEmpty,
51
- V as VftException,
56
+ T as VftException,
52
57
  s as VftIcon,
53
58
  A as VftMenu,
54
- K as VftMenuItem,
55
- R as VftMenuItemGroup,
56
- y as VftPopover,
57
- C as VftPopper,
58
- Se as VftPopperArrow,
59
- ze as VftPopperContent,
60
- Ye as VftPopperTrigger,
61
- i as VftResult,
62
- b as VftSubMenu,
59
+ v as VftMenuItem,
60
+ K as VftMenuItemGroup,
61
+ G as VftMultipleTabs,
62
+ b as VftPopover,
63
+ N as VftPopper,
64
+ je as VftPopperArrow,
65
+ We as VftPopperContent,
66
+ Je as VftPopperTrigger,
67
+ d as VftResult,
68
+ R as VftSubMenu,
63
69
  I as VftTabPane,
64
- c as VftTabs,
65
- g as VftTooltip,
66
- Y as WEEK_DAYS,
67
- Z as _bem,
68
- W as componentSizeMap,
69
- h as componentSizes,
70
- _e as createModelToggleComposable,
71
- w as datePickTypes,
72
- ve as dayjs,
70
+ C as VftTabs,
71
+ P as VftTooltip,
72
+ J as WEEK_DAYS,
73
+ oe as _bem,
74
+ X as componentSizeMap,
75
+ $ as componentSizes,
76
+ S as createContextMenu,
77
+ Ae as createModelToggleComposable,
78
+ U as datePickTypes,
79
+ we as dayjs,
73
80
  e as default,
74
- q as defaultNamespace,
81
+ re as defaultNamespace,
82
+ w as destroyContextMenu,
83
+ qe as initAffixTabs,
75
84
  r as install,
76
- Me as makeInstaller,
77
- B as namespaceContextKey,
78
- Ve as useDelayedToggle,
79
- me as useForwardRef,
80
- ae as useForwardRefDirective,
81
- Q as useGetDerivedNamespace,
82
- ne as useId,
83
- ue as useIdInjection,
84
- Pe as useModelToggle,
85
- De as useModelToggleEmits,
86
- X as useNamespace,
87
- Ne as useOrderedChildren,
88
- ee as usePopper,
89
- Ee as usePopperContainer,
90
- ie as usePopperContainerId,
91
- Ie as useTimeout,
92
- re as useZIndex,
85
+ Oe as makeInstaller,
86
+ te as namespaceContextKey,
87
+ Y as useContextMenu,
88
+ Me as useDelayedToggle,
89
+ ie as useForwardRef,
90
+ de as useForwardRefDirective,
91
+ pe as useGetDerivedNamespace,
92
+ Ve as useId,
93
+ Ie as useIdInjection,
94
+ ve as useModelToggle,
95
+ Ke as useModelToggleEmits,
96
+ fe as useNamespace,
97
+ be as useOrderedChildren,
98
+ xe as usePopper,
99
+ ce as usePopperContainer,
100
+ Ne as usePopperContainerId,
101
+ He as useTabDropdown,
102
+ Be as useTabsDrag,
103
+ Pe as useTimeout,
104
+ ae as useZIndex,
93
105
  t as version,
94
- te as zIndexContextKey
106
+ ne as zIndexContextKey
95
107
  };
96
108
  //# sourceMappingURL=index.mjs.map
package/es/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../packages/vft/index.ts"],"sourcesContent":["import installer from './defaults'\nexport * from '@vft-ui/components'\nexport * from '@vft-ui/constants'\nexport * from '@vft-ui/hooks'\nexport * from './make-installer'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n\nexport { default as dayjs } from 'dayjs'\n"],"names":["install","installer","version"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAMA,IAAUC,EAAU,SACpBC,IAAUD,EAAU;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../packages/vft/index.ts"],"sourcesContent":["import installer from './defaults'\nexport * from '@vft-ui/components'\nexport * from '@vft-ui/constants'\nexport * from '@vft-ui/hooks'\nexport * from './make-installer'\n\nexport const install = installer.install\nexport const version = installer.version\nexport default installer\n\nexport { default as dayjs } from 'dayjs'\n"],"names":["install","installer","version"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAMA,IAAUC,EAAU,SACpBC,IAAUD,EAAU;"}
@@ -1,4 +1,4 @@
1
- const o = "0.0.13";
1
+ const o = "0.0.15";
2
2
  export {
3
3
  o as version
4
4
  };