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,19 @@
1
+ import { Loading as e } from "./service.mjs";
2
+ import { vLoading as o } from "./directive.mjs";
3
+ import { createLoadingDirective as g } from "./directive.mjs";
4
+ const a = {
5
+ install(i) {
6
+ i.directive("loading", o), i.config.globalProperties.$loading = e;
7
+ },
8
+ directive: o,
9
+ service: e
10
+ };
11
+ export {
12
+ a as VftLoading,
13
+ o as VftLoadingDirective,
14
+ e as VftLoadingService,
15
+ g as createLoadingDirective,
16
+ a as default,
17
+ o as vLoading
18
+ };
19
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/loading/index.ts"],"sourcesContent":["import { Loading } from './service';\nimport { vLoading } from './directive';\n\nimport type { App } from 'vue';\n\n// installer and everything in all\nexport const VftLoading = {\n\tinstall (app: App) {\n\t\tapp.directive('loading', vLoading);\n\t\tapp.config.globalProperties.$loading = Loading;\n\t},\n\tdirective: vLoading,\n\tservice: Loading,\n};\n\nexport default VftLoading;\nexport { vLoading, vLoading as VftLoadingDirective, Loading as VftLoadingService };\n\nexport * from './types';\nexport { createLoadingDirective } from './directive';\n"],"names":["VftLoading","app","vLoading","Loading"],"mappings":";;;AAMO,MAAMA,IAAa;AAAA,EACzB,QAASC,GAAU;AACd,IAAAA,EAAA,UAAU,WAAWC,CAAQ,GAC7BD,EAAA,OAAO,iBAAiB,WAAWE;AAAA,EACxC;AAAA,EACA,WAAWD;AAAA,EACX,SAASC;AACV;"}
@@ -0,0 +1,27 @@
1
+ import type { LoadingOptionsResolved } from './types';
2
+ export declare function createLoadingComponent(options: LoadingOptionsResolved): {
3
+ setText: (text: string) => void;
4
+ removeVriLoadingChild: () => void;
5
+ close: () => void;
6
+ handleAfterLeave: () => void;
7
+ vm: import("vue").ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, import("vue").ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}>;
8
+ $el: HTMLElement;
9
+ originalPosition: import("vue").Ref<string>;
10
+ originalOverflow: import("vue").Ref<string>;
11
+ visible: import("vue").Ref<boolean>;
12
+ parent: import("vue").Ref<import("./types").LoadingParentElement>;
13
+ background: import("vue").Ref<string>;
14
+ svg: import("vue").Ref<string>;
15
+ svgViewBox: import("vue").Ref<string>;
16
+ spinner: import("vue").Ref<string | boolean>;
17
+ img: import("vue").Ref<string | boolean>;
18
+ text: import("vue").Ref<string>;
19
+ fullscreen: import("vue").Ref<boolean>;
20
+ rotate: import("vue").Ref<string | boolean>;
21
+ lock: import("vue").Ref<boolean>;
22
+ customClass: import("vue").Ref<string>;
23
+ target: import("vue").Ref<HTMLElement>;
24
+ beforeClose?: import("vue").Ref<(() => boolean) | undefined> | undefined;
25
+ closed?: import("vue").Ref<(() => void) | undefined> | undefined;
26
+ };
27
+ export type LoadingInstance = ReturnType<typeof createLoadingComponent>;
@@ -0,0 +1,122 @@
1
+ import { ref as L, reactive as C, watch as x, createApp as h, toRefs as w, h as o, Transition as A, withCtx as T, withDirectives as V, createVNode as N, vShow as $ } from "vue";
2
+ import { useNamespace as k } from "../../hooks/use-namespace/index.mjs";
3
+ import "@popperjs/core";
4
+ import "lodash";
5
+ import "../../hooks/use-z-index/index.mjs";
6
+ import "@vueuse/core";
7
+ import "@vue/shared";
8
+ import { removeClass as v } from "@vft/utils";
9
+ function O(i) {
10
+ let c;
11
+ const n = k("loading"), s = L(!1), t = C({
12
+ ...i,
13
+ originalPosition: "",
14
+ originalOverflow: "",
15
+ visible: !1
16
+ });
17
+ function f(e) {
18
+ t.text = e;
19
+ }
20
+ x(
21
+ () => t.visible,
22
+ (e) => {
23
+ e || u();
24
+ }
25
+ );
26
+ function g() {
27
+ const e = t.parent;
28
+ if (!e.vLoadingAddClassList) {
29
+ let r = e.getAttribute("loading-number");
30
+ r = Number.parseInt(r) - 1, r ? e.setAttribute("loading-number", r.toString()) : (v(e, n.bm("parent", "relative")), e.removeAttribute("loading-number")), v(e, n.bm("parent", "hidden"));
31
+ }
32
+ m(), d.unmount();
33
+ }
34
+ function m() {
35
+ var e, r;
36
+ (r = (e = a.$el) == null ? void 0 : e.parentNode) == null || r.removeChild(a.$el);
37
+ }
38
+ function u() {
39
+ var e;
40
+ i.beforeClose && !i.beforeClose() || (s.value = !0, clearTimeout(c), c = window.setTimeout(l, 400), t.visible = !1, (e = i.closed) == null || e.call(i));
41
+ }
42
+ function l() {
43
+ if (!s.value)
44
+ return;
45
+ const e = t.parent;
46
+ s.value = !1, e.vLoadingAddClassList = void 0, g();
47
+ }
48
+ const d = h({
49
+ name: "VriLoading",
50
+ setup() {
51
+ return () => {
52
+ const e = t.spinner || t.svg, r = t.img, b = r ? o("img", {
53
+ class: ["circular circular-img", t.rotate ? "" : "circular-no-rotate"],
54
+ src: r
55
+ }) : o(
56
+ "svg",
57
+ {
58
+ class: "circular",
59
+ viewBox: t.svgViewBox ? t.svgViewBox : "0 0 50 50",
60
+ ...e ? { innerHTML: e } : {}
61
+ },
62
+ [
63
+ o("circle", {
64
+ class: "path",
65
+ cx: "25",
66
+ cy: "25",
67
+ r: "20",
68
+ fill: "none"
69
+ })
70
+ ]
71
+ ), p = t.text ? o("p", { class: n.b("text") }, [t.text]) : void 0;
72
+ return o(
73
+ A,
74
+ {
75
+ name: n.b("fade"),
76
+ onAfterLeave: l
77
+ },
78
+ {
79
+ default: T(() => [
80
+ V(
81
+ N(
82
+ "div",
83
+ {
84
+ style: {
85
+ backgroundColor: t.background || ""
86
+ },
87
+ class: [n.b("mask"), t.customClass, t.fullscreen ? "is-fullscreen" : ""]
88
+ },
89
+ [
90
+ o(
91
+ "div",
92
+ {
93
+ class: n.b("spinner")
94
+ },
95
+ [b, p]
96
+ )
97
+ ]
98
+ ),
99
+ [[$, t.visible]]
100
+ )
101
+ ])
102
+ }
103
+ );
104
+ };
105
+ }
106
+ }), a = d.mount(document.createElement("div"));
107
+ return {
108
+ ...w(t),
109
+ setText: f,
110
+ removeVriLoadingChild: m,
111
+ close: u,
112
+ handleAfterLeave: l,
113
+ vm: a,
114
+ get $el() {
115
+ return a.$el;
116
+ }
117
+ };
118
+ }
119
+ export {
120
+ O as createLoadingComponent
121
+ };
122
+ //# sourceMappingURL=loading.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading.mjs","sources":["../../../../../packages/components/loading/loading.ts"],"sourcesContent":["import { Transition, createApp, createVNode, h, reactive, ref, watch, toRefs, vShow, withCtx, withDirectives } from 'vue';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { removeClass } from '@vft/utils';\nimport type { LoadingOptionsResolved } from './types';\n\nexport function createLoadingComponent(options: LoadingOptionsResolved) {\n let afterLeaveTimer: number;\n\n const ns = useNamespace('loading');\n const afterLeaveFlag = ref(false);\n const data = reactive({\n ...options,\n originalPosition: '',\n originalOverflow: '',\n visible: false\n });\n\n function setText(text: string) {\n data.text = text;\n }\n\n watch(\n () => data.visible,\n (val) => {\n if (!val) {\n close();\n }\n }\n );\n\n function destroySelf() {\n const target = data.parent;\n if (!target.vLoadingAddClassList) {\n let loadingNumber: number | string | null = target.getAttribute('loading-number');\n loadingNumber = Number.parseInt(loadingNumber as any) - 1;\n if (!loadingNumber) {\n // @ts-ignore\n removeClass(target, ns.bm('parent', 'relative'));\n target.removeAttribute('loading-number');\n } else {\n target.setAttribute('loading-number', loadingNumber.toString());\n }\n // @ts-ignore\n removeClass(target, ns.bm('parent', 'hidden'));\n }\n removeVriLoadingChild();\n loadingInstance.unmount();\n }\n\n function removeVriLoadingChild(): void {\n vm.$el?.parentNode?.removeChild(vm.$el);\n }\n\n function close() {\n if (options.beforeClose && !options.beforeClose()) return;\n\n afterLeaveFlag.value = true;\n clearTimeout(afterLeaveTimer);\n\n afterLeaveTimer = window.setTimeout(handleAfterLeave, 400);\n data.visible = false;\n\n options.closed?.();\n }\n\n function handleAfterLeave() {\n if (!afterLeaveFlag.value) return;\n const target = data.parent;\n afterLeaveFlag.value = false;\n target.vLoadingAddClassList = undefined;\n destroySelf();\n }\n\n const VriLoadingComponent = {\n name: 'VriLoading',\n setup() {\n return () => {\n const svg = data.spinner || data.svg;\n const img = data.img;\n const spinner = img\n ? h('img', {\n class: ['circular circular-img', data.rotate ? '' : 'circular-no-rotate'],\n src: img\n })\n : h(\n 'svg',\n {\n class: 'circular',\n viewBox: data.svgViewBox ? data.svgViewBox : '0 0 50 50',\n ...(svg ? { innerHTML: svg } : {})\n },\n [\n h('circle', {\n class: 'path',\n cx: '25',\n cy: '25',\n r: '20',\n fill: 'none'\n })\n ]\n );\n\n const spinnerText = data.text ? h('p', { class: ns.b('text') }, [data.text]) : undefined;\n\n return h(\n Transition,\n {\n name: ns.b('fade'),\n onAfterLeave: handleAfterLeave\n },\n {\n default: withCtx(() => [\n withDirectives(\n createVNode(\n 'div',\n {\n style: {\n backgroundColor: data.background || ''\n },\n class: [ns.b('mask'), data.customClass, data.fullscreen ? 'is-fullscreen' : '']\n },\n [\n h(\n 'div',\n {\n class: ns.b('spinner')\n },\n [spinner, spinnerText]\n )\n ]\n ),\n [[vShow, data.visible]]\n )\n ])\n }\n );\n };\n }\n };\n\n const loadingInstance = createApp(VriLoadingComponent);\n const vm = loadingInstance.mount(document.createElement('div'));\n\n return {\n ...toRefs(data),\n setText,\n removeVriLoadingChild,\n close,\n handleAfterLeave,\n vm,\n get $el(): HTMLElement {\n return vm.$el;\n }\n };\n}\n\nexport type LoadingInstance = ReturnType<typeof createLoadingComponent>;\n"],"names":["createLoadingComponent","options","afterLeaveTimer","ns","useNamespace","afterLeaveFlag","ref","data","reactive","setText","text","watch","val","close","destroySelf","target","loadingNumber","removeClass","removeVriLoadingChild","loadingInstance","_b","_a","vm","handleAfterLeave","createApp","svg","img","spinner","h","spinnerText","Transition","withCtx","withDirectives","createVNode","vShow","toRefs"],"mappings":";;;;;;;;AAKO,SAASA,EAAuBC,GAAiC;AAClE,MAAAC;AAEE,QAAAC,IAAKC,EAAa,SAAS,GAC3BC,IAAiBC,EAAI,EAAK,GAC1BC,IAAOC,EAAS;AAAA,IACpB,GAAGP;AAAA,IACH,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,SAAS;AAAA,EAAA,CACV;AAED,WAASQ,EAAQC,GAAc;AAC7B,IAAAH,EAAK,OAAOG;AAAA,EACd;AAEA,EAAAC;AAAA,IACE,MAAMJ,EAAK;AAAA,IACX,CAACK,MAAQ;AACP,MAAKA,KACGC;IAEV;AAAA,EAAA;AAGF,WAASC,IAAc;AACrB,UAAMC,IAASR,EAAK;AAChB,QAAA,CAACQ,EAAO,sBAAsB;AAC5B,UAAAC,IAAwCD,EAAO,aAAa,gBAAgB;AAChE,MAAAC,IAAA,OAAO,SAASA,CAAoB,IAAI,GACnDA,IAKHD,EAAO,aAAa,kBAAkBC,EAAc,SAAU,CAAA,KAH9DC,EAAYF,GAAQZ,EAAG,GAAG,UAAU,UAAU,CAAC,GAC/CY,EAAO,gBAAgB,gBAAgB,IAKzCE,EAAYF,GAAQZ,EAAG,GAAG,UAAU,QAAQ,CAAC;AAAA,IAC/C;AACsB,IAAAe,KACtBC,EAAgB,QAAQ;AAAA,EAC1B;AAEA,WAASD,IAA8B;;AACrC,KAAAE,KAAAC,IAAAC,EAAG,QAAH,gBAAAD,EAAQ,eAAR,QAAAD,EAAoB,YAAYE,EAAG;AAAA,EACrC;AAEA,WAAST,IAAQ;;AACf,IAAIZ,EAAQ,eAAe,CAACA,EAAQ,YAAY,MAEhDI,EAAe,QAAQ,IACvB,aAAaH,CAAe,GAEVA,IAAA,OAAO,WAAWqB,GAAkB,GAAG,GACzDhB,EAAK,UAAU,KAEfc,IAAApB,EAAQ,WAAR,QAAAoB,EAAA,KAAApB;AAAA,EACF;AAEA,WAASsB,IAAmB;AAC1B,QAAI,CAAClB,EAAe;AAAO;AAC3B,UAAMU,IAASR,EAAK;AACpB,IAAAF,EAAe,QAAQ,IACvBU,EAAO,uBAAuB,QAClBD;EACd;AAqEM,QAAAK,IAAkBK,EAnEI;AAAA,IAC1B,MAAM;AAAA,IACN,QAAQ;AACN,aAAO,MAAM;AACL,cAAAC,IAAMlB,EAAK,WAAWA,EAAK,KAC3BmB,IAAMnB,EAAK,KACXoB,IAAUD,IACZE,EAAE,OAAO;AAAA,UACP,OAAO,CAAC,yBAAyBrB,EAAK,SAAS,KAAK,oBAAoB;AAAA,UACxE,KAAKmB;AAAA,QACN,CAAA,IACDE;AAAA,UACE;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP,SAASrB,EAAK,aAAaA,EAAK,aAAa;AAAA,YAC7C,GAAIkB,IAAM,EAAE,WAAWA,MAAQ,CAAC;AAAA,UAClC;AAAA,UACA;AAAA,YACEG,EAAE,UAAU;AAAA,cACV,OAAO;AAAA,cACP,IAAI;AAAA,cACJ,IAAI;AAAA,cACJ,GAAG;AAAA,cACH,MAAM;AAAA,YAAA,CACP;AAAA,UACH;AAAA,QAAA,GAGAC,IAActB,EAAK,OAAOqB,EAAE,KAAK,EAAE,OAAOzB,EAAG,EAAE,MAAM,KAAK,CAACI,EAAK,IAAI,CAAC,IAAI;AAExE,eAAAqB;AAAA,UACLE;AAAA,UACA;AAAA,YACE,MAAM3B,EAAG,EAAE,MAAM;AAAA,YACjB,cAAcoB;AAAA,UAChB;AAAA,UACA;AAAA,YACE,SAASQ,EAAQ,MAAM;AAAA,cACrBC;AAAA,gBACEC;AAAA,kBACE;AAAA,kBACA;AAAA,oBACE,OAAO;AAAA,sBACL,iBAAiB1B,EAAK,cAAc;AAAA,oBACtC;AAAA,oBACA,OAAO,CAACJ,EAAG,EAAE,MAAM,GAAGI,EAAK,aAAaA,EAAK,aAAa,kBAAkB,EAAE;AAAA,kBAChF;AAAA,kBACA;AAAA,oBACEqB;AAAA,sBACE;AAAA,sBACA;AAAA,wBACE,OAAOzB,EAAG,EAAE,SAAS;AAAA,sBACvB;AAAA,sBACA,CAACwB,GAASE,CAAW;AAAA,oBACvB;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA,CAAC,CAACK,GAAO3B,EAAK,OAAO,CAAC;AAAA,cACxB;AAAA,YAAA,CACD;AAAA,UACH;AAAA,QAAA;AAAA,MACF;AAAA,IAEJ;AAAA,EAAA,CAGmD,GAC/Ce,IAAKH,EAAgB,MAAM,SAAS,cAAc,KAAK,CAAC;AAEvD,SAAA;AAAA,IACL,GAAGgB,EAAO5B,CAAI;AAAA,IACd,SAAAE;AAAA,IACA,uBAAAS;AAAA,IACA,OAAAL;AAAA,IACA,kBAAAU;AAAA,IACA,IAAAD;AAAA,IACA,IAAI,MAAmB;AACrB,aAAOA,EAAG;AAAA,IACZ;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,3 @@
1
+ import type { LoadingInstance } from './loading';
2
+ import type { LoadingOptions } from './types';
3
+ export declare const Loading: (options?: LoadingOptions) => LoadingInstance;
@@ -0,0 +1,68 @@
1
+ import { useNamespace as g } from "../../hooks/use-namespace/index.mjs";
2
+ import { nextTick as f, unref as i } from "vue";
3
+ import "@popperjs/core";
4
+ import "lodash";
5
+ import { useZIndex as b } from "../../hooks/use-z-index/index.mjs";
6
+ import { isClient as v } from "@vueuse/core";
7
+ import "@vue/shared";
8
+ import { isString as p, getStyle as s, addClass as c, removeClass as u } from "@vft/utils";
9
+ import { createLoadingComponent as y } from "./loading.mjs";
10
+ let d;
11
+ const P = function(t = {}) {
12
+ if (!v)
13
+ return;
14
+ const e = x(t);
15
+ if (e.fullscreen && d)
16
+ return d;
17
+ const r = y({
18
+ ...e,
19
+ closed: () => {
20
+ var n;
21
+ (n = e.closed) == null || n.call(e), e.fullscreen && (d = void 0);
22
+ }
23
+ });
24
+ C(e, e.parent, r), m(e, e.parent, r), e.parent.vLoadingAddClassList = () => m(e, e.parent, r);
25
+ let o = e.parent.getAttribute("loading-number");
26
+ return o ? o = `${Number.parseInt(o) + 1}` : o = "1", e.parent.setAttribute("loading-number", o), e.parent.appendChild(r.$el), f(() => r.visible.value = e.visible), e.fullscreen && (d = r), r;
27
+ }, x = (t) => {
28
+ let e;
29
+ return p(t.target) ? e = document.querySelector(t.target) ?? document.body : e = t.target || document.body, {
30
+ parent: e === document.body || t.body ? document.body : e,
31
+ background: i(t.background) || "",
32
+ svg: i(t.svg) || "",
33
+ svgViewBox: i(t.svgViewBox) || "",
34
+ spinner: i(t.spinner) || !1,
35
+ img: i(t.img) || !1,
36
+ text: i(t.text) || "",
37
+ rotate: t.rotate ?? !0,
38
+ fullscreen: e === document.body && (t.fullscreen ?? !0),
39
+ lock: t.lock ?? !1,
40
+ customClass: i(t.customClass) || "",
41
+ visible: t.visible ?? !0,
42
+ target: e
43
+ };
44
+ }, C = async (t, e, r) => {
45
+ const { nextZIndex: o } = b(), n = {};
46
+ if (t.fullscreen)
47
+ r.originalPosition.value = s(document.body, "position"), r.originalOverflow.value = s(document.body, "overflow"), n.zIndex = o();
48
+ else if (t.parent === document.body) {
49
+ r.originalPosition.value = s(document.body, "position"), await f();
50
+ for (const l of ["top", "left"]) {
51
+ const a = l === "top" ? "scrollTop" : "scrollLeft";
52
+ n[l] = `${// @ts-ignore
53
+ t.target.getBoundingClientRect()[l] + document.body[a] + document.documentElement[a] - Number.parseInt(s(document.body, `margin-${l}`), 10)}px`;
54
+ }
55
+ for (const l of ["height", "width"])
56
+ n[l] = `${t.target.getBoundingClientRect()[l]}px`;
57
+ } else
58
+ r.originalPosition.value = s(e, "position");
59
+ for (const [l, a] of Object.entries(n))
60
+ r.$el.style[l] = a;
61
+ }, m = (t, e, r) => {
62
+ const o = g("loading");
63
+ ["absolute", "fixed", "sticky"].includes(r.originalPosition.value) ? u(e, o.bm("parent", "relative")) : c(e, o.bm("parent", "relative")), t.fullscreen && t.lock ? c(e, o.bm("parent", "hidden")) : u(e, o.bm("parent", "hidden"));
64
+ };
65
+ export {
66
+ P as Loading
67
+ };
68
+ //# sourceMappingURL=service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.mjs","sources":["../../../../../packages/components/loading/service.ts"],"sourcesContent":["import { useNamespace, useZIndex } from '@vft-ui/hooks';\nimport { addClass, getStyle, isString, removeClass } from '@vft/utils';\nimport { isClient } from '@vueuse/core';\nimport type { CSSProperties } from 'vue';\nimport { nextTick, unref } from 'vue';\nimport type { LoadingInstance } from './loading';\nimport { createLoadingComponent } from './loading';\nimport type { LoadingOptions, LoadingOptionsResolved } from './types';\n\nlet fullscreenInstance: LoadingInstance | undefined = undefined;\n\nexport const Loading = function (options: LoadingOptions = {}): LoadingInstance {\n if (!isClient) return undefined as any;\n\n const resolved = resolveOptions(options);\n\n if (resolved.fullscreen && fullscreenInstance) {\n return fullscreenInstance;\n }\n\n const instance = createLoadingComponent({\n ...resolved,\n closed: () => {\n resolved.closed?.();\n if (resolved.fullscreen) fullscreenInstance = undefined;\n }\n });\n\n addStyle(resolved, resolved.parent, instance);\n addClassList(resolved, resolved.parent, instance);\n\n resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance);\n\n let loadingNumber: string | null = resolved.parent.getAttribute('loading-number');\n if (!loadingNumber) {\n loadingNumber = '1';\n } else {\n loadingNumber = `${Number.parseInt(loadingNumber) + 1}`;\n }\n resolved.parent.setAttribute('loading-number', loadingNumber);\n\n resolved.parent.appendChild(instance.$el);\n\n // @ts-ignore\n nextTick(() => (instance.visible.value = resolved.visible));\n\n if (resolved.fullscreen) {\n fullscreenInstance = instance;\n }\n return instance;\n};\n\nconst resolveOptions = (options: LoadingOptions): LoadingOptionsResolved => {\n let target: HTMLElement;\n if (isString(options.target)) {\n target = document.querySelector<HTMLElement>(options.target) ?? document.body;\n } else {\n target = options.target || document.body;\n }\n return {\n parent: target === document.body || options.body ? document.body : target,\n background: unref(options.background) || '',\n svg: unref(options.svg) || '',\n svgViewBox: unref(options.svgViewBox) || '',\n spinner: unref(options.spinner) || false,\n img: unref(options.img) || false,\n text: unref(options.text) || '',\n rotate: options.rotate ?? true,\n fullscreen: target === document.body && (options.fullscreen ?? true),\n lock: options.lock ?? false,\n customClass: unref(options.customClass) || '',\n visible: options.visible ?? true,\n target\n };\n};\n\nconst addStyle = async (options: LoadingOptionsResolved, parent: HTMLElement, instance: LoadingInstance) => {\n const { nextZIndex } = useZIndex();\n\n const maskStyle: Record<string, any> = {};\n if (options.fullscreen) {\n instance.originalPosition.value = getStyle(document.body, 'position');\n instance.originalOverflow.value = getStyle(document.body, 'overflow');\n maskStyle.zIndex = nextZIndex();\n } else if (options.parent === document.body) {\n instance.originalPosition.value = getStyle(document.body, 'position');\n /**\n * await dom render when visible is true in init,\n * because some component's height maybe 0.\n * e.g. el-table.\n */\n await nextTick();\n for (const property of ['top', 'left']) {\n const scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n maskStyle[property] = `${\n // @ts-ignore\n (options.target as HTMLElement).getBoundingClientRect()[property] +\n document.body[scroll] +\n document.documentElement[scroll] -\n Number.parseInt(getStyle(document.body, `margin-${property}` as keyof CSSProperties), 10)\n }px`;\n }\n for (const property of ['height', 'width']) {\n // @ts-ignore\n maskStyle[property] = `${(options.target as HTMLElement).getBoundingClientRect()[property]}px`;\n }\n } else {\n instance.originalPosition.value = getStyle(parent, 'position');\n }\n for (const [key, value] of Object.entries(maskStyle)) {\n // @ts-ignore\n instance.$el.style[key] = value;\n }\n};\n\nconst addClassList = (options: LoadingOptions, parent: HTMLElement, instance: LoadingInstance) => {\n const ns = useNamespace('loading');\n\n if (!['absolute', 'fixed', 'sticky'].includes(instance.originalPosition.value)) {\n addClass(parent, ns.bm('parent', 'relative'));\n } else {\n removeClass(parent, ns.bm('parent', 'relative'));\n }\n if (options.fullscreen && options.lock) {\n addClass(parent, ns.bm('parent', 'hidden'));\n } else {\n removeClass(parent, ns.bm('parent', 'hidden'));\n }\n};\n"],"names":["fullscreenInstance","Loading","options","isClient","resolved","resolveOptions","instance","createLoadingComponent","_a","addStyle","addClassList","loadingNumber","nextTick","target","isString","unref","parent","nextZIndex","useZIndex","maskStyle","getStyle","property","scroll","key","value","ns","useNamespace","removeClass","addClass"],"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-loading.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/loading.scss.mjs";
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,25 @@
1
+ import type { MaybeRef } from '@vueuse/core';
2
+ export type LoadingOptionsResolved = {
3
+ parent: LoadingParentElement;
4
+ background: MaybeRef<string>;
5
+ svg: MaybeRef<string>;
6
+ svgViewBox: MaybeRef<string>;
7
+ spinner: MaybeRef<boolean | string>;
8
+ img: MaybeRef<boolean | string>;
9
+ text: MaybeRef<string>;
10
+ fullscreen: boolean;
11
+ rotate: MaybeRef<boolean | string>;
12
+ lock: boolean;
13
+ customClass: MaybeRef<string>;
14
+ visible: MaybeRef<boolean>;
15
+ target: HTMLElement;
16
+ beforeClose?: () => boolean;
17
+ closed?: () => void;
18
+ };
19
+ export type LoadingOptions = Partial<Omit<LoadingOptionsResolved, 'parent' | 'target'> & {
20
+ target: HTMLElement | string;
21
+ body: boolean;
22
+ }>;
23
+ export interface LoadingParentElement extends HTMLElement {
24
+ vLoadingAddClassList?: () => void;
25
+ }
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -42,12 +42,14 @@ import "../qrcode/index.mjs";
42
42
  import "../overlay/index.mjs";
43
43
  import "../clamp/index.mjs";
44
44
  import "../clamp-toggle/index.mjs";
45
+ import "../page-wrapper/index.mjs";
46
+ import "../message/index.mjs";
45
47
  const W = ["title"], k = (
46
48
  /* hoist-static*/
47
49
  v("menu-item")
48
50
  ), X = S({
49
51
  name: k.b()
50
- }), Ge = /* @__PURE__ */ S({
52
+ }), Je = /* @__PURE__ */ S({
51
53
  ...X,
52
54
  props: {
53
55
  index: null,
@@ -132,6 +134,6 @@ const W = ["title"], k = (
132
134
  }
133
135
  });
134
136
  export {
135
- Ge as default
137
+ Je as default
136
138
  };
137
139
  //# sourceMappingURL=menu-item.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item.vue2.mjs","sources":["../../../../../packages/components/menu/menu-item.vue"],"sourcesContent":["<script lang=\"ts\">\nconst ns = /* hoist-static*/ useNamespace('menu-item')\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 { renderTNode, singleAttrToObj, VNode } from '@vft/utils';\nimport { computed, getCurrentInstance, inject, onBeforeUnmount, onMounted, reactive } from 'vue';\nimport { throwError } from '@vft-ui/utils';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { type RouteLocationRaw } from 'vue-router';\nimport useMenu from './use-menu';\nimport { VftIcon as Icon, type IconProps, VftTooltip as Tooltip, VftDivider } from '@vft-ui/components';\n\nimport type { MenuItemRegistered, MenuProvider, SubMenuProvider } from './types';\n\ninterface Props {\n /** 唯一标志 */\n index?: string;\n /** Vue Router 路径对象 */\n route?: RouteLocationRaw;\n /** 是否禁用 */\n disabled?: boolean;\n icon?: IconProps;\n title?: string;\n isAloneUse?: boolean;\n divider?: boolean;\n className?: string\n reverse?: boolean\n}\n\ndefineProps({\n \"index\": null,\n \"route\": null,\n \"disabled\": { type: Boolean, },\n \"icon\": null,\n \"title\": null,\n \"isAloneUse\": { type: Boolean, },\n \"divider\": { type: Boolean, },\n \"className\": null,\n \"reverse\": { type: Boolean, }\n})\n\n\n\nconst emit = defineEmits(['click']);\n\n;\n\nconst instance = getCurrentInstance()!;\n\nconst nsMenu = useNamespace('menu');\n\nconst nsMenuItem = useNamespace('menu-item');\n\n// 获取来自 menu.vue 中注入的数据\nconst rootMenu = !__props.isAloneUse ? inject<MenuProvider>('rootMenu') : null;\nif (!rootMenu && !__props.isAloneUse) throwError(ns.b(), 'can not inject root menu');\n\n// indexPath:当前 menu-item 对应的 index 和 vft-sub-menu 的 index,parentMenu 为 vft-sub-menu 组件\nconst { parentMenu, indexPath } = useMenu(\n instance,\n computed(() => __props.index!)\n);\n\n// 注入来自 sub-menu 中的 provide 数据\nconst subMenu = !__props.isAloneUse ? inject<SubMenuProvider>(`subMenu:${parentMenu.value.uid}`) : null;\nif (!subMenu && !__props.isAloneUse) throwError(ns.b(), 'can not inject sub menu');\n\n// 当前是否为 active\nconst active = computed(() => __props.index === rootMenu?.activeIndex);\n\nconst item: MenuItemRegistered = reactive({\n index: __props.index!,\n indexPath,\n active\n});\n\n// 点击具体菜单项\nconst handleClick = () => {\n if (!__props.disabled) {\n rootMenu?.handleMenuItemClick({\n index: __props.index!,\n indexPath: indexPath.value,\n route: __props.route\n });\n emit('click', item);\n }\n};\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst title = computed(() => {\n return renderTNode(instance, 'title');\n});\n\nonMounted(() => {\n if (!__props.isAloneUse) {\n // 触发 sub-menu,vue 中的 addSubMenu\n subMenu?.addSubMenu(item);\n // 触发 menu.vue 中的 addMenuItem 更新 items\n rootMenu?.addMenuItem(item);\n }\n});\n\nonBeforeUnmount(() => {\n if (!__props.isAloneUse) {\n subMenu?.removeSubMenu(item);\n rootMenu?.removeMenuItem(item);\n }\n});\n</script>\n\n<template>\n <vft-divider v-if=\"reverse && divider\" marginY=\"0\" />\n <li :class=\"[className, nsMenuItem.b(), nsMenuItem.is('active', isAloneUse ? false : active), nsMenuItem.is('disabled', disabled)]\" role=\"menuitem\" tabindex=\"-1\" @click=\"handleClick\">\n <tooltip\n v-if=\"parentMenu?.type?.name === 'vft-menu' && rootMenu?.props.collapse && $slots.title\"\n placement=\"right\" :fallback-placements=\"['left']\" persistent>\n <template #content>\n <slot name=\"title\" />\n </template>\n <div :class=\"nsMenu.be('tooltip', 'trigger')\">\n <slot />\n </div>\n </tooltip>\n <template v-else>\n <slot v-if=\"$slots?.default\"/>\n <template v-else>\n <Icon v-if=\"_icon?.icon\" v-bind=\"_icon\" />\n <span :title=\"title\"><v-node :content=\"title\" /></span>\n </template>\n </template>\n </li>\n <vft-divider v-if=\"!reverse && divider\" marginY=\"0\" />\n</template>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","instance","getCurrentInstance","nsMenu","nsMenuItem","rootMenu","__props","inject","throwError","parentMenu","indexPath","useMenu","computed","subMenu","active","item","reactive","handleClick","emit","_icon","singleAttrToObj","title","renderTNode","onMounted","onBeforeUnmount"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBACMA;AAAA;AAAA,EAAuBC,EAAa,WAAW;AAAA,GAGrDC,IAA6BC,EAAmB;AAAA,EAC9C,MAAMH,EAAG,EAAE;AACb,CAAC;;;;;;;;;;;;;;;AA6CD,UAAMI,IAAWC,KAEXC,IAASL,EAAa,MAAM,GAE5BM,IAAaN,EAAa,WAAW,GAGrCO,IAAYC,EAAQ,aAAgD,OAAnCC,EAAqB,UAAU;AAClE,IAAA,CAACF,KAAY,CAACC,EAAQ,cAAuBE,EAAAX,EAAG,EAAE,GAAG,0BAA0B;AAG7E,UAAA,EAAE,YAAAY,GAAY,WAAAC,EAAA,IAAcC;AAAA,MAChCV;AAAA,MACAW,EAAS,MAAMN,EAAQ,KAAM;AAAA,IAAA,GAIzBO,IAAWP,EAAQ,aAA0E,OAA7DC,EAAwB,WAAWE,EAAW,MAAM,KAAK;AAC3F,IAAA,CAACI,KAAW,CAACP,EAAQ,cAAuBE,EAAAX,EAAG,EAAE,GAAG,yBAAyB;AAGjF,UAAMiB,IAASF,EAAS,MAAMN,EAAQ,WAAUD,KAAA,gBAAAA,EAAU,YAAW,GAE/DU,IAA2BC,EAAS;AAAA,MACxC,OAAOV,EAAQ;AAAA,MACf,WAAAI;AAAA,MACA,QAAAI;AAAA,IAAA,CACD,GAGKG,IAAc,MAAM;AACpB,MAACX,EAAQ,aACXD,KAAA,QAAAA,EAAU,oBAAoB;AAAA,QAC5B,OAAOC,EAAQ;AAAA,QACf,WAAWI,EAAU;AAAA,QACrB,OAAOJ,EAAQ;AAAA,MAAA,IAEjBY,EAAK,SAASH,CAAI;AAAA,IACpB,GAGII,IAAQP,EAAS,MACdQ,EAAgBd,EAAQ,MAAM,MAAM,CAC5C,GAEKe,IAAQT,EAAS,MACdU,EAAYrB,GAAU,OAAO,CACrC;AAED,WAAAsB,EAAU,MAAM;AACV,MAACjB,EAAQ,eAEXO,KAAA,QAAAA,EAAS,WAAWE,IAEpBV,KAAA,QAAAA,EAAU,YAAYU;AAAA,IACxB,CACD,GAEDS,EAAgB,MAAM;AAChB,MAAClB,EAAQ,eACXO,KAAA,QAAAA,EAAS,cAAcE,IACvBV,KAAA,QAAAA,EAAU,eAAeU;AAAA,IAC3B,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"menu-item.vue2.mjs","sources":["../../../../../packages/components/menu/menu-item.vue"],"sourcesContent":["<script lang=\"ts\">\nconst ns = /* hoist-static*/ useNamespace('menu-item')\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 { renderTNode, singleAttrToObj, VNode } from '@vft/utils';\nimport { computed, getCurrentInstance, inject, onBeforeUnmount, onMounted, reactive } from 'vue';\nimport { throwError } from '@vft-ui/utils';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { type RouteLocationRaw } from 'vue-router';\nimport useMenu from './use-menu';\nimport { VftIcon as Icon, type IconProps, VftTooltip as Tooltip, VftDivider } from '@vft-ui/components';\n\nimport type { MenuItemRegistered, MenuProvider, SubMenuProvider } from './types';\n\ninterface Props {\n /** 唯一标志 */\n index?: string;\n /** Vue Router 路径对象 */\n route?: RouteLocationRaw;\n /** 是否禁用 */\n disabled?: boolean;\n icon?: IconProps;\n title?: string;\n isAloneUse?: boolean;\n divider?: boolean;\n className?: string\n reverse?: boolean\n}\n\ndefineProps({\n \"index\": null,\n \"route\": null,\n \"disabled\": { type: Boolean, },\n \"icon\": null,\n \"title\": null,\n \"isAloneUse\": { type: Boolean, },\n \"divider\": { type: Boolean, },\n \"className\": null,\n \"reverse\": { type: Boolean, }\n})\n\n\n\nconst emit = defineEmits(['click']);\n\n;\n\nconst instance = getCurrentInstance()!;\n\nconst nsMenu = useNamespace('menu');\n\nconst nsMenuItem = useNamespace('menu-item');\n\n// 获取来自 menu.vue 中注入的数据\nconst rootMenu = !__props.isAloneUse ? inject<MenuProvider>('rootMenu') : null;\nif (!rootMenu && !__props.isAloneUse) throwError(ns.b(), 'can not inject root menu');\n\n// indexPath:当前 menu-item 对应的 index 和 vft-sub-menu 的 index,parentMenu 为 vft-sub-menu 组件\nconst { parentMenu, indexPath } = useMenu(\n instance,\n computed(() => __props.index!)\n);\n\n// 注入来自 sub-menu 中的 provide 数据\nconst subMenu = !__props.isAloneUse ? inject<SubMenuProvider>(`subMenu:${parentMenu.value.uid}`) : null;\nif (!subMenu && !__props.isAloneUse) throwError(ns.b(), 'can not inject sub menu');\n\n// 当前是否为 active\nconst active = computed(() => __props.index === rootMenu?.activeIndex);\n\nconst item: MenuItemRegistered = reactive({\n index: __props.index!,\n indexPath,\n active\n});\n\n// 点击具体菜单项\nconst handleClick = () => {\n if (!__props.disabled) {\n rootMenu?.handleMenuItemClick({\n index: __props.index!,\n indexPath: indexPath.value,\n route: __props.route\n });\n emit('click', item);\n }\n};\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst title = computed(() => {\n return renderTNode(instance, 'title');\n});\n\nonMounted(() => {\n if (!__props.isAloneUse) {\n // 触发 sub-menu,vue 中的 addSubMenu\n subMenu?.addSubMenu(item);\n // 触发 menu.vue 中的 addMenuItem 更新 items\n rootMenu?.addMenuItem(item);\n }\n});\n\nonBeforeUnmount(() => {\n if (!__props.isAloneUse) {\n subMenu?.removeSubMenu(item);\n rootMenu?.removeMenuItem(item);\n }\n});\n</script>\n\n<template>\n <vft-divider v-if=\"reverse && divider\" marginY=\"0\" />\n <li :class=\"[className, nsMenuItem.b(), nsMenuItem.is('active', isAloneUse ? false : active), nsMenuItem.is('disabled', disabled)]\" role=\"menuitem\" tabindex=\"-1\" @click=\"handleClick\">\n <tooltip\n v-if=\"parentMenu?.type?.name === 'vft-menu' && rootMenu?.props.collapse && $slots.title\"\n placement=\"right\" :fallback-placements=\"['left']\" persistent>\n <template #content>\n <slot name=\"title\" />\n </template>\n <div :class=\"nsMenu.be('tooltip', 'trigger')\">\n <slot />\n </div>\n </tooltip>\n <template v-else>\n <slot v-if=\"$slots?.default\"/>\n <template v-else>\n <Icon v-if=\"_icon?.icon\" v-bind=\"_icon\" />\n <span :title=\"title\"><v-node :content=\"title\" /></span>\n </template>\n </template>\n </li>\n <vft-divider v-if=\"!reverse && divider\" marginY=\"0\" />\n</template>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","instance","getCurrentInstance","nsMenu","nsMenuItem","rootMenu","__props","inject","throwError","parentMenu","indexPath","useMenu","computed","subMenu","active","item","reactive","handleClick","emit","_icon","singleAttrToObj","title","renderTNode","onMounted","onBeforeUnmount"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBACMA;AAAA;AAAA,EAAuBC,EAAa,WAAW;AAAA,GAGrDC,IAA6BC,EAAmB;AAAA,EAC9C,MAAMH,EAAG,EAAE;AACb,CAAC;;;;;;;;;;;;;;;AA6CD,UAAMI,IAAWC,KAEXC,IAASL,EAAa,MAAM,GAE5BM,IAAaN,EAAa,WAAW,GAGrCO,IAAYC,EAAQ,aAAgD,OAAnCC,EAAqB,UAAU;AAClE,IAAA,CAACF,KAAY,CAACC,EAAQ,cAAuBE,EAAAX,EAAG,EAAE,GAAG,0BAA0B;AAG7E,UAAA,EAAE,YAAAY,GAAY,WAAAC,EAAA,IAAcC;AAAA,MAChCV;AAAA,MACAW,EAAS,MAAMN,EAAQ,KAAM;AAAA,IAAA,GAIzBO,IAAWP,EAAQ,aAA0E,OAA7DC,EAAwB,WAAWE,EAAW,MAAM,KAAK;AAC3F,IAAA,CAACI,KAAW,CAACP,EAAQ,cAAuBE,EAAAX,EAAG,EAAE,GAAG,yBAAyB;AAGjF,UAAMiB,IAASF,EAAS,MAAMN,EAAQ,WAAUD,KAAA,gBAAAA,EAAU,YAAW,GAE/DU,IAA2BC,EAAS;AAAA,MACxC,OAAOV,EAAQ;AAAA,MACf,WAAAI;AAAA,MACA,QAAAI;AAAA,IAAA,CACD,GAGKG,IAAc,MAAM;AACpB,MAACX,EAAQ,aACXD,KAAA,QAAAA,EAAU,oBAAoB;AAAA,QAC5B,OAAOC,EAAQ;AAAA,QACf,WAAWI,EAAU;AAAA,QACrB,OAAOJ,EAAQ;AAAA,MAAA,IAEjBY,EAAK,SAASH,CAAI;AAAA,IACpB,GAGII,IAAQP,EAAS,MACdQ,EAAgBd,EAAQ,MAAM,MAAM,CAC5C,GAEKe,IAAQT,EAAS,MACdU,EAAYrB,GAAU,OAAO,CACrC;AAED,WAAAsB,EAAU,MAAM;AACV,MAACjB,EAAQ,eAEXO,KAAA,QAAAA,EAAS,WAAWE,IAEpBV,KAAA,QAAAA,EAAU,YAAYU;AAAA,IACxB,CACD,GAEDS,EAAgB,MAAM;AAChB,MAAClB,EAAQ,eACXO,KAAA,QAAAA,EAAS,cAAcE,IACvBV,KAAA,QAAAA,EAAU,eAAeU;AAAA,IAC3B,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -34,6 +34,8 @@ import "../qrcode/index.mjs";
34
34
  import "../overlay/index.mjs";
35
35
  import "../clamp/index.mjs";
36
36
  import "../clamp-toggle/index.mjs";
37
+ import "../page-wrapper/index.mjs";
38
+ import "../message/index.mjs";
37
39
  import { useNamespace as I } from "../../hooks/use-namespace/index.mjs";
38
40
  import "@popperjs/core";
39
41
  import "lodash";
@@ -48,7 +50,7 @@ const S = (
48
50
  I("sub-menu")
49
51
  ), ve = Z({
50
52
  name: S.b()
51
- }), ao = /* @__PURE__ */ Z({
53
+ }), io = /* @__PURE__ */ Z({
52
54
  ...ve,
53
55
  props: {
54
56
  index: null,
@@ -249,6 +251,6 @@ const S = (
249
251
  }
250
252
  });
251
253
  export {
252
- ao as default
254
+ io as default
253
255
  };
254
256
  //# sourceMappingURL=sub-menu.vue2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sub-menu.vue2.mjs","sources":["../../../../../packages/components/menu/sub-menu.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst ns = /* hoist-static*/ useNamespace('sub-menu')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script lang=\"tsx\" setup>\nimport { type IconProps, type Placement, type ToolTipProps, VftCollapseTransition as CollapseTransition, VftIcon as Icon, VftTooltip as Tooltip } from '@vft-ui/components';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { throwError } from '@vft-ui/utils';\nimport { renderTNode, singleAttrToObj } from '@vft/utils';\nimport { useTimeoutFn } from '@vueuse/core';\nimport type { CSSProperties, VNodeArrayChildren } from 'vue';\nimport { computed, Fragment, getCurrentInstance, h, inject, onBeforeUnmount, onMounted, provide, reactive, ref, useSlots, vShow, watch, withDirectives } from 'vue';\nimport type { MenuProvider, SubMenuProvider } from './types';\nimport useMenu from './use-menu';\nimport { useMenuCssVar } from './use-menu-css-var';\n\ninterface Props {\n /** 唯一标志 */\n index: string;\n /** 展开 sub-menu 的延时 */\n showTimeout?: number;\n /** 收起 sub-menu 的延时 */\n hideTimeout?: number;\n /** 为 popper 添加类名 */\n popperClass?: ClassType;\n /** 是否禁用 */\n disabled?: boolean;\n popperAppendToBody?: boolean;\n /** 弹出窗口偏移 */\n popperOffset?: number;\n expandIcon?: IconProps;\n collapseIcon?: IconProps;\n title?: string;\n icon?: IconProps | string;\n showArrow?: boolean;\n toolTipCfg?: ToolTipProps;\n}\n\ndefineProps({\n \"index\": null,\n \"showTimeout\": { default: 300 },\n \"hideTimeout\": { default: 300 },\n \"popperClass\": null,\n \"disabled\": { type: Boolean, },\n \"popperAppendToBody\": { type: Boolean, default: undefined },\n \"popperOffset\": { default: 6 },\n \"expandIcon\": { default: {} },\n \"collapseIcon\": { default: {} },\n \"title\": null,\n \"icon\": null,\n \"showArrow\": { type: Boolean, default: true },\n \"toolTipCfg\": null\n})\n\n\n\n;\n\nconst instance = getCurrentInstance()!;\n\n// 返回当前 sub-menu 对应的 indexPath 页面中对 submenu 定义的 index parentMenu -> vft-menu 组件\nconst { indexPath, parentMenu } = useMenu(instance, computed(() => __props.index));\n\nconst nsMenu = useNamespace('menu');\nconst nsSubMenu = useNamespace('sub-menu');\n\n// 接受 vft-menu 组件中注入的数据\nconst rootMenu = inject<MenuProvider>('rootMenu');\nif (!rootMenu) throwError(ns.b(), 'can not inject root menu');\n\n// 接受 vft-menu 组件中注入的数据 parentMenu.value!.uid 当前 sub-menu 组件对应的 menu.vue 组件\nconst subMenu = inject<SubMenuProvider>(`subMenu:${parentMenu.value!.uid}`);\nif (!subMenu) throwError(ns.b(), 'can not inject sub menu');\n\n/**\n * 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\nconst subMenus = ref<MenuProvider['subMenus']>({});\n\nlet timeout: (() => void) | undefined;\nconst mouseInChild = ref(false);\n\n// sub-menu-title 的 ref\nconst verticalTitleRef = ref<HTMLDivElement>();\n// tooltip 的实例\nconst vPopper = ref(null);\n\n// toolTop 的展示位置\nconst currentPlacement = computed<Placement>(\n () => (mode.value === 'horizontal' && isFirstLevel.value ? 'bottom-start' : 'right-start'));\n\n// 是否为第一级的 subMenu\nconst isFirstLevel = computed(() => {\n return subMenu.level === 0;\n});\n\nconst appendToBody = computed(() => {\n return __props.popperAppendToBody === undefined ? isFirstLevel.value : Boolean(__props.popperAppendToBody);\n});\n\n// toolTip 弹出的动画名称\nconst menuTransitionName = computed(\n () => (rootMenu.props.collapse ? `${nsMenu.namespace.value}-zoom-in-left` : `${nsMenu.namespace.value}-zoom-in-top`));\n\nconst fallbackPlacements = computed<Placement[]>(() =>\n mode.value === 'horizontal' && isFirstLevel.value\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end', 'right-start', 'left-start']\n : ['right-start', 'left-start', 'bottom-start', 'bottom-end', 'top-start', 'top-end']\n);\n\n// 获取当前的 index 是否包含在 openedMenus 中,表示当前 sub-menu 是否已经展开,子节点就是通过这个使用 v-show 来显隐\nconst opened = computed(() => rootMenu.openedMenus.includes(__props.index));\n\nconst active = computed(() => {\n let isActive = false;\n Object.values(subMenus.value).forEach((subItem) => {\n if (subItem.active) {\n isActive = true;\n }\n });\n if (__props.index === rootMenu.activeIndex) {\n isActive = true;\n }\n return isActive;\n});\n\nconst backgroundColor = computed(() => rootMenu.props.backgroundColor || '');\n\nconst activeTextColor = computed(() => rootMenu.props.activeTextColor || '');\n\nconst textColor = computed(() => rootMenu.props.textColor || '');\n\nconst mode = computed(() => rootMenu.props.mode);\n\nconst item = reactive({\n index: __props.index,\n indexPath,\n active\n});\n\n//\nconst titleStyle = computed<CSSProperties>(() => {\n if (mode.value !== 'horizontal') {\n return {\n color: textColor.value\n };\n }\n return {\n borderBottomColor: active.value ? (rootMenu.props.activeTextColor ? activeTextColor.value : '') : 'transparent',\n color: active.value ? activeTextColor.value : textColor.value\n };\n});\n\n// 销毁 toolTip\nconst doDestroy = () => vPopper.value?.popperRef?.popperInstanceRef?.destroy();\n\n// 当菜单收缩展开时执行销毁 toolTip\nconst handleCollapseToggle = (value: boolean) => {\n if (!value) {\n doDestroy();\n }\n};\n\n// sub-menu 菜单点击事件\nconst handleClick = () => {\n // 以下几种情况不执行点击事件操作\n if ((rootMenu.props.menuTrigger === 'hover' && rootMenu.props.mode === 'horizontal') || (rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) return;\n\n // 调用 menn.vue 中的 handleSubMenuClick 点击事件,传入参数\n rootMenu.handleSubMenuClick({\n index: __props.index,\n indexPath: indexPath.value,\n active: active.value\n });\n};\n\n// 滑入 sub-menu 菜单事件\nconst handleMouseenter = (event: MouseEvent | FocusEvent, _showTimeout = __props.showTimeout) => {\n if (event.type === 'focus') {\n return;\n }\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) {\n return;\n }\n subMenu.mouseInChild.value = true;\n\n // 根据 _showTimeout 展开滑入的菜单子项\n timeout?.();\n ({ stop: timeout } = useTimeoutFn(() => {\n rootMenu.openMenu(__props.index, indexPath.value);\n }, _showTimeout));\n\n if (appendToBody.value) {\n parentMenu.value.vnode.el?.dispatchEvent(new MouseEvent('mouseenter'));\n }\n};\n\n// 离开滑入的菜单\nconst handleMouseleave = (deepDispatch = false) => {\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical')) {\n return;\n }\n timeout?.();\n subMenu.mouseInChild.value = false;\n ({ stop: timeout } = useTimeoutFn(\n () => !mouseInChild.value && rootMenu.closeMenu(__props.index, indexPath.value),\n __props.hideTimeout));\n\n if (appendToBody.value && deepDispatch) {\n if (instance.parent?.type.name === 'vft-sub-menu') {\n subMenu.handleMouseleave?.(true);\n }\n }\n};\n\n// 监听菜单的收缩展开决定是否销毁 ToolTip\nwatch(\n () => rootMenu.props.collapse,\n (value) => handleCollapseToggle(Boolean(value))\n);\n\n// 以下代码在 menu-item.vue 中触发\n{\n /**\n * 此函数在 menu-item 中触发,items.value 默认为空对象\n * 最后添加后的 items 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\n const addSubMenu: SubMenuProvider['addSubMenu'] = (item) => {\n subMenus.value[item.index] = item;\n };\n const removeSubMenu: SubMenuProvider['removeSubMenu'] = (item) => {\n delete subMenus.value[item.index];\n };\n provide<SubMenuProvider>(`subMenu:${instance.uid}`, {\n addSubMenu,\n removeSubMenu,\n handleMouseleave,\n mouseInChild,\n level: subMenu.level + 1\n });\n}\n\ndefineExpose({\n opened\n});\n\nonMounted(() => {\n rootMenu.addSubMenu(item);\n subMenu.addSubMenu(item);\n});\n\nonBeforeUnmount(() => {\n subMenu.removeSubMenu(item);\n rootMenu.removeSubMenu(item);\n});\n\nconst slots = useSlots();\n\n// 箭头设置\nconst subMenuIcon = computed(() => {\n // 水平模式第一级 或者 竖直非折叠\n return (mode.value === 'horizontal' && isFirstLevel.value) || (mode.value === 'vertical' && !rootMenu.props.collapse)\n ? { icon: 'vi-arrow-down', size: 20, ...__props.expandIcon } :\n { icon: 'vi-arrow-right', size: 18, ...__props.collapseIcon };\n});\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst titleCon = computed(() => {\n return renderTNode(instance, 'title');\n});\n\ndefineRender(() => {\n // sub-menu 的标题以及展开箭头 icon 相关\n const titleTag: VNodeArrayChildren = [\n _icon.value?.icon ? h(Icon, { ..._icon.value }) : null,\n h(\n 'span',\n {\n class: __props.showArrow ? nsSubMenu.e('text') : '',\n title: instance.props.title\n },\n titleCon.value\n ),\n __props.showArrow ? h(\n Icon,\n {\n class: nsSubMenu.e('icon-arrow'),\n ...subMenuIcon.value,\n style: { transform: opened.value ? 'rotateZ(180deg)' : 'none' }\n }\n ) : false\n ];\n\n // 给 vft-menu class 这一栏加入 level 等级,以此来区分当前的 level: --vft-menu-level:2;\n const ulStyle = useMenuCssVar(rootMenu.props, subMenu.level + 1);\n\n /**\n * rootMenu.isMenuPopup 是否需要 tooltip 1.水平模式的菜单需要 2.竖直类型的菜单在收缩时需要\n * 如果需要 tooltip 用 h 函数渲染时,则采用 ElTooltip 组件\n * @type {VNode}\n */\n const child = rootMenu.isMenuPopup\n ? h(\n Tooltip,\n {\n ref: vPopper,\n visible: opened.value,\n effect: 'light',\n pure: true,\n offset: __props.popperOffset,\n showArrow: false,\n persistent: true,\n popperClass: __props.popperClass,\n placement: currentPlacement.value,\n teleported: appendToBody.value,\n fallbackPlacements: fallbackPlacements.value,\n transition: menuTransitionName.value,\n gpuAcceleration: false,\n ...__props.toolTipCfg\n },\n {\n content: () =>\n h(\n 'div',\n {\n class: [nsMenu.m(mode.value), nsMenu.m('popup-container'), __props.popperClass],\n onMouseenter: (evt: MouseEvent) => handleMouseenter(evt, 100),\n onMouseleave: () => handleMouseleave(true),\n onFocus: (evt: FocusEvent) => handleMouseenter(evt, 100)\n },\n [\n h(\n 'ul',\n {\n class: [nsMenu.b(), nsMenu.m('popup'), nsMenu.m(\n `popup-${currentPlacement.value}`)],\n style: ulStyle.value\n },\n [slots.default?.()]\n )\n ]\n ),\n default: () =>\n h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n onClick: handleClick\n },\n titleTag\n )\n }\n )\n :\n /**\n * Fragment 碎片化节点,可以让 dom 没有根节点\n *\n * 以下是无需 tooltip 渲染的组件,通常是侧边栏没有折叠的时候\n */\n h(Fragment, {}, [\n titleCon.value ? h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n ref: verticalTitleRef,\n onClick: handleClick\n },\n titleTag\n ) : null,\n h(\n CollapseTransition,\n {},\n {\n default: () =>\n withDirectives(\n h(\n 'ul',\n {\n role: 'menu',\n class: [nsMenu.b(), nsMenu.m('inline')],\n style: ulStyle.value\n },\n [slots.default?.()]\n ),\n [[vShow, opened.value]]\n )\n }\n )\n ]);\n\n return h(\n 'li',\n {\n class: [nsSubMenu.b(), nsSubMenu.is('active', active.value),\n nsSubMenu.is('opened', opened.value), nsSubMenu.is('disabled', __props.disabled)],\n role: 'menuitem',\n ariaHaspopup: true,\n ariaExpanded: opened.value,\n onMouseenter: handleMouseenter,\n onMouseleave: () => handleMouseleave(true),\n onFocus: handleMouseenter\n },\n [child]\n );\n});\n</script>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","name","b","instance","getCurrentInstance","indexPath","parentMenu","useMenu","computed","__props","index","nsMenu","nsSubMenu","rootMenu","inject","throwError","subMenu","value","uid","subMenus","ref","timeout","mouseInChild","verticalTitleRef","vPopper","currentPlacement","mode","isFirstLevel","level","appendToBody","popperAppendToBody","undefined","Boolean","menuTransitionName","props","collapse","namespace","fallbackPlacements","opened","openedMenus","includes","active","isActive","Object","values","forEach","subItem","activeIndex","backgroundColor","activeTextColor","textColor","item","reactive","titleStyle","color","borderBottomColor","doDestroy","popperRef","popperInstanceRef","destroy","handleCollapseToggle","handleClick","menuTrigger","disabled","handleSubMenuClick","handleMouseenter","event","_showTimeout","showTimeout","type","stop","useTimeoutFn","openMenu","vnode","el","dispatchEvent","MouseEvent","handleMouseleave","deepDispatch","closeMenu","hideTimeout","parent","watch","addSubMenu","removeSubMenu","provide","expose","onMounted","onBeforeUnmount","slots","useSlots","subMenuIcon","icon","size","expandIcon","collapseIcon","_icon","singleAttrToObj","titleCon","renderTNode","titleTag","h","Icon","class","showArrow","e","title","style","transform","ulStyle","useMenuCssVar","child","isMenuPopup","Tooltip","visible","effect","pure","offset","popperOffset","persistent","popperClass","placement","teleported","transition","gpuAcceleration","toolTipCfg","content","m","onMouseenter","evt","onMouseleave","onFocus","default","onClick","Fragment","CollapseTransition","withDirectives","role","vShow","is","ariaHaspopup","ariaExpanded"],"mappings":"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"}
1
+ {"version":3,"file":"sub-menu.vue2.mjs","sources":["../../../../../packages/components/menu/sub-menu.vue"],"sourcesContent":["<script lang=\"tsx\">\nconst ns = /* hoist-static*/ useNamespace('sub-menu')\n\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n name: ns.b()\n});</script>\n<script lang=\"tsx\" setup>\nimport { type IconProps, type Placement, type ToolTipProps, VftCollapseTransition as CollapseTransition, VftIcon as Icon, VftTooltip as Tooltip } from '@vft-ui/components';\nimport { useNamespace } from '@vft-ui/hooks';\nimport { throwError } from '@vft-ui/utils';\nimport { renderTNode, singleAttrToObj } from '@vft/utils';\nimport { useTimeoutFn } from '@vueuse/core';\nimport type { CSSProperties, VNodeArrayChildren } from 'vue';\nimport { computed, Fragment, getCurrentInstance, h, inject, onBeforeUnmount, onMounted, provide, reactive, ref, useSlots, vShow, watch, withDirectives } from 'vue';\nimport type { MenuProvider, SubMenuProvider } from './types';\nimport useMenu from './use-menu';\nimport { useMenuCssVar } from './use-menu-css-var';\n\ninterface Props {\n /** 唯一标志 */\n index: string;\n /** 展开 sub-menu 的延时 */\n showTimeout?: number;\n /** 收起 sub-menu 的延时 */\n hideTimeout?: number;\n /** 为 popper 添加类名 */\n popperClass?: ClassType;\n /** 是否禁用 */\n disabled?: boolean;\n popperAppendToBody?: boolean;\n /** 弹出窗口偏移 */\n popperOffset?: number;\n expandIcon?: IconProps;\n collapseIcon?: IconProps;\n title?: string;\n icon?: IconProps | string;\n showArrow?: boolean;\n toolTipCfg?: ToolTipProps;\n}\n\ndefineProps({\n \"index\": null,\n \"showTimeout\": { default: 300 },\n \"hideTimeout\": { default: 300 },\n \"popperClass\": null,\n \"disabled\": { type: Boolean, },\n \"popperAppendToBody\": { type: Boolean, default: undefined },\n \"popperOffset\": { default: 6 },\n \"expandIcon\": { default: {} },\n \"collapseIcon\": { default: {} },\n \"title\": null,\n \"icon\": null,\n \"showArrow\": { type: Boolean, default: true },\n \"toolTipCfg\": null\n})\n\n\n\n;\n\nconst instance = getCurrentInstance()!;\n\n// 返回当前 sub-menu 对应的 indexPath 页面中对 submenu 定义的 index parentMenu -> vft-menu 组件\nconst { indexPath, parentMenu } = useMenu(instance, computed(() => __props.index));\n\nconst nsMenu = useNamespace('menu');\nconst nsSubMenu = useNamespace('sub-menu');\n\n// 接受 vft-menu 组件中注入的数据\nconst rootMenu = inject<MenuProvider>('rootMenu');\nif (!rootMenu) throwError(ns.b(), 'can not inject root menu');\n\n// 接受 vft-menu 组件中注入的数据 parentMenu.value!.uid 当前 sub-menu 组件对应的 menu.vue 组件\nconst subMenu = inject<SubMenuProvider>(`subMenu:${parentMenu.value!.uid}`);\nif (!subMenu) throwError(ns.b(), 'can not inject sub menu');\n\n/**\n * 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\nconst subMenus = ref<MenuProvider['subMenus']>({});\n\nlet timeout: (() => void) | undefined;\nconst mouseInChild = ref(false);\n\n// sub-menu-title 的 ref\nconst verticalTitleRef = ref<HTMLDivElement>();\n// tooltip 的实例\nconst vPopper = ref(null);\n\n// toolTop 的展示位置\nconst currentPlacement = computed<Placement>(\n () => (mode.value === 'horizontal' && isFirstLevel.value ? 'bottom-start' : 'right-start'));\n\n// 是否为第一级的 subMenu\nconst isFirstLevel = computed(() => {\n return subMenu.level === 0;\n});\n\nconst appendToBody = computed(() => {\n return __props.popperAppendToBody === undefined ? isFirstLevel.value : Boolean(__props.popperAppendToBody);\n});\n\n// toolTip 弹出的动画名称\nconst menuTransitionName = computed(\n () => (rootMenu.props.collapse ? `${nsMenu.namespace.value}-zoom-in-left` : `${nsMenu.namespace.value}-zoom-in-top`));\n\nconst fallbackPlacements = computed<Placement[]>(() =>\n mode.value === 'horizontal' && isFirstLevel.value\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end', 'right-start', 'left-start']\n : ['right-start', 'left-start', 'bottom-start', 'bottom-end', 'top-start', 'top-end']\n);\n\n// 获取当前的 index 是否包含在 openedMenus 中,表示当前 sub-menu 是否已经展开,子节点就是通过这个使用 v-show 来显隐\nconst opened = computed(() => rootMenu.openedMenus.includes(__props.index));\n\nconst active = computed(() => {\n let isActive = false;\n Object.values(subMenus.value).forEach((subItem) => {\n if (subItem.active) {\n isActive = true;\n }\n });\n if (__props.index === rootMenu.activeIndex) {\n isActive = true;\n }\n return isActive;\n});\n\nconst backgroundColor = computed(() => rootMenu.props.backgroundColor || '');\n\nconst activeTextColor = computed(() => rootMenu.props.activeTextColor || '');\n\nconst textColor = computed(() => rootMenu.props.textColor || '');\n\nconst mode = computed(() => rootMenu.props.mode);\n\nconst item = reactive({\n index: __props.index,\n indexPath,\n active\n});\n\n//\nconst titleStyle = computed<CSSProperties>(() => {\n if (mode.value !== 'horizontal') {\n return {\n color: textColor.value\n };\n }\n return {\n borderBottomColor: active.value ? (rootMenu.props.activeTextColor ? activeTextColor.value : '') : 'transparent',\n color: active.value ? activeTextColor.value : textColor.value\n };\n});\n\n// 销毁 toolTip\nconst doDestroy = () => vPopper.value?.popperRef?.popperInstanceRef?.destroy();\n\n// 当菜单收缩展开时执行销毁 toolTip\nconst handleCollapseToggle = (value: boolean) => {\n if (!value) {\n doDestroy();\n }\n};\n\n// sub-menu 菜单点击事件\nconst handleClick = () => {\n // 以下几种情况不执行点击事件操作\n if ((rootMenu.props.menuTrigger === 'hover' && rootMenu.props.mode === 'horizontal') || (rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) return;\n\n // 调用 menn.vue 中的 handleSubMenuClick 点击事件,传入参数\n rootMenu.handleSubMenuClick({\n index: __props.index,\n indexPath: indexPath.value,\n active: active.value\n });\n};\n\n// 滑入 sub-menu 菜单事件\nconst handleMouseenter = (event: MouseEvent | FocusEvent, _showTimeout = __props.showTimeout) => {\n if (event.type === 'focus') {\n return;\n }\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical') || __props.disabled) {\n return;\n }\n subMenu.mouseInChild.value = true;\n\n // 根据 _showTimeout 展开滑入的菜单子项\n timeout?.();\n ({ stop: timeout } = useTimeoutFn(() => {\n rootMenu.openMenu(__props.index, indexPath.value);\n }, _showTimeout));\n\n if (appendToBody.value) {\n parentMenu.value.vnode.el?.dispatchEvent(new MouseEvent('mouseenter'));\n }\n};\n\n// 离开滑入的菜单\nconst handleMouseleave = (deepDispatch = false) => {\n if ((rootMenu.props.menuTrigger === 'click' && rootMenu.props.mode === 'horizontal') || (!rootMenu.props.collapse && rootMenu.props.mode === 'vertical')) {\n return;\n }\n timeout?.();\n subMenu.mouseInChild.value = false;\n ({ stop: timeout } = useTimeoutFn(\n () => !mouseInChild.value && rootMenu.closeMenu(__props.index, indexPath.value),\n __props.hideTimeout));\n\n if (appendToBody.value && deepDispatch) {\n if (instance.parent?.type.name === 'vft-sub-menu') {\n subMenu.handleMouseleave?.(true);\n }\n }\n};\n\n// 监听菜单的收缩展开决定是否销毁 ToolTip\nwatch(\n () => rootMenu.props.collapse,\n (value) => handleCollapseToggle(Boolean(value))\n);\n\n// 以下代码在 menu-item.vue 中触发\n{\n /**\n * 此函数在 menu-item 中触发,items.value 默认为空对象\n * 最后添加后的 items 格式如下\n * ```\n * {\n * 1-1:{index: '1-1', indexPath: ['mio', '1-1'], active: false},\n * 1-2:{index: '1-2', indexPath: ['mio', '1-2'], active: false}\n * }\n * ```\n * @param {MenuItemRegistered} item\n */\n const addSubMenu: SubMenuProvider['addSubMenu'] = (item) => {\n subMenus.value[item.index] = item;\n };\n const removeSubMenu: SubMenuProvider['removeSubMenu'] = (item) => {\n delete subMenus.value[item.index];\n };\n provide<SubMenuProvider>(`subMenu:${instance.uid}`, {\n addSubMenu,\n removeSubMenu,\n handleMouseleave,\n mouseInChild,\n level: subMenu.level + 1\n });\n}\n\ndefineExpose({\n opened\n});\n\nonMounted(() => {\n rootMenu.addSubMenu(item);\n subMenu.addSubMenu(item);\n});\n\nonBeforeUnmount(() => {\n subMenu.removeSubMenu(item);\n rootMenu.removeSubMenu(item);\n});\n\nconst slots = useSlots();\n\n// 箭头设置\nconst subMenuIcon = computed(() => {\n // 水平模式第一级 或者 竖直非折叠\n return (mode.value === 'horizontal' && isFirstLevel.value) || (mode.value === 'vertical' && !rootMenu.props.collapse)\n ? { icon: 'vi-arrow-down', size: 20, ...__props.expandIcon } :\n { icon: 'vi-arrow-right', size: 18, ...__props.collapseIcon };\n});\n\nconst _icon = computed(() => {\n return singleAttrToObj(__props.icon, 'icon') as IconProps;\n});\n\nconst titleCon = computed(() => {\n return renderTNode(instance, 'title');\n});\n\ndefineRender(() => {\n // sub-menu 的标题以及展开箭头 icon 相关\n const titleTag: VNodeArrayChildren = [\n _icon.value?.icon ? h(Icon, { ..._icon.value }) : null,\n h(\n 'span',\n {\n class: __props.showArrow ? nsSubMenu.e('text') : '',\n title: instance.props.title\n },\n titleCon.value\n ),\n __props.showArrow ? h(\n Icon,\n {\n class: nsSubMenu.e('icon-arrow'),\n ...subMenuIcon.value,\n style: { transform: opened.value ? 'rotateZ(180deg)' : 'none' }\n }\n ) : false\n ];\n\n // 给 vft-menu class 这一栏加入 level 等级,以此来区分当前的 level: --vft-menu-level:2;\n const ulStyle = useMenuCssVar(rootMenu.props, subMenu.level + 1);\n\n /**\n * rootMenu.isMenuPopup 是否需要 tooltip 1.水平模式的菜单需要 2.竖直类型的菜单在收缩时需要\n * 如果需要 tooltip 用 h 函数渲染时,则采用 ElTooltip 组件\n * @type {VNode}\n */\n const child = rootMenu.isMenuPopup\n ? h(\n Tooltip,\n {\n ref: vPopper,\n visible: opened.value,\n effect: 'light',\n pure: true,\n offset: __props.popperOffset,\n showArrow: false,\n persistent: true,\n popperClass: __props.popperClass,\n placement: currentPlacement.value,\n teleported: appendToBody.value,\n fallbackPlacements: fallbackPlacements.value,\n transition: menuTransitionName.value,\n gpuAcceleration: false,\n ...__props.toolTipCfg\n },\n {\n content: () =>\n h(\n 'div',\n {\n class: [nsMenu.m(mode.value), nsMenu.m('popup-container'), __props.popperClass],\n onMouseenter: (evt: MouseEvent) => handleMouseenter(evt, 100),\n onMouseleave: () => handleMouseleave(true),\n onFocus: (evt: FocusEvent) => handleMouseenter(evt, 100)\n },\n [\n h(\n 'ul',\n {\n class: [nsMenu.b(), nsMenu.m('popup'), nsMenu.m(\n `popup-${currentPlacement.value}`)],\n style: ulStyle.value\n },\n [slots.default?.()]\n )\n ]\n ),\n default: () =>\n h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n onClick: handleClick\n },\n titleTag\n )\n }\n )\n :\n /**\n * Fragment 碎片化节点,可以让 dom 没有根节点\n *\n * 以下是无需 tooltip 渲染的组件,通常是侧边栏没有折叠的时候\n */\n h(Fragment, {}, [\n titleCon.value ? h(\n 'div',\n {\n class: nsSubMenu.e('title'),\n style: [titleStyle.value, { backgroundColor: backgroundColor.value }],\n ref: verticalTitleRef,\n onClick: handleClick\n },\n titleTag\n ) : null,\n h(\n CollapseTransition,\n {},\n {\n default: () =>\n withDirectives(\n h(\n 'ul',\n {\n role: 'menu',\n class: [nsMenu.b(), nsMenu.m('inline')],\n style: ulStyle.value\n },\n [slots.default?.()]\n ),\n [[vShow, opened.value]]\n )\n }\n )\n ]);\n\n return h(\n 'li',\n {\n class: [nsSubMenu.b(), nsSubMenu.is('active', active.value),\n nsSubMenu.is('opened', opened.value), nsSubMenu.is('disabled', __props.disabled)],\n role: 'menuitem',\n ariaHaspopup: true,\n ariaExpanded: opened.value,\n onMouseenter: handleMouseenter,\n onMouseleave: () => handleMouseleave(true),\n onFocus: handleMouseenter\n },\n [child]\n );\n});\n</script>\n"],"names":["ns","useNamespace","__default__","DO_defineComponent","name","b","instance","getCurrentInstance","indexPath","parentMenu","useMenu","computed","__props","index","nsMenu","nsSubMenu","rootMenu","inject","throwError","subMenu","value","uid","subMenus","ref","timeout","mouseInChild","verticalTitleRef","vPopper","currentPlacement","mode","isFirstLevel","level","appendToBody","popperAppendToBody","undefined","Boolean","menuTransitionName","props","collapse","namespace","fallbackPlacements","opened","openedMenus","includes","active","isActive","Object","values","forEach","subItem","activeIndex","backgroundColor","activeTextColor","textColor","item","reactive","titleStyle","color","borderBottomColor","doDestroy","popperRef","popperInstanceRef","destroy","handleCollapseToggle","handleClick","menuTrigger","disabled","handleSubMenuClick","handleMouseenter","event","_showTimeout","showTimeout","type","stop","useTimeoutFn","openMenu","vnode","el","dispatchEvent","MouseEvent","handleMouseleave","deepDispatch","closeMenu","hideTimeout","parent","watch","addSubMenu","removeSubMenu","provide","expose","onMounted","onBeforeUnmount","slots","useSlots","subMenuIcon","icon","size","expandIcon","collapseIcon","_icon","singleAttrToObj","titleCon","renderTNode","titleTag","h","Icon","class","showArrow","e","title","style","transform","ulStyle","useMenuCssVar","child","isMenuPopup","Tooltip","visible","effect","pure","offset","popperOffset","persistent","popperClass","placement","teleported","transition","gpuAcceleration","toolTipCfg","content","m","onMouseenter","evt","onMouseleave","onFocus","default","onClick","Fragment","CollapseTransition","withDirectives","role","vShow","is","ariaHaspopup","ariaExpanded"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const VftMessage: import("vft/es/utils").SFCInstallWithContext<import("./types").Message>;
2
+ export default VftMessage;
3
+ export * from './types';
@@ -0,0 +1,14 @@
1
+ import { withInstallFunction as e } from "../../utils/vue/install.mjs";
2
+ import "vue";
3
+ import "@vue/shared";
4
+ import "@vft/utils";
5
+ import s from "./method.mjs";
6
+ import { messageDefaults as g, messageTypes as l } from "./types.mjs";
7
+ const p = e(s, "$message");
8
+ export {
9
+ p as VftMessage,
10
+ p as default,
11
+ g as messageDefaults,
12
+ l as messageTypes
13
+ };
14
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../packages/components/message/index.ts"],"sourcesContent":["import { withInstallFunction } from '@vft-ui/utils'\n\nimport Message from './method'\n\nexport const VftMessage = withInstallFunction(Message, '$message')\nexport default VftMessage\n\nexport * from './types'\n"],"names":["VftMessage","withInstallFunction","Message"],"mappings":";;;;;;AAIa,MAAAA,IAAaC,EAAoBC,GAAS,UAAU;"}
@@ -0,0 +1,17 @@
1
+ import type { ComponentInternalInstance, VNode } from 'vue';
2
+ import type { Mutable } from 'vft/es/utils';
3
+ import type { MessageHandler, MessageProps } from './types';
4
+ export type MessageContext = {
5
+ id: string;
6
+ vnode: VNode;
7
+ handler: MessageHandler;
8
+ vm: ComponentInternalInstance;
9
+ props: Mutable<MessageProps>;
10
+ };
11
+ export declare const instances: MessageContext[];
12
+ export declare const getInstance: (id: string) => {
13
+ current: MessageContext;
14
+ prev: MessageContext | undefined;
15
+ };
16
+ export declare const getLastOffset: (id: string) => number;
17
+ export declare const getOffsetOrSpace: (id: string, offset: number) => number;
@@ -0,0 +1,16 @@
1
+ import { shallowReactive as c } from "vue";
2
+ const r = c([]), i = (e) => {
3
+ const t = r.findIndex((o) => o.id === e), s = r[t];
4
+ let n;
5
+ return t > 0 && (n = r[t - 1]), { current: s, prev: n };
6
+ }, f = (e) => {
7
+ const { prev: t } = i(e);
8
+ return t ? t.vm.exposed.bottom.value : 0;
9
+ }, a = (e, t) => r.findIndex((n) => n.id === e) > 0 ? 20 : t;
10
+ export {
11
+ i as getInstance,
12
+ f as getLastOffset,
13
+ a as getOffsetOrSpace,
14
+ r as instances
15
+ };
16
+ //# sourceMappingURL=instance.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.mjs","sources":["../../../../../packages/components/message/instance.ts"],"sourcesContent":["import { shallowReactive } from 'vue'\nimport type { ComponentInternalInstance, VNode } from 'vue'\nimport type { Mutable } from '@vft-ui/utils'\nimport type { MessageHandler, MessageProps } from './types'\n\nexport type MessageContext = {\n\tid: string\n\tvnode: VNode\n\thandler: MessageHandler\n\tvm: ComponentInternalInstance\n\tprops: Mutable<MessageProps>\n}\n\nexport const instances: MessageContext[] = shallowReactive([])\n\nexport const getInstance = (id: string) => {\n\tconst idx = instances.findIndex((instance) => instance.id === id)\n\tconst current = instances[idx]\n\tlet prev: MessageContext | undefined\n\tif (idx > 0) {\n\t\tprev = instances[idx - 1]\n\t}\n\treturn { current, prev }\n}\n\nexport const getLastOffset = (id: string): number => {\n\tconst { prev } = getInstance(id)\n\tif (!prev) return 0\n\treturn prev.vm.exposed!.bottom.value\n}\n\nexport const getOffsetOrSpace = (id: string, offset: number) => {\n\tconst idx = instances.findIndex((instance) => instance.id === id)\n\treturn idx > 0 ? 20 : offset\n}\n"],"names":["instances","shallowReactive","getInstance","id","idx","instance","current","prev","getLastOffset","getOffsetOrSpace","offset"],"mappings":";AAaa,MAAAA,IAA8BC,EAAgB,EAAE,GAEhDC,IAAc,CAACC,MAAe;AAC1C,QAAMC,IAAMJ,EAAU,UAAU,CAACK,MAAaA,EAAS,OAAOF,CAAE,GAC1DG,IAAUN,EAAUI,CAAG;AACzB,MAAAG;AACJ,SAAIH,IAAM,MACFG,IAAAP,EAAUI,IAAM,CAAC,IAElB,EAAE,SAAAE,GAAS,MAAAC;AACnB,GAEaC,IAAgB,CAACL,MAAuB;AACpD,QAAM,EAAE,MAAAI,EAAA,IAASL,EAAYC,CAAE;AAC/B,SAAKI,IACEA,EAAK,GAAG,QAAS,OAAO,QADb;AAEnB,GAEaE,IAAmB,CAACN,GAAYO,MAChCV,EAAU,UAAU,CAACK,MAAaA,EAAS,OAAOF,CAAE,IACnD,IAAI,KAAKO;"}