@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.
Files changed (49) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -21
  3. package/dist/cockpit.css +1 -1
  4. package/dist/createCockpitRegistry-8t6uUH6d.js +31 -0
  5. package/dist/createCockpitRegistry-B2vNbpcw.cjs +1 -0
  6. package/dist/designer.cjs +1 -1
  7. package/dist/designer.js +613 -546
  8. package/dist/index.cjs +1 -1
  9. package/dist/index.js +6 -6
  10. package/dist/registry.cjs +1 -1
  11. package/dist/registry.js +1 -1
  12. package/dist/resolveComponent-DXwlDKov.cjs +1 -0
  13. package/dist/resolveComponent-_XUQaM5w.js +331 -0
  14. package/dist/runtime-Be4SmioJ.cjs +1 -0
  15. package/dist/{runtime-CXiih7DE.js → runtime-DTxtlBRg.js} +167 -155
  16. package/dist/runtime.cjs +1 -1
  17. package/dist/runtime.js +2 -2
  18. package/dist/src/composables/index.d.ts +2 -2
  19. package/dist/src/composables/index.d.ts.map +1 -1
  20. package/dist/src/composables/useCanvasScale.d.ts +2 -1
  21. package/dist/src/composables/useCanvasScale.d.ts.map +1 -1
  22. package/dist/src/composables/useCockpitAutoRefresh.d.ts +1 -1
  23. package/dist/src/composables/useCockpitAutoRefresh.d.ts.map +1 -1
  24. package/dist/src/composables/useCockpitRefresh.d.ts +1 -1
  25. package/dist/src/composables/useCockpitRefresh.d.ts.map +1 -1
  26. package/dist/src/designer/CockpitComponentLibrary.vue.d.ts.map +1 -1
  27. package/dist/src/designer/CockpitLayoutEditor.vue.d.ts.map +1 -1
  28. package/dist/src/designer/CockpitWidgetPreview.vue.d.ts +3 -1
  29. package/dist/src/designer/CockpitWidgetPreview.vue.d.ts.map +1 -1
  30. package/dist/src/designer/LumalCockpitDesigner.vue.d.ts +2 -2
  31. package/dist/src/designer/useCockpitDraft.d.ts.map +1 -1
  32. package/dist/src/index.d.ts +2 -1
  33. package/dist/src/index.d.ts.map +1 -1
  34. package/dist/src/messaging/createCockpitMessageBus.d.ts +2 -2
  35. package/dist/src/messaging/createCockpitMessageBus.d.ts.map +1 -1
  36. package/dist/src/messaging/types.d.ts +5 -1
  37. package/dist/src/messaging/types.d.ts.map +1 -1
  38. package/dist/src/registry/createCockpitRegistry.d.ts.map +1 -1
  39. package/dist/src/runtime/LumalCockpit.vue.d.ts.map +1 -1
  40. package/dist/src/runtime/LumalCockpitContainer.vue.d.ts.map +1 -1
  41. package/dist/src/runtime/LumalCockpitWidgetHost.vue.d.ts.map +1 -1
  42. package/dist/{validate-KSzm5SZW.cjs → validate-CRxxljQ8.cjs} +1 -1
  43. package/dist/{validate-DkC_IHrC.js → validate-ip4tDXsj.js} +1 -1
  44. package/package.json +4 -3
  45. package/dist/createCockpitRegistry-D5F4d5By.js +0 -30
  46. package/dist/createCockpitRegistry-DHr9nXJY.cjs +0 -1
  47. package/dist/resolveComponent-BF1aCxAk.cjs +0 -1
  48. package/dist/resolveComponent-QbJRsdxR.js +0 -308
  49. 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}});