vft 0.0.20 → 0.0.21

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 (226) hide show
  1. package/dist/index.css +1 -1
  2. package/es/component.mjs +32 -30
  3. package/es/component.mjs.map +1 -1
  4. package/es/components/back-top/back-top.vue2.mjs +8 -6
  5. package/es/components/back-top/back-top.vue2.mjs.map +1 -1
  6. package/es/components/config-provider/config-provider.vue.d.ts +9 -0
  7. package/es/components/config-provider/config-provider.vue2.mjs +32 -23
  8. package/es/components/config-provider/config-provider.vue2.mjs.map +1 -1
  9. package/es/components/config-provider/constants.d.ts +2 -0
  10. package/es/components/config-provider/constants.mjs +3 -2
  11. package/es/components/config-provider/constants.mjs.map +1 -1
  12. package/es/components/config-provider/index.d.ts +8 -0
  13. package/es/components/config-provider/index.mjs +7 -6
  14. package/es/components/context-menu/context-menu.vue2.mjs +17 -10
  15. package/es/components/context-menu/context-menu.vue2.mjs.map +1 -1
  16. package/es/components/index.d.ts +3 -0
  17. package/es/components/index.mjs +87 -71
  18. package/es/components/index.mjs.map +1 -1
  19. package/es/components/loading/directive.d.ts +18 -0
  20. package/es/components/loading/directive.mjs +50 -0
  21. package/es/components/loading/directive.mjs.map +1 -0
  22. package/es/components/loading/index.d.ts +39 -0
  23. package/es/components/loading/index.mjs +19 -0
  24. package/es/components/loading/index.mjs.map +1 -0
  25. package/es/components/loading/loading.d.ts +27 -0
  26. package/es/components/loading/loading.mjs +122 -0
  27. package/es/components/loading/loading.mjs.map +1 -0
  28. package/es/components/loading/service.d.ts +3 -0
  29. package/es/components/loading/service.mjs +68 -0
  30. package/es/components/loading/service.mjs.map +1 -0
  31. package/es/components/loading/style/css.d.ts +0 -0
  32. package/es/components/loading/style/css.mjs +3 -0
  33. package/es/components/loading/style/css.mjs.map +1 -0
  34. package/es/components/loading/style/index.d.ts +0 -0
  35. package/es/components/loading/style/index.mjs +3 -0
  36. package/es/components/loading/style/index.mjs.map +1 -0
  37. package/es/components/loading/types.d.ts +25 -0
  38. package/es/components/loading/types.mjs +2 -0
  39. package/es/components/loading/types.mjs.map +1 -0
  40. package/es/components/menu/menu-item.vue2.mjs +4 -2
  41. package/es/components/menu/menu-item.vue2.mjs.map +1 -1
  42. package/es/components/menu/sub-menu.vue2.mjs +4 -2
  43. package/es/components/menu/sub-menu.vue2.mjs.map +1 -1
  44. package/es/components/message/index.d.ts +3 -0
  45. package/es/components/message/index.mjs +14 -0
  46. package/es/components/message/index.mjs.map +1 -0
  47. package/es/components/message/instance.d.ts +17 -0
  48. package/es/components/message/instance.mjs +16 -0
  49. package/es/components/message/instance.mjs.map +1 -0
  50. package/es/components/message/message.vue.d.ts +129 -0
  51. package/es/components/message/message.vue.mjs +5 -0
  52. package/es/components/message/message.vue.mjs.map +1 -0
  53. package/es/components/message/message.vue2.mjs +129 -0
  54. package/es/components/message/message.vue2.mjs.map +1 -0
  55. package/es/components/message/method.d.ts +4 -0
  56. package/es/components/message/method.mjs +98 -0
  57. package/es/components/message/method.mjs.map +1 -0
  58. package/es/components/message/style/css.d.ts +0 -0
  59. package/es/components/message/style/css.mjs +3 -0
  60. package/es/components/message/style/css.mjs.map +1 -0
  61. package/es/components/message/style/index.d.ts +0 -0
  62. package/es/components/message/style/index.mjs +3 -0
  63. package/es/components/message/style/index.mjs.map +1 -0
  64. package/es/components/message/types.d.ts +63 -0
  65. package/es/components/message/types.mjs +23 -0
  66. package/es/components/message/types.mjs.map +1 -0
  67. package/es/components/multiple-tabs/multiple-tabs.vue2.mjs +4 -2
  68. package/es/components/multiple-tabs/multiple-tabs.vue2.mjs.map +1 -1
  69. package/es/components/multiple-tabs/tab-content.vue2.mjs +18 -11
  70. package/es/components/multiple-tabs/tab-content.vue2.mjs.map +1 -1
  71. package/es/components/page-wrapper/index.d.ts +12 -0
  72. package/es/components/page-wrapper/index.mjs +11 -0
  73. package/es/components/page-wrapper/index.mjs.map +1 -0
  74. package/es/components/page-wrapper/page-wrapper.vue.d.ts +13 -0
  75. package/es/components/page-wrapper/page-wrapper.vue.mjs +5 -0
  76. package/es/components/page-wrapper/page-wrapper.vue.mjs.map +1 -0
  77. package/es/components/page-wrapper/page-wrapper.vue2.mjs +43 -0
  78. package/es/components/page-wrapper/page-wrapper.vue2.mjs.map +1 -0
  79. package/es/components/page-wrapper/style/css.d.ts +0 -0
  80. package/es/components/page-wrapper/style/css.mjs +3 -0
  81. package/es/components/page-wrapper/style/css.mjs.map +1 -0
  82. package/es/components/page-wrapper/style/index.d.ts +0 -0
  83. package/es/components/page-wrapper/style/index.mjs +3 -0
  84. package/es/components/page-wrapper/style/index.mjs.map +1 -0
  85. package/es/components/result/result.vue2.mjs +4 -2
  86. package/es/components/result/result.vue2.mjs.map +1 -1
  87. package/es/components/side-menu/side-menu.vue2.mjs +4 -2
  88. package/es/components/side-menu/side-menu.vue2.mjs.map +1 -1
  89. package/es/components/tabs/tab-nav.vue2.mjs +19 -17
  90. package/es/components/tabs/tab-nav.vue2.mjs.map +1 -1
  91. package/es/defaults.d.ts +1 -1
  92. package/es/defaults.mjs +4 -3
  93. package/es/defaults.mjs.map +1 -1
  94. package/es/index.d.ts +1 -1
  95. package/es/index.mjs +135 -119
  96. package/es/index.mjs.map +1 -1
  97. package/es/make-installer.d.ts +2 -1
  98. package/es/make-installer.mjs +8 -6
  99. package/es/make-installer.mjs.map +1 -1
  100. package/es/package.json.mjs +1 -1
  101. package/es/plugin.d.ts +3 -0
  102. package/es/plugin.mjs +10 -0
  103. package/es/plugin.mjs.map +1 -0
  104. package/es/style.css +1 -1
  105. package/es/theme-style/src/loading.scss.mjs +5 -0
  106. package/es/theme-style/src/loading.scss.mjs.map +1 -0
  107. package/es/theme-style/src/message.scss.mjs +5 -0
  108. package/es/theme-style/src/message.scss.mjs.map +1 -0
  109. package/es/theme-style/src/page-wrapper.scss.mjs +5 -0
  110. package/es/theme-style/src/page-wrapper.scss.mjs.map +1 -0
  111. package/lib/component.js +1 -1
  112. package/lib/component.js.map +1 -1
  113. package/lib/components/back-top/back-top.vue2.js +1 -1
  114. package/lib/components/back-top/back-top.vue2.js.map +1 -1
  115. package/lib/components/config-provider/config-provider.vue.d.ts +9 -0
  116. package/lib/components/config-provider/config-provider.vue2.js +1 -1
  117. package/lib/components/config-provider/config-provider.vue2.js.map +1 -1
  118. package/lib/components/config-provider/constants.d.ts +2 -0
  119. package/lib/components/config-provider/constants.js +1 -1
  120. package/lib/components/config-provider/constants.js.map +1 -1
  121. package/lib/components/config-provider/index.d.ts +8 -0
  122. package/lib/components/config-provider/index.js +1 -1
  123. package/lib/components/context-menu/context-menu.vue2.js +1 -1
  124. package/lib/components/context-menu/context-menu.vue2.js.map +1 -1
  125. package/lib/components/index.d.ts +3 -0
  126. package/lib/components/index.js +1 -1
  127. package/lib/components/loading/directive.d.ts +18 -0
  128. package/lib/components/loading/directive.js +2 -0
  129. package/lib/components/loading/directive.js.map +1 -0
  130. package/lib/components/loading/index.d.ts +39 -0
  131. package/lib/components/loading/index.js +2 -0
  132. package/lib/components/loading/index.js.map +1 -0
  133. package/lib/components/loading/loading.d.ts +27 -0
  134. package/lib/components/loading/loading.js +2 -0
  135. package/lib/components/loading/loading.js.map +1 -0
  136. package/lib/components/loading/service.d.ts +3 -0
  137. package/lib/components/loading/service.js +2 -0
  138. package/lib/components/loading/service.js.map +1 -0
  139. package/lib/components/loading/style/css.d.ts +0 -0
  140. package/lib/components/loading/style/css.js +2 -0
  141. package/lib/components/loading/style/css.js.map +1 -0
  142. package/lib/components/loading/style/index.d.ts +0 -0
  143. package/lib/components/loading/style/index.js +2 -0
  144. package/lib/components/loading/style/index.js.map +1 -0
  145. package/lib/components/loading/types.d.ts +25 -0
  146. package/lib/components/loading/types.js +2 -0
  147. package/lib/components/loading/types.js.map +1 -0
  148. package/lib/components/menu/menu-item.vue2.js +1 -1
  149. package/lib/components/menu/menu-item.vue2.js.map +1 -1
  150. package/lib/components/menu/sub-menu.vue2.js +1 -1
  151. package/lib/components/menu/sub-menu.vue2.js.map +1 -1
  152. package/lib/components/message/index.d.ts +3 -0
  153. package/lib/components/message/index.js +2 -0
  154. package/lib/components/message/index.js.map +1 -0
  155. package/lib/components/message/instance.d.ts +17 -0
  156. package/lib/components/message/instance.js +2 -0
  157. package/lib/components/message/instance.js.map +1 -0
  158. package/lib/components/message/message.vue.d.ts +129 -0
  159. package/lib/components/message/message.vue.js +2 -0
  160. package/lib/components/message/message.vue.js.map +1 -0
  161. package/lib/components/message/message.vue2.js +2 -0
  162. package/lib/components/message/message.vue2.js.map +1 -0
  163. package/lib/components/message/method.d.ts +4 -0
  164. package/lib/components/message/method.js +2 -0
  165. package/lib/components/message/method.js.map +1 -0
  166. package/lib/components/message/style/css.d.ts +0 -0
  167. package/lib/components/message/style/css.js +2 -0
  168. package/lib/components/message/style/css.js.map +1 -0
  169. package/lib/components/message/style/index.d.ts +0 -0
  170. package/lib/components/message/style/index.js +2 -0
  171. package/lib/components/message/style/index.js.map +1 -0
  172. package/lib/components/message/types.d.ts +63 -0
  173. package/lib/components/message/types.js +2 -0
  174. package/lib/components/message/types.js.map +1 -0
  175. package/lib/components/multiple-tabs/multiple-tabs.vue2.js +1 -1
  176. package/lib/components/multiple-tabs/multiple-tabs.vue2.js.map +1 -1
  177. package/lib/components/multiple-tabs/tab-content.vue2.js +1 -1
  178. package/lib/components/multiple-tabs/tab-content.vue2.js.map +1 -1
  179. package/lib/components/page-wrapper/index.d.ts +12 -0
  180. package/lib/components/page-wrapper/index.js +2 -0
  181. package/lib/components/page-wrapper/index.js.map +1 -0
  182. package/lib/components/page-wrapper/page-wrapper.vue.d.ts +13 -0
  183. package/lib/components/page-wrapper/page-wrapper.vue.js +2 -0
  184. package/lib/components/page-wrapper/page-wrapper.vue.js.map +1 -0
  185. package/lib/components/page-wrapper/page-wrapper.vue2.js +2 -0
  186. package/lib/components/page-wrapper/page-wrapper.vue2.js.map +1 -0
  187. package/lib/components/page-wrapper/style/css.d.ts +0 -0
  188. package/lib/components/page-wrapper/style/css.js +2 -0
  189. package/lib/components/page-wrapper/style/css.js.map +1 -0
  190. package/lib/components/page-wrapper/style/index.d.ts +0 -0
  191. package/lib/components/page-wrapper/style/index.js +2 -0
  192. package/lib/components/page-wrapper/style/index.js.map +1 -0
  193. package/lib/components/result/result.vue2.js +1 -1
  194. package/lib/components/result/result.vue2.js.map +1 -1
  195. package/lib/components/side-menu/side-menu.vue2.js +1 -1
  196. package/lib/components/side-menu/side-menu.vue2.js.map +1 -1
  197. package/lib/components/tabs/tab-nav.vue2.js +1 -1
  198. package/lib/components/tabs/tab-nav.vue2.js.map +1 -1
  199. package/lib/defaults.d.ts +1 -1
  200. package/lib/defaults.js +1 -1
  201. package/lib/defaults.js.map +1 -1
  202. package/lib/index.d.ts +1 -1
  203. package/lib/index.js +1 -1
  204. package/lib/index.js.map +1 -1
  205. package/lib/make-installer.d.ts +2 -1
  206. package/lib/make-installer.js +1 -1
  207. package/lib/make-installer.js.map +1 -1
  208. package/lib/package.json.js +1 -1
  209. package/lib/plugin.d.ts +3 -0
  210. package/lib/plugin.js +2 -0
  211. package/lib/plugin.js.map +1 -0
  212. package/lib/theme-style/src/loading.scss.js +2 -0
  213. package/lib/theme-style/src/loading.scss.js.map +1 -0
  214. package/lib/theme-style/src/message.scss.js +2 -0
  215. package/lib/theme-style/src/message.scss.js.map +1 -0
  216. package/lib/theme-style/src/page-wrapper.scss.js +2 -0
  217. package/lib/theme-style/src/page-wrapper.scss.js.map +1 -0
  218. package/package.json +1 -1
  219. package/theme-style/index.css +1 -1
  220. package/theme-style/src/index.scss +3 -0
  221. package/theme-style/src/loading.scss +112 -0
  222. package/theme-style/src/message.scss +111 -0
  223. package/theme-style/src/page-wrapper.scss +28 -0
  224. package/theme-style/vft-loading.css +1 -0
  225. package/theme-style/vft-message.css +1 -0
  226. package/theme-style/vft-page-wrapper.css +1 -0
@@ -0,0 +1,129 @@
1
+ import type { PropType as __PropType } from 'vue';
2
+ import { type VNode } from 'vue';
3
+ import type { MessageType } from './types';
4
+ declare const _sfc_main: import("vue").DefineComponent<{
5
+ customClass: {
6
+ type: __PropType<string | undefined>;
7
+ required: false;
8
+ };
9
+ center: {
10
+ type: __PropType<boolean | undefined>;
11
+ required: false;
12
+ };
13
+ dangerouslyUseHTMLString: {
14
+ type: __PropType<boolean | undefined>;
15
+ required: false;
16
+ };
17
+ duration: {
18
+ type: __PropType<number>;
19
+ required: true;
20
+ };
21
+ icon: {
22
+ type: __PropType<string | undefined>;
23
+ required: false;
24
+ };
25
+ id: {
26
+ type: __PropType<string>;
27
+ required: true;
28
+ };
29
+ message: {
30
+ type: __PropType<string | VNode<import("vue").RendererNode, import("vue").RendererElement, {
31
+ [key: string]: any;
32
+ }> | (() => VNode) | undefined>;
33
+ required: false;
34
+ };
35
+ onClose: {
36
+ type: __PropType<Function | undefined>;
37
+ required: false;
38
+ };
39
+ showClose: {
40
+ type: __PropType<boolean | undefined>;
41
+ required: false;
42
+ };
43
+ type: {
44
+ type: __PropType<MessageType>;
45
+ required: true;
46
+ };
47
+ offset: {
48
+ type: __PropType<number>;
49
+ required: true;
50
+ };
51
+ zIndex: {
52
+ type: __PropType<number | undefined>;
53
+ required: false;
54
+ };
55
+ grouping: {
56
+ type: __PropType<boolean | undefined>;
57
+ required: false;
58
+ };
59
+ repeatNum: {
60
+ type: __PropType<number | undefined>;
61
+ required: false;
62
+ };
63
+ }, {
64
+ visible: import("vue").Ref<boolean>;
65
+ bottom: import("vue").ComputedRef<number>;
66
+ close: () => void;
67
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "destroy"[], "destroy", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
68
+ customClass: {
69
+ type: __PropType<string | undefined>;
70
+ required: false;
71
+ };
72
+ center: {
73
+ type: __PropType<boolean | undefined>;
74
+ required: false;
75
+ };
76
+ dangerouslyUseHTMLString: {
77
+ type: __PropType<boolean | undefined>;
78
+ required: false;
79
+ };
80
+ duration: {
81
+ type: __PropType<number>;
82
+ required: true;
83
+ };
84
+ icon: {
85
+ type: __PropType<string | undefined>;
86
+ required: false;
87
+ };
88
+ id: {
89
+ type: __PropType<string>;
90
+ required: true;
91
+ };
92
+ message: {
93
+ type: __PropType<string | VNode<import("vue").RendererNode, import("vue").RendererElement, {
94
+ [key: string]: any;
95
+ }> | (() => VNode) | undefined>;
96
+ required: false;
97
+ };
98
+ onClose: {
99
+ type: __PropType<Function | undefined>;
100
+ required: false;
101
+ };
102
+ showClose: {
103
+ type: __PropType<boolean | undefined>;
104
+ required: false;
105
+ };
106
+ type: {
107
+ type: __PropType<MessageType>;
108
+ required: true;
109
+ };
110
+ offset: {
111
+ type: __PropType<number>;
112
+ required: true;
113
+ };
114
+ zIndex: {
115
+ type: __PropType<number | undefined>;
116
+ required: false;
117
+ };
118
+ grouping: {
119
+ type: __PropType<boolean | undefined>;
120
+ required: false;
121
+ };
122
+ repeatNum: {
123
+ type: __PropType<number | undefined>;
124
+ required: false;
125
+ };
126
+ }>> & {
127
+ onDestroy?: ((...args: any[]) => any) | undefined;
128
+ }, {}>;
129
+ export default _sfc_main;
@@ -0,0 +1,5 @@
1
+ import f from "./message.vue2.mjs";
2
+ export {
3
+ f as default
4
+ };
5
+ //# sourceMappingURL=message.vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,129 @@
1
+ import { defineComponent as E, ref as g, computed as i, onMounted as x, watch as O, openBlock as l, createBlock as R, Transition as V, unref as e, withCtx as H, withDirectives as I, createElementVNode as $, normalizeClass as r, normalizeStyle as D, createElementBlock as m, createVNode as w, normalizeProps as F, guardReactiveProps as P, createCommentVNode as k, renderSlot as U, toDisplayString as j, withModifiers as A, vShow as q } from "vue";
2
+ import { EVENT_CODE as G } from "@vft/constants";
3
+ import { isObject as J } from "@vft/utils";
4
+ import { useResizeObserver as K, useTimeoutFn as Q } from "@vueuse/core";
5
+ import { useEventListener as W } from "@vft/use";
6
+ import { useNamespace as X } from "../../hooks/use-namespace/index.mjs";
7
+ import "@popperjs/core";
8
+ import "lodash";
9
+ import "../../hooks/use-z-index/index.mjs";
10
+ import "@vue/shared";
11
+ import { getLastOffset as Y } from "./instance.mjs";
12
+ import { VftIcon as B } from "../icon/index.mjs";
13
+ const Z = ["id"], _ = ["innerHTML"], ee = ["onClick"], ge = /* @__PURE__ */ E({
14
+ __name: "message",
15
+ props: {
16
+ customClass: null,
17
+ center: { type: Boolean },
18
+ dangerouslyUseHTMLString: { type: Boolean },
19
+ duration: null,
20
+ icon: null,
21
+ id: null,
22
+ message: { type: [String, null, Function] },
23
+ onClose: { type: Function },
24
+ showClose: { type: Boolean },
25
+ type: null,
26
+ offset: null,
27
+ zIndex: null,
28
+ grouping: { type: Boolean },
29
+ repeatNum: null
30
+ },
31
+ emits: ["destroy"],
32
+ setup(t, { expose: M }) {
33
+ const o = t, n = X("message"), f = g(), c = g(!1), v = g(0);
34
+ let a;
35
+ const L = /* @__PURE__ */ new Map([
36
+ ["success", { icon: "vi-fill-success" }],
37
+ ["error", { icon: "vi-fill-error" }],
38
+ ["warning", { icon: "vi-fill-warning" }]
39
+ ]), y = i(() => (o.icon ? J(o.icon) ? o.icon : { icon: o.icon } : "") || L.get(o.type) || ""), b = i(() => {
40
+ const s = o.type;
41
+ return { [n.bm("icon", s)]: s };
42
+ }), S = i(() => Y(o.id)), p = i(() => o.offset + S.value), T = i(() => v.value + p.value), z = i(() => ({
43
+ top: `${p.value}px`,
44
+ zIndex: o.zIndex
45
+ }));
46
+ function d() {
47
+ o.duration !== 0 && ({ stop: a } = Q(() => {
48
+ u();
49
+ }, o.duration));
50
+ }
51
+ function C() {
52
+ a == null || a();
53
+ }
54
+ function u() {
55
+ c.value = !1;
56
+ }
57
+ function N({ code: s }) {
58
+ s === G.esc && u();
59
+ }
60
+ return x(() => {
61
+ d(), c.value = !0;
62
+ }), O(
63
+ () => o.repeatNum,
64
+ () => {
65
+ C(), d();
66
+ }
67
+ ), W(document, "keydown", N), K(f, () => {
68
+ v.value = f.value.getBoundingClientRect().height;
69
+ }), M({
70
+ visible: c,
71
+ bottom: T,
72
+ close: u
73
+ }), (s, h) => (l(), R(V, {
74
+ name: e(n).b("fade"),
75
+ onBeforeLeave: t.onClose,
76
+ onAfterLeave: h[0] || (h[0] = (te) => s.$emit("destroy"))
77
+ }, {
78
+ default: H(() => [
79
+ I($("div", {
80
+ id: t.id,
81
+ ref_key: "messageRef",
82
+ ref: f,
83
+ class: r([
84
+ e(n).b(),
85
+ { [e(n).m(t.type)]: t.type && !t.icon },
86
+ e(n).is("center", t.center),
87
+ e(n).is("closable", t.showClose),
88
+ t.customClass
89
+ ]),
90
+ style: D(e(z)),
91
+ role: "alert",
92
+ onMouseenter: C,
93
+ onMouseleave: d
94
+ }, [
95
+ e(y) ? (l(), m("div", {
96
+ key: 0,
97
+ class: r([e(n).e("icon"), e(b)])
98
+ }, [
99
+ w(e(B), F(P(e(y))), null, 16)
100
+ ], 2)) : k("", !0),
101
+ U(s.$slots, "default", {}, () => [
102
+ t.dangerouslyUseHTMLString ? (l(), m("p", {
103
+ key: 1,
104
+ class: r(e(n).e("content")),
105
+ innerHTML: t.message
106
+ }, null, 10, _)) : (l(), m("p", {
107
+ key: 0,
108
+ class: r(e(n).e("content"))
109
+ }, j(t.message), 3))
110
+ ]),
111
+ t.showClose ? (l(), m("div", {
112
+ key: 1,
113
+ class: r(e(n).e("closeBtn")),
114
+ onClick: A(u, ["stop"])
115
+ }, [
116
+ w(e(B), { icon: "vi-close" })
117
+ ], 10, ee)) : k("", !0)
118
+ ], 46, Z), [
119
+ [q, c.value]
120
+ ])
121
+ ]),
122
+ _: 3
123
+ }, 8, ["name", "onBeforeLeave"]));
124
+ }
125
+ });
126
+ export {
127
+ ge as default
128
+ };
129
+ //# sourceMappingURL=message.vue2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.vue2.mjs","sources":["../../../../../packages/components/message/message.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { EVENT_CODE } from '@vft/constants';\nimport { isObject } from '@vft/utils';\nimport { useResizeObserver, useTimeoutFn } from '@vueuse/core';\nimport { useEventListener } from '@vft/use';\nimport type { CSSProperties } from 'vue';\nimport { computed, onMounted, ref, type VNode, watch } from 'vue';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { getLastOffset } from './instance';\nimport Icon from '@vft-ui/components/icon';\nimport type { MessageType } from './types';\n\ninterface MessageProps {\n customClass?: string;\n center?: boolean;\n dangerouslyUseHTMLString?: boolean;\n duration: number;\n icon?: string;\n id: string;\n message?: string | VNode | (() => VNode);\n onClose?: Function;\n showClose?: boolean;\n type: MessageType;\n offset: number;\n zIndex?: number;\n grouping?: boolean;\n repeatNum?: number;\n}\n\nconst props = defineProps({\n \"customClass\": null,\n \"center\": { type: Boolean, },\n \"dangerouslyUseHTMLString\": { type: Boolean, },\n \"duration\": null,\n \"icon\": null,\n \"id\": null,\n \"message\": { type: [String, null, Function], },\n \"onClose\": { type: Function, },\n \"showClose\": { type: Boolean, },\n \"type\": null,\n \"offset\": null,\n \"zIndex\": null,\n \"grouping\": { type: Boolean, },\n \"repeatNum\": null\n});\n\ndefineEmits(['destroy']);\n\nconst ns = useNamespace('message');\n\n// 消息框 ref\nconst messageRef = ref<HTMLDivElement>();\n// 是否可见\nconst visible = ref(false);\nconst height = ref(0);\n\nlet stopTimer: (() => void) | undefined = undefined;\n\nconst iconCfgMap = new Map([\n ['success', { icon: 'vi-fill-success' }],\n ['error', { icon: 'vi-fill-error' }],\n ['warning', { icon: 'vi-fill-warning' }]\n]);\n\nconst iconCfg = computed(() => {\n const _iconCfg = props.icon ? isObject(props.icon) ? props.icon : { icon: props.icon } : '';\n\n return _iconCfg || iconCfgMap.get(props.type) || '';\n});\n\nconst typeClass = computed(() => {\n const type = props.type;\n return { [ns.bm('icon', type)]: type };\n});\n\nconst lastOffset = computed(() => getLastOffset(props.id));\n// 偏移量\nconst offset = computed(() => props.offset + lastOffset.value);\nconst bottom = computed((): number => height.value + offset.value);\nconst customStyle = computed<CSSProperties>(() => ({\n top: `${offset.value}px`,\n zIndex: props.zIndex\n}));\n\nfunction startTimer () {\n if (props.duration === 0) return;\n ({ stop: stopTimer } = useTimeoutFn(() => {\n close();\n }, props.duration));\n}\n\nfunction clearTimer () {\n stopTimer?.();\n}\n\nfunction close () {\n visible.value = false;\n}\n\n// 监听退出键关闭\nfunction keydown ({ code }: KeyboardEvent) {\n if (code === EVENT_CODE.esc) {\n close();\n }\n}\n\nonMounted(() => {\n startTimer();\n visible.value = true;\n});\n\nwatch(\n () => props.repeatNum,\n () => {\n clearTimer();\n startTimer();\n }\n);\n\n// 监听键盘事件\nuseEventListener(document, 'keydown', keydown);\n\n// 监听 messageRef 消息框的大小变化\nuseResizeObserver(messageRef, () => {\n height.value = messageRef.value!.getBoundingClientRect().height;\n});\n\ndefineExpose({\n visible,\n bottom,\n close\n});\n</script>\n\n<template>\n <transition\n :name=\"ns.b('fade')\"\n @before-leave=\"onClose\"\n @after-leave=\"$emit('destroy')\"\n >\n <div\n v-show=\"visible\"\n :id=\"id\"\n ref=\"messageRef\"\n :class=\"[\n ns.b(),\n { [ns.m(type)]: type && !icon },\n ns.is('center', center),\n ns.is('closable', showClose),\n customClass,\n ]\"\n :style=\"customStyle\"\n role=\"alert\"\n @mouseenter=\"clearTimer\"\n @mouseleave=\"startTimer\"\n >\n <div v-if=\"iconCfg\" :class=\"[ns.e('icon'), typeClass]\">\n <icon v-bind=\"iconCfg\" />\n </div>\n <slot>\n <p v-if=\"!dangerouslyUseHTMLString\" :class=\"ns.e('content')\">\n {{ message }}\n </p>\n <!-- Caution here, message could've been compromised, never use user's input as message -->\n <p v-else :class=\"ns.e('content')\" v-html=\"message\" />\n </slot>\n <div v-if=\"showClose\" :class=\"ns.e('closeBtn')\" @click.stop=\"close\">\n <icon icon=\"vi-close\"/>\n </div>\n </div>\n </transition>\n</template>\n"],"names":["ns","useNamespace","messageRef","ref","visible","height","stopTimer","iconCfgMap","iconCfg","computed","props","isObject","typeClass","type","lastOffset","getLastOffset","offset","bottom","customStyle","startTimer","useTimeoutFn","close","clearTimer","keydown","code","EVENT_CODE","onMounted","watch","useEventListener","useResizeObserver","expose"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgDMA,IAAKC,EAAa,SAAS,GAG3BC,IAAaC,KAEbC,IAAUD,EAAI,EAAK,GACnBE,IAASF,EAAI,CAAC;AAEpB,QAAIG;AAEE,UAAAC,wBAAiB,IAAI;AAAA,MACzB,CAAC,WAAW,EAAE,MAAM,mBAAmB;AAAA,MACvC,CAAC,SAAS,EAAE,MAAM,iBAAiB;AAAA,MACnC,CAAC,WAAW,EAAE,MAAM,mBAAmB;AAAA,IAAA,CACxC,GAEKC,IAAUC,EAAS,OACNC,EAAM,OAAOC,EAASD,EAAM,IAAI,IAAIA,EAAM,OAAO,EAAE,MAAMA,EAAM,SAAS,OAEtEH,EAAW,IAAIG,EAAM,IAAI,KAAK,EAClD,GAEKE,IAAYH,EAAS,MAAM;AAC/B,YAAMI,IAAOH,EAAM;AACZ,aAAA,EAAE,CAACV,EAAG,GAAG,QAAQa,CAAI,CAAC,GAAGA;IAAK,CACtC,GAEKC,IAAaL,EAAS,MAAMM,EAAcL,EAAM,EAAE,CAAC,GAEnDM,IAASP,EAAS,MAAMC,EAAM,SAASI,EAAW,KAAK,GACvDG,IAASR,EAAS,MAAcJ,EAAO,QAAQW,EAAO,KAAK,GAC3DE,IAAcT,EAAwB,OAAO;AAAA,MACjD,KAAK,GAAGO,EAAO;AAAA,MACf,QAAQN,EAAM;AAAA,IACd,EAAA;AAEF,aAASS,IAAc;AACrB,MAAIT,EAAM,aAAa,MACtB,EAAE,MAAMJ,EAAU,IAAIc,EAAa,MAAM;AAClC,QAAAC;MAAA,GACLX,EAAM,QAAQ;AAAA,IACnB;AAEA,aAASY,IAAc;AACT,MAAAhB,KAAA,QAAAA;AAAA,IACd;AAEA,aAASe,IAAS;AAChB,MAAAjB,EAAQ,QAAQ;AAAA,IAClB;AAGS,aAAAmB,EAAS,EAAE,MAAAC,KAAuB;AACrC,MAAAA,MAASC,EAAW,OAChBJ;IAEV;AAEA,WAAAK,EAAU,MAAM;AACH,MAAAP,KACXf,EAAQ,QAAQ;AAAA,IAAA,CACjB,GAEDuB;AAAA,MACE,MAAMjB,EAAM;AAAA,MACZ,MAAM;AACO,QAAAY,KACAH;MACb;AAAA,IAAA,GAIeS,EAAA,UAAU,WAAWL,CAAO,GAG7CM,EAAkB3B,GAAY,MAAM;AAClC,MAAAG,EAAO,QAAQH,EAAW,MAAO,sBAAA,EAAwB;AAAA,IAAA,CAC1D,GAEY4B,EAAA;AAAA,MACX,SAAA1B;AAAA,MACA,QAAAa;AAAA,MACA,OAAAI;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ import type { Message, MessageType } from './types';
2
+ export declare function closeAll(type?: MessageType): void;
3
+ declare const _default: Message;
4
+ export default _default;
@@ -0,0 +1,98 @@
1
+ import { render as u, createVNode as v } from "vue";
2
+ import { isClient as b } from "@vueuse/core";
3
+ import { isNumber as y, isString as g, isVNode as h, isFunction as a, isElement as z } from "@vft/utils";
4
+ import "@popperjs/core";
5
+ import "lodash";
6
+ import { useZIndex as C } from "../../hooks/use-z-index/index.mjs";
7
+ import "@vue/shared";
8
+ import { debugWarn as E } from "../../utils/error.mjs";
9
+ import _ from "./message.vue2.mjs";
10
+ import { messageTypes as I, messageDefaults as M } from "./types.mjs";
11
+ import { instances as r } from "./instance.mjs";
12
+ import "../config-provider/index.mjs";
13
+ import { messageConfig as x } from "../config-provider/constants.mjs";
14
+ let N = 1;
15
+ const T = (e) => {
16
+ const n = !e || g(e) || h(e) || a(e) ? { message: e } : e, o = {
17
+ ...M,
18
+ ...n
19
+ };
20
+ if (!o.appendTo)
21
+ o.appendTo = document.body;
22
+ else if (g(o.appendTo)) {
23
+ let s = document.querySelector(o.appendTo);
24
+ z(s) || (E("VriMessage", "the appendTo option is not an HTMLElement. Falling back to document.body."), s = document.body), o.appendTo = s;
25
+ }
26
+ return o;
27
+ }, V = (e) => {
28
+ const n = r.indexOf(e);
29
+ if (n === -1)
30
+ return;
31
+ r.splice(n, 1);
32
+ const { handler: o } = e;
33
+ o.close();
34
+ }, A = ({ appendTo: e, ...n }, o) => {
35
+ const { nextZIndex: s } = C(), t = `message_${N++}`, l = n.onClose, i = document.createElement("div"), c = {
36
+ ...n,
37
+ zIndex: s() + n.zIndex,
38
+ id: t,
39
+ onClose: () => {
40
+ l == null || l(), V(f);
41
+ },
42
+ // 清除 message element 防止内存泄漏
43
+ onDestroy: () => {
44
+ u(null, i);
45
+ }
46
+ }, m = v(_, c, a(c.message) || h(c.message) ? { default: a(c.message) ? c.message : () => c.message } : null);
47
+ m.appContext = o || p._context, u(m, i), e.appendChild(i.firstElementChild);
48
+ const d = m.component, f = {
49
+ id: t,
50
+ vnode: m,
51
+ vm: d,
52
+ handler: {
53
+ // instead of calling the onClose function directly,
54
+ // setting this value so that we can have the full lifecycle
55
+ // for out component, so that all closing steps will not be skipped.
56
+ close: () => {
57
+ d.exposed.visible.value = !1;
58
+ }
59
+ },
60
+ props: m.component.props
61
+ };
62
+ return f;
63
+ }, p = (e = {}, n) => {
64
+ if (!b)
65
+ return { close: () => {
66
+ } };
67
+ if (y(x.max) && r.length >= x.max)
68
+ return { close: () => {
69
+ } };
70
+ const o = T(e);
71
+ if (o.grouping && r.length) {
72
+ const t = r.find(({ vnode: l }) => {
73
+ var i;
74
+ return ((i = l.props) == null ? void 0 : i.message) === o.message;
75
+ });
76
+ if (t)
77
+ return t.props.repeatNum += 1, t.props.type = o.type, t.handler;
78
+ }
79
+ const s = A(o, n);
80
+ return r.push(s), s.handler;
81
+ };
82
+ I.forEach((e) => {
83
+ p[e] = (n = {}, o) => {
84
+ const s = T(n);
85
+ return p({ ...s, type: e }, o);
86
+ };
87
+ });
88
+ function D(e) {
89
+ for (const n of r)
90
+ (!e || e === n.props.type) && n.handler.close();
91
+ }
92
+ p.closeAll = D;
93
+ p._context = null;
94
+ export {
95
+ D as closeAll,
96
+ p as default
97
+ };
98
+ //# sourceMappingURL=method.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method.mjs","sources":["../../../../../packages/components/message/method.ts"],"sourcesContent":["import { createVNode, render } from 'vue';\nimport { isClient } from '@vueuse/core';\nimport { isElement, isFunction, isNumber, isString, isVNode } from '@vft/utils';\nimport { useZIndex } from '@vft-ui/hooks';\nimport { debugWarn } from '../../utils';\nimport MessageConstructor from './message.vue';\nimport { messageDefaults, messageTypes } from './types';\nimport { instances } from './instance';\nimport { messageConfig } from '@vft-ui/components/config-provider';\nimport type { MessageContext } from './instance';\nimport type { AppContext } from 'vue';\nimport type { Message, MessageFn, MessageHandler, MessageParamsNormalized, MessageParams, MessageType } from './types';\n\nlet seed = 1;\n\n// 获取最终处理后的 message 的参数\nconst normalizeOptions = (params?: MessageParams) => {\n const options = !params || isString(params) || isVNode(params) || isFunction(params) ? { message: params } : params;\n\n // 合并传入的数据与默认的值\n const normalized = {\n ...messageDefaults,\n ...options\n };\n\n // appendTo 默认指定为 body\n if (!normalized.appendTo) {\n normalized.appendTo = document.body;\n } else if (isString(normalized.appendTo)) {\n let appendTo = document.querySelector<HTMLElement>(normalized.appendTo);\n // 当外部传入了 appendTo 但是我们获取到的 appendTo 不是一个元素节点,抛出警告,然后继续默认指定为 body\n if (!isElement(appendTo)) {\n debugWarn('VriMessage', 'the appendTo option is not an HTMLElement. Falling back to document.body.');\n appendTo = document.body;\n }\n\n normalized.appendTo = appendTo;\n }\n\n return normalized as MessageParamsNormalized;\n};\n\n// 关闭 message\nconst closeMessage = (instance: MessageContext) => {\n const idx = instances.indexOf(instance);\n if (idx === -1) return;\n\n instances.splice(idx, 1);\n const { handler } = instance;\n handler.close();\n};\n\n/**\n * @description 创建一个 message 实例\n * @author wfd\n * @date 2022/10/31 15:37\n * @example\n * @param {any} appendTo\n * @param {Omit<, \"appendTo\">} options\n * @param {AppContext | null} context\n * @returns {MessageContext}\n */\nconst createMessage = ({ appendTo, ...options }: MessageParamsNormalized, context?: AppContext | null): MessageContext => {\n // z-index 的设置\n const { nextZIndex } = useZIndex();\n // 自定义 message 的 id\n const id = `message_${seed++}`;\n // 获取用户自定义的 onClose\n const userOnClose = options.onClose;\n\n const container = document.createElement('div');\n\n const props = {\n ...options,\n zIndex: nextZIndex() + options.zIndex!,\n id,\n onClose: () => {\n userOnClose?.();\n closeMessage(instance);\n },\n\n // 清除 message element 防止内存泄漏\n onDestroy: () => {\n render(null, container);\n }\n };\n // 创建一个虚拟节点,children 的用处是为了 message 可能是函数或者虚拟节点\n const vnode = createVNode(MessageConstructor, props, isFunction(props.message) || isVNode(props.message) ? { default: isFunction(props.message) ? props.message : () => props.message } : null);\n\n // 设置 context\n vnode.appContext = context || message._context;\n // 渲染虚拟dom\n render(vnode, container);\n\n // 将渲染好的 dom 添加到 appendTo 上,默认是添加到 body 上\n appendTo.appendChild(container.firstElementChild!);\n\n const vm = vnode.component!;\n\n const handler: MessageHandler = {\n // instead of calling the onClose function directly,\n // setting this value so that we can have the full lifecycle\n // for out component, so that all closing steps will not be skipped.\n close: () => {\n // 将 message 组件暴露出来的 visible 设置为 false\n vm.exposed!.visible.value = false;\n }\n };\n\n // 返回这个实例\n const instance: MessageContext = {\n id,\n vnode,\n vm,\n handler,\n props: (vnode.component as any).props\n };\n\n return instance;\n};\n\n// message 初始化相关\nconst message: MessageFn & Partial<Message> & { _context: AppContext | null } = (options = {}, context) => {\n if (!isClient) return { close: () => undefined };\n\n // 判断设置最大的 message 展示的数量\n if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) {\n return { close: () => undefined };\n }\n // 获取最终处理后的 message 的参数\n const normalized = normalizeOptions(options);\n\n // 开启分组,message 实例存在\n if (normalized.grouping && instances.length) {\n // 找出当前实例中展示的 message 与现在 options 参数中 message 一致的 message 实例\n const instance = instances.find(({ vnode: vm }) => vm.props?.message === normalized.message);\n // repeatNum ++\n if (instance) {\n instance.props.repeatNum += 1;\n instance.props.type = normalized.type;\n return instance.handler;\n }\n }\n // 创建一个 message 实例\n const instance = createMessage(normalized, context);\n // 将 message 实例 push 至数组中\n instances.push(instance);\n\n return instance.handler;\n};\n\n//\nmessageTypes.forEach((type) => {\n message[type] = (options = {}, appContext) => {\n const normalized = normalizeOptions(options);\n return message({ ...normalized, type }, appContext);\n };\n});\n\n// 关闭所有 message\nexport function closeAll(type?: MessageType): void {\n for (const instance of instances) {\n if (!type || type === instance.props.type) {\n instance.handler.close();\n }\n }\n}\n\nmessage.closeAll = closeAll;\nmessage._context = null;\n\nexport default message as Message;\n"],"names":["seed","normalizeOptions","params","options","isString","isVNode","isFunction","normalized","messageDefaults","appendTo","isElement","debugWarn","closeMessage","instance","idx","instances","handler","createMessage","context","nextZIndex","useZIndex","id","userOnClose","container","props","render","vnode","createVNode","MessageConstructor","message","vm","isClient","isNumber","messageConfig","_a","messageTypes","type","appContext","closeAll"],"mappings":"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"}
File without changes
@@ -0,0 +1,3 @@
1
+ import "vft/theme-style/base.css";
2
+ import "vft/theme-style/vft-message.css";
3
+ //# sourceMappingURL=css.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
File without changes
@@ -0,0 +1,3 @@
1
+ import "../../../theme-style/src/base.scss.mjs";
2
+ import "../../../theme-style/src/message.scss.mjs";
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,63 @@
1
+ import type { AppContext, VNode } from 'vue';
2
+ export declare const messageTypes: readonly ["success", "info", "warning", "error"];
3
+ export type MessageType = 'success' | 'warning' | 'info' | 'error';
4
+ export interface MessageConfigContext {
5
+ /** 可同时显示的消息最大数量 */
6
+ max?: number;
7
+ }
8
+ export declare const messageDefaults: {
9
+ customClass: string;
10
+ center: boolean;
11
+ dangerouslyUseHTMLString: boolean;
12
+ duration: number;
13
+ icon: undefined;
14
+ id: string;
15
+ message: string;
16
+ onClose: undefined;
17
+ showClose: boolean;
18
+ type: string;
19
+ offset: number;
20
+ zIndex: number;
21
+ grouping: boolean;
22
+ repeatNum: number;
23
+ appendTo: HTMLElement;
24
+ };
25
+ export interface MessageProps {
26
+ customClass?: string;
27
+ center?: boolean;
28
+ dangerouslyUseHTMLString?: boolean;
29
+ duration?: number;
30
+ icon?: string;
31
+ id?: string;
32
+ message?: string | VNode | (() => VNode);
33
+ onClose?: Function;
34
+ showClose?: boolean;
35
+ type?: MessageType;
36
+ offset?: number;
37
+ zIndex?: number;
38
+ grouping?: boolean;
39
+ repeatNum: number;
40
+ }
41
+ export type MessageOptions = Partial<Omit<MessageProps, 'id'> & {
42
+ appendTo?: HTMLElement | string;
43
+ }>;
44
+ export type MessageParams = MessageOptions | MessageOptions['message'];
45
+ export type MessageParamsNormalized = Omit<MessageProps, 'id'> & {
46
+ appendTo: HTMLElement;
47
+ };
48
+ export type MessageOptionsWithType = Omit<MessageOptions, 'type'>;
49
+ export type MessageParamsWithType = MessageOptionsWithType | MessageOptions['message'];
50
+ export interface MessageHandler {
51
+ close: () => void;
52
+ }
53
+ export type MessageFn = {
54
+ (options?: MessageParams, appContext?: null | AppContext): MessageHandler;
55
+ closeAll(type?: MessageType): void;
56
+ };
57
+ export type MessageTypedFn = (options?: MessageParamsWithType, appContext?: null | AppContext) => MessageHandler;
58
+ export interface Message extends MessageFn {
59
+ success: MessageTypedFn;
60
+ warning: MessageTypedFn;
61
+ info: MessageTypedFn;
62
+ error: MessageTypedFn;
63
+ }
@@ -0,0 +1,23 @@
1
+ import { isClient as e } from "@vueuse/core";
2
+ const o = ["success", "info", "warning", "error"], n = {
3
+ customClass: "",
4
+ center: !1,
5
+ dangerouslyUseHTMLString: !1,
6
+ duration: 3e3,
7
+ icon: void 0,
8
+ id: "",
9
+ message: "",
10
+ onClose: void 0,
11
+ showClose: !1,
12
+ type: "info",
13
+ offset: 16,
14
+ zIndex: 0,
15
+ grouping: !1,
16
+ repeatNum: 1,
17
+ appendTo: e ? document.body : void 0
18
+ };
19
+ export {
20
+ n as messageDefaults,
21
+ o as messageTypes
22
+ };
23
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sources":["../../../../../packages/components/message/types.ts"],"sourcesContent":["import { isClient } from '@vueuse/core';\nimport type { AppContext, VNode } from 'vue';\n\nexport const messageTypes = ['success', 'info', 'warning', 'error'] as const;\nexport type MessageType = 'success' | 'warning' | 'info' | 'error';\n\nexport interface MessageConfigContext {\n /** 可同时显示的消息最大数量 */\n max?: number;\n}\n\n// props 默认赋值\nexport const messageDefaults = {\n customClass: '',\n center: false,\n dangerouslyUseHTMLString: false,\n duration: 3000,\n icon: undefined,\n id: '',\n message: '',\n onClose: undefined,\n showClose: false,\n type: 'info',\n offset: 16,\n zIndex: 0,\n grouping: false,\n repeatNum: 1,\n appendTo: isClient ? document.body : (undefined as never),\n};\n\nexport interface MessageProps {\n customClass?: string;\n center?: boolean;\n dangerouslyUseHTMLString?: boolean;\n duration?: number;\n icon?: string;\n id?: string;\n message?: string | VNode | (() => VNode);\n onClose?: Function;\n showClose?: boolean;\n type?: MessageType;\n offset?: number;\n zIndex?: number;\n grouping?: boolean;\n repeatNum: number;\n}\n\n// 排除 id 增加 appendTo\nexport type MessageOptions = Partial<\n Omit<MessageProps, 'id'> & {\n appendTo?: HTMLElement | string;\n }\n>;\n\nexport type MessageParams = MessageOptions | MessageOptions['message'];\n\nexport type MessageParamsNormalized = Omit<MessageProps, 'id'> & {\n appendTo: HTMLElement;\n};\n\nexport type MessageOptionsWithType = Omit<MessageOptions, 'type'>;\nexport type MessageParamsWithType = MessageOptionsWithType | MessageOptions['message'];\n\nexport interface MessageHandler {\n close: () => void;\n}\n\nexport type MessageFn = {\n (options?: MessageParams, appContext?: null | AppContext): MessageHandler;\n closeAll(type?: MessageType): void;\n};\n\nexport type MessageTypedFn = (options?: MessageParamsWithType, appContext?: null | AppContext) => MessageHandler;\n\nexport interface Message extends MessageFn {\n success: MessageTypedFn\n warning: MessageTypedFn\n info: MessageTypedFn\n error: MessageTypedFn\n}\n"],"names":["messageTypes","messageDefaults","isClient"],"mappings":";AAGO,MAAMA,IAAe,CAAC,WAAW,QAAQ,WAAW,OAAO,GASrDC,IAAkB;AAAA,EAC7B,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,0BAA0B;AAAA,EAC1B,UAAU;AAAA,EACV,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,UAAUC,IAAW,SAAS,OAAQ;AACxC;"}
@@ -44,6 +44,8 @@ import "../qrcode/index.mjs";
44
44
  import "../overlay/index.mjs";
45
45
  import "../clamp/index.mjs";
46
46
  import "../clamp-toggle/index.mjs";
47
+ import "../page-wrapper/index.mjs";
48
+ import "../message/index.mjs";
47
49
  import Z from "./tab-content.vue2.mjs";
48
50
  import { initAffixTabs as ee, useTabsDrag as te } from "./use/use-multiple-tabs.mjs";
49
51
  const P = (
@@ -51,7 +53,7 @@ const P = (
51
53
  W("multiple-tabs")
52
54
  ), oe = _({
53
55
  name: P.b()
54
- }), Xe = /* @__PURE__ */ _({
56
+ }), Ze = /* @__PURE__ */ _({
55
57
  ...oe,
56
58
  props: {
57
59
  tabsStyle: null,
@@ -167,6 +169,6 @@ const P = (
167
169
  }
168
170
  });
169
171
  export {
170
- Xe as default
172
+ Ze as default
171
173
  };
172
174
  //# sourceMappingURL=multiple-tabs.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"multiple-tabs.vue2.mjs","sources":["../../../../../packages/components/multiple-tabs/multiple-tabs.vue"],"sourcesContent":["<script lang=\"ts\">\nconst ns = /* hoist-static*/ useNamespace('multiple-tabs')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script lang=\"ts\" setup>\nimport { getRouterKeyPath, listenerRouteChange, useRouterHelper } from '@vft/router';\nimport { useMultipleTabStore, useTabs } from '@vft/store';\nimport { useRefs } from '@vft/use';\nimport { generateCssVars } from '@vft/utils';\nimport hotkeys from 'hotkeys-js';\nimport { computed, ref, unref, watchEffect } from 'vue';\nimport type { RouteLocationNormalized, RouteMeta } from 'vue-router';\nimport { useRouter, onBeforeRouteLeave } from 'vue-router';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { VftTabs, VftTabPane, type TabsPaneContext } from '@vft-ui/components';\n\nimport TabContent from './tab-content.vue';\nimport type { TabContentExpose } from './types';\nimport { initAffixTabs, useTabsDrag } from './use';\n\ninterface MultipleTabsProps {\n tabsStyle?: Record<string, Numberish>;\n contextMenuStyle?: Record<string, Numberish>;\n canDrag?: boolean;\n}\n\ndefineProps({\n \"tabsStyle\": null,\n \"contextMenuStyle\": null,\n \"canDrag\": { type: Boolean, }\n})\n\n\n\n;\n\nconst affixList = initAffixTabs();\n\nif (__props.canDrag) {\n useTabsDrag(affixList);\n}\n\nconst tabStore = useMultipleTabStore();\n\n// active path for tab\nconst activePathRef = ref('');\nconst activeIndex = ref(0);\nconst fromRoute = ref();\n\nconst router = useRouter();\nconst { go } = useRouterHelper();\n\n// get current tab list\nconst getTabsState = computed(() => {\n return tabStore.getTabList.filter((item) => {\n return !item.meta?.hideTab;\n });\n});\n\n\nwatchEffect(() => {\n if (activePathRef.value) {\n const _activeIndex = getTabsState.value.findIndex(item => {\n return getRouterKeyPath(item) === activePathRef.value;\n });\n if (_activeIndex === -1) {\n activeIndex.value = getTabsState.value?.length - 1;\n } else {\n activeIndex.value = _activeIndex;\n }\n activeIndex.value = activeIndex.value < affixList?.length ? affixList?.length - 1 : activeIndex.value;\n }\n});\n\nonBeforeRouteLeave(() => {\n fromRoute.value = unref(router.currentRoute);\n});\n\nlistenerRouteChange((route) => {\n if (!route) {\n return;\n }\n\n const { meta = {} } = route;\n const { currentActivePath, hideTab } = meta as RouteMeta;\n\n const isHide = !hideTab ? null : currentActivePath;\n\n // set current active tab value\n const activePath = getRouterKeyPath(route);\n\n if (activePathRef.value !== activePath) {\n activePathRef.value = activePath;\n }\n\n if (isHide) {\n // 如果当前 tab 是隐藏的,则从路由中根据 currentActivePath 寻找到此路由的信息,然后在 tabStore 添加此路由\n let findParentRoute = router.getRoutes().find((item) => item.path === currentActivePath);\n findParentRoute && tabStore.addTab(findParentRoute as unknown as RouteLocationNormalized, unref(fromRoute), activeIndex.value, route);\n } else {\n tabStore.addTab(unref(route), unref(fromRoute), activeIndex.value);\n }\n});\n\n// 点击 tab 根据 tab 传入的 path 路径,跳转到对应页面\nfunction handleClick (pane: TabsPaneContext) {\n if (activePathRef.value === pane.paneName) {\n \treturn;\n }\n const clickTab = getTabsState.value[pane.attrs.index];\n activePathRef.value = pane.paneName as string;\n const hideActiveRoutePath = (clickTab?.meta?.hideActiveRoute as RouteLocationNormalized)?.fullPath;\n if (hideActiveRoutePath) {\n go(hideActiveRoutePath);\n } else {\n go(clickTab.fullPath || clickTab.path);\n }\n}\n\n// click x close tab\nfunction handleRemove (targetPath: string) {\n tabStore.closeTabByKey(targetPath, router);\n}\n\nconst [refs, setRefs] = useRefs<TabContentExpose>();\n\nfunction handleContextMenu (data: {pane: {attrs: {index: number;};}; event: any;}) {\n const _index = data.pane.attrs.index;\n const _event = data.event;\n refs.value[_index].handleContext(_event);\n}\n\nconst _tabsStyle = computed(() => {\n let initTabStyle: Record<string, Numberish> = {\n padding: '4px 0 0',\n 'header-height': '26px',\n 'item-color': '#5C5C5C',\n 'item-bg-color': '#f8f8f8',\n 'font-size': '13px',\n 'item-padding': '0 10px',\n 'close-icon-left': '8px',\n 'item-distance': '10px',\n 'item-max-width': '348px',\n 'header-margin': '0 0 0 8px'\n };\n\n return { ...generateCssVars(initTabStyle, 'tabs', 'vft'), ...__props.tabsStyle };\n});\n\nconst { closeCurrent } = useTabs();\n\nhotkeys('command+e, ctrl+e', function () {\n closeCurrent();\n return false;\n});\n\nconst _contextMenuStyle = computed(() => {\n return {\n ...generateCssVars({\n border: '1px solid #dcdfe6',\n 'sub-item-height': '40px',\n 'item-min-width': '150px'\n }, 'menu', 'vft'),\n ...__props.contextMenuStyle\n };\n});\n</script>\n\n<template>\n <div :class=\"ns.b()\" :style=\"_tabsStyle\">\n <vft-tabs\n v-model:model-value=\"activePathRef\"\n type=\"card\"\n @tabClick=\"handleClick\"\n @tabRemove=\"handleRemove\"\n @tabContextMenu=\"handleContextMenu\"\n :closeIconCfg=\"{ color: 'white'}\"\n >\n <!--why key add index:key not update after sort -->\n <template v-for=\"(item, index) in getTabsState\" :key=\"getRouterKeyPath(item) + index\">\n <vft-tab-pane :closable=\"!(item.meta?.affix)\" :index=\"index\" :name=\"getRouterKeyPath(item)\">\n <template #label>\n <tab-content :contextMenuStyle=\"_contextMenuStyle\" :affixNum=\"affixList?.length\"\n :ref=\"setRefs(index)\" :tabItem=\"item\" />\n </template>\n </vft-tab-pane>\n </template>\n </vft-tabs>\n </div>\n</template>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","affixList","initAffixTabs","__props","useTabsDrag","tabStore","useMultipleTabStore","activePathRef","ref","activeIndex","fromRoute","router","useRouter","go","useRouterHelper","getTabsState","computed","item","_a","watchEffect","_activeIndex","getRouterKeyPath","onBeforeRouteLeave","unref","listenerRouteChange","route","meta","currentActivePath","hideTab","isHide","activePath","findParentRoute","handleClick","pane","clickTab","hideActiveRoutePath","_b","handleRemove","targetPath","refs","setRefs","useRefs","handleContextMenu","data","_index","_event","_tabsStyle","generateCssVars","closeCurrent","useTabs","hotkeys","_contextMenuStyle"],"mappings":"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"}
1
+ {"version":3,"file":"multiple-tabs.vue2.mjs","sources":["../../../../../packages/components/multiple-tabs/multiple-tabs.vue"],"sourcesContent":["<script lang=\"ts\">\nconst ns = /* hoist-static*/ useNamespace('multiple-tabs')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script lang=\"ts\" setup>\nimport { getRouterKeyPath, listenerRouteChange, useRouterHelper } from '@vft/router';\nimport { useMultipleTabStore, useTabs } from '@vft/store';\nimport { useRefs } from '@vft/use';\nimport { generateCssVars } from '@vft/utils';\nimport hotkeys from 'hotkeys-js';\nimport { computed, ref, unref, watchEffect } from 'vue';\nimport type { RouteLocationNormalized, RouteMeta } from 'vue-router';\nimport { useRouter, onBeforeRouteLeave } from 'vue-router';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { VftTabs, VftTabPane, type TabsPaneContext } from '@vft-ui/components';\n\nimport TabContent from './tab-content.vue';\nimport type { TabContentExpose } from './types';\nimport { initAffixTabs, useTabsDrag } from './use';\n\ninterface MultipleTabsProps {\n tabsStyle?: Record<string, Numberish>;\n contextMenuStyle?: Record<string, Numberish>;\n canDrag?: boolean;\n}\n\ndefineProps({\n \"tabsStyle\": null,\n \"contextMenuStyle\": null,\n \"canDrag\": { type: Boolean, }\n})\n\n\n\n;\n\nconst affixList = initAffixTabs();\n\nif (__props.canDrag) {\n useTabsDrag(affixList);\n}\n\nconst tabStore = useMultipleTabStore();\n\n// active path for tab\nconst activePathRef = ref('');\nconst activeIndex = ref(0);\nconst fromRoute = ref();\n\nconst router = useRouter();\nconst { go } = useRouterHelper();\n\n// get current tab list\nconst getTabsState = computed(() => {\n return tabStore.getTabList.filter((item) => {\n return !item.meta?.hideTab;\n });\n});\n\n\nwatchEffect(() => {\n if (activePathRef.value) {\n const _activeIndex = getTabsState.value.findIndex(item => {\n return getRouterKeyPath(item) === activePathRef.value;\n });\n if (_activeIndex === -1) {\n activeIndex.value = getTabsState.value?.length - 1;\n } else {\n activeIndex.value = _activeIndex;\n }\n activeIndex.value = activeIndex.value < affixList?.length ? affixList?.length - 1 : activeIndex.value;\n }\n});\n\nonBeforeRouteLeave(() => {\n fromRoute.value = unref(router.currentRoute);\n});\n\nlistenerRouteChange((route) => {\n if (!route) {\n return;\n }\n\n const { meta = {} } = route;\n const { currentActivePath, hideTab } = meta as RouteMeta;\n\n const isHide = !hideTab ? null : currentActivePath;\n\n // set current active tab value\n const activePath = getRouterKeyPath(route);\n\n if (activePathRef.value !== activePath) {\n activePathRef.value = activePath;\n }\n\n if (isHide) {\n // 如果当前 tab 是隐藏的,则从路由中根据 currentActivePath 寻找到此路由的信息,然后在 tabStore 添加此路由\n let findParentRoute = router.getRoutes().find((item) => item.path === currentActivePath);\n findParentRoute && tabStore.addTab(findParentRoute as unknown as RouteLocationNormalized, unref(fromRoute), activeIndex.value, route);\n } else {\n tabStore.addTab(unref(route), unref(fromRoute), activeIndex.value);\n }\n});\n\n// 点击 tab 根据 tab 传入的 path 路径,跳转到对应页面\nfunction handleClick (pane: TabsPaneContext) {\n if (activePathRef.value === pane.paneName) {\n \treturn;\n }\n const clickTab = getTabsState.value[pane.attrs.index];\n activePathRef.value = pane.paneName as string;\n const hideActiveRoutePath = (clickTab?.meta?.hideActiveRoute as RouteLocationNormalized)?.fullPath;\n if (hideActiveRoutePath) {\n go(hideActiveRoutePath);\n } else {\n go(clickTab.fullPath || clickTab.path);\n }\n}\n\n// click x close tab\nfunction handleRemove (targetPath: string) {\n tabStore.closeTabByKey(targetPath, router);\n}\n\nconst [refs, setRefs] = useRefs<TabContentExpose>();\n\nfunction handleContextMenu (data: {pane: {attrs: {index: number;};}; event: any;}) {\n const _index = data.pane.attrs.index;\n const _event = data.event;\n refs.value[_index].handleContext(_event);\n}\n\nconst _tabsStyle = computed(() => {\n let initTabStyle: Record<string, Numberish> = {\n padding: '4px 0 0',\n 'header-height': '26px',\n 'item-color': '#5C5C5C',\n 'item-bg-color': '#f8f8f8',\n 'font-size': '13px',\n 'item-padding': '0 10px',\n 'close-icon-left': '8px',\n 'item-distance': '10px',\n 'item-max-width': '348px',\n 'header-margin': '0 0 0 8px'\n };\n\n return { ...generateCssVars(initTabStyle, 'tabs', 'vft'), ...__props.tabsStyle };\n});\n\nconst { closeCurrent } = useTabs();\n\nhotkeys('command+e, ctrl+e', function () {\n closeCurrent();\n return false;\n});\n\nconst _contextMenuStyle = computed(() => {\n return {\n ...generateCssVars({\n border: '1px solid #dcdfe6',\n 'sub-item-height': '40px',\n 'item-min-width': '150px'\n }, 'menu', 'vft'),\n ...__props.contextMenuStyle\n };\n});\n</script>\n\n<template>\n <div :class=\"ns.b()\" :style=\"_tabsStyle\">\n <vft-tabs\n v-model:model-value=\"activePathRef\"\n type=\"card\"\n @tabClick=\"handleClick\"\n @tabRemove=\"handleRemove\"\n @tabContextMenu=\"handleContextMenu\"\n :closeIconCfg=\"{ color: 'white'}\"\n >\n <!--why key add index:key not update after sort -->\n <template v-for=\"(item, index) in getTabsState\" :key=\"getRouterKeyPath(item) + index\">\n <vft-tab-pane :closable=\"!(item.meta?.affix)\" :index=\"index\" :name=\"getRouterKeyPath(item)\">\n <template #label>\n <tab-content :contextMenuStyle=\"_contextMenuStyle\" :affixNum=\"affixList?.length\"\n :ref=\"setRefs(index)\" :tabItem=\"item\" />\n </template>\n </vft-tab-pane>\n </template>\n </vft-tabs>\n </div>\n</template>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","affixList","initAffixTabs","__props","useTabsDrag","tabStore","useMultipleTabStore","activePathRef","ref","activeIndex","fromRoute","router","useRouter","go","useRouterHelper","getTabsState","computed","item","_a","watchEffect","_activeIndex","getRouterKeyPath","onBeforeRouteLeave","unref","listenerRouteChange","route","meta","currentActivePath","hideTab","isHide","activePath","findParentRoute","handleClick","pane","clickTab","hideActiveRoutePath","_b","handleRemove","targetPath","refs","setRefs","useRefs","handleContextMenu","data","_index","_event","_tabsStyle","generateCssVars","closeCurrent","useTabs","hotkeys","_contextMenuStyle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,MAAMA;AAAA;AAAA,EAAuBC,EAAa,eAAe;AAAA,GAGzDC,KAA6BC,EAAmB;AAAA,EAC9C,MAAMH,EAAG,EAAE;AACb,CAAC;;;;;;;;AAiCD,UAAMI,IAAYC;AAElB,IAAIC,EAAQ,WACVC,GAAYH,CAAS;AAGvB,UAAMI,IAAWC,KAGXC,IAAgBC,EAAI,EAAE,GACtBC,IAAcD,EAAI,CAAC,GACnBE,IAAYF,KAEZG,IAASC,KACT,EAAE,IAAAC,MAAOC,KAGTC,IAAeC,EAAS,MACrBX,EAAS,WAAW,OAAO,CAACY,MAAS;;AACnC,aAAA,GAACC,IAAAD,EAAK,SAAL,QAAAC,EAAW;AAAA,IAAA,CACpB,CACF;AAGD,IAAAC,EAAY,MAAM;;AAChB,UAAIZ,EAAc,OAAO;AACvB,cAAMa,IAAeL,EAAa,MAAM,UAAU,CAAQE,MACjDI,EAAiBJ,CAAI,MAAMV,EAAc,KACjD;AACD,QAAIa,MAAiB,KACPX,EAAA,UAAQS,IAAAH,EAAa,UAAb,gBAAAG,EAAoB,UAAS,IAEjDT,EAAY,QAAQW,GAEVX,EAAA,QAAQA,EAAY,SAAQR,KAAA,gBAAAA,EAAW,WAASA,KAAA,gBAAAA,EAAW,UAAS,IAAIQ,EAAY;AAAA,MAClG;AAAA,IAAA,CACD,GAEDa,EAAmB,MAAM;AACb,MAAAZ,EAAA,QAAQa,EAAMZ,EAAO,YAAY;AAAA,IAAA,CAC5C,GAEDa,EAAoB,CAACC,MAAU;AAC7B,UAAI,CAACA;AACH;AAGF,YAAM,EAAE,MAAAC,IAAO,GAAO,IAAAD,GAChB,EAAE,mBAAAE,GAAmB,SAAAC,EAAY,IAAAF,GAEjCG,IAAUD,IAAiBD,IAAP,MAGpBG,IAAaT,EAAiBI,CAAK;AAMzC,UAJIlB,EAAc,UAAUuB,MAC1BvB,EAAc,QAAQuB,IAGpBD,GAAQ;AAEN,YAAAE,IAAkBpB,EAAO,YAAY,KAAK,CAACM,MAASA,EAAK,SAASU,CAAiB;AACpE,QAAAI,KAAA1B,EAAS,OAAO0B,GAAuDR,EAAMb,CAAS,GAAGD,EAAY,OAAOgB,CAAK;AAAA,MAAA;AAE3H,QAAApB,EAAA,OAAOkB,EAAME,CAAK,GAAGF,EAAMb,CAAS,GAAGD,EAAY,KAAK;AAAA,IACnE,CACD;AAGD,aAASuB,EAAaC,GAAuB;;AACvC,UAAA1B,EAAc,UAAU0B,EAAK;AAChC;AAED,YAAMC,IAAWnB,EAAa,MAAMkB,EAAK,MAAM,KAAK;AACpD,MAAA1B,EAAc,QAAQ0B,EAAK;AACrB,YAAAE,KAAuBC,KAAAlB,IAAAgB,KAAA,gBAAAA,EAAU,SAAV,gBAAAhB,EAAgB,oBAAhB,gBAAAkB,EAA6D;AAC1F,MACEvB,EADEsB,KAGCD,EAAS,YAAYA,EAAS,IAFX;AAAA,IAI1B;AAGA,aAASG,EAAcC,GAAoB;AAChC,MAAAjC,EAAA,cAAciC,GAAY3B,CAAM;AAAA,IAC3C;AAEA,UAAM,CAAC4B,GAAMC,CAAO,IAAIC,EAA0B;AAElD,aAASC,EAAmBC,GAAuD;AAC3E,YAAAC,IAASD,EAAK,KAAK,MAAM,OACzBE,IAASF,EAAK;AACpB,MAAAJ,EAAK,MAAMK,CAAM,EAAE,cAAcC,CAAM;AAAA,IACzC;AAEM,UAAAC,IAAa9B,EAAS,OAcnB,EAAE,GAAG+B,EAbkC;AAAA,MAC5C,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,IAAA,GAGuB,QAAQ,KAAK,GAAG,GAAG5C,EAAQ,YACtE,GAEK,EAAE,cAAA6C,MAAiBC;AAEzB,IAAAC,EAAQ,qBAAqB,WAAY;AAC1B,aAAAF,KACN;AAAA,IAAA,CACR;AAEK,UAAAG,IAAoBnC,EAAS,OAC1B;AAAA,MACL,GAAG+B,EAAgB;AAAA,QACjB,QAAQ;AAAA,QACR,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,MAAA,GACjB,QAAQ,KAAK;AAAA,MAChB,GAAG5C,EAAQ;AAAA,IAAA,EAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}