agentworkshop 0.7.8 → 0.7.11

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 (627) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/-6OnbLFb.js +1 -0
  3. package/.output/public/_nuxt/{BUxYN2mw.js → -nb2uqVg.js} +1 -1
  4. package/.output/public/_nuxt/6vYobj4F.js +1 -0
  5. package/.output/public/_nuxt/{BSXx2vqR.js → B-xskWta.js} +1 -1
  6. package/.output/public/_nuxt/B3Psw_sL.js +1 -0
  7. package/.output/public/_nuxt/B53Mp7lD.js +1 -0
  8. package/.output/public/_nuxt/B5CYgFAD.js +14 -0
  9. package/.output/public/_nuxt/{uBbDCfTz.js → B5S_UyaC.js} +1 -1
  10. package/.output/public/_nuxt/{DZk24ego.js → B7wL3pDk.js} +1 -1
  11. package/.output/public/_nuxt/B8WV7GzS.js +1 -0
  12. package/.output/public/_nuxt/{BYL0Rjqj.js → BBwMH_hG.js} +3 -3
  13. package/.output/public/_nuxt/BLzCac9K2.js +1 -0
  14. package/.output/public/_nuxt/BNXfwXpE.js +1 -0
  15. package/.output/public/_nuxt/{VnIWJ0ts.js → BN_PdN3J.js} +1 -1
  16. package/.output/public/_nuxt/BZGNTgTQ2.js +1 -0
  17. package/.output/public/_nuxt/BbZAzXjZ2.js +1 -0
  18. package/.output/public/_nuxt/Bc3PiGGr.js +1 -0
  19. package/.output/public/_nuxt/Bckshc9V.js +1 -0
  20. package/.output/public/_nuxt/BcrN7QEl2.js +1 -0
  21. package/.output/public/_nuxt/BgOhoDTI.js +1 -0
  22. package/.output/public/_nuxt/Bmpvki7M.js +1 -0
  23. package/.output/public/_nuxt/{BkfchkK62.js → Bp5luxkg2.js} +1 -1
  24. package/.output/public/_nuxt/BxPPAkGA.js +3 -0
  25. package/.output/public/_nuxt/{C8dxXc6K.js → BxtpDtzC.js} +1 -1
  26. package/.output/public/_nuxt/{pRQri7vQ2.js → BytVi9VX2.js} +1 -1
  27. package/.output/public/_nuxt/{D5KJ7_0V.js → C3tCneTM.js} +1 -1
  28. package/.output/public/_nuxt/{C_gFA2H_2.js → C4OAdbVK2.js} +1 -1
  29. package/.output/public/_nuxt/C6m-kenn.js +1 -0
  30. package/.output/public/_nuxt/{zwdqvGN_.js → CGx-mtWf.js} +1 -1
  31. package/.output/public/_nuxt/{DCXIGxzT.js → CKfhtOt7.js} +2 -2
  32. package/.output/public/_nuxt/{ChEKFMxj.js → CUXCQXjG.js} +1 -1
  33. package/.output/public/_nuxt/CfVAr2nf.js +1 -0
  34. package/.output/public/_nuxt/Cj6139IM.js +1 -0
  35. package/.output/public/_nuxt/{DM8DS9MA.js → Cor9siSf.js} +1 -1
  36. package/.output/public/_nuxt/{BsMpJf7S.js → D-Ca4BGY.js} +6 -6
  37. package/.output/public/_nuxt/{CsCpu2Zh.js → D1z7i2UP.js} +1 -1
  38. package/.output/public/_nuxt/D7jiode2.js +1 -0
  39. package/.output/public/_nuxt/D8CqF0yy.js +1 -0
  40. package/.output/public/_nuxt/{DYZBdSSg2.js → DA4lxCWC2.js} +1 -1
  41. package/.output/public/_nuxt/DEaY_uvR.js +1 -0
  42. package/.output/public/_nuxt/{DCEyMaN-.js → DNxVTfhe.js} +3 -3
  43. package/.output/public/_nuxt/DT-Wg8r1.js +1 -0
  44. package/.output/public/_nuxt/DTYBfjRY.js +1 -0
  45. package/.output/public/_nuxt/{fQUs58kX2.js → DWcEk1ur2.js} +1 -1
  46. package/.output/public/_nuxt/DXRZPxGs.js +1 -0
  47. package/.output/public/_nuxt/Dhqra7NB.js +1 -0
  48. package/.output/public/_nuxt/DlRO_q5L.js +1 -0
  49. package/.output/public/_nuxt/{C2iWjzEC2.js → DoLasgPj2.js} +1 -1
  50. package/.output/public/_nuxt/{DRq09ZmT.js → DpojD719.js} +1 -1
  51. package/.output/public/_nuxt/Ds8JbqGB.js +1 -0
  52. package/.output/public/_nuxt/{BCipft_k2.js → DsUUYP292.js} +1 -1
  53. package/.output/public/_nuxt/DtBu71ev.js +32 -0
  54. package/.output/public/_nuxt/Dy-mxvXY2.js +1 -0
  55. package/.output/public/_nuxt/DyisHHzD.js +18 -0
  56. package/.output/public/_nuxt/G0qIw7Gq2.js +1 -0
  57. package/.output/public/_nuxt/ORt9oDIy2.js +1 -0
  58. package/.output/public/_nuxt/QoCzfpo2.js +1 -0
  59. package/.output/public/_nuxt/RzXYI9FM.js +23 -0
  60. package/.output/public/_nuxt/TownView.BHLKAjEu.css +1 -0
  61. package/.output/public/_nuxt/VLI2Zy4t.js +5 -0
  62. package/.output/public/_nuxt/_id_.DIxEKj88.css +1 -0
  63. package/.output/public/_nuxt/_id_.DTvjd6VN.css +1 -0
  64. package/.output/public/_nuxt/{_wsId_.COUzMXpP.css → _wsId_.BFyCuUwS.css} +1 -1
  65. package/.output/public/_nuxt/agents.CEbox5-D.css +1 -0
  66. package/.output/public/_nuxt/{ZugRk0CM2.js → arUY5dyq2.js} +2 -2
  67. package/.output/public/_nuxt/builds/latest.json +1 -1
  68. package/.output/public/_nuxt/builds/meta/88479a5b-ce6a-400f-9737-1cc9f54b1fe5.json +1 -0
  69. package/.output/public/_nuxt/channel-templates.De5ZvrGz.css +1 -0
  70. package/.output/public/_nuxt/d_Sz9KGm.js +1 -0
  71. package/.output/public/_nuxt/daq.6IrhVVfy.css +1 -0
  72. package/.output/public/_nuxt/dcw.DcDjwvqv.css +1 -0
  73. package/.output/public/_nuxt/default.BbgdTDCk.css +1 -0
  74. package/.output/public/_nuxt/{CblLEiCZ.js → eHYnGew0.js} +3 -3
  75. package/.output/public/_nuxt/eUGyJdiT.js +1 -0
  76. package/.output/public/_nuxt/{entry.5qf6EqfN.css → entry.B03HBJGC.css} +1 -1
  77. package/.output/public/_nuxt/{Cyk3du4K2.js → kZV5TQvh2.js} +1 -1
  78. package/.output/public/_nuxt/kkEthL84.js +2 -0
  79. package/.output/public/_nuxt/logs.BO-BSyjm.css +1 -0
  80. package/.output/public/_nuxt/{D4qXvjuV.js → niDwBOZW.js} +2 -2
  81. package/.output/public/_nuxt/permissions.CwZo6t1V.css +1 -0
  82. package/.output/public/_nuxt/plugins.Clsky_kl.css +1 -0
  83. package/.output/public/_nuxt/rqZ-1SoP.js +2 -0
  84. package/.output/public/_nuxt/settings.BqMF2nfj.css +1 -0
  85. package/.output/public/_nuxt/tJuVvBSl.js +1 -0
  86. package/.output/public/_nuxt/teams.CUMnbQGf.css +1 -0
  87. package/.output/public/_nuxt/tokens.BPLe9ioQ.css +1 -0
  88. package/.output/public/_nuxt/{Bi6AiCuP.js → vJ4FPb-_.js} +1 -1
  89. package/.output/public/_nuxt/workshop.BIdoGfoC.css +1 -0
  90. package/.output/public/_nuxt/{B7aqqzkY.js → zVkqCZ78.js} +1 -1
  91. package/.output/server/chunks/_/LeftOutlined.mjs +1 -1
  92. package/.output/server/chunks/_/SearchOutlined.mjs +1 -1
  93. package/.output/server/chunks/_/character-asset.repo.mjs +1 -1
  94. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  95. package/.output/server/chunks/_/nitro.mjs +1614 -1279
  96. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  97. package/.output/server/chunks/_/scene-layout.repo.mjs +1 -1
  98. package/.output/server/chunks/build/Col-biaNnEPf.mjs +1 -1
  99. package/.output/server/chunks/build/{OmpTerminalPanel-COphA1br.mjs → OmpTerminalPanel-Ban3yJZ4.mjs} +4 -5
  100. package/.output/server/chunks/build/OmpTerminalPanel-Ban3yJZ4.mjs.map +1 -0
  101. package/.output/server/chunks/build/{TownView-B5KifIaT.mjs → TownView-CunmEMzS.mjs} +184 -184
  102. package/.output/server/chunks/build/{TownView-B5KifIaT.mjs.map → TownView-CunmEMzS.mjs.map} +1 -1
  103. package/.output/server/chunks/build/{_id_-Ct4Jhvl1.mjs → _id_-CVnMdSeG.mjs} +38 -37
  104. package/.output/server/chunks/build/_id_-CVnMdSeG.mjs.map +1 -0
  105. package/.output/server/chunks/build/{_id_-C-ewLgfl.mjs → _id_-D265Wh_k.mjs} +127 -126
  106. package/.output/server/chunks/build/_id_-D265Wh_k.mjs.map +1 -0
  107. package/.output/server/chunks/build/{_wsId_-CanI_6Su.mjs → _wsId_-eNJmBp05.mjs} +137 -136
  108. package/.output/server/chunks/build/{_wsId_-CanI_6Su.mjs.map → _wsId_-eNJmBp05.mjs.map} +1 -1
  109. package/.output/server/chunks/build/{agents-DSOptxXA.mjs → agents-B10wmFri.mjs} +24 -23
  110. package/.output/server/chunks/build/agents-B10wmFri.mjs.map +1 -0
  111. package/.output/server/chunks/build/alert-qJnjyRcP.mjs +1 -1
  112. package/.output/server/chunks/build/api-error-dul30BYQ.mjs +47 -0
  113. package/.output/server/chunks/build/api-error-dul30BYQ.mjs.map +1 -0
  114. package/.output/server/chunks/build/button-DEcZFcqN.mjs +2 -2
  115. package/.output/server/chunks/build/{card-Dipvaykh.mjs → card-CCPQoKlh.mjs} +4 -4
  116. package/.output/server/chunks/build/{card-Dipvaykh.mjs.map → card-CCPQoKlh.mjs.map} +1 -1
  117. package/.output/server/chunks/build/{channel-templates-BK0KuPOd.mjs → channel-templates-CpWxVk5A.mjs} +29 -28
  118. package/.output/server/chunks/build/channel-templates-CpWxVk5A.mjs.map +1 -0
  119. package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs → checkbox-Dv1kjaUZ.mjs} +3 -3
  120. package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs.map → checkbox-Dv1kjaUZ.mjs.map} +1 -1
  121. package/.output/server/chunks/build/client-only-D5BzSQc6.mjs +1 -1
  122. package/.output/server/chunks/build/{daq-D9RA_uze.mjs → daq-DxaXk_8N.mjs} +114 -114
  123. package/.output/server/chunks/build/daq-DxaXk_8N.mjs.map +1 -0
  124. package/.output/server/chunks/build/{dcw-BTM5YU-B.mjs → dcw-DqjHrl5Z.mjs} +48 -47
  125. package/.output/server/chunks/build/dcw-DqjHrl5Z.mjs.map +1 -0
  126. package/.output/server/chunks/build/{default-BfWGTlbj.mjs → default-YcUHc1Ev.mjs} +34 -26
  127. package/.output/server/chunks/build/{default-BfWGTlbj.mjs.map → default-YcUHc1Ev.mjs.map} +1 -1
  128. package/.output/server/chunks/build/drawer-Cmh90erI.mjs +1 -1
  129. package/.output/server/chunks/build/dropdown-vhn1NPFs.mjs +2 -2
  130. package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs +554 -0
  131. package/.output/server/chunks/build/hasIn-vQ9LWt-J.mjs.map +1 -0
  132. package/.output/server/chunks/build/initDefaultProps-DIbWwP4R.mjs +1 -1
  133. package/.output/server/chunks/build/{input-sf_BT6o6.mjs → input-DxDqeyQW.mjs} +5 -553
  134. package/.output/server/chunks/build/input-DxDqeyQW.mjs.map +1 -0
  135. package/.output/server/chunks/build/{input-number-Bd55elNN.mjs → input-number-CZ3ZrCsy.mjs} +3 -3
  136. package/.output/server/chunks/build/{input-number-Bd55elNN.mjs.map → input-number-CZ3ZrCsy.mjs.map} +1 -1
  137. package/.output/server/chunks/build/{logs-Dyk0I2I9.mjs → logs-Co854R4y.mjs} +40 -40
  138. package/.output/server/chunks/build/{logs-Dyk0I2I9.mjs.map → logs-Co854R4y.mjs.map} +1 -1
  139. package/.output/server/chunks/build/menu-WCrlpYVh.mjs +2 -2
  140. package/.output/server/chunks/build/modal-yvUquPj5.mjs +2 -2
  141. package/.output/server/chunks/build/{monitor-MIOvsyLa.mjs → monitor-miqq9xHB.mjs} +11 -11
  142. package/.output/server/chunks/build/{monitor-MIOvsyLa.mjs.map → monitor-miqq9xHB.mjs.map} +1 -1
  143. package/.output/server/chunks/build/{pages-DR2bzczM.mjs → pages-DPC1Vp6w.mjs} +6 -5
  144. package/.output/server/chunks/build/pages-DPC1Vp6w.mjs.map +1 -0
  145. package/.output/server/chunks/build/permissions-Eu9e6hfZ.mjs +534 -0
  146. package/.output/server/chunks/build/permissions-Eu9e6hfZ.mjs.map +1 -0
  147. package/.output/server/chunks/build/{plugins-DnOBIWGg.mjs → plugins-D84mvK9G.mjs} +27 -25
  148. package/.output/server/chunks/build/plugins-D84mvK9G.mjs.map +1 -0
  149. package/.output/server/chunks/build/popconfirm-CRaHcz5O.mjs +2 -2
  150. package/.output/server/chunks/build/responsiveObserve-CS0UB6wQ.mjs +1 -1
  151. package/.output/server/chunks/build/{segmented-DPe9ZzLO.mjs → segmented-ChmQZwz6.mjs} +5 -4
  152. package/.output/server/chunks/build/{segmented-DPe9ZzLO.mjs.map → segmented-ChmQZwz6.mjs.map} +1 -1
  153. package/.output/server/chunks/build/select-D-CeE5vY.mjs +1 -1
  154. package/.output/server/chunks/build/{settings-DA8IkGLo.mjs → settings-BPBll_7K.mjs} +28 -26
  155. package/.output/server/chunks/build/settings-BPBll_7K.mjs.map +1 -0
  156. package/.output/server/chunks/build/space-CCBYAkXt.mjs +2 -2
  157. package/.output/server/chunks/build/spin-HVY81X_L.mjs +1 -1
  158. package/.output/server/chunks/build/switch-CelRXpcy.mjs +2 -2
  159. package/.output/server/chunks/build/{table-Cswq-l2r.mjs → table-BtksyDlQ.mjs} +5 -5
  160. package/.output/server/chunks/build/{table-Cswq-l2r.mjs.map → table-BtksyDlQ.mjs.map} +1 -1
  161. package/.output/server/chunks/build/{tabs-BM3tAh_J.mjs → tabs-DQv-_-R6.mjs} +3 -3
  162. package/.output/server/chunks/build/{tabs-BM3tAh_J.mjs.map → tabs-DQv-_-R6.mjs.map} +1 -1
  163. package/.output/server/chunks/build/{tag-NO9jEqKy.mjs → tag-A0tZ2Ouq.mjs} +4 -4
  164. package/.output/server/chunks/build/{tag-NO9jEqKy.mjs.map → tag-A0tZ2Ouq.mjs.map} +1 -1
  165. package/.output/server/chunks/build/{teams-BhSKBBBM.mjs → teams-CNflUtPh.mjs} +25 -24
  166. package/.output/server/chunks/build/teams-CNflUtPh.mjs.map +1 -0
  167. package/.output/server/chunks/build/{tokens-D_eyxmcv.mjs → tokens-CZpnEDVf.mjs} +27 -26
  168. package/.output/server/chunks/build/tokens-CZpnEDVf.mjs.map +1 -0
  169. package/.output/server/chunks/build/town-BUqRobze.mjs +1 -1
  170. package/.output/server/chunks/build/{town-DPtOPRRO.mjs → town-BbaR-8io.mjs} +10 -10
  171. package/.output/server/chunks/build/{town-DPtOPRRO.mjs.map → town-BbaR-8io.mjs.map} +1 -1
  172. package/.output/server/chunks/build/{useDaqStream-hwkhJHFU.mjs → useDaqStream-BkmyQT06.mjs} +36 -24
  173. package/.output/server/chunks/build/useDaqStream-BkmyQT06.mjs.map +1 -0
  174. package/.output/server/chunks/build/{useDcwStream-Bdew_yrr.mjs → useDcwStream-DWVoU96J.mjs} +63 -48
  175. package/.output/server/chunks/build/useDcwStream-DWVoU96J.mjs.map +1 -0
  176. package/.output/server/chunks/build/{useDeviceTwins-C6EBg9oN.mjs → useDeviceTwins-34WGk9aN.mjs} +4 -3
  177. package/.output/server/chunks/build/useDeviceTwins-34WGk9aN.mjs.map +1 -0
  178. package/.output/server/chunks/build/useLocalTime-9a4B-aHv.mjs +1 -1
  179. package/.output/server/chunks/build/{useOpsLog-DdCqKVVG.mjs → useOpsLog-C9zTzYof.mjs} +30 -17
  180. package/.output/server/chunks/build/useOpsLog-C9zTzYof.mjs.map +1 -0
  181. package/.output/server/chunks/build/useSiteConfig-DJe_KMVr.mjs +1 -1
  182. package/.output/server/chunks/build/useWorkshopApi-D2gq06N2.mjs +1 -1
  183. package/.output/server/chunks/build/{useWorkshopWs-B3j5wIAK.mjs → useWorkshopWs-CprkZEdq.mjs} +2 -3
  184. package/.output/server/chunks/build/useWorkshopWs-CprkZEdq.mjs.map +1 -0
  185. package/.output/server/chunks/build/{users-CmVvb1oq.mjs → users-D6RNylrW.mjs} +10 -10
  186. package/.output/server/chunks/build/{users-CmVvb1oq.mjs.map → users-D6RNylrW.mjs.map} +1 -1
  187. package/.output/server/chunks/build/{workshop-D5CQj2A8.mjs → workshop-Crsai2Y9.mjs} +27 -26
  188. package/.output/server/chunks/build/workshop-Crsai2Y9.mjs.map +1 -0
  189. package/.output/server/chunks/build/{workspaces-IfORCDJE.mjs → workspaces-BuydxM-3.mjs} +2 -3
  190. package/.output/server/chunks/build/workspaces-BuydxM-3.mjs.map +1 -0
  191. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  192. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  193. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  194. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -1
  195. package/.output/server/chunks/routes/api/metrics.mjs +1 -1
  196. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -1
  197. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -1
  198. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -1
  199. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -1
  200. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -1
  201. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -1
  202. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -1
  203. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -1
  204. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -1
  205. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -1
  206. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -1
  207. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  208. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -1
  209. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -1
  210. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -1
  211. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -1
  212. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -1
  213. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -1
  214. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -1
  215. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -1
  216. package/.output/server/chunks/routes/api/users/setup-status.get.mjs +1 -1
  217. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -1
  218. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -1
  219. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -1
  220. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -1
  221. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -1
  222. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -1
  223. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -1
  224. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -1
  225. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -1
  226. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -1
  227. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -1
  228. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +19 -8
  229. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  230. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -1
  231. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +2 -2
  232. package/.output/server/chunks/routes/api/workshop/agent-tools/list.get.mjs +2 -2
  233. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -1
  234. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -1
  235. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -1
  236. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -1
  237. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -1
  238. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -1
  239. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -1
  240. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -1
  241. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +2 -2
  242. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -1
  243. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +2 -2
  244. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -1
  245. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -1
  246. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +3 -3
  247. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -1
  248. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -1
  249. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -1
  250. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -1
  251. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +2 -2
  252. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -1
  253. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -1
  254. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -1
  255. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -1
  256. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -1
  257. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -1
  258. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -1
  259. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -1
  260. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -1
  261. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -1
  262. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -1
  263. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -1
  264. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +2 -2
  265. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -1
  266. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -1
  267. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -1
  268. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -1
  269. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -1
  270. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -1
  271. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -1
  272. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -1
  273. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +2 -2
  274. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -1
  275. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +2 -2
  276. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -1
  277. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -1
  278. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +3 -3
  279. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +7 -6
  280. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  281. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +5 -4
  282. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  283. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +5 -4
  284. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  285. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +5 -4
  286. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  287. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +2 -2
  288. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +2 -2
  289. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +5 -4
  290. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  291. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +5 -2
  292. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  293. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +2 -2
  294. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +3 -2
  295. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  296. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +2 -2
  297. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +2 -2
  298. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +2 -2
  299. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +2 -2
  300. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +2 -2
  301. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +2 -2
  302. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +7 -6
  303. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  304. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +2 -2
  305. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +2 -2
  306. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +5 -4
  307. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  308. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +4 -3
  309. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  310. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +2 -2
  311. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +2 -2
  312. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +2 -2
  313. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +2 -2
  314. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +4 -4
  315. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  316. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +8 -4
  317. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  318. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +4 -4
  319. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  320. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +2 -2
  321. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +2 -2
  322. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +2 -2
  323. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +2 -2
  324. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +4 -4
  325. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  326. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +2 -2
  327. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +7 -3
  328. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +3 -2
  330. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +3 -2
  332. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +2 -2
  334. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +2 -2
  335. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +2 -2
  336. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +2 -2
  337. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +2 -2
  338. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +2 -2
  339. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +2 -2
  340. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +2 -2
  341. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +2 -2
  342. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +2 -2
  343. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +2 -2
  344. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +2 -2
  345. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +2 -2
  346. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +2 -2
  347. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +5 -3
  348. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  349. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +2 -2
  350. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +2 -2
  351. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +2 -2
  352. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +2 -2
  353. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -1
  354. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -1
  355. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +2 -2
  356. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +2 -2
  357. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -1
  358. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +2 -2
  359. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +2 -2
  360. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +2 -2
  361. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +2 -2
  362. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -1
  363. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -1
  364. package/.output/server/chunks/routes/api/workshop/index.put.mjs +41 -0
  365. package/.output/server/chunks/routes/api/workshop/index.put.mjs.map +1 -0
  366. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +4 -3
  367. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  368. package/.output/server/chunks/routes/api/workshop/index11.get.mjs +27 -0
  369. package/.output/server/chunks/routes/api/workshop/index11.get.mjs.map +1 -0
  370. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -1
  371. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -1
  372. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -1
  373. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +4 -4
  374. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  375. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +5 -4
  376. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  377. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +2 -2
  378. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +18 -11
  379. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  380. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +2 -2
  381. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -1
  382. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +2 -2
  383. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -1
  384. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -1
  385. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +24 -12
  386. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  387. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -1
  388. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +12 -7
  389. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -1
  391. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -1
  392. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -1
  393. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +4 -4
  394. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  395. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +4 -4
  396. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  397. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -1
  398. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -1
  399. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +2 -2
  400. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +2 -2
  401. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -1
  402. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -1
  403. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -1
  404. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -1
  405. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -1
  406. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -1
  407. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -1
  408. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -1
  409. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +2 -2
  410. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -1
  411. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -1
  412. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -1
  413. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -1
  414. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -1
  415. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -1
  416. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -1
  417. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -1
  418. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +3 -3
  419. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -1
  420. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -1
  421. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -1
  422. package/.output/server/chunks/routes/renderer.mjs +3 -3
  423. package/.output/server/chunks/virtual/entry.mjs +303 -37
  424. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  425. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  426. package/.output/server/index.mjs +1 -1
  427. package/.output/server/package.json +1 -1
  428. package/README-zh.md +15 -0
  429. package/README.md +20 -0
  430. package/app/components/AppHeader.vue +1 -1
  431. package/app/components/AppSidebar.vue +7 -1
  432. package/app/components/workshop/A2aRpcDebugger.vue +1 -1
  433. package/app/components/workshop/AgentInspectorDrawer.vue +3 -3
  434. package/app/components/workshop/AgentLanesView.vue +6 -6
  435. package/app/components/workshop/AssetLibrary.vue +2 -2
  436. package/app/components/workshop/ChannelSessionList.vue +5 -5
  437. package/app/components/workshop/Composer.vue +1 -1
  438. package/app/components/workshop/DeviceTwinPanel.vue +2 -2
  439. package/app/components/workshop/TaskBoardView.vue +1 -1
  440. package/app/components/workshop/TaskInspectorDrawer.vue +2 -2
  441. package/app/components/workshop/town/TownView.vue +23 -23
  442. package/app/composables/workshop/apiClient.ts +103 -95
  443. package/app/composables/workshop/useCharacterAssets.ts +1 -1
  444. package/app/composables/workshop/useDaqStream.ts +36 -22
  445. package/app/composables/workshop/useDcwStream.ts +23 -6
  446. package/app/composables/workshop/useDeviceTwins.ts +1 -1
  447. package/app/composables/workshop/useOpsLog.ts +28 -15
  448. package/app/composables/workshop/useSceneLayouts.ts +1 -1
  449. package/app/composables/workshop/useWorkshopWs.ts +11 -2
  450. package/app/pages/daq/[id].vue +1 -1
  451. package/app/pages/daq/index.vue +8 -8
  452. package/app/pages/dcw/[id].vue +13 -13
  453. package/app/pages/dcw/index.vue +7 -7
  454. package/app/pages/logs/index.vue +1 -1
  455. package/app/pages/permissions/index.vue +327 -0
  456. package/app/pages/plugins/index.vue +14 -6
  457. package/app/pages/settings.vue +4 -2
  458. package/app/pages/tokens.vue +3 -3
  459. package/app/pages/workshop/agents.vue +2 -2
  460. package/app/pages/workshop/channel-templates.vue +3 -3
  461. package/app/pages/workshop/index.vue +4 -4
  462. package/app/pages/workshop/teams.vue +3 -3
  463. package/app/plugins/http.ts +18 -2
  464. package/app/plugins/session-restore.client.ts +7 -2
  465. package/app/stores/workshop/user.ts +14 -1
  466. package/app/utils/api-error.ts +75 -0
  467. package/cli/commands/plugin.mjs +2 -2
  468. package/config.yml +1 -1
  469. package/i18n/locales/en.ts +53 -3
  470. package/i18n/locales/zh-CN.ts +53 -3
  471. package/package.json +1 -1
  472. package/scripts/_dbg-acc-1-setup.mjs +57 -0
  473. package/scripts/_dbg-acc-2-diag.mjs +14 -0
  474. package/scripts/_dbg-acc-2-intervals.mjs +81 -0
  475. package/scripts/_dbg-acc-3-daq.mjs +48 -0
  476. package/scripts/_dbg-acc-4-team.mjs +92 -0
  477. package/scripts/_dbg-acc-5-visual.mjs +63 -0
  478. package/scripts/_dbg-acc-5b-ws-town.mjs +18 -0
  479. package/scripts/_dbg-acc-5c-town.mjs +12 -0
  480. package/scripts/_dbg-acc-6-i18n.mjs +19 -0
  481. package/scripts/_dbg-audit-neg-e2e.mjs +64 -0
  482. package/scripts/_dbg-final-features.mjs +155 -0
  483. package/scripts/_dbg-final-fixups.mjs +62 -0
  484. package/scripts/_dbg-final-visual.mjs +29 -0
  485. package/scripts/_dbg-interval-config.mjs +17 -6
  486. package/scripts/_dbg-perms-e2e.mjs +102 -0
  487. package/scripts/_dbg-perms-visual.mjs +36 -0
  488. package/scripts/_dbg-plugins-e2e.mjs +101 -0
  489. package/scripts/_dbg-protocol-matrix.mjs +16 -0
  490. package/scripts/_dbg-repo-setup-verify.mjs +31 -0
  491. package/scripts/_dbg-setup-e2e.mjs +1 -1
  492. package/sdk/api.mjs +117 -101
  493. package/sdk/context.mjs +240 -219
  494. package/sdk/hooks.mjs +105 -103
  495. package/sdk/index.d.mts +142 -135
  496. package/sdk/lifecycle.mjs +26 -25
  497. package/server/api/workshop/agent-tools/bindings/index.post.ts +40 -20
  498. package/server/api/workshop/daq/[id]/bind.post.ts +5 -2
  499. package/server/api/workshop/daq/[id]/frames/content.get.ts +4 -1
  500. package/server/api/workshop/daq/[id]/frames.get.ts +4 -1
  501. package/server/api/workshop/daq/[id]/samples.get.ts +4 -1
  502. package/server/api/workshop/daq/[id].patch.ts +3 -0
  503. package/server/api/workshop/daq/alarms/[id]/ack.post.ts +20 -15
  504. package/server/api/workshop/daq/controller.post.ts +2 -0
  505. package/server/api/workshop/daq/index.get.ts +5 -3
  506. package/server/api/workshop/daq/index.post.ts +2 -2
  507. package/server/api/workshop/dcw/[id]/bind.post.ts +20 -17
  508. package/server/api/workshop/dcw/[id]/test.post.ts +18 -15
  509. package/server/api/workshop/dcw/[id]/write.post.ts +3 -0
  510. package/server/api/workshop/dcw/index.get.ts +22 -9
  511. package/server/api/workshop/dcw/line/query.get.ts +38 -31
  512. package/server/api/workshop/dcw/lines/[id]/start.post.ts +3 -0
  513. package/server/api/workshop/dcw/lines/[id]/stop.post.ts +3 -0
  514. package/server/api/workshop/dcw/lines/index.get.ts +8 -2
  515. package/server/api/workshop/dcw/lines/index.post.ts +2 -2
  516. package/server/api/workshop/dcw/products/index.post.ts +16 -16
  517. package/server/api/workshop/dcw/runs/[id]/data.get.ts +20 -15
  518. package/server/api/workshop/dcw/runs/index.get.ts +13 -11
  519. package/server/api/workshop/permissions/index.get.ts +30 -0
  520. package/server/api/workshop/permissions/index.put.ts +29 -0
  521. package/server/api/workshop/plugins/[name]/disable.post.ts +5 -3
  522. package/server/api/workshop/plugins/[name]/enable.post.ts +5 -3
  523. package/server/api/workshop/ws.ts +18 -6
  524. package/server/data/daqs.json +90 -46
  525. package/server/data/dcw-lines.json +21 -0
  526. package/server/data/dcw-products.json +140 -0
  527. package/server/data/dcw-recipes.json +506 -0
  528. package/server/data/dcw-rollback.json +281 -6
  529. package/server/data/dcw-runs.json +1374 -1257
  530. package/server/data/dcw-writes.json +312 -0
  531. package/server/data/dcws.json +1165 -477
  532. package/server/data/line-runs.json +26 -6
  533. package/server/plugins/backup.ts +119 -116
  534. package/server/repositories/user.repository.ts +86 -6
  535. package/server/services/system-config.ts +5 -0
  536. package/server/services/user.service.ts +5 -3
  537. package/server/services/workshop/daq/bus/index.ts +5 -3
  538. package/server/services/workshop/daq/bus/inproc.adapter.ts +12 -3
  539. package/server/services/workshop/daq/bus/mqtt.adapter.ts +13 -0
  540. package/server/services/workshop/daq/bus/queue-port.ts +2 -0
  541. package/server/services/workshop/daq/daq-controller.ts +18 -1
  542. package/server/services/workshop/daq/storage/sqlite.adapter.ts +10 -5
  543. package/server/services/workshop/db/ops.repo.ts +6 -0
  544. package/server/services/workshop/dcw/dcw-controller.ts +10 -2
  545. package/server/services/workshop/permissions.ts +79 -0
  546. package/server/services/workshop/plugins/host.mjs +40 -2
  547. package/server/services/workshop/scene-events.ts +25 -1
  548. package/server/services/workshop/settings.ts +10 -0
  549. package/shared/config/single-instance.mjs +24 -0
  550. package/shared/daq-protocol.ts +2 -0
  551. package/.output/public/_nuxt/2LwEn9gX.js +0 -2
  552. package/.output/public/_nuxt/3612gD2V.js +0 -32
  553. package/.output/public/_nuxt/8eIQAVlb.js +0 -1
  554. package/.output/public/_nuxt/Ah9qOv1m.js +0 -1
  555. package/.output/public/_nuxt/B4Fia4FB.js +0 -3
  556. package/.output/public/_nuxt/BH0Z05CS.js +0 -1
  557. package/.output/public/_nuxt/BJ-fxrSw.js +0 -1
  558. package/.output/public/_nuxt/BJvGPTpC.js +0 -1
  559. package/.output/public/_nuxt/BVZjSVs2.js +0 -1
  560. package/.output/public/_nuxt/BVzDoF8t.js +0 -1
  561. package/.output/public/_nuxt/BjVLsC3M.js +0 -1
  562. package/.output/public/_nuxt/BnVoQ74r.js +0 -1
  563. package/.output/public/_nuxt/Bnp4vIAf.js +0 -1
  564. package/.output/public/_nuxt/Bt_HDizI.js +0 -5
  565. package/.output/public/_nuxt/Bu-P92Pe.js +0 -18
  566. package/.output/public/_nuxt/ButLXkjo.js +0 -2
  567. package/.output/public/_nuxt/By-LNp3k.js +0 -1
  568. package/.output/public/_nuxt/CGdPdJPP.js +0 -1
  569. package/.output/public/_nuxt/CRGlf1Gb.js +0 -1
  570. package/.output/public/_nuxt/CS8R0_J3.js +0 -1
  571. package/.output/public/_nuxt/CUxV8Bw_.js +0 -1
  572. package/.output/public/_nuxt/Cd15nPnG2.js +0 -1
  573. package/.output/public/_nuxt/CvbHIGQY2.js +0 -1
  574. package/.output/public/_nuxt/DNJSkm3Q.js +0 -1
  575. package/.output/public/_nuxt/DNzaswei.js +0 -1
  576. package/.output/public/_nuxt/DXK1U43I.js +0 -1
  577. package/.output/public/_nuxt/Dc46i75T.js +0 -14
  578. package/.output/public/_nuxt/Dk6pq9JB2.js +0 -1
  579. package/.output/public/_nuxt/Do88WZG2.js +0 -23
  580. package/.output/public/_nuxt/Du-eSpo2.js +0 -1
  581. package/.output/public/_nuxt/GP2wXyuY.js +0 -1
  582. package/.output/public/_nuxt/NIM0Wglj2.js +0 -1
  583. package/.output/public/_nuxt/PQLnLxYe.js +0 -1
  584. package/.output/public/_nuxt/R_Wv_Nd9.js +0 -1
  585. package/.output/public/_nuxt/TownView.Bt33bo1M.css +0 -1
  586. package/.output/public/_nuxt/_id_.BzKMZnLe.css +0 -1
  587. package/.output/public/_nuxt/_id_.CbpDAWRh.css +0 -1
  588. package/.output/public/_nuxt/agents.BlejnOOC.css +0 -1
  589. package/.output/public/_nuxt/builds/meta/e5bb1803-86d9-43b3-85be-dc787dc9a978.json +0 -1
  590. package/.output/public/_nuxt/channel-templates.lkqEYlWY.css +0 -1
  591. package/.output/public/_nuxt/daq.zZ8GR433.css +0 -1
  592. package/.output/public/_nuxt/dcw.C46dGiF_.css +0 -1
  593. package/.output/public/_nuxt/default.V3_hUJq1.css +0 -1
  594. package/.output/public/_nuxt/eHGLpQSg2.js +0 -1
  595. package/.output/public/_nuxt/logs.DaIsHWZE.css +0 -1
  596. package/.output/public/_nuxt/p7wSGMtc.js +0 -1
  597. package/.output/public/_nuxt/plugins.FTm0PcEe.css +0 -1
  598. package/.output/public/_nuxt/settings.DeRNNUcP.css +0 -1
  599. package/.output/public/_nuxt/tRBT-plo.js +0 -1
  600. package/.output/public/_nuxt/teams.B8JNbUZg.css +0 -1
  601. package/.output/public/_nuxt/tokens.CWOTXM-Z.css +0 -1
  602. package/.output/public/_nuxt/ubPfs9mQ.js +0 -1
  603. package/.output/public/_nuxt/workshop.3kAcLB_M.css +0 -1
  604. package/.output/server/chunks/build/OmpTerminalPanel-COphA1br.mjs.map +0 -1
  605. package/.output/server/chunks/build/_id_-C-ewLgfl.mjs.map +0 -1
  606. package/.output/server/chunks/build/_id_-Ct4Jhvl1.mjs.map +0 -1
  607. package/.output/server/chunks/build/agents-DSOptxXA.mjs.map +0 -1
  608. package/.output/server/chunks/build/channel-templates-BK0KuPOd.mjs.map +0 -1
  609. package/.output/server/chunks/build/daq-D9RA_uze.mjs.map +0 -1
  610. package/.output/server/chunks/build/dcw-BTM5YU-B.mjs.map +0 -1
  611. package/.output/server/chunks/build/input-sf_BT6o6.mjs.map +0 -1
  612. package/.output/server/chunks/build/pages-DR2bzczM.mjs.map +0 -1
  613. package/.output/server/chunks/build/plugins-DnOBIWGg.mjs.map +0 -1
  614. package/.output/server/chunks/build/settings-DA8IkGLo.mjs.map +0 -1
  615. package/.output/server/chunks/build/teams-BhSKBBBM.mjs.map +0 -1
  616. package/.output/server/chunks/build/tokens-D_eyxmcv.mjs.map +0 -1
  617. package/.output/server/chunks/build/useDaqStream-hwkhJHFU.mjs.map +0 -1
  618. package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs.map +0 -1
  619. package/.output/server/chunks/build/useDeviceTwins-C6EBg9oN.mjs.map +0 -1
  620. package/.output/server/chunks/build/useOpsLog-DdCqKVVG.mjs.map +0 -1
  621. package/.output/server/chunks/build/useWorkshopWs-B3j5wIAK.mjs.map +0 -1
  622. package/.output/server/chunks/build/user-Dk-ytEUV.mjs +0 -140
  623. package/.output/server/chunks/build/user-Dk-ytEUV.mjs.map +0 -1
  624. package/.output/server/chunks/build/workshop-D5CQj2A8.mjs.map +0 -1
  625. package/.output/server/chunks/build/workspaces-IfORCDJE.mjs.map +0 -1
  626. /package/.output/public/_nuxt/{CNs_Ozdc2.js → CNs_Ozdc.js} +0 -0
  627. /package/.output/public/_nuxt/{Cno6kYiO2.js → Cno6kYiO.js} +0 -0
@@ -1,15 +1,15 @@
1
- import { _ as _plugin_vue_export_helper_default, u as useI18n, ar as useHttp } from '../virtual/entry.mjs';
2
- import { u as useUserStore } from './user-Dk-ytEUV.mjs';
3
- import { u as useWorkspacesStore } from './workspaces-IfORCDJE.mjs';
4
- import { u as useEntitiesStore, a as useWorkshopWs } from './useWorkshopWs-B3j5wIAK.mjs';
1
+ import { _ as _plugin_vue_export_helper_default, u as useI18n, at as useHttp, b as useUserStore } from '../virtual/entry.mjs';
2
+ import { u as useWorkspacesStore } from './workspaces-BuydxM-3.mjs';
3
+ import { a as apiErrorMessage } from './api-error-dul30BYQ.mjs';
4
+ import { u as useEntitiesStore, a as useWorkshopWs } from './useWorkshopWs-CprkZEdq.mjs';
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
- import { u as useDcwStream } from './useDcwStream-Bdew_yrr.mjs';
8
- import { u as useDaqStream } from './useDaqStream-hwkhJHFU.mjs';
9
- import { u as useDeviceTwins } from './useDeviceTwins-C6EBg9oN.mjs';
7
+ import { u as useDcwStream } from './useDcwStream-DWVoU96J.mjs';
8
+ import { u as useDaqStream } from './useDaqStream-BkmyQT06.mjs';
9
+ import { u as useDeviceTwins } from './useDeviceTwins-34WGk9aN.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';
12
- import { aV as DAQ_TEMPLATES } from '../_/nitro.mjs';
12
+ import { a$ as DAQ_TEMPLATES } from '../_/nitro.mjs';
13
13
  import * as THREE from 'three';
14
14
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
15
15
  import { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';
@@ -269,7 +269,7 @@ function createStore$1() {
269
269
  store.error = "";
270
270
  } catch (err) {
271
271
  store.loaded = false;
272
- store.error = err instanceof Error ? err.message : String(err);
272
+ store.error = apiErrorMessage(err);
273
273
  } finally {
274
274
  store.loading = false;
275
275
  }
@@ -599,8 +599,8 @@ var AssetLibrary_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
599
599
  const deletingId = ref("");
600
600
  const deleteMsg = ref("");
601
601
  return (_ctx, _push, _parent, _attrs) => {
602
- _push(`<aside${ssrRenderAttrs(mergeProps({ class: "asset-lib" }, _attrs))} data-v-c83e9503><div class="lib-head" data-v-c83e9503><span class="head-title" data-v-c83e9503>${ssrInterpolate(_ctx.$t("assetLibrary.k7la4x5001"))}</span><span class="head-hint" data-v-c83e9503>${ssrInterpolate(_ctx.$t("assetLibrary.kulif5b002"))}</span></div><div class="${ssrRenderClass([{ drop: unref(dropActive) }, "upload-box"])}" data-v-c83e9503><label class="upload-row" data-v-c83e9503><input type="file" accept=".glb,.gltf,.obj,.fbx" class="file-input" data-v-c83e9503><span class="upload-name" data-v-c83e9503><span class="i-tabler-plus upload-ico" data-v-c83e9503></span> ${ssrInterpolate(unref(uploadFile)?.name || _ctx.$t("assetLibrary.k1iiort6010"))}</span></label>`);
603
- if (unref(dropActive)) _push(`<span class="drop-hint" data-v-c83e9503><span class="i-tabler-download" data-v-c83e9503></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k5hg6jq003"))}</span>`);
602
+ _push(`<aside${ssrRenderAttrs(mergeProps({ class: "asset-lib" }, _attrs))} data-v-effff4e2><div class="lib-head" data-v-effff4e2><span class="head-title" data-v-effff4e2>${ssrInterpolate(_ctx.$t("assetLibrary.k7la4x5001"))}</span><span class="head-hint" data-v-effff4e2>${ssrInterpolate(_ctx.$t("assetLibrary.kulif5b002"))}</span></div><div class="${ssrRenderClass([{ drop: unref(dropActive) }, "upload-box"])}" data-v-effff4e2><label class="upload-row" data-v-effff4e2><input type="file" accept=".glb,.gltf,.obj,.fbx" class="file-input" data-v-effff4e2><span class="upload-name" data-v-effff4e2><span class="i-tabler-plus upload-ico" data-v-effff4e2></span> ${ssrInterpolate(unref(uploadFile)?.name || _ctx.$t("assetLibrary.k1iiort6010"))}</span></label>`);
603
+ if (unref(dropActive)) _push(`<span class="drop-hint" data-v-effff4e2><span class="i-tabler-download" data-v-effff4e2></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k5hg6jq003"))}</span>`);
604
604
  else _push(`<!---->`);
605
605
  if (unref(uploadFile)) {
606
606
  _push(`<!--[-->`);
@@ -608,31 +608,31 @@ var AssetLibrary_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
608
608
  "local-file": unref(uploadFile),
609
609
  height: 92
610
610
  }, null, _parent));
611
- else _push(`<span class="upload-file-tag" data-v-c83e9503>${ssrInterpolate(unref(uploadFile).name)} (${ssrInterpolate(_ctx.$t("assetLibrary.k1xz5wvk009"))}</span>`);
612
- _push(`<div class="upload-actions" data-v-c83e9503><button class="upload-btn go"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-c83e9503>${ssrInterpolate(unref(uploading) ? _ctx.$t("assetLibrary.k1ar7n8i005") : _ctx.$t("assetLibrary.k1hhga4h014"))}</button><button class="upload-btn"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-c83e9503>${ssrInterpolate(_ctx.$t("assetLibrary.k3xdnn004"))}</button></div><!--]-->`);
613
- } else if (unref(uploading)) _push(`<span class="mini-err" data-v-c83e9503>${ssrInterpolate(_ctx.$t("assetLibrary.k1ar7n8i005"))}</span>`);
611
+ else _push(`<span class="upload-file-tag" data-v-effff4e2>${ssrInterpolate(unref(uploadFile).name)} (${ssrInterpolate(_ctx.$t("assetLibrary.k1xz5wvk009"))}</span>`);
612
+ _push(`<div class="upload-actions" data-v-effff4e2><button class="upload-btn go"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-effff4e2>${ssrInterpolate(unref(uploading) ? _ctx.$t("assetLibrary.k1ar7n8i005") : _ctx.$t("assetLibrary.k1hhga4h014"))}</button><button class="upload-btn"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-effff4e2>${ssrInterpolate(_ctx.$t("assetLibrary.k3xdnn004"))}</button></div><!--]-->`);
613
+ } else if (unref(uploading)) _push(`<span class="mini-err" data-v-effff4e2>${ssrInterpolate(_ctx.$t("assetLibrary.k1ar7n8i005"))}</span>`);
614
614
  else _push(`<!---->`);
615
- if (unref(uploadError) && !unref(uploadFile)) _push(`<span class="mini-err" data-v-c83e9503>${ssrInterpolate(unref(uploadError))}</span>`);
615
+ if (unref(uploadError) && !unref(uploadFile)) _push(`<span class="mini-err" data-v-effff4e2>${ssrInterpolate(unref(uploadError))}</span>`);
616
616
  else _push(`<!---->`);
617
- _push(`</div><div class="lib-grid" data-v-c83e9503><!--[-->`);
617
+ _push(`</div><div class="lib-grid" data-v-effff4e2><!--[-->`);
618
618
  ssrRenderList(unref(deviceModels), (m) => {
619
- _push(`<div class="model-card"${ssrRenderAttr("data-model-id", m.id)} draggable="true"${ssrRenderAttr("title", m.hint || _ctx.$t("assetLibrary.katn7lo015", { p0: m.name }))} data-v-c83e9503>`);
619
+ _push(`<div class="model-card"${ssrRenderAttr("data-model-id", m.id)} draggable="true"${ssrRenderAttr("title", m.hint || _ctx.$t("assetLibrary.katn7lo015", { p0: m.name }))} data-v-effff4e2>`);
620
620
  if (isPreviewable(m.file)) _push(ssrRenderComponent(ModelPreview3D_default, {
621
621
  file: m.file,
622
622
  height: 76
623
623
  }, null, _parent));
624
- else _push(`<span class="model-img glb dev" data-v-c83e9503><span class="i-tabler-cpu glb-cube" aria-hidden="true" data-v-c83e9503></span></span>`);
625
- _push(`<span class="model-name" data-v-c83e9503>${ssrInterpolate(m.name)}</span><span class="model-badge" data-v-c83e9503>${ssrInterpolate(_ctx.$t("assetLibrary.k1n32zs0006"))}</span><div class="card-actions" data-v-c83e9503>`);
626
- if (m.file.includes("/assets/game/devices/")) _push(`<button class="card-btn danger"${ssrIncludeBooleanAttr(unref(deletingId) === m.id) ? " disabled" : ""} data-v-c83e9503>${ssrInterpolate(unref(deletingId) === m.id ? "…" : _ctx.$t("assetLibrary.k498l011"))}</button>`);
624
+ else _push(`<span class="model-img glb dev" data-v-effff4e2><span class="i-tabler-cpu glb-cube" aria-hidden="true" data-v-effff4e2></span></span>`);
625
+ _push(`<span class="model-name" data-v-effff4e2>${ssrInterpolate(m.name)}</span><span class="model-badge" data-v-effff4e2>${ssrInterpolate(_ctx.$t("assetLibrary.k1n32zs0006"))}</span><div class="card-actions" data-v-effff4e2>`);
626
+ if (m.file.includes("/assets/game/devices/")) _push(`<button class="card-btn danger"${ssrIncludeBooleanAttr(unref(deletingId) === m.id) ? " disabled" : ""} data-v-effff4e2>${ssrInterpolate(unref(deletingId) === m.id ? "…" : _ctx.$t("assetLibrary.k498l011"))}</button>`);
627
627
  else _push(`<!---->`);
628
628
  _push(`</div></div>`);
629
629
  });
630
630
  _push(`<!--]-->`);
631
- if (!unref(assets).loaded) _push(`<div class="lib-note" data-v-c83e9503><span class="loading-dot" data-v-c83e9503></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k1kq2tmi007"))}</div>`);
632
- else if (unref(deviceModels).length === 0) _push(`<div class="lib-note" data-v-c83e9503>${ssrInterpolate(_ctx.$t("assetLibrary.k15527e1008"))}</div>`);
631
+ if (!unref(assets).loaded) _push(`<div class="lib-note" data-v-effff4e2><span class="loading-dot" data-v-effff4e2></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k1kq2tmi007"))}</div>`);
632
+ else if (unref(deviceModels).length === 0) _push(`<div class="lib-note" data-v-effff4e2>${ssrInterpolate(_ctx.$t("assetLibrary.k15527e1008"))}</div>`);
633
633
  else _push(`<!---->`);
634
634
  _push(`</div>`);
635
- if (unref(deleteMsg)) _push(`<span class="mini-msg" data-v-c83e9503>${ssrInterpolate(unref(deleteMsg))}</span>`);
635
+ if (unref(deleteMsg)) _push(`<span class="mini-msg" data-v-effff4e2>${ssrInterpolate(unref(deleteMsg))}</span>`);
636
636
  else _push(`<!---->`);
637
637
  _push(`</aside>`);
638
638
  };
@@ -646,7 +646,7 @@ AssetLibrary_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) =>
646
646
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/AssetLibrary.vue");
647
647
  return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
648
648
  };
649
- var AssetLibrary_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AssetLibrary_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-c83e9503"]]), { __name: "WorkshopAssetLibrary" });
649
+ var AssetLibrary_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AssetLibrary_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-effff4e2"]]), { __name: "WorkshopAssetLibrary" });
650
650
  //#endregion
651
651
  //#region app/components/workshop/DeviceTwinPanel.vue?vue&type=script&setup=true&lang.ts
652
652
  var DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -698,44 +698,44 @@ var DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
698
698
  const dcwErrs = reactive({});
699
699
  const dcwBusy = ref("");
700
700
  return (_ctx, _push, _parent, _attrs) => {
701
- _push(`<aside${ssrRenderAttrs(mergeProps({ class: "twin-panel" }, _attrs))} data-v-15ec18ea><div class="twin-head" data-v-15ec18ea><span class="twin-kicker" data-v-15ec18ea>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k7k6evr002"))}</span><span class="twin-count" data-v-15ec18ea>${ssrInterpolate(unref(twins).twins.length)}</span></div>`);
702
- if (unref(twins).error) _push(`<div class="twin-error" data-v-15ec18ea>${ssrInterpolate(unref(twins).error)}</div>`);
701
+ _push(`<aside${ssrRenderAttrs(mergeProps({ class: "twin-panel" }, _attrs))} data-v-2eb2660e><div class="twin-head" data-v-2eb2660e><span class="twin-kicker" data-v-2eb2660e>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k7k6evr002"))}</span><span class="twin-count" data-v-2eb2660e>${ssrInterpolate(unref(twins).twins.length)}</span></div>`);
702
+ if (unref(twins).error) _push(`<div class="twin-error" data-v-2eb2660e>${ssrInterpolate(unref(twins).error)}</div>`);
703
703
  else _push(`<!---->`);
704
- if (!unref(twins).loaded) _push(`<div class="twin-empty" data-v-15ec18ea>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kkw7sn5003"))}</div>`);
705
- else if (unref(twins).twins.length === 0) _push(`<div class="twin-empty" data-v-15ec18ea><div class="twin-empty-frame" data-v-15ec18ea><div class="twin-empty-title" data-v-15ec18ea>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k13y2qmg004"))}</div><div class="twin-empty-sub" data-v-15ec18ea>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kotf23l005"))}</div></div></div>`);
704
+ if (!unref(twins).loaded) _push(`<div class="twin-empty" data-v-2eb2660e>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kkw7sn5003"))}</div>`);
705
+ else if (unref(twins).twins.length === 0) _push(`<div class="twin-empty" data-v-2eb2660e><div class="twin-empty-frame" data-v-2eb2660e><div class="twin-empty-title" data-v-2eb2660e>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k13y2qmg004"))}</div><div class="twin-empty-sub" data-v-2eb2660e>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kotf23l005"))}</div></div></div>`);
706
706
  else {
707
- _push(`<div class="twin-list" data-v-15ec18ea><!--[-->`);
707
+ _push(`<div class="twin-list" data-v-2eb2660e><!--[-->`);
708
708
  ssrRenderList(unref(twins).twins, (t) => {
709
- _push(`<button class="${ssrRenderClass([{ daq: isDaq(t) }, "twin-card"])}" type="button" data-v-15ec18ea><div class="twin-row" data-v-15ec18ea><span class="twin-model-tag" data-v-15ec18ea>${ssrInterpolate(modelTag(t.modelRef || t.name))}</span><div class="twin-idbar" data-v-15ec18ea><span class="twin-name" data-v-15ec18ea>${ssrInterpolate(t.name)}</span><span class="twin-code" data-v-15ec18ea>${ssrInterpolate(isDaq(t) ? "DAQ" : devNo(t.id))}</span></div><button class="${ssrRenderClass([{ armed: unref(armedId) === t.id }, "twin-del"])}"${ssrIncludeBooleanAttr(unref(busyId) === t.id) ? " disabled" : ""}${ssrRenderAttr("title", unref(armedId) === t.id ? "再次点击确认删除该设备实例" : "删除该设备实例")} data-v-15ec18ea>${ssrInterpolate(unref(armedId) === t.id ? _ctx.$t("deviceTwinPanel.k44653007") : "✕")}</button><span class="${ssrRenderClass([`s-${t.state}`, "twin-state"])}" data-v-15ec18ea><i class="twin-state-dot" style="${ssrRenderStyle({ background: stateColor[t.state] || "var(--hud-dim)" })}" data-v-15ec18ea></i> ${ssrInterpolate(stateLabel[t.state] || t.state)}</span></div>`);
709
+ _push(`<button class="${ssrRenderClass([{ daq: isDaq(t) }, "twin-card"])}" type="button" data-v-2eb2660e><div class="twin-row" data-v-2eb2660e><span class="twin-model-tag" data-v-2eb2660e>${ssrInterpolate(modelTag(t.modelRef || t.name))}</span><div class="twin-idbar" data-v-2eb2660e><span class="twin-name" data-v-2eb2660e>${ssrInterpolate(t.name)}</span><span class="twin-code" data-v-2eb2660e>${ssrInterpolate(isDaq(t) ? "DAQ" : devNo(t.id))}</span></div><button class="${ssrRenderClass([{ armed: unref(armedId) === t.id }, "twin-del"])}"${ssrIncludeBooleanAttr(unref(busyId) === t.id) ? " disabled" : ""}${ssrRenderAttr("title", unref(armedId) === t.id ? "再次点击确认删除该设备实例" : "删除该设备实例")} data-v-2eb2660e>${ssrInterpolate(unref(armedId) === t.id ? _ctx.$t("deviceTwinPanel.k44653007") : "✕")}</button><span class="${ssrRenderClass([`s-${t.state}`, "twin-state"])}" data-v-2eb2660e><i class="twin-state-dot" style="${ssrRenderStyle({ background: stateColor[t.state] || "var(--hud-dim)" })}" data-v-2eb2660e></i> ${ssrInterpolate(stateLabel[t.state] || t.state)}</span></div>`);
710
710
  if (Object.keys(t.telemetry).length) {
711
- _push(`<div class="twin-tele" data-v-15ec18ea><!--[-->`);
711
+ _push(`<div class="twin-tele" data-v-2eb2660e><!--[-->`);
712
712
  ssrRenderList(t.telemetry, (v, k) => {
713
- _push(`<span class="tele-item" data-v-15ec18ea><em data-v-15ec18ea>${ssrInterpolate(k)}</em><b data-v-15ec18ea>${ssrInterpolate(fmt(v))}</b></span>`);
713
+ _push(`<span class="tele-item" data-v-2eb2660e><em data-v-2eb2660e>${ssrInterpolate(k)}</em><b data-v-2eb2660e>${ssrInterpolate(fmt(v))}</b></span>`);
714
714
  });
715
715
  _push(`<!--]--></div>`);
716
716
  } else _push(`<!---->`);
717
717
  if (__props.daqLive?.[t.id]?.length) {
718
- _push(`<div class="twin-daq" data-v-15ec18ea><!--[-->`);
718
+ _push(`<div class="twin-daq" data-v-2eb2660e><!--[-->`);
719
719
  ssrRenderList(__props.daqLive[t.id], (d, i) => {
720
- _push(`<span class="${ssrRenderClass([{ alarm: d.alarm }, "daq-item"])}" data-v-15ec18ea><em data-v-15ec18ea>${ssrInterpolate(d.ch)}</em><b data-v-15ec18ea>${ssrInterpolate(d.value)}<i data-v-15ec18ea>${ssrInterpolate(d.unit)}</i></b></span>`);
720
+ _push(`<span class="${ssrRenderClass([{ alarm: d.alarm }, "daq-item"])}" data-v-2eb2660e><em data-v-2eb2660e>${ssrInterpolate(d.ch)}</em><b data-v-2eb2660e>${ssrInterpolate(d.value)}<i data-v-2eb2660e>${ssrInterpolate(d.unit)}</i></b></span>`);
721
721
  });
722
722
  _push(`<!--]--></div>`);
723
723
  } else _push(`<!---->`);
724
724
  if (__props.dcwLive?.[t.id]?.length) {
725
- _push(`<div class="twin-dcw" data-v-15ec18ea><!--[-->`);
725
+ _push(`<div class="twin-dcw" data-v-2eb2660e><!--[-->`);
726
726
  ssrRenderList(__props.dcwLive[t.id], (r) => {
727
- _push(`<div class="dcw-item" data-v-15ec18ea><div class="dcw-head" data-v-15ec18ea><em data-v-15ec18ea>${ssrInterpolate(r.ch)}`);
728
- if (r.src === "recipe") _push(`<i class="dcw-src" data-v-15ec18ea>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k48grv006"))}</i>`);
727
+ _push(`<div class="dcw-item" data-v-2eb2660e><div class="dcw-head" data-v-2eb2660e><em data-v-2eb2660e>${ssrInterpolate(r.ch)}`);
728
+ if (r.src === "recipe") _push(`<i class="dcw-src" data-v-2eb2660e>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k48grv006"))}</i>`);
729
729
  else _push(`<!---->`);
730
- _push(`</em><b class="dcw-set" data-v-15ec18ea>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}<i data-v-15ec18ea>${ssrInterpolate(r.unit)}</i></b></div>`);
730
+ _push(`</em><b class="dcw-set" data-v-2eb2660e>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}<i data-v-2eb2660e>${ssrInterpolate(r.unit)}</i></b></div>`);
731
731
  if (r.readValue != null || r.lastReadAt) {
732
- _push(`<div class="dcw-act"${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k9r7d4e030"))} data-v-15ec18ea><em data-v-15ec18ea>ACT</em><b data-v-15ec18ea>${ssrInterpolate(r.readValue != null ? r.readValue.toFixed(r.decimals) : "--")}<i data-v-15ec18ea>${ssrInterpolate(r.unit)}</i></b>`);
733
- if (r.lastReadAt) _push(`<i class="dcw-act-at" data-v-15ec18ea>${ssrInterpolate(r.lastReadAt.slice(11, 19))}</i>`);
732
+ _push(`<div class="dcw-act"${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k9r7d4e030"))} data-v-2eb2660e><em data-v-2eb2660e>ACT</em><b data-v-2eb2660e>${ssrInterpolate(r.readValue != null ? r.readValue.toFixed(r.decimals) : "--")}<i data-v-2eb2660e>${ssrInterpolate(r.unit)}</i></b>`);
733
+ if (r.lastReadAt) _push(`<i class="dcw-act-at" data-v-2eb2660e>${ssrInterpolate(r.lastReadAt.slice(11, 19))}</i>`);
734
734
  else _push(`<!---->`);
735
735
  _push(`</div>`);
736
736
  } else _push(`<!---->`);
737
- _push(`<div class="dcw-win" data-v-15ec18ea><span${ssrRenderAttr("title", r.src === "recipe" ? "当前运行配方工艺窗口" : "节点全局量程")} data-v-15ec18ea>${ssrInterpolate(dcwWinText(r))}</span></div><div class="dcw-ctrl" data-v-15ec18ea><input${ssrRenderAttr("value", unref(dcwDrafts)[r.id])} type="number" class="ctrl-input"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("min", Number.isFinite(r.lo) ? r.lo : void 0)}${ssrRenderAttr("max", Number.isFinite(r.hi) ? r.hi : void 0)}${ssrRenderAttr("placeholder", `${Number.isFinite(r.lo) ? r.lo : ""} ~ ${Number.isFinite(r.hi) ? r.hi : ""}`)} data-v-15ec18ea><button class="ctrl-btn dcw-send"${ssrIncludeBooleanAttr(unref(dcwDrafts)[r.id] == null || unref(dcwDrafts)[r.id] === "" || unref(dcwBusy) === r.id) ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k1j04u8001"))} data-v-15ec18ea>${ssrInterpolate(unref(dcwBusy) === r.id ? "···" : "SET")}</button></div>`);
738
- if (unref(dcwErrs)[r.id]) _push(`<small class="dcw-err" data-v-15ec18ea>${ssrInterpolate(unref(dcwErrs)[r.id])}</small>`);
737
+ _push(`<div class="dcw-win" data-v-2eb2660e><span${ssrRenderAttr("title", r.src === "recipe" ? "当前运行配方工艺窗口" : "节点全局量程")} data-v-2eb2660e>${ssrInterpolate(dcwWinText(r))}</span></div><div class="dcw-ctrl" data-v-2eb2660e><input${ssrRenderAttr("value", unref(dcwDrafts)[r.id])} type="number" class="ctrl-input"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("min", Number.isFinite(r.lo) ? r.lo : void 0)}${ssrRenderAttr("max", Number.isFinite(r.hi) ? r.hi : void 0)}${ssrRenderAttr("placeholder", `${Number.isFinite(r.lo) ? r.lo : ""} ~ ${Number.isFinite(r.hi) ? r.hi : ""}`)} data-v-2eb2660e><button class="ctrl-btn dcw-send"${ssrIncludeBooleanAttr(unref(dcwDrafts)[r.id] == null || unref(dcwDrafts)[r.id] === "" || unref(dcwBusy) === r.id) ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k1j04u8001"))} data-v-2eb2660e>${ssrInterpolate(unref(dcwBusy) === r.id ? "···" : "SET")}</button></div>`);
738
+ if (unref(dcwErrs)[r.id]) _push(`<small class="dcw-err" data-v-2eb2660e>${ssrInterpolate(unref(dcwErrs)[r.id])}</small>`);
739
739
  else _push(`<!---->`);
740
740
  _push(`</div>`);
741
741
  });
@@ -745,7 +745,7 @@ var DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
745
745
  });
746
746
  _push(`<!--]--></div>`);
747
747
  }
748
- if (unref(ctrlMsg)) _push(`<span class="twin-err" data-v-15ec18ea>${ssrInterpolate(unref(ctrlMsg))}</span>`);
748
+ if (unref(ctrlMsg)) _push(`<span class="twin-err" data-v-2eb2660e>${ssrInterpolate(unref(ctrlMsg))}</span>`);
749
749
  else _push(`<!---->`);
750
750
  _push(`</aside>`);
751
751
  };
@@ -759,7 +759,7 @@ DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx)
759
759
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/DeviceTwinPanel.vue");
760
760
  return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
761
761
  };
762
- var DeviceTwinPanel_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-15ec18ea"]]), { __name: "WorkshopDeviceTwinPanel" });
762
+ var DeviceTwinPanel_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-2eb2660e"]]), { __name: "WorkshopDeviceTwinPanel" });
763
763
  //#endregion
764
764
  //#region app/composables/workshop/useSceneLayouts.ts
765
765
  /**
@@ -855,7 +855,7 @@ function createStore() {
855
855
  store.rev++;
856
856
  return;
857
857
  } catch (err) {
858
- lastErr = err instanceof Error ? err.message : String(err);
858
+ lastErr = apiErrorMessage(err);
859
859
  if (attempt < 2) await sleep(400 * (attempt + 1));
860
860
  }
861
861
  store.loaded = false;
@@ -2295,82 +2295,82 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2295
2295
  return (_ctx, _push, _parent, _attrs) => {
2296
2296
  const _component_WorkshopAssetLibrary = AssetLibrary_default;
2297
2297
  const _component_WorkshopDeviceTwinPanel = DeviceTwinPanel_default;
2298
- _push(`<div${ssrRenderAttrs(mergeProps({ class: "town-view" }, _attrs))} data-v-ee250387><header class="topnav" data-v-ee250387><div class="brand" data-v-ee250387><svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-ee250387><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-ee250387></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-ee250387></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-ee250387></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-ee250387></circle></svg><div data-v-ee250387><div class="brand-name" data-v-ee250387> DIGITAL <em data-v-ee250387>TWIN</em></div><div class="brand-sub" data-v-ee250387> AGENTWORKSHOP · ${ssrInterpolate(_ctx.$t("townView.klyi8yg127"))}</div></div></div><nav class="nav-tabs"${ssrRenderAttr("aria-label", _ctx.$t("townView.k1c9jyta001"))} data-v-ee250387><div class="seg" data-v-ee250387><button class="${ssrRenderClass({ on: unref(mode) === "browse" })}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k48dwh027"))}</button><button class="${ssrRenderClass({ on: unref(mode) === "edit" })}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k45eb0028"))}</button></div><button class="nav-action"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "把全部设备的位置/朝向/缩放写入数据库" : "运行模式只读")} data-v-ee250387>${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-ee250387>${ssrInterpolate(unref(saveStateLabel))}</span>`);
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>`);
2300
2300
  else _push(`<!---->`);
2301
- _push(`</nav><div class="nav-right" data-v-ee250387><span class="${ssrRenderClass([{ "nav-bell-warn": unref(activeAlarmCount) > 0 }, "nav-chip mono"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1fsi3ir002"))} data-v-ee250387>◉ ${ssrInterpolate(unref(activeAlarmCount))}</span><span class="nav-chip mono" data-v-ee250387>${ssrInterpolate(unref(fps))} FPS</span><div class="avatar-chip"${ssrRenderAttr("title", _ctx.$t("townView.k1demf38003"))} data-v-ee250387><div class="avatar-fallback" data-v-ee250387>${ssrInterpolate((unref(userStore).user?.name ?? "OP").slice(0, 2).toUpperCase())}</div><span data-v-ee250387>${ssrInterpolate(unref(userStore).user?.name || _ctx.$t("townView.k1pub99m139"))}</span></div></div></header><div class="app" data-v-ee250387><aside class="rail rail-left" data-v-ee250387><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</h3><span class="panel-tag" data-v-ee250387>${ssrInterpolate(unref(deviceModels).length)}</span></div>`);
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
2302
  _push(ssrRenderComponent(_component_WorkshopAssetLibrary, { class: "lib-embed" }, null, _parent));
2303
- _push(`</section><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2gwyas031"))}</h3><span class="panel-tag" data-v-ee250387>${ssrInterpolate(unref(daqTwins).length)}</span></div><div class="daq-ctrl" data-v-ee250387><button class="${ssrRenderClass([{ on: unref(daq).controller.running }, "daq-ctl-btn"])}"${ssrRenderAttr("title", unref(daq).controller.running ? "暂停全部采集:停止所有启用节点的采样(节点级启停独立)" : "恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)")} data-v-ee250387>${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-ee250387>${ssrInterpolate(_ctx.$t("townView.k3xg3w032"))} <input type="number" min="200" max="60000" step="100"${ssrRenderAttr("value", unref(daq).controller.defaultIntervalMs)} data-v-ee250387>ms </label></div><div class="daq-list" data-v-ee250387><!--[-->`);
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
2304
  ssrRenderList(unref(daqTemplates), (tpl) => {
2305
- _push(`<div class="daq-group" data-v-ee250387><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`daq:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
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
2306
  p0: tpl.name,
2307
2307
  p1: tpl.ch,
2308
2308
  p2: tpl.min,
2309
2309
  p3: tpl.max,
2310
2310
  p4: tpl.unit
2311
- }))} data-v-ee250387><span class="daq-caret" data-v-ee250387>▶</span><span class="daq-ico" data-v-ee250387><svg class="daq-svg" viewBox="0 0 24 24" data-v-ee250387>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-ee250387><span class="daq-name" data-v-ee250387>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-ee250387>${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-ee250387> + </button>`);
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>`);
2313
2313
  else _push(`<!---->`);
2314
- _push(`<span class="daq-count" data-v-ee250387>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2314
+ _push(`<span class="daq-count" data-v-33218c74>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2315
2315
  if (unref(treeOpen)[`daq:${tpl.id}`]) {
2316
- _push(`<div class="daq-children" data-v-ee250387><!--[-->`);
2316
+ _push(`<div class="daq-children" data-v-33218c74><!--[-->`);
2317
2317
  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-ee250387><span class="${ssrRenderClass([daqLeafState(n), "node-dot"])}" data-v-ee250387></span><div class="daq-meta" data-v-ee250387><span class="daq-name" data-v-ee250387>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-ee250387><span class="node-val mono" data-v-ee250387>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-ee250387>${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-ee250387>✓</span>`);
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>`);
2320
2320
  else _push(`<!---->`);
2321
2321
  _push(`</div>`);
2322
2322
  });
2323
2323
  _push(`<!--]-->`);
2324
- if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2324
+ if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2325
2325
  else _push(`<!---->`);
2326
2326
  _push(`</div>`);
2327
2327
  } else _push(`<!---->`);
2328
2328
  _push(`</div>`);
2329
2329
  });
2330
- _push(`<!--]--></div></section><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.km7ayhi033"))}</h3><span class="panel-tag" data-v-ee250387>${ssrInterpolate(unref(dcw).nodes.length)}</span></div><div class="daq-list" data-v-ee250387><!--[-->`);
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
2331
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2332
- _push(`<div class="daq-group" data-v-ee250387><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`dcw:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
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
2333
  p0: tpl.name,
2334
2334
  p1: tpl.ch,
2335
2335
  p2: tpl.min,
2336
2336
  p3: tpl.max,
2337
2337
  p4: tpl.unit
2338
- }))} data-v-ee250387><span class="daq-caret" data-v-ee250387>▶</span><span class="daq-ico" data-v-ee250387><svg class="daq-svg" viewBox="0 0 24 24" data-v-ee250387>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-ee250387><span class="daq-name" data-v-ee250387>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-ee250387>${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-ee250387> + </button>`);
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>`);
2340
2340
  else _push(`<!---->`);
2341
- _push(`<span class="daq-count" data-v-ee250387>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2341
+ _push(`<span class="daq-count" data-v-33218c74>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2342
2342
  if (unref(treeOpen)[`dcw:${tpl.id}`]) {
2343
- _push(`<div class="daq-children" data-v-ee250387><!--[-->`);
2343
+ _push(`<div class="daq-children" data-v-33218c74><!--[-->`);
2344
2344
  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-ee250387><span class="${ssrRenderClass([dcwLeafState(n), "node-dot"])}" data-v-ee250387></span><div class="daq-meta" data-v-ee250387><span class="daq-name" data-v-ee250387>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-ee250387><span class="node-val mono" data-v-ee250387>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-ee250387>${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-ee250387>✓</span>`);
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>`);
2347
2347
  else _push(`<!---->`);
2348
2348
  _push(`</div>`);
2349
2349
  });
2350
2350
  _push(`<!--]-->`);
2351
- if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2351
+ if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2352
2352
  else _push(`<!---->`);
2353
2353
  _push(`</div>`);
2354
2354
  } else _push(`<!---->`);
2355
2355
  _push(`</div>`);
2356
2356
  });
2357
- _push(`<!--]--></div></section><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1c9n911034"))}</h3><span class="panel-tag" data-v-ee250387>${ssrInterpolate(unref(dockChannels).length)}</span></div><div class="scene-list" data-v-ee250387><!--[-->`);
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
2358
  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-ee250387><span class="scene-ico" style="${ssrRenderStyle({ "--ch": ch.color })}" data-v-ee250387></span><div class="scene-meta-wrap" data-v-ee250387><span class="scene-name" data-v-ee250387>${ssrInterpolate(ch.name)}</span><span class="scene-meta" data-v-ee250387>${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-ee250387>✓</span>`);
2361
- else _push(`<span class="scene-add" data-v-ee250387>+</span>`);
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>`);
2362
2362
  _push(`</div>`);
2363
2363
  });
2364
2364
  _push(`<!--]-->`);
2365
- if (unref(dockHint)) _push(`<div class="scene-hint" data-v-ee250387>${ssrInterpolate(unref(dockHint))}</div>`);
2365
+ if (unref(dockHint)) _push(`<div class="scene-hint" data-v-33218c74>${ssrInterpolate(unref(dockHint))}</div>`);
2366
2366
  else _push(`<!---->`);
2367
- _push(`</div></section></aside><main class="stage-col" data-v-ee250387><div class="stage" data-v-ee250387><div id="town-host" class="town-host" data-v-ee250387></div><div class="stage-vignette" data-v-ee250387></div><div class="stage-top" data-v-ee250387><div class="vp-title" data-v-ee250387><h2 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1b0z4vr035"))}</h2><span class="vp-id" data-v-ee250387>CH · ${ssrInterpolate(unref(activeChannelName) || _ctx.$t("townView.k3lkuz3142"))}</span></div><div class="vp-tools" data-v-ee250387><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k18d6wnb005"))} data-v-ee250387><svg class="vp-svg" viewBox="0 0 24 24" data-v-ee250387><circle cx="12" cy="12" r="7" data-v-ee250387></circle><path d="M12 2v4M12 18v4M2 12h4M18 12h4" data-v-ee250387></path></svg></button><button class="${ssrRenderClass([{ on: unref(orbitOn) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1io51dn006"))} data-v-ee250387><svg class="vp-svg" viewBox="0 0 24 24" data-v-ee250387><circle cx="12" cy="12" r="3.2" data-v-ee250387></circle><path d="M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5" data-v-ee250387></path></svg></button><button class="${ssrRenderClass([{ on: unref(showCallouts) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1sgjlq8007"))} data-v-ee250387><svg class="vp-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M4 8h12l4 4-4 4H4z" data-v-ee250387></path><circle cx="8.5" cy="12" r="1.4" data-v-ee250387></circle></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k3wuf0008"))} data-v-ee250387><svg class="vp-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5" data-v-ee250387></path></svg></button></div></div><div class="angle-chip" data-v-ee250387><select${ssrRenderAttr("value", unref(viewPreset))}${ssrRenderAttr("aria-label", _ctx.$t("townView.k1k4j5i7009"))} data-v-ee250387><option value="std" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kv72860036"))}</option><option value="top" data-v-ee250387> 俯视 · TOP </option><option value="front" data-v-ee250387> 前视 · FRONT </option><option value="side" data-v-ee250387> 侧视 · SIDE </option></select></div>`);
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
2368
  if (unref(showCallouts)) {
2369
- _push(`<!--[--><svg class="leaders" data-v-ee250387><!--[-->`);
2369
+ _push(`<!--[--><svg class="leaders" data-v-33218c74><!--[-->`);
2370
2370
  ssrRenderList(unref(callouts), (c) => {
2371
- _push(`<g class="${ssrRenderClass({ near: c.near })}" style="${ssrRenderStyle(c.leader ? null : { display: "none" })}" data-v-ee250387><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-ee250387></path><circle${ssrRenderAttr("cx", c.x)}${ssrRenderAttr("cy", c.y)} r="2.6"${ssrRenderAttr("fill", c.warn ? "#f6c453" : "#41c8f4")} data-v-ee250387></circle></g>`);
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
2372
  });
2373
- _push(`<!--]--></svg><div class="callout-layer" data-v-ee250387><!--[-->`);
2373
+ _push(`<!--]--></svg><div class="callout-layer" data-v-33218c74><!--[-->`);
2374
2374
  ssrRenderList(unref(callouts), (c) => {
2375
2375
  _push(`<div class="${ssrRenderClass([{
2376
2376
  warn: c.warn,
@@ -2378,12 +2378,12 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2378
2378
  }, "callout"])}" style="${ssrRenderStyle({
2379
2379
  left: c.x + "px",
2380
2380
  top: c.y + "px"
2381
- })}"${ssrRenderAttr("title", _ctx.$t("townView.k1ejxiwp010"))} data-v-ee250387><div class="co-label" data-v-ee250387><span class="co-dot" data-v-ee250387></span>${ssrInterpolate(c.label)}</div><div class="co-val" data-v-ee250387>${ssrInterpolate(c.value)}<small data-v-ee250387>${ssrInterpolate(c.unit)}</small></div><div class="co-range" data-v-ee250387>${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>`);
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
2382
  });
2383
2383
  _push(`<!--]--></div><!--]-->`);
2384
2384
  } else _push(`<!---->`);
2385
- _push(`<div class="kpi-strip" data-v-ee250387><div class="kpi" data-v-ee250387><span class="kpi-ico c1" data-v-ee250387><svg class="kpi-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z" data-v-ee250387></path><path d="M4 8.5l8 4.5 8-4.5M12 13v7" data-v-ee250387></path></svg></span><div class="kpi-meta" data-v-ee250387><div class="kpi-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1k6xemt037"))}</div><div class="kpi-val" data-v-ee250387>${ssrInterpolate(unref(deviceCount))}<small data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-ee250387><span class="kpi-ico c2" data-v-ee250387><svg class="kpi-svg" viewBox="0 0 24 24" data-v-ee250387><path d="m5 12.5 4.5 4.5L19 7.5" data-v-ee250387></path></svg></span><div class="kpi-meta" data-v-ee250387><div class="kpi-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1l1a9t2039"))}</div><div class="kpi-val" data-v-ee250387>${ssrInterpolate(unref(runningCount))}<small data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-ee250387><span class="kpi-ico c3" data-v-ee250387><svg class="kpi-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M12 3 22 20H2L12 3Z" data-v-ee250387></path><path d="M12 10v4M12 17v.2" data-v-ee250387></path></svg></span><div class="kpi-meta" data-v-ee250387><div class="kpi-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1fsi3ir002"))}</div><div class="kpi-val" data-v-ee250387>${ssrInterpolate(unref(activeAlarmCount))}<small data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</small></div></div></div><div class="kpi" data-v-ee250387><span class="kpi-ico c4" data-v-ee250387><svg class="kpi-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M9.5 14.5 14.5 9.5" data-v-ee250387></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-ee250387></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-ee250387></path></svg></span><div class="kpi-meta" data-v-ee250387><div class="kpi-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1emsai1041"))}</div><div class="kpi-val" data-v-ee250387>${ssrInterpolate(unref(daqTwins).length)}<small data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</small></div></div></div><div class="kpi" data-v-ee250387><span class="kpi-ico c5" data-v-ee250387><svg class="kpi-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M5 19a9 9 0 1 1 14 0" data-v-ee250387></path><path d="M12 13l3.5-3.5" data-v-ee250387></path><circle cx="12" cy="13" r="1.4" data-v-ee250387></circle></svg></span><div class="kpi-meta" data-v-ee250387><div class="kpi-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kbrxdq1043"))}</div><div class="kpi-val" data-v-ee250387>${ssrInterpolate(unref(healthPct))}<small data-v-ee250387>%</small></div></div></div></div>`);
2386
- if (unref(sceneEmpty)) _push(`<div class="empty-hint" data-v-ee250387><b data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3rwxjc044"))}</b><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1sa1eaj045"))}</span></div>`);
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>`);
2387
2387
  else _push(`<!---->`);
2388
2388
  if (unref(selectedChannel) && unref(boundaryDraft)) {
2389
2389
  _push(`<div class="boundary-panel drag-panel" style="${ssrRenderStyle(unref(panelPos).boundary ? {
@@ -2391,111 +2391,111 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2391
2391
  top: unref(panelPos).boundary.y + "px",
2392
2392
  bottom: "auto",
2393
2393
  transform: "none"
2394
- } : void 0)}" data-v-ee250387><div class="bp-title drag-grip"${ssrRenderAttr("title", _ctx.$t("townView.k1d0rl5z011"))} data-v-ee250387><span class="bp-name" data-v-ee250387>${ssrInterpolate(unref(entities).channels[unref(selectedChannel)]?.name ?? unref(selectedChannel).slice(0, 8))}</span><span class="bp-sub" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1mehlxs046"))}</span><div class="bp-tabs" data-v-ee250387><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "boundary" }, "bp-tab"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k489ka047"))}</button><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "members" }, "bp-tab"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3ztf1129"))} ${ssrInterpolate(unref(channelMembers).length)}</button></div></div>`);
2395
- if (unref(channelPanelTab) === "boundary") _push(`<!--[--><div class="bp-row" data-v-ee250387><span class="bp-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-ee250387><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "ellipse" }, "seg-btn"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "rect" }, "seg-btn"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="bp-row" data-v-ee250387><span class="bp-label" data-v-ee250387>${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-ee250387><span class="bp-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusX))}</span></div><div class="bp-row" data-v-ee250387><span class="bp-label" data-v-ee250387>${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-ee250387><span class="bp-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusZ))}</span></div><div class="bp-row" data-v-ee250387><span class="bp-label" data-v-ee250387>${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-ee250387><span class="bp-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(boundaryDraft).rotationY ?? 0))}°</span></div><!--]-->`);
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><!--]-->`);
2396
2396
  else {
2397
- _push(`<!--[--><div class="bp-hint" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-ee250387><!--[-->`);
2397
+ _push(`<!--[--><div class="bp-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-33218c74><!--[-->`);
2398
2398
  ssrRenderList(unref(channelMembers), (m) => {
2399
- _push(`<div class="member-row" data-v-ee250387><span class="member-ava" style="${ssrRenderStyle({ color: hashColor(unref(selectedChannel)) })}" data-v-ee250387>${ssrInterpolate(m.name.charAt(0).toUpperCase())}</span><div class="member-info" data-v-ee250387><span class="member-name" data-v-ee250387>${ssrInterpolate(m.name)}</span><span class="${ssrRenderClass([m.role === "lead" ? "r-lead" : "r-worker", "member-role"])}" data-v-ee250387>${ssrInterpolate(m.role === "lead" ? "Leader" : "Worker")}</span></div><select class="member-select"${ssrRenderAttr("value", (m.modelRef ?? "") || "hero-3d")} data-v-ee250387><!--[-->`);
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
2400
  ssrRenderList(unref(agentModels), (model) => {
2401
- _push(`<option${ssrRenderAttr("value", model.id)} data-v-ee250387>${ssrInterpolate(model.name)}</option>`);
2401
+ _push(`<option${ssrRenderAttr("value", model.id)} data-v-33218c74>${ssrInterpolate(model.name)}</option>`);
2402
2402
  });
2403
2403
  _push(`<!--]--></select></div>`);
2404
2404
  });
2405
2405
  _push(`<!--]-->`);
2406
- if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2406
+ if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2407
2407
  else _push(`<!---->`);
2408
2408
  _push(`</div><!--]-->`);
2409
2409
  }
2410
- _push(`<div class="bp-actions" data-v-ee250387>`);
2411
- if (unref(channelPanelTab) === "boundary") _push(`<button class="bp-btn save" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1b3kp8f056"))}</button>`);
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>`);
2412
2412
  else _push(`<!---->`);
2413
- _push(`<button class="bp-btn danger" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1hs45qg057"))}</button><button class="bp-btn" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3x62t058"))}</button></div></div>`);
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
2414
  } else _push(`<!---->`);
2415
- if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-ee250387>${ssrInterpolate(unref(lastDropText))}</div>`);
2415
+ if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-33218c74>${ssrInterpolate(unref(lastDropText))}</div>`);
2416
2416
  else _push(`<!---->`);
2417
- if (unref(errorText)) _push(`<div class="error-chip" data-v-ee250387>${ssrInterpolate(unref(errorText))}</div>`);
2417
+ if (unref(errorText)) _push(`<div class="error-chip" data-v-33218c74>${ssrInterpolate(unref(errorText))}</div>`);
2418
2418
  else _push(`<!---->`);
2419
- if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-ee250387><div class="loading-spinner" data-v-ee250387></div><span class="loading-text" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
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
2420
  else _push(`<!---->`);
2421
- _push(`</div><div class="dock" data-v-ee250387><section class="dock-card" data-v-ee250387><div class="dock-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</h3><span class="dock-mode" data-v-ee250387>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span></div><p class="ctl-sec" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.secRender"))}</p><div class="ctl-row" data-v-ee250387><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.qualityTip"))} data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.qualityLabel"))}</span><div class="fps-seg" data-v-ee250387><!--[-->`);
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
2422
  ssrRenderList(QUALITY_OPTIONS, (o) => {
2423
- _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-ee250387>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2423
+ _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-33218c74>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2424
2424
  });
2425
- _push(`<!--]--></div><span class="ctl-val" data-v-ee250387></span></div><div class="ctl-row" data-v-ee250387><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.fpsCapTip"))} data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.fpsCapLabel"))}</span><div class="fps-seg" data-v-ee250387><!--[-->`);
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
2426
  ssrRenderList(FPS_OPTIONS, (o) => {
2427
- _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-ee250387>${ssrInterpolate(o.label)}</button>`);
2427
+ _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-33218c74>${ssrInterpolate(o.label)}</button>`);
2428
2428
  });
2429
- _push(`<!--]--></div><span class="ctl-val" data-v-ee250387></span></div><p class="ctl-sec" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.secEnv"))}</p><div class="ctl-row" data-v-ee250387><span class="ctl-name" data-v-ee250387>${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-ee250387><span class="ctl-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(exposure) * 100))}%</span></div><div class="ctl-row" data-v-ee250387><span class="ctl-name" data-v-ee250387>${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-ee250387><span class="ctl-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(tintOpacity) * 100))}%</span></div><div class="ctl-row" data-v-ee250387><span class="ctl-name" data-v-ee250387>${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-ee250387><span class="ctl-val" data-v-ee250387>${ssrInterpolate(unref(threshPct))}%</span></div><div class="ctl-row" data-v-ee250387><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.kz71l1f012"))} data-v-ee250387>${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-ee250387><span class="ctl-val" data-v-ee250387>${ssrInterpolate(unref(calloutNearDist) === 0 ? _ctx.$t("townView.k493s144") : `${unref(calloutNearDist)}`)}</span></div><p class="ctl-sec" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.secOps"))}</p><div class="ctl-row" data-v-ee250387><span class="ctl-name" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1idc6pa065"))}</span><button class="${ssrRenderClass([{ on: unref(snap) }, "snap-toggle"])}" data-v-ee250387>${ssrInterpolate(unref(snap) ? _ctx.$t("townView.k4bs5145") : _ctx.$t("townView.k493s144"))}</button><span class="ctl-val" data-v-ee250387></span></div><div class="ctl-btns" data-v-ee250387><button class="btn btn-primary" data-v-ee250387>${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-ee250387>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button><button class="${ssrRenderClass([{ armed: unref(estop) }, "btn btn-danger"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1i046wf066"))}</button></div></section><section class="dock-card" data-v-ee250387><div class="dock-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1kfoef9067"))}</h3><span class="dock-count mono" data-v-ee250387>${ssrInterpolate(unref(daqTwins).length)}</span><div class="${ssrRenderClass([{ expanded: unref(trendExpanded) }, "trend-legend"])}" data-v-ee250387><!--[-->`);
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
2430
  ssrRenderList(unref(trendChips), (t) => {
2431
- _push(`<button class="${ssrRenderClass([{ off: !trendOn(t.id) }, "lg-chip"])}" data-v-ee250387><span class="lg-dot" style="${ssrRenderStyle({ background: trendColor(t.id) })}" data-v-ee250387></span>${ssrInterpolate(t.name)}</button>`);
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
2432
  });
2433
2433
  _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-ee250387>${ssrInterpolate(unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : `+${unref(trendOverflow)}`)}</button>`);
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
2435
  else _push(`<!---->`);
2436
- _push(`</div></div><div class="trend-wrap" data-v-ee250387><canvas class="trend-cv" data-v-ee250387></canvas>`);
2437
- if (!unref(daqTwins).length) _push(`<span class="trend-empty" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1uht2uv068"))}</span>`);
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>`);
2438
2438
  else _push(`<!---->`);
2439
- _push(`</div></section></div></main><aside class="rail rail-right" data-v-ee250387>`);
2439
+ _push(`</div></section></div></main><aside class="rail rail-right" data-v-33218c74>`);
2440
2440
  if (unref(selected)) {
2441
- _push(`<section class="panel inspector" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${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-ee250387> ✕ </button></div><div class="ins-chip-row" data-v-ee250387><span class="ins-chip mono" data-v-ee250387>${ssrInterpolate(unref(selected).id.slice(0, 8))}</span>`);
2442
- if (unref(selected).kind === "device" && unref(selectedIsDaq)) _push(`<span class="ins-chip accent" data-v-ee250387>DAQ</span>`);
2443
- else if (unref(selected).kind === "device" && unref(selectedIsDcw)) _push(`<span class="ins-chip accent" data-v-ee250387>DCW</span>`);
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>`);
2444
2444
  else _push(`<!---->`);
2445
2445
  _push(`</div>`);
2446
2446
  if (unref(selected).kind === "device") {
2447
2447
  _push(`<!--[-->`);
2448
2448
  if (unref(selectedIsDcw)) {
2449
- _push(`<div class="daq-info" data-v-ee250387><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1deqh0d069"))}</span><b class="cy" data-v-ee250387>${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-ee250387><span data-v-ee250387>${ssrInterpolate(unref(selectedDcwWindow)?.src === "recipe" ? _ctx.$t("townView.kq2jssk147") : _ctx.$t("townView.k1iwj796179"))}</span><b class="${ssrRenderClass({ amber: unref(selectedDcwWindow)?.src === "recipe" })}" data-v-ee250387>${ssrInterpolate(dcwWinLabel(unref(selectedDcwNode)))}</b></div><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-ee250387>${ssrInterpolate(unref(selectedDcwDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div><div class="daq-bind-bar" data-v-ee250387><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-ee250387><button class="bind-add-btn"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[unref(selected).id] == null || unref(dcwWriteDrafts)[unref(selected).id] === "") ? " disabled" : ""} data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kwrbtn180"))}</button></div>`);
2450
- if (unref(dcwWriteErrs)[unref(selected).id]) _push(`<p class="dcw-err" data-v-ee250387>${ssrInterpolate(unref(dcwWriteErrs)[unref(selected).id])}</p>`);
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>`);
2451
2451
  else _push(`<!---->`);
2452
2452
  if (unref(mode) === "edit") {
2453
- _push(`<div class="daq-bind-bar" data-v-ee250387><select class="bind-select" data-v-ee250387><option value="" data-v-ee250387${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), "") : ssrLooseEqual(unref(dcwBindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
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
2454
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2455
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-ee250387${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), dv.id) : ssrLooseEqual(unref(dcwBindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
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
2456
  });
2457
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(selectedDcwDeviceName) && !unref(dcwBindPick)) ? " disabled" : ""} data-v-ee250387>${ssrInterpolate(unref(selectedDcwDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
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
2458
  } else _push(`<!---->`);
2459
2459
  _push(`</div>`);
2460
2460
  } else if (unref(selectedIsDaq)) {
2461
- _push(`<div class="daq-info" data-v-ee250387><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3mv305072"))}</span><b class="cy" data-v-ee250387>${ssrInterpolate(unref(selectedDaqSim) ? fmtDaq(unref(selectedDaqSim)) : "--")} ${ssrInterpolate(unref(selectedDaqSim)?.tpl.unit)}</b></div><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))}</span><b data-v-ee250387>${ssrInterpolate(unref(selectedDaqSim)?.tpl.min)} ~ ${ssrInterpolate(unref(selectedDaqSim)?.tpl.max)}</b></div><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-ee250387>${ssrInterpolate(unref(daqBoundDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div>`);
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
2462
  if (unref(mode) === "edit") {
2463
- _push(`<div class="daq-bind-bar" data-v-ee250387><select class="bind-select" data-v-ee250387><option value="" data-v-ee250387${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), "") : ssrLooseEqual(unref(bindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
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
2464
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2465
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-ee250387${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), dv.id) : ssrLooseEqual(unref(bindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
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
2466
  });
2467
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(daqBoundDeviceName) && !unref(bindPick)) ? " disabled" : ""} data-v-ee250387>${ssrInterpolate(unref(daqBoundDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
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
2468
  } else _push(`<!---->`);
2469
- if (unref(mode) === "edit" && unref(selectedDaqNode)) _push(`<div class="daq-node-ctl" data-v-ee250387><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1l6g2ga074"))}</span><span class="daq-th-inputs" data-v-ee250387><input${ssrRenderAttr("value", unref(daqIntervalDraft))} type="number" min="200" max="60000" step="100" class="daq-num" data-v-ee250387><small data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1or92b075"))}</small></span></div><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3x5tpx076"))}</span><span class="daq-th-inputs" data-v-ee250387><input${ssrRenderAttr("value", unref(selectedDaqNode).warnLow)} type="number" step="any" class="daq-num" data-v-ee250387> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).warnHigh)} type="number" step="any" class="daq-num" data-v-ee250387></span></div><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1hjj0jf077"))}</span><span class="daq-th-inputs" data-v-ee250387><input${ssrRenderAttr("value", unref(selectedDaqNode).min)} type="number" step="any" class="daq-num" data-v-ee250387> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).max)} type="number" step="any" class="daq-num" data-v-ee250387></span></div><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k48tki078"))}</span><button class="${ssrRenderClass([{ warn: unref(selectedDaqNode).enabled }, "bind-add-btn"])}" data-v-ee250387>${ssrInterpolate(unref(selectedDaqNode).enabled ? _ctx.$t("townView.k1wv0nyo150") : _ctx.$t("townView.kh1586b180"))}</button></div><div class="daq-info-row" data-v-ee250387><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3xakp079"))}</span><button class="bind-add-btn danger"${ssrRenderAttr("title", _ctx.$t("townView.kpwutri014"))} data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1bpp30k080"))}</button></div></div>`);
2470
- else _push(`<div class="ins-empty" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kzk5dfx081"))}</div>`);
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>`);
2471
2471
  _push(`</div>`);
2472
2472
  } else {
2473
- _push(`<!--[--><div class="obj-row" data-v-ee250387><span class="obj-label" data-v-ee250387>${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-ee250387></div><div class="obj-row" data-v-ee250387><span class="obj-label" data-v-ee250387>${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-ee250387><!--[-->`);
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
2474
  ssrRenderList(unref(deviceModels), (m) => {
2475
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-ee250387>${ssrInterpolate(m.name)}</option>`);
2475
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-33218c74>${ssrInterpolate(m.name)}</option>`);
2476
2476
  });
2477
- _push(`<!--]--></select></div><div class="sect-hd" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1vtyk05130"))} ${ssrInterpolate(unref(boundDaqRows).length)} ${ssrInterpolate(_ctx.$t("townView.k3vfpz5138"))}</div><!--[-->`);
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
2478
  ssrRenderList(unref(boundDaqRows), (r) => {
2479
- _push(`<div class="bind-row" data-v-ee250387><span class="bind-ico" data-v-ee250387><svg class="bind-svg" viewBox="0 0 24 24" data-v-ee250387>${daqIcon(r.icon) ?? ""}</svg></span><span class="bind-meta" data-v-ee250387><span class="bind-label" data-v-ee250387>${ssrInterpolate(r.ch)}</span><span class="bind-val" data-v-ee250387><b data-v-ee250387>${ssrInterpolate(r.value)}</b> ${ssrInterpolate(r.unit)} · ${ssrInterpolate(r.name)}</span></span><canvas class="bind-spark" width="56" height="20" data-v-ee250387></canvas>`);
2480
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-ee250387> ✕ </button>`);
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>`);
2481
2481
  else _push(`<!---->`);
2482
2482
  _push(`</div>`);
2483
2483
  });
2484
2484
  _push(`<!--]-->`);
2485
- if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2485
+ if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2486
2486
  else _push(`<!---->`);
2487
2487
  if (unref(mode) === "edit") {
2488
- _push(`<div class="bind-add-wrap" data-v-ee250387><button class="bind-add" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2488
+ _push(`<div class="bind-add-wrap" data-v-33218c74><button class="bind-add" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2489
2489
  if (unref(bindPopOpen)) {
2490
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-ee250387><!--[-->`);
2490
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-33218c74><!--[-->`);
2491
2491
  ssrRenderList(unref(daqTemplates), (tpl) => {
2492
2492
  _push(`<!--[-->`);
2493
2493
  if (unref(daqBindChoices)[tpl.id]?.length) {
2494
- _push(`<div class="bp-group" data-v-ee250387><span class="bp-tpl" data-v-ee250387>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2494
+ _push(`<div class="bp-group" data-v-33218c74><span class="bp-tpl" data-v-33218c74>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2495
2495
  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-ee250387><svg class="bind-svg" viewBox="0 0 24 24" data-v-ee250387>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-ee250387>${ssrInterpolate(c.name)}`);
2497
- if (c.devName) _push(`<i class="bp-cur" data-v-ee250387>→ ${ssrInterpolate(c.devName)}</i>`);
2498
- else if (!c.placed) _push(`<i class="bp-cur" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
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>`);
2499
2499
  else _push(`<!---->`);
2500
2500
  _push(`</span></button>`);
2501
2501
  });
@@ -2504,40 +2504,40 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2504
2504
  _push(`<!--]-->`);
2505
2505
  });
2506
2506
  _push(`<!--]-->`);
2507
- if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2507
+ if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2508
2508
  else _push(`<!---->`);
2509
2509
  _push(`</div>`);
2510
2510
  } else _push(`<!---->`);
2511
2511
  _push(`</div>`);
2512
2512
  } else _push(`<!---->`);
2513
- _push(`<div class="sect-hd" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.ktzir2t131"))} ${ssrInterpolate(unref(boundDcwRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</div><!--[-->`);
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
2514
  ssrRenderList(unref(boundDcwRows), (r) => {
2515
- _push(`<div class="dcw-row" data-v-ee250387><div class="dcw-top" data-v-ee250387><span class="bind-ico" data-v-ee250387><svg class="bind-svg" viewBox="0 0 24 24" data-v-ee250387>${daqIcon(r.icon) ?? ""}</svg></span><span class="dcw-id" data-v-ee250387><span class="bind-label" data-v-ee250387>${ssrInterpolate(r.ch)}`);
2516
- if (r.rMin != null || r.rMax != null) _push(`<i class="dcw-tag" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k48grv086"))}</i>`);
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>`);
2517
2517
  else _push(`<!---->`);
2518
- _push(`</span><span class="dcw-name" data-v-ee250387>${ssrInterpolate(r.name)}</span></span><span class="dcw-cur" data-v-ee250387><b data-v-ee250387>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}</b><i data-v-ee250387>${ssrInterpolate(r.unit)}</i></span>`);
2519
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-ee250387> ✕ </button>`);
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>`);
2520
2520
  else _push(`<!---->`);
2521
- _push(`</div><div class="${ssrRenderClass([{ recipe: r.rMin != null || r.rMax != null }, "dcw-win"])}" data-v-ee250387><em data-v-ee250387>${ssrInterpolate(r.rMin != null || r.rMax != null ? _ctx.$t("townView.k1l3m0hx151") : _ctx.$t("townView.k1bc6rqf181"))}</em><span class="dcw-win-num" data-v-ee250387>${ssrInterpolate(r.rMin ?? "-∞")}</span><span class="dcw-win-track" data-v-ee250387><i style="${ssrRenderStyle({ left: `${dcwMarkPct(r)}%` })}" data-v-ee250387></i></span><span class="dcw-win-num" data-v-ee250387>${ssrInterpolate(r.rMax ?? "+∞")}</span></div><div class="dcw-write" data-v-ee250387><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-ee250387><button class="dcw-send"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[r.dcwId] == null || unref(dcwWriteDrafts)[r.dcwId] === "") ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("townView.k15t7izc017"))} data-v-ee250387> write </button></div>`);
2522
- if (unref(dcwWriteErrs)[r.dcwId]) _push(`<small class="dcw-err" data-v-ee250387>${ssrInterpolate(unref(dcwWriteErrs)[r.dcwId])}</small>`);
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>`);
2523
2523
  else _push(`<!---->`);
2524
2524
  _push(`</div>`);
2525
2525
  });
2526
2526
  _push(`<!--]-->`);
2527
- if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2527
+ if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2528
2528
  else _push(`<!---->`);
2529
2529
  if (unref(mode) === "edit") {
2530
- _push(`<div class="bind-add-wrap" data-v-ee250387><button class="bind-add" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2530
+ _push(`<div class="bind-add-wrap" data-v-33218c74><button class="bind-add" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2531
2531
  if (unref(dcwBindPopOpen)) {
2532
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-ee250387><!--[-->`);
2532
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-33218c74><!--[-->`);
2533
2533
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2534
2534
  _push(`<!--[-->`);
2535
2535
  if (unref(dcwBindChoices)[tpl.id]?.length) {
2536
- _push(`<div class="bp-group" data-v-ee250387><span class="bp-tpl" data-v-ee250387>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2536
+ _push(`<div class="bp-group" data-v-33218c74><span class="bp-tpl" data-v-33218c74>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2537
2537
  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-ee250387><svg class="bind-svg" viewBox="0 0 24 24" data-v-ee250387>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-ee250387>${ssrInterpolate(c.name)}`);
2539
- if (c.devName) _push(`<i class="bp-cur" data-v-ee250387>→ ${ssrInterpolate(c.devName)}</i>`);
2540
- else if (!c.placed) _push(`<i class="bp-cur" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
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>`);
2541
2541
  else _push(`<!---->`);
2542
2542
  _push(`</span></button>`);
2543
2543
  });
@@ -2546,121 +2546,121 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2546
2546
  _push(`<!--]-->`);
2547
2547
  });
2548
2548
  _push(`<!--]-->`);
2549
- if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2549
+ if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2550
2550
  else _push(`<!---->`);
2551
2551
  _push(`</div>`);
2552
2552
  } else _push(`<!---->`);
2553
2553
  _push(`</div>`);
2554
2554
  } else _push(`<!---->`);
2555
- if (unref(mode) === "edit") _push(`<!--[--><div class="sect-hd" data-v-ee250387> 变换 · BLENDER </div><div class="xz-seg" data-v-ee250387><button class="${ssrRenderClass([{ on: unref(tMode) === "translate" }, "seg-btn"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1hg3167089"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "rotate" }, "seg-btn"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1enlg7i090"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "scale" }, "seg-btn"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1ibjg3j091"))}</button></div><div class="scale-row" data-v-ee250387><span class="scale-min" data-v-ee250387>0.2×</span><input class="scale-range" type="range" min="0.2" max="5" step="0.05"${ssrRenderAttr("value", unref(selected).scale)} data-v-ee250387><span class="scale-max" data-v-ee250387>5×</span></div><div class="scale-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(selected).scale * 100))}% </div><div class="ins-foot" data-v-ee250387><button class="${ssrRenderClass([{ armed: unref(deviceDeleteArmed) === unref(selected).id }, "btn btn-danger ins-del"])}" data-v-ee250387>${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-ee250387>${ssrInterpolate(_ctx.$t("townView.kt0i3y2092"))}</div>`);
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>`);
2557
2557
  _push(`<!--]-->`);
2558
2558
  }
2559
2559
  _push(`<!--]-->`);
2560
2560
  } else if (unref(selected).kind === "agent") {
2561
- _push(`<!--[--><div class="chat-id-row" data-v-ee250387><span class="chat-badge" style="${ssrRenderStyle({ "--p-acc": unref(agentChatColor) })}" data-v-ee250387>${ssrInterpolate(unref(agentChatTitle).slice(0, 1).toUpperCase())}</span><div class="chat-nameplate" data-v-ee250387><span class="chat-name" data-v-ee250387>${ssrInterpolate(unref(agentChatTitle))}</span><span class="chat-meta" data-v-ee250387><span class="${ssrRenderClass([unref(selectedAgentMeta)?.role === "lead" ? "r-lead" : "r-worker", "chat-role"])}" data-v-ee250387>${ssrInterpolate(unref(selectedAgentRoleTag))}</span><span class="${ssrRenderClass([`s-${unref(selectedAgentMeta)?.state ?? "idle"}`, "chat-state"])}" data-v-ee250387>${ssrInterpolate(unref(agentChatStateLabel))}</span>`);
2562
- if (unref(selectedAgentMeta)?.harness) _push(`<span class="chat-harness" data-v-ee250387>${ssrInterpolate(unref(selectedAgentMeta).harness.toUpperCase())}</span>`);
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>`);
2563
2563
  else _push(`<!---->`);
2564
- _push(`<span class="chat-count" data-v-ee250387>${ssrInterpolate(unref(agentHistory).length + unref(agentChatRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span></span></div></div><div class="obj-row" data-v-ee250387><span class="obj-label" data-v-ee250387>${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-ee250387><!--[-->`);
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
2565
  ssrRenderList(unref(agentModels), (m) => {
2566
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-ee250387>${ssrInterpolate(m.name)}</option>`);
2566
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-33218c74>${ssrInterpolate(m.name)}</option>`);
2567
2567
  });
2568
- _push(`<!--]--></select></div><div class="obj-sep" data-v-ee250387></div><div class="obj-row" data-v-ee250387><span class="obj-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1fix3hb093"))}</span><span class="range-status" data-v-ee250387>${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-ee250387>${ssrInterpolate(unref(agentDrawingRange) ? _ctx.$t("townView.k3slzhc153") : _ctx.$t("townView.k1f1xmci183"))}</button>`);
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>`);
2570
2570
  else _push(`<!---->`);
2571
- _push(`</div><div class="obj-sep" data-v-ee250387></div><div class="sect-hd" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1p7nru2094"))}</div><!--[-->`);
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
2572
  ssrRenderList(unref(agentBindings), (b) => {
2573
- _push(`<div class="bind-row" data-v-ee250387><span class="${ssrRenderClass([b.kind === "dcw" ? "accent" : "", "ins-chip"])}" style="${ssrRenderStyle({ "flex": "none" })}" data-v-ee250387>${ssrInterpolate(b.kind === "dcw" ? _ctx.$t("townView.k40ifw097") : _ctx.$t("townView.k40rjw098"))}</span><span class="bind-meta" data-v-ee250387><span class="bind-label" data-v-ee250387>${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-ee250387><option value="auto" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1io1ylm095"))}</option><option value="manual" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1duyr8q096"))}</option></select></span><button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-ee250387> ✕ </button></div>`);
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
2574
  });
2575
2575
  _push(`<!--]-->`);
2576
- if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-ee250387> 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 </div>`);
2576
+ if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-33218c74> 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 </div>`);
2577
2577
  else _push(`<!---->`);
2578
2578
  if (unref(mode) === "edit") {
2579
- _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-ee250387><select class="bind-select" style="${ssrRenderStyle({
2579
+ _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-33218c74><select class="bind-select" style="${ssrRenderStyle({
2580
2580
  "flex": "none",
2581
2581
  "width": "62px"
2582
- })}" data-v-ee250387><option value="dcw" data-v-ee250387${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-ee250387${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-ee250387><option value="" data-v-ee250387${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), "") : ssrLooseEqual(unref(agentBindNodeId), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kurjldk099"))}</option>`);
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
2583
  if (unref(agentBindKind) === "dcw") {
2584
2584
  _push(`<!--[-->`);
2585
2585
  ssrRenderList(unref(dcw).nodes, (n) => {
2586
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-ee250387${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
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
2587
  });
2588
2588
  _push(`<!--]-->`);
2589
2589
  } else {
2590
2590
  _push(`<!--[-->`);
2591
2591
  ssrRenderList(unref(daq).nodes, (n) => {
2592
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-ee250387${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
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
2593
  });
2594
2594
  _push(`<!--]-->`);
2595
2595
  }
2596
2596
  _push(`</select><select class="bind-select" style="${ssrRenderStyle({
2597
2597
  "flex": "none",
2598
2598
  "width": "76px"
2599
- })}" data-v-ee250387><option value="auto" data-v-ee250387${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-ee250387${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-ee250387>${ssrInterpolate(_ctx.$t("townView.k452a8102"))}</button></div>`);
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
2600
  } else _push(`<!---->`);
2601
2601
  if (unref(pendingApprovals).length) {
2602
- _push(`<!--[--><div class="sect-hd" style="${ssrRenderStyle({ "color": "var(--hud-amber)" })}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1gk2jg7132"))} ${ssrInterpolate(unref(pendingApprovals).length)}</div><!--[-->`);
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
2603
  ssrRenderList(unref(pendingApprovals), (ap) => {
2604
- _push(`<div class="approval-card" data-v-ee250387><div class="approval-detail" data-v-ee250387>${ssrInterpolate(ap.detail)}</div><div class="${ssrRenderClass([{ urgent: approvalRemainingSec(ap) <= 30 }, "approval-ttl"])}" data-v-ee250387> ⏱ ${ssrInterpolate(approvalRemainingSec(ap))}s ${ssrInterpolate(_ctx.$t("townView.hitlAutoReject"))}</div><input${ssrRenderAttr("value", unref(approvalComments)[ap.id])} class="dcw-write input-inline" style="${ssrRenderStyle({
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
2605
  "width": "100%",
2606
2606
  "margin-top": "5px"
2607
- })}"${ssrRenderAttr("placeholder", _ctx.$t("townView.keztqrn020"))} data-v-ee250387><div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-top": "5px" })}" data-v-ee250387><button class="bind-add-btn" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kslcozu103"))}</button><button class="bind-add-btn danger" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k14gu3rd104"))}</button></div></div>`);
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
2608
  });
2609
2609
  _push(`<!--]--><!--]-->`);
2610
2610
  } else _push(`<!---->`);
2611
- if (unref(agentRangeDraft) && unref(mode) === "edit") _push(`<!--[--><div class="obj-row" data-v-ee250387><span class="obj-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-ee250387><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "ellipse" }, "seg-btn"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "rect" }, "seg-btn"])}" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="obj-row" data-v-ee250387><span class="obj-label" data-v-ee250387>${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-ee250387><span class="bp-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusX))}</span></div><div class="obj-row" data-v-ee250387><span class="obj-label" data-v-ee250387>${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-ee250387><span class="bp-val" data-v-ee250387>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusZ))}</span></div><button class="obj-mini danger" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1w45mzc107"))}</button><!--]-->`);
2612
- else _push(`<div class="ins-empty" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k14s8urm108"))}</div>`);
2613
- _push(`<div class="obj-sep" data-v-ee250387></div><div class="sect-hd chat-sect" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1ghjbfc133"))} ${ssrInterpolate(unref(agentChatTitle))} <button class="mini-btn chat-refresh"${ssrRenderAttr("title", _ctx.$t("townView.k15avt7g021"))} data-v-ee250387>${ssrInterpolate(unref(historyLoading) ? "…" : "↻")}</button></div><div class="rpg-lines chat-embed" data-v-ee250387>`);
2614
- if (unref(historyLoading)) _push(`<div class="rpg-note" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kkhlx5h109"))}</div>`);
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>`);
2615
2615
  else _push(`<!---->`);
2616
2616
  if (unref(agentHistory).length) {
2617
- _push(`<!--[--><div class="rpg-divider" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2617
+ _push(`<!--[--><div class="rpg-divider" data-v-33218c74>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2618
2618
  ssrRenderList(unref(agentHistory), (r) => {
2619
- _push(`<div class="rpg-line hist" data-v-ee250387><span class="rpg-time" data-v-ee250387>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-ee250387>`);
2620
- if (chatKindLabel(r.kind)) _push(`<span class="${ssrRenderClass([`k-${r.kind}`, "rpg-kind"])}" data-v-ee250387>${ssrInterpolate(chatKindLabel(r.kind))}</span>`);
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>`);
2621
2621
  else _push(`<!---->`);
2622
- _push(`<span class="rpg-text" data-v-ee250387>${ssrInterpolate(r.text)}</span></div></div>`);
2622
+ _push(`<span class="rpg-text" data-v-33218c74>${ssrInterpolate(r.text)}</span></div></div>`);
2623
2623
  });
2624
2624
  _push(`<!--]--><!--]-->`);
2625
2625
  } else _push(`<!---->`);
2626
- if (unref(agentChatRows).length) _push(`<div class="rpg-divider live" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1cwz73k135"))} ${ssrInterpolate(unref(agentChatRows).length)}</div>`);
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
2627
  else _push(`<!---->`);
2628
2628
  _push(`<!--[-->`);
2629
2629
  ssrRenderList(unref(agentChatRows), (r) => {
2630
- _push(`<div class="rpg-line live" data-v-ee250387><span class="rpg-time" data-v-ee250387>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-ee250387><span class="rpg-text" data-v-ee250387>${ssrInterpolate(r.text)}</span></div></div>`);
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
2631
  });
2632
2632
  _push(`<!--]-->`);
2633
- if (unref(selectedAgentMeta)?.state === "busy") _push(`<div class="rpg-typing" data-v-ee250387><span class="ty-dot" data-v-ee250387></span><span class="ty-dot" data-v-ee250387></span><span class="ty-dot" data-v-ee250387></span><span class="ty-label" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k3o5tz9110"))}</span></div>`);
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
2634
  else _push(`<!---->`);
2635
- if (!unref(historyLoading) && !unref(agentHistory).length && !unref(agentChatRows).length) _push(`<div class="rpg-note" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1qkqld7111"))}</div>`);
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
2636
  else _push(`<!---->`);
2637
2637
  _push(`</div><!--]-->`);
2638
2638
  } else _push(`<!---->`);
2639
2639
  _push(`</section>`);
2640
2640
  } else _push(`<!---->`);
2641
- _push(`<section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</h3></div><div class="health-body" data-v-ee250387><div class="donut-wrap" data-v-ee250387><canvas width="118" height="118" data-v-ee250387></canvas><div class="donut-center" data-v-ee250387><b style="${ssrRenderStyle({ color: unref(healthTone) })}" data-v-ee250387>${ssrInterpolate(unref(healthPct))}%</b><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k7h1nxo113"))}</span></div></div><div class="health-legend" data-v-ee250387><div class="hl-row" data-v-ee250387><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-accent)" })}" data-v-ee250387></span> ${ssrInterpolate(_ctx.$t("townView.k3vp67i114"))} <span class="n" data-v-ee250387>${ssrInterpolate(unref(runningCount))}</span></div><div class="hl-row" data-v-ee250387><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-amber)" })}" data-v-ee250387></span> ${ssrInterpolate(_ctx.$t("townView.k3zcvb115"))} <span class="n" data-v-ee250387>${ssrInterpolate(unref(idleCount))}</span></div><div class="hl-row" data-v-ee250387><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-danger)" })}" data-v-ee250387></span> ${ssrInterpolate(_ctx.$t("townView.k3xmid116"))} <span class="n" data-v-ee250387>${ssrInterpolate(unref(alarmCount))}</span></div><div class="hl-row" data-v-ee250387><span class="hl-dot" style="${ssrRenderStyle({ background: "#3a4a63" })}" data-v-ee250387></span> ${ssrInterpolate(_ctx.$t("townView.statesOffline"))} <span class="n" data-v-ee250387>${ssrInterpolate(unref(offlineCount))}</span></div></div></div></section><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1q247fn117"))}</h3><span class="panel-tag" data-v-ee250387>${ssrInterpolate(unref(deviceTwins).twins.length)}</span></div>`);
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
2642
  _push(ssrRenderComponent(_component_WorkshopDeviceTwinPanel, {
2643
2643
  class: "kd-embed",
2644
2644
  "daq-live": unref(daqLive),
2645
2645
  "dcw-live": unref(dcwLive),
2646
2646
  onFocusDevice
2647
2647
  }, null, _parent));
2648
- _push(`</section><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1cxf749118"))}</h3><span class="panel-tag" data-v-ee250387>${ssrInterpolate(unref(activeAlarmCount))} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bkswpz022"))} data-v-ee250387> ✓ </button></div><div class="alarm-list" data-v-ee250387><!--[-->`);
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
2649
  ssrRenderList(unref(alarms).slice(0, 8), (a) => {
2650
- _push(`<div class="al-row" data-v-ee250387><span class="${ssrRenderClass([a.state === 2 ? "info" : a.state === 1 ? "warn" : "crit", "al-ico"])}" data-v-ee250387><svg class="al-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M12 3 22 20H2L12 3Z" data-v-ee250387></path><path d="M12 10v4M12 17v.2" data-v-ee250387></path></svg></span><div class="al-body" data-v-ee250387><div class="al-txt" data-v-ee250387>${ssrInterpolate(a.txt)}</div><div class="al-src" data-v-ee250387>${ssrInterpolate(a.src)} · ${ssrInterpolate(a.time)}</div></div><button class="${ssrRenderClass([`s${a.state}`, "al-state"])}" data-v-ee250387>${ssrInterpolate(ALARM_STATES[a.state])}</button></div>`);
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
2651
  });
2652
2652
  _push(`<!--]-->`);
2653
- if (!unref(alarms).length) _push(`<div class="rail-empty" data-v-ee250387><svg class="re-ico" viewBox="0 0 24 24" data-v-ee250387><path d="M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z" data-v-ee250387></path><path d="m9.2 12.2 2 2 3.6-4" data-v-ee250387></path></svg><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kjz544r119"))}</span></div>`);
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
2654
  else _push(`<!---->`);
2655
- _push(`</div></section><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k1cxdtq2120"))}</h3><span class="panel-tag" data-v-ee250387>${ssrInterpolate(unref(ticker).length)}</span></div><div class="event-list" data-v-ee250387><!--[-->`);
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
2656
  ssrRenderList([...unref(ticker)].reverse(), (t, i) => {
2657
- _push(`<div class="event-row" data-v-ee250387><span class="ev-time" data-v-ee250387>${ssrInterpolate(fmtTime(t.at))}</span><span class="ev-name"${ssrRenderAttr("title", t.agentName)} data-v-ee250387>${ssrInterpolate(t.agentName)}</span><span class="ev-text"${ssrRenderAttr("title", t.text)} data-v-ee250387>${ssrInterpolate(t.text)}</span></div>`);
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
2658
  });
2659
2659
  _push(`<!--]-->`);
2660
- if (!unref(ticker).length) _push(`<div class="rail-empty" data-v-ee250387><svg class="re-ico" viewBox="0 0 24 24" data-v-ee250387><path d="M3 12h3l2.5-6 4 12L15 12h6" data-v-ee250387></path></svg><span data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.k2uk6ua121"))}</span></div>`);
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
2661
  else _push(`<!---->`);
2662
- _push(`</div></section><section class="panel" data-v-ee250387><div class="panel-hd" data-v-ee250387><h3 data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kjug2jq122"))}</h3></div><div class="mm-body" data-v-ee250387><div class="mm-wrap"${ssrRenderAttr("title", _ctx.$t("townView.klfwiqg023"))} data-v-ee250387><canvas class="nav-cv" data-v-ee250387></canvas></div><div class="mm-col" data-v-ee250387><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1lap9bs024"))} data-v-ee250387><svg class="vp-svg" viewBox="0 0 24 24" data-v-ee250387><path d="M3 12a9 9 0 1 0 3-6.7M3 4v5h5" data-v-ee250387></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.kav8a8k025"))} data-v-ee250387><svg class="vp-svg" viewBox="0 0 24 24" data-v-ee250387><circle cx="11" cy="11" r="6.5" data-v-ee250387></circle><path d="m16 16 4.5 4.5M8.5 11h5" data-v-ee250387></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1u7uce9026"))} data-v-ee250387><svg class="vp-svg" viewBox="0 0 24 24" data-v-ee250387><circle cx="11" cy="11" r="6.5" data-v-ee250387></circle><path d="m16 16 4.5 4.5M8.5 11h5M11 8.5v5" data-v-ee250387></path></svg></button></div></div><div class="mm-meta mono" data-v-ee250387>${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-ee250387><span data-v-ee250387><span class="${ssrRenderClass([{ red: unref(conn).state !== "open" }, "sb-dot"])}" data-v-ee250387></span>${ssrInterpolate(_ctx.$t("townView.k1i4g246123"))} <b data-v-ee250387>${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-ee250387>${ssrInterpolate(_ctx.$t("townView.k4a0jt124"))} <b data-v-ee250387>${ssrInterpolate(unref(blockCount))}</b><i data-v-ee250387>·</i>${ssrInterpolate(_ctx.$t("townView.k3xdvm125"))} <b data-v-ee250387>${ssrInterpolate(unref(agentCount))}</b><i data-v-ee250387>·</i>${ssrInterpolate(_ctx.$t("townView.k47e16126"))} <b data-v-ee250387>${ssrInterpolate(unref(deviceCount))}</b></span><span class="sb-lat mono" data-v-ee250387>${ssrInterpolate(unref(fps))} FPS </span><span class="copy" data-v-ee250387> © 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-ee250387><div class="loading-spinner" data-v-ee250387></div><span class="loading-text" data-v-ee250387>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
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>`);
2664
2664
  else _push(`<!---->`);
2665
2665
  _push(`</div>`);
2666
2666
  };
@@ -2674,7 +2674,7 @@ TownView_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
2674
2674
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/town/TownView.vue");
2675
2675
  return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
2676
2676
  };
2677
- var TownView_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(TownView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ee250387"]]), { __name: "WorkshopTownView" });
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
2678
 
2679
2679
  export { TownView_default as T, useStorage as u };
2680
- //# sourceMappingURL=TownView-B5KifIaT.mjs.map
2680
+ //# sourceMappingURL=TownView-CunmEMzS.mjs.map