@lumal/cockpit 0.0.5-beta → 0.0.6-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 +8 -0
- package/README.md +2 -0
- package/dist/designer.cjs +1 -1
- package/dist/designer.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.js +3 -3
- package/dist/resolveComponent-C-IZ1bCO.cjs +1 -0
- package/dist/{resolveComponent-_XUQaM5w.js → resolveComponent-DK0l5LAa.js} +55 -79
- package/dist/runtime-Cpp-LGxT.cjs +1 -0
- package/dist/{runtime-DTxtlBRg.js → runtime-CwH1dl9E.js} +95 -94
- package/dist/runtime.cjs +1 -1
- package/dist/runtime.js +2 -2
- package/dist/src/composables/useCanvasScale.d.ts +2 -2
- package/dist/src/composables/useCanvasScale.d.ts.map +1 -1
- package/dist/src/runtime/LumalCockpitCanvas.vue.d.ts.map +1 -1
- package/dist/{validate-ip4tDXsj.js → validate-Clt5g664.js} +1 -1
- package/dist/{validate-CRxxljQ8.cjs → validate-DFdf73T_.cjs} +1 -1
- package/package.json +4 -3
- package/dist/resolveComponent-DXwlDKov.cjs +0 -1
- package/dist/runtime-Be4SmioJ.cjs +0 -1
|
@@ -1,81 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { computeViewportScale as e, useViewportScale as t } from "@lumal/viewport";
|
|
2
|
+
import { createElementBlock as n, createElementVNode as r, createTextVNode as i, createVNode as a, defineAsyncComponent as o, defineComponent as s, inject as c, nextTick as l, onErrorCaptured as ee, openBlock as u, provide as d, ref as f, renderSlot as p, shallowRef as m, unref as h, watch as g, withCtx as _ } from "vue";
|
|
3
|
+
import { ElButton as v } from "element-plus";
|
|
4
|
+
import { LumalIcon as y } from "@lumal/icons-vue";
|
|
4
5
|
//#region src/composables/useCanvasScale.ts
|
|
5
|
-
function
|
|
6
|
-
|
|
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;
|
|
6
|
+
function b(t, n, r, i) {
|
|
7
|
+
let { scale: a, scaledWidth: o, scaledHeight: s, offsetX: c, offsetY: l } = e(t, n, r, i);
|
|
14
8
|
return {
|
|
15
|
-
scale:
|
|
16
|
-
scaledWidth:
|
|
17
|
-
scaledHeight:
|
|
18
|
-
offsetX:
|
|
19
|
-
offsetY:
|
|
9
|
+
scale: a,
|
|
10
|
+
scaledWidth: o,
|
|
11
|
+
scaledHeight: s,
|
|
12
|
+
offsetX: c,
|
|
13
|
+
offsetY: l
|
|
20
14
|
};
|
|
21
15
|
}
|
|
22
|
-
function
|
|
23
|
-
let
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
o
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
function l() {
|
|
44
|
-
i?.disconnect(), i = null;
|
|
45
|
-
}
|
|
46
|
-
function u() {
|
|
47
|
-
l(), !(t.enabled !== void 0 && !h(t.enabled)) && (o(), typeof ResizeObserver < "u" && e.value && (i = new ResizeObserver(s), i.observe(e.value)));
|
|
48
|
-
}
|
|
49
|
-
return _([
|
|
50
|
-
e,
|
|
51
|
-
t.baseWidth,
|
|
52
|
-
t.baseHeight,
|
|
53
|
-
() => t.enabled === void 0 || h(t.enabled)
|
|
54
|
-
], u, {
|
|
55
|
-
flush: "post",
|
|
56
|
-
immediate: !0
|
|
57
|
-
}), c(() => {
|
|
58
|
-
a && typeof cancelAnimationFrame < "u" && cancelAnimationFrame(a), l();
|
|
16
|
+
function x(e, n) {
|
|
17
|
+
let r = t({
|
|
18
|
+
target: e,
|
|
19
|
+
designWidth: n.baseWidth,
|
|
20
|
+
designHeight: n.baseHeight,
|
|
21
|
+
enabled: n.enabled
|
|
22
|
+
}), i = m(b(0, 0, n.baseWidth(), n.baseHeight()));
|
|
23
|
+
return g(r.result, () => {
|
|
24
|
+
let { scale: e, scaledWidth: t, scaledHeight: n, offsetX: a, offsetY: o } = r.result.value;
|
|
25
|
+
i.value = {
|
|
26
|
+
scale: e,
|
|
27
|
+
scaledWidth: t,
|
|
28
|
+
scaledHeight: n,
|
|
29
|
+
offsetX: a,
|
|
30
|
+
offsetY: o
|
|
31
|
+
};
|
|
32
|
+
}, {
|
|
33
|
+
immediate: !0,
|
|
34
|
+
flush: "sync"
|
|
59
35
|
}), {
|
|
60
|
-
result:
|
|
61
|
-
ready: r,
|
|
62
|
-
measure:
|
|
36
|
+
result: i,
|
|
37
|
+
ready: r.ready,
|
|
38
|
+
measure: r.measure
|
|
63
39
|
};
|
|
64
40
|
}
|
|
65
41
|
//#endregion
|
|
66
42
|
//#region src/composables/useCockpitContext.ts
|
|
67
|
-
var
|
|
68
|
-
function
|
|
69
|
-
d(
|
|
43
|
+
var S = Symbol("lumal-cockpit-context");
|
|
44
|
+
function C(e) {
|
|
45
|
+
d(S, e);
|
|
70
46
|
}
|
|
71
|
-
function
|
|
72
|
-
let t =
|
|
47
|
+
function w(e = !1) {
|
|
48
|
+
let t = c(S, null);
|
|
73
49
|
if (!t && !e) throw Error("[cockpit] 未找到驾驶舱渲染上下文,请确认组件在 LumalCockpit 内渲染。");
|
|
74
50
|
return t;
|
|
75
51
|
}
|
|
76
52
|
//#endregion
|
|
77
53
|
//#region src/config/defaults.ts
|
|
78
|
-
var
|
|
54
|
+
var T = 3, E = 320, D = 420, O = 100, k = 0;
|
|
79
55
|
function A(e = "ck") {
|
|
80
56
|
k += 1;
|
|
81
57
|
let t = Date.now().toString(36), n = Math.random().toString(36).slice(2, 8);
|
|
@@ -293,39 +269,39 @@ function Z(e = {}) {
|
|
|
293
269
|
var Q = { class: "lumal-cockpit-error-boundary" }, te = {
|
|
294
270
|
class: "lumal-cockpit-error-boundary__fallback",
|
|
295
271
|
role: "alert"
|
|
296
|
-
}, ne = /* @__PURE__ */
|
|
272
|
+
}, ne = /* @__PURE__ */ s({
|
|
297
273
|
__name: "CockpitErrorBoundary",
|
|
298
274
|
emits: ["error"],
|
|
299
|
-
setup(
|
|
300
|
-
let o =
|
|
301
|
-
|
|
302
|
-
async function
|
|
303
|
-
|
|
275
|
+
setup(e, { emit: t }) {
|
|
276
|
+
let o = t, s = f(!1), c = f(null), d = f(0);
|
|
277
|
+
ee((e) => (s.value = !0, c.value = e, o("error", e), !1));
|
|
278
|
+
async function m() {
|
|
279
|
+
s.value = !1, c.value = null, await l(), d.value += 1;
|
|
304
280
|
}
|
|
305
|
-
return (
|
|
281
|
+
return (e, t) => (u(), n("div", Q, [s.value ? p(e.$slots, "error", {
|
|
306
282
|
key: 0,
|
|
307
|
-
error:
|
|
308
|
-
retry:
|
|
309
|
-
}, () => [
|
|
283
|
+
error: c.value,
|
|
284
|
+
retry: m
|
|
285
|
+
}, () => [r("div", te, [t[1] ||= r("p", { class: "lumal-cockpit-error-boundary__message" }, " 组件渲染失败 ", -1), a(h(v), {
|
|
310
286
|
class: "lumal-cockpit-error-boundary__retry",
|
|
311
|
-
onClick:
|
|
287
|
+
onClick: m
|
|
312
288
|
}, {
|
|
313
|
-
default:
|
|
289
|
+
default: _(() => [a(h(y), {
|
|
314
290
|
name: "lumal:refresh",
|
|
315
291
|
size: 15
|
|
316
|
-
}),
|
|
292
|
+
}), t[0] ||= i(" 重试 ", -1)]),
|
|
317
293
|
_: 1
|
|
318
|
-
})])]) : p(
|
|
294
|
+
})])]) : p(e.$slots, "default", { key: d.value })]));
|
|
319
295
|
}
|
|
320
296
|
}), $ = /* @__PURE__ */ new WeakMap();
|
|
321
297
|
function re(e) {
|
|
322
298
|
if (typeof e == "function") {
|
|
323
299
|
let t = e, n = $.get(t);
|
|
324
300
|
if (n) return n;
|
|
325
|
-
let r =
|
|
301
|
+
let r = o(e);
|
|
326
302
|
return $.set(t, r), r;
|
|
327
303
|
}
|
|
328
304
|
return e;
|
|
329
305
|
}
|
|
330
306
|
//#endregion
|
|
331
|
-
export { N as _,
|
|
307
|
+
export { N as _, T as a, b, O as c, P as d, M as f, j as g, I as h, X as i, A as l, L as m, ne as n, E as o, F as p, Z as r, D as s, re as t, R as u, C as v, x, w as y };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("./resolveComponent-C-IZ1bCO.cjs");let t=require("vue"),n=require("element-plus"),r=require("@lumal/icons-vue");function i(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 a=`cockpit:refresh`,o=300*1e3;function s(e){let n=e.enabled??(0,t.ref)(e.defaultEnabled??!1),r;function i(n=`manual`){let r={reason:n,at:Date.now()};e.messages.publish({topic:a,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(()=>{typeof document<`u`&&document.hidden||i(`interval`)},n)}function c(){!document.hidden&&n.value&&i(`interval`)}return typeof document<`u`&&document.addEventListener(`visibilitychange`,c),(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(),typeof document<`u`&&document.removeEventListener(`visibilitychange`,c)}),{enabled:n,refreshNow:i}}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.shallowReactive)({cockpitId:o.cockpitId,layoutId:a.layoutId,instanceId:a.widget.id,mode:o.mode,messages:o.messages});(0,t.watchEffect)(()=>{m.cockpitId=o.cockpitId,m.layoutId=a.layoutId,m.instanceId=a.widget.id,m.mode=o.mode,m.messages=o.messages}),e.v(m),(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:(0,t.unref)(m)},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},[((0,t.unref)(s).cachePages?o.has(n.id):n.id===a.value)?(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.useTemplateRef)(`containerRef`),{result:a}=e.x(i,{baseWidth:()=>r.baseWidth,baseHeight:()=>r.baseHeight,enabled:()=>r.viewportMode===`scale`}),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:o}},{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:a,emit:o}){let l=r,u=o,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.shallowRef)(null),g=(0,t.shallowRef)(null),_=``,v=``;(0,t.watchEffect)(()=>{try{let t=JSON.stringify(l.config);if(t===_){g.value=null;return}let n=e.i(l.config),r=JSON.stringify(n);_=t,g.value=null,r!==v&&(h.value=n,v=r)}catch(e){g.value=e}});let y=(0,t.computed)(()=>({config:h.value,error:g.value}));(0,t.watch)(()=>y.value.error,e=>{e&&u(`configError`,e)},{immediate:!0});let b=l.messageBus??e.r(),x=(0,t.shallowReactive)({cockpitId:l.config.id,mode:l.renderMode,registry:l.registry,messages:b,cachePages:l.cachePages,slots:m,cardComponent:l.cardComponent??z});(0,t.watchEffect)(()=>{x.cockpitId=h.value?.id??l.config.id,x.mode=l.renderMode,x.registry=l.registry,x.cachePages=l.cachePages,x.cardComponent=l.cardComponent??z}),(0,t.provide)(c,x);let S=i({config:()=>h.value??l.config,activeLayoutId:d}),C=(0,t.computed)(()=>{let e=S.activeLayout.value;if(e)return{cockpitId:h.value?.id??l.config.id,layoutId:e.id,instanceId:`${e.id}:center`,mode:l.renderMode,messages:b}}),w=(0,t.ref)(!1);(0,t.watch)([()=>l.autoRefresh,p],([e,t])=>{w.value=!!(e&&t)},{immediate:!0});let T=(0,t.computed)(()=>{let e=Math.round(l.autoRefreshIntervalMs/6e4);return e>=1?`${e} 分钟`:`${Math.round(l.autoRefreshIntervalMs/1e3)} 秒`}),{refreshNow:E}=s({messages:b,sourceId:()=>h.value?.id??l.config.id,intervalMs:()=>l.autoRefreshIntervalMs,enabled:w}),D=(0,t.ref)(null);async function O(){D.value?.requestFullscreen&&await D.value.requestFullscreen()}async function k(){document.fullscreenElement&&await document.exitFullscreen()}function A(){f.value=f.value===`dark`?`light`:`dark`}a({enterFullscreen:O,exitFullscreen:k,messages:b,toggleTheme:A,refreshNow:E});let j=(0,t.computed)(()=>!!h.value?.layouts.length);function N(){u(`configure`)}function P(e){if(l.renderMode!==`design`)return;let t=(e.target instanceof Element?e.target:null)?.closest(`[data-cockpit-node]`);if(!t||!D.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:D,class:`lumal-cockpit`,"data-mode":r.renderMode,"data-cockpit-theme":f.value,"data-viewport-mode":r.viewportMode,onClickCapture:P},[y.value.error?(0,t.renderSlot)(e.$slots,`error`,{key:0,error:y.value.error},()=>[i[1]||=(0,t.createElementVNode)(`div`,{class:`lumal-cockpit__error`,role:`alert`},` 配置加载失败 `,-1)]):j.value?(0,t.unref)(S).activeLayout.value&&C.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createVNode)(M,{title:h.value.title,"base-width":r.baseWidth,"base-height":r.baseHeight,"viewport-mode":r.viewportMode,layout:(0,t.unref)(S).activeLayout.value,"center-context":C.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?`关闭自动刷新(每 ${T.value})`:`开启自动刷新(每 ${T.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":`全局自动刷新,间隔 ${T.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:N})],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 a}}),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 o}}),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 s}});
|