mamba-layout 0.1.0

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 (169) hide show
  1. package/README.md +47 -0
  2. package/dist/_virtual/_plugin-vue_export-helper.js +9 -0
  3. package/dist/assets/logo.png.js +4 -0
  4. package/dist/components/UserAvatar/index.d.ts +2 -0
  5. package/dist/components/UserAvatar/index.js +5 -0
  6. package/dist/components/UserAvatar/src/UserAvatar.css +1 -0
  7. package/dist/components/UserAvatar/src/UserAvatar.vue.d.ts +9 -0
  8. package/dist/components/UserAvatar/src/UserAvatar.vue.js +7 -0
  9. package/dist/components/UserAvatar/src/UserAvatar.vue2.js +61 -0
  10. package/dist/components/index.d.ts +2 -0
  11. package/dist/components/index.js +51 -0
  12. package/dist/index.d.ts +13 -0
  13. package/dist/index.js +80 -0
  14. package/dist/layout/BaseLayout.css +1 -0
  15. package/dist/layout/BaseLayout.vue.d.ts +23 -0
  16. package/dist/layout/BaseLayout.vue.js +7 -0
  17. package/dist/layout/BaseLayout.vue2.js +75 -0
  18. package/dist/layout/components/AppSelect.css +1 -0
  19. package/dist/layout/components/AppSelect.vue.d.ts +2 -0
  20. package/dist/layout/components/AppSelect.vue.js +7 -0
  21. package/dist/layout/components/AppSelect.vue2.js +69 -0
  22. package/dist/layout/components/AsideBar.css +1 -0
  23. package/dist/layout/components/AsideBar.vue.d.ts +21 -0
  24. package/dist/layout/components/AsideBar.vue.js +7 -0
  25. package/dist/layout/components/AsideBar.vue2.js +49 -0
  26. package/dist/layout/components/AsideSubMenuItem.vue.d.ts +25 -0
  27. package/dist/layout/components/AsideSubMenuItem.vue.js +84 -0
  28. package/dist/layout/components/AsideSubMenuItem.vue2.js +4 -0
  29. package/dist/layout/components/AsideSubMenus.vue.d.ts +16 -0
  30. package/dist/layout/components/AsideSubMenus.vue.js +36 -0
  31. package/dist/layout/components/AsideSubMenus.vue2.js +4 -0
  32. package/dist/layout/components/AsideTabMenus.vue.d.ts +2 -0
  33. package/dist/layout/components/AsideTabMenus.vue.js +41 -0
  34. package/dist/layout/components/AsideTabMenus.vue2.js +4 -0
  35. package/dist/layout/components/AsideUser.vue.d.ts +2 -0
  36. package/dist/layout/components/AsideUser.vue.js +58 -0
  37. package/dist/layout/components/AsideUser.vue2.js +4 -0
  38. package/dist/layout/components/HeaderBar.css +1 -0
  39. package/dist/layout/components/HeaderBar.vue.d.ts +17 -0
  40. package/dist/layout/components/HeaderBar.vue.js +7 -0
  41. package/dist/layout/components/HeaderBar.vue2.js +55 -0
  42. package/dist/layout/components/HeaderMenuToggle.vue.d.ts +25 -0
  43. package/dist/layout/components/HeaderMenuToggle.vue.js +40 -0
  44. package/dist/layout/components/HeaderMenuToggle.vue2.js +4 -0
  45. package/dist/layout/components/LanguageSelect.css +1 -0
  46. package/dist/layout/components/LanguageSelect.vue.d.ts +22 -0
  47. package/dist/layout/components/LanguageSelect.vue.js +8 -0
  48. package/dist/layout/components/LanguageSelect.vue2.js +101 -0
  49. package/dist/layout/components/LanguageSelect2.css +1 -0
  50. package/dist/layout/components/LayoutBreadcrumb.css +1 -0
  51. package/dist/layout/components/LayoutBreadcrumb.vue.d.ts +29 -0
  52. package/dist/layout/components/LayoutBreadcrumb.vue.js +7 -0
  53. package/dist/layout/components/LayoutBreadcrumb.vue2.js +189 -0
  54. package/dist/layout/components/MenuDrawer.css +1 -0
  55. package/dist/layout/components/MenuDrawer.vue.d.ts +12 -0
  56. package/dist/layout/components/MenuDrawer.vue.js +163 -0
  57. package/dist/layout/components/MenuDrawer.vue3.js +5 -0
  58. package/dist/layout/components/MenuItemIcon.css +1 -0
  59. package/dist/layout/components/MenuItemIcon.vue.d.ts +7 -0
  60. package/dist/layout/components/MenuItemIcon.vue.js +7 -0
  61. package/dist/layout/components/MenuItemIcon.vue2.js +23 -0
  62. package/dist/layout/components/NavIconBtn.css +1 -0
  63. package/dist/layout/components/NavIconBtn.vue.d.ts +26 -0
  64. package/dist/layout/components/NavIconBtn.vue.js +7 -0
  65. package/dist/layout/components/NavIconBtn.vue2.js +23 -0
  66. package/dist/layout/components/SHeaderRight.css +1 -0
  67. package/dist/layout/components/SHeaderRight.vue.d.ts +2 -0
  68. package/dist/layout/components/SHeaderRight.vue.js +7 -0
  69. package/dist/layout/components/SHeaderRight.vue2.js +80 -0
  70. package/dist/layout/components/ThemeToggle.css +1 -0
  71. package/dist/layout/components/ThemeToggle.vue.d.ts +2 -0
  72. package/dist/layout/components/ThemeToggle.vue.js +7 -0
  73. package/dist/layout/components/ThemeToggle.vue2.js +30 -0
  74. package/dist/layout/components/TimezoneSelect.css +1 -0
  75. package/dist/layout/components/TimezoneSelect.vue.d.ts +7 -0
  76. package/dist/layout/components/TimezoneSelect.vue.js +8 -0
  77. package/dist/layout/components/TimezoneSelect.vue2.js +78 -0
  78. package/dist/layout/components/TimezoneSelect2.css +1 -0
  79. package/dist/layout/components/UserInfo.css +1 -0
  80. package/dist/layout/components/UserInfo.vue.d.ts +2 -0
  81. package/dist/layout/components/UserInfo.vue.js +8 -0
  82. package/dist/layout/components/UserInfo.vue2.js +111 -0
  83. package/dist/layout/components/UserInfo2.css +1 -0
  84. package/dist/layout/components/index.d.ts +23 -0
  85. package/dist/layout/components/index.js +49 -0
  86. package/dist/layout/components/mobile/AppSelectMobile.vue.d.ts +2 -0
  87. package/dist/layout/components/mobile/AppSelectMobile.vue.js +60 -0
  88. package/dist/layout/components/mobile/AppSelectMobile.vue2.js +4 -0
  89. package/dist/layout/components/mobile/AsideBarMobile.css +1 -0
  90. package/dist/layout/components/mobile/AsideBarMobile.vue.d.ts +21 -0
  91. package/dist/layout/components/mobile/AsideBarMobile.vue.js +7 -0
  92. package/dist/layout/components/mobile/AsideBarMobile.vue2.js +47 -0
  93. package/dist/layout/components/mobile/AsideUserMobile.css +1 -0
  94. package/dist/layout/components/mobile/AsideUserMobile.vue.d.ts +2 -0
  95. package/dist/layout/components/mobile/AsideUserMobile.vue.js +7 -0
  96. package/dist/layout/components/mobile/AsideUserMobile.vue2.js +56 -0
  97. package/dist/layout/components/mobile/AsideUserMobilePopover.css +1 -0
  98. package/dist/layout/components/mobile/AsideUserMobilePopover.vue.d.ts +17 -0
  99. package/dist/layout/components/mobile/AsideUserMobilePopover.vue.js +7 -0
  100. package/dist/layout/components/mobile/AsideUserMobilePopover.vue2.js +52 -0
  101. package/dist/layout/components/mobile/HeaderRightMobile.css +1 -0
  102. package/dist/layout/components/mobile/HeaderRightMobile.vue.d.ts +2 -0
  103. package/dist/layout/components/mobile/HeaderRightMobile.vue.js +7 -0
  104. package/dist/layout/components/mobile/HeaderRightMobile.vue2.js +50 -0
  105. package/dist/layout/components/mobile/MobileMenuToggle.css +1 -0
  106. package/dist/layout/components/mobile/MobileMenuToggle.vue.d.ts +2 -0
  107. package/dist/layout/components/mobile/MobileMenuToggle.vue.js +7 -0
  108. package/dist/layout/components/mobile/MobileMenuToggle.vue2.js +31 -0
  109. package/dist/layout/hooks/index.d.ts +4 -0
  110. package/dist/layout/hooks/index.js +17 -0
  111. package/dist/layout/hooks/useApp.d.ts +6 -0
  112. package/dist/layout/hooks/useApp.js +20 -0
  113. package/dist/layout/hooks/useSetting.d.ts +62 -0
  114. package/dist/layout/hooks/useSetting.js +24 -0
  115. package/dist/layout/hooks/useState.d.ts +763 -0
  116. package/dist/layout/hooks/useState.js +99 -0
  117. package/dist/layout/hooks/useTheme.d.ts +15 -0
  118. package/dist/layout/hooks/useTheme.js +44 -0
  119. package/dist/layout/utils/index.d.ts +7 -0
  120. package/dist/layout/utils/index.js +59 -0
  121. package/dist/layout.css +1 -0
  122. package/dist/layout.es.js +53770 -0
  123. package/dist/layout.global.js +78 -0
  124. package/dist/locales/en/account.d.ts +10 -0
  125. package/dist/locales/en/account.js +12 -0
  126. package/dist/locales/en/admin.d.ts +207 -0
  127. package/dist/locales/en/admin.js +209 -0
  128. package/dist/locales/en/common.d.ts +40 -0
  129. package/dist/locales/en/common.js +42 -0
  130. package/dist/locales/en/components.d.ts +37 -0
  131. package/dist/locales/en/components.js +39 -0
  132. package/dist/locales/en/constant.d.ts +151 -0
  133. package/dist/locales/en/constant.js +153 -0
  134. package/dist/locales/en/filterBox.d.ts +11 -0
  135. package/dist/locales/en/filterBox.js +13 -0
  136. package/dist/locales/en/index.d.ts +487 -0
  137. package/dist/locales/en/index.js +22 -0
  138. package/dist/locales/en/instanceForm.d.ts +17 -0
  139. package/dist/locales/en/instanceForm.js +19 -0
  140. package/dist/locales/en/password.d.ts +18 -0
  141. package/dist/locales/en/password.js +20 -0
  142. package/dist/locales/index.d.ts +973 -0
  143. package/dist/locales/index.js +12 -0
  144. package/dist/locales/messages.d.ts +973 -0
  145. package/dist/locales/messages.js +9 -0
  146. package/dist/locales/zh-cn/account.d.ts +10 -0
  147. package/dist/locales/zh-cn/account.js +12 -0
  148. package/dist/locales/zh-cn/admin.d.ts +205 -0
  149. package/dist/locales/zh-cn/admin.js +207 -0
  150. package/dist/locales/zh-cn/common.d.ts +40 -0
  151. package/dist/locales/zh-cn/common.js +42 -0
  152. package/dist/locales/zh-cn/components.d.ts +37 -0
  153. package/dist/locales/zh-cn/components.js +39 -0
  154. package/dist/locales/zh-cn/constant.d.ts +151 -0
  155. package/dist/locales/zh-cn/constant.js +153 -0
  156. package/dist/locales/zh-cn/filterBox.d.ts +11 -0
  157. package/dist/locales/zh-cn/filterBox.js +13 -0
  158. package/dist/locales/zh-cn/index.d.ts +485 -0
  159. package/dist/locales/zh-cn/index.js +22 -0
  160. package/dist/locales/zh-cn/instanceForm.d.ts +17 -0
  161. package/dist/locales/zh-cn/instanceForm.js +19 -0
  162. package/dist/locales/zh-cn/password.d.ts +18 -0
  163. package/dist/locales/zh-cn/password.js +20 -0
  164. package/dist/standalone.d.ts +0 -0
  165. package/dist/utils/createContext.d.ts +8 -0
  166. package/dist/utils/createContext.js +14 -0
  167. package/dist/utils/repoUtils.d.ts +59 -0
  168. package/dist/utils/repoUtils.js +160 -0
  169. package/package.json +110 -0
@@ -0,0 +1,78 @@
1
+ import { defineComponent as g, ref as w, computed as r, resolveComponent as v, createBlock as f, openBlock as t, withCtx as n, createElementVNode as i, createElementBlock as c, Fragment as y, renderList as T, normalizeClass as Z, toDisplayString as u, createVNode as l, createCommentVNode as d, unref as b } from "vue";
2
+ import { Clock as L, ArrowDown as B } from "@element-plus/icons-vue";
3
+ import { useCurrentTimeZone as N, getTimeZoneOptions as V, getTimeZoneLabel as D, setCurrentTimeZone as E } from "../../utils/repoUtils.js";
4
+ import O from "./NavIconBtn.vue.js";
5
+ const S = {
6
+ key: 0,
7
+ class: "timezone-select__current"
8
+ }, A = { class: "timezone-select__panel" }, F = ["onClick"], I = { class: "timezone-select__name" }, R = { class: "timezone-select__offset" }, H = /* @__PURE__ */ g({
9
+ __name: "TimezoneSelect",
10
+ props: {
11
+ showLabel: { type: Boolean, default: !1 }
12
+ },
13
+ setup(U) {
14
+ const h = N(), s = w(!1), a = r(() => h.value), z = r(() => V()), p = r(() => D(a.value)), C = (o) => {
15
+ E(o), s.value = !1;
16
+ };
17
+ return (o, m) => {
18
+ const _ = v("el-icon"), k = v("el-popover");
19
+ return t(), f(k, {
20
+ visible: s.value,
21
+ "onUpdate:visible": m[0] || (m[0] = (e) => s.value = e),
22
+ placement: "bottom",
23
+ width: 280,
24
+ trigger: "hover",
25
+ "popper-class": "top-timezone-popover"
26
+ }, {
27
+ reference: n(() => [
28
+ l(O, {
29
+ tag: "div",
30
+ class: "timezone-select",
31
+ "icon-only": !o.showLabel,
32
+ title: p.value,
33
+ "aria-label": p.value
34
+ }, {
35
+ default: n(() => [
36
+ l(_, null, {
37
+ default: n(() => [
38
+ l(b(L))
39
+ ]),
40
+ _: 1
41
+ }),
42
+ o.showLabel ? (t(), c("span", S, u(a.value), 1)) : d("", !0),
43
+ o.showLabel ? (t(), f(_, {
44
+ key: 1,
45
+ class: "timezone-select__caret"
46
+ }, {
47
+ default: n(() => [
48
+ l(b(B))
49
+ ]),
50
+ _: 1
51
+ })) : d("", !0)
52
+ ]),
53
+ _: 1
54
+ }, 8, ["icon-only", "title", "aria-label"])
55
+ ]),
56
+ default: n(() => [
57
+ i("div", A, [
58
+ (t(!0), c(y, null, T(z.value, (e) => (t(), c("button", {
59
+ key: e.value,
60
+ type: "button",
61
+ class: Z(["timezone-select__option", {
62
+ "timezone-select__option--active": e.value === a.value
63
+ }]),
64
+ onClick: ($) => C(e.value)
65
+ }, [
66
+ i("span", I, u(e.value), 1),
67
+ i("span", R, u(e.offset), 1)
68
+ ], 10, F))), 128))
69
+ ])
70
+ ]),
71
+ _: 1
72
+ }, 8, ["visible"]);
73
+ };
74
+ }
75
+ });
76
+ export {
77
+ H as default
78
+ };
@@ -0,0 +1 @@
1
+ .timezone-select[data-v-e62f5f2d]{flex-shrink:0}.timezone-select__current[data-v-e62f5f2d]{max-width:132px;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:600;line-height:1}.timezone-select__caret[data-v-e62f5f2d]{font-size:12px}.timezone-select__panel[data-v-e62f5f2d]{display:grid;gap:4px;max-height:min(360px,70vh);overflow-y:auto}.timezone-select__option[data-v-e62f5f2d]{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 12px;border:0;border-radius:var(--ui-radius-control);background:transparent;color:var(--ui-text-primary);text-align:left;cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.timezone-select__option[data-v-e62f5f2d]:hover{background:var(--ui-bg-muted)}.timezone-select__name[data-v-e62f5f2d]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timezone-select__offset[data-v-e62f5f2d]{color:var(--ui-text-muted);font-size:12px;white-space:nowrap}.timezone-select__option--active[data-v-e62f5f2d]{color:var(--el-color-primary);background:var(--el-color-primary-light-10)}.timezone-select__option--active .timezone-select__offset[data-v-e62f5f2d]{color:var(--el-color-primary)}
@@ -0,0 +1 @@
1
+ .top-userinfo-popover{padding:8px!important;border:1px solid var(--ui-border-default)!important;background:var(--ui-bg-card)!important;border-radius:var(--ui-radius-card)!important;box-shadow:var(--ui-shadow-pop)!important}
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import o from "./UserInfo.vue2.js";
2
+ /* empty css */
3
+ /* empty css */
4
+ import r from "../../_virtual/_plugin-vue_export-helper.js";
5
+ const s = /* @__PURE__ */ r(o, [["__scopeId", "data-v-63bc60f6"]]);
6
+ export {
7
+ s as default
8
+ };
@@ -0,0 +1,111 @@
1
+ import { defineComponent as x, computed as v, resolveComponent as M, createBlock as w, openBlock as r, withCtx as b, createElementVNode as l, createElementBlock as m, createVNode as f, unref as d, createCommentVNode as B, toDisplayString as u, Fragment as h, renderList as y } from "vue";
2
+ import k from "../../components/UserAvatar/src/UserAvatar.vue.js";
3
+ import U from "./MenuItemIcon.vue.js";
4
+ import V from "../../locales/index.js";
5
+ import { tname as E } from "../../utils/repoUtils.js";
6
+ import { useSetting as S } from "../hooks/useSetting.js";
7
+ import { redirectToLayoutLogin as A } from "../utils/index.js";
8
+ const D = { class: "user-info__panel" }, F = { class: "user-info__profile" }, P = { class: "user-info__profile-main" }, T = ["title"], j = ["title"], q = { class: "user-info__meta" }, z = { class: "user-info__meta-label" }, G = ["title"], H = ["href"], Z = /* @__PURE__ */ x({
9
+ __name: "UserInfo",
10
+ setup(J) {
11
+ const { t: _ } = V.global, i = S(), a = v(() => i.value.user || {}), L = v(() => i.value.accountMenu || []), c = v(
12
+ () => {
13
+ var o, e, n, t;
14
+ return ((o = a.value) == null ? void 0 : o.name) || ((e = a.value) == null ? void 0 : e.username) || ((n = a.value) == null ? void 0 : n.email) || ((t = a.value) == null ? void 0 : t.userId) || "User";
15
+ }
16
+ ), I = v(
17
+ () => {
18
+ var o, e, n;
19
+ return [
20
+ { label: _("admin.label.userName"), value: (o = a.value) == null ? void 0 : o.username },
21
+ { label: _("admin.label.email"), value: (e = a.value) == null ? void 0 : e.email },
22
+ { label: _("admin.label.userId"), value: (n = a.value) == null ? void 0 : n.userId }
23
+ ].filter((t) => !!t.value);
24
+ }
25
+ ), C = () => {
26
+ var o, e;
27
+ Promise.resolve((e = (o = i.value).onLogout) == null ? void 0 : e.call(o)).finally(() => {
28
+ i.value.onLogout || A(i.value);
29
+ });
30
+ };
31
+ return (o, e) => {
32
+ const n = M("el-popover");
33
+ return r(), w(n, {
34
+ width: 280,
35
+ trigger: "hover",
36
+ "popper-class": "top-userinfo-popover"
37
+ }, {
38
+ reference: b(() => [
39
+ f(d(k), {
40
+ class: "user-info__trigger ml-2",
41
+ src: a.value.avatar,
42
+ name: c.value
43
+ }, null, 8, ["src", "name"])
44
+ ]),
45
+ default: b(() => {
46
+ var t;
47
+ return [
48
+ l("div", D, [
49
+ l("div", F, [
50
+ f(d(k), {
51
+ class: "user-info__profile-avatar",
52
+ src: a.value.avatar,
53
+ name: c.value
54
+ }, null, 8, ["src", "name"]),
55
+ l("div", P, [
56
+ l("div", {
57
+ class: "user-info__display-name",
58
+ title: c.value
59
+ }, u(c.value), 9, T),
60
+ (t = a.value) != null && t.username ? (r(), m("div", {
61
+ key: 0,
62
+ class: "user-info__username",
63
+ title: a.value.username
64
+ }, " @" + u(a.value.username), 9, j)) : B("", !0)
65
+ ])
66
+ ]),
67
+ l("div", q, [
68
+ (r(!0), m(h, null, y(I.value, (s) => (r(), m("div", {
69
+ key: s.label,
70
+ class: "user-info__meta-row"
71
+ }, [
72
+ l("span", z, u(s.label), 1),
73
+ l("span", {
74
+ class: "user-info__meta-value",
75
+ title: s.value
76
+ }, u(s.value), 9, G)
77
+ ]))), 128))
78
+ ]),
79
+ e[1] || (e[1] = l("div", { class: "user-info__divider" }, null, -1)),
80
+ (r(!0), m(h, null, y(L.value, (s, N) => {
81
+ var p, g;
82
+ return r(), m("a", {
83
+ key: N,
84
+ href: s.path,
85
+ class: "user-info__item"
86
+ }, [
87
+ f(U, {
88
+ icon: s.icon || ((p = s.meta) == null ? void 0 : p.icon)
89
+ }, null, 8, ["icon"]),
90
+ l("span", null, u(d(E)(((g = s.meta) == null ? void 0 : g.translations) || {}, "name", s.name)), 1)
91
+ ], 8, H);
92
+ }), 128)),
93
+ e[2] || (e[2] = l("div", { class: "user-info__divider" }, null, -1)),
94
+ l("div", {
95
+ class: "user-info__item user-info__item--danger",
96
+ onClick: C
97
+ }, [
98
+ e[0] || (e[0] = l("i", { class: "metisicon-exit-full" }, null, -1)),
99
+ l("span", null, u(d(_)("common.btn.logout")), 1)
100
+ ])
101
+ ])
102
+ ];
103
+ }),
104
+ _: 1
105
+ });
106
+ };
107
+ }
108
+ });
109
+ export {
110
+ Z as default
111
+ };
@@ -0,0 +1 @@
1
+ .user-info__trigger[data-v-63bc60f6]{display:inline-flex;width:28px;height:28px;overflow:hidden;border-radius:var(--ui-radius-pill);background:var(--ui-avatar-bg, var(--el-color-primary));border:1px solid var(--ui-topnav-border);align-items:center;justify-content:center;font-size:12px;font-weight:600;color:var(--ui-text-on-brand);cursor:pointer;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:border-color var(--ui-transition-fast),filter var(--ui-transition-fast)}.user-info__trigger[data-v-63bc60f6]:hover{border-color:var(--ui-topnav-foreground);filter:brightness(1.05)}.user-info__panel[data-v-63bc60f6]{display:grid;gap:4px}.user-info__profile[data-v-63bc60f6]{display:grid;grid-template-columns:44px minmax(0,1fr);gap:12px;align-items:center;padding:8px 8px 10px}.user-info__profile-avatar[data-v-63bc60f6]{width:44px;height:44px;overflow:hidden;border-radius:var(--ui-radius-pill);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--ui-avatar-bg, var(--el-color-primary));color:var(--ui-text-on-brand);font-size:16px;font-weight:700}.user-info__profile-main[data-v-63bc60f6]{min-width:0}.user-info__display-name[data-v-63bc60f6]{color:var(--ui-text-primary);font-size:14px;font-weight:700;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-info__username[data-v-63bc60f6]{margin-top:2px;color:var(--ui-text-muted);font-size:12px;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-info__meta[data-v-63bc60f6]{display:grid;gap:2px;padding:8px;margin-bottom:2px;border-radius:var(--ui-radius-control);background:var(--ui-bg-muted)}.user-info__meta-row[data-v-63bc60f6]{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px;align-items:center;min-height:24px;font-size:12px;line-height:18px}.user-info__meta-label[data-v-63bc60f6]{color:var(--ui-text-muted)}.user-info__meta-value[data-v-63bc60f6]{min-width:0;color:var(--ui-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.user-info__item[data-v-63bc60f6]{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.user-info__item[data-v-63bc60f6]:hover{background:var(--ui-bg-muted)}.user-info__item--danger[data-v-63bc60f6]{color:var(--el-color-danger)}.user-info__divider[data-v-63bc60f6]{height:1px;background:var(--ui-border-soft);margin:4px 0}
@@ -0,0 +1,23 @@
1
+ export { default as AppSelect } from './AppSelect.vue';
2
+ export { default as AsideBar } from './AsideBar.vue';
3
+ export { default as AsideSubMenuItem } from './AsideSubMenuItem.vue';
4
+ export { default as AsideSubMenus } from './AsideSubMenus.vue';
5
+ export { default as AsideTabMenus } from './AsideTabMenus.vue';
6
+ export { default as AsideUser } from './AsideUser.vue';
7
+ export { default as HeaderBar } from './HeaderBar.vue';
8
+ export { default as HeaderMenuToggle } from './HeaderMenuToggle.vue';
9
+ export { default as LanguageSelect } from './LanguageSelect.vue';
10
+ export { default as LayoutBreadcrumb } from './LayoutBreadcrumb.vue';
11
+ export { default as MenuDrawer } from './MenuDrawer.vue';
12
+ export { default as MenuItemIcon } from './MenuItemIcon.vue';
13
+ export { default as NavIconBtn } from './NavIconBtn.vue';
14
+ export { default as SHeaderRight } from './SHeaderRight.vue';
15
+ export { default as ThemeToggle } from './ThemeToggle.vue';
16
+ export { default as TimezoneSelect } from './TimezoneSelect.vue';
17
+ export { default as UserInfo } from './UserInfo.vue';
18
+ export { default as AppSelectMobile } from './mobile/AppSelectMobile.vue';
19
+ export { default as AsideBarMobile } from './mobile/AsideBarMobile.vue';
20
+ export { default as AsideUserMobile } from './mobile/AsideUserMobile.vue';
21
+ export { default as AsideUserMobilePopover } from './mobile/AsideUserMobilePopover.vue';
22
+ export { default as HeaderRightMobile } from './mobile/HeaderRightMobile.vue';
23
+ export { default as MobileMenuToggle } from './mobile/MobileMenuToggle.vue';
@@ -0,0 +1,49 @@
1
+ import { default as a } from "./AppSelect.vue.js";
2
+ import { default as f } from "./AsideBar.vue.js";
3
+ import { default as d } from "./AsideSubMenuItem.vue.js";
4
+ import { default as u } from "./AsideSubMenus.vue.js";
5
+ import { default as p } from "./AsideTabMenus.vue.js";
6
+ import { default as i } from "./AsideUser.vue.js";
7
+ import { default as M } from "./HeaderBar.vue.js";
8
+ import { default as g } from "./HeaderMenuToggle.vue.js";
9
+ import { default as c } from "./LanguageSelect.vue.js";
10
+ import { default as T } from "./LayoutBreadcrumb.vue.js";
11
+ import { default as I } from "./MenuDrawer.vue.js";
12
+ /* empty css */
13
+ import { default as U } from "./MenuItemIcon.vue.js";
14
+ import { default as v } from "./NavIconBtn.vue.js";
15
+ import { default as R } from "./SHeaderRight.vue.js";
16
+ import { default as y } from "./ThemeToggle.vue.js";
17
+ import { default as D } from "./TimezoneSelect.vue.js";
18
+ import { default as P } from "./UserInfo.vue.js";
19
+ import { default as k } from "./mobile/AppSelectMobile.vue.js";
20
+ import { default as C } from "./mobile/AsideBarMobile.vue.js";
21
+ import { default as F } from "./mobile/AsideUserMobile.vue.js";
22
+ import { default as J } from "./mobile/AsideUserMobilePopover.vue.js";
23
+ import { default as O } from "./mobile/HeaderRightMobile.vue.js";
24
+ import { default as V } from "./mobile/MobileMenuToggle.vue.js";
25
+ export {
26
+ a as AppSelect,
27
+ k as AppSelectMobile,
28
+ f as AsideBar,
29
+ C as AsideBarMobile,
30
+ d as AsideSubMenuItem,
31
+ u as AsideSubMenus,
32
+ p as AsideTabMenus,
33
+ i as AsideUser,
34
+ F as AsideUserMobile,
35
+ J as AsideUserMobilePopover,
36
+ M as HeaderBar,
37
+ g as HeaderMenuToggle,
38
+ O as HeaderRightMobile,
39
+ c as LanguageSelect,
40
+ T as LayoutBreadcrumb,
41
+ I as MenuDrawer,
42
+ U as MenuItemIcon,
43
+ V as MobileMenuToggle,
44
+ v as NavIconBtn,
45
+ R as SHeaderRight,
46
+ y as ThemeToggle,
47
+ D as TimezoneSelect,
48
+ P as UserInfo
49
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
@@ -0,0 +1,60 @@
1
+ import { defineComponent as C, computed as x, resolveComponent as p, createElementBlock as l, createCommentVNode as A, unref as o, openBlock as e, createVNode as B, withCtx as i, Fragment as c, renderList as f, createBlock as u } from "vue";
2
+ import { useApp as I } from "../../hooks/useApp.js";
3
+ import { injectLayoutContext as w } from "../../hooks/useState.js";
4
+ const L = {
5
+ key: 0,
6
+ class: "w-full px-3"
7
+ }, F = /* @__PURE__ */ C({
8
+ __name: "AppSelectMobile",
9
+ setup(N) {
10
+ const { currentAppId: v } = w(), { appList: s, getAppPath: a, findAppById: h } = I(), g = x(() => {
11
+ const t = h(v.value);
12
+ return t ? a(t) : "";
13
+ }), k = (t) => {
14
+ t && (location.href = t);
15
+ };
16
+ return (t, P) => {
17
+ var d;
18
+ const _ = p("el-option"), y = p("el-option-group"), b = p("el-select");
19
+ return (d = o(s)) != null && d.length ? (e(), l("div", L, [
20
+ B(b, {
21
+ "model-value": g.value,
22
+ class: "w-full",
23
+ onChange: k
24
+ }, {
25
+ default: i(() => [
26
+ (e(!0), l(c, null, f(o(s), (n) => {
27
+ var m;
28
+ return e(), l(c, {
29
+ key: n.appId
30
+ }, [
31
+ (m = n.children) != null && m.length ? (e(), u(y, {
32
+ key: 0,
33
+ label: n.name
34
+ }, {
35
+ default: i(() => [
36
+ (e(!0), l(c, null, f(n.children, (r) => (e(), u(_, {
37
+ key: r.appId,
38
+ label: r.name,
39
+ value: o(a)(r),
40
+ style: { "padding-left": "30px" }
41
+ }, null, 8, ["label", "value"]))), 128))
42
+ ]),
43
+ _: 2
44
+ }, 1032, ["label"])) : (e(), u(_, {
45
+ key: 1,
46
+ label: n.name,
47
+ value: o(a)(n)
48
+ }, null, 8, ["label", "value"]))
49
+ ], 64);
50
+ }), 128))
51
+ ]),
52
+ _: 1
53
+ }, 8, ["model-value"])
54
+ ])) : A("", !0);
55
+ };
56
+ }
57
+ });
58
+ export {
59
+ F as default
60
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./AppSelectMobile.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1 @@
1
+ .aside-bar-mobile[data-v-dede8d1e]{border-right:1px solid var(--ui-sidebar-border);background:var(--ui-sidebar-bg);color:var(--ui-sidebar-foreground);box-shadow:var(--ui-shadow-pop)}.aside-bar-mobile__head[data-v-dede8d1e]{border-bottom:1px solid var(--ui-sidebar-border)}.aside-bar-mobile__close[data-v-dede8d1e]{color:var(--ui-text-muted)}
@@ -0,0 +1,21 @@
1
+ declare function __VLS_template(): {
2
+ attrs: Partial<{}>;
3
+ slots: {
4
+ 'sidebar-foot'?(_: {}): any;
5
+ };
6
+ refs: {
7
+ leftScrollRef: unknown;
8
+ };
9
+ rootEl: any;
10
+ };
11
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
12
+ declare const __VLS_component: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
13
+ leftScrollRef: unknown;
14
+ }, any>;
15
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
16
+ export default _default;
17
+ type __VLS_WithTemplateSlots<T, S> = T & {
18
+ new (): {
19
+ $slots: S;
20
+ };
21
+ };
@@ -0,0 +1,7 @@
1
+ import o from "./AsideBarMobile.vue2.js";
2
+ /* empty css */
3
+ import e from "../../../_virtual/_plugin-vue_export-helper.js";
4
+ const a = /* @__PURE__ */ e(o, [["__scopeId", "data-v-dede8d1e"]]);
5
+ export {
6
+ a as default
7
+ };
@@ -0,0 +1,47 @@
1
+ import { defineComponent as d, resolveComponent as s, createElementBlock as _, createCommentVNode as f, unref as o, openBlock as p, normalizeClass as u, createElementVNode as l, createVNode as e, renderSlot as b, withCtx as i } from "vue";
2
+ import { Fold as x } from "@element-plus/icons-vue";
3
+ import { injectLayoutContext as h } from "../../hooks/useState.js";
4
+ import v from "../AsideSubMenus.vue.js";
5
+ import C from "./AppSelectMobile.vue.js";
6
+ import g from "./AsideUserMobile.vue.js";
7
+ const k = { class: "aside-bar-mobile__head flex justify-between items-center pt-4 pb-4 px-4" }, w = { class: "p-3" }, A = /* @__PURE__ */ d({
8
+ __name: "AsideBarMobile",
9
+ setup($) {
10
+ const { menus: n, sideOpen: t } = h(), a = () => void (t.value = !t.value);
11
+ return (r, y) => {
12
+ const m = s("el-icon"), c = s("el-scrollbar");
13
+ return o(n).length && !r.$route.meta.hideSidebar ? (p(), _("div", {
14
+ key: 0,
15
+ class: u(["aside-bar-mobile flex flex-col h-full min-h-0 w-1/2 min-w-70 fixed top-0 left-0 z-200 transition-all", [o(t) ? "translate-x-[0px]" : "translate-x-[-100%]"]])
16
+ }, [
17
+ l("div", k, [
18
+ l("div", {
19
+ class: "aside-bar-mobile__close text-lg cursor-pointer p-2 leading-4",
20
+ onClick: a
21
+ }, [
22
+ e(m, null, {
23
+ default: i(() => [
24
+ e(o(x))
25
+ ]),
26
+ _: 1
27
+ })
28
+ ]),
29
+ e(C)
30
+ ]),
31
+ e(c, { ref: "leftScrollRef" }, {
32
+ default: i(() => [
33
+ l("div", w, [
34
+ e(v, { menus: o(n) }, null, 8, ["menus"])
35
+ ])
36
+ ]),
37
+ _: 1
38
+ }, 512),
39
+ b(r.$slots, "sidebar-foot", {}, void 0, !0),
40
+ e(g)
41
+ ], 2)) : f("", !0);
42
+ };
43
+ }
44
+ });
45
+ export {
46
+ A as default
47
+ };
@@ -0,0 +1 @@
1
+ .aside-user-mobile[data-v-c56964a5]{width:100%;position:relative;display:flex;align-items:center;gap:8px;padding:16px;border-top:1px solid var(--ui-sidebar-border);color:var(--ui-sidebar-foreground);cursor:pointer}.aside-user-mobile__icon[data-v-c56964a5]{color:var(--ui-text-muted)}
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import o from "./AsideUserMobile.vue2.js";
2
+ /* empty css */
3
+ import r from "../../../_virtual/_plugin-vue_export-helper.js";
4
+ const a = /* @__PURE__ */ r(o, [["__scopeId", "data-v-c56964a5"]]);
5
+ export {
6
+ a as default
7
+ };
@@ -0,0 +1,56 @@
1
+ import { defineComponent as v, computed as n, resolveComponent as f, createBlock as g, createElementBlock as b, openBlock as u, withCtx as r, createElementVNode as o, toDisplayString as y, createVNode as t, unref as c } from "vue";
2
+ import { ArrowRight as d } from "@element-plus/icons-vue";
3
+ import { useSetting as h } from "../../hooks/useSetting.js";
4
+ import { redirectToLayoutLogin as k } from "../../utils/index.js";
5
+ import x from "./AsideUserMobilePopover.vue.js";
6
+ const C = { class: "aside-user-mobile" }, L = { class: "flex-1" }, A = { class: "absolute right-4 top-1/2 -translate-y-1/2" }, B = { class: "absolute right-4 top-1/2 -translate-y-1/2" }, T = /* @__PURE__ */ v({
7
+ __name: "AsideUserMobile",
8
+ setup(U) {
9
+ const i = h(), s = n(() => i.value.user || {}), m = n(() => !!(s.value.id || s.value.userId)), _ = n(() => s.value.name || s.value.username), p = () => {
10
+ var l, e;
11
+ (e = (l = i.value).onLogin) != null && e.call(l) || k(i.value);
12
+ };
13
+ return (l, e) => {
14
+ const a = f("el-icon");
15
+ return m.value ? (u(), g(x, { key: 0 }, {
16
+ reference: r(() => [
17
+ o("div", C, [
18
+ e[0] || (e[0] = o("div", { class: "aside-user-mobile__icon text-lg" }, [
19
+ o("i", { class: "metisicon-yonghu1" })
20
+ ], -1)),
21
+ o("div", L, y(_.value), 1),
22
+ o("div", A, [
23
+ t(a, null, {
24
+ default: r(() => [
25
+ t(c(d))
26
+ ]),
27
+ _: 1
28
+ })
29
+ ])
30
+ ])
31
+ ]),
32
+ _: 1
33
+ })) : (u(), b("div", {
34
+ key: 1,
35
+ class: "aside-user-mobile",
36
+ onClick: p
37
+ }, [
38
+ e[1] || (e[1] = o("div", { class: "aside-user-mobile__icon text-lg" }, [
39
+ o("i", { class: "metisicon-yonghu1" })
40
+ ], -1)),
41
+ e[2] || (e[2] = o("div", { class: "flex-1" }, "登录/注册", -1)),
42
+ o("div", B, [
43
+ t(a, null, {
44
+ default: r(() => [
45
+ t(c(d))
46
+ ]),
47
+ _: 1
48
+ })
49
+ ])
50
+ ]));
51
+ };
52
+ }
53
+ });
54
+ export {
55
+ T as default
56
+ };
@@ -0,0 +1 @@
1
+ .mobile-user-popover[data-v-87e082b1]{display:grid;gap:4px}.mobile-user-popover__item[data-v-87e082b1]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-radius:var(--ui-radius-control);color:var(--ui-text-primary);cursor:pointer;transition:background var(--ui-transition-fast),color var(--ui-transition-fast)}.mobile-user-popover__item[data-v-87e082b1]:hover{background:var(--ui-bg-muted)}.mobile-user-popover__item--danger[data-v-87e082b1]{color:var(--el-color-danger)}.mobile-user-popover__divider[data-v-87e082b1]{height:1px;background:var(--ui-border-default);margin:2px 0}
@@ -0,0 +1,17 @@
1
+ declare function __VLS_template(): {
2
+ attrs: Partial<{}>;
3
+ slots: {
4
+ reference?(_: {}): any;
5
+ };
6
+ refs: {};
7
+ rootEl: any;
8
+ };
9
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
10
+ declare const __VLS_component: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
11
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
12
+ export default _default;
13
+ type __VLS_WithTemplateSlots<T, S> = T & {
14
+ new (): {
15
+ $slots: S;
16
+ };
17
+ };
@@ -0,0 +1,7 @@
1
+ import o from "./AsideUserMobilePopover.vue2.js";
2
+ /* empty css */
3
+ import e from "../../../_virtual/_plugin-vue_export-helper.js";
4
+ const s = /* @__PURE__ */ e(o, [["__scopeId", "data-v-87e082b1"]]);
5
+ export {
6
+ s as default
7
+ };
@@ -0,0 +1,52 @@
1
+ import { defineComponent as a, computed as c, resolveComponent as v, createBlock as d, openBlock as f, withCtx as n, createElementVNode as o, createVNode as _, toDisplayString as i, unref as s, renderSlot as g } from "vue";
2
+ import b from "../../../locales/index.js";
3
+ import { useSetting as C } from "../../hooks/useSetting.js";
4
+ import { getLayoutUserCenterPath as L, redirectToLayoutLogin as y } from "../../utils/index.js";
5
+ import h from "../LanguageSelect.vue.js";
6
+ const k = { class: "mobile-user-popover" }, P = ["href"], V = /* @__PURE__ */ a({
7
+ __name: "AsideUserMobilePopover",
8
+ setup(S) {
9
+ const { t: l } = b.global, t = C(), p = c(() => L(t.value)), u = () => {
10
+ var r, e;
11
+ Promise.resolve((e = (r = t.value).onLogout) == null ? void 0 : e.call(r)).finally(() => {
12
+ t.value.onLogout || y(t.value);
13
+ });
14
+ };
15
+ return (r, e) => {
16
+ const m = v("el-popover");
17
+ return f(), d(m, {
18
+ width: 220,
19
+ trigger: "click",
20
+ "popper-class": "top-userinfo-popover"
21
+ }, {
22
+ reference: n(() => [
23
+ g(r.$slots, "reference", {}, void 0, !0)
24
+ ]),
25
+ default: n(() => [
26
+ o("div", k, [
27
+ o("a", {
28
+ href: p.value,
29
+ class: "mobile-user-popover__item"
30
+ }, [
31
+ e[0] || (e[0] = o("i", { class: "metisicon-yonghu1" }, null, -1)),
32
+ o("span", null, i(s(l)("admin.label.profile")), 1)
33
+ ], 8, P),
34
+ _(h),
35
+ e[2] || (e[2] = o("div", { class: "mobile-user-popover__divider" }, null, -1)),
36
+ o("div", {
37
+ class: "mobile-user-popover__item mobile-user-popover__item--danger",
38
+ onClick: u
39
+ }, [
40
+ e[1] || (e[1] = o("i", { class: "metisicon-exit-full" }, null, -1)),
41
+ o("span", null, i(s(l)("common.btn.logout")), 1)
42
+ ])
43
+ ])
44
+ ]),
45
+ _: 3
46
+ });
47
+ };
48
+ }
49
+ });
50
+ export {
51
+ V as default
52
+ };
@@ -0,0 +1 @@
1
+ .header-right-mobile[data-v-03748150]{--nav-icon-btn-size: 40px;display:flex;align-items:center;gap:10px;padding-right:4px}.header-right-mobile__action[data-v-03748150]{--nav-icon-btn-color: var(--ui-topnav-foreground);--nav-icon-btn-bg: var(--ui-topnav-surface);--nav-icon-btn-border-color: var(--ui-topnav-border);--nav-icon-btn-hover-bg: var(--ui-topnav-hover);--nav-icon-btn-hover-color: var(--ui-topnav-foreground);--nav-icon-btn-hover-border-color: var(--ui-topnav-border)}
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
2
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import o from "./HeaderRightMobile.vue2.js";
2
+ /* empty css */
3
+ import t from "../../../_virtual/_plugin-vue_export-helper.js";
4
+ const i = /* @__PURE__ */ t(o, [["__scopeId", "data-v-03748150"]]);
5
+ export {
6
+ i as default
7
+ };