@lumal/cockpit 0.0.1-beta → 0.0.3-beta
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/CHANGELOG.md +19 -0
- package/LICENSE +21 -21
- package/dist/cockpit.css +1 -1
- package/dist/createCockpitRegistry-8t6uUH6d.js +31 -0
- package/dist/createCockpitRegistry-B2vNbpcw.cjs +1 -0
- package/dist/designer.cjs +1 -1
- package/dist/designer.js +613 -546
- package/dist/index.cjs +1 -1
- package/dist/index.js +6 -6
- package/dist/registry.cjs +1 -1
- package/dist/registry.js +1 -1
- package/dist/resolveComponent-DXwlDKov.cjs +1 -0
- package/dist/resolveComponent-_XUQaM5w.js +331 -0
- package/dist/runtime-Be4SmioJ.cjs +1 -0
- package/dist/{runtime-CXiih7DE.js → runtime-DTxtlBRg.js} +167 -155
- package/dist/runtime.cjs +1 -1
- package/dist/runtime.js +2 -2
- package/dist/src/composables/index.d.ts +2 -2
- package/dist/src/composables/index.d.ts.map +1 -1
- package/dist/src/composables/useCanvasScale.d.ts +2 -1
- package/dist/src/composables/useCanvasScale.d.ts.map +1 -1
- package/dist/src/composables/useCockpitAutoRefresh.d.ts +1 -1
- package/dist/src/composables/useCockpitAutoRefresh.d.ts.map +1 -1
- package/dist/src/composables/useCockpitRefresh.d.ts +1 -1
- package/dist/src/composables/useCockpitRefresh.d.ts.map +1 -1
- package/dist/src/designer/CockpitComponentLibrary.vue.d.ts.map +1 -1
- package/dist/src/designer/CockpitLayoutEditor.vue.d.ts.map +1 -1
- package/dist/src/designer/CockpitWidgetPreview.vue.d.ts +3 -1
- package/dist/src/designer/CockpitWidgetPreview.vue.d.ts.map +1 -1
- package/dist/src/designer/LumalCockpitDesigner.vue.d.ts +2 -2
- package/dist/src/designer/useCockpitDraft.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/messaging/createCockpitMessageBus.d.ts +2 -2
- package/dist/src/messaging/createCockpitMessageBus.d.ts.map +1 -1
- package/dist/src/messaging/types.d.ts +5 -1
- package/dist/src/messaging/types.d.ts.map +1 -1
- package/dist/src/registry/createCockpitRegistry.d.ts.map +1 -1
- package/dist/src/runtime/LumalCockpit.vue.d.ts.map +1 -1
- package/dist/src/runtime/LumalCockpitContainer.vue.d.ts.map +1 -1
- package/dist/src/runtime/LumalCockpitWidgetHost.vue.d.ts.map +1 -1
- package/dist/{validate-KSzm5SZW.cjs → validate-CRxxljQ8.cjs} +1 -1
- package/dist/{validate-DkC_IHrC.js → validate-ip4tDXsj.js} +1 -1
- package/package.json +4 -3
- package/dist/createCockpitRegistry-D5F4d5By.js +0 -30
- package/dist/createCockpitRegistry-DHr9nXJY.cjs +0 -1
- package/dist/resolveComponent-BF1aCxAk.cjs +0 -1
- package/dist/resolveComponent-QbJRsdxR.js +0 -308
- package/dist/runtime-wzWMTWrS.cjs +0 -1
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
import { createElementBlock as e, createElementVNode as t, createTextVNode as n, createVNode as r, defineAsyncComponent as i, defineComponent as a, inject as o, nextTick as s, onBeforeUnmount as c, onErrorCaptured as l, onMounted as u, openBlock as d, provide as f, ref as p, renderSlot as m, shallowRef as h, unref as g, withCtx as _ } from "vue";
|
|
2
|
-
import { ElButton as v } from "element-plus";
|
|
3
|
-
import { LumalIcon as ee } from "@lumal/icons-vue";
|
|
4
|
-
//#region src/composables/useCanvasScale.ts
|
|
5
|
-
function y(e, t, n, r) {
|
|
6
|
-
if (n <= 0 || r <= 0 || e <= 0 || t <= 0) return {
|
|
7
|
-
scale: 1,
|
|
8
|
-
scaledWidth: n,
|
|
9
|
-
scaledHeight: r,
|
|
10
|
-
offsetX: 0,
|
|
11
|
-
offsetY: 0
|
|
12
|
-
};
|
|
13
|
-
let i = Math.min(e / n, t / r), a = n * i, o = r * i;
|
|
14
|
-
return {
|
|
15
|
-
scale: i,
|
|
16
|
-
scaledWidth: a,
|
|
17
|
-
scaledHeight: o,
|
|
18
|
-
offsetX: (e - a) / 2,
|
|
19
|
-
offsetY: (t - o) / 2
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
function b(e, t) {
|
|
23
|
-
let n = h({
|
|
24
|
-
scale: 1,
|
|
25
|
-
scaledWidth: t.baseWidth(),
|
|
26
|
-
scaledHeight: t.baseHeight(),
|
|
27
|
-
offsetX: 0,
|
|
28
|
-
offsetY: 0
|
|
29
|
-
}), r = p(!1), i = null, a = 0;
|
|
30
|
-
function o() {
|
|
31
|
-
let i = e.value;
|
|
32
|
-
i && (n.value = y(i.clientWidth, i.clientHeight, t.baseWidth(), t.baseHeight()), r.value = !0);
|
|
33
|
-
}
|
|
34
|
-
function s() {
|
|
35
|
-
if (typeof requestAnimationFrame > "u") {
|
|
36
|
-
o();
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
a && cancelAnimationFrame(a), a = requestAnimationFrame(() => {
|
|
40
|
-
a = 0, o();
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
return u(() => {
|
|
44
|
-
o(), typeof ResizeObserver < "u" && e.value && (i = new ResizeObserver(s), i.observe(e.value));
|
|
45
|
-
}), c(() => {
|
|
46
|
-
a && typeof cancelAnimationFrame < "u" && cancelAnimationFrame(a), i?.disconnect(), i = null;
|
|
47
|
-
}), {
|
|
48
|
-
result: n,
|
|
49
|
-
ready: r,
|
|
50
|
-
measure: o
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
//#endregion
|
|
54
|
-
//#region src/composables/useCockpitContext.ts
|
|
55
|
-
var x = Symbol("lumal-cockpit-context");
|
|
56
|
-
function S(e) {
|
|
57
|
-
f(x, e);
|
|
58
|
-
}
|
|
59
|
-
function C(e = !1) {
|
|
60
|
-
let t = o(x, null);
|
|
61
|
-
if (!t && !e) throw Error("[cockpit] 未找到驾驶舱渲染上下文,请确认组件在 LumalCockpit 内渲染。");
|
|
62
|
-
return t;
|
|
63
|
-
}
|
|
64
|
-
//#endregion
|
|
65
|
-
//#region src/config/defaults.ts
|
|
66
|
-
var w = 3, T = 320, E = 420, D = 100, O = 0;
|
|
67
|
-
function k(e = "ck") {
|
|
68
|
-
O += 1;
|
|
69
|
-
let t = Date.now().toString(36), n = Math.random().toString(36).slice(2, 8);
|
|
70
|
-
return `${e}-${t}-${O.toString(36)}-${n}`;
|
|
71
|
-
}
|
|
72
|
-
function A(e, t) {
|
|
73
|
-
return {
|
|
74
|
-
id: k("widget"),
|
|
75
|
-
type: e,
|
|
76
|
-
title: t
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
function j(e = 320) {
|
|
80
|
-
return {
|
|
81
|
-
id: k("column"),
|
|
82
|
-
width: e
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
function M(e) {
|
|
86
|
-
let t = Math.max(1, e.columns.length), n = Math.max(t, Math.round(e.width) || 420);
|
|
87
|
-
e.width = n;
|
|
88
|
-
let r = Math.floor(n / t), i = n - r * t;
|
|
89
|
-
e.columns.forEach((e) => {
|
|
90
|
-
e.width = r + +(i > 0), i > 0 && --i;
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
function N() {
|
|
94
|
-
return { id: k("cell") };
|
|
95
|
-
}
|
|
96
|
-
function P(e, t = "grid", n = 100) {
|
|
97
|
-
return {
|
|
98
|
-
id: k("row"),
|
|
99
|
-
height: n,
|
|
100
|
-
mode: t,
|
|
101
|
-
cells: t === "grid" ? Array.from({ length: Math.max(1, e) }, N) : [],
|
|
102
|
-
widgets: []
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
function F(e = 1, t = 1, n = 420) {
|
|
106
|
-
let r = Array.from({ length: Math.max(1, e) }, () => j()), i = {
|
|
107
|
-
width: n,
|
|
108
|
-
columns: r,
|
|
109
|
-
rows: Array.from({ length: Math.max(1, t) }, () => P(r.length, "grid", 100 / Math.max(1, t)))
|
|
110
|
-
};
|
|
111
|
-
return M(i), i;
|
|
112
|
-
}
|
|
113
|
-
function I(e = "新布局") {
|
|
114
|
-
return {
|
|
115
|
-
id: k("layout"),
|
|
116
|
-
title: e,
|
|
117
|
-
left: F(),
|
|
118
|
-
right: F()
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
function L(e = k("cockpit")) {
|
|
122
|
-
let t = I("布局 1");
|
|
123
|
-
return {
|
|
124
|
-
schemaVersion: 3,
|
|
125
|
-
id: e,
|
|
126
|
-
title: "驾驶舱",
|
|
127
|
-
activeLayoutId: t.id,
|
|
128
|
-
layouts: [t]
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
//#endregion
|
|
132
|
-
//#region src/config/normalize.ts
|
|
133
|
-
function R(e) {
|
|
134
|
-
return typeof e == "object" && !!e && !Array.isArray(e);
|
|
135
|
-
}
|
|
136
|
-
function z(e) {
|
|
137
|
-
return Array.isArray(e) ? e : [];
|
|
138
|
-
}
|
|
139
|
-
function B(e, t) {
|
|
140
|
-
return typeof e == "string" && e.trim() ? e : t;
|
|
141
|
-
}
|
|
142
|
-
function V(e, t) {
|
|
143
|
-
let n = typeof e == "number" ? e : Number(e);
|
|
144
|
-
return Number.isFinite(n) && n > 0 ? n : t;
|
|
145
|
-
}
|
|
146
|
-
function H(e) {
|
|
147
|
-
if (!(!R(e) || typeof e.type != "string" || !e.type.trim())) return {
|
|
148
|
-
id: B(e.id, k("widget")),
|
|
149
|
-
type: e.type,
|
|
150
|
-
title: typeof e.title == "string" && e.title.trim() ? e.title : void 0
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
function U(e) {
|
|
154
|
-
let t = R(e) ? e : {};
|
|
155
|
-
return {
|
|
156
|
-
id: B(t.id, k("cell")),
|
|
157
|
-
widget: H(t.widget)
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
function W(e) {
|
|
161
|
-
let t = z(e).map((e) => {
|
|
162
|
-
let t = R(e) ? e : {};
|
|
163
|
-
return {
|
|
164
|
-
id: B(t.id, k("column")),
|
|
165
|
-
width: Math.round(V(t.width, 320))
|
|
166
|
-
};
|
|
167
|
-
});
|
|
168
|
-
return t.length ? t : [j()];
|
|
169
|
-
}
|
|
170
|
-
function G(e, t) {
|
|
171
|
-
let n = R(e) ? e : {}, r = n.mode === "tabs" ? "tabs" : "grid", i = {
|
|
172
|
-
id: B(n.id, k("row")),
|
|
173
|
-
height: V(n.height, 100),
|
|
174
|
-
mode: r,
|
|
175
|
-
cells: [],
|
|
176
|
-
widgets: []
|
|
177
|
-
};
|
|
178
|
-
if (r === "tabs") {
|
|
179
|
-
i.widgets = z(n.widgets).map(H).filter((e) => !!e);
|
|
180
|
-
let e = typeof n.activeWidgetId == "string" ? n.activeWidgetId : void 0;
|
|
181
|
-
i.activeWidgetId = i.widgets.some((t) => t.id === e) ? e : i.widgets[0]?.id;
|
|
182
|
-
} else {
|
|
183
|
-
let e = z(n.cells).map(U).slice(0, t);
|
|
184
|
-
for (; e.length < t;) e.push(N());
|
|
185
|
-
i.cells = e;
|
|
186
|
-
}
|
|
187
|
-
return i;
|
|
188
|
-
}
|
|
189
|
-
function K(e) {
|
|
190
|
-
let t = e.reduce((e, t) => e + t.height, 0);
|
|
191
|
-
if (t <= 0) {
|
|
192
|
-
let t = 100 / e.length;
|
|
193
|
-
e.forEach((e) => {
|
|
194
|
-
e.height = t;
|
|
195
|
-
});
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
e.forEach((e) => {
|
|
199
|
-
e.height = Number((e.height / t * 100).toFixed(3));
|
|
200
|
-
});
|
|
201
|
-
let n = Number((100 - e.reduce((e, t) => e + t.height, 0)).toFixed(3));
|
|
202
|
-
e[e.length - 1] && (e[e.length - 1].height = Number((e[e.length - 1].height + n).toFixed(3)));
|
|
203
|
-
}
|
|
204
|
-
function q(e) {
|
|
205
|
-
let t = R(e) ? e : {}, n = W(t.columns), r = n.reduce((e, t) => e + t.width, 0), i = Math.round(V(t.width, r > 0 ? r : 420)), a = z(t.rows).map((e) => G(e, n.length));
|
|
206
|
-
a.length || a.push(P(n.length)), K(a);
|
|
207
|
-
let o = {
|
|
208
|
-
width: i,
|
|
209
|
-
columns: n,
|
|
210
|
-
rows: a
|
|
211
|
-
};
|
|
212
|
-
return M(o), o;
|
|
213
|
-
}
|
|
214
|
-
function J(e) {
|
|
215
|
-
let t = R(e) ? e : {}, n = I(B(t.title, "未命名布局"));
|
|
216
|
-
return n.id = B(t.id, n.id), n.left = q(t.left), n.right = q(t.right), n;
|
|
217
|
-
}
|
|
218
|
-
function Y(e) {
|
|
219
|
-
let t = R(e) ? e : {}, n = z(t.layouts).map(J), r = {
|
|
220
|
-
schemaVersion: 3,
|
|
221
|
-
id: B(t.id, k("cockpit")),
|
|
222
|
-
title: B(t.title, "驾驶舱"),
|
|
223
|
-
layouts: n.length ? n : [I("布局 1")]
|
|
224
|
-
}, i = typeof t.activeLayoutId == "string" ? t.activeLayoutId : void 0;
|
|
225
|
-
return r.activeLayoutId = r.layouts.some((e) => e.id === i) ? i : r.layouts[0].id, r;
|
|
226
|
-
}
|
|
227
|
-
//#endregion
|
|
228
|
-
//#region src/messaging/createCockpitMessageBus.ts
|
|
229
|
-
function X() {
|
|
230
|
-
let e = /* @__PURE__ */ new Map();
|
|
231
|
-
function t(t) {
|
|
232
|
-
let n = e.get(t.topic);
|
|
233
|
-
if (!n || n.size === 0) return;
|
|
234
|
-
let r = [...n];
|
|
235
|
-
for (let e of r) {
|
|
236
|
-
let n = t.targetId === void 0, r = e.targetId !== void 0 && e.targetId === t.targetId;
|
|
237
|
-
if (!(!n && !r)) try {
|
|
238
|
-
e.handler(t);
|
|
239
|
-
} catch (e) {
|
|
240
|
-
console.error(`[cockpit] 消息订阅处理器异常(topic: ${t.topic})`, e);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
function n(t, n, r) {
|
|
245
|
-
let i = e.get(t);
|
|
246
|
-
i || (i = /* @__PURE__ */ new Set(), e.set(t, i));
|
|
247
|
-
let a = {
|
|
248
|
-
handler: n,
|
|
249
|
-
targetId: r?.targetId
|
|
250
|
-
};
|
|
251
|
-
return i.add(a), function() {
|
|
252
|
-
let n = e.get(t);
|
|
253
|
-
n && (n.delete(a), n.size === 0 && e.delete(t));
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
function r(t) {
|
|
257
|
-
for (let [n, r] of e) {
|
|
258
|
-
for (let e of [...r]) e.targetId === t && r.delete(e);
|
|
259
|
-
r.size === 0 && e.delete(n);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return {
|
|
263
|
-
publish: t,
|
|
264
|
-
subscribe: n,
|
|
265
|
-
clearInstance: r
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
//#endregion
|
|
269
|
-
//#region src/runtime/CockpitErrorBoundary.vue?vue&type=script&setup=true&lang.ts
|
|
270
|
-
var Z = { class: "lumal-cockpit-error-boundary" }, Q = {
|
|
271
|
-
class: "lumal-cockpit-error-boundary__fallback",
|
|
272
|
-
role: "alert"
|
|
273
|
-
}, te = /* @__PURE__ */ a({
|
|
274
|
-
__name: "CockpitErrorBoundary",
|
|
275
|
-
emits: ["error"],
|
|
276
|
-
setup(i, { emit: a }) {
|
|
277
|
-
let o = a, c = p(!1), u = p(null), f = p(0);
|
|
278
|
-
l((e) => (c.value = !0, u.value = e, o("error", e), !1));
|
|
279
|
-
async function h() {
|
|
280
|
-
c.value = !1, u.value = null, await s(), f.value += 1;
|
|
281
|
-
}
|
|
282
|
-
return (i, a) => (d(), e("div", Z, [c.value ? m(i.$slots, "error", {
|
|
283
|
-
key: 0,
|
|
284
|
-
error: u.value,
|
|
285
|
-
retry: h
|
|
286
|
-
}, () => [t("div", Q, [a[1] ||= t("p", { class: "lumal-cockpit-error-boundary__message" }, " 组件渲染失败 ", -1), r(g(v), {
|
|
287
|
-
class: "lumal-cockpit-error-boundary__retry",
|
|
288
|
-
onClick: h
|
|
289
|
-
}, {
|
|
290
|
-
default: _(() => [r(g(ee), {
|
|
291
|
-
name: "lumal:refresh",
|
|
292
|
-
size: 15
|
|
293
|
-
}), a[0] ||= n(" 重试 ", -1)]),
|
|
294
|
-
_: 1
|
|
295
|
-
})])]) : m(i.$slots, "default", { key: f.value })]));
|
|
296
|
-
}
|
|
297
|
-
}), $ = /* @__PURE__ */ new WeakMap();
|
|
298
|
-
function ne(e) {
|
|
299
|
-
if (typeof e == "function") {
|
|
300
|
-
let t = e, n = $.get(t);
|
|
301
|
-
if (n) return n;
|
|
302
|
-
let r = i(e);
|
|
303
|
-
return $.set(t, r), r;
|
|
304
|
-
}
|
|
305
|
-
return e;
|
|
306
|
-
}
|
|
307
|
-
//#endregion
|
|
308
|
-
export { M as _, w as a, y as b, D as c, N as d, j as f, A as g, F as h, Y as i, k as l, I as m, te as n, T as o, P as p, X as r, E as s, ne as t, L as u, S as v, b as x, C as y };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=require("./resolveComponent-BF1aCxAk.cjs");let t=require("vue"),n=require("element-plus"),r=require("@lumal/icons-vue");var i=`cockpit:refresh`,a=300*1e3;function o(e){let n=e.enabled??(0,t.ref)(e.defaultEnabled??!1),r;function a(n=`manual`){let r={reason:n,at:Date.now()};e.messages.publish({topic:i,sourceId:(0,t.toValue)(e.sourceId),payload:r})}function o(){r!==void 0&&(clearInterval(r),r=void 0)}function s(){o();let n=Math.max(1e3,(0,t.toValue)(e.intervalMs)??3e5);r=setInterval(()=>{a(`interval`)},n)}return(0,t.watch)(n,e=>{e?s():o()},{immediate:!0}),(0,t.watch)(()=>(0,t.toValue)(e.intervalMs),()=>{n.value&&s()}),(0,t.onBeforeUnmount)(o),{enabled:n,refreshNow:a}}function s(e){let n=(0,t.computed)(()=>{let t=e.config().layouts;if(!t.length)return;let n=e.activeLayoutId.value??e.config().activeLayoutId;return t.find(e=>e.id===n)??t[0]});function r(t){e.activeLayoutId.value=t}return{activeLayout:n,selectLayout:r}}var c=Symbol(`lumal-cockpit-runtime-env`);function l(){let e=(0,t.inject)(c,null);if(!e)throw Error(`[cockpit] 运行时环境缺失,组件必须在 LumalCockpit 内渲染。`);return e}var u=[`data-widget-type`,`data-instance-id`,`data-cockpit-node-id`,`data-cockpit-side`],d={class:`lumal-cockpit-widget__body`},f={key:1,class:`lumal-cockpit-widget__missing`,role:`status`},p={key:1,class:`lumal-cockpit-widget__error`,role:`alert`},m=(0,t.defineComponent)({__name:`LumalCockpitWidgetHost`,props:{layoutId:{},side:{},widget:{},embedded:{type:Boolean}},setup(i){let a=i,o=l(),s=(0,t.computed)(()=>o.registry.resolveWidget(a.widget.type)),c=(0,t.computed)(()=>{let t=s.value;return t?e.t(t.component):null}),m=(0,t.computed)(()=>({cockpitId:o.cockpitId,layoutId:a.layoutId,instanceId:a.widget.id,mode:o.mode,messages:o.messages}));e.v(m.value),(0,t.onBeforeUnmount)(()=>{o.messages.clearInstance(a.widget.id)});let h=(0,t.computed)(()=>a.widget.title??s.value?.label??a.widget.type),g=(0,t.computed)(()=>a.embedded?`div`:o.cardComponent),_=(0,t.computed)(()=>a.embedded?{class:`lumal-cockpit-widget__embedded`}:{title:h.value,widget:a.widget});return(a,l)=>((0,t.openBlock)(),(0,t.createElementBlock)(`section`,{class:`lumal-cockpit-widget`,"data-widget-type":i.widget.type,"data-instance-id":i.widget.id,"data-cockpit-node":`widget`,"data-cockpit-node-id":i.widget.id,"data-cockpit-side":i.side},[((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)(g.value),(0,t.normalizeProps)((0,t.guardReactiveProps)(_.value)),(0,t.createSlots)({default:(0,t.withCtx)(()=>[(0,t.createElementVNode)(`div`,d,[s.value?((0,t.openBlock)(),(0,t.createBlock)(e.n,{key:1},{error:(0,t.withCtx)(({retry:e})=>[(0,t.unref)(o).slots.error?((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)((0,t.unref)(o).slots.error),{key:0,retry:e,"instance-id":i.widget.id},null,8,[`retry`,`instance-id`])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,p,[l[1]||=(0,t.createElementVNode)(`span`,null,`模块加载失败`,-1),(0,t.createVNode)((0,t.unref)(n.ElButton),{text:``,type:`primary`,onClick:e},{default:(0,t.withCtx)(()=>[(0,t.createVNode)((0,t.unref)(r.LumalIcon),{name:`lumal:refresh`,size:14}),l[0]||=(0,t.createTextVNode)(` 重试 `,-1)]),_:1},8,[`onClick`])]))]),default:(0,t.withCtx)(()=>[((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)(c.value),{context:m.value},null,8,[`context`]))]),_:1})):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.unref)(o).slots[`missing-widget`]?((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)((0,t.unref)(o).slots[`missing-widget`]),{key:0,type:i.widget.type,"instance-id":i.widget.id},null,8,[`type`,`instance-id`])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,f,` 未注册模块:`+(0,t.toDisplayString)(i.widget.type),1))],64))])]),_:2},[!i.embedded&&(0,t.unref)(o).slots[`widget-title`]?{name:`title`,fn:(0,t.withCtx)(()=>[((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)((0,t.unref)(o).slots[`widget-title`]),{widget:i.widget,title:h.value},null,8,[`widget`,`title`]))]),key:`0`}:void 0]),1040))],8,u))}}),h=[`data-cockpit-node-id`,`data-cockpit-side`],g=[`data-cockpit-node-id`,`data-cockpit-side`],_={key:1,class:`lumal-cockpit-container__empty`,role:`status`},v={key:0,class:`lumal-cockpit-container__tabpanel`},y={key:1,class:`lumal-cockpit-container__empty`,role:`status`},b=(0,t.defineComponent)({__name:`LumalCockpitContainer`,props:{columns:{},layoutId:{},row:{},side:{}},setup(e){let n=e,r=(0,t.computed)(()=>({height:`${n.row.height}%`})),i=(0,t.computed)(()=>({gridTemplateColumns:n.columns.map(e=>`calc(${e.width} * var(--lumal-cockpit-x-unit, 1px))`).join(` `)})),a=(0,t.ref)(),o=(0,t.reactive)(new Set),s=l(),c=(0,t.computed)(()=>n.row.widgets.map(e=>({id:e.id,title:e.title??s.registry.resolveWidget(e.type)?.label??e.type,widget:e})));function u(){let e=n.row.activeWidgetId;return n.row.widgets.some(t=>t.id===e)?e:n.row.widgets[0]?.id}return(0,t.watch)(()=>[n.row.id,n.row.activeWidgetId],()=>{a.value=u()},{immediate:!0}),(0,t.watch)(()=>n.row.widgets.map(e=>e.id).join(`,`),()=>{let e=new Set(n.row.widgets.map(e=>e.id));o.forEach(t=>{e.has(t)||o.delete(t)}),n.row.widgets.some(e=>e.id===a.value)||(a.value=u())}),(0,t.watch)(a,e=>{e&&o.add(e)},{immediate:!0}),(n,l)=>((0,t.openBlock)(),(0,t.createElementBlock)(`section`,{class:(0,t.normalizeClass)([`lumal-cockpit-container`,{"is-tabs":e.row.mode===`tabs`}]),style:(0,t.normalizeStyle)(r.value),"data-cockpit-node":`row`,"data-cockpit-node-id":e.row.id,"data-cockpit-side":e.side},[e.row.mode===`grid`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:`lumal-cockpit-container__grid`,style:(0,t.normalizeStyle)(i.value)},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.row.cells,n=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n.id,class:`lumal-cockpit-container__cell`,"data-cockpit-node":`cell`,"data-cockpit-node-id":n.id,"data-cockpit-side":e.side},[n.widget?((0,t.openBlock)(),(0,t.createBlock)(m,{key:n.widget.id,"layout-id":e.layoutId,side:e.side,widget:n.widget},null,8,[`layout-id`,`side`,`widget`])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,_,` 空模块槽 `))],8,g))),128))],4)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[e.row.widgets.length?((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)((0,t.unref)(s).cardComponent),{key:0,"active-tab-id":a.value,"onUpdate:activeTabId":l[0]||=e=>a.value=e,tabs:c.value},(0,t.createSlots)({default:(0,t.withCtx)(()=>[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.row.widgets,n=>((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:n.id},[o.has(n.id)?(0,t.withDirectives)(((0,t.openBlock)(),(0,t.createElementBlock)(`div`,v,[(0,t.createVNode)(m,{embedded:``,"layout-id":e.layoutId,side:e.side,widget:n},null,8,[`layout-id`,`side`,`widget`])],512)),[[t.vShow,n.id===a.value]]):(0,t.createCommentVNode)(``,!0)],64))),128))]),_:2},[(0,t.unref)(s).slots[`widget-title`]?{name:`title`,fn:(0,t.withCtx)(({title:e,widget:n})=>[((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)((0,t.unref)(s).slots[`widget-title`]),{widget:n,title:e},null,8,[`widget`,`title`]))]),key:`0`}:void 0,(0,t.unref)(s).slots[`widget-title`]?{name:`tab`,fn:(0,t.withCtx)(({tab:e})=>[((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)((0,t.unref)(s).slots[`widget-title`]),{widget:e.widget,title:e.title},null,8,[`widget`,`title`]))]),key:`1`}:void 0]),1064,[`active-tab-id`,`tabs`])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,y,` 空 Tab 行 `))],64))],14,h))}}),x=[`data-side`,`data-cockpit-node-id`,`data-cockpit-side`],S=(0,t.defineComponent)({__name:`LumalCockpitRegion`,props:{layoutId:{},region:{},side:{}},setup(e){let n=e,r=(0,t.computed)(()=>n.region.width>0?n.region.width:n.region.columns.reduce((e,t)=>e+t.width,0)),i=(0,t.computed)(()=>({width:`calc(${r.value} * var(--lumal-cockpit-x-unit, 1px) + ${Math.max(0,n.region.columns.length-1)} * var(--lumal-cockpit-gap-x, 12px))`}));return(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`section`,{class:`lumal-cockpit-region`,"data-side":e.side,"data-cockpit-node":`region`,"data-cockpit-node-id":`${e.layoutId}:${e.side}`,"data-cockpit-side":e.side,style:(0,t.normalizeStyle)(i.value)},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.region.rows,n=>((0,t.openBlock)(),(0,t.createBlock)(b,{key:n.id,"layout-id":e.layoutId,side:e.side,columns:e.region.columns,row:n},null,8,[`layout-id`,`side`,`columns`,`row`]))),128))],12,x))}}),C=[`data-scale`,`data-viewport-mode`],w={class:`lumal-cockpit-canvas__header`},T={class:`lumal-cockpit-canvas__header-prefix`},E={class:`lumal-cockpit-canvas__title`},D={class:`lumal-cockpit-canvas__header-actions`},O={class:`lumal-cockpit-canvas__body`},k={class:`lumal-cockpit-canvas__center`},A={class:`lumal-cockpit-canvas__left`},j={class:`lumal-cockpit-canvas__right`},M=(0,t.defineComponent)({__name:`LumalCockpitCanvas`,props:{title:{},baseWidth:{},baseHeight:{},layout:{},centerContext:{},viewportMode:{}},setup(n){let r=n,i=(0,t.ref)(null),{result:a}=e.x(i,{baseWidth:()=>r.baseWidth,baseHeight:()=>r.baseHeight}),o=(0,t.computed)(()=>r.viewportMode===`vwvh`?{width:`100vw`,height:`100vh`,"--lumal-cockpit-x-unit":`${100/r.baseWidth}vw`,"--lumal-cockpit-y-unit":`${100/r.baseHeight}vh`}:r.viewportMode===`external`?{width:`${r.baseWidth}px`,height:`${r.baseHeight}px`,"--lumal-cockpit-x-unit":`1px`,"--lumal-cockpit-y-unit":`1px`}:{width:`${r.baseWidth}px`,height:`${r.baseHeight}px`,transform:`translate(${a.value.offsetX}px, ${a.value.offsetY}px) scale(${a.value.scale})`,transformOrigin:`top left`,"--lumal-cockpit-x-unit":`1px`,"--lumal-cockpit-y-unit":`1px`});return(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`containerRef`,ref:i,class:`lumal-cockpit-canvas`,"data-scale":(0,t.unref)(a).scale.toFixed(3),"data-viewport-mode":n.viewportMode},[(0,t.createElementVNode)(`div`,{class:`lumal-cockpit-canvas__stage`,style:(0,t.normalizeStyle)(o.value)},[(0,t.createElementVNode)(`header`,w,[(0,t.createElementVNode)(`div`,T,[(0,t.renderSlot)(e.$slots,`header-prefix`)]),(0,t.createElementVNode)(`div`,E,[(0,t.renderSlot)(e.$slots,`header-title`,{title:n.title},()=>[(0,t.createElementVNode)(`h1`,null,(0,t.toDisplayString)(n.title),1)])]),(0,t.createElementVNode)(`div`,D,[(0,t.renderSlot)(e.$slots,`header-actions`)])]),(0,t.createElementVNode)(`div`,O,[(0,t.createElementVNode)(`main`,k,[(0,t.renderSlot)(e.$slots,`center`,{context:n.centerContext,layout:n.layout},()=>[r[0]||=(0,t.createElementVNode)(`div`,{class:`lumal-cockpit-center__empty`,role:`status`},` 由应用提供中央内容 `,-1)])]),(0,t.createElementVNode)(`div`,A,[(0,t.renderSlot)(e.$slots,`left`,{layout:n.layout,region:n.layout.left,side:`left`},()=>[(0,t.createVNode)(S,{side:`left`,"layout-id":n.layout.id,region:n.layout.left},null,8,[`layout-id`,`region`])])]),(0,t.createElementVNode)(`div`,j,[(0,t.renderSlot)(e.$slots,`right`,{layout:n.layout,region:n.layout.right,side:`right`},()=>[(0,t.createVNode)(S,{side:`right`,"layout-id":n.layout.id,region:n.layout.right},null,8,[`layout-id`,`region`])])])])],4)],8,C))}}),N={key:0,class:`lumal-cockpit-card__header`},P={class:`lumal-cockpit-card__tablist`,role:`tablist`,"aria-label":`模块切换`},F=[`id`,`aria-selected`,`tabindex`,`onClick`,`onKeydown`],I={key:1,class:`lumal-cockpit-card__header`},L={class:`lumal-cockpit-card__title`},R=[`id`,`role`,`aria-labelledby`,`tabindex`],z=(0,t.defineComponent)({__name:`LumalCockpitCard`,props:{title:{},widget:{},tabs:{default:()=>[]},activeTabId:{}},emits:[`update:activeTabId`],setup(e,{emit:n}){let r=e,i=n,a=(0,t.useId)(),o=new Map,s=(0,t.computed)(()=>r.tabs.length>1),c=(0,t.computed)(()=>r.tabs[0]),l=(0,t.computed)(()=>{let e=r.activeTabId;return r.tabs.some(t=>t.id===e)?e:r.tabs[0]?.id}),u=(0,t.computed)(()=>r.widget??c.value?.widget),d=(0,t.computed)(()=>r.title??r.widget?.title??c.value?.title??u.value?.title??u.value?.type),f=`${a}-tabpanel`;function p(e){return`${a}-tab-${e}`}function m(e,t){t instanceof HTMLButtonElement?o.set(e,t):o.delete(e)}function h(e){e!==l.value&&i(`update:activeTabId`,e)}function g(e,n){if(!r.tabs.length)return;let i={ArrowRight:(n+1)%r.tabs.length,ArrowDown:(n+1)%r.tabs.length,ArrowLeft:(n-1+r.tabs.length)%r.tabs.length,ArrowUp:(n-1+r.tabs.length)%r.tabs.length,Home:0,End:r.tabs.length-1}[e.key],a=r.tabs[i];a&&(e.preventDefault(),h(a.id),(0,t.nextTick)(()=>o.get(a.id)?.focus()))}return(0,t.watch)(()=>[r.activeTabId,r.tabs.map(e=>e.id).join(`,`)],()=>{let e=l.value;s.value&&e&&e!==r.activeTabId&&i(`update:activeTabId`,e)},{immediate:!0}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`section`,{class:(0,t.normalizeClass)([`lumal-cockpit-card`,{"is-tabs":s.value}])},[s.value?((0,t.openBlock)(),(0,t.createElementBlock)(`header`,N,[(0,t.createElementVNode)(`div`,P,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.tabs,(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`button`,{id:p(r),key:e.id,ref_for:!0,ref:t=>m(e.id,t),type:`button`,role:`tab`,class:(0,t.normalizeClass)([`lumal-cockpit-card__tab`,{"is-active":e.id===l.value}]),"aria-controls":f,"aria-selected":e.id===l.value,tabindex:e.id===l.value?0:-1,onClick:t=>h(e.id),onKeydown:e=>g(e,r)},[(0,t.renderSlot)(n.$slots,`tab`,{tab:e,active:e.id===l.value},()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.title),1)])],42,F))),128))])])):d.value||n.$slots.title?((0,t.openBlock)(),(0,t.createElementBlock)(`header`,I,[(0,t.createElementVNode)(`div`,L,[(0,t.renderSlot)(n.$slots,`title`,{title:d.value,widget:u.value},()=>[(0,t.createTextVNode)((0,t.toDisplayString)(d.value),1)])])])):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,{id:s.value?f:void 0,class:`lumal-cockpit-card__body`,role:s.value?`tabpanel`:void 0,"aria-labelledby":s.value?p(Math.max(0,e.tabs.findIndex(e=>e.id===l.value))):void 0,tabindex:s.value?0:void 0},[(0,t.renderSlot)(n.$slots,`default`,{activeTabId:l.value})],8,R)],2))}}),B=[`data-mode`,`data-cockpit-theme`,`data-viewport-mode`],V={key:0,class:`lumal-cockpit__auto-refresh`},H={class:`lumal-cockpit__auto-refresh-control`},U=(0,t.defineComponent)({__name:`LumalCockpit`,props:(0,t.mergeModels)({config:{},registry:{},baseWidth:{default:1920},baseHeight:{default:1080},cachePages:{type:Boolean,default:!0},renderMode:{default:`runtime`},viewportMode:{default:`scale`},messageBus:{},cardComponent:{},autoRefresh:{type:Boolean,default:!1},autoRefreshIntervalMs:{default:a}},{activeLayoutId:{},activeLayoutIdModifiers:{},themeMode:{default:`dark`},themeModeModifiers:{},autoRefreshEnabled:{type:Boolean,default:!1},autoRefreshEnabledModifiers:{}}),emits:(0,t.mergeModels)([`configure`,`configError`,`nodeSelect`],[`update:activeLayoutId`,`update:themeMode`,`update:autoRefreshEnabled`]),setup(r,{expose:i,emit:a}){let l=r,u=a,d=(0,t.useModel)(r,`activeLayoutId`),f=(0,t.useModel)(r,`themeMode`),p=(0,t.useModel)(r,`autoRefreshEnabled`),m=(0,t.useSlots)(),h=(0,t.computed)(()=>{try{return{config:e.i(l.config),error:null}}catch(e){return{config:null,error:e}}}),g=(0,t.computed)(()=>h.value.config);(0,t.watch)(()=>h.value.error,e=>{e&&u(`configError`,e)},{immediate:!0});let _=l.messageBus??e.r();(0,t.provide)(c,{cockpitId:l.config.id,mode:l.renderMode,registry:l.registry,messages:_,cachePages:l.cachePages,slots:m,get cardComponent(){return l.cardComponent??z}});let v=s({config:()=>g.value??l.config,activeLayoutId:d}),y=(0,t.computed)(()=>{let e=v.activeLayout.value;if(e)return{cockpitId:g.value?.id??l.config.id,layoutId:e.id,instanceId:`${e.id}:center`,mode:l.renderMode,messages:_}}),b=(0,t.ref)(!1);(0,t.watch)([()=>l.autoRefresh,p],([e,t])=>{b.value=!!(e&&t)},{immediate:!0});let x=(0,t.computed)(()=>{let e=Math.round(l.autoRefreshIntervalMs/6e4);return e>=1?`${e} 分钟`:`${Math.round(l.autoRefreshIntervalMs/1e3)} 秒`}),{refreshNow:S}=o({messages:_,sourceId:()=>g.value?.id??l.config.id,intervalMs:()=>l.autoRefreshIntervalMs,enabled:b}),C=(0,t.ref)(null);async function w(){C.value?.requestFullscreen&&await C.value.requestFullscreen()}async function T(){document.fullscreenElement&&await document.exitFullscreen()}function E(){f.value=f.value===`dark`?`light`:`dark`}i({enterFullscreen:w,exitFullscreen:T,messages:_,toggleTheme:E,refreshNow:S});let D=(0,t.computed)(()=>!!g.value?.layouts.length);function O(){u(`configure`)}function k(e){if(l.renderMode!==`design`)return;let t=(e.target instanceof Element?e.target:null)?.closest(`[data-cockpit-node]`);if(!t||!C.value?.contains(t))return;let n=t.dataset.cockpitNode,r=t.dataset.cockpitNodeId;!n||!r||u(`nodeSelect`,{kind:n,id:r,side:t.dataset.cockpitSide})}return(e,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`rootRef`,ref:C,class:`lumal-cockpit`,"data-mode":r.renderMode,"data-cockpit-theme":f.value,"data-viewport-mode":r.viewportMode,onClickCapture:k},[h.value.error?(0,t.renderSlot)(e.$slots,`error`,{key:0,error:h.value.error},()=>[i[1]||=(0,t.createElementVNode)(`div`,{class:`lumal-cockpit__error`,role:`alert`},` 配置加载失败 `,-1)]):D.value?(0,t.unref)(v).activeLayout.value&&y.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createVNode)(M,{title:g.value.title,"base-width":r.baseWidth,"base-height":r.baseHeight,"viewport-mode":r.viewportMode,layout:(0,t.unref)(v).activeLayout.value,"center-context":y.value},{"header-prefix":(0,t.withCtx)(()=>[(0,t.renderSlot)(e.$slots,`header-prefix`)]),"header-title":(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,`header-title`,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)))]),"header-actions":(0,t.withCtx)(()=>[r.autoRefresh?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,V,[(0,t.createVNode)((0,t.unref)(n.ElTooltip),{content:p.value?`关闭自动刷新(每 ${x.value})`:`开启自动刷新(每 ${x.value})`},{default:(0,t.withCtx)(()=>[(0,t.createElementVNode)(`label`,H,[i[3]||=(0,t.createElementVNode)(`span`,null,`自动刷新`,-1),(0,t.createVNode)((0,t.unref)(n.ElSwitch),{modelValue:p.value,"onUpdate:modelValue":i[0]||=e=>p.value=e,size:`small`,"data-action":`cockpit-auto-refresh`,"aria-label":`全局自动刷新,间隔 ${x.value}`},null,8,[`modelValue`,`aria-label`])])]),_:1},8,[`content`])])):(0,t.createCommentVNode)(``,!0),(0,t.renderSlot)(e.$slots,`header-actions`)]),center:(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,`center`,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)))]),left:(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,`left`,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)))]),right:(0,t.withCtx)(n=>[(0,t.renderSlot)(e.$slots,`right`,(0,t.normalizeProps)((0,t.guardReactiveProps)(n)))]),_:3},8,[`title`,`base-width`,`base-height`,`viewport-mode`,`layout`,`center-context`]),(0,t.renderSlot)(e.$slots,`configure-trigger`,{configure:O})],64)):(0,t.createCommentVNode)(``,!0):(0,t.renderSlot)(e.$slots,`empty`,{key:1},()=>[i[2]||=(0,t.createElementVNode)(`div`,{class:`lumal-cockpit__empty`,role:`status`},` 空驾驶舱 `,-1)])],40,B))}});function W(e,t){let n=e;return n.install=function(n){n.component(t,e)},n}var G=W(U,`LumalCockpit`),K=W(z,`LumalCockpitCard`);Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return a}});
|