@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.
@@ -1,81 +1,57 @@
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, openBlock as u, provide as d, ref as f, renderSlot as p, shallowRef as m, toValue as h, unref as g, watch as _, withCtx as v } from "vue";
2
- import { ElButton as y } from "element-plus";
3
- import { LumalIcon as b } from "@lumal/icons-vue";
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 x(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;
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: i,
16
- scaledWidth: a,
17
- scaledHeight: o,
18
- offsetX: (e - a) / 2,
19
- offsetY: (t - o) / 2
9
+ scale: a,
10
+ scaledWidth: o,
11
+ scaledHeight: s,
12
+ offsetX: c,
13
+ offsetY: l
20
14
  };
21
15
  }
22
- function S(e, t) {
23
- let n = m({
24
- scale: 1,
25
- scaledWidth: t.baseWidth(),
26
- scaledHeight: t.baseHeight(),
27
- offsetX: 0,
28
- offsetY: 0
29
- }), r = f(!1), i = null, a = 0;
30
- function o() {
31
- let i = e.value;
32
- i && (n.value = x(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
- 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: n,
61
- ready: r,
62
- measure: o
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 C = Symbol("lumal-cockpit-context");
68
- function w(e) {
69
- d(C, e);
43
+ var S = Symbol("lumal-cockpit-context");
44
+ function C(e) {
45
+ d(S, e);
70
46
  }
71
- function T(e = !1) {
72
- let t = o(C, null);
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 E = 3, D = 320, ee = 420, O = 100, k = 0;
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__ */ a({
272
+ }, ne = /* @__PURE__ */ s({
297
273
  __name: "CockpitErrorBoundary",
298
274
  emits: ["error"],
299
- setup(i, { emit: a }) {
300
- let o = a, c = f(!1), d = f(null), m = f(0);
301
- l((e) => (c.value = !0, d.value = e, o("error", e), !1));
302
- async function h() {
303
- c.value = !1, d.value = null, await s(), m.value += 1;
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 (i, a) => (u(), e("div", Q, [c.value ? p(i.$slots, "error", {
281
+ return (e, t) => (u(), n("div", Q, [s.value ? p(e.$slots, "error", {
306
282
  key: 0,
307
- error: d.value,
308
- retry: h
309
- }, () => [t("div", te, [a[1] ||= t("p", { class: "lumal-cockpit-error-boundary__message" }, " 组件渲染失败 ", -1), r(g(y), {
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: h
287
+ onClick: m
312
288
  }, {
313
- default: v(() => [r(g(b), {
289
+ default: _(() => [a(h(y), {
314
290
  name: "lumal:refresh",
315
291
  size: 15
316
- }), a[0] ||= n(" 重试 ", -1)]),
292
+ }), t[0] ||= i(" 重试 ", -1)]),
317
293
  _: 1
318
- })])]) : p(i.$slots, "default", { key: m.value })]));
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 = i(e);
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 _, E as a, x as 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, D as o, F as p, Z as r, ee as s, re as t, R as u, w as v, S as x, T as y };
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}});