agentworkshop 0.7.20 → 0.7.22

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 (84) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{BA3XzwiD.js → 0exC4jVL.js} +1 -1
  3. package/.output/public/_nuxt/BAbAEW0D.js +1 -0
  4. package/.output/public/_nuxt/{DBXhDLgl.js → BuiGDfMB.js} +1 -1
  5. package/.output/public/_nuxt/Ci0uX4c4.js +1 -0
  6. package/.output/public/_nuxt/D6B0xnjk.js +1 -0
  7. package/.output/public/_nuxt/{TownView.BHLKAjEu.css → TownView.zu2rU5nS.css} +1 -1
  8. package/.output/public/_nuxt/_id_.C2VHq_vT.css +1 -0
  9. package/.output/public/_nuxt/_id_.Dswy2p0I.css +1 -0
  10. package/.output/public/_nuxt/builds/latest.json +1 -1
  11. package/.output/public/_nuxt/builds/meta/e2341fc0-6f3f-4680-abf8-935a7c9fb912.json +1 -0
  12. package/.output/public/_nuxt/{BOJaHO5V.js → c3mwkHWP.js} +2 -2
  13. package/.output/public/_nuxt/daq.BTdEun-8.css +1 -0
  14. package/.output/public/_nuxt/dbi5bHkY.js +2 -0
  15. package/.output/public/_nuxt/{DsOkkMX3.js → jyQyulh-.js} +1 -1
  16. package/.output/public/_nuxt/{B-E8fXAO.js → n3vMFfrv.js} +1 -1
  17. package/.output/server/chunks/_/nitro.mjs +847 -722
  18. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  19. package/.output/server/chunks/build/{TownView-ql2eHZOg.mjs → TownView-DxeQe1Bl.mjs} +144 -143
  20. package/.output/server/chunks/build/{TownView-ql2eHZOg.mjs.map → TownView-DxeQe1Bl.mjs.map} +1 -1
  21. package/.output/server/chunks/build/{_id_-CwR5oLu9.mjs → _id_-B9RvEQFC.mjs} +33 -35
  22. package/.output/server/chunks/build/_id_-B9RvEQFC.mjs.map +1 -0
  23. package/.output/server/chunks/build/{_id_-Bs-euJPu.mjs → _id_-CqF0R5W5.mjs} +138 -137
  24. package/.output/server/chunks/build/_id_-CqF0R5W5.mjs.map +1 -0
  25. package/.output/server/chunks/build/{_wsId_-B3aB9bIp.mjs → _wsId_-YC2t_fRt.mjs} +3 -3
  26. package/.output/server/chunks/build/{_wsId_-B3aB9bIp.mjs.map → _wsId_-YC2t_fRt.mjs.map} +1 -1
  27. package/.output/server/chunks/build/{daq-epWL_sC7.mjs → daq-Bhwwz9vp.mjs} +146 -118
  28. package/.output/server/chunks/build/daq-Bhwwz9vp.mjs.map +1 -0
  29. package/.output/server/chunks/build/{pages-Dq7_H4FK.mjs → pages-D9tOoJsf.mjs} +2 -2
  30. package/.output/server/chunks/build/{pages-Dq7_H4FK.mjs.map → pages-D9tOoJsf.mjs.map} +1 -1
  31. package/.output/server/chunks/build/{town-CstiKxf_.mjs → town-Dsh0jlwZ.mjs} +3 -3
  32. package/.output/server/chunks/build/{town-CstiKxf_.mjs.map → town-Dsh0jlwZ.mjs.map} +1 -1
  33. package/.output/server/chunks/build/{useDaqStream-BOOZ-p-l.mjs → useDaqStream-DkRL3tEW.mjs} +9 -1
  34. package/.output/server/chunks/build/{useDaqStream-BOOZ-p-l.mjs.map → useDaqStream-DkRL3tEW.mjs.map} +1 -1
  35. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
  36. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  37. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +34 -0
  38. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs.map +1 -0
  39. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
  40. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  41. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +33 -0
  42. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs.map +1 -0
  43. package/.output/server/chunks/routes/renderer.mjs +1 -1
  44. package/.output/server/chunks/virtual/entry.mjs +6 -6
  45. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  46. package/.output/server/package.json +1 -1
  47. package/README-zh.md +478 -469
  48. package/README.md +486 -475
  49. package/app/components/workshop/town/TownView.vue +7082 -7076
  50. package/app/composables/workshop/useDaqStream.ts +10 -0
  51. package/app/pages/daq/[id].vue +4 -3
  52. package/app/pages/daq/index.vue +66 -21
  53. package/app/pages/dcw/[id].vue +5 -1
  54. package/package.json +148 -148
  55. package/scripts/_dbg-device-bind-e2e.mjs +129 -0
  56. package/server/api/workshop/daq/[id]/bind.post.ts +5 -2
  57. package/server/api/workshop/daq/[id]/bindings.put.ts +22 -0
  58. package/server/api/workshop/dcw/[id]/bind.post.ts +4 -2
  59. package/server/api/workshop/dcw/[id]/bindings.put.ts +21 -0
  60. package/server/data/daqs.json +404 -99
  61. package/server/data/dcw-lines.json +7 -0
  62. package/server/data/dcw-rollback.json +573 -10
  63. package/server/data/dcw-runs.json +91 -81
  64. package/server/data/dcw-writes.json +168 -0
  65. package/server/data/dcws.json +220 -220
  66. package/server/data/line-runs.json +18 -18
  67. package/server/services/workshop/agents/industrial-context.ts +231 -222
  68. package/server/services/workshop/daq/daq-controller.ts +76 -23
  69. package/server/services/workshop/daq/daq-node.ts +11 -1
  70. package/server/services/workshop/dcw/dcw-controller.ts +50 -2
  71. package/server/services/workshop/dcw/dcw-node.ts +10 -1
  72. package/shared/daq-protocol.ts +2 -0
  73. package/shared/dcw-protocol.ts +2 -0
  74. package/.output/public/_nuxt/B_C3GLsD.js +0 -1
  75. package/.output/public/_nuxt/Ba7YofCb.js +0 -2
  76. package/.output/public/_nuxt/CgT5wMfz.js +0 -1
  77. package/.output/public/_nuxt/D4CLp1hc.js +0 -1
  78. package/.output/public/_nuxt/_id_.DIxEKj88.css +0 -1
  79. package/.output/public/_nuxt/_id_.IbmpkhH4.css +0 -1
  80. package/.output/public/_nuxt/builds/meta/781a7557-9009-4289-ab59-7905c4f96825.json +0 -1
  81. package/.output/public/_nuxt/daq.6IrhVVfy.css +0 -1
  82. package/.output/server/chunks/build/_id_-Bs-euJPu.mjs.map +0 -1
  83. package/.output/server/chunks/build/_id_-CwR5oLu9.mjs.map +0 -1
  84. package/.output/server/chunks/build/daq-epWL_sC7.mjs.map +0 -1
@@ -5,7 +5,7 @@ import { u as useEntitiesStore, a as useWorkshopWs } from './useWorkshopWs-CprkZ
5
5
  import { s as setInterval, n as nowLocalIso } from './useLocalTime-9a4B-aHv.mjs';
6
6
  import { u as useTownBus } from './useTownBus-D9SoIsAN.mjs';
7
7
  import { u as useDcwStream } from './useDcwStream-DyB2ufQI.mjs';
8
- import { u as useDaqStream } from './useDaqStream-BOOZ-p-l.mjs';
8
+ import { u as useDaqStream } from './useDaqStream-DkRL3tEW.mjs';
9
9
  import { u as useDeviceTwins } from './useDeviceTwins-ZbT86L9O.mjs';
10
10
  import { shallowRef, ref, computed, toValue, watch, nextTick, defineComponent, reactive, mergeProps, unref, readonly, getCurrentScope, onScopeDispose, getCurrentInstance, toRef, customRef, useSSRContext } from 'vue';
11
11
  import { ssrRenderAttrs, ssrInterpolate, ssrRenderAttr, ssrRenderClass, ssrIncludeBooleanAttr, ssrRenderComponent, ssrRenderList, ssrRenderStyle, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer';
@@ -1725,7 +1725,8 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
1725
1725
  function stateEdgeAlarm(nodeId, prevState, nextState, value) {
1726
1726
  const n = daq.nodeById(nodeId);
1727
1727
  const tpl = n ? daqTplOf(n) : null;
1728
- const label = (n?.deviceBindingId ? deviceTwins.byId(n.deviceBindingId)?.name : null) ?? n?.name ?? nodeId.slice(0, 8);
1728
+ const devIds = n?.deviceIds ?? (n?.deviceBindingId ? [n.deviceBindingId] : []);
1729
+ const label = (devIds.length ? devIds.map((id) => deviceTwins.byId(id)?.name ?? id.slice(0, 8)).join(" / ") : null) ?? n?.name ?? nodeId.slice(0, 8);
1729
1730
  const val = `${value?.toFixed(tpl?.decimals ?? 2) ?? "--"} ${tpl?.unit ?? ""}`;
1730
1731
  if (nextState === "alarm") raiseAlarm(t("townView.k113fir9195", {
1731
1732
  p0: label,
@@ -1800,8 +1801,8 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
1800
1801
  return b.kind === "dcw" ? dcw.nodeById(b.nodeId)?.name ?? b.nodeId : daq.nodeById(b.nodeId)?.name ?? b.nodeId;
1801
1802
  }
1802
1803
  /** 数采 → 设备绑定(server 权威:node.deviceBindingId;REST bind 落库 + WS 收敛) */
1803
- const boundDeviceOf = (daqId) => daq.nodeById(daqId)?.deviceBindingId ?? null;
1804
- const daqOfDevice = (deviceId) => deviceId ? daq.nodes.filter((n) => n.deviceBindingId === deviceId).map((n) => n.id) : [];
1804
+ const boundDeviceOf = (daqId) => daq.nodeById(daqId)?.deviceIds?.[0] ?? daq.nodeById(daqId)?.deviceBindingId ?? null;
1805
+ const daqOfDevice = (deviceId) => deviceId ? daq.nodes.filter((n) => (n.deviceIds ?? (n.deviceBindingId ? [n.deviceBindingId] : [])).includes(deviceId)).map((n) => n.id) : [];
1805
1806
  /** 数采模板图标(设计稿 ICONS;SVG path 直嵌) */
1806
1807
  const DAQ_ICONS = {
1807
1808
  thermo: "<path d=\"M10 4a2 2 0 0 1 4 0v9a4 4 0 1 1-4 0V4Z\"/><circle cx=\"12\" cy=\"16.5\" r=\"1.6\"/>",
@@ -2295,82 +2296,82 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2295
2296
  return (_ctx, _push, _parent, _attrs) => {
2296
2297
  const _component_WorkshopAssetLibrary = AssetLibrary_default;
2297
2298
  const _component_WorkshopDeviceTwinPanel = DeviceTwinPanel_default;
2298
- _push(`<div${ssrRenderAttrs(mergeProps({ class: "town-view" }, _attrs))} data-v-33218c74><header class="topnav" data-v-33218c74><div class="brand" data-v-33218c74><svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-33218c74><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-33218c74></path><path d="M16 8.2 22.5 12v8L16 23.8 9.5 20v-8L16 8.2Z" stroke="#41c8f4" stroke-width="1.3" opacity=".85" data-v-33218c74></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-33218c74></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-33218c74></circle></svg><div data-v-33218c74><div class="brand-name" data-v-33218c74> DIGITAL <em data-v-33218c74>TWIN</em></div><div class="brand-sub" data-v-33218c74> AGENTWORKSHOP · ${ssrInterpolate(_ctx.$t("townView.klyi8yg127"))}</div></div></div><nav class="nav-tabs"${ssrRenderAttr("aria-label", _ctx.$t("townView.k1c9jyta001"))} data-v-33218c74><div class="seg" data-v-33218c74><button class="${ssrRenderClass({ on: unref(mode) === "browse" })}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k48dwh027"))}</button><button class="${ssrRenderClass({ on: unref(mode) === "edit" })}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k45eb0028"))}</button></div><button class="nav-action"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "把全部设备的位置/朝向/缩放写入数据库" : "运行模式只读")} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button>`);
2299
- if (unref(saveState) && unref(saveState).state !== "idle") _push(`<span class="${ssrRenderClass([`s-${unref(saveState).state}`, "save-chip"])}" data-v-33218c74>${ssrInterpolate(unref(saveStateLabel))}</span>`);
2299
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "town-view" }, _attrs))} data-v-5b974b95><header class="topnav" data-v-5b974b95><div class="brand" data-v-5b974b95><svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-5b974b95><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-5b974b95></path><path d="M16 8.2 22.5 12v8L16 23.8 9.5 20v-8L16 8.2Z" stroke="#41c8f4" stroke-width="1.3" opacity=".85" data-v-5b974b95></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-5b974b95></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-5b974b95></circle></svg><div data-v-5b974b95><div class="brand-name" data-v-5b974b95> DIGITAL <em data-v-5b974b95>TWIN</em></div><div class="brand-sub" data-v-5b974b95> AGENTWORKSHOP · ${ssrInterpolate(_ctx.$t("townView.klyi8yg127"))}</div></div></div><nav class="nav-tabs"${ssrRenderAttr("aria-label", _ctx.$t("townView.k1c9jyta001"))} data-v-5b974b95><div class="seg" data-v-5b974b95><button class="${ssrRenderClass({ on: unref(mode) === "browse" })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k48dwh027"))}</button><button class="${ssrRenderClass({ on: unref(mode) === "edit" })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k45eb0028"))}</button></div><button class="nav-action"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "把全部设备的位置/朝向/缩放写入数据库" : "运行模式只读")} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button>`);
2300
+ if (unref(saveState) && unref(saveState).state !== "idle") _push(`<span class="${ssrRenderClass([`s-${unref(saveState).state}`, "save-chip"])}" data-v-5b974b95>${ssrInterpolate(unref(saveStateLabel))}</span>`);
2300
2301
  else _push(`<!---->`);
2301
- _push(`</nav><div class="nav-right" data-v-33218c74><span class="${ssrRenderClass([{ "nav-bell-warn": unref(activeAlarmCount) > 0 }, "nav-chip mono"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1fsi3ir002"))} data-v-33218c74>◉ ${ssrInterpolate(unref(activeAlarmCount))}</span><span class="nav-chip mono" data-v-33218c74>${ssrInterpolate(unref(fps))} FPS</span><div class="avatar-chip"${ssrRenderAttr("title", _ctx.$t("townView.k1demf38003"))} data-v-33218c74><div class="avatar-fallback" data-v-33218c74>${ssrInterpolate((unref(userStore).user?.name ?? "OP").slice(0, 2).toUpperCase())}</div><span data-v-33218c74>${ssrInterpolate(unref(userStore).user?.name || _ctx.$t("townView.k1pub99m139"))}</span></div></div></header><div class="app" data-v-33218c74><aside class="rail rail-left" data-v-33218c74><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</h3><span class="panel-tag" data-v-33218c74>${ssrInterpolate(unref(deviceModels).length)}</span></div>`);
2302
+ _push(`</nav><div class="nav-right" data-v-5b974b95><span class="${ssrRenderClass([{ "nav-bell-warn": unref(activeAlarmCount) > 0 }, "nav-chip mono"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1fsi3ir002"))} data-v-5b974b95>◉ ${ssrInterpolate(unref(activeAlarmCount))}</span><span class="nav-chip mono" data-v-5b974b95>${ssrInterpolate(unref(fps))} FPS</span><div class="avatar-chip"${ssrRenderAttr("title", _ctx.$t("townView.k1demf38003"))} data-v-5b974b95><div class="avatar-fallback" data-v-5b974b95>${ssrInterpolate((unref(userStore).user?.name ?? "OP").slice(0, 2).toUpperCase())}</div><span data-v-5b974b95>${ssrInterpolate(unref(userStore).user?.name || _ctx.$t("townView.k1pub99m139"))}</span></div></div></header><div class="app" data-v-5b974b95><aside class="rail rail-left" data-v-5b974b95><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(deviceModels).length)}</span></div>`);
2302
2303
  _push(ssrRenderComponent(_component_WorkshopAssetLibrary, { class: "lib-embed" }, null, _parent));
2303
- _push(`</section><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2gwyas031"))}</h3><span class="panel-tag" data-v-33218c74>${ssrInterpolate(unref(daqTwins).length)}</span></div><div class="daq-ctrl" data-v-33218c74><button class="${ssrRenderClass([{ on: unref(daq).controller.running }, "daq-ctl-btn"])}"${ssrRenderAttr("title", unref(daq).controller.running ? "暂停全部采集:停止所有启用节点的采样(节点级启停独立)" : "恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)")} data-v-33218c74>${ssrInterpolate(unref(daq).controller.running ? _ctx.$t("townView.k3w3j8f140") : _ctx.$t("townView.k3n93ed175"))}</button><label class="daq-ctl-cycle mono"${ssrRenderAttr("title", _ctx.$t("townView.khzlyf5004"))} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3xg3w032"))} <input type="number" min="200" max="60000" step="100"${ssrRenderAttr("value", unref(daq).controller.defaultIntervalMs)} data-v-33218c74>ms </label></div><div class="daq-list" data-v-33218c74><!--[-->`);
2304
+ _push(`</section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2gwyas031"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(daqTwins).length)}</span></div><div class="daq-ctrl" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(daq).controller.running }, "daq-ctl-btn"])}"${ssrRenderAttr("title", unref(daq).controller.running ? "暂停全部采集:停止所有启用节点的采样(节点级启停独立)" : "恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)")} data-v-5b974b95>${ssrInterpolate(unref(daq).controller.running ? _ctx.$t("townView.k3w3j8f140") : _ctx.$t("townView.k3n93ed175"))}</button><label class="daq-ctl-cycle mono"${ssrRenderAttr("title", _ctx.$t("townView.khzlyf5004"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3xg3w032"))} <input type="number" min="200" max="60000" step="100"${ssrRenderAttr("value", unref(daq).controller.defaultIntervalMs)} data-v-5b974b95>ms </label></div><div class="daq-list" data-v-5b974b95><!--[-->`);
2304
2305
  ssrRenderList(unref(daqTemplates), (tpl) => {
2305
- _push(`<div class="daq-group" data-v-33218c74><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`daq:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2306
+ _push(`<div class="daq-group" data-v-5b974b95><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`daq:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2306
2307
  p0: tpl.name,
2307
2308
  p1: tpl.ch,
2308
2309
  p2: tpl.min,
2309
2310
  p3: tpl.max,
2310
2311
  p4: tpl.unit
2311
- }))} data-v-33218c74><span class="daq-caret" data-v-33218c74>▶</span><span class="daq-ico" data-v-33218c74><svg class="daq-svg" viewBox="0 0 24 24" data-v-33218c74>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-33218c74><span class="daq-name" data-v-33218c74>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-33218c74>${ssrInterpolate(tpl.code)}</span></div>`);
2312
- if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-33218c74> + </button>`);
2312
+ }))} data-v-5b974b95><span class="daq-caret" data-v-5b974b95>▶</span><span class="daq-ico" data-v-5b974b95><svg class="daq-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-5b974b95>${ssrInterpolate(tpl.code)}</span></div>`);
2313
+ if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-5b974b95> + </button>`);
2313
2314
  else _push(`<!---->`);
2314
- _push(`<span class="daq-count" data-v-33218c74>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2315
+ _push(`<span class="daq-count" data-v-5b974b95>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2315
2316
  if (unref(treeOpen)[`daq:${tpl.id}`]) {
2316
- _push(`<div class="daq-children" data-v-33218c74><!--[-->`);
2317
+ _push(`<div class="daq-children" data-v-5b974b95><!--[-->`);
2317
2318
  ssrRenderList(unref(daqNodesByTpl).get(tpl.id) ?? [], (n) => {
2318
- _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-33218c74><span class="${ssrRenderClass([daqLeafState(n), "node-dot"])}" data-v-33218c74></span><div class="daq-meta" data-v-33218c74><span class="daq-name" data-v-33218c74>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-33218c74><span class="node-val mono" data-v-33218c74>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-33218c74>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2319
- if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-33218c74>✓</span>`);
2319
+ _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-5b974b95><span class="${ssrRenderClass([daqLeafState(n), "node-dot"])}" data-v-5b974b95></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-5b974b95><span class="node-val mono" data-v-5b974b95>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-5b974b95>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2320
+ if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-5b974b95>✓</span>`);
2320
2321
  else _push(`<!---->`);
2321
2322
  _push(`</div>`);
2322
2323
  });
2323
2324
  _push(`<!--]-->`);
2324
- if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2325
+ if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2325
2326
  else _push(`<!---->`);
2326
2327
  _push(`</div>`);
2327
2328
  } else _push(`<!---->`);
2328
2329
  _push(`</div>`);
2329
2330
  });
2330
- _push(`<!--]--></div></section><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.km7ayhi033"))}</h3><span class="panel-tag" data-v-33218c74>${ssrInterpolate(unref(dcw).nodes.length)}</span></div><div class="daq-list" data-v-33218c74><!--[-->`);
2331
+ _push(`<!--]--></div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.km7ayhi033"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(dcw).nodes.length)}</span></div><div class="daq-list" data-v-5b974b95><!--[-->`);
2331
2332
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2332
- _push(`<div class="daq-group" data-v-33218c74><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`dcw:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2333
+ _push(`<div class="daq-group" data-v-5b974b95><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`dcw:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2333
2334
  p0: tpl.name,
2334
2335
  p1: tpl.ch,
2335
2336
  p2: tpl.min,
2336
2337
  p3: tpl.max,
2337
2338
  p4: tpl.unit
2338
- }))} data-v-33218c74><span class="daq-caret" data-v-33218c74>▶</span><span class="daq-ico" data-v-33218c74><svg class="daq-svg" viewBox="0 0 24 24" data-v-33218c74>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-33218c74><span class="daq-name" data-v-33218c74>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-33218c74>${ssrInterpolate(tpl.code)}</span></div>`);
2339
- if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-33218c74> + </button>`);
2339
+ }))} data-v-5b974b95><span class="daq-caret" data-v-5b974b95>▶</span><span class="daq-ico" data-v-5b974b95><svg class="daq-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-5b974b95>${ssrInterpolate(tpl.code)}</span></div>`);
2340
+ if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-5b974b95> + </button>`);
2340
2341
  else _push(`<!---->`);
2341
- _push(`<span class="daq-count" data-v-33218c74>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2342
+ _push(`<span class="daq-count" data-v-5b974b95>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2342
2343
  if (unref(treeOpen)[`dcw:${tpl.id}`]) {
2343
- _push(`<div class="daq-children" data-v-33218c74><!--[-->`);
2344
+ _push(`<div class="daq-children" data-v-5b974b95><!--[-->`);
2344
2345
  ssrRenderList(unref(dcwNodesByTpl).get(tpl.id) ?? [], (n) => {
2345
- _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-33218c74><span class="${ssrRenderClass([dcwLeafState(n), "node-dot"])}" data-v-33218c74></span><div class="daq-meta" data-v-33218c74><span class="daq-name" data-v-33218c74>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-33218c74><span class="node-val mono" data-v-33218c74>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-33218c74>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2346
- if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-33218c74>✓</span>`);
2346
+ _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-5b974b95><span class="${ssrRenderClass([dcwLeafState(n), "node-dot"])}" data-v-5b974b95></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-5b974b95><span class="node-val mono" data-v-5b974b95>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-5b974b95>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2347
+ if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-5b974b95>✓</span>`);
2347
2348
  else _push(`<!---->`);
2348
2349
  _push(`</div>`);
2349
2350
  });
2350
2351
  _push(`<!--]-->`);
2351
- if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2352
+ if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2352
2353
  else _push(`<!---->`);
2353
2354
  _push(`</div>`);
2354
2355
  } else _push(`<!---->`);
2355
2356
  _push(`</div>`);
2356
2357
  });
2357
- _push(`<!--]--></div></section><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1c9n911034"))}</h3><span class="panel-tag" data-v-33218c74>${ssrInterpolate(unref(dockChannels).length)}</span></div><div class="scene-list" data-v-33218c74><!--[-->`);
2358
+ _push(`<!--]--></div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1c9n911034"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(dockChannels).length)}</span></div><div class="scene-list" data-v-5b974b95><!--[-->`);
2358
2359
  ssrRenderList(unref(dockChannels), (ch) => {
2359
- _push(`<div class="${ssrRenderClass([{ active: ch.placed }, "scene-row"])}"${ssrRenderAttr("draggable", !ch.placed && unref(mode) === "edit")}${ssrRenderAttr("data-channel-id", ch.channelId)}${ssrRenderAttr("title", ch.placed ? "已在场景中,点击定位" : "拖拽到场景放置")} data-v-33218c74><span class="scene-ico" style="${ssrRenderStyle({ "--ch": ch.color })}" data-v-33218c74></span><div class="scene-meta-wrap" data-v-33218c74><span class="scene-name" data-v-33218c74>${ssrInterpolate(ch.name)}</span><span class="scene-meta" data-v-33218c74>${ssrInterpolate(ch.agentCount)} ${ssrInterpolate(_ctx.$t("townView.k1brss7t128"))} ${ssrInterpolate(ch.placed ? _ctx.$t("townView.k3n94g3141") : _ctx.$t("townView.k3os7i3176"))}</span></div>`);
2360
- if (ch.placed) _push(`<span class="scene-cur" data-v-33218c74>✓</span>`);
2361
- else _push(`<span class="scene-add" data-v-33218c74>+</span>`);
2360
+ _push(`<div class="${ssrRenderClass([{ active: ch.placed }, "scene-row"])}"${ssrRenderAttr("draggable", !ch.placed && unref(mode) === "edit")}${ssrRenderAttr("data-channel-id", ch.channelId)}${ssrRenderAttr("title", ch.placed ? "已在场景中,点击定位" : "拖拽到场景放置")} data-v-5b974b95><span class="scene-ico" style="${ssrRenderStyle({ "--ch": ch.color })}" data-v-5b974b95></span><div class="scene-meta-wrap" data-v-5b974b95><span class="scene-name" data-v-5b974b95>${ssrInterpolate(ch.name)}</span><span class="scene-meta" data-v-5b974b95>${ssrInterpolate(ch.agentCount)} ${ssrInterpolate(_ctx.$t("townView.k1brss7t128"))} ${ssrInterpolate(ch.placed ? _ctx.$t("townView.k3n94g3141") : _ctx.$t("townView.k3os7i3176"))}</span></div>`);
2361
+ if (ch.placed) _push(`<span class="scene-cur" data-v-5b974b95>✓</span>`);
2362
+ else _push(`<span class="scene-add" data-v-5b974b95>+</span>`);
2362
2363
  _push(`</div>`);
2363
2364
  });
2364
2365
  _push(`<!--]-->`);
2365
- if (unref(dockHint)) _push(`<div class="scene-hint" data-v-33218c74>${ssrInterpolate(unref(dockHint))}</div>`);
2366
+ if (unref(dockHint)) _push(`<div class="scene-hint" data-v-5b974b95>${ssrInterpolate(unref(dockHint))}</div>`);
2366
2367
  else _push(`<!---->`);
2367
- _push(`</div></section></aside><main class="stage-col" data-v-33218c74><div class="stage" data-v-33218c74><div id="town-host" class="town-host" data-v-33218c74></div><div class="stage-vignette" data-v-33218c74></div><div class="stage-top" data-v-33218c74><div class="vp-title" data-v-33218c74><h2 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1b0z4vr035"))}</h2><span class="vp-id" data-v-33218c74>CH · ${ssrInterpolate(unref(activeChannelName) || _ctx.$t("townView.k3lkuz3142"))}</span></div><div class="vp-tools" data-v-33218c74><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k18d6wnb005"))} data-v-33218c74><svg class="vp-svg" viewBox="0 0 24 24" data-v-33218c74><circle cx="12" cy="12" r="7" data-v-33218c74></circle><path d="M12 2v4M12 18v4M2 12h4M18 12h4" data-v-33218c74></path></svg></button><button class="${ssrRenderClass([{ on: unref(orbitOn) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1io51dn006"))} data-v-33218c74><svg class="vp-svg" viewBox="0 0 24 24" data-v-33218c74><circle cx="12" cy="12" r="3.2" data-v-33218c74></circle><path d="M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5" data-v-33218c74></path></svg></button><button class="${ssrRenderClass([{ on: unref(showCallouts) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1sgjlq8007"))} data-v-33218c74><svg class="vp-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M4 8h12l4 4-4 4H4z" data-v-33218c74></path><circle cx="8.5" cy="12" r="1.4" data-v-33218c74></circle></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k3wuf0008"))} data-v-33218c74><svg class="vp-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5" data-v-33218c74></path></svg></button></div></div><div class="angle-chip" data-v-33218c74><select${ssrRenderAttr("value", unref(viewPreset))}${ssrRenderAttr("aria-label", _ctx.$t("townView.k1k4j5i7009"))} data-v-33218c74><option value="std" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kv72860036"))}</option><option value="top" data-v-33218c74> 俯视 · TOP </option><option value="front" data-v-33218c74> 前视 · FRONT </option><option value="side" data-v-33218c74> 侧视 · SIDE </option></select></div>`);
2368
+ _push(`</div></section></aside><main class="stage-col" data-v-5b974b95><div class="stage" data-v-5b974b95><div id="town-host" class="town-host" data-v-5b974b95></div><div class="stage-vignette" data-v-5b974b95></div><div class="stage-top" data-v-5b974b95><div class="vp-title" data-v-5b974b95><h2 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b0z4vr035"))}</h2><span class="vp-id" data-v-5b974b95>CH · ${ssrInterpolate(unref(activeChannelName) || _ctx.$t("townView.k3lkuz3142"))}</span></div><div class="vp-tools" data-v-5b974b95><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k18d6wnb005"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="12" cy="12" r="7" data-v-5b974b95></circle><path d="M12 2v4M12 18v4M2 12h4M18 12h4" data-v-5b974b95></path></svg></button><button class="${ssrRenderClass([{ on: unref(orbitOn) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1io51dn006"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="12" cy="12" r="3.2" data-v-5b974b95></circle><path d="M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5" data-v-5b974b95></path></svg></button><button class="${ssrRenderClass([{ on: unref(showCallouts) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1sgjlq8007"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M4 8h12l4 4-4 4H4z" data-v-5b974b95></path><circle cx="8.5" cy="12" r="1.4" data-v-5b974b95></circle></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k3wuf0008"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5" data-v-5b974b95></path></svg></button></div></div><div class="angle-chip" data-v-5b974b95><select${ssrRenderAttr("value", unref(viewPreset))}${ssrRenderAttr("aria-label", _ctx.$t("townView.k1k4j5i7009"))} data-v-5b974b95><option value="std" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kv72860036"))}</option><option value="top" data-v-5b974b95> 俯视 · TOP </option><option value="front" data-v-5b974b95> 前视 · FRONT </option><option value="side" data-v-5b974b95> 侧视 · SIDE </option></select></div>`);
2368
2369
  if (unref(showCallouts)) {
2369
- _push(`<!--[--><svg class="leaders" data-v-33218c74><!--[-->`);
2370
+ _push(`<!--[--><svg class="leaders" data-v-5b974b95><!--[-->`);
2370
2371
  ssrRenderList(unref(callouts), (c) => {
2371
- _push(`<g class="${ssrRenderClass({ near: c.near })}" style="${ssrRenderStyle(c.leader ? null : { display: "none" })}" data-v-33218c74><path${ssrRenderAttr("d", `M ${c.x} ${c.y - 8} L ${c.x} ${c.y - 2}`)}${ssrRenderAttr("stroke", c.warn ? "rgba(246,196,83,.8)" : "rgba(65,200,244,.55)")} stroke-width="1.3" fill="none" data-v-33218c74></path><circle${ssrRenderAttr("cx", c.x)}${ssrRenderAttr("cy", c.y)} r="2.6"${ssrRenderAttr("fill", c.warn ? "#f6c453" : "#41c8f4")} data-v-33218c74></circle></g>`);
2372
+ _push(`<g class="${ssrRenderClass({ near: c.near })}" style="${ssrRenderStyle(c.leader ? null : { display: "none" })}" data-v-5b974b95><path${ssrRenderAttr("d", `M ${c.x} ${c.y - 8} L ${c.x} ${c.y - 2}`)}${ssrRenderAttr("stroke", c.warn ? "rgba(246,196,83,.8)" : "rgba(65,200,244,.55)")} stroke-width="1.3" fill="none" data-v-5b974b95></path><circle${ssrRenderAttr("cx", c.x)}${ssrRenderAttr("cy", c.y)} r="2.6"${ssrRenderAttr("fill", c.warn ? "#f6c453" : "#41c8f4")} data-v-5b974b95></circle></g>`);
2372
2373
  });
2373
- _push(`<!--]--></svg><div class="callout-layer" data-v-33218c74><!--[-->`);
2374
+ _push(`<!--]--></svg><div class="callout-layer" data-v-5b974b95><!--[-->`);
2374
2375
  ssrRenderList(unref(callouts), (c) => {
2375
2376
  _push(`<div class="${ssrRenderClass([{
2376
2377
  warn: c.warn,
@@ -2378,12 +2379,12 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2378
2379
  }, "callout"])}" style="${ssrRenderStyle({
2379
2380
  left: c.x + "px",
2380
2381
  top: c.y + "px"
2381
- })}"${ssrRenderAttr("title", _ctx.$t("townView.k1ejxiwp010"))} data-v-33218c74><div class="co-label" data-v-33218c74><span class="co-dot" data-v-33218c74></span>${ssrInterpolate(c.label)}</div><div class="co-val" data-v-33218c74>${ssrInterpolate(c.value)}<small data-v-33218c74>${ssrInterpolate(c.unit)}</small></div><div class="co-range" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))} ${ssrInterpolate(c.lo.toFixed(Math.min(2, (String(c.lo).split(".")[1] ?? "").length + 1)))} – ${ssrInterpolate(c.hi.toFixed(Math.min(2, (String(c.hi).split(".")[1] ?? "").length + 1)))}</div></div>`);
2382
+ })}"${ssrRenderAttr("title", _ctx.$t("townView.k1ejxiwp010"))} data-v-5b974b95><div class="co-label" data-v-5b974b95><span class="co-dot" data-v-5b974b95></span>${ssrInterpolate(c.label)}</div><div class="co-val" data-v-5b974b95>${ssrInterpolate(c.value)}<small data-v-5b974b95>${ssrInterpolate(c.unit)}</small></div><div class="co-range" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))} ${ssrInterpolate(c.lo.toFixed(Math.min(2, (String(c.lo).split(".")[1] ?? "").length + 1)))} – ${ssrInterpolate(c.hi.toFixed(Math.min(2, (String(c.hi).split(".")[1] ?? "").length + 1)))}</div></div>`);
2382
2383
  });
2383
2384
  _push(`<!--]--></div><!--]-->`);
2384
2385
  } else _push(`<!---->`);
2385
- _push(`<div class="kpi-strip" data-v-33218c74><div class="kpi" data-v-33218c74><span class="kpi-ico c1" data-v-33218c74><svg class="kpi-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z" data-v-33218c74></path><path d="M4 8.5l8 4.5 8-4.5M12 13v7" data-v-33218c74></path></svg></span><div class="kpi-meta" data-v-33218c74><div class="kpi-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1k6xemt037"))}</div><div class="kpi-val" data-v-33218c74>${ssrInterpolate(unref(deviceCount))}<small data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-33218c74><span class="kpi-ico c2" data-v-33218c74><svg class="kpi-svg" viewBox="0 0 24 24" data-v-33218c74><path d="m5 12.5 4.5 4.5L19 7.5" data-v-33218c74></path></svg></span><div class="kpi-meta" data-v-33218c74><div class="kpi-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1l1a9t2039"))}</div><div class="kpi-val" data-v-33218c74>${ssrInterpolate(unref(runningCount))}<small data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-33218c74><span class="kpi-ico c3" data-v-33218c74><svg class="kpi-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M12 3 22 20H2L12 3Z" data-v-33218c74></path><path d="M12 10v4M12 17v.2" data-v-33218c74></path></svg></span><div class="kpi-meta" data-v-33218c74><div class="kpi-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1fsi3ir002"))}</div><div class="kpi-val" data-v-33218c74>${ssrInterpolate(unref(activeAlarmCount))}<small data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</small></div></div></div><div class="kpi" data-v-33218c74><span class="kpi-ico c4" data-v-33218c74><svg class="kpi-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M9.5 14.5 14.5 9.5" data-v-33218c74></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-33218c74></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-33218c74></path></svg></span><div class="kpi-meta" data-v-33218c74><div class="kpi-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1emsai1041"))}</div><div class="kpi-val" data-v-33218c74>${ssrInterpolate(unref(daqTwins).length)}<small data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</small></div></div></div><div class="kpi" data-v-33218c74><span class="kpi-ico c5" data-v-33218c74><svg class="kpi-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M5 19a9 9 0 1 1 14 0" data-v-33218c74></path><path d="M12 13l3.5-3.5" data-v-33218c74></path><circle cx="12" cy="13" r="1.4" data-v-33218c74></circle></svg></span><div class="kpi-meta" data-v-33218c74><div class="kpi-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kbrxdq1043"))}</div><div class="kpi-val" data-v-33218c74>${ssrInterpolate(unref(healthPct))}<small data-v-33218c74>%</small></div></div></div></div>`);
2386
- if (unref(sceneEmpty)) _push(`<div class="empty-hint" data-v-33218c74><b data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3rwxjc044"))}</b><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1sa1eaj045"))}</span></div>`);
2386
+ _push(`<div class="kpi-strip" data-v-5b974b95><div class="kpi" data-v-5b974b95><span class="kpi-ico c1" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z" data-v-5b974b95></path><path d="M4 8.5l8 4.5 8-4.5M12 13v7" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1k6xemt037"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(deviceCount))}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c2" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="m5 12.5 4.5 4.5L19 7.5" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1l1a9t2039"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(runningCount))}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c3" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M12 3 22 20H2L12 3Z" data-v-5b974b95></path><path d="M12 10v4M12 17v.2" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1fsi3ir002"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(activeAlarmCount))}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c4" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M9.5 14.5 14.5 9.5" data-v-5b974b95></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-5b974b95></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1emsai1041"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(daqTwins).length)}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c5" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M5 19a9 9 0 1 1 14 0" data-v-5b974b95></path><path d="M12 13l3.5-3.5" data-v-5b974b95></path><circle cx="12" cy="13" r="1.4" data-v-5b974b95></circle></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kbrxdq1043"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(healthPct))}<small data-v-5b974b95>%</small></div></div></div></div>`);
2387
+ if (unref(sceneEmpty)) _push(`<div class="empty-hint" data-v-5b974b95><b data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3rwxjc044"))}</b><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1sa1eaj045"))}</span></div>`);
2387
2388
  else _push(`<!---->`);
2388
2389
  if (unref(selectedChannel) && unref(boundaryDraft)) {
2389
2390
  _push(`<div class="boundary-panel drag-panel" style="${ssrRenderStyle(unref(panelPos).boundary ? {
@@ -2391,111 +2392,111 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2391
2392
  top: unref(panelPos).boundary.y + "px",
2392
2393
  bottom: "auto",
2393
2394
  transform: "none"
2394
- } : void 0)}" data-v-33218c74><div class="bp-title drag-grip"${ssrRenderAttr("title", _ctx.$t("townView.k1d0rl5z011"))} data-v-33218c74><span class="bp-name" data-v-33218c74>${ssrInterpolate(unref(entities).channels[unref(selectedChannel)]?.name ?? unref(selectedChannel).slice(0, 8))}</span><span class="bp-sub" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1mehlxs046"))}</span><div class="bp-tabs" data-v-33218c74><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "boundary" }, "bp-tab"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k489ka047"))}</button><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "members" }, "bp-tab"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3ztf1129"))} ${ssrInterpolate(unref(channelMembers).length)}</button></div></div>`);
2395
- if (unref(channelPanelTab) === "boundary") _push(`<!--[--><div class="bp-row" data-v-33218c74><span class="bp-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-33218c74><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "ellipse" }, "seg-btn"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "rect" }, "seg-btn"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="bp-row" data-v-33218c74><span class="bp-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1fbz4s1051"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusX)} class="bp-range" type="range" min="80" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusX, 80, 4e3) })}" data-v-33218c74><span class="bp-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusX))}</span></div><div class="bp-row" data-v-33218c74><span class="bp-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1ighwgs052"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusZ)} class="bp-range" type="range" min="60" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusZ, 60, 4e3) })}" data-v-33218c74><span class="bp-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusZ))}</span></div><div class="bp-row" data-v-33218c74><span class="bp-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k40qab053"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).rotationY)} class="bp-range" type="range" min="0" max="360" step="5" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).rotationY ?? 0, 0, 360) })}" data-v-33218c74><span class="bp-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(boundaryDraft).rotationY ?? 0))}°</span></div><!--]-->`);
2395
+ } : void 0)}" data-v-5b974b95><div class="bp-title drag-grip"${ssrRenderAttr("title", _ctx.$t("townView.k1d0rl5z011"))} data-v-5b974b95><span class="bp-name" data-v-5b974b95>${ssrInterpolate(unref(entities).channels[unref(selectedChannel)]?.name ?? unref(selectedChannel).slice(0, 8))}</span><span class="bp-sub" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1mehlxs046"))}</span><div class="bp-tabs" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "boundary" }, "bp-tab"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k489ka047"))}</button><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "members" }, "bp-tab"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3ztf1129"))} ${ssrInterpolate(unref(channelMembers).length)}</button></div></div>`);
2396
+ if (unref(channelPanelTab) === "boundary") _push(`<!--[--><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "ellipse" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "rect" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1fbz4s1051"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusX)} class="bp-range" type="range" min="80" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusX, 80, 4e3) })}" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusX))}</span></div><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1ighwgs052"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusZ)} class="bp-range" type="range" min="60" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusZ, 60, 4e3) })}" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusZ))}</span></div><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k40qab053"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).rotationY)} class="bp-range" type="range" min="0" max="360" step="5" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).rotationY ?? 0, 0, 360) })}" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(boundaryDraft).rotationY ?? 0))}°</span></div><!--]-->`);
2396
2397
  else {
2397
- _push(`<!--[--><div class="bp-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-33218c74><!--[-->`);
2398
+ _push(`<!--[--><div class="bp-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-5b974b95><!--[-->`);
2398
2399
  ssrRenderList(unref(channelMembers), (m) => {
2399
- _push(`<div class="member-row" data-v-33218c74><span class="member-ava" style="${ssrRenderStyle({ color: hashColor(unref(selectedChannel)) })}" data-v-33218c74>${ssrInterpolate(m.name.charAt(0).toUpperCase())}</span><div class="member-info" data-v-33218c74><span class="member-name" data-v-33218c74>${ssrInterpolate(m.name)}</span><span class="${ssrRenderClass([m.role === "lead" ? "r-lead" : "r-worker", "member-role"])}" data-v-33218c74>${ssrInterpolate(m.role === "lead" ? "Leader" : "Worker")}</span></div><select class="member-select"${ssrRenderAttr("value", (m.modelRef ?? "") || "hero-3d")} data-v-33218c74><!--[-->`);
2400
+ _push(`<div class="member-row" data-v-5b974b95><span class="member-ava" style="${ssrRenderStyle({ color: hashColor(unref(selectedChannel)) })}" data-v-5b974b95>${ssrInterpolate(m.name.charAt(0).toUpperCase())}</span><div class="member-info" data-v-5b974b95><span class="member-name" data-v-5b974b95>${ssrInterpolate(m.name)}</span><span class="${ssrRenderClass([m.role === "lead" ? "r-lead" : "r-worker", "member-role"])}" data-v-5b974b95>${ssrInterpolate(m.role === "lead" ? "Leader" : "Worker")}</span></div><select class="member-select"${ssrRenderAttr("value", (m.modelRef ?? "") || "hero-3d")} data-v-5b974b95><!--[-->`);
2400
2401
  ssrRenderList(unref(agentModels), (model) => {
2401
- _push(`<option${ssrRenderAttr("value", model.id)} data-v-33218c74>${ssrInterpolate(model.name)}</option>`);
2402
+ _push(`<option${ssrRenderAttr("value", model.id)} data-v-5b974b95>${ssrInterpolate(model.name)}</option>`);
2402
2403
  });
2403
2404
  _push(`<!--]--></select></div>`);
2404
2405
  });
2405
2406
  _push(`<!--]-->`);
2406
- if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2407
+ if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2407
2408
  else _push(`<!---->`);
2408
2409
  _push(`</div><!--]-->`);
2409
2410
  }
2410
- _push(`<div class="bp-actions" data-v-33218c74>`);
2411
- if (unref(channelPanelTab) === "boundary") _push(`<button class="bp-btn save" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1b3kp8f056"))}</button>`);
2411
+ _push(`<div class="bp-actions" data-v-5b974b95>`);
2412
+ if (unref(channelPanelTab) === "boundary") _push(`<button class="bp-btn save" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b3kp8f056"))}</button>`);
2412
2413
  else _push(`<!---->`);
2413
- _push(`<button class="bp-btn danger" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1hs45qg057"))}</button><button class="bp-btn" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3x62t058"))}</button></div></div>`);
2414
+ _push(`<button class="bp-btn danger" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1hs45qg057"))}</button><button class="bp-btn" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3x62t058"))}</button></div></div>`);
2414
2415
  } else _push(`<!---->`);
2415
- if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-33218c74>${ssrInterpolate(unref(lastDropText))}</div>`);
2416
+ if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-5b974b95>${ssrInterpolate(unref(lastDropText))}</div>`);
2416
2417
  else _push(`<!---->`);
2417
- if (unref(errorText)) _push(`<div class="error-chip" data-v-33218c74>${ssrInterpolate(unref(errorText))}</div>`);
2418
+ if (unref(errorText)) _push(`<div class="error-chip" data-v-5b974b95>${ssrInterpolate(unref(errorText))}</div>`);
2418
2419
  else _push(`<!---->`);
2419
- if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-33218c74><div class="loading-spinner" data-v-33218c74></div><span class="loading-text" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2420
+ if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-5b974b95><div class="loading-spinner" data-v-5b974b95></div><span class="loading-text" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2420
2421
  else _push(`<!---->`);
2421
- _push(`</div><div class="dock" data-v-33218c74><section class="dock-card" data-v-33218c74><div class="dock-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</h3><span class="dock-mode" data-v-33218c74>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span></div><p class="ctl-sec" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.secRender"))}</p><div class="ctl-row" data-v-33218c74><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.qualityTip"))} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.qualityLabel"))}</span><div class="fps-seg" data-v-33218c74><!--[-->`);
2422
+ _push(`</div><div class="dock" data-v-5b974b95><section class="dock-card" data-v-5b974b95><div class="dock-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</h3><span class="dock-mode" data-v-5b974b95>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span></div><p class="ctl-sec" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.secRender"))}</p><div class="ctl-row" data-v-5b974b95><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.qualityTip"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.qualityLabel"))}</span><div class="fps-seg" data-v-5b974b95><!--[-->`);
2422
2423
  ssrRenderList(QUALITY_OPTIONS, (o) => {
2423
- _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-33218c74>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2424
+ _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2424
2425
  });
2425
- _push(`<!--]--></div><span class="ctl-val" data-v-33218c74></span></div><div class="ctl-row" data-v-33218c74><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.fpsCapTip"))} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.fpsCapLabel"))}</span><div class="fps-seg" data-v-33218c74><!--[-->`);
2426
+ _push(`<!--]--></div><span class="ctl-val" data-v-5b974b95></span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.fpsCapTip"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.fpsCapLabel"))}</span><div class="fps-seg" data-v-5b974b95><!--[-->`);
2426
2427
  ssrRenderList(FPS_OPTIONS, (o) => {
2427
- _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-33218c74>${ssrInterpolate(o.label)}</button>`);
2428
+ _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-5b974b95>${ssrInterpolate(o.label)}</button>`);
2428
2429
  });
2429
- _push(`<!--]--></div><span class="ctl-val" data-v-33218c74></span></div><p class="ctl-sec" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.secEnv"))}</p><div class="ctl-row" data-v-33218c74><span class="ctl-name" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1gizopz061"))}</span><input class="ctl-range" type="range" min="30" max="220"${ssrRenderAttr("value", Math.round(unref(exposure) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(exposure) * 100), 30, 220) })}" data-v-33218c74><span class="ctl-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(exposure) * 100))}%</span></div><div class="ctl-row" data-v-33218c74><span class="ctl-name" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1bcpqto062"))}</span><input class="ctl-range" type="range" min="10" max="100"${ssrRenderAttr("value", Math.round(unref(tintOpacity) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(tintOpacity) * 100), 10, 100) })}" data-v-33218c74><span class="ctl-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(tintOpacity) * 100))}%</span></div><div class="ctl-row" data-v-33218c74><span class="ctl-name" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1bztha1063"))}</span><input class="ctl-range" type="range" min="60" max="120"${ssrRenderAttr("value", unref(threshPct))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(threshPct), 60, 120) })}" data-v-33218c74><span class="ctl-val" data-v-33218c74>${ssrInterpolate(unref(threshPct))}%</span></div><div class="ctl-row" data-v-33218c74><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.kz71l1f012"))} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.ka4i1s9064"))}</span><input class="ctl-range" type="range" min="0" max="3000" step="50"${ssrRenderAttr("value", unref(calloutNearDist))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(calloutNearDist), 0, 3e3) })}" data-v-33218c74><span class="ctl-val" data-v-33218c74>${ssrInterpolate(unref(calloutNearDist) === 0 ? _ctx.$t("townView.k493s144") : `${unref(calloutNearDist)}`)}</span></div><p class="ctl-sec" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.secOps"))}</p><div class="ctl-row" data-v-33218c74><span class="ctl-name" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1idc6pa065"))}</span><button class="${ssrRenderClass([{ on: unref(snap) }, "snap-toggle"])}" data-v-33218c74>${ssrInterpolate(unref(snap) ? _ctx.$t("townView.k4bs5145") : _ctx.$t("townView.k493s144"))}</button><span class="ctl-val" data-v-33218c74></span></div><div class="ctl-btns" data-v-33218c74><button class="btn btn-primary" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1lap9bs024"))}</button><button class="btn btn-ghost"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? _ctx.$t("townView.ksavetip181") : _ctx.$t("townView.krotip182"))} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button><button class="${ssrRenderClass([{ armed: unref(estop) }, "btn btn-danger"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1i046wf066"))}</button></div></section><section class="dock-card" data-v-33218c74><div class="dock-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1kfoef9067"))}</h3><span class="dock-count mono" data-v-33218c74>${ssrInterpolate(unref(daqTwins).length)}</span><div class="${ssrRenderClass([{ expanded: unref(trendExpanded) }, "trend-legend"])}" data-v-33218c74><!--[-->`);
2430
+ _push(`<!--]--></div><span class="ctl-val" data-v-5b974b95></span></div><p class="ctl-sec" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.secEnv"))}</p><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1gizopz061"))}</span><input class="ctl-range" type="range" min="30" max="220"${ssrRenderAttr("value", Math.round(unref(exposure) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(exposure) * 100), 30, 220) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(exposure) * 100))}%</span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1bcpqto062"))}</span><input class="ctl-range" type="range" min="10" max="100"${ssrRenderAttr("value", Math.round(unref(tintOpacity) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(tintOpacity) * 100), 10, 100) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(tintOpacity) * 100))}%</span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1bztha1063"))}</span><input class="ctl-range" type="range" min="60" max="120"${ssrRenderAttr("value", unref(threshPct))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(threshPct), 60, 120) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(unref(threshPct))}%</span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.kz71l1f012"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.ka4i1s9064"))}</span><input class="ctl-range" type="range" min="0" max="3000" step="50"${ssrRenderAttr("value", unref(calloutNearDist))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(calloutNearDist), 0, 3e3) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(unref(calloutNearDist) === 0 ? _ctx.$t("townView.k493s144") : `${unref(calloutNearDist)}`)}</span></div><p class="ctl-sec" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.secOps"))}</p><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1idc6pa065"))}</span><button class="${ssrRenderClass([{ on: unref(snap) }, "snap-toggle"])}" data-v-5b974b95>${ssrInterpolate(unref(snap) ? _ctx.$t("townView.k4bs5145") : _ctx.$t("townView.k493s144"))}</button><span class="ctl-val" data-v-5b974b95></span></div><div class="ctl-btns" data-v-5b974b95><button class="btn btn-primary" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1lap9bs024"))}</button><button class="btn btn-ghost"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? _ctx.$t("townView.ksavetip181") : _ctx.$t("townView.krotip182"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button><button class="${ssrRenderClass([{ armed: unref(estop) }, "btn btn-danger"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1i046wf066"))}</button></div></section><section class="dock-card" data-v-5b974b95><div class="dock-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1kfoef9067"))}</h3><span class="dock-count mono" data-v-5b974b95>${ssrInterpolate(unref(daqTwins).length)}</span><div class="${ssrRenderClass([{ expanded: unref(trendExpanded) }, "trend-legend"])}" data-v-5b974b95><!--[-->`);
2430
2431
  ssrRenderList(unref(trendChips), (t) => {
2431
- _push(`<button class="${ssrRenderClass([{ off: !trendOn(t.id) }, "lg-chip"])}" data-v-33218c74><span class="lg-dot" style="${ssrRenderStyle({ background: trendColor(t.id) })}" data-v-33218c74></span>${ssrInterpolate(t.name)}</button>`);
2432
+ _push(`<button class="${ssrRenderClass([{ off: !trendOn(t.id) }, "lg-chip"])}" data-v-5b974b95><span class="lg-dot" style="${ssrRenderStyle({ background: trendColor(t.id) })}" data-v-5b974b95></span>${ssrInterpolate(t.name)}</button>`);
2432
2433
  });
2433
2434
  _push(`<!--]-->`);
2434
- if (unref(trendOverflow) > 0) _push(`<button class="lg-chip lg-more mono"${ssrRenderAttr("title", unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : _ctx.$t("townView.trendExpandAll", { p0: unref(daqTwins).length }))} data-v-33218c74>${ssrInterpolate(unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : `+${unref(trendOverflow)}`)}</button>`);
2435
+ if (unref(trendOverflow) > 0) _push(`<button class="lg-chip lg-more mono"${ssrRenderAttr("title", unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : _ctx.$t("townView.trendExpandAll", { p0: unref(daqTwins).length }))} data-v-5b974b95>${ssrInterpolate(unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : `+${unref(trendOverflow)}`)}</button>`);
2435
2436
  else _push(`<!---->`);
2436
- _push(`</div></div><div class="trend-wrap" data-v-33218c74><canvas class="trend-cv" data-v-33218c74></canvas>`);
2437
- if (!unref(daqTwins).length) _push(`<span class="trend-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1uht2uv068"))}</span>`);
2437
+ _push(`</div></div><div class="trend-wrap" data-v-5b974b95><canvas class="trend-cv" data-v-5b974b95></canvas>`);
2438
+ if (!unref(daqTwins).length) _push(`<span class="trend-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1uht2uv068"))}</span>`);
2438
2439
  else _push(`<!---->`);
2439
- _push(`</div></section></div></main><aside class="rail rail-right" data-v-33218c74>`);
2440
+ _push(`</div></section></div></main><aside class="rail rail-right" data-v-5b974b95>`);
2440
2441
  if (unref(selected)) {
2441
- _push(`<section class="panel inspector" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(unref(selected).kind === "device" ? unref(selectedIsDcw) ? _ctx.$t("townView.k1ekqxlt146") : unref(selectedIsDaq) ? _ctx.$t("townView.k1empnnb178") : _ctx.$t("townView.k1k6wg8j185") : unref(selectedAgentRoleLabel))}</h3><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bsckft013"))} data-v-33218c74> ✕ </button></div><div class="ins-chip-row" data-v-33218c74><span class="ins-chip mono" data-v-33218c74>${ssrInterpolate(unref(selected).id.slice(0, 8))}</span>`);
2442
- if (unref(selected).kind === "device" && unref(selectedIsDaq)) _push(`<span class="ins-chip accent" data-v-33218c74>DAQ</span>`);
2443
- else if (unref(selected).kind === "device" && unref(selectedIsDcw)) _push(`<span class="ins-chip accent" data-v-33218c74>DCW</span>`);
2442
+ _push(`<section class="panel inspector" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(unref(selected).kind === "device" ? unref(selectedIsDcw) ? _ctx.$t("townView.k1ekqxlt146") : unref(selectedIsDaq) ? _ctx.$t("townView.k1empnnb178") : _ctx.$t("townView.k1k6wg8j185") : unref(selectedAgentRoleLabel))}</h3><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bsckft013"))} data-v-5b974b95> ✕ </button></div><div class="ins-chip-row" data-v-5b974b95><span class="ins-chip mono" data-v-5b974b95>${ssrInterpolate(unref(selected).id.slice(0, 8))}</span>`);
2443
+ if (unref(selected).kind === "device" && unref(selectedIsDaq)) _push(`<span class="ins-chip accent" data-v-5b974b95>DAQ</span>`);
2444
+ else if (unref(selected).kind === "device" && unref(selectedIsDcw)) _push(`<span class="ins-chip accent" data-v-5b974b95>DCW</span>`);
2444
2445
  else _push(`<!---->`);
2445
2446
  _push(`</div>`);
2446
2447
  if (unref(selected).kind === "device") {
2447
2448
  _push(`<!--[-->`);
2448
2449
  if (unref(selectedIsDcw)) {
2449
- _push(`<div class="daq-info" data-v-33218c74><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1deqh0d069"))}</span><b class="cy" data-v-33218c74>${ssrInterpolate(unref(selectedDcwNode)?.value != null ? unref(selectedDcwNode).value.toFixed(unref(selectedDcwNode).decimals) : "--")} ${ssrInterpolate(unref(selectedDcwNode)?.unit)}</b></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(unref(selectedDcwWindow)?.src === "recipe" ? _ctx.$t("townView.kq2jssk147") : _ctx.$t("townView.k1iwj796179"))}</span><b class="${ssrRenderClass({ amber: unref(selectedDcwWindow)?.src === "recipe" })}" data-v-33218c74>${ssrInterpolate(dcwWinLabel(unref(selectedDcwNode)))}</b></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-33218c74>${ssrInterpolate(unref(selectedDcwDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div><div class="daq-bind-bar" data-v-33218c74><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[unref(selected).id])} type="number" class="bind-select"${ssrRenderAttr("step", 10 ** -(unref(selectedDcwNode)?.decimals ?? 2))}${ssrRenderAttr("placeholder", dcwWinInputPh(unref(selectedDcwNode)))} data-v-33218c74><button class="bind-add-btn"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[unref(selected).id] == null || unref(dcwWriteDrafts)[unref(selected).id] === "") ? " disabled" : ""} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kwrbtn180"))}</button></div>`);
2450
- if (unref(dcwWriteErrs)[unref(selected).id]) _push(`<p class="dcw-err" data-v-33218c74>${ssrInterpolate(unref(dcwWriteErrs)[unref(selected).id])}</p>`);
2450
+ _push(`<div class="daq-info" data-v-5b974b95><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1deqh0d069"))}</span><b class="cy" data-v-5b974b95>${ssrInterpolate(unref(selectedDcwNode)?.value != null ? unref(selectedDcwNode).value.toFixed(unref(selectedDcwNode).decimals) : "--")} ${ssrInterpolate(unref(selectedDcwNode)?.unit)}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(unref(selectedDcwWindow)?.src === "recipe" ? _ctx.$t("townView.kq2jssk147") : _ctx.$t("townView.k1iwj796179"))}</span><b class="${ssrRenderClass({ amber: unref(selectedDcwWindow)?.src === "recipe" })}" data-v-5b974b95>${ssrInterpolate(dcwWinLabel(unref(selectedDcwNode)))}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-5b974b95>${ssrInterpolate(unref(selectedDcwDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div><div class="daq-bind-bar" data-v-5b974b95><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[unref(selected).id])} type="number" class="bind-select"${ssrRenderAttr("step", 10 ** -(unref(selectedDcwNode)?.decimals ?? 2))}${ssrRenderAttr("placeholder", dcwWinInputPh(unref(selectedDcwNode)))} data-v-5b974b95><button class="bind-add-btn"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[unref(selected).id] == null || unref(dcwWriteDrafts)[unref(selected).id] === "") ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kwrbtn180"))}</button></div>`);
2451
+ if (unref(dcwWriteErrs)[unref(selected).id]) _push(`<p class="dcw-err" data-v-5b974b95>${ssrInterpolate(unref(dcwWriteErrs)[unref(selected).id])}</p>`);
2451
2452
  else _push(`<!---->`);
2452
2453
  if (unref(mode) === "edit") {
2453
- _push(`<div class="daq-bind-bar" data-v-33218c74><select class="bind-select" data-v-33218c74><option value="" data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), "") : ssrLooseEqual(unref(dcwBindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2454
+ _push(`<div class="daq-bind-bar" data-v-5b974b95><select class="bind-select" data-v-5b974b95><option value="" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), "") : ssrLooseEqual(unref(dcwBindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2454
2455
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2455
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), dv.id) : ssrLooseEqual(unref(dcwBindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2456
+ _push(`<option${ssrRenderAttr("value", dv.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), dv.id) : ssrLooseEqual(unref(dcwBindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2456
2457
  });
2457
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(selectedDcwDeviceName) && !unref(dcwBindPick)) ? " disabled" : ""} data-v-33218c74>${ssrInterpolate(unref(selectedDcwDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2458
+ _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(selectedDcwDeviceName) && !unref(dcwBindPick)) ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(unref(selectedDcwDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2458
2459
  } else _push(`<!---->`);
2459
2460
  _push(`</div>`);
2460
2461
  } else if (unref(selectedIsDaq)) {
2461
- _push(`<div class="daq-info" data-v-33218c74><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3mv305072"))}</span><b class="cy" data-v-33218c74>${ssrInterpolate(unref(selectedDaqSim) ? fmtDaq(unref(selectedDaqSim)) : "--")} ${ssrInterpolate(unref(selectedDaqSim)?.tpl.unit)}</b></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))}</span><b data-v-33218c74>${ssrInterpolate(unref(selectedDaqSim)?.tpl.min)} ~ ${ssrInterpolate(unref(selectedDaqSim)?.tpl.max)}</b></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-33218c74>${ssrInterpolate(unref(daqBoundDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div>`);
2462
+ _push(`<div class="daq-info" data-v-5b974b95><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3mv305072"))}</span><b class="cy" data-v-5b974b95>${ssrInterpolate(unref(selectedDaqSim) ? fmtDaq(unref(selectedDaqSim)) : "--")} ${ssrInterpolate(unref(selectedDaqSim)?.tpl.unit)}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))}</span><b data-v-5b974b95>${ssrInterpolate(unref(selectedDaqSim)?.tpl.min)} ~ ${ssrInterpolate(unref(selectedDaqSim)?.tpl.max)}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-5b974b95>${ssrInterpolate(unref(daqBoundDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div>`);
2462
2463
  if (unref(mode) === "edit") {
2463
- _push(`<div class="daq-bind-bar" data-v-33218c74><select class="bind-select" data-v-33218c74><option value="" data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), "") : ssrLooseEqual(unref(bindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2464
+ _push(`<div class="daq-bind-bar" data-v-5b974b95><select class="bind-select" data-v-5b974b95><option value="" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), "") : ssrLooseEqual(unref(bindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2464
2465
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2465
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), dv.id) : ssrLooseEqual(unref(bindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2466
+ _push(`<option${ssrRenderAttr("value", dv.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), dv.id) : ssrLooseEqual(unref(bindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2466
2467
  });
2467
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(daqBoundDeviceName) && !unref(bindPick)) ? " disabled" : ""} data-v-33218c74>${ssrInterpolate(unref(daqBoundDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2468
+ _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(daqBoundDeviceName) && !unref(bindPick)) ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(unref(daqBoundDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2468
2469
  } else _push(`<!---->`);
2469
- if (unref(mode) === "edit" && unref(selectedDaqNode)) _push(`<div class="daq-node-ctl" data-v-33218c74><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1l6g2ga074"))}</span><span class="daq-th-inputs" data-v-33218c74><input${ssrRenderAttr("value", unref(daqIntervalDraft))} type="number" min="200" max="60000" step="100" class="daq-num" data-v-33218c74><small data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1or92b075"))}</small></span></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3x5tpx076"))}</span><span class="daq-th-inputs" data-v-33218c74><input${ssrRenderAttr("value", unref(selectedDaqNode).warnLow)} type="number" step="any" class="daq-num" data-v-33218c74> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).warnHigh)} type="number" step="any" class="daq-num" data-v-33218c74></span></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1hjj0jf077"))}</span><span class="daq-th-inputs" data-v-33218c74><input${ssrRenderAttr("value", unref(selectedDaqNode).min)} type="number" step="any" class="daq-num" data-v-33218c74> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).max)} type="number" step="any" class="daq-num" data-v-33218c74></span></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k48tki078"))}</span><button class="${ssrRenderClass([{ warn: unref(selectedDaqNode).enabled }, "bind-add-btn"])}" data-v-33218c74>${ssrInterpolate(unref(selectedDaqNode).enabled ? _ctx.$t("townView.k1wv0nyo150") : _ctx.$t("townView.kh1586b180"))}</button></div><div class="daq-info-row" data-v-33218c74><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3xakp079"))}</span><button class="bind-add-btn danger"${ssrRenderAttr("title", _ctx.$t("townView.kpwutri014"))} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1bpp30k080"))}</button></div></div>`);
2470
- else _push(`<div class="ins-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kzk5dfx081"))}</div>`);
2470
+ if (unref(mode) === "edit" && unref(selectedDaqNode)) _push(`<div class="daq-node-ctl" data-v-5b974b95><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1l6g2ga074"))}</span><span class="daq-th-inputs" data-v-5b974b95><input${ssrRenderAttr("value", unref(daqIntervalDraft))} type="number" min="200" max="60000" step="100" class="daq-num" data-v-5b974b95><small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1or92b075"))}</small></span></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3x5tpx076"))}</span><span class="daq-th-inputs" data-v-5b974b95><input${ssrRenderAttr("value", unref(selectedDaqNode).warnLow)} type="number" step="any" class="daq-num" data-v-5b974b95> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).warnHigh)} type="number" step="any" class="daq-num" data-v-5b974b95></span></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1hjj0jf077"))}</span><span class="daq-th-inputs" data-v-5b974b95><input${ssrRenderAttr("value", unref(selectedDaqNode).min)} type="number" step="any" class="daq-num" data-v-5b974b95> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).max)} type="number" step="any" class="daq-num" data-v-5b974b95></span></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k48tki078"))}</span><button class="${ssrRenderClass([{ warn: unref(selectedDaqNode).enabled }, "bind-add-btn"])}" data-v-5b974b95>${ssrInterpolate(unref(selectedDaqNode).enabled ? _ctx.$t("townView.k1wv0nyo150") : _ctx.$t("townView.kh1586b180"))}</button></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3xakp079"))}</span><button class="bind-add-btn danger"${ssrRenderAttr("title", _ctx.$t("townView.kpwutri014"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1bpp30k080"))}</button></div></div>`);
2471
+ else _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kzk5dfx081"))}</div>`);
2471
2472
  _push(`</div>`);
2472
2473
  } else {
2473
- _push(`<!--[--><div class="obj-row" data-v-33218c74><span class="obj-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3xhia082"))}</span><input${ssrRenderAttr("value", unref(objNameDraft))} class="obj-input"${ssrRenderAttr("placeholder", _ctx.$t("townView.k1k6vbaf015"))}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "设备名称" : "运行模式只读")} data-v-33218c74></div><div class="obj-row" data-v-33218c74><span class="obj-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", unref(scene3dRef)?.getDeviceModelRef?.(unref(selected).id) ?? "")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-33218c74><!--[-->`);
2474
+ _push(`<!--[--><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3xhia082"))}</span><input${ssrRenderAttr("value", unref(objNameDraft))} class="obj-input"${ssrRenderAttr("placeholder", _ctx.$t("townView.k1k6vbaf015"))}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "设备名称" : "运行模式只读")} data-v-5b974b95></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", unref(scene3dRef)?.getDeviceModelRef?.(unref(selected).id) ?? "")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-5b974b95><!--[-->`);
2474
2475
  ssrRenderList(unref(deviceModels), (m) => {
2475
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-33218c74>${ssrInterpolate(m.name)}</option>`);
2476
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-5b974b95>${ssrInterpolate(m.name)}</option>`);
2476
2477
  });
2477
- _push(`<!--]--></select></div><div class="sect-hd" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1vtyk05130"))} ${ssrInterpolate(unref(boundDaqRows).length)} ${ssrInterpolate(_ctx.$t("townView.k3vfpz5138"))}</div><!--[-->`);
2478
+ _push(`<!--]--></select></div><div class="sect-hd" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1vtyk05130"))} ${ssrInterpolate(unref(boundDaqRows).length)} ${ssrInterpolate(_ctx.$t("townView.k3vfpz5138"))}</div><!--[-->`);
2478
2479
  ssrRenderList(unref(boundDaqRows), (r) => {
2479
- _push(`<div class="bind-row" data-v-33218c74><span class="bind-ico" data-v-33218c74><svg class="bind-svg" viewBox="0 0 24 24" data-v-33218c74>${daqIcon(r.icon) ?? ""}</svg></span><span class="bind-meta" data-v-33218c74><span class="bind-label" data-v-33218c74>${ssrInterpolate(r.ch)}</span><span class="bind-val" data-v-33218c74><b data-v-33218c74>${ssrInterpolate(r.value)}</b> ${ssrInterpolate(r.unit)} · ${ssrInterpolate(r.name)}</span></span><canvas class="bind-spark" width="56" height="20" data-v-33218c74></canvas>`);
2480
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-33218c74> ✕ </button>`);
2480
+ _push(`<div class="bind-row" data-v-5b974b95><span class="bind-ico" data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(r.icon) ?? ""}</svg></span><span class="bind-meta" data-v-5b974b95><span class="bind-label" data-v-5b974b95>${ssrInterpolate(r.ch)}</span><span class="bind-val" data-v-5b974b95><b data-v-5b974b95>${ssrInterpolate(r.value)}</b> ${ssrInterpolate(r.unit)} · ${ssrInterpolate(r.name)}</span></span><canvas class="bind-spark" width="56" height="20" data-v-5b974b95></canvas>`);
2481
+ if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-5b974b95> ✕ </button>`);
2481
2482
  else _push(`<!---->`);
2482
2483
  _push(`</div>`);
2483
2484
  });
2484
2485
  _push(`<!--]-->`);
2485
- if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2486
+ if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2486
2487
  else _push(`<!---->`);
2487
2488
  if (unref(mode) === "edit") {
2488
- _push(`<div class="bind-add-wrap" data-v-33218c74><button class="bind-add" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2489
+ _push(`<div class="bind-add-wrap" data-v-5b974b95><button class="bind-add" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2489
2490
  if (unref(bindPopOpen)) {
2490
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-33218c74><!--[-->`);
2491
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-5b974b95><!--[-->`);
2491
2492
  ssrRenderList(unref(daqTemplates), (tpl) => {
2492
2493
  _push(`<!--[-->`);
2493
2494
  if (unref(daqBindChoices)[tpl.id]?.length) {
2494
- _push(`<div class="bp-group" data-v-33218c74><span class="bp-tpl" data-v-33218c74>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2495
+ _push(`<div class="bp-group" data-v-5b974b95><span class="bp-tpl" data-v-5b974b95>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2495
2496
  ssrRenderList(unref(daqBindChoices)[tpl.id], (c) => {
2496
- _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-33218c74><svg class="bind-svg" viewBox="0 0 24 24" data-v-33218c74>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-33218c74>${ssrInterpolate(c.name)}`);
2497
- if (c.devName) _push(`<i class="bp-cur" data-v-33218c74>→ ${ssrInterpolate(c.devName)}</i>`);
2498
- else if (!c.placed) _push(`<i class="bp-cur" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2497
+ _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-5b974b95>${ssrInterpolate(c.name)}`);
2498
+ if (c.devName) _push(`<i class="bp-cur" data-v-5b974b95>→ ${ssrInterpolate(c.devName)}</i>`);
2499
+ else if (!c.placed) _push(`<i class="bp-cur" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2499
2500
  else _push(`<!---->`);
2500
2501
  _push(`</span></button>`);
2501
2502
  });
@@ -2504,40 +2505,40 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2504
2505
  _push(`<!--]-->`);
2505
2506
  });
2506
2507
  _push(`<!--]-->`);
2507
- if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2508
+ if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2508
2509
  else _push(`<!---->`);
2509
2510
  _push(`</div>`);
2510
2511
  } else _push(`<!---->`);
2511
2512
  _push(`</div>`);
2512
2513
  } else _push(`<!---->`);
2513
- _push(`<div class="sect-hd" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.ktzir2t131"))} ${ssrInterpolate(unref(boundDcwRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</div><!--[-->`);
2514
+ _push(`<div class="sect-hd" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.ktzir2t131"))} ${ssrInterpolate(unref(boundDcwRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</div><!--[-->`);
2514
2515
  ssrRenderList(unref(boundDcwRows), (r) => {
2515
- _push(`<div class="dcw-row" data-v-33218c74><div class="dcw-top" data-v-33218c74><span class="bind-ico" data-v-33218c74><svg class="bind-svg" viewBox="0 0 24 24" data-v-33218c74>${daqIcon(r.icon) ?? ""}</svg></span><span class="dcw-id" data-v-33218c74><span class="bind-label" data-v-33218c74>${ssrInterpolate(r.ch)}`);
2516
- if (r.rMin != null || r.rMax != null) _push(`<i class="dcw-tag" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k48grv086"))}</i>`);
2516
+ _push(`<div class="dcw-row" data-v-5b974b95><div class="dcw-top" data-v-5b974b95><span class="bind-ico" data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(r.icon) ?? ""}</svg></span><span class="dcw-id" data-v-5b974b95><span class="bind-label" data-v-5b974b95>${ssrInterpolate(r.ch)}`);
2517
+ if (r.rMin != null || r.rMax != null) _push(`<i class="dcw-tag" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k48grv086"))}</i>`);
2517
2518
  else _push(`<!---->`);
2518
- _push(`</span><span class="dcw-name" data-v-33218c74>${ssrInterpolate(r.name)}</span></span><span class="dcw-cur" data-v-33218c74><b data-v-33218c74>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}</b><i data-v-33218c74>${ssrInterpolate(r.unit)}</i></span>`);
2519
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-33218c74> ✕ </button>`);
2519
+ _push(`</span><span class="dcw-name" data-v-5b974b95>${ssrInterpolate(r.name)}</span></span><span class="dcw-cur" data-v-5b974b95><b data-v-5b974b95>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}</b><i data-v-5b974b95>${ssrInterpolate(r.unit)}</i></span>`);
2520
+ if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-5b974b95> ✕ </button>`);
2520
2521
  else _push(`<!---->`);
2521
- _push(`</div><div class="${ssrRenderClass([{ recipe: r.rMin != null || r.rMax != null }, "dcw-win"])}" data-v-33218c74><em data-v-33218c74>${ssrInterpolate(r.rMin != null || r.rMax != null ? _ctx.$t("townView.k1l3m0hx151") : _ctx.$t("townView.k1bc6rqf181"))}</em><span class="dcw-win-num" data-v-33218c74>${ssrInterpolate(r.rMin ?? "-∞")}</span><span class="dcw-win-track" data-v-33218c74><i style="${ssrRenderStyle({ left: `${dcwMarkPct(r)}%` })}" data-v-33218c74></i></span><span class="dcw-win-num" data-v-33218c74>${ssrInterpolate(r.rMax ?? "+∞")}</span></div><div class="dcw-write" data-v-33218c74><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[r.dcwId])} type="number"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("placeholder", `${r.rMin ?? r.gMin} ~ ${r.rMax ?? r.gMax}`)} data-v-33218c74><button class="dcw-send"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[r.dcwId] == null || unref(dcwWriteDrafts)[r.dcwId] === "") ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("townView.k15t7izc017"))} data-v-33218c74> write </button></div>`);
2522
- if (unref(dcwWriteErrs)[r.dcwId]) _push(`<small class="dcw-err" data-v-33218c74>${ssrInterpolate(unref(dcwWriteErrs)[r.dcwId])}</small>`);
2522
+ _push(`</div><div class="${ssrRenderClass([{ recipe: r.rMin != null || r.rMax != null }, "dcw-win"])}" data-v-5b974b95><em data-v-5b974b95>${ssrInterpolate(r.rMin != null || r.rMax != null ? _ctx.$t("townView.k1l3m0hx151") : _ctx.$t("townView.k1bc6rqf181"))}</em><span class="dcw-win-num" data-v-5b974b95>${ssrInterpolate(r.rMin ?? "-∞")}</span><span class="dcw-win-track" data-v-5b974b95><i style="${ssrRenderStyle({ left: `${dcwMarkPct(r)}%` })}" data-v-5b974b95></i></span><span class="dcw-win-num" data-v-5b974b95>${ssrInterpolate(r.rMax ?? "+∞")}</span></div><div class="dcw-write" data-v-5b974b95><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[r.dcwId])} type="number"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("placeholder", `${r.rMin ?? r.gMin} ~ ${r.rMax ?? r.gMax}`)} data-v-5b974b95><button class="dcw-send"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[r.dcwId] == null || unref(dcwWriteDrafts)[r.dcwId] === "") ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("townView.k15t7izc017"))} data-v-5b974b95> write </button></div>`);
2523
+ if (unref(dcwWriteErrs)[r.dcwId]) _push(`<small class="dcw-err" data-v-5b974b95>${ssrInterpolate(unref(dcwWriteErrs)[r.dcwId])}</small>`);
2523
2524
  else _push(`<!---->`);
2524
2525
  _push(`</div>`);
2525
2526
  });
2526
2527
  _push(`<!--]-->`);
2527
- if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2528
+ if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2528
2529
  else _push(`<!---->`);
2529
2530
  if (unref(mode) === "edit") {
2530
- _push(`<div class="bind-add-wrap" data-v-33218c74><button class="bind-add" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2531
+ _push(`<div class="bind-add-wrap" data-v-5b974b95><button class="bind-add" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2531
2532
  if (unref(dcwBindPopOpen)) {
2532
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-33218c74><!--[-->`);
2533
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-5b974b95><!--[-->`);
2533
2534
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2534
2535
  _push(`<!--[-->`);
2535
2536
  if (unref(dcwBindChoices)[tpl.id]?.length) {
2536
- _push(`<div class="bp-group" data-v-33218c74><span class="bp-tpl" data-v-33218c74>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2537
+ _push(`<div class="bp-group" data-v-5b974b95><span class="bp-tpl" data-v-5b974b95>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2537
2538
  ssrRenderList(unref(dcwBindChoices)[tpl.id], (c) => {
2538
- _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-33218c74><svg class="bind-svg" viewBox="0 0 24 24" data-v-33218c74>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-33218c74>${ssrInterpolate(c.name)}`);
2539
- if (c.devName) _push(`<i class="bp-cur" data-v-33218c74>→ ${ssrInterpolate(c.devName)}</i>`);
2540
- else if (!c.placed) _push(`<i class="bp-cur" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2539
+ _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-5b974b95>${ssrInterpolate(c.name)}`);
2540
+ if (c.devName) _push(`<i class="bp-cur" data-v-5b974b95>→ ${ssrInterpolate(c.devName)}</i>`);
2541
+ else if (!c.placed) _push(`<i class="bp-cur" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2541
2542
  else _push(`<!---->`);
2542
2543
  _push(`</span></button>`);
2543
2544
  });
@@ -2546,121 +2547,121 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2546
2547
  _push(`<!--]-->`);
2547
2548
  });
2548
2549
  _push(`<!--]-->`);
2549
- if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2550
+ if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2550
2551
  else _push(`<!---->`);
2551
2552
  _push(`</div>`);
2552
2553
  } else _push(`<!---->`);
2553
2554
  _push(`</div>`);
2554
2555
  } else _push(`<!---->`);
2555
- if (unref(mode) === "edit") _push(`<!--[--><div class="sect-hd" data-v-33218c74> 变换 · BLENDER </div><div class="xz-seg" data-v-33218c74><button class="${ssrRenderClass([{ on: unref(tMode) === "translate" }, "seg-btn"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1hg3167089"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "rotate" }, "seg-btn"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1enlg7i090"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "scale" }, "seg-btn"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1ibjg3j091"))}</button></div><div class="scale-row" data-v-33218c74><span class="scale-min" data-v-33218c74>0.2×</span><input class="scale-range" type="range" min="0.2" max="5" step="0.05"${ssrRenderAttr("value", unref(selected).scale)} data-v-33218c74><span class="scale-max" data-v-33218c74>5×</span></div><div class="scale-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(selected).scale * 100))}% </div><div class="ins-foot" data-v-33218c74><button class="${ssrRenderClass([{ armed: unref(deviceDeleteArmed) === unref(selected).id }, "btn btn-danger ins-del"])}" data-v-33218c74>${ssrInterpolate(unref(deviceDeleteArmed) === unref(selected).id ? _ctx.$t("townView.k1w10xa5152") : _ctx.$t("townView.k121kfef182"))}</button></div><!--]-->`);
2556
- else _push(`<div class="ins-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kt0i3y2092"))}</div>`);
2556
+ if (unref(mode) === "edit") _push(`<!--[--><div class="sect-hd" data-v-5b974b95> 变换 · BLENDER </div><div class="xz-seg" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(tMode) === "translate" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1hg3167089"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "rotate" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1enlg7i090"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "scale" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1ibjg3j091"))}</button></div><div class="scale-row" data-v-5b974b95><span class="scale-min" data-v-5b974b95>0.2×</span><input class="scale-range" type="range" min="0.2" max="5" step="0.05"${ssrRenderAttr("value", unref(selected).scale)} data-v-5b974b95><span class="scale-max" data-v-5b974b95>5×</span></div><div class="scale-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(selected).scale * 100))}% </div><div class="ins-foot" data-v-5b974b95><button class="${ssrRenderClass([{ armed: unref(deviceDeleteArmed) === unref(selected).id }, "btn btn-danger ins-del"])}" data-v-5b974b95>${ssrInterpolate(unref(deviceDeleteArmed) === unref(selected).id ? _ctx.$t("townView.k1w10xa5152") : _ctx.$t("townView.k121kfef182"))}</button></div><!--]-->`);
2557
+ else _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kt0i3y2092"))}</div>`);
2557
2558
  _push(`<!--]-->`);
2558
2559
  }
2559
2560
  _push(`<!--]-->`);
2560
2561
  } else if (unref(selected).kind === "agent") {
2561
- _push(`<!--[--><div class="chat-id-row" data-v-33218c74><span class="chat-badge" style="${ssrRenderStyle({ "--p-acc": unref(agentChatColor) })}" data-v-33218c74>${ssrInterpolate(unref(agentChatTitle).slice(0, 1).toUpperCase())}</span><div class="chat-nameplate" data-v-33218c74><span class="chat-name" data-v-33218c74>${ssrInterpolate(unref(agentChatTitle))}</span><span class="chat-meta" data-v-33218c74><span class="${ssrRenderClass([unref(selectedAgentMeta)?.role === "lead" ? "r-lead" : "r-worker", "chat-role"])}" data-v-33218c74>${ssrInterpolate(unref(selectedAgentRoleTag))}</span><span class="${ssrRenderClass([`s-${unref(selectedAgentMeta)?.state ?? "idle"}`, "chat-state"])}" data-v-33218c74>${ssrInterpolate(unref(agentChatStateLabel))}</span>`);
2562
- if (unref(selectedAgentMeta)?.harness) _push(`<span class="chat-harness" data-v-33218c74>${ssrInterpolate(unref(selectedAgentMeta).harness.toUpperCase())}</span>`);
2562
+ _push(`<!--[--><div class="chat-id-row" data-v-5b974b95><span class="chat-badge" style="${ssrRenderStyle({ "--p-acc": unref(agentChatColor) })}" data-v-5b974b95>${ssrInterpolate(unref(agentChatTitle).slice(0, 1).toUpperCase())}</span><div class="chat-nameplate" data-v-5b974b95><span class="chat-name" data-v-5b974b95>${ssrInterpolate(unref(agentChatTitle))}</span><span class="chat-meta" data-v-5b974b95><span class="${ssrRenderClass([unref(selectedAgentMeta)?.role === "lead" ? "r-lead" : "r-worker", "chat-role"])}" data-v-5b974b95>${ssrInterpolate(unref(selectedAgentRoleTag))}</span><span class="${ssrRenderClass([`s-${unref(selectedAgentMeta)?.state ?? "idle"}`, "chat-state"])}" data-v-5b974b95>${ssrInterpolate(unref(agentChatStateLabel))}</span>`);
2563
+ if (unref(selectedAgentMeta)?.harness) _push(`<span class="chat-harness" data-v-5b974b95>${ssrInterpolate(unref(selectedAgentMeta).harness.toUpperCase())}</span>`);
2563
2564
  else _push(`<!---->`);
2564
- _push(`<span class="chat-count" data-v-33218c74>${ssrInterpolate(unref(agentHistory).length + unref(agentChatRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span></span></div></div><div class="obj-row" data-v-33218c74><span class="obj-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", (unref(scene3dRef)?.getAgentModel?.(unref(selected).id) ?? "") || "hero-3d")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-33218c74><!--[-->`);
2565
+ _push(`<span class="chat-count" data-v-5b974b95>${ssrInterpolate(unref(agentHistory).length + unref(agentChatRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span></span></div></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", (unref(scene3dRef)?.getAgentModel?.(unref(selected).id) ?? "") || "hero-3d")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-5b974b95><!--[-->`);
2565
2566
  ssrRenderList(unref(agentModels), (m) => {
2566
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-33218c74>${ssrInterpolate(m.name)}</option>`);
2567
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-5b974b95>${ssrInterpolate(m.name)}</option>`);
2567
2568
  });
2568
- _push(`<!--]--></select></div><div class="obj-sep" data-v-33218c74></div><div class="obj-row" data-v-33218c74><span class="obj-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1fix3hb093"))}</span><span class="range-status" data-v-33218c74>${ssrInterpolate(unref(agentRangeStatusText))}</span>`);
2569
- if (unref(mode) === "edit") _push(`<button class="${ssrRenderClass([{ on: unref(agentDrawingRange) }, "obj-mini"])}"${ssrRenderAttr("title", _ctx.$t("townView.k13enoy3018"))} data-v-33218c74>${ssrInterpolate(unref(agentDrawingRange) ? _ctx.$t("townView.k3slzhc153") : _ctx.$t("townView.k1f1xmci183"))}</button>`);
2569
+ _push(`<!--]--></select></div><div class="obj-sep" data-v-5b974b95></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1fix3hb093"))}</span><span class="range-status" data-v-5b974b95>${ssrInterpolate(unref(agentRangeStatusText))}</span>`);
2570
+ if (unref(mode) === "edit") _push(`<button class="${ssrRenderClass([{ on: unref(agentDrawingRange) }, "obj-mini"])}"${ssrRenderAttr("title", _ctx.$t("townView.k13enoy3018"))} data-v-5b974b95>${ssrInterpolate(unref(agentDrawingRange) ? _ctx.$t("townView.k3slzhc153") : _ctx.$t("townView.k1f1xmci183"))}</button>`);
2570
2571
  else _push(`<!---->`);
2571
- _push(`</div><div class="obj-sep" data-v-33218c74></div><div class="sect-hd" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1p7nru2094"))}</div><!--[-->`);
2572
+ _push(`</div><div class="obj-sep" data-v-5b974b95></div><div class="sect-hd" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1p7nru2094"))}</div><!--[-->`);
2572
2573
  ssrRenderList(unref(agentBindings), (b) => {
2573
- _push(`<div class="bind-row" data-v-33218c74><span class="${ssrRenderClass([b.kind === "dcw" ? "accent" : "", "ins-chip"])}" style="${ssrRenderStyle({ "flex": "none" })}" data-v-33218c74>${ssrInterpolate(b.kind === "dcw" ? _ctx.$t("townView.k40ifw097") : _ctx.$t("townView.k40rjw098"))}</span><span class="bind-meta" data-v-33218c74><span class="bind-label" data-v-33218c74>${ssrInterpolate(bindingNodeName(b))}</span><select class="bind-select" style="${ssrRenderStyle({ "margin-top": "3px" })}"${ssrRenderAttr("value", b.mode)}${ssrRenderAttr("title", _ctx.$t("townView.khqvwix019"))} data-v-33218c74><option value="auto" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1io1ylm095"))}</option><option value="manual" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1duyr8q096"))}</option></select></span><button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-33218c74> ✕ </button></div>`);
2574
+ _push(`<div class="bind-row" data-v-5b974b95><span class="${ssrRenderClass([b.kind === "dcw" ? "accent" : "", "ins-chip"])}" style="${ssrRenderStyle({ "flex": "none" })}" data-v-5b974b95>${ssrInterpolate(b.kind === "dcw" ? _ctx.$t("townView.k40ifw097") : _ctx.$t("townView.k40rjw098"))}</span><span class="bind-meta" data-v-5b974b95><span class="bind-label" data-v-5b974b95>${ssrInterpolate(bindingNodeName(b))}</span><select class="bind-select" style="${ssrRenderStyle({ "margin-top": "3px" })}"${ssrRenderAttr("value", b.mode)}${ssrRenderAttr("title", _ctx.$t("townView.khqvwix019"))} data-v-5b974b95><option value="auto" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1io1ylm095"))}</option><option value="manual" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1duyr8q096"))}</option></select></span><button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-5b974b95> ✕ </button></div>`);
2574
2575
  });
2575
2576
  _push(`<!--]-->`);
2576
- if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-33218c74> 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 </div>`);
2577
+ if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-5b974b95> 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 </div>`);
2577
2578
  else _push(`<!---->`);
2578
2579
  if (unref(mode) === "edit") {
2579
- _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-33218c74><select class="bind-select" style="${ssrRenderStyle({
2580
+ _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-5b974b95><select class="bind-select" style="${ssrRenderStyle({
2580
2581
  "flex": "none",
2581
2582
  "width": "62px"
2582
- })}" data-v-33218c74><option value="dcw" data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "dcw") : ssrLooseEqual(unref(agentBindKind), "dcw")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40ifw097"))}</option><option value="daq" data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "daq") : ssrLooseEqual(unref(agentBindKind), "daq")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40rjw098"))}</option></select><select class="bind-select" data-v-33218c74><option value="" data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), "") : ssrLooseEqual(unref(agentBindNodeId), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kurjldk099"))}</option>`);
2583
+ })}" data-v-5b974b95><option value="dcw" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "dcw") : ssrLooseEqual(unref(agentBindKind), "dcw")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40ifw097"))}</option><option value="daq" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "daq") : ssrLooseEqual(unref(agentBindKind), "daq")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40rjw098"))}</option></select><select class="bind-select" data-v-5b974b95><option value="" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), "") : ssrLooseEqual(unref(agentBindNodeId), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kurjldk099"))}</option>`);
2583
2584
  if (unref(agentBindKind) === "dcw") {
2584
2585
  _push(`<!--[-->`);
2585
2586
  ssrRenderList(unref(dcw).nodes, (n) => {
2586
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2587
+ _push(`<option${ssrRenderAttr("value", n.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2587
2588
  });
2588
2589
  _push(`<!--]-->`);
2589
2590
  } else {
2590
2591
  _push(`<!--[-->`);
2591
2592
  ssrRenderList(unref(daq).nodes, (n) => {
2592
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2593
+ _push(`<option${ssrRenderAttr("value", n.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2593
2594
  });
2594
2595
  _push(`<!--]-->`);
2595
2596
  }
2596
2597
  _push(`</select><select class="bind-select" style="${ssrRenderStyle({
2597
2598
  "flex": "none",
2598
2599
  "width": "76px"
2599
- })}" data-v-33218c74><option value="auto" data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "auto") : ssrLooseEqual(unref(agentBindMode), "auto")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k45kpj100"))}</option><option value="manual" data-v-33218c74${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "manual") : ssrLooseEqual(unref(agentBindMode), "manual")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k3zul4101"))}</option></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(agentBindNodeId)) ? " disabled" : ""} data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k452a8102"))}</button></div>`);
2600
+ })}" data-v-5b974b95><option value="auto" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "auto") : ssrLooseEqual(unref(agentBindMode), "auto")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k45kpj100"))}</option><option value="manual" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "manual") : ssrLooseEqual(unref(agentBindMode), "manual")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k3zul4101"))}</option></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(agentBindNodeId)) ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k452a8102"))}</button></div>`);
2600
2601
  } else _push(`<!---->`);
2601
2602
  if (unref(pendingApprovals).length) {
2602
- _push(`<!--[--><div class="sect-hd" style="${ssrRenderStyle({ "color": "var(--hud-amber)" })}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1gk2jg7132"))} ${ssrInterpolate(unref(pendingApprovals).length)}</div><!--[-->`);
2603
+ _push(`<!--[--><div class="sect-hd" style="${ssrRenderStyle({ "color": "var(--hud-amber)" })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1gk2jg7132"))} ${ssrInterpolate(unref(pendingApprovals).length)}</div><!--[-->`);
2603
2604
  ssrRenderList(unref(pendingApprovals), (ap) => {
2604
- _push(`<div class="approval-card" data-v-33218c74><div class="approval-detail" data-v-33218c74>${ssrInterpolate(ap.detail)}</div><div class="${ssrRenderClass([{ urgent: approvalRemainingSec(ap) <= 30 }, "approval-ttl"])}" data-v-33218c74> ⏱ ${ssrInterpolate(approvalRemainingSec(ap))}s ${ssrInterpolate(_ctx.$t("townView.hitlAutoReject"))}</div><input${ssrRenderAttr("value", unref(approvalComments)[ap.id])} class="dcw-write input-inline" style="${ssrRenderStyle({
2605
+ _push(`<div class="approval-card" data-v-5b974b95><div class="approval-detail" data-v-5b974b95>${ssrInterpolate(ap.detail)}</div><div class="${ssrRenderClass([{ urgent: approvalRemainingSec(ap) <= 30 }, "approval-ttl"])}" data-v-5b974b95> ⏱ ${ssrInterpolate(approvalRemainingSec(ap))}s ${ssrInterpolate(_ctx.$t("townView.hitlAutoReject"))}</div><input${ssrRenderAttr("value", unref(approvalComments)[ap.id])} class="dcw-write input-inline" style="${ssrRenderStyle({
2605
2606
  "width": "100%",
2606
2607
  "margin-top": "5px"
2607
- })}"${ssrRenderAttr("placeholder", _ctx.$t("townView.keztqrn020"))} data-v-33218c74><div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-top": "5px" })}" data-v-33218c74><button class="bind-add-btn" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kslcozu103"))}</button><button class="bind-add-btn danger" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k14gu3rd104"))}</button></div></div>`);
2608
+ })}"${ssrRenderAttr("placeholder", _ctx.$t("townView.keztqrn020"))} data-v-5b974b95><div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-top": "5px" })}" data-v-5b974b95><button class="bind-add-btn" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kslcozu103"))}</button><button class="bind-add-btn danger" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k14gu3rd104"))}</button></div></div>`);
2608
2609
  });
2609
2610
  _push(`<!--]--><!--]-->`);
2610
2611
  } else _push(`<!---->`);
2611
- if (unref(agentRangeDraft) && unref(mode) === "edit") _push(`<!--[--><div class="obj-row" data-v-33218c74><span class="obj-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-33218c74><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "ellipse" }, "seg-btn"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "rect" }, "seg-btn"])}" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="obj-row" data-v-33218c74><span class="obj-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k41lwj105"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusX)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-33218c74><span class="bp-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusX))}</span></div><div class="obj-row" data-v-33218c74><span class="obj-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k45bta106"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusZ)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-33218c74><span class="bp-val" data-v-33218c74>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusZ))}</span></div><button class="obj-mini danger" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1w45mzc107"))}</button><!--]-->`);
2612
- else _push(`<div class="ins-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k14s8urm108"))}</div>`);
2613
- _push(`<div class="obj-sep" data-v-33218c74></div><div class="sect-hd chat-sect" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1ghjbfc133"))} ${ssrInterpolate(unref(agentChatTitle))} <button class="mini-btn chat-refresh"${ssrRenderAttr("title", _ctx.$t("townView.k15avt7g021"))} data-v-33218c74>${ssrInterpolate(unref(historyLoading) ? "…" : "↻")}</button></div><div class="rpg-lines chat-embed" data-v-33218c74>`);
2614
- if (unref(historyLoading)) _push(`<div class="rpg-note" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kkhlx5h109"))}</div>`);
2612
+ if (unref(agentRangeDraft) && unref(mode) === "edit") _push(`<!--[--><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "ellipse" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "rect" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k41lwj105"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusX)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusX))}</span></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k45bta106"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusZ)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusZ))}</span></div><button class="obj-mini danger" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1w45mzc107"))}</button><!--]-->`);
2613
+ else _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k14s8urm108"))}</div>`);
2614
+ _push(`<div class="obj-sep" data-v-5b974b95></div><div class="sect-hd chat-sect" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1ghjbfc133"))} ${ssrInterpolate(unref(agentChatTitle))} <button class="mini-btn chat-refresh"${ssrRenderAttr("title", _ctx.$t("townView.k15avt7g021"))} data-v-5b974b95>${ssrInterpolate(unref(historyLoading) ? "…" : "↻")}</button></div><div class="rpg-lines chat-embed" data-v-5b974b95>`);
2615
+ if (unref(historyLoading)) _push(`<div class="rpg-note" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kkhlx5h109"))}</div>`);
2615
2616
  else _push(`<!---->`);
2616
2617
  if (unref(agentHistory).length) {
2617
- _push(`<!--[--><div class="rpg-divider" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2618
+ _push(`<!--[--><div class="rpg-divider" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2618
2619
  ssrRenderList(unref(agentHistory), (r) => {
2619
- _push(`<div class="rpg-line hist" data-v-33218c74><span class="rpg-time" data-v-33218c74>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-33218c74>`);
2620
- if (chatKindLabel(r.kind)) _push(`<span class="${ssrRenderClass([`k-${r.kind}`, "rpg-kind"])}" data-v-33218c74>${ssrInterpolate(chatKindLabel(r.kind))}</span>`);
2620
+ _push(`<div class="rpg-line hist" data-v-5b974b95><span class="rpg-time" data-v-5b974b95>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-5b974b95>`);
2621
+ if (chatKindLabel(r.kind)) _push(`<span class="${ssrRenderClass([`k-${r.kind}`, "rpg-kind"])}" data-v-5b974b95>${ssrInterpolate(chatKindLabel(r.kind))}</span>`);
2621
2622
  else _push(`<!---->`);
2622
- _push(`<span class="rpg-text" data-v-33218c74>${ssrInterpolate(r.text)}</span></div></div>`);
2623
+ _push(`<span class="rpg-text" data-v-5b974b95>${ssrInterpolate(r.text)}</span></div></div>`);
2623
2624
  });
2624
2625
  _push(`<!--]--><!--]-->`);
2625
2626
  } else _push(`<!---->`);
2626
- if (unref(agentChatRows).length) _push(`<div class="rpg-divider live" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1cwz73k135"))} ${ssrInterpolate(unref(agentChatRows).length)}</div>`);
2627
+ if (unref(agentChatRows).length) _push(`<div class="rpg-divider live" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1cwz73k135"))} ${ssrInterpolate(unref(agentChatRows).length)}</div>`);
2627
2628
  else _push(`<!---->`);
2628
2629
  _push(`<!--[-->`);
2629
2630
  ssrRenderList(unref(agentChatRows), (r) => {
2630
- _push(`<div class="rpg-line live" data-v-33218c74><span class="rpg-time" data-v-33218c74>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-33218c74><span class="rpg-text" data-v-33218c74>${ssrInterpolate(r.text)}</span></div></div>`);
2631
+ _push(`<div class="rpg-line live" data-v-5b974b95><span class="rpg-time" data-v-5b974b95>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-5b974b95><span class="rpg-text" data-v-5b974b95>${ssrInterpolate(r.text)}</span></div></div>`);
2631
2632
  });
2632
2633
  _push(`<!--]-->`);
2633
- if (unref(selectedAgentMeta)?.state === "busy") _push(`<div class="rpg-typing" data-v-33218c74><span class="ty-dot" data-v-33218c74></span><span class="ty-dot" data-v-33218c74></span><span class="ty-dot" data-v-33218c74></span><span class="ty-label" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k3o5tz9110"))}</span></div>`);
2634
+ if (unref(selectedAgentMeta)?.state === "busy") _push(`<div class="rpg-typing" data-v-5b974b95><span class="ty-dot" data-v-5b974b95></span><span class="ty-dot" data-v-5b974b95></span><span class="ty-dot" data-v-5b974b95></span><span class="ty-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3o5tz9110"))}</span></div>`);
2634
2635
  else _push(`<!---->`);
2635
- if (!unref(historyLoading) && !unref(agentHistory).length && !unref(agentChatRows).length) _push(`<div class="rpg-note" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1qkqld7111"))}</div>`);
2636
+ if (!unref(historyLoading) && !unref(agentHistory).length && !unref(agentChatRows).length) _push(`<div class="rpg-note" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1qkqld7111"))}</div>`);
2636
2637
  else _push(`<!---->`);
2637
2638
  _push(`</div><!--]-->`);
2638
2639
  } else _push(`<!---->`);
2639
2640
  _push(`</section>`);
2640
2641
  } else _push(`<!---->`);
2641
- _push(`<section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</h3></div><div class="health-body" data-v-33218c74><div class="donut-wrap" data-v-33218c74><canvas width="118" height="118" data-v-33218c74></canvas><div class="donut-center" data-v-33218c74><b style="${ssrRenderStyle({ color: unref(healthTone) })}" data-v-33218c74>${ssrInterpolate(unref(healthPct))}%</b><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k7h1nxo113"))}</span></div></div><div class="health-legend" data-v-33218c74><div class="hl-row" data-v-33218c74><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-accent)" })}" data-v-33218c74></span> ${ssrInterpolate(_ctx.$t("townView.k3vp67i114"))} <span class="n" data-v-33218c74>${ssrInterpolate(unref(runningCount))}</span></div><div class="hl-row" data-v-33218c74><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-amber)" })}" data-v-33218c74></span> ${ssrInterpolate(_ctx.$t("townView.k3zcvb115"))} <span class="n" data-v-33218c74>${ssrInterpolate(unref(idleCount))}</span></div><div class="hl-row" data-v-33218c74><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-danger)" })}" data-v-33218c74></span> ${ssrInterpolate(_ctx.$t("townView.k3xmid116"))} <span class="n" data-v-33218c74>${ssrInterpolate(unref(alarmCount))}</span></div><div class="hl-row" data-v-33218c74><span class="hl-dot" style="${ssrRenderStyle({ background: "#3a4a63" })}" data-v-33218c74></span> ${ssrInterpolate(_ctx.$t("townView.statesOffline"))} <span class="n" data-v-33218c74>${ssrInterpolate(unref(offlineCount))}</span></div></div></div></section><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1q247fn117"))}</h3><span class="panel-tag" data-v-33218c74>${ssrInterpolate(unref(deviceTwins).twins.length)}</span></div>`);
2642
+ _push(`<section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</h3></div><div class="health-body" data-v-5b974b95><div class="donut-wrap" data-v-5b974b95><canvas width="118" height="118" data-v-5b974b95></canvas><div class="donut-center" data-v-5b974b95><b style="${ssrRenderStyle({ color: unref(healthTone) })}" data-v-5b974b95>${ssrInterpolate(unref(healthPct))}%</b><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k7h1nxo113"))}</span></div></div><div class="health-legend" data-v-5b974b95><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-accent)" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.k3vp67i114"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(runningCount))}</span></div><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-amber)" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.k3zcvb115"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(idleCount))}</span></div><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-danger)" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.k3xmid116"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(alarmCount))}</span></div><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "#3a4a63" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.statesOffline"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(offlineCount))}</span></div></div></div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1q247fn117"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(deviceTwins).twins.length)}</span></div>`);
2642
2643
  _push(ssrRenderComponent(_component_WorkshopDeviceTwinPanel, {
2643
2644
  class: "kd-embed",
2644
2645
  "daq-live": unref(daqLive),
2645
2646
  "dcw-live": unref(dcwLive),
2646
2647
  onFocusDevice
2647
2648
  }, null, _parent));
2648
- _push(`</section><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1cxf749118"))}</h3><span class="panel-tag" data-v-33218c74>${ssrInterpolate(unref(activeAlarmCount))} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bkswpz022"))} data-v-33218c74> ✓ </button></div><div class="alarm-list" data-v-33218c74><!--[-->`);
2649
+ _push(`</section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1cxf749118"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(activeAlarmCount))} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bkswpz022"))} data-v-5b974b95> ✓ </button></div><div class="alarm-list" data-v-5b974b95><!--[-->`);
2649
2650
  ssrRenderList(unref(alarms).slice(0, 8), (a) => {
2650
- _push(`<div class="al-row" data-v-33218c74><span class="${ssrRenderClass([a.state === 2 ? "info" : a.state === 1 ? "warn" : "crit", "al-ico"])}" data-v-33218c74><svg class="al-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M12 3 22 20H2L12 3Z" data-v-33218c74></path><path d="M12 10v4M12 17v.2" data-v-33218c74></path></svg></span><div class="al-body" data-v-33218c74><div class="al-txt" data-v-33218c74>${ssrInterpolate(a.txt)}</div><div class="al-src" data-v-33218c74>${ssrInterpolate(a.src)} · ${ssrInterpolate(a.time)}</div></div><button class="${ssrRenderClass([`s${a.state}`, "al-state"])}" data-v-33218c74>${ssrInterpolate(ALARM_STATES[a.state])}</button></div>`);
2651
+ _push(`<div class="al-row" data-v-5b974b95><span class="${ssrRenderClass([a.state === 2 ? "info" : a.state === 1 ? "warn" : "crit", "al-ico"])}" data-v-5b974b95><svg class="al-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M12 3 22 20H2L12 3Z" data-v-5b974b95></path><path d="M12 10v4M12 17v.2" data-v-5b974b95></path></svg></span><div class="al-body" data-v-5b974b95><div class="al-txt" data-v-5b974b95>${ssrInterpolate(a.txt)}</div><div class="al-src" data-v-5b974b95>${ssrInterpolate(a.src)} · ${ssrInterpolate(a.time)}</div></div><button class="${ssrRenderClass([`s${a.state}`, "al-state"])}" data-v-5b974b95>${ssrInterpolate(ALARM_STATES[a.state])}</button></div>`);
2651
2652
  });
2652
2653
  _push(`<!--]-->`);
2653
- if (!unref(alarms).length) _push(`<div class="rail-empty" data-v-33218c74><svg class="re-ico" viewBox="0 0 24 24" data-v-33218c74><path d="M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z" data-v-33218c74></path><path d="m9.2 12.2 2 2 3.6-4" data-v-33218c74></path></svg><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kjz544r119"))}</span></div>`);
2654
+ if (!unref(alarms).length) _push(`<div class="rail-empty" data-v-5b974b95><svg class="re-ico" viewBox="0 0 24 24" data-v-5b974b95><path d="M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z" data-v-5b974b95></path><path d="m9.2 12.2 2 2 3.6-4" data-v-5b974b95></path></svg><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kjz544r119"))}</span></div>`);
2654
2655
  else _push(`<!---->`);
2655
- _push(`</div></section><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1cxdtq2120"))}</h3><span class="panel-tag" data-v-33218c74>${ssrInterpolate(unref(ticker).length)}</span></div><div class="event-list" data-v-33218c74><!--[-->`);
2656
+ _push(`</div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1cxdtq2120"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(ticker).length)}</span></div><div class="event-list" data-v-5b974b95><!--[-->`);
2656
2657
  ssrRenderList([...unref(ticker)].reverse(), (t, i) => {
2657
- _push(`<div class="event-row" data-v-33218c74><span class="ev-time" data-v-33218c74>${ssrInterpolate(fmtTime(t.at))}</span><span class="ev-name"${ssrRenderAttr("title", t.agentName)} data-v-33218c74>${ssrInterpolate(t.agentName)}</span><span class="ev-text"${ssrRenderAttr("title", t.text)} data-v-33218c74>${ssrInterpolate(t.text)}</span></div>`);
2658
+ _push(`<div class="event-row" data-v-5b974b95><span class="ev-time" data-v-5b974b95>${ssrInterpolate(fmtTime(t.at))}</span><span class="ev-name"${ssrRenderAttr("title", t.agentName)} data-v-5b974b95>${ssrInterpolate(t.agentName)}</span><span class="ev-text"${ssrRenderAttr("title", t.text)} data-v-5b974b95>${ssrInterpolate(t.text)}</span></div>`);
2658
2659
  });
2659
2660
  _push(`<!--]-->`);
2660
- if (!unref(ticker).length) _push(`<div class="rail-empty" data-v-33218c74><svg class="re-ico" viewBox="0 0 24 24" data-v-33218c74><path d="M3 12h3l2.5-6 4 12L15 12h6" data-v-33218c74></path></svg><span data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2uk6ua121"))}</span></div>`);
2661
+ if (!unref(ticker).length) _push(`<div class="rail-empty" data-v-5b974b95><svg class="re-ico" viewBox="0 0 24 24" data-v-5b974b95><path d="M3 12h3l2.5-6 4 12L15 12h6" data-v-5b974b95></path></svg><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2uk6ua121"))}</span></div>`);
2661
2662
  else _push(`<!---->`);
2662
- _push(`</div></section><section class="panel" data-v-33218c74><div class="panel-hd" data-v-33218c74><h3 data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kjug2jq122"))}</h3></div><div class="mm-body" data-v-33218c74><div class="mm-wrap"${ssrRenderAttr("title", _ctx.$t("townView.klfwiqg023"))} data-v-33218c74><canvas class="nav-cv" data-v-33218c74></canvas></div><div class="mm-col" data-v-33218c74><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1lap9bs024"))} data-v-33218c74><svg class="vp-svg" viewBox="0 0 24 24" data-v-33218c74><path d="M3 12a9 9 0 1 0 3-6.7M3 4v5h5" data-v-33218c74></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.kav8a8k025"))} data-v-33218c74><svg class="vp-svg" viewBox="0 0 24 24" data-v-33218c74><circle cx="11" cy="11" r="6.5" data-v-33218c74></circle><path d="m16 16 4.5 4.5M8.5 11h5" data-v-33218c74></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1u7uce9026"))} data-v-33218c74><svg class="vp-svg" viewBox="0 0 24 24" data-v-33218c74><circle cx="11" cy="11" r="6.5" data-v-33218c74></circle><path d="m16 16 4.5 4.5M8.5 11h5M11 8.5v5" data-v-33218c74></path></svg></button></div></div><div class="mm-meta mono" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k1gaaodq136"))}${ssrInterpolate(unref(navScale).toFixed(1))} · ${ssrInterpolate(unref(minimap)?.devices?.length ?? 0)} ${ssrInterpolate(_ctx.$t("townView.k47e16126"))}</div></section></aside></div><footer class="statusbar" data-v-33218c74><span data-v-33218c74><span class="${ssrRenderClass([{ red: unref(conn).state !== "open" }, "sb-dot"])}" data-v-33218c74></span>${ssrInterpolate(_ctx.$t("townView.k1i4g246123"))} <b data-v-33218c74>${ssrInterpolate(unref(conn).state === "open" ? _ctx.$t("townView.k41k5c154") : unref(syncing) ? _ctx.$t("townView.k3lmtk3184") : _ctx.$t("townView.k44c2n186"))}</b></span><span class="sb-stats" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k4a0jt124"))} <b data-v-33218c74>${ssrInterpolate(unref(blockCount))}</b><i data-v-33218c74>·</i>${ssrInterpolate(_ctx.$t("townView.k3xdvm125"))} <b data-v-33218c74>${ssrInterpolate(unref(agentCount))}</b><i data-v-33218c74>·</i>${ssrInterpolate(_ctx.$t("townView.k47e16126"))} <b data-v-33218c74>${ssrInterpolate(unref(deviceCount))}</b></span><span class="sb-lat mono" data-v-33218c74>${ssrInterpolate(unref(fps))} FPS </span><span class="copy" data-v-33218c74> © 2026 ABO · DIGITAL TWIN · ${ssrInterpolate(_ctx.$t("townView.k1h5gxpf137"))}</span></footer>`);
2663
- if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-33218c74><div class="loading-spinner" data-v-33218c74></div><span class="loading-text" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2663
+ _push(`</div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kjug2jq122"))}</h3></div><div class="mm-body" data-v-5b974b95><div class="mm-wrap"${ssrRenderAttr("title", _ctx.$t("townView.klfwiqg023"))} data-v-5b974b95><canvas class="nav-cv" data-v-5b974b95></canvas></div><div class="mm-col" data-v-5b974b95><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1lap9bs024"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M3 12a9 9 0 1 0 3-6.7M3 4v5h5" data-v-5b974b95></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.kav8a8k025"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="11" cy="11" r="6.5" data-v-5b974b95></circle><path d="m16 16 4.5 4.5M8.5 11h5" data-v-5b974b95></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1u7uce9026"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="11" cy="11" r="6.5" data-v-5b974b95></circle><path d="m16 16 4.5 4.5M8.5 11h5M11 8.5v5" data-v-5b974b95></path></svg></button></div></div><div class="mm-meta mono" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1gaaodq136"))}${ssrInterpolate(unref(navScale).toFixed(1))} · ${ssrInterpolate(unref(minimap)?.devices?.length ?? 0)} ${ssrInterpolate(_ctx.$t("townView.k47e16126"))}</div></section></aside></div><footer class="statusbar" data-v-5b974b95><span data-v-5b974b95><span class="${ssrRenderClass([{ red: unref(conn).state !== "open" }, "sb-dot"])}" data-v-5b974b95></span>${ssrInterpolate(_ctx.$t("townView.k1i4g246123"))} <b data-v-5b974b95>${ssrInterpolate(unref(conn).state === "open" ? _ctx.$t("townView.k41k5c154") : unref(syncing) ? _ctx.$t("townView.k3lmtk3184") : _ctx.$t("townView.k44c2n186"))}</b></span><span class="sb-stats" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k4a0jt124"))} <b data-v-5b974b95>${ssrInterpolate(unref(blockCount))}</b><i data-v-5b974b95>·</i>${ssrInterpolate(_ctx.$t("townView.k3xdvm125"))} <b data-v-5b974b95>${ssrInterpolate(unref(agentCount))}</b><i data-v-5b974b95>·</i>${ssrInterpolate(_ctx.$t("townView.k47e16126"))} <b data-v-5b974b95>${ssrInterpolate(unref(deviceCount))}</b></span><span class="sb-lat mono" data-v-5b974b95>${ssrInterpolate(unref(fps))} FPS </span><span class="copy" data-v-5b974b95> © 2026 ABO · DIGITAL TWIN · ${ssrInterpolate(_ctx.$t("townView.k1h5gxpf137"))}</span></footer>`);
2664
+ if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-5b974b95><div class="loading-spinner" data-v-5b974b95></div><span class="loading-text" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2664
2665
  else _push(`<!---->`);
2665
2666
  _push(`</div>`);
2666
2667
  };
@@ -2674,7 +2675,7 @@ TownView_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
2674
2675
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/town/TownView.vue");
2675
2676
  return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
2676
2677
  };
2677
- var TownView_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(TownView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-33218c74"]]), { __name: "WorkshopTownView" });
2678
+ var TownView_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(TownView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5b974b95"]]), { __name: "WorkshopTownView" });
2678
2679
 
2679
2680
  export { TownView_default as T, useStorage as u };
2680
- //# sourceMappingURL=TownView-ql2eHZOg.mjs.map
2681
+ //# sourceMappingURL=TownView-DxeQe1Bl.mjs.map