agentworkshop 0.6.1 → 0.7.0

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 (537) hide show
  1. package/.AgentWorkShop/prompts/host-tools.json +17 -0
  2. package/.env.example +37 -0
  3. package/.output/.AgentWorkShop/prompts/host-tools.json +17 -0
  4. package/.output/nitro.json +1 -1
  5. package/.output/public/_nuxt/{Bc_mM2cU.js → BH0Z05CS.js} +1 -1
  6. package/.output/public/_nuxt/Bxgaym6j.js +1 -0
  7. package/.output/public/_nuxt/{DRlJ2-4p.js → By-LNp3k.js} +1 -1
  8. package/.output/public/_nuxt/{C2QSTAWf.js → Bz40vyZS.js} +1 -1
  9. package/.output/public/_nuxt/{CwS_UHeH.js → CS8R0_J3.js} +1 -1
  10. package/.output/public/_nuxt/{ClptO7LA.js → CUxV8Bw_.js} +1 -1
  11. package/.output/public/_nuxt/CXmkVXS5.js +1 -0
  12. package/.output/public/_nuxt/DC-QMEk1.js +2 -0
  13. package/.output/public/_nuxt/{C-Y5ydB6.js → Dgp2wK2U.js} +6 -6
  14. package/.output/public/_nuxt/{Ck6tznoQ.js → DjqcbFBE.js} +1 -1
  15. package/.output/public/_nuxt/{B0haAGoq.js → GP2wXyuY.js} +1 -1
  16. package/.output/public/_nuxt/TownView.Bt33bo1M.css +1 -0
  17. package/.output/public/_nuxt/{MhK4buEJ.js → XVB9_zwP.js} +1 -1
  18. package/.output/public/_nuxt/_id_.BeqSLvl_.css +1 -0
  19. package/.output/public/_nuxt/builds/latest.json +1 -1
  20. package/.output/public/_nuxt/builds/meta/90ae66f6-f649-4b44-8df9-bcd9e9a957a2.json +1 -0
  21. package/.output/public/_nuxt/{Bq_KKxCg.js → i_MKObHo.js} +1 -1
  22. package/.output/public/_nuxt/settings.DeRNNUcP.css +1 -0
  23. package/.output/public/_nuxt/{CclO6GyL.js → tpDMVY5w.js} +1 -1
  24. package/.output/public/_nuxt/{C0FogB-p.js → zwdqvGN_.js} +1 -1
  25. package/.output/server/chunks/_/nitro.mjs +4910 -4591
  26. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  27. package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs → TownView-BkHxMiwZ.mjs} +168 -159
  28. package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs.map → TownView-BkHxMiwZ.mjs.map} +1 -1
  29. package/.output/server/chunks/build/{_id_-xR3AChMO.mjs → _id_-Bna1_JuB.mjs} +5 -4
  30. package/.output/server/chunks/build/_id_-Bna1_JuB.mjs.map +1 -0
  31. package/.output/server/chunks/build/{_id_-CmKAEFHV.mjs → _id_-GnRJPykX.mjs} +161 -119
  32. package/.output/server/chunks/build/_id_-GnRJPykX.mjs.map +1 -0
  33. package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs → _wsId_-CzLDGT_V.mjs} +6 -5
  34. package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs.map → _wsId_-CzLDGT_V.mjs.map} +1 -1
  35. package/.output/server/chunks/build/agents-D4l1icvn.mjs +1 -0
  36. package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +1 -1
  37. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs +1 -0
  38. package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +1 -1
  39. package/.output/server/chunks/build/{daq-Boz_dlAQ.mjs → daq-D_W59QOe.mjs} +6 -5
  40. package/.output/server/chunks/build/daq-D_W59QOe.mjs.map +1 -0
  41. package/.output/server/chunks/build/{dcw-wTRwBAUi.mjs → dcw-BTM5YU-B.mjs} +3 -2
  42. package/.output/server/chunks/build/dcw-BTM5YU-B.mjs.map +1 -0
  43. package/.output/server/chunks/build/default-Dt6xLdpd.mjs +1 -0
  44. package/.output/server/chunks/build/{logs-Cdi-eXlN.mjs → logs-CUQt1z7D.mjs} +4 -3
  45. package/.output/server/chunks/build/logs-CUQt1z7D.mjs.map +1 -0
  46. package/.output/server/chunks/build/monitor-yNoV98rf.mjs +1 -0
  47. package/.output/server/chunks/build/{pages-bWKy0ZsA.mjs → pages-DR2bzczM.mjs} +4 -3
  48. package/.output/server/chunks/build/pages-DR2bzczM.mjs.map +1 -0
  49. package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs +1 -0
  50. package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs.map +1 -1
  51. package/.output/server/chunks/build/{settings-C3T5hR2A.mjs → settings-Cr06lbRy.mjs} +26 -18
  52. package/.output/server/chunks/build/settings-Cr06lbRy.mjs.map +1 -0
  53. package/.output/server/chunks/build/teams-QR3BBF7A.mjs +1 -0
  54. package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +1 -1
  55. package/.output/server/chunks/build/tokens-DFvr_TLj.mjs +1 -0
  56. package/.output/server/chunks/build/tokens-DFvr_TLj.mjs.map +1 -1
  57. package/.output/server/chunks/build/{town-CKg6Qxba.mjs → town-BN4vQPb8.mjs} +6 -5
  58. package/.output/server/chunks/build/town-BN4vQPb8.mjs.map +1 -0
  59. package/.output/server/chunks/build/town-BUqRobze.mjs +1 -0
  60. package/.output/server/chunks/build/town-BUqRobze.mjs.map +1 -1
  61. package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs → useDaqStream-hwkhJHFU.mjs} +2 -2
  62. package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs.map → useDaqStream-hwkhJHFU.mjs.map} +1 -1
  63. package/.output/server/chunks/build/{useDcwStream-BkWDGaWp.mjs → useDcwStream-Bdew_yrr.mjs} +16 -1
  64. package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs.map +1 -0
  65. package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs → useDeviceTwins-C6EBg9oN.mjs} +2 -2
  66. package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs.map → useDeviceTwins-C6EBg9oN.mjs.map} +1 -1
  67. package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs → useOpsLog-DdCqKVVG.mjs} +2 -2
  68. package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs.map → useOpsLog-DdCqKVVG.mjs.map} +1 -1
  69. package/.output/server/chunks/build/users-4FZ0yFUO.mjs +1 -0
  70. package/.output/server/chunks/build/users-4FZ0yFUO.mjs.map +1 -1
  71. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs +1 -0
  72. package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +1 -1
  73. package/.output/server/chunks/routes/api/health.get.mjs +1 -0
  74. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  75. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  76. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  77. package/.output/server/chunks/routes/api/index.post.mjs +1 -0
  78. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  79. package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -0
  80. package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
  81. package/.output/server/chunks/routes/api/metrics.mjs +1 -0
  82. package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
  83. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
  84. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  85. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
  86. package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
  87. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
  88. package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
  89. package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
  90. package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
  91. package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
  92. package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
  93. package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
  94. package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
  95. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
  96. package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
  97. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
  98. package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
  99. package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
  100. package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
  101. package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
  102. package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
  103. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
  104. package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
  105. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
  106. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  107. package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
  108. package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
  109. package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
  110. package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
  111. package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
  112. package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
  113. package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
  114. package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
  115. package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
  116. package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
  117. package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
  118. package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
  119. package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
  120. package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
  121. package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
  122. package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
  123. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
  124. package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
  125. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
  126. package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
  127. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
  128. package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
  129. package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
  130. package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
  131. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
  132. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
  133. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
  134. package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
  135. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
  136. package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
  137. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -0
  138. package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
  139. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -0
  140. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
  141. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -0
  142. package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
  143. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -0
  144. package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
  145. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -0
  146. package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
  147. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -0
  148. package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
  149. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -0
  150. package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
  151. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
  152. package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
  153. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
  154. package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
  155. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
  156. package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
  157. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
  158. package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
  159. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -0
  160. package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
  161. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
  162. package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
  163. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
  164. package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
  165. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
  166. package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
  167. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -0
  168. package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
  169. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
  170. package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
  171. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -0
  172. package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
  173. package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
  174. package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
  175. package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
  176. package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
  177. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -0
  178. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
  179. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
  180. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
  181. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
  182. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
  183. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
  184. package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
  185. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
  186. package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
  187. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -0
  188. package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
  189. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
  190. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
  191. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
  192. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
  193. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
  194. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
  195. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
  196. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
  197. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
  198. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
  199. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
  200. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
  201. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
  202. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
  203. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
  204. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
  205. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
  206. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
  207. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
  208. package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
  209. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
  210. package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
  211. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
  212. package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
  213. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -0
  214. package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
  215. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
  216. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
  217. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
  218. package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
  219. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
  220. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
  221. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -0
  222. package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
  223. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
  224. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  225. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -0
  226. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
  227. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
  228. package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
  229. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
  230. package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
  231. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -0
  232. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
  233. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
  234. package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
  235. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -0
  236. package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
  237. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
  238. package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
  239. package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
  240. package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
  241. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -0
  242. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  243. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -0
  244. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
  245. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -0
  246. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
  247. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -0
  248. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
  249. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -0
  250. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
  251. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -0
  252. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
  253. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -0
  254. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
  255. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -0
  256. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
  257. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -0
  258. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
  259. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -0
  260. package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
  261. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -0
  262. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
  263. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -0
  264. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
  265. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -0
  266. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
  267. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -0
  268. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
  269. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -0
  270. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
  271. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -0
  272. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
  273. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -0
  274. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
  275. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -0
  276. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
  277. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -0
  278. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
  279. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +31 -0
  280. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -0
  281. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -0
  282. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
  283. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -0
  284. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
  285. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -0
  286. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
  287. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -0
  288. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
  289. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -0
  290. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
  291. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -0
  292. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
  293. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -0
  294. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
  295. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -0
  296. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
  297. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -0
  298. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
  299. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -0
  300. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
  301. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -0
  302. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
  303. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -0
  304. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
  305. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -0
  306. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
  307. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -0
  308. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -0
  310. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -0
  312. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -0
  314. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
  315. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -0
  316. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
  317. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -0
  318. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
  319. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -0
  320. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
  321. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -0
  322. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
  323. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -0
  324. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
  325. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -0
  326. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -0
  328. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -0
  330. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -0
  332. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -0
  334. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
  335. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -0
  336. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
  337. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -0
  338. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
  339. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -0
  340. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
  341. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +1 -0
  342. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +1 -1
  343. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -0
  344. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
  345. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -0
  346. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -0
  348. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
  349. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -0
  350. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
  351. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -0
  352. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
  353. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -0
  354. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
  355. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -0
  356. package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
  357. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -0
  358. package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
  359. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -0
  360. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -0
  362. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
  363. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -0
  364. package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
  365. package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
  366. package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
  367. package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -0
  368. package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
  369. package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -0
  370. package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
  371. package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -0
  372. package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
  373. package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
  374. package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
  375. package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -0
  376. package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
  377. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -0
  378. package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
  379. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
  380. package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
  381. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -0
  382. package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
  383. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
  384. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  385. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -0
  386. package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
  387. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -0
  388. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  389. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -0
  390. package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
  391. package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -0
  392. package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
  393. package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
  394. package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
  395. package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -0
  396. package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
  397. package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
  398. package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
  399. package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
  400. package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
  401. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -0
  402. package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
  403. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
  404. package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
  405. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
  406. package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
  407. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -0
  408. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
  409. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -0
  410. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
  411. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -0
  412. package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
  413. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
  414. package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
  415. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -0
  416. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
  417. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -0
  418. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
  419. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
  420. package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
  421. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
  422. package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
  423. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
  424. package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
  425. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
  426. package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
  427. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
  428. package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
  429. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
  430. package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
  431. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
  432. package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
  433. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
  434. package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
  435. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -0
  436. package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
  437. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
  438. package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
  439. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
  440. package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
  441. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
  442. package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
  443. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
  444. package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
  445. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
  446. package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
  447. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
  448. package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
  449. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
  450. package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
  451. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
  452. package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
  453. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -0
  454. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
  455. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
  456. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
  457. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
  458. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
  459. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
  460. package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
  461. package/.output/server/chunks/routes/renderer.mjs +1 -1
  462. package/.output/server/chunks/virtual/entry.mjs +287 -85
  463. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  464. package/.output/server/index.mjs +1 -0
  465. package/.output/server/package.json +1 -1
  466. package/README-zh.md +434 -430
  467. package/README.md +5 -1
  468. package/app/components/workshop/DeviceTwinPanel.vue +34 -0
  469. package/app/components/workshop/town/TownView.vue +5 -0
  470. package/app/composables/workshop/useDcwStream.ts +15 -1
  471. package/app/config/schema.ts +54 -0
  472. package/app/pages/dcw/[id].vue +57 -0
  473. package/app/pages/settings.vue +2 -1
  474. package/config.yml +58 -1
  475. package/i18n/dicts/_en.json +56 -2
  476. package/i18n/dicts/dcwDetail.json +9 -1
  477. package/i18n/dicts/deviceTwinPanel.json +2 -1
  478. package/i18n/dicts/settings.json +48 -1
  479. package/i18n/locales/en.ts +139 -38
  480. package/i18n/locales/zh-CN.ts +139 -38
  481. package/package.json +1 -1
  482. package/scripts/_dbg-agent-dcw-rw.ts +131 -0
  483. package/scripts/_dbg-config-smoke.ts +28 -0
  484. package/scripts/_dbg-dcw-read-rest.mjs +103 -0
  485. package/scripts/_dbg-dcw-read-toolface.ts +13 -0
  486. package/scripts/_dbg-dcw-read-ui.mjs +74 -0
  487. package/scripts/_dbg-plugin-ui-wizard.mjs +125 -0
  488. package/scripts/test-config-precedence.ts +124 -0
  489. package/scripts/test-dcw-read.ts +153 -0
  490. package/server/api/workshop/dcw/[id]/read.post.ts +18 -0
  491. package/server/api/workshop/ws.ts +6 -4
  492. package/server/data/daqs.json +55 -9
  493. package/server/data/dcw-rollback.json +221 -1
  494. package/server/data/dcw-runs.json +41 -18
  495. package/server/data/dcw-writes.json +264 -0
  496. package/server/data/dcws.json +646 -4
  497. package/server/data/line-runs.json +12 -1
  498. package/server/plugins/backup.ts +7 -5
  499. package/server/plugins/retention.ts +59 -57
  500. package/server/plugins/workshop.ts +5 -4
  501. package/server/services/workshop/agents/industrial-tools.ts +50 -1
  502. package/server/services/workshop/agents/omp-agent.ts +10 -8
  503. package/server/services/workshop/agents/tool-approvals.ts +175 -174
  504. package/server/services/workshop/daq/alarm-notify.ts +102 -100
  505. package/server/services/workshop/daq/bus/mqtt.adapter.ts +14 -15
  506. package/server/services/workshop/daq/storage/sqlite.adapter.ts +5 -4
  507. package/server/services/workshop/daq/storage/timescale.adapter.ts +5 -4
  508. package/server/services/workshop/db/retention.ts +49 -50
  509. package/server/services/workshop/dcw/dcw-controller.ts +56 -1
  510. package/server/services/workshop/dcw/dcw-node.ts +233 -200
  511. package/server/services/workshop/dcw/dcw-runtime.ts +46 -9
  512. package/server/services/workshop/dcw/drivers.ts +98 -0
  513. package/server/services/workshop/dcw/recipe-rollback-manager.ts +16 -15
  514. package/server/services/workshop/logger.ts +65 -58
  515. package/server/services/workshop/runtime/embedding-provider.ts +9 -5
  516. package/server/services/workshop/runtime/manager.ts +16 -7
  517. package/server/services/workshop/runtime/memory.ts +14 -7
  518. package/server/services/workshop/settings.ts +143 -0
  519. package/shared/config/engine.mjs +6 -2
  520. package/shared/config/schema.json +48 -1
  521. package/shared/dcw-protocol.ts +21 -0
  522. package/.output/public/_nuxt/BD9D9pl4.js +0 -1
  523. package/.output/public/_nuxt/BxD8Fg_Z.js +0 -2
  524. package/.output/public/_nuxt/CwcOEM8m.js +0 -1
  525. package/.output/public/_nuxt/TownView.CI2Wpzty.css +0 -1
  526. package/.output/public/_nuxt/_id_.Ci4u30cR.css +0 -1
  527. package/.output/public/_nuxt/builds/meta/221de779-a113-4232-b9a1-31a614f5e3c7.json +0 -1
  528. package/.output/public/_nuxt/settings.BG0K9_MG.css +0 -1
  529. package/.output/server/chunks/build/_id_-CmKAEFHV.mjs.map +0 -1
  530. package/.output/server/chunks/build/_id_-xR3AChMO.mjs.map +0 -1
  531. package/.output/server/chunks/build/daq-Boz_dlAQ.mjs.map +0 -1
  532. package/.output/server/chunks/build/dcw-wTRwBAUi.mjs.map +0 -1
  533. package/.output/server/chunks/build/logs-Cdi-eXlN.mjs.map +0 -1
  534. package/.output/server/chunks/build/pages-bWKy0ZsA.mjs.map +0 -1
  535. package/.output/server/chunks/build/settings-C3T5hR2A.mjs.map +0 -1
  536. package/.output/server/chunks/build/town-CKg6Qxba.mjs.map +0 -1
  537. package/.output/server/chunks/build/useDcwStream-BkWDGaWp.mjs.map +0 -1
@@ -1 +1 @@
1
- import{C as e,F as t,G as n,H as r,Ht as i,St as a,Ut as o,Wt as s,a as c,b as l,et as u,f as d,ft as ee,g as f,h as p,m as te,mt as m,nt as h,p as g,rt as _,t as v,x as y,z as ne}from"./BSCpFtzG.js";import{B as re,F as ie,I as b,L as x}from"./2LwEn9gX.js";import{n as ae}from"./uBbDCfTz.js";import{t as oe}from"./ubPfs9mQ.js";import{n as se}from"./BeIfu4N3.js";import{r as S}from"./W1E3-5ML.js";import{t as ce}from"./C9f8QMp12.js";import{t as le}from"./CNs_Ozdc2.js";import{t as ue}from"./B0haAGoq.js";import{a as de,i as fe,n as pe,r as me,t as he}from"./CwS_UHeH.js";import{t as ge}from"./ClptO7LA.js";import{t as _e}from"./dt2tKE95.js";import{t as ve}from"./DRlJ2-4p.js";import{t as ye}from"./ChEKFMxj.js";var be={class:`page`},xe={class:`aw-page-head`},Se={class:`sub`},Ce={class:`badges mono`},we=[`title`],Te=[`title`],Ee={class:`txt`},De={class:`mono`},Oe={key:1,class:`infra-banner`},ke={class:`txt`},Ae={key:2,class:`infra-banner`},je={class:`txt`},Me=[`disabled`],Ne={key:3,class:`alarm-bar`},Pe={class:`bar-label`},Fe={class:`mono`},Ie={class:`alarm-scroll`},Le=[`title`],Re={class:`mono dim`},ze={class:`mono`},Be={key:0,class:`esc mono`},Ve=[`onClick`],He={class:`aw-tile ctrl-card`},Ue={class:`ctrl-row`},We={class:`ctrl-left`},Ge=[`title`],Ke={class:`cycle mono`},qe=[`title`],Je={class:`ctrl-right`},Ye={class:`ctrl-metrics mono`},Xe=[`title`],Ze=[`title`],Qe=[`title`],$e=[`title`],et={class:`line-strip`},tt={class:`strip-label`},nt={class:`mono`},rt={class:`strip-scroll`},it={key:0,class:`lp-run`},at={key:1,class:`lp-idle`},ot={class:`lp-idle`},st={class:`modal`},ct={class:`m-title`},lt={class:`seg-row`},ut={class:`f-grid`},dt={class:`f`},ft=[`value`],pt={class:`f`},mt=[`placeholder`],ht={key:0,class:`f`},gt=[`placeholder`],_t={class:`f-grid`},vt={class:`f`},yt=[`value`],bt={key:0,class:`f-grid driver-form`},xt={key:0},St=[`onUpdate:modelValue`],Ct=[`value`],wt=[`onUpdate:modelValue`,`type`,`placeholder`],Tt={key:2,class:`hint`},Et={class:`test-row`},Dt=[`disabled`],Ot={key:1,class:`m-err`},kt={class:`m-actions`},At=[`disabled`,`title`],jt={class:`modal`},Mt={class:`m-title`},Nt={class:`sec-label`},Pt={class:`tpl-table`},Ft={class:`mono dim`},It={class:`mono range`},Lt={class:`right actions`},Rt=[`onClick`],zt=[`onClick`],Bt={key:0},Vt={colspan:`3`,class:`empty`},Ht={class:`sec-label`},Ut={class:`f-grid`},Wt={class:`f`},Gt=[`placeholder`],Kt={class:`f`},qt={class:`f`},Jt=[`placeholder`],Yt={class:`f`},Xt=[`placeholder`],Zt={class:`f`},Qt={class:`f`},$t={class:`f`},en={class:`f`},tn=[`value`],nn={class:`f`},rn={class:`hint`},an={class:`f`},on={class:`hint`},sn={key:0,class:`m-err`},cn={class:`m-actions`},ln=[`disabled`],un={class:`sec-label`},dn={class:`tpl-table`},fn={class:`mono dim`},pn={class:`mono range`},mn={class:`right actions`},hn=[`onClick`],gn={class:`aw-tile opt-card`},_n={class:`opt-count mono`},vn={class:`opt-filters`},yn={value:``},bn=[`value`],xn={value:``},Sn=[`value`],Cn={key:0,class:`opt-empty`},wn={class:`opt-list`},Tn={class:`opt-line1`},En={class:`opt-node`},Dn={class:`mono opt-params`},On={class:`mono opt-time`},kn=[`disabled`,`onClick`],An=[`onClick`],jn={class:`opt-line2 mono`},Mn={key:1,class:`opt-open-hint`},Nn={key:2,class:`opt-agg`},Pn={key:3,class:`opt-agg`},Fn={key:0,class:`opt-series`},In={class:`opt-spark`,viewBox:`0 0 240 36`,preserveAspectRatio:`none`},Ln=[`points`],Rn={class:`mono`},zn={key:0,class:`opt-empty`},Bn={class:`aw-tile table-card`},Vn={class:`tbl-toolbar`},Hn={class:`filters`},Un={class:`flt`},Wn={value:``},Gn=[`value`],Kn={value:`none`},qn={class:`flt`},Jn={value:``},Yn=[`value`],Xn={value:`none`},Zn=[`title`],Qn={value:``},$n={value:`on`},er={value:`off`},tr={class:`flt`},nr={value:``},rr={value:`ok`},ir={value:`warn`},ar={value:`alarm`},or={value:`offline`},sr={class:`flt`},cr={value:``},lr=[`value`],ur={class:`flt`},dr={value:``},fr=[`value`],pr=[`title`],mr={value:``},hr={value:`live`},gr={value:`hour`},_r={value:`day`},vr={value:`old`},yr={value:`never`},br={class:`flt`},xr=[`placeholder`],Sr={class:`count mono`},Cr={class:`ops-panels`},wr={class:`panel-head`},Tr={class:`panel-body`},Er={key:0,class:`panel-empty`},Dr={class:`mono dim`},Or={class:`mono`},kr={key:0,class:`esc mono`},Ar=[`onClick`],jr={class:`ops-panel event-panel`},Mr={class:`panel-head`},Nr={class:`panel-body`},Pr={key:0,class:`panel-empty`},Fr={class:`mono dim t`},Ir=[`title`],Lr={class:`nodes-table`},Rr=[`title`],zr=[`title`],Br={class:`right`},Vr={class:`mono dim`},Hr={class:`mono ch`},Ur=[`title`],Wr=[`title`],Gr={class:`trend-cell`},Kr=[`title`],qr=[`y1`,`y2`],Jr=[`y1`,`y2`],Yr=[`points`],Xr={class:`mono`},Zr={class:`mono`},Qr=[`title`],$r=[`value`,`title`,`onChange`],ei={value:``},ti=[`value`],ni=[`title`],ri={key:1,class:`run-pill na`},ii={class:`prod-cell`},ai=[`title`],oi=[`title`],si={key:1,class:`dim`},ci=[`value`,`title`,`onChange`],li={value:``},ui=[`value`],di={class:`right`},fi=[`title`,`onClick`],pi={key:0},mi={colspan:`11`},hi={class:`pane-empty`,style:{"min-height":`120px`}},gi={class:`pe-sub`},_i={key:1},vi={colspan:`11`},yi={class:`pane-empty`,style:{"min-height":`90px`}},bi={class:`pe-sub`},xi={key:6,class:`err`},Si=120,Ci=26,C=v(e({__name:`index`,setup(e){let{t:v}=se();le({layout:`default`}),ae({title:()=>v(`titles.daq`)});let C=he(),w=ue(),wi=_e(),Ti=d(()=>w.lines.some(e=>w.lineStateOf(e.id).active));async function Ei(e,t){let n=t.target.value;try{await C.patchNode(e,{lineId:n});let t=C.nodes.find(t=>t.id===e);t&&(t.lineId=n)}catch(e){S.error(e instanceof Error?e.message:String(e))}}async function Di(e,t){let n=t.target.value;try{await C.bindNode(e,n||null)}catch(e){S.error(e instanceof Error?e.message:String(e))}}async function Oi(e){let t=!e.enabled;try{await C.patchNode(e.id,{enabled:t}),e.enabled=t,t||(e.state=`offline`),S.success(v(t?`daq.k1nodestart147`:`daq.k1nodestop146`))}catch(e){S.error(e instanceof Error?e.message:String(e))}}function ki(e){if(!e.lineId)return null;let t=w.lineStateOf(e.lineId);return!t.active||!t.recipeId?null:w.recipes.find(e=>e.id===t.recipeId)?.daqWindows?.find(t=>t.nodeId===e.id)??null}function Ai(e){let t=ki(e);return!t||e.value==null?!1:t.min!=null&&e.value<t.min||t.max!=null&&e.value>t.max}let ji=ve();function Mi(e){return{write:v(`logs.kind.write`),manual:v(`logs.kind.manual`),alarm:v(`logs.kind.alarm`),line:v(`logs.kind.line`),recipe:v(`logs.kind.recipe`),rollback:v(`logs.kind.rollback`),daq:v(`logs.kind.daq`),system:v(`logs.kind.system`)}[e]??(e||v(`logs.kind.system`))}function Ni(e){let t=new Date(e);return Number.isFinite(t.getTime())?`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`:``}function Pi(e){let t=e.filter(Number.isFinite);if(t.length<2)return``;let n=Math.min(...t),r=Math.max(...t)-n||1;return t.map((e,i)=>`${(i/(t.length-1)*Si).toFixed(1)},${(Ci-(e-n)/r*24-1).toFixed(1)}`).join(` `)}function T(e,t){if(t==null||!Number.isFinite(t))return null;let n=e.filter(Number.isFinite);if(n.length<2)return null;let r=Math.min(...n,t),i=Math.max(...n,t)-r||1;return Number((Ci-(t-r)/i*24-1).toFixed(1))}function E(e){let t=ki(e);return t&&(t.min!=null||t.max!=null)?{min:t.min,max:t.max,source:`recipe`}:e.warnLow!=null||e.warnHigh!=null?{min:e.warnLow,max:e.warnHigh,source:`warn`}:{min:null,max:null,source:`warn`}}async function Fi(e){try{await C.ackAlarm(e),S.success(v(`daq.k1acked144`))}catch(e){S.error(e instanceof Error?e.message:String(e))}}let Ii=null;ne(()=>{wi.ensureConnected(),Ii=C.ensureWsFeed(),ji.ensureLive(),C.load(),C.fetchAlarms(),w.load(),I.load(),w.loadOptimizations(),ye(()=>{C.load(),C.fetchAlarms()},5e3,{bgMs:3e4}),ye(()=>{w.load()},15e3,{bgMs:6e4})}),t(()=>{Ii?.()});let D=ee({lineId:``,deviceId:``,template:``,driver:``,lineRun:``,state:``,time:``,search:``}),Li=d(()=>!!(D.lineId||D.deviceId||D.template||D.driver||D.lineRun||D.state||D.time||D.search.trim()));function Ri(){D.lineId=``,D.deviceId=``,D.template=``,D.driver=``,D.lineRun=``,D.state=``,D.time=``,D.search=``}let zi=d(()=>{let e=new Map;for(let t of C.nodes)e.set(t.templateRef,(e.get(t.templateRef)??0)+1);return[...e.entries()].map(([e,t])=>({ref:e,count:t,label:ba(e)}))}),Bi=d(()=>{let e=new Map;for(let t of C.nodes)e.set(t.driver,(e.get(t.driver)??0)+1);return[...e.entries()].map(([e,t])=>({kind:e,count:t,label:C.meta.drivers.find(t=>t.kind===e)?.label??e}))});function Vi(e){if(!e.lastAt)return`never`;let t=Date.now()-Date.parse(e.lastAt);return t<=3e5?`live`:t<=36e5?`hour`:t<=864e5?`day`:`old`}function Hi(e){return!D.time||Vi(e)===D.time}function Ui(e){let t=D.search.trim().toLowerCase();return!t||e.name.toLowerCase().includes(t)||e.id.toLowerCase().includes(t)}let O=m(!1),Wi=m(!1),k=m(``),A=m(``),j=m({}),Gi=m(``),Ki=d(()=>w.recipes.filter(e=>!k.value||e.lineId===k.value));function qi(e){return{open:`daq.k1optst001`,judged:`daq.k1optst008`,"judged-keep":`daq.k1optst002`,"rolled-back":`daq.k1optst003`,superseded:`daq.k1optst004`,"superseded-manual":`daq.k1optst005`,"closed-line-stop":`daq.k1optst006`,failed:`daq.k1optst007`}[e]??`daq.k1optst001`}async function Ji(){O.value=!O.value,O.value&&(Wi.value=!0,await M())}async function M(){await w.loadOptimizations({lineId:k.value||void 0,recipeId:A.value||void 0})}function Yi(){A.value&&!Ki.value.some(e=>e.id===A.value)&&(A.value=``),M()}async function Xi(e){Gi.value=e;try{let t=await w.optimizationSeries(e);j.value={...j.value,[e]:t}}finally{Gi.value=``}}function Zi(e,t=240,n=36){let r=e.map(e=>e.value??e.avg??0).filter(Number.isFinite);if(r.length<2)return``;let i=Math.min(...r),a=Math.max(...r)-i||1;return r.map((e,o)=>`${o/(r.length-1)*t},${n-(e-i)/a*n}`).join(` `)}async function Qi(e){await w.rollbackOptimization(e),await M()}function $i(e){return e==null?`--`:String(Number(e.toFixed(2)))}let ea=d(()=>{let e=new Map;for(let t of C.nodes)t.deviceBindingId&&e.set(t.deviceBindingId,(e.get(t.deviceBindingId)??0)+1);return I.twins.filter(t=>e.has(t.id)).map(t=>({id:t.id,name:ua.get(t.id)??t.name,count:e.get(t.id)}))});function ta(e){if(!D.lineRun)return!0;let t=!!e.lineId&&w.lineStateOf(e.lineId).active;return D.lineRun===`on`?t:!t}let N=d(()=>w.lines.find(e=>e.id===D.lineId)??null),P=d(()=>N.value?w.lineStateOf(N.value.id):null);function na(e){if(!e.lastAt)return!0;let t=e.intervalMs??C.controller.defaultIntervalMs;return Date.now()-Date.parse(e.lastAt)>Math.max(t*4,12e3)}function ra(e){return e.enabled?e.lineId?w.lineStateOf(e.lineId).active?!C.controller.running||na(e)?`offline`:e.state:`idle`:`unassigned`:`disabled`}function ia(e){let t=ra(e);return t===`ok`||t===`warn`||t===`alarm`}let aa={ok:v(`daq.k41k5c062`),warn:v(`daq.k49z8v063`),alarm:v(`daq.k3xmid064`),offline:v(`daq.k44c2n065`),idle:v(`daq.k3ozyqz117`),disabled:v(`daq.k1disabl130`),unassigned:v(`daq.k3ootr6053`)};function oa(e){let t=ra(e);if(t===`offline`){let n=C.controller.running?v(`daq.k1staled129`,{p0:Math.round(Math.max((e.intervalMs??C.controller.defaultIntervalMs)*4,12e3)/1e3)}):v(`daq.k1gateoff140`);return{key:t,label:aa.offline,tip:n}}if(t===`idle`)return{key:t,label:aa.idle,tip:v(`daq.k1idlehin139`)};if((t===`ok`||t===`warn`||t===`alarm`)&&Ai(e)){let t=ki(e);return{key:`alarm`,label:v(`daq.k1l3pt51104`),tip:v(`daq.k1hrrqa1122`,{p0:t?.min??`-∞`,p1:t?.max??`+∞`,p2:``})}}return{key:t,label:aa[t],tip:``}}let F=d(()=>C.nodes.filter(e=>!(D.lineId&&(D.lineId===`none`?e.lineId:(e.lineId??``)!==D.lineId)||D.deviceId&&(D.deviceId===`none`?e.deviceBindingId:e.deviceBindingId!==D.deviceId)||D.template&&e.templateRef!==D.template||D.driver&&e.driver!==D.driver||!ta(e)||D.state&&ra(e)!==D.state||!Hi(e)||!Ui(e)))),sa=d(()=>{let e=new Map;for(let t of F.value)e.set(t.id,{pill:oa(t),alarm:Ai(t),live:ia(t),tpl:ba(t.templateRef)});return e}),ca={pill:{key:`offline`,label:``,tip:``},alarm:!1,live:!1,tpl:`-`},la=d(()=>F.value.map(e=>({n:e,c:sa.value.get(e.id)??ca}))),I=ge(),ua=new Map;u(()=>I.twins,e=>{for(let t of e)ua.set(t.id,t.name)},{immediate:!0,deep:!0});let da=d(()=>I.twins.filter(e=>e.kind!==`daq`&&!(e.modelRef??``).startsWith(`daq-`)&&!(e.modelRef??``).startsWith(`dcw-`))),fa=e=>e==null?v(`daq.k9vnp9h124`,{p0:C.controller.defaultIntervalMs}):`${e}ms`,pa=e=>e==null?v(`daq.k9vnp9h124`,{p0:C.controller.defaultPublishIntervalMs}):e===0?v(`daq.k41mvv078`):`${e}ms`,L=m(!1),R=m(`mock`),z=m(me[0]?.key??`temp-tc`),B=m(`modbus-tcp`),V=m(``),ma=m(null),H=m({}),ha=ee({kind:`none`,scale:1,offset:0}),U=m(!1),W=m(null),G=m(!1),K=m(``),ga=d(()=>pe.find(e=>e.kind===B.value)),q=d(()=>ga.value?.configFields??[]),_a=e=>C.meta.drivers.find(t=>t.kind===e)?.status!==`planned`&&C.meta.driverAvailable?.[e]!==!1;u(B,()=>{let e={};for(let t of q.value)t.default!==void 0&&(e[t.key]=t.default);H.value=e,W.value=null},{immediate:!0});async function va(){U.value=!0,W.value=null;try{W.value=await C.testDriver(B.value,H.value)}catch(e){W.value={ok:!1,message:e instanceof Error?e.message:String(e)}}finally{U.value=!1}}async function ya(){G.value=!0,K.value=``;try{let e=ha.kind===`linear`?{kind:`linear`,scale:Number(ha.scale),offset:Number(ha.offset)}:void 0;if(R.value===`mock`)await C.createFromTemplate(`daq-${z.value}`,{name:V.value?{name:V.value}.name:void 0,transform:e});else{for(let e of q.value)if(e.required&&!H.value[e.key]&&H.value[e.key]!==0)throw Error(v(`daq.kyuadl0125`,{p0:e.label}));let t=C.templates.find(e=>e.key===z.value);await C.createFromTemplate(`daq-${z.value}`,{name:V.value||void 0,driver:B.value,driverConfig:{...H.value},transform:e,intervalMs:ma.value,unit:t?.unit,min:t?.min,max:t?.max,decimals:t?.decimals})}L.value=!1,V.value=``,W.value=null}catch(e){K.value=e instanceof Error?e.message:String(e)}finally{G.value=!1}}function ba(e){let t=C.templates.find(t=>t.key===de(e));return t?`${t.name} · ${t.ch}`:e||`-`}let xa=m(!1),J=m(null),Y=m(!1),X=m(``),Z=m(``),Q=ee({name:``,ch:``,code:``,unit:``,min:0,max:100,base:50,amp:2,decimals:2,icon:`thermo`}),Sa={thermo:v(`daq.k422b8079`),pressure:v(`daq.k3x6ff080`),tension:v(`daq.k3z9xc081`),encoder:v(`daq.k3subk4082`),camera:v(`daq.k47atw083`),gateway:v(`daq.kz7yhbj084`)},Ca=d(()=>C.templates.filter(e=>!e.builtin)),wa=d(()=>C.templates.filter(e=>e.builtin));function Ta(e,t=!1){Q.name=t?v(`daq.k2hbo3c126`,{p0:e.name}):e.name,Q.ch=e.ch,Q.code=e.code,Q.unit=e.unit,Q.min=e.min,Q.max=e.max,Q.base=e.base,Q.amp=e.amp,Q.decimals=e.decimals,Q.icon=e.icon}function Ea(){J.value=null,X.value=``,Z.value=``,Ta({key:``,name:``,code:``,ch:``,unit:``,base:50,amp:2,min:0,max:100,decimals:2,icon:`thermo`})}function Da(e){J.value=e.key,X.value=``,Ta(e)}function Oa(e){J.value=null,X.value=``,Ta(e,!0)}async function ka(){Y.value=!0,X.value=``;try{let e=e=>{let t=Number(e);return e===``||e==null||!Number.isFinite(t)?void 0:t},t={name:Q.name.trim(),ch:Q.ch.trim()||void 0,code:Q.code.trim()||void 0,unit:Q.unit.trim(),min:e(Q.min),max:e(Q.max),base:e(Q.base),amp:e(Q.amp),decimals:e(Q.decimals),icon:Q.icon};J.value?await C.updateTemplate(J.value,t):await C.createTemplate(t),Ea()}catch(e){X.value=e instanceof Error?e.message:String(e)}finally{Y.value=!1}}async function Aa(e){if(Z.value!==e.key){Z.value=e.key;return}try{await C.removeTemplate(e.key)}catch(e){X.value=e instanceof Error?e.message:String(e)}finally{Z.value=``}}let ja=e=>C.meta.drivers.find(t=>t.kind===e)?.status===`planned`,$=m(!1);async function Ma(){$.value=!0;try{await C.reconnectInfra()}catch{}finally{$.value=!1}}return(e,t)=>{let u=oe,d=ce;return r(),f(`div`,be,[g(`div`,xe,[g(`div`,null,[t[36]||=g(`p`,{class:`aw-kicker`},` AGENTWORKSHOP / DAQ CONSOLE `,-1),g(`h1`,null,s(e.$t(`daq.k1emg364011`)),1),g(`p`,Se,s(e.$t(`daq.k1wmg2bz012`)),1)]),g(`div`,Ce,[g(`span`,{class:`badge`,title:e.$t(`daq.k1tsdbtip133`)},`TSDB · `+s(a(C).meta.tsdb),9,we),g(`span`,{class:`badge`,title:e.$t(`daq.k1queuet134`)},`QUEUE · `+s(a(C).meta.queue),9,Te)])]),a(C).loaded&&N.value&&P.value?(r(),f(`div`,{key:0,class:i([`infra-banner`,{good:P.value.active}])},[g(`span`,{class:i(P.value.active?`i-tabler-circle-check`:`i-tabler-info-circle`)},null,2),g(`span`,Ee,[P.value.active?(r(),f(c,{key:0},[l(s(e.$t(`daq.k3ktxbr085`))+s(N.value.name)+`」`+s(e.$t(`daq.k15lvw0o105`)),1),g(`b`,null,s(P.value.productName),1),t[37]||=l(` · Recipe:`,-1),g(`b`,null,s(P.value.recipeName),1),g(`small`,De,s(e.$t(`daq.k400lb086`))+` `+s(P.value.runId?.slice(0,8))+` · `+s(e.$t(`daq.k3zkt2106`))+` `+s(P.value.startedAt?.slice(11,19))+` `+s(e.$t(`daq.k69vag8108`))+` `+s(P.value.taggedSamples)+` `+s(e.$t(`daq.k4118o092`)),1)],64)):(r(),f(c,{key:1},[l(s(e.$t(`daq.k3ktxbr085`))+s(N.value.name)+`」`+s(e.$t(`daq.k12uge2o107`)),1)],64))]),y(u,{class:`pill-btn`,to:`/dcw/${N.value.id}`},{default:h(()=>[l(s(P.value.active?e.$t(`daq.k1ukoy0v093`):e.$t(`daq.k1cg78i8109`)),1)]),_:1},8,[`to`])],2)):a(C).loaded&&!Ti.value?(r(),f(`div`,Oe,[t[38]||=g(`span`,{class:`i-tabler-info-circle`},null,-1),g(`span`,ke,[l(s(e.$t(`daq.k19onw5w013`)),1),y(u,{to:`/dcw`},{default:h(()=>[l(s(e.$t(`daq.k1b2tk5c014`)),1)]),_:1}),l(s(e.$t(`daq.k1u9wnlg015`)),1)])])):p(``,!0),a(C).meta.infra?.degraded?(r(),f(`div`,Ae,[t[39]||=g(`span`,{class:`i-tabler-alert-triangle`},null,-1),g(`span`,je,s(a(C).meta.infra.warning),1),g(`button`,{class:`pill-btn`,disabled:$.value,onClick:Ma},s($.value?e.$t(`daq.k1ld43ur094`):e.$t(`daq.kzg9805110`)),9,Me)])):p(``,!0),a(C).alarms.length?(r(),f(`div`,Ne,[g(`span`,Pe,[t[40]||=g(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),l(` `+s(e.$t(`daq.k1alarm141`))+` `,1),g(`b`,Fe,s(a(C).alarms.length),1)]),g(`div`,Ie,[(r(!0),f(c,null,n(a(C).alarms,t=>(r(),f(`span`,{key:t.id,class:`alarm-item`,title:e.$t(`daq.k1esc143`,{p0:t.escalation})},[g(`b`,null,s(t.nodeName),1),g(`span`,Re,s(t.metric),1),g(`span`,ze,s(t.value)+` `+s(t.rule===`lt-min`?`<`:`>`)+` `+s(t.threshold),1),t.escalation>0?(r(),f(`small`,Be,`+`+s(t.escalation),1)):p(``,!0),g(`button`,{class:`mini-btn ack`,onClick:e=>Fi(t.id)},s(e.$t(`daq.k1ack142`)),9,Ve)],8,Le))),128))])])):p(``,!0),g(`section`,He,[g(`div`,Ue,[g(`div`,We,[g(`button`,{class:i([`aw-pill`,{running:a(C).controller.running}]),title:e.$t(`daq.k1snap145`),onClick:t[0]||=e=>a(C).controllerAction(a(C).controller.running?`pause`:`resume`)},[g(`span`,{class:i(a(C).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),l(` `+s(a(C).controller.running?e.$t(`daq.kpui00095`):e.$t(`daq.knxpdpt111`)),1)],10,Ge),g(`label`,Ke,[l(s(e.$t(`daq.k1ifahxj016`))+` `,1),_(g(`input`,{"onUpdate:modelValue":t[1]||=e=>a(C).controller.defaultIntervalMs=e,type:`number`,min:`200`,max:`60000`,step:`100`,onChange:t[2]||=e=>a(C).controllerAction(`config`,a(C).controller.defaultIntervalMs)},null,544),[[x,a(C).controller.defaultIntervalMs,void 0,{number:!0}]]),t[41]||=l(`ms `,-1)]),g(`label`,{class:`cycle mono`,title:e.$t(`daq.k1e8lcoo001`)},[l(s(e.$t(`daq.k1if98n0017`))+` `,1),_(g(`input`,{"onUpdate:modelValue":t[3]||=e=>a(C).controller.defaultPublishIntervalMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,onChange:t[4]||=e=>a(C).controllerAction(`config`,a(C).controller.defaultIntervalMs,a(C).controller.defaultPublishIntervalMs)},null,544),[[x,a(C).controller.defaultPublishIntervalMs,void 0,{number:!0}]]),t[42]||=l(`ms `,-1)],8,qe)]),g(`div`,Je,[g(`span`,Ye,[g(`span`,null,s(e.$t(`daq.k45uio067`))+` `+s(a(C).controller.nodesOnline)+`/`+s(a(C).controller.nodesTotal),1),t[43]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{title:e.$t(`daq.k1yztsu4002`)},s(e.$t(`daq.k3xagp087`))+` `+s(a(C).meta.produced),9,Xe),t[44]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{title:e.$t(`daq.ko09iha003`)},s(e.$t(`daq.k427eu088`))+` `+s(a(C).meta.consumed),9,Ze),t[45]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{class:i({warn:(a(C).meta.dropped??0)>0}),title:e.$t(`daq.k1droptip135`)},s(e.$t(`daq.k3w8go089`))+` `+s(a(C).meta.dropped),11,Qe),t[46]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{title:e.$t(`daq.kj1jbmw004`)},s(e.$t(`daq.k3wusd090`))+` `+s(a(C).meta.samplesStored),9,$e)]),g(`button`,{class:`aw-pill outline add-btn`,onClick:t[5]||=e=>{xa.value=!0,Ea()}},[t[47]||=g(`span`,{class:`i-tabler-adjustments-horizontal`},null,-1),l(` `+s(e.$t(`daq.k1f5cv0s018`)),1)]),g(`button`,{class:`aw-pill add-btn`,onClick:t[6]||=e=>L.value=!0},[t[48]||=g(`span`,{class:`i-tabler-plus`},null,-1),l(` `+s(e.$t(`daq.k1fn0ukb019`)),1)])])]),g(`div`,et,[g(`span`,tt,[t[49]||=g(`span`,{class:`i-tabler-route`},null,-1),l(` `+s(e.$t(`daq.k1b2o3b6020`)),1),g(`small`,nt,s(a(w).lines.length),1)]),g(`div`,rt,[(r(!0),f(c,null,n(a(w).lines,n=>(r(),te(u,{key:n.id,class:i([`line-pill`,{on:a(w).lineStateOf(n.id).active}]),style:o({"--lc":n.color}),to:`/dcw/${n.id}`,title:a(w).lineStateOf(n.id).active?e.$t(`daq.k3v957u120`,{p0:n.name,p1:a(w).lineStateOf(n.id).productName,p2:a(w).lineStateOf(n.id).recipeName}):e.$t(`daq.k1x7jnru121`,{p0:n.name})},{default:h(()=>[t[50]||=g(`span`,{class:`lp-dot`},null,-1),g(`b`,null,s(n.name),1),a(w).lineStateOf(n.id).active?(r(),f(`small`,it,s(a(w).lineStateOf(n.id).recipeName??e.$t(`daq.k3vp67i096`)),1)):(r(),f(`small`,at,s(e.$t(`daq.k3zgkk021`)),1))]),_:2},1032,[`class`,`style`,`to`,`title`]))),128)),a(w).lines.length===0?(r(),te(u,{key:0,class:`line-pill`,to:`/dcw`},{default:h(()=>[t[51]||=g(`span`,{class:`lp-dot`},null,-1),g(`b`,null,s(e.$t(`daq.k1el12b1022`)),1),g(`small`,ot,s(e.$t(`daq.k8jxxe8023`)),1)]),_:1})):p(``,!0)])])]),L.value?(r(),f(`div`,{key:4,class:`modal-mask`,onClick:t[14]||=re(e=>L.value=!1,[`self`])},[g(`div`,st,[g(`h3`,ct,s(e.$t(`daq.k19rioqa024`)),1),g(`div`,lt,[g(`button`,{class:i([`seg`,{on:R.value===`mock`}]),onClick:t[7]||=e=>R.value=`mock`},s(e.$t(`daq.k1p5c1un025`)),3),g(`button`,{class:i([`seg`,{on:R.value===`real`}]),onClick:t[8]||=e=>R.value=`real`},s(e.$t(`daq.k1cbcp3o026`)),3)]),g(`div`,ut,[g(`label`,dt,[g(`span`,null,s(e.$t(`daq.k1fsgerc027`)),1),_(g(`select`,{"onUpdate:modelValue":t[9]||=e=>z.value=e,class:`inp`},[(r(!0),f(c,null,n(a(C).templates,t=>(r(),f(`option`,{key:t.key,value:t.key},s(t.name)+` · `+s(t.ch)+`(`+s(t.min)+`~`+s(t.max)+` `+s(t.unit)+`)`+s(t.builtin?``:e.$t(`daq.kr45rk9097`)),9,ft))),128))],512),[[b,z.value]])]),g(`label`,pt,[g(`span`,null,s(e.$t(`daq.k1ce2k1y028`)),1),_(g(`input`,{"onUpdate:modelValue":t[10]||=e=>V.value=e,class:`inp`,placeholder:e.$t(`daq.kgpxzy3005`)},null,8,mt),[[x,V.value]])]),R.value===`real`?(r(),f(`label`,ht,[g(`span`,null,s(e.$t(`daq.k13mfsfc029`)),1),_(g(`input`,{"onUpdate:modelValue":t[11]||=e=>ma.value=e,type:`number`,min:`200`,max:`60000`,step:`100`,class:`inp`,placeholder:e.$t(`daq.k1eg1000a136`)},null,8,gt),[[x,ma.value,void 0,{number:!0}]])])):p(``,!0)]),R.value===`real`?(r(),f(c,{key:0},[g(`div`,_t,[g(`label`,vt,[g(`span`,null,s(e.$t(`daq.k1kt87rx030`)),1),_(g(`select`,{"onUpdate:modelValue":t[12]||=e=>B.value=e,class:`inp`},[(r(!0),f(c,null,n(a(pe).filter(e=>e.status!==`planned`),t=>(r(),f(`option`,{key:t.kind,value:t.kind},s(t.label)+s(_a(t.kind)?``:e.$t(`daq.kjbqphp098`)),9,yt))),128))],512),[[b,B.value]])])]),q.value.length?(r(),f(`div`,bt,[(r(!0),f(c,null,n(q.value,e=>(r(),f(`label`,{key:e.key,class:`f`},[g(`span`,null,[l(s(e.label),1),e.required?(r(),f(`em`,xt,`*`)):p(``,!0)]),e.type===`select`?_((r(),f(`select`,{key:0,"onUpdate:modelValue":t=>H.value[e.key]=t,class:`inp`},[(r(!0),f(c,null,n(e.options,e=>(r(),f(`option`,{key:e.value,value:e.value},s(e.label),9,Ct))),128))],8,St)),[[b,H.value[e.key]]]):_((r(),f(`input`,{key:1,"onUpdate:modelValue":t=>H.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`inp`},null,8,wt)),[[ie,H.value[e.key]]]),e.hint?(r(),f(`small`,Tt,s(e.hint),1)):p(``,!0)]))),128))])):p(``,!0),g(`div`,Et,[g(`button`,{class:`pill-btn`,disabled:U.value,onClick:va},s(U.value?e.$t(`daq.k1fsh720099`):e.$t(`daq.k1fstglk112`)),9,Dt),W.value?(r(),f(`span`,{key:0,class:i([`test-result`,W.value.ok?`ok`:`bad`])},[l(s(W.value.ok?`✓`:`✗`)+` `+s(W.value.message),1),W.value.latencyMs==null?p(``,!0):(r(),f(c,{key:0},[l(`(`+s(W.value.latencyMs)+`ms)`,1)],64))],2)):p(``,!0)])],64)):p(``,!0),K.value?(r(),f(`p`,Ot,s(K.value),1)):p(``,!0),g(`div`,kt,[g(`button`,{class:`aw-pill outline`,onClick:t[13]||=e=>L.value=!1},s(e.$t(`daq.k3xdnn031`)),1),g(`button`,{class:`aw-pill`,disabled:G.value||R.value===`real`&&W.value!=null&&!W.value.ok,title:R.value===`real`&&!(W.value&&W.value.ok)?e.$t(`daq.k1needtst137`):``,onClick:ya},s(G.value?e.$t(`daq.k1bg4759100`):R.value===`real`?e.$t(`daq.k7pxjxo113`):e.$t(`daq.k1bge46t118`)),9,At)])])])):p(``,!0),xa.value?(r(),f(`div`,{key:5,class:`modal-mask`,onClick:t[25]||=re(e=>xa.value=!1,[`self`])},[g(`div`,jt,[g(`h3`,Mt,s(e.$t(`daq.k11mv96s032`)),1),g(`p`,Nt,s(e.$t(`daq.ktji4ky033`)),1),g(`table`,Pt,[g(`tbody`,null,[(r(!0),f(c,null,n(Ca.value,t=>(r(),f(`tr`,{key:t.key},[g(`td`,null,[g(`b`,null,s(t.name),1),g(`small`,Ft,s(t.code),1)]),g(`td`,It,s(t.min)+`~`+s(t.max)+` `+s(t.unit)+` · `+s(t.decimals)+` `+s(e.$t(`daq.k48oi091`)),1),g(`td`,Lt,[g(`button`,{class:`mini-btn`,onClick:e=>Da(t)},s(e.$t(`daq.k45eb0034`)),9,Rt),g(`button`,{class:`mini-btn danger`,onClick:e=>Aa(t)},s(Z.value===t.key?e.$t(`daq.k1hhheu3101`):e.$t(`daq.k3xakp114`)),9,zt)])]))),128)),Ca.value.length?p(``,!0):(r(),f(`tr`,Bt,[g(`td`,Vt,s(e.$t(`daq.kztvzbo035`)),1)]))])]),g(`p`,Ht,s(J.value?e.$t(`daq.k1iiph0s102`):e.$t(`daq.k1efixrj115`)),1),g(`div`,Ut,[g(`label`,Wt,[g(`span`,null,[l(s(e.$t(`daq.k3xhia036`)),1),t[52]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[15]||=e=>a(Q).name=e,class:`inp`,placeholder:e.$t(`daq.k5opd2t006`)},null,8,Gt),[[x,a(Q).name]])]),g(`label`,Kt,[g(`span`,null,[l(s(e.$t(`daq.k3x4ef037`)),1),t[53]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[16]||=e=>a(Q).unit=e,class:`inp`,placeholder:`如 %RH`},null,512),[[x,a(Q).unit]])]),g(`label`,qt,[g(`span`,null,s(e.$t(`daq.k1l477m0038`)),1),_(g(`input`,{"onUpdate:modelValue":t[17]||=e=>a(Q).ch=e,class:`inp`,placeholder:e.$t(`daq.kk8o4tl007`)},null,8,Jt),[[x,a(Q).ch]])]),g(`label`,Yt,[g(`span`,null,s(e.$t(`daq.k1ayxrqb039`)),1),_(g(`input`,{"onUpdate:modelValue":t[18]||=e=>a(Q).code=e,class:`inp`,placeholder:e.$t(`daq.kzn3l7l008`)},null,8,Xt),[[x,a(Q).code]])]),g(`label`,Zt,[g(`span`,null,[l(s(e.$t(`daq.k1l9jv5m040`)),1),t[54]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[19]||=e=>a(Q).min=e,type:`number`,class:`inp`},null,512),[[x,a(Q).min,void 0,{number:!0}]])]),g(`label`,Qt,[g(`span`,null,[l(s(e.$t(`daq.k1l9jv4p041`)),1),t[55]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[20]||=e=>a(Q).max=e,type:`number`,class:`inp`},null,512),[[x,a(Q).max,void 0,{number:!0}]])]),g(`label`,$t,[g(`span`,null,s(e.$t(`daq.k3mxmcx042`)),1),_(g(`input`,{"onUpdate:modelValue":t[21]||=e=>a(Q).decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[x,a(Q).decimals,void 0,{number:!0}]])]),g(`label`,en,[g(`span`,null,s(e.$t(`daq.k3xx56043`)),1),_(g(`select`,{"onUpdate:modelValue":t[22]||=e=>a(Q).icon=e,class:`inp`},[(r(!0),f(c,null,n(a(fe),e=>(r(),f(`option`,{key:e,value:e},s(Sa[e]),9,tn))),128))],512),[[b,a(Q).icon]])]),g(`label`,nn,[g(`span`,null,s(e.$t(`daq.k1f4eknv044`)),1),_(g(`input`,{"onUpdate:modelValue":t[23]||=e=>a(Q).base=e,type:`number`,class:`inp`},null,512),[[x,a(Q).base,void 0,{number:!0}]]),g(`small`,rn,s(e.$t(`daq.kytd15s045`)),1)]),g(`label`,an,[g(`span`,null,s(e.$t(`daq.k1f4ifpo046`)),1),_(g(`input`,{"onUpdate:modelValue":t[24]||=e=>a(Q).amp=e,type:`number`,class:`inp`},null,512),[[x,a(Q).amp,void 0,{number:!0}]]),g(`small`,on,s(e.$t(`daq.ksp2aji047`)),1)])]),X.value?(r(),f(`p`,sn,s(X.value),1)):p(``,!0),g(`div`,cn,[g(`button`,{class:`aw-pill outline`,onClick:Ea},s(e.$t(`daq.k48p40048`)),1),g(`button`,{class:`pill-btn`,disabled:Y.value,onClick:ka},s(Y.value?e.$t(`daq.k1b38d59103`):J.value?e.$t(`daq.k1b39281116`):e.$t(`daq.k1b3dtga119`)),9,ln)]),g(`p`,un,s(e.$t(`daq.k1w8s84s049`)),1),g(`table`,dn,[g(`tbody`,null,[(r(!0),f(c,null,n(wa.value,t=>(r(),f(`tr`,{key:t.key},[g(`td`,null,[g(`b`,null,s(t.name),1),g(`small`,fn,s(t.code),1)]),g(`td`,pn,s(t.min)+`~`+s(t.max)+` `+s(t.unit)+` · `+s(t.decimals)+` `+s(e.$t(`daq.k48oi091`)),1),g(`td`,mn,[g(`button`,{class:`mini-btn`,onClick:e=>Oa(t)},s(e.$t(`daq.k3y694050`)),9,hn)])]))),128))])])])])):p(``,!0),g(`section`,gn,[g(`button`,{class:`opt-head`,onClick:Ji},[t[56]||=g(`span`,{class:`i-tabler-flask`},null,-1),g(`b`,null,s(e.$t(`daq.k1optt001`)),1),g(`span`,_n,s(a(w).optimizations.length),1),g(`span`,{class:i([`opt-chevron`,{open:O.value}])},null,2)]),g(`div`,{class:i([`opt-body`,{open:O.value}])},[Wi.value?(r(),f(c,{key:0},[g(`div`,vn,[_(g(`select`,{"onUpdate:modelValue":t[26]||=e=>k.value=e,class:`inp-sel`,onChange:Yi},[g(`option`,yn,s(e.$t(`daq.k1optf001`)),1),(r(!0),f(c,null,n(a(w).lines,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,bn))),128))],544),[[b,k.value]]),_(g(`select`,{"onUpdate:modelValue":t[27]||=e=>A.value=e,class:`inp-sel`,onChange:M},[g(`option`,xn,s(e.$t(`daq.k1optf004`)),1),(r(!0),f(c,null,n(Ki.value,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,Sn))),128))],544),[[b,A.value]]),g(`button`,{class:`mini-act`,onClick:M},s(e.$t(`daq.k1optf002`)),1)]),a(w).optimizations.length===0?(r(),f(`p`,Cn,s(e.$t(`daq.k1opte001`)),1)):p(``,!0),g(`ul`,wn,[(r(!0),f(c,null,n(a(w).optimizations.slice(0,30),t=>(r(),f(`li`,{key:t.id,class:i([`opt-row`,t.status])},[g(`div`,Tn,[g(`span`,{class:i([`opt-status`,t.status])},s(e.$t(qi(t.status))),3),g(`b`,En,s(t.nodeName),1),g(`span`,Dn,s(t.params[0]?.from??`?`)+` → `+s(t.params[0]?.to),1),g(`span`,On,s(t.setAt.slice(5,16).replace(`T`,` `)),1),j.value[t.id]?p(``,!0):(r(),f(`button`,{key:0,class:`mini-act`,disabled:Gi.value===t.id,onClick:e=>Xi(t.id)},s(e.$t(`daq.k1opta001`)),9,kn)),t.status===`open`?(r(),f(`button`,{key:1,class:`mini-act danger`,onClick:e=>Qi(t.id)},s(e.$t(`daq.k1opta002`)),9,An)):p(``,!0)]),g(`div`,jn,[t.judge?(r(),f(`span`,{key:0,class:i([`opt-judge`,t.judge.verdict])},s(t.judge.verdict)+`(`+s(t.judge.by)+`): `+s(t.judge.reason.slice(0,70)),3)):t.status===`open`?(r(),f(`span`,Mn,s(e.$t(`daq.k1opto001`)),1)):p(``,!0),t.aggPending?(r(),f(`span`,Nn,s(e.$t(`daq.k1optw001`)),1)):t.windowAgg&&t.windowAgg.channels.length?(r(),f(`span`,Pn,[(r(!0),f(c,null,n(t.windowAgg.channels,t=>(r(),f(c,{key:t.daqNodeId},[l(s(t.ch)+` `+s($i(t.min))+`~`+s($i(t.max))+`(`+s(e.$t(`daq.k1optw002`))+s(t.breaches<0?`-`:t.breaches)+`) `,1)],64))),128))])):p(``,!0)]),j.value[t.id]?(r(),f(`div`,Fn,[(r(!0),f(c,null,n(j.value[t.id].channels,e=>(r(),f(`div`,{key:e.nodeId,class:`opt-ch`},[(r(),f(`svg`,In,[g(`polyline`,{points:Zi(e.points)},null,8,Ln)])),g(`span`,Rn,s(e.ch)+` `+s($i(e.points.at(-1)?.value??e.points.at(-1)?.avg))+s(e.unit),1)]))),128)),j.value[t.id].channels.length===0?(r(),f(`p`,zn,s(e.$t(`daq.k1opte002`)),1)):p(``,!0)])):p(``,!0)],2))),128))])],64)):p(``,!0)],2)]),y(d,{spinning:!a(C).loaded&&!a(C).error},{default:h(()=>[g(`section`,Bn,[g(`div`,Vn,[g(`div`,Hn,[g(`label`,Un,[g(`span`,null,s(e.$t(`daq.k3wj9n051`)),1),_(g(`select`,{"onUpdate:modelValue":t[28]||=e=>a(D).lineId=e,class:`inp-sel`},[g(`option`,Wn,s(e.$t(`daq.k1bkl9uj052`)),1),(r(!0),f(c,null,n(a(w).lines,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,Gn))),128)),g(`option`,Kn,s(e.$t(`daq.k3ootr6053`)),1)],512),[[b,a(D).lineId]])]),g(`label`,qn,[g(`span`,null,s(e.$t(`daq.k1i8rtqt054`)),1),_(g(`select`,{"onUpdate:modelValue":t[29]||=e=>a(D).deviceId=e,class:`inp-sel`},[g(`option`,Jn,s(e.$t(`daq.k1bkw4m2055`)),1),(r(!0),f(c,null,n(ea.value,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name)+`(`+s(e.count)+`) `,9,Yn))),128)),g(`option`,Xn,s(e.$t(`daq.k3own4q056`)),1)],512),[[b,a(D).deviceId]])]),g(`label`,{class:`flt`,title:e.$t(`daq.khb8mru009`)},[g(`span`,null,s(e.$t(`daq.k1b2tkyv057`)),1),_(g(`select`,{"onUpdate:modelValue":t[30]||=e=>a(D).lineRun=e,class:`inp-sel`},[g(`option`,Qn,s(e.$t(`daq.k3x4t1058`)),1),g(`option`,$n,s(e.$t(`daq.k1nxm3p7059`)),1),g(`option`,er,s(e.$t(`daq.k1ulx34e060`)),1)],512),[[b,a(D).lineRun]])],8,Zn),g(`label`,tr,[g(`span`,null,s(e.$t(`daq.k1iwdfef061`)),1),_(g(`select`,{"onUpdate:modelValue":t[31]||=e=>a(D).state=e,class:`inp-sel`},[g(`option`,nr,s(e.$t(`daq.k3x4t1058`)),1),g(`option`,rr,s(e.$t(`daq.k41k5c062`)),1),g(`option`,ir,s(e.$t(`daq.k49z8v063`)),1),g(`option`,ar,s(e.$t(`daq.k3xmid064`)),1),g(`option`,or,s(e.$t(`daq.k44c2n065`)),1)],512),[[b,a(D).state]])]),g(`label`,sr,[g(`span`,null,s(e.$t(`daq.k1flttpl010`)),1),_(g(`select`,{"onUpdate:modelValue":t[32]||=e=>a(D).template=e,class:`inp-sel`},[g(`option`,cr,s(e.$t(`daq.k1flttpl011`)),1),(r(!0),f(c,null,n(zi.value,e=>(r(),f(`option`,{key:e.ref,value:e.ref},s(e.label)+`(`+s(e.count)+`) `,9,lr))),128))],512),[[b,a(D).template]])]),g(`label`,ur,[g(`span`,null,s(e.$t(`daq.k1fltdrv012`)),1),_(g(`select`,{"onUpdate:modelValue":t[33]||=e=>a(D).driver=e,class:`inp-sel`},[g(`option`,dr,s(e.$t(`daq.k1fltdrv013`)),1),(r(!0),f(c,null,n(Bi.value,e=>(r(),f(`option`,{key:e.kind,value:e.kind},s(e.label)+`(`+s(e.count)+`) `,9,fr))),128))],512),[[b,a(D).driver]])]),g(`label`,{class:`flt`,title:e.$t(`daq.k1flttim014`)},[g(`span`,null,s(e.$t(`daq.k1flttim015`)),1),_(g(`select`,{"onUpdate:modelValue":t[34]||=e=>a(D).time=e,class:`inp-sel`},[g(`option`,mr,s(e.$t(`daq.k1flttim016`)),1),g(`option`,hr,s(e.$t(`daq.k1timlv017`)),1),g(`option`,gr,s(e.$t(`daq.k1timhr018`)),1),g(`option`,_r,s(e.$t(`daq.k1timdy019`)),1),g(`option`,vr,s(e.$t(`daq.k1timld020`)),1),g(`option`,yr,s(e.$t(`daq.k1timnv021`)),1)],512),[[b,a(D).time]])],8,pr),g(`label`,br,[g(`span`,null,s(e.$t(`daq.k1fltsrc022`)),1),_(g(`input`,{"onUpdate:modelValue":t[35]||=e=>a(D).search=e,class:`inp-sel flt-search`,type:`search`,placeholder:e.$t(`daq.k1fltsph023`)},null,8,xr),[[x,a(D).search]])]),Li.value?(r(),f(`button`,{key:0,class:`mini-btn clear-btn`,onClick:Ri},s(e.$t(`daq.k1fygck2066`)),1)):p(``,!0)]),g(`span`,Sr,s(F.value.length)+` / `+s(a(C).nodes.length)+` `+s(e.$t(`daq.k45uio067`)),1)]),g(`div`,Cr,[g(`div`,{class:i([`ops-panel alarm-panel`,{live:a(C).alarms.length>0}])},[g(`div`,wr,[t[57]||=g(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),g(`b`,null,s(e.$t(`daq.k1alarm141`)),1),g(`span`,{class:i([`mono cnt`,{hot:a(C).alarms.length>0}])},s(a(C).alarms.length),3)]),g(`div`,Tr,[a(C).alarms.length===0?(r(),f(`p`,Er,s(e.$t(`daq.k1evt001`)),1)):(r(!0),f(c,{key:1},n(a(C).alarms,n=>(r(),f(`div`,{key:n.id,class:`alarm-row`},[t[58]||=g(`span`,{class:`i-tabler-alert-triangle tri`},null,-1),g(`b`,null,s(n.nodeName),1),g(`span`,Dr,s(n.metric),1),g(`span`,Or,s(n.value)+` `+s(n.rule===`lt-min`?`<`:`>`)+` `+s(n.threshold),1),n.escalation>0?(r(),f(`small`,kr,`+`+s(n.escalation),1)):p(``,!0),g(`button`,{class:`mini-btn ack`,onClick:e=>Fi(n.id)},s(e.$t(`daq.k1ack142`)),9,Ar)]))),128))])],2),g(`div`,jr,[g(`div`,Mr,[t[60]||=g(`span`,{class:`i-tabler-activity`},null,-1),g(`b`,null,s(e.$t(`daq.k1evt002`)),1),y(u,{class:`panel-link`,to:`/logs`},{default:h(()=>[l(s(e.$t(`daq.k1evt003`)),1),t[59]||=g(`span`,{class:`i-tabler-arrow-right`},null,-1)]),_:1})]),g(`div`,Nr,[a(ji).recent.length===0?(r(),f(`p`,Pr,s(e.$t(`daq.k1evt004`)),1)):(r(!0),f(c,{key:1},n(a(ji).recent,(t,n)=>(r(),f(`div`,{key:`${t.at}:${t.actor}:${t.action}:${n}`,class:`evt-row`},[g(`span`,Fr,s(Ni(t.at)),1),g(`span`,{class:i([`src-badge`,t.actorKind])},s(t.actorKind===`agent`?`Agent`:t.actorKind===`user`?e.$t(`logs.src.user`):e.$t(`logs.src.system`)),3),g(`span`,{class:i([`kind-chip`,t.kind])},s(Mi(t.kind)),3),g(`span`,{class:`txt`,title:t.summary},s(t.summary),9,Ir)]))),128))])])]),g(`table`,Lr,[g(`thead`,null,[g(`tr`,null,[g(`th`,null,s(e.$t(`daq.k45uio067`)),1),g(`th`,null,s(e.$t(`daq.k42w8s068`)),1),g(`th`,null,s(e.$t(`daq.k3mv305069`)),1),g(`th`,null,s(e.$t(`daq.k1trnd001`)),1),g(`th`,null,s(e.$t(`daq.k1l6g2ga070`)),1),g(`th`,null,s(e.$t(`daq.k3zi0nf071`)),1),g(`th`,null,s(e.$t(`daq.k4a0la072`)),1),g(`th`,null,s(e.$t(`daq.k3wj9n051`)),1),g(`th`,{title:e.$t(`daq.k1runtipc131`)},s(e.$t(`daq.k1b2tkyv057`)),9,Rr),g(`th`,{title:e.$t(`daq.k1prdrtip132`)},s(e.$t(`daq.k1prodrc128`)),9,zr),g(`th`,null,s(e.$t(`daq.k1i8rtqt054`)),1),g(`th`,Br,s(e.$t(`daq.k40aa6073`)),1)])]),g(`tbody`,null,[(r(!0),f(c,null,n(la.value,({n:o,c:d})=>(r(),f(`tr`,{key:o.id,class:i({"row-recipe-alarm":d.alarm})},[g(`td`,null,[g(`span`,Vr,s(o.id.slice(0,8)),1),g(`b`,null,s(o.name),1),g(`small`,Hr,s(d.tpl),1)]),g(`td`,null,[g(`span`,{class:i([`st-pill`,[d.pill.key]]),title:d.pill.tip},s(d.pill.label),11,Ur)]),g(`td`,{class:i([`mono val`,{stale:!d.live,"val-alarm":o.state===`alarm`||d.alarm}]),title:d.live?void 0:d.pill.tip},[l(s(o.value==null?`--`:o.value.toFixed(o.decimals))+` `,1),g(`small`,null,s(o.unit),1)],10,Wr),g(`td`,Gr,[(r(),f(`svg`,{class:`trend`,viewBox:`0 0 120 26`,preserveAspectRatio:`none`,title:e.$t(`daq.k1trnd002`)},[T(o.hist,E(o).min)==null?p(``,!0):(r(),f(`line`,{key:0,class:`lim`,x1:`0`,y1:T(o.hist,E(o).min),x2:`120`,y2:T(o.hist,E(o).min)},null,8,qr)),T(o.hist,E(o).max)==null?p(``,!0):(r(),f(`line`,{key:1,class:`lim max`,x1:`0`,y1:T(o.hist,E(o).max),x2:`120`,y2:T(o.hist,E(o).max)},null,8,Jr)),g(`polyline`,{class:i([`trace`,{alarm:o.state===`alarm`||d.alarm}]),points:Pi(o.hist)},null,10,Yr)],8,Kr))]),g(`td`,Xr,s(fa(o.intervalMs)),1),g(`td`,Zr,s(pa(o.publishIntervalMs)),1),g(`td`,null,[g(`span`,{class:i([`drv-tag`,{planned:ja(o.driver)}]),title:ja(o.driver)?e.$t(`daq.k1plndrv138`):``},s(o.driver),11,Qr)]),g(`td`,null,[g(`select`,{class:`line-sel`,value:o.lineId,title:e.$t(`daq.k3q23v3010`),onChange:e=>Ei(o.id,e)},[g(`option`,ei,s(e.$t(`daq.k3ootr6053`)),1),(r(!0),f(c,null,n(a(w).lines,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,ti))),128))],40,$r)]),g(`td`,null,[o.lineId?(r(),f(`span`,{key:0,class:i([`run-pill`,{on:a(w).lineStateOf(o.lineId).active}]),title:e.$t(`daq.k1runtipc131`)},[t[61]||=g(`span`,{class:`rp-dot`},null,-1),l(` `+s(a(w).lineStateOf(o.lineId).active?e.$t(`daq.k3vp67i096`):e.$t(`daq.k3ozyqz117`)),1)],10,ni)):(r(),f(`span`,ri,s(e.$t(`daq.k3ootr6053`)),1))]),g(`td`,ii,[o.lineId&&a(w).lineStateOf(o.lineId).active?(r(),f(c,{key:0},[g(`b`,{title:e.$t(`daq.k1prdrtip132`)},s(a(w).lineStateOf(o.lineId).productName||`--`),9,ai),g(`small`,{class:`mono`,title:e.$t(`daq.k1prdrtip132`)},s(a(w).lineStateOf(o.lineId).recipeName||`--`),9,oi)],64)):(r(),f(`span`,si,`--`))]),g(`td`,null,[g(`select`,{class:`line-sel`,value:o.deviceBindingId??``,title:e.$t(`daq.k2bindtip137`),onChange:e=>Di(o.id,e)},[g(`option`,li,s(e.$t(`daq.k3own4q056`)),1),(r(!0),f(c,null,n(da.value,e=>(r(),f(`option`,{key:e.id,value:e.id},s(a(ua).get(e.id)??e.name),9,ui))),128))],40,ci)]),g(`td`,di,[g(`button`,{class:i([`node-toggle`,{off:!o.enabled}]),title:o.enabled?e.$t(`daq.k1nodestop146`):e.$t(`daq.k1nodestart147`),onClick:e=>Oi(o)},[g(`span`,{class:i(o.enabled?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),l(` `+s(o.enabled?e.$t(`daq.k1nodestop146`):e.$t(`daq.k1nodestart147`)),1)],10,fi),y(u,{class:`console-link`,to:`/daq/${o.id}`},{default:h(()=>[t[62]||=g(`span`,{class:`i-tabler-dashboard`},null,-1),l(` `+s(e.$t(`daq.k3o3jg2074`)),1)]),_:1},8,[`to`])])],2))),128)),a(C).loaded&&a(C).nodes.length===0?(r(),f(`tr`,pi,[g(`td`,mi,[g(`div`,hi,[g(`p`,gi,s(e.$t(`daq.kvhjyc3075`)),1)])])])):a(C).loaded&&F.value.length===0?(r(),f(`tr`,_i,[g(`td`,vi,[g(`div`,yi,[g(`p`,bi,s(e.$t(`daq.k1w20qew076`)),1)])])])):p(``,!0)])])])]),_:1},8,[`spinning`]),a(C).error?(r(),f(`p`,xi,[l(s(a(C).error)+`(`,1),y(u,{to:`/workshop`},{default:h(()=>[l(s(e.$t(`daq.k1bhhheq077`)),1)]),_:1}),t[63]||=l(`) `,-1)])):p(``,!0)])}}}),[[`__scopeId`,`data-v-ad25ed6d`]]);export{C as default};
1
+ import{C as e,F as t,G as n,H as r,Ht as i,St as a,Ut as o,Wt as s,a as c,b as l,et as u,f as d,ft as ee,g as f,h as p,m as te,mt as m,nt as h,p as g,rt as _,t as v,x as y,z as ne}from"./BSCpFtzG.js";import{B as re,F as ie,I as b,L as x}from"./2LwEn9gX.js";import{n as ae}from"./uBbDCfTz.js";import{t as oe}from"./ubPfs9mQ.js";import{n as se}from"./BeIfu4N3.js";import{r as S}from"./W1E3-5ML.js";import{t as ce}from"./C9f8QMp12.js";import{t as le}from"./CNs_Ozdc2.js";import{t as ue}from"./GP2wXyuY.js";import{a as de,i as fe,n as pe,r as me,t as he}from"./CS8R0_J3.js";import{t as ge}from"./CUxV8Bw_.js";import{t as _e}from"./dt2tKE95.js";import{t as ve}from"./By-LNp3k.js";import{t as ye}from"./ChEKFMxj.js";var be={class:`page`},xe={class:`aw-page-head`},Se={class:`sub`},Ce={class:`badges mono`},we=[`title`],Te=[`title`],Ee={class:`txt`},De={class:`mono`},Oe={key:1,class:`infra-banner`},ke={class:`txt`},Ae={key:2,class:`infra-banner`},je={class:`txt`},Me=[`disabled`],Ne={key:3,class:`alarm-bar`},Pe={class:`bar-label`},Fe={class:`mono`},Ie={class:`alarm-scroll`},Le=[`title`],Re={class:`mono dim`},ze={class:`mono`},Be={key:0,class:`esc mono`},Ve=[`onClick`],He={class:`aw-tile ctrl-card`},Ue={class:`ctrl-row`},We={class:`ctrl-left`},Ge=[`title`],Ke={class:`cycle mono`},qe=[`title`],Je={class:`ctrl-right`},Ye={class:`ctrl-metrics mono`},Xe=[`title`],Ze=[`title`],Qe=[`title`],$e=[`title`],et={class:`line-strip`},tt={class:`strip-label`},nt={class:`mono`},rt={class:`strip-scroll`},it={key:0,class:`lp-run`},at={key:1,class:`lp-idle`},ot={class:`lp-idle`},st={class:`modal`},ct={class:`m-title`},lt={class:`seg-row`},ut={class:`f-grid`},dt={class:`f`},ft=[`value`],pt={class:`f`},mt=[`placeholder`],ht={key:0,class:`f`},gt=[`placeholder`],_t={class:`f-grid`},vt={class:`f`},yt=[`value`],bt={key:0,class:`f-grid driver-form`},xt={key:0},St=[`onUpdate:modelValue`],Ct=[`value`],wt=[`onUpdate:modelValue`,`type`,`placeholder`],Tt={key:2,class:`hint`},Et={class:`test-row`},Dt=[`disabled`],Ot={key:1,class:`m-err`},kt={class:`m-actions`},At=[`disabled`,`title`],jt={class:`modal`},Mt={class:`m-title`},Nt={class:`sec-label`},Pt={class:`tpl-table`},Ft={class:`mono dim`},It={class:`mono range`},Lt={class:`right actions`},Rt=[`onClick`],zt=[`onClick`],Bt={key:0},Vt={colspan:`3`,class:`empty`},Ht={class:`sec-label`},Ut={class:`f-grid`},Wt={class:`f`},Gt=[`placeholder`],Kt={class:`f`},qt={class:`f`},Jt=[`placeholder`],Yt={class:`f`},Xt=[`placeholder`],Zt={class:`f`},Qt={class:`f`},$t={class:`f`},en={class:`f`},tn=[`value`],nn={class:`f`},rn={class:`hint`},an={class:`f`},on={class:`hint`},sn={key:0,class:`m-err`},cn={class:`m-actions`},ln=[`disabled`],un={class:`sec-label`},dn={class:`tpl-table`},fn={class:`mono dim`},pn={class:`mono range`},mn={class:`right actions`},hn=[`onClick`],gn={class:`aw-tile opt-card`},_n={class:`opt-count mono`},vn={class:`opt-filters`},yn={value:``},bn=[`value`],xn={value:``},Sn=[`value`],Cn={key:0,class:`opt-empty`},wn={class:`opt-list`},Tn={class:`opt-line1`},En={class:`opt-node`},Dn={class:`mono opt-params`},On={class:`mono opt-time`},kn=[`disabled`,`onClick`],An=[`onClick`],jn={class:`opt-line2 mono`},Mn={key:1,class:`opt-open-hint`},Nn={key:2,class:`opt-agg`},Pn={key:3,class:`opt-agg`},Fn={key:0,class:`opt-series`},In={class:`opt-spark`,viewBox:`0 0 240 36`,preserveAspectRatio:`none`},Ln=[`points`],Rn={class:`mono`},zn={key:0,class:`opt-empty`},Bn={class:`aw-tile table-card`},Vn={class:`tbl-toolbar`},Hn={class:`filters`},Un={class:`flt`},Wn={value:``},Gn=[`value`],Kn={value:`none`},qn={class:`flt`},Jn={value:``},Yn=[`value`],Xn={value:`none`},Zn=[`title`],Qn={value:``},$n={value:`on`},er={value:`off`},tr={class:`flt`},nr={value:``},rr={value:`ok`},ir={value:`warn`},ar={value:`alarm`},or={value:`offline`},sr={class:`flt`},cr={value:``},lr=[`value`],ur={class:`flt`},dr={value:``},fr=[`value`],pr=[`title`],mr={value:``},hr={value:`live`},gr={value:`hour`},_r={value:`day`},vr={value:`old`},yr={value:`never`},br={class:`flt`},xr=[`placeholder`],Sr={class:`count mono`},Cr={class:`ops-panels`},wr={class:`panel-head`},Tr={class:`panel-body`},Er={key:0,class:`panel-empty`},Dr={class:`mono dim`},Or={class:`mono`},kr={key:0,class:`esc mono`},Ar=[`onClick`],jr={class:`ops-panel event-panel`},Mr={class:`panel-head`},Nr={class:`panel-body`},Pr={key:0,class:`panel-empty`},Fr={class:`mono dim t`},Ir=[`title`],Lr={class:`nodes-table`},Rr=[`title`],zr=[`title`],Br={class:`right`},Vr={class:`mono dim`},Hr={class:`mono ch`},Ur=[`title`],Wr=[`title`],Gr={class:`trend-cell`},Kr=[`title`],qr=[`y1`,`y2`],Jr=[`y1`,`y2`],Yr=[`points`],Xr={class:`mono`},Zr={class:`mono`},Qr=[`title`],$r=[`value`,`title`,`onChange`],ei={value:``},ti=[`value`],ni=[`title`],ri={key:1,class:`run-pill na`},ii={class:`prod-cell`},ai=[`title`],oi=[`title`],si={key:1,class:`dim`},ci=[`value`,`title`,`onChange`],li={value:``},ui=[`value`],di={class:`right`},fi=[`title`,`onClick`],pi={key:0},mi={colspan:`11`},hi={class:`pane-empty`,style:{"min-height":`120px`}},gi={class:`pe-sub`},_i={key:1},vi={colspan:`11`},yi={class:`pane-empty`,style:{"min-height":`90px`}},bi={class:`pe-sub`},xi={key:6,class:`err`},Si=120,Ci=26,C=v(e({__name:`index`,setup(e){let{t:v}=se();le({layout:`default`}),ae({title:()=>v(`titles.daq`)});let C=he(),w=ue(),wi=_e(),Ti=d(()=>w.lines.some(e=>w.lineStateOf(e.id).active));async function Ei(e,t){let n=t.target.value;try{await C.patchNode(e,{lineId:n});let t=C.nodes.find(t=>t.id===e);t&&(t.lineId=n)}catch(e){S.error(e instanceof Error?e.message:String(e))}}async function Di(e,t){let n=t.target.value;try{await C.bindNode(e,n||null)}catch(e){S.error(e instanceof Error?e.message:String(e))}}async function Oi(e){let t=!e.enabled;try{await C.patchNode(e.id,{enabled:t}),e.enabled=t,t||(e.state=`offline`),S.success(v(t?`daq.k1nodestart147`:`daq.k1nodestop146`))}catch(e){S.error(e instanceof Error?e.message:String(e))}}function ki(e){if(!e.lineId)return null;let t=w.lineStateOf(e.lineId);return!t.active||!t.recipeId?null:w.recipes.find(e=>e.id===t.recipeId)?.daqWindows?.find(t=>t.nodeId===e.id)??null}function Ai(e){let t=ki(e);return!t||e.value==null?!1:t.min!=null&&e.value<t.min||t.max!=null&&e.value>t.max}let ji=ve();function Mi(e){return{write:v(`logs.kind.write`),manual:v(`logs.kind.manual`),alarm:v(`logs.kind.alarm`),line:v(`logs.kind.line`),recipe:v(`logs.kind.recipe`),rollback:v(`logs.kind.rollback`),daq:v(`logs.kind.daq`),system:v(`logs.kind.system`)}[e]??(e||v(`logs.kind.system`))}function Ni(e){let t=new Date(e);return Number.isFinite(t.getTime())?`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`:``}function Pi(e){let t=e.filter(Number.isFinite);if(t.length<2)return``;let n=Math.min(...t),r=Math.max(...t)-n||1;return t.map((e,i)=>`${(i/(t.length-1)*Si).toFixed(1)},${(Ci-(e-n)/r*24-1).toFixed(1)}`).join(` `)}function T(e,t){if(t==null||!Number.isFinite(t))return null;let n=e.filter(Number.isFinite);if(n.length<2)return null;let r=Math.min(...n,t),i=Math.max(...n,t)-r||1;return Number((Ci-(t-r)/i*24-1).toFixed(1))}function E(e){let t=ki(e);return t&&(t.min!=null||t.max!=null)?{min:t.min,max:t.max,source:`recipe`}:e.warnLow!=null||e.warnHigh!=null?{min:e.warnLow,max:e.warnHigh,source:`warn`}:{min:null,max:null,source:`warn`}}async function Fi(e){try{await C.ackAlarm(e),S.success(v(`daq.k1acked144`))}catch(e){S.error(e instanceof Error?e.message:String(e))}}let Ii=null;ne(()=>{wi.ensureConnected(),Ii=C.ensureWsFeed(),ji.ensureLive(),C.load(),C.fetchAlarms(),w.load(),I.load(),w.loadOptimizations(),ye(()=>{C.load(),C.fetchAlarms()},5e3,{bgMs:3e4}),ye(()=>{w.load()},15e3,{bgMs:6e4})}),t(()=>{Ii?.()});let D=ee({lineId:``,deviceId:``,template:``,driver:``,lineRun:``,state:``,time:``,search:``}),Li=d(()=>!!(D.lineId||D.deviceId||D.template||D.driver||D.lineRun||D.state||D.time||D.search.trim()));function Ri(){D.lineId=``,D.deviceId=``,D.template=``,D.driver=``,D.lineRun=``,D.state=``,D.time=``,D.search=``}let zi=d(()=>{let e=new Map;for(let t of C.nodes)e.set(t.templateRef,(e.get(t.templateRef)??0)+1);return[...e.entries()].map(([e,t])=>({ref:e,count:t,label:ba(e)}))}),Bi=d(()=>{let e=new Map;for(let t of C.nodes)e.set(t.driver,(e.get(t.driver)??0)+1);return[...e.entries()].map(([e,t])=>({kind:e,count:t,label:C.meta.drivers.find(t=>t.kind===e)?.label??e}))});function Vi(e){if(!e.lastAt)return`never`;let t=Date.now()-Date.parse(e.lastAt);return t<=3e5?`live`:t<=36e5?`hour`:t<=864e5?`day`:`old`}function Hi(e){return!D.time||Vi(e)===D.time}function Ui(e){let t=D.search.trim().toLowerCase();return!t||e.name.toLowerCase().includes(t)||e.id.toLowerCase().includes(t)}let O=m(!1),Wi=m(!1),k=m(``),A=m(``),j=m({}),Gi=m(``),Ki=d(()=>w.recipes.filter(e=>!k.value||e.lineId===k.value));function qi(e){return{open:`daq.k1optst001`,judged:`daq.k1optst008`,"judged-keep":`daq.k1optst002`,"rolled-back":`daq.k1optst003`,superseded:`daq.k1optst004`,"superseded-manual":`daq.k1optst005`,"closed-line-stop":`daq.k1optst006`,failed:`daq.k1optst007`}[e]??`daq.k1optst001`}async function Ji(){O.value=!O.value,O.value&&(Wi.value=!0,await M())}async function M(){await w.loadOptimizations({lineId:k.value||void 0,recipeId:A.value||void 0})}function Yi(){A.value&&!Ki.value.some(e=>e.id===A.value)&&(A.value=``),M()}async function Xi(e){Gi.value=e;try{let t=await w.optimizationSeries(e);j.value={...j.value,[e]:t}}finally{Gi.value=``}}function Zi(e,t=240,n=36){let r=e.map(e=>e.value??e.avg??0).filter(Number.isFinite);if(r.length<2)return``;let i=Math.min(...r),a=Math.max(...r)-i||1;return r.map((e,o)=>`${o/(r.length-1)*t},${n-(e-i)/a*n}`).join(` `)}async function Qi(e){await w.rollbackOptimization(e),await M()}function $i(e){return e==null?`--`:String(Number(e.toFixed(2)))}let ea=d(()=>{let e=new Map;for(let t of C.nodes)t.deviceBindingId&&e.set(t.deviceBindingId,(e.get(t.deviceBindingId)??0)+1);return I.twins.filter(t=>e.has(t.id)).map(t=>({id:t.id,name:ua.get(t.id)??t.name,count:e.get(t.id)}))});function ta(e){if(!D.lineRun)return!0;let t=!!e.lineId&&w.lineStateOf(e.lineId).active;return D.lineRun===`on`?t:!t}let N=d(()=>w.lines.find(e=>e.id===D.lineId)??null),P=d(()=>N.value?w.lineStateOf(N.value.id):null);function na(e){if(!e.lastAt)return!0;let t=e.intervalMs??C.controller.defaultIntervalMs;return Date.now()-Date.parse(e.lastAt)>Math.max(t*4,12e3)}function ra(e){return e.enabled?e.lineId?w.lineStateOf(e.lineId).active?!C.controller.running||na(e)?`offline`:e.state:`idle`:`unassigned`:`disabled`}function ia(e){let t=ra(e);return t===`ok`||t===`warn`||t===`alarm`}let aa={ok:v(`daq.k41k5c062`),warn:v(`daq.k49z8v063`),alarm:v(`daq.k3xmid064`),offline:v(`daq.k44c2n065`),idle:v(`daq.k3ozyqz117`),disabled:v(`daq.k1disabl130`),unassigned:v(`daq.k3ootr6053`)};function oa(e){let t=ra(e);if(t===`offline`){let n=C.controller.running?v(`daq.k1staled129`,{p0:Math.round(Math.max((e.intervalMs??C.controller.defaultIntervalMs)*4,12e3)/1e3)}):v(`daq.k1gateoff140`);return{key:t,label:aa.offline,tip:n}}if(t===`idle`)return{key:t,label:aa.idle,tip:v(`daq.k1idlehin139`)};if((t===`ok`||t===`warn`||t===`alarm`)&&Ai(e)){let t=ki(e);return{key:`alarm`,label:v(`daq.k1l3pt51104`),tip:v(`daq.k1hrrqa1122`,{p0:t?.min??`-∞`,p1:t?.max??`+∞`,p2:``})}}return{key:t,label:aa[t],tip:``}}let F=d(()=>C.nodes.filter(e=>!(D.lineId&&(D.lineId===`none`?e.lineId:(e.lineId??``)!==D.lineId)||D.deviceId&&(D.deviceId===`none`?e.deviceBindingId:e.deviceBindingId!==D.deviceId)||D.template&&e.templateRef!==D.template||D.driver&&e.driver!==D.driver||!ta(e)||D.state&&ra(e)!==D.state||!Hi(e)||!Ui(e)))),sa=d(()=>{let e=new Map;for(let t of F.value)e.set(t.id,{pill:oa(t),alarm:Ai(t),live:ia(t),tpl:ba(t.templateRef)});return e}),ca={pill:{key:`offline`,label:``,tip:``},alarm:!1,live:!1,tpl:`-`},la=d(()=>F.value.map(e=>({n:e,c:sa.value.get(e.id)??ca}))),I=ge(),ua=new Map;u(()=>I.twins,e=>{for(let t of e)ua.set(t.id,t.name)},{immediate:!0,deep:!0});let da=d(()=>I.twins.filter(e=>e.kind!==`daq`&&!(e.modelRef??``).startsWith(`daq-`)&&!(e.modelRef??``).startsWith(`dcw-`))),fa=e=>e==null?v(`daq.k9vnp9h124`,{p0:C.controller.defaultIntervalMs}):`${e}ms`,pa=e=>e==null?v(`daq.k9vnp9h124`,{p0:C.controller.defaultPublishIntervalMs}):e===0?v(`daq.k41mvv078`):`${e}ms`,L=m(!1),R=m(`mock`),z=m(me[0]?.key??`temp-tc`),B=m(`modbus-tcp`),V=m(``),ma=m(null),H=m({}),ha=ee({kind:`none`,scale:1,offset:0}),U=m(!1),W=m(null),G=m(!1),K=m(``),ga=d(()=>pe.find(e=>e.kind===B.value)),q=d(()=>ga.value?.configFields??[]),_a=e=>C.meta.drivers.find(t=>t.kind===e)?.status!==`planned`&&C.meta.driverAvailable?.[e]!==!1;u(B,()=>{let e={};for(let t of q.value)t.default!==void 0&&(e[t.key]=t.default);H.value=e,W.value=null},{immediate:!0});async function va(){U.value=!0,W.value=null;try{W.value=await C.testDriver(B.value,H.value)}catch(e){W.value={ok:!1,message:e instanceof Error?e.message:String(e)}}finally{U.value=!1}}async function ya(){G.value=!0,K.value=``;try{let e=ha.kind===`linear`?{kind:`linear`,scale:Number(ha.scale),offset:Number(ha.offset)}:void 0;if(R.value===`mock`)await C.createFromTemplate(`daq-${z.value}`,{name:V.value?{name:V.value}.name:void 0,transform:e});else{for(let e of q.value)if(e.required&&!H.value[e.key]&&H.value[e.key]!==0)throw Error(v(`daq.kyuadl0125`,{p0:e.label}));let t=C.templates.find(e=>e.key===z.value);await C.createFromTemplate(`daq-${z.value}`,{name:V.value||void 0,driver:B.value,driverConfig:{...H.value},transform:e,intervalMs:ma.value,unit:t?.unit,min:t?.min,max:t?.max,decimals:t?.decimals})}L.value=!1,V.value=``,W.value=null}catch(e){K.value=e instanceof Error?e.message:String(e)}finally{G.value=!1}}function ba(e){let t=C.templates.find(t=>t.key===de(e));return t?`${t.name} · ${t.ch}`:e||`-`}let xa=m(!1),J=m(null),Y=m(!1),X=m(``),Z=m(``),Q=ee({name:``,ch:``,code:``,unit:``,min:0,max:100,base:50,amp:2,decimals:2,icon:`thermo`}),Sa={thermo:v(`daq.k422b8079`),pressure:v(`daq.k3x6ff080`),tension:v(`daq.k3z9xc081`),encoder:v(`daq.k3subk4082`),camera:v(`daq.k47atw083`),gateway:v(`daq.kz7yhbj084`)},Ca=d(()=>C.templates.filter(e=>!e.builtin)),wa=d(()=>C.templates.filter(e=>e.builtin));function Ta(e,t=!1){Q.name=t?v(`daq.k2hbo3c126`,{p0:e.name}):e.name,Q.ch=e.ch,Q.code=e.code,Q.unit=e.unit,Q.min=e.min,Q.max=e.max,Q.base=e.base,Q.amp=e.amp,Q.decimals=e.decimals,Q.icon=e.icon}function Ea(){J.value=null,X.value=``,Z.value=``,Ta({key:``,name:``,code:``,ch:``,unit:``,base:50,amp:2,min:0,max:100,decimals:2,icon:`thermo`})}function Da(e){J.value=e.key,X.value=``,Ta(e)}function Oa(e){J.value=null,X.value=``,Ta(e,!0)}async function ka(){Y.value=!0,X.value=``;try{let e=e=>{let t=Number(e);return e===``||e==null||!Number.isFinite(t)?void 0:t},t={name:Q.name.trim(),ch:Q.ch.trim()||void 0,code:Q.code.trim()||void 0,unit:Q.unit.trim(),min:e(Q.min),max:e(Q.max),base:e(Q.base),amp:e(Q.amp),decimals:e(Q.decimals),icon:Q.icon};J.value?await C.updateTemplate(J.value,t):await C.createTemplate(t),Ea()}catch(e){X.value=e instanceof Error?e.message:String(e)}finally{Y.value=!1}}async function Aa(e){if(Z.value!==e.key){Z.value=e.key;return}try{await C.removeTemplate(e.key)}catch(e){X.value=e instanceof Error?e.message:String(e)}finally{Z.value=``}}let ja=e=>C.meta.drivers.find(t=>t.kind===e)?.status===`planned`,$=m(!1);async function Ma(){$.value=!0;try{await C.reconnectInfra()}catch{}finally{$.value=!1}}return(e,t)=>{let u=oe,d=ce;return r(),f(`div`,be,[g(`div`,xe,[g(`div`,null,[t[36]||=g(`p`,{class:`aw-kicker`},` AGENTWORKSHOP / DAQ CONSOLE `,-1),g(`h1`,null,s(e.$t(`daq.k1emg364011`)),1),g(`p`,Se,s(e.$t(`daq.k1wmg2bz012`)),1)]),g(`div`,Ce,[g(`span`,{class:`badge`,title:e.$t(`daq.k1tsdbtip133`)},`TSDB · `+s(a(C).meta.tsdb),9,we),g(`span`,{class:`badge`,title:e.$t(`daq.k1queuet134`)},`QUEUE · `+s(a(C).meta.queue),9,Te)])]),a(C).loaded&&N.value&&P.value?(r(),f(`div`,{key:0,class:i([`infra-banner`,{good:P.value.active}])},[g(`span`,{class:i(P.value.active?`i-tabler-circle-check`:`i-tabler-info-circle`)},null,2),g(`span`,Ee,[P.value.active?(r(),f(c,{key:0},[l(s(e.$t(`daq.k3ktxbr085`))+s(N.value.name)+`」`+s(e.$t(`daq.k15lvw0o105`)),1),g(`b`,null,s(P.value.productName),1),t[37]||=l(` · Recipe:`,-1),g(`b`,null,s(P.value.recipeName),1),g(`small`,De,s(e.$t(`daq.k400lb086`))+` `+s(P.value.runId?.slice(0,8))+` · `+s(e.$t(`daq.k3zkt2106`))+` `+s(P.value.startedAt?.slice(11,19))+` `+s(e.$t(`daq.k69vag8108`))+` `+s(P.value.taggedSamples)+` `+s(e.$t(`daq.k4118o092`)),1)],64)):(r(),f(c,{key:1},[l(s(e.$t(`daq.k3ktxbr085`))+s(N.value.name)+`」`+s(e.$t(`daq.k12uge2o107`)),1)],64))]),y(u,{class:`pill-btn`,to:`/dcw/${N.value.id}`},{default:h(()=>[l(s(P.value.active?e.$t(`daq.k1ukoy0v093`):e.$t(`daq.k1cg78i8109`)),1)]),_:1},8,[`to`])],2)):a(C).loaded&&!Ti.value?(r(),f(`div`,Oe,[t[38]||=g(`span`,{class:`i-tabler-info-circle`},null,-1),g(`span`,ke,[l(s(e.$t(`daq.k19onw5w013`)),1),y(u,{to:`/dcw`},{default:h(()=>[l(s(e.$t(`daq.k1b2tk5c014`)),1)]),_:1}),l(s(e.$t(`daq.k1u9wnlg015`)),1)])])):p(``,!0),a(C).meta.infra?.degraded?(r(),f(`div`,Ae,[t[39]||=g(`span`,{class:`i-tabler-alert-triangle`},null,-1),g(`span`,je,s(a(C).meta.infra.warning),1),g(`button`,{class:`pill-btn`,disabled:$.value,onClick:Ma},s($.value?e.$t(`daq.k1ld43ur094`):e.$t(`daq.kzg9805110`)),9,Me)])):p(``,!0),a(C).alarms.length?(r(),f(`div`,Ne,[g(`span`,Pe,[t[40]||=g(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),l(` `+s(e.$t(`daq.k1alarm141`))+` `,1),g(`b`,Fe,s(a(C).alarms.length),1)]),g(`div`,Ie,[(r(!0),f(c,null,n(a(C).alarms,t=>(r(),f(`span`,{key:t.id,class:`alarm-item`,title:e.$t(`daq.k1esc143`,{p0:t.escalation})},[g(`b`,null,s(t.nodeName),1),g(`span`,Re,s(t.metric),1),g(`span`,ze,s(t.value)+` `+s(t.rule===`lt-min`?`<`:`>`)+` `+s(t.threshold),1),t.escalation>0?(r(),f(`small`,Be,`+`+s(t.escalation),1)):p(``,!0),g(`button`,{class:`mini-btn ack`,onClick:e=>Fi(t.id)},s(e.$t(`daq.k1ack142`)),9,Ve)],8,Le))),128))])])):p(``,!0),g(`section`,He,[g(`div`,Ue,[g(`div`,We,[g(`button`,{class:i([`aw-pill`,{running:a(C).controller.running}]),title:e.$t(`daq.k1snap145`),onClick:t[0]||=e=>a(C).controllerAction(a(C).controller.running?`pause`:`resume`)},[g(`span`,{class:i(a(C).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),l(` `+s(a(C).controller.running?e.$t(`daq.kpui00095`):e.$t(`daq.knxpdpt111`)),1)],10,Ge),g(`label`,Ke,[l(s(e.$t(`daq.k1ifahxj016`))+` `,1),_(g(`input`,{"onUpdate:modelValue":t[1]||=e=>a(C).controller.defaultIntervalMs=e,type:`number`,min:`200`,max:`60000`,step:`100`,onChange:t[2]||=e=>a(C).controllerAction(`config`,a(C).controller.defaultIntervalMs)},null,544),[[x,a(C).controller.defaultIntervalMs,void 0,{number:!0}]]),t[41]||=l(`ms `,-1)]),g(`label`,{class:`cycle mono`,title:e.$t(`daq.k1e8lcoo001`)},[l(s(e.$t(`daq.k1if98n0017`))+` `,1),_(g(`input`,{"onUpdate:modelValue":t[3]||=e=>a(C).controller.defaultPublishIntervalMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,onChange:t[4]||=e=>a(C).controllerAction(`config`,a(C).controller.defaultIntervalMs,a(C).controller.defaultPublishIntervalMs)},null,544),[[x,a(C).controller.defaultPublishIntervalMs,void 0,{number:!0}]]),t[42]||=l(`ms `,-1)],8,qe)]),g(`div`,Je,[g(`span`,Ye,[g(`span`,null,s(e.$t(`daq.k45uio067`))+` `+s(a(C).controller.nodesOnline)+`/`+s(a(C).controller.nodesTotal),1),t[43]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{title:e.$t(`daq.k1yztsu4002`)},s(e.$t(`daq.k3xagp087`))+` `+s(a(C).meta.produced),9,Xe),t[44]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{title:e.$t(`daq.ko09iha003`)},s(e.$t(`daq.k427eu088`))+` `+s(a(C).meta.consumed),9,Ze),t[45]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{class:i({warn:(a(C).meta.dropped??0)>0}),title:e.$t(`daq.k1droptip135`)},s(e.$t(`daq.k3w8go089`))+` `+s(a(C).meta.dropped),11,Qe),t[46]||=g(`span`,{class:`sep`},`·`,-1),g(`span`,{title:e.$t(`daq.kj1jbmw004`)},s(e.$t(`daq.k3wusd090`))+` `+s(a(C).meta.samplesStored),9,$e)]),g(`button`,{class:`aw-pill outline add-btn`,onClick:t[5]||=e=>{xa.value=!0,Ea()}},[t[47]||=g(`span`,{class:`i-tabler-adjustments-horizontal`},null,-1),l(` `+s(e.$t(`daq.k1f5cv0s018`)),1)]),g(`button`,{class:`aw-pill add-btn`,onClick:t[6]||=e=>L.value=!0},[t[48]||=g(`span`,{class:`i-tabler-plus`},null,-1),l(` `+s(e.$t(`daq.k1fn0ukb019`)),1)])])]),g(`div`,et,[g(`span`,tt,[t[49]||=g(`span`,{class:`i-tabler-route`},null,-1),l(` `+s(e.$t(`daq.k1b2o3b6020`)),1),g(`small`,nt,s(a(w).lines.length),1)]),g(`div`,rt,[(r(!0),f(c,null,n(a(w).lines,n=>(r(),te(u,{key:n.id,class:i([`line-pill`,{on:a(w).lineStateOf(n.id).active}]),style:o({"--lc":n.color}),to:`/dcw/${n.id}`,title:a(w).lineStateOf(n.id).active?e.$t(`daq.k3v957u120`,{p0:n.name,p1:a(w).lineStateOf(n.id).productName,p2:a(w).lineStateOf(n.id).recipeName}):e.$t(`daq.k1x7jnru121`,{p0:n.name})},{default:h(()=>[t[50]||=g(`span`,{class:`lp-dot`},null,-1),g(`b`,null,s(n.name),1),a(w).lineStateOf(n.id).active?(r(),f(`small`,it,s(a(w).lineStateOf(n.id).recipeName??e.$t(`daq.k3vp67i096`)),1)):(r(),f(`small`,at,s(e.$t(`daq.k3zgkk021`)),1))]),_:2},1032,[`class`,`style`,`to`,`title`]))),128)),a(w).lines.length===0?(r(),te(u,{key:0,class:`line-pill`,to:`/dcw`},{default:h(()=>[t[51]||=g(`span`,{class:`lp-dot`},null,-1),g(`b`,null,s(e.$t(`daq.k1el12b1022`)),1),g(`small`,ot,s(e.$t(`daq.k8jxxe8023`)),1)]),_:1})):p(``,!0)])])]),L.value?(r(),f(`div`,{key:4,class:`modal-mask`,onClick:t[14]||=re(e=>L.value=!1,[`self`])},[g(`div`,st,[g(`h3`,ct,s(e.$t(`daq.k19rioqa024`)),1),g(`div`,lt,[g(`button`,{class:i([`seg`,{on:R.value===`mock`}]),onClick:t[7]||=e=>R.value=`mock`},s(e.$t(`daq.k1p5c1un025`)),3),g(`button`,{class:i([`seg`,{on:R.value===`real`}]),onClick:t[8]||=e=>R.value=`real`},s(e.$t(`daq.k1cbcp3o026`)),3)]),g(`div`,ut,[g(`label`,dt,[g(`span`,null,s(e.$t(`daq.k1fsgerc027`)),1),_(g(`select`,{"onUpdate:modelValue":t[9]||=e=>z.value=e,class:`inp`},[(r(!0),f(c,null,n(a(C).templates,t=>(r(),f(`option`,{key:t.key,value:t.key},s(t.name)+` · `+s(t.ch)+`(`+s(t.min)+`~`+s(t.max)+` `+s(t.unit)+`)`+s(t.builtin?``:e.$t(`daq.kr45rk9097`)),9,ft))),128))],512),[[b,z.value]])]),g(`label`,pt,[g(`span`,null,s(e.$t(`daq.k1ce2k1y028`)),1),_(g(`input`,{"onUpdate:modelValue":t[10]||=e=>V.value=e,class:`inp`,placeholder:e.$t(`daq.kgpxzy3005`)},null,8,mt),[[x,V.value]])]),R.value===`real`?(r(),f(`label`,ht,[g(`span`,null,s(e.$t(`daq.k13mfsfc029`)),1),_(g(`input`,{"onUpdate:modelValue":t[11]||=e=>ma.value=e,type:`number`,min:`200`,max:`60000`,step:`100`,class:`inp`,placeholder:e.$t(`daq.k1eg1000a136`)},null,8,gt),[[x,ma.value,void 0,{number:!0}]])])):p(``,!0)]),R.value===`real`?(r(),f(c,{key:0},[g(`div`,_t,[g(`label`,vt,[g(`span`,null,s(e.$t(`daq.k1kt87rx030`)),1),_(g(`select`,{"onUpdate:modelValue":t[12]||=e=>B.value=e,class:`inp`},[(r(!0),f(c,null,n(a(pe).filter(e=>e.status!==`planned`),t=>(r(),f(`option`,{key:t.kind,value:t.kind},s(t.label)+s(_a(t.kind)?``:e.$t(`daq.kjbqphp098`)),9,yt))),128))],512),[[b,B.value]])])]),q.value.length?(r(),f(`div`,bt,[(r(!0),f(c,null,n(q.value,e=>(r(),f(`label`,{key:e.key,class:`f`},[g(`span`,null,[l(s(e.label),1),e.required?(r(),f(`em`,xt,`*`)):p(``,!0)]),e.type===`select`?_((r(),f(`select`,{key:0,"onUpdate:modelValue":t=>H.value[e.key]=t,class:`inp`},[(r(!0),f(c,null,n(e.options,e=>(r(),f(`option`,{key:e.value,value:e.value},s(e.label),9,Ct))),128))],8,St)),[[b,H.value[e.key]]]):_((r(),f(`input`,{key:1,"onUpdate:modelValue":t=>H.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`inp`},null,8,wt)),[[ie,H.value[e.key]]]),e.hint?(r(),f(`small`,Tt,s(e.hint),1)):p(``,!0)]))),128))])):p(``,!0),g(`div`,Et,[g(`button`,{class:`pill-btn`,disabled:U.value,onClick:va},s(U.value?e.$t(`daq.k1fsh720099`):e.$t(`daq.k1fstglk112`)),9,Dt),W.value?(r(),f(`span`,{key:0,class:i([`test-result`,W.value.ok?`ok`:`bad`])},[l(s(W.value.ok?`✓`:`✗`)+` `+s(W.value.message),1),W.value.latencyMs==null?p(``,!0):(r(),f(c,{key:0},[l(`(`+s(W.value.latencyMs)+`ms)`,1)],64))],2)):p(``,!0)])],64)):p(``,!0),K.value?(r(),f(`p`,Ot,s(K.value),1)):p(``,!0),g(`div`,kt,[g(`button`,{class:`aw-pill outline`,onClick:t[13]||=e=>L.value=!1},s(e.$t(`daq.k3xdnn031`)),1),g(`button`,{class:`aw-pill`,disabled:G.value||R.value===`real`&&W.value!=null&&!W.value.ok,title:R.value===`real`&&!(W.value&&W.value.ok)?e.$t(`daq.k1needtst137`):``,onClick:ya},s(G.value?e.$t(`daq.k1bg4759100`):R.value===`real`?e.$t(`daq.k7pxjxo113`):e.$t(`daq.k1bge46t118`)),9,At)])])])):p(``,!0),xa.value?(r(),f(`div`,{key:5,class:`modal-mask`,onClick:t[25]||=re(e=>xa.value=!1,[`self`])},[g(`div`,jt,[g(`h3`,Mt,s(e.$t(`daq.k11mv96s032`)),1),g(`p`,Nt,s(e.$t(`daq.ktji4ky033`)),1),g(`table`,Pt,[g(`tbody`,null,[(r(!0),f(c,null,n(Ca.value,t=>(r(),f(`tr`,{key:t.key},[g(`td`,null,[g(`b`,null,s(t.name),1),g(`small`,Ft,s(t.code),1)]),g(`td`,It,s(t.min)+`~`+s(t.max)+` `+s(t.unit)+` · `+s(t.decimals)+` `+s(e.$t(`daq.k48oi091`)),1),g(`td`,Lt,[g(`button`,{class:`mini-btn`,onClick:e=>Da(t)},s(e.$t(`daq.k45eb0034`)),9,Rt),g(`button`,{class:`mini-btn danger`,onClick:e=>Aa(t)},s(Z.value===t.key?e.$t(`daq.k1hhheu3101`):e.$t(`daq.k3xakp114`)),9,zt)])]))),128)),Ca.value.length?p(``,!0):(r(),f(`tr`,Bt,[g(`td`,Vt,s(e.$t(`daq.kztvzbo035`)),1)]))])]),g(`p`,Ht,s(J.value?e.$t(`daq.k1iiph0s102`):e.$t(`daq.k1efixrj115`)),1),g(`div`,Ut,[g(`label`,Wt,[g(`span`,null,[l(s(e.$t(`daq.k3xhia036`)),1),t[52]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[15]||=e=>a(Q).name=e,class:`inp`,placeholder:e.$t(`daq.k5opd2t006`)},null,8,Gt),[[x,a(Q).name]])]),g(`label`,Kt,[g(`span`,null,[l(s(e.$t(`daq.k3x4ef037`)),1),t[53]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[16]||=e=>a(Q).unit=e,class:`inp`,placeholder:`如 %RH`},null,512),[[x,a(Q).unit]])]),g(`label`,qt,[g(`span`,null,s(e.$t(`daq.k1l477m0038`)),1),_(g(`input`,{"onUpdate:modelValue":t[17]||=e=>a(Q).ch=e,class:`inp`,placeholder:e.$t(`daq.kk8o4tl007`)},null,8,Jt),[[x,a(Q).ch]])]),g(`label`,Yt,[g(`span`,null,s(e.$t(`daq.k1ayxrqb039`)),1),_(g(`input`,{"onUpdate:modelValue":t[18]||=e=>a(Q).code=e,class:`inp`,placeholder:e.$t(`daq.kzn3l7l008`)},null,8,Xt),[[x,a(Q).code]])]),g(`label`,Zt,[g(`span`,null,[l(s(e.$t(`daq.k1l9jv5m040`)),1),t[54]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[19]||=e=>a(Q).min=e,type:`number`,class:`inp`},null,512),[[x,a(Q).min,void 0,{number:!0}]])]),g(`label`,Qt,[g(`span`,null,[l(s(e.$t(`daq.k1l9jv4p041`)),1),t[55]||=g(`em`,null,`*`,-1)]),_(g(`input`,{"onUpdate:modelValue":t[20]||=e=>a(Q).max=e,type:`number`,class:`inp`},null,512),[[x,a(Q).max,void 0,{number:!0}]])]),g(`label`,$t,[g(`span`,null,s(e.$t(`daq.k3mxmcx042`)),1),_(g(`input`,{"onUpdate:modelValue":t[21]||=e=>a(Q).decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[x,a(Q).decimals,void 0,{number:!0}]])]),g(`label`,en,[g(`span`,null,s(e.$t(`daq.k3xx56043`)),1),_(g(`select`,{"onUpdate:modelValue":t[22]||=e=>a(Q).icon=e,class:`inp`},[(r(!0),f(c,null,n(a(fe),e=>(r(),f(`option`,{key:e,value:e},s(Sa[e]),9,tn))),128))],512),[[b,a(Q).icon]])]),g(`label`,nn,[g(`span`,null,s(e.$t(`daq.k1f4eknv044`)),1),_(g(`input`,{"onUpdate:modelValue":t[23]||=e=>a(Q).base=e,type:`number`,class:`inp`},null,512),[[x,a(Q).base,void 0,{number:!0}]]),g(`small`,rn,s(e.$t(`daq.kytd15s045`)),1)]),g(`label`,an,[g(`span`,null,s(e.$t(`daq.k1f4ifpo046`)),1),_(g(`input`,{"onUpdate:modelValue":t[24]||=e=>a(Q).amp=e,type:`number`,class:`inp`},null,512),[[x,a(Q).amp,void 0,{number:!0}]]),g(`small`,on,s(e.$t(`daq.ksp2aji047`)),1)])]),X.value?(r(),f(`p`,sn,s(X.value),1)):p(``,!0),g(`div`,cn,[g(`button`,{class:`aw-pill outline`,onClick:Ea},s(e.$t(`daq.k48p40048`)),1),g(`button`,{class:`pill-btn`,disabled:Y.value,onClick:ka},s(Y.value?e.$t(`daq.k1b38d59103`):J.value?e.$t(`daq.k1b39281116`):e.$t(`daq.k1b3dtga119`)),9,ln)]),g(`p`,un,s(e.$t(`daq.k1w8s84s049`)),1),g(`table`,dn,[g(`tbody`,null,[(r(!0),f(c,null,n(wa.value,t=>(r(),f(`tr`,{key:t.key},[g(`td`,null,[g(`b`,null,s(t.name),1),g(`small`,fn,s(t.code),1)]),g(`td`,pn,s(t.min)+`~`+s(t.max)+` `+s(t.unit)+` · `+s(t.decimals)+` `+s(e.$t(`daq.k48oi091`)),1),g(`td`,mn,[g(`button`,{class:`mini-btn`,onClick:e=>Oa(t)},s(e.$t(`daq.k3y694050`)),9,hn)])]))),128))])])])])):p(``,!0),g(`section`,gn,[g(`button`,{class:`opt-head`,onClick:Ji},[t[56]||=g(`span`,{class:`i-tabler-flask`},null,-1),g(`b`,null,s(e.$t(`daq.k1optt001`)),1),g(`span`,_n,s(a(w).optimizations.length),1),g(`span`,{class:i([`opt-chevron`,{open:O.value}])},null,2)]),g(`div`,{class:i([`opt-body`,{open:O.value}])},[Wi.value?(r(),f(c,{key:0},[g(`div`,vn,[_(g(`select`,{"onUpdate:modelValue":t[26]||=e=>k.value=e,class:`inp-sel`,onChange:Yi},[g(`option`,yn,s(e.$t(`daq.k1optf001`)),1),(r(!0),f(c,null,n(a(w).lines,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,bn))),128))],544),[[b,k.value]]),_(g(`select`,{"onUpdate:modelValue":t[27]||=e=>A.value=e,class:`inp-sel`,onChange:M},[g(`option`,xn,s(e.$t(`daq.k1optf004`)),1),(r(!0),f(c,null,n(Ki.value,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,Sn))),128))],544),[[b,A.value]]),g(`button`,{class:`mini-act`,onClick:M},s(e.$t(`daq.k1optf002`)),1)]),a(w).optimizations.length===0?(r(),f(`p`,Cn,s(e.$t(`daq.k1opte001`)),1)):p(``,!0),g(`ul`,wn,[(r(!0),f(c,null,n(a(w).optimizations.slice(0,30),t=>(r(),f(`li`,{key:t.id,class:i([`opt-row`,t.status])},[g(`div`,Tn,[g(`span`,{class:i([`opt-status`,t.status])},s(e.$t(qi(t.status))),3),g(`b`,En,s(t.nodeName),1),g(`span`,Dn,s(t.params[0]?.from??`?`)+` → `+s(t.params[0]?.to),1),g(`span`,On,s(t.setAt.slice(5,16).replace(`T`,` `)),1),j.value[t.id]?p(``,!0):(r(),f(`button`,{key:0,class:`mini-act`,disabled:Gi.value===t.id,onClick:e=>Xi(t.id)},s(e.$t(`daq.k1opta001`)),9,kn)),t.status===`open`?(r(),f(`button`,{key:1,class:`mini-act danger`,onClick:e=>Qi(t.id)},s(e.$t(`daq.k1opta002`)),9,An)):p(``,!0)]),g(`div`,jn,[t.judge?(r(),f(`span`,{key:0,class:i([`opt-judge`,t.judge.verdict])},s(t.judge.verdict)+`(`+s(t.judge.by)+`): `+s(t.judge.reason.slice(0,70)),3)):t.status===`open`?(r(),f(`span`,Mn,s(e.$t(`daq.k1opto001`)),1)):p(``,!0),t.aggPending?(r(),f(`span`,Nn,s(e.$t(`daq.k1optw001`)),1)):t.windowAgg&&t.windowAgg.channels.length?(r(),f(`span`,Pn,[(r(!0),f(c,null,n(t.windowAgg.channels,t=>(r(),f(c,{key:t.daqNodeId},[l(s(t.ch)+` `+s($i(t.min))+`~`+s($i(t.max))+`(`+s(e.$t(`daq.k1optw002`))+s(t.breaches<0?`-`:t.breaches)+`) `,1)],64))),128))])):p(``,!0)]),j.value[t.id]?(r(),f(`div`,Fn,[(r(!0),f(c,null,n(j.value[t.id].channels,e=>(r(),f(`div`,{key:e.nodeId,class:`opt-ch`},[(r(),f(`svg`,In,[g(`polyline`,{points:Zi(e.points)},null,8,Ln)])),g(`span`,Rn,s(e.ch)+` `+s($i(e.points.at(-1)?.value??e.points.at(-1)?.avg))+s(e.unit),1)]))),128)),j.value[t.id].channels.length===0?(r(),f(`p`,zn,s(e.$t(`daq.k1opte002`)),1)):p(``,!0)])):p(``,!0)],2))),128))])],64)):p(``,!0)],2)]),y(d,{spinning:!a(C).loaded&&!a(C).error},{default:h(()=>[g(`section`,Bn,[g(`div`,Vn,[g(`div`,Hn,[g(`label`,Un,[g(`span`,null,s(e.$t(`daq.k3wj9n051`)),1),_(g(`select`,{"onUpdate:modelValue":t[28]||=e=>a(D).lineId=e,class:`inp-sel`},[g(`option`,Wn,s(e.$t(`daq.k1bkl9uj052`)),1),(r(!0),f(c,null,n(a(w).lines,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,Gn))),128)),g(`option`,Kn,s(e.$t(`daq.k3ootr6053`)),1)],512),[[b,a(D).lineId]])]),g(`label`,qn,[g(`span`,null,s(e.$t(`daq.k1i8rtqt054`)),1),_(g(`select`,{"onUpdate:modelValue":t[29]||=e=>a(D).deviceId=e,class:`inp-sel`},[g(`option`,Jn,s(e.$t(`daq.k1bkw4m2055`)),1),(r(!0),f(c,null,n(ea.value,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name)+`(`+s(e.count)+`) `,9,Yn))),128)),g(`option`,Xn,s(e.$t(`daq.k3own4q056`)),1)],512),[[b,a(D).deviceId]])]),g(`label`,{class:`flt`,title:e.$t(`daq.khb8mru009`)},[g(`span`,null,s(e.$t(`daq.k1b2tkyv057`)),1),_(g(`select`,{"onUpdate:modelValue":t[30]||=e=>a(D).lineRun=e,class:`inp-sel`},[g(`option`,Qn,s(e.$t(`daq.k3x4t1058`)),1),g(`option`,$n,s(e.$t(`daq.k1nxm3p7059`)),1),g(`option`,er,s(e.$t(`daq.k1ulx34e060`)),1)],512),[[b,a(D).lineRun]])],8,Zn),g(`label`,tr,[g(`span`,null,s(e.$t(`daq.k1iwdfef061`)),1),_(g(`select`,{"onUpdate:modelValue":t[31]||=e=>a(D).state=e,class:`inp-sel`},[g(`option`,nr,s(e.$t(`daq.k3x4t1058`)),1),g(`option`,rr,s(e.$t(`daq.k41k5c062`)),1),g(`option`,ir,s(e.$t(`daq.k49z8v063`)),1),g(`option`,ar,s(e.$t(`daq.k3xmid064`)),1),g(`option`,or,s(e.$t(`daq.k44c2n065`)),1)],512),[[b,a(D).state]])]),g(`label`,sr,[g(`span`,null,s(e.$t(`daq.k1flttpl010`)),1),_(g(`select`,{"onUpdate:modelValue":t[32]||=e=>a(D).template=e,class:`inp-sel`},[g(`option`,cr,s(e.$t(`daq.k1flttpl011`)),1),(r(!0),f(c,null,n(zi.value,e=>(r(),f(`option`,{key:e.ref,value:e.ref},s(e.label)+`(`+s(e.count)+`) `,9,lr))),128))],512),[[b,a(D).template]])]),g(`label`,ur,[g(`span`,null,s(e.$t(`daq.k1fltdrv012`)),1),_(g(`select`,{"onUpdate:modelValue":t[33]||=e=>a(D).driver=e,class:`inp-sel`},[g(`option`,dr,s(e.$t(`daq.k1fltdrv013`)),1),(r(!0),f(c,null,n(Bi.value,e=>(r(),f(`option`,{key:e.kind,value:e.kind},s(e.label)+`(`+s(e.count)+`) `,9,fr))),128))],512),[[b,a(D).driver]])]),g(`label`,{class:`flt`,title:e.$t(`daq.k1flttim014`)},[g(`span`,null,s(e.$t(`daq.k1flttim015`)),1),_(g(`select`,{"onUpdate:modelValue":t[34]||=e=>a(D).time=e,class:`inp-sel`},[g(`option`,mr,s(e.$t(`daq.k1flttim016`)),1),g(`option`,hr,s(e.$t(`daq.k1timlv017`)),1),g(`option`,gr,s(e.$t(`daq.k1timhr018`)),1),g(`option`,_r,s(e.$t(`daq.k1timdy019`)),1),g(`option`,vr,s(e.$t(`daq.k1timld020`)),1),g(`option`,yr,s(e.$t(`daq.k1timnv021`)),1)],512),[[b,a(D).time]])],8,pr),g(`label`,br,[g(`span`,null,s(e.$t(`daq.k1fltsrc022`)),1),_(g(`input`,{"onUpdate:modelValue":t[35]||=e=>a(D).search=e,class:`inp-sel flt-search`,type:`search`,placeholder:e.$t(`daq.k1fltsph023`)},null,8,xr),[[x,a(D).search]])]),Li.value?(r(),f(`button`,{key:0,class:`mini-btn clear-btn`,onClick:Ri},s(e.$t(`daq.k1fygck2066`)),1)):p(``,!0)]),g(`span`,Sr,s(F.value.length)+` / `+s(a(C).nodes.length)+` `+s(e.$t(`daq.k45uio067`)),1)]),g(`div`,Cr,[g(`div`,{class:i([`ops-panel alarm-panel`,{live:a(C).alarms.length>0}])},[g(`div`,wr,[t[57]||=g(`span`,{class:`i-tabler-bell-ringing bell`},null,-1),g(`b`,null,s(e.$t(`daq.k1alarm141`)),1),g(`span`,{class:i([`mono cnt`,{hot:a(C).alarms.length>0}])},s(a(C).alarms.length),3)]),g(`div`,Tr,[a(C).alarms.length===0?(r(),f(`p`,Er,s(e.$t(`daq.k1evt001`)),1)):(r(!0),f(c,{key:1},n(a(C).alarms,n=>(r(),f(`div`,{key:n.id,class:`alarm-row`},[t[58]||=g(`span`,{class:`i-tabler-alert-triangle tri`},null,-1),g(`b`,null,s(n.nodeName),1),g(`span`,Dr,s(n.metric),1),g(`span`,Or,s(n.value)+` `+s(n.rule===`lt-min`?`<`:`>`)+` `+s(n.threshold),1),n.escalation>0?(r(),f(`small`,kr,`+`+s(n.escalation),1)):p(``,!0),g(`button`,{class:`mini-btn ack`,onClick:e=>Fi(n.id)},s(e.$t(`daq.k1ack142`)),9,Ar)]))),128))])],2),g(`div`,jr,[g(`div`,Mr,[t[60]||=g(`span`,{class:`i-tabler-activity`},null,-1),g(`b`,null,s(e.$t(`daq.k1evt002`)),1),y(u,{class:`panel-link`,to:`/logs`},{default:h(()=>[l(s(e.$t(`daq.k1evt003`)),1),t[59]||=g(`span`,{class:`i-tabler-arrow-right`},null,-1)]),_:1})]),g(`div`,Nr,[a(ji).recent.length===0?(r(),f(`p`,Pr,s(e.$t(`daq.k1evt004`)),1)):(r(!0),f(c,{key:1},n(a(ji).recent,(t,n)=>(r(),f(`div`,{key:`${t.at}:${t.actor}:${t.action}:${n}`,class:`evt-row`},[g(`span`,Fr,s(Ni(t.at)),1),g(`span`,{class:i([`src-badge`,t.actorKind])},s(t.actorKind===`agent`?`Agent`:t.actorKind===`user`?e.$t(`logs.src.user`):e.$t(`logs.src.system`)),3),g(`span`,{class:i([`kind-chip`,t.kind])},s(Mi(t.kind)),3),g(`span`,{class:`txt`,title:t.summary},s(t.summary),9,Ir)]))),128))])])]),g(`table`,Lr,[g(`thead`,null,[g(`tr`,null,[g(`th`,null,s(e.$t(`daq.k45uio067`)),1),g(`th`,null,s(e.$t(`daq.k42w8s068`)),1),g(`th`,null,s(e.$t(`daq.k3mv305069`)),1),g(`th`,null,s(e.$t(`daq.k1trnd001`)),1),g(`th`,null,s(e.$t(`daq.k1l6g2ga070`)),1),g(`th`,null,s(e.$t(`daq.k3zi0nf071`)),1),g(`th`,null,s(e.$t(`daq.k4a0la072`)),1),g(`th`,null,s(e.$t(`daq.k3wj9n051`)),1),g(`th`,{title:e.$t(`daq.k1runtipc131`)},s(e.$t(`daq.k1b2tkyv057`)),9,Rr),g(`th`,{title:e.$t(`daq.k1prdrtip132`)},s(e.$t(`daq.k1prodrc128`)),9,zr),g(`th`,null,s(e.$t(`daq.k1i8rtqt054`)),1),g(`th`,Br,s(e.$t(`daq.k40aa6073`)),1)])]),g(`tbody`,null,[(r(!0),f(c,null,n(la.value,({n:o,c:d})=>(r(),f(`tr`,{key:o.id,class:i({"row-recipe-alarm":d.alarm})},[g(`td`,null,[g(`span`,Vr,s(o.id.slice(0,8)),1),g(`b`,null,s(o.name),1),g(`small`,Hr,s(d.tpl),1)]),g(`td`,null,[g(`span`,{class:i([`st-pill`,[d.pill.key]]),title:d.pill.tip},s(d.pill.label),11,Ur)]),g(`td`,{class:i([`mono val`,{stale:!d.live,"val-alarm":o.state===`alarm`||d.alarm}]),title:d.live?void 0:d.pill.tip},[l(s(o.value==null?`--`:o.value.toFixed(o.decimals))+` `,1),g(`small`,null,s(o.unit),1)],10,Wr),g(`td`,Gr,[(r(),f(`svg`,{class:`trend`,viewBox:`0 0 120 26`,preserveAspectRatio:`none`,title:e.$t(`daq.k1trnd002`)},[T(o.hist,E(o).min)==null?p(``,!0):(r(),f(`line`,{key:0,class:`lim`,x1:`0`,y1:T(o.hist,E(o).min),x2:`120`,y2:T(o.hist,E(o).min)},null,8,qr)),T(o.hist,E(o).max)==null?p(``,!0):(r(),f(`line`,{key:1,class:`lim max`,x1:`0`,y1:T(o.hist,E(o).max),x2:`120`,y2:T(o.hist,E(o).max)},null,8,Jr)),g(`polyline`,{class:i([`trace`,{alarm:o.state===`alarm`||d.alarm}]),points:Pi(o.hist)},null,10,Yr)],8,Kr))]),g(`td`,Xr,s(fa(o.intervalMs)),1),g(`td`,Zr,s(pa(o.publishIntervalMs)),1),g(`td`,null,[g(`span`,{class:i([`drv-tag`,{planned:ja(o.driver)}]),title:ja(o.driver)?e.$t(`daq.k1plndrv138`):``},s(o.driver),11,Qr)]),g(`td`,null,[g(`select`,{class:`line-sel`,value:o.lineId,title:e.$t(`daq.k3q23v3010`),onChange:e=>Ei(o.id,e)},[g(`option`,ei,s(e.$t(`daq.k3ootr6053`)),1),(r(!0),f(c,null,n(a(w).lines,e=>(r(),f(`option`,{key:e.id,value:e.id},s(e.name),9,ti))),128))],40,$r)]),g(`td`,null,[o.lineId?(r(),f(`span`,{key:0,class:i([`run-pill`,{on:a(w).lineStateOf(o.lineId).active}]),title:e.$t(`daq.k1runtipc131`)},[t[61]||=g(`span`,{class:`rp-dot`},null,-1),l(` `+s(a(w).lineStateOf(o.lineId).active?e.$t(`daq.k3vp67i096`):e.$t(`daq.k3ozyqz117`)),1)],10,ni)):(r(),f(`span`,ri,s(e.$t(`daq.k3ootr6053`)),1))]),g(`td`,ii,[o.lineId&&a(w).lineStateOf(o.lineId).active?(r(),f(c,{key:0},[g(`b`,{title:e.$t(`daq.k1prdrtip132`)},s(a(w).lineStateOf(o.lineId).productName||`--`),9,ai),g(`small`,{class:`mono`,title:e.$t(`daq.k1prdrtip132`)},s(a(w).lineStateOf(o.lineId).recipeName||`--`),9,oi)],64)):(r(),f(`span`,si,`--`))]),g(`td`,null,[g(`select`,{class:`line-sel`,value:o.deviceBindingId??``,title:e.$t(`daq.k2bindtip137`),onChange:e=>Di(o.id,e)},[g(`option`,li,s(e.$t(`daq.k3own4q056`)),1),(r(!0),f(c,null,n(da.value,e=>(r(),f(`option`,{key:e.id,value:e.id},s(a(ua).get(e.id)??e.name),9,ui))),128))],40,ci)]),g(`td`,di,[g(`button`,{class:i([`node-toggle`,{off:!o.enabled}]),title:o.enabled?e.$t(`daq.k1nodestop146`):e.$t(`daq.k1nodestart147`),onClick:e=>Oi(o)},[g(`span`,{class:i(o.enabled?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),l(` `+s(o.enabled?e.$t(`daq.k1nodestop146`):e.$t(`daq.k1nodestart147`)),1)],10,fi),y(u,{class:`console-link`,to:`/daq/${o.id}`},{default:h(()=>[t[62]||=g(`span`,{class:`i-tabler-dashboard`},null,-1),l(` `+s(e.$t(`daq.k3o3jg2074`)),1)]),_:1},8,[`to`])])],2))),128)),a(C).loaded&&a(C).nodes.length===0?(r(),f(`tr`,pi,[g(`td`,mi,[g(`div`,hi,[g(`p`,gi,s(e.$t(`daq.kvhjyc3075`)),1)])])])):a(C).loaded&&F.value.length===0?(r(),f(`tr`,_i,[g(`td`,vi,[g(`div`,yi,[g(`p`,bi,s(e.$t(`daq.k1w20qew076`)),1)])])])):p(``,!0)])])])]),_:1},8,[`spinning`]),a(C).error?(r(),f(`p`,xi,[l(s(a(C).error)+`(`,1),y(u,{to:`/workshop`},{default:h(()=>[l(s(e.$t(`daq.k1bhhheq077`)),1)]),_:1}),t[63]||=l(`) `,-1)])):p(``,!0)])}}}),[[`__scopeId`,`data-v-ad25ed6d`]]);export{C as default};
@@ -1 +1 @@
1
- import{ft as e}from"./BSCpFtzG.js";import{t}from"./36oeS8_R2.js";var n=class extends Error{code;status;constructor(e,t,n){super(n),this.name=`ApiError`,this.code=e,this.status=t}};function r(e=!0){let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={};return t&&(n.authorization=`Bearer ${decodeURIComponent(t)}`),e&&(n[`content-type`]=`application/json`),n}var i=e=>new Promise(t=>setTimeout(t,e));function a(e){let t=(e?.method??`GET`).toUpperCase();return t===`GET`||t===`HEAD`}async function o(e,t,i){let a;try{a=await fetch(e+t,{...i,headers:{...r(!!i?.body),...i?.headers}})}catch{throw new n(`NETWORK`,0,`无法连接服务器,请检查网络或服务状态`)}let o=null;try{o=await a.json()}catch{}if(!a.ok)throw new n(o?.code??`HTTP_${a.status}`,a.status,o?.message||`请求失败(HTTP ${a.status})`);if(o?.code!==0)throw new n(o?.code??`REQUEST_ERROR`,a.status,o?.message||`请求失败`);return o.data}async function s(e){let{base:t,path:r=``,init:s,retries:c=0}=e,l=a(s),u=l?c+1:1,d;for(let e=0;e<u;e++)try{return await o(t,r,s)}catch(t){let r=t instanceof n?t:new n(`INTERNAL_ERROR`,0,t instanceof Error?t.message:String(t)),a=l&&(r.code===`NETWORK`||r.status>=500);if(d=r,!a||e===u-1)throw r;await i(400*(e+1))}throw d??new n(`INTERNAL_ERROR`,0,`请求失败`)}var c=[{key:`temp-sp`,name:`温度设定器`,code:`TEMP · SP`,ch:`烘箱温度设定`,unit:`℃`,min:150,max:200,decimals:1,icon:`thermo`,semantics:`烘箱/熔体温度设定:升高使热塑温度上升(成膜更均匀但能耗高、过热降解风险),降低则偏冷易厚度不均。调整后需等待热惯性(数十秒级)再评估效果。`},{key:`speed-sp`,name:`速度设定器`,code:`LINE · SP`,ch:`产线速度设定`,unit:`m/min`,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度设定:升速提高产能但缩短物料受热时间(温度补偿需联动),降速利于精细工艺。速度变化会同步影响张力与厚度分布。`},{key:`tension-sp`,name:`张力设定器`,code:`TENSION · SP`,ch:`膜张力设定`,unit:`kN`,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力设定:张力过大易断膜/拉伸变形,过小则跑偏起皱。调整需平缓,并与速度联动观察。`},{key:`pressure-sp`,name:`压力设定器`,code:`PRESSURE · SP`,ch:`熔体压力设定`,unit:`MPa`,min:.6,max:1.2,decimals:2,icon:`pressure`,semantics:`熔体压力设定:反映挤出/泵送负荷,压力偏高提示阻力大或温度偏低,偏低可能是料位不足。调整需小幅步进。`}],l=[{kind:`mock`,label:`Mock 模拟 PLC`,status:`builtin`,configFields:[]},{kind:`modbus-tcp`,label:`Modbus TCP(PLC/网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`设备地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.10`,hint:`PLC 或 Modbus 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`Modbus TCP 标准端口 502`},{key:`unitId`,label:`单元号(unitId)`,type:`number`,default:1,hint:`从站地址,常见 1`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`,hint:`如 int16 用 0~2000 表示 0.1 分辨率`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`opcua`,label:`OPC UA(PLC/MES 写节点值)`,status:`real`,configFields:[{key:`endpoint`,label:`端点(endpoint)`,type:`string`,required:!0,placeholder:`opc.tcp://192.168.1.10:4840`,hint:`OPC UA 服务器地址`},{key:`nodeId`,label:`节点 ID(NodeId)`,type:`string`,required:!0,placeholder:`ns=2;s=Channel1.Device1.SetTemp`,hint:`要写入的变量节点`},{key:`securityMode`,label:`安全策略`,type:`select`,default:`None`,options:[{value:`None`,label:`None(无加密,内网常用)`},{value:`Sign`,label:`Sign(签名)`},{value:`SignAndEncrypt`,label:`SignAndEncrypt(签名+加密)`}]},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`modbus-rtu`,label:`Modbus RTU over TCP(串口网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`网关地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.50`,hint:`串口服务器/RTU 转 TCP 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`网关透传端口(常见 502 / 8899 / 26)`},{key:`unitId`,label:`从站地址(unitId)`,type:`number`,default:1,hint:`RS-485 总线上的从站地址`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`mqtt`,label:`MQTT(发布设定值到 Broker)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20`,hint:`MQTT Broker 地址(与边缘网关约定同一 Broker)`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 端口 1883`},{key:`topic`,label:`下发主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/setpoint`,hint:`网关订阅的控制主题(勿与采集主题相同)`},{key:`jsonKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = 纯数字报文;填写 = {"键":值} JSON 报文`},{key:`qos`,label:`QoS`,type:`number`,default:1,hint:`0=至多一次 1=至少一次(推荐)`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(POST 设定值)`,status:`real`,configFields:[{key:`url`,label:`写接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/setpoint`,hint:`接收设定值的 HTTP 接口(POST JSON)`},{key:`bodyKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = {"value": 设定值};填写 = {"键": 设定值}`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]}],u=[`#3aa0ff`,`#f4c542`,`#35e0a0`,`#41c8f4`,`#b58cff`,`#ff8a5c`],d=(e,t)=>s({base:`/api/workshop/dcw`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0});function f(){let n=e([]),r=e({running:!0,nodesTotal:0,nodesOnline:0,writesTotal:0,writesFailed:0}),i=e(c.map(e=>({...e}))),a=e([]),o=e([]),s=e([]),l=e([]),u=e([]),f=e({}),p=e([]);function m(e){let t=n.findIndex(t=>t.id===e.id);t>=0?n[t]=Object.assign(n[t],e):n.push(e)}function h(e){if(e.node){if(e.op===`removed`){let t=n.findIndex(t=>t.id===e.node.id);t>=0&&n.splice(t,1);return}m(e.node)}}function g(){let e=globalThis;return e.__dcwBusFed?()=>{}:(e.__dcwBusFed=!0,t().subscribe(e=>{if(e.type===`dcw.written`){let t=e.payload,r=n.find(e=>e.id===t.nodeId);r&&(r.value=t.value,r.state=t.ok?`ok`:`error`,r.lastWriteAt=t.at,t.ok&&(r.lastAckAt=t.at)),s.unshift({id:`${t.nodeId}-${t.at}`,nodeId:t.nodeId,nodeName:r?.name??t.nodeId,param:``,eng:t.value,raw:t.raw,ok:t.ok,message:t.message,recipeRunId:t.recipeRunId,at:t.at}),s.length>60&&s.splice(60)}else if(e.type===`dcw.node.changed`)h(e.payload);else if(e.type===`dcw.controller`)Object.assign(r,e.payload);else if(e.type===`dcw.optimization.changed`){let t=e.payload.record,n=p.findIndex(e=>e.id===t.id);n>=0?p[n]=t:p.unshift(t)}}))}async function _(){try{let e=await d(``);n.splice(0,n.length,...e.nodes),Object.assign(r,e.controller),e.templates?.length&&i.splice(0,i.length,...e.templates.map(e=>({...e}))),a.splice(0,a.length,...e.recipes??[]),o.splice(0,o.length,...e.runs??[]),s.splice(0,s.length,...e.history??[]),l.splice(0,l.length,...e.products??[]),u.splice(0,u.length,...e.lines??[]);for(let e of Object.keys(f))Reflect.deleteProperty(f,e);for(let t of e.lineStates??[])f[t.lineId]=t;v.loaded=!0,v.error=``}catch(e){v.error=e instanceof Error?e.message:String(e)}}let v=e({nodes:n,controller:r,templates:i,recipes:a,runs:o,history:s,products:l,lines:u,lineStates:f,optimizations:p,loaded:!1,error:``,ensureWsFeed:g,load:_,loadOptimizations:async e=>{let t=new URLSearchParams;e?.lineId&&t.set(`lineId`,e.lineId),e?.recipeId&&t.set(`recipeId`,e.recipeId),e?.nodeId&&t.set(`nodeId`,e.nodeId),e?.status&&t.set(`status`,e.status),t.set(`limit`,String(e?.limit??100));let n=await d(`/optimizations?${t.toString()}`);p.splice(0,p.length,...n.records)},fetchLedger:async e=>(await d(`/${e}/param-ledger`)).ledger,optimizationSeries:async(e,t)=>d(`/optimizations/${e}/series${t?`?windowMs=${t}`:``}`),judgeOptimization:async(e,t,n)=>{await d(`/optimizations/${e}/judge`,{method:`POST`,body:JSON.stringify({verdict:t,reason:n})})},rollbackOptimization:async e=>{await d(`/optimizations/${e}/rollback`,{method:`POST`,body:JSON.stringify({})})},rollbackNode:async(e,t)=>{await d(`/journal/node/${e}/rollback`,{method:`POST`,body:JSON.stringify({to:t})})},markGood:async(e,t)=>{await d(`/recipes/${e}/mark-good`,{method:`POST`,body:JSON.stringify({runId:t})})},rollbackRecipeGood:async e=>{await d(`/recipes/${e}/rollback-good`,{method:`POST`,body:JSON.stringify({})})},createFromTemplate:async(e,t)=>{let n=await d(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return m(n.node),n.node},patchNode:async(e,t)=>{await d(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})},removeNode:async e=>{await d(`/${e}`,{method:`DELETE`});let t=n.findIndex(t=>t.id===e);t>=0&&n.splice(t,1)},bindNode:async(e,t)=>{m((await d(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)},write:async(e,t)=>d(`/${e}/write`,{method:`POST`,body:JSON.stringify({value:t})}).then(e=>e.outcome),testDriver:async(e,t)=>d(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})}).then(e=>e.test),testNode:async e=>d(`/${e}/test`,{method:`POST`}).then(e=>e.test),startStop:async e=>{let t=await d(`/controller`,{method:`POST`,body:JSON.stringify({action:e})});Object.assign(r,t.controller)},createTemplate:async e=>{let t=await d(`/templates`,{method:`POST`,body:JSON.stringify(e)});return i.push(t.template),t.template},createRecipe:async e=>{let t=await d(`/recipes`,{method:`POST`,body:JSON.stringify(e)});return a.push(t.recipe),t.recipe},updateRecipe:async(e,t)=>{let n=await d(`/recipes/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=a.findIndex(t=>t.id===e);return r>=0&&(a[r]=n.recipe),n.recipe},removeRecipe:async e=>{await d(`/recipes/${e}`,{method:`DELETE`});let t=a.findIndex(t=>t.id===e);t>=0&&a.splice(t,1)},applyRecipe:async e=>{let t=await d(`/recipes/${e}/apply`,{method:`POST`});return o.push(t.run),t.run},closeRun:async e=>{let t=await d(`/runs/${e}/close`,{method:`POST`}),n=o.findIndex(t=>t.id===e);return n>=0&&(o[n]=t.run),t.run},runData:e=>d(`/runs/${e}/data`),nodeById:e=>n.find(t=>t.id===e),createProduct:async e=>{let t=await d(`/products`,{method:`POST`,body:JSON.stringify(e)});return l.push(t.product),t.product},updateProduct:async(e,t)=>d(`/products/${e}`,{method:`PATCH`,body:JSON.stringify(t)}).then(e=>(y(),e.product)),removeProduct:async e=>{await d(`/products/${e}`,{method:`DELETE`});let t=l.findIndex(t=>t.id===e);t>=0&&l.splice(t,1)},createLine:async e=>{let t=await d(`/lines`,{method:`POST`,body:JSON.stringify(e)});return u.push(t.line),t.line},updateLine:async(e,t)=>{let n=await d(`/lines/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=u.findIndex(t=>t.id===e);r>=0&&(u[r]=n.line)},removeLine:async(e,t=!1)=>{await d(`/lines/${e}${t?`?purge=1`:``}`,{method:`DELETE`});let n=u.findIndex(t=>t.id===e);n>=0&&u.splice(n,1),Reflect.deleteProperty(f,e),await _()},startLine:async(e,t)=>{let n=await d(`/lines/${e}/start`,{method:`POST`,body:JSON.stringify({recipeId:t})});f[e]=n.line},stopLine:async e=>{let t=await d(`/lines/${e}/stop`,{method:`POST`});f[e]=t.line},lineStateOf:e=>f[e]??{lineId:e,active:!1,runId:null,recipeId:null,recipeName:null,productId:null,productName:null,startedAt:null,taggedSamples:0},queryLine:e=>{let t=new URLSearchParams;return e.lineId&&t.set(`lineId`,e.lineId),e.productId&&t.set(`productId`,e.productId),e.recipeId&&t.set(`recipeId`,e.recipeId),e.paramKey&&t.set(`paramKey`,e.paramKey),e.nodeId&&t.set(`nodeId`,e.nodeId),e.fromMs!=null&&t.set(`from`,String(e.fromMs)),e.toMs!=null&&t.set(`to`,String(e.toMs)),e.bucketMs!=null&&t.set(`bucketMs`,String(e.bucketMs)),e.limit!=null&&t.set(`limit`,String(e.limit)),d(`/line/query?${t.toString()}`)}});async function y(){try{let e=await d(``);l.splice(0,l.length,...e.products??[]),a.splice(0,a.length,...e.recipes??[])}catch{}}return v}var p=`__dcwStream`;function m(){let e=globalThis;return e[p]||(e[p]=f()),e[p]}export{s as i,l as n,u as r,m as t};
1
+ import{ft as e}from"./BSCpFtzG.js";import{t}from"./36oeS8_R2.js";var n=class extends Error{code;status;constructor(e,t,n){super(n),this.name=`ApiError`,this.code=e,this.status=t}};function r(e=!0){let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={};return t&&(n.authorization=`Bearer ${decodeURIComponent(t)}`),e&&(n[`content-type`]=`application/json`),n}var i=e=>new Promise(t=>setTimeout(t,e));function a(e){let t=(e?.method??`GET`).toUpperCase();return t===`GET`||t===`HEAD`}async function o(e,t,i){let a;try{a=await fetch(e+t,{...i,headers:{...r(!!i?.body),...i?.headers}})}catch{throw new n(`NETWORK`,0,`无法连接服务器,请检查网络或服务状态`)}let o=null;try{o=await a.json()}catch{}if(!a.ok)throw new n(o?.code??`HTTP_${a.status}`,a.status,o?.message||`请求失败(HTTP ${a.status})`);if(o?.code!==0)throw new n(o?.code??`REQUEST_ERROR`,a.status,o?.message||`请求失败`);return o.data}async function s(e){let{base:t,path:r=``,init:s,retries:c=0}=e,l=a(s),u=l?c+1:1,d;for(let e=0;e<u;e++)try{return await o(t,r,s)}catch(t){let r=t instanceof n?t:new n(`INTERNAL_ERROR`,0,t instanceof Error?t.message:String(t)),a=l&&(r.code===`NETWORK`||r.status>=500);if(d=r,!a||e===u-1)throw r;await i(400*(e+1))}throw d??new n(`INTERNAL_ERROR`,0,`请求失败`)}var c=[{key:`temp-sp`,name:`温度设定器`,code:`TEMP · SP`,ch:`烘箱温度设定`,unit:`℃`,min:150,max:200,decimals:1,icon:`thermo`,semantics:`烘箱/熔体温度设定:升高使热塑温度上升(成膜更均匀但能耗高、过热降解风险),降低则偏冷易厚度不均。调整后需等待热惯性(数十秒级)再评估效果。`},{key:`speed-sp`,name:`速度设定器`,code:`LINE · SP`,ch:`产线速度设定`,unit:`m/min`,min:280,max:360,decimals:0,icon:`encoder`,semantics:`产线速度设定:升速提高产能但缩短物料受热时间(温度补偿需联动),降速利于精细工艺。速度变化会同步影响张力与厚度分布。`},{key:`tension-sp`,name:`张力设定器`,code:`TENSION · SP`,ch:`膜张力设定`,unit:`kN`,min:18,max:26,decimals:1,icon:`tension`,semantics:`膜张力设定:张力过大易断膜/拉伸变形,过小则跑偏起皱。调整需平缓,并与速度联动观察。`},{key:`pressure-sp`,name:`压力设定器`,code:`PRESSURE · SP`,ch:`熔体压力设定`,unit:`MPa`,min:.6,max:1.2,decimals:2,icon:`pressure`,semantics:`熔体压力设定:反映挤出/泵送负荷,压力偏高提示阻力大或温度偏低,偏低可能是料位不足。调整需小幅步进。`}],l=[{kind:`mock`,label:`Mock 模拟 PLC`,status:`builtin`,configFields:[]},{kind:`modbus-tcp`,label:`Modbus TCP(PLC/网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`设备地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.10`,hint:`PLC 或 Modbus 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`Modbus TCP 标准端口 502`},{key:`unitId`,label:`单元号(unitId)`,type:`number`,default:1,hint:`从站地址,常见 1`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`,hint:`如 int16 用 0~2000 表示 0.1 分辨率`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`opcua`,label:`OPC UA(PLC/MES 写节点值)`,status:`real`,configFields:[{key:`endpoint`,label:`端点(endpoint)`,type:`string`,required:!0,placeholder:`opc.tcp://192.168.1.10:4840`,hint:`OPC UA 服务器地址`},{key:`nodeId`,label:`节点 ID(NodeId)`,type:`string`,required:!0,placeholder:`ns=2;s=Channel1.Device1.SetTemp`,hint:`要写入的变量节点`},{key:`securityMode`,label:`安全策略`,type:`select`,default:`None`,options:[{value:`None`,label:`None(无加密,内网常用)`},{value:`Sign`,label:`Sign(签名)`},{value:`SignAndEncrypt`,label:`SignAndEncrypt(签名+加密)`}]},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`modbus-rtu`,label:`Modbus RTU over TCP(串口网关 写保持寄存器)`,status:`real`,configFields:[{key:`host`,label:`网关地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.50`,hint:`串口服务器/RTU 转 TCP 网关 IP`},{key:`port`,label:`端口`,type:`number`,default:502,hint:`网关透传端口(常见 502 / 8899 / 26)`},{key:`unitId`,label:`从站地址(unitId)`,type:`number`,default:1,hint:`RS-485 总线上的从站地址`},{key:`register`,label:`写寄存器地址`,type:`number`,required:!0,placeholder:`40021`,hint:`4xxxx=保持寄存器(写);回读同址校验`},{key:`dataType`,label:`数据类型`,type:`select`,default:`float32`,options:[{value:`int16`,label:`int16(1 寄存器)`},{value:`uint16`,label:`uint16(1 寄存器)`},{value:`int32`,label:`int32(2 寄存器)`},{value:`uint32`,label:`uint32(2 寄存器)`},{value:`float32`,label:`float32(2 寄存器,常用)`}]},{key:`byteOrder`,label:`字节序`,type:`select`,default:`big`,options:[{value:`big`,label:`大端(AB CD)`},{value:`little`,label:`小端(CD AB)`},{value:`wordSwap`,label:`字交换(CD AB / 交换单字)`}]},{key:`engMin`,label:`工程量程下限`,type:`number`,hint:`线性换算:eng ∈ [engMin, engMax] ↔ raw ∈ [rawMin, rawMax];float32 且未填原始量程时 raw=eng`},{key:`engMax`,label:`工程量程上限`,type:`number`},{key:`rawMin`,label:`原始值下限`,type:`number`},{key:`rawMax`,label:`原始值上限`,type:`number`}]},{kind:`mqtt`,label:`MQTT(发布设定值到 Broker)`,status:`real`,configFields:[{key:`host`,label:`Broker 地址(host)`,type:`string`,required:!0,placeholder:`192.168.1.20`,hint:`MQTT Broker 地址(与边缘网关约定同一 Broker)`},{key:`port`,label:`端口`,type:`number`,default:1883,hint:`MQTT TCP 端口 1883`},{key:`topic`,label:`下发主题(topic)`,type:`string`,required:!0,placeholder:`factory/line1/setpoint`,hint:`网关订阅的控制主题(勿与采集主题相同)`},{key:`jsonKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = 纯数字报文;填写 = {"键":值} JSON 报文`},{key:`qos`,label:`QoS`,type:`number`,default:1,hint:`0=至多一次 1=至少一次(推荐)`},{key:`username`,label:`用户名(可选)`,type:`string`},{key:`password`,label:`密码(可选)`,type:`string`}]},{kind:`http`,label:`HTTP/REST(POST 设定值)`,status:`real`,configFields:[{key:`url`,label:`写接口地址(URL)`,type:`string`,required:!0,placeholder:`http://192.168.1.30/api/setpoint`,hint:`接收设定值的 HTTP 接口(POST JSON)`},{key:`bodyKey`,label:`JSON 键(可选)`,type:`string`,placeholder:`setpoint`,hint:`留空 = {"value": 设定值};填写 = {"键": 设定值}`},{key:`headersJSON`,label:`请求头(可选)`,type:`string`,placeholder:`{"Authorization":"Bearer xxx"}`,hint:`JSON 对象形式的 HTTP 头`}]}],u=[`#3aa0ff`,`#f4c542`,`#35e0a0`,`#41c8f4`,`#b58cff`,`#ff8a5c`],d=(e,t)=>s({base:`/api/workshop/dcw`,path:e,init:t,retries:(t?.method??`GET`).toUpperCase()===`GET`?2:0});function f(){let n=e([]),r=e({running:!0,nodesTotal:0,nodesOnline:0,writesTotal:0,writesFailed:0}),i=e(c.map(e=>({...e}))),a=e([]),o=e([]),s=e([]),l=e([]),u=e([]),f=e({}),p=e([]);function m(e){let t=n.findIndex(t=>t.id===e.id);t>=0?n[t]=Object.assign(n[t],e):n.push(e)}function h(e){if(e.node){if(e.op===`removed`){let t=n.findIndex(t=>t.id===e.node.id);t>=0&&n.splice(t,1);return}m(e.node)}}function g(){let e=globalThis;return e.__dcwBusFed?()=>{}:(e.__dcwBusFed=!0,t().subscribe(e=>{if(e.type===`dcw.written`){let t=e.payload,r=n.find(e=>e.id===t.nodeId);r&&(r.value=t.value,r.state=t.ok?`ok`:`error`,r.lastWriteAt=t.at,t.ok&&(r.lastAckAt=t.at)),s.unshift({id:`${t.nodeId}-${t.at}`,nodeId:t.nodeId,nodeName:r?.name??t.nodeId,param:``,eng:t.value,raw:t.raw,ok:t.ok,message:t.message,recipeRunId:t.recipeRunId,at:t.at}),s.length>60&&s.splice(60)}else if(e.type===`dcw.read`){let t=e.payload,r=n.find(e=>e.id===t.nodeId);r&&(t.ok&&(r.readValue=t.value),r.lastReadAt=t.at,r.lastReadError=t.ok?null:t.message)}else if(e.type===`dcw.node.changed`)h(e.payload);else if(e.type===`dcw.controller`)Object.assign(r,e.payload);else if(e.type===`dcw.optimization.changed`){let t=e.payload.record,n=p.findIndex(e=>e.id===t.id);n>=0?p[n]=t:p.unshift(t)}}))}async function _(){try{let e=await d(``);n.splice(0,n.length,...e.nodes),Object.assign(r,e.controller),e.templates?.length&&i.splice(0,i.length,...e.templates.map(e=>({...e}))),a.splice(0,a.length,...e.recipes??[]),o.splice(0,o.length,...e.runs??[]),s.splice(0,s.length,...e.history??[]),l.splice(0,l.length,...e.products??[]),u.splice(0,u.length,...e.lines??[]);for(let e of Object.keys(f))Reflect.deleteProperty(f,e);for(let t of e.lineStates??[])f[t.lineId]=t;v.loaded=!0,v.error=``}catch(e){v.error=e instanceof Error?e.message:String(e)}}let v=e({nodes:n,controller:r,templates:i,recipes:a,runs:o,history:s,products:l,lines:u,lineStates:f,optimizations:p,loaded:!1,error:``,ensureWsFeed:g,load:_,loadOptimizations:async e=>{let t=new URLSearchParams;e?.lineId&&t.set(`lineId`,e.lineId),e?.recipeId&&t.set(`recipeId`,e.recipeId),e?.nodeId&&t.set(`nodeId`,e.nodeId),e?.status&&t.set(`status`,e.status),t.set(`limit`,String(e?.limit??100));let n=await d(`/optimizations?${t.toString()}`);p.splice(0,p.length,...n.records)},fetchLedger:async e=>(await d(`/${e}/param-ledger`)).ledger,optimizationSeries:async(e,t)=>d(`/optimizations/${e}/series${t?`?windowMs=${t}`:``}`),judgeOptimization:async(e,t,n)=>{await d(`/optimizations/${e}/judge`,{method:`POST`,body:JSON.stringify({verdict:t,reason:n})})},rollbackOptimization:async e=>{await d(`/optimizations/${e}/rollback`,{method:`POST`,body:JSON.stringify({})})},rollbackNode:async(e,t)=>{await d(`/journal/node/${e}/rollback`,{method:`POST`,body:JSON.stringify({to:t})})},markGood:async(e,t)=>{await d(`/recipes/${e}/mark-good`,{method:`POST`,body:JSON.stringify({runId:t})})},rollbackRecipeGood:async e=>{await d(`/recipes/${e}/rollback-good`,{method:`POST`,body:JSON.stringify({})})},createFromTemplate:async(e,t)=>{let n=await d(``,{method:`POST`,body:JSON.stringify({templateRef:e,...t})});return m(n.node),n.node},patchNode:async(e,t)=>{await d(`/${e}`,{method:`PATCH`,body:JSON.stringify(t)})},removeNode:async e=>{await d(`/${e}`,{method:`DELETE`});let t=n.findIndex(t=>t.id===e);t>=0&&n.splice(t,1)},bindNode:async(e,t)=>{m((await d(`/${e}/bind`,{method:`POST`,body:JSON.stringify({deviceId:t})})).node)},write:async(e,t)=>d(`/${e}/write`,{method:`POST`,body:JSON.stringify({value:t})}).then(e=>e.outcome),readNode:async e=>d(`/${e}/read`,{method:`POST`,body:JSON.stringify({})}).then(e=>e.read),testDriver:async(e,t)=>d(`/test-driver`,{method:`POST`,body:JSON.stringify({driver:e,driverConfig:t})}).then(e=>e.test),testNode:async e=>d(`/${e}/test`,{method:`POST`}).then(e=>e.test),startStop:async e=>{let t=await d(`/controller`,{method:`POST`,body:JSON.stringify({action:e})});Object.assign(r,t.controller)},createTemplate:async e=>{let t=await d(`/templates`,{method:`POST`,body:JSON.stringify(e)});return i.push(t.template),t.template},createRecipe:async e=>{let t=await d(`/recipes`,{method:`POST`,body:JSON.stringify(e)});return a.push(t.recipe),t.recipe},updateRecipe:async(e,t)=>{let n=await d(`/recipes/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=a.findIndex(t=>t.id===e);return r>=0&&(a[r]=n.recipe),n.recipe},removeRecipe:async e=>{await d(`/recipes/${e}`,{method:`DELETE`});let t=a.findIndex(t=>t.id===e);t>=0&&a.splice(t,1)},applyRecipe:async e=>{let t=await d(`/recipes/${e}/apply`,{method:`POST`});return o.push(t.run),t.run},closeRun:async e=>{let t=await d(`/runs/${e}/close`,{method:`POST`}),n=o.findIndex(t=>t.id===e);return n>=0&&(o[n]=t.run),t.run},runData:e=>d(`/runs/${e}/data`),nodeById:e=>n.find(t=>t.id===e),createProduct:async e=>{let t=await d(`/products`,{method:`POST`,body:JSON.stringify(e)});return l.push(t.product),t.product},updateProduct:async(e,t)=>d(`/products/${e}`,{method:`PATCH`,body:JSON.stringify(t)}).then(e=>(y(),e.product)),removeProduct:async e=>{await d(`/products/${e}`,{method:`DELETE`});let t=l.findIndex(t=>t.id===e);t>=0&&l.splice(t,1)},createLine:async e=>{let t=await d(`/lines`,{method:`POST`,body:JSON.stringify(e)});return u.push(t.line),t.line},updateLine:async(e,t)=>{let n=await d(`/lines/${e}`,{method:`PATCH`,body:JSON.stringify(t)}),r=u.findIndex(t=>t.id===e);r>=0&&(u[r]=n.line)},removeLine:async(e,t=!1)=>{await d(`/lines/${e}${t?`?purge=1`:``}`,{method:`DELETE`});let n=u.findIndex(t=>t.id===e);n>=0&&u.splice(n,1),Reflect.deleteProperty(f,e),await _()},startLine:async(e,t)=>{let n=await d(`/lines/${e}/start`,{method:`POST`,body:JSON.stringify({recipeId:t})});f[e]=n.line},stopLine:async e=>{let t=await d(`/lines/${e}/stop`,{method:`POST`});f[e]=t.line},lineStateOf:e=>f[e]??{lineId:e,active:!1,runId:null,recipeId:null,recipeName:null,productId:null,productName:null,startedAt:null,taggedSamples:0},queryLine:e=>{let t=new URLSearchParams;return e.lineId&&t.set(`lineId`,e.lineId),e.productId&&t.set(`productId`,e.productId),e.recipeId&&t.set(`recipeId`,e.recipeId),e.paramKey&&t.set(`paramKey`,e.paramKey),e.nodeId&&t.set(`nodeId`,e.nodeId),e.fromMs!=null&&t.set(`from`,String(e.fromMs)),e.toMs!=null&&t.set(`to`,String(e.toMs)),e.bucketMs!=null&&t.set(`bucketMs`,String(e.bucketMs)),e.limit!=null&&t.set(`limit`,String(e.limit)),d(`/line/query?${t.toString()}`)}});async function y(){try{let e=await d(``);l.splice(0,l.length,...e.products??[]),a.splice(0,a.length,...e.recipes??[])}catch{}}return v}var p=`__dcwStream`;function m(){let e=globalThis;return e[p]||(e[p]=f()),e[p]}export{s as i,l as n,u as r,m as t};
@@ -0,0 +1 @@
1
+ .model-preview-3d[data-v-b29ffdbe]{border:1px solid var(--hud-line,#263340);background:radial-gradient(120% 90% at 50% 20%,#41c8f41f,#0000 62%),linear-gradient(#0b121b,#0e141d);border-radius:2px;width:100%;min-height:40px;position:relative;overflow:hidden}.mp-loading[data-v-b29ffdbe]{place-items:center;display:grid;position:absolute;inset:0}.mp-spin[data-v-b29ffdbe]{border:2px solid #41c8f440;border-top-color:#41c8f4;border-radius:50%;width:14px;height:14px;animation:.8s linear infinite mp-spin-b29ffdbe}@keyframes mp-spin-b29ffdbe{to{transform:rotate(1turn)}}.mp-failed[data-v-b29ffdbe]{font-family:var(--font-mono);letter-spacing:.12em;color:var(--hud-dim,#7f919e);place-items:center;font-size:9px;display:grid;position:absolute;inset:0}.asset-lib[data-v-c83e9503]{width:184px;font-family:var(--font-body);flex-direction:column;flex:none;gap:8px;padding:0 0 10px;display:flex}.lib-head[data-v-c83e9503]{border-bottom:1px solid #26334073;align-items:center;gap:7px;padding:10px 12px 6px;display:flex}.head-title[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.16em;color:var(--hud-text,#d9e4ee);white-space:nowrap;font-size:10px;font-weight:600}.head-hint[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-faint,#5b6c7b);white-space:nowrap;margin-left:auto;font-size:8.5px}.upload-box[data-v-c83e9503]{transition:border-color .16s var(--hud-ease,ease), background .16s var(--hud-ease,ease);background:#0b101866;border:1px dashed #263340cc;border-radius:2px;flex-direction:column;gap:7px;margin:8px 10px 0;padding:7px;display:flex}.upload-box.drop[data-v-c83e9503]{border-color:var(--hud-accent,#4da3ff);background:#4da3ff14}.upload-row[data-v-c83e9503]{cursor:pointer;align-items:center;gap:6px;min-height:26px;display:flex}.file-input[data-v-c83e9503]{display:none}.upload-name[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;font-size:10px;display:inline-flex;overflow:hidden}.upload-ico[data-v-c83e9503]{color:var(--hud-accent,#4da3ff);font-size:13px}.drop-hint[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-accent,#4da3ff);align-items:center;gap:5px;padding:2px 0 4px;font-size:10px;display:inline-flex}.upload-file-tag[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);border:1px solid var(--hud-line,#263340);border-radius:2px;padding:3px 6px;font-size:9.5px}.upload-actions[data-v-c83e9503]{align-items:center;gap:6px;display:flex}.upload-btn[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-text,#d9e4ee);background:var(--hud-panel-raised,#141b26);border:1px solid var(--hud-line,#263340);cursor:pointer;transition:border-color .14s var(--hud-ease,ease), color .14s var(--hud-ease,ease);border-radius:2px;padding:5px 10px;font-size:10px;font-weight:600}.upload-btn[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-accent,#4da3ff);color:var(--hud-accent,#4da3ff)}.upload-btn[data-v-c83e9503]:disabled{opacity:.45;cursor:default}.upload-btn.go[data-v-c83e9503]{color:var(--hud-amber,#f5a742);background:#f5a74214;border-color:#f5a7428c}.upload-btn.go[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-amber,#f5a742);color:var(--hud-amber,#f5a742);background:#f5a74229}.mini-err[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-danger,#ff6b5c);font-size:9.5px}.mini-err[data-v-c83e9503],.mini-msg[data-v-c83e9503]{font-size:10px}.mini-msg[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);padding:0 10px}.lib-grid[data-v-c83e9503]{flex-direction:column;gap:4px;max-height:42vh;padding:6px 10px 2px;display:flex;overflow:hidden auto}.model-card[data-v-c83e9503]{cursor:grab;transition:background .14s var(--hud-ease,ease);background:#141b26a6;border:0;border-radius:2px;flex-direction:column;align-items:stretch;gap:4px;padding:6px;display:flex;position:relative}.model-card[data-v-c83e9503]:hover{background:var(--hud-panel-hover,#1a2432)}.model-card[data-v-c83e9503]:active{cursor:grabbing}.model-card .model-preview-3d[data-v-c83e9503]{margin-bottom:2px}.model-name[data-v-c83e9503]{color:var(--hud-text,#d9e4ee);text-align:left;text-overflow:ellipsis;white-space:nowrap;padding:0 2px;font-size:11px;font-weight:600;overflow:hidden}.model-badge[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint,#5b6c7b);text-align:left;padding:0 2px;font-size:8.5px}.card-actions[data-v-c83e9503]{justify-content:flex-end;gap:4px;display:flex}.card-btn[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-text,#d9e4ee);border:1px solid var(--hud-line,#263340);cursor:pointer;transition:border-color .14s var(--hud-ease,ease), color .14s var(--hud-ease,ease);background:0 0;border-radius:2px;padding:2px 8px;font-size:10px;font-weight:600}.card-btn[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-accent,#4da3ff);color:var(--hud-accent,#4da3ff)}.card-btn.danger[data-v-c83e9503]{color:var(--hud-danger,#ff6b5c)}.card-btn.danger[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-danger,#ff6b5c);color:var(--hud-danger,#ff6b5c)}.card-btn[data-v-c83e9503]:disabled{opacity:.45;cursor:default}.model-img[data-v-c83e9503]{-o-object-fit:contain;object-fit:contain;pointer-events:none;width:46px;height:68px}.model-img.glb[data-v-c83e9503]{background:var(--hud-input,#0b1018);border:1px dashed var(--hud-line,#263340);border-radius:2px;justify-content:center;align-items:center;width:100%;height:44px;display:inline-flex}.glb-cube[data-v-c83e9503]{color:var(--hud-faint,#5b6c7b);font-size:24px;line-height:1}.lib-note[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-faint,#5b6c7b);align-items:center;gap:7px;padding:8px 2px;font-size:9.5px;display:flex}.loading-dot[data-v-c83e9503]{border:2px solid var(--hud-line,#263340);border-top-color:var(--hud-accent,#4da3ff);border-radius:50%;width:12px;height:12px;animation:.8s linear infinite spin-c83e9503}@keyframes spin-c83e9503{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.loading-dot[data-v-c83e9503]{animation:none}}.twin-panel[data-v-15ec18ea]{width:auto;box-shadow:none;background:0 0;border:0;border-radius:0;flex-direction:column;flex:none;gap:8px;padding:0;display:flex}.twin-head[data-v-15ec18ea]{border-bottom:1px solid #26334073;align-items:center;gap:8px;padding:10px 12px 6px;display:flex}.twin-error[data-v-15ec18ea]{color:#ffb4b4;word-break:break-all;background:#ff6b6b1a;border:1px solid #ff6b6b59;border-radius:8px;padding:7px 10px;font-size:11px;line-height:1.5}.twin-kicker[data-v-15ec18ea]{font-family:var(--font-mono);letter-spacing:.16em;color:var(--hud-text,#d9e4ee);font-size:10px;font-weight:600}.twin-count[data-v-15ec18ea]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-dim,#8496a5);margin-left:auto;font-size:10px}.twin-empty[data-v-15ec18ea]{padding:10px}.twin-empty-frame[data-v-15ec18ea]{border:1px dashed var(--hud-line);flex-direction:column;gap:4px;padding:12px 10px;display:flex}.twin-empty-title[data-v-15ec18ea]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-text);font-size:11px}.twin-empty-sub[data-v-15ec18ea]{color:var(--hud-dim);font-size:10px;line-height:1.6}.twin-list[data-v-15ec18ea]{flex-direction:column;gap:4px;max-height:46vh;padding:4px 0 10px;display:flex;overflow:hidden auto}.twin-card[data-v-15ec18ea]{text-align:left;cursor:pointer;background:#141b26a6;border:0;border-radius:2px;flex-direction:column;gap:6px;margin:0 10px;padding:8px 9px;transition:background .16s;display:flex}.twin-card[data-v-15ec18ea]:hover{background:var(--hud-panel-hover)}.twin-card[data-v-15ec18ea]:active{background:var(--hud-panel-raised)}.twin-card:hover .twin-name[data-v-15ec18ea]{color:#e8f1f8}.twin-card.daq[data-v-15ec18ea]{background:#35e0a00f;border:1px solid #35e0a052}.twin-card.daq[data-v-15ec18ea]:hover{background:#35e0a01c;border-color:#35e0a080}.twin-card.daq .twin-code[data-v-15ec18ea],.twin-card.daq .twin-model-tag[data-v-15ec18ea]{color:var(--hud-accent,#35e0a0)}.twin-row[data-v-15ec18ea]{align-items:center;gap:8px;min-width:0;display:flex}.twin-model-tag[data-v-15ec18ea]{min-width:30px;font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint);flex:none;font-size:9px;font-weight:600}.twin-idbar[data-v-15ec18ea]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.twin-name[data-v-15ec18ea]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;font-weight:600;overflow:hidden}.twin-code[data-v-15ec18ea]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-dim);font-size:9px}.twin-del[data-v-15ec18ea]{width:18px;height:18px;font-family:var(--font-mono);color:var(--hud-dim,#8496a5);border:1px solid var(--hud-line,#263340);cursor:pointer;background:0 0;border-radius:2px;flex:none;font-size:9px;line-height:1;transition:border-color .14s,color .14s,background .14s}.twin-del[data-v-15ec18ea]:hover:not(:disabled){border-color:var(--hud-danger,#ff6b5c);color:var(--hud-danger,#ff6b5c)}.twin-del.armed[data-v-15ec18ea]{color:#1a0d0a;background:var(--hud-danger,#ff6b5c);border-color:var(--hud-danger,#ff6b5c);width:auto;padding:0 5px}.twin-del[data-v-15ec18ea]:disabled{opacity:.4;cursor:default}.twin-state[data-v-15ec18ea]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-dim);border:1px solid var(--hud-line);border-radius:2px;flex:none;align-items:center;gap:5px;padding:2px 5px;font-size:8.5px;display:inline-flex}.twin-state.s-alarm[data-v-15ec18ea]{color:var(--hud-danger);border-color:#ff6b5c80}.twin-state.s-running[data-v-15ec18ea]{color:var(--hud-ok);border-color:#7fd4a066}.twin-state-dot[data-v-15ec18ea]{border-radius:50%;width:5px;height:5px}.twin-tele[data-v-15ec18ea]{border-top:1px dashed var(--hud-line);grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 10px;margin:0 0 2px;padding-top:6px;display:grid}.tele-item[data-v-15ec18ea]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-dim);justify-content:space-between;gap:6px;min-width:0;font-size:9.5px;display:flex}.tele-item em[data-v-15ec18ea]{text-overflow:ellipsis;font-style:normal;overflow:hidden}.tele-item b[data-v-15ec18ea]{color:var(--hud-text);font-weight:500}.twin-daq[data-v-15ec18ea]{border-top:1px dashed #35e0a04d;flex-direction:column;gap:2px;margin:0 0 2px;padding-top:6px;display:flex}.daq-item[data-v-15ec18ea]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-accent,#35e0a0);justify-content:space-between;align-items:baseline;gap:6px;min-width:0;font-size:9.5px;display:flex}.daq-item em[data-v-15ec18ea]{text-overflow:ellipsis;white-space:nowrap;opacity:.85;font-style:normal;overflow:hidden}.daq-item b[data-v-15ec18ea]{white-space:nowrap;font-size:10.5px;font-weight:700}.daq-item b i[data-v-15ec18ea]{opacity:.75;margin-left:2px;font-size:8.5px;font-style:normal;font-weight:500}.daq-item.alarm[data-v-15ec18ea]{color:var(--hud-amber,#f6c453)}.twin-dcw[data-v-15ec18ea]{border-top:1px dashed #f0a04c59;flex-direction:column;gap:6px;margin:0 0 2px;padding-top:6px;display:flex}.dcw-item[data-v-15ec18ea]{flex-direction:column;gap:3px;display:flex}.dcw-head[data-v-15ec18ea]{font-family:var(--font-mono);color:var(--hud-dim);justify-content:space-between;align-items:baseline;gap:6px;font-size:9.5px;display:flex}.dcw-head em[data-v-15ec18ea]{text-overflow:ellipsis;white-space:nowrap;font-style:normal;overflow:hidden}.dcw-src[data-v-15ec18ea]{color:var(--hud-amber,#f6c453);border:1px solid #f0a04c80;border-radius:2px;margin-left:4px;padding:0 3px;font-size:8px;font-style:normal}.dcw-set[data-v-15ec18ea]{font-variant-numeric:tabular-nums;color:var(--hud-amber,#f6c453);white-space:nowrap;font-size:12px;font-weight:700}.dcw-set i[data-v-15ec18ea]{opacity:.75;margin-left:2px;font-size:8.5px;font-style:normal;font-weight:500}.dcw-act[data-v-15ec18ea]{font-family:var(--font-mono);color:var(--hud-dim);justify-content:space-between;align-items:baseline;gap:6px;font-size:9px;display:flex}.dcw-act em[data-v-15ec18ea]{letter-spacing:.08em;color:var(--hud-faint);font-size:8px;font-style:normal}.dcw-act b[data-v-15ec18ea]{font-variant-numeric:tabular-nums;color:var(--hud-accent,#35e0a0);white-space:nowrap;font-size:11.5px;font-weight:700}.dcw-act b i[data-v-15ec18ea]{opacity:.75;margin-left:2px;font-size:8.5px;font-style:normal;font-weight:500}.dcw-act-at[data-v-15ec18ea]{color:var(--hud-faint);font-size:8px;font-style:normal}.dcw-win[data-v-15ec18ea]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);letter-spacing:.04em;font-size:8.5px}.dcw-win span[data-v-15ec18ea]{border-bottom:1px dotted var(--hud-line);padding-bottom:1px}.dcw-ctrl[data-v-15ec18ea]{align-items:center;gap:4px;display:flex}.dcw-ctrl .ctrl-input[data-v-15ec18ea]{flex:1;width:auto;min-width:0}.dcw-send[data-v-15ec18ea]{color:var(--hud-amber,#f6c453);border-color:#f0a04c80;flex:none}.dcw-send[data-v-15ec18ea]:hover:not(:disabled){color:var(--hud-amber,#f6c453);border-color:var(--hud-amber,#f6c453);background:#f0a04c1f}.dcw-err[data-v-15ec18ea]{font-family:var(--font-mono);color:var(--hud-danger,#ff6b5c);font-size:8.5px}.ctrl-btn[data-v-15ec18ea]{letter-spacing:.06em;font-size:9px;font-weight:600;font-family:var(--font-mono);color:var(--hud-text);border:1px solid var(--hud-line);cursor:pointer;background:0 0;border-radius:2px;padding:3px 7px;transition:border-color .14s,color .14s,background .14s}.ctrl-btn[data-v-15ec18ea]:hover:not(:disabled){border-color:var(--hud-accent);color:var(--hud-accent)}.ctrl-btn[data-v-15ec18ea]:disabled{opacity:.45;cursor:default}.ctrl-input[data-v-15ec18ea]{width:48px;font-family:var(--font-mono);border:1px solid var(--hud-line);background:var(--hud-input);color:var(--hud-text);font-variant-numeric:tabular-nums;border-radius:2px;padding:3px 6px;font-size:10px}.ctrl-input[data-v-15ec18ea]:focus{border-color:var(--hud-accent);outline:none}.twin-err[data-v-15ec18ea]{color:var(--hud-danger);padding:0 10px 8px;font-size:9.5px}.town-view[data-v-ee250387]{--hud-bg:#070b13;--hud-panel:#0d1420;--hud-panel-2:#111a2b;--hud-panel-raised:#152034;--hud-panel-hover:#16233a;--hud-line:#1d2a42;--hud-line-soft:#16202f;--hud-line-hi:#2c4568;--hud-input:#0a111d;--hud-text:#e8eef8;--hud-dim:#8fa0b5;--hud-faint:#5f6e84;--hud-accent:#35e0a0;--hud-accent-dim:#1f9e6e;--hud-cyan:#41c8f4;--hud-amber:#f6c453;--hud-ok:#35e0a0;--hud-danger:#ff6b6b;--hud-shadow:0 16px 40px #0000008c;--hud-ease:cubic-bezier(.22, .68, .36, 1);--hud-r-sm:8px;--hud-r-md:10px;--hud-r-lg:12px;background:var(--hud-bg);height:100%;min-height:0;color:var(--hud-text);font-family:var(--font-body);flex-direction:column;font-size:13px;display:flex}.topnav[data-v-ee250387]{border-bottom:1px solid var(--hud-line-soft);z-index:60;background:linear-gradient(#0c1320,#0a101b);flex:none;align-items:center;gap:14px;height:50px;padding:0 16px;display:flex;position:relative}.topnav[data-v-ee250387]:after{content:"";pointer-events:none;background:linear-gradient(90deg,#0000 4%,#35e0a059 50%,#0000 96%);height:1px;position:absolute;bottom:-1px;left:0;right:0}.brand[data-v-ee250387]{align-items:center;gap:10px;min-width:230px;display:flex}.brand-glyph[data-v-ee250387]{flex:none;width:26px;height:26px}.brand-name[data-v-ee250387]{letter-spacing:.06em;font-size:14.5px;font-weight:800}.brand-name em[data-v-ee250387]{color:var(--hud-accent);font-style:normal}.brand-sub[data-v-ee250387]{color:var(--hud-faint);letter-spacing:.18em;margin-top:2px;font-size:10px}.nav-tabs[data-v-ee250387]{align-items:center;gap:10px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.nav-action[data-v-ee250387]{border-radius:var(--hud-r-sm);height:32px;color:var(--hud-text);transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease);background:0 0;border:1px solid #27395c;padding:0 14px;font-size:12px;font-weight:600}.nav-action[data-v-ee250387]:hover{background:#14203a;border-color:#33507c}.save-chip[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.08em;border:1px solid var(--hud-line);color:var(--hud-dim);white-space:nowrap;border-radius:6px;padding:3px 9px;font-size:10px}.save-chip.s-dirty[data-v-ee250387]{color:var(--hud-amber);border-color:#f6c45366}.save-chip.s-saving[data-v-ee250387]{color:var(--hud-dim)}.save-chip.s-saved[data-v-ee250387]{color:var(--hud-accent);border-color:#35e0a066}.save-chip.s-error[data-v-ee250387]{color:var(--hud-danger);border-color:#ff6b6b66}.nav-right[data-v-ee250387]{align-items:center;gap:10px;margin-left:auto;display:flex}.nav-chip[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-dim);border:1px solid var(--hud-line);font-variant-numeric:tabular-nums;border-radius:6px;padding:2px 8px;font-size:10.5px}.avatar-chip[data-v-ee250387]{border:1px solid var(--hud-line-soft);background:#0e1626;border-radius:999px;align-items:center;gap:8px;padding:4px 10px 4px 4px;display:flex}.avatar-chip span[data-v-ee250387]{color:var(--hud-text);font-size:12px}.avatar-fallback[data-v-ee250387]{color:#04120c;background:linear-gradient(135deg,#1f9e6e,#41c8f4);border-radius:50%;place-items:center;width:24px;height:24px;font-size:10px;font-weight:700;display:grid}.seg[data-v-ee250387]{border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);background:#0a111d;padding:2px;display:inline-flex}.seg button[data-v-ee250387]{color:var(--hud-dim);transition:background .15s var(--hud-ease), color .15s var(--hud-ease);border-radius:6px;padding:4px 16px;font-size:11.5px;font-weight:600}.seg button.on[data-v-ee250387]{background:var(--hud-accent);color:#04120c;box-shadow:0 0 12px #35e0a059}.app[data-v-ee250387]{flex:1;grid-template-columns:250px minmax(540px,1fr) 342px;min-height:0;display:grid}.rail[data-v-ee250387]{background:linear-gradient(#0a101c,#080d16);flex-direction:column;gap:10px;min-height:0;padding:10px;display:flex;overflow:hidden auto}.rail-left[data-v-ee250387]{border-right:1px solid var(--hud-line-soft)}.rail-right[data-v-ee250387]{border-left:1px solid var(--hud-line-soft)}.rail[data-v-ee250387]::-webkit-scrollbar{width:8px}.rail[data-v-ee250387]::-webkit-scrollbar-thumb{background:#1c2942;border:2px solid #080d16;border-radius:4px}.rail[data-v-ee250387]::-webkit-scrollbar-track{background:0 0}.ins-enter-active[data-v-ee250387]{transition:opacity .2s var(--hud-ease), transform .2s var(--hud-ease)}.ins-leave-active[data-v-ee250387]{transition:opacity .12s}.ins-enter-from[data-v-ee250387]{opacity:0;transform:translate(12px)}.ins-leave-to[data-v-ee250387]{opacity:0}.panel[data-v-ee250387]{border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);background:linear-gradient(#101827,#0d1420);flex:none;padding:12px;position:relative;box-shadow:inset 0 1px #8fb0dc12,0 10px 28px #03070e73}.panel[data-v-ee250387]:before{content:"";border-radius:var(--hud-r-lg) var(--hud-r-lg) 0 0;pointer-events:none;background:linear-gradient(#78a5dc0e,#0000);height:44px;position:absolute;inset:0 0 auto}.panel-hd[data-v-ee250387]{align-items:center;gap:8px;margin-bottom:10px;display:flex}.panel-hd h3[data-v-ee250387]{letter-spacing:.02em;flex:1;margin:0;padding-left:11px;font-size:12.5px;font-weight:700;position:relative}.panel-hd h3[data-v-ee250387]:before{content:"";background:var(--hud-accent);width:3px;height:12px;box-shadow:0 0 8px color-mix(in srgb, var(--hud-accent) 45%, transparent);border-radius:2px;position:absolute;top:50%;left:0;transform:translateY(-50%)}.panel-tag[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-cyan);background:#41c8f41a;border:1px solid #41c8f440;border-radius:6px;padding:0 6px;font-size:9.5px;line-height:15px}.lib-embed[data-v-ee250387]{margin:-4px 0 0}.daq-list[data-v-ee250387],.scene-list[data-v-ee250387]{flex-direction:column;gap:4px;display:flex}.daq-card[data-v-ee250387]{border-radius:var(--hud-r-md);background:var(--hud-panel-2);cursor:grab;transition:transform .15s var(--hud-ease), border-color .15s var(--hud-ease), background .15s var(--hud-ease);border:1px solid #1f4a3a8c;align-items:center;gap:10px;margin-bottom:4px;padding:8px 9px;display:flex}.daq-card[data-v-ee250387]:hover{background:#12291f;border-color:#35e0a080;transform:translateY(-1px)}.daq-card[data-v-ee250387]:active{cursor:grabbing}.daq-ico[data-v-ee250387]{width:34px;height:34px;color:var(--hud-accent);background:linear-gradient(160deg,#12291f,#0e1a24);border:1px solid #1f4a3aa6;border-radius:9px;flex:none;place-items:center;display:grid}.daq-svg[data-v-ee250387]{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.daq-meta[data-v-ee250387]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.daq-name[data-v-ee250387]{color:var(--hud-text);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.daq-code[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint);font-size:9px}.daq-count[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-accent);background:#35e0a01a;border:1px solid #35e0a047;border-radius:6px;flex:none;padding:0 6px;font-size:9px;line-height:15px}.daq-group[data-v-ee250387]{flex-direction:column;display:flex}.daq-card.tpl[data-v-ee250387]{cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:0}.daq-card.tpl[data-v-ee250387]:active{cursor:pointer}.daq-card.tpl[data-v-ee250387]:focus-visible{outline:1px solid var(--hud-accent);outline-offset:1px}.daq-caret[data-v-ee250387]{color:var(--hud-faint);transition:transform .15s var(--hud-ease);flex:none;font-size:8px}.daq-card.tpl.open .daq-caret[data-v-ee250387]{transform:rotate(90deg)}.daq-card.tpl[data-v-ee250387]:hover{transform:none}.daq-add[data-v-ee250387]{width:18px;height:18px;color:var(--hud-faint);cursor:pointer;opacity:0;transition:opacity .15s var(--hud-ease), color .15s var(--hud-ease), border-color .15s var(--hud-ease), transform .16s cubic-bezier(.22, 1, .36, 1);background:0 0;border:1px solid #2c4568b3;border-radius:6px;flex:none;place-items:center;font-size:12px;line-height:1;display:grid}.daq-card.tpl:focus-within .daq-add[data-v-ee250387],.daq-card.tpl:hover .daq-add[data-v-ee250387]{opacity:1}@media (hover:none){.daq-add[data-v-ee250387]{opacity:1}}.daq-add[data-v-ee250387]:hover{color:var(--hud-accent);border-color:#35e0a080}.daq-add[data-v-ee250387]:active{transform:scale(.9)}.daq-children[data-v-ee250387]{animation:daq-tree-in-ee250387 .16s var(--hud-ease);flex-direction:column;gap:2px;margin:2px 0 6px;padding-left:16px;display:flex}@keyframes daq-tree-in-ee250387{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.daq-node[data-v-ee250387]{cursor:default;transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease), transform .16s cubic-bezier(.22, 1, .36, 1);border:1px solid #0000;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.daq-node[data-v-ee250387]:hover{background:#111b2c;border-color:#2c456899}.daq-node[draggable=true][data-v-ee250387]{cursor:grab}.daq-node[draggable=true][data-v-ee250387]:active{cursor:grabbing;transform:scale(.98)}.daq-node.placed[data-v-ee250387]{cursor:pointer}.daq-node.placed[draggable=true][data-v-ee250387]{cursor:grab}.node-dot[data-v-ee250387]{background:var(--hud-ok);width:7px;height:7px;box-shadow:0 0 6px color-mix(in srgb, var(--hud-ok) 50%, transparent);border-radius:50%;flex:none}.node-dot.offline[data-v-ee250387]{border:1px solid var(--hud-faint);box-shadow:none;background:0 0}.node-dot.warn[data-v-ee250387]{background:var(--hud-amber);box-shadow:0 0 6px color-mix(in srgb, var(--hud-amber) 50%, transparent)}.node-dot.alarm[data-v-ee250387]{background:var(--hud-danger);box-shadow:0 0 6px color-mix(in srgb, var(--hud-danger) 60%, transparent)}.daq-node .daq-name[data-v-ee250387]{font-size:11.5px;font-weight:500}.daq-node-sub[data-v-ee250387]{align-items:baseline;gap:7px;min-width:0;display:flex}.node-val[data-v-ee250387]{color:var(--hud-cyan);flex:none;font-size:10px}.node-dev[data-v-ee250387]{color:var(--hud-faint);white-space:nowrap;text-overflow:ellipsis;max-width:104px;font-size:9.5px;overflow:hidden}.daq-empty-hint[data-v-ee250387]{color:var(--hud-faint);padding:4px 8px 6px 10px;font-size:10px}.scene-row[data-v-ee250387]{border-radius:var(--hud-r-md);cursor:grab;transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease);border:1px solid #0000;align-items:center;gap:10px;margin-bottom:4px;padding:8px 9px;display:flex}.scene-row[data-v-ee250387]:hover{background:#111b2c}.scene-row.active[data-v-ee250387]{background:#35e0a00f;border-color:#35e0a059}.scene-row[data-v-ee250387]:active{cursor:grabbing}.scene-ico[data-v-ee250387]{background:color-mix(in srgb, var(--ch,var(--hud-accent)) 16%, #101a2c);border:1px solid color-mix(in srgb, var(--ch,var(--hud-accent)) 45%, transparent);border-radius:8px;flex:none;width:30px;height:30px}.scene-row.active .scene-ico[data-v-ee250387]{box-shadow:0 0 10px color-mix(in srgb, var(--ch,var(--hud-accent)) 40%, transparent)}.scene-meta-wrap[data-v-ee250387]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.scene-name[data-v-ee250387]{color:var(--hud-text);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.scene-meta[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);font-size:9px}.scene-add[data-v-ee250387],.scene-cur[data-v-ee250387]{border-radius:6px;flex:none;margin-left:auto;padding:1px 7px;font-size:10px}.scene-cur[data-v-ee250387]{color:var(--hud-accent);border:1px solid #35e0a066}.scene-add[data-v-ee250387]{color:var(--hud-dim);border:1px solid var(--hud-line)}.scene-hint[data-v-ee250387]{color:var(--hud-amber);padding:6px 4px 0;font-size:10px;line-height:1.5}.stage-col[data-v-ee250387]{flex-direction:column;min-width:0;min-height:0;display:flex}.stage[data-v-ee250387]{background:#060a11;flex:1;min-height:320px;position:relative;overflow:hidden}.stage[data-v-ee250387]:fullscreen{border-radius:0}.town-host[data-v-ee250387]{position:absolute;inset:0}.town-host canvas[data-v-ee250387]{image-rendering:auto;display:block}.stage-vignette[data-v-ee250387]{pointer-events:none;z-index:3;background:radial-gradient(120% 90% at 50% 38%,#0000 52%,#02040980 100%),linear-gradient(#080d1852,#0000 18%),repeating-linear-gradient(0deg,#ffffff03 0 1px,#0000 1px 3px);position:absolute;inset:0}.stage-top[data-v-ee250387]{z-index:6;pointer-events:none;justify-content:space-between;align-items:flex-start;padding:14px 16px;display:flex;position:absolute;top:0;left:0;right:0}.stage-top[data-v-ee250387]>*{pointer-events:auto}.vp-title[data-v-ee250387]{border-radius:var(--hud-r-md);-webkit-backdrop-filter:blur(8px);background:#090e18b8;border:1px solid #1c2942;align-items:center;gap:10px;padding:8px 12px;display:flex}.vp-title h2[data-v-ee250387]{letter-spacing:.02em;margin:0;font-size:15px;font-weight:700}.vp-id[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.04em;color:var(--hud-dim);white-space:nowrap;background:#0a111d99;border:1px solid #223050;border-radius:6px;padding:1px 8px;font-size:10px}.vp-tools[data-v-ee250387]{align-items:center;gap:8px;display:flex}.vp-tool[data-v-ee250387]{width:34px;height:34px;color:var(--hud-dim);-webkit-backdrop-filter:blur(8px);transition:color .15s var(--hud-ease), border-color .15s var(--hud-ease), background .15s var(--hud-ease);background:#0d1420d9;border:1px solid #223050;border-radius:50%;place-items:center;font-size:12px;font-weight:600;display:grid}.vp-tool[data-v-ee250387]:hover{color:var(--hud-text);border-color:#33507c}.vp-tool.on[data-v-ee250387]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent);box-shadow:0 0 12px #35e0a04d}.vp-svg[data-v-ee250387]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.leaders[data-v-ee250387]{z-index:7;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.angle-chip[data-v-ee250387]{z-index:6;border-radius:var(--hud-r-sm);-webkit-backdrop-filter:blur(8px);color:var(--hud-dim);background:#090e18c7;border:1px solid #1c2942;align-items:center;gap:6px;padding:5px 8px;font-size:11.5px;display:flex;position:absolute;top:64px;left:16px}.angle-chip select[data-v-ee250387]{color:var(--hud-text);cursor:pointer;background:0 0;border:0;font-size:11.5px;font-weight:600}.angle-chip select option[data-v-ee250387]{background:#0e1626}.callout-layer[data-v-ee250387]{z-index:7;pointer-events:none;position:absolute;inset:0;overflow:hidden}.callout[data-v-ee250387]{opacity:0;pointer-events:none;border-radius:var(--hud-r-md);min-width:150px;box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);transition:opacity .22s var(--hud-ease), transform .22s var(--hud-ease), border-color .15s var(--hud-ease);background:linear-gradient(#101a2bf0,#0a101cf0);border:1px solid #41c8f466;padding:9px 12px 8px;position:absolute;transform:translate(-50%,-112%)translateY(5px)}.callout.near[data-v-ee250387]{opacity:1;pointer-events:auto;transform:translate(-50%,-112%)}.leaders g[data-v-ee250387]{opacity:0;transition:opacity .22s var(--hud-ease)}.leaders g.near[data-v-ee250387]{opacity:1}.callout.warn[data-v-ee250387]{border-color:#f6c45399}.co-label[data-v-ee250387]{color:var(--hud-dim);white-space:nowrap;align-items:center;gap:6px;font-size:10.5px;display:flex}.co-dot[data-v-ee250387]{background:var(--hud-cyan);border-radius:50%;flex:none;width:6px;height:6px;box-shadow:0 0 8px #41c8f4e6}.callout.warn .co-dot[data-v-ee250387]{background:var(--hud-amber);box-shadow:0 0 8px #f6c453e6}.co-val[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:-.01em;color:var(--hud-text);font-variant-numeric:tabular-nums;margin-top:2px;font-size:21px;font-weight:700}.co-val small[data-v-ee250387]{color:var(--hud-dim);margin-left:3px;font-size:10.5px;font-weight:500}.co-range[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);margin-top:1px;font-size:9.5px}.callout.warn .co-range[data-v-ee250387]{color:var(--hud-amber)}.kpi-strip[data-v-ee250387]{z-index:6;pointer-events:none;flex-wrap:wrap;justify-content:center;gap:10px;padding:0 16px;display:flex;position:absolute;bottom:12px;left:0;right:0}.kpi[data-v-ee250387]{pointer-events:auto;border-radius:var(--hud-r-md);-webkit-backdrop-filter:blur(8px);transition:border-color .2s var(--hud-ease), transform .2s var(--hud-ease), box-shadow .2s var(--hud-ease);background:linear-gradient(#141e30eb,#0c1320e6);border:1px solid #1e2c46;align-items:center;gap:10px;padding:8px 14px;display:flex;box-shadow:inset 0 1px #8fb0dc14,0 8px 20px #03070e66}.kpi[data-v-ee250387]:hover{border-color:#2c4568;transform:translateY(-1px);box-shadow:inset 0 1px #8fb0dc1a,0 12px 26px #03070e80}.kpi-ico[data-v-ee250387]{border-radius:8px;flex:none;place-items:center;width:30px;height:30px;font-size:12px;font-weight:700;display:grid}.kpi-ico.c1[data-v-ee250387]{color:var(--hud-cyan);background:#41c8f41f}.kpi-ico.c2[data-v-ee250387]{color:var(--hud-accent);background:#35e0a01f}.kpi-ico.c3[data-v-ee250387]{color:var(--hud-amber);background:#f6c4531f}.kpi-ico.c4[data-v-ee250387]{color:#a78bfa;background:#a78bfa24}.kpi-ico.c5[data-v-ee250387]{color:var(--hud-danger);background:#ff6b6b1f}.kpi-svg[data-v-ee250387]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.kpi-meta[data-v-ee250387]{line-height:1.25}.kpi-label[data-v-ee250387]{color:var(--hud-dim);letter-spacing:.08em;text-transform:uppercase;font-size:10px}.kpi-val[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:19px;font-weight:700}.kpi-val small[data-v-ee250387]{color:var(--hud-faint);margin-left:2px;font-size:10px;font-weight:500}.empty-hint[data-v-ee250387]{z-index:4;text-align:center;color:var(--hud-dim);pointer-events:none;position:absolute;top:44%;left:50%;transform:translate(-50%,-50%)}.empty-hint b[data-v-ee250387]{color:var(--hud-text);margin-bottom:4px;font-size:14px;display:block}.empty-hint span[data-v-ee250387]{font-size:12px}@media (prefers-reduced-motion:no-preference){.dock[data-v-ee250387],.rail-left[data-v-ee250387],.rail-right[data-v-ee250387]{animation:.52s cubic-bezier(.22,.68,.36,1) backwards hud-boot-ee250387}.rail-left[data-v-ee250387]{animation-delay:40ms}.rail-right[data-v-ee250387]{animation-delay:.15s}.dock[data-v-ee250387]{animation-delay:.26s}}@keyframes hud-boot-ee250387{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.dock[data-v-ee250387]{border-top:1px solid var(--hud-line-soft);background:#080d16;flex:none;grid-template-columns:308px 1fr;gap:10px;padding:10px;display:grid}.dock-card[data-v-ee250387]{border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);background:linear-gradient(#101827,#0d1420);flex-direction:column;min-height:178px;padding:12px 14px;display:flex}.dock-hd[data-v-ee250387]{align-items:center;gap:8px;margin-bottom:10px;display:flex}.dock-hd h3[data-v-ee250387]{flex:none;margin:0;font-size:12.5px;font-weight:700}.dock-count[data-v-ee250387]{letter-spacing:.08em;color:var(--hud-dim);border:1px solid var(--hud-line-soft);border-radius:6px;flex:none;padding:1px 7px;font-size:9.5px}.dock-mode[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-faint);border:1px solid var(--hud-line);border-radius:6px;margin-left:auto;padding:1px 7px;font-size:9px}.ctl-row[data-v-ee250387]{align-items:center;gap:10px;margin-bottom:9px;display:flex}.ctl-sec[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--hud-faint);border-top:1px solid var(--hud-line-soft);margin:2px 0 7px;padding-top:7px;font-size:8.5px;font-weight:600}.ctl-sec[data-v-ee250387]:first-of-type{border-top:0;margin-top:0;padding-top:0}.ctl-name[data-v-ee250387]{color:var(--hud-dim);flex:none;width:64px;font-size:11.5px}.ctl-val[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-text);text-align:right;font-variant-numeric:tabular-nums;flex:none;width:38px;font-size:11px}.ctl-range[data-v-ee250387]{appearance:none;background:linear-gradient(90deg, var(--hud-accent-dim) var(--fill,50%), #1d2a42 var(--fill,50%));cursor:pointer;border-radius:2px;flex:1;height:4px}.ctl-range[data-v-ee250387]::-webkit-slider-thumb{-webkit-appearance:none;border:2.5px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#fff;border-radius:50%;box-shadow:0 1px 4px #00000080}.ctl-range[data-v-ee250387]:hover::-webkit-slider-thumb{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a01f,0 1px 4px #00000080}.ctl-range[data-v-ee250387]:active::-webkit-slider-thumb{transform:scale(1.05)}.bp-range[data-v-ee250387]{accent-color:var(--hud-accent)}.snap-toggle[data-v-ee250387]{height:22px;color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:6px;flex:1;font-size:10.5px;font-weight:600}.snap-toggle.on[data-v-ee250387]{color:var(--hud-accent);background:#35e0a014;border-color:#35e0a066}.fps-seg[data-v-ee250387]{flex:1;gap:4px;display:flex}.fps-seg button[data-v-ee250387]{height:22px;font-family:var(--font-mono);color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), background .14s var(--hud-ease);border-radius:6px;flex:1;font-size:10.5px;font-weight:600}.fps-seg button[data-v-ee250387]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.fps-seg button.on[data-v-ee250387]{color:var(--hud-accent);background:#35e0a014;border-color:#35e0a066}.ctl-btns[data-v-ee250387]{gap:8px;margin-top:auto;display:flex}.btn[data-v-ee250387]{border-radius:var(--hud-r-sm);white-space:nowrap;cursor:pointer;height:32px;transition:filter .15s var(--hud-ease), background .15s var(--hud-ease), border-color .15s var(--hud-ease);background:0 0;flex:1;justify-content:center;align-items:center;gap:6px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.btn-primary[data-v-ee250387]{background:var(--hud-accent-dim);color:#04120c}.btn-primary[data-v-ee250387]:hover{background:#25b57e}.btn-ghost[data-v-ee250387]{color:var(--hud-text);border:1px solid #27395c}.btn-ghost[data-v-ee250387]:hover{background:#14203a;border-color:#33507c}.btn-danger[data-v-ee250387]{color:#fff;background:#b3273a}.btn-danger[data-v-ee250387]:hover{background:#d1304a}.btn[data-v-ee250387]:not(:disabled):active{transform:translateY(1px)}.bind-select[data-v-ee250387]:disabled,.btn[data-v-ee250387]:disabled,.nav-action[data-v-ee250387]:disabled,.obj-input[data-v-ee250387]:disabled,.obj-mini[data-v-ee250387]:disabled,.obj-select[data-v-ee250387]:disabled{opacity:.38;cursor:not-allowed;filter:saturate(.4)}.btn[data-v-ee250387]:disabled:hover,.nav-action[data-v-ee250387]:disabled:hover{background:inherit}.trend-legend[data-v-ee250387]{scrollbar-width:thin;scrollbar-color:#1c2942 transparent;flex-wrap:wrap;flex:auto;align-content:flex-start;gap:5px;min-width:0;max-height:47px;margin-left:6px;transition:max-height .24s cubic-bezier(.22,.68,.36,1);display:flex;overflow-y:auto}.trend-legend.expanded[data-v-ee250387]{max-height:100px}.trend-legend[data-v-ee250387]::-webkit-scrollbar{width:6px}.trend-legend[data-v-ee250387]::-webkit-scrollbar-thumb{background:#1c2942;border-radius:3px}.trend-legend[data-v-ee250387]::-webkit-scrollbar-track{background:0 0}.lg-chip[data-v-ee250387]{color:var(--hud-dim);border:1px solid var(--hud-line-soft);cursor:pointer;transition:opacity .15s var(--hud-ease), border-color .15s var(--hud-ease), color .15s var(--hud-ease);background:#0d142099;border-radius:6px;align-items:center;gap:5px;padding:2px 8px;font-size:10.5px;display:flex}.lg-chip[data-v-ee250387]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.lg-chip.off[data-v-ee250387]{opacity:.32}.lg-more[data-v-ee250387]{letter-spacing:.04em;color:var(--hud-faint);border-style:dashed;font-size:10px}.lg-more[data-v-ee250387]:hover{color:var(--hud-accent);border-color:#35e0a066}.lg-dot[data-v-ee250387]{border-radius:2px;width:7px;height:7px}.trend-wrap[data-v-ee250387]{flex:1;min-height:0;position:relative}.trend-cv[data-v-ee250387]{width:100%;height:100%;position:absolute;inset:0}.trend-empty[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);place-content:center;font-size:10.5px;display:grid;position:absolute;inset:0}.inspector[data-v-ee250387]{animation:rise-ee250387 .18s var(--hud-ease)}@keyframes rise-ee250387{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.ins-chip-row[data-v-ee250387]{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.ins-chip[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-dim);border:1px solid #26354a;border-radius:6px;padding:1.5px 7px;font-size:9.5px}.ins-chip.accent[data-v-ee250387]{color:var(--hud-accent);border-color:#35e0a066}.sect-hd[data-v-ee250387]{color:var(--hud-faint);letter-spacing:.16em;align-items:center;gap:6px;margin:10px 0 7px;font-size:10px;font-weight:700;display:flex}.sect-hd[data-v-ee250387]:before{content:"";background:var(--hud-accent);opacity:.55;border-radius:1px;width:3px;height:9px}.obj-row[data-v-ee250387]{align-items:center;gap:8px;margin-bottom:8px;display:flex}.obj-label[data-v-ee250387]{width:52px;color:var(--hud-dim);flex:none;font-size:10.5px}.obj-input[data-v-ee250387],.obj-select[data-v-ee250387]{min-width:0;color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);transition:border-color .15s var(--hud-ease);border-radius:7px;flex:1;padding:5px 8px;font-size:11.5px}.obj-input[data-v-ee250387]:focus,.obj-select[data-v-ee250387]:focus{border-color:var(--hud-accent);outline:none}.obj-sep[data-v-ee250387]{background:var(--hud-line-soft);height:1px;margin:8px 0}.range-status[data-v-ee250387]{min-width:0;color:var(--hud-faint);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:10px;overflow:hidden}.obj-mini[data-v-ee250387]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:7px;flex:none;padding:4px 10px;font-size:10.5px;font-weight:600}.obj-mini.on[data-v-ee250387]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.obj-mini.danger[data-v-ee250387]{color:var(--hud-danger);width:100%;margin-top:4px}.obj-range[data-v-ee250387]{accent-color:var(--hud-accent);flex:1}.bp-val[data-v-ee250387]{text-align:right;width:40px;font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;flex:none;font-size:10.5px}.bp-seg[data-v-ee250387]{gap:4px;display:flex}.seg-btn[data-v-ee250387]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), background .14s var(--hud-ease);border-radius:7px;padding:4px 12px;font-size:10.5px;font-weight:600}.seg-btn[data-v-ee250387]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.seg-btn.on[data-v-ee250387]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.xz-seg[data-v-ee250387]{gap:6px;margin-bottom:8px;display:flex}.xz-seg .seg-btn[data-v-ee250387]{flex:1}.scale-row[data-v-ee250387]{align-items:center;gap:8px;display:flex}.scale-max[data-v-ee250387],.scale-min[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);font-size:9px}.scale-range[data-v-ee250387]{accent-color:var(--hud-accent);flex:1}.scale-val[data-v-ee250387]{text-align:center;font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;margin-bottom:4px;font-size:11px}.ins-foot[data-v-ee250387]{gap:8px;margin-top:12px;display:flex}.ins-del[data-v-ee250387]{color:var(--hud-danger);background:#ff6b6b1a;border:1px solid #ff6b6b66}.ins-del.armed[data-v-ee250387]{background:var(--hud-danger);color:#fff}.ins-empty[data-v-ee250387]{color:var(--hud-faint);text-align:center;padding:8px 0 6px;font-size:11px}.health-body[data-v-ee250387]{align-items:center;gap:14px;display:flex}.donut-wrap[data-v-ee250387]{flex:none;width:118px;height:118px;position:relative}.donut-wrap canvas[data-v-ee250387]{width:118px;height:118px}.donut-center[data-v-ee250387]{text-align:center;place-content:center;display:grid;position:absolute;inset:0}.donut-center b[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-accent);font-size:21px;font-weight:700}.donut-center span[data-v-ee250387]{color:var(--hud-faint);font-size:9.5px}.health-legend[data-v-ee250387]{flex-direction:column;flex:1;gap:8px;display:flex}.hl-row[data-v-ee250387]{align-items:center;gap:7px;font-size:11.5px;display:flex}.hl-dot[data-v-ee250387]{border-radius:50%;flex:none;width:7px;height:7px}.hl-row .n[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-text);margin-left:auto;font-size:13px;font-weight:700}.event-list[data-v-ee250387]{flex-direction:column;flex:1;min-height:0;max-height:200px;display:flex;overflow:hidden auto}.event-row[data-v-ee250387]{transition:background .13s var(--hud-ease);border-radius:7px;align-items:center;gap:7px;padding:4px 6px;display:flex}.event-row[data-v-ee250387]:hover{background:#35e0a00d}.ev-time[data-v-ee250387]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);flex:none;font-size:9px}.ev-name[data-v-ee250387]{text-overflow:ellipsis;white-space:nowrap;max-width:70px;font-family:var(--font-mono);color:var(--hud-text);flex:none;font-size:10px;font-weight:600;overflow:hidden}.ev-text[data-v-ee250387]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hud-dim);flex:1;font-size:10.5px;overflow:hidden}.event-empty[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);text-align:center;padding:12px;font-size:9.5px}.rail-empty[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-faint);text-align:center;flex-direction:column;align-items:center;gap:7px;padding:16px 10px 13px;font-size:9.5px;display:flex}.rail-empty .re-ico[data-v-ee250387]{fill:none;width:19px;height:19px;stroke:var(--hud-faint);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;opacity:.85}.mm-body[data-v-ee250387]{align-items:stretch;gap:8px;display:flex}.mm-wrap[data-v-ee250387]{border-radius:var(--hud-r-md);background:#060b13;border:1px solid #223050;flex:1;min-height:148px;position:relative;overflow:hidden}.mini-svg[data-v-ee250387]{cursor:crosshair;width:100%;height:100%;position:absolute;inset:0}.nav-cv[data-v-ee250387]{cursor:crosshair;touch-action:none;width:100%;height:100%;position:absolute;inset:0}.alarm-list[data-v-ee250387]{flex-direction:column;display:flex}.al-row[data-v-ee250387]{border-radius:var(--hud-r-md);align-items:flex-start;gap:9px;padding:9px 8px;transition:background .15s;display:flex}.al-row[data-v-ee250387]:hover{background:#101a2c}.al-ico[data-v-ee250387]{border-radius:8px;flex:none;place-items:center;width:28px;height:28px;display:grid}.al-ico.crit[data-v-ee250387]{color:var(--hud-danger);background:#ff6b6b1f}.al-ico.warn[data-v-ee250387]{color:var(--hud-amber);background:#f6c4531f}.al-ico.info[data-v-ee250387]{color:var(--hud-cyan);background:#41c8f41f}.al-svg[data-v-ee250387]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.al-body[data-v-ee250387]{flex:1;min-width:0}.al-txt[data-v-ee250387]{color:var(--hud-text);font-size:12px;font-weight:500;line-height:1.35}.al-src[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);margin-top:2px;font-size:9.5px}.al-state[data-v-ee250387]{cursor:pointer;background:0 0;border:1px solid;border-radius:6px;flex:none;margin-top:2px;padding:2px 7px;font-size:9.5px;font-weight:600}.al-state.s0[data-v-ee250387]{color:var(--hud-danger);background:#ff6b6b1a;border-color:#ff6b6b66}.al-state.s1[data-v-ee250387]{color:var(--hud-amber);background:#f6c4531a;border-color:#f6c45359}.al-state.s2[data-v-ee250387]{color:var(--hud-dim);background:#8fa0b514;border-color:#8fa0b54d}.nav-bell-warn[data-v-ee250387]{color:var(--hud-danger);border-color:#ff6b6b80}.mm-col[data-v-ee250387]{flex-direction:column;gap:6px;display:flex}.mm-col .vp-tool[data-v-ee250387]{border-radius:8px;width:30px;height:30px}.mm-meta[data-v-ee250387]{color:var(--hud-faint);letter-spacing:.08em;text-align:center;margin-top:8px;font-size:9.5px}.rpg-lines.chat-embed[data-v-ee250387]{border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);background:#0f172680;max-height:268px;padding:2px 0 4px}.chat-sect[data-v-ee250387]{align-items:center;gap:8px;display:flex}.chat-sect .chat-refresh[data-v-ee250387]{margin-left:auto}.chat-id-row[data-v-ee250387]{align-items:center;gap:10px;margin-bottom:4px;display:flex}.chat-badge[data-v-ee250387]{--p-acc:var(--hud-accent);width:34px;height:34px;font-family:var(--font-mono);color:var(--p-acc);background:color-mix(in srgb, var(--p-acc) 10%, transparent);border:1px solid color-mix(in srgb, var(--p-acc) 45%, transparent);border-radius:var(--hud-r-sm);flex:none;place-items:center;font-size:15px;font-weight:700;display:grid}.chat-nameplate[data-v-ee250387]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.chat-name[data-v-ee250387]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:650;overflow:hidden}.chat-meta[data-v-ee250387]{align-items:center;gap:6px;display:flex}.chat-state[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-dim);border:1px solid var(--hud-line);border-radius:6px;padding:1px 6px;font-size:8.5px}.chat-role[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.12em;border-radius:6px;padding:1px 7px;font-size:8.5px;font-weight:700}.chat-role.r-lead[data-v-ee250387]{color:var(--hud-amber);background:#f6c4531a;border:1px solid #f6c45373}.chat-role.r-worker[data-v-ee250387]{color:var(--hud-cyan);background:#41c8f41a;border:1px solid #41c8f466}.chat-state.s-busy[data-v-ee250387]{color:var(--hud-amber);border-color:#f6c45380}.chat-state.s-stopped[data-v-ee250387]{color:var(--hud-danger);border-color:#ff6b6b80}.chat-harness[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-faint);font-size:8.5px}.chat-count[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);font-size:8.5px}.chat-refresh[data-v-ee250387]{width:22px;height:22px;font-family:var(--font-mono);color:var(--hud-dim);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), transform .32s var(--hud-ease);background:0 0;border-radius:6px;flex:none;font-size:11px}.chat-refresh[data-v-ee250387]:hover{border-color:var(--hud-accent);color:var(--hud-accent)}.chat-refresh[data-v-ee250387]:active{transform:rotate(180deg)}.rpg-lines[data-v-ee250387]{flex-direction:column;flex:1;gap:7px;min-height:0;padding:10px 12px 12px;display:flex;overflow:hidden auto}.rpg-divider[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.2em;color:var(--hud-faint);margin:4px 0 2px;font-size:8.5px}.rpg-divider.live[data-v-ee250387]{color:var(--hud-amber)}.rpg-line[data-v-ee250387]{align-items:flex-start;gap:8px;display:flex}.rpg-time[data-v-ee250387]{text-align:right;width:52px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);flex:none;margin-top:5px;font-size:9px}.rpg-bubble[data-v-ee250387]{background:var(--hud-panel-2);border:1px solid var(--hud-line);border-radius:var(--hud-r-md);flex-direction:column;flex:1;gap:2px;min-width:0;padding:7px 11px;display:flex}.rpg-line.hist[data-v-ee250387]{opacity:.62}.rpg-line.live .rpg-bubble[data-v-ee250387]{animation:rise-ee250387 .26s var(--hud-ease) both;border-color:var(--hud-line-hi);background:#14213a}.rpg-kind[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.14em;color:var(--hud-faint);align-self:flex-start;font-size:8px}.rpg-kind.k-artifact[data-v-ee250387]{color:var(--hud-accent)}.rpg-kind.k-error[data-v-ee250387]{color:var(--hud-danger)}.rpg-text[data-v-ee250387]{color:var(--hud-text);word-break:break-word;text-wrap:pretty;font-size:13px;line-height:1.6}.rpg-line.live .rpg-text[data-v-ee250387]{color:#edf4fa}.rpg-typing[data-v-ee250387]{align-items:center;gap:4px;padding:5px 2px;display:flex}.ty-dot[data-v-ee250387]{background:var(--hud-amber);width:5px;height:5px;animation:ty-bounce-ee250387 1.15s var(--hud-ease) infinite;border-radius:50%}.ty-dot[data-v-ee250387]:nth-child(2){animation-delay:.15s}.ty-dot[data-v-ee250387]:nth-child(3){animation-delay:.3s}.ty-label[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-faint);margin-left:5px;font-size:9px}.rpg-note[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-dim);text-align:center;padding:14px 0;font-size:10px}.boundary-panel[data-v-ee250387]{z-index:9;border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);width:302px;box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);pointer-events:auto;background:linear-gradient(#101827f7,#0d1420f7);flex-direction:column;gap:7px;padding:12px 14px;display:flex;position:absolute;top:84px;left:16px}.bp-title[data-v-ee250387]{border-bottom:1px solid var(--hud-line);cursor:grab;touch-action:none;align-items:center;gap:8px;padding-bottom:8px;display:flex}.bp-title[data-v-ee250387]:active{cursor:grabbing}.bp-name[data-v-ee250387]{color:var(--hud-text);font-size:13px;font-weight:700}.bp-sub[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.12em;color:var(--hud-faint);font-size:8.5px}.bp-tabs[data-v-ee250387]{gap:4px;margin-left:auto;display:flex}.bp-tab[data-v-ee250387]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:6px;padding:3px 10px;font-size:10px;font-weight:600}.bp-tab.on[data-v-ee250387]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.bp-row[data-v-ee250387]{align-items:center;gap:8px;display:flex}.bp-label[data-v-ee250387]{width:52px;color:var(--hud-dim);flex:none;font-size:10.5px}.bp-range[data-v-ee250387]{appearance:none;background:linear-gradient(90deg, var(--hud-accent-dim) var(--fill,50%), #1d2a42 var(--fill,50%));cursor:pointer;border-radius:2px;flex:1;height:4px}.bp-range[data-v-ee250387]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:12px;height:12px;-webkit-transition:transform .15s var(--hud-ease);transition:transform .15s var(--hud-ease);background:#fff;border-radius:50%}.bp-range[data-v-ee250387]:hover::-webkit-slider-thumb{transform:scale(1.15)}.bp-hint[data-v-ee250387]{color:var(--hud-faint);font-size:10px;line-height:1.6}.bp-actions[data-v-ee250387]{gap:6px;margin-top:4px;display:flex}.bp-btn[data-v-ee250387]{color:var(--hud-text);border-radius:var(--hud-r-sm);cursor:pointer;background:0 0;border:1px solid #27395c;flex:1;padding:6px 10px;font-size:11px;font-weight:600}.bp-btn[data-v-ee250387]:hover{background:#14203a;border-color:#33507c}.bp-btn.save[data-v-ee250387]{color:#04120c;background:var(--hud-accent-dim);border-color:var(--hud-accent-dim)}.bp-btn.save[data-v-ee250387]:hover{background:#25b57e}.bp-btn.danger[data-v-ee250387]{color:var(--hud-danger);border-color:#ff6b6b66}.bp-btn.danger[data-v-ee250387]:hover{background:#ff6b6b1a}.member-list[data-v-ee250387]{flex-direction:column;gap:5px;max-height:220px;display:flex;overflow:hidden auto}.member-row[data-v-ee250387]{background:var(--hud-panel-2);border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);align-items:center;gap:8px;padding:6px 8px;display:flex}.member-ava[data-v-ee250387]{width:24px;height:24px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-panel-raised);border:1px solid var(--hud-line);border-radius:7px;flex:none;justify-content:center;align-items:center;font-size:10px;font-weight:700;display:inline-flex}.member-info[data-v-ee250387]{flex-direction:column;flex:1;min-width:0;display:flex}.member-name[data-v-ee250387]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.member-role[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-faint);font-size:8.5px}.member-role.r-lead[data-v-ee250387]{color:var(--hud-amber)}.member-role.r-worker[data-v-ee250387]{color:var(--hud-cyan)}.member-select[data-v-ee250387]{min-width:0;color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:6px;flex:1;padding:3px 6px;font-size:10px}.drop-chip[data-v-ee250387],.error-chip[data-v-ee250387]{z-index:20;border-radius:var(--hud-r-md);box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);text-overflow:ellipsis;white-space:nowrap;background:#0e1626f5;border:1px solid #2a3d63;align-items:center;gap:8px;max-width:70%;padding:8px 14px;font-size:11.5px;display:flex;position:absolute;top:64px;left:50%;overflow:hidden;transform:translate(-50%)}.drop-chip[data-v-ee250387]{color:var(--hud-accent)}.error-chip[data-v-ee250387]{color:var(--hud-danger);border-color:#ff6b6b66}.bind-row[data-v-ee250387]{border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);background:#0f1726;align-items:center;gap:8px;margin-bottom:6px;padding:7px 9px;display:flex}.bind-ico[data-v-ee250387]{width:26px;height:26px;color:var(--hud-accent);background:#0d1a26;border-radius:7px;flex:none;place-items:center;display:grid}.bind-svg[data-v-ee250387]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.bind-meta[data-v-ee250387]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.bind-label[data-v-ee250387]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.bind-val[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-cyan);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.bind-val b[data-v-ee250387]{font-size:11px;font-weight:700}.bind-spark[data-v-ee250387]{flex:none;width:56px;height:20px}.bind-x[data-v-ee250387]{width:22px;height:22px;color:var(--hud-faint);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none}.bind-x[data-v-ee250387]:hover{color:var(--hud-danger);background:#ff6b6b1f}.bind-add-wrap[data-v-ee250387]{position:relative}.bind-add[data-v-ee250387]{width:100%;height:30px;color:var(--hud-dim);border-radius:var(--hud-r-sm);cursor:pointer;background:0 0;border:1px dashed #274064;font-size:11px;transition:border-color .15s,color .15s}.bind-add[data-v-ee250387]:hover{border-color:var(--hud-accent-dim);color:var(--hud-accent)}.bind-pop[data-v-ee250387]{z-index:30;overscroll-behavior:contain;border-radius:var(--hud-r-md);max-height:min(46vh,420px);box-shadow:var(--hud-shadow-pop,0 16px 40px #0000008c);background:#0e1626;border:1px solid #27395c;position:absolute;bottom:calc(100% + 4px);left:0;right:0;overflow:hidden auto}.bind-pop[data-v-ee250387]::-webkit-scrollbar{width:8px}.bind-pop[data-v-ee250387]::-webkit-scrollbar-thumb{background:#2c4568 padding-box content-box;border:2px solid #0000;border-radius:9999px}.bind-pop[data-v-ee250387]::-webkit-scrollbar-thumb:hover{background:#3d5a85 padding-box content-box}.bind-pop button[data-v-ee250387]{width:100%;color:var(--hud-dim);cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;font-size:11.5px;display:flex}.bind-pop button[data-v-ee250387]:hover{color:var(--hud-text);background:#12203a}.bind-pop .bind-svg[data-v-ee250387]{color:var(--hud-accent)}.bind-pop button>span[data-v-ee250387]{white-space:nowrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;overflow:hidden}.bp-group[data-v-ee250387]{flex-direction:column;display:flex}.bp-group+.bp-group[data-v-ee250387]{border-top:1px solid #27395c8c}.bp-tpl[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--hud-faint);padding:6px 10px 3px;font-size:9px}.bp-cur[data-v-ee250387]{color:var(--hud-faint);white-space:nowrap;text-overflow:ellipsis;max-width:96px;margin-left:auto;font-size:9.5px;font-style:normal;overflow:hidden}.bp-empty[data-v-ee250387]{color:var(--hud-faint);padding:10px;font-size:10.5px}.dcw-row[data-v-ee250387]{border:1px solid var(--hud-line);border-radius:var(--hud-r-md);transition:border-color .18s var(--hud-ease), box-shadow .18s var(--hud-ease);background:linear-gradient(#111a2b,#0e1522);flex-direction:column;gap:8px;margin-bottom:7px;padding:9px 10px 10px;display:flex}.dcw-row[data-v-ee250387]:hover{border-color:var(--hud-line-hi);box-shadow:0 6px 18px #03070e66}.dcw-top[data-v-ee250387]{align-items:center;gap:8px;display:flex}.dcw-id[data-v-ee250387]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.dcw-name[data-v-ee250387]{color:var(--hud-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.dcw-tag[data-v-ee250387]{font-style:normal;font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-amber);vertical-align:1px;background:#f6c4531a;border:1px solid #f6c45352;border-radius:4px;margin-left:5px;padding:0 5px;font-size:8.5px;font-weight:700;display:inline-block}.dcw-cur[data-v-ee250387]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;flex:none;align-items:baseline;gap:3px;display:flex}.dcw-cur b[data-v-ee250387]{color:var(--hud-cyan);text-shadow:0 0 14px #41c8f447;font-size:16px;font-weight:700}.dcw-cur i[data-v-ee250387]{color:var(--hud-faint);font-size:9.5px;font-style:normal}.dcw-win[data-v-ee250387]{border:1px solid var(--hud-line-soft);background:#0a111db8;border-radius:7px;align-items:center;gap:7px;padding:4px 8px;display:flex}.dcw-win em[data-v-ee250387]{letter-spacing:.14em;color:var(--hud-faint);flex:none;font-size:8.5px;font-style:normal;font-weight:700}.dcw-win-num[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-dim);font-variant-numeric:tabular-nums;flex:none;font-size:9.5px}.dcw-win-track[data-v-ee250387]{background:#1a2740;border-radius:999px;flex:1;height:4px;position:relative}.dcw-win-track[data-v-ee250387]:before{content:"";border-radius:inherit;background:linear-gradient(90deg,#5a82af66,#5a82af24);position:absolute;inset:0}.dcw-win-track i[data-v-ee250387]{border:2px solid var(--hud-cyan);width:9px;height:9px;transition:left .3s var(--hud-ease);background:#dfeef8;border-radius:50%;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 8px #41c8f48c}.dcw-win.recipe em[data-v-ee250387]{color:var(--hud-amber)}.dcw-win.recipe .dcw-win-track[data-v-ee250387]:before{background:linear-gradient(90deg,#f6c45380,#f6c45329)}.dcw-win.recipe .dcw-win-track i[data-v-ee250387]{border-color:var(--hud-amber);box-shadow:0 0 8px #f6c4538c}.dcw-write[data-v-ee250387]{gap:6px;display:flex}.dcw-write input[data-v-ee250387]{min-width:0;height:27px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);transition:border-color .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border-radius:7px;flex:1;padding:0 9px;font-size:11.5px}.dcw-write input[data-v-ee250387]::placeholder{color:var(--hud-faint);font-size:10px}.dcw-write input[data-v-ee250387]:focus{border-color:var(--hud-accent);outline:none;box-shadow:0 0 0 3px #35e0a021}.dcw-send[data-v-ee250387]{height:27px;font-family:var(--font-mono);letter-spacing:.1em;color:#04120c;background:var(--hud-accent-dim);cursor:pointer;transition:background .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border:0;border-radius:7px;flex:none;padding:0 14px;font-size:10.5px;font-weight:700}.dcw-send[data-v-ee250387]:hover:not(:disabled){background:var(--hud-accent);box-shadow:0 0 14px #35e0a059}.dcw-send[data-v-ee250387]:disabled{opacity:.38;cursor:default}.dcw-err[data-v-ee250387]{color:var(--hud-danger);background:#ff6b6b14;border:1px solid #ff6b6b47;border-radius:6px;padding:4px 8px;font-size:10px;display:block}.bind-select[data-v-ee250387]:hover,.daq-ctl-cycle input[data-v-ee250387]:hover,.daq-num[data-v-ee250387]:hover,.obj-input[data-v-ee250387]:hover,.obj-select[data-v-ee250387]:hover{border-color:var(--hud-line-hi)}.bind-select[data-v-ee250387]:focus,.daq-ctl-cycle input[data-v-ee250387]:focus,.daq-num[data-v-ee250387]:focus,.obj-input[data-v-ee250387]:focus,.obj-select[data-v-ee250387]:focus{border-color:var(--hud-accent);outline:none;box-shadow:0 0 0 3px #35e0a021}input[type=number][data-v-ee250387]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-ee250387]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-ee250387]{appearance:textfield}.obj-range[data-v-ee250387],.scale-range[data-v-ee250387]{appearance:none;cursor:pointer;background:#1a2740;border-radius:999px;outline:none;height:4px}.obj-range[data-v-ee250387]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#e8f6ef;border-radius:50%;box-shadow:0 0 0 3px #35e0a026,0 2px 6px #03070e80}.scale-range[data-v-ee250387]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#e8f6ef;border-radius:50%;box-shadow:0 0 0 3px #35e0a026,0 2px 6px #03070e80}.obj-range[data-v-ee250387]::-webkit-slider-thumb:hover{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a033,0 2px 8px #03070e8c}.scale-range[data-v-ee250387]::-webkit-slider-thumb:hover{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a033,0 2px 8px #03070e8c}.obj-range[data-v-ee250387]::-moz-range-thumb{border:2px solid var(--hud-accent);background:#e8f6ef;border-radius:50%;width:13px;height:13px;box-shadow:0 0 0 3px #35e0a026}.scale-range[data-v-ee250387]::-moz-range-thumb{border:2px solid var(--hud-accent);background:#e8f6ef;border-radius:50%;width:13px;height:13px;box-shadow:0 0 0 3px #35e0a026}.obj-range[data-v-ee250387]::-moz-range-track{background:#1a2740;border-radius:999px;height:4px}.scale-range[data-v-ee250387]::-moz-range-track{background:#1a2740;border-radius:999px;height:4px}.bind-row[data-v-ee250387]{transition:border-color .18s var(--hud-ease), box-shadow .18s var(--hud-ease)}.bind-row[data-v-ee250387]:hover{border-color:var(--hud-line-hi);box-shadow:0 6px 18px #03070e66}.bind-add[data-v-ee250387]:hover{background:#35e0a00d;border-style:solid}.daq-bind-bar[data-v-ee250387]{gap:6px;display:flex}.bind-select[data-v-ee250387]{min-width:0;height:28px;color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);transition:border-color .15s var(--hud-ease), box-shadow .15s var(--hud-ease), color .15s var(--hud-ease);flex:1;padding:0 8px;font-size:10.5px}.bind-select[data-v-ee250387]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.bind-select[data-v-ee250387]:focus{border-color:var(--hud-accent);color:var(--hud-text);outline:none;box-shadow:0 0 0 3px #35e0a021}.bind-add-btn[data-v-ee250387]{color:#04120c;background:var(--hud-accent-dim);border-radius:var(--hud-r-sm);cursor:pointer;height:28px;transition:background .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border:0;flex:none;padding:0 12px;font-size:10.5px;font-weight:600}.bind-add-btn[data-v-ee250387]:hover:not(:disabled){background:var(--hud-accent);box-shadow:0 0 14px #35e0a059}.bind-add-btn[data-v-ee250387]:disabled{opacity:.4;cursor:default}.daq-info-row[data-v-ee250387]{color:var(--hud-dim);justify-content:space-between;gap:8px;padding:3px 0;font-size:11px;display:flex}.daq-info-row b[data-v-ee250387]{font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;font-weight:600}.daq-info-row b.cy[data-v-ee250387]{color:var(--hud-cyan);font-size:13px}.daq-ctrl[data-v-ee250387]{background:var(--hud-panel);border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;padding:8px 10px;display:flex}.daq-ctl-btn[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.05em;color:var(--hud-dim);cursor:pointer;border:1px solid var(--hud-line-hi);border-radius:var(--hud-r-sm);background:0 0;padding:4px 12px;font-size:11px}.daq-ctl-btn.on[data-v-ee250387]{color:var(--hud-accent);border-color:#35e0a073}.daq-ctl-cycle[data-v-ee250387]{color:var(--hud-faint);align-items:center;gap:5px;font-size:10.5px;display:inline-flex}.daq-ctl-cycle input[data-v-ee250387],.daq-num[data-v-ee250387]{width:64px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:6px;padding:2px 6px;font-size:11px}.daq-th-inputs[data-v-ee250387]{color:var(--hud-faint);align-items:center;gap:4px;font-size:10px;display:inline-flex}.bind-add-btn.warn[data-v-ee250387]:not(:disabled){color:var(--hud-amber);box-shadow:none;background:#f6c4531f}.bind-add-btn.warn[data-v-ee250387]:hover:not(:disabled){background:#f6c45333;box-shadow:0 0 14px #f6c45340}.bind-add-btn.danger[data-v-ee250387]:not(:disabled){color:var(--hud-danger);box-shadow:none;background:#ff6b6b1a}.bind-add-btn.danger[data-v-ee250387]:hover:not(:disabled){background:#ff6b6b2e;box-shadow:0 0 14px #ff6b6b40}.statusbar[data-v-ee250387]{border-top:1px solid var(--hud-line-soft);height:30px;color:var(--hud-dim);z-index:60;background:#0a101b;flex:none;align-items:center;gap:18px;padding:0 14px;font-size:11px;display:flex;position:relative}.statusbar b[data-v-ee250387]{color:var(--hud-accent);font-weight:600}.statusbar .sb-stats[data-v-ee250387]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:.02em;align-items:center;gap:7px;display:inline-flex}.sb-stats b[data-v-ee250387]{color:var(--hud-text);font-weight:600}.sb-stats i[data-v-ee250387]{color:var(--hud-line-hi);font-style:normal}.sb-dot[data-v-ee250387]{background:var(--hud-accent);width:7px;height:7px;box-shadow:0 0 6px var(--hud-accent);vertical-align:1px;border-radius:50%;margin-right:6px;display:inline-block}.sb-dot.red[data-v-ee250387]{background:var(--hud-danger);box-shadow:0 0 6px var(--hud-danger)}.sb-dot[data-v-ee250387]:not(.red){animation:sb-pulse-ee250387 2.4s var(--hud-ease) infinite}@keyframes sb-pulse-ee250387{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){.sb-dot[data-v-ee250387]:not(.red){animation:none}}.sb-lat[data-v-ee250387]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;position:absolute;left:50%;transform:translate(-50%)}.statusbar .copy[data-v-ee250387]{color:var(--hud-faint);font-family:var(--font-mono);margin-left:auto;font-size:10px}.loading-mask[data-v-ee250387]{z-index:90;background:var(--hud-bg);flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex;position:fixed;inset:0}.loading-spinner[data-v-ee250387]{border:2.5px solid var(--hud-line);border-top-color:var(--hud-accent);border-radius:50%;width:30px;height:30px;animation:.9s linear infinite spin-ee250387}.loading-text[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.24em;color:var(--hud-dim);font-size:11px}@keyframes spin-ee250387{to{transform:rotate(1turn)}}@keyframes ty-bounce-ee250387{0%,60%,to{opacity:.5;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.drag-grip[data-v-ee250387]{cursor:grab;touch-action:none}.drag-grip[data-v-ee250387]:active{cursor:grabbing}.drag-panel[data-v-ee250387]{will-change:left, top}.town-view[data-v-ee250387] ::-webkit-scrollbar{width:8px;height:8px}.town-view[data-v-ee250387] ::-webkit-scrollbar-track{background:0 0}.town-view[data-v-ee250387] ::-webkit-scrollbar-thumb{background:#1c2942;border:2px solid #080d16;border-radius:4px}.town-view[data-v-ee250387] ::-webkit-scrollbar-thumb:hover{background:#2c4568}.al-state[data-v-ee250387]:active,.bind-add[data-v-ee250387]:active,.bind-x[data-v-ee250387]:active,.bp-btn[data-v-ee250387]:active,.btn[data-v-ee250387]:active,.lg-chip[data-v-ee250387]:active,.mini-btn[data-v-ee250387]:active,.obj-mini[data-v-ee250387]:active,.snap-toggle[data-v-ee250387]:active,.vp-tool[data-v-ee250387]:active{transform:scale(.96)}.al-state[data-v-ee250387],.bind-add[data-v-ee250387],.bp-btn[data-v-ee250387],.btn[data-v-ee250387],.lg-chip[data-v-ee250387],.mini-btn[data-v-ee250387],.obj-mini[data-v-ee250387],.snap-toggle[data-v-ee250387],.vp-tool[data-v-ee250387]{transition-property:filter,background,border-color,color,transform,opacity;transition-duration:.15s;transition-timing-function:var(--hud-ease)}.town-view button[data-v-ee250387]:focus-visible,.town-view input[data-v-ee250387]:focus-visible,.town-view select[data-v-ee250387]:focus-visible{box-shadow:0 0 0 2px var(--hud-bg), 0 0 0 4px #41c8f473;border-radius:6px;outline:none}.vp-title h2[data-v-ee250387]{color:var(--hud-text)}@keyframes estop-pulse-ee250387{50%{filter:brightness(1.35)}}.btn-danger.armed[data-v-ee250387]{animation:1s ease-in-out infinite estop-pulse-ee250387}@media (prefers-reduced-motion:reduce){.callout[data-v-ee250387],.inspector[data-v-ee250387],.btn-danger.armed[data-v-ee250387],.loading-spinner[data-v-ee250387],.rpg-line.live .rpg-bubble[data-v-ee250387],.ty-dot[data-v-ee250387]{animation:none}}@media (width<=1180px){.app[data-v-ee250387]{grid-template-columns:0 1fr 0}.rail[data-v-ee250387]{z-index:70;width:288px;transition:transform .22s var(--hud-ease);box-shadow:var(--hud-shadow);background:#0a101b;position:fixed;top:50px;bottom:30px}.rail-left[data-v-ee250387]{left:0;transform:translate(-104%)}.rail-right[data-v-ee250387]{right:0;transform:translate(104%)}.dock[data-v-ee250387],.stage-dock[data-v-ee250387]{grid-template-columns:1fr}}.approval-card[data-v-ee250387]{border-radius:var(--hud-r-md);background:#f6c4530f;border:1px solid #f6c4534d;margin-bottom:7px;padding:8px 9px}.approval-detail[data-v-ee250387]{color:var(--hud-text);font-size:11px}.approval-ttl[data-v-ee250387]{font-family:var(--font-mono);letter-spacing:.05em;color:var(--hud-amber);margin-top:5px;font-size:9.5px}.approval-ttl.urgent[data-v-ee250387]{color:var(--hud-danger)}
@@ -1 +1 @@
1
- import{C as e,F as t,G as n,H as r,Ht as i,St as a,Wt as o,a as s,b as c,et as l,f as u,ft as ee,g as d,h as f,mt as p,nt as m,p as h,rt as g,t as _,x as v,z as y}from"./BSCpFtzG.js";import{B as te,F as ne,I as b,L as x}from"./2LwEn9gX.js";import{a as re}from"./Bi6AiCuP.js";import{t as ie}from"./ubPfs9mQ.js";import{n as ae}from"./BeIfu4N3.js";import{t as oe}from"./BJvGPTpC.js";import{t as se}from"./CNs_Ozdc2.js";import{t as ce}from"./B0haAGoq.js";import{a as le,n as S,t as ue}from"./CwS_UHeH.js";import{t as de}from"./ClptO7LA.js";var fe={class:`page`},pe={class:`aw-kicker`},me={class:`aw-page-head`},he={key:0,class:`err`},ge={key:1,class:`grid`},_e={class:`col-live`},ve={class:`aw-tile value-card`},ye={class:`aw-kicker`},be={class:`big-val mono`},xe={class:`facts mono`},Se={class:`col-form aw-tile pad`},Ce={class:`sec`},we={class:`field`},Te={class:`field`},Ee={value:``},De=[`value`],Oe={class:`field`},ke=[`value`,`disabled`],Ae={class:`field row`},je=[`disabled`],Me={class:`field row`},Ne=[`disabled`],Pe=[`disabled`],Fe={class:`field row`},Ie=[`disabled`],Le={class:`field`},Re={class:`field`},ze={class:`field-row`},Be={class:`field`},Ve={class:`field`},He={class:`field`},Ue={class:`field`},We=[`disabled`],Ge={class:`sec mt`},Ke={class:`driver-grid`},qe={key:0},Je=[`onUpdate:modelValue`],Ye=[`value`],Xe=[`onUpdate:modelValue`,`type`,`placeholder`],Ze={class:`test-row`},Qe=[`disabled`],$e={class:`sec mt`},et={class:`bind-row`},tt={value:``},nt=[`value`],rt={class:`col-hist aw-tile pad`},it={class:`hist-hd`},at={class:`sec`},ot={class:`hist-ctl mono`},st=[`value`],ct={class:`raw-table mono`},lt={key:2,class:`aw-tile pad frames-tile`},ut={class:`hist-hd`},dt={class:`sec`},ft={class:`mono frames-n`},pt=[`viewBox`],mt=[`points`],ht={class:`raw-table mono`},gt={key:0,class:`gal`},_t=[`title`,`onClick`],vt=[`src`],yt={class:`mono`},bt={key:1,class:`frames-empty`},xt=[`src`],C=320,St=84,Ct=`#35e0a0`,wt=`rgba(120,135,160,0.18)`,w=`rgba(140,155,175,0.8)`,T=_(e({__name:`[id]`,setup(e){let{t:_}=ae();se({layout:`default`});let T=re(),E=u(()=>String(T.params.id??``)),D=ue(),O=ce();O.load();let k=de(),A=u(()=>D.nodeById(E.value)??null),j=u(()=>{let e=A.value?le(A.value.templateRef):``;return D.templates.find(t=>t.key===e)??null}),Tt={ok:_(`daqDetail.k41k5c026`),warn:_(`daqDetail.k49z8v027`),alarm:_(`daqDetail.k3xmid028`),offline:_(`daqDetail.k44c2n029`)},M=()=>{let e=A.value;return!e||!D.controller.running||!e.enabled?`offline`:e.state},N=null;y(()=>{N=D.ensureWsFeed(),D.load(),k.load(),F.value&&L()}),t(()=>N?.());let P=u(()=>j.value?.signalKind??`scalar`),F=u(()=>P.value!==`scalar`),I=u(()=>D.framesOf(E.value));async function L(){E.value&&await D.fetchFrames(E.value,{limit:24}).catch(()=>{})}l(E,()=>{F.value&&L()});let R=e=>new Date(e).toLocaleTimeString(`zh-CN`,{hour12:!1}),z=e=>Object.entries(e.metrics??{}).slice(0,3).map(([e,t])=>`${e}=${t}`).join(` `),Et=u(()=>I.value.find(e=>e.kind===`vector`&&e.points?.length)),Dt=u(()=>{let e=Et.value?.points??[];if(e.length<2)return``;let t=Math.min(...e),n=Math.max(...e)-t||1;return e.map((r,i)=>`${(i/(e.length-1)*C).toFixed(1)},${(78-(r-t)/n*72).toFixed(1)}`).join(` `)}),B=p(null);function Ot(e){return e==null?_(`daqDetail.k9vnp9h053`,{p0:D.controller.defaultPublishIntervalMs}):e===0?_(`daqDetail.k1m1zwux030`):`${e}ms`}let V=ee({enabled:!0,driver:`mock`,lineId:``,followGlobal:!0,intervalMs:1e3,calKind:`none`,calScale:1,calOffset:0,publishFollow:!0,publishEveryFrame:!1,publishMs:1e3,unit:``,decimals:1,min:0,max:100,warnLow:null,warnHigh:null});l(A,e=>{e&&(V.enabled=e.enabled,V.lineId=e.lineId??``,V.driver=e.driver,V.followGlobal=e.intervalMs==null,V.intervalMs=e.intervalMs??D.controller.defaultIntervalMs,V.publishFollow=e.publishIntervalMs==null,V.publishEveryFrame=e.publishIntervalMs===0,V.publishMs=e.publishIntervalMs==null?D.controller.defaultPublishIntervalMs:e.publishIntervalMs,V.unit=e.unit,V.decimals=e.decimals,V.min=e.min,V.max=e.max,V.warnLow=e.warnLow,V.warnHigh=e.warnHigh)},{immediate:!0});let H=p({}),U=u(()=>S.find(e=>e.kind===V.driver)?.configFields??[]);l(A,e=>{e&&(H.value={...e.driverConfig})},{immediate:!0}),l(()=>V.driver,()=>{if(U.value.length&&Object.keys(H.value).length===0){let e={};for(let t of U.value)t.default!==void 0&&(e[t.key]=t.default);H.value=e}},{immediate:!0});let W=p(!1),G=p(null);async function kt(){W.value=!0,G.value=null;try{await D.patchNode(E.value,{driver:V.driver,driverConfig:{...H.value}}),G.value=await D.testNode(E.value)}catch(e){G.value={ok:!1,message:e instanceof Error?e.message:String(e)}}finally{W.value=!1}}let K=p(!1);async function At(){let e=A.value;if(!(!e||K.value)){K.value=!0;try{await D.patchNode(e.id,{enabled:V.enabled,driver:V.driver,lineId:V.lineId,driverConfig:{...H.value},intervalMs:V.followGlobal?null:Math.max(120,Math.min(6e4,Math.round(V.intervalMs))),publishIntervalMs:V.publishFollow?null:V.publishEveryFrame?0:Math.max(0,Math.min(6e4,Math.round(V.publishMs))),unit:V.unit,decimals:Math.max(0,Math.min(6,Math.round(V.decimals))),min:V.min,max:V.max,warnLow:V.warnLow,warnHigh:V.warnHigh})}finally{K.value=!1}}}function jt(e){return D.meta.drivers.find(t=>t.kind===e)?.status===`planned`}let q=p(``),J=u(()=>{let e=A.value?.deviceBindingId;return e?k.twins.find(t=>t.id===e)?.name??`${e.slice(0,8)}…`:``});function Mt(){D.bindNode(E.value,A.value?.deviceBindingId?null:q.value||null)}let Nt=u(()=>k.twins.filter(e=>e.kind!==`daq`&&e.id!==A.value?.id)),Y=p([]),X=p(5e3),Pt=p(!1),Ft=[{label:_(`daqDetail.k3lha20031`),ms:0},{label:`1s 桶`,ms:1e3},{label:`5s 桶`,ms:5e3},{label:`30s 桶`,ms:3e4}];async function Z(){if(E.value){Pt.value=!0;try{let e=await D.samplesOf(E.value,{toMs:Date.now(),bucketMs:X.value||void 0,limit:400});Y.value=[...e].reverse()}finally{Pt.value=!1,Lt()}}}let It=p(null);function Lt(){let e=It.value;if(!e)return;let t=Math.min(window.devicePixelRatio||1,2),n=e.clientWidth,r=e.clientHeight;(e.width!==n*t||e.height!==r*t)&&(e.width=n*t,e.height=r*t);let i=e.getContext(`2d`);if(!i)return;i.setTransform(t,0,0,t,0,0),i.clearRect(0,0,n,r);for(let e=1;e<4;e++)i.strokeStyle=wt,i.beginPath(),i.moveTo(0,r/4*e),i.lineTo(n,r/4*e),i.stroke();let a=Y.value;if(a.length<2)return;let o=1/0,s=-1/0;for(let e of a){let t=e.value??e.avg??e.min??0;o=Math.min(o,t),s=Math.max(s,t)}let c=Math.max(s-o,1e-9);i.strokeStyle=w,i.font=`10px monospace`,i.fillStyle=w,i.fillText(s.toFixed(2),4,11),i.fillText(o.toFixed(2),4,r-4),i.strokeStyle=Ct,i.lineWidth=1.6,i.beginPath(),a.forEach((e,t)=>{let s=t/(a.length-1)*n,l=r-((e.value??e.avg??0)-o)/c*(r-16)-8;t===0?i.moveTo(s,l):i.lineTo(s,l)}),i.stroke()}let Q=p(null),$=null;function Rt(){let e=Q.value,t=A.value;if(!e||!t||t.hist.length<2)return;let n=Math.min(window.devicePixelRatio||1,2),r=e.clientWidth,i=e.clientHeight;(e.width!==r*n||e.height!==i*n)&&(e.width=r*n,e.height=i*n);let a=e.getContext(`2d`);if(!a)return;a.setTransform(n,0,0,n,0,0),a.clearRect(0,0,r,i);let o=Math.max(...t.hist),s=Math.min(...t.hist),c=Math.max(o-s,1e-9);a.strokeStyle=`rgba(65,200,244,0.9)`,a.lineWidth=1.5,a.beginPath(),t.hist.forEach((e,n)=>{let o=n/(t.hist.length-1)*r,l=i-(e-s)/c*(i-6)-3;n===0?a.moveTo(o,l):a.lineTo(o,l)}),a.stroke()}return y(()=>{Z(),$=oe(()=>{Rt()},800)}),t(()=>{$&&clearInterval($)}),l(X,()=>void Z()),(e,t)=>{let l=ie;return r(),d(`div`,fe,[h(`p`,pe,[v(l,{to:`/daq`,class:`back`},{default:m(()=>[c(o(e.$t(`daqDetail.k1emg364001`)),1)]),_:1}),c(` / NODE `+o(E.value.slice(0,8).toUpperCase()),1)]),h(`div`,me,[h(`h1`,null,o(A.value?.name??E.value),1),h(`span`,{class:i([`st-pill`,[M()]])},o(Tt[M()]),3)]),!A.value&&a(D).error?(r(),d(`p`,he,[c(o(a(D).error)+`(`,1),v(l,{to:`/workshop`},{default:m(()=>[c(o(e.$t(`daqDetail.k1bhhheq002`)),1)]),_:1}),t[20]||=c(`) `,-1)])):f(``,!0),A.value?(r(),d(`div`,ge,[h(`section`,_e,[h(`div`,ve,[h(`p`,ye,o(e.$t(`daqDetail.k1fx2vik032`))+` `+o(j.value?.ch??`-`),1),h(`div`,be,[c(o(A.value.value==null?`--`:A.value.value.toFixed(A.value.decimals)),1),h(`small`,null,o(A.value.unit),1)]),h(`canvas`,{ref_key:`liveCanvas`,ref:Q,class:`live-canvas`},null,512),h(`dl`,xe,[h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k4a0la003`)),1),h(`dd`,null,o(A.value.driver)+o(jt(A.value.driver)?e.$t(`daqDetail.kz8zr9v035`):``),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k3xg3w004`)),1),h(`dd`,null,o(A.value.intervalMs??e.$t(`daqDetail.k9vnp9h053`,{p0:a(D).controller.defaultIntervalMs})),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k3w6td005`)),1),h(`dd`,null,o(Ot(A.value.publishIntervalMs)),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k3x5tpx006`)),1),h(`dd`,null,o(A.value.warnLow??`-∞`)+` ~ `+o(A.value.warnHigh??`+∞`),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k1hjj0jf007`)),1),h(`dd`,null,o(A.value.min)+` ~ `+o(A.value.max),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k1i8rtqt008`)),1),h(`dd`,null,o(J.value||e.$t(`daqDetail.k3own4q036`)),1)])])])]),h(`section`,Se,[h(`h3`,Ce,o(e.$t(`daqDetail.kd9d69j009`)),1),h(`form`,{class:`form-grid`,onSubmit:te(At,[`prevent`])},[h(`label`,we,[h(`span`,null,o(e.$t(`daqDetail.k1iw7tbf010`)),1),h(`button`,{type:`button`,class:i([`toggle`,{on:V.enabled}]),onClick:t[0]||=e=>V.enabled=!V.enabled},o(V.enabled?e.$t(`daqDetail.k3w3j8f037`):e.$t(`daqDetail.k3n5aaj045`)),3)]),h(`label`,Te,[h(`span`,null,o(e.$t(`daqDetail.k12k23od011`)),1),g(h(`select`,{"onUpdate:modelValue":t[1]||=e=>V.lineId=e,class:`input`},[h(`option`,Ee,o(e.$t(`daqDetail.k3ootr6012`)),1),(r(!0),d(s,null,n(a(O).lines,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,De))),128))],512),[[b,V.lineId]])]),h(`label`,Oe,[h(`span`,null,o(e.$t(`daqDetail.k1l6smxo013`)),1),g(h(`select`,{"onUpdate:modelValue":t[2]||=e=>V.driver=e,class:`input`},[(r(!0),d(s,null,n(a(S),t=>(r(),d(`option`,{key:t.kind,value:t.kind,disabled:t.status===`planned`},o(t.label)+o(t.status===`planned`?e.$t(`daqDetail.kz8zr9v035`):``),9,ke))),128))],512),[[b,V.driver]])]),h(`label`,Ae,[h(`button`,{type:`button`,class:i([`toggle slim`,{on:V.followGlobal}]),onClick:t[3]||=e=>V.followGlobal=!V.followGlobal},o(V.followGlobal?e.$t(`daqDetail.k1k2ueyq038`):e.$t(`daqDetail.k1cgi8fy046`)),3),g(h(`input`,{"onUpdate:modelValue":t[4]||=e=>V.intervalMs=e,type:`number`,min:`200`,max:`60000`,step:`100`,class:`input`,disabled:V.followGlobal},null,8,je),[[x,V.intervalMs,void 0,{number:!0}]]),t[21]||=h(`small`,null,`ms`,-1)]),h(`label`,Me,[h(`button`,{type:`button`,class:i([`toggle slim`,{on:V.calKind===`linear`}]),title:`采集标定 decoder:物理值 = scale × PLC采集值 + offset`,onClick:t[5]||=e=>V.calKind=V.calKind===`linear`?`none`:`linear`},o(V.calKind===`linear`?e.$t(`daqDetail.k1eru4r1039`):e.$t(`daqDetail.k3oktae047`)),3),g(h(`input`,{"onUpdate:modelValue":t[6]||=e=>V.calScale=e,type:`number`,step:`0.1`,class:`input`,disabled:V.calKind!==`linear`,title:`decode 斜率(≠0)`},null,8,Ne),[[x,V.calScale,void 0,{number:!0}]]),g(h(`input`,{"onUpdate:modelValue":t[7]||=e=>V.calOffset=e,type:`number`,step:`0.1`,class:`input`,disabled:V.calKind!==`linear`,title:`decode 截距`},null,8,Pe),[[x,V.calOffset,void 0,{number:!0}]]),t[22]||=h(`small`,null,`decoder`,-1)]),h(`label`,Fe,[h(`button`,{type:`button`,class:i([`toggle slim`,{on:V.publishFollow}]),onClick:t[8]||=e=>V.publishFollow=!V.publishFollow},o(V.publishFollow?e.$t(`daqDetail.k1k2t5o7040`):e.$t(`daqDetail.k1cggz5f048`)),3),h(`span`,{class:i([`toggle slim`,{on:V.publishEveryFrame}]),style:{cursor:`pointer`},onClick:t[9]||=e=>V.publishEveryFrame=!V.publishEveryFrame},o(V.publishEveryFrame?e.$t(`daqDetail.k41mvv041`):e.$t(`daqDetail.k3n42dj049`)),3),g(h(`input`,{"onUpdate:modelValue":t[10]||=e=>V.publishMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,class:`input`,disabled:V.publishFollow||V.publishEveryFrame},null,8,Ie),[[x,V.publishMs,void 0,{number:!0}]]),t[23]||=h(`small`,null,`ms`,-1)]),h(`label`,Le,[h(`span`,null,o(e.$t(`daqDetail.k3x4ef014`)),1),g(h(`input`,{"onUpdate:modelValue":t[11]||=e=>V.unit=e,class:`input`},null,512),[[x,V.unit]])]),h(`label`,Re,[h(`span`,null,o(e.$t(`daqDetail.k3mxmcx015`)),1),g(h(`input`,{"onUpdate:modelValue":t[12]||=e=>V.decimals=e,type:`number`,min:`0`,max:`6`,class:`input`},null,512),[[x,V.decimals,void 0,{number:!0}]])]),h(`div`,ze,[h(`label`,Be,[h(`span`,null,o(e.$t(`daqDetail.k1l9jv5m016`)),1),g(h(`input`,{"onUpdate:modelValue":t[13]||=e=>V.min=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.min,void 0,{number:!0}]])]),h(`label`,Ve,[h(`span`,null,o(e.$t(`daqDetail.k1md63hm017`)),1),g(h(`input`,{"onUpdate:modelValue":t[14]||=e=>V.warnLow=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.warnLow,void 0,{number:!0}]])]),h(`label`,He,[h(`span`,null,o(e.$t(`daqDetail.k1md63gp018`)),1),g(h(`input`,{"onUpdate:modelValue":t[15]||=e=>V.warnHigh=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.warnHigh,void 0,{number:!0}]])]),h(`label`,Ue,[h(`span`,null,o(e.$t(`daqDetail.k1l9jv4p019`)),1),g(h(`input`,{"onUpdate:modelValue":t[16]||=e=>V.max=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.max,void 0,{number:!0}]])])]),h(`button`,{class:`aw-pill`,type:`submit`,disabled:K.value},o(K.value?e.$t(`daqDetail.k1as0g50042`):e.$t(`daqDetail.ksn9cgo050`)),9,We)],32),U.value.length?(r(),d(s,{key:0},[h(`h3`,Ge,o(e.$t(`daqDetail.k1p9gioa033`))+` `+o(a(S).find(e=>e.kind===V.driver)?.label),1),h(`div`,Ke,[(r(!0),d(s,null,n(U.value,e=>(r(),d(`label`,{key:e.key,class:`field`},[h(`span`,null,[c(o(e.label),1),e.required?(r(),d(`em`,qe,`*`)):f(``,!0)]),e.type===`select`?g((r(),d(`select`,{key:0,"onUpdate:modelValue":t=>H.value[e.key]=t,class:`input`},[(r(!0),d(s,null,n(e.options,e=>(r(),d(`option`,{key:e.value,value:e.value},o(e.label),9,Ye))),128))],8,Je)),[[b,H.value[e.key]]]):g((r(),d(`input`,{key:1,"onUpdate:modelValue":t=>H.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`input`},null,8,Xe)),[[ne,H.value[e.key]]])]))),128))]),h(`div`,Ze,[h(`button`,{class:`pill-btn`,disabled:W.value,onClick:kt},o(W.value?e.$t(`daqDetail.k1fsh720043`):e.$t(`daqDetail.k1fstglk051`)),9,Qe),G.value?(r(),d(`span`,{key:0,class:i([`test-out mono`,G.value.ok?`ok`:`bad`])},o(G.value.ok?`✓`:`✗`)+` `+o(G.value.message),3)):f(``,!0)])],64)):f(``,!0),h(`h3`,$e,o(e.$t(`daqDetail.k1ie6qju020`)),1),h(`div`,et,[g(h(`select`,{"onUpdate:modelValue":t[17]||=e=>q.value=e,class:`input grow`},[h(`option`,tt,o(e.$t(`daqDetail.kjobzu3021`)),1),(r(!0),d(s,null,n(Nt.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,nt))),128))],512),[[b,q.value]]),h(`button`,{class:`pill-btn`,onClick:Mt},o(J.value?e.$t(`daqDetail.k479eh044`):e.$t(`daqDetail.k452a8052`)),1)])]),h(`section`,rt,[h(`div`,it,[h(`h3`,at,o(e.$t(`daqDetail.k1i535i5034`))+o(a(D).meta.tsdb)+`) `,1),h(`div`,ot,[g(h(`select`,{"onUpdate:modelValue":t[18]||=e=>X.value=e,class:`input`},[(r(),d(s,null,n(Ft,e=>h(`option`,{key:e.ms,value:e.ms},o(e.label),9,st)),64))],512),[[b,X.value,void 0,{number:!0}]]),h(`button`,{class:`pill-btn`,onClick:Z},o(e.$t(`daqDetail.k3x1jg022`)),1)])]),h(`canvas`,{ref_key:`chartCanvas`,ref:It,class:`hist-canvas`},null,512),h(`table`,ct,[h(`thead`,null,[h(`tr`,null,[h(`th`,null,o(e.$t(`daqDetail.k40vsf023`)),1),h(`th`,null,o(e.$t(`daqDetail.k48v5024`)),1),h(`th`,null,o(e.$t(`daqDetail.k4bza025`)),1)])]),h(`tbody`,null,[(r(!0),d(s,null,n(Y.value.filter(e=>e.value!=null).slice(-12).reverse(),(e,t)=>(r(),d(`tr`,{key:t},[h(`td`,null,o(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour12:!1})),1),h(`td`,null,o(e.value.toFixed(A.value?.decimals??2)),1),h(`td`,null,o(e.state),1)]))),128))])])])])):f(``,!0),F.value?(r(),d(`section`,lt,[h(`div`,ut,[h(`h3`,dt,[c(o(P.value===`image`?e.$t(`daqDetail.kfrm0001`):e.$t(`daqDetail.kfrm0002`))+` `,1),h(`span`,ft,o(I.value.length),1)]),h(`button`,{class:`pill-btn`,onClick:L},o(e.$t(`daqDetail.k3x1jg022`)),1)]),P.value===`vector`?(r(),d(s,{key:0},[(r(),d(`svg`,{class:`vec-svg`,viewBox:`0 0 ${C} ${St}`,preserveAspectRatio:`none`},[h(`polyline`,{points:Dt.value,fill:`none`,stroke:`var(--accent)`,"stroke-width":`1.5`},null,8,mt)],8,pt)),h(`table`,ht,[h(`thead`,null,[h(`tr`,null,[h(`th`,null,o(e.$t(`daqDetail.k40vsf023`)),1),h(`th`,null,o(e.$t(`daqDetail.kfrm0004`)),1),h(`th`,null,o(e.$t(`daqDetail.kfrm0005`)),1)])]),h(`tbody`,null,[(r(!0),d(s,null,n(I.value.filter(e=>e.kind===`vector`).slice(0,12),e=>(r(),d(`tr`,{key:e.at},[h(`td`,null,o(R(e.at)),1),h(`td`,null,o(e.points?.length??0),1),h(`td`,null,o(z(e)),1)]))),128))])])],64)):(r(),d(s,{key:1},[I.value.length?(r(),d(`div`,gt,[(r(!0),d(s,null,n(I.value,t=>(r(),d(`figure`,{key:t.at,class:`gal-item`,title:e.$t(`daqDetail.kfrm0006`),onClick:e=>B.value=t},[h(`img`,{src:t.thumbUrl,loading:`lazy`,alt:`daq frame`},null,8,vt),h(`figcaption`,yt,o(R(t.at))+` · `+o(z(t)),1)],8,_t))),128))])):(r(),d(`p`,bt,o(e.$t(`daqDetail.kfrm0003`)),1)),B.value?(r(),d(`div`,{key:2,class:`gal-full`,onClick:t[19]||=e=>B.value=null},[h(`img`,{src:B.value.contentUrl??B.value.thumbUrl,alt:`daq frame full`},null,8,xt)])):f(``,!0)],64))])):f(``,!0)])}}}),[[`__scopeId`,`data-v-aa4c2a31`]]);export{T as default};
1
+ import{C as e,F as t,G as n,H as r,Ht as i,St as a,Wt as o,a as s,b as c,et as l,f as u,ft as ee,g as d,h as f,mt as p,nt as m,p as h,rt as g,t as _,x as v,z as y}from"./BSCpFtzG.js";import{B as te,F as ne,I as b,L as x}from"./2LwEn9gX.js";import{a as re}from"./Bi6AiCuP.js";import{t as ie}from"./ubPfs9mQ.js";import{n as ae}from"./BeIfu4N3.js";import{t as oe}from"./BJvGPTpC.js";import{t as se}from"./CNs_Ozdc2.js";import{t as ce}from"./GP2wXyuY.js";import{a as le,n as S,t as ue}from"./CS8R0_J3.js";import{t as de}from"./CUxV8Bw_.js";var fe={class:`page`},pe={class:`aw-kicker`},me={class:`aw-page-head`},he={key:0,class:`err`},ge={key:1,class:`grid`},_e={class:`col-live`},ve={class:`aw-tile value-card`},ye={class:`aw-kicker`},be={class:`big-val mono`},xe={class:`facts mono`},Se={class:`col-form aw-tile pad`},Ce={class:`sec`},we={class:`field`},Te={class:`field`},Ee={value:``},De=[`value`],Oe={class:`field`},ke=[`value`,`disabled`],Ae={class:`field row`},je=[`disabled`],Me={class:`field row`},Ne=[`disabled`],Pe=[`disabled`],Fe={class:`field row`},Ie=[`disabled`],Le={class:`field`},Re={class:`field`},ze={class:`field-row`},Be={class:`field`},Ve={class:`field`},He={class:`field`},Ue={class:`field`},We=[`disabled`],Ge={class:`sec mt`},Ke={class:`driver-grid`},qe={key:0},Je=[`onUpdate:modelValue`],Ye=[`value`],Xe=[`onUpdate:modelValue`,`type`,`placeholder`],Ze={class:`test-row`},Qe=[`disabled`],$e={class:`sec mt`},et={class:`bind-row`},tt={value:``},nt=[`value`],rt={class:`col-hist aw-tile pad`},it={class:`hist-hd`},at={class:`sec`},ot={class:`hist-ctl mono`},st=[`value`],ct={class:`raw-table mono`},lt={key:2,class:`aw-tile pad frames-tile`},ut={class:`hist-hd`},dt={class:`sec`},ft={class:`mono frames-n`},pt=[`viewBox`],mt=[`points`],ht={class:`raw-table mono`},gt={key:0,class:`gal`},_t=[`title`,`onClick`],vt=[`src`],yt={class:`mono`},bt={key:1,class:`frames-empty`},xt=[`src`],C=320,St=84,Ct=`#35e0a0`,wt=`rgba(120,135,160,0.18)`,w=`rgba(140,155,175,0.8)`,T=_(e({__name:`[id]`,setup(e){let{t:_}=ae();se({layout:`default`});let T=re(),E=u(()=>String(T.params.id??``)),D=ue(),O=ce();O.load();let k=de(),A=u(()=>D.nodeById(E.value)??null),j=u(()=>{let e=A.value?le(A.value.templateRef):``;return D.templates.find(t=>t.key===e)??null}),Tt={ok:_(`daqDetail.k41k5c026`),warn:_(`daqDetail.k49z8v027`),alarm:_(`daqDetail.k3xmid028`),offline:_(`daqDetail.k44c2n029`)},M=()=>{let e=A.value;return!e||!D.controller.running||!e.enabled?`offline`:e.state},N=null;y(()=>{N=D.ensureWsFeed(),D.load(),k.load(),F.value&&L()}),t(()=>N?.());let P=u(()=>j.value?.signalKind??`scalar`),F=u(()=>P.value!==`scalar`),I=u(()=>D.framesOf(E.value));async function L(){E.value&&await D.fetchFrames(E.value,{limit:24}).catch(()=>{})}l(E,()=>{F.value&&L()});let R=e=>new Date(e).toLocaleTimeString(`zh-CN`,{hour12:!1}),z=e=>Object.entries(e.metrics??{}).slice(0,3).map(([e,t])=>`${e}=${t}`).join(` `),Et=u(()=>I.value.find(e=>e.kind===`vector`&&e.points?.length)),Dt=u(()=>{let e=Et.value?.points??[];if(e.length<2)return``;let t=Math.min(...e),n=Math.max(...e)-t||1;return e.map((r,i)=>`${(i/(e.length-1)*C).toFixed(1)},${(78-(r-t)/n*72).toFixed(1)}`).join(` `)}),B=p(null);function Ot(e){return e==null?_(`daqDetail.k9vnp9h053`,{p0:D.controller.defaultPublishIntervalMs}):e===0?_(`daqDetail.k1m1zwux030`):`${e}ms`}let V=ee({enabled:!0,driver:`mock`,lineId:``,followGlobal:!0,intervalMs:1e3,calKind:`none`,calScale:1,calOffset:0,publishFollow:!0,publishEveryFrame:!1,publishMs:1e3,unit:``,decimals:1,min:0,max:100,warnLow:null,warnHigh:null});l(A,e=>{e&&(V.enabled=e.enabled,V.lineId=e.lineId??``,V.driver=e.driver,V.followGlobal=e.intervalMs==null,V.intervalMs=e.intervalMs??D.controller.defaultIntervalMs,V.publishFollow=e.publishIntervalMs==null,V.publishEveryFrame=e.publishIntervalMs===0,V.publishMs=e.publishIntervalMs==null?D.controller.defaultPublishIntervalMs:e.publishIntervalMs,V.unit=e.unit,V.decimals=e.decimals,V.min=e.min,V.max=e.max,V.warnLow=e.warnLow,V.warnHigh=e.warnHigh)},{immediate:!0});let H=p({}),U=u(()=>S.find(e=>e.kind===V.driver)?.configFields??[]);l(A,e=>{e&&(H.value={...e.driverConfig})},{immediate:!0}),l(()=>V.driver,()=>{if(U.value.length&&Object.keys(H.value).length===0){let e={};for(let t of U.value)t.default!==void 0&&(e[t.key]=t.default);H.value=e}},{immediate:!0});let W=p(!1),G=p(null);async function kt(){W.value=!0,G.value=null;try{await D.patchNode(E.value,{driver:V.driver,driverConfig:{...H.value}}),G.value=await D.testNode(E.value)}catch(e){G.value={ok:!1,message:e instanceof Error?e.message:String(e)}}finally{W.value=!1}}let K=p(!1);async function At(){let e=A.value;if(!(!e||K.value)){K.value=!0;try{await D.patchNode(e.id,{enabled:V.enabled,driver:V.driver,lineId:V.lineId,driverConfig:{...H.value},intervalMs:V.followGlobal?null:Math.max(120,Math.min(6e4,Math.round(V.intervalMs))),publishIntervalMs:V.publishFollow?null:V.publishEveryFrame?0:Math.max(0,Math.min(6e4,Math.round(V.publishMs))),unit:V.unit,decimals:Math.max(0,Math.min(6,Math.round(V.decimals))),min:V.min,max:V.max,warnLow:V.warnLow,warnHigh:V.warnHigh})}finally{K.value=!1}}}function jt(e){return D.meta.drivers.find(t=>t.kind===e)?.status===`planned`}let q=p(``),J=u(()=>{let e=A.value?.deviceBindingId;return e?k.twins.find(t=>t.id===e)?.name??`${e.slice(0,8)}…`:``});function Mt(){D.bindNode(E.value,A.value?.deviceBindingId?null:q.value||null)}let Nt=u(()=>k.twins.filter(e=>e.kind!==`daq`&&e.id!==A.value?.id)),Y=p([]),X=p(5e3),Pt=p(!1),Ft=[{label:_(`daqDetail.k3lha20031`),ms:0},{label:`1s 桶`,ms:1e3},{label:`5s 桶`,ms:5e3},{label:`30s 桶`,ms:3e4}];async function Z(){if(E.value){Pt.value=!0;try{let e=await D.samplesOf(E.value,{toMs:Date.now(),bucketMs:X.value||void 0,limit:400});Y.value=[...e].reverse()}finally{Pt.value=!1,Lt()}}}let It=p(null);function Lt(){let e=It.value;if(!e)return;let t=Math.min(window.devicePixelRatio||1,2),n=e.clientWidth,r=e.clientHeight;(e.width!==n*t||e.height!==r*t)&&(e.width=n*t,e.height=r*t);let i=e.getContext(`2d`);if(!i)return;i.setTransform(t,0,0,t,0,0),i.clearRect(0,0,n,r);for(let e=1;e<4;e++)i.strokeStyle=wt,i.beginPath(),i.moveTo(0,r/4*e),i.lineTo(n,r/4*e),i.stroke();let a=Y.value;if(a.length<2)return;let o=1/0,s=-1/0;for(let e of a){let t=e.value??e.avg??e.min??0;o=Math.min(o,t),s=Math.max(s,t)}let c=Math.max(s-o,1e-9);i.strokeStyle=w,i.font=`10px monospace`,i.fillStyle=w,i.fillText(s.toFixed(2),4,11),i.fillText(o.toFixed(2),4,r-4),i.strokeStyle=Ct,i.lineWidth=1.6,i.beginPath(),a.forEach((e,t)=>{let s=t/(a.length-1)*n,l=r-((e.value??e.avg??0)-o)/c*(r-16)-8;t===0?i.moveTo(s,l):i.lineTo(s,l)}),i.stroke()}let Q=p(null),$=null;function Rt(){let e=Q.value,t=A.value;if(!e||!t||t.hist.length<2)return;let n=Math.min(window.devicePixelRatio||1,2),r=e.clientWidth,i=e.clientHeight;(e.width!==r*n||e.height!==i*n)&&(e.width=r*n,e.height=i*n);let a=e.getContext(`2d`);if(!a)return;a.setTransform(n,0,0,n,0,0),a.clearRect(0,0,r,i);let o=Math.max(...t.hist),s=Math.min(...t.hist),c=Math.max(o-s,1e-9);a.strokeStyle=`rgba(65,200,244,0.9)`,a.lineWidth=1.5,a.beginPath(),t.hist.forEach((e,n)=>{let o=n/(t.hist.length-1)*r,l=i-(e-s)/c*(i-6)-3;n===0?a.moveTo(o,l):a.lineTo(o,l)}),a.stroke()}return y(()=>{Z(),$=oe(()=>{Rt()},800)}),t(()=>{$&&clearInterval($)}),l(X,()=>void Z()),(e,t)=>{let l=ie;return r(),d(`div`,fe,[h(`p`,pe,[v(l,{to:`/daq`,class:`back`},{default:m(()=>[c(o(e.$t(`daqDetail.k1emg364001`)),1)]),_:1}),c(` / NODE `+o(E.value.slice(0,8).toUpperCase()),1)]),h(`div`,me,[h(`h1`,null,o(A.value?.name??E.value),1),h(`span`,{class:i([`st-pill`,[M()]])},o(Tt[M()]),3)]),!A.value&&a(D).error?(r(),d(`p`,he,[c(o(a(D).error)+`(`,1),v(l,{to:`/workshop`},{default:m(()=>[c(o(e.$t(`daqDetail.k1bhhheq002`)),1)]),_:1}),t[20]||=c(`) `,-1)])):f(``,!0),A.value?(r(),d(`div`,ge,[h(`section`,_e,[h(`div`,ve,[h(`p`,ye,o(e.$t(`daqDetail.k1fx2vik032`))+` `+o(j.value?.ch??`-`),1),h(`div`,be,[c(o(A.value.value==null?`--`:A.value.value.toFixed(A.value.decimals)),1),h(`small`,null,o(A.value.unit),1)]),h(`canvas`,{ref_key:`liveCanvas`,ref:Q,class:`live-canvas`},null,512),h(`dl`,xe,[h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k4a0la003`)),1),h(`dd`,null,o(A.value.driver)+o(jt(A.value.driver)?e.$t(`daqDetail.kz8zr9v035`):``),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k3xg3w004`)),1),h(`dd`,null,o(A.value.intervalMs??e.$t(`daqDetail.k9vnp9h053`,{p0:a(D).controller.defaultIntervalMs})),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k3w6td005`)),1),h(`dd`,null,o(Ot(A.value.publishIntervalMs)),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k3x5tpx006`)),1),h(`dd`,null,o(A.value.warnLow??`-∞`)+` ~ `+o(A.value.warnHigh??`+∞`),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k1hjj0jf007`)),1),h(`dd`,null,o(A.value.min)+` ~ `+o(A.value.max),1)]),h(`div`,null,[h(`dt`,null,o(e.$t(`daqDetail.k1i8rtqt008`)),1),h(`dd`,null,o(J.value||e.$t(`daqDetail.k3own4q036`)),1)])])])]),h(`section`,Se,[h(`h3`,Ce,o(e.$t(`daqDetail.kd9d69j009`)),1),h(`form`,{class:`form-grid`,onSubmit:te(At,[`prevent`])},[h(`label`,we,[h(`span`,null,o(e.$t(`daqDetail.k1iw7tbf010`)),1),h(`button`,{type:`button`,class:i([`toggle`,{on:V.enabled}]),onClick:t[0]||=e=>V.enabled=!V.enabled},o(V.enabled?e.$t(`daqDetail.k3w3j8f037`):e.$t(`daqDetail.k3n5aaj045`)),3)]),h(`label`,Te,[h(`span`,null,o(e.$t(`daqDetail.k12k23od011`)),1),g(h(`select`,{"onUpdate:modelValue":t[1]||=e=>V.lineId=e,class:`input`},[h(`option`,Ee,o(e.$t(`daqDetail.k3ootr6012`)),1),(r(!0),d(s,null,n(a(O).lines,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,De))),128))],512),[[b,V.lineId]])]),h(`label`,Oe,[h(`span`,null,o(e.$t(`daqDetail.k1l6smxo013`)),1),g(h(`select`,{"onUpdate:modelValue":t[2]||=e=>V.driver=e,class:`input`},[(r(!0),d(s,null,n(a(S),t=>(r(),d(`option`,{key:t.kind,value:t.kind,disabled:t.status===`planned`},o(t.label)+o(t.status===`planned`?e.$t(`daqDetail.kz8zr9v035`):``),9,ke))),128))],512),[[b,V.driver]])]),h(`label`,Ae,[h(`button`,{type:`button`,class:i([`toggle slim`,{on:V.followGlobal}]),onClick:t[3]||=e=>V.followGlobal=!V.followGlobal},o(V.followGlobal?e.$t(`daqDetail.k1k2ueyq038`):e.$t(`daqDetail.k1cgi8fy046`)),3),g(h(`input`,{"onUpdate:modelValue":t[4]||=e=>V.intervalMs=e,type:`number`,min:`200`,max:`60000`,step:`100`,class:`input`,disabled:V.followGlobal},null,8,je),[[x,V.intervalMs,void 0,{number:!0}]]),t[21]||=h(`small`,null,`ms`,-1)]),h(`label`,Me,[h(`button`,{type:`button`,class:i([`toggle slim`,{on:V.calKind===`linear`}]),title:`采集标定 decoder:物理值 = scale × PLC采集值 + offset`,onClick:t[5]||=e=>V.calKind=V.calKind===`linear`?`none`:`linear`},o(V.calKind===`linear`?e.$t(`daqDetail.k1eru4r1039`):e.$t(`daqDetail.k3oktae047`)),3),g(h(`input`,{"onUpdate:modelValue":t[6]||=e=>V.calScale=e,type:`number`,step:`0.1`,class:`input`,disabled:V.calKind!==`linear`,title:`decode 斜率(≠0)`},null,8,Ne),[[x,V.calScale,void 0,{number:!0}]]),g(h(`input`,{"onUpdate:modelValue":t[7]||=e=>V.calOffset=e,type:`number`,step:`0.1`,class:`input`,disabled:V.calKind!==`linear`,title:`decode 截距`},null,8,Pe),[[x,V.calOffset,void 0,{number:!0}]]),t[22]||=h(`small`,null,`decoder`,-1)]),h(`label`,Fe,[h(`button`,{type:`button`,class:i([`toggle slim`,{on:V.publishFollow}]),onClick:t[8]||=e=>V.publishFollow=!V.publishFollow},o(V.publishFollow?e.$t(`daqDetail.k1k2t5o7040`):e.$t(`daqDetail.k1cggz5f048`)),3),h(`span`,{class:i([`toggle slim`,{on:V.publishEveryFrame}]),style:{cursor:`pointer`},onClick:t[9]||=e=>V.publishEveryFrame=!V.publishEveryFrame},o(V.publishEveryFrame?e.$t(`daqDetail.k41mvv041`):e.$t(`daqDetail.k3n42dj049`)),3),g(h(`input`,{"onUpdate:modelValue":t[10]||=e=>V.publishMs=e,type:`number`,min:`0`,max:`60000`,step:`100`,class:`input`,disabled:V.publishFollow||V.publishEveryFrame},null,8,Ie),[[x,V.publishMs,void 0,{number:!0}]]),t[23]||=h(`small`,null,`ms`,-1)]),h(`label`,Le,[h(`span`,null,o(e.$t(`daqDetail.k3x4ef014`)),1),g(h(`input`,{"onUpdate:modelValue":t[11]||=e=>V.unit=e,class:`input`},null,512),[[x,V.unit]])]),h(`label`,Re,[h(`span`,null,o(e.$t(`daqDetail.k3mxmcx015`)),1),g(h(`input`,{"onUpdate:modelValue":t[12]||=e=>V.decimals=e,type:`number`,min:`0`,max:`6`,class:`input`},null,512),[[x,V.decimals,void 0,{number:!0}]])]),h(`div`,ze,[h(`label`,Be,[h(`span`,null,o(e.$t(`daqDetail.k1l9jv5m016`)),1),g(h(`input`,{"onUpdate:modelValue":t[13]||=e=>V.min=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.min,void 0,{number:!0}]])]),h(`label`,Ve,[h(`span`,null,o(e.$t(`daqDetail.k1md63hm017`)),1),g(h(`input`,{"onUpdate:modelValue":t[14]||=e=>V.warnLow=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.warnLow,void 0,{number:!0}]])]),h(`label`,He,[h(`span`,null,o(e.$t(`daqDetail.k1md63gp018`)),1),g(h(`input`,{"onUpdate:modelValue":t[15]||=e=>V.warnHigh=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.warnHigh,void 0,{number:!0}]])]),h(`label`,Ue,[h(`span`,null,o(e.$t(`daqDetail.k1l9jv4p019`)),1),g(h(`input`,{"onUpdate:modelValue":t[16]||=e=>V.max=e,type:`number`,step:`any`,class:`input`},null,512),[[x,V.max,void 0,{number:!0}]])])]),h(`button`,{class:`aw-pill`,type:`submit`,disabled:K.value},o(K.value?e.$t(`daqDetail.k1as0g50042`):e.$t(`daqDetail.ksn9cgo050`)),9,We)],32),U.value.length?(r(),d(s,{key:0},[h(`h3`,Ge,o(e.$t(`daqDetail.k1p9gioa033`))+` `+o(a(S).find(e=>e.kind===V.driver)?.label),1),h(`div`,Ke,[(r(!0),d(s,null,n(U.value,e=>(r(),d(`label`,{key:e.key,class:`field`},[h(`span`,null,[c(o(e.label),1),e.required?(r(),d(`em`,qe,`*`)):f(``,!0)]),e.type===`select`?g((r(),d(`select`,{key:0,"onUpdate:modelValue":t=>H.value[e.key]=t,class:`input`},[(r(!0),d(s,null,n(e.options,e=>(r(),d(`option`,{key:e.value,value:e.value},o(e.label),9,Ye))),128))],8,Je)),[[b,H.value[e.key]]]):g((r(),d(`input`,{key:1,"onUpdate:modelValue":t=>H.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`input`},null,8,Xe)),[[ne,H.value[e.key]]])]))),128))]),h(`div`,Ze,[h(`button`,{class:`pill-btn`,disabled:W.value,onClick:kt},o(W.value?e.$t(`daqDetail.k1fsh720043`):e.$t(`daqDetail.k1fstglk051`)),9,Qe),G.value?(r(),d(`span`,{key:0,class:i([`test-out mono`,G.value.ok?`ok`:`bad`])},o(G.value.ok?`✓`:`✗`)+` `+o(G.value.message),3)):f(``,!0)])],64)):f(``,!0),h(`h3`,$e,o(e.$t(`daqDetail.k1ie6qju020`)),1),h(`div`,et,[g(h(`select`,{"onUpdate:modelValue":t[17]||=e=>q.value=e,class:`input grow`},[h(`option`,tt,o(e.$t(`daqDetail.kjobzu3021`)),1),(r(!0),d(s,null,n(Nt.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,nt))),128))],512),[[b,q.value]]),h(`button`,{class:`pill-btn`,onClick:Mt},o(J.value?e.$t(`daqDetail.k479eh044`):e.$t(`daqDetail.k452a8052`)),1)])]),h(`section`,rt,[h(`div`,it,[h(`h3`,at,o(e.$t(`daqDetail.k1i535i5034`))+o(a(D).meta.tsdb)+`) `,1),h(`div`,ot,[g(h(`select`,{"onUpdate:modelValue":t[18]||=e=>X.value=e,class:`input`},[(r(),d(s,null,n(Ft,e=>h(`option`,{key:e.ms,value:e.ms},o(e.label),9,st)),64))],512),[[b,X.value,void 0,{number:!0}]]),h(`button`,{class:`pill-btn`,onClick:Z},o(e.$t(`daqDetail.k3x1jg022`)),1)])]),h(`canvas`,{ref_key:`chartCanvas`,ref:It,class:`hist-canvas`},null,512),h(`table`,ct,[h(`thead`,null,[h(`tr`,null,[h(`th`,null,o(e.$t(`daqDetail.k40vsf023`)),1),h(`th`,null,o(e.$t(`daqDetail.k48v5024`)),1),h(`th`,null,o(e.$t(`daqDetail.k4bza025`)),1)])]),h(`tbody`,null,[(r(!0),d(s,null,n(Y.value.filter(e=>e.value!=null).slice(-12).reverse(),(e,t)=>(r(),d(`tr`,{key:t},[h(`td`,null,o(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour12:!1})),1),h(`td`,null,o(e.value.toFixed(A.value?.decimals??2)),1),h(`td`,null,o(e.state),1)]))),128))])])])])):f(``,!0),F.value?(r(),d(`section`,lt,[h(`div`,ut,[h(`h3`,dt,[c(o(P.value===`image`?e.$t(`daqDetail.kfrm0001`):e.$t(`daqDetail.kfrm0002`))+` `,1),h(`span`,ft,o(I.value.length),1)]),h(`button`,{class:`pill-btn`,onClick:L},o(e.$t(`daqDetail.k3x1jg022`)),1)]),P.value===`vector`?(r(),d(s,{key:0},[(r(),d(`svg`,{class:`vec-svg`,viewBox:`0 0 ${C} ${St}`,preserveAspectRatio:`none`},[h(`polyline`,{points:Dt.value,fill:`none`,stroke:`var(--accent)`,"stroke-width":`1.5`},null,8,mt)],8,pt)),h(`table`,ht,[h(`thead`,null,[h(`tr`,null,[h(`th`,null,o(e.$t(`daqDetail.k40vsf023`)),1),h(`th`,null,o(e.$t(`daqDetail.kfrm0004`)),1),h(`th`,null,o(e.$t(`daqDetail.kfrm0005`)),1)])]),h(`tbody`,null,[(r(!0),d(s,null,n(I.value.filter(e=>e.kind===`vector`).slice(0,12),e=>(r(),d(`tr`,{key:e.at},[h(`td`,null,o(R(e.at)),1),h(`td`,null,o(e.points?.length??0),1),h(`td`,null,o(z(e)),1)]))),128))])])],64)):(r(),d(s,{key:1},[I.value.length?(r(),d(`div`,gt,[(r(!0),d(s,null,n(I.value,t=>(r(),d(`figure`,{key:t.at,class:`gal-item`,title:e.$t(`daqDetail.kfrm0006`),onClick:e=>B.value=t},[h(`img`,{src:t.thumbUrl,loading:`lazy`,alt:`daq frame`},null,8,vt),h(`figcaption`,yt,o(R(t.at))+` · `+o(z(t)),1)],8,_t))),128))])):(r(),d(`p`,bt,o(e.$t(`daqDetail.kfrm0003`)),1)),B.value?(r(),d(`div`,{key:2,class:`gal-full`,onClick:t[19]||=e=>B.value=null},[h(`img`,{src:B.value.contentUrl??B.value.thumbUrl,alt:`daq frame full`},null,8,xt)])):f(``,!0)],64))])):f(``,!0)])}}}),[[`__scopeId`,`data-v-aa4c2a31`]]);export{T as default};
@@ -0,0 +1 @@
1
+ .line-chip[data-v-0c94de6c]{vertical-align:-1px;border-radius:3px;width:10px;height:10px;margin-right:8px;display:inline-block;box-shadow:0 0 10px}.param-chip.daqwin[data-v-0c94de6c]{color:#41c8f4;border-color:#41c8f466}.adopt-card[data-v-0c94de6c]{flex-wrap:wrap;align-items:flex-start;gap:12px;display:flex}.adopt-title[data-v-0c94de6c]{color:var(--aw-dim,#8fa0b5);flex:none;padding-top:4px;font-size:12px}.adopt-list[data-v-0c94de6c]{flex-wrap:wrap;gap:8px;display:flex}.adopt-chip[data-v-0c94de6c]{color:#e8eef8;background:#0d1420b3;border:1px solid #3c506e80;border-radius:8px;align-items:center;gap:6px;padding:4px 8px;font-size:11px;display:inline-flex}.page[data-v-0c94de6c]{padding:4px}h1[data-v-0c94de6c]{letter-spacing:-.015em;margin:2px 0 4px;font-size:30px;font-weight:400}.ledger-card[data-v-0c94de6c]{margin-bottom:14px;padding:14px 18px}.ledger-head[data-v-0c94de6c]{align-items:center;gap:12px;display:flex}.ledger-head b[data-v-0c94de6c]{font-size:13.5px}.ledger-tri[data-v-0c94de6c]{align-items:center;gap:12px;margin-top:12px;display:flex}.tri-cell[data-v-0c94de6c]{background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-chip);flex-direction:column;flex:none;gap:2px;padding:8px 16px;display:flex}.tri-cell small[data-v-0c94de6c]{color:var(--ink-faint);font-size:10px}.tri-cell b[data-v-0c94de6c]{color:var(--ink);font-size:17px}.ledger-cols[data-v-0c94de6c]{grid-template-columns:1fr 1fr;gap:16px;margin-top:12px;display:grid}.sec-t[data-v-0c94de6c]{letter-spacing:.14em;color:var(--ink-faint);margin-bottom:6px;font-size:10px;font-weight:700;display:block}.ledger-list[data-v-0c94de6c]{max-height:200px;color:var(--ink-soft);flex-direction:column;gap:3px;margin:0;padding:0;font-size:11px;list-style:none;display:flex;overflow:auto}.ledger-rec[data-v-0c94de6c]{align-items:center;gap:8px;display:flex}.rec-st[data-v-0c94de6c]{font-family:var(--font-mono);color:var(--ink-faint);border:1px solid var(--line-strong);border-radius:4px;flex:none;padding:0 6px;font-size:9px}.rec-st.open[data-v-0c94de6c]{color:var(--tone-warning-dot);border-color:var(--tone-warning-dot)}.rec-st.judged[data-v-0c94de6c]{color:var(--tone-warning-dot);border-color:var(--tone-warning-dot);opacity:.85}.rec-st.judged-keep[data-v-0c94de6c],.rec-st.rolled-back[data-v-0c94de6c]{color:var(--tone-success-dot);border-color:var(--tone-success-dot)}.sub[data-v-0c94de6c]{opacity:.6;margin:0;font-size:12.5px}.mono[data-v-0c94de6c]{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.dim[data-v-0c94de6c]{opacity:.55}.badges[data-v-0c94de6c]{gap:8px;display:flex}.badge[data-v-0c94de6c]{letter-spacing:.05em;color:var(--ink-soft);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:3px 10px;font-size:11px}.ctrl-card[data-v-0c94de6c]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:14px;padding:14px 18px;display:flex}.ctrl-left[data-v-0c94de6c]{align-items:center;gap:14px;display:flex}.aw-pill.running[data-v-0c94de6c]{background:var(--accent)}.ctrl-right[data-v-0c94de6c]{align-items:center;gap:12px;display:flex}.ctrl-metrics[data-v-0c94de6c]{color:var(--ink-soft);align-items:center;gap:8px;font-size:11.5px;display:flex}.ctrl-metrics .sep[data-v-0c94de6c]{opacity:.4}.ctrl-metrics .warn[data-v-0c94de6c]{color:var(--tone-warning-dot)}.add-btn[data-v-0c94de6c]{padding:8px 16px;font-size:13px}.banner[data-v-0c94de6c]{border-radius:var(--radius-chip);margin:0 0 12px;padding:9px 14px;font-size:12.5px}.banner.bad[data-v-0c94de6c]{color:var(--tone-danger-dot);background:var(--tone-danger-bg);border:1px solid color-mix(in srgb, var(--tone-danger-dot) 40%, transparent)}.banner.good[data-v-0c94de6c]{color:var(--tone-success-dot);background:var(--tone-success-bg);border:1px solid color-mix(in srgb, var(--tone-success-dot) 40%, transparent)}.table-card[data-v-0c94de6c]{margin-bottom:14px;overflow-x:auto}.nodes-table[data-v-0c94de6c]{border-collapse:collapse;width:100%;font-size:12.5px}.nodes-table td[data-v-0c94de6c],.nodes-table th[data-v-0c94de6c]{text-align:left;border-bottom:1px solid var(--divider-hair);padding:9px 12px}.nodes-table th[data-v-0c94de6c]{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);border-bottom:1px solid var(--line-strong);font-size:11px;font-weight:600}.nodes-table td b[data-v-0c94de6c]{margin-left:8px}.ch[data-v-0c94de6c]{color:var(--ink-faint);margin-top:2px;font-size:10px;display:block}.right[data-v-0c94de6c]{text-align:right}.val[data-v-0c94de6c]{font-size:13px}.val small[data-v-0c94de6c]{color:var(--ink-faint);margin-left:3px}.read-stale[data-v-0c94de6c]{color:var(--tone-danger-dot,#e05a5a);text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.read-btn[data-v-0c94de6c]{margin-left:8px}.st-pill[data-v-0c94de6c]{font-family:var(--font-mono);letter-spacing:.04em;border-radius:var(--radius-pill);padding:2px 9px;font-size:10.5px;display:inline-block}.st-pill.ok[data-v-0c94de6c]{color:var(--tone-success-dot);background:var(--tone-success-bg)}.st-pill.writing[data-v-0c94de6c]{color:var(--ink);background:var(--hover-tint)}.st-pill.alarm[data-v-0c94de6c],.st-pill.error[data-v-0c94de6c]{color:var(--tone-danger-dot);background:var(--tone-danger-bg)}.st-pill.warn[data-v-0c94de6c]{color:var(--tone-warning-dot);background:var(--tone-warning-bg)}.st-pill.idle[data-v-0c94de6c],.st-pill.offline[data-v-0c94de6c]{color:var(--tone-neutral-dot);background:var(--tone-neutral-bg)}.st-pill.paused[data-v-0c94de6c]{color:var(--tone-warning-dot);background:var(--tone-warning-bg)}.ctrl-toggle[data-v-0c94de6c]{cursor:pointer;color:var(--ink-faint);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-pill);align-items:center;gap:6px;padding:3px 10px;font-size:11.5px;display:inline-flex}.ctrl-toggle .ct-dot[data-v-0c94de6c]{background:var(--tone-neutral-dot);border-radius:50%;width:7px;height:7px}.ctrl-toggle.on[data-v-0c94de6c]{color:var(--tone-success-dot);border-color:color-mix(in srgb, var(--tone-success-dot) 45%, transparent)}.ctrl-toggle.on .ct-dot[data-v-0c94de6c]{background:var(--tone-success-dot);box-shadow:0 0 6px var(--tone-success-dot)}.ctrl-toggle[data-v-0c94de6c]:disabled{opacity:.55;cursor:wait}.node-paused td[data-v-0c94de6c]{opacity:.6}.node-paused .write-row[data-v-0c94de6c]{opacity:.5}.tpl-hint[data-v-0c94de6c]{margin:0 0 10px;font-size:12px}.tpl-chips[data-v-0c94de6c]{flex-wrap:wrap;gap:6px;margin-bottom:4px;display:flex}.tpl-chip[data-v-0c94de6c]{color:var(--ink-soft);background:var(--paper-deep);border:1px solid var(--line);border-radius:var(--radius-chip);align-items:center;gap:6px;padding:3px 9px;font-size:11.5px;display:inline-flex}.tpl-chip small[data-v-0c94de6c]{color:var(--ink-faint)}.tpl-tag[data-v-0c94de6c]{color:var(--accent);border:1px solid color-mix(in srgb, var(--accent) 40%, transparent);border-radius:var(--radius-pill);padding:1px 6px;font-size:10px;font-style:normal}.tpl-tag.builtin[data-v-0c94de6c]{color:var(--ink-faint);border-color:var(--line-strong)}.write-row[data-v-0c94de6c]{align-items:center;gap:6px;display:flex}.write-inp[data-v-0c94de6c]{width:92px;padding:4px 8px}.write-btn[data-v-0c94de6c]{padding:5px 12px}.mini-btn[data-v-0c94de6c]{cursor:pointer;color:var(--ink-soft);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-chip);margin-right:4px;padding:4px 10px;font-size:11.5px}.mini-btn.danger[data-v-0c94de6c]{color:var(--tone-danger-dot)}.mini-btn[data-v-0c94de6c]:hover{border-color:var(--accent);color:var(--accent)}.inp[data-v-0c94de6c]{color:var(--ink);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:5px 9px;font-size:12.5px}.line-card[data-v-0c94de6c]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-bottom:14px;padding:14px 18px;display:flex}.line-status[data-v-0c94de6c]{align-items:center;gap:12px;min-width:260px;display:flex}.line-dot[data-v-0c94de6c]{background:var(--tone-neutral-dot);width:12px;height:12px;box-shadow:0 0 0 4px color-mix(in srgb, var(--tone-neutral-dot) 20%, transparent);border-radius:50%}.line-dot.on[data-v-0c94de6c]{background:var(--tone-success-dot);box-shadow:0 0 0 4px color-mix(in srgb, var(--tone-success-dot) 22%, transparent);animation:1.6s infinite linePulse-0c94de6c}@keyframes linePulse-0c94de6c{0%,to{box-shadow:0 0 0 3px color-mix(in srgb, var(--tone-success-dot) 25%, transparent)}50%{box-shadow:0 0 0 7px color-mix(in srgb, var(--tone-success-dot) 8%, transparent)}}.line-info b[data-v-0c94de6c]{font-size:14px}.line-info small[data-v-0c94de6c]{margin-top:2px;font-size:11px;display:block}.line-ctl[data-v-0c94de6c]{align-items:flex-end;gap:10px;display:flex}.ctl-sel[data-v-0c94de6c]{color:var(--ink-faint);flex-direction:column;gap:4px;font-size:11px;display:flex}.ctl-sel .inp[data-v-0c94de6c]{min-width:150px}.pill-btn.stop[data-v-0c94de6c]{background:var(--tone-danger-dot);border-color:var(--tone-danger-dot)}.product-row[data-v-0c94de6c]{flex-wrap:wrap;gap:8px;margin:0 0 12px;display:flex}.prod-chip[data-v-0c94de6c]{cursor:pointer;color:var(--ink-soft);background:var(--paper-deep);border:1px solid var(--line-strong);border-radius:var(--radius-pill);align-items:center;gap:6px;padding:4px 12px;font-size:12px;display:inline-flex}.prod-chip.on[data-v-0c94de6c]{color:var(--on-accent);background:var(--accent);border-color:var(--accent)}.prod-del[data-v-0c94de6c]{color:var(--tone-danger-dot);font-weight:700}.query-card[data-v-0c94de6c]{margin-bottom:14px;padding:14px 18px}.q-grid[data-v-0c94de6c]{grid-template-columns:repeat(6,1fr);align-items:end;gap:10px;display:grid}.q-grid .f[data-v-0c94de6c]{color:var(--ink-faint);font-size:11px}.q-actions[data-v-0c94de6c]{justify-content:flex-end}.q-result[data-v-0c94de6c]{margin-top:12px;overflow-x:auto}.cal-form[data-v-0c94de6c]{grid-template-columns:2fr 1fr;align-items:end}.recipe-card[data-v-0c94de6c]{margin-bottom:14px;padding:16px 18px}.recipe-hd[data-v-0c94de6c]{align-items:center;gap:10px;margin-bottom:6px;display:flex}.recipe-hd h3[data-v-0c94de6c]{margin:0;font-size:16px}.panel-tag[data-v-0c94de6c]{color:var(--ink-soft);border:1px solid var(--line-strong);border-radius:var(--radius-chip);padding:2px 8px;font-size:11px}.recipe-sub[data-v-0c94de6c]{color:var(--ink-faint);margin:0 0 14px;font-size:12px}.recipe-grid[data-v-0c94de6c]{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;display:grid}.recipe-item[data-v-0c94de6c]{background:var(--paper-deep);border:1px solid var(--line);border-radius:var(--radius-chip);padding:12px 14px}.recipe-name b[data-v-0c94de6c]{font-size:13.5px}.recipe-name small[data-v-0c94de6c]{margin-left:8px}.desc[data-v-0c94de6c]{margin:4px 0;font-size:12px}.recipe-params[data-v-0c94de6c]{flex-wrap:wrap;gap:6px;margin:8px 0;display:flex}.param-chip[data-v-0c94de6c]{color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent);border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);border-radius:var(--radius-chip);padding:2px 8px;font-size:11px}.recipe-actions[data-v-0c94de6c]{align-items:center;gap:6px;margin-top:8px;display:flex}.sec-label[data-v-0c94de6c]{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin:14px 0 6px;font-size:11px;font-weight:600}.runs[data-v-0c94de6c]{margin-top:6px}.pill-btn[data-v-0c94de6c]{cursor:pointer;color:var(--paper-raised);background:var(--accent);border:1px solid var(--accent);border-radius:var(--radius-pill);padding:6px 14px;font-size:12.5px}.pill-btn.outline[data-v-0c94de6c]{color:var(--ink);background:var(--paper-raised);border-color:var(--line-strong)}.pill-btn[data-v-0c94de6c]:disabled{opacity:.5;cursor:default}.modal-mask[data-v-0c94de6c]{z-index:50;background:var(--scrim);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal[data-v-0c94de6c]{background:var(--surface-glass-strong);width:680px;max-width:94vw;max-height:88vh;-webkit-backdrop-filter:var(--aurora-blur);border:1px solid var(--glass-line);border-radius:var(--radius-panel);box-shadow:var(--glass-edge), var(--shadow-float);padding:22px 24px;overflow-y:auto}.m-title[data-v-0c94de6c]{margin:0 0 14px;font-size:17px}.seg-row[data-v-0c94de6c]{gap:8px;margin-bottom:14px;display:flex}.seg[data-v-0c94de6c]{cursor:pointer;color:var(--ink-faint);background:var(--paper-deep);border:1px solid var(--line);border-radius:var(--radius-chip);flex:1;padding:8px 0;font-size:13px}.seg.on[data-v-0c94de6c]{color:var(--on-accent);background:var(--accent);border-color:var(--accent);font-weight:600}.f-grid[data-v-0c94de6c]{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px;display:grid}.driver-form[data-v-0c94de6c]{grid-template-columns:repeat(3,1fr)}.param-row[data-v-0c94de6c]{grid-template-columns:2fr 1fr 1fr 1fr auto;align-items:end;gap:8px;margin-bottom:8px;display:grid}.param-row .f[data-v-0c94de6c]{flex:1}.param-del[data-v-0c94de6c]{margin-bottom:2px}.f[data-v-0c94de6c]{color:var(--ink-faint);flex-direction:column;gap:4px;font-size:11.5px;display:flex}.f em[data-v-0c94de6c]{margin-left:3px;font-style:normal}.hint[data-v-0c94de6c]{color:var(--ink-fainter);font-size:10px}.test-row[data-v-0c94de6c]{align-items:center;gap:10px;margin:6px 0 4px;display:flex}.test-result[data-v-0c94de6c]{font-family:var(--font-mono);font-size:11px}.test-result.good[data-v-0c94de6c]{color:var(--tone-success-dot)}.test-result.bad[data-v-0c94de6c]{color:var(--tone-danger-dot)}.m-err[data-v-0c94de6c]{color:var(--tone-danger-dot);margin:8px 0 0;font-size:12px}.m-actions[data-v-0c94de6c]{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.aw-pill.outline[data-v-0c94de6c]{color:var(--ink);background:var(--paper-raised);border-color:var(--line-strong)}.err[data-v-0c94de6c]{color:var(--tone-danger-dot);margin-top:14px;font-size:13px}@media (prefers-reduced-motion:no-preference){.nodes-table tbody tr[data-v-0c94de6c]:hover{background:var(--hover-tint)}}
@@ -1 +1 @@
1
- {"id":"221de779-a113-4232-b9a1-31a614f5e3c7","timestamp":1788432525986}
1
+ {"id":"90ae66f6-f649-4b44-8df9-bcd9e9a957a2","timestamp":1788444025427}
@@ -0,0 +1 @@
1
+ {"id":"90ae66f6-f649-4b44-8df9-bcd9e9a957a2","timestamp":1788444025427,"prerendered":[]}