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.
- package/dist/index.css +1 -1
- package/es/component.mjs +32 -30
- package/es/component.mjs.map +1 -1
- package/es/components/back-top/back-top.vue2.mjs +8 -6
- package/es/components/back-top/back-top.vue2.mjs.map +1 -1
- package/es/components/config-provider/config-provider.vue.d.ts +9 -0
- package/es/components/config-provider/config-provider.vue2.mjs +32 -23
- package/es/components/config-provider/config-provider.vue2.mjs.map +1 -1
- package/es/components/config-provider/constants.d.ts +2 -0
- package/es/components/config-provider/constants.mjs +3 -2
- package/es/components/config-provider/constants.mjs.map +1 -1
- package/es/components/config-provider/index.d.ts +8 -0
- package/es/components/config-provider/index.mjs +7 -6
- package/es/components/context-menu/context-menu.vue2.mjs +17 -10
- package/es/components/context-menu/context-menu.vue2.mjs.map +1 -1
- package/es/components/index.d.ts +3 -0
- package/es/components/index.mjs +87 -71
- package/es/components/index.mjs.map +1 -1
- package/es/components/loading/directive.d.ts +18 -0
- package/es/components/loading/directive.mjs +50 -0
- package/es/components/loading/directive.mjs.map +1 -0
- package/es/components/loading/index.d.ts +39 -0
- package/es/components/loading/index.mjs +19 -0
- package/es/components/loading/index.mjs.map +1 -0
- package/es/components/loading/loading.d.ts +27 -0
- package/es/components/loading/loading.mjs +122 -0
- package/es/components/loading/loading.mjs.map +1 -0
- package/es/components/loading/service.d.ts +3 -0
- package/es/components/loading/service.mjs +68 -0
- package/es/components/loading/service.mjs.map +1 -0
- package/es/components/loading/style/css.d.ts +0 -0
- package/es/components/loading/style/css.mjs +3 -0
- package/es/components/loading/style/css.mjs.map +1 -0
- package/es/components/loading/style/index.d.ts +0 -0
- package/es/components/loading/style/index.mjs +3 -0
- package/es/components/loading/style/index.mjs.map +1 -0
- package/es/components/loading/types.d.ts +25 -0
- package/es/components/loading/types.mjs +2 -0
- package/es/components/loading/types.mjs.map +1 -0
- package/es/components/menu/menu-item.vue2.mjs +4 -2
- package/es/components/menu/menu-item.vue2.mjs.map +1 -1
- package/es/components/menu/sub-menu.vue2.mjs +4 -2
- package/es/components/menu/sub-menu.vue2.mjs.map +1 -1
- package/es/components/message/index.d.ts +3 -0
- package/es/components/message/index.mjs +14 -0
- package/es/components/message/index.mjs.map +1 -0
- package/es/components/message/instance.d.ts +17 -0
- package/es/components/message/instance.mjs +16 -0
- package/es/components/message/instance.mjs.map +1 -0
- package/es/components/message/message.vue.d.ts +129 -0
- package/es/components/message/message.vue.mjs +5 -0
- package/es/components/message/message.vue.mjs.map +1 -0
- package/es/components/message/message.vue2.mjs +129 -0
- package/es/components/message/message.vue2.mjs.map +1 -0
- package/es/components/message/method.d.ts +4 -0
- package/es/components/message/method.mjs +98 -0
- package/es/components/message/method.mjs.map +1 -0
- package/es/components/message/style/css.d.ts +0 -0
- package/es/components/message/style/css.mjs +3 -0
- package/es/components/message/style/css.mjs.map +1 -0
- package/es/components/message/style/index.d.ts +0 -0
- package/es/components/message/style/index.mjs +3 -0
- package/es/components/message/style/index.mjs.map +1 -0
- package/es/components/message/types.d.ts +63 -0
- package/es/components/message/types.mjs +23 -0
- package/es/components/message/types.mjs.map +1 -0
- package/es/components/multiple-tabs/multiple-tabs.vue2.mjs +4 -2
- package/es/components/multiple-tabs/multiple-tabs.vue2.mjs.map +1 -1
- package/es/components/multiple-tabs/tab-content.vue2.mjs +18 -11
- package/es/components/multiple-tabs/tab-content.vue2.mjs.map +1 -1
- package/es/components/page-wrapper/index.d.ts +12 -0
- package/es/components/page-wrapper/index.mjs +11 -0
- package/es/components/page-wrapper/index.mjs.map +1 -0
- package/es/components/page-wrapper/page-wrapper.vue.d.ts +13 -0
- package/es/components/page-wrapper/page-wrapper.vue.mjs +5 -0
- package/es/components/page-wrapper/page-wrapper.vue.mjs.map +1 -0
- package/es/components/page-wrapper/page-wrapper.vue2.mjs +43 -0
- package/es/components/page-wrapper/page-wrapper.vue2.mjs.map +1 -0
- package/es/components/page-wrapper/style/css.d.ts +0 -0
- package/es/components/page-wrapper/style/css.mjs +3 -0
- package/es/components/page-wrapper/style/css.mjs.map +1 -0
- package/es/components/page-wrapper/style/index.d.ts +0 -0
- package/es/components/page-wrapper/style/index.mjs +3 -0
- package/es/components/page-wrapper/style/index.mjs.map +1 -0
- package/es/components/result/result.vue2.mjs +4 -2
- package/es/components/result/result.vue2.mjs.map +1 -1
- package/es/components/side-menu/side-menu.vue2.mjs +4 -2
- package/es/components/side-menu/side-menu.vue2.mjs.map +1 -1
- package/es/components/tabs/tab-nav.vue2.mjs +19 -17
- package/es/components/tabs/tab-nav.vue2.mjs.map +1 -1
- package/es/defaults.d.ts +1 -1
- package/es/defaults.mjs +4 -3
- package/es/defaults.mjs.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.mjs +135 -119
- package/es/index.mjs.map +1 -1
- package/es/make-installer.d.ts +2 -1
- package/es/make-installer.mjs +8 -6
- package/es/make-installer.mjs.map +1 -1
- package/es/package.json.mjs +1 -1
- package/es/plugin.d.ts +3 -0
- package/es/plugin.mjs +10 -0
- package/es/plugin.mjs.map +1 -0
- package/es/style.css +1 -1
- package/es/theme-style/src/loading.scss.mjs +5 -0
- package/es/theme-style/src/loading.scss.mjs.map +1 -0
- package/es/theme-style/src/message.scss.mjs +5 -0
- package/es/theme-style/src/message.scss.mjs.map +1 -0
- package/es/theme-style/src/page-wrapper.scss.mjs +5 -0
- package/es/theme-style/src/page-wrapper.scss.mjs.map +1 -0
- package/lib/component.js +1 -1
- package/lib/component.js.map +1 -1
- package/lib/components/back-top/back-top.vue2.js +1 -1
- package/lib/components/back-top/back-top.vue2.js.map +1 -1
- package/lib/components/config-provider/config-provider.vue.d.ts +9 -0
- package/lib/components/config-provider/config-provider.vue2.js +1 -1
- package/lib/components/config-provider/config-provider.vue2.js.map +1 -1
- package/lib/components/config-provider/constants.d.ts +2 -0
- package/lib/components/config-provider/constants.js +1 -1
- package/lib/components/config-provider/constants.js.map +1 -1
- package/lib/components/config-provider/index.d.ts +8 -0
- package/lib/components/config-provider/index.js +1 -1
- package/lib/components/context-menu/context-menu.vue2.js +1 -1
- package/lib/components/context-menu/context-menu.vue2.js.map +1 -1
- package/lib/components/index.d.ts +3 -0
- package/lib/components/index.js +1 -1
- package/lib/components/loading/directive.d.ts +18 -0
- package/lib/components/loading/directive.js +2 -0
- package/lib/components/loading/directive.js.map +1 -0
- package/lib/components/loading/index.d.ts +39 -0
- package/lib/components/loading/index.js +2 -0
- package/lib/components/loading/index.js.map +1 -0
- package/lib/components/loading/loading.d.ts +27 -0
- package/lib/components/loading/loading.js +2 -0
- package/lib/components/loading/loading.js.map +1 -0
- package/lib/components/loading/service.d.ts +3 -0
- package/lib/components/loading/service.js +2 -0
- package/lib/components/loading/service.js.map +1 -0
- package/lib/components/loading/style/css.d.ts +0 -0
- package/lib/components/loading/style/css.js +2 -0
- package/lib/components/loading/style/css.js.map +1 -0
- package/lib/components/loading/style/index.d.ts +0 -0
- package/lib/components/loading/style/index.js +2 -0
- package/lib/components/loading/style/index.js.map +1 -0
- package/lib/components/loading/types.d.ts +25 -0
- package/lib/components/loading/types.js +2 -0
- package/lib/components/loading/types.js.map +1 -0
- package/lib/components/menu/menu-item.vue2.js +1 -1
- package/lib/components/menu/menu-item.vue2.js.map +1 -1
- package/lib/components/menu/sub-menu.vue2.js +1 -1
- package/lib/components/menu/sub-menu.vue2.js.map +1 -1
- package/lib/components/message/index.d.ts +3 -0
- package/lib/components/message/index.js +2 -0
- package/lib/components/message/index.js.map +1 -0
- package/lib/components/message/instance.d.ts +17 -0
- package/lib/components/message/instance.js +2 -0
- package/lib/components/message/instance.js.map +1 -0
- package/lib/components/message/message.vue.d.ts +129 -0
- package/lib/components/message/message.vue.js +2 -0
- package/lib/components/message/message.vue.js.map +1 -0
- package/lib/components/message/message.vue2.js +2 -0
- package/lib/components/message/message.vue2.js.map +1 -0
- package/lib/components/message/method.d.ts +4 -0
- package/lib/components/message/method.js +2 -0
- package/lib/components/message/method.js.map +1 -0
- package/lib/components/message/style/css.d.ts +0 -0
- package/lib/components/message/style/css.js +2 -0
- package/lib/components/message/style/css.js.map +1 -0
- package/lib/components/message/style/index.d.ts +0 -0
- package/lib/components/message/style/index.js +2 -0
- package/lib/components/message/style/index.js.map +1 -0
- package/lib/components/message/types.d.ts +63 -0
- package/lib/components/message/types.js +2 -0
- package/lib/components/message/types.js.map +1 -0
- package/lib/components/multiple-tabs/multiple-tabs.vue2.js +1 -1
- package/lib/components/multiple-tabs/multiple-tabs.vue2.js.map +1 -1
- package/lib/components/multiple-tabs/tab-content.vue2.js +1 -1
- package/lib/components/multiple-tabs/tab-content.vue2.js.map +1 -1
- package/lib/components/page-wrapper/index.d.ts +12 -0
- package/lib/components/page-wrapper/index.js +2 -0
- package/lib/components/page-wrapper/index.js.map +1 -0
- package/lib/components/page-wrapper/page-wrapper.vue.d.ts +13 -0
- package/lib/components/page-wrapper/page-wrapper.vue.js +2 -0
- package/lib/components/page-wrapper/page-wrapper.vue.js.map +1 -0
- package/lib/components/page-wrapper/page-wrapper.vue2.js +2 -0
- package/lib/components/page-wrapper/page-wrapper.vue2.js.map +1 -0
- package/lib/components/page-wrapper/style/css.d.ts +0 -0
- package/lib/components/page-wrapper/style/css.js +2 -0
- package/lib/components/page-wrapper/style/css.js.map +1 -0
- package/lib/components/page-wrapper/style/index.d.ts +0 -0
- package/lib/components/page-wrapper/style/index.js +2 -0
- package/lib/components/page-wrapper/style/index.js.map +1 -0
- package/lib/components/result/result.vue2.js +1 -1
- package/lib/components/result/result.vue2.js.map +1 -1
- package/lib/components/side-menu/side-menu.vue2.js +1 -1
- package/lib/components/side-menu/side-menu.vue2.js.map +1 -1
- package/lib/components/tabs/tab-nav.vue2.js +1 -1
- package/lib/components/tabs/tab-nav.vue2.js.map +1 -1
- package/lib/defaults.d.ts +1 -1
- package/lib/defaults.js +1 -1
- package/lib/defaults.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/make-installer.d.ts +2 -1
- package/lib/make-installer.js +1 -1
- package/lib/make-installer.js.map +1 -1
- package/lib/package.json.js +1 -1
- package/lib/plugin.d.ts +3 -0
- package/lib/plugin.js +2 -0
- package/lib/plugin.js.map +1 -0
- package/lib/theme-style/src/loading.scss.js +2 -0
- package/lib/theme-style/src/loading.scss.js.map +1 -0
- package/lib/theme-style/src/message.scss.js +2 -0
- package/lib/theme-style/src/message.scss.js.map +1 -0
- package/lib/theme-style/src/page-wrapper.scss.js +2 -0
- package/lib/theme-style/src/page-wrapper.scss.js.map +1 -0
- package/package.json +1 -1
- package/theme-style/index.css +1 -1
- package/theme-style/src/index.scss +3 -0
- package/theme-style/src/loading.scss +112 -0
- package/theme-style/src/message.scss +111 -0
- package/theme-style/src/page-wrapper.scss +28 -0
- package/theme-style/vft-loading.css +1 -0
- package/theme-style/vft-message.css +1 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
File without changes
|
|
@@ -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 @@
|
|
|
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
|
-
}),
|
|
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
|
-
|
|
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":"
|
|
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
|
-
}),
|
|
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
|
-
|
|
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,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;"}
|