@me-framework/me-ui-antdv-next 0.0.24 → 0.0.28

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 (108) hide show
  1. package/README.md +41 -0
  2. package/dist/base/index.css +1 -0
  3. package/dist/base/index.js +0 -0
  4. package/dist/base.d.ts +1 -0
  5. package/dist/body/index.css +1 -0
  6. package/dist/body/index.js +153 -0
  7. package/dist/{components/body → body}/index.vue.d.ts +3 -3
  8. package/dist/box/index.css +1 -0
  9. package/dist/box/index.js +170 -0
  10. package/dist/breadcrumb/index.css +1 -0
  11. package/dist/breadcrumb/index.js +99 -0
  12. package/dist/card/index.css +1 -0
  13. package/dist/card/index.js +154 -0
  14. package/dist/chunks/icon-CXjgApCy.js +156 -0
  15. package/dist/chunks/input-icon-selector-BrrR4KK6.js +228 -0
  16. package/dist/chunks/message-D2zYiiQe.js +290 -0
  17. package/dist/chunks/modal-KBZYtIHD.js +178 -0
  18. package/dist/icon/index.css +1 -0
  19. package/dist/icon/index.js +27 -0
  20. package/dist/index.d.ts +34 -34
  21. package/dist/input-gps/index.css +1 -0
  22. package/dist/input-gps/index.js +303 -0
  23. package/dist/{components/input-gps → input-gps}/index.vue.d.ts +3 -1
  24. package/dist/{components/input-gps → input-gps}/map.vue.d.ts +1 -1
  25. package/dist/{components/input-gps → input-gps}/types.d.ts +9 -5
  26. package/dist/input-icon-selector/index.css +1 -0
  27. package/dist/input-icon-selector/index.js +2 -0
  28. package/dist/input-radio/index.css +1 -0
  29. package/dist/input-radio/index.js +96 -0
  30. package/dist/{components/input-radio → input-radio}/index.vue.d.ts +3 -3
  31. package/dist/load-json/index.css +1 -0
  32. package/dist/load-json/index.js +211 -0
  33. package/dist/login-page/index.css +1 -0
  34. package/dist/login-page/index.js +272 -0
  35. package/dist/me-ui-antdv-next.js +62 -48
  36. package/dist/me-ui-antdv-next.umd.cjs +2 -2
  37. package/dist/menu/index.css +1 -0
  38. package/dist/menu/index.js +465 -0
  39. package/dist/message/index.css +1 -0
  40. package/dist/message/index.js +2 -0
  41. package/dist/modal/index.css +1 -0
  42. package/dist/modal/index.js +2 -0
  43. package/dist/nav/index.css +1 -0
  44. package/dist/nav/index.js +560 -0
  45. package/dist/resolver/index.d.ts +7 -0
  46. package/dist/resolver/index.js +39 -0
  47. package/dist/resolver/resolver-map.d.ts +6 -0
  48. package/dist/resolver/resolver-type.d.ts +19 -0
  49. package/dist/resolver.d.ts +2 -0
  50. package/dist/shims-vue.d.ts +3 -0
  51. package/dist/skeleton/index.css +1 -0
  52. package/dist/skeleton/index.js +141 -0
  53. package/dist/{me-ui-antdv-next.css → style.css} +1 -1
  54. package/dist/styles/base.d.ts +0 -0
  55. package/dist/tree-menu/index.css +1 -0
  56. package/dist/tree-menu/index.js +890 -0
  57. package/package.json +18 -9
  58. package/dist/{components/body → body}/index.d.ts +0 -0
  59. package/dist/{components/body → body}/types.d.ts +0 -0
  60. package/dist/{components/box → box}/index.d.ts +0 -0
  61. package/dist/{components/box → box}/index.vue.d.ts +2 -2
  62. package/dist/{components/box → box}/types.d.ts +0 -0
  63. package/dist/{components/breadcrumb → breadcrumb}/index.d.ts +0 -0
  64. package/dist/{components/breadcrumb → breadcrumb}/index.vue.d.ts +0 -0
  65. package/dist/{components/breadcrumb → breadcrumb}/types.d.ts +0 -0
  66. package/dist/{components/card → card}/index.d.ts +0 -0
  67. package/dist/{components/card → card}/index.vue.d.ts +4 -4
  68. package/dist/{components/card → card}/types.d.ts +0 -0
  69. package/dist/{components/icon → icon}/index.d.ts +0 -0
  70. package/dist/{components/icon → icon}/index.vue.d.ts +2 -2
  71. package/dist/{components/icon → icon}/types.d.ts +0 -0
  72. package/dist/{components/input-gps → input-gps}/index.d.ts +0 -0
  73. package/dist/{components/input-icon-selector → input-icon-selector}/index.d.ts +0 -0
  74. package/dist/{components/input-icon-selector → input-icon-selector}/index.vue.d.ts +5 -5
  75. package/dist/{components/input-icon-selector → input-icon-selector}/types.d.ts +0 -0
  76. package/dist/{components/input-radio → input-radio}/index.d.ts +0 -0
  77. package/dist/{components/input-radio → input-radio}/types.d.ts +0 -0
  78. package/dist/{components/load-json → load-json}/index.d.ts +0 -0
  79. package/dist/{components/load-json → load-json}/index.vue.d.ts +1 -1
  80. package/dist/{components/load-json → load-json}/types.d.ts +0 -0
  81. package/dist/{components/login-page → login-page}/index.d.ts +0 -0
  82. package/dist/{components/login-page → login-page}/index.vue.d.ts +0 -0
  83. package/dist/{components/login-page → login-page}/types.d.ts +0 -0
  84. package/dist/{components/menu → menu}/MenuTreeItem.vue.d.ts +0 -0
  85. package/dist/{components/menu → menu}/index.d.ts +0 -0
  86. package/dist/{components/menu → menu}/index.vue.d.ts +2 -2
  87. package/dist/{components/menu → menu}/types.d.ts +0 -0
  88. package/dist/{components/message → message}/index.d.ts +0 -0
  89. package/dist/{components/message → message}/index.vue.d.ts +4 -4
  90. package/dist/{components/message → message}/types.d.ts +0 -0
  91. package/dist/{components/modal → modal}/index.d.ts +0 -0
  92. package/dist/{components/modal → modal}/index.vue.d.ts +5 -5
  93. package/dist/{components/modal → modal}/types.d.ts +0 -0
  94. package/dist/{components/nav → nav}/composables/useNavDrag.d.ts +0 -0
  95. package/dist/{components/nav → nav}/composables/useNavScroll.d.ts +0 -0
  96. package/dist/{components/nav → nav}/index.d.ts +0 -0
  97. package/dist/{components/nav → nav}/index.vue.d.ts +5 -5
  98. package/dist/{components/nav → nav}/types.d.ts +0 -0
  99. package/dist/{components/skeleton → skeleton}/index.d.ts +0 -0
  100. package/dist/{components/skeleton → skeleton}/index.vue.d.ts +0 -0
  101. package/dist/{components/skeleton → skeleton}/types.d.ts +0 -0
  102. package/dist/{components/tree-menu → tree-menu}/TreeMenuActions.vue.d.ts +0 -0
  103. package/dist/{components/tree-menu → tree-menu}/TreeMenuCard.vue.d.ts +1 -1
  104. package/dist/{components/tree-menu → tree-menu}/TreeMenuEdit.vue.d.ts +2 -2
  105. package/dist/{components/tree-menu → tree-menu}/TreeMenuNode.vue.d.ts +0 -0
  106. package/dist/{components/tree-menu → tree-menu}/index.d.ts +0 -0
  107. package/dist/{components/tree-menu → tree-menu}/index.vue.d.ts +3 -3
  108. /package/dist/{components/tree-menu → tree-menu}/types.d.ts +0 -0
@@ -0,0 +1,560 @@
1
+ import { t as e } from "../chunks/icon-CXjgApCy.js";
2
+ import { Fragment as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createVNode as s, defineComponent as c, h as l, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, onMounted as m, openBlock as h, ref as g, renderList as _, renderSlot as v, resolveComponent as y, resolveDynamicComponent as b, toDisplayString as x, unref as S, watch as C, withCtx as w, withModifiers as T } from "vue";
3
+ import * as E from "@lucide/vue";
4
+ //#region src/components/nav/composables/useNavScroll.ts
5
+ function ee(e, t) {
6
+ let n = g(0), r = g(!1), i = g(!1), a = g(!1), o = g(!1), s = /* @__PURE__ */ new Set(), c = (e) => {
7
+ o.value = !0, e();
8
+ let t = window.setTimeout(() => {
9
+ o.value = !1, s.delete(t);
10
+ }, 300);
11
+ s.add(t);
12
+ }, l = () => {
13
+ if (!e.value || !t.value) {
14
+ r.value = !1, i.value = !1;
15
+ return;
16
+ }
17
+ let o = e.value.clientWidth, s = t.value.scrollWidth;
18
+ if (s <= o) {
19
+ r.value = !1, i.value = !1, a.value = !1;
20
+ return;
21
+ }
22
+ a.value = !0, r.value = n.value < 0, i.value = s + n.value > o;
23
+ }, u = () => {
24
+ if (!e.value || !t.value) return;
25
+ let r = e.value.clientWidth, i = t.value.scrollWidth;
26
+ if (i <= r) {
27
+ n.value = 0;
28
+ return;
29
+ }
30
+ let a = r - i;
31
+ n.value < a && (n.value = a), n.value > 0 && (n.value = 0);
32
+ };
33
+ return p(() => {
34
+ s.forEach((e) => clearTimeout(e)), s.clear();
35
+ }), {
36
+ translateX: n,
37
+ showLeftArrow: r,
38
+ showRightArrow: i,
39
+ isSmooth: o,
40
+ isScrollable: a,
41
+ withSmooth: c,
42
+ updateArrowVisibility: l,
43
+ clampTranslateX: u,
44
+ scrollLeft: () => {
45
+ c(() => {
46
+ n.value += 200, u(), l();
47
+ });
48
+ },
49
+ scrollRight: () => {
50
+ c(() => {
51
+ n.value -= 200, u(), l();
52
+ });
53
+ },
54
+ canScroll: () => !e.value || !t.value ? !1 : t.value.scrollWidth > e.value.clientWidth
55
+ };
56
+ }
57
+ //#endregion
58
+ //#region src/components/nav/composables/useNavDrag.ts
59
+ function te(e) {
60
+ let { canScroll: t, translateX: n, clampTranslateX: r, updateArrowVisibility: i } = e, a = g(!1), o = 0, s = 0, c = !1, l = 0, u = 0, d = 0, f = null, m = .05, h = () => {
61
+ f !== null && (cancelAnimationFrame(f), f = null);
62
+ }, _ = (e, t) => {
63
+ if (h(), Math.abs(d) < m) return;
64
+ let a = () => {
65
+ if (d *= .95, Math.abs(d) < m) {
66
+ f = null;
67
+ return;
68
+ }
69
+ n.value += d * 16, r(), i();
70
+ let o = e?.clientWidth ?? 0, s = t?.scrollWidth ?? 0;
71
+ if (n.value >= 0 || n.value <= o - s) {
72
+ f = null;
73
+ return;
74
+ }
75
+ f = requestAnimationFrame(a);
76
+ };
77
+ f = requestAnimationFrame(a);
78
+ }, v = (e) => {
79
+ let t = Date.now(), n = t - u;
80
+ n > 0 && (d = (e - l) / n), l = e, u = t;
81
+ }, y = (e) => {
82
+ t() && e.button === 0 && (h(), a.value = !0, c = !1, o = e.clientX, s = n.value, l = e.clientX, u = Date.now(), d = 0, document.addEventListener("mousemove", b), document.addEventListener("mouseup", C));
83
+ }, b = (e) => {
84
+ if (!a.value) return;
85
+ let t = e.clientX - o;
86
+ !c && Math.abs(t) > 5 && (c = !0), v(e.clientX), n.value = s + t, r(), i();
87
+ }, x = null, S = null, C = () => {
88
+ a.value = !1, document.removeEventListener("mousemove", b), document.removeEventListener("mouseup", C), c && _(x, S);
89
+ }, w = (e) => {
90
+ if (!t() || e.touches.length !== 1) return;
91
+ let r = e.touches[0];
92
+ h(), a.value = !0, c = !1, o = r.clientX, s = n.value, l = r.clientX, u = Date.now(), d = 0, document.addEventListener("touchmove", T, { passive: !1 }), document.addEventListener("touchend", E);
93
+ }, T = (e) => {
94
+ if (!a.value || e.touches.length !== 1) return;
95
+ let t = e.touches[0], l = t.clientX - o;
96
+ !c && Math.abs(l) > 5 && (c = !0), c && e.preventDefault(), v(t.clientX), n.value = s + l, r(), i();
97
+ }, E = () => {
98
+ a.value = !1, document.removeEventListener("touchmove", T), document.removeEventListener("touchend", E), c && _(x, S);
99
+ };
100
+ return p(() => {
101
+ h(), document.removeEventListener("mousemove", b), document.removeEventListener("mouseup", C), document.removeEventListener("touchmove", T), document.removeEventListener("touchend", E);
102
+ }), {
103
+ isDragging: a,
104
+ handleDragStart: y,
105
+ handleTouchStart: w,
106
+ setDragRefs: (e, t) => {
107
+ x = e, S = t;
108
+ },
109
+ getHasDragged: () => c,
110
+ resetHasDragged: () => {
111
+ c = !1;
112
+ },
113
+ stopMomentum: h
114
+ };
115
+ }
116
+ //#endregion
117
+ //#region src/components/nav/index.vue?vue&type=script&setup=true&lang.ts
118
+ var ne = {
119
+ key: 0,
120
+ class: "me-nav__slot me-nav__slot--left"
121
+ }, re = {
122
+ key: 0,
123
+ class: "me-nav__fade me-nav__fade--left"
124
+ }, ie = {
125
+ key: 0,
126
+ class: "me-nav__empty"
127
+ }, ae = [
128
+ "aria-selected",
129
+ "tabindex",
130
+ "onClick"
131
+ ], oe = {
132
+ key: 1,
133
+ class: "me-nav__tab-label"
134
+ }, se = {
135
+ key: 1,
136
+ class: "me-nav__tab-title"
137
+ }, ce = ["onClick"], le = {
138
+ key: 1,
139
+ class: "me-nav__fade me-nav__fade--right"
140
+ }, ue = {
141
+ key: 1,
142
+ class: "me-nav__slot me-nav__slot--right"
143
+ }, D = /* @__PURE__ */ c({
144
+ name: "MeNav",
145
+ __name: "index",
146
+ props: {
147
+ tabList: { default: () => [] },
148
+ contextMenu: {
149
+ type: [Array, Function],
150
+ default: void 0
151
+ },
152
+ tabProps: { default: () => ({}) },
153
+ modelValue: { default: "" },
154
+ width: { default: "" },
155
+ scrollTargetOffset: { default: .1 },
156
+ showLockMenu: {
157
+ type: Boolean,
158
+ default: !1
159
+ },
160
+ titleMaxWidth: { default: void 0 },
161
+ keyboard: {
162
+ type: Boolean,
163
+ default: !0
164
+ },
165
+ closable: {
166
+ type: Boolean,
167
+ default: !0
168
+ },
169
+ activeAfterRemove: { default: "prev" },
170
+ builtinMenu: { default: () => [] },
171
+ beforeClose: {
172
+ type: Function,
173
+ default: void 0
174
+ },
175
+ edgeFade: {
176
+ type: Boolean,
177
+ default: !0
178
+ }
179
+ },
180
+ emits: [
181
+ "update:modelValue",
182
+ "tab-change",
183
+ "tab-remove",
184
+ "toggle-lock",
185
+ "scroll",
186
+ "contextmenu",
187
+ "refresh",
188
+ "close-current",
189
+ "close-others",
190
+ "close-left",
191
+ "close-right",
192
+ "close-all"
193
+ ],
194
+ setup(c, { expose: D, emit: O }) {
195
+ let k = c, A = O, j = n(() => k.tabProps.key ?? "path"), M = n(() => k.tabProps.label ?? "title"), N = n(() => k.tabProps.isHome ?? "isHome"), P = n(() => k.tabProps.lock ?? "lock"), F = n(() => k.tabProps.icon ?? "icon"), de = n(() => k.width ? typeof k.width == "number" ? `${k.width}px` : k.width : ""), fe = n(() => k.titleMaxWidth === void 0 ? {} : { maxWidth: typeof k.titleMaxWidth == "number" ? `${k.titleMaxWidth}px` : k.titleMaxWidth }), pe = n(() => k.titleMaxWidth !== void 0), I = (e) => e ? (typeof e == "object" || typeof e == "function") && typeof e != "string" : !1, me = g(null), L = g(null), R = g(null), z = g(k.modelValue), { translateX: B, showLeftArrow: V, showRightArrow: H, isSmooth: U, isScrollable: he, withSmooth: ge, updateArrowVisibility: W, clampTranslateX: G, scrollLeft: _e, scrollRight: ve, canScroll: ye } = ee(L, R), K = null;
196
+ C(B, (e) => {
197
+ K === null && (K = requestAnimationFrame(() => {
198
+ K = null, A("scroll", e);
199
+ }));
200
+ }), p(() => {
201
+ K !== null && cancelAnimationFrame(K);
202
+ });
203
+ let { isDragging: be, handleDragStart: xe, handleTouchStart: Se, setDragRefs: Ce, getHasDragged: we, resetHasDragged: Te } = te({
204
+ canScroll: ye,
205
+ translateX: B,
206
+ clampTranslateX: G,
207
+ updateArrowVisibility: W
208
+ }), q = 0, J = null, Ee = (e) => {
209
+ if (!ye()) return;
210
+ let t = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? e.deltaX : e.deltaY;
211
+ t !== 0 && (e.preventDefault(), q += t, J === null && (J = requestAnimationFrame(() => {
212
+ J = null, B.value -= q, q = 0, G(), W();
213
+ })));
214
+ };
215
+ p(() => {
216
+ J !== null && cancelAnimationFrame(J);
217
+ });
218
+ let Y = /* @__PURE__ */ new Map(), De = (e, t) => {
219
+ t && t instanceof HTMLElement && Y.set(e, t);
220
+ };
221
+ C(() => k.tabList, (e) => {
222
+ let t = new Set(e.map((e) => e[j.value]));
223
+ for (let e of Y.keys()) t.has(e) || Y.delete(e);
224
+ }, { flush: "post" });
225
+ let Oe = (e) => {
226
+ u(() => {
227
+ let t = Y.get(e);
228
+ if (!t || !L.value || !R.value) return;
229
+ let n = L.value.getBoundingClientRect(), r = t.getBoundingClientRect();
230
+ if (r.left >= n.left && r.right <= n.right) return;
231
+ let i = k.scrollTargetOffset, a = i <= 1 ? n.width * i : i, o;
232
+ o = r.left < n.left ? r.left - n.left - a : r.right - n.right + a, !(Math.abs(o) < 1) && (U.value = !0, requestAnimationFrame(() => {
233
+ requestAnimationFrame(() => {
234
+ B.value -= o, G(), W(), setTimeout(() => {
235
+ U.value = !1;
236
+ }, 300);
237
+ });
238
+ }));
239
+ });
240
+ }, X = (e) => {
241
+ let t = e ?? z.value;
242
+ t && Oe(t);
243
+ }, ke = () => {
244
+ ge(() => {
245
+ B.value = 0, G(), W();
246
+ });
247
+ }, Ae = () => {
248
+ ge(() => {
249
+ !L.value || !R.value || (B.value = L.value.clientWidth - R.value.scrollWidth, G(), W());
250
+ });
251
+ }, Z = (e) => k.closable ? !e[N.value] && !e[P.value] : !1, je = {
252
+ refresh: "RefreshCw",
253
+ "close-current": "X",
254
+ "close-others": "Layers",
255
+ "close-left": "PanelLeftClose",
256
+ "close-right": "PanelRightClose",
257
+ "close-all": "SquareX"
258
+ }, Me = {
259
+ refresh: "刷新当前",
260
+ "close-current": "关闭当前",
261
+ "close-others": "关闭其他",
262
+ "close-left": "关闭左侧",
263
+ "close-right": "关闭右侧",
264
+ "close-all": "关闭全部"
265
+ }, Ne = {
266
+ "toggle-lock": !0,
267
+ refresh: !1,
268
+ "close-current": !1,
269
+ "close-others": !0,
270
+ "close-left": !1,
271
+ "close-right": !0,
272
+ "close-all": !1
273
+ }, Pe = (e, t) => k.contextMenu === void 0 ? [] : typeof k.contextMenu == "function" ? k.contextMenu(e, t) ?? [] : k.contextMenu, Fe = (e, t) => {
274
+ if (e[N.value]) return { items: [] };
275
+ let n = [], r = e[j.value];
276
+ if (k.showLockMenu) {
277
+ let i = e[P.value];
278
+ n.push({
279
+ key: "toggle-lock",
280
+ label: i ? "解锁" : "锁定",
281
+ icon: () => l(E[i ? "LockKeyholeOpen" : "LockKeyhole"], { size: 14 }),
282
+ onClick: () => {
283
+ A("toggle-lock", {
284
+ name: r,
285
+ item: e,
286
+ index: t,
287
+ locked: !i
288
+ });
289
+ }
290
+ });
291
+ }
292
+ k.builtinMenu.length > 0 && (n.length > 0 && n.push({ type: "divider" }), n.length, k.builtinMenu.forEach((i, a) => {
293
+ if (i === "toggle-lock") {
294
+ let o = e[P.value];
295
+ n.push({
296
+ key: "toggle-lock",
297
+ label: o ? "解锁" : "锁定",
298
+ icon: () => l(E[o ? "LockKeyholeOpen" : "LockKeyhole"], { size: 14 }),
299
+ onClick: () => {
300
+ A("toggle-lock", {
301
+ name: r,
302
+ item: e,
303
+ index: t,
304
+ locked: !o
305
+ });
306
+ }
307
+ }), Ne[i] && a < k.builtinMenu.length - 1 && n.push({ type: "divider" });
308
+ return;
309
+ }
310
+ if (i === "close-current" && !Z(e)) return;
311
+ let o = !1;
312
+ i === "close-others" || i === "close-left" || i === "close-right" ? o = k.tabList.filter((e) => !e[N.value] && !e[P.value]).length <= 1 : i === "close-all" && (o = k.tabList.filter((e) => !e[N.value] && !e[P.value]).length === 0), n.push({
313
+ key: i,
314
+ label: Me[i],
315
+ icon: () => l(E[je[i]], { size: 14 }),
316
+ disabled: o,
317
+ onClick: () => {
318
+ A(i, {
319
+ name: r,
320
+ item: e,
321
+ index: t
322
+ });
323
+ }
324
+ }), Ne[i] && a < k.builtinMenu.length - 1 && n.push({ type: "divider" });
325
+ }));
326
+ let i = Pe(e, t);
327
+ return i.length > 0 && (n.length > 0 && n.push({ type: "divider" }), i.forEach((e, t) => {
328
+ e.divided && n.length > 0 && n[n.length - 1].type !== "divider" && n.push({ type: "divider" });
329
+ let r = {
330
+ key: `custom-${t}`,
331
+ label: e.label,
332
+ disabled: e.disabled,
333
+ onClick: () => e.onClick?.()
334
+ };
335
+ e.icon && (r.icon = I(e.icon) ? () => l(e.icon, { size: 14 }) : () => l(E[e.icon], { size: 14 })), n.push(r);
336
+ })), { items: n };
337
+ }, Ie = (e, t, n) => {
338
+ e && A("contextmenu", {
339
+ name: t[j.value],
340
+ item: t,
341
+ index: n,
342
+ event: {}
343
+ });
344
+ }, Le = (e, t) => {
345
+ if (we()) {
346
+ Te();
347
+ return;
348
+ }
349
+ let n = e[j.value];
350
+ if (z.value === n) {
351
+ X(n);
352
+ return;
353
+ }
354
+ z.value = n, A("update:modelValue", n), A("tab-change", {
355
+ name: n,
356
+ item: e,
357
+ index: t
358
+ }), X(n);
359
+ }, Q = async (e, t) => {
360
+ let n = t ?? k.tabList.findIndex((t) => t[j.value] === e), r = k.tabList[n];
361
+ if (r && Z(r)) {
362
+ if (k.beforeClose) try {
363
+ if (await k.beforeClose(r, n) === !1) return;
364
+ } catch {
365
+ return;
366
+ }
367
+ if (A("tab-remove", {
368
+ name: e,
369
+ item: r,
370
+ index: n
371
+ }), z.value === e && k.activeAfterRemove !== "none") {
372
+ let t = k.tabList.filter((t) => t[j.value] !== e);
373
+ if (t.length === 0) return;
374
+ let r;
375
+ if (r = k.activeAfterRemove === "next" ? t[n] ?? t[t.length - 1] : t[Math.max(0, n - 1)] ?? t[0], r) {
376
+ let e = r[j.value], t = k.tabList.findIndex((t) => t[j.value] === e);
377
+ z.value = e, A("update:modelValue", e), A("tab-change", {
378
+ name: e,
379
+ item: r,
380
+ index: t
381
+ });
382
+ }
383
+ }
384
+ }
385
+ }, Re = (e) => {
386
+ if (!k.keyboard || k.tabList.length === 0) return;
387
+ let t = k.tabList.findIndex((e) => e[j.value] === z.value);
388
+ if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
389
+ e.preventDefault();
390
+ let n = t + (e.key === "ArrowRight" ? 1 : -1);
391
+ n < 0 && (n = k.tabList.length - 1), n >= k.tabList.length && (n = 0);
392
+ let r = k.tabList[n];
393
+ if (r) {
394
+ let e = r[j.value];
395
+ z.value = e, A("update:modelValue", e), A("tab-change", {
396
+ name: e,
397
+ item: r,
398
+ index: n
399
+ }), X(e);
400
+ }
401
+ } else if ((e.key === "Delete" || e.key === "Backspace") && t > -1) {
402
+ let e = k.tabList[t];
403
+ e && Z(e) && Q(e[j.value], t);
404
+ }
405
+ };
406
+ C(() => k.modelValue, (e) => {
407
+ z.value = e, X(e);
408
+ }), C(() => k.tabList, () => {
409
+ u(() => {
410
+ X(z.value), W();
411
+ });
412
+ }, {
413
+ flush: "post",
414
+ deep: !0
415
+ }), C(() => k.width, () => {
416
+ u(() => {
417
+ G(), W(), X(z.value);
418
+ });
419
+ });
420
+ let $ = null, ze = () => {
421
+ G(), W(), X(z.value);
422
+ };
423
+ return m(() => {
424
+ Ce(L.value, R.value), u(() => {
425
+ W(), z.value && X(z.value);
426
+ }), typeof ResizeObserver < "u" && L.value && ($ = new ResizeObserver(() => {
427
+ ze();
428
+ }), $.observe(L.value));
429
+ }), p(() => {
430
+ $ &&= ($.disconnect(), null), Y.clear();
431
+ }), D({
432
+ scrollTo: X,
433
+ scrollToStart: ke,
434
+ scrollToEnd: Ae,
435
+ activeItem: n(() => k.tabList.find((e) => e[j.value] === z.value))
436
+ }), (n, l) => {
437
+ let u = y("a-tooltip"), p = y("a-dropdown");
438
+ return h(), a("div", {
439
+ class: "me-nav",
440
+ ref_key: "rootRef",
441
+ ref: me,
442
+ style: f({ width: de.value }),
443
+ role: "tablist",
444
+ onKeydown: Re,
445
+ onContextmenu: l[5] ||= T(() => {}, ["prevent"])
446
+ }, [
447
+ n.$slots.left ? (h(), a("div", ne, [v(n.$slots, "left")])) : i("", !0),
448
+ o("div", {
449
+ class: d(["me-nav__arrow me-nav__arrow--left", { "is-hidden": !S(V) }]),
450
+ role: "button",
451
+ "aria-label": "向左滚动",
452
+ onClick: l[0] ||= (...e) => S(_e) && S(_e)(...e)
453
+ }, [s(e, {
454
+ name: "ChevronLeft",
455
+ size: 14
456
+ })], 2),
457
+ o("div", {
458
+ class: d(["me-nav__scroll", {
459
+ "is-dragging": S(be),
460
+ "is-scrollable": S(he)
461
+ }]),
462
+ ref_key: "scrollRef",
463
+ ref: L,
464
+ onWheel: Ee,
465
+ onMousedown: l[1] ||= (...e) => S(xe) && S(xe)(...e),
466
+ onTouchstartPassive: l[2] ||= (...e) => S(Se) && S(Se)(...e),
467
+ onContextmenu: l[3] ||= T(() => {}, ["prevent"])
468
+ }, [
469
+ c.edgeFade && S(V) ? (h(), a("div", re)) : i("", !0),
470
+ o("div", {
471
+ class: d(["me-nav__list", { "is-smooth": S(U) }]),
472
+ ref_key: "listRef",
473
+ ref: R,
474
+ style: f({ transform: `translateX(${S(B)}px)` })
475
+ }, [c.tabList.length === 0 && n.$slots.empty ? (h(), a("div", ie, [v(n.$slots, "empty")])) : i("", !0), (h(!0), a(t, null, _(c.tabList, (t, c) => (h(), a("div", {
476
+ key: t[j.value],
477
+ class: "me-nav__tab-wrapper"
478
+ }, [s(p, {
479
+ trigger: ["contextmenu"],
480
+ menu: Fe(t, c),
481
+ "prefix-cls": "me-nav-dropdown",
482
+ onOpenChange: (e) => Ie(e, t, c)
483
+ }, {
484
+ default: w(() => [o("div", {
485
+ class: d(["me-nav__tab", { "is-active": z.value === t[j.value] }]),
486
+ ref_for: !0,
487
+ ref: (e) => De(t[j.value], e),
488
+ role: "tab",
489
+ "aria-selected": z.value === t[j.value],
490
+ tabindex: z.value === t[j.value] ? 0 : -1,
491
+ onClick: (e) => Le(t, c)
492
+ }, [n.$slots.tab ? v(n.$slots, "tab", {
493
+ item: t,
494
+ index: c,
495
+ active: z.value === t[j.value],
496
+ close: () => Q(t[j.value])
497
+ }, void 0, void 0, 0) : (h(), a("div", oe, [
498
+ v(n.$slots, "icon", { item: t }, () => [I(t[F.value]) ? (h(), r(b(t[F.value]), {
499
+ key: 0,
500
+ class: "me-nav__tab-icon"
501
+ })) : t[F.value] ? (h(), r(e, {
502
+ key: 1,
503
+ name: t[F.value],
504
+ size: 14,
505
+ class: "me-nav__tab-icon"
506
+ }, null, 8, ["name"])) : i("", !0)]),
507
+ pe.value ? (h(), r(u, {
508
+ key: 0,
509
+ title: t[M.value],
510
+ placement: "top"
511
+ }, {
512
+ default: w(() => [o("span", {
513
+ class: "me-nav__tab-title",
514
+ style: f(fe.value)
515
+ }, x(t[M.value]), 5)]),
516
+ _: 2
517
+ }, 1032, ["title"])) : (h(), a("span", se, x(t[M.value]), 1)),
518
+ t[P.value] ? (h(), r(e, {
519
+ key: 2,
520
+ name: "LockKeyhole",
521
+ size: 12,
522
+ class: "me-nav__tab-lock"
523
+ })) : i("", !0),
524
+ Z(t) ? (h(), a("span", {
525
+ key: 3,
526
+ class: "me-nav__tab-close",
527
+ role: "button",
528
+ "aria-label": "关闭标签",
529
+ onClick: T((e) => Q(t[j.value], c), ["stop"])
530
+ }, [v(n.$slots, "close-icon", { item: t }, () => [s(e, {
531
+ name: "X",
532
+ size: 12
533
+ })])], 8, ce)) : i("", !0)
534
+ ]))], 10, ae)]),
535
+ _: 2
536
+ }, 1032, ["menu", "onOpenChange"])]))), 128))], 6),
537
+ c.edgeFade && S(H) ? (h(), a("div", le)) : i("", !0)
538
+ ], 34),
539
+ o("div", {
540
+ class: d(["me-nav__arrow me-nav__arrow--right", { "is-hidden": !S(H) }]),
541
+ role: "button",
542
+ "aria-label": "向右滚动",
543
+ onClick: l[4] ||= (...e) => S(ve) && S(ve)(...e)
544
+ }, [s(e, {
545
+ name: "ChevronRight",
546
+ size: 14
547
+ })], 2),
548
+ n.$slots.right ? (h(), a("div", ue, [v(n.$slots, "right")])) : i("", !0)
549
+ ], 36);
550
+ };
551
+ }
552
+ });
553
+ //#endregion
554
+ //#region src/components/nav/index.ts
555
+ D.install = (e) => {
556
+ e.component("MeNav", D);
557
+ };
558
+ var O = D;
559
+ //#endregion
560
+ export { D as MeNav, O as default };
@@ -0,0 +1,7 @@
1
+ import { MeUiAntdvResolverOptions, MeUiAntdvResolverReturn } from './resolver-type';
2
+ /**
3
+ * 生成 unplugin-vue-components 风格的 Resolver 对象。
4
+ * @param options 配置项(预留)
5
+ */
6
+ export declare function MeUiAntdvResolver(options?: MeUiAntdvResolverOptions): MeUiAntdvResolverReturn;
7
+ export type { MeUiAntdvResolverOptions, MeUiAntdvResolverReturn } from './resolver-type';
@@ -0,0 +1,39 @@
1
+ //#region src/resolver/resolver-map.ts
2
+ var e = {
3
+ MeMessage: "message",
4
+ MeIcon: "icon",
5
+ MeBox: "box",
6
+ MeBreadcrumb: "breadcrumb",
7
+ MeBody: "body",
8
+ MeMenu: "menu",
9
+ MeNav: "nav",
10
+ MeModal: "modal",
11
+ MeTreeMenu: "tree-menu",
12
+ MeInputGps: "input-gps",
13
+ MeInputIconSelector: "input-icon-selector",
14
+ MeInputRadio: "input-radio",
15
+ MeLoadJson: "load-json",
16
+ MeLoginPage: "login-page",
17
+ MeCard: "card",
18
+ MeSkeleton: "skeleton"
19
+ };
20
+ //#endregion
21
+ //#region src/resolver/index.ts
22
+ function t(t = {}) {
23
+ let { importBase: n = !0 } = t, r = !1;
24
+ return {
25
+ type: "component",
26
+ getResolve: () => (t) => {
27
+ let i = e[t];
28
+ if (!i) return;
29
+ let a = [];
30
+ return n && !r && (a.push("@me-framework/me-ui-antdv-next/base.css"), r = !0), a.push(`@me-framework/me-ui-antdv-next/${i}/style.css`), {
31
+ name: t.replace(/^Me/, ""),
32
+ from: `@me-framework/me-ui-antdv-next/${i}`,
33
+ sideEffects: a
34
+ };
35
+ }
36
+ };
37
+ }
38
+ //#endregion
39
+ export { t as MeUiAntdvResolver };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 组件名(MeXxx)→ 组件目录(kebab)映射,供按需 Resolver 与子路径导入使用。
3
+ * 组件名到目录并非纯规则可推导(如 MeInputGps → input-gps),故维护显式映射。
4
+ * 新增组件时需同步在此登记。
5
+ */
6
+ export declare const componentDirMap: Record<string, string>;
@@ -0,0 +1,19 @@
1
+ /** MeUiAntdvResolver 配置项(当前预留,便于后续扩展) */
2
+ export interface MeUiAntdvResolverOptions {
3
+ /** 是否默认注入 base.css(设计 token 基线,按需必选)。默认 true */
4
+ importBase?: boolean;
5
+ }
6
+ /** Resolver.resolve 返回的单一解析结果 */
7
+ export interface MeUiAntdvResolvedComponent {
8
+ /** 组件注册名(去掉 Me 前缀后的驼峰名),例 MeInputGps → InputGps */
9
+ name: string;
10
+ /** 组件来源子路径(default export 即组件) */
11
+ from: string;
12
+ /** 需一并引入的样式副作用 */
13
+ sideEffects: string[];
14
+ }
15
+ /** unplugin-vue-components 兼容的 Resolver 对象形状 */
16
+ export interface MeUiAntdvResolverReturn {
17
+ type: 'component';
18
+ getResolve: () => (name: string) => MeUiAntdvResolvedComponent | undefined;
19
+ }
@@ -0,0 +1,2 @@
1
+ export * from './resolver/index.js'
2
+ export {}
@@ -1,3 +1,6 @@
1
+ // 由 vite.config.ts 的 define 注入(值为 package.json 的 version)
2
+ declare const __ME_UI_VERSION__: string
3
+
1
4
  declare module '*.vue' {
2
5
  import type { DefineComponent } from 'vue'
3
6
  const component: DefineComponent<{}, {}, any>
@@ -0,0 +1 @@
1
+ .me-skeleton{--me-skeleton-base-color:var(--me-fill-color);--me-skeleton-highlight-color:var(--me-fill-color-light);--me-skeleton-border-radius:var(--me-border-radius-small);--me-skeleton-animation-duration:1.2s;width:100%;display:block}.me-skeleton__block{background-color:var(--me-skeleton-base-color);border-radius:var(--me-skeleton-border-radius);display:block}.me-skeleton--animated .me-skeleton__block{background:linear-gradient(90deg, var(--me-skeleton-base-color) 25%, var(--me-skeleton-highlight-color) 37%, var(--me-skeleton-base-color) 63%);animation:me-skeleton-pulse var(--me-skeleton-animation-duration) ease-in-out infinite;background-size:400% 100%}.me-skeleton--text .me-skeleton__row,.me-skeleton--custom .me-skeleton__row{width:100%}.me-skeleton--card{border-radius:var(--me-border-radius-base);flex-direction:column;display:flex;overflow:hidden}.me-skeleton--card__card-image{border-radius:0;flex-shrink:0;width:100%}.me-skeleton--card__card-body{flex-direction:column;padding:16px;display:flex}.me-skeleton--card .me-skeleton__row--title{width:50%;margin-bottom:12px}.me-skeleton--avatar{align-items:flex-start;gap:16px;display:flex}.me-skeleton--avatar__avatar{flex-shrink:0}.me-skeleton--avatar__avatar--circle{border-radius:50%}.me-skeleton--avatar__avatar--square{border-radius:var(--me-border-radius-base)}.me-skeleton--avatar__avatar-content{flex-direction:column;flex:1;justify-content:center;min-width:0;display:flex}.me-skeleton--article .me-skeleton__row--title{height:24px}.me-skeleton--list__list-item{align-items:flex-start;gap:12px;padding:12px 0;display:flex}.me-skeleton--list__list-item:not(:last-child){border-bottom:1px solid var(--me-border-color-light)}.me-skeleton--list__list-avatar{background-color:var(--me-skeleton-base-color);border-radius:50%;flex-shrink:0;width:48px;height:48px}.me-skeleton--list__list-content{flex-direction:column;flex:1;justify-content:center;min-width:0;display:flex}.me-skeleton__row{width:100%}@keyframes me-skeleton-pulse{0%{background-position:100%}to{background-position:0}}