agentworkshop 0.7.24 → 0.7.27

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 (243) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/2jaJHWIJ.js +1 -0
  3. package/.output/public/_nuxt/B7gZokg82.js +209 -0
  4. package/.output/public/_nuxt/{Dfe8vXdG.js → B8kt898d.js} +1 -1
  5. package/.output/public/_nuxt/{BvNJUu3s.js → BFGpEo8S.js} +1 -1
  6. package/.output/public/_nuxt/{BAfp6tmu.js → BG4zduPf.js} +5 -5
  7. package/.output/public/_nuxt/{BMb80_tm.js → BGhOrgle.js} +1 -1
  8. package/.output/public/_nuxt/{Bc-_IsBP.js → BHcpzI2n.js} +1 -1
  9. package/.output/public/_nuxt/{Djir5rSD.js → BTLEvDxM.js} +1 -1
  10. package/.output/public/_nuxt/{b50gYVZl.js → BWyR3awA.js} +1 -1
  11. package/.output/public/_nuxt/Bc89zKq2.js +1 -0
  12. package/.output/public/_nuxt/{CxY6LfeN.js → BetmGSO4.js} +1 -1
  13. package/.output/public/_nuxt/{DAR70Lf52.js → BgCrZKv_2.js} +1 -1
  14. package/.output/public/_nuxt/{DUToq-k_.js → BowTbasd.js} +1 -1
  15. package/.output/public/_nuxt/{D6HDb-vN2.js → BvtknqSC2.js} +1 -1
  16. package/.output/public/_nuxt/{CLZWFhZC.js → CTfqWGdy.js} +1 -1
  17. package/.output/public/_nuxt/Chc5pfAA.js +1 -0
  18. package/.output/public/_nuxt/CobSUzQv.js +2 -0
  19. package/.output/public/_nuxt/{kZV5TQvh2.js → CucID8qg2.js} +1 -1
  20. package/.output/public/_nuxt/{CAGL7TNK.js → DHbTyoAV.js} +1 -1
  21. package/.output/public/_nuxt/{DSa2O56y.js → DfLUN8kY.js} +1 -1
  22. package/.output/public/_nuxt/{Coik560n.js → DjU9Dx5Y.js} +1 -1
  23. package/.output/public/_nuxt/DnziMlcX.js +1 -0
  24. package/.output/public/_nuxt/{Ct68Z0232.js → DosOJEmZ2.js} +1 -1
  25. package/.output/public/_nuxt/{CDLv-n51.js → Q_SJDSgx.js} +1 -1
  26. package/.output/public/_nuxt/{TownView.zu2rU5nS.css → TownView.CtskuMXS.css} +1 -1
  27. package/.output/public/_nuxt/{CuVGPuP1.js → XY2z78rj.js} +1 -1
  28. package/.output/public/_nuxt/_id_.DdbYeLqn.css +1 -0
  29. package/.output/public/_nuxt/{C1CSiSBN.js → bFnZa2yd.js} +1 -1
  30. package/.output/public/_nuxt/builds/latest.json +1 -1
  31. package/.output/public/_nuxt/builds/meta/f7a8e33d-5422-45ac-895d-27168f97e3ad.json +1 -0
  32. package/.output/public/_nuxt/daq.DGV9QS8d.css +1 -0
  33. package/.output/public/_nuxt/{entry.AZM1Culo.css → entry.BN02X8iR.css} +1 -1
  34. package/.output/public/_nuxt/{X6IraCTB.js → rkVgzg62.js} +1 -1
  35. package/.output/public/_nuxt/settings.W6qrYAui.css +1 -0
  36. package/.output/public/_nuxt/teams.BBXVkyKq.css +1 -0
  37. package/.output/public/assets/game/character/yangyang-walk.glb +0 -0
  38. package/.output/server/chunks/_/host-bindings.mjs +1 -1
  39. package/.output/server/chunks/_/nitro.mjs +1013 -844
  40. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  41. package/.output/server/chunks/build/{TownView-DxeQe1Bl.mjs → TownView-ftIylqiD.mjs} +178 -151
  42. package/.output/server/chunks/build/{TownView-DxeQe1Bl.mjs.map → TownView-ftIylqiD.mjs.map} +1 -1
  43. package/.output/server/chunks/build/{_id_-DQDqj-cZ.mjs → _id_-3Axz2-gV.mjs} +35 -35
  44. package/.output/server/chunks/build/{_id_-DQDqj-cZ.mjs.map → _id_-3Axz2-gV.mjs.map} +1 -1
  45. package/.output/server/chunks/build/{_id_-DY6v6sqB.mjs → _id_-CahfkmEt.mjs} +5 -5
  46. package/.output/server/chunks/build/{_id_-DY6v6sqB.mjs.map → _id_-CahfkmEt.mjs.map} +1 -1
  47. package/.output/server/chunks/build/{_wsId_-D38Vx6Ky.mjs → _wsId_-BymlQhzS.mjs} +7 -7
  48. package/.output/server/chunks/build/{_wsId_-D38Vx6Ky.mjs.map → _wsId_-BymlQhzS.mjs.map} +1 -1
  49. package/.output/server/chunks/build/{agents-GnmUGZir.mjs → agents-DuMiSWKp.mjs} +4 -4
  50. package/.output/server/chunks/build/{agents-GnmUGZir.mjs.map → agents-DuMiSWKp.mjs.map} +1 -1
  51. package/.output/server/chunks/build/{channel-templates-B4z6v8Z5.mjs → channel-templates-BStqJ-of.mjs} +2 -2
  52. package/.output/server/chunks/build/{channel-templates-B4z6v8Z5.mjs.map → channel-templates-BStqJ-of.mjs.map} +1 -1
  53. package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs → checkbox-C1gABOca.mjs} +4 -4
  54. package/.output/server/chunks/build/{checkbox-dzcpU_Cd.mjs.map → checkbox-C1gABOca.mjs.map} +1 -1
  55. package/.output/server/chunks/build/{daq-B-3xCp_2.mjs → daq-ChYCABz1.mjs} +312 -426
  56. package/.output/server/chunks/build/daq-ChYCABz1.mjs.map +1 -0
  57. package/.output/server/chunks/build/{dcw-BL2dhuz7.mjs → dcw-CcQNGggh.mjs} +3 -3
  58. package/.output/server/chunks/build/{dcw-BL2dhuz7.mjs.map → dcw-CcQNGggh.mjs.map} +1 -1
  59. package/.output/server/chunks/build/{default-CLf5m0NE.mjs → default-95-zOTPt.mjs} +2 -2
  60. package/.output/server/chunks/build/{default-CLf5m0NE.mjs.map → default-95-zOTPt.mjs.map} +1 -1
  61. package/.output/server/chunks/build/{logs-Dto_umFY.mjs → logs-D-2UyGtE.mjs} +3 -3
  62. package/.output/server/chunks/build/{logs-Dto_umFY.mjs.map → logs-D-2UyGtE.mjs.map} +1 -1
  63. package/.output/server/chunks/build/{monitor-Cp4V-H2n.mjs → monitor-mfG5jBtz.mjs} +3 -3
  64. package/.output/server/chunks/build/{monitor-Cp4V-H2n.mjs.map → monitor-mfG5jBtz.mjs.map} +1 -1
  65. package/.output/server/chunks/build/{pages-Dc2H1QFu.mjs → pages-Dfosfchr.mjs} +4 -4
  66. package/.output/server/chunks/build/{pages-Dc2H1QFu.mjs.map → pages-Dfosfchr.mjs.map} +1 -1
  67. package/.output/server/chunks/build/{permissions-BTRW2CVd.mjs → permissions-B-hhZuzm.mjs} +3 -3
  68. package/.output/server/chunks/build/{permissions-BTRW2CVd.mjs.map → permissions-B-hhZuzm.mjs.map} +1 -1
  69. package/.output/server/chunks/build/{settings-UfGyDgM7.mjs → settings-BajN9TQW.mjs} +249 -20
  70. package/.output/server/chunks/build/settings-BajN9TQW.mjs.map +1 -0
  71. package/.output/server/chunks/build/{table-Cswq-l2r.mjs → table-Bf1r2JjE.mjs} +2 -2
  72. package/.output/server/chunks/build/{table-Cswq-l2r.mjs.map → table-Bf1r2JjE.mjs.map} +1 -1
  73. package/.output/server/chunks/build/{teams-Cbg27MWW.mjs → teams-t2SkRlJP.mjs} +346 -46
  74. package/.output/server/chunks/build/teams-t2SkRlJP.mjs.map +1 -0
  75. package/.output/server/chunks/build/{tokens-Bmm6rDfj.mjs → tokens-DiCojbN8.mjs} +3 -3
  76. package/.output/server/chunks/build/{tokens-Bmm6rDfj.mjs.map → tokens-DiCojbN8.mjs.map} +1 -1
  77. package/.output/server/chunks/build/{town-Dsh0jlwZ.mjs → town-C7QM8DYK.mjs} +5 -5
  78. package/.output/server/chunks/build/{town-Dsh0jlwZ.mjs.map → town-C7QM8DYK.mjs.map} +1 -1
  79. package/.output/server/chunks/build/{useDaqStream-DkRL3tEW.mjs → useDaqStream-BeA2X8KR.mjs} +26 -11
  80. package/.output/server/chunks/build/useDaqStream-BeA2X8KR.mjs.map +1 -0
  81. package/.output/server/chunks/build/{useDcwStream-DyB2ufQI.mjs → useDcwStream-BJW_MitY.mjs} +14 -6
  82. package/.output/server/chunks/build/useDcwStream-BJW_MitY.mjs.map +1 -0
  83. package/.output/server/chunks/build/{useDeviceTwins-ZbT86L9O.mjs → useDeviceTwins-Dwz_EY_i.mjs} +2 -2
  84. package/.output/server/chunks/build/{useDeviceTwins-ZbT86L9O.mjs.map → useDeviceTwins-Dwz_EY_i.mjs.map} +1 -1
  85. package/.output/server/chunks/build/{useOpsLog-8HCYFb6n.mjs → useOpsLog-Dm8QEb1I.mjs} +2 -2
  86. package/.output/server/chunks/build/{useOpsLog-8HCYFb6n.mjs.map → useOpsLog-Dm8QEb1I.mjs.map} +1 -1
  87. package/.output/server/chunks/build/{useWorkshopApi-D2gq06N2.mjs → useWorkshopApi-B-L3MmIX.mjs} +9 -2
  88. package/.output/server/chunks/build/{useWorkshopApi-D2gq06N2.mjs.map → useWorkshopApi-B-L3MmIX.mjs.map} +1 -1
  89. package/.output/server/chunks/build/{users-B50HHrfi.mjs → users-B9SAdEtH.mjs} +3 -3
  90. package/.output/server/chunks/build/{users-B50HHrfi.mjs.map → users-B9SAdEtH.mjs.map} +1 -1
  91. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +14 -2
  92. package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
  93. package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -1
  94. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs +40 -0
  95. package/.output/server/chunks/routes/api/workshop/channels/_id/index.put.mjs.map +1 -0
  96. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +21 -9
  97. package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
  98. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs +33 -0
  99. package/.output/server/chunks/routes/api/workshop/channels/_id/index5.get.mjs.map +1 -0
  100. package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -1
  101. package/.output/server/chunks/routes/api/workshop/channels.post.mjs +15 -1
  102. package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
  103. package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -1
  104. package/.output/server/chunks/routes/api/workshop/daq/_id/bindings.put.mjs +1 -1
  105. package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -1
  106. package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -1
  107. package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -1
  108. package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -1
  109. package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -1
  110. package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -1
  111. package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -1
  112. package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -1
  113. package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -1
  114. package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -1
  115. package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -1
  116. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -1
  117. package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -1
  118. package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -1
  119. package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -1
  120. package/.output/server/chunks/routes/api/workshop/dcw/_id/bindings.put.mjs +1 -1
  121. package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -1
  122. package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +1 -1
  123. package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -1
  124. package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -1
  125. package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -1
  126. package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -1
  127. package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -1
  128. package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -1
  129. package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -1
  130. package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -1
  131. package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -1
  132. package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -1
  133. package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -1
  134. package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -1
  135. package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -1
  136. package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -1
  137. package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -1
  138. package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -1
  139. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  140. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  141. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -1
  142. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -1
  143. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -1
  144. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -1
  145. package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -1
  146. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -1
  147. package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -1
  148. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -1
  149. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -1
  150. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -1
  151. package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -1
  152. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -1
  153. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -1
  154. package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -1
  155. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  156. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  157. package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -1
  158. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -1
  159. package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -1
  160. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  161. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  162. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  163. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  164. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  165. package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -1
  166. package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -1
  167. package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -1
  168. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -1
  169. package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -1
  170. package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -1
  171. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  172. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  173. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  174. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  175. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  176. package/.output/server/chunks/routes/renderer.mjs +2 -2
  177. package/.output/server/chunks/virtual/entry.mjs +352 -433
  178. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  179. package/.output/server/package.json +1 -1
  180. package/app/components/workshop/DaqNodeRow.vue +398 -0
  181. package/app/components/workshop/town/ModelPreview3D.vue +26 -4
  182. package/app/components/workshop/town/TownScene3D.ts +60 -12
  183. package/app/components/workshop/town/TownView.vue +4 -3
  184. package/app/composables/workshop/useCharacterAssets.ts +1 -0
  185. package/app/composables/workshop/useDaqStream.ts +24 -5
  186. package/app/composables/workshop/useDcwStream.ts +13 -4
  187. package/app/composables/workshop/useWorkshopApi.ts +294 -259
  188. package/app/pages/daq/[id].vue +27 -3
  189. package/app/pages/daq/index.vue +8 -355
  190. package/app/pages/settings.vue +253 -2
  191. package/app/pages/workshop/teams.vue +212 -2
  192. package/i18n/dicts/_en.json +361 -1
  193. package/i18n/dicts/plugins.json +10 -0
  194. package/i18n/dicts/settings.json +1 -0
  195. package/i18n/dicts/teamPlugins.json +10 -0
  196. package/i18n/locales/en.ts +1860 -1900
  197. package/i18n/locales/zh-CN.ts +1788 -1829
  198. package/package.json +149 -148
  199. package/public/assets/game/character/yangyang-walk.glb +0 -0
  200. package/scripts/_dbg-cpu-profile.mjs +53 -0
  201. package/scripts/_dbg-render-perf.mjs +142 -0
  202. package/scripts/_dbg-render-regression.mjs +130 -0
  203. package/scripts/i18n-merge.mjs +152 -30
  204. package/scripts/production-closed-loop-e2e.mjs +254 -0
  205. package/scripts/team-plugins-api-smoke.mjs +149 -0
  206. package/scripts/three-system-e2e.mjs +448 -0
  207. package/server/api/plugins/[name]/[...path].ts +46 -31
  208. package/server/api/workshop/channels/[id]/plugins/index.get.ts +35 -0
  209. package/server/api/workshop/channels/[id]/plugins/index.put.ts +39 -0
  210. package/server/api/workshop/channels.post.ts +17 -0
  211. package/server/data/dcw-lines.json +7 -0
  212. package/server/data/dcw-products.json +7 -0
  213. package/server/data/dcw-recipes.json +1 -1
  214. package/server/data/dcw-rollback.json +523 -11
  215. package/server/data/dcw-writes.json +72 -0
  216. package/server/data/dcws.json +368 -368
  217. package/server/data/scene-layouts.json +66 -0
  218. package/server/plugins/aw-plugins.ts +35 -27
  219. package/server/plugins-builtin/diag-bridge/index.mjs +556 -0
  220. package/server/plugins-builtin/rag-bridge/index.mjs +364 -0
  221. package/server/services/workshop/agents/host-tool-bridge.ts +659 -642
  222. package/server/services/workshop/agents/omp-agent.ts +1178 -1178
  223. package/server/services/workshop/agents/plugin-tools.ts +10 -1
  224. package/server/services/workshop/db/channel-plugins.repo.ts +65 -0
  225. package/server/services/workshop/plugins/host.mjs +52 -4
  226. package/server/services/workshop/runtime/manager.ts +2976 -2968
  227. package/shared/config/schema.json +4 -0
  228. package/.output/public/_nuxt/BUcmySDa2.js +0 -209
  229. package/.output/public/_nuxt/CYzpZzB_.js +0 -1
  230. package/.output/public/_nuxt/CjXIpPMR.js +0 -1
  231. package/.output/public/_nuxt/DKHcFE1i.js +0 -1
  232. package/.output/public/_nuxt/DjtE7AYt.js +0 -1
  233. package/.output/public/_nuxt/JOwsShod.js +0 -2
  234. package/.output/public/_nuxt/_id_.C-YXjn8Q.css +0 -1
  235. package/.output/public/_nuxt/builds/meta/024de5f7-6a10-4f53-82ab-bc65f3ec9e35.json +0 -1
  236. package/.output/public/_nuxt/daq.3OKj58HH.css +0 -1
  237. package/.output/public/_nuxt/settings.BqMF2nfj.css +0 -1
  238. package/.output/public/_nuxt/teams.DN0pAGGu.css +0 -1
  239. package/.output/server/chunks/build/daq-B-3xCp_2.mjs.map +0 -1
  240. package/.output/server/chunks/build/settings-UfGyDgM7.mjs.map +0 -1
  241. package/.output/server/chunks/build/teams-Cbg27MWW.mjs.map +0 -1
  242. package/.output/server/chunks/build/useDaqStream-DkRL3tEW.mjs.map +0 -1
  243. package/.output/server/chunks/build/useDcwStream-DyB2ufQI.mjs.map +0 -1
@@ -4,12 +4,12 @@ import { a as apiErrorMessage } from './api-error-dul30BYQ.mjs';
4
4
  import { u as useEntitiesStore, a as useWorkshopWs } from './useWorkshopWs-CprkZEdq.mjs';
5
5
  import { s as setInterval, n as nowLocalIso } from './useLocalTime-9a4B-aHv.mjs';
6
6
  import { u as useTownBus } from './useTownBus-D9SoIsAN.mjs';
7
- import { u as useDcwStream } from './useDcwStream-DyB2ufQI.mjs';
8
- import { u as useDaqStream } from './useDaqStream-DkRL3tEW.mjs';
9
- import { u as useDeviceTwins } from './useDeviceTwins-ZbT86L9O.mjs';
7
+ import { u as useDcwStream } from './useDcwStream-BJW_MitY.mjs';
8
+ import { u as useDaqStream } from './useDaqStream-BeA2X8KR.mjs';
9
+ import { u as useDeviceTwins } from './useDeviceTwins-Dwz_EY_i.mjs';
10
10
  import { shallowRef, ref, computed, toValue, watch, nextTick, defineComponent, reactive, mergeProps, unref, readonly, getCurrentScope, onScopeDispose, getCurrentInstance, toRef, customRef, useSSRContext } from 'vue';
11
11
  import { ssrRenderAttrs, ssrInterpolate, ssrRenderAttr, ssrRenderClass, ssrIncludeBooleanAttr, ssrRenderComponent, ssrRenderList, ssrRenderStyle, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer';
12
- import { b0 as DAQ_TEMPLATES } from '../_/nitro.mjs';
12
+ import { b2 as DAQ_TEMPLATES } from '../_/nitro.mjs';
13
13
  import * as THREE from 'three';
14
14
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
15
15
  import { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';
@@ -168,6 +168,18 @@ function createStore$1() {
168
168
  applied: false,
169
169
  hint: "默认员工 3D 模型"
170
170
  },
171
+ {
172
+ id: "yangyang-walk",
173
+ name: "杨杨(走路)",
174
+ file: "/assets/game/character/yangyang-walk.glb",
175
+ frames: 1,
176
+ frameWidth: 0,
177
+ frameHeight: 0,
178
+ kind: "glb",
179
+ builtin: true,
180
+ applied: false,
181
+ hint: "自定义角色:骨骼走路动画(剪辑 WALK;文件较大,建议少量绑定)"
182
+ },
171
183
  {
172
184
  id: "device-3d",
173
185
  name: "工业泵设备",
@@ -406,12 +418,17 @@ var ModelPreview3D_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
406
418
  raf: 0,
407
419
  clock: new THREE.Clock()
408
420
  };
421
+ let acc = 0;
409
422
  const tick = () => {
410
423
  rig.raf = requestAnimationFrame(tick);
411
424
  const dt = rig.clock.getDelta();
425
+ acc += dt * 1e3;
426
+ if (acc < 1e3 / 30) return;
427
+ const step = acc / 1e3;
428
+ acc = 0;
412
429
  for (const s of rig.slots) {
413
- if (!s.canvas.isConnected && s.canvas.width === 0) continue;
414
- if (s.group) s.group.rotation.y += dt * s.speed;
430
+ if (!s.canvas.isConnected || !s.visible) continue;
431
+ if (s.group) s.group.rotation.y += step * s.speed;
415
432
  rig.renderer.setSize(s.w, s.h, false);
416
433
  rig.renderer.render(s.scene, s.camera);
417
434
  s.ctx.clearRect(0, 0, s.w, s.h);
@@ -487,8 +504,16 @@ var ModelPreview3D_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
487
504
  group,
488
505
  w: canvas.width,
489
506
  h: canvas.height,
490
- speed: .6
507
+ speed: .6,
508
+ visible: false,
509
+ io: null
491
510
  };
511
+ if (typeof IntersectionObserver !== "undefined") {
512
+ slot.io = new IntersectionObserver((entries) => {
513
+ for (const e of entries) if (slot) slot.visible = e.isIntersecting;
514
+ });
515
+ slot.io.observe(canvas);
516
+ } else slot.visible = true;
492
517
  rig.slots.add(slot);
493
518
  loading.value = true;
494
519
  new GLTFLoader().load(source, (glt) => {
@@ -513,7 +538,9 @@ var ModelPreview3D_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
513
538
  if (objectUrl) URL.revokeObjectURL(objectUrl);
514
539
  objectUrl = "";
515
540
  if (slot) {
516
- rigGlobal.__modelPreviewRig?.slots.delete(slot);
541
+ const rig = rigGlobal.__modelPreviewRig;
542
+ slot.io?.disconnect();
543
+ rig?.slots.delete(slot);
517
544
  slot.scene.traverse((c) => {
518
545
  const mesh = c;
519
546
  if (mesh.isMesh) {
@@ -552,9 +579,9 @@ var ModelPreview3D_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
552
579
  ref: hostRef,
553
580
  class: "model-preview-3d",
554
581
  style: { height: `${__props.height}px` }
555
- }, _attrs))} data-v-b29ffdbe>`);
556
- if (unref(loading)) _push(`<div class="mp-loading" data-v-b29ffdbe><span class="mp-spin" data-v-b29ffdbe></span></div>`);
557
- else if (unref(failed)) _push(`<div class="mp-failed" data-v-b29ffdbe> PREVIEW NA </div>`);
582
+ }, _attrs))} data-v-9d114165>`);
583
+ if (unref(loading)) _push(`<div class="mp-loading" data-v-9d114165><span class="mp-spin" data-v-9d114165></span></div>`);
584
+ else if (unref(failed)) _push(`<div class="mp-failed" data-v-9d114165> PREVIEW NA </div>`);
558
585
  else _push(`<!---->`);
559
586
  _push(`</div>`);
560
587
  };
@@ -568,7 +595,7 @@ ModelPreview3D_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx)
568
595
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/town/ModelPreview3D.vue");
569
596
  return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0;
570
597
  };
571
- var ModelPreview3D_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(ModelPreview3D_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b29ffdbe"]]), { __name: "WorkshopTownModelPreview3D" });
598
+ var ModelPreview3D_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(ModelPreview3D_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-9d114165"]]), { __name: "WorkshopTownModelPreview3D" });
572
599
  //#endregion
573
600
  //#region app/components/workshop/AssetLibrary.vue?vue&type=script&setup=true&lang.ts
574
601
  var AssetLibrary_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -2296,82 +2323,82 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2296
2323
  return (_ctx, _push, _parent, _attrs) => {
2297
2324
  const _component_WorkshopAssetLibrary = AssetLibrary_default;
2298
2325
  const _component_WorkshopDeviceTwinPanel = DeviceTwinPanel_default;
2299
- _push(`<div${ssrRenderAttrs(mergeProps({ class: "town-view" }, _attrs))} data-v-5b974b95><header class="topnav" data-v-5b974b95><div class="brand" data-v-5b974b95><svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-5b974b95><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-5b974b95></path><path d="M16 8.2 22.5 12v8L16 23.8 9.5 20v-8L16 8.2Z" stroke="#41c8f4" stroke-width="1.3" opacity=".85" data-v-5b974b95></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-5b974b95></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-5b974b95></circle></svg><div data-v-5b974b95><div class="brand-name" data-v-5b974b95> DIGITAL <em data-v-5b974b95>TWIN</em></div><div class="brand-sub" data-v-5b974b95> AGENTWORKSHOP · ${ssrInterpolate(_ctx.$t("townView.klyi8yg127"))}</div></div></div><nav class="nav-tabs"${ssrRenderAttr("aria-label", _ctx.$t("townView.k1c9jyta001"))} data-v-5b974b95><div class="seg" data-v-5b974b95><button class="${ssrRenderClass({ on: unref(mode) === "browse" })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k48dwh027"))}</button><button class="${ssrRenderClass({ on: unref(mode) === "edit" })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k45eb0028"))}</button></div><button class="nav-action"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "把全部设备的位置/朝向/缩放写入数据库" : "运行模式只读")} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button>`);
2300
- if (unref(saveState) && unref(saveState).state !== "idle") _push(`<span class="${ssrRenderClass([`s-${unref(saveState).state}`, "save-chip"])}" data-v-5b974b95>${ssrInterpolate(unref(saveStateLabel))}</span>`);
2326
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "town-view" }, _attrs))} data-v-1444af6d><header class="topnav" data-v-1444af6d><div class="brand" data-v-1444af6d><svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-1444af6d><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-1444af6d></path><path d="M16 8.2 22.5 12v8L16 23.8 9.5 20v-8L16 8.2Z" stroke="#41c8f4" stroke-width="1.3" opacity=".85" data-v-1444af6d></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-1444af6d></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-1444af6d></circle></svg><div data-v-1444af6d><div class="brand-name" data-v-1444af6d> DIGITAL <em data-v-1444af6d>TWIN</em></div><div class="brand-sub" data-v-1444af6d> AGENTWORKSHOP · ${ssrInterpolate(_ctx.$t("townView.klyi8yg127"))}</div></div></div><nav class="nav-tabs"${ssrRenderAttr("aria-label", _ctx.$t("townView.k1c9jyta001"))} data-v-1444af6d><div class="seg" data-v-1444af6d><button class="${ssrRenderClass({ on: unref(mode) === "browse" })}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k48dwh027"))}</button><button class="${ssrRenderClass({ on: unref(mode) === "edit" })}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k45eb0028"))}</button></div><button class="nav-action"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "把全部设备的位置/朝向/缩放写入数据库" : "运行模式只读")} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button>`);
2327
+ if (unref(saveState) && unref(saveState).state !== "idle") _push(`<span class="${ssrRenderClass([`s-${unref(saveState).state}`, "save-chip"])}" data-v-1444af6d>${ssrInterpolate(unref(saveStateLabel))}</span>`);
2301
2328
  else _push(`<!---->`);
2302
- _push(`</nav><div class="nav-right" data-v-5b974b95><span class="${ssrRenderClass([{ "nav-bell-warn": unref(activeAlarmCount) > 0 }, "nav-chip mono"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1fsi3ir002"))} data-v-5b974b95>◉ ${ssrInterpolate(unref(activeAlarmCount))}</span><span class="nav-chip mono" data-v-5b974b95>${ssrInterpolate(unref(fps))} FPS</span><div class="avatar-chip"${ssrRenderAttr("title", _ctx.$t("townView.k1demf38003"))} data-v-5b974b95><div class="avatar-fallback" data-v-5b974b95>${ssrInterpolate((unref(userStore).user?.name ?? "OP").slice(0, 2).toUpperCase())}</div><span data-v-5b974b95>${ssrInterpolate(unref(userStore).user?.name || _ctx.$t("townView.k1pub99m139"))}</span></div></div></header><div class="app" data-v-5b974b95><aside class="rail rail-left" data-v-5b974b95><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(deviceModels).length)}</span></div>`);
2329
+ _push(`</nav><div class="nav-right" data-v-1444af6d><span class="${ssrRenderClass([{ "nav-bell-warn": unref(activeAlarmCount) > 0 }, "nav-chip mono"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1fsi3ir002"))} data-v-1444af6d>◉ ${ssrInterpolate(unref(activeAlarmCount))}</span><span class="nav-chip mono" data-v-1444af6d>${ssrInterpolate(unref(fps))} FPS</span><div class="avatar-chip"${ssrRenderAttr("title", _ctx.$t("townView.k1demf38003"))} data-v-1444af6d><div class="avatar-fallback" data-v-1444af6d>${ssrInterpolate((unref(userStore).user?.name ?? "OP").slice(0, 2).toUpperCase())}</div><span data-v-1444af6d>${ssrInterpolate(unref(userStore).user?.name || _ctx.$t("townView.k1pub99m139"))}</span></div></div></header><div class="app" data-v-1444af6d><aside class="rail rail-left" data-v-1444af6d><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</h3><span class="panel-tag" data-v-1444af6d>${ssrInterpolate(unref(deviceModels).length)}</span></div>`);
2303
2330
  _push(ssrRenderComponent(_component_WorkshopAssetLibrary, { class: "lib-embed" }, null, _parent));
2304
- _push(`</section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2gwyas031"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(daqTwins).length)}</span></div><div class="daq-ctrl" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(daq).controller.running }, "daq-ctl-btn"])}"${ssrRenderAttr("title", unref(daq).controller.running ? "暂停全部采集:停止所有启用节点的采样(节点级启停独立)" : "恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)")} data-v-5b974b95>${ssrInterpolate(unref(daq).controller.running ? _ctx.$t("townView.k3w3j8f140") : _ctx.$t("townView.k3n93ed175"))}</button><label class="daq-ctl-cycle mono"${ssrRenderAttr("title", _ctx.$t("townView.khzlyf5004"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3xg3w032"))} <input type="number" min="200" max="60000" step="100"${ssrRenderAttr("value", unref(daq).controller.defaultIntervalMs)} data-v-5b974b95>ms </label></div><div class="daq-list" data-v-5b974b95><!--[-->`);
2331
+ _push(`</section><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2gwyas031"))}</h3><span class="panel-tag" data-v-1444af6d>${ssrInterpolate(unref(daqTwins).length)}</span></div><div class="daq-ctrl" data-v-1444af6d><button class="${ssrRenderClass([{ on: unref(daq).controller.running }, "daq-ctl-btn"])}"${ssrRenderAttr("title", unref(daq).controller.running ? "暂停全部采集:停止所有启用节点的采样(节点级启停独立)" : "恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)")} data-v-1444af6d>${ssrInterpolate(unref(daq).controller.running ? _ctx.$t("townView.k3w3j8f140") : _ctx.$t("townView.k3n93ed175"))}</button><label class="daq-ctl-cycle mono"${ssrRenderAttr("title", _ctx.$t("townView.khzlyf5004"))} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3xg3w032"))} <input type="number" min="200" max="60000" step="100"${ssrRenderAttr("value", unref(daq).controller.defaultIntervalMs)} data-v-1444af6d>ms </label></div><div class="daq-list" data-v-1444af6d><!--[-->`);
2305
2332
  ssrRenderList(unref(daqTemplates), (tpl) => {
2306
- _push(`<div class="daq-group" data-v-5b974b95><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`daq:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2333
+ _push(`<div class="daq-group" data-v-1444af6d><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`daq:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2307
2334
  p0: tpl.name,
2308
2335
  p1: tpl.ch,
2309
2336
  p2: tpl.min,
2310
2337
  p3: tpl.max,
2311
2338
  p4: tpl.unit
2312
- }))} data-v-5b974b95><span class="daq-caret" data-v-5b974b95>▶</span><span class="daq-ico" data-v-5b974b95><svg class="daq-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-5b974b95>${ssrInterpolate(tpl.code)}</span></div>`);
2313
- if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-5b974b95> + </button>`);
2339
+ }))} data-v-1444af6d><span class="daq-caret" data-v-1444af6d>▶</span><span class="daq-ico" data-v-1444af6d><svg class="daq-svg" viewBox="0 0 24 24" data-v-1444af6d>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-1444af6d><span class="daq-name" data-v-1444af6d>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-1444af6d>${ssrInterpolate(tpl.code)}</span></div>`);
2340
+ if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-1444af6d> + </button>`);
2314
2341
  else _push(`<!---->`);
2315
- _push(`<span class="daq-count" data-v-5b974b95>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2342
+ _push(`<span class="daq-count" data-v-1444af6d>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2316
2343
  if (unref(treeOpen)[`daq:${tpl.id}`]) {
2317
- _push(`<div class="daq-children" data-v-5b974b95><!--[-->`);
2344
+ _push(`<div class="daq-children" data-v-1444af6d><!--[-->`);
2318
2345
  ssrRenderList(unref(daqNodesByTpl).get(tpl.id) ?? [], (n) => {
2319
- _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-5b974b95><span class="${ssrRenderClass([daqLeafState(n), "node-dot"])}" data-v-5b974b95></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-5b974b95><span class="node-val mono" data-v-5b974b95>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-5b974b95>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2320
- if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-5b974b95>✓</span>`);
2346
+ _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-1444af6d><span class="${ssrRenderClass([daqLeafState(n), "node-dot"])}" data-v-1444af6d></span><div class="daq-meta" data-v-1444af6d><span class="daq-name" data-v-1444af6d>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-1444af6d><span class="node-val mono" data-v-1444af6d>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-1444af6d>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2347
+ if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-1444af6d>✓</span>`);
2321
2348
  else _push(`<!---->`);
2322
2349
  _push(`</div>`);
2323
2350
  });
2324
2351
  _push(`<!--]-->`);
2325
- if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2352
+ if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2326
2353
  else _push(`<!---->`);
2327
2354
  _push(`</div>`);
2328
2355
  } else _push(`<!---->`);
2329
2356
  _push(`</div>`);
2330
2357
  });
2331
- _push(`<!--]--></div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.km7ayhi033"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(dcw).nodes.length)}</span></div><div class="daq-list" data-v-5b974b95><!--[-->`);
2358
+ _push(`<!--]--></div></section><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.km7ayhi033"))}</h3><span class="panel-tag" data-v-1444af6d>${ssrInterpolate(unref(dcw).nodes.length)}</span></div><div class="daq-list" data-v-1444af6d><!--[-->`);
2332
2359
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2333
- _push(`<div class="daq-group" data-v-5b974b95><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`dcw:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2360
+ _push(`<div class="daq-group" data-v-1444af6d><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`dcw:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2334
2361
  p0: tpl.name,
2335
2362
  p1: tpl.ch,
2336
2363
  p2: tpl.min,
2337
2364
  p3: tpl.max,
2338
2365
  p4: tpl.unit
2339
- }))} data-v-5b974b95><span class="daq-caret" data-v-5b974b95>▶</span><span class="daq-ico" data-v-5b974b95><svg class="daq-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-5b974b95>${ssrInterpolate(tpl.code)}</span></div>`);
2340
- if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-5b974b95> + </button>`);
2366
+ }))} data-v-1444af6d><span class="daq-caret" data-v-1444af6d>▶</span><span class="daq-ico" data-v-1444af6d><svg class="daq-svg" viewBox="0 0 24 24" data-v-1444af6d>${daqIcon(tpl.icon) ?? ""}</svg></span><div class="daq-meta" data-v-1444af6d><span class="daq-name" data-v-1444af6d>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-1444af6d>${ssrInterpolate(tpl.code)}</span></div>`);
2367
+ if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-1444af6d> + </button>`);
2341
2368
  else _push(`<!---->`);
2342
- _push(`<span class="daq-count" data-v-5b974b95>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2369
+ _push(`<span class="daq-count" data-v-1444af6d>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2343
2370
  if (unref(treeOpen)[`dcw:${tpl.id}`]) {
2344
- _push(`<div class="daq-children" data-v-5b974b95><!--[-->`);
2371
+ _push(`<div class="daq-children" data-v-1444af6d><!--[-->`);
2345
2372
  ssrRenderList(unref(dcwNodesByTpl).get(tpl.id) ?? [], (n) => {
2346
- _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-5b974b95><span class="${ssrRenderClass([dcwLeafState(n), "node-dot"])}" data-v-5b974b95></span><div class="daq-meta" data-v-5b974b95><span class="daq-name" data-v-5b974b95>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-5b974b95><span class="node-val mono" data-v-5b974b95>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-5b974b95>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2347
- if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-5b974b95>✓</span>`);
2373
+ _push(`<div class="${ssrRenderClass([{ placed: typeof n.posX === "number" }, "daq-node"])}"${ssrRenderAttr("draggable", unref(mode) === "edit")}${ssrRenderAttr("title", typeof n.posX === "number" ? _ctx.$t("townView.k2tplxp0005") : _ctx.$t("townView.k2tplxp0006"))} data-v-1444af6d><span class="${ssrRenderClass([dcwLeafState(n), "node-dot"])}" data-v-1444af6d></span><div class="daq-meta" data-v-1444af6d><span class="daq-name" data-v-1444af6d>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-1444af6d><span class="node-val mono" data-v-1444af6d>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-1444af6d>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2374
+ if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-1444af6d>✓</span>`);
2348
2375
  else _push(`<!---->`);
2349
2376
  _push(`</div>`);
2350
2377
  });
2351
2378
  _push(`<!--]-->`);
2352
- if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2379
+ if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2353
2380
  else _push(`<!---->`);
2354
2381
  _push(`</div>`);
2355
2382
  } else _push(`<!---->`);
2356
2383
  _push(`</div>`);
2357
2384
  });
2358
- _push(`<!--]--></div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1c9n911034"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(dockChannels).length)}</span></div><div class="scene-list" data-v-5b974b95><!--[-->`);
2385
+ _push(`<!--]--></div></section><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1c9n911034"))}</h3><span class="panel-tag" data-v-1444af6d>${ssrInterpolate(unref(dockChannels).length)}</span></div><div class="scene-list" data-v-1444af6d><!--[-->`);
2359
2386
  ssrRenderList(unref(dockChannels), (ch) => {
2360
- _push(`<div class="${ssrRenderClass([{ active: ch.placed }, "scene-row"])}"${ssrRenderAttr("draggable", !ch.placed && unref(mode) === "edit")}${ssrRenderAttr("data-channel-id", ch.channelId)}${ssrRenderAttr("title", ch.placed ? "已在场景中,点击定位" : "拖拽到场景放置")} data-v-5b974b95><span class="scene-ico" style="${ssrRenderStyle({ "--ch": ch.color })}" data-v-5b974b95></span><div class="scene-meta-wrap" data-v-5b974b95><span class="scene-name" data-v-5b974b95>${ssrInterpolate(ch.name)}</span><span class="scene-meta" data-v-5b974b95>${ssrInterpolate(ch.agentCount)} ${ssrInterpolate(_ctx.$t("townView.k1brss7t128"))} ${ssrInterpolate(ch.placed ? _ctx.$t("townView.k3n94g3141") : _ctx.$t("townView.k3os7i3176"))}</span></div>`);
2361
- if (ch.placed) _push(`<span class="scene-cur" data-v-5b974b95>✓</span>`);
2362
- else _push(`<span class="scene-add" data-v-5b974b95>+</span>`);
2387
+ _push(`<div class="${ssrRenderClass([{ active: ch.placed }, "scene-row"])}"${ssrRenderAttr("draggable", !ch.placed && unref(mode) === "edit")}${ssrRenderAttr("data-channel-id", ch.channelId)}${ssrRenderAttr("title", ch.placed ? "已在场景中,点击定位" : "拖拽到场景放置")} data-v-1444af6d><span class="scene-ico" style="${ssrRenderStyle({ "--ch": ch.color })}" data-v-1444af6d></span><div class="scene-meta-wrap" data-v-1444af6d><span class="scene-name" data-v-1444af6d>${ssrInterpolate(ch.name)}</span><span class="scene-meta" data-v-1444af6d>${ssrInterpolate(ch.agentCount)} ${ssrInterpolate(_ctx.$t("townView.k1brss7t128"))} ${ssrInterpolate(ch.placed ? _ctx.$t("townView.k3n94g3141") : _ctx.$t("townView.k3os7i3176"))}</span></div>`);
2388
+ if (ch.placed) _push(`<span class="scene-cur" data-v-1444af6d>✓</span>`);
2389
+ else _push(`<span class="scene-add" data-v-1444af6d>+</span>`);
2363
2390
  _push(`</div>`);
2364
2391
  });
2365
2392
  _push(`<!--]-->`);
2366
- if (unref(dockHint)) _push(`<div class="scene-hint" data-v-5b974b95>${ssrInterpolate(unref(dockHint))}</div>`);
2393
+ if (unref(dockHint)) _push(`<div class="scene-hint" data-v-1444af6d>${ssrInterpolate(unref(dockHint))}</div>`);
2367
2394
  else _push(`<!---->`);
2368
- _push(`</div></section></aside><main class="stage-col" data-v-5b974b95><div class="stage" data-v-5b974b95><div id="town-host" class="town-host" data-v-5b974b95></div><div class="stage-vignette" data-v-5b974b95></div><div class="stage-top" data-v-5b974b95><div class="vp-title" data-v-5b974b95><h2 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b0z4vr035"))}</h2><span class="vp-id" data-v-5b974b95>CH · ${ssrInterpolate(unref(activeChannelName) || _ctx.$t("townView.k3lkuz3142"))}</span></div><div class="vp-tools" data-v-5b974b95><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k18d6wnb005"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="12" cy="12" r="7" data-v-5b974b95></circle><path d="M12 2v4M12 18v4M2 12h4M18 12h4" data-v-5b974b95></path></svg></button><button class="${ssrRenderClass([{ on: unref(orbitOn) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1io51dn006"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="12" cy="12" r="3.2" data-v-5b974b95></circle><path d="M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5" data-v-5b974b95></path></svg></button><button class="${ssrRenderClass([{ on: unref(showCallouts) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1sgjlq8007"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M4 8h12l4 4-4 4H4z" data-v-5b974b95></path><circle cx="8.5" cy="12" r="1.4" data-v-5b974b95></circle></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k3wuf0008"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5" data-v-5b974b95></path></svg></button></div></div><div class="angle-chip" data-v-5b974b95><select${ssrRenderAttr("value", unref(viewPreset))}${ssrRenderAttr("aria-label", _ctx.$t("townView.k1k4j5i7009"))} data-v-5b974b95><option value="std" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kv72860036"))}</option><option value="top" data-v-5b974b95> 俯视 · TOP </option><option value="front" data-v-5b974b95> 前视 · FRONT </option><option value="side" data-v-5b974b95> 侧视 · SIDE </option></select></div>`);
2395
+ _push(`</div></section></aside><main class="stage-col" data-v-1444af6d><div class="stage" data-v-1444af6d><div id="town-host" class="town-host" data-v-1444af6d></div><div class="stage-vignette" data-v-1444af6d></div><div class="stage-top" data-v-1444af6d><div class="vp-title" data-v-1444af6d><h2 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1b0z4vr035"))}</h2><span class="vp-id" data-v-1444af6d>CH · ${ssrInterpolate(unref(activeChannelName) || _ctx.$t("townView.k3lkuz3142"))}</span></div><div class="vp-tools" data-v-1444af6d><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k18d6wnb005"))} data-v-1444af6d><svg class="vp-svg" viewBox="0 0 24 24" data-v-1444af6d><circle cx="12" cy="12" r="7" data-v-1444af6d></circle><path d="M12 2v4M12 18v4M2 12h4M18 12h4" data-v-1444af6d></path></svg></button><button class="${ssrRenderClass([{ on: unref(orbitOn) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1io51dn006"))} data-v-1444af6d><svg class="vp-svg" viewBox="0 0 24 24" data-v-1444af6d><circle cx="12" cy="12" r="3.2" data-v-1444af6d></circle><path d="M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5" data-v-1444af6d></path></svg></button><button class="${ssrRenderClass([{ on: unref(showCallouts) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1sgjlq8007"))} data-v-1444af6d><svg class="vp-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M4 8h12l4 4-4 4H4z" data-v-1444af6d></path><circle cx="8.5" cy="12" r="1.4" data-v-1444af6d></circle></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k3wuf0008"))} data-v-1444af6d><svg class="vp-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5" data-v-1444af6d></path></svg></button></div></div><div class="angle-chip" data-v-1444af6d><select${ssrRenderAttr("value", unref(viewPreset))}${ssrRenderAttr("aria-label", _ctx.$t("townView.k1k4j5i7009"))} data-v-1444af6d><option value="std" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kv72860036"))}</option><option value="top" data-v-1444af6d> 俯视 · TOP </option><option value="front" data-v-1444af6d> 前视 · FRONT </option><option value="side" data-v-1444af6d> 侧视 · SIDE </option></select></div>`);
2369
2396
  if (unref(showCallouts)) {
2370
- _push(`<!--[--><svg class="leaders" data-v-5b974b95><!--[-->`);
2397
+ _push(`<!--[--><svg class="leaders" data-v-1444af6d><!--[-->`);
2371
2398
  ssrRenderList(unref(callouts), (c) => {
2372
- _push(`<g class="${ssrRenderClass({ near: c.near })}" style="${ssrRenderStyle(c.leader ? null : { display: "none" })}" data-v-5b974b95><path${ssrRenderAttr("d", `M ${c.x} ${c.y - 8} L ${c.x} ${c.y - 2}`)}${ssrRenderAttr("stroke", c.warn ? "rgba(246,196,83,.8)" : "rgba(65,200,244,.55)")} stroke-width="1.3" fill="none" data-v-5b974b95></path><circle${ssrRenderAttr("cx", c.x)}${ssrRenderAttr("cy", c.y)} r="2.6"${ssrRenderAttr("fill", c.warn ? "#f6c453" : "#41c8f4")} data-v-5b974b95></circle></g>`);
2399
+ _push(`<g class="${ssrRenderClass({ near: c.near })}" style="${ssrRenderStyle(c.leader ? null : { display: "none" })}" data-v-1444af6d><path${ssrRenderAttr("d", `M ${c.x} ${c.y - 8} L ${c.x} ${c.y - 2}`)}${ssrRenderAttr("stroke", c.warn ? "rgba(246,196,83,.8)" : "rgba(65,200,244,.55)")} stroke-width="1.3" fill="none" data-v-1444af6d></path><circle${ssrRenderAttr("cx", c.x)}${ssrRenderAttr("cy", c.y)} r="2.6"${ssrRenderAttr("fill", c.warn ? "#f6c453" : "#41c8f4")} data-v-1444af6d></circle></g>`);
2373
2400
  });
2374
- _push(`<!--]--></svg><div class="callout-layer" data-v-5b974b95><!--[-->`);
2401
+ _push(`<!--]--></svg><div class="callout-layer" data-v-1444af6d><!--[-->`);
2375
2402
  ssrRenderList(unref(callouts), (c) => {
2376
2403
  _push(`<div class="${ssrRenderClass([{
2377
2404
  warn: c.warn,
@@ -2379,12 +2406,12 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2379
2406
  }, "callout"])}" style="${ssrRenderStyle({
2380
2407
  left: c.x + "px",
2381
2408
  top: c.y + "px"
2382
- })}"${ssrRenderAttr("title", _ctx.$t("townView.k1ejxiwp010"))} data-v-5b974b95><div class="co-label" data-v-5b974b95><span class="co-dot" data-v-5b974b95></span>${ssrInterpolate(c.label)}</div><div class="co-val" data-v-5b974b95>${ssrInterpolate(c.value)}<small data-v-5b974b95>${ssrInterpolate(c.unit)}</small></div><div class="co-range" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))} ${ssrInterpolate(c.lo.toFixed(Math.min(2, (String(c.lo).split(".")[1] ?? "").length + 1)))} – ${ssrInterpolate(c.hi.toFixed(Math.min(2, (String(c.hi).split(".")[1] ?? "").length + 1)))}</div></div>`);
2409
+ })}"${ssrRenderAttr("title", _ctx.$t("townView.k1ejxiwp010"))} data-v-1444af6d><div class="co-label" data-v-1444af6d><span class="co-dot" data-v-1444af6d></span>${ssrInterpolate(c.label)}</div><div class="co-val" data-v-1444af6d>${ssrInterpolate(c.value)}<small data-v-1444af6d>${ssrInterpolate(c.unit)}</small></div><div class="co-range" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))} ${ssrInterpolate(c.lo.toFixed(Math.min(2, (String(c.lo).split(".")[1] ?? "").length + 1)))} – ${ssrInterpolate(c.hi.toFixed(Math.min(2, (String(c.hi).split(".")[1] ?? "").length + 1)))}</div></div>`);
2383
2410
  });
2384
2411
  _push(`<!--]--></div><!--]-->`);
2385
2412
  } else _push(`<!---->`);
2386
- _push(`<div class="kpi-strip" data-v-5b974b95><div class="kpi" data-v-5b974b95><span class="kpi-ico c1" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z" data-v-5b974b95></path><path d="M4 8.5l8 4.5 8-4.5M12 13v7" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1k6xemt037"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(deviceCount))}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c2" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="m5 12.5 4.5 4.5L19 7.5" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1l1a9t2039"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(runningCount))}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c3" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M12 3 22 20H2L12 3Z" data-v-5b974b95></path><path d="M12 10v4M12 17v.2" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1fsi3ir002"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(activeAlarmCount))}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c4" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M9.5 14.5 14.5 9.5" data-v-5b974b95></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-5b974b95></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-5b974b95></path></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1emsai1041"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(daqTwins).length)}<small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</small></div></div></div><div class="kpi" data-v-5b974b95><span class="kpi-ico c5" data-v-5b974b95><svg class="kpi-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M5 19a9 9 0 1 1 14 0" data-v-5b974b95></path><path d="M12 13l3.5-3.5" data-v-5b974b95></path><circle cx="12" cy="13" r="1.4" data-v-5b974b95></circle></svg></span><div class="kpi-meta" data-v-5b974b95><div class="kpi-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kbrxdq1043"))}</div><div class="kpi-val" data-v-5b974b95>${ssrInterpolate(unref(healthPct))}<small data-v-5b974b95>%</small></div></div></div></div>`);
2387
- if (unref(sceneEmpty)) _push(`<div class="empty-hint" data-v-5b974b95><b data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3rwxjc044"))}</b><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1sa1eaj045"))}</span></div>`);
2413
+ _push(`<div class="kpi-strip" data-v-1444af6d><div class="kpi" data-v-1444af6d><span class="kpi-ico c1" data-v-1444af6d><svg class="kpi-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z" data-v-1444af6d></path><path d="M4 8.5l8 4.5 8-4.5M12 13v7" data-v-1444af6d></path></svg></span><div class="kpi-meta" data-v-1444af6d><div class="kpi-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1k6xemt037"))}</div><div class="kpi-val" data-v-1444af6d>${ssrInterpolate(unref(deviceCount))}<small data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-1444af6d><span class="kpi-ico c2" data-v-1444af6d><svg class="kpi-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="m5 12.5 4.5 4.5L19 7.5" data-v-1444af6d></path></svg></span><div class="kpi-meta" data-v-1444af6d><div class="kpi-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1l1a9t2039"))}</div><div class="kpi-val" data-v-1444af6d>${ssrInterpolate(unref(runningCount))}<small data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-1444af6d><span class="kpi-ico c3" data-v-1444af6d><svg class="kpi-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M12 3 22 20H2L12 3Z" data-v-1444af6d></path><path d="M12 10v4M12 17v.2" data-v-1444af6d></path></svg></span><div class="kpi-meta" data-v-1444af6d><div class="kpi-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1fsi3ir002"))}</div><div class="kpi-val" data-v-1444af6d>${ssrInterpolate(unref(activeAlarmCount))}<small data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</small></div></div></div><div class="kpi" data-v-1444af6d><span class="kpi-ico c4" data-v-1444af6d><svg class="kpi-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M9.5 14.5 14.5 9.5" data-v-1444af6d></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-1444af6d></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-1444af6d></path></svg></span><div class="kpi-meta" data-v-1444af6d><div class="kpi-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1emsai1041"))}</div><div class="kpi-val" data-v-1444af6d>${ssrInterpolate(unref(daqTwins).length)}<small data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</small></div></div></div><div class="kpi" data-v-1444af6d><span class="kpi-ico c5" data-v-1444af6d><svg class="kpi-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M5 19a9 9 0 1 1 14 0" data-v-1444af6d></path><path d="M12 13l3.5-3.5" data-v-1444af6d></path><circle cx="12" cy="13" r="1.4" data-v-1444af6d></circle></svg></span><div class="kpi-meta" data-v-1444af6d><div class="kpi-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kbrxdq1043"))}</div><div class="kpi-val" data-v-1444af6d>${ssrInterpolate(unref(healthPct))}<small data-v-1444af6d>%</small></div></div></div></div>`);
2414
+ if (unref(sceneEmpty)) _push(`<div class="empty-hint" data-v-1444af6d><b data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3rwxjc044"))}</b><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1sa1eaj045"))}</span></div>`);
2388
2415
  else _push(`<!---->`);
2389
2416
  if (unref(selectedChannel) && unref(boundaryDraft)) {
2390
2417
  _push(`<div class="boundary-panel drag-panel" style="${ssrRenderStyle(unref(panelPos).boundary ? {
@@ -2392,111 +2419,111 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2392
2419
  top: unref(panelPos).boundary.y + "px",
2393
2420
  bottom: "auto",
2394
2421
  transform: "none"
2395
- } : void 0)}" data-v-5b974b95><div class="bp-title drag-grip"${ssrRenderAttr("title", _ctx.$t("townView.k1d0rl5z011"))} data-v-5b974b95><span class="bp-name" data-v-5b974b95>${ssrInterpolate(unref(entities).channels[unref(selectedChannel)]?.name ?? unref(selectedChannel).slice(0, 8))}</span><span class="bp-sub" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1mehlxs046"))}</span><div class="bp-tabs" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "boundary" }, "bp-tab"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k489ka047"))}</button><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "members" }, "bp-tab"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3ztf1129"))} ${ssrInterpolate(unref(channelMembers).length)}</button></div></div>`);
2396
- if (unref(channelPanelTab) === "boundary") _push(`<!--[--><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "ellipse" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "rect" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1fbz4s1051"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusX)} class="bp-range" type="range" min="80" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusX, 80, 4e3) })}" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusX))}</span></div><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1ighwgs052"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusZ)} class="bp-range" type="range" min="60" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusZ, 60, 4e3) })}" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusZ))}</span></div><div class="bp-row" data-v-5b974b95><span class="bp-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k40qab053"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).rotationY)} class="bp-range" type="range" min="0" max="360" step="5" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).rotationY ?? 0, 0, 360) })}" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(boundaryDraft).rotationY ?? 0))}°</span></div><!--]-->`);
2422
+ } : void 0)}" data-v-1444af6d><div class="bp-title drag-grip"${ssrRenderAttr("title", _ctx.$t("townView.k1d0rl5z011"))} data-v-1444af6d><span class="bp-name" data-v-1444af6d>${ssrInterpolate(unref(entities).channels[unref(selectedChannel)]?.name ?? unref(selectedChannel).slice(0, 8))}</span><span class="bp-sub" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1mehlxs046"))}</span><div class="bp-tabs" data-v-1444af6d><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "boundary" }, "bp-tab"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k489ka047"))}</button><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "members" }, "bp-tab"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3ztf1129"))} ${ssrInterpolate(unref(channelMembers).length)}</button></div></div>`);
2423
+ if (unref(channelPanelTab) === "boundary") _push(`<!--[--><div class="bp-row" data-v-1444af6d><span class="bp-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-1444af6d><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "ellipse" }, "seg-btn"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "rect" }, "seg-btn"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="bp-row" data-v-1444af6d><span class="bp-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1fbz4s1051"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusX)} class="bp-range" type="range" min="80" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusX, 80, 4e3) })}" data-v-1444af6d><span class="bp-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusX))}</span></div><div class="bp-row" data-v-1444af6d><span class="bp-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1ighwgs052"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).radiusZ)} class="bp-range" type="range" min="60" max="4000" step="8" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).radiusZ, 60, 4e3) })}" data-v-1444af6d><span class="bp-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusZ))}</span></div><div class="bp-row" data-v-1444af6d><span class="bp-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k40qab053"))}</span><input${ssrRenderAttr("value", unref(boundaryDraft).rotationY)} class="bp-range" type="range" min="0" max="360" step="5" style="${ssrRenderStyle({ "--fill": sliderPct(unref(boundaryDraft).rotationY ?? 0, 0, 360) })}" data-v-1444af6d><span class="bp-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(boundaryDraft).rotationY ?? 0))}°</span></div><!--]-->`);
2397
2424
  else {
2398
- _push(`<!--[--><div class="bp-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-5b974b95><!--[-->`);
2425
+ _push(`<!--[--><div class="bp-hint" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-1444af6d><!--[-->`);
2399
2426
  ssrRenderList(unref(channelMembers), (m) => {
2400
- _push(`<div class="member-row" data-v-5b974b95><span class="member-ava" style="${ssrRenderStyle({ color: hashColor(unref(selectedChannel)) })}" data-v-5b974b95>${ssrInterpolate(m.name.charAt(0).toUpperCase())}</span><div class="member-info" data-v-5b974b95><span class="member-name" data-v-5b974b95>${ssrInterpolate(m.name)}</span><span class="${ssrRenderClass([m.role === "lead" ? "r-lead" : "r-worker", "member-role"])}" data-v-5b974b95>${ssrInterpolate(m.role === "lead" ? "Leader" : "Worker")}</span></div><select class="member-select"${ssrRenderAttr("value", (m.modelRef ?? "") || "hero-3d")} data-v-5b974b95><!--[-->`);
2427
+ _push(`<div class="member-row" data-v-1444af6d><span class="member-ava" style="${ssrRenderStyle({ color: hashColor(unref(selectedChannel)) })}" data-v-1444af6d>${ssrInterpolate(m.name.charAt(0).toUpperCase())}</span><div class="member-info" data-v-1444af6d><span class="member-name" data-v-1444af6d>${ssrInterpolate(m.name)}</span><span class="${ssrRenderClass([m.role === "lead" ? "r-lead" : "r-worker", "member-role"])}" data-v-1444af6d>${ssrInterpolate(m.role === "lead" ? "Leader" : "Worker")}</span></div><select class="member-select"${ssrRenderAttr("value", (m.modelRef ?? "") || "hero-3d")} data-v-1444af6d><!--[-->`);
2401
2428
  ssrRenderList(unref(agentModels), (model) => {
2402
- _push(`<option${ssrRenderAttr("value", model.id)} data-v-5b974b95>${ssrInterpolate(model.name)}</option>`);
2429
+ _push(`<option${ssrRenderAttr("value", model.id)} data-v-1444af6d>${ssrInterpolate(model.name)}</option>`);
2403
2430
  });
2404
2431
  _push(`<!--]--></select></div>`);
2405
2432
  });
2406
2433
  _push(`<!--]-->`);
2407
- if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2434
+ if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2408
2435
  else _push(`<!---->`);
2409
2436
  _push(`</div><!--]-->`);
2410
2437
  }
2411
- _push(`<div class="bp-actions" data-v-5b974b95>`);
2412
- if (unref(channelPanelTab) === "boundary") _push(`<button class="bp-btn save" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b3kp8f056"))}</button>`);
2438
+ _push(`<div class="bp-actions" data-v-1444af6d>`);
2439
+ if (unref(channelPanelTab) === "boundary") _push(`<button class="bp-btn save" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1b3kp8f056"))}</button>`);
2413
2440
  else _push(`<!---->`);
2414
- _push(`<button class="bp-btn danger" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1hs45qg057"))}</button><button class="bp-btn" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3x62t058"))}</button></div></div>`);
2441
+ _push(`<button class="bp-btn danger" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1hs45qg057"))}</button><button class="bp-btn" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3x62t058"))}</button></div></div>`);
2415
2442
  } else _push(`<!---->`);
2416
- if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-5b974b95>${ssrInterpolate(unref(lastDropText))}</div>`);
2443
+ if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-1444af6d>${ssrInterpolate(unref(lastDropText))}</div>`);
2417
2444
  else _push(`<!---->`);
2418
- if (unref(errorText)) _push(`<div class="error-chip" data-v-5b974b95>${ssrInterpolate(unref(errorText))}</div>`);
2445
+ if (unref(errorText)) _push(`<div class="error-chip" data-v-1444af6d>${ssrInterpolate(unref(errorText))}</div>`);
2419
2446
  else _push(`<!---->`);
2420
- if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-5b974b95><div class="loading-spinner" data-v-5b974b95></div><span class="loading-text" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2447
+ if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-1444af6d><div class="loading-spinner" data-v-1444af6d></div><span class="loading-text" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2421
2448
  else _push(`<!---->`);
2422
- _push(`</div><div class="dock" data-v-5b974b95><section class="dock-card" data-v-5b974b95><div class="dock-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</h3><span class="dock-mode" data-v-5b974b95>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span></div><p class="ctl-sec" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.secRender"))}</p><div class="ctl-row" data-v-5b974b95><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.qualityTip"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.qualityLabel"))}</span><div class="fps-seg" data-v-5b974b95><!--[-->`);
2449
+ _push(`</div><div class="dock" data-v-1444af6d><section class="dock-card" data-v-1444af6d><div class="dock-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</h3><span class="dock-mode" data-v-1444af6d>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span></div><p class="ctl-sec" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.secRender"))}</p><div class="ctl-row" data-v-1444af6d><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.qualityTip"))} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.qualityLabel"))}</span><div class="fps-seg" data-v-1444af6d><!--[-->`);
2423
2450
  ssrRenderList(QUALITY_OPTIONS, (o) => {
2424
- _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2451
+ _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-1444af6d>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2425
2452
  });
2426
- _push(`<!--]--></div><span class="ctl-val" data-v-5b974b95></span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.fpsCapTip"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.fpsCapLabel"))}</span><div class="fps-seg" data-v-5b974b95><!--[-->`);
2453
+ _push(`<!--]--></div><span class="ctl-val" data-v-1444af6d></span></div><div class="ctl-row" data-v-1444af6d><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.fpsCapTip"))} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.fpsCapLabel"))}</span><div class="fps-seg" data-v-1444af6d><!--[-->`);
2427
2454
  ssrRenderList(FPS_OPTIONS, (o) => {
2428
- _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-5b974b95>${ssrInterpolate(o.label)}</button>`);
2455
+ _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-1444af6d>${ssrInterpolate(o.label)}</button>`);
2429
2456
  });
2430
- _push(`<!--]--></div><span class="ctl-val" data-v-5b974b95></span></div><p class="ctl-sec" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.secEnv"))}</p><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1gizopz061"))}</span><input class="ctl-range" type="range" min="30" max="220"${ssrRenderAttr("value", Math.round(unref(exposure) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(exposure) * 100), 30, 220) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(exposure) * 100))}%</span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1bcpqto062"))}</span><input class="ctl-range" type="range" min="10" max="100"${ssrRenderAttr("value", Math.round(unref(tintOpacity) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(tintOpacity) * 100), 10, 100) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(tintOpacity) * 100))}%</span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1bztha1063"))}</span><input class="ctl-range" type="range" min="60" max="120"${ssrRenderAttr("value", unref(threshPct))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(threshPct), 60, 120) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(unref(threshPct))}%</span></div><div class="ctl-row" data-v-5b974b95><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.kz71l1f012"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.ka4i1s9064"))}</span><input class="ctl-range" type="range" min="0" max="3000" step="50"${ssrRenderAttr("value", unref(calloutNearDist))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(calloutNearDist), 0, 3e3) })}" data-v-5b974b95><span class="ctl-val" data-v-5b974b95>${ssrInterpolate(unref(calloutNearDist) === 0 ? _ctx.$t("townView.k493s144") : `${unref(calloutNearDist)}`)}</span></div><p class="ctl-sec" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.secOps"))}</p><div class="ctl-row" data-v-5b974b95><span class="ctl-name" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1idc6pa065"))}</span><button class="${ssrRenderClass([{ on: unref(snap) }, "snap-toggle"])}" data-v-5b974b95>${ssrInterpolate(unref(snap) ? _ctx.$t("townView.k4bs5145") : _ctx.$t("townView.k493s144"))}</button><span class="ctl-val" data-v-5b974b95></span></div><div class="ctl-btns" data-v-5b974b95><button class="btn btn-primary" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1lap9bs024"))}</button><button class="btn btn-ghost"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? _ctx.$t("townView.ksavetip181") : _ctx.$t("townView.krotip182"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button><button class="${ssrRenderClass([{ armed: unref(estop) }, "btn btn-danger"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1i046wf066"))}</button></div></section><section class="dock-card" data-v-5b974b95><div class="dock-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1kfoef9067"))}</h3><span class="dock-count mono" data-v-5b974b95>${ssrInterpolate(unref(daqTwins).length)}</span><div class="${ssrRenderClass([{ expanded: unref(trendExpanded) }, "trend-legend"])}" data-v-5b974b95><!--[-->`);
2457
+ _push(`<!--]--></div><span class="ctl-val" data-v-1444af6d></span></div><p class="ctl-sec" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.secEnv"))}</p><div class="ctl-row" data-v-1444af6d><span class="ctl-name" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1gizopz061"))}</span><input class="ctl-range" type="range" min="30" max="220"${ssrRenderAttr("value", Math.round(unref(exposure) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(exposure) * 100), 30, 220) })}" data-v-1444af6d><span class="ctl-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(exposure) * 100))}%</span></div><div class="ctl-row" data-v-1444af6d><span class="ctl-name" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1bcpqto062"))}</span><input class="ctl-range" type="range" min="10" max="100"${ssrRenderAttr("value", Math.round(unref(tintOpacity) * 100))} style="${ssrRenderStyle({ "--fill": sliderPct(Math.round(unref(tintOpacity) * 100), 10, 100) })}" data-v-1444af6d><span class="ctl-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(tintOpacity) * 100))}%</span></div><div class="ctl-row" data-v-1444af6d><span class="ctl-name" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1bztha1063"))}</span><input class="ctl-range" type="range" min="60" max="120"${ssrRenderAttr("value", unref(threshPct))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(threshPct), 60, 120) })}" data-v-1444af6d><span class="ctl-val" data-v-1444af6d>${ssrInterpolate(unref(threshPct))}%</span></div><div class="ctl-row" data-v-1444af6d><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.kz71l1f012"))} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.ka4i1s9064"))}</span><input class="ctl-range" type="range" min="0" max="3000" step="50"${ssrRenderAttr("value", unref(calloutNearDist))} style="${ssrRenderStyle({ "--fill": sliderPct(unref(calloutNearDist), 0, 3e3) })}" data-v-1444af6d><span class="ctl-val" data-v-1444af6d>${ssrInterpolate(unref(calloutNearDist) === 0 ? _ctx.$t("townView.k493s144") : `${unref(calloutNearDist)}`)}</span></div><p class="ctl-sec" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.secOps"))}</p><div class="ctl-row" data-v-1444af6d><span class="ctl-name" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1idc6pa065"))}</span><button class="${ssrRenderClass([{ on: unref(snap) }, "snap-toggle"])}" data-v-1444af6d>${ssrInterpolate(unref(snap) ? _ctx.$t("townView.k4bs5145") : _ctx.$t("townView.k493s144"))}</button><span class="ctl-val" data-v-1444af6d></span></div><div class="ctl-btns" data-v-1444af6d><button class="btn btn-primary" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1lap9bs024"))}</button><button class="btn btn-ghost"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? _ctx.$t("townView.ksavetip181") : _ctx.$t("townView.krotip182"))} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button><button class="${ssrRenderClass([{ armed: unref(estop) }, "btn btn-danger"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1i046wf066"))}</button></div></section><section class="dock-card" data-v-1444af6d><div class="dock-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1kfoef9067"))}</h3><span class="dock-count mono" data-v-1444af6d>${ssrInterpolate(unref(daqTwins).length)}</span><div class="${ssrRenderClass([{ expanded: unref(trendExpanded) }, "trend-legend"])}" data-v-1444af6d><!--[-->`);
2431
2458
  ssrRenderList(unref(trendChips), (t) => {
2432
- _push(`<button class="${ssrRenderClass([{ off: !trendOn(t.id) }, "lg-chip"])}" data-v-5b974b95><span class="lg-dot" style="${ssrRenderStyle({ background: trendColor(t.id) })}" data-v-5b974b95></span>${ssrInterpolate(t.name)}</button>`);
2459
+ _push(`<button class="${ssrRenderClass([{ off: !trendOn(t.id) }, "lg-chip"])}" data-v-1444af6d><span class="lg-dot" style="${ssrRenderStyle({ background: trendColor(t.id) })}" data-v-1444af6d></span>${ssrInterpolate(t.name)}</button>`);
2433
2460
  });
2434
2461
  _push(`<!--]-->`);
2435
- if (unref(trendOverflow) > 0) _push(`<button class="lg-chip lg-more mono"${ssrRenderAttr("title", unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : _ctx.$t("townView.trendExpandAll", { p0: unref(daqTwins).length }))} data-v-5b974b95>${ssrInterpolate(unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : `+${unref(trendOverflow)}`)}</button>`);
2462
+ if (unref(trendOverflow) > 0) _push(`<button class="lg-chip lg-more mono"${ssrRenderAttr("title", unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : _ctx.$t("townView.trendExpandAll", { p0: unref(daqTwins).length }))} data-v-1444af6d>${ssrInterpolate(unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : `+${unref(trendOverflow)}`)}</button>`);
2436
2463
  else _push(`<!---->`);
2437
- _push(`</div></div><div class="trend-wrap" data-v-5b974b95><canvas class="trend-cv" data-v-5b974b95></canvas>`);
2438
- if (!unref(daqTwins).length) _push(`<span class="trend-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1uht2uv068"))}</span>`);
2464
+ _push(`</div></div><div class="trend-wrap" data-v-1444af6d><canvas class="trend-cv" data-v-1444af6d></canvas>`);
2465
+ if (!unref(daqTwins).length) _push(`<span class="trend-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1uht2uv068"))}</span>`);
2439
2466
  else _push(`<!---->`);
2440
- _push(`</div></section></div></main><aside class="rail rail-right" data-v-5b974b95>`);
2467
+ _push(`</div></section></div></main><aside class="rail rail-right" data-v-1444af6d>`);
2441
2468
  if (unref(selected)) {
2442
- _push(`<section class="panel inspector" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(unref(selected).kind === "device" ? unref(selectedIsDcw) ? _ctx.$t("townView.k1ekqxlt146") : unref(selectedIsDaq) ? _ctx.$t("townView.k1empnnb178") : _ctx.$t("townView.k1k6wg8j185") : unref(selectedAgentRoleLabel))}</h3><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bsckft013"))} data-v-5b974b95> ✕ </button></div><div class="ins-chip-row" data-v-5b974b95><span class="ins-chip mono" data-v-5b974b95>${ssrInterpolate(unref(selected).id.slice(0, 8))}</span>`);
2443
- if (unref(selected).kind === "device" && unref(selectedIsDaq)) _push(`<span class="ins-chip accent" data-v-5b974b95>DAQ</span>`);
2444
- else if (unref(selected).kind === "device" && unref(selectedIsDcw)) _push(`<span class="ins-chip accent" data-v-5b974b95>DCW</span>`);
2469
+ _push(`<section class="panel inspector" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(unref(selected).kind === "device" ? unref(selectedIsDcw) ? _ctx.$t("townView.k1ekqxlt146") : unref(selectedIsDaq) ? _ctx.$t("townView.k1empnnb178") : _ctx.$t("townView.k1k6wg8j185") : unref(selectedAgentRoleLabel))}</h3><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bsckft013"))} data-v-1444af6d> ✕ </button></div><div class="ins-chip-row" data-v-1444af6d><span class="ins-chip mono" data-v-1444af6d>${ssrInterpolate(unref(selected).id.slice(0, 8))}</span>`);
2470
+ if (unref(selected).kind === "device" && unref(selectedIsDaq)) _push(`<span class="ins-chip accent" data-v-1444af6d>DAQ</span>`);
2471
+ else if (unref(selected).kind === "device" && unref(selectedIsDcw)) _push(`<span class="ins-chip accent" data-v-1444af6d>DCW</span>`);
2445
2472
  else _push(`<!---->`);
2446
2473
  _push(`</div>`);
2447
2474
  if (unref(selected).kind === "device") {
2448
2475
  _push(`<!--[-->`);
2449
2476
  if (unref(selectedIsDcw)) {
2450
- _push(`<div class="daq-info" data-v-5b974b95><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1deqh0d069"))}</span><b class="cy" data-v-5b974b95>${ssrInterpolate(unref(selectedDcwNode)?.value != null ? unref(selectedDcwNode).value.toFixed(unref(selectedDcwNode).decimals) : "--")} ${ssrInterpolate(unref(selectedDcwNode)?.unit)}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(unref(selectedDcwWindow)?.src === "recipe" ? _ctx.$t("townView.kq2jssk147") : _ctx.$t("townView.k1iwj796179"))}</span><b class="${ssrRenderClass({ amber: unref(selectedDcwWindow)?.src === "recipe" })}" data-v-5b974b95>${ssrInterpolate(dcwWinLabel(unref(selectedDcwNode)))}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-5b974b95>${ssrInterpolate(unref(selectedDcwDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div><div class="daq-bind-bar" data-v-5b974b95><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[unref(selected).id])} type="number" class="bind-select"${ssrRenderAttr("step", 10 ** -(unref(selectedDcwNode)?.decimals ?? 2))}${ssrRenderAttr("placeholder", dcwWinInputPh(unref(selectedDcwNode)))} data-v-5b974b95><button class="bind-add-btn"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[unref(selected).id] == null || unref(dcwWriteDrafts)[unref(selected).id] === "") ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kwrbtn180"))}</button></div>`);
2451
- if (unref(dcwWriteErrs)[unref(selected).id]) _push(`<p class="dcw-err" data-v-5b974b95>${ssrInterpolate(unref(dcwWriteErrs)[unref(selected).id])}</p>`);
2477
+ _push(`<div class="daq-info" data-v-1444af6d><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1deqh0d069"))}</span><b class="cy" data-v-1444af6d>${ssrInterpolate(unref(selectedDcwNode)?.value != null ? unref(selectedDcwNode).value.toFixed(unref(selectedDcwNode).decimals) : "--")} ${ssrInterpolate(unref(selectedDcwNode)?.unit)}</b></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(unref(selectedDcwWindow)?.src === "recipe" ? _ctx.$t("townView.kq2jssk147") : _ctx.$t("townView.k1iwj796179"))}</span><b class="${ssrRenderClass({ amber: unref(selectedDcwWindow)?.src === "recipe" })}" data-v-1444af6d>${ssrInterpolate(dcwWinLabel(unref(selectedDcwNode)))}</b></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-1444af6d>${ssrInterpolate(unref(selectedDcwDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div><div class="daq-bind-bar" data-v-1444af6d><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[unref(selected).id])} type="number" class="bind-select"${ssrRenderAttr("step", 10 ** -(unref(selectedDcwNode)?.decimals ?? 2))}${ssrRenderAttr("placeholder", dcwWinInputPh(unref(selectedDcwNode)))} data-v-1444af6d><button class="bind-add-btn"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[unref(selected).id] == null || unref(dcwWriteDrafts)[unref(selected).id] === "") ? " disabled" : ""} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kwrbtn180"))}</button></div>`);
2478
+ if (unref(dcwWriteErrs)[unref(selected).id]) _push(`<p class="dcw-err" data-v-1444af6d>${ssrInterpolate(unref(dcwWriteErrs)[unref(selected).id])}</p>`);
2452
2479
  else _push(`<!---->`);
2453
2480
  if (unref(mode) === "edit") {
2454
- _push(`<div class="daq-bind-bar" data-v-5b974b95><select class="bind-select" data-v-5b974b95><option value="" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), "") : ssrLooseEqual(unref(dcwBindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2481
+ _push(`<div class="daq-bind-bar" data-v-1444af6d><select class="bind-select" data-v-1444af6d><option value="" data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), "") : ssrLooseEqual(unref(dcwBindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2455
2482
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2456
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), dv.id) : ssrLooseEqual(unref(dcwBindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2483
+ _push(`<option${ssrRenderAttr("value", dv.id)} data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), dv.id) : ssrLooseEqual(unref(dcwBindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2457
2484
  });
2458
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(selectedDcwDeviceName) && !unref(dcwBindPick)) ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(unref(selectedDcwDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2485
+ _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(selectedDcwDeviceName) && !unref(dcwBindPick)) ? " disabled" : ""} data-v-1444af6d>${ssrInterpolate(unref(selectedDcwDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2459
2486
  } else _push(`<!---->`);
2460
2487
  _push(`</div>`);
2461
2488
  } else if (unref(selectedIsDaq)) {
2462
- _push(`<div class="daq-info" data-v-5b974b95><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3mv305072"))}</span><b class="cy" data-v-5b974b95>${ssrInterpolate(unref(selectedDaqSim) ? fmtDaq(unref(selectedDaqSim)) : "--")} ${ssrInterpolate(unref(selectedDaqSim)?.tpl.unit)}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))}</span><b data-v-5b974b95>${ssrInterpolate(unref(selectedDaqSim)?.tpl.min)} ~ ${ssrInterpolate(unref(selectedDaqSim)?.tpl.max)}</b></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-5b974b95>${ssrInterpolate(unref(daqBoundDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div>`);
2489
+ _push(`<div class="daq-info" data-v-1444af6d><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3mv305072"))}</span><b class="cy" data-v-1444af6d>${ssrInterpolate(unref(selectedDaqSim) ? fmtDaq(unref(selectedDaqSim)) : "--")} ${ssrInterpolate(unref(selectedDaqSim)?.tpl.unit)}</b></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))}</span><b data-v-1444af6d>${ssrInterpolate(unref(selectedDaqSim)?.tpl.min)} ~ ${ssrInterpolate(unref(selectedDaqSim)?.tpl.max)}</b></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-1444af6d>${ssrInterpolate(unref(daqBoundDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div>`);
2463
2490
  if (unref(mode) === "edit") {
2464
- _push(`<div class="daq-bind-bar" data-v-5b974b95><select class="bind-select" data-v-5b974b95><option value="" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), "") : ssrLooseEqual(unref(bindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2491
+ _push(`<div class="daq-bind-bar" data-v-1444af6d><select class="bind-select" data-v-1444af6d><option value="" data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), "") : ssrLooseEqual(unref(bindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2465
2492
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2466
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), dv.id) : ssrLooseEqual(unref(bindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2493
+ _push(`<option${ssrRenderAttr("value", dv.id)} data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), dv.id) : ssrLooseEqual(unref(bindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2467
2494
  });
2468
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(daqBoundDeviceName) && !unref(bindPick)) ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(unref(daqBoundDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2495
+ _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(daqBoundDeviceName) && !unref(bindPick)) ? " disabled" : ""} data-v-1444af6d>${ssrInterpolate(unref(daqBoundDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2469
2496
  } else _push(`<!---->`);
2470
- if (unref(mode) === "edit" && unref(selectedDaqNode)) _push(`<div class="daq-node-ctl" data-v-5b974b95><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1l6g2ga074"))}</span><span class="daq-th-inputs" data-v-5b974b95><input${ssrRenderAttr("value", unref(daqIntervalDraft))} type="number" min="200" max="60000" step="100" class="daq-num" data-v-5b974b95><small data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1or92b075"))}</small></span></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3x5tpx076"))}</span><span class="daq-th-inputs" data-v-5b974b95><input${ssrRenderAttr("value", unref(selectedDaqNode).warnLow)} type="number" step="any" class="daq-num" data-v-5b974b95> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).warnHigh)} type="number" step="any" class="daq-num" data-v-5b974b95></span></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1hjj0jf077"))}</span><span class="daq-th-inputs" data-v-5b974b95><input${ssrRenderAttr("value", unref(selectedDaqNode).min)} type="number" step="any" class="daq-num" data-v-5b974b95> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).max)} type="number" step="any" class="daq-num" data-v-5b974b95></span></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k48tki078"))}</span><button class="${ssrRenderClass([{ warn: unref(selectedDaqNode).enabled }, "bind-add-btn"])}" data-v-5b974b95>${ssrInterpolate(unref(selectedDaqNode).enabled ? _ctx.$t("townView.k1wv0nyo150") : _ctx.$t("townView.kh1586b180"))}</button></div><div class="daq-info-row" data-v-5b974b95><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3xakp079"))}</span><button class="bind-add-btn danger"${ssrRenderAttr("title", _ctx.$t("townView.kpwutri014"))} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1bpp30k080"))}</button></div></div>`);
2471
- else _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kzk5dfx081"))}</div>`);
2497
+ if (unref(mode) === "edit" && unref(selectedDaqNode)) _push(`<div class="daq-node-ctl" data-v-1444af6d><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1l6g2ga074"))}</span><span class="daq-th-inputs" data-v-1444af6d><input${ssrRenderAttr("value", unref(daqIntervalDraft))} type="number" min="200" max="60000" step="100" class="daq-num" data-v-1444af6d><small data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1or92b075"))}</small></span></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3x5tpx076"))}</span><span class="daq-th-inputs" data-v-1444af6d><input${ssrRenderAttr("value", unref(selectedDaqNode).warnLow)} type="number" step="any" class="daq-num" data-v-1444af6d> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).warnHigh)} type="number" step="any" class="daq-num" data-v-1444af6d></span></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1hjj0jf077"))}</span><span class="daq-th-inputs" data-v-1444af6d><input${ssrRenderAttr("value", unref(selectedDaqNode).min)} type="number" step="any" class="daq-num" data-v-1444af6d> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).max)} type="number" step="any" class="daq-num" data-v-1444af6d></span></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k48tki078"))}</span><button class="${ssrRenderClass([{ warn: unref(selectedDaqNode).enabled }, "bind-add-btn"])}" data-v-1444af6d>${ssrInterpolate(unref(selectedDaqNode).enabled ? _ctx.$t("townView.k1wv0nyo150") : _ctx.$t("townView.kh1586b180"))}</button></div><div class="daq-info-row" data-v-1444af6d><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3xakp079"))}</span><button class="bind-add-btn danger"${ssrRenderAttr("title", _ctx.$t("townView.kpwutri014"))} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1bpp30k080"))}</button></div></div>`);
2498
+ else _push(`<div class="ins-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kzk5dfx081"))}</div>`);
2472
2499
  _push(`</div>`);
2473
2500
  } else {
2474
- _push(`<!--[--><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3xhia082"))}</span><input${ssrRenderAttr("value", unref(objNameDraft))} class="obj-input"${ssrRenderAttr("placeholder", _ctx.$t("townView.k1k6vbaf015"))}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "设备名称" : "运行模式只读")} data-v-5b974b95></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", unref(scene3dRef)?.getDeviceModelRef?.(unref(selected).id) ?? "")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-5b974b95><!--[-->`);
2501
+ _push(`<!--[--><div class="obj-row" data-v-1444af6d><span class="obj-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3xhia082"))}</span><input${ssrRenderAttr("value", unref(objNameDraft))} class="obj-input"${ssrRenderAttr("placeholder", _ctx.$t("townView.k1k6vbaf015"))}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "设备名称" : "运行模式只读")} data-v-1444af6d></div><div class="obj-row" data-v-1444af6d><span class="obj-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", unref(scene3dRef)?.getDeviceModelRef?.(unref(selected).id) ?? "")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-1444af6d><!--[-->`);
2475
2502
  ssrRenderList(unref(deviceModels), (m) => {
2476
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-5b974b95>${ssrInterpolate(m.name)}</option>`);
2503
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-1444af6d>${ssrInterpolate(m.name)}</option>`);
2477
2504
  });
2478
- _push(`<!--]--></select></div><div class="sect-hd" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1vtyk05130"))} ${ssrInterpolate(unref(boundDaqRows).length)} ${ssrInterpolate(_ctx.$t("townView.k3vfpz5138"))}</div><!--[-->`);
2505
+ _push(`<!--]--></select></div><div class="sect-hd" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1vtyk05130"))} ${ssrInterpolate(unref(boundDaqRows).length)} ${ssrInterpolate(_ctx.$t("townView.k3vfpz5138"))}</div><!--[-->`);
2479
2506
  ssrRenderList(unref(boundDaqRows), (r) => {
2480
- _push(`<div class="bind-row" data-v-5b974b95><span class="bind-ico" data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(r.icon) ?? ""}</svg></span><span class="bind-meta" data-v-5b974b95><span class="bind-label" data-v-5b974b95>${ssrInterpolate(r.ch)}</span><span class="bind-val" data-v-5b974b95><b data-v-5b974b95>${ssrInterpolate(r.value)}</b> ${ssrInterpolate(r.unit)} · ${ssrInterpolate(r.name)}</span></span><canvas class="bind-spark" width="56" height="20" data-v-5b974b95></canvas>`);
2481
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-5b974b95> ✕ </button>`);
2507
+ _push(`<div class="bind-row" data-v-1444af6d><span class="bind-ico" data-v-1444af6d><svg class="bind-svg" viewBox="0 0 24 24" data-v-1444af6d>${daqIcon(r.icon) ?? ""}</svg></span><span class="bind-meta" data-v-1444af6d><span class="bind-label" data-v-1444af6d>${ssrInterpolate(r.ch)}</span><span class="bind-val" data-v-1444af6d><b data-v-1444af6d>${ssrInterpolate(r.value)}</b> ${ssrInterpolate(r.unit)} · ${ssrInterpolate(r.name)}</span></span><canvas class="bind-spark" width="56" height="20" data-v-1444af6d></canvas>`);
2508
+ if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-1444af6d> ✕ </button>`);
2482
2509
  else _push(`<!---->`);
2483
2510
  _push(`</div>`);
2484
2511
  });
2485
2512
  _push(`<!--]-->`);
2486
- if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2513
+ if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2487
2514
  else _push(`<!---->`);
2488
2515
  if (unref(mode) === "edit") {
2489
- _push(`<div class="bind-add-wrap" data-v-5b974b95><button class="bind-add" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2516
+ _push(`<div class="bind-add-wrap" data-v-1444af6d><button class="bind-add" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2490
2517
  if (unref(bindPopOpen)) {
2491
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-5b974b95><!--[-->`);
2518
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-1444af6d><!--[-->`);
2492
2519
  ssrRenderList(unref(daqTemplates), (tpl) => {
2493
2520
  _push(`<!--[-->`);
2494
2521
  if (unref(daqBindChoices)[tpl.id]?.length) {
2495
- _push(`<div class="bp-group" data-v-5b974b95><span class="bp-tpl" data-v-5b974b95>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2522
+ _push(`<div class="bp-group" data-v-1444af6d><span class="bp-tpl" data-v-1444af6d>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2496
2523
  ssrRenderList(unref(daqBindChoices)[tpl.id], (c) => {
2497
- _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-5b974b95>${ssrInterpolate(c.name)}`);
2498
- if (c.devName) _push(`<i class="bp-cur" data-v-5b974b95>→ ${ssrInterpolate(c.devName)}</i>`);
2499
- else if (!c.placed) _push(`<i class="bp-cur" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2524
+ _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-1444af6d><svg class="bind-svg" viewBox="0 0 24 24" data-v-1444af6d>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-1444af6d>${ssrInterpolate(c.name)}`);
2525
+ if (c.devName) _push(`<i class="bp-cur" data-v-1444af6d>→ ${ssrInterpolate(c.devName)}</i>`);
2526
+ else if (!c.placed) _push(`<i class="bp-cur" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2500
2527
  else _push(`<!---->`);
2501
2528
  _push(`</span></button>`);
2502
2529
  });
@@ -2505,40 +2532,40 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2505
2532
  _push(`<!--]-->`);
2506
2533
  });
2507
2534
  _push(`<!--]-->`);
2508
- if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2535
+ if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2509
2536
  else _push(`<!---->`);
2510
2537
  _push(`</div>`);
2511
2538
  } else _push(`<!---->`);
2512
2539
  _push(`</div>`);
2513
2540
  } else _push(`<!---->`);
2514
- _push(`<div class="sect-hd" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.ktzir2t131"))} ${ssrInterpolate(unref(boundDcwRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</div><!--[-->`);
2541
+ _push(`<div class="sect-hd" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.ktzir2t131"))} ${ssrInterpolate(unref(boundDcwRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</div><!--[-->`);
2515
2542
  ssrRenderList(unref(boundDcwRows), (r) => {
2516
- _push(`<div class="dcw-row" data-v-5b974b95><div class="dcw-top" data-v-5b974b95><span class="bind-ico" data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(r.icon) ?? ""}</svg></span><span class="dcw-id" data-v-5b974b95><span class="bind-label" data-v-5b974b95>${ssrInterpolate(r.ch)}`);
2517
- if (r.rMin != null || r.rMax != null) _push(`<i class="dcw-tag" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k48grv086"))}</i>`);
2543
+ _push(`<div class="dcw-row" data-v-1444af6d><div class="dcw-top" data-v-1444af6d><span class="bind-ico" data-v-1444af6d><svg class="bind-svg" viewBox="0 0 24 24" data-v-1444af6d>${daqIcon(r.icon) ?? ""}</svg></span><span class="dcw-id" data-v-1444af6d><span class="bind-label" data-v-1444af6d>${ssrInterpolate(r.ch)}`);
2544
+ if (r.rMin != null || r.rMax != null) _push(`<i class="dcw-tag" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k48grv086"))}</i>`);
2518
2545
  else _push(`<!---->`);
2519
- _push(`</span><span class="dcw-name" data-v-5b974b95>${ssrInterpolate(r.name)}</span></span><span class="dcw-cur" data-v-5b974b95><b data-v-5b974b95>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}</b><i data-v-5b974b95>${ssrInterpolate(r.unit)}</i></span>`);
2520
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-5b974b95> ✕ </button>`);
2546
+ _push(`</span><span class="dcw-name" data-v-1444af6d>${ssrInterpolate(r.name)}</span></span><span class="dcw-cur" data-v-1444af6d><b data-v-1444af6d>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}</b><i data-v-1444af6d>${ssrInterpolate(r.unit)}</i></span>`);
2547
+ if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-1444af6d> ✕ </button>`);
2521
2548
  else _push(`<!---->`);
2522
- _push(`</div><div class="${ssrRenderClass([{ recipe: r.rMin != null || r.rMax != null }, "dcw-win"])}" data-v-5b974b95><em data-v-5b974b95>${ssrInterpolate(r.rMin != null || r.rMax != null ? _ctx.$t("townView.k1l3m0hx151") : _ctx.$t("townView.k1bc6rqf181"))}</em><span class="dcw-win-num" data-v-5b974b95>${ssrInterpolate(r.rMin ?? "-∞")}</span><span class="dcw-win-track" data-v-5b974b95><i style="${ssrRenderStyle({ left: `${dcwMarkPct(r)}%` })}" data-v-5b974b95></i></span><span class="dcw-win-num" data-v-5b974b95>${ssrInterpolate(r.rMax ?? "+∞")}</span></div><div class="dcw-write" data-v-5b974b95><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[r.dcwId])} type="number"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("placeholder", `${r.rMin ?? r.gMin} ~ ${r.rMax ?? r.gMax}`)} data-v-5b974b95><button class="dcw-send"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[r.dcwId] == null || unref(dcwWriteDrafts)[r.dcwId] === "") ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("townView.k15t7izc017"))} data-v-5b974b95> write </button></div>`);
2523
- if (unref(dcwWriteErrs)[r.dcwId]) _push(`<small class="dcw-err" data-v-5b974b95>${ssrInterpolate(unref(dcwWriteErrs)[r.dcwId])}</small>`);
2549
+ _push(`</div><div class="${ssrRenderClass([{ recipe: r.rMin != null || r.rMax != null }, "dcw-win"])}" data-v-1444af6d><em data-v-1444af6d>${ssrInterpolate(r.rMin != null || r.rMax != null ? _ctx.$t("townView.k1l3m0hx151") : _ctx.$t("townView.k1bc6rqf181"))}</em><span class="dcw-win-num" data-v-1444af6d>${ssrInterpolate(r.rMin ?? "-∞")}</span><span class="dcw-win-track" data-v-1444af6d><i style="${ssrRenderStyle({ left: `${dcwMarkPct(r)}%` })}" data-v-1444af6d></i></span><span class="dcw-win-num" data-v-1444af6d>${ssrInterpolate(r.rMax ?? "+∞")}</span></div><div class="dcw-write" data-v-1444af6d><input${ssrRenderAttr("value", unref(dcwWriteDrafts)[r.dcwId])} type="number"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("placeholder", `${r.rMin ?? r.gMin} ~ ${r.rMax ?? r.gMax}`)} data-v-1444af6d><button class="dcw-send"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[r.dcwId] == null || unref(dcwWriteDrafts)[r.dcwId] === "") ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("townView.k15t7izc017"))} data-v-1444af6d> write </button></div>`);
2550
+ if (unref(dcwWriteErrs)[r.dcwId]) _push(`<small class="dcw-err" data-v-1444af6d>${ssrInterpolate(unref(dcwWriteErrs)[r.dcwId])}</small>`);
2524
2551
  else _push(`<!---->`);
2525
2552
  _push(`</div>`);
2526
2553
  });
2527
2554
  _push(`<!--]-->`);
2528
- if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2555
+ if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2529
2556
  else _push(`<!---->`);
2530
2557
  if (unref(mode) === "edit") {
2531
- _push(`<div class="bind-add-wrap" data-v-5b974b95><button class="bind-add" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2558
+ _push(`<div class="bind-add-wrap" data-v-1444af6d><button class="bind-add" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2532
2559
  if (unref(dcwBindPopOpen)) {
2533
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-5b974b95><!--[-->`);
2560
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-1444af6d><!--[-->`);
2534
2561
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2535
2562
  _push(`<!--[-->`);
2536
2563
  if (unref(dcwBindChoices)[tpl.id]?.length) {
2537
- _push(`<div class="bp-group" data-v-5b974b95><span class="bp-tpl" data-v-5b974b95>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2564
+ _push(`<div class="bp-group" data-v-1444af6d><span class="bp-tpl" data-v-1444af6d>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2538
2565
  ssrRenderList(unref(dcwBindChoices)[tpl.id], (c) => {
2539
- _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-5b974b95><svg class="bind-svg" viewBox="0 0 24 24" data-v-5b974b95>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-5b974b95>${ssrInterpolate(c.name)}`);
2540
- if (c.devName) _push(`<i class="bp-cur" data-v-5b974b95>→ ${ssrInterpolate(c.devName)}</i>`);
2541
- else if (!c.placed) _push(`<i class="bp-cur" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2566
+ _push(`<button${ssrRenderAttr("data-node-id", c.id)}${ssrRenderAttr("title", c.devName ? _ctx.$t("townView.k2bindr0007", { p0: c.devName }) : _ctx.$t("townView.k2bindr0008"))} data-v-1444af6d><svg class="bind-svg" viewBox="0 0 24 24" data-v-1444af6d>${daqIcon(c.tpl.icon) ?? ""}</svg><span data-v-1444af6d>${ssrInterpolate(c.name)}`);
2567
+ if (c.devName) _push(`<i class="bp-cur" data-v-1444af6d>→ ${ssrInterpolate(c.devName)}</i>`);
2568
+ else if (!c.placed) _push(`<i class="bp-cur" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2542
2569
  else _push(`<!---->`);
2543
2570
  _push(`</span></button>`);
2544
2571
  });
@@ -2547,121 +2574,121 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2547
2574
  _push(`<!--]-->`);
2548
2575
  });
2549
2576
  _push(`<!--]-->`);
2550
- if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2577
+ if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2551
2578
  else _push(`<!---->`);
2552
2579
  _push(`</div>`);
2553
2580
  } else _push(`<!---->`);
2554
2581
  _push(`</div>`);
2555
2582
  } else _push(`<!---->`);
2556
- if (unref(mode) === "edit") _push(`<!--[--><div class="sect-hd" data-v-5b974b95> 变换 · BLENDER </div><div class="xz-seg" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(tMode) === "translate" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1hg3167089"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "rotate" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1enlg7i090"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "scale" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1ibjg3j091"))}</button></div><div class="scale-row" data-v-5b974b95><span class="scale-min" data-v-5b974b95>0.2×</span><input class="scale-range" type="range" min="0.2" max="5" step="0.05"${ssrRenderAttr("value", unref(selected).scale)} data-v-5b974b95><span class="scale-max" data-v-5b974b95>5×</span></div><div class="scale-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(selected).scale * 100))}% </div><div class="ins-foot" data-v-5b974b95><button class="${ssrRenderClass([{ armed: unref(deviceDeleteArmed) === unref(selected).id }, "btn btn-danger ins-del"])}" data-v-5b974b95>${ssrInterpolate(unref(deviceDeleteArmed) === unref(selected).id ? _ctx.$t("townView.k1w10xa5152") : _ctx.$t("townView.k121kfef182"))}</button></div><!--]-->`);
2557
- else _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kt0i3y2092"))}</div>`);
2583
+ if (unref(mode) === "edit") _push(`<!--[--><div class="sect-hd" data-v-1444af6d> 变换 · BLENDER </div><div class="xz-seg" data-v-1444af6d><button class="${ssrRenderClass([{ on: unref(tMode) === "translate" }, "seg-btn"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1hg3167089"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "rotate" }, "seg-btn"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1enlg7i090"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "scale" }, "seg-btn"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1ibjg3j091"))}</button></div><div class="scale-row" data-v-1444af6d><span class="scale-min" data-v-1444af6d>0.2×</span><input class="scale-range" type="range" min="0.2" max="5" step="0.05"${ssrRenderAttr("value", unref(selected).scale)} data-v-1444af6d><span class="scale-max" data-v-1444af6d>5×</span></div><div class="scale-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(selected).scale * 100))}% </div><div class="ins-foot" data-v-1444af6d><button class="${ssrRenderClass([{ armed: unref(deviceDeleteArmed) === unref(selected).id }, "btn btn-danger ins-del"])}" data-v-1444af6d>${ssrInterpolate(unref(deviceDeleteArmed) === unref(selected).id ? _ctx.$t("townView.k1w10xa5152") : _ctx.$t("townView.k121kfef182"))}</button></div><!--]-->`);
2584
+ else _push(`<div class="ins-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kt0i3y2092"))}</div>`);
2558
2585
  _push(`<!--]-->`);
2559
2586
  }
2560
2587
  _push(`<!--]-->`);
2561
2588
  } else if (unref(selected).kind === "agent") {
2562
- _push(`<!--[--><div class="chat-id-row" data-v-5b974b95><span class="chat-badge" style="${ssrRenderStyle({ "--p-acc": unref(agentChatColor) })}" data-v-5b974b95>${ssrInterpolate(unref(agentChatTitle).slice(0, 1).toUpperCase())}</span><div class="chat-nameplate" data-v-5b974b95><span class="chat-name" data-v-5b974b95>${ssrInterpolate(unref(agentChatTitle))}</span><span class="chat-meta" data-v-5b974b95><span class="${ssrRenderClass([unref(selectedAgentMeta)?.role === "lead" ? "r-lead" : "r-worker", "chat-role"])}" data-v-5b974b95>${ssrInterpolate(unref(selectedAgentRoleTag))}</span><span class="${ssrRenderClass([`s-${unref(selectedAgentMeta)?.state ?? "idle"}`, "chat-state"])}" data-v-5b974b95>${ssrInterpolate(unref(agentChatStateLabel))}</span>`);
2563
- if (unref(selectedAgentMeta)?.harness) _push(`<span class="chat-harness" data-v-5b974b95>${ssrInterpolate(unref(selectedAgentMeta).harness.toUpperCase())}</span>`);
2589
+ _push(`<!--[--><div class="chat-id-row" data-v-1444af6d><span class="chat-badge" style="${ssrRenderStyle({ "--p-acc": unref(agentChatColor) })}" data-v-1444af6d>${ssrInterpolate(unref(agentChatTitle).slice(0, 1).toUpperCase())}</span><div class="chat-nameplate" data-v-1444af6d><span class="chat-name" data-v-1444af6d>${ssrInterpolate(unref(agentChatTitle))}</span><span class="chat-meta" data-v-1444af6d><span class="${ssrRenderClass([unref(selectedAgentMeta)?.role === "lead" ? "r-lead" : "r-worker", "chat-role"])}" data-v-1444af6d>${ssrInterpolate(unref(selectedAgentRoleTag))}</span><span class="${ssrRenderClass([`s-${unref(selectedAgentMeta)?.state ?? "idle"}`, "chat-state"])}" data-v-1444af6d>${ssrInterpolate(unref(agentChatStateLabel))}</span>`);
2590
+ if (unref(selectedAgentMeta)?.harness) _push(`<span class="chat-harness" data-v-1444af6d>${ssrInterpolate(unref(selectedAgentMeta).harness.toUpperCase())}</span>`);
2564
2591
  else _push(`<!---->`);
2565
- _push(`<span class="chat-count" data-v-5b974b95>${ssrInterpolate(unref(agentHistory).length + unref(agentChatRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span></span></div></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", (unref(scene3dRef)?.getAgentModel?.(unref(selected).id) ?? "") || "hero-3d")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-5b974b95><!--[-->`);
2592
+ _push(`<span class="chat-count" data-v-1444af6d>${ssrInterpolate(unref(agentHistory).length + unref(agentChatRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span></span></div></div><div class="obj-row" data-v-1444af6d><span class="obj-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k41amp083"))}</span><select class="obj-select"${ssrRenderAttr("value", (unref(scene3dRef)?.getAgentModel?.(unref(selected).id) ?? "") || "hero-3d")}${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""} data-v-1444af6d><!--[-->`);
2566
2593
  ssrRenderList(unref(agentModels), (m) => {
2567
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-5b974b95>${ssrInterpolate(m.name)}</option>`);
2594
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-1444af6d>${ssrInterpolate(m.name)}</option>`);
2568
2595
  });
2569
- _push(`<!--]--></select></div><div class="obj-sep" data-v-5b974b95></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1fix3hb093"))}</span><span class="range-status" data-v-5b974b95>${ssrInterpolate(unref(agentRangeStatusText))}</span>`);
2570
- if (unref(mode) === "edit") _push(`<button class="${ssrRenderClass([{ on: unref(agentDrawingRange) }, "obj-mini"])}"${ssrRenderAttr("title", _ctx.$t("townView.k13enoy3018"))} data-v-5b974b95>${ssrInterpolate(unref(agentDrawingRange) ? _ctx.$t("townView.k3slzhc153") : _ctx.$t("townView.k1f1xmci183"))}</button>`);
2596
+ _push(`<!--]--></select></div><div class="obj-sep" data-v-1444af6d></div><div class="obj-row" data-v-1444af6d><span class="obj-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1fix3hb093"))}</span><span class="range-status" data-v-1444af6d>${ssrInterpolate(unref(agentRangeStatusText))}</span>`);
2597
+ if (unref(mode) === "edit") _push(`<button class="${ssrRenderClass([{ on: unref(agentDrawingRange) }, "obj-mini"])}"${ssrRenderAttr("title", _ctx.$t("townView.k13enoy3018"))} data-v-1444af6d>${ssrInterpolate(unref(agentDrawingRange) ? _ctx.$t("townView.k3slzhc153") : _ctx.$t("townView.k1f1xmci183"))}</button>`);
2571
2598
  else _push(`<!---->`);
2572
- _push(`</div><div class="obj-sep" data-v-5b974b95></div><div class="sect-hd" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1p7nru2094"))}</div><!--[-->`);
2599
+ _push(`</div><div class="obj-sep" data-v-1444af6d></div><div class="sect-hd" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1p7nru2094"))}</div><!--[-->`);
2573
2600
  ssrRenderList(unref(agentBindings), (b) => {
2574
- _push(`<div class="bind-row" data-v-5b974b95><span class="${ssrRenderClass([b.kind === "dcw" ? "accent" : "", "ins-chip"])}" style="${ssrRenderStyle({ "flex": "none" })}" data-v-5b974b95>${ssrInterpolate(b.kind === "dcw" ? _ctx.$t("townView.k40ifw097") : _ctx.$t("townView.k40rjw098"))}</span><span class="bind-meta" data-v-5b974b95><span class="bind-label" data-v-5b974b95>${ssrInterpolate(bindingNodeName(b))}</span><select class="bind-select" style="${ssrRenderStyle({ "margin-top": "3px" })}"${ssrRenderAttr("value", b.mode)}${ssrRenderAttr("title", _ctx.$t("townView.khqvwix019"))} data-v-5b974b95><option value="auto" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1io1ylm095"))}</option><option value="manual" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1duyr8q096"))}</option></select></span><button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-5b974b95> ✕ </button></div>`);
2601
+ _push(`<div class="bind-row" data-v-1444af6d><span class="${ssrRenderClass([b.kind === "dcw" ? "accent" : "", "ins-chip"])}" style="${ssrRenderStyle({ "flex": "none" })}" data-v-1444af6d>${ssrInterpolate(b.kind === "dcw" ? _ctx.$t("townView.k40ifw097") : _ctx.$t("townView.k40rjw098"))}</span><span class="bind-meta" data-v-1444af6d><span class="bind-label" data-v-1444af6d>${ssrInterpolate(bindingNodeName(b))}</span><select class="bind-select" style="${ssrRenderStyle({ "margin-top": "3px" })}"${ssrRenderAttr("value", b.mode)}${ssrRenderAttr("title", _ctx.$t("townView.khqvwix019"))} data-v-1444af6d><option value="auto" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1io1ylm095"))}</option><option value="manual" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1duyr8q096"))}</option></select></span><button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-1444af6d> ✕ </button></div>`);
2575
2602
  });
2576
2603
  _push(`<!--]-->`);
2577
- if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-5b974b95> 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 </div>`);
2604
+ if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-1444af6d> 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 </div>`);
2578
2605
  else _push(`<!---->`);
2579
2606
  if (unref(mode) === "edit") {
2580
- _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-5b974b95><select class="bind-select" style="${ssrRenderStyle({
2607
+ _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-1444af6d><select class="bind-select" style="${ssrRenderStyle({
2581
2608
  "flex": "none",
2582
2609
  "width": "62px"
2583
- })}" data-v-5b974b95><option value="dcw" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "dcw") : ssrLooseEqual(unref(agentBindKind), "dcw")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40ifw097"))}</option><option value="daq" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "daq") : ssrLooseEqual(unref(agentBindKind), "daq")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40rjw098"))}</option></select><select class="bind-select" data-v-5b974b95><option value="" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), "") : ssrLooseEqual(unref(agentBindNodeId), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kurjldk099"))}</option>`);
2610
+ })}" data-v-1444af6d><option value="dcw" data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "dcw") : ssrLooseEqual(unref(agentBindKind), "dcw")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40ifw097"))}</option><option value="daq" data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindKind)) ? ssrLooseContain(unref(agentBindKind), "daq") : ssrLooseEqual(unref(agentBindKind), "daq")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k40rjw098"))}</option></select><select class="bind-select" data-v-1444af6d><option value="" data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), "") : ssrLooseEqual(unref(agentBindNodeId), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kurjldk099"))}</option>`);
2584
2611
  if (unref(agentBindKind) === "dcw") {
2585
2612
  _push(`<!--[-->`);
2586
2613
  ssrRenderList(unref(dcw).nodes, (n) => {
2587
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2614
+ _push(`<option${ssrRenderAttr("value", n.id)} data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2588
2615
  });
2589
2616
  _push(`<!--]-->`);
2590
2617
  } else {
2591
2618
  _push(`<!--[-->`);
2592
2619
  ssrRenderList(unref(daq).nodes, (n) => {
2593
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2620
+ _push(`<option${ssrRenderAttr("value", n.id)} data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2594
2621
  });
2595
2622
  _push(`<!--]-->`);
2596
2623
  }
2597
2624
  _push(`</select><select class="bind-select" style="${ssrRenderStyle({
2598
2625
  "flex": "none",
2599
2626
  "width": "76px"
2600
- })}" data-v-5b974b95><option value="auto" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "auto") : ssrLooseEqual(unref(agentBindMode), "auto")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k45kpj100"))}</option><option value="manual" data-v-5b974b95${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "manual") : ssrLooseEqual(unref(agentBindMode), "manual")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k3zul4101"))}</option></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(agentBindNodeId)) ? " disabled" : ""} data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k452a8102"))}</button></div>`);
2627
+ })}" data-v-1444af6d><option value="auto" data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "auto") : ssrLooseEqual(unref(agentBindMode), "auto")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k45kpj100"))}</option><option value="manual" data-v-1444af6d${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindMode)) ? ssrLooseContain(unref(agentBindMode), "manual") : ssrLooseEqual(unref(agentBindMode), "manual")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.k3zul4101"))}</option></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(agentBindNodeId)) ? " disabled" : ""} data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k452a8102"))}</button></div>`);
2601
2628
  } else _push(`<!---->`);
2602
2629
  if (unref(pendingApprovals).length) {
2603
- _push(`<!--[--><div class="sect-hd" style="${ssrRenderStyle({ "color": "var(--hud-amber)" })}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1gk2jg7132"))} ${ssrInterpolate(unref(pendingApprovals).length)}</div><!--[-->`);
2630
+ _push(`<!--[--><div class="sect-hd" style="${ssrRenderStyle({ "color": "var(--hud-amber)" })}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1gk2jg7132"))} ${ssrInterpolate(unref(pendingApprovals).length)}</div><!--[-->`);
2604
2631
  ssrRenderList(unref(pendingApprovals), (ap) => {
2605
- _push(`<div class="approval-card" data-v-5b974b95><div class="approval-detail" data-v-5b974b95>${ssrInterpolate(ap.detail)}</div><div class="${ssrRenderClass([{ urgent: approvalRemainingSec(ap) <= 30 }, "approval-ttl"])}" data-v-5b974b95> ⏱ ${ssrInterpolate(approvalRemainingSec(ap))}s ${ssrInterpolate(_ctx.$t("townView.hitlAutoReject"))}</div><input${ssrRenderAttr("value", unref(approvalComments)[ap.id])} class="dcw-write input-inline" style="${ssrRenderStyle({
2632
+ _push(`<div class="approval-card" data-v-1444af6d><div class="approval-detail" data-v-1444af6d>${ssrInterpolate(ap.detail)}</div><div class="${ssrRenderClass([{ urgent: approvalRemainingSec(ap) <= 30 }, "approval-ttl"])}" data-v-1444af6d> ⏱ ${ssrInterpolate(approvalRemainingSec(ap))}s ${ssrInterpolate(_ctx.$t("townView.hitlAutoReject"))}</div><input${ssrRenderAttr("value", unref(approvalComments)[ap.id])} class="dcw-write input-inline" style="${ssrRenderStyle({
2606
2633
  "width": "100%",
2607
2634
  "margin-top": "5px"
2608
- })}"${ssrRenderAttr("placeholder", _ctx.$t("townView.keztqrn020"))} data-v-5b974b95><div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-top": "5px" })}" data-v-5b974b95><button class="bind-add-btn" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kslcozu103"))}</button><button class="bind-add-btn danger" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k14gu3rd104"))}</button></div></div>`);
2635
+ })}"${ssrRenderAttr("placeholder", _ctx.$t("townView.keztqrn020"))} data-v-1444af6d><div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-top": "5px" })}" data-v-1444af6d><button class="bind-add-btn" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kslcozu103"))}</button><button class="bind-add-btn danger" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k14gu3rd104"))}</button></div></div>`);
2609
2636
  });
2610
2637
  _push(`<!--]--><!--]-->`);
2611
2638
  } else _push(`<!---->`);
2612
- if (unref(agentRangeDraft) && unref(mode) === "edit") _push(`<!--[--><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-5b974b95><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "ellipse" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "rect" }, "seg-btn"])}" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k41lwj105"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusX)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusX))}</span></div><div class="obj-row" data-v-5b974b95><span class="obj-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k45bta106"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusZ)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-5b974b95><span class="bp-val" data-v-5b974b95>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusZ))}</span></div><button class="obj-mini danger" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1w45mzc107"))}</button><!--]-->`);
2613
- else _push(`<div class="ins-empty" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k14s8urm108"))}</div>`);
2614
- _push(`<div class="obj-sep" data-v-5b974b95></div><div class="sect-hd chat-sect" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1ghjbfc133"))} ${ssrInterpolate(unref(agentChatTitle))} <button class="mini-btn chat-refresh"${ssrRenderAttr("title", _ctx.$t("townView.k15avt7g021"))} data-v-5b974b95>${ssrInterpolate(unref(historyLoading) ? "…" : "↻")}</button></div><div class="rpg-lines chat-embed" data-v-5b974b95>`);
2615
- if (unref(historyLoading)) _push(`<div class="rpg-note" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kkhlx5h109"))}</div>`);
2639
+ if (unref(agentRangeDraft) && unref(mode) === "edit") _push(`<!--[--><div class="obj-row" data-v-1444af6d><span class="obj-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-1444af6d><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "ellipse" }, "seg-btn"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "rect" }, "seg-btn"])}" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="obj-row" data-v-1444af6d><span class="obj-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k41lwj105"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusX)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-1444af6d><span class="bp-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusX))}</span></div><div class="obj-row" data-v-1444af6d><span class="obj-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k45bta106"))}</span><input${ssrRenderAttr("value", unref(agentRangeDraft).radiusZ)} class="obj-range" type="range" min="40" max="4000" step="8" data-v-1444af6d><span class="bp-val" data-v-1444af6d>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusZ))}</span></div><button class="obj-mini danger" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1w45mzc107"))}</button><!--]-->`);
2640
+ else _push(`<div class="ins-empty" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k14s8urm108"))}</div>`);
2641
+ _push(`<div class="obj-sep" data-v-1444af6d></div><div class="sect-hd chat-sect" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1ghjbfc133"))} ${ssrInterpolate(unref(agentChatTitle))} <button class="mini-btn chat-refresh"${ssrRenderAttr("title", _ctx.$t("townView.k15avt7g021"))} data-v-1444af6d>${ssrInterpolate(unref(historyLoading) ? "…" : "↻")}</button></div><div class="rpg-lines chat-embed" data-v-1444af6d>`);
2642
+ if (unref(historyLoading)) _push(`<div class="rpg-note" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kkhlx5h109"))}</div>`);
2616
2643
  else _push(`<!---->`);
2617
2644
  if (unref(agentHistory).length) {
2618
- _push(`<!--[--><div class="rpg-divider" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2645
+ _push(`<!--[--><div class="rpg-divider" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2619
2646
  ssrRenderList(unref(agentHistory), (r) => {
2620
- _push(`<div class="rpg-line hist" data-v-5b974b95><span class="rpg-time" data-v-5b974b95>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-5b974b95>`);
2621
- if (chatKindLabel(r.kind)) _push(`<span class="${ssrRenderClass([`k-${r.kind}`, "rpg-kind"])}" data-v-5b974b95>${ssrInterpolate(chatKindLabel(r.kind))}</span>`);
2647
+ _push(`<div class="rpg-line hist" data-v-1444af6d><span class="rpg-time" data-v-1444af6d>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-1444af6d>`);
2648
+ if (chatKindLabel(r.kind)) _push(`<span class="${ssrRenderClass([`k-${r.kind}`, "rpg-kind"])}" data-v-1444af6d>${ssrInterpolate(chatKindLabel(r.kind))}</span>`);
2622
2649
  else _push(`<!---->`);
2623
- _push(`<span class="rpg-text" data-v-5b974b95>${ssrInterpolate(r.text)}</span></div></div>`);
2650
+ _push(`<span class="rpg-text" data-v-1444af6d>${ssrInterpolate(r.text)}</span></div></div>`);
2624
2651
  });
2625
2652
  _push(`<!--]--><!--]-->`);
2626
2653
  } else _push(`<!---->`);
2627
- if (unref(agentChatRows).length) _push(`<div class="rpg-divider live" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1cwz73k135"))} ${ssrInterpolate(unref(agentChatRows).length)}</div>`);
2654
+ if (unref(agentChatRows).length) _push(`<div class="rpg-divider live" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1cwz73k135"))} ${ssrInterpolate(unref(agentChatRows).length)}</div>`);
2628
2655
  else _push(`<!---->`);
2629
2656
  _push(`<!--[-->`);
2630
2657
  ssrRenderList(unref(agentChatRows), (r) => {
2631
- _push(`<div class="rpg-line live" data-v-5b974b95><span class="rpg-time" data-v-5b974b95>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-5b974b95><span class="rpg-text" data-v-5b974b95>${ssrInterpolate(r.text)}</span></div></div>`);
2658
+ _push(`<div class="rpg-line live" data-v-1444af6d><span class="rpg-time" data-v-1444af6d>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-1444af6d><span class="rpg-text" data-v-1444af6d>${ssrInterpolate(r.text)}</span></div></div>`);
2632
2659
  });
2633
2660
  _push(`<!--]-->`);
2634
- if (unref(selectedAgentMeta)?.state === "busy") _push(`<div class="rpg-typing" data-v-5b974b95><span class="ty-dot" data-v-5b974b95></span><span class="ty-dot" data-v-5b974b95></span><span class="ty-dot" data-v-5b974b95></span><span class="ty-label" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k3o5tz9110"))}</span></div>`);
2661
+ if (unref(selectedAgentMeta)?.state === "busy") _push(`<div class="rpg-typing" data-v-1444af6d><span class="ty-dot" data-v-1444af6d></span><span class="ty-dot" data-v-1444af6d></span><span class="ty-dot" data-v-1444af6d></span><span class="ty-label" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k3o5tz9110"))}</span></div>`);
2635
2662
  else _push(`<!---->`);
2636
- if (!unref(historyLoading) && !unref(agentHistory).length && !unref(agentChatRows).length) _push(`<div class="rpg-note" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1qkqld7111"))}</div>`);
2663
+ if (!unref(historyLoading) && !unref(agentHistory).length && !unref(agentChatRows).length) _push(`<div class="rpg-note" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1qkqld7111"))}</div>`);
2637
2664
  else _push(`<!---->`);
2638
2665
  _push(`</div><!--]-->`);
2639
2666
  } else _push(`<!---->`);
2640
2667
  _push(`</section>`);
2641
2668
  } else _push(`<!---->`);
2642
- _push(`<section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</h3></div><div class="health-body" data-v-5b974b95><div class="donut-wrap" data-v-5b974b95><canvas width="118" height="118" data-v-5b974b95></canvas><div class="donut-center" data-v-5b974b95><b style="${ssrRenderStyle({ color: unref(healthTone) })}" data-v-5b974b95>${ssrInterpolate(unref(healthPct))}%</b><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k7h1nxo113"))}</span></div></div><div class="health-legend" data-v-5b974b95><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-accent)" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.k3vp67i114"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(runningCount))}</span></div><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-amber)" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.k3zcvb115"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(idleCount))}</span></div><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-danger)" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.k3xmid116"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(alarmCount))}</span></div><div class="hl-row" data-v-5b974b95><span class="hl-dot" style="${ssrRenderStyle({ background: "#3a4a63" })}" data-v-5b974b95></span> ${ssrInterpolate(_ctx.$t("townView.statesOffline"))} <span class="n" data-v-5b974b95>${ssrInterpolate(unref(offlineCount))}</span></div></div></div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1q247fn117"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(deviceTwins).twins.length)}</span></div>`);
2669
+ _push(`<section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</h3></div><div class="health-body" data-v-1444af6d><div class="donut-wrap" data-v-1444af6d><canvas width="118" height="118" data-v-1444af6d></canvas><div class="donut-center" data-v-1444af6d><b style="${ssrRenderStyle({ color: unref(healthTone) })}" data-v-1444af6d>${ssrInterpolate(unref(healthPct))}%</b><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k7h1nxo113"))}</span></div></div><div class="health-legend" data-v-1444af6d><div class="hl-row" data-v-1444af6d><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-accent)" })}" data-v-1444af6d></span> ${ssrInterpolate(_ctx.$t("townView.k3vp67i114"))} <span class="n" data-v-1444af6d>${ssrInterpolate(unref(runningCount))}</span></div><div class="hl-row" data-v-1444af6d><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-amber)" })}" data-v-1444af6d></span> ${ssrInterpolate(_ctx.$t("townView.k3zcvb115"))} <span class="n" data-v-1444af6d>${ssrInterpolate(unref(idleCount))}</span></div><div class="hl-row" data-v-1444af6d><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-danger)" })}" data-v-1444af6d></span> ${ssrInterpolate(_ctx.$t("townView.k3xmid116"))} <span class="n" data-v-1444af6d>${ssrInterpolate(unref(alarmCount))}</span></div><div class="hl-row" data-v-1444af6d><span class="hl-dot" style="${ssrRenderStyle({ background: "#3a4a63" })}" data-v-1444af6d></span> ${ssrInterpolate(_ctx.$t("townView.statesOffline"))} <span class="n" data-v-1444af6d>${ssrInterpolate(unref(offlineCount))}</span></div></div></div></section><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1q247fn117"))}</h3><span class="panel-tag" data-v-1444af6d>${ssrInterpolate(unref(deviceTwins).twins.length)}</span></div>`);
2643
2670
  _push(ssrRenderComponent(_component_WorkshopDeviceTwinPanel, {
2644
2671
  class: "kd-embed",
2645
2672
  "daq-live": unref(daqLive),
2646
2673
  "dcw-live": unref(dcwLive),
2647
2674
  onFocusDevice
2648
2675
  }, null, _parent));
2649
- _push(`</section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1cxf749118"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(activeAlarmCount))} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bkswpz022"))} data-v-5b974b95> ✓ </button></div><div class="alarm-list" data-v-5b974b95><!--[-->`);
2676
+ _push(`</section><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1cxf749118"))}</h3><span class="panel-tag" data-v-1444af6d>${ssrInterpolate(unref(activeAlarmCount))} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bkswpz022"))} data-v-1444af6d> ✓ </button></div><div class="alarm-list" data-v-1444af6d><!--[-->`);
2650
2677
  ssrRenderList(unref(alarms).slice(0, 8), (a) => {
2651
- _push(`<div class="al-row" data-v-5b974b95><span class="${ssrRenderClass([a.state === 2 ? "info" : a.state === 1 ? "warn" : "crit", "al-ico"])}" data-v-5b974b95><svg class="al-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M12 3 22 20H2L12 3Z" data-v-5b974b95></path><path d="M12 10v4M12 17v.2" data-v-5b974b95></path></svg></span><div class="al-body" data-v-5b974b95><div class="al-txt" data-v-5b974b95>${ssrInterpolate(a.txt)}</div><div class="al-src" data-v-5b974b95>${ssrInterpolate(a.src)} · ${ssrInterpolate(a.time)}</div></div><button class="${ssrRenderClass([`s${a.state}`, "al-state"])}" data-v-5b974b95>${ssrInterpolate(ALARM_STATES[a.state])}</button></div>`);
2678
+ _push(`<div class="al-row" data-v-1444af6d><span class="${ssrRenderClass([a.state === 2 ? "info" : a.state === 1 ? "warn" : "crit", "al-ico"])}" data-v-1444af6d><svg class="al-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M12 3 22 20H2L12 3Z" data-v-1444af6d></path><path d="M12 10v4M12 17v.2" data-v-1444af6d></path></svg></span><div class="al-body" data-v-1444af6d><div class="al-txt" data-v-1444af6d>${ssrInterpolate(a.txt)}</div><div class="al-src" data-v-1444af6d>${ssrInterpolate(a.src)} · ${ssrInterpolate(a.time)}</div></div><button class="${ssrRenderClass([`s${a.state}`, "al-state"])}" data-v-1444af6d>${ssrInterpolate(ALARM_STATES[a.state])}</button></div>`);
2652
2679
  });
2653
2680
  _push(`<!--]-->`);
2654
- if (!unref(alarms).length) _push(`<div class="rail-empty" data-v-5b974b95><svg class="re-ico" viewBox="0 0 24 24" data-v-5b974b95><path d="M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z" data-v-5b974b95></path><path d="m9.2 12.2 2 2 3.6-4" data-v-5b974b95></path></svg><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kjz544r119"))}</span></div>`);
2681
+ if (!unref(alarms).length) _push(`<div class="rail-empty" data-v-1444af6d><svg class="re-ico" viewBox="0 0 24 24" data-v-1444af6d><path d="M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z" data-v-1444af6d></path><path d="m9.2 12.2 2 2 3.6-4" data-v-1444af6d></path></svg><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kjz544r119"))}</span></div>`);
2655
2682
  else _push(`<!---->`);
2656
- _push(`</div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1cxdtq2120"))}</h3><span class="panel-tag" data-v-5b974b95>${ssrInterpolate(unref(ticker).length)}</span></div><div class="event-list" data-v-5b974b95><!--[-->`);
2683
+ _push(`</div></section><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1cxdtq2120"))}</h3><span class="panel-tag" data-v-1444af6d>${ssrInterpolate(unref(ticker).length)}</span></div><div class="event-list" data-v-1444af6d><!--[-->`);
2657
2684
  ssrRenderList([...unref(ticker)].reverse(), (t, i) => {
2658
- _push(`<div class="event-row" data-v-5b974b95><span class="ev-time" data-v-5b974b95>${ssrInterpolate(fmtTime(t.at))}</span><span class="ev-name"${ssrRenderAttr("title", t.agentName)} data-v-5b974b95>${ssrInterpolate(t.agentName)}</span><span class="ev-text"${ssrRenderAttr("title", t.text)} data-v-5b974b95>${ssrInterpolate(t.text)}</span></div>`);
2685
+ _push(`<div class="event-row" data-v-1444af6d><span class="ev-time" data-v-1444af6d>${ssrInterpolate(fmtTime(t.at))}</span><span class="ev-name"${ssrRenderAttr("title", t.agentName)} data-v-1444af6d>${ssrInterpolate(t.agentName)}</span><span class="ev-text"${ssrRenderAttr("title", t.text)} data-v-1444af6d>${ssrInterpolate(t.text)}</span></div>`);
2659
2686
  });
2660
2687
  _push(`<!--]-->`);
2661
- if (!unref(ticker).length) _push(`<div class="rail-empty" data-v-5b974b95><svg class="re-ico" viewBox="0 0 24 24" data-v-5b974b95><path d="M3 12h3l2.5-6 4 12L15 12h6" data-v-5b974b95></path></svg><span data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k2uk6ua121"))}</span></div>`);
2688
+ if (!unref(ticker).length) _push(`<div class="rail-empty" data-v-1444af6d><svg class="re-ico" viewBox="0 0 24 24" data-v-1444af6d><path d="M3 12h3l2.5-6 4 12L15 12h6" data-v-1444af6d></path></svg><span data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k2uk6ua121"))}</span></div>`);
2662
2689
  else _push(`<!---->`);
2663
- _push(`</div></section><section class="panel" data-v-5b974b95><div class="panel-hd" data-v-5b974b95><h3 data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kjug2jq122"))}</h3></div><div class="mm-body" data-v-5b974b95><div class="mm-wrap"${ssrRenderAttr("title", _ctx.$t("townView.klfwiqg023"))} data-v-5b974b95><canvas class="nav-cv" data-v-5b974b95></canvas></div><div class="mm-col" data-v-5b974b95><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1lap9bs024"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><path d="M3 12a9 9 0 1 0 3-6.7M3 4v5h5" data-v-5b974b95></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.kav8a8k025"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="11" cy="11" r="6.5" data-v-5b974b95></circle><path d="m16 16 4.5 4.5M8.5 11h5" data-v-5b974b95></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1u7uce9026"))} data-v-5b974b95><svg class="vp-svg" viewBox="0 0 24 24" data-v-5b974b95><circle cx="11" cy="11" r="6.5" data-v-5b974b95></circle><path d="m16 16 4.5 4.5M8.5 11h5M11 8.5v5" data-v-5b974b95></path></svg></button></div></div><div class="mm-meta mono" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k1gaaodq136"))}${ssrInterpolate(unref(navScale).toFixed(1))} · ${ssrInterpolate(unref(minimap)?.devices?.length ?? 0)} ${ssrInterpolate(_ctx.$t("townView.k47e16126"))}</div></section></aside></div><footer class="statusbar" data-v-5b974b95><span data-v-5b974b95><span class="${ssrRenderClass([{ red: unref(conn).state !== "open" }, "sb-dot"])}" data-v-5b974b95></span>${ssrInterpolate(_ctx.$t("townView.k1i4g246123"))} <b data-v-5b974b95>${ssrInterpolate(unref(conn).state === "open" ? _ctx.$t("townView.k41k5c154") : unref(syncing) ? _ctx.$t("townView.k3lmtk3184") : _ctx.$t("townView.k44c2n186"))}</b></span><span class="sb-stats" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.k4a0jt124"))} <b data-v-5b974b95>${ssrInterpolate(unref(blockCount))}</b><i data-v-5b974b95>·</i>${ssrInterpolate(_ctx.$t("townView.k3xdvm125"))} <b data-v-5b974b95>${ssrInterpolate(unref(agentCount))}</b><i data-v-5b974b95>·</i>${ssrInterpolate(_ctx.$t("townView.k47e16126"))} <b data-v-5b974b95>${ssrInterpolate(unref(deviceCount))}</b></span><span class="sb-lat mono" data-v-5b974b95>${ssrInterpolate(unref(fps))} FPS </span><span class="copy" data-v-5b974b95> © 2026 ABO · DIGITAL TWIN · ${ssrInterpolate(_ctx.$t("townView.k1h5gxpf137"))}</span></footer>`);
2664
- if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-5b974b95><div class="loading-spinner" data-v-5b974b95></div><span class="loading-text" data-v-5b974b95>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2690
+ _push(`</div></section><section class="panel" data-v-1444af6d><div class="panel-hd" data-v-1444af6d><h3 data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kjug2jq122"))}</h3></div><div class="mm-body" data-v-1444af6d><div class="mm-wrap"${ssrRenderAttr("title", _ctx.$t("townView.klfwiqg023"))} data-v-1444af6d><canvas class="nav-cv" data-v-1444af6d></canvas></div><div class="mm-col" data-v-1444af6d><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1lap9bs024"))} data-v-1444af6d><svg class="vp-svg" viewBox="0 0 24 24" data-v-1444af6d><path d="M3 12a9 9 0 1 0 3-6.7M3 4v5h5" data-v-1444af6d></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.kav8a8k025"))} data-v-1444af6d><svg class="vp-svg" viewBox="0 0 24 24" data-v-1444af6d><circle cx="11" cy="11" r="6.5" data-v-1444af6d></circle><path d="m16 16 4.5 4.5M8.5 11h5" data-v-1444af6d></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1u7uce9026"))} data-v-1444af6d><svg class="vp-svg" viewBox="0 0 24 24" data-v-1444af6d><circle cx="11" cy="11" r="6.5" data-v-1444af6d></circle><path d="m16 16 4.5 4.5M8.5 11h5M11 8.5v5" data-v-1444af6d></path></svg></button></div></div><div class="mm-meta mono" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k1gaaodq136"))}${ssrInterpolate(unref(navScale).toFixed(1))} · ${ssrInterpolate(unref(minimap)?.devices?.length ?? 0)} ${ssrInterpolate(_ctx.$t("townView.k47e16126"))}</div></section></aside></div><footer class="statusbar" data-v-1444af6d><span data-v-1444af6d><span class="${ssrRenderClass([{ red: unref(conn).state !== "open" }, "sb-dot"])}" data-v-1444af6d></span>${ssrInterpolate(_ctx.$t("townView.k1i4g246123"))} <b data-v-1444af6d>${ssrInterpolate(unref(conn).state === "open" ? _ctx.$t("townView.k41k5c154") : unref(syncing) ? _ctx.$t("townView.k3lmtk3184") : _ctx.$t("townView.k44c2n186"))}</b></span><span class="sb-stats" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.k4a0jt124"))} <b data-v-1444af6d>${ssrInterpolate(unref(blockCount))}</b><i data-v-1444af6d>·</i>${ssrInterpolate(_ctx.$t("townView.k3xdvm125"))} <b data-v-1444af6d>${ssrInterpolate(unref(agentCount))}</b><i data-v-1444af6d>·</i>${ssrInterpolate(_ctx.$t("townView.k47e16126"))} <b data-v-1444af6d>${ssrInterpolate(unref(deviceCount))}</b></span><span class="sb-lat mono" data-v-1444af6d>${ssrInterpolate(unref(fps))} FPS </span><span class="copy" data-v-1444af6d> © 2026 ABO · DIGITAL TWIN · ${ssrInterpolate(_ctx.$t("townView.k1h5gxpf137"))}</span></footer>`);
2691
+ if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-1444af6d><div class="loading-spinner" data-v-1444af6d></div><span class="loading-text" data-v-1444af6d>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2665
2692
  else _push(`<!---->`);
2666
2693
  _push(`</div>`);
2667
2694
  };
@@ -2675,7 +2702,7 @@ TownView_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
2675
2702
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/town/TownView.vue");
2676
2703
  return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
2677
2704
  };
2678
- var TownView_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(TownView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5b974b95"]]), { __name: "WorkshopTownView" });
2705
+ var TownView_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(TownView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-1444af6d"]]), { __name: "WorkshopTownView" });
2679
2706
 
2680
2707
  export { TownView_default as T, useStorage as u };
2681
- //# sourceMappingURL=TownView-DxeQe1Bl.mjs.map
2708
+ //# sourceMappingURL=TownView-ftIylqiD.mjs.map