agentworkshop 0.7.40 → 0.7.44

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 (327) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/B8uy9iRW.js +1 -0
  3. package/.output/public/_nuxt/BGTYYQH-.js +1 -0
  4. package/.output/public/_nuxt/BUmHEJ77.js +2 -0
  5. package/.output/public/_nuxt/BY7YrV_D.js +1 -0
  6. package/.output/public/_nuxt/Bqcgz95s.js +18 -0
  7. package/.output/public/_nuxt/C7UlqPeD.js +1 -0
  8. package/.output/public/_nuxt/CTmDn-YP.js +1 -0
  9. package/.output/public/_nuxt/Cs8pVeVG.js +1 -0
  10. package/.output/public/_nuxt/{DcsCcxp4.js → D98NH8kG.js} +1 -1
  11. package/.output/public/_nuxt/DKySmNPI.js +14 -0
  12. package/.output/public/_nuxt/Di0NY_ht.js +1 -0
  13. package/.output/public/_nuxt/Du9v6qGB.js +1 -0
  14. package/.output/public/_nuxt/{C_iYD-EB.js → EHlEMRii.js} +1 -1
  15. package/.output/public/_nuxt/Eke1fs-U.js +1 -0
  16. package/.output/public/_nuxt/{DeJykBFf.js → H0BcqZtT.js} +1 -1
  17. package/.output/public/_nuxt/{C4oW1HsE.js → HSYEkkce.js} +1 -1
  18. package/.output/public/_nuxt/{DZshyNLa.js → IREZ1eC2.js} +1 -1
  19. package/.output/public/_nuxt/{D_OTvQza.js → J9oU00D1.js} +1 -1
  20. package/.output/public/_nuxt/OmpTerminalPanel.BxR5-lvi.css +1 -0
  21. package/.output/public/_nuxt/SSyAPaHc.js +1 -0
  22. package/.output/public/_nuxt/TownView.li4EMQxK.css +1 -0
  23. package/.output/public/_nuxt/VdLk4jLE2.js +1 -0
  24. package/.output/public/_nuxt/_id_.BhsXoEuk.css +1 -0
  25. package/.output/public/_nuxt/_id_.DQyj-WKN.css +1 -0
  26. package/.output/public/_nuxt/{_wsId_.B4WiqkIS.css → _wsId_.CTx-BlfF.css} +1 -1
  27. package/.output/public/_nuxt/aShsv_rG.js +19 -0
  28. package/.output/public/_nuxt/{yF0aYMF1.js → aesgXKSr.js} +3 -3
  29. package/.output/public/_nuxt/agents.B21nUEUX.css +1 -0
  30. package/.output/public/_nuxt/aml.ekTjxFkf.css +1 -0
  31. package/.output/public/_nuxt/builds/latest.json +1 -1
  32. package/.output/public/_nuxt/builds/meta/b5506ef0-f48e-4f14-a6c0-d65e505d0b09.json +1 -0
  33. package/.output/public/_nuxt/ca4TJ3Op.js +1 -0
  34. package/.output/public/_nuxt/channel-templates.DplM1pJ3.css +1 -0
  35. package/.output/public/_nuxt/daq.BdVmoIfe.css +1 -0
  36. package/.output/public/_nuxt/dcw.DCgyzpWV.css +1 -0
  37. package/.output/public/_nuxt/{default.J32SgqFY.css → default.Bh3L2HU8.css} +1 -1
  38. package/.output/public/_nuxt/lHAxdSsj.js +1 -0
  39. package/.output/public/_nuxt/pages.j9rzRocr.css +1 -0
  40. package/.output/public/_nuxt/plugins.DhiZbHU8.css +1 -0
  41. package/.output/public/_nuxt/settings.BRx9rIDg.css +1 -0
  42. package/.output/public/_nuxt/teams.BLlOPB_Z.css +1 -0
  43. package/.output/public/_nuxt/tokens.De8xzszn.css +1 -0
  44. package/.output/public/_nuxt/workshop.D1jFNkrn.css +1 -0
  45. package/.output/server/chunks/_/nitro.mjs +1058 -830
  46. package/.output/server/chunks/_/nitro.mjs.map +1 -1
  47. package/.output/server/chunks/build/{OmpTerminalPanel-Cu_s4i0A.mjs → OmpTerminalPanel-CVvxpsF7.mjs} +15 -15
  48. package/.output/server/chunks/build/{OmpTerminalPanel-Cu_s4i0A.mjs.map → OmpTerminalPanel-CVvxpsF7.mjs.map} +1 -1
  49. package/.output/server/chunks/build/{TownView-BuLAsmpR.mjs → TownView-CJ6IsDCc.mjs} +229 -228
  50. package/.output/server/chunks/build/{TownView-BuLAsmpR.mjs.map → TownView-CJ6IsDCc.mjs.map} +1 -1
  51. package/.output/server/chunks/build/{_id_-BU1wfOID.mjs → _id_-CVD_H0ir.mjs} +149 -147
  52. package/.output/server/chunks/build/_id_-CVD_H0ir.mjs.map +1 -0
  53. package/.output/server/chunks/build/{_id_-BYsEua57.mjs → _id_-CtxMb3qp.mjs} +47 -46
  54. package/.output/server/chunks/build/_id_-CtxMb3qp.mjs.map +1 -0
  55. package/.output/server/chunks/build/{_wsId_-BxlDcJHg.mjs → _wsId_-DpY3T-md.mjs} +516 -446
  56. package/.output/server/chunks/build/{_wsId_-BxlDcJHg.mjs.map → _wsId_-DpY3T-md.mjs.map} +1 -1
  57. package/.output/server/chunks/build/{agents-CLQqJF2y.mjs → agents-DsCkuXDV.mjs} +49 -46
  58. package/.output/server/chunks/build/agents-DsCkuXDV.mjs.map +1 -0
  59. package/.output/server/chunks/build/{aml-_7FdFL2p.mjs → aml-CT0xKGKI.mjs} +122 -105
  60. package/.output/server/chunks/build/aml-CT0xKGKI.mjs.map +1 -0
  61. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs +117 -0
  62. package/.output/server/chunks/build/builtin-catalog-edpDcgfL.mjs.map +1 -0
  63. package/.output/server/chunks/build/{channel-templates-p6SZNjlM.mjs → channel-templates-Dla9FbYa.mjs} +49 -37
  64. package/.output/server/chunks/build/channel-templates-Dla9FbYa.mjs.map +1 -0
  65. package/.output/server/chunks/build/{daq-cgyjKmJu.mjs → daq-DWWSKGAV.mjs} +95 -93
  66. package/.output/server/chunks/build/daq-DWWSKGAV.mjs.map +1 -0
  67. package/.output/server/chunks/build/{dcw-CoTxBlAZ.mjs → dcw-CT8k17_E.mjs} +46 -45
  68. package/.output/server/chunks/build/dcw-CT8k17_E.mjs.map +1 -0
  69. package/.output/server/chunks/build/{default-BE4r0FZN.mjs → default-D3525UFX.mjs} +16 -15
  70. package/.output/server/chunks/build/{default-BE4r0FZN.mjs.map → default-D3525UFX.mjs.map} +1 -1
  71. package/.output/server/chunks/build/{logs-BSOeZwwI.mjs → logs--dByNyhw.mjs} +2 -2
  72. package/.output/server/chunks/build/{logs-BSOeZwwI.mjs.map → logs--dByNyhw.mjs.map} +1 -1
  73. package/.output/server/chunks/build/{monitor-C0okQaXz.mjs → monitor-Dh2Kvaq5.mjs} +2 -2
  74. package/.output/server/chunks/build/{monitor-C0okQaXz.mjs.map → monitor-Dh2Kvaq5.mjs.map} +1 -1
  75. package/.output/server/chunks/build/{pages-DFxjn9Xa.mjs → pages-BHcSBM2D.mjs} +26 -20
  76. package/.output/server/chunks/build/pages-BHcSBM2D.mjs.map +1 -0
  77. package/.output/server/chunks/build/{plugins-lGlUr1lj.mjs → plugins-BNgIi61W.mjs} +23 -17
  78. package/.output/server/chunks/build/plugins-BNgIi61W.mjs.map +1 -0
  79. package/.output/server/chunks/build/{settings-Ddd1qx2Z.mjs → settings-ipYBDWdn.mjs} +45 -44
  80. package/.output/server/chunks/build/settings-ipYBDWdn.mjs.map +1 -0
  81. package/.output/server/chunks/build/{teams-MEDLZdMn.mjs → teams-5lx-CwFa.mjs} +47 -44
  82. package/.output/server/chunks/build/teams-5lx-CwFa.mjs.map +1 -0
  83. package/.output/server/chunks/build/{tokens-C7fTM5C2.mjs → tokens-q-IDT8Io.mjs} +73 -53
  84. package/.output/server/chunks/build/tokens-q-IDT8Io.mjs.map +1 -0
  85. package/.output/server/chunks/build/{town-qMPql9Se.mjs → town-QJWB5wng.mjs} +5 -4
  86. package/.output/server/chunks/build/town-QJWB5wng.mjs.map +1 -0
  87. package/.output/server/chunks/build/{useDaqStream-CIBaiGAl.mjs → useDaqStream-DfCFpb3p.mjs} +9 -3
  88. package/.output/server/chunks/build/useDaqStream-DfCFpb3p.mjs.map +1 -0
  89. package/.output/server/chunks/build/{useDcwStream-CBbiYnWe.mjs → useDcwStream-UPiX-3iO.mjs} +11 -2
  90. package/.output/server/chunks/build/useDcwStream-UPiX-3iO.mjs.map +1 -0
  91. package/.output/server/chunks/build/{workshop-BL5bhfs0.mjs → workshop-BIlCj_ZP.mjs} +45 -45
  92. package/.output/server/chunks/build/workshop-BIlCj_ZP.mjs.map +1 -0
  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.post.mjs +3 -3
  95. package/.output/server/chunks/routes/api/workshop/dcw/index5.post.mjs +1 -1
  96. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -1
  97. package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -1
  98. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.delete.mjs +1 -1
  99. package/.output/server/chunks/routes/api/workshop/dcw/params/_id_.patch.mjs +1 -1
  100. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -1
  101. package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -1
  102. package/.output/server/chunks/routes/api/workshop/harnesses/_id/providers.get.mjs +1 -1
  103. package/.output/server/chunks/routes/api/workshop/harnesses.get.mjs +1 -1
  104. package/.output/server/chunks/routes/api/workshop/hitl/pending.get.mjs +1 -1
  105. package/.output/server/chunks/routes/api/workshop/hitl/respond.post.mjs +1 -1
  106. package/.output/server/chunks/routes/api/workshop/index.put.mjs +1 -1
  107. package/.output/server/chunks/routes/api/workshop/index5.get.mjs +3 -1
  108. package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
  109. package/.output/server/chunks/routes/api/workshop/index6.get.mjs +3 -1
  110. package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
  111. package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -1
  112. package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -1
  113. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -1
  114. package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -1
  115. package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -1
  116. package/.output/server/chunks/routes/renderer.mjs +2 -2
  117. package/.output/server/chunks/virtual/entry.mjs +639 -88
  118. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  119. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  120. package/.output/server/package.json +1 -1
  121. package/README-zh.md +16 -6
  122. package/README.md +17 -7
  123. package/app/components/AppHeader.vue +961 -959
  124. package/app/components/workshop/A2aRpcDebugger.vue +237 -237
  125. package/app/components/workshop/AgentInspectorDrawer.vue +424 -424
  126. package/app/components/workshop/AgentLanesView.vue +998 -998
  127. package/app/components/workshop/ArtifactCard.vue +120 -120
  128. package/app/components/workshop/AssetLibrary.vue +452 -452
  129. package/app/components/workshop/ChannelSessionList.vue +812 -804
  130. package/app/components/workshop/CommandPalette.vue +269 -269
  131. package/app/components/workshop/Composer.vue +827 -827
  132. package/app/components/workshop/DeviceTwinPanel.vue +643 -643
  133. package/app/components/workshop/EventBlock.vue +602 -602
  134. package/app/components/workshop/FileSelectorModal.vue +188 -188
  135. package/app/components/workshop/InspectorPanel.vue +301 -301
  136. package/app/components/workshop/MemoryPanel.vue +364 -364
  137. package/app/components/workshop/MultiChannelView.vue +189 -189
  138. package/app/components/workshop/TaskBoardView.vue +686 -686
  139. package/app/components/workshop/TaskInspectorDrawer.vue +390 -390
  140. package/app/components/workshop/TranscriptTimeline.vue +601 -601
  141. package/app/components/workshop/blocks/ClusterArtifact.vue +61 -61
  142. package/app/components/workshop/blocks/ClusterError.vue +85 -85
  143. package/app/components/workshop/blocks/ClusterLife.vue +87 -87
  144. package/app/components/workshop/blocks/ClusterMember.vue +95 -93
  145. package/app/components/workshop/blocks/ClusterMemory.vue +84 -84
  146. package/app/components/workshop/blocks/ClusterOther.vue +67 -67
  147. package/app/components/workshop/blocks/ClusterStatus.vue +149 -147
  148. package/app/components/workshop/blocks/ClusterTool.vue +158 -158
  149. package/app/components/workshop/terminal/OmpTerminalPanel.vue +1011 -1011
  150. package/app/components/workshop/town/TownView.vue +56 -56
  151. package/app/composables/workshop/useDaqStream.ts +7 -4
  152. package/app/composables/workshop/useDcwStream.ts +8 -2
  153. package/app/middleware/locale-cookie.global.ts +22 -0
  154. package/app/pages/aml/index.vue +24 -2
  155. package/app/pages/daq/[id].vue +20 -16
  156. package/app/pages/daq/index.vue +2310 -2307
  157. package/app/pages/dcw/[id].vue +26 -23
  158. package/app/pages/dcw/index.vue +3 -3
  159. package/app/pages/index.vue +987 -981
  160. package/app/pages/plugins/index.vue +317 -311
  161. package/app/pages/settings.vue +1564 -1562
  162. package/app/pages/tokens.vue +15 -15
  163. package/app/pages/workshop/agents.vue +612 -609
  164. package/app/pages/workshop/channel-templates.vue +18 -11
  165. package/app/pages/workshop/index.vue +668 -668
  166. package/app/pages/workshop/teams.vue +743 -740
  167. package/app/pages/workshop/w/[wsId].vue +704 -704
  168. package/app/plugins/locale-restore.client.ts +16 -1
  169. package/app/utils/builtin-catalog.ts +104 -0
  170. package/config.yml +170 -170
  171. package/docs/cli.en.md +2 -2
  172. package/docs/cli.md +2 -2
  173. package/docs/full-test-plan.md +2 -3
  174. package/docs/plugins.en.md +33 -1
  175. package/docs/plugins.md +29 -1
  176. package/docs/sdk.en.md +1 -1
  177. package/docs/sdk.md +1 -1
  178. package/i18n/locales/en.ts +293 -35
  179. package/i18n/locales/zh-CN.ts +265 -7
  180. package/package.json +4 -3
  181. package/scripts/_dbg-perms-e2e.mjs +132 -109
  182. package/scripts/_demo-agentteam-capture.mjs +278 -0
  183. package/scripts/_e2e-ui-functional.mjs +371 -0
  184. package/scripts/_i18n-en-cjk-scan.mjs +28 -0
  185. package/scripts/_i18n-en-verify.mjs +107 -0
  186. package/scripts/_i18n-extra-checks.mjs +53 -0
  187. package/scripts/_i18n-scan-hardcoded.mjs +180 -0
  188. package/scripts/_i18n-verify-keys.mjs +50 -0
  189. package/scripts/_loop-biax-campaign.mjs +130 -0
  190. package/scripts/_sweep-button-contrast.mjs +87 -0
  191. package/scripts/test-serial-bridge.mjs +418 -0
  192. package/scripts/ui/e2e-interactive.mjs +328 -0
  193. package/scripts/ui/record-demo.mjs +557 -0
  194. package/scripts/ui/seed-industrial-demo.mjs +171 -0
  195. package/server/api/workshop/daq/index.get.ts +3 -1
  196. package/server/api/workshop/dcw/index.get.ts +3 -0
  197. package/server/plugins/aw-plugins.ts +9 -7
  198. package/server/plugins-builtin/diag-bridge/index.mjs +608 -661
  199. package/server/plugins-builtin/rag-bridge/index.mjs +57 -133
  200. package/server/plugins-builtin/serial-bridge/client.mjs +210 -0
  201. package/server/plugins-builtin/serial-bridge/drivers.mjs +409 -0
  202. package/server/plugins-builtin/serial-bridge/i18n.json +62 -0
  203. package/server/plugins-builtin/serial-bridge/index.mjs +247 -0
  204. package/server/plugins-builtin/serial-bridge/lib.mjs +208 -0
  205. package/server/plugins-builtin/serial-bridge/rtu.mjs +168 -0
  206. package/server/services/workshop/daq/daq-controller.ts +7 -2
  207. package/server/services/workshop/daq/drivers.ts +89 -3
  208. package/server/services/workshop/dcw/dcw-controller.ts +5 -1
  209. package/server/services/workshop/dcw/drivers.ts +85 -2
  210. package/server/services/workshop/dcw/plugin-bridge.ts +45 -0
  211. package/server/services/workshop/plugins/host.mjs +30 -0
  212. package/shared/daq-protocol.ts +15 -0
  213. package/.output/public/_nuxt/88GOowgO2.js +0 -1
  214. package/.output/public/_nuxt/BOt2SP4z.js +0 -1
  215. package/.output/public/_nuxt/BP-NyKVG.js +0 -18
  216. package/.output/public/_nuxt/BXxH0UQE.js +0 -1
  217. package/.output/public/_nuxt/BsROmY89.js +0 -1
  218. package/.output/public/_nuxt/ClILjvWH.js +0 -1
  219. package/.output/public/_nuxt/CzOCSGLe.js +0 -1
  220. package/.output/public/_nuxt/D8qvkfyY.js +0 -1
  221. package/.output/public/_nuxt/DCn7QZ5N.js +0 -2
  222. package/.output/public/_nuxt/DS8qj8EL.js +0 -1
  223. package/.output/public/_nuxt/DUjW5Yq5.js +0 -1
  224. package/.output/public/_nuxt/Dihnimlk.js +0 -19
  225. package/.output/public/_nuxt/Dqw1lpr-.js +0 -1
  226. package/.output/public/_nuxt/Dr9v6C0f.js +0 -14
  227. package/.output/public/_nuxt/Du9ZJtnj.js +0 -1
  228. package/.output/public/_nuxt/OmpTerminalPanel.B_Pl5Ynm.css +0 -1
  229. package/.output/public/_nuxt/TownView.f-YOdXRs.css +0 -1
  230. package/.output/public/_nuxt/_id_.CM4bIgKY.css +0 -1
  231. package/.output/public/_nuxt/_id_.bNV69Dtf.css +0 -1
  232. package/.output/public/_nuxt/agents.ZD0rVdHE.css +0 -1
  233. package/.output/public/_nuxt/aml.BN8ZEW4h.css +0 -1
  234. package/.output/public/_nuxt/builds/meta/f4707884-7cf4-4a31-80d2-e3d72b73745f.json +0 -1
  235. package/.output/public/_nuxt/channel-templates.BOtahzPi.css +0 -1
  236. package/.output/public/_nuxt/daq.B0D3dPAc.css +0 -1
  237. package/.output/public/_nuxt/dcw.8Y7FqCVN.css +0 -1
  238. package/.output/public/_nuxt/pages.D7aSDlUI.css +0 -1
  239. package/.output/public/_nuxt/plugins.sb4nDGqr.css +0 -1
  240. package/.output/public/_nuxt/qr6R6Ha1.js +0 -1
  241. package/.output/public/_nuxt/settings.BTgR-NiE.css +0 -1
  242. package/.output/public/_nuxt/teams.CxnxKVVs.css +0 -1
  243. package/.output/public/_nuxt/tokens.BFY7qv4f.css +0 -1
  244. package/.output/public/_nuxt/workshop.CR_QzeAN.css +0 -1
  245. package/.output/server/chunks/build/_id_-BU1wfOID.mjs.map +0 -1
  246. package/.output/server/chunks/build/_id_-BYsEua57.mjs.map +0 -1
  247. package/.output/server/chunks/build/agents-CLQqJF2y.mjs.map +0 -1
  248. package/.output/server/chunks/build/aml-_7FdFL2p.mjs.map +0 -1
  249. package/.output/server/chunks/build/channel-templates-p6SZNjlM.mjs.map +0 -1
  250. package/.output/server/chunks/build/daq-cgyjKmJu.mjs.map +0 -1
  251. package/.output/server/chunks/build/dcw-CoTxBlAZ.mjs.map +0 -1
  252. package/.output/server/chunks/build/pages-DFxjn9Xa.mjs.map +0 -1
  253. package/.output/server/chunks/build/plugins-lGlUr1lj.mjs.map +0 -1
  254. package/.output/server/chunks/build/settings-Ddd1qx2Z.mjs.map +0 -1
  255. package/.output/server/chunks/build/teams-MEDLZdMn.mjs.map +0 -1
  256. package/.output/server/chunks/build/tokens-C7fTM5C2.mjs.map +0 -1
  257. package/.output/server/chunks/build/town-qMPql9Se.mjs.map +0 -1
  258. package/.output/server/chunks/build/useDaqStream-CIBaiGAl.mjs.map +0 -1
  259. package/.output/server/chunks/build/useDcwStream-CBbiYnWe.mjs.map +0 -1
  260. package/.output/server/chunks/build/workshop-BL5bhfs0.mjs.map +0 -1
  261. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.continue.json +0 -1
  262. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.json +0 -1
  263. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/054bb4bc4e4217a2ab0b0c6b663747214a9af464f5568ea60e784704e340bb0f.source +0 -153
  264. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/0554197c3d2bac203a1f5c48a5d52495d1336db1bd7aa4f4c19875810363e684.source +0 -153
  265. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/05c203d12a954fffba942e1d626e3f5fec05b18a5aef2bac003b7884a4b77406.source +0 -431
  266. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/145a6e6ba811af35aed31e0cc3211f53706a14980fa069ee9e3c1591139f96f0.source +0 -180
  267. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/1ae0fb281f97899c025e368ca73f41349b01fb5f85b19e08d7ebccff49095ed5.source +0 -112
  268. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/20ee9967aa0541c516db7575bdd4a1a745939bc7016bd10d7635903113edb8ec.source +0 -227
  269. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/233751843aeba9d4c5263f275b8102de00443c06f286918cbd23e0b6729e01aa.source +0 -131
  270. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/263c2e05b425e5c322e60c6475279f963bab3a873eb521b21df7fec935a46597.source +0 -160
  271. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/2ac5eaac28eaaee2178c4b32014df8e732f9dd432a285a872f5b7f31c1395fa4.source +0 -157
  272. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/33a0db0d2d95d2c11d0720090458e5fba1425376f5ceb5b422d1d3471be3226b.source +0 -348
  273. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/359e474ae83db35e4615d3728de6bf694b64d4dce9b536730a3b6518f9c0494a.source +0 -296
  274. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/37a4c3c31c4b70f6b719c53d1e9c4fcba603f31adfdd11bb6ef9f0d094923c56.source +0 -285
  275. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/461feca1c14a695eb8b0f17a6f95fe97eeceabc0510faaea4ba6d25bde147d8d.source +0 -217
  276. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/4cfadbda8591f29d5e1e230dc000e701b756e850441b3900fb596a4d2f6e98c2.source +0 -301
  277. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/50ca2810cf0b248c96948994c0c404531bbad6e553166b6816b3b03bfa0f75d2.source +0 -151
  278. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/52d9e8cb591a9ae86e238c3620a610cd386717bee222c0f37b25b2ac7e523dc4.source +0 -135
  279. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/6c87daafa4c006560a954636a97333f6123153c9d34d96203f7ee3a14e556357.source +0 -156
  280. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/77bc47854b577900621cacf1697f81fa2bc005af129d37614a97a3441c08f99f.source +0 -72
  281. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/7bbb789d3a527817118cf8399ed1861d6a962ade10878fd07223435d333a7089.source +0 -469
  282. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/86b7c1daafc8b60ba9982dde5bf1bcc74265709483c176e71f23ec6fc267451f.source +0 -259
  283. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/8df66d62bd41984d0970e8236882080c5085ac937d07a29779463d6a03b37c76.source +0 -97
  284. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/9962f2d1b3a85137bd40cc835725600b39f89ee02a27c06b2e0402e1eafde115.source +0 -277
  285. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a1090ea066b792cb201739f4994e37bf7c12f52e805239a1eab87f18a537f266.source +0 -171
  286. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/a5241091650134d0919897e086a606a3846c8b2b54f8b4c84a8696c145ac3e9e.source +0 -425
  287. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/af19fa4c6e34d5540028be4b17600161283af3a2a2dfc61a3fdc0834436a0c14.source +0 -99
  288. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3713d78e2b2f93905ff6be8d58a8d0a2f42dea322eb67c987fda22ff6a084d5.source +0 -325
  289. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/b3849943c3aff102d1af815631fc843a2a52c17646a4b04696ece323e483bbec.source +0 -332
  290. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/bac735a3803a6650b7f1eb8f587e6dc5c68ea055000c3c99a11789438b78e837.source +0 -43
  291. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d32c24d61eb8b33c73e5a8fc7e4dc7ef437aed238ee4371c2b00617e6104090a.source +0 -154
  292. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/d5170dc9a9879fda04fdf91d8a110d4efb6787ee38dda596d4da899883d36a72.source +0 -531
  293. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/dc59bcd7bb397be63ba2f2c3fec23f3782dcb17d2d75a9981eeced761f33eb32.source +0 -439
  294. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/eb5ff8cf66b92aec7bf6726781d8df74faa2b030c3aaac17d6b00c1fc04c9b32.source +0 -323
  295. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f10615a6fae18436e70d1201b2d44fdae3174a3aa7bb4db97dea1b3ed291d721.source +0 -433
  296. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f36d3e271668bc1260c2823542d22dbf1d0f7041ff16b1ac175bce2256e582ca.source +0 -280
  297. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/f94449380af09f31ac352152007146a75cc80bae8d6411ffe57b2c56f933b0ff.source +0 -117
  298. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/fe4dfd81178fd6b648335f6405d9ede71319aebde796008e50db21f8adf44c99.source +0 -160
  299. package/scripts/.mimosa/hook-state/sess_aeaecb58-8833-4b83-b93c-050467d21e03.mtxwtxme-61028-1f4519fbc4.baseline/ffb4e3aa548cfdadabaa44ab599f9b6a3ca6288176a2cc7a4b2fc2a12b5fb848.source +0 -101
  300. package/scripts/.mimosa/hook-status/sess_aeaecb58-8833-4b83-b93c-050467d21e03-d944d71bb3.json +0 -14
  301. package/scripts/_dbg-audit-all-pages.mjs +0 -43
  302. package/scripts/_dbg-daq-frames-e2e.mjs +0 -118
  303. package/scripts/_dbg-daq-rowstyle-verify.mjs +0 -112
  304. package/scripts/_dbg-hitl-timeout-e2e.mjs +0 -93
  305. package/scripts/_dbg-live-line-e2e.mjs +0 -279
  306. package/scripts/_dbg-minimal-omp.mjs +0 -77
  307. package/scripts/_dbg-mode-nav.mjs +0 -173
  308. package/scripts/_dbg-real-scenario-timeline.log +0 -55
  309. package/scripts/_dbg-team-repro.mjs +0 -76
  310. package/scripts/_dbg-town-agents-probe.mjs +0 -60
  311. package/scripts/_dbg-visual-acceptance.mjs +0 -63
  312. package/scripts/_townview_style.css +0 -1185
  313. package/scripts/_townview_template.html +0 -1215
  314. package/server/data/agent-node-bindings.json +0 -554
  315. package/server/data/daq-templates.json +0 -16
  316. package/server/data/daqs.json +0 -7464
  317. package/server/data/dcw-lines.json +0 -1787
  318. package/server/data/dcw-products.json +0 -1626
  319. package/server/data/dcw-recipes.json +0 -4672
  320. package/server/data/dcw-rollback.json +0 -20754
  321. package/server/data/dcw-runs.json +0 -6354
  322. package/server/data/dcw-templates.json +0 -146
  323. package/server/data/dcw-writes.json +0 -15650
  324. package/server/data/dcws.json +0 -9033
  325. package/server/data/device-twins.json +0 -133
  326. package/server/data/line-runs.json +0 -322
  327. package/server/data/scene-layouts.json +0 -277
@@ -5,12 +5,13 @@ import { a as apiErrorMessage } from './api-error-dul30BYQ.mjs';
5
5
  import { u as useEntitiesStore, a as useWorkshopWs } from './useWorkshopWs-C_I7q9As.mjs';
6
6
  import { s as setInterval, n as nowLocalIso } from './useLocalTime-9a4B-aHv.mjs';
7
7
  import { u as useTownBus } from './useTownBus-D9SoIsAN.mjs';
8
- import { u as useDcwStream } from './useDcwStream-CBbiYnWe.mjs';
9
- import { u as useDaqStream } from './useDaqStream-CIBaiGAl.mjs';
8
+ import { u as useDcwStream } from './useDcwStream-UPiX-3iO.mjs';
9
+ import { u as useDaqStream } from './useDaqStream-DfCFpb3p.mjs';
10
10
  import { u as useDeviceTwins } from './useDeviceTwins-Yko6nNPF.mjs';
11
+ import { c as catalogTplName, t as townModelName, a as townModelHint } from './builtin-catalog-edpDcgfL.mjs';
11
12
  import { shallowRef, ref, computed, toValue, watch, nextTick, defineComponent, reactive, mergeProps, unref, readonly, getCurrentScope, onScopeDispose, getCurrentInstance, toRef, customRef, useSSRContext } from 'vue';
12
13
  import { ssrRenderAttrs, ssrRenderClass, ssrInterpolate, ssrRenderAttr, ssrIncludeBooleanAttr, ssrRenderComponent, ssrRenderList, ssrRenderStyle, ssrLooseContain, ssrLooseEqual } from 'vue/server-renderer';
13
- import { bt as DAQ_TEMPLATES } from '../_/nitro.mjs';
14
+ import { bu as DAQ_TEMPLATES } from '../_/nitro.mjs';
14
15
  import * as THREE from 'three';
15
16
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
16
17
  import { RoomEnvironment } from 'three/examples/jsm/environments/RoomEnvironment.js';
@@ -627,8 +628,8 @@ var AssetLibrary_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
627
628
  const deletingId = ref("");
628
629
  const deleteMsg = ref("");
629
630
  return (_ctx, _push, _parent, _attrs) => {
630
- _push(`<aside${ssrRenderAttrs(mergeProps({ class: "asset-lib" }, _attrs))} data-v-3d6a30ed><div class="lib-head" data-v-3d6a30ed><span class="head-title" data-v-3d6a30ed>${ssrInterpolate(_ctx.$t("assetLibrary.k7la4x5001"))}</span><span class="head-hint" data-v-3d6a30ed>${ssrInterpolate(_ctx.$t("assetLibrary.kulif5b002"))}</span></div><div class="${ssrRenderClass([{ drop: unref(dropActive) }, "upload-box"])}" data-v-3d6a30ed><label class="upload-row" data-v-3d6a30ed><input type="file" accept=".glb,.gltf,.obj,.fbx" class="file-input" data-v-3d6a30ed><span class="upload-name" data-v-3d6a30ed><span class="i-tabler-plus upload-ico" data-v-3d6a30ed></span> ${ssrInterpolate(unref(uploadFile)?.name || _ctx.$t("assetLibrary.k1iiort6010"))}</span></label>`);
631
- if (unref(dropActive)) _push(`<span class="drop-hint" data-v-3d6a30ed><span class="i-tabler-download" data-v-3d6a30ed></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k5hg6jq003"))}</span>`);
631
+ _push(`<aside${ssrRenderAttrs(mergeProps({ class: "asset-lib" }, _attrs))} data-v-f9b68f56><div class="lib-head" data-v-f9b68f56><span class="head-title" data-v-f9b68f56>${ssrInterpolate(_ctx.$t("assetLibrary.k7la4x5001"))}</span><span class="head-hint" data-v-f9b68f56>${ssrInterpolate(_ctx.$t("assetLibrary.kulif5b002"))}</span></div><div class="${ssrRenderClass([{ drop: unref(dropActive) }, "upload-box"])}" data-v-f9b68f56><label class="upload-row" data-v-f9b68f56><input type="file" accept=".glb,.gltf,.obj,.fbx" class="file-input" data-v-f9b68f56><span class="upload-name" data-v-f9b68f56><span class="i-tabler-plus upload-ico" data-v-f9b68f56></span> ${ssrInterpolate(unref(uploadFile)?.name || _ctx.$t("assetLibrary.k1iiort6010"))}</span></label>`);
632
+ if (unref(dropActive)) _push(`<span class="drop-hint" data-v-f9b68f56><span class="i-tabler-download" data-v-f9b68f56></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k5hg6jq003"))}</span>`);
632
633
  else _push(`<!---->`);
633
634
  if (unref(uploadFile)) {
634
635
  _push(`<!--[-->`);
@@ -636,31 +637,31 @@ var AssetLibrary_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
636
637
  "local-file": unref(uploadFile),
637
638
  height: 92
638
639
  }, null, _parent));
639
- else _push(`<span class="upload-file-tag" data-v-3d6a30ed>${ssrInterpolate(unref(uploadFile).name)} (${ssrInterpolate(_ctx.$t("assetLibrary.k1xz5wvk009"))}</span>`);
640
- _push(`<div class="upload-actions" data-v-3d6a30ed><button class="upload-btn go"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-3d6a30ed>${ssrInterpolate(unref(uploading) ? _ctx.$t("assetLibrary.k1ar7n8i005") : _ctx.$t("assetLibrary.k1hhga4h014"))}</button><button class="upload-btn"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-3d6a30ed>${ssrInterpolate(_ctx.$t("assetLibrary.k3xdnn004"))}</button></div><!--]-->`);
641
- } else if (unref(uploading)) _push(`<span class="mini-err" data-v-3d6a30ed>${ssrInterpolate(_ctx.$t("assetLibrary.k1ar7n8i005"))}</span>`);
640
+ else _push(`<span class="upload-file-tag" data-v-f9b68f56>${ssrInterpolate(unref(uploadFile).name)} (${ssrInterpolate(_ctx.$t("assetLibrary.k1xz5wvk009"))}</span>`);
641
+ _push(`<div class="upload-actions" data-v-f9b68f56><button class="upload-btn go"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-f9b68f56>${ssrInterpolate(unref(uploading) ? _ctx.$t("assetLibrary.k1ar7n8i005") : _ctx.$t("assetLibrary.k1hhga4h014"))}</button><button class="upload-btn"${ssrIncludeBooleanAttr(unref(uploading)) ? " disabled" : ""} data-v-f9b68f56>${ssrInterpolate(_ctx.$t("assetLibrary.k3xdnn004"))}</button></div><!--]-->`);
642
+ } else if (unref(uploading)) _push(`<span class="mini-err" data-v-f9b68f56>${ssrInterpolate(_ctx.$t("assetLibrary.k1ar7n8i005"))}</span>`);
642
643
  else _push(`<!---->`);
643
- if (unref(uploadError) && !unref(uploadFile)) _push(`<span class="mini-err" data-v-3d6a30ed>${ssrInterpolate(unref(uploadError))}</span>`);
644
+ if (unref(uploadError) && !unref(uploadFile)) _push(`<span class="mini-err" data-v-f9b68f56>${ssrInterpolate(unref(uploadError))}</span>`);
644
645
  else _push(`<!---->`);
645
- _push(`</div><div class="lib-grid" data-v-3d6a30ed><!--[-->`);
646
+ _push(`</div><div class="lib-grid" data-v-f9b68f56><!--[-->`);
646
647
  ssrRenderList(unref(deviceModels), (m) => {
647
- _push(`<div class="model-card"${ssrRenderAttr("data-model-id", m.id)} draggable="true"${ssrRenderAttr("title", m.hint || _ctx.$t("assetLibrary.katn7lo015", { p0: m.name }))} data-v-3d6a30ed>`);
648
+ _push(`<div class="model-card"${ssrRenderAttr("data-model-id", m.id)} draggable="true"${ssrRenderAttr("title", ("townModelHint" in _ctx ? _ctx.townModelHint : unref(townModelHint))(unref(t), m) || _ctx.$t("assetLibrary.katn7lo015", { p0: ("townModelName" in _ctx ? _ctx.townModelName : unref(townModelName))(unref(t), m) }))} data-v-f9b68f56>`);
648
649
  if (isPreviewable(m.file)) _push(ssrRenderComponent(ModelPreview3D_default, {
649
650
  file: m.file,
650
651
  height: 76
651
652
  }, null, _parent));
652
- else _push(`<span class="model-img glb dev" data-v-3d6a30ed><span class="i-tabler-cpu glb-cube" aria-hidden="true" data-v-3d6a30ed></span></span>`);
653
- _push(`<span class="model-name" data-v-3d6a30ed>${ssrInterpolate(m.name)}</span><span class="model-badge" data-v-3d6a30ed>${ssrInterpolate(_ctx.$t("assetLibrary.k1n32zs0006"))}</span><div class="card-actions" data-v-3d6a30ed>`);
654
- if (m.file.includes("/assets/game/devices/")) _push(`<button class="card-btn danger"${ssrIncludeBooleanAttr(unref(deletingId) === m.id) ? " disabled" : ""} data-v-3d6a30ed>${ssrInterpolate(unref(deletingId) === m.id ? "…" : _ctx.$t("assetLibrary.k498l011"))}</button>`);
653
+ else _push(`<span class="model-img glb dev" data-v-f9b68f56><span class="i-tabler-cpu glb-cube" aria-hidden="true" data-v-f9b68f56></span></span>`);
654
+ _push(`<span class="model-name" data-v-f9b68f56>${ssrInterpolate(("townModelName" in _ctx ? _ctx.townModelName : unref(townModelName))(unref(t), m))}</span><span class="model-badge" data-v-f9b68f56>${ssrInterpolate(_ctx.$t("assetLibrary.k1n32zs0006"))}</span><div class="card-actions" data-v-f9b68f56>`);
655
+ if (m.file.includes("/assets/game/devices/")) _push(`<button class="card-btn danger"${ssrIncludeBooleanAttr(unref(deletingId) === m.id) ? " disabled" : ""} data-v-f9b68f56>${ssrInterpolate(unref(deletingId) === m.id ? "…" : _ctx.$t("assetLibrary.k498l011"))}</button>`);
655
656
  else _push(`<!---->`);
656
657
  _push(`</div></div>`);
657
658
  });
658
659
  _push(`<!--]-->`);
659
- if (!unref(assets).loaded) _push(`<div class="lib-note" data-v-3d6a30ed><span class="loading-dot" data-v-3d6a30ed></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k1kq2tmi007"))}</div>`);
660
- else if (unref(deviceModels).length === 0) _push(`<div class="lib-note" data-v-3d6a30ed>${ssrInterpolate(_ctx.$t("assetLibrary.k15527e1008"))}</div>`);
660
+ if (!unref(assets).loaded) _push(`<div class="lib-note" data-v-f9b68f56><span class="loading-dot" data-v-f9b68f56></span> ${ssrInterpolate(_ctx.$t("assetLibrary.k1kq2tmi007"))}</div>`);
661
+ else if (unref(deviceModels).length === 0) _push(`<div class="lib-note" data-v-f9b68f56>${ssrInterpolate(_ctx.$t("assetLibrary.k15527e1008"))}</div>`);
661
662
  else _push(`<!---->`);
662
663
  _push(`</div>`);
663
- if (unref(deleteMsg)) _push(`<span class="mini-msg" data-v-3d6a30ed>${ssrInterpolate(unref(deleteMsg))}</span>`);
664
+ if (unref(deleteMsg)) _push(`<span class="mini-msg" data-v-f9b68f56>${ssrInterpolate(unref(deleteMsg))}</span>`);
664
665
  else _push(`<!---->`);
665
666
  _push(`</aside>`);
666
667
  };
@@ -674,7 +675,7 @@ AssetLibrary_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) =>
674
675
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/AssetLibrary.vue");
675
676
  return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0;
676
677
  };
677
- var AssetLibrary_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AssetLibrary_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-3d6a30ed"]]), { __name: "WorkshopAssetLibrary" });
678
+ var AssetLibrary_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(AssetLibrary_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f9b68f56"]]), { __name: "WorkshopAssetLibrary" });
678
679
  //#endregion
679
680
  //#region app/components/workshop/DaqTemplateIcon.vue?vue&type=script&setup=true&lang.ts
680
681
  var DaqTemplateIcon_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -767,44 +768,44 @@ var DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
767
768
  const dcwErrs = reactive({});
768
769
  const dcwBusy = ref("");
769
770
  return (_ctx, _push, _parent, _attrs) => {
770
- _push(`<aside${ssrRenderAttrs(mergeProps({ class: "twin-panel" }, _attrs))} data-v-37ad3127><div class="twin-head" data-v-37ad3127><span class="twin-kicker" data-v-37ad3127>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k7k6evr002"))}</span><span class="twin-count" data-v-37ad3127>${ssrInterpolate(unref(twins).twins.length)}</span></div>`);
771
- if (unref(twins).error) _push(`<div class="twin-error" data-v-37ad3127>${ssrInterpolate(unref(twins).error)}</div>`);
771
+ _push(`<aside${ssrRenderAttrs(mergeProps({ class: "twin-panel" }, _attrs))} data-v-4878cdde><div class="twin-head" data-v-4878cdde><span class="twin-kicker" data-v-4878cdde>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k7k6evr002"))}</span><span class="twin-count" data-v-4878cdde>${ssrInterpolate(unref(twins).twins.length)}</span></div>`);
772
+ if (unref(twins).error) _push(`<div class="twin-error" data-v-4878cdde>${ssrInterpolate(unref(twins).error)}</div>`);
772
773
  else _push(`<!---->`);
773
- if (!unref(twins).loaded) _push(`<div class="twin-empty" data-v-37ad3127>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kkw7sn5003"))}</div>`);
774
- else if (unref(twins).twins.length === 0) _push(`<div class="twin-empty" data-v-37ad3127><div class="twin-empty-frame" data-v-37ad3127><div class="twin-empty-title" data-v-37ad3127>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k13y2qmg004"))}</div><div class="twin-empty-sub" data-v-37ad3127>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kotf23l005"))}</div></div></div>`);
774
+ if (!unref(twins).loaded) _push(`<div class="twin-empty" data-v-4878cdde>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kkw7sn5003"))}</div>`);
775
+ else if (unref(twins).twins.length === 0) _push(`<div class="twin-empty" data-v-4878cdde><div class="twin-empty-frame" data-v-4878cdde><div class="twin-empty-title" data-v-4878cdde>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k13y2qmg004"))}</div><div class="twin-empty-sub" data-v-4878cdde>${ssrInterpolate(_ctx.$t("deviceTwinPanel.kotf23l005"))}</div></div></div>`);
775
776
  else {
776
- _push(`<div class="twin-list" data-v-37ad3127><!--[-->`);
777
+ _push(`<div class="twin-list" data-v-4878cdde><!--[-->`);
777
778
  ssrRenderList(unref(twins).twins, (tw) => {
778
- _push(`<button class="${ssrRenderClass([{ daq: isDaq(tw) }, "twin-card"])}" type="button" data-v-37ad3127><div class="twin-row" data-v-37ad3127><span class="twin-model-tag" data-v-37ad3127>${ssrInterpolate(modelTag(tw.modelRef || tw.name))}</span><div class="twin-idbar" data-v-37ad3127><span class="twin-name" data-v-37ad3127>${ssrInterpolate(tw.name)}</span><span class="twin-code" data-v-37ad3127>${ssrInterpolate(isDaq(tw) ? "DAQ" : devNo(tw.id))}</span></div><button class="${ssrRenderClass([{ armed: unref(armedId) === tw.id }, "twin-del"])}"${ssrIncludeBooleanAttr(unref(busyId) === tw.id) ? " disabled" : ""}${ssrRenderAttr("title", unref(armedId) === tw.id ? "再次点击确认删除该设备实例" : "删除该设备实例")} data-v-37ad3127>${ssrInterpolate(unref(armedId) === tw.id ? _ctx.$t("deviceTwinPanel.k44653007") : "✕")}</button><span class="${ssrRenderClass([`s-${tw.state}`, "twin-state"])}" data-v-37ad3127><i class="twin-state-dot" style="${ssrRenderStyle({ background: stateColor[tw.state] || "var(--hud-dim)" })}" data-v-37ad3127></i> ${ssrInterpolate(stateLabel[tw.state] || tw.state)}</span></div>`);
779
+ _push(`<button class="${ssrRenderClass([{ daq: isDaq(tw) }, "twin-card"])}" type="button" data-v-4878cdde><div class="twin-row" data-v-4878cdde><span class="twin-model-tag" data-v-4878cdde>${ssrInterpolate(modelTag(tw.modelRef || tw.name))}</span><div class="twin-idbar" data-v-4878cdde><span class="twin-name" data-v-4878cdde>${ssrInterpolate(tw.name)}</span><span class="twin-code" data-v-4878cdde>${ssrInterpolate(isDaq(tw) ? "DAQ" : devNo(tw.id))}</span></div><button class="${ssrRenderClass([{ armed: unref(armedId) === tw.id }, "twin-del"])}"${ssrIncludeBooleanAttr(unref(busyId) === tw.id) ? " disabled" : ""}${ssrRenderAttr("title", unref(armedId) === tw.id ? _ctx.$t("deviceTwinPanel.armDelete") : _ctx.$t("deviceTwinPanel.delDevice"))} data-v-4878cdde>${ssrInterpolate(unref(armedId) === tw.id ? _ctx.$t("deviceTwinPanel.k44653007") : "✕")}</button><span class="${ssrRenderClass([`s-${tw.state}`, "twin-state"])}" data-v-4878cdde><i class="twin-state-dot" style="${ssrRenderStyle({ background: stateColor[tw.state] || "var(--hud-dim)" })}" data-v-4878cdde></i> ${ssrInterpolate(stateLabel[tw.state] || tw.state)}</span></div>`);
779
780
  if (Object.keys(tw.telemetry).length) {
780
- _push(`<div class="twin-tele" data-v-37ad3127><!--[-->`);
781
+ _push(`<div class="twin-tele" data-v-4878cdde><!--[-->`);
781
782
  ssrRenderList(tw.telemetry, (v, k) => {
782
- _push(`<span class="tele-item" data-v-37ad3127><em data-v-37ad3127>${ssrInterpolate(k)}</em><b data-v-37ad3127>${ssrInterpolate(fmt(v))}</b></span>`);
783
+ _push(`<span class="tele-item" data-v-4878cdde><em data-v-4878cdde>${ssrInterpolate(k)}</em><b data-v-4878cdde>${ssrInterpolate(fmt(v))}</b></span>`);
783
784
  });
784
785
  _push(`<!--]--></div>`);
785
786
  } else _push(`<!---->`);
786
787
  if (__props.daqLive?.[tw.id]?.length) {
787
- _push(`<div class="twin-daq" data-v-37ad3127><!--[-->`);
788
+ _push(`<div class="twin-daq" data-v-4878cdde><!--[-->`);
788
789
  ssrRenderList(__props.daqLive[tw.id], (d, i) => {
789
- _push(`<span class="${ssrRenderClass([{ alarm: d.alarm }, "daq-item"])}" data-v-37ad3127><em data-v-37ad3127>${ssrInterpolate(d.ch)}</em><b data-v-37ad3127>${ssrInterpolate(d.value)}<i data-v-37ad3127>${ssrInterpolate(d.unit)}</i></b></span>`);
790
+ _push(`<span class="${ssrRenderClass([{ alarm: d.alarm }, "daq-item"])}" data-v-4878cdde><em data-v-4878cdde>${ssrInterpolate(d.ch)}</em><b data-v-4878cdde>${ssrInterpolate(d.value)}<i data-v-4878cdde>${ssrInterpolate(d.unit)}</i></b></span>`);
790
791
  });
791
792
  _push(`<!--]--></div>`);
792
793
  } else _push(`<!---->`);
793
794
  if (__props.dcwLive?.[tw.id]?.length) {
794
- _push(`<div class="twin-dcw" data-v-37ad3127><!--[-->`);
795
+ _push(`<div class="twin-dcw" data-v-4878cdde><!--[-->`);
795
796
  ssrRenderList(__props.dcwLive[tw.id], (r) => {
796
- _push(`<div class="dcw-item" data-v-37ad3127><div class="dcw-head" data-v-37ad3127><em data-v-37ad3127>${ssrInterpolate(r.ch)}`);
797
- if (r.src === "recipe") _push(`<i class="dcw-src" data-v-37ad3127>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k48grv006"))}</i>`);
797
+ _push(`<div class="dcw-item" data-v-4878cdde><div class="dcw-head" data-v-4878cdde><em data-v-4878cdde>${ssrInterpolate(r.ch)}`);
798
+ if (r.src === "recipe") _push(`<i class="dcw-src" data-v-4878cdde>${ssrInterpolate(_ctx.$t("deviceTwinPanel.k48grv006"))}</i>`);
798
799
  else _push(`<!---->`);
799
- _push(`</em><b class="dcw-set" data-v-37ad3127>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}<i data-v-37ad3127>${ssrInterpolate(r.unit)}</i></b></div>`);
800
+ _push(`</em><b class="dcw-set" data-v-4878cdde>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}<i data-v-4878cdde>${ssrInterpolate(r.unit)}</i></b></div>`);
800
801
  if (r.readValue != null || r.lastReadAt) {
801
- _push(`<div class="dcw-act"${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k9r7d4e030"))} data-v-37ad3127><em data-v-37ad3127>ACT</em><b data-v-37ad3127>${ssrInterpolate(r.readValue != null ? r.readValue.toFixed(r.decimals) : "--")}<i data-v-37ad3127>${ssrInterpolate(r.unit)}</i></b>`);
802
- if (r.lastReadAt) _push(`<i class="dcw-act-at" data-v-37ad3127>${ssrInterpolate(r.lastReadAt.slice(11, 19))}</i>`);
802
+ _push(`<div class="dcw-act"${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k9r7d4e030"))} data-v-4878cdde><em data-v-4878cdde>ACT</em><b data-v-4878cdde>${ssrInterpolate(r.readValue != null ? r.readValue.toFixed(r.decimals) : "--")}<i data-v-4878cdde>${ssrInterpolate(r.unit)}</i></b>`);
803
+ if (r.lastReadAt) _push(`<i class="dcw-act-at" data-v-4878cdde>${ssrInterpolate(r.lastReadAt.slice(11, 19))}</i>`);
803
804
  else _push(`<!---->`);
804
805
  _push(`</div>`);
805
806
  } else _push(`<!---->`);
806
- _push(`<div class="dcw-win" data-v-37ad3127><span${ssrRenderAttr("title", r.src === "recipe" ? "当前运行配方工艺窗口" : "节点全局量程")} data-v-37ad3127>${ssrInterpolate(dcwWinText(r))}</span></div><div class="dcw-ctrl" data-v-37ad3127><input${ssrRenderAttr("value", unref(dcwDrafts)[r.id])} type="number" class="ctrl-input"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("min", Number.isFinite(r.lo) ? r.lo : void 0)}${ssrRenderAttr("max", Number.isFinite(r.hi) ? r.hi : void 0)}${ssrRenderAttr("placeholder", `${Number.isFinite(r.lo) ? r.lo : ""} ~ ${Number.isFinite(r.hi) ? r.hi : ""}`)} data-v-37ad3127><button class="ctrl-btn dcw-send"${ssrIncludeBooleanAttr(unref(dcwDrafts)[r.id] == null || unref(dcwDrafts)[r.id] === "" || unref(dcwBusy) === r.id) ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k1j04u8001"))} data-v-37ad3127>${ssrInterpolate(unref(dcwBusy) === r.id ? "···" : "SET")}</button></div>`);
807
- if (unref(dcwErrs)[r.id]) _push(`<small class="dcw-err" data-v-37ad3127>${ssrInterpolate(unref(dcwErrs)[r.id])}</small>`);
807
+ _push(`<div class="dcw-win" data-v-4878cdde><span${ssrRenderAttr("title", r.src === "recipe" ? _ctx.$t("deviceTwinPanel.winRecipe") : _ctx.$t("deviceTwinPanel.winRange"))} data-v-4878cdde>${ssrInterpolate(dcwWinText(r))}</span></div><div class="dcw-ctrl" data-v-4878cdde><input${ssrRenderAttr("value", unref(dcwDrafts)[r.id])} type="number" class="ctrl-input"${ssrRenderAttr("step", 10 ** -r.decimals)}${ssrRenderAttr("min", Number.isFinite(r.lo) ? r.lo : void 0)}${ssrRenderAttr("max", Number.isFinite(r.hi) ? r.hi : void 0)}${ssrRenderAttr("placeholder", `${Number.isFinite(r.lo) ? r.lo : ""} ~ ${Number.isFinite(r.hi) ? r.hi : ""}`)} data-v-4878cdde><button class="ctrl-btn dcw-send"${ssrIncludeBooleanAttr(unref(dcwDrafts)[r.id] == null || unref(dcwDrafts)[r.id] === "" || unref(dcwBusy) === r.id) ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("deviceTwinPanel.k1j04u8001"))} data-v-4878cdde>${ssrInterpolate(unref(dcwBusy) === r.id ? "···" : "SET")}</button></div>`);
808
+ if (unref(dcwErrs)[r.id]) _push(`<small class="dcw-err" data-v-4878cdde>${ssrInterpolate(unref(dcwErrs)[r.id])}</small>`);
808
809
  else _push(`<!---->`);
809
810
  _push(`</div>`);
810
811
  });
@@ -814,7 +815,7 @@ var DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
814
815
  });
815
816
  _push(`<!--]--></div>`);
816
817
  }
817
- if (unref(ctrlMsg)) _push(`<span class="twin-err" data-v-37ad3127>${ssrInterpolate(unref(ctrlMsg))}</span>`);
818
+ if (unref(ctrlMsg)) _push(`<span class="twin-err" data-v-4878cdde>${ssrInterpolate(unref(ctrlMsg))}</span>`);
818
819
  else _push(`<!---->`);
819
820
  _push(`</aside>`);
820
821
  };
@@ -828,7 +829,7 @@ DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx)
828
829
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/DeviceTwinPanel.vue");
829
830
  return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
830
831
  };
831
- var DeviceTwinPanel_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-37ad3127"]]), { __name: "WorkshopDeviceTwinPanel" });
832
+ var DeviceTwinPanel_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(DeviceTwinPanel_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-4878cdde"]]), { __name: "WorkshopDeviceTwinPanel" });
832
833
  //#endregion
833
834
  //#region app/composables/workshop/useSceneLayouts.ts
834
835
  /**
@@ -1638,29 +1639,29 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
1638
1639
  /** 智控流单例(写控制;与数采对称:模板目录/节点/场景/绑定) */
1639
1640
  const dcw = useDcwStream();
1640
1641
  /** 智控模板目录(server 权威;与 daqTemplates 同构投影) */
1641
- const dcwTemplates = reactive(dcw.templates.map((t) => ({
1642
- id: t.key,
1643
- name: t.name,
1644
- code: t.code,
1645
- ch: t.ch,
1646
- unit: t.unit,
1647
- min: t.min,
1648
- max: t.max,
1649
- decimals: t.decimals,
1650
- icon: t.icon
1642
+ const dcwTemplates = reactive(dcw.templates.map((tpl) => ({
1643
+ id: tpl.key,
1644
+ name: catalogTplName(t, tpl),
1645
+ code: tpl.code,
1646
+ ch: tpl.ch,
1647
+ unit: tpl.unit,
1648
+ min: tpl.min,
1649
+ max: tpl.max,
1650
+ decimals: tpl.decimals,
1651
+ icon: tpl.icon
1651
1652
  })));
1652
1653
  watch(() => dcw.templates, (list) => {
1653
1654
  if (!list?.length) return;
1654
- dcwTemplates.splice(0, dcwTemplates.length, ...list.map((t) => ({
1655
- id: t.key,
1656
- name: t.name,
1657
- code: t.code,
1658
- ch: t.ch,
1659
- unit: t.unit,
1660
- min: t.min,
1661
- max: t.max,
1662
- decimals: t.decimals,
1663
- icon: t.icon
1655
+ dcwTemplates.splice(0, dcwTemplates.length, ...list.map((tpl) => ({
1656
+ id: tpl.key,
1657
+ name: catalogTplName(t, tpl),
1658
+ code: tpl.code,
1659
+ ch: tpl.ch,
1660
+ unit: tpl.unit,
1661
+ min: tpl.min,
1662
+ max: tpl.max,
1663
+ decimals: tpl.decimals,
1664
+ icon: tpl.icon
1664
1665
  })));
1665
1666
  }, {
1666
1667
  immediate: true,
@@ -1703,33 +1704,33 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
1703
1704
  return "running";
1704
1705
  }
1705
1706
  /** 左轨模板目录(server 权威:内置 + 自定义随 REST/WS 收敛;字段名兼容既有轨道模板标记) */
1706
- const daqTemplates = reactive(DAQ_TEMPLATES.map((t) => ({
1707
- id: t.key,
1708
- name: t.name,
1709
- code: t.code,
1710
- ch: t.ch,
1711
- unit: t.unit,
1712
- base: t.base,
1713
- amp: t.amp,
1714
- min: t.min,
1715
- max: t.max,
1716
- decimals: t.decimals,
1717
- icon: t.icon
1707
+ const daqTemplates = reactive(DAQ_TEMPLATES.map((tpl) => ({
1708
+ id: tpl.key,
1709
+ name: catalogTplName(t, tpl),
1710
+ code: tpl.code,
1711
+ ch: tpl.ch,
1712
+ unit: tpl.unit,
1713
+ base: tpl.base,
1714
+ amp: tpl.amp,
1715
+ min: tpl.min,
1716
+ max: tpl.max,
1717
+ decimals: tpl.decimals,
1718
+ icon: tpl.icon
1718
1719
  })));
1719
1720
  watch(() => daq.templates, (list) => {
1720
1721
  if (!list?.length) return;
1721
- daqTemplates.splice(0, daqTemplates.length, ...list.map((t) => ({
1722
- id: t.key,
1723
- name: t.name,
1724
- code: t.code,
1725
- ch: t.ch,
1726
- unit: t.unit,
1727
- base: t.base,
1728
- amp: t.amp,
1729
- min: t.min,
1730
- max: t.max,
1731
- decimals: t.decimals,
1732
- icon: t.icon
1722
+ daqTemplates.splice(0, daqTemplates.length, ...list.map((tpl) => ({
1723
+ id: tpl.key,
1724
+ name: catalogTplName(t, tpl),
1725
+ code: tpl.code,
1726
+ ch: tpl.ch,
1727
+ unit: tpl.unit,
1728
+ base: tpl.base,
1729
+ amp: tpl.amp,
1730
+ min: tpl.min,
1731
+ max: tpl.max,
1732
+ decimals: tpl.decimals,
1733
+ icon: tpl.icon
1733
1734
  })));
1734
1735
  }, {
1735
1736
  immediate: true,
@@ -2373,92 +2374,92 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2373
2374
  const _component_WorkshopAssetLibrary = AssetLibrary_default;
2374
2375
  const _component_WorkshopDaqTemplateIcon = DaqTemplateIcon_default;
2375
2376
  const _component_WorkshopDeviceTwinPanel = DeviceTwinPanel_default;
2376
- _push(`<div${ssrRenderAttrs(mergeProps({ class: "town-view" }, _attrs))} data-v-3e78e101><header class="${ssrRenderClass([{ "sheet-on": unref(sheetOpen) }, "topnav"])}" data-v-3e78e101><div class="brand" data-v-3e78e101><svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-3e78e101><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-3e78e101></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-3e78e101></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-3e78e101></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-3e78e101></circle></svg><div data-v-3e78e101><div class="brand-name" data-v-3e78e101> DIGITAL <em data-v-3e78e101>TWIN</em></div><div class="brand-sub" data-v-3e78e101> AGENTWORKSHOP · ${ssrInterpolate(_ctx.$t("townView.klyi8yg127"))}</div></div></div><nav class="nav-tabs"${ssrRenderAttr("aria-label", _ctx.$t("townView.k1c9jyta001"))} data-v-3e78e101><div class="seg" data-v-3e78e101><button class="${ssrRenderClass({ on: unref(mode) === "browse" })}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k48dwh027"))}</button><button class="${ssrRenderClass({ on: unref(mode) === "edit" })}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k45eb0028"))}</button></div><button class="nav-action"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? "把全部设备的位置/朝向/缩放写入数据库" : "运行模式只读")} data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button>`);
2377
- if (unref(saveState) && unref(saveState).state !== "idle") _push(`<span class="${ssrRenderClass([`s-${unref(saveState).state}`, "save-chip"])}" data-v-3e78e101>${ssrInterpolate(unref(saveStateLabel))}</span>`);
2377
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "town-view" }, _attrs))} data-v-7027783b><header class="${ssrRenderClass([{ "sheet-on": unref(sheetOpen) }, "topnav"])}" data-v-7027783b><div class="brand" data-v-7027783b><svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-7027783b><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-7027783b></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-7027783b></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-7027783b></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-7027783b></circle></svg><div data-v-7027783b><div class="brand-name" data-v-7027783b> DIGITAL <em data-v-7027783b>TWIN</em></div><div class="brand-sub" data-v-7027783b> AGENTWORKSHOP · ${ssrInterpolate(_ctx.$t("townView.klyi8yg127"))}</div></div></div><nav class="nav-tabs"${ssrRenderAttr("aria-label", _ctx.$t("townView.k1c9jyta001"))} data-v-7027783b><div class="seg" data-v-7027783b><button class="${ssrRenderClass({ on: unref(mode) === "browse" })}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k48dwh027"))}</button><button class="${ssrRenderClass({ on: unref(mode) === "edit" })}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k45eb0028"))}</button></div><button class="nav-action"${ssrIncludeBooleanAttr(unref(mode) !== "edit") ? " disabled" : ""}${ssrRenderAttr("title", unref(mode) === "edit" ? _ctx.$t("townView.saveLayoutTip") : _ctx.$t("townView.readonlyTip"))} data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button>`);
2378
+ if (unref(saveState) && unref(saveState).state !== "idle") _push(`<span class="${ssrRenderClass([`s-${unref(saveState).state}`, "save-chip"])}" data-v-7027783b>${ssrInterpolate(unref(saveStateLabel))}</span>`);
2378
2379
  else _push(`<!---->`);
2379
- _push(`</nav><div class="nav-right" data-v-3e78e101><span class="${ssrRenderClass([{ "nav-bell-warn": unref(activeAlarmCount) > 0 }, "nav-chip mono"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1fsi3ir002"))} data-v-3e78e101>◉ ${ssrInterpolate(unref(activeAlarmCount))}</span><span class="nav-chip mono nav-fps" data-v-3e78e101>${ssrInterpolate(unref(fps))} FPS</span><div class="avatar-chip nav-user"${ssrRenderAttr("title", _ctx.$t("townView.k1demf38003"))} data-v-3e78e101><div class="avatar-fallback" data-v-3e78e101>${ssrInterpolate((unref(userStore).user?.name ?? "OP").slice(0, 2).toUpperCase())}</div><span data-v-3e78e101>${ssrInterpolate(unref(userStore).user?.name || _ctx.$t("townView.k1pub99m139"))}</span></div><button type="button" class="${ssrRenderClass([{ on: unref(sheetOpen) === "left" }, "sheet-btn"])}" aria-controls="town-rail-left"${ssrRenderAttr("aria-expanded", unref(sheetOpen) === "left" ? "true" : "false")}${ssrRenderAttr("title", _ctx.$t("townView.k1k75lzy030"))} data-v-3e78e101><svg class="sheet-ico" viewBox="0 0 24 24" aria-hidden="true" data-v-3e78e101><path d="M4 6h16M4 12h11M4 18h16" data-v-3e78e101></path></svg><span class="sheet-btn-t" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</span></button><button type="button" class="${ssrRenderClass([{ on: unref(sheetOpen) === "right" }, "sheet-btn"])}" aria-controls="town-rail-right"${ssrRenderAttr("aria-expanded", unref(sheetOpen) === "right" ? "true" : "false")}${ssrRenderAttr("title", _ctx.$t("townView.k17dkhgd112"))} data-v-3e78e101><svg class="sheet-ico" viewBox="0 0 24 24" aria-hidden="true" data-v-3e78e101><path d="M20 6H4M20 12H9M20 18H4" data-v-3e78e101></path></svg><span class="sheet-btn-t" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</span></button></div></header><div class="app" data-v-3e78e101><aside id="town-rail-left" class="${ssrRenderClass([{ "sheet-open": unref(sheetOpen) === "left" }, "rail rail-left"])}" data-v-3e78e101><div class="sheet-hd" data-v-3e78e101><span class="sheet-grip" aria-hidden="true" data-v-3e78e101></span><span class="sheet-hd-t" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</span><button type="button" class="sheet-x" aria-label="关闭" data-v-3e78e101> ✕ </button></div><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</h3><span class="panel-tag" data-v-3e78e101>${ssrInterpolate(unref(deviceModels).length)}</span></div>`);
2380
+ _push(`</nav><div class="nav-right" data-v-7027783b><span class="${ssrRenderClass([{ "nav-bell-warn": unref(activeAlarmCount) > 0 }, "nav-chip mono"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1fsi3ir002"))} data-v-7027783b>◉ ${ssrInterpolate(unref(activeAlarmCount))}</span><span class="nav-chip mono nav-fps" data-v-7027783b>${ssrInterpolate(unref(fps))} FPS</span><div class="avatar-chip nav-user"${ssrRenderAttr("title", _ctx.$t("townView.k1demf38003"))} data-v-7027783b><div class="avatar-fallback" data-v-7027783b>${ssrInterpolate((unref(userStore).user?.name ?? "OP").slice(0, 2).toUpperCase())}</div><span data-v-7027783b>${ssrInterpolate(unref(userStore).user?.name || _ctx.$t("townView.k1pub99m139"))}</span></div><button type="button" class="${ssrRenderClass([{ on: unref(sheetOpen) === "left" }, "sheet-btn"])}" aria-controls="town-rail-left"${ssrRenderAttr("aria-expanded", unref(sheetOpen) === "left" ? "true" : "false")}${ssrRenderAttr("title", _ctx.$t("townView.k1k75lzy030"))} data-v-7027783b><svg class="sheet-ico" viewBox="0 0 24 24" aria-hidden="true" data-v-7027783b><path d="M4 6h16M4 12h11M4 18h16" data-v-7027783b></path></svg><span class="sheet-btn-t" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</span></button><button type="button" class="${ssrRenderClass([{ on: unref(sheetOpen) === "right" }, "sheet-btn"])}" aria-controls="town-rail-right"${ssrRenderAttr("aria-expanded", unref(sheetOpen) === "right" ? "true" : "false")}${ssrRenderAttr("title", _ctx.$t("townView.k17dkhgd112"))} data-v-7027783b><svg class="sheet-ico" viewBox="0 0 24 24" aria-hidden="true" data-v-7027783b><path d="M20 6H4M20 12H9M20 18H4" data-v-7027783b></path></svg><span class="sheet-btn-t" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</span></button></div></header><div class="app" data-v-7027783b><aside id="town-rail-left" class="${ssrRenderClass([{ "sheet-open": unref(sheetOpen) === "left" }, "rail rail-left"])}" data-v-7027783b><div class="sheet-hd" data-v-7027783b><span class="sheet-grip" aria-hidden="true" data-v-7027783b></span><span class="sheet-hd-t" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</span><button type="button" class="sheet-x"${ssrRenderAttr("aria-label", _ctx.$t("common.close"))} data-v-7027783b> ✕ </button></div><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1k75lzy030"))}</h3><span class="panel-tag" data-v-7027783b>${ssrInterpolate(unref(deviceModels).length)}</span></div>`);
2380
2381
  _push(ssrRenderComponent(_component_WorkshopAssetLibrary, { class: "lib-embed" }, null, _parent));
2381
- _push(`</section><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2gwyas031"))}</h3><span class="panel-tag" data-v-3e78e101>${ssrInterpolate(unref(daqTwins).length)}</span></div><div class="daq-ctrl" data-v-3e78e101><button class="${ssrRenderClass([{ on: unref(daq).controller.running }, "daq-ctl-btn"])}"${ssrRenderAttr("title", unref(daq).controller.running ? "暂停全部采集:停止所有启用节点的采样(节点级启停独立)" : "恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)")} data-v-3e78e101>${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-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3xg3w032"))} <input type="number" min="200" max="60000" step="100"${ssrRenderAttr("value", unref(daq).controller.defaultIntervalMs)} data-v-3e78e101>ms </label></div><div class="daq-list" data-v-3e78e101><!--[-->`);
2382
+ _push(`</section><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2gwyas031"))}</h3><span class="panel-tag" data-v-7027783b>${ssrInterpolate(unref(daqTwins).length)}</span></div><div class="daq-ctrl" data-v-7027783b><button class="${ssrRenderClass([{ on: unref(daq).controller.running }, "daq-ctl-btn"])}"${ssrRenderAttr("title", unref(daq).controller.running ? _ctx.$t("townView.daqPauseTip") : _ctx.$t("townView.daqResumeTip"))} data-v-7027783b>${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-7027783b>${ssrInterpolate(_ctx.$t("townView.k3xg3w032"))} <input type="number" min="200" max="60000" step="100"${ssrRenderAttr("value", unref(daq).controller.defaultIntervalMs)} data-v-7027783b>ms </label></div><div class="daq-list" data-v-7027783b><!--[-->`);
2382
2383
  ssrRenderList(unref(daqTemplates), (tpl) => {
2383
- _push(`<div class="daq-group" data-v-3e78e101><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`daq:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2384
+ _push(`<div class="daq-group" data-v-7027783b><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`daq:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2384
2385
  p0: tpl.name,
2385
2386
  p1: tpl.ch,
2386
2387
  p2: tpl.min,
2387
2388
  p3: tpl.max,
2388
2389
  p4: tpl.unit
2389
- }))} data-v-3e78e101><span class="daq-caret" data-v-3e78e101>▶</span><span class="daq-ico" data-v-3e78e101>`);
2390
+ }))} data-v-7027783b><span class="daq-caret" data-v-7027783b>▶</span><span class="daq-ico" data-v-7027783b>`);
2390
2391
  _push(ssrRenderComponent(_component_WorkshopDaqTemplateIcon, {
2391
2392
  class: "daq-svg",
2392
2393
  icon: tpl.icon
2393
2394
  }, null, _parent));
2394
- _push(`</span><div class="daq-meta" data-v-3e78e101><span class="daq-name" data-v-3e78e101>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-3e78e101>${ssrInterpolate(tpl.code)}</span></div>`);
2395
- if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-3e78e101> + </button>`);
2395
+ _push(`</span><div class="daq-meta" data-v-7027783b><span class="daq-name" data-v-7027783b>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-7027783b>${ssrInterpolate(tpl.code)}</span></div>`);
2396
+ if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-7027783b> + </button>`);
2396
2397
  else _push(`<!---->`);
2397
- _push(`<span class="daq-count" data-v-3e78e101>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2398
+ _push(`<span class="daq-count" data-v-7027783b>×${ssrInterpolate(unref(daqNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2398
2399
  if (unref(treeOpen)[`daq:${tpl.id}`]) {
2399
- _push(`<div class="daq-children" data-v-3e78e101><!--[-->`);
2400
+ _push(`<div class="daq-children" data-v-7027783b><!--[-->`);
2400
2401
  ssrRenderList(unref(daqNodesByTpl).get(tpl.id) ?? [], (n) => {
2401
- _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-3e78e101><span class="${ssrRenderClass([daqLeafState(n), "node-dot"])}" data-v-3e78e101></span><div class="daq-meta" data-v-3e78e101><span class="daq-name" data-v-3e78e101>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-3e78e101><span class="node-val mono" data-v-3e78e101>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-3e78e101>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2402
- if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-3e78e101>✓</span>`);
2402
+ _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-7027783b><span class="${ssrRenderClass([daqLeafState(n), "node-dot"])}" data-v-7027783b></span><div class="daq-meta" data-v-7027783b><span class="daq-name" data-v-7027783b>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-7027783b><span class="node-val mono" data-v-7027783b>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-7027783b>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2403
+ if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-7027783b>✓</span>`);
2403
2404
  else _push(`<!---->`);
2404
2405
  _push(`</div>`);
2405
2406
  });
2406
2407
  _push(`<!--]-->`);
2407
- if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2408
+ if (!unref(daqNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2408
2409
  else _push(`<!---->`);
2409
2410
  _push(`</div>`);
2410
2411
  } else _push(`<!---->`);
2411
2412
  _push(`</div>`);
2412
2413
  });
2413
- _push(`<!--]--></div></section><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.km7ayhi033"))}</h3><span class="panel-tag" data-v-3e78e101>${ssrInterpolate(unref(dcw).nodes.length)}</span></div><div class="daq-list" data-v-3e78e101><!--[-->`);
2414
+ _push(`<!--]--></div></section><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.km7ayhi033"))}</h3><span class="panel-tag" data-v-7027783b>${ssrInterpolate(unref(dcw).nodes.length)}</span></div><div class="daq-list" data-v-7027783b><!--[-->`);
2414
2415
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2415
- _push(`<div class="daq-group" data-v-3e78e101><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`dcw:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2416
+ _push(`<div class="daq-group" data-v-7027783b><div class="${ssrRenderClass([{ open: !!unref(treeOpen)[`dcw:${tpl.id}`] }, "daq-card tpl"])}" role="button" tabindex="0"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0001", {
2416
2417
  p0: tpl.name,
2417
2418
  p1: tpl.ch,
2418
2419
  p2: tpl.min,
2419
2420
  p3: tpl.max,
2420
2421
  p4: tpl.unit
2421
- }))} data-v-3e78e101><span class="daq-caret" data-v-3e78e101>▶</span><span class="daq-ico" data-v-3e78e101>`);
2422
+ }))} data-v-7027783b><span class="daq-caret" data-v-7027783b>▶</span><span class="daq-ico" data-v-7027783b>`);
2422
2423
  _push(ssrRenderComponent(_component_WorkshopDaqTemplateIcon, {
2423
2424
  class: "daq-svg",
2424
2425
  icon: tpl.icon
2425
2426
  }, null, _parent));
2426
- _push(`</span><div class="daq-meta" data-v-3e78e101><span class="daq-name" data-v-3e78e101>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-3e78e101>${ssrInterpolate(tpl.code)}</span></div>`);
2427
- if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-3e78e101> + </button>`);
2427
+ _push(`</span><div class="daq-meta" data-v-7027783b><span class="daq-name" data-v-7027783b>${ssrInterpolate(tpl.name)}</span><span class="daq-code" data-v-7027783b>${ssrInterpolate(tpl.code)}</span></div>`);
2428
+ if (unref(mode) === "edit") _push(`<button class="daq-add"${ssrRenderAttr("title", _ctx.$t("townView.k2tplxp0002", { p0: tpl.name }))} data-v-7027783b> + </button>`);
2428
2429
  else _push(`<!---->`);
2429
- _push(`<span class="daq-count" data-v-3e78e101>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2430
+ _push(`<span class="daq-count" data-v-7027783b>×${ssrInterpolate(unref(dcwNodesByTpl).get(tpl.id)?.length ?? 0)}</span></div>`);
2430
2431
  if (unref(treeOpen)[`dcw:${tpl.id}`]) {
2431
- _push(`<div class="daq-children" data-v-3e78e101><!--[-->`);
2432
+ _push(`<div class="daq-children" data-v-7027783b><!--[-->`);
2432
2433
  ssrRenderList(unref(dcwNodesByTpl).get(tpl.id) ?? [], (n) => {
2433
- _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-3e78e101><span class="${ssrRenderClass([dcwLeafState(n), "node-dot"])}" data-v-3e78e101></span><div class="daq-meta" data-v-3e78e101><span class="daq-name" data-v-3e78e101>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-3e78e101><span class="node-val mono" data-v-3e78e101>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-3e78e101>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2434
- if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-3e78e101>✓</span>`);
2434
+ _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-7027783b><span class="${ssrRenderClass([dcwLeafState(n), "node-dot"])}" data-v-7027783b></span><div class="daq-meta" data-v-7027783b><span class="daq-name" data-v-7027783b>${ssrInterpolate(n.name)}</span><span class="daq-node-sub" data-v-7027783b><span class="node-val mono" data-v-7027783b>${ssrInterpolate(n.value != null ? `${n.value.toFixed(tpl.decimals)} ${tpl.unit}` : "--")}</span><span class="node-dev" data-v-7027783b>${ssrInterpolate(n.deviceBindingId ? unref(deviceTwins).byId(n.deviceBindingId)?.name ?? _ctx.$t("townView.k3own4q148") : _ctx.$t("townView.k3own4q148"))}</span></span></div>`);
2435
+ if (typeof n.posX === "number") _push(`<span class="scene-cur" data-v-7027783b>✓</span>`);
2435
2436
  else _push(`<!---->`);
2436
2437
  _push(`</div>`);
2437
2438
  });
2438
2439
  _push(`<!--]-->`);
2439
- if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2440
+ if (!unref(dcwNodesByTpl).get(tpl.id)?.length) _push(`<div class="daq-empty-hint" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2tplxp0003"))}</div>`);
2440
2441
  else _push(`<!---->`);
2441
2442
  _push(`</div>`);
2442
2443
  } else _push(`<!---->`);
2443
2444
  _push(`</div>`);
2444
2445
  });
2445
- _push(`<!--]--></div></section><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1c9n911034"))}</h3><span class="panel-tag" data-v-3e78e101>${ssrInterpolate(unref(dockChannels).length)}</span></div><div class="scene-list" data-v-3e78e101><!--[-->`);
2446
+ _push(`<!--]--></div></section><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1c9n911034"))}</h3><span class="panel-tag" data-v-7027783b>${ssrInterpolate(unref(dockChannels).length)}</span></div><div class="scene-list" data-v-7027783b><!--[-->`);
2446
2447
  ssrRenderList(unref(dockChannels), (ch) => {
2447
- _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-3e78e101><span class="scene-ico" style="${ssrRenderStyle({ "--ch": ch.color })}" data-v-3e78e101></span><div class="scene-meta-wrap" data-v-3e78e101><span class="scene-name" data-v-3e78e101>${ssrInterpolate(ch.name)}</span><span class="scene-meta" data-v-3e78e101>${ssrInterpolate(ch.agentCount)} ${ssrInterpolate(_ctx.$t("townView.k1brss7t128"))} ${ssrInterpolate(ch.placed ? _ctx.$t("townView.k3n94g3141") : _ctx.$t("townView.k3os7i3176"))}</span></div>`);
2448
- if (ch.placed) _push(`<span class="scene-cur" data-v-3e78e101>✓</span>`);
2449
- else _push(`<span class="scene-add" data-v-3e78e101>+</span>`);
2448
+ _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 ? _ctx.$t("townView.chPlaced") : _ctx.$t("townView.chDragHint"))} data-v-7027783b><span class="scene-ico" style="${ssrRenderStyle({ "--ch": ch.color })}" data-v-7027783b></span><div class="scene-meta-wrap" data-v-7027783b><span class="scene-name" data-v-7027783b>${ssrInterpolate(ch.name)}</span><span class="scene-meta" data-v-7027783b>${ssrInterpolate(ch.agentCount)} ${ssrInterpolate(_ctx.$t("townView.k1brss7t128"))} ${ssrInterpolate(ch.placed ? _ctx.$t("townView.k3n94g3141") : _ctx.$t("townView.k3os7i3176"))}</span></div>`);
2449
+ if (ch.placed) _push(`<span class="scene-cur" data-v-7027783b>✓</span>`);
2450
+ else _push(`<span class="scene-add" data-v-7027783b>+</span>`);
2450
2451
  _push(`</div>`);
2451
2452
  });
2452
2453
  _push(`<!--]-->`);
2453
- if (unref(dockHint)) _push(`<div class="scene-hint" data-v-3e78e101>${ssrInterpolate(unref(dockHint))}</div>`);
2454
+ if (unref(dockHint)) _push(`<div class="scene-hint" data-v-7027783b>${ssrInterpolate(unref(dockHint))}</div>`);
2454
2455
  else _push(`<!---->`);
2455
- _push(`</div></section></aside><main class="stage-col" data-v-3e78e101><div class="stage" data-v-3e78e101><div id="town-host" class="town-host" data-v-3e78e101></div><div class="stage-vignette" data-v-3e78e101></div><div class="stage-top" data-v-3e78e101><div class="vp-title" data-v-3e78e101><h2 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1b0z4vr035"))}</h2><span class="vp-id" data-v-3e78e101>CH · ${ssrInterpolate(unref(activeChannelName) || _ctx.$t("townView.k3lkuz3142"))}</span></div><div class="vp-tools" data-v-3e78e101><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k18d6wnb005"))} data-v-3e78e101><svg class="vp-svg" viewBox="0 0 24 24" data-v-3e78e101><circle cx="12" cy="12" r="7" data-v-3e78e101></circle><path d="M12 2v4M12 18v4M2 12h4M18 12h4" data-v-3e78e101></path></svg></button><button class="${ssrRenderClass([{ on: unref(orbitOn) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1io51dn006"))} data-v-3e78e101><svg class="vp-svg" viewBox="0 0 24 24" data-v-3e78e101><circle cx="12" cy="12" r="3.2" data-v-3e78e101></circle><path d="M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5" data-v-3e78e101></path></svg></button><button class="${ssrRenderClass([{ on: unref(showCallouts) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1sgjlq8007"))} data-v-3e78e101><svg class="vp-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M4 8h12l4 4-4 4H4z" data-v-3e78e101></path><circle cx="8.5" cy="12" r="1.4" data-v-3e78e101></circle></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k3wuf0008"))} data-v-3e78e101><svg class="vp-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5" data-v-3e78e101></path></svg></button></div></div><div class="angle-chip" data-v-3e78e101><select${ssrRenderAttr("value", unref(viewPreset))}${ssrRenderAttr("aria-label", _ctx.$t("townView.k1k4j5i7009"))} data-v-3e78e101><option value="std" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kv72860036"))}</option><option value="top" data-v-3e78e101> 俯视 · TOP </option><option value="front" data-v-3e78e101> 前视 · FRONT </option><option value="side" data-v-3e78e101> 侧视 · SIDE </option></select></div>`);
2456
+ _push(`</div></section></aside><main class="stage-col" data-v-7027783b><div class="stage" data-v-7027783b><div id="town-host" class="town-host" data-v-7027783b></div><div class="stage-vignette" data-v-7027783b></div><div class="stage-top" data-v-7027783b><div class="vp-title" data-v-7027783b><h2 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1b0z4vr035"))}</h2><span class="vp-id" data-v-7027783b>CH · ${ssrInterpolate(unref(activeChannelName) || _ctx.$t("townView.k3lkuz3142"))}</span></div><div class="vp-tools" data-v-7027783b><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k18d6wnb005"))} data-v-7027783b><svg class="vp-svg" viewBox="0 0 24 24" data-v-7027783b><circle cx="12" cy="12" r="7" data-v-7027783b></circle><path d="M12 2v4M12 18v4M2 12h4M18 12h4" data-v-7027783b></path></svg></button><button class="${ssrRenderClass([{ on: unref(orbitOn) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1io51dn006"))} data-v-7027783b><svg class="vp-svg" viewBox="0 0 24 24" data-v-7027783b><circle cx="12" cy="12" r="3.2" data-v-7027783b></circle><path d="M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5" data-v-7027783b></path></svg></button><button class="${ssrRenderClass([{ on: unref(showCallouts) }, "vp-tool"])}"${ssrRenderAttr("title", _ctx.$t("townView.k1sgjlq8007"))} data-v-7027783b><svg class="vp-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M4 8h12l4 4-4 4H4z" data-v-7027783b></path><circle cx="8.5" cy="12" r="1.4" data-v-7027783b></circle></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k3wuf0008"))} data-v-7027783b><svg class="vp-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5" data-v-7027783b></path></svg></button></div></div><div class="angle-chip" data-v-7027783b><select${ssrRenderAttr("value", unref(viewPreset))}${ssrRenderAttr("aria-label", _ctx.$t("townView.k1k4j5i7009"))} data-v-7027783b><option value="std" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kv72860036"))}</option><option value="top" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.viewTop"))}</option><option value="front" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.viewFront"))}</option><option value="side" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.viewSide"))}</option></select></div>`);
2456
2457
  if (unref(showCallouts)) {
2457
- _push(`<!--[--><svg class="leaders" data-v-3e78e101><!--[-->`);
2458
+ _push(`<!--[--><svg class="leaders" data-v-7027783b><!--[-->`);
2458
2459
  ssrRenderList(unref(callouts), (c) => {
2459
- _push(`<g class="${ssrRenderClass({ near: c.near })}" style="${ssrRenderStyle(c.leader ? null : { display: "none" })}" data-v-3e78e101><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-3e78e101></path><circle${ssrRenderAttr("cx", c.x)}${ssrRenderAttr("cy", c.y)} r="2.6"${ssrRenderAttr("fill", c.warn ? "#f6c453" : "#41c8f4")} data-v-3e78e101></circle></g>`);
2460
+ _push(`<g class="${ssrRenderClass({ near: c.near })}" style="${ssrRenderStyle(c.leader ? null : { display: "none" })}" data-v-7027783b><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-7027783b></path><circle${ssrRenderAttr("cx", c.x)}${ssrRenderAttr("cy", c.y)} r="2.6"${ssrRenderAttr("fill", c.warn ? "#f6c453" : "#41c8f4")} data-v-7027783b></circle></g>`);
2460
2461
  });
2461
- _push(`<!--]--></svg><div class="callout-layer" data-v-3e78e101><!--[-->`);
2462
+ _push(`<!--]--></svg><div class="callout-layer" data-v-7027783b><!--[-->`);
2462
2463
  ssrRenderList(unref(callouts), (c) => {
2463
2464
  _push(`<div class="${ssrRenderClass([{
2464
2465
  warn: c.warn,
@@ -2466,12 +2467,12 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2466
2467
  }, "callout"])}" style="${ssrRenderStyle({
2467
2468
  left: c.x + "px",
2468
2469
  top: c.y + "px"
2469
- })}"${ssrRenderAttr("title", _ctx.$t("townView.k1ejxiwp010"))} data-v-3e78e101><div class="co-label" data-v-3e78e101><span class="co-dot" data-v-3e78e101></span>${ssrInterpolate(c.label)}</div><div class="co-val" data-v-3e78e101>${ssrInterpolate(c.value)}<small data-v-3e78e101>${ssrInterpolate(c.unit)}</small></div><div class="co-range" data-v-3e78e101>${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>`);
2470
+ })}"${ssrRenderAttr("title", _ctx.$t("townView.k1ejxiwp010"))} data-v-7027783b><div class="co-label" data-v-7027783b><span class="co-dot" data-v-7027783b></span>${ssrInterpolate(c.label)}</div><div class="co-val" data-v-7027783b>${ssrInterpolate(c.value)}<small data-v-7027783b>${ssrInterpolate(c.unit)}</small></div><div class="co-range" data-v-7027783b>${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>`);
2470
2471
  });
2471
2472
  _push(`<!--]--></div><!--]-->`);
2472
2473
  } else _push(`<!---->`);
2473
- _push(`<div class="kpi-strip" data-v-3e78e101><div class="kpi" data-v-3e78e101><span class="kpi-ico c1" data-v-3e78e101><svg class="kpi-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z" data-v-3e78e101></path><path d="M4 8.5l8 4.5 8-4.5M12 13v7" data-v-3e78e101></path></svg></span><div class="kpi-meta" data-v-3e78e101><div class="kpi-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1k6xemt037"))}</div><div class="kpi-val" data-v-3e78e101>${ssrInterpolate(unref(deviceCount))}<small data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-3e78e101><span class="kpi-ico c2" data-v-3e78e101><svg class="kpi-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="m5 12.5 4.5 4.5L19 7.5" data-v-3e78e101></path></svg></span><div class="kpi-meta" data-v-3e78e101><div class="kpi-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1l1a9t2039"))}</div><div class="kpi-val" data-v-3e78e101>${ssrInterpolate(unref(runningCount))}<small data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-3e78e101><span class="kpi-ico c3" data-v-3e78e101><svg class="kpi-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M12 3 22 20H2L12 3Z" data-v-3e78e101></path><path d="M12 10v4M12 17v.2" data-v-3e78e101></path></svg></span><div class="kpi-meta" data-v-3e78e101><div class="kpi-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1fsi3ir002"))}</div><div class="kpi-val" data-v-3e78e101>${ssrInterpolate(unref(activeAlarmCount))}<small data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</small></div></div></div><div class="kpi" data-v-3e78e101><span class="kpi-ico c4" data-v-3e78e101><svg class="kpi-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M9.5 14.5 14.5 9.5" data-v-3e78e101></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-3e78e101></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-3e78e101></path></svg></span><div class="kpi-meta" data-v-3e78e101><div class="kpi-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1emsai1041"))}</div><div class="kpi-val" data-v-3e78e101>${ssrInterpolate(unref(daqTwins).length)}<small data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</small></div></div></div><div class="kpi" data-v-3e78e101><span class="kpi-ico c5" data-v-3e78e101><svg class="kpi-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M5 19a9 9 0 1 1 14 0" data-v-3e78e101></path><path d="M12 13l3.5-3.5" data-v-3e78e101></path><circle cx="12" cy="13" r="1.4" data-v-3e78e101></circle></svg></span><div class="kpi-meta" data-v-3e78e101><div class="kpi-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kbrxdq1043"))}</div><div class="kpi-val" data-v-3e78e101>${ssrInterpolate(unref(healthPct))}<small data-v-3e78e101>%</small></div></div></div></div>`);
2474
- if (unref(sceneEmpty)) _push(`<div class="empty-hint" data-v-3e78e101><b data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3rwxjc044"))}</b><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1sa1eaj045"))}</span></div>`);
2474
+ _push(`<div class="kpi-strip" data-v-7027783b><div class="kpi" data-v-7027783b><span class="kpi-ico c1" data-v-7027783b><svg class="kpi-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z" data-v-7027783b></path><path d="M4 8.5l8 4.5 8-4.5M12 13v7" data-v-7027783b></path></svg></span><div class="kpi-meta" data-v-7027783b><div class="kpi-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1k6xemt037"))}</div><div class="kpi-val" data-v-7027783b>${ssrInterpolate(unref(deviceCount))}<small data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-7027783b><span class="kpi-ico c2" data-v-7027783b><svg class="kpi-svg" viewBox="0 0 24 24" data-v-7027783b><path d="m5 12.5 4.5 4.5L19 7.5" data-v-7027783b></path></svg></span><div class="kpi-meta" data-v-7027783b><div class="kpi-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1l1a9t2039"))}</div><div class="kpi-val" data-v-7027783b>${ssrInterpolate(unref(runningCount))}<small data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k49lh038"))}</small></div></div></div><div class="kpi" data-v-7027783b><span class="kpi-ico c3" data-v-7027783b><svg class="kpi-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M12 3 22 20H2L12 3Z" data-v-7027783b></path><path d="M12 10v4M12 17v.2" data-v-7027783b></path></svg></span><div class="kpi-meta" data-v-7027783b><div class="kpi-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1fsi3ir002"))}</div><div class="kpi-val" data-v-7027783b>${ssrInterpolate(unref(activeAlarmCount))}<small data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</small></div></div></div><div class="kpi" data-v-7027783b><span class="kpi-ico c4" data-v-7027783b><svg class="kpi-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M9.5 14.5 14.5 9.5" data-v-7027783b></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-7027783b></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-7027783b></path></svg></span><div class="kpi-meta" data-v-7027783b><div class="kpi-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1emsai1041"))}</div><div class="kpi-val" data-v-7027783b>${ssrInterpolate(unref(daqTwins).length)}<small data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</small></div></div></div><div class="kpi" data-v-7027783b><span class="kpi-ico c5" data-v-7027783b><svg class="kpi-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M5 19a9 9 0 1 1 14 0" data-v-7027783b></path><path d="M12 13l3.5-3.5" data-v-7027783b></path><circle cx="12" cy="13" r="1.4" data-v-7027783b></circle></svg></span><div class="kpi-meta" data-v-7027783b><div class="kpi-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kbrxdq1043"))}</div><div class="kpi-val" data-v-7027783b>${ssrInterpolate(unref(healthPct))}<small data-v-7027783b>%</small></div></div></div></div>`);
2475
+ if (unref(sceneEmpty)) _push(`<div class="empty-hint" data-v-7027783b><b data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3rwxjc044"))}</b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1sa1eaj045"))}</span></div>`);
2475
2476
  else _push(`<!---->`);
2476
2477
  if (unref(selectedChannel) && unref(boundaryDraft)) {
2477
2478
  _push(`<div class="boundary-panel drag-panel" style="${ssrRenderStyle(unref(panelPos).boundary ? {
@@ -2479,121 +2480,121 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2479
2480
  top: unref(panelPos).boundary.y + "px",
2480
2481
  bottom: "auto",
2481
2482
  transform: "none"
2482
- } : void 0)}" data-v-3e78e101><div class="bp-title drag-grip"${ssrRenderAttr("title", _ctx.$t("townView.k1d0rl5z011"))} data-v-3e78e101><span class="bp-name" data-v-3e78e101>${ssrInterpolate(unref(entities).channels[unref(selectedChannel)]?.name ?? unref(selectedChannel).slice(0, 8))}</span><span class="bp-sub" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1mehlxs046"))}</span><div class="bp-tabs" data-v-3e78e101><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "boundary" }, "bp-tab"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k489ka047"))}</button><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "members" }, "bp-tab"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3ztf1129"))} ${ssrInterpolate(unref(channelMembers).length)}</button></div></div>`);
2483
- if (unref(channelPanelTab) === "boundary") _push(`<!--[--><div class="bp-row" data-v-3e78e101><span class="bp-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-3e78e101><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "ellipse" }, "seg-btn"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "rect" }, "seg-btn"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="bp-row" data-v-3e78e101><span class="bp-label" data-v-3e78e101>${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-3e78e101><span class="bp-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusX))}</span></div><div class="bp-row" data-v-3e78e101><span class="bp-label" data-v-3e78e101>${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-3e78e101><span class="bp-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusZ))}</span></div><div class="bp-row" data-v-3e78e101><span class="bp-label" data-v-3e78e101>${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-3e78e101><span class="bp-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(boundaryDraft).rotationY ?? 0))}°</span></div><!--]-->`);
2483
+ } : void 0)}" data-v-7027783b><div class="bp-title drag-grip"${ssrRenderAttr("title", _ctx.$t("townView.k1d0rl5z011"))} data-v-7027783b><span class="bp-name" data-v-7027783b>${ssrInterpolate(unref(entities).channels[unref(selectedChannel)]?.name ?? unref(selectedChannel).slice(0, 8))}</span><span class="bp-sub" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1mehlxs046"))}</span><div class="bp-tabs" data-v-7027783b><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "boundary" }, "bp-tab"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k489ka047"))}</button><button class="${ssrRenderClass([{ on: unref(channelPanelTab) === "members" }, "bp-tab"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3ztf1129"))} ${ssrInterpolate(unref(channelMembers).length)}</button></div></div>`);
2484
+ if (unref(channelPanelTab) === "boundary") _push(`<!--[--><div class="bp-row" data-v-7027783b><span class="bp-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-7027783b><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "ellipse" }, "seg-btn"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(boundaryDraft).shape === "rect" }, "seg-btn"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="bp-row" data-v-7027783b><span class="bp-label" data-v-7027783b>${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-7027783b><span class="bp-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusX))}</span></div><div class="bp-row" data-v-7027783b><span class="bp-label" data-v-7027783b>${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-7027783b><span class="bp-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(boundaryDraft).radiusZ))}</span></div><div class="bp-row" data-v-7027783b><span class="bp-label" data-v-7027783b>${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-7027783b><span class="bp-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(boundaryDraft).rotationY ?? 0))}°</span></div><!--]-->`);
2484
2485
  else {
2485
- _push(`<!--[--><div class="bp-hint" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-3e78e101><!--[-->`);
2486
+ _push(`<!--[--><div class="bp-hint" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kimxls2054"))}</div><div class="member-list" data-v-7027783b><!--[-->`);
2486
2487
  ssrRenderList(unref(channelMembers), (m) => {
2487
- _push(`<div class="member-row" data-v-3e78e101><span class="member-ava" style="${ssrRenderStyle({ color: hashColor(unref(selectedChannel)) })}" data-v-3e78e101>${ssrInterpolate(m.name.charAt(0).toUpperCase())}</span><div class="member-info" data-v-3e78e101><span class="member-name" data-v-3e78e101>${ssrInterpolate(m.name)}</span><span class="${ssrRenderClass([m.role === "lead" ? "r-lead" : "r-worker", "member-role"])}" data-v-3e78e101>${ssrInterpolate(m.role === "lead" ? "Leader" : "Worker")}</span></div><select class="member-select"${ssrRenderAttr("value", (m.modelRef ?? "") || "hero-3d")} data-v-3e78e101><!--[-->`);
2488
+ _push(`<div class="member-row" data-v-7027783b><span class="member-ava" style="${ssrRenderStyle({ color: hashColor(unref(selectedChannel)) })}" data-v-7027783b>${ssrInterpolate(m.name.charAt(0).toUpperCase())}</span><div class="member-info" data-v-7027783b><span class="member-name" data-v-7027783b>${ssrInterpolate(m.name)}</span><span class="${ssrRenderClass([m.role === "lead" ? "r-lead" : "r-worker", "member-role"])}" data-v-7027783b>${ssrInterpolate(m.role === "lead" ? "Leader" : "Worker")}</span></div><select class="member-select"${ssrRenderAttr("value", (m.modelRef ?? "") || "hero-3d")} data-v-7027783b><!--[-->`);
2488
2489
  ssrRenderList(unref(agentModels), (model) => {
2489
- _push(`<option${ssrRenderAttr("value", model.id)} data-v-3e78e101>${ssrInterpolate(model.name)}</option>`);
2490
+ _push(`<option${ssrRenderAttr("value", model.id)} data-v-7027783b>${ssrInterpolate(model.name)}</option>`);
2490
2491
  });
2491
2492
  _push(`<!--]--></select></div>`);
2492
2493
  });
2493
2494
  _push(`<!--]-->`);
2494
- if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2495
+ if (unref(channelMembers).length === 0) _push(`<div class="bp-hint" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k419rbs055"))}</div>`);
2495
2496
  else _push(`<!---->`);
2496
2497
  _push(`</div><!--]-->`);
2497
2498
  }
2498
- _push(`<div class="bp-actions" data-v-3e78e101>`);
2499
- if (unref(channelPanelTab) === "boundary") _push(`<button class="bp-btn save" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1b3kp8f056"))}</button>`);
2499
+ _push(`<div class="bp-actions" data-v-7027783b>`);
2500
+ if (unref(channelPanelTab) === "boundary") _push(`<button class="bp-btn save" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1b3kp8f056"))}</button>`);
2500
2501
  else _push(`<!---->`);
2501
- _push(`<button class="bp-btn danger" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1hs45qg057"))}</button><button class="bp-btn" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3x62t058"))}</button></div></div>`);
2502
+ _push(`<button class="bp-btn danger" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1hs45qg057"))}</button><button class="bp-btn" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3x62t058"))}</button></div></div>`);
2502
2503
  } else _push(`<!---->`);
2503
- if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-3e78e101>${ssrInterpolate(unref(lastDropText))}</div>`);
2504
+ if (unref(lastDropText)) _push(`<div class="drop-chip" data-v-7027783b>${ssrInterpolate(unref(lastDropText))}</div>`);
2504
2505
  else _push(`<!---->`);
2505
- if (unref(errorText)) _push(`<div class="error-chip" data-v-3e78e101>${ssrInterpolate(unref(errorText))}</div>`);
2506
+ if (unref(errorText)) _push(`<div class="error-chip" data-v-7027783b>${ssrInterpolate(unref(errorText))}</div>`);
2506
2507
  else _push(`<!---->`);
2507
- if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-3e78e101><div class="loading-spinner" data-v-3e78e101></div><span class="loading-text" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2508
+ if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-7027783b><div class="loading-spinner" data-v-7027783b></div><span class="loading-text" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2508
2509
  else _push(`<!---->`);
2509
- _push(`</div><div class="${ssrRenderClass([{ "dock-open": unref(dockOpen) }, "dock"])}" data-v-3e78e101><button type="button" class="dock-toggle" aria-controls="town-dock-controls"${ssrRenderAttr("aria-expanded", unref(dockOpen) ? "true" : "false")} data-v-3e78e101><span class="dock-toggle-t" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</span><span class="dock-toggle-hint mono" data-v-3e78e101>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span><span class="dock-caret" aria-hidden="true" data-v-3e78e101>▾</span></button><section id="town-dock-controls" class="dock-card" data-v-3e78e101><div class="dock-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</h3><span class="dock-mode" data-v-3e78e101>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span></div><p class="ctl-sec" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.secRender"))}</p><div class="ctl-row" data-v-3e78e101><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.qualityTip"))} data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.qualityLabel"))}</span><div class="fps-seg" data-v-3e78e101><!--[-->`);
2510
+ _push(`</div><div class="${ssrRenderClass([{ "dock-open": unref(dockOpen) }, "dock"])}" data-v-7027783b><button type="button" class="dock-toggle" aria-controls="town-dock-controls"${ssrRenderAttr("aria-expanded", unref(dockOpen) ? "true" : "false")} data-v-7027783b><span class="dock-toggle-t" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</span><span class="dock-toggle-hint mono" data-v-7027783b>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span><span class="dock-caret" aria-hidden="true" data-v-7027783b>▾</span></button><section id="town-dock-controls" class="dock-card" data-v-7027783b><div class="dock-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1c9iq23060"))}</h3><span class="dock-mode" data-v-7027783b>${ssrInterpolate(unref(mode) === "edit" ? _ctx.$t("townView.k1iipfcs143") : _ctx.$t("townView.k1l147w1177"))}</span></div><p class="ctl-sec" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.secRender"))}</p><div class="ctl-row" data-v-7027783b><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.qualityTip"))} data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.qualityLabel"))}</span><div class="fps-seg" data-v-7027783b><!--[-->`);
2510
2511
  ssrRenderList(QUALITY_OPTIONS, (o) => {
2511
- _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-3e78e101>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2512
+ _push(`<button class="${ssrRenderClass({ on: unref(qualityMode) === o.v })}" data-v-7027783b>${ssrInterpolate(_ctx.$t(o.label))}</button>`);
2512
2513
  });
2513
- _push(`<!--]--></div><span class="ctl-val" data-v-3e78e101></span></div><div class="ctl-row" data-v-3e78e101><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.fpsCapTip"))} data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.fpsCapLabel"))}</span><div class="fps-seg" data-v-3e78e101><!--[-->`);
2514
+ _push(`<!--]--></div><span class="ctl-val" data-v-7027783b></span></div><div class="ctl-row" data-v-7027783b><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.fpsCapTip"))} data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.fpsCapLabel"))}</span><div class="fps-seg" data-v-7027783b><!--[-->`);
2514
2515
  ssrRenderList(FPS_OPTIONS, (o) => {
2515
- _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-3e78e101>${ssrInterpolate(o.label)}</button>`);
2516
+ _push(`<button class="${ssrRenderClass({ on: unref(fpsCap) === o.v })}" data-v-7027783b>${ssrInterpolate(o.label)}</button>`);
2516
2517
  });
2517
- _push(`<!--]--></div><span class="ctl-val" data-v-3e78e101></span></div><p class="ctl-sec" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.secEnv"))}</p><div class="ctl-row" data-v-3e78e101><span class="ctl-name" data-v-3e78e101>${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-3e78e101><span class="ctl-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(exposure) * 100))}%</span></div><div class="ctl-row" data-v-3e78e101><span class="ctl-name" data-v-3e78e101>${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-3e78e101><span class="ctl-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(tintOpacity) * 100))}%</span></div><div class="ctl-row" data-v-3e78e101><span class="ctl-name" data-v-3e78e101>${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-3e78e101><span class="ctl-val" data-v-3e78e101>${ssrInterpolate(unref(threshPct))}%</span></div><div class="ctl-row" data-v-3e78e101><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.kz71l1f012"))} data-v-3e78e101>${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-3e78e101><span class="ctl-val" data-v-3e78e101>${ssrInterpolate(unref(calloutNearDist) === 0 ? _ctx.$t("townView.k493s144") : `${unref(calloutNearDist)}`)}</span></div><p class="ctl-sec" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.secOps"))}</p><div class="ctl-row" data-v-3e78e101><span class="ctl-name" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1idc6pa065"))}</span><button class="${ssrRenderClass([{ on: unref(snap) }, "snap-toggle"])}" data-v-3e78e101>${ssrInterpolate(unref(snap) ? _ctx.$t("townView.k4bs5145") : _ctx.$t("townView.k493s144"))}</button><span class="ctl-val" data-v-3e78e101></span></div><div class="ctl-btns" data-v-3e78e101><button class="btn btn-primary" data-v-3e78e101>${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-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button><button class="${ssrRenderClass([{ armed: unref(estop) }, "btn btn-danger"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1i046wf066"))}</button></div></section><section class="dock-card" data-v-3e78e101><div class="dock-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1kfoef9067"))}</h3><span class="dock-count mono" data-v-3e78e101>${ssrInterpolate(unref(daqTwins).length)}</span><div class="${ssrRenderClass([{ expanded: unref(trendExpanded) }, "trend-legend"])}" data-v-3e78e101><!--[-->`);
2518
+ _push(`<!--]--></div><span class="ctl-val" data-v-7027783b></span></div><p class="ctl-sec" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.secEnv"))}</p><div class="ctl-row" data-v-7027783b><span class="ctl-name" data-v-7027783b>${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-7027783b><span class="ctl-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(exposure) * 100))}%</span></div><div class="ctl-row" data-v-7027783b><span class="ctl-name" data-v-7027783b>${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-7027783b><span class="ctl-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(tintOpacity) * 100))}%</span></div><div class="ctl-row" data-v-7027783b><span class="ctl-name" data-v-7027783b>${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-7027783b><span class="ctl-val" data-v-7027783b>${ssrInterpolate(unref(threshPct))}%</span></div><div class="ctl-row" data-v-7027783b><span class="ctl-name"${ssrRenderAttr("title", _ctx.$t("townView.kz71l1f012"))} data-v-7027783b>${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-7027783b><span class="ctl-val" data-v-7027783b>${ssrInterpolate(unref(calloutNearDist) === 0 ? _ctx.$t("townView.k493s144") : `${unref(calloutNearDist)}`)}</span></div><p class="ctl-sec" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.secOps"))}</p><div class="ctl-row" data-v-7027783b><span class="ctl-name" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1idc6pa065"))}</span><button class="${ssrRenderClass([{ on: unref(snap) }, "snap-toggle"])}" data-v-7027783b>${ssrInterpolate(unref(snap) ? _ctx.$t("townView.k4bs5145") : _ctx.$t("townView.k493s144"))}</button><span class="ctl-val" data-v-7027783b></span></div><div class="ctl-btns" data-v-7027783b><button class="btn btn-primary" data-v-7027783b>${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-7027783b>${ssrInterpolate(_ctx.$t("townView.k1b3bk8t029"))}</button><button class="${ssrRenderClass([{ armed: unref(estop) }, "btn btn-danger"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1i046wf066"))}</button></div></section><section class="dock-card" data-v-7027783b><div class="dock-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1kfoef9067"))}</h3><span class="dock-count mono" data-v-7027783b>${ssrInterpolate(unref(daqTwins).length)}</span><div class="${ssrRenderClass([{ expanded: unref(trendExpanded) }, "trend-legend"])}" data-v-7027783b><!--[-->`);
2518
2519
  ssrRenderList(unref(trendChips), (chip) => {
2519
- _push(`<button class="${ssrRenderClass([{ off: !trendOn(chip.id) }, "lg-chip"])}" data-v-3e78e101><span class="lg-dot" style="${ssrRenderStyle({ background: trendColor(chip.id) })}" data-v-3e78e101></span>${ssrInterpolate(chip.name)}</button>`);
2520
+ _push(`<button class="${ssrRenderClass([{ off: !trendOn(chip.id) }, "lg-chip"])}" data-v-7027783b><span class="lg-dot" style="${ssrRenderStyle({ background: trendColor(chip.id) })}" data-v-7027783b></span>${ssrInterpolate(chip.name)}</button>`);
2520
2521
  });
2521
2522
  _push(`<!--]-->`);
2522
- 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-3e78e101>${ssrInterpolate(unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : `+${unref(trendOverflow)}`)}</button>`);
2523
+ 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-7027783b>${ssrInterpolate(unref(trendExpanded) ? _ctx.$t("townView.trendCollapse") : `+${unref(trendOverflow)}`)}</button>`);
2523
2524
  else _push(`<!---->`);
2524
- _push(`</div></div><div class="trend-wrap" data-v-3e78e101><canvas class="trend-cv" data-v-3e78e101></canvas>`);
2525
- if (!unref(daqTwins).length) _push(`<span class="trend-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1uht2uv068"))}</span>`);
2525
+ _push(`</div></div><div class="trend-wrap" data-v-7027783b><canvas class="trend-cv" data-v-7027783b></canvas>`);
2526
+ if (!unref(daqTwins).length) _push(`<span class="trend-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1uht2uv068"))}</span>`);
2526
2527
  else _push(`<!---->`);
2527
- _push(`</div></section></div></main><aside id="town-rail-right" class="${ssrRenderClass([{ "sheet-open": unref(sheetOpen) === "right" }, "rail rail-right"])}" data-v-3e78e101><div class="sheet-hd" data-v-3e78e101><span class="sheet-grip" aria-hidden="true" data-v-3e78e101></span><span class="sheet-hd-t" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</span><button type="button" class="sheet-x" aria-label="关闭" data-v-3e78e101> ✕ </button></div>`);
2528
+ _push(`</div></section></div></main><aside id="town-rail-right" class="${ssrRenderClass([{ "sheet-open": unref(sheetOpen) === "right" }, "rail rail-right"])}" data-v-7027783b><div class="sheet-hd" data-v-7027783b><span class="sheet-grip" aria-hidden="true" data-v-7027783b></span><span class="sheet-hd-t" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</span><button type="button" class="sheet-x"${ssrRenderAttr("aria-label", _ctx.$t("common.close"))} data-v-7027783b> ✕ </button></div>`);
2528
2529
  if (unref(selected)) {
2529
- _push(`<section class="panel inspector" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${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-3e78e101> ✕ </button></div><div class="ins-chip-row" data-v-3e78e101><span class="ins-chip mono" data-v-3e78e101>${ssrInterpolate(unref(selected).id.slice(0, 8))}</span>`);
2530
- if (unref(selected).kind === "device" && unref(selectedIsDaq)) _push(`<span class="ins-chip accent" data-v-3e78e101>DAQ</span>`);
2531
- else if (unref(selected).kind === "device" && unref(selectedIsDcw)) _push(`<span class="ins-chip accent" data-v-3e78e101>DCW</span>`);
2530
+ _push(`<section class="panel inspector" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${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-7027783b> ✕ </button></div><div class="ins-chip-row" data-v-7027783b><span class="ins-chip mono" data-v-7027783b>${ssrInterpolate(unref(selected).id.slice(0, 8))}</span>`);
2531
+ if (unref(selected).kind === "device" && unref(selectedIsDaq)) _push(`<span class="ins-chip accent" data-v-7027783b>DAQ</span>`);
2532
+ else if (unref(selected).kind === "device" && unref(selectedIsDcw)) _push(`<span class="ins-chip accent" data-v-7027783b>DCW</span>`);
2532
2533
  else _push(`<!---->`);
2533
2534
  _push(`</div>`);
2534
2535
  if (unref(selected).kind === "device") {
2535
2536
  _push(`<!--[-->`);
2536
2537
  if (unref(selectedIsDcw)) {
2537
- _push(`<div class="daq-info" data-v-3e78e101><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1deqh0d069"))}</span><b class="cy" data-v-3e78e101>${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-3e78e101><span data-v-3e78e101>${ssrInterpolate(unref(selectedDcwWindow)?.src === "recipe" ? _ctx.$t("townView.kq2jssk147") : _ctx.$t("townView.k1iwj796179"))}</span><b class="${ssrRenderClass({ amber: unref(selectedDcwWindow)?.src === "recipe" })}" data-v-3e78e101>${ssrInterpolate(dcwWinLabel(unref(selectedDcwNode)))}</b></div><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-3e78e101>${ssrInterpolate(unref(selectedDcwDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div><div class="daq-bind-bar" data-v-3e78e101><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-3e78e101><button class="bind-add-btn"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[unref(selected).id] == null || unref(dcwWriteDrafts)[unref(selected).id] === "") ? " disabled" : ""} data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kwrbtn180"))}</button></div>`);
2538
- if (unref(dcwWriteErrs)[unref(selected).id]) _push(`<p class="dcw-err" data-v-3e78e101>${ssrInterpolate(unref(dcwWriteErrs)[unref(selected).id])}</p>`);
2538
+ _push(`<div class="daq-info" data-v-7027783b><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1deqh0d069"))}</span><b class="cy" data-v-7027783b>${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-7027783b><span data-v-7027783b>${ssrInterpolate(unref(selectedDcwWindow)?.src === "recipe" ? _ctx.$t("townView.kq2jssk147") : _ctx.$t("townView.k1iwj796179"))}</span><b class="${ssrRenderClass({ amber: unref(selectedDcwWindow)?.src === "recipe" })}" data-v-7027783b>${ssrInterpolate(dcwWinLabel(unref(selectedDcwNode)))}</b></div><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-7027783b>${ssrInterpolate(unref(selectedDcwDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div><div class="daq-bind-bar" data-v-7027783b><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-7027783b><button class="bind-add-btn"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[unref(selected).id] == null || unref(dcwWriteDrafts)[unref(selected).id] === "") ? " disabled" : ""} data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kwrbtn180"))}</button></div>`);
2539
+ if (unref(dcwWriteErrs)[unref(selected).id]) _push(`<p class="dcw-err" data-v-7027783b>${ssrInterpolate(unref(dcwWriteErrs)[unref(selected).id])}</p>`);
2539
2540
  else _push(`<!---->`);
2540
2541
  if (unref(mode) === "edit") {
2541
- _push(`<div class="daq-bind-bar" data-v-3e78e101><select class="bind-select" data-v-3e78e101><option value="" data-v-3e78e101${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), "") : ssrLooseEqual(unref(dcwBindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2542
+ _push(`<div class="daq-bind-bar" data-v-7027783b><select class="bind-select" data-v-7027783b><option value="" data-v-7027783b${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), "") : ssrLooseEqual(unref(dcwBindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2542
2543
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2543
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-3e78e101${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), dv.id) : ssrLooseEqual(unref(dcwBindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2544
+ _push(`<option${ssrRenderAttr("value", dv.id)} data-v-7027783b${ssrIncludeBooleanAttr(Array.isArray(unref(dcwBindPick)) ? ssrLooseContain(unref(dcwBindPick), dv.id) : ssrLooseEqual(unref(dcwBindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2544
2545
  });
2545
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(selectedDcwDeviceName) && !unref(dcwBindPick)) ? " disabled" : ""} data-v-3e78e101>${ssrInterpolate(unref(selectedDcwDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2546
+ _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(selectedDcwDeviceName) && !unref(dcwBindPick)) ? " disabled" : ""} data-v-7027783b>${ssrInterpolate(unref(selectedDcwDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2546
2547
  } else _push(`<!---->`);
2547
2548
  _push(`</div>`);
2548
2549
  } else if (unref(selectedIsDaq)) {
2549
- _push(`<div class="daq-info" data-v-3e78e101><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3mv305072"))}</span><b class="cy" data-v-3e78e101>${ssrInterpolate(unref(selectedDaqSim) ? fmtDaq(unref(selectedDaqSim)) : "--")} ${ssrInterpolate(unref(selectedDaqSim)?.tpl.unit)}</b></div><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))}</span><b data-v-3e78e101>${ssrInterpolate(unref(selectedDaqSim)?.tpl.min)} ~ ${ssrInterpolate(unref(selectedDaqSim)?.tpl.max)}</b></div><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-3e78e101>${ssrInterpolate(unref(daqBoundDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div>`);
2550
+ _push(`<div class="daq-info" data-v-7027783b><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3mv305072"))}</span><b class="cy" data-v-7027783b>${ssrInterpolate(unref(selectedDaqSim) ? fmtDaq(unref(selectedDaqSim)) : "--")} ${ssrInterpolate(unref(selectedDaqSim)?.tpl.unit)}</b></div><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1faqmjb073"))}</span><b data-v-7027783b>${ssrInterpolate(unref(selectedDaqSim)?.tpl.min)} ~ ${ssrInterpolate(unref(selectedDaqSim)?.tpl.max)}</b></div><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1i8rtqt070"))}</span><b data-v-7027783b>${ssrInterpolate(unref(daqBoundDeviceName) || _ctx.$t("townView.k3own4q148"))}</b></div>`);
2550
2551
  if (unref(mode) === "edit") {
2551
- _push(`<div class="daq-bind-bar" data-v-3e78e101><select class="bind-select" data-v-3e78e101><option value="" data-v-3e78e101${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), "") : ssrLooseEqual(unref(bindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2552
+ _push(`<div class="daq-bind-bar" data-v-7027783b><select class="bind-select" data-v-7027783b><option value="" data-v-7027783b${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), "") : ssrLooseEqual(unref(bindPick), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kjo6ekr071"))}</option><!--[-->`);
2552
2553
  ssrRenderList(unref(deviceTwins).twins.filter((x) => !isLegacyDaqTwin(x) && x.id !== (unref(selected)?.id ?? "")), (dv) => {
2553
- _push(`<option${ssrRenderAttr("value", dv.id)} data-v-3e78e101${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), dv.id) : ssrLooseEqual(unref(bindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2554
+ _push(`<option${ssrRenderAttr("value", dv.id)} data-v-7027783b${ssrIncludeBooleanAttr(Array.isArray(unref(bindPick)) ? ssrLooseContain(unref(bindPick), dv.id) : ssrLooseEqual(unref(bindPick), dv.id)) ? " selected" : ""}>${ssrInterpolate(dv.name)}</option>`);
2554
2555
  });
2555
- _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(daqBoundDeviceName) && !unref(bindPick)) ? " disabled" : ""} data-v-3e78e101>${ssrInterpolate(unref(daqBoundDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2556
+ _push(`<!--]--></select><button class="bind-add-btn"${ssrIncludeBooleanAttr(!unref(daqBoundDeviceName) && !unref(bindPick)) ? " disabled" : ""} data-v-7027783b>${ssrInterpolate(unref(daqBoundDeviceName) ? _ctx.$t("townView.k479eh149") : _ctx.$t("townView.k452a8102"))}</button></div>`);
2556
2557
  } else _push(`<!---->`);
2557
- if (unref(mode) === "edit" && unref(selectedDaqNode)) _push(`<div class="daq-node-ctl" data-v-3e78e101><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1l6g2ga074"))}</span><span class="daq-th-inputs" data-v-3e78e101><input${ssrRenderAttr("value", unref(daqIntervalDraft))} type="number" min="200" max="60000" step="100" class="daq-num" data-v-3e78e101><small data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1or92b075"))}</small></span></div><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3x5tpx076"))}</span><span class="daq-th-inputs" data-v-3e78e101><input${ssrRenderAttr("value", unref(selectedDaqNode).warnLow)} type="number" step="any" class="daq-num" data-v-3e78e101> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).warnHigh)} type="number" step="any" class="daq-num" data-v-3e78e101></span></div><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1hjj0jf077"))}</span><span class="daq-th-inputs" data-v-3e78e101><input${ssrRenderAttr("value", unref(selectedDaqNode).min)} type="number" step="any" class="daq-num" data-v-3e78e101> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).max)} type="number" step="any" class="daq-num" data-v-3e78e101></span></div><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k48tki078"))}</span><button class="${ssrRenderClass([{ warn: unref(selectedDaqNode).enabled }, "bind-add-btn"])}" data-v-3e78e101>${ssrInterpolate(unref(selectedDaqNode).enabled ? _ctx.$t("townView.k1wv0nyo150") : _ctx.$t("townView.kh1586b180"))}</button></div><div class="daq-info-row" data-v-3e78e101><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3xakp079"))}</span><button class="bind-add-btn danger"${ssrRenderAttr("title", _ctx.$t("townView.kpwutri014"))} data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1bpp30k080"))}</button></div></div>`);
2558
- else _push(`<div class="ins-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kzk5dfx081"))}</div>`);
2558
+ if (unref(mode) === "edit" && unref(selectedDaqNode)) _push(`<div class="daq-node-ctl" data-v-7027783b><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1l6g2ga074"))}</span><span class="daq-th-inputs" data-v-7027783b><input${ssrRenderAttr("value", unref(daqIntervalDraft))} type="number" min="200" max="60000" step="100" class="daq-num" data-v-7027783b><small data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1or92b075"))}</small></span></div><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3x5tpx076"))}</span><span class="daq-th-inputs" data-v-7027783b><input${ssrRenderAttr("value", unref(selectedDaqNode).warnLow)} type="number" step="any" class="daq-num" data-v-7027783b> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).warnHigh)} type="number" step="any" class="daq-num" data-v-7027783b></span></div><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1hjj0jf077"))}</span><span class="daq-th-inputs" data-v-7027783b><input${ssrRenderAttr("value", unref(selectedDaqNode).min)} type="number" step="any" class="daq-num" data-v-7027783b> ~ <input${ssrRenderAttr("value", unref(selectedDaqNode).max)} type="number" step="any" class="daq-num" data-v-7027783b></span></div><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k48tki078"))}</span><button class="${ssrRenderClass([{ warn: unref(selectedDaqNode).enabled }, "bind-add-btn"])}" data-v-7027783b>${ssrInterpolate(unref(selectedDaqNode).enabled ? _ctx.$t("townView.k1wv0nyo150") : _ctx.$t("townView.kh1586b180"))}</button></div><div class="daq-info-row" data-v-7027783b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3xakp079"))}</span><button class="bind-add-btn danger"${ssrRenderAttr("title", _ctx.$t("townView.kpwutri014"))} data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1bpp30k080"))}</button></div></div>`);
2559
+ else _push(`<div class="ins-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kzk5dfx081"))}</div>`);
2559
2560
  _push(`</div>`);
2560
2561
  } else {
2561
- _push(`<!--[--><div class="obj-row" data-v-3e78e101><span class="obj-label" data-v-3e78e101>${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-3e78e101></div><div class="obj-row" data-v-3e78e101><span class="obj-label" data-v-3e78e101>${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-3e78e101><!--[-->`);
2562
+ _push(`<!--[--><div class="obj-row" data-v-7027783b><span class="obj-label" data-v-7027783b>${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" ? _ctx.$t("townView.deviceName") : _ctx.$t("townView.readonlyTip"))} data-v-7027783b></div><div class="obj-row" data-v-7027783b><span class="obj-label" data-v-7027783b>${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-7027783b><!--[-->`);
2562
2563
  ssrRenderList(unref(deviceModels), (m) => {
2563
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-3e78e101>${ssrInterpolate(m.name)}</option>`);
2564
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-7027783b>${ssrInterpolate(("townModelName" in _ctx ? _ctx.townModelName : unref(townModelName))(unref(t), m))}</option>`);
2564
2565
  });
2565
- _push(`<!--]--></select></div><div class="sect-hd" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1vtyk05130"))} ${ssrInterpolate(unref(boundDaqRows).length)} ${ssrInterpolate(_ctx.$t("townView.k3vfpz5138"))}</div><!--[-->`);
2566
+ _push(`<!--]--></select></div><div class="sect-hd" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1vtyk05130"))} ${ssrInterpolate(unref(boundDaqRows).length)} ${ssrInterpolate(_ctx.$t("townView.k3vfpz5138"))}</div><!--[-->`);
2566
2567
  ssrRenderList(unref(boundDaqRows), (r) => {
2567
- _push(`<div class="bind-row" data-v-3e78e101><span class="bind-ico" data-v-3e78e101>`);
2568
+ _push(`<div class="bind-row" data-v-7027783b><span class="bind-ico" data-v-7027783b>`);
2568
2569
  _push(ssrRenderComponent(_component_WorkshopDaqTemplateIcon, {
2569
2570
  class: "bind-svg",
2570
2571
  icon: r.icon
2571
2572
  }, null, _parent));
2572
- _push(`</span><span class="bind-meta" data-v-3e78e101><span class="bind-label" data-v-3e78e101>${ssrInterpolate(r.ch)}</span><span class="bind-val" data-v-3e78e101><b data-v-3e78e101>${ssrInterpolate(r.value)}</b> ${ssrInterpolate(r.unit)} · ${ssrInterpolate(r.name)}</span></span><canvas class="bind-spark" width="56" height="20" data-v-3e78e101></canvas>`);
2573
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-3e78e101> ✕ </button>`);
2573
+ _push(`</span><span class="bind-meta" data-v-7027783b><span class="bind-label" data-v-7027783b>${ssrInterpolate(r.ch)}</span><span class="bind-val" data-v-7027783b><b data-v-7027783b>${ssrInterpolate(r.value)}</b> ${ssrInterpolate(r.unit)} · ${ssrInterpolate(r.name)}</span></span><canvas class="bind-spark" width="56" height="20" data-v-7027783b></canvas>`);
2574
+ if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-7027783b> ✕ </button>`);
2574
2575
  else _push(`<!---->`);
2575
2576
  _push(`</div>`);
2576
2577
  });
2577
2578
  _push(`<!--]-->`);
2578
- if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2579
+ if (!unref(boundDaqRows).length) _push(`<div class="ins-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kgpuqhb084"))}</div>`);
2579
2580
  else _push(`<!---->`);
2580
2581
  if (unref(mode) === "edit") {
2581
- _push(`<div class="bind-add-wrap" data-v-3e78e101><button class="bind-add" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2582
+ _push(`<div class="bind-add-wrap" data-v-7027783b><button class="bind-add" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kvm0lin085"))}</button>`);
2582
2583
  if (unref(bindPopOpen)) {
2583
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-3e78e101><!--[-->`);
2584
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-7027783b><!--[-->`);
2584
2585
  ssrRenderList(unref(daqTemplates), (tpl) => {
2585
2586
  _push(`<!--[-->`);
2586
2587
  if (unref(daqBindChoices)[tpl.id]?.length) {
2587
- _push(`<div class="bp-group" data-v-3e78e101><span class="bp-tpl" data-v-3e78e101>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2588
+ _push(`<div class="bp-group" data-v-7027783b><span class="bp-tpl" data-v-7027783b>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2588
2589
  ssrRenderList(unref(daqBindChoices)[tpl.id], (c) => {
2589
- _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-3e78e101>`);
2590
+ _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-7027783b>`);
2590
2591
  _push(ssrRenderComponent(_component_WorkshopDaqTemplateIcon, {
2591
2592
  class: "bind-svg",
2592
2593
  icon: c.tpl.icon
2593
2594
  }, null, _parent));
2594
- _push(`<span data-v-3e78e101>${ssrInterpolate(c.name)}`);
2595
- if (c.devName) _push(`<i class="bp-cur" data-v-3e78e101>→ ${ssrInterpolate(c.devName)}</i>`);
2596
- else if (!c.placed) _push(`<i class="bp-cur" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2595
+ _push(`<span data-v-7027783b>${ssrInterpolate(c.name)}`);
2596
+ if (c.devName) _push(`<i class="bp-cur" data-v-7027783b>→ ${ssrInterpolate(c.devName)}</i>`);
2597
+ else if (!c.placed) _push(`<i class="bp-cur" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2597
2598
  else _push(`<!---->`);
2598
2599
  _push(`</span></button>`);
2599
2600
  });
@@ -2602,50 +2603,50 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2602
2603
  _push(`<!--]-->`);
2603
2604
  });
2604
2605
  _push(`<!--]-->`);
2605
- if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2606
+ if (!unref(daqBindChoiceCount)) _push(`<div class="bp-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2606
2607
  else _push(`<!---->`);
2607
2608
  _push(`</div>`);
2608
2609
  } else _push(`<!---->`);
2609
2610
  _push(`</div>`);
2610
2611
  } else _push(`<!---->`);
2611
- _push(`<div class="sect-hd" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.ktzir2t131"))} ${ssrInterpolate(unref(boundDcwRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</div><!--[-->`);
2612
+ _push(`<div class="sect-hd" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.ktzir2t131"))} ${ssrInterpolate(unref(boundDcwRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4l1w042"))}</div><!--[-->`);
2612
2613
  ssrRenderList(unref(boundDcwRows), (r) => {
2613
- _push(`<div class="dcw-row" data-v-3e78e101><div class="dcw-top" data-v-3e78e101><span class="bind-ico" data-v-3e78e101>`);
2614
+ _push(`<div class="dcw-row" data-v-7027783b><div class="dcw-top" data-v-7027783b><span class="bind-ico" data-v-7027783b>`);
2614
2615
  _push(ssrRenderComponent(_component_WorkshopDaqTemplateIcon, {
2615
2616
  class: "bind-svg",
2616
2617
  icon: r.icon
2617
2618
  }, null, _parent));
2618
- _push(`</span><span class="dcw-id" data-v-3e78e101><span class="bind-label" data-v-3e78e101>${ssrInterpolate(r.ch)}`);
2619
- if (r.rMin != null || r.rMax != null) _push(`<i class="dcw-tag" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k48grv086"))}</i>`);
2619
+ _push(`</span><span class="dcw-id" data-v-7027783b><span class="bind-label" data-v-7027783b>${ssrInterpolate(r.ch)}`);
2620
+ if (r.rMin != null || r.rMax != null) _push(`<i class="dcw-tag" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k48grv086"))}</i>`);
2620
2621
  else _push(`<!---->`);
2621
- _push(`</span><span class="dcw-name" data-v-3e78e101>${ssrInterpolate(r.name)}</span></span><span class="dcw-cur" data-v-3e78e101><b data-v-3e78e101>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}</b><i data-v-3e78e101>${ssrInterpolate(r.unit)}</i></span>`);
2622
- if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-3e78e101> ✕ </button>`);
2622
+ _push(`</span><span class="dcw-name" data-v-7027783b>${ssrInterpolate(r.name)}</span></span><span class="dcw-cur" data-v-7027783b><b data-v-7027783b>${ssrInterpolate(r.value != null ? r.value.toFixed(r.decimals) : "--")}</b><i data-v-7027783b>${ssrInterpolate(r.unit)}</i></span>`);
2623
+ if (unref(mode) === "edit") _push(`<button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-7027783b> ✕ </button>`);
2623
2624
  else _push(`<!---->`);
2624
- _push(`</div><div class="${ssrRenderClass([{ recipe: r.rMin != null || r.rMax != null }, "dcw-win"])}" data-v-3e78e101><em data-v-3e78e101>${ssrInterpolate(r.rMin != null || r.rMax != null ? _ctx.$t("townView.k1l3m0hx151") : _ctx.$t("townView.k1bc6rqf181"))}</em><span class="dcw-win-num" data-v-3e78e101>${ssrInterpolate(r.rMin ?? "-∞")}</span><span class="dcw-win-track" data-v-3e78e101><i style="${ssrRenderStyle({ left: `${dcwMarkPct(r)}%` })}" data-v-3e78e101></i></span><span class="dcw-win-num" data-v-3e78e101>${ssrInterpolate(r.rMax ?? "+∞")}</span></div><div class="dcw-write" data-v-3e78e101><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-3e78e101><button class="dcw-send"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[r.dcwId] == null || unref(dcwWriteDrafts)[r.dcwId] === "") ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("townView.k15t7izc017"))} data-v-3e78e101> write </button></div>`);
2625
- if (unref(dcwWriteErrs)[r.dcwId]) _push(`<small class="dcw-err" data-v-3e78e101>${ssrInterpolate(unref(dcwWriteErrs)[r.dcwId])}</small>`);
2625
+ _push(`</div><div class="${ssrRenderClass([{ recipe: r.rMin != null || r.rMax != null }, "dcw-win"])}" data-v-7027783b><em data-v-7027783b>${ssrInterpolate(r.rMin != null || r.rMax != null ? _ctx.$t("townView.k1l3m0hx151") : _ctx.$t("townView.k1bc6rqf181"))}</em><span class="dcw-win-num" data-v-7027783b>${ssrInterpolate(r.rMin ?? "-∞")}</span><span class="dcw-win-track" data-v-7027783b><i style="${ssrRenderStyle({ left: `${dcwMarkPct(r)}%` })}" data-v-7027783b></i></span><span class="dcw-win-num" data-v-7027783b>${ssrInterpolate(r.rMax ?? "+∞")}</span></div><div class="dcw-write" data-v-7027783b><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-7027783b><button class="dcw-send"${ssrIncludeBooleanAttr(unref(dcwWriteDrafts)[r.dcwId] == null || unref(dcwWriteDrafts)[r.dcwId] === "") ? " disabled" : ""}${ssrRenderAttr("title", _ctx.$t("townView.k15t7izc017"))} data-v-7027783b> write </button></div>`);
2626
+ if (unref(dcwWriteErrs)[r.dcwId]) _push(`<small class="dcw-err" data-v-7027783b>${ssrInterpolate(unref(dcwWriteErrs)[r.dcwId])}</small>`);
2626
2627
  else _push(`<!---->`);
2627
2628
  _push(`</div>`);
2628
2629
  });
2629
2630
  _push(`<!--]-->`);
2630
- if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2631
+ if (!unref(boundDcwRows).length) _push(`<div class="ins-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k10smf24087"))}</div>`);
2631
2632
  else _push(`<!---->`);
2632
2633
  if (unref(mode) === "edit") {
2633
- _push(`<div class="bind-add-wrap" data-v-3e78e101><button class="bind-add" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2634
+ _push(`<div class="bind-add-wrap" data-v-7027783b><button class="bind-add" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kvk1vh5088"))}</button>`);
2634
2635
  if (unref(dcwBindPopOpen)) {
2635
- _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-3e78e101><!--[-->`);
2636
+ _push(`<div class="bind-pop" style="${ssrRenderStyle({ maxHeight: `${unref(bindPopMaxH)}px` })}" data-v-7027783b><!--[-->`);
2636
2637
  ssrRenderList(unref(dcwTemplates), (tpl) => {
2637
2638
  _push(`<!--[-->`);
2638
2639
  if (unref(dcwBindChoices)[tpl.id]?.length) {
2639
- _push(`<div class="bp-group" data-v-3e78e101><span class="bp-tpl" data-v-3e78e101>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2640
+ _push(`<div class="bp-group" data-v-7027783b><span class="bp-tpl" data-v-7027783b>${ssrInterpolate(tpl.name)} · ${ssrInterpolate(tpl.ch)}</span><!--[-->`);
2640
2641
  ssrRenderList(unref(dcwBindChoices)[tpl.id], (c) => {
2641
- _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-3e78e101>`);
2642
+ _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-7027783b>`);
2642
2643
  _push(ssrRenderComponent(_component_WorkshopDaqTemplateIcon, {
2643
2644
  class: "bind-svg",
2644
2645
  icon: c.tpl.icon
2645
2646
  }, null, _parent));
2646
- _push(`<span data-v-3e78e101>${ssrInterpolate(c.name)}`);
2647
- if (c.devName) _push(`<i class="bp-cur" data-v-3e78e101>→ ${ssrInterpolate(c.devName)}</i>`);
2648
- else if (!c.placed) _push(`<i class="bp-cur" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2647
+ _push(`<span data-v-7027783b>${ssrInterpolate(c.name)}`);
2648
+ if (c.devName) _push(`<i class="bp-cur" data-v-7027783b>→ ${ssrInterpolate(c.devName)}</i>`);
2649
+ else if (!c.placed) _push(`<i class="bp-cur" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2bindr0009"))}</i>`);
2649
2650
  else _push(`<!---->`);
2650
2651
  _push(`</span></button>`);
2651
2652
  });
@@ -2654,123 +2655,123 @@ var TownView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
2654
2655
  _push(`<!--]-->`);
2655
2656
  });
2656
2657
  _push(`<!--]-->`);
2657
- if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2658
+ if (!unref(dcwBindChoiceCount)) _push(`<div class="bp-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2bindr0010"))}</div>`);
2658
2659
  else _push(`<!---->`);
2659
2660
  _push(`</div>`);
2660
2661
  } else _push(`<!---->`);
2661
2662
  _push(`</div>`);
2662
2663
  } else _push(`<!---->`);
2663
- if (unref(mode) === "edit") _push(`<!--[--><div class="sect-hd" data-v-3e78e101> 变换 · BLENDER </div><div class="xz-seg" data-v-3e78e101><button class="${ssrRenderClass([{ on: unref(tMode) === "translate" }, "seg-btn"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1hg3167089"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "rotate" }, "seg-btn"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1enlg7i090"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "scale" }, "seg-btn"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1ibjg3j091"))}</button></div><div class="scale-row" data-v-3e78e101><span class="scale-min" data-v-3e78e101>0.2×</span><input class="scale-range" type="range" min="0.2" max="5" step="0.05"${ssrRenderAttr("value", unref(selected).scale)} data-v-3e78e101><span class="scale-max" data-v-3e78e101>5×</span></div><div class="scale-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(selected).scale * 100))}% </div><div class="ins-foot" data-v-3e78e101><button class="${ssrRenderClass([{ armed: unref(deviceDeleteArmed) === unref(selected).id }, "btn btn-danger ins-del"])}" data-v-3e78e101>${ssrInterpolate(unref(deviceDeleteArmed) === unref(selected).id ? _ctx.$t("townView.k1w10xa5152") : _ctx.$t("townView.k121kfef182"))}</button></div><!--]-->`);
2664
- else _push(`<div class="ins-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kt0i3y2092"))}</div>`);
2664
+ if (unref(mode) === "edit") _push(`<!--[--><div class="sect-hd" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.transformBlender"))}</div><div class="xz-seg" data-v-7027783b><button class="${ssrRenderClass([{ on: unref(tMode) === "translate" }, "seg-btn"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1hg3167089"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "rotate" }, "seg-btn"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1enlg7i090"))}</button><button class="${ssrRenderClass([{ on: unref(tMode) === "scale" }, "seg-btn"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1ibjg3j091"))}</button></div><div class="scale-row" data-v-7027783b><span class="scale-min" data-v-7027783b>0.2×</span><input class="scale-range" type="range" min="0.2" max="5" step="0.05"${ssrRenderAttr("value", unref(selected).scale)} data-v-7027783b><span class="scale-max" data-v-7027783b>5×</span></div><div class="scale-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(selected).scale * 100))}% </div><div class="ins-foot" data-v-7027783b><button class="${ssrRenderClass([{ armed: unref(deviceDeleteArmed) === unref(selected).id }, "btn btn-danger ins-del"])}" data-v-7027783b>${ssrInterpolate(unref(deviceDeleteArmed) === unref(selected).id ? _ctx.$t("townView.k1w10xa5152") : _ctx.$t("townView.k121kfef182"))}</button></div><!--]-->`);
2665
+ else _push(`<div class="ins-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kt0i3y2092"))}</div>`);
2665
2666
  _push(`<!--]-->`);
2666
2667
  }
2667
2668
  _push(`<!--]-->`);
2668
2669
  } else if (unref(selected).kind === "agent") {
2669
- _push(`<!--[--><div class="chat-id-row" data-v-3e78e101><span class="chat-badge" style="${ssrRenderStyle({ "--p-acc": unref(agentChatColor) })}" data-v-3e78e101>${ssrInterpolate(unref(agentChatTitle).slice(0, 1).toUpperCase())}</span><div class="chat-nameplate" data-v-3e78e101><span class="chat-name" data-v-3e78e101>${ssrInterpolate(unref(agentChatTitle))}</span><span class="chat-meta" data-v-3e78e101><span class="${ssrRenderClass([unref(selectedAgentMeta)?.role === "lead" ? "r-lead" : "r-worker", "chat-role"])}" data-v-3e78e101>${ssrInterpolate(unref(selectedAgentRoleTag))}</span><span class="${ssrRenderClass([`s-${unref(selectedAgentMeta)?.state ?? "idle"}`, "chat-state"])}" data-v-3e78e101>${ssrInterpolate(unref(agentChatStateLabel))}</span>`);
2670
- if (unref(selectedAgentMeta)?.harness) _push(`<span class="chat-harness" data-v-3e78e101>${ssrInterpolate(unref(selectedAgentMeta).harness.toUpperCase())}</span>`);
2670
+ _push(`<!--[--><div class="chat-id-row" data-v-7027783b><span class="chat-badge" style="${ssrRenderStyle({ "--p-acc": unref(agentChatColor) })}" data-v-7027783b>${ssrInterpolate(unref(agentChatTitle).slice(0, 1).toUpperCase())}</span><div class="chat-nameplate" data-v-7027783b><span class="chat-name" data-v-7027783b>${ssrInterpolate(unref(agentChatTitle))}</span><span class="chat-meta" data-v-7027783b><span class="${ssrRenderClass([unref(selectedAgentMeta)?.role === "lead" ? "r-lead" : "r-worker", "chat-role"])}" data-v-7027783b>${ssrInterpolate(unref(selectedAgentRoleTag))}</span><span class="${ssrRenderClass([`s-${unref(selectedAgentMeta)?.state ?? "idle"}`, "chat-state"])}" data-v-7027783b>${ssrInterpolate(unref(agentChatStateLabel))}</span>`);
2671
+ if (unref(selectedAgentMeta)?.harness) _push(`<span class="chat-harness" data-v-7027783b>${ssrInterpolate(unref(selectedAgentMeta).harness.toUpperCase())}</span>`);
2671
2672
  else _push(`<!---->`);
2672
- _push(`<span class="chat-count" data-v-3e78e101>${ssrInterpolate(unref(agentHistory).length + unref(agentChatRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span></span></div></div><div class="obj-row" data-v-3e78e101><span class="obj-label" data-v-3e78e101>${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-3e78e101><!--[-->`);
2673
+ _push(`<span class="chat-count" data-v-7027783b>${ssrInterpolate(unref(agentHistory).length + unref(agentChatRows).length)} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span></span></div></div><div class="obj-row" data-v-7027783b><span class="obj-label" data-v-7027783b>${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-7027783b><!--[-->`);
2673
2674
  ssrRenderList(unref(agentModels), (m) => {
2674
- _push(`<option${ssrRenderAttr("value", m.id)} data-v-3e78e101>${ssrInterpolate(m.name)}</option>`);
2675
+ _push(`<option${ssrRenderAttr("value", m.id)} data-v-7027783b>${ssrInterpolate(m.name)}</option>`);
2675
2676
  });
2676
- _push(`<!--]--></select></div><div class="obj-sep" data-v-3e78e101></div><div class="obj-row" data-v-3e78e101><span class="obj-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1fix3hb093"))}</span><span class="range-status" data-v-3e78e101>${ssrInterpolate(unref(agentRangeStatusText))}</span>`);
2677
- if (unref(mode) === "edit") _push(`<button class="${ssrRenderClass([{ on: unref(agentDrawingRange) }, "obj-mini"])}"${ssrRenderAttr("title", _ctx.$t("townView.k13enoy3018"))} data-v-3e78e101>${ssrInterpolate(unref(agentDrawingRange) ? _ctx.$t("townView.k3slzhc153") : _ctx.$t("townView.k1f1xmci183"))}</button>`);
2677
+ _push(`<!--]--></select></div><div class="obj-sep" data-v-7027783b></div><div class="obj-row" data-v-7027783b><span class="obj-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1fix3hb093"))}</span><span class="range-status" data-v-7027783b>${ssrInterpolate(unref(agentRangeStatusText))}</span>`);
2678
+ if (unref(mode) === "edit") _push(`<button class="${ssrRenderClass([{ on: unref(agentDrawingRange) }, "obj-mini"])}"${ssrRenderAttr("title", _ctx.$t("townView.k13enoy3018"))} data-v-7027783b>${ssrInterpolate(unref(agentDrawingRange) ? _ctx.$t("townView.k3slzhc153") : _ctx.$t("townView.k1f1xmci183"))}</button>`);
2678
2679
  else _push(`<!---->`);
2679
- _push(`</div><div class="obj-sep" data-v-3e78e101></div><div class="sect-hd" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1p7nru2094"))}</div><!--[-->`);
2680
+ _push(`</div><div class="obj-sep" data-v-7027783b></div><div class="sect-hd" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1p7nru2094"))}</div><!--[-->`);
2680
2681
  ssrRenderList(unref(agentBindings), (b) => {
2681
- _push(`<div class="bind-row" data-v-3e78e101><span class="${ssrRenderClass([b.kind === "dcw" ? "accent" : "", "ins-chip"])}" style="${ssrRenderStyle({ "flex": "none" })}" data-v-3e78e101>${ssrInterpolate(b.kind === "dcw" ? _ctx.$t("townView.k40ifw097") : _ctx.$t("townView.k40rjw098"))}</span><span class="bind-meta" data-v-3e78e101><span class="bind-label" data-v-3e78e101>${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-3e78e101><option value="auto" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1io1ylm095"))}</option><option value="manual" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1duyr8q096"))}</option></select></span><button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-3e78e101> ✕ </button></div>`);
2682
+ _push(`<div class="bind-row" data-v-7027783b><span class="${ssrRenderClass([b.kind === "dcw" ? "accent" : "", "ins-chip"])}" style="${ssrRenderStyle({ "flex": "none" })}" data-v-7027783b>${ssrInterpolate(b.kind === "dcw" ? _ctx.$t("townView.k40ifw097") : _ctx.$t("townView.k40rjw098"))}</span><span class="bind-meta" data-v-7027783b><span class="bind-label" data-v-7027783b>${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-7027783b><option value="auto" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1io1ylm095"))}</option><option value="manual" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1duyr8q096"))}</option></select></span><button class="bind-x"${ssrRenderAttr("title", _ctx.$t("townView.k1k73omv016"))} data-v-7027783b> ✕ </button></div>`);
2682
2683
  });
2683
2684
  _push(`<!--]-->`);
2684
- if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-3e78e101> 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 </div>`);
2685
+ if (!unref(agentBindings).length) _push(`<div class="ins-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.unboundTip"))}</div>`);
2685
2686
  else _push(`<!---->`);
2686
2687
  if (unref(mode) === "edit") {
2687
- _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-3e78e101><select class="bind-select" style="${ssrRenderStyle({
2688
+ _push(`<div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-bottom": "8px" })}" data-v-7027783b><select class="bind-select" style="${ssrRenderStyle({
2688
2689
  "flex": "none",
2689
2690
  "width": "62px"
2690
- })}" data-v-3e78e101><option value="dcw" data-v-3e78e101${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-3e78e101${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-3e78e101><option value="" data-v-3e78e101${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), "") : ssrLooseEqual(unref(agentBindNodeId), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kurjldk099"))}</option>`);
2691
+ })}" data-v-7027783b><option value="dcw" data-v-7027783b${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-7027783b${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-7027783b><option value="" data-v-7027783b${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), "") : ssrLooseEqual(unref(agentBindNodeId), "")) ? " selected" : ""}>${ssrInterpolate(_ctx.$t("townView.kurjldk099"))}</option>`);
2691
2692
  if (unref(agentBindKind) === "dcw") {
2692
2693
  _push(`<!--[-->`);
2693
2694
  ssrRenderList(unref(dcw).nodes, (n) => {
2694
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-3e78e101${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2695
+ _push(`<option${ssrRenderAttr("value", n.id)} data-v-7027783b${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2695
2696
  });
2696
2697
  _push(`<!--]-->`);
2697
2698
  } else {
2698
2699
  _push(`<!--[-->`);
2699
2700
  ssrRenderList(unref(daq).nodes, (n) => {
2700
- _push(`<option${ssrRenderAttr("value", n.id)} data-v-3e78e101${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2701
+ _push(`<option${ssrRenderAttr("value", n.id)} data-v-7027783b${ssrIncludeBooleanAttr(Array.isArray(unref(agentBindNodeId)) ? ssrLooseContain(unref(agentBindNodeId), n.id) : ssrLooseEqual(unref(agentBindNodeId), n.id)) ? " selected" : ""}>${ssrInterpolate(n.name)}</option>`);
2701
2702
  });
2702
2703
  _push(`<!--]-->`);
2703
2704
  }
2704
2705
  _push(`</select><select class="bind-select" style="${ssrRenderStyle({
2705
2706
  "flex": "none",
2706
2707
  "width": "76px"
2707
- })}" data-v-3e78e101><option value="auto" data-v-3e78e101${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-3e78e101${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-3e78e101>${ssrInterpolate(_ctx.$t("townView.k452a8102"))}</button></div>`);
2708
+ })}" data-v-7027783b><option value="auto" data-v-7027783b${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-7027783b${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-7027783b>${ssrInterpolate(_ctx.$t("townView.k452a8102"))}</button></div>`);
2708
2709
  } else _push(`<!---->`);
2709
2710
  if (unref(pendingApprovals).length) {
2710
- _push(`<!--[--><div class="sect-hd" style="${ssrRenderStyle({ "color": "var(--hud-amber)" })}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1gk2jg7132"))} ${ssrInterpolate(unref(pendingApprovals).length)}</div><!--[-->`);
2711
+ _push(`<!--[--><div class="sect-hd" style="${ssrRenderStyle({ "color": "var(--hud-amber)" })}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1gk2jg7132"))} ${ssrInterpolate(unref(pendingApprovals).length)}</div><!--[-->`);
2711
2712
  ssrRenderList(unref(pendingApprovals), (ap) => {
2712
- _push(`<div class="approval-card" data-v-3e78e101><div class="approval-detail" data-v-3e78e101>${ssrInterpolate(ap.detail)}</div><div class="${ssrRenderClass([{ urgent: approvalRemainingSec(ap) <= 30 }, "approval-ttl"])}" data-v-3e78e101> ⏱ ${ssrInterpolate(approvalRemainingSec(ap))}s ${ssrInterpolate(_ctx.$t("townView.hitlAutoReject"))}</div><input${ssrRenderAttr("value", unref(approvalComments)[ap.id])} class="dcw-write input-inline" style="${ssrRenderStyle({
2713
+ _push(`<div class="approval-card" data-v-7027783b><div class="approval-detail" data-v-7027783b>${ssrInterpolate(ap.detail)}</div><div class="${ssrRenderClass([{ urgent: approvalRemainingSec(ap) <= 30 }, "approval-ttl"])}" data-v-7027783b> ⏱ ${ssrInterpolate(approvalRemainingSec(ap))}s ${ssrInterpolate(_ctx.$t("townView.hitlAutoReject"))}</div><input${ssrRenderAttr("value", unref(approvalComments)[ap.id])} class="dcw-write input-inline" style="${ssrRenderStyle({
2713
2714
  "width": "100%",
2714
2715
  "margin-top": "5px"
2715
- })}"${ssrRenderAttr("placeholder", _ctx.$t("townView.keztqrn020"))} data-v-3e78e101><div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-top": "5px" })}" data-v-3e78e101><button class="bind-add-btn" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kslcozu103"))}</button><button class="bind-add-btn danger" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k14gu3rd104"))}</button></div></div>`);
2716
+ })}"${ssrRenderAttr("placeholder", _ctx.$t("townView.keztqrn020"))} data-v-7027783b><div class="daq-bind-bar" style="${ssrRenderStyle({ "margin-top": "5px" })}" data-v-7027783b><button class="bind-add-btn" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kslcozu103"))}</button><button class="bind-add-btn danger" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k14gu3rd104"))}</button></div></div>`);
2716
2717
  });
2717
2718
  _push(`<!--]--><!--]-->`);
2718
2719
  } else _push(`<!---->`);
2719
- if (unref(agentRangeDraft) && unref(mode) === "edit") _push(`<!--[--><div class="obj-row" data-v-3e78e101><span class="obj-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-3e78e101><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "ellipse" }, "seg-btn"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "rect" }, "seg-btn"])}" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="obj-row" data-v-3e78e101><span class="obj-label" data-v-3e78e101>${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-3e78e101><span class="bp-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusX))}</span></div><div class="obj-row" data-v-3e78e101><span class="obj-label" data-v-3e78e101>${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-3e78e101><span class="bp-val" data-v-3e78e101>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusZ))}</span></div><button class="obj-mini danger" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1w45mzc107"))}</button><!--]-->`);
2720
- else _push(`<div class="ins-empty" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k14s8urm108"))}</div>`);
2721
- _push(`<div class="obj-sep" data-v-3e78e101></div><div class="sect-hd chat-sect" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1ghjbfc133"))} ${ssrInterpolate(unref(agentChatTitle))} <button class="mini-btn chat-refresh"${ssrRenderAttr("title", _ctx.$t("townView.k15avt7g021"))} data-v-3e78e101>${ssrInterpolate(unref(historyLoading) ? "…" : "↻")}</button></div><div class="rpg-lines chat-embed" data-v-3e78e101>`);
2722
- if (unref(historyLoading)) _push(`<div class="rpg-note" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kkhlx5h109"))}</div>`);
2720
+ if (unref(agentRangeDraft) && unref(mode) === "edit") _push(`<!--[--><div class="obj-row" data-v-7027783b><span class="obj-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3zhy5048"))}</span><div class="bp-seg" data-v-7027783b><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "ellipse" }, "seg-btn"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k414bc049"))}</button><button class="${ssrRenderClass([{ on: unref(agentRangeDraft).shape === "rect" }, "seg-btn"])}" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k43u0g050"))}</button></div></div><div class="obj-row" data-v-7027783b><span class="obj-label" data-v-7027783b>${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-7027783b><span class="bp-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusX))}</span></div><div class="obj-row" data-v-7027783b><span class="obj-label" data-v-7027783b>${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-7027783b><span class="bp-val" data-v-7027783b>${ssrInterpolate(Math.round(unref(agentRangeDraft).radiusZ))}</span></div><button class="obj-mini danger" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1w45mzc107"))}</button><!--]-->`);
2721
+ else _push(`<div class="ins-empty" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k14s8urm108"))}</div>`);
2722
+ _push(`<div class="obj-sep" data-v-7027783b></div><div class="sect-hd chat-sect" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1ghjbfc133"))} ${ssrInterpolate(unref(agentChatTitle))} <button class="mini-btn chat-refresh"${ssrRenderAttr("title", _ctx.$t("townView.k15avt7g021"))} data-v-7027783b>${ssrInterpolate(unref(historyLoading) ? "…" : "↻")}</button></div><div class="rpg-lines chat-embed" data-v-7027783b>`);
2723
+ if (unref(historyLoading)) _push(`<div class="rpg-note" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kkhlx5h109"))}</div>`);
2723
2724
  else _push(`<!---->`);
2724
2725
  if (unref(agentHistory).length) {
2725
- _push(`<!--[--><div class="rpg-divider" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2726
+ _push(`<!--[--><div class="rpg-divider" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k768cnt134"))} ${ssrInterpolate(unref(agentHistory).length)}</div><!--[-->`);
2726
2727
  ssrRenderList(unref(agentHistory), (r) => {
2727
- _push(`<div class="rpg-line hist" data-v-3e78e101><span class="rpg-time" data-v-3e78e101>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-3e78e101>`);
2728
- if (chatKindLabel(r.kind)) _push(`<span class="${ssrRenderClass([`k-${r.kind}`, "rpg-kind"])}" data-v-3e78e101>${ssrInterpolate(chatKindLabel(r.kind))}</span>`);
2728
+ _push(`<div class="rpg-line hist" data-v-7027783b><span class="rpg-time" data-v-7027783b>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-7027783b>`);
2729
+ if (chatKindLabel(r.kind)) _push(`<span class="${ssrRenderClass([`k-${r.kind}`, "rpg-kind"])}" data-v-7027783b>${ssrInterpolate(chatKindLabel(r.kind))}</span>`);
2729
2730
  else _push(`<!---->`);
2730
- _push(`<span class="rpg-text" data-v-3e78e101>${ssrInterpolate(r.text)}</span></div></div>`);
2731
+ _push(`<span class="rpg-text" data-v-7027783b>${ssrInterpolate(r.text)}</span></div></div>`);
2731
2732
  });
2732
2733
  _push(`<!--]--><!--]-->`);
2733
2734
  } else _push(`<!---->`);
2734
- if (unref(agentChatRows).length) _push(`<div class="rpg-divider live" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1cwz73k135"))} ${ssrInterpolate(unref(agentChatRows).length)}</div>`);
2735
+ if (unref(agentChatRows).length) _push(`<div class="rpg-divider live" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1cwz73k135"))} ${ssrInterpolate(unref(agentChatRows).length)}</div>`);
2735
2736
  else _push(`<!---->`);
2736
2737
  _push(`<!--[-->`);
2737
2738
  ssrRenderList(unref(agentChatRows), (r) => {
2738
- _push(`<div class="rpg-line live" data-v-3e78e101><span class="rpg-time" data-v-3e78e101>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-3e78e101><span class="rpg-text" data-v-3e78e101>${ssrInterpolate(r.text)}</span></div></div>`);
2739
+ _push(`<div class="rpg-line live" data-v-7027783b><span class="rpg-time" data-v-7027783b>${ssrInterpolate(fmtTime(r.at))}</span><div class="rpg-bubble" data-v-7027783b><span class="rpg-text" data-v-7027783b>${ssrInterpolate(r.text)}</span></div></div>`);
2739
2740
  });
2740
2741
  _push(`<!--]-->`);
2741
- if (unref(selectedAgentMeta)?.state === "busy") _push(`<div class="rpg-typing" data-v-3e78e101><span class="ty-dot" data-v-3e78e101></span><span class="ty-dot" data-v-3e78e101></span><span class="ty-dot" data-v-3e78e101></span><span class="ty-label" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k3o5tz9110"))}</span></div>`);
2742
+ if (unref(selectedAgentMeta)?.state === "busy") _push(`<div class="rpg-typing" data-v-7027783b><span class="ty-dot" data-v-7027783b></span><span class="ty-dot" data-v-7027783b></span><span class="ty-dot" data-v-7027783b></span><span class="ty-label" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k3o5tz9110"))}</span></div>`);
2742
2743
  else _push(`<!---->`);
2743
- if (!unref(historyLoading) && !unref(agentHistory).length && !unref(agentChatRows).length) _push(`<div class="rpg-note" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1qkqld7111"))}</div>`);
2744
+ if (!unref(historyLoading) && !unref(agentHistory).length && !unref(agentChatRows).length) _push(`<div class="rpg-note" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1qkqld7111"))}</div>`);
2744
2745
  else _push(`<!---->`);
2745
2746
  _push(`</div><!--]-->`);
2746
2747
  } else _push(`<!---->`);
2747
2748
  _push(`</section>`);
2748
2749
  } else _push(`<!---->`);
2749
- _push(`<section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</h3></div><div class="health-body" data-v-3e78e101><div class="donut-wrap" data-v-3e78e101><canvas width="118" height="118" data-v-3e78e101></canvas><div class="donut-center" data-v-3e78e101><b style="${ssrRenderStyle({ color: unref(healthTone) })}" data-v-3e78e101>${ssrInterpolate(unref(healthPct))}%</b><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k7h1nxo113"))}</span></div></div><div class="health-legend" data-v-3e78e101><div class="hl-row" data-v-3e78e101><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-accent)" })}" data-v-3e78e101></span> ${ssrInterpolate(_ctx.$t("townView.k3vp67i114"))} <span class="n" data-v-3e78e101>${ssrInterpolate(unref(runningCount))}</span></div><div class="hl-row" data-v-3e78e101><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-amber)" })}" data-v-3e78e101></span> ${ssrInterpolate(_ctx.$t("townView.k3zcvb115"))} <span class="n" data-v-3e78e101>${ssrInterpolate(unref(idleCount))}</span></div><div class="hl-row" data-v-3e78e101><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-danger)" })}" data-v-3e78e101></span> ${ssrInterpolate(_ctx.$t("townView.k3xmid116"))} <span class="n" data-v-3e78e101>${ssrInterpolate(unref(alarmCount))}</span></div><div class="hl-row" data-v-3e78e101><span class="hl-dot" style="${ssrRenderStyle({ background: "#3a4a63" })}" data-v-3e78e101></span> ${ssrInterpolate(_ctx.$t("townView.statesOffline"))} <span class="n" data-v-3e78e101>${ssrInterpolate(unref(offlineCount))}</span></div></div></div></section><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1q247fn117"))}</h3><span class="panel-tag" data-v-3e78e101>${ssrInterpolate(unref(deviceTwins).twins.length)}</span></div>`);
2750
+ _push(`<section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k17dkhgd112"))}</h3></div><div class="health-body" data-v-7027783b><div class="donut-wrap" data-v-7027783b><canvas width="118" height="118" data-v-7027783b></canvas><div class="donut-center" data-v-7027783b><b style="${ssrRenderStyle({ color: unref(healthTone) })}" data-v-7027783b>${ssrInterpolate(unref(healthPct))}%</b><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k7h1nxo113"))}</span></div></div><div class="health-legend" data-v-7027783b><div class="hl-row" data-v-7027783b><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-accent)" })}" data-v-7027783b></span> ${ssrInterpolate(_ctx.$t("townView.k3vp67i114"))} <span class="n" data-v-7027783b>${ssrInterpolate(unref(runningCount))}</span></div><div class="hl-row" data-v-7027783b><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-amber)" })}" data-v-7027783b></span> ${ssrInterpolate(_ctx.$t("townView.k3zcvb115"))} <span class="n" data-v-7027783b>${ssrInterpolate(unref(idleCount))}</span></div><div class="hl-row" data-v-7027783b><span class="hl-dot" style="${ssrRenderStyle({ background: "var(--hud-danger)" })}" data-v-7027783b></span> ${ssrInterpolate(_ctx.$t("townView.k3xmid116"))} <span class="n" data-v-7027783b>${ssrInterpolate(unref(alarmCount))}</span></div><div class="hl-row" data-v-7027783b><span class="hl-dot" style="${ssrRenderStyle({ background: "#3a4a63" })}" data-v-7027783b></span> ${ssrInterpolate(_ctx.$t("townView.statesOffline"))} <span class="n" data-v-7027783b>${ssrInterpolate(unref(offlineCount))}</span></div></div></div></section><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1q247fn117"))}</h3><span class="panel-tag" data-v-7027783b>${ssrInterpolate(unref(deviceTwins).twins.length)}</span></div>`);
2750
2751
  _push(ssrRenderComponent(_component_WorkshopDeviceTwinPanel, {
2751
2752
  class: "kd-embed",
2752
2753
  "daq-live": unref(daqLive),
2753
2754
  "dcw-live": unref(dcwLive),
2754
2755
  onFocusDevice
2755
2756
  }, null, _parent));
2756
- _push(`</section><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1cxf749118"))}</h3><span class="panel-tag" data-v-3e78e101>${ssrInterpolate(unref(activeAlarmCount))} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bkswpz022"))} data-v-3e78e101> ✓ </button></div><div class="alarm-list" data-v-3e78e101><!--[-->`);
2757
+ _push(`</section><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1cxf749118"))}</h3><span class="panel-tag" data-v-7027783b>${ssrInterpolate(unref(activeAlarmCount))} ${ssrInterpolate(_ctx.$t("townView.k4dfq040"))}</span><button class="mini-btn"${ssrRenderAttr("title", _ctx.$t("townView.k1bkswpz022"))} data-v-7027783b> ✓ </button></div><div class="alarm-list" data-v-7027783b><!--[-->`);
2757
2758
  ssrRenderList(unref(alarms).slice(0, 8), (a) => {
2758
- _push(`<div class="al-row" data-v-3e78e101><span class="${ssrRenderClass([a.state === 2 ? "info" : a.state === 1 ? "warn" : "crit", "al-ico"])}" data-v-3e78e101><svg class="al-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M12 3 22 20H2L12 3Z" data-v-3e78e101></path><path d="M12 10v4M12 17v.2" data-v-3e78e101></path></svg></span><div class="al-body" data-v-3e78e101><div class="al-txt" data-v-3e78e101>${ssrInterpolate(a.txt)}</div><div class="al-src" data-v-3e78e101>${ssrInterpolate(a.src)} · ${ssrInterpolate(a.time)}</div></div><button class="${ssrRenderClass([`s${a.state}`, "al-state"])}" data-v-3e78e101>${ssrInterpolate(ALARM_STATES[a.state])}</button></div>`);
2759
+ _push(`<div class="al-row" data-v-7027783b><span class="${ssrRenderClass([a.state === 2 ? "info" : a.state === 1 ? "warn" : "crit", "al-ico"])}" data-v-7027783b><svg class="al-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M12 3 22 20H2L12 3Z" data-v-7027783b></path><path d="M12 10v4M12 17v.2" data-v-7027783b></path></svg></span><div class="al-body" data-v-7027783b><div class="al-txt" data-v-7027783b>${ssrInterpolate(a.txt)}</div><div class="al-src" data-v-7027783b>${ssrInterpolate(a.src)} · ${ssrInterpolate(a.time)}</div></div><button class="${ssrRenderClass([`s${a.state}`, "al-state"])}" data-v-7027783b>${ssrInterpolate(ALARM_STATES[a.state])}</button></div>`);
2759
2760
  });
2760
2761
  _push(`<!--]-->`);
2761
- if (!unref(alarms).length) _push(`<div class="rail-empty" data-v-3e78e101><svg class="re-ico" viewBox="0 0 24 24" data-v-3e78e101><path d="M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z" data-v-3e78e101></path><path d="m9.2 12.2 2 2 3.6-4" data-v-3e78e101></path></svg><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kjz544r119"))}</span></div>`);
2762
+ if (!unref(alarms).length) _push(`<div class="rail-empty" data-v-7027783b><svg class="re-ico" viewBox="0 0 24 24" data-v-7027783b><path d="M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z" data-v-7027783b></path><path d="m9.2 12.2 2 2 3.6-4" data-v-7027783b></path></svg><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kjz544r119"))}</span></div>`);
2762
2763
  else _push(`<!---->`);
2763
- _push(`</div></section><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k1cxdtq2120"))}</h3><span class="panel-tag" data-v-3e78e101>${ssrInterpolate(unref(ticker).length)}</span></div><div class="event-list" data-v-3e78e101><!--[-->`);
2764
+ _push(`</div></section><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k1cxdtq2120"))}</h3><span class="panel-tag" data-v-7027783b>${ssrInterpolate(unref(ticker).length)}</span></div><div class="event-list" data-v-7027783b><!--[-->`);
2764
2765
  ssrRenderList([...unref(ticker)].reverse(), (ev, i) => {
2765
- _push(`<div class="event-row" data-v-3e78e101><span class="ev-time" data-v-3e78e101>${ssrInterpolate(fmtTime(ev.at))}</span><span class="ev-name"${ssrRenderAttr("title", ev.agentName)} data-v-3e78e101>${ssrInterpolate(ev.agentName)}</span><span class="ev-text"${ssrRenderAttr("title", ev.text)} data-v-3e78e101>${ssrInterpolate(ev.text)}</span></div>`);
2766
+ _push(`<div class="event-row" data-v-7027783b><span class="ev-time" data-v-7027783b>${ssrInterpolate(fmtTime(ev.at))}</span><span class="ev-name"${ssrRenderAttr("title", ev.agentName)} data-v-7027783b>${ssrInterpolate(ev.agentName)}</span><span class="ev-text"${ssrRenderAttr("title", ev.text)} data-v-7027783b>${ssrInterpolate(ev.text)}</span></div>`);
2766
2767
  });
2767
2768
  _push(`<!--]-->`);
2768
- if (!unref(ticker).length) _push(`<div class="rail-empty" data-v-3e78e101><svg class="re-ico" viewBox="0 0 24 24" data-v-3e78e101><path d="M3 12h3l2.5-6 4 12L15 12h6" data-v-3e78e101></path></svg><span data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.k2uk6ua121"))}</span></div>`);
2769
+ if (!unref(ticker).length) _push(`<div class="rail-empty" data-v-7027783b><svg class="re-ico" viewBox="0 0 24 24" data-v-7027783b><path d="M3 12h3l2.5-6 4 12L15 12h6" data-v-7027783b></path></svg><span data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.k2uk6ua121"))}</span></div>`);
2769
2770
  else _push(`<!---->`);
2770
- _push(`</div></section><section class="panel" data-v-3e78e101><div class="panel-hd" data-v-3e78e101><h3 data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kjug2jq122"))}</h3></div><div class="mm-body" data-v-3e78e101><div class="mm-wrap"${ssrRenderAttr("title", _ctx.$t("townView.klfwiqg023"))} data-v-3e78e101><canvas class="nav-cv" data-v-3e78e101></canvas></div><div class="mm-col" data-v-3e78e101><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1lap9bs024"))} data-v-3e78e101><svg class="vp-svg" viewBox="0 0 24 24" data-v-3e78e101><path d="M3 12a9 9 0 1 0 3-6.7M3 4v5h5" data-v-3e78e101></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.kav8a8k025"))} data-v-3e78e101><svg class="vp-svg" viewBox="0 0 24 24" data-v-3e78e101><circle cx="11" cy="11" r="6.5" data-v-3e78e101></circle><path d="m16 16 4.5 4.5M8.5 11h5" data-v-3e78e101></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1u7uce9026"))} data-v-3e78e101><svg class="vp-svg" viewBox="0 0 24 24" data-v-3e78e101><circle cx="11" cy="11" r="6.5" data-v-3e78e101></circle><path d="m16 16 4.5 4.5M8.5 11h5M11 8.5v5" data-v-3e78e101></path></svg></button></div></div><div class="mm-meta mono" data-v-3e78e101>${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-3e78e101><span data-v-3e78e101><span class="${ssrRenderClass([{ red: unref(conn).state !== "open" }, "sb-dot"])}" data-v-3e78e101></span>${ssrInterpolate(_ctx.$t("townView.k1i4g246123"))} <b data-v-3e78e101>${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-3e78e101>${ssrInterpolate(_ctx.$t("townView.k4a0jt124"))} <b data-v-3e78e101>${ssrInterpolate(unref(blockCount))}</b><i data-v-3e78e101>·</i>${ssrInterpolate(_ctx.$t("townView.k3xdvm125"))} <b data-v-3e78e101>${ssrInterpolate(unref(agentCount))}</b><i data-v-3e78e101>·</i>${ssrInterpolate(_ctx.$t("townView.k47e16126"))} <b data-v-3e78e101>${ssrInterpolate(unref(deviceCount))}</b></span><span class="sb-lat mono" data-v-3e78e101>${ssrInterpolate(unref(fps))} FPS </span><span class="copy" data-v-3e78e101> © 2026 ABO · DIGITAL TWIN · ${ssrInterpolate(_ctx.$t("townView.k1h5gxpf137"))}</span></footer>`);
2771
- if (unref(sheetOpen)) _push(`<div class="sheet-mask" data-v-3e78e101></div>`);
2771
+ _push(`</div></section><section class="panel" data-v-7027783b><div class="panel-hd" data-v-7027783b><h3 data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kjug2jq122"))}</h3></div><div class="mm-body" data-v-7027783b><div class="mm-wrap"${ssrRenderAttr("title", _ctx.$t("townView.klfwiqg023"))} data-v-7027783b><canvas class="nav-cv" data-v-7027783b></canvas></div><div class="mm-col" data-v-7027783b><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1lap9bs024"))} data-v-7027783b><svg class="vp-svg" viewBox="0 0 24 24" data-v-7027783b><path d="M3 12a9 9 0 1 0 3-6.7M3 4v5h5" data-v-7027783b></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.kav8a8k025"))} data-v-7027783b><svg class="vp-svg" viewBox="0 0 24 24" data-v-7027783b><circle cx="11" cy="11" r="6.5" data-v-7027783b></circle><path d="m16 16 4.5 4.5M8.5 11h5" data-v-7027783b></path></svg></button><button class="vp-tool"${ssrRenderAttr("title", _ctx.$t("townView.k1u7uce9026"))} data-v-7027783b><svg class="vp-svg" viewBox="0 0 24 24" data-v-7027783b><circle cx="11" cy="11" r="6.5" data-v-7027783b></circle><path d="m16 16 4.5 4.5M8.5 11h5M11 8.5v5" data-v-7027783b></path></svg></button></div></div><div class="mm-meta mono" data-v-7027783b>${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-7027783b><span data-v-7027783b><span class="${ssrRenderClass([{ red: unref(conn).state !== "open" }, "sb-dot"])}" data-v-7027783b></span>${ssrInterpolate(_ctx.$t("townView.k1i4g246123"))} <b data-v-7027783b>${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-7027783b>${ssrInterpolate(_ctx.$t("townView.k4a0jt124"))} <b data-v-7027783b>${ssrInterpolate(unref(blockCount))}</b><i data-v-7027783b>·</i>${ssrInterpolate(_ctx.$t("townView.k3xdvm125"))} <b data-v-7027783b>${ssrInterpolate(unref(agentCount))}</b><i data-v-7027783b>·</i>${ssrInterpolate(_ctx.$t("townView.k47e16126"))} <b data-v-7027783b>${ssrInterpolate(unref(deviceCount))}</b></span><span class="sb-lat mono" data-v-7027783b>${ssrInterpolate(unref(fps))} FPS </span><span class="copy" data-v-7027783b> © 2026 ABO · DIGITAL TWIN · ${ssrInterpolate(_ctx.$t("townView.k1h5gxpf137"))}</span></footer>`);
2772
+ if (unref(sheetOpen)) _push(`<div class="sheet-mask" data-v-7027783b></div>`);
2772
2773
  else _push(`<!---->`);
2773
- if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-3e78e101><div class="loading-spinner" data-v-3e78e101></div><span class="loading-text" data-v-3e78e101>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2774
+ if (!unref(ready)) _push(`<div data-hud="town-loading" class="loading-mask" data-v-7027783b><div class="loading-spinner" data-v-7027783b></div><span class="loading-text" data-v-7027783b>${ssrInterpolate(_ctx.$t("townView.kvjdqfg059"))}</span></div>`);
2774
2775
  else _push(`<!---->`);
2775
2776
  _push(`</div>`);
2776
2777
  };
@@ -2784,7 +2785,7 @@ TownView_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
2784
2785
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/workshop/town/TownView.vue");
2785
2786
  return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
2786
2787
  };
2787
- var TownView_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(TownView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-3e78e101"]]), { __name: "WorkshopTownView" });
2788
+ var TownView_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(TownView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-7027783b"]]), { __name: "WorkshopTownView" });
2788
2789
 
2789
2790
  export { TownView_default as T, useStorage as u };
2790
- //# sourceMappingURL=TownView-BuLAsmpR.mjs.map
2791
+ //# sourceMappingURL=TownView-CJ6IsDCc.mjs.map