agentworkshop 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.AgentWorkShop/prompts/host-tools.json +17 -0
- package/.env.example +37 -0
- package/.output/.AgentWorkShop/prompts/host-tools.json +17 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{Bc_mM2cU.js → BH0Z05CS.js} +1 -1
- package/.output/public/_nuxt/Bxgaym6j.js +1 -0
- package/.output/public/_nuxt/{DRlJ2-4p.js → By-LNp3k.js} +1 -1
- package/.output/public/_nuxt/{C2QSTAWf.js → Bz40vyZS.js} +1 -1
- package/.output/public/_nuxt/{CwS_UHeH.js → CS8R0_J3.js} +1 -1
- package/.output/public/_nuxt/{ClptO7LA.js → CUxV8Bw_.js} +1 -1
- package/.output/public/_nuxt/CXmkVXS5.js +1 -0
- package/.output/public/_nuxt/DC-QMEk1.js +2 -0
- package/.output/public/_nuxt/{C-Y5ydB6.js → Dgp2wK2U.js} +6 -6
- package/.output/public/_nuxt/{Ck6tznoQ.js → DjqcbFBE.js} +1 -1
- package/.output/public/_nuxt/{B0haAGoq.js → GP2wXyuY.js} +1 -1
- package/.output/public/_nuxt/TownView.Bt33bo1M.css +1 -0
- package/.output/public/_nuxt/{MhK4buEJ.js → XVB9_zwP.js} +1 -1
- package/.output/public/_nuxt/_id_.BeqSLvl_.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/90ae66f6-f649-4b44-8df9-bcd9e9a957a2.json +1 -0
- package/.output/public/_nuxt/{Bq_KKxCg.js → i_MKObHo.js} +1 -1
- package/.output/public/_nuxt/settings.DeRNNUcP.css +1 -0
- package/.output/public/_nuxt/{CclO6GyL.js → tpDMVY5w.js} +1 -1
- package/.output/public/_nuxt/{C0FogB-p.js → zwdqvGN_.js} +1 -1
- package/.output/server/chunks/_/nitro.mjs +2672 -2350
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs → TownView-BkHxMiwZ.mjs} +168 -159
- package/.output/server/chunks/build/{TownView-D9yCQe1T.mjs.map → TownView-BkHxMiwZ.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-xR3AChMO.mjs → _id_-Bna1_JuB.mjs} +5 -4
- package/.output/server/chunks/build/_id_-Bna1_JuB.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CmKAEFHV.mjs → _id_-GnRJPykX.mjs} +161 -119
- package/.output/server/chunks/build/_id_-GnRJPykX.mjs.map +1 -0
- package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs → _wsId_-CzLDGT_V.mjs} +6 -5
- package/.output/server/chunks/build/{_wsId_-C45nVrl-.mjs.map → _wsId_-CzLDGT_V.mjs.map} +1 -1
- package/.output/server/chunks/build/agents-D4l1icvn.mjs +1 -0
- package/.output/server/chunks/build/agents-D4l1icvn.mjs.map +1 -1
- package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs +1 -0
- package/.output/server/chunks/build/channel-templates-DqjtC-R0.mjs.map +1 -1
- package/.output/server/chunks/build/{daq-Boz_dlAQ.mjs → daq-D_W59QOe.mjs} +6 -5
- package/.output/server/chunks/build/daq-D_W59QOe.mjs.map +1 -0
- package/.output/server/chunks/build/{dcw-wTRwBAUi.mjs → dcw-BTM5YU-B.mjs} +3 -2
- package/.output/server/chunks/build/dcw-BTM5YU-B.mjs.map +1 -0
- package/.output/server/chunks/build/default-Dt6xLdpd.mjs +1 -0
- package/.output/server/chunks/build/{logs-Cdi-eXlN.mjs → logs-CUQt1z7D.mjs} +4 -3
- package/.output/server/chunks/build/logs-CUQt1z7D.mjs.map +1 -0
- package/.output/server/chunks/build/monitor-yNoV98rf.mjs +1 -0
- package/.output/server/chunks/build/{pages-bWKy0ZsA.mjs → pages-DR2bzczM.mjs} +4 -3
- package/.output/server/chunks/build/pages-DR2bzczM.mjs.map +1 -0
- package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs +1 -0
- package/.output/server/chunks/build/plugins-B-ZNey0Z.mjs.map +1 -1
- package/.output/server/chunks/build/{settings-C3T5hR2A.mjs → settings-Cr06lbRy.mjs} +26 -18
- package/.output/server/chunks/build/settings-Cr06lbRy.mjs.map +1 -0
- package/.output/server/chunks/build/teams-QR3BBF7A.mjs +1 -0
- package/.output/server/chunks/build/teams-QR3BBF7A.mjs.map +1 -1
- package/.output/server/chunks/build/tokens-DFvr_TLj.mjs +1 -0
- package/.output/server/chunks/build/tokens-DFvr_TLj.mjs.map +1 -1
- package/.output/server/chunks/build/{town-CKg6Qxba.mjs → town-BN4vQPb8.mjs} +6 -5
- package/.output/server/chunks/build/town-BN4vQPb8.mjs.map +1 -0
- package/.output/server/chunks/build/town-BUqRobze.mjs +1 -0
- package/.output/server/chunks/build/town-BUqRobze.mjs.map +1 -1
- package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs → useDaqStream-hwkhJHFU.mjs} +2 -2
- package/.output/server/chunks/build/{useDaqStream-zHEptJQ_.mjs.map → useDaqStream-hwkhJHFU.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDcwStream-BkWDGaWp.mjs → useDcwStream-Bdew_yrr.mjs} +16 -1
- package/.output/server/chunks/build/useDcwStream-Bdew_yrr.mjs.map +1 -0
- package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs → useDeviceTwins-C6EBg9oN.mjs} +2 -2
- package/.output/server/chunks/build/{useDeviceTwins-NhtXqSkU.mjs.map → useDeviceTwins-C6EBg9oN.mjs.map} +1 -1
- package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs → useOpsLog-DdCqKVVG.mjs} +2 -2
- package/.output/server/chunks/build/{useOpsLog-CU64VDg5.mjs.map → useOpsLog-DdCqKVVG.mjs.map} +1 -1
- package/.output/server/chunks/build/users-4FZ0yFUO.mjs +1 -0
- package/.output/server/chunks/build/users-4FZ0yFUO.mjs.map +1 -1
- package/.output/server/chunks/build/workshop-CLhwe5eo.mjs +1 -0
- package/.output/server/chunks/build/workshop-CLhwe5eo.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +1 -0
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/mcp/workshop.mjs +1 -0
- package/.output/server/chunks/routes/api/mcp/workshop.mjs.map +1 -1
- package/.output/server/chunks/routes/api/metrics.mjs +1 -0
- package/.output/server/chunks/routes/api/metrics.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/_name/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/client/_name_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs +1 -0
- package/.output/server/chunks/routes/api/plugins/manifest.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/config.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/index.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/system/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor/terminal/ws.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor/terminate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/monitor.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/monitor.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs +1 -0
- package/.output/server/chunks/routes/api/system/settings/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs +1 -0
- package/.output/server/chunks/routes/api/system/settings/reset.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.put.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/login.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/logout.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/me.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/register.post.mjs +1 -0
- package/.output/server/chunks/routes/api/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id/token.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/users/tokens/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/_...path_.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/a2a/send.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/bindings/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agent-tools/invoke.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/agents/subscribe.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/approvals/_id/decide.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/character/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/devices/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/assets/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/audit.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/caller.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/caller.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id/instantiate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channel-templates/from-channel.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/activate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/memories/search.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/model.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/position.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/range.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/agents/_agentId_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/events.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/memories/_memoryId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/queue.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id/terminals.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels/index.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/channels.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames/content.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/frames.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/samples.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/alarms/_id/ack.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/alarms.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/infra/reconnect.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/infra.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/daq/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/bind.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/param-ledger.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs +31 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/read.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id/write.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/controller.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/journal/node/_nodeId/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/line/query.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id/stop.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/lines/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/judge.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id/series.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/optimizations/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/products/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/apply.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/mark-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id/rollback-good.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/recipes/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/close.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/data.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/runs/_id/rollback.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/templates/_key_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/dcw/test-driver.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/control.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id/telemetry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/device-twins/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/fs/dirs.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index10.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index2.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index2.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index3.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index3.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index4.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index4.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index5.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index5.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index6.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index6.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index7.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index7.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index8.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index8.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/index9.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/mailbox/all.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/mailbox.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/memories/maintenance.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/plugins/_name/disable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/plugins/_name/enable.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/plugins/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/runtime.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/scene/layouts/_channelId_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/scene/layouts.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/complete.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/dispatch.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/report.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id/retry.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/tasks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/deploy.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id/members/_agentId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/teams/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/users/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/users/register.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channel-templates/_tplId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/_id/channels/_channelId_.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/workshop/workspaces/index.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/virtual/entry.mjs +287 -85
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +1 -0
- package/.output/server/package.json +1 -1
- package/README-zh.md +434 -430
- package/README.md +5 -1
- package/app/components/workshop/DeviceTwinPanel.vue +34 -0
- package/app/components/workshop/town/TownView.vue +5 -0
- package/app/composables/workshop/useDcwStream.ts +15 -1
- package/app/config/schema.ts +54 -0
- package/app/pages/dcw/[id].vue +57 -0
- package/app/pages/settings.vue +2 -1
- package/config.yml +58 -1
- package/i18n/dicts/_en.json +56 -2
- package/i18n/dicts/dcwDetail.json +9 -1
- package/i18n/dicts/deviceTwinPanel.json +2 -1
- package/i18n/dicts/settings.json +48 -1
- package/i18n/locales/en.ts +139 -38
- package/i18n/locales/zh-CN.ts +139 -38
- package/package.json +1 -1
- package/scripts/_dbg-agent-dcw-rw.ts +131 -0
- package/scripts/_dbg-config-smoke.ts +28 -0
- package/scripts/_dbg-dcw-read-rest.mjs +103 -0
- package/scripts/_dbg-dcw-read-toolface.ts +13 -0
- package/scripts/_dbg-dcw-read-ui.mjs +74 -0
- package/scripts/_dbg-plugin-tools-inject.ts +80 -0
- package/scripts/_dbg-plugin-ui-wizard.mjs +125 -0
- package/scripts/_dbg-plugin-verify-e2e.mjs +123 -0
- package/scripts/test-config-precedence.ts +124 -0
- package/scripts/test-dcw-read.ts +153 -0
- package/server/api/workshop/dcw/[id]/read.post.ts +18 -0
- package/server/api/workshop/ws.ts +6 -4
- package/server/data/daqs.json +78 -8
- package/server/data/dcw-rollback.json +221 -1
- package/server/data/dcw-runs.json +123 -54
- package/server/data/dcw-writes.json +312 -0
- package/server/data/dcws.json +646 -4
- package/server/data/line-runs.json +12 -1
- package/server/plugins/backup.ts +7 -5
- package/server/plugins/retention.ts +59 -57
- package/server/plugins/workshop.ts +5 -4
- package/server/services/workshop/agents/industrial-tools.ts +50 -1
- package/server/services/workshop/agents/omp-agent.ts +10 -8
- package/server/services/workshop/agents/tool-approvals.ts +175 -174
- package/server/services/workshop/daq/alarm-notify.ts +102 -100
- package/server/services/workshop/daq/bus/mqtt.adapter.ts +14 -15
- package/server/services/workshop/daq/daq-controller.ts +3 -3
- package/server/services/workshop/daq/storage/sqlite.adapter.ts +5 -4
- package/server/services/workshop/daq/storage/timescale.adapter.ts +5 -4
- package/server/services/workshop/db/retention.ts +49 -50
- package/server/services/workshop/dcw/dcw-controller.ts +56 -1
- package/server/services/workshop/dcw/dcw-node.ts +233 -200
- package/server/services/workshop/dcw/dcw-runtime.ts +46 -9
- package/server/services/workshop/dcw/drivers.ts +98 -0
- package/server/services/workshop/dcw/recipe-rollback-manager.ts +16 -15
- package/server/services/workshop/logger.ts +65 -58
- package/server/services/workshop/runtime/embedding-provider.ts +9 -5
- package/server/services/workshop/runtime/manager.ts +16 -7
- package/server/services/workshop/runtime/memory.ts +14 -7
- package/server/services/workshop/settings.ts +143 -0
- package/shared/config/engine.mjs +6 -2
- package/shared/config/schema.json +48 -1
- package/shared/dcw-protocol.ts +21 -0
- package/.output/public/_nuxt/BD9D9pl4.js +0 -1
- package/.output/public/_nuxt/BxD8Fg_Z.js +0 -2
- package/.output/public/_nuxt/CwcOEM8m.js +0 -1
- package/.output/public/_nuxt/TownView.CI2Wpzty.css +0 -1
- package/.output/public/_nuxt/_id_.Ci4u30cR.css +0 -1
- package/.output/public/_nuxt/builds/meta/a0ac51ef-51c0-4ff9-8484-7c90d8dd10ba.json +0 -1
- package/.output/public/_nuxt/settings.BG0K9_MG.css +0 -1
- package/.output/server/chunks/build/_id_-CmKAEFHV.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-xR3AChMO.mjs.map +0 -1
- package/.output/server/chunks/build/daq-Boz_dlAQ.mjs.map +0 -1
- package/.output/server/chunks/build/dcw-wTRwBAUi.mjs.map +0 -1
- package/.output/server/chunks/build/logs-Cdi-eXlN.mjs.map +0 -1
- package/.output/server/chunks/build/pages-bWKy0ZsA.mjs.map +0 -1
- package/.output/server/chunks/build/settings-C3T5hR2A.mjs.map +0 -1
- package/.output/server/chunks/build/town-CKg6Qxba.mjs.map +0 -1
- package/.output/server/chunks/build/useDcwStream-BkWDGaWp.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./DNJSkm3Q.js";import{C as t,G as n,H as r,Ht as i,St as a,Ut as ee,Wt as o,a as s,b as c,et as l,f as u,g as d,h as f,m as p,mt as m,nt as h,p as g,rt as _,t as v,x as y}from"./BSCpFtzG.js";import{R as b}from"./2LwEn9gX.js";import{t as x}from"./DXK1U43I.js";import{n as S}from"./BeIfu4N3.js";import{t as te}from"./Bsc69G4x.js";import{t as ne}from"./ByGNWgAr.js";import{r as C}from"./W1E3-5ML.js";import{t as re}from"./DVQAz9WI.js";import{t as ie}from"./B9aPoQvt.js";import{n as ae,r as oe,t as se}from"./B4GHHF6d2.js";import{t as ce}from"./D8DDDzV62.js";import{t as w}from"./pRQri7vQ2.js";import{t as T}from"./NIM0Wglj2.js";import{t as le}from"./BCipft_k2.js";var ue={class:`settings-page`},de={class:`aw-page-head`},fe={class:`aw-kicker`},pe={class:`aw-stamp`},me={class:`settings-layout`},he={class:`settings-nav`},ge=[`onClick`],E={class:`settings-body`},D={class:`section-title`},O={class:`section-desc`},k={class:`set-row`},A={class:`set-text`},j={class:`set-title`},M={class:`set-sub`},N={class:`color-swatches`},P=[`title`,`onClick`],F={class:`swatch-label`},I={key:0,class:`i-tabler-check swatch-check`},L={class:`toggle-row`},_e={class:`set-text`},ve={class:`set-title`},ye={class:`set-sub`},be=[`aria-checked`],xe={class:`toggle-row`},Se={class:`set-text`},Ce={class:`set-title`},we={class:`set-sub`},Te={class:`section-title`},Ee={class:`section-desc`},De={class:`rt-group-title`},Oe={class:`rt-main`},ke={class:`rt-title`},Ae={class:`rt-sub`},je={class:`rt-ctrl`},Me={key:3,class:`rt-color`},Ne=[`value`,`onInput`],Pe=[`title`,`onClick`],Fe={class:`rt-actions`},Ie=[`disabled`],Le={class:`rt-path aw-mono`},Re={class:`section-title`},ze={class:`section-desc`},Be={class:`aw-mono`},Ve={class:`identity-note`},R=v(t({__name:`settings`,setup(t){let{t:v,locale:R,locales:He,setLocale:Ue}=S(),z=x(),B=le(),V=e().public,H=T(),U=m(`appearance`),W=w(),G=m({}),K=m(new Set),q=m(!1),J=m(null);function Y(){G.value={...W.effective},K.value=new Set}l(()=>W.loaded,e=>{e&&Y()}),l(()=>W.effective,()=>{K.value.size===0&&Y()},{deep:!0});function X(e){K.value.add(e),J.value=null}async function We(){if(K.value.size){q.value=!0,J.value=null;try{let e={};for(let t of K.value)e[t]=G.value[t];let t=await W.patch(e);Y();let n=t.restartRequired??[];J.value=n.length?{type:`warning`,text:v(`settings.runtime.restartNotice`,{keys:n.join(`, `)})}:{type:`success`,text:v(`settings.runtime.savedLive`)}}catch(e){J.value={type:`error`,text:e?.response?.data?.message||e?.message||String(e)}}finally{q.value=!1}}}async function Ge(e){try{await W.patch({[e]:null}),Y(),J.value={type:`success`,text:v(`settings.runtime.keyReset`,{key:e})}}catch(e){J.value={type:`error`,text:e?.response?.data?.message||e?.message||String(e)}}}async function Ke(){try{await W.resetAll(),Y(),J.value={type:`success`,text:v(`settings.runtime.resetAllDone`)}}catch(e){J.value={type:`error`,text:e?.response?.data?.message||e?.message||String(e)}}}function Z(e){return{server:v(`settings.runtime.groupServer`),app:v(`settings.runtime.groupApp`),api:`API`,theme:v(`settings.runtime.groupTheme`),i18n:v(`settings.runtime.groupI18n`),security:v(`settings.runtime.groupSecurity`),daq:v(`settings.runtime.groupDaq`)}[e]??e}function qe(e){return e===`runtime`?`src-runtime`:e===`env`?`src-env`:`src-yaml`}function Je(e){let t=e.labelKey;return t&&v(t)!==t?v(t):e.label}let Q=String(V.primaryColor),Ye=[{value:Q,label:v(`settings.accentInk`)},{value:`#c9963f`,label:v(`settings.accentStone`)},{value:`#44615a`,label:v(`settings.accentMoss`)},{value:`#3f6094`,label:v(`settings.accentSlate`)},{value:`#6b5aa0`,label:v(`settings.accentPlum`)},{value:`#9c5744`,label:v(`settings.accentClay`)}],$=u(()=>z.accent??Q);function Xe(e){z.setAccent(e===Q?null:e),C.success(v(`settings.accentApplied`))}function Ze(){z.setAccent(null),C.success(v(`settings.accentReset`))}let Qe=u(()=>He.value.map(e=>({label:e.name,value:e.code}))),$e=e=>{e!=null&&(localStorage.setItem(`aw.locale`,String(e)),Ue(String(e)),window.location.reload())},et=u(()=>[{label:v(`home.fields.name`),value:B.name},{label:v(`home.fields.version`),value:`v${B.version}`},{label:v(`home.fields.mode`),value:B.mode},{label:v(`home.fields.apiBase`),value:`${B.apiBase} (${V.apiTimeout}ms)`},{label:v(`home.fields.primary`),value:Q},{label:`i18n`,value:R.value}]),tt=u(()=>[{key:`appearance`,icon:`i-tabler-palette`,label:v(`settings.theme`)},{key:`runtime`,icon:`i-tabler-settings`,label:v(`settings.runtimeTab`)},{key:`system`,icon:`i-tabler-server-2`,label:v(`settings.systemTab`)}]);return(e,t)=>{let l=te,u=re,m=se,x=ce,S=ne,C=oe,w=ae,T=ie;return r(),d(`div`,ue,[g(`div`,de,[g(`div`,null,[g(`p`,fe,o(a(v)(`menu.system`))+` / settings `,1),g(`h1`,null,o(a(v)(`settings.title`)),1)]),g(`span`,pe,`v`+o(a(B).version),1)]),y(T,{bordered:!1,class:`settings-card`},{default:h(()=>[g(`div`,me,[g(`div`,he,[(r(!0),d(s,null,n(a(tt),e=>(r(),d(`button`,{key:e.key,class:i([`nav-item`,{active:a(U)===e.key}]),onClick:t=>U.value=e.key},[g(`span`,{class:i(e.icon)},null,2),g(`span`,null,o(e.label),1)],10,ge))),128))]),g(`div`,E,[_(g(`div`,null,[g(`h3`,D,o(a(v)(`settings.theme`)),1),g(`p`,O,o(a(v)(`settings.appearanceDesc`)),1),g(`div`,k,[g(`div`,A,[g(`div`,j,o(a(v)(`settings.primaryColor`)),1),g(`div`,M,o(a(v)(`settings.accentDesc`)),1)])]),g(`div`,N,[(r(),d(s,null,n(Ye,e=>g(`button`,{key:e.value,class:i([`swatch`,{on:a($).toLowerCase()===e.value.toLowerCase()}]),style:ee({"--sw":e.value}),title:e.label,onClick:t=>Xe(e.value)},[t[1]||=g(`span`,{class:`swatch-dot`},null,-1),g(`span`,F,o(e.label),1),a($).toLowerCase()===e.value.toLowerCase()?(r(),d(`span`,I)):f(``,!0)],14,P)),64))]),g(`button`,{class:`aw-pill outline reset-btn`,onClick:Ze},[t[2]||=g(`span`,{class:`i-tabler-rotate`},null,-1),c(` `+o(a(v)(`settings.accentResetAction`)),1)]),g(`div`,L,[g(`div`,_e,[g(`div`,ve,o(a(z).isDark?a(v)(`common.dark`):a(v)(`common.light`)),1),g(`div`,ye,o(a(v)(`settings.darkDesc`)),1)]),g(`button`,{class:i([`switch`,{on:a(z).isDark}]),role:`switch`,"aria-checked":a(z).isDark,onClick:t[0]||=e=>a(z).toggleDark()},[...t[3]||=[g(`span`,{class:`knob`},null,-1)]],10,be)]),g(`div`,xe,[g(`div`,Se,[g(`div`,Ce,o(a(v)(`header.language`)),1),g(`div`,we,o(a(v)(`settings.languageDesc`)),1)]),y(l,{value:a(R),options:a(Qe),style:{width:`140px`},onChange:$e},null,8,[`value`,`options`])])],512),[[b,a(U)===`appearance`]]),_(g(`div`,null,[g(`h3`,Te,o(a(v)(`settings.runtimeTab`)),1),g(`p`,Ee,o(a(v)(`settings.runtime.desc`)),1),a(J)?(r(),p(u,{key:0,type:a(J).type,"show-icon":``,class:`rt-notice`,message:a(J).text},null,8,[`type`,`message`])):f(``,!0),(r(!0),d(s,null,n(a(W).groups,e=>(r(),d(s,{key:e.group},[g(`h4`,De,o(Z(e.group)),1),(r(!0),d(s,null,n(e.items,e=>(r(),d(`div`,{key:e.key,class:`rt-row`},[g(`div`,Oe,[g(`div`,ke,[c(o(Je(e))+` `,1),g(`span`,{class:i([`rt-tag`,qe(a(W).sourceOf(e.key))])},o(a(W).sourceOf(e.key)),3),g(`span`,{class:i([`rt-tag`,e.applies])},o(e.applies===`live`?a(v)(`settings.runtime.live`):a(v)(`settings.runtime.restart`)),3)]),g(`div`,Ae,o(e.description),1)]),g(`div`,je,[e.type===`number`?(r(),p(m,{key:0,value:a(G)[e.key],"onUpdate:value":t=>a(G)[e.key]=t,min:e.min,max:e.max,onChange:t=>X(e.key)},null,8,[`value`,`onUpdate:value`,`min`,`max`,`onChange`])):e.type===`boolean`?(r(),p(x,{key:1,checked:a(G)[e.key],"onUpdate:checked":t=>a(G)[e.key]=t,onChange:t=>X(e.key)},null,8,[`checked`,`onUpdate:checked`,`onChange`])):e.type===`select`?(r(),p(l,{key:2,value:a(G)[e.key],"onUpdate:value":t=>a(G)[e.key]=t,style:{width:`160px`},options:(e.options??[]).map(e=>({label:e,value:e})),onChange:t=>X(e.key)},null,8,[`value`,`onUpdate:value`,`options`,`onChange`])):e.type===`color`?(r(),d(`span`,Me,[g(`input`,{type:`color`,value:String(a(G)[e.key]??`#35e0a0`),onInput:t=>{a(G)[e.key]=t.target.value,X(e.key)}},null,40,Ne),y(S,{value:String(a(G)[e.key]??``),style:{width:`110px`},class:`aw-mono`,onChange:t=>{a(G)[e.key]=t.target.value,X(e.key)}},null,8,[`value`,`onChange`])])):(r(),p(S,{key:4,value:a(G)[e.key],"onUpdate:value":t=>a(G)[e.key]=t,style:{width:`220px`},onChange:t=>X(e.key)},null,8,[`value`,`onUpdate:value`,`onChange`])),g(`button`,{class:`aw-pill outline rt-reset`,title:a(v)(`settings.runtime.resetKey`),onClick:t=>Ge(e.key)},[...t[4]||=[g(`span`,{class:`i-tabler-rotate`},null,-1)]],8,Pe)])]))),128))],64))),128)),g(`div`,Fe,[g(`button`,{class:`aw-pill primary`,disabled:!a(K).size||a(q),onClick:We},[t[5]||=g(`span`,{class:`i-tabler-device-floppy`},null,-1),c(` `+o(a(q)?`…`:a(v)(`settings.runtime.save`)),1)],8,Ie),g(`button`,{class:`aw-pill outline`,onClick:Ke},o(a(v)(`settings.runtime.resetAll`)),1),g(`span`,Le,o(a(W).settingsPath),1)])],512),[[b,a(U)===`runtime`]]),_(g(`div`,null,[g(`h3`,Re,o(a(v)(`settings.systemTab`)),1),g(`p`,ze,o(a(v)(`settings.systemDesc`)),1),y(w,{bordered:``,column:1,size:`small`},{default:h(()=>[(r(!0),d(s,null,n(a(et),e=>(r(),p(C,{key:e.label,label:e.label},{default:h(()=>[g(`span`,Be,o(e.value),1)]),_:2},1032,[`label`]))),128))]),_:1}),g(`p`,Ve,o(a(H).isLoggedIn?`${a(v)(`settings.identity`)}: ${a(H).user?.name} (${a(H).user?.role})`:a(v)(`settings.identityGuest`)),1)],512),[[b,a(U)===`system`]])])])]),_:1})])}}}),[[`__scopeId`,`data-v-5283aa9d`]]);export{R as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BUcmySDa2.js","./BBrRELH32.js","./CWKEp1wx2.js","./BFjGV-RV2.js","./RYFtK4qZ2.js","./BGkumHZ32.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{C as e,F as t,G as n,H as r,Ht as i,M as a,St as o,Ut as s,Wt as c,a as l,b as u,bt as d,dt as f,et as p,f as m,ft as h,g,gt as _,h as v,it as y,lt as b,m as x,mt as S,nt as ee,ot as C,p as w,pt as te,rt as T,t as E,vt as D,w as O,x as k,y as A,z as ne}from"./BSCpFtzG.js";import{B as j,I as M,L as N,R as re,k as ie,z as ae}from"./2LwEn9gX.js";import{t as oe}from"./HclGiUj8.js";import{n as se}from"./BeIfu4N3.js";import{t as ce}from"./BJvGPTpC.js";import{t as le}from"./eHGLpQSg2.js";import{t as ue}from"./NIM0Wglj2.js";import{t as de}from"./BBrRELH32.js";import{C as fe,L as pe,N as P,O as me,St as F,_ as he,b as ge,c as _e,dt as ve,et as ye,v as be,y as xe,z as I}from"./BFjGV-RV2.js";import{t as Se}from"./C_gFA2H_2.js";import{t as Ce}from"./36oeS8_R2.js";import{t as we}from"./B0haAGoq.js";import{r as Te,t as Ee}from"./CwS_UHeH.js";import{t as De}from"./ClptO7LA.js";import{n as Oe,t as ke}from"./dt2tKE95.js";var L=`__characterAssets`;function Ae(e){return{id:e.id,name:e.name,file:e.file,frames:e.sheet?.frames??4,frameWidth:e.sheet?.frameWidth??48,frameHeight:e.sheet?.frameHeight??88,kind:e.kind===`glb`?`glb`:e.kind===`dev`?`dev`:`sheet`,builtin:e.author===`system`,applied:(e.appliedTo?.length??0)>0}}function je(){let e=[],t=[{id:`knight`,name:`灰羽骑士`,file:`/assets/game/character/knight.png`,frames:4,frameWidth:48,frameHeight:88,kind:`sheet`,builtin:!0,applied:!1},{id:`mage`,name:`紫晶法师`,file:`/assets/game/character/mage.png`,frames:4,frameWidth:48,frameHeight:88,kind:`sheet`,builtin:!0,applied:!1},{id:`bot`,name:`青枢机械`,file:`/assets/game/character/bot.png`,frames:4,frameWidth:48,frameHeight:88,kind:`sheet`,builtin:!0,applied:!1},{id:`hero-3d`,name:`标准员工模型`,file:`/assets/game/character/hero-3d.glb`,frames:1,frameWidth:0,frameHeight:0,kind:`glb`,builtin:!0,applied:!1,hint:`默认员工 3D 模型`},{id:`device-3d`,name:`工业泵设备`,file:`/assets/game/character/device-3d.glb`,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!0,applied:!1,hint:`数字孪生实体模型(拖入场景生成设备)`}],n=[];try{let e=Object.assign({});for(let[t,r]of Object.entries(e)){let e=t.split(`/`).pop()??``,i=`dev-folder-`+e.replace(/\.glb$/i,``),a=r.replace(/^\/public\//,`/`);n.push({id:i,name:e.replace(/\.glb$/i,``).replace(/[-_]/g,` `),file:a,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!0,applied:!1,hint:`设备实体(拖入场景生成数字孪生)`})}}catch{}let r=(e=!0)=>{let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={},r=t||``;return r&&(n.authorization=`Bearer ${decodeURIComponent(r)}`),e&&(n[`content-type`]=`application/json`),n},i=h({models:e,loaded:!1,loading:!1,error:``,async load(){if(!(i.loading||i.loaded)){i.loading=!0;try{let[e,a]=await Promise.allSettled([fetch(`/api/workshop/assets/character`,{headers:r()}),fetch(`/api/workshop/assets/devices`,{headers:r()})]),o=e.status===`fulfilled`?await e.value.json().catch(()=>({})):{},s=a.status===`fulfilled`?await a.value.json().catch(()=>({})):{},c=o?.data?.assets??[],l=(s?.data?.devices??[]).map(e=>({id:e.id,name:e.name,file:e.file,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!0,applied:!1,hint:`设备实体(拖入场景生成数字孪生)`,hFactor:typeof e.defaultScale==`number`&&e.defaultScale>0?e.defaultScale:1})),u=new Set(t.map(e=>e.file)),d=(s?.data?.characters??[]).filter(e=>!u.has(e.file)).map(e=>({id:e.id,name:e.name,file:e.file,frames:1,frameWidth:0,frameHeight:0,kind:`glb`,builtin:!0,applied:!1,hint:`角色 3D 模型(在频道成员管理中设置)`})),f=[],p=new Set;for(let e of c)f.push(Ae(e)),p.add(e.id);for(let e of l)p.has(e.id)||(f.push(e),p.add(e.id));for(let e of d)p.has(e.id)||(f.push(e),p.add(e.id));for(let e of t)p.has(e.id)||f.push(e);for(let e of n)p.has(e.id)||f.push(e);i.models.splice(0,i.models.length,...f),i.loaded=!0,i.error=``}catch(e){i.loaded=!1,i.error=e instanceof Error?e.message:String(e)}finally{i.loading=!1}}},byId(t){return e.find(e=>e.id===t)},async upload(e,t){let n=new FormData;n.append(`file`,e),n.append(`name`,t.name??e.name.replace(/\.[^.]+$/,``)),n.append(`workspaceId`,t.workspaceId??``),n.append(`kind`,t.kind??`sheet`),n.append(`frameWidth`,String(t.frameWidth??48)),n.append(`frameHeight`,String(t.frameHeight??88)),n.append(`frames`,String(t.frames??4));let a=await fetch(`/api/workshop/assets/character`,{method:`POST`,headers:r(!1),body:n}),o=await a.json().catch(()=>({}));if(!a.ok||!o?.data?.asset)throw Error(o?.message??`上传失败`);return i.loaded=!1,await i.load(),Ae(o.data.asset)},async remove(e){let t=await fetch(`/api/workshop/assets/character/${e}`,{method:`DELETE`,headers:r()}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n?.message??`删除失败`);return i.loaded=!1,await i.load(),{used:n?.data?.used??0}},async uploadDevice(e,t){let n=new FormData;n.append(`file`,e),t&&n.append(`name`,t);let a=await fetch(`/api/workshop/assets/devices`,{method:`POST`,headers:r(!1),body:n}),o=await a.json().catch(()=>({}));if(!a.ok||!o?.data?.asset)throw Error(o?.message??`设备模型上传失败`);i.loaded=!1,await i.load();let s=o.data.asset;return{id:s.id,name:s.name,file:s.file,frames:1,frameWidth:0,frameHeight:0,kind:`dev`,builtin:!1,applied:!1,hint:`设备实体(拖入场景生成数字孪生)`}},async removeDevice(e){let t=e.replace(/^dev-folder-/,``),n=await fetch(`/api/workshop/assets/devices/${encodeURIComponent(t)}`,{method:`DELETE`,headers:r()}),a=await n.json().catch(()=>({}));if(!n.ok)throw Error(a?.message??`设备模型删除失败`);i.loaded=!1,await i.load()},async bind(e,t,n){let i=await fetch(`/api/workshop/channels/${e}/agents/${t}/model`,{method:`PATCH`,headers:r(),body:JSON.stringify({modelRef:n})}),a=await i.json().catch(()=>({}));if(!i.ok)throw Error(a?.message??`绑定失败`)}});return i}function Me(){let e=globalThis;e[L]||(e[L]=je());let t=e[L];return t.load(),t}var R={key:0,class:`mp-loading`},Ne={key:1,class:`mp-failed`},z=Object.assign(E(e({__name:`ModelPreview3D`,props:{file:{default:``},localFile:{default:null},height:{default:64}},setup(e){let n=e,i=S(null),c=S(!1),l=S(!1),u=globalThis,d=``;function f(){if(u.__modelPreviewRig)return u.__modelPreviewRig;let e=new ge({alpha:!0,antialias:!1,powerPreference:`low-power`});e.setPixelRatio(Math.min(window.devicePixelRatio,1.5)),e.toneMapping=4,e.toneMappingExposure=1.15;let t={renderer:e,slots:new Set,raf:0,clock:new me},n=()=>{t.raf=requestAnimationFrame(n);let e=t.clock.getDelta();for(let n of t.slots)!n.canvas.isConnected&&n.canvas.width===0||(n.group&&(n.group.rotation.y+=e*n.speed),t.renderer.setSize(n.w,n.h,!1),t.renderer.render(n.scene,n.camera),n.ctx.clearRect(0,0,n.w,n.h),n.ctx.drawImage(t.renderer.domElement,0,0,n.w,n.h))};return n(),u.__modelPreviewRig=t,t}function m(){let e=u.__modelPreviewRig;!e||e.slots.size>0||(cancelAnimationFrame(e.raf),e.renderer.dispose(),e.renderer.domElement.remove(),delete u.__modelPreviewRig)}function h(e){try{let t=new xe(u.__modelPreviewRig.renderer);e.environment=t.fromScene(new he,.04).texture,e.environmentIntensity=.55,t.dispose()}catch{}e.add(new I(14674431,3813157,1.3));let t=new P(16773855,2.2);t.position.set(3,4,2),e.add(t);let n=new P(4311284,1);n.position.set(-3,1,-2.5),e.add(n)}function _(e){let t=new fe().setFromObject(e),n=new F;t.getSize(n);let r=t.getCenter(new F),i=2/(Math.max(n.x,Math.max(n.y,n.z))||1);e.scale.setScalar(i),e.position.set(-r.x*i,-r.y*i,-r.z*i)}let y=null;function b(e){if(!i.value||c.value)return;let t=i.value,r=t.clientWidth||120,a=n.height||64,o=f(),s=document.createElement(`canvas`);s.style.width=`100%`,s.style.height=`${a}px`,s.width=Math.max(2,Math.round(r*Math.min(window.devicePixelRatio,1.5))),s.height=Math.max(2,Math.round(a*Math.min(window.devicePixelRatio,1.5)));let u=s.getContext(`2d`);if(!u){c.value=!0;return}t.appendChild(s);let d=new ve;h(d);let p=new ye(38,r/a,.1,100);p.position.set(2.4,1.8,3.1),p.lookAt(0,0,0);let m=new pe;d.add(m),y={canvas:s,ctx:u,scene:d,camera:p,group:m,w:s.width,h:s.height,speed:.6},o.slots.add(y),l.value=!0,new be().load(e,e=>{let t=e.scene;y&&(t.traverse(e=>{let t=e;t.isMesh&&(t.castShadow=!1,t.receiveShadow=!1)}),_(t),y.group.add(t),l.value=!1)},void 0,()=>{l.value=!1,c.value=!0})}function x(){d&&URL.revokeObjectURL(d),d=``,y&&(u.__modelPreviewRig?.slots.delete(y),y.scene.traverse(e=>{let t=e;if(t.isMesh){t.geometry?.dispose();let e=Array.isArray(t.material)?t.material:[t.material];for(let t of e){for(let e of Object.keys(t)){let n=t[e];n&&n.isTexture&&n.dispose()}t?.dispose()}}}),y.canvas.remove(),y=null,m())}function ee(){if(c.value=!1,n.localFile){d=URL.createObjectURL(n.localFile),b(d);return}n.file&&b(n.file)}return ne(ee),p(()=>[n.file,n.localFile],()=>{x(),(n.localFile??(n.file?n.file:null))&&a(()=>ee())}),t(x),(t,n)=>(r(),g(`div`,{ref_key:`hostRef`,ref:i,class:`model-preview-3d`,style:s({height:`${e.height}px`})},[o(l)?(r(),g(`div`,R,[...n[0]||=[w(`span`,{class:`mp-spin`},null,-1)]])):o(c)?(r(),g(`div`,Ne,` PREVIEW NA `)):v(``,!0)],4))}}),[[`__scopeId`,`data-v-b29ffdbe`]]),{__name:`WorkshopTownModelPreview3D`}),Pe={class:`asset-lib`},Fe={class:`lib-head`},Ie={class:`head-title`},Le={class:`head-hint`},Re={class:`upload-row`},ze={class:`upload-name`},Be={key:0,class:`drop-hint`},Ve={key:1,class:`upload-file-tag`},He={class:`upload-actions`},Ue=[`disabled`],We=[`disabled`],Ge={key:2,class:`mini-err`},B={key:3,class:`mini-err`},V={class:`lib-grid`},Ke=[`data-model-id`,`title`,`onDragstart`],qe={key:1,class:`model-img glb dev`},Je={class:`model-name`},Ye={class:`model-badge`},Xe={class:`card-actions`},Ze=[`disabled`,`onClick`],Qe={key:0,class:`lib-note`},$e={key:1,class:`lib-note`},et={key:0,class:`mini-msg`},tt=Object.assign(E(e({__name:`AssetLibrary`,setup(e){let{t}=se(),a=Me(),s=m(()=>a.models.filter(e=>e.kind===`dev`)),d=e=>/\.(glb|gltf)$/i.test(e);function f(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-model`,t),e.dataTransfer.setData(`text/plain`,t),e.dataTransfer.effectAllowed=`copy`)}let p=S(!1),h=S(``),_=S(null),y=S(!1),b=e=>{let t=e.target;C(t.files?.[0]??null)},ee=e=>{y.value=!1,C(e.dataTransfer?.files?.[0]??null)},C=e=>{if(e&&!/\.(glb|gltf|obj|fbx)$/i.test(e.name)){h.value=`仅支持 .glb/.gltf/.obj/.fbx 模型文件`;return}_.value=e,h.value=``},te=()=>{_.value=null};async function T(){let e=_.value;if(!e){h.value=t(`assetLibrary.kcjqcaw012`);return}p.value=!0,h.value=``;try{let n=await a.uploadDevice(e);_.value=null,h.value=t(`assetLibrary.k8nv3or016`,{p0:n.name})}catch(e){h.value=e instanceof Error?e.message:String(e)}finally{p.value=!1}}let E=S(``),D=S(``);async function O(e){E.value=e,D.value=``;try{await a.removeDevice(e),D.value=t(`assetLibrary.k8n918k013`)}catch(e){D.value=e instanceof Error?e.message:String(e)}finally{E.value=``}}return(e,t)=>(r(),g(`aside`,Pe,[w(`div`,Fe,[w(`span`,Ie,c(e.$t(`assetLibrary.k7la4x5001`)),1),w(`span`,Le,c(e.$t(`assetLibrary.kulif5b002`)),1)]),w(`div`,{class:i([`upload-box`,{drop:o(y)}]),onDragover:t[0]||=j(e=>y.value=!0,[`prevent`]),onDragleave:t[1]||=e=>y.value=!1,onDrop:j(ee,[`prevent`])},[w(`label`,Re,[w(`input`,{type:`file`,accept:`.glb,.gltf,.obj,.fbx`,class:`file-input`,onChange:b},null,32),w(`span`,ze,[t[2]||=w(`span`,{class:`i-tabler-plus upload-ico`},null,-1),u(` `+c(o(_)?.name||e.$t(`assetLibrary.k1iiort6010`)),1)])]),o(y)?(r(),g(`span`,Be,[t[3]||=w(`span`,{class:`i-tabler-download`},null,-1),u(` `+c(e.$t(`assetLibrary.k5hg6jq003`)),1)])):v(``,!0),o(_)?(r(),g(l,{key:1},[d(o(_).name)?(r(),x(z,{key:0,"local-file":o(_),height:92},null,8,[`local-file`])):(r(),g(`span`,Ve,c(o(_).name)+` (`+c(e.$t(`assetLibrary.k1xz5wvk009`)),1)),w(`div`,He,[w(`button`,{class:`upload-btn go`,disabled:o(p),onClick:T},c(o(p)?e.$t(`assetLibrary.k1ar7n8i005`):e.$t(`assetLibrary.k1hhga4h014`)),9,Ue),w(`button`,{class:`upload-btn`,disabled:o(p),onClick:te},c(e.$t(`assetLibrary.k3xdnn004`)),9,We)])],64)):o(p)?(r(),g(`span`,Ge,c(e.$t(`assetLibrary.k1ar7n8i005`)),1)):v(``,!0),o(h)&&!o(_)?(r(),g(`span`,B,c(o(h)),1)):v(``,!0)],34),w(`div`,V,[(r(!0),g(l,null,n(o(s),n=>(r(),g(`div`,{key:n.id,class:`model-card`,"data-model-id":n.id,draggable:`true`,title:n.hint||e.$t(`assetLibrary.katn7lo015`,{p0:n.name}),onDragstart:e=>f(e,n.id)},[d(n.file)?(r(),x(z,{key:0,file:n.file,height:76},null,8,[`file`])):(r(),g(`span`,qe,[...t[4]||=[w(`span`,{class:`i-tabler-cpu glb-cube`,"aria-hidden":`true`},null,-1)]])),w(`span`,Je,c(n.name),1),w(`span`,Ye,c(e.$t(`assetLibrary.k1n32zs0006`)),1),w(`div`,Xe,[n.file.includes(`/assets/game/devices/`)?(r(),g(`button`,{key:0,class:`card-btn danger`,disabled:o(E)===n.id,onClick:e=>O(n.id)},c(o(E)===n.id?`…`:e.$t(`assetLibrary.k498l011`)),9,Ze)):v(``,!0)])],40,Ke))),128)),o(a).loaded?o(s).length===0?(r(),g(`div`,$e,c(e.$t(`assetLibrary.k15527e1008`)),1)):v(``,!0):(r(),g(`div`,Qe,[t[5]||=w(`span`,{class:`loading-dot`},null,-1),u(` `+c(e.$t(`assetLibrary.k1kq2tmi007`)),1)]))]),o(D)?(r(),g(`span`,et,c(o(D)),1)):v(``,!0)]))}}),[[`__scopeId`,`data-v-c83e9503`]]),{__name:`WorkshopAssetLibrary`}),nt={class:`twin-panel`},H={class:`twin-head`},U={class:`twin-kicker`},rt={class:`twin-count`},it={key:0,class:`twin-error`},at={key:1,class:`twin-empty`},ot={key:2,class:`twin-empty`},st={class:`twin-empty-frame`},ct={class:`twin-empty-title`},lt={class:`twin-empty-sub`},ut={key:3,class:`twin-list`},dt=[`onClick`],ft={class:`twin-row`},pt={class:`twin-model-tag`},mt={class:`twin-idbar`},ht={class:`twin-name`},gt={class:`twin-code`},_t=[`disabled`,`title`,`onClick`],vt={key:0,class:`twin-tele`},yt={key:1,class:`twin-daq`},bt={key:2,class:`twin-dcw`},xt={class:`dcw-head`},St={key:0,class:`dcw-src`},W={class:`dcw-set`},Ct={class:`dcw-win`},wt=[`title`],Tt={class:`dcw-ctrl`},Et=[`onUpdate:modelValue`,`step`,`min`,`max`,`placeholder`,`onKeydown`],Dt=[`disabled`,`title`,`onClick`],Ot={key:0,class:`dcw-err`},kt={key:4,class:`twin-err`},At=Object.assign(E(e({__name:`DeviceTwinPanel`,props:{daqLive:{},dcwLive:{}},emits:[`focus-device`],setup(e){let{t:a}=se(),d=De(),f=we(),p=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),m=null;ne(()=>{d.load(),m=ce(()=>void d.load(),2e3)}),t(()=>{m&&clearInterval(m)});let _=S(``),y=S(``),b=S(``),x=null;async function ee(e){if(b.value!==e.id){b.value=e.id,x&&clearTimeout(x),x=setTimeout(()=>{b.value=``},3e3);return}x&&clearTimeout(x),b.value=``,_.value=e.id,y.value=``;try{await d.remove(e.id)}catch(e){y.value=e instanceof Error?e.message:String(e)}finally{_.value=``}}let C={idle:`var(--hud-amber)`,running:`var(--hud-ok)`,alarm:`var(--hud-danger)`,offline:`var(--hud-dim)`},te={idle:`STANDBY`,running:`RUNNING`,alarm:`ALARM`,offline:`OFFLINE`},E=e=>e.replace(/[^A-Za-z0-9]/g,``).slice(0,4).toUpperCase()||`DEV`,D=e=>e.replace(/^dev-/,``).replace(/[^a-z0-9]/gi,``).slice(-6).toUpperCase(),O=e=>typeof e==`number`?(Math.round(e*100)/100).toString():String(e),k=e=>`${Number.isFinite(e.lo)?e.lo:`-∞`} ~ ${Number.isFinite(e.hi)?e.hi:`+∞`} ${e.unit}`,A=h({}),M=h({}),re=S(``);function ie(e){let t=A[e.id];if(t==null||t===``)return;let n=Number(t);if(n<e.lo||n>e.hi){M[e.id]=a(`deviceTwinPanel.kxddket010`,{p0:e.src===`recipe`?a(`deviceTwinPanel.kq2jssk008`):a(`deviceTwinPanel.k1iwj796009`),p1:k(e)});return}M[e.id]=``,re.value=e.id,f.write(e.id,n).then(t=>{t.ok||(M[e.id]=t.message)}).catch(t=>{M[e.id]=t instanceof Error?t.message:String(t)}).finally(()=>{re.value=``})}return(t,a)=>(r(),g(`aside`,nt,[w(`div`,H,[w(`span`,U,c(t.$t(`deviceTwinPanel.k7k6evr002`)),1),w(`span`,rt,c(o(d).twins.length),1)]),o(d).error?(r(),g(`div`,it,c(o(d).error),1)):v(``,!0),o(d).loaded?o(d).twins.length===0?(r(),g(`div`,ot,[w(`div`,st,[w(`div`,ct,c(t.$t(`deviceTwinPanel.k13y2qmg004`)),1),w(`div`,lt,c(t.$t(`deviceTwinPanel.kotf23l005`)),1)])])):(r(),g(`div`,ut,[(r(!0),g(l,null,n(o(d).twins,a=>(r(),g(`button`,{key:a.id,class:i([`twin-card`,{daq:p(a)}]),type:`button`,onClick:e=>t.$emit(`focus-device`,a)},[w(`div`,ft,[w(`span`,pt,c(E(a.modelRef||a.name)),1),w(`div`,mt,[w(`span`,ht,c(a.name),1),w(`span`,gt,c(p(a)?`DAQ`:D(a.id)),1)]),w(`button`,{class:i([`twin-del`,{armed:o(b)===a.id}]),disabled:o(_)===a.id,title:o(b)===a.id?`再次点击确认删除该设备实例`:`删除该设备实例`,onClick:j(e=>ee(a),[`stop`])},c(o(b)===a.id?t.$t(`deviceTwinPanel.k44653007`):`✕`),11,_t),w(`span`,{class:i([`twin-state`,`s-${a.state}`])},[w(`i`,{class:`twin-state-dot`,style:s({background:C[a.state]||`var(--hud-dim)`})},null,4),u(` `+c(te[a.state]||a.state),1)],2)]),Object.keys(a.telemetry).length?(r(),g(`div`,vt,[(r(!0),g(l,null,n(a.telemetry,(e,t)=>(r(),g(`span`,{key:t,class:`tele-item`},[w(`em`,null,c(t),1),w(`b`,null,c(O(e)),1)]))),128))])):v(``,!0),e.daqLive?.[a.id]?.length?(r(),g(`div`,yt,[(r(!0),g(l,null,n(e.daqLive[a.id],(e,t)=>(r(),g(`span`,{key:`${e.ch}-${t}`,class:i([`daq-item`,{alarm:e.alarm}])},[w(`em`,null,c(e.ch),1),w(`b`,null,[u(c(e.value),1),w(`i`,null,c(e.unit),1)])],2))),128))])):v(``,!0),e.dcwLive?.[a.id]?.length?(r(),g(`div`,bt,[(r(!0),g(l,null,n(e.dcwLive[a.id],e=>(r(),g(`div`,{key:e.id,class:`dcw-item`},[w(`div`,xt,[w(`em`,null,[u(c(e.ch),1),e.src===`recipe`?(r(),g(`i`,St,c(t.$t(`deviceTwinPanel.k48grv006`)),1)):v(``,!0)]),w(`b`,W,[u(c(e.value==null?`--`:e.value.toFixed(e.decimals)),1),w(`i`,null,c(e.unit),1)])]),w(`div`,Ct,[w(`span`,{title:e.src===`recipe`?`当前运行配方工艺窗口`:`节点全局量程`},c(k(e)),9,wt)]),w(`div`,Tt,[T(w(`input`,{"onUpdate:modelValue":t=>o(A)[e.id]=t,type:`number`,class:`ctrl-input`,step:10**-e.decimals,min:Number.isFinite(e.lo)?e.lo:void 0,max:Number.isFinite(e.hi)?e.hi:void 0,placeholder:`${Number.isFinite(e.lo)?e.lo:``} ~ ${Number.isFinite(e.hi)?e.hi:``}`,onKeydown:ae(t=>ie(e),[`enter`])},null,40,Et),[[N,o(A)[e.id],void 0,{number:!0}]]),w(`button`,{class:`ctrl-btn dcw-send`,disabled:o(A)[e.id]==null||o(A)[e.id]===``||o(re)===e.id,title:t.$t(`deviceTwinPanel.k1j04u8001`),onClick:j(t=>ie(e),[`stop`])},c(o(re)===e.id?`···`:`SET`),9,Dt)]),o(M)[e.id]?(r(),g(`small`,Ot,c(o(M)[e.id]),1)):v(``,!0)]))),128))])):v(``,!0)],10,dt))),128))])):(r(),g(`div`,at,c(t.$t(`deviceTwinPanel.kkw7sn5003`)),1)),o(y)?(r(),g(`span`,kt,c(o(y)),1)):v(``,!0)]))}}),[[`__scopeId`,`data-v-9a00109c`]]),{__name:`WorkshopDeviceTwinPanel`}),jt=`__sceneLayouts`;function Mt(e=!0){let t=typeof document<`u`?document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``:``,n={};return t&&(n.authorization=`Bearer ${decodeURIComponent(t)}`),e&&(n[`content-type`]=`application/json`),n}function Nt(){let e=null,t=e=>new Promise(t=>setTimeout(t,e)),n=h({layouts:{},loaded:!1,loading:!1,error:``,rev:0,async load(){return e||=r().finally(()=>{e=null}),e},byChannel(e){return n.layouts[e]},async save(e,r){n.layouts[e]={channelId:e,x:r.x,z:r.z,radiusX:r.radiusX,radiusZ:r.radiusZ,shape:r.shape??`ellipse`,rotationY:r.rotationY??0,updatedAt:new Date().toISOString()},n.rev++;let i=null;for(let a=0;a<3;a++)try{let t=await fetch(`/api/workshop/scene/layouts/${e}`,{method:`PUT`,headers:Mt(),body:JSON.stringify(r)}),i=await t.json().catch(()=>({}));if(!t.ok||!i?.data?.layout)throw Error(i?.message??`保存频道布局失败`);return n.layouts[e]=i.data.layout,i.data.layout}catch(e){i=e instanceof Error?e:Error(String(e)),a<2&&await t(500*(a+1))}throw i??Error(`保存频道布局失败`)},async remove(e){let t=await fetch(`/api/workshop/scene/layouts/${e}`,{method:`DELETE`,headers:Mt()}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r?.message??`移除频道放置失败`);let i=Object.fromEntries(Object.entries(n.layouts).filter(([t])=>t!==e));n.layouts=i,n.rev++}});async function r(){n.loading=!0;let e=``;try{for(let r=0;r<3;r++)try{let e=await fetch(`/api/workshop/scene/layouts`,{headers:Mt()});if(!e.ok)throw Error(`HTTP ${e.status}`);let t=(await e.json().catch(()=>({})))?.data?.layouts??[],r={};for(let e of t)r[e.channelId]=e;n.layouts=r,n.loaded=!0,n.error=``,n.rev++;return}catch(n){e=n instanceof Error?n.message:String(n),r<2&&await t(400*(r+1))}n.loaded=!1,n.error=e}finally{n.loading=!1}}return n}function Pt(){let e=globalThis;e[jt]||(e[jt]=Nt());let t=e[jt];return t.load(),t}function Ft(e){return C()?(f(e),!0):!1}var G=typeof window<`u`&&typeof document<`u`;typeof WorkerGlobalScope<`u`&&globalThis instanceof WorkerGlobalScope;var It=Object.prototype.toString,Lt=e=>It.call(e)===`[object Object]`,Rt=()=>{};function zt(...e){if(e.length!==1)return D(...e);let t=e[0];return typeof t==`function`?te(y(()=>({get:t,set:Rt}))):S(t)}function Bt(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return n}var Vt=e=>e();function Ht(e=Vt,t={}){let{initialState:n=`active`}=t,r=zt(n===`active`);function i(){r.value=!1}function a(){r.value=!0}return{isActive:te(r),pause:i,resume:a,eventFilter:(...t)=>{r.value&&e(...t)}}}function Ut(e){return Array.isArray(e)?e:[e]}function Wt(e){return e||O()}function Gt(e,t,n={}){let{eventFilter:r=Vt,...i}=n;return p(e,Bt(r,t),i)}function Kt(e,t,n={}){let{eventFilter:r,initialState:i=`active`,...a}=n,{eventFilter:o,pause:s,resume:c,isActive:l}=Ht(r,{initialState:i});return{stop:Gt(e,t,{...a,eventFilter:o}),pause:s,resume:c,isActive:l}}function qt(e,t=!0,n){Wt(n)?ne(e,n):t?e():a(e)}function Jt(e,t,n){return p(e,t,{...n,immediate:!0})}var Yt=G?window:void 0;G&&window.document,G&&window.navigator,G&&window.location;function K(e){let t=d(e);return t?.$el??t}function Xt(...e){let t=[],n=()=>{t.forEach(e=>e()),t.length=0},r=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),i=m(()=>{let t=Ut(d(e[0])).filter(e=>e!=null);return t.every(e=>typeof e!=`string`)?t:void 0}),a=Jt(()=>[i.value?.map(e=>K(e))??[Yt].filter(e=>e!=null),Ut(d(i.value?e[1]:e[0])),Ut(o(i.value?e[2]:e[1])),d(i.value?e[3]:e[2])],([e,i,a,o])=>{if(n(),!e?.length||!i?.length||!a?.length)return;let s=Lt(o)?{...o}:o;t.push(...e.flatMap(e=>i.flatMap(t=>a.map(n=>r(e,t,n,s)))))},{flush:`post`});return Ft(n),()=>{a(),n()}}var Zt=typeof globalThis<`u`?globalThis:typeof window<`u`?window:typeof global<`u`?global:typeof self<`u`?self:{},Qt=`__vueuse_ssr_handlers__`,q=$t();function $t(){return Qt in Zt||(Zt[Qt]=Zt[Qt]||{}),Zt[Qt]}function en(e,t){return q[e]||t}function tn(e){return e==null?`any`:e instanceof Set?`set`:e instanceof Map?`map`:e instanceof Date?`date`:typeof e==`boolean`?`boolean`:typeof e==`string`?`string`:typeof e==`object`?`object`:Number.isNaN(e)?`any`:`number`}var nn={boolean:{read:e=>e===`true`,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},rn=`vueuse-storage`;function an(e,t,n,r={}){let{flush:i=`pre`,deep:o=!0,listenToStorageChanges:s=!0,writeDefaults:c=!0,mergeDefaults:l=!1,shallow:u,window:f=Yt,eventFilter:h,onError:g=e=>{console.error(e)},initOnMounted:v}=r,y=(u?_:S)(typeof t==`function`?t():t),b=m(()=>d(e));if(!n)try{n=en(`getDefaultStorage`,()=>Yt?.localStorage)()}catch(e){g(e)}if(!n)return y;let x=d(t),ee=tn(x),C=r.serializer??nn[ee],{pause:w,resume:te}=Kt(y,e=>D(e),{flush:i,deep:o,eventFilter:h});p(b,()=>k(),{flush:i});let T=!1;f&&s&&(n instanceof Storage?Xt(f,`storage`,e=>{v&&!T||k(e)},{passive:!0}):Xt(f,rn,e=>{v&&!T||A(e)})),v?qt(()=>{T=!0,k()}):k();function E(e,t){if(f){let r={key:b.value,oldValue:e,newValue:t,storageArea:n};f.dispatchEvent(n instanceof Storage?new StorageEvent(`storage`,r):new CustomEvent(rn,{detail:r}))}}function D(e){try{let t=n.getItem(b.value);if(e==null)E(t,null),n.removeItem(b.value);else{let r=C.write(e);t!==r&&(n.setItem(b.value,r),E(t,r))}}catch(e){g(e)}}function O(e){let t=e?e.newValue:n.getItem(b.value);if(t==null)return c&&x!=null&&n.setItem(b.value,C.write(x)),x;if(!e&&l){let e=C.read(t);return typeof l==`function`?l(e,x):ee===`object`&&!Array.isArray(e)?{...x,...e}:e}return typeof t==`string`?C.read(t):t}function k(e){if(!(e&&e.storageArea!==n)){if(e&&e.key==null){y.value=x;return}if(!(e&&e.key!==b.value)){w();try{let t=C.write(y.value);(e===void 0||e?.newValue!==t)&&(y.value=O(e))}catch(e){g(e)}finally{e?a(te):te()}}}}function A(e){k(e.detail)}return y}var on={class:`town-view`},sn={class:`topnav`},cn={class:`brand`},ln={class:`brand-sub`},un=[`aria-label`],dn={class:`seg`},fn=[`disabled`,`title`],pn={class:`nav-right`},mn=[`title`],hn={class:`nav-chip mono`},gn=[`title`],_n={class:`avatar-fallback`},vn={class:`app`},yn={class:`rail rail-left`},bn={class:`panel`},xn={class:`panel-hd`},Sn={class:`panel-tag`},Cn={class:`panel`},wn={class:`panel-hd`},Tn={class:`panel-tag`},En={class:`daq-ctrl`},Dn=[`title`],On=[`title`],kn=[`value`],An={class:`daq-list`},jn=[`title`,`onClick`,`onKeydown`],Mn={class:`daq-ico`},Nn=[`innerHTML`],Pn={class:`daq-meta`},Fn={class:`daq-name`},In={class:`daq-code`},Ln=[`title`,`onClick`],Rn={class:`daq-count`},zn={key:0,class:`daq-children`},Bn=[`draggable`,`title`,`onDragstart`,`onClick`],Vn={class:`daq-meta`},Hn={class:`daq-name`},Un={class:`daq-node-sub`},Wn={class:`node-val mono`},Gn={class:`node-dev`},Kn={key:0,class:`scene-cur`},qn={key:0,class:`daq-empty-hint`},Jn={class:`panel`},Yn={class:`panel-hd`},Xn={class:`panel-tag`},Zn={class:`daq-list`},Qn=[`title`,`onClick`,`onKeydown`],$n={class:`daq-ico`},er=[`innerHTML`],tr={class:`daq-meta`},nr={class:`daq-name`},rr={class:`daq-code`},ir=[`title`,`onClick`],ar={class:`daq-count`},or={key:0,class:`daq-children`},sr=[`draggable`,`title`,`onDragstart`,`onClick`],cr={class:`daq-meta`},lr={class:`daq-name`},ur={class:`daq-node-sub`},dr={class:`node-val mono`},fr={class:`node-dev`},pr={key:0,class:`scene-cur`},mr={key:0,class:`daq-empty-hint`},hr={class:`panel`},gr={class:`panel-hd`},_r={class:`panel-tag`},vr={class:`scene-list`},yr=[`draggable`,`data-channel-id`,`title`,`onDragstart`,`onClick`],br={class:`scene-meta-wrap`},xr={class:`scene-name`},Sr={class:`scene-meta`},Cr={key:0,class:`scene-cur`},wr={key:1,class:`scene-add`},Tr={key:0,class:`scene-hint`},Er={class:`stage-col`},Dr={class:`stage-top`},Or={class:`vp-title`},kr={class:`vp-id`},Ar={class:`vp-tools`},jr=[`title`],Mr=[`title`],Nr=[`title`],Pr=[`title`],Fr={class:`angle-chip`},Ir=[`value`,`aria-label`],Lr={value:`std`},Rr={class:`leaders`},zr=[`d`,`stroke`],Br=[`cx`,`cy`,`fill`],Vr={class:`callout-layer`},Hr=[`title`,`onClick`],Ur={class:`co-label`},Wr={class:`co-val`},Gr={class:`co-range`},Kr={class:`kpi-strip`},qr={class:`kpi`},Jr={class:`kpi-meta`},Yr={class:`kpi-label`},Xr={class:`kpi-val`},Zr={class:`kpi`},Qr={class:`kpi-meta`},$r={class:`kpi-label`},ei={class:`kpi-val`},ti={class:`kpi`},ni={class:`kpi-meta`},ri={class:`kpi-label`},ii={class:`kpi-val`},ai={class:`kpi`},oi={class:`kpi-meta`},si={class:`kpi-label`},ci={class:`kpi-val`},li={class:`kpi`},ui={class:`kpi-meta`},di={class:`kpi-label`},fi={class:`kpi-val`},pi={key:1,class:`empty-hint`},mi=[`title`],hi={class:`bp-name`},gi={class:`bp-sub`},_i={class:`bp-tabs`},vi={class:`bp-row`},yi={class:`bp-label`},bi={class:`bp-seg`},xi={class:`bp-row`},Si={class:`bp-label`},Ci={class:`bp-val`},wi={class:`bp-row`},Ti={class:`bp-label`},Ei={class:`bp-val`},Di={class:`bp-row`},Oi={class:`bp-label`},ki={class:`bp-val`},Ai={class:`bp-hint`},ji={class:`member-list`},Mi={class:`member-info`},Ni={class:`member-name`},Pi=[`value`,`onChange`],Fi=[`value`],Ii={key:0,class:`bp-hint`},Li={class:`bp-actions`},Ri={key:3,class:`drop-chip`},zi={key:4,class:`error-chip`},Bi={key:5,"data-hud":`town-loading`,class:`loading-mask`},Vi={class:`loading-text`},Hi={class:`dock`},Ui={class:`dock-card`},Wi={class:`dock-hd`},Gi={class:`dock-mode`},Ki={class:`ctl-sec`},qi={class:`ctl-row`},Ji=[`title`],Yi={class:`fps-seg`},Xi=[`onClick`],Zi={class:`ctl-row`},Qi=[`title`],$i={class:`fps-seg`},ea=[`onClick`],ta={class:`ctl-sec`},na={class:`ctl-row`},ra={class:`ctl-name`},ia=[`value`],aa={class:`ctl-val`},oa={class:`ctl-row`},sa={class:`ctl-name`},ca=[`value`],la={class:`ctl-val`},ua={class:`ctl-row`},da={class:`ctl-name`},fa=[`value`],pa={class:`ctl-val`},ma={class:`ctl-row`},ha=[`title`],ga=[`value`],_a={class:`ctl-val`},va={class:`ctl-sec`},ya={class:`ctl-row`},ba={class:`ctl-name`},xa={class:`ctl-btns`},Sa=[`disabled`,`title`],Ca={class:`dock-card`},wa={class:`dock-hd`},Ta={class:`dock-count mono`},Ea=[`onClick`],Da=[`title`],Oa={class:`trend-wrap`},ka={key:0,class:`trend-empty`},Aa={class:`rail rail-right`},ja={key:0,class:`panel inspector`},Ma={class:`panel-hd`},Na=[`title`],Pa={class:`ins-chip-row`},Fa={class:`ins-chip mono`},Ia={key:0,class:`ins-chip accent`},La={key:1,class:`ins-chip accent`},Ra={key:0,class:`daq-info`},za={class:`daq-info-row`},Ba={class:`cy`},Va={class:`daq-info-row`},Ha={class:`daq-info-row`},Ua={class:`daq-bind-bar`},Wa=[`step`,`placeholder`],Ga=[`disabled`],Ka={key:0,class:`dcw-err`},qa={key:1,class:`daq-bind-bar`},Ja={value:``},Ya=[`value`],Xa=[`disabled`],Za={key:1,class:`daq-info`},Qa={class:`daq-info-row`},$a={class:`cy`},eo={class:`daq-info-row`},to={class:`daq-info-row`},no={key:0,class:`daq-bind-bar`},ro={value:``},io=[`value`],ao=[`disabled`],oo={key:1,class:`daq-node-ctl`},so={class:`daq-info-row`},co={class:`daq-th-inputs`},lo={class:`daq-info-row`},uo={class:`daq-th-inputs`},fo=[`value`],po=[`value`],mo={class:`daq-info-row`},ho={class:`daq-th-inputs`},go=[`value`],_o=[`value`],vo={class:`daq-info-row`},yo={class:`daq-info-row`},bo=[`title`],xo={key:2,class:`ins-empty`},So={class:`obj-row`},Co={class:`obj-label`},wo=[`placeholder`,`disabled`,`title`],To={class:`obj-row`},Eo={class:`obj-label`},Do=[`value`,`disabled`],Oo=[`value`],ko={class:`sect-hd`},Ao={class:`bind-ico`},jo=[`innerHTML`],Mo={class:`bind-meta`},No={class:`bind-label`},Po={class:`bind-val`},Fo=[`title`,`onClick`],Io={key:0,class:`ins-empty`},Lo={key:1,class:`bind-add-wrap`},Ro={key:0,class:`bp-group`},zo={class:`bp-tpl`},Bo=[`data-node-id`,`title`,`onClick`],Vo=[`innerHTML`],Ho={key:0,class:`bp-cur`},Uo={key:1,class:`bp-cur`},Wo={key:0,class:`bp-empty`},Go={class:`sect-hd`},Ko={class:`dcw-top`},qo={class:`bind-ico`},Jo=[`innerHTML`],Yo={class:`dcw-id`},Xo={class:`bind-label`},Zo={key:0,class:`dcw-tag`},Qo={class:`dcw-name`},$o={class:`dcw-cur`},es=[`title`,`onClick`],ts={class:`dcw-win-num`},ns={class:`dcw-win-track`},rs={class:`dcw-win-num`},is={class:`dcw-write`},as=[`onUpdate:modelValue`,`step`,`placeholder`,`onKeydown`],os=[`disabled`,`title`,`onClick`],ss={key:0,class:`dcw-err`},cs={key:2,class:`ins-empty`},ls={key:3,class:`bind-add-wrap`},us={key:0,class:`bp-group`},ds={class:`bp-tpl`},fs=[`data-node-id`,`title`,`onClick`],ps=[`innerHTML`],ms={key:0,class:`bp-cur`},hs={key:1,class:`bp-cur`},gs={key:0,class:`bp-empty`},_s={class:`xz-seg`},vs={class:`scale-row`},ys=[`value`],bs={class:`scale-val`},xs={class:`ins-foot`},Ss={key:5,class:`ins-empty`},Cs={class:`chat-id-row`},ws={class:`chat-nameplate`},Ts={class:`chat-name`},Es={class:`chat-meta`},Ds={key:0,class:`chat-harness`},Os={class:`chat-count`},ks={class:`obj-row`},As={class:`obj-label`},js=[`value`,`disabled`],Ms=[`value`],Ns={class:`obj-row`},Ps={class:`obj-label`},Fs={class:`range-status`},Is=[`title`],Ls={class:`sect-hd`},Rs={class:`bind-meta`},zs={class:`bind-label`},Bs=[`value`,`title`,`onChange`],Vs={value:`auto`},Hs={value:`manual`},Us=[`title`,`onClick`],Ws={key:0,class:`ins-empty`},Gs={key:1,class:`daq-bind-bar`,style:{"margin-bottom":`8px`}},Ks={value:`dcw`},qs={value:`daq`},Js={value:``},Ys=[`value`],Xs=[`value`],Zs={value:`auto`},Qs={value:`manual`},$s=[`disabled`],ec={class:`sect-hd`,style:{color:`var(--hud-amber)`}},tc={class:`approval-detail`},nc=[`onUpdate:modelValue`,`placeholder`],rc={class:`daq-bind-bar`,style:{"margin-top":`5px`}},ic=[`onClick`],ac=[`onClick`],oc={class:`obj-row`},sc={class:`obj-label`},cc={class:`bp-seg`},lc={class:`obj-row`},uc={class:`obj-label`},dc={class:`bp-val`},fc={class:`obj-row`},pc={class:`obj-label`},mc={class:`bp-val`},hc={key:4,class:`ins-empty`},gc={class:`sect-hd chat-sect`},_c=[`title`],vc={key:0,class:`rpg-note`},yc={class:`rpg-divider`},bc={class:`rpg-time`},xc={class:`rpg-bubble`},Sc={class:`rpg-text`},Cc={key:2,class:`rpg-divider live`},wc={class:`rpg-time`},Tc={class:`rpg-bubble`},Ec={class:`rpg-text`},Dc={key:3,class:`rpg-typing`},Oc={class:`ty-label`},kc={key:4,class:`rpg-note`},Ac={class:`panel`},jc={class:`panel-hd`},Mc={class:`health-body`},Nc={class:`donut-wrap`},Pc={class:`donut-center`},Fc={class:`health-legend`},Ic={class:`hl-row`},Lc={class:`n`},Rc={class:`hl-row`},zc={class:`n`},Bc={class:`hl-row`},Vc={class:`n`},Hc={class:`hl-row`},Uc={class:`n`},Wc={class:`panel`},Gc={class:`panel-hd`},Kc={class:`panel-tag`},qc={class:`panel`},Jc={class:`panel-hd`},Yc={class:`panel-tag`},Xc=[`title`],Zc={class:`alarm-list`},Qc={class:`al-body`},$c={class:`al-txt`},el={class:`al-src`},tl=[`onClick`],nl={key:0,class:`rail-empty`},rl={class:`panel`},il={class:`panel-hd`},al={class:`panel-tag`},ol={class:`event-list`},sl={class:`ev-time`},cl=[`title`],ll=[`title`],ul={key:0,class:`rail-empty`},dl={class:`panel`},fl={class:`panel-hd`},pl={class:`mm-body`},ml=[`title`],hl={class:`mm-col`},gl=[`title`],_l=[`title`],vl=[`title`],yl={class:`mm-meta mono`},bl={class:`statusbar`},xl={class:`sb-stats`},Sl={class:`sb-lat mono`},Cl={class:`copy`},wl={key:0,"data-hud":`town-loading`,class:`loading-mask`},Tl={class:`loading-text`},El=`aw-town-panel-pos`,Dl=3200,Ol=2400,kl=3e4,Al=80,jl=120,Ml=104,Nl=8,Pl=1600,Fl=Object.assign(E(e({__name:`TownView`,props:{channelId:{},allChannels:{type:Boolean}},setup(e){let{t:d}=se(),f=e,y=Oe(),x=Se(),{conn:C}=ke(),te=Ce(),E=Me(),D=De(),O=Pt(),fe=le(),pe=S(null),P=_(null),me=_(null),F=_(null),he=typeof window<`u`?new URLSearchParams(location.search).get(`render`)!==`2d`:!0,ge=S(!1),ve=S(0),ye=S(0),be=S(0),xe=S(null),I=S(null),L=S(``),Ae=m(()=>C.state===`connecting`),je=m(()=>y.channels[f.channelId]?.name??``),R=S(`browse`),Ne=S(!0),z=S(null),Pe=m(()=>{switch(z.value?.state){case`dirty`:return d(`townView.k3oo50k155`);case`saving`:return d(`townView.k1b38d59156`);case`saved`:return d(`townView.k3n51yk157`);case`error`:return d(`townView.k1b3ayhc158`);default:return``}});function Fe(){R.value=R.value===`browse`?`edit`:`browse`,F.value?.setMode(R.value),R.value===`browse`&&(Ge(),Ke(null)),U.value=!1}let Ie=S(`translate`);function Le(e){Ie.value=e,F.value?.setTransformMode(e)}p(()=>[I.value,R.value],([e,t])=>{t===`edit`&&e?.kind===`device`&&F.value?.setTransformMode(Ie.value)});function Re(e){let t=e.target;if(t&&(t.tagName===`INPUT`||t.tagName===`SELECT`||t.tagName===`TEXTAREA`||t.isContentEditable))return;let n=e.key.toLowerCase();if(e.key===`Escape`){Ge();return}R.value===`edit`&&I.value?.kind===`device`&&(n===`g`?Le(`translate`):n===`r`?Le(`rotate`):n===`s`?Le(`scale`):(e.key===`Delete`||e.key===`Backspace`)&&ft())}function ze(){Ne.value=!Ne.value,F.value?.setSnap(Ne.value)}function Be(e,t,n,r){let i=t||f.channelId;return i?fe.request({method:`PATCH`,url:`/workshop/channels/${i}/agents/${e}/position`,data:{x:n,z:r}}).catch(()=>null):Promise.resolve()}function Ve(e,t,n){let r=t||f.channelId;return r?fe.request({method:`PATCH`,url:`/workshop/channels/${r}/agents/${e}/range`,data:{range:n}}).catch(()=>null):Promise.resolve()}function He(){if(R.value!==`edit`){Nt();return}F.value?.persistAllDevices()}function Ue(e){I.value&&F.value?.setModelScale(I.value.id,e,I.value.kind)}function We(e){I.value&&F.value?.persistScale(I.value.kind,I.value.id)}function Ge(){I.value=null}let B=S(null),V=S(null);function Ke(e){B.value=e,V.value=e?F.value?.getChannelLayout(e)??null:null}async function qe(){if(!B.value||!V.value)return;let e=V.value,t={x:e.x,z:e.z,radiusX:e.radiusX,radiusZ:e.radiusZ,shape:e.shape??`ellipse`,rotationY:e.rotationY??0};try{await O.save(B.value,t),z.value={state:`saved`,at:Date.now()}}catch(e){z.value={state:`error`,at:Date.now()},L.value=e instanceof Error?e.message:String(e)}}async function Je(){if(B.value)try{await O.remove(B.value),F.value?.removeChannel(B.value),Ke(null)}catch(e){L.value=e instanceof Error?e.message:String(e)}}function Ye(){!B.value||!V.value||(F.value?.updateChannelLayout(B.value,V.value),z.value={state:`dirty`,at:Date.now()})}let Xe=S(``);function Ze(e){let t=F.value;if(t){if(e.placed){t.focusChannel(e.channelId),Ke(e.channelId);return}Xe.value=d(`townView.k7rvbts159`),window.setTimeout(()=>{Xe.value=``},2600)}}function Qe(e,t,n){let r=F.value;if(!r)return!1;let i=W().find(t=>t.channelId===e),a=i?.channelName??y.channels[e]?.name??e.slice(0,8),o=i?.agents.length??y.agents[e]?.length??0;return r.getChannelLayout(e)?(Xe.value=d(`townView.kcyn0191`,{p0:a}),window.setTimeout(()=>{Xe.value=``},2600),r.focusChannel(e),Ke(e),!1):(r.dropChannelOnWorld(t,n,e,a,o),O.save(e,{x:t,z:n,radiusX:Math.max(120,110+o*18),radiusZ:Math.max(80,70+o*14),shape:`ellipse`,rotationY:0}).then(()=>{z.value={state:`saved`,at:Date.now()}}).catch(()=>{z.value={state:`error`,at:Date.now()}}),r.focusChannel(e),!0)}let $e=m(()=>E.models.filter(e=>e.kind===`glb`)),et=m(()=>E.models.filter(e=>e.kind===`dev`)),nt=S(``),H=S(null),U=S(!1);p(()=>I.value,e=>{if(nt.value=e?.kind===`device`?F.value?.getDeviceName?.(e.id)??``:``,H.value=null,e?.kind===`agent`){let t=F.value?.getAgentRange?.(e.id);H.value=t?{radiusX:t.radiusX,radiusZ:t.radiusZ,shape:t.shape}:null,U.value=F.value?.isRangeDrawing(e.id)??!1}else U.value=!1});let rt=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return``;let t=F.value?.getAgentRange?.(e.id);return t?`${t.shape===`rect`?d(`townView.k43u0g050`):d(`townView.k414bc049`)} ${Math.round(t.radiusX)} × ${Math.round(t.radiusZ)}`:d(`townView.k1v1icf6160`)});function it(){let e=I.value;if(!(!e||e.kind!==`agent`)){if(U.value){F.value?.cancelRangeDraw(),U.value=!1;return}F.value?.startRangeDraw(e.id),U.value=!0}}function at(){!I.value||I.value.kind!==`agent`||!H.value||(F.value?.setAgentRangeScene(I.value.id,H.value),z.value={state:`dirty`,at:Date.now()})}function ot(){!I.value||I.value.kind!==`agent`||F.value?.commitAgentRange(I.value.id)}function st(){let e=I.value;!e||e.kind!==`agent`||(F.value?.clearAgentRange(e.id),H.value=null,U.value=!1)}function ct(){if(!I.value||I.value.kind!==`device`)return;let e=I.value.id,t=nt.value.trim();t&&(F.value?.renameDevice(e,t),D.update(e,{name:t}).catch(e=>{L.value=e instanceof Error?e.message:String(e)}))}async function lt(e){let t=I.value;if(!t||t.kind!==`agent`)return;let n=t.id,r=y.agents?Object.keys(y.agents).find(e=>(y.agents[e]??[]).some(e=>e.agentId===n)):void 0;if(!r){L.value=d(`townView.kpplr16161`);return}try{await E.bind(r,n,e),F.value?.swapAgentModel(n,e)}catch(e){L.value=e instanceof Error?e.message:String(e)}}async function ut(e){let t=I.value;if(!(!t||t.kind!==`device`)){F.value?.swapDeviceModel(t.id,e);try{await D.update(t.id,{modelRef:e})}catch(e){L.value=e instanceof Error?e.message:String(e)}}}let dt=S(``);function ft(){let e=I.value;if(!(!e||e.kind!==`device`)){if(dt.value!==e.id){dt.value=e.id,window.setTimeout(()=>{dt.value===e.id&&(dt.value=``)},3e3);return}dt.value=``,F.value?.removeDevice(e.id).then(()=>Ge()).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}}let pt=S(`boundary`),mt=m(()=>B.value?W().find(e=>e.channelId===B.value)?.agents??[]:[]);async function ht(e,t){if(B.value)try{await E.bind(B.value,e,t),F.value?.swapAgentModel(e,t)}catch(e){L.value=e instanceof Error?e.message:String(e)}}function gt(e){pt.value=e}let _t=S(0),vt=m(()=>(_t.value,yt().map(e=>({channelId:e,name:y.channels[e]?.name??e.slice(0,8),agentCount:(y.agents[e]??[]).length,placed:F.value?.hasChannel(e)??!1,color:xt(e)}))));function yt(){let e=[];for(let t of bt()??[])for(let n of t.channelIds??[])e.includes(n)||e.push(n);return e.includes(f.channelId)||e.push(f.channelId),e}function bt(){return x.workspaces}function xt(e){return _e(e)}function St(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-channel`,t),e.dataTransfer.setData(`text/plain`,t),e.dataTransfer.effectAllowed=`copy`)}function W(){let e=[];for(let[t,n]of Object.entries(y.channels)){let r=(y.agents[t]??[]).map(e=>{let n=e.currentTaskId?(y.tasks[t]??[]).find(t=>t.id===e.currentTaskId):void 0;return{agentId:e.agentId,name:e.name,role:e.role,harness:e.harness,state:e.state,currentTaskId:e.currentTaskId??null,currentTaskTitle:n?.title??null,currentTaskProgress:e.currentTaskProgress??n?.progress??null,modelRef:e.modelRef??null,homeX:e.config?.homeX??null,homeZ:e.config?.homeZ??null,range:e.config?.range??null}});e.push({channelId:t,channelName:n.name,agents:r})}return e}function Ct(e){!e||!(`registerModelsFromList`in e)||(`screenToWorld`in e?e.registerModelsFromList(E.models.map(e=>({id:e.id,file:e.file,name:e.name,kind:e.kind,hFactor:e.hFactor??1}))):e.registerModelsFromList(E.models.map(e=>({id:e.id,file:e.file,name:e.name}))))}p(()=>E.models.map(e=>`${e.id}:${e.file}`).join(`|`),()=>Ct(P.value));async function wt(){P.value||!pe.value||(he?await Tt():await Et())}async function Tt(){let e=pe.value;if(!e)return;let[{TownScene3D:t}]=await Promise.all([oe(()=>import(`./BUcmySDa2.js`),__vite__mapDeps([0,1,2,3]),import.meta.url)]),n=new t(W(),e);n.resolveTaskAssignee=e=>y.tasks[f.channelId]?.find(t=>t.id===e)?.assigneeId??null,n.devices={async create(e){return{id:(await D.create({name:e.name,modelRef:e.modelRef,kind:e.kind,controls:e.controls,posX:e.posX,posZ:e.posZ,scale:e.scale})).id}},async update(e,t){if(J.nodeById(e)){await J.saveTransform(e,t.posX,t.posZ);return}await D.update(e,t)},async remove(e){if(J.nodeById(e)){await J.removeNode(e);return}await D.remove(e)},async control(e,t,n){return D.control(e,t,n)}},n.agentApi={async updateHome(e,t,n,r){return Be(e,t,n,r)},async updateRange(e,t,n){return Ve(e,t,n)}},n.channelApi={async save(e,t){return O.save(e,t)}},P.value=n,Ct(n),F.value=n,n.setFpsCap(Number(pf.value)),n.setQualityMode(gf.value),Dt(n),n.on(`select`,e=>{I.value=e}),n.on(`saveState`,e=>{z.value=e}),n.on(`selectChannel`,e=>{Ke(e)}),n.on(`channelResized`,e=>{e&&B.value===e.channelId&&(V.value=e.layout)}),n.on(`agentRangeChanged`,e=>{if(e&&I.value?.kind===`agent`&&I.value.id===e.agentId){let t=F.value?.getAgentRange?.(e.agentId);H.value=t?{radiusX:t.radiusX,radiusZ:t.radiusZ,shape:t.shape}:null}}),ge.value=!0,Ot(n),Bf=ql(n),O.load().then(()=>{n.hydrate(W(),Object.values(O.layouts),Wl.value),Lt()}).catch(e=>{L.value=d(`townView.k1hmf2ut192`,{p0:e instanceof Error?e.message:String(e)}),window.setTimeout(()=>{O.load()},2500)})}async function Et(){let e=pe.value;if(!e)return;let[t,{TownScene:n}]=await Promise.all([oe(()=>import(`./BGkumHZ32.js`),[],import.meta.url),oe(()=>import(`./RYFtK4qZ2.js`),__vite__mapDeps([4,5,1,2]),import.meta.url)]),r=new n(W());P.value=r,Ct(r),r.resolveTaskAssignee=e=>y.tasks[f.channelId]?.find(t=>t.id===e)?.assigneeId??null;let i=new t.Game({type:t.AUTO,parent:e.id||`town-host`,width:1100,height:700,backgroundColor:`#eceae4`,pixelArt:!0,antialias:!1,roundPixels:!0,powerPreference:`high-performance`,physics:{default:`arcade`,arcade:{gravity:{x:0,y:0},debug:!1}},scale:{mode:t.Scale.FIT,autoCenter:t.Scale.CENTER_BOTH},scene:r});me.value=i,Dt(r),r.on(`ready`,()=>{ge.value=!0,Ot(r)})}function Dt(e){let t=e;t.on(`fps`,e=>{ve.value=e}),t.on(`agentCount`,e=>{ye.value=e}),t.on(`blockCount`,e=>{be.value=e,_t.value++}),t.on(`lastActivity`,e=>{xe.value=e});let n=te.subscribe(t=>{try{if(t.type===`channel.snapshot`){e.rebuild(W()),P.value&&G(P.value),f.channelId&&e.focusChannel(f.channelId);return}if(t.type===`device.updated`){D.applyRemote(t.payload),P.value&&G(P.value);return}if(t.type===`device.created`){D.load().then(()=>{P.value&&G(P.value)});return}if(t.type===`device.deleted`){D.removeRemote(t.payload.id),P.value&&G(P.value);return}if(t.type===`scene.layout.saved`||t.type===`scene.layout.removed`){O.load().then(()=>{It(P.value),Lt()});return}let n=de(t)?.bubble;n?.agentId&&rn(n.agentId,n.kind,n.text,t.at,t.seq),e.handleTownEvent(t)}catch(e){L.value=e instanceof Error?e.message:String(e)}});P._off=n,window.__town={get scene(){return P.value},get game(){return me.value},buildInput:W,get characterAssets(){return E}}}function Ot(e){if(`screenToWorld`in e){Ft(e);return}jt(e)}let kt=[];function jt(e){let t=e.game.canvas;if(!t)return;let n=(n,r)=>{let i=e.cameras.main,a=t.getBoundingClientRect(),o=(n-a.left)/a.width,s=(r-a.top)/a.height;return{x:i.worldView.x+o*i.worldView.width,y:i.worldView.y+s*i.worldView.height}},r=!1,i=0,a=0;t.addEventListener(`pointerdown`,e=>{e.button===0&&(r=!0,i=e.clientX,a=e.clientY)});let o=n=>{if(!r)return;let o=e.cameras.main,s=t.getBoundingClientRect(),c=e.game.scale.width/s.width,l=(n.clientX-i)*c/o.zoom,u=(n.clientY-a)*c/o.zoom;o.scrollX-=l,o.scrollY-=u,i=n.clientX,a=n.clientY},s=()=>{r=!1};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s),kt.push(()=>window.removeEventListener(`pointermove`,o)),kt.push(()=>window.removeEventListener(`pointerup`,s)),t.addEventListener(`wheel`,t=>{t.preventDefault();let n=e.cameras.main,r=n.zoom+(t.deltaY<0?.08:-.08);n.setZoom(Math.min(2.4,Math.max(.6,r)))},{passive:!1}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`}),t.addEventListener(`drop`,t=>{t.preventDefault();let r=t.dataTransfer?.getData(`application/x-aw-model`)||t.dataTransfer?.getData(`text/plain`);if(!r)return;let i=n(t.clientX,t.clientY),a=e.dropModelOnWorld(i.x,i.y,r);Kt.value=a})}let Mt=null;function Nt(){L.value=d(`townView.kt6xb5p162`),Mt&&clearTimeout(Mt),Mt=setTimeout(()=>{L.value=``},2600)}function Ft(e){let t=e.canvas;if(!t)return;let n=0,r=0,i=0;t.addEventListener(`contextmenu`,e=>e.preventDefault()),t.addEventListener(`mousedown`,e=>{e.button===1&&e.preventDefault()}),t.addEventListener(`pointerdown`,t=>{if(!e.isGizmoBusy?.()){if(t.button===1||t.button===2||t.shiftKey){t.preventDefault(),n=2,r=t.clientX,i=t.clientY;return}t.button===0&&(e.tryStartPointerDrag(t.clientX,t.clientY)||(n=1,r=t.clientX,i=t.clientY))}});let a=t=>{if(e.isGizmoBusy?.())return;if(e.isPointerDragging()){e.movePointerDrag(t.clientX,t.clientY);return}if(!n)return;let a=t.clientX-r,o=t.clientY-i;r=t.clientX,i=t.clientY,n===1?e.orbitBy(a,o):e.panByScreen(a,o)},o=()=>{if(e.isPointerDragging()){e.endPointerDrag();return}n=0};window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o),kt.push(()=>window.removeEventListener(`pointermove`,a)),kt.push(()=>window.removeEventListener(`pointerup`,o)),t.addEventListener(`wheel`,t=>{t.preventDefault(),e.zoomBy(t.deltaY>0?.12:-.11)},{passive:!1}),t.addEventListener(`dragover`,e=>{e.preventDefault(),e.dataTransfer.dropEffect=`copy`}),t.addEventListener(`drop`,t=>{t.preventDefault();let n=t.dataTransfer;if(!n)return;if(R.value!==`edit`){Nt();return}let r=n.getData(`application/x-aw-channel`)||n.getData(`text/plain`);if(r&&vt.value.some(e=>e.channelId===r)){let n=e.screenToWorld(t.clientX,t.clientY);Qe(r,n.x,n.z);return}let i=n.getData(`application/x-aw-daq-node`);if(i){let n=J.nodeById(i);if(n){let r=e.screenToWorld(t.clientX,t.clientY);J.patchNode(i,{posX:Math.round(r.x),posZ:Math.round(r.z)}).then(()=>{if(!n.deviceBindingId){let e=Wu(r.x,r.z,95);e&&Bu(i,e.id)}}).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}return}let a=n.getData(`application/x-aw-dcw-node`);if(a){let n=Y.nodes.find(e=>e.id===a);if(n){let r=e.screenToWorld(t.clientX,t.clientY);Y.patchNode(a,{posX:Math.round(r.x),posZ:Math.round(r.z)}).then(()=>{if(!n.deviceBindingId){let e=Wu(r.x,r.z,95);e&&Y.bindNode(a,e.id).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}P.value&&G(P.value)}).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}return}let o=n.getData(`application/x-aw-model`)||n.getData(`text/plain`);if(o){let n=e.screenToWorld(t.clientX,t.clientY),r=e.dropModelOnWorld(n.x,n.z,o);Kt.value=r}})}function G(e){`syncDevices`in e&&e.syncDevices(Wl.value)}p(()=>O.rev,e=>{let t=F.value;!t||!O.loaded||e===0||(t.hydrate(W(),Object.values(O.layouts),Wl.value),Lt())});function It(e){if(!e||!(`applySceneLayouts`in e))return;let t=e;t.applySceneLayouts(Object.values(O.layouts)),t.rebuild(W())}function Lt(){O.load().finally(()=>{})}function Rt(e){let t=F.value;t&&(typeof e.posX==`number`&&typeof e.posZ==`number`&&t.focusTo(e.posX,e.posZ),t.setSelected?.({kind:`device`,id:e.id}))}let zt=h({});function Bt(){if(!(typeof localStorage>`u`))try{let e=JSON.parse(localStorage.getItem(El)||`{}`);for(let t of Object.keys(e))e[t]&&Number.isFinite(e[t].x)&&(zt[t]=e[t])}catch{}}function Vt(){try{localStorage.setItem(El,JSON.stringify(zt))}catch{}}let Ht=null;function Ut(e,t){let n=e.currentTarget,r=n.closest(`.drag-panel`),i=n.closest(`.town-frame`);if(!r||!i)return;e.preventDefault();let a=r.getBoundingClientRect(),o=i.getBoundingClientRect();r.style.left=`${a.left-o.left}px`,r.style.top=`${a.top-o.top}px`,r.style.bottom=`auto`,r.style.transform=`none`,zt[t]={x:a.left-o.left,y:a.top-o.top},Ht={frame:i,panel:r,offX:e.clientX-a.left,offY:e.clientY-a.top},document.body.style.userSelect=`none`,document.body.style.cursor=`grabbing`;let s=e=>{let n=Ht;if(!n)return;let r=n.frame.getBoundingClientRect(),i=e.clientX-n.offX-r.left,a=e.clientY-n.offY-r.top,o=n.panel.offsetWidth,s=Math.max(-o+90,Math.min(i,r.width-30)),c=Math.max(4,Math.min(a,r.height-34));n.panel.style.left=`${s}px`,n.panel.style.top=`${c}px`,zt[t]={x:s,y:c}},c=()=>{Ht=null,document.body.style.userSelect=``,document.body.style.cursor=``,window.removeEventListener(`pointermove`,s),window.removeEventListener(`pointerup`,c),Vt()};window.addEventListener(`pointermove`,s),window.addEventListener(`pointerup`,c)}Bt();let Wt=_(null),Gt=e=>`#${e.toString(16).padStart(6,`0`)}`,Kt=_(null),qt=m(()=>{let e=Kt.value;return e?e.mode===`rebind`?d(`townView.kgz2nej193`,{p0:e.agentId?.slice(0,8)??d(`townView.k479op189`),p1:e.textureKey}):d(`townView.k5e2460194`,{p0:e.textureKey}):``}),Jt=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return[];let t=nn.get(e.id);if(!t||t.length===0)return[];let n=q.value.length?q.value[q.value.length-1]?.at??0:0;return t.filter(e=>e.at>n)}),Yt=m(()=>!I.value||I.value.kind!==`agent`?``:F.value?.getAgentName?.(I.value.id)??d(`townView.k3xdvm125`)),K=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return null;for(let t of Object.values(y.agents)){let n=(t??[]).find(t=>t.agentId===e.id);if(n)return n}return null}),Xt=m(()=>K.value?.role===`lead`?`Leader`:`Worker`),Zt=m(()=>K.value?.role===`lead`?`LEADER`:`WORKER`),Qt=m(()=>{let e=K.value?.state;return d(e===`busy`?`townView.k3n4l5f163`:e===`stopped`?`townView.k3n58d1164`:`townView.k3zcvb115`)}),q=S([]),$t=S(!1),en=new Map,tn=S(null),nn=h(new Map);function rn(e,t,n,r,i){let a=typeof r==`number`?r:r?Date.parse(String(r)):Date.now();if(!Number.isFinite(a)||a<=0)return;let o=nn.get(e);o||(o=[],nn.set(e,o));let s=o[o.length-1];s&&s.text===n&&Math.abs(a-s.at)<1500||(o.push({id:`live-${i??a}-${o.length}`,agentId:e,text:n,kind:t,at:a,live:!0}),o.length>Al&&o.splice(0,o.length-Al))}function Fl(){return typeof document>`u`?``:document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``}function Il(e){for(let t of Object.keys(y.agents))if((y.agents[t]??[]).some(t=>t.agentId===e))return t}async function Ll(e,t,n=!1){let r=en.get(e);if(!n&&r&&Date.now()-r.at<kl){q.value=r.rows;return}$t.value=!0;try{let n=Fl(),r=`/api/workshop/channels/${t}/events?limit=500&excludeTypes=agent.delta`,i=await(await fetch(r,{headers:n?{authorization:`Bearer ${decodeURIComponent(n)}`}:{}})).json().catch(()=>null),a=i?.data?.items??(Array.isArray(i?.data)?i.data:[]),o=[];for(let t of a){let n=de(t)?.bubble;if(!n||n.agentId!==e)continue;let r=t.at,i=typeof r==`number`?r:r?Date.parse(String(r)):0;o.push({id:`${String(t.seq??o.length)}-${o.length}`,agentId:n.agentId,text:n.text,kind:n.kind,at:i,live:!1})}o.sort((e,t)=>e.at-t.at),en.set(e,{rows:o,at:Date.now()}),q.value=o}catch{q.value=[]}finally{$t.value=!1}}function Rl(){let e=I.value;if(!e||e.kind!==`agent`)return;let t=Il(e.id);t&&Ll(e.id,t,!0)}p(()=>I.value,e=>{if(!e||e.kind!==`agent`){q.value=[];return}let t=Il(e.id);t?Ll(e.id,t):q.value=[]},{immediate:!0});let zl=m(()=>{let e=I.value;if(!e||e.kind!==`agent`)return`#35e0a0`;let t=Il(e.id);return t?_e(t)??`#35e0a0`:`#35e0a0`});function Bl(e){switch(e){case`artifact`:return d(`townView.k3w9q9165`);case`delta`:return`……`;case`info`:return d(`townView.k44xa7166`);case`error`:return d(`townView.k3zbgf167`);default:return``}}function Vl(e){if(!e||!Number.isFinite(e)||e<=0)return`--:--:--`;let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}p(()=>q.value.length+Jt.value.length,async()=>{await a();let e=tn.value;e&&(e.scrollTop=e.scrollHeight)});let Hl=e=>Y.lines.find(t=>t.id===e)?.color,Ul=m(()=>Y.nodes.map(e=>({id:e.id,workspaceId:``,name:e.name,modelRef:`dcw-${e.templateRef.startsWith(`dcw-`)?e.templateRef.slice(4):e.templateRef}`,boundAgentId:null,kind:`daq`,telemetry:{value:e.value??0},desired:{},controls:[],state:e.enabled?e.state===`error`?`alarm`:`running`:`offline`,posX:e.posX,posZ:e.posZ,lineId:e.lineId||void 0,lineColor:e.lineId?Hl(e.lineId):void 0,updatedAt:e.lastWriteAt??e.createdAt}))),Wl=m(()=>[...D.twins.filter(e=>!uu(e)),...X.value,...Ul.value]),Gl=e=>Wl.value.find(t=>t.id===e),Kl=m(()=>ge.value&&be.value===0&&!Wl.value.some(e=>typeof e.posX==`number`&&typeof e.posZ==`number`));function ql(e){return ce(()=>{D.load().then(()=>{if(P.value===e){e.syncDevices(Wl.value);for(let t of e.getDeviceNodes()){let n=Gl(t.twinId);n&&e.updateDeviceNode(t.twinId,n.state,n.telemetry)}}})},5e3)}let Jl=_([]),J=Ee(),Y=we(),Yl=h(Y.templates.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})));p(()=>Y.templates,e=>{e?.length&&Yl.splice(0,Yl.length,...e.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})))},{immediate:!0,deep:!0});let Xl=an(`aw.twin.treeOpen`,{});function Zl(e){Xl.value[e]=!Xl.value[e]}let Ql=m(()=>{let e=new Map;for(let t of J.nodes){let n=t.templateRef.startsWith(`daq-`)?t.templateRef.slice(4):t.templateRef,r=e.get(n)??[];r.push(t),e.set(n,r)}for(let t of e.values())t.sort((e,t)=>e.name.localeCompare(t.name,void 0,{numeric:!0}));return e}),$l=m(()=>{let e=new Map;for(let t of Y.nodes){let n=t.templateRef.startsWith(`dcw-`)?t.templateRef.slice(4):t.templateRef,r=e.get(n)??[];r.push(t),e.set(n,r)}for(let t of e.values())t.sort((e,t)=>e.name.localeCompare(t.name,void 0,{numeric:!0}));return e});async function eu(e){try{let t=(Ql.value.get(e.id)?.length??0)+1;await J.createFromTemplate(`daq-${e.id}`,{name:`${e.name} ${String(t).padStart(2,`0`)}`}),Xl.value[`daq:${e.id}`]=!0}catch(e){L.value=e instanceof Error?e.message:String(e)}}async function tu(e){try{await Y.createFromTemplate(`dcw-${e.id}`,{}),Xl.value[`dcw:${e.id}`]=!0}catch(e){L.value=e instanceof Error?e.message:String(e)}}function nu(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-daq-node`,t.id),e.dataTransfer.setData(`text/plain`,t.id),e.dataTransfer.effectAllowed=`copy`)}function ru(e,t){e.dataTransfer&&(e.dataTransfer.setData(`application/x-aw-dcw-node`,t.id),e.dataTransfer.setData(`text/plain`,t.id),e.dataTransfer.effectAllowed=`copy`)}function iu(e){return!J.controller.running||!e.enabled||e.state===`offline`?`offline`:e.state===`alarm`?`alarm`:e.state===`warn`?`warn`:`running`}function au(e){return!e.enabled||e.state===`error`?`offline`:`running`}let ou=h(Te.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,base:e.base,amp:e.amp,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})));p(()=>J.templates,e=>{e?.length&&ou.splice(0,ou.length,...e.map(e=>({id:e.key,name:e.name,code:e.code,ch:e.ch,unit:e.unit,base:e.base,amp:e.amp,min:e.min,max:e.max,decimals:e.decimals,icon:e.icon})))},{immediate:!0,deep:!0});let su=e=>{let t=e.startsWith(`daq-`)?e.slice(4):e;return ou.find(e=>e.id===t)},cu=e=>su(e.templateRef);function lu(e){return!J.controller.running||!e.enabled?`offline`:e.state===`alarm`?`alarm`:`running`}let uu=e=>e.kind===`daq`||(e.modelRef??``).startsWith(`daq-`),X=m(()=>J.nodes.map(e=>({id:e.id,workspaceId:``,name:e.name,modelRef:`daq-${cu(e)?.id??`unknown`}`,boundAgentId:null,kind:`daq`,telemetry:{value:e.value??0},desired:{},controls:[],state:lu(e),posX:e.posX,posZ:e.posZ,lineId:e.lineId||void 0,lineColor:e.lineId?Hl(e.lineId):void 0,updatedAt:e.lastAt??e.createdAt}))),du=S(0),fu=new Map,pu=new Map,mu=null,hu=!1;function gu(){hu||(hu=!0,requestAnimationFrame(()=>{hu=!1,du.value++}))}function _u(e){if(!e.nodeId||typeof e.value!=`number`||!Number.isFinite(e.value))return;let t=e.state??`ok`;fu.set(e.nodeId,{value:e.value,state:t,atMs:Date.parse(e.at??``)||Date.now()});let n=pu.get(e.nodeId);n||(n=[],pu.set(e.nodeId,n)),n.push(e.value),n.length>jl&&n.shift();let r=bu.get(e.nodeId);r&&r!==t&&xu(e.nodeId,r,t,e.value),r!==t&&bu.set(e.nodeId,t),gu()}let vu=m(()=>{du.value;let e=new Map;for(let t of J.nodes){let n=cu(t);if(!n)continue;let r=fu.get(t.id),i=r&&(!t.lastAt||r.atMs>=Date.parse(t.lastAt)),a=i?r.value:t.value;if(a==null)continue;let o=i?r.state:t.state;e.set(t.id,{value:a,hist:pu.get(t.id)??t.hist,phase:0,tpl:n,alarm:o===`alarm`})}return e}),yu=e=>e.value.toFixed(e.tpl.decimals),bu=new Map;function xu(e,t,n,r){let i=J.nodeById(e),a=i?cu(i):null,o=(i?.deviceBindingId?D.byId(i.deviceBindingId)?.name:null)??i?.name??e.slice(0,8),s=`${r?.toFixed(a?.decimals??2)??`--`} ${a?.unit??``}`;n===`alarm`?cf(d(`townView.k113fir9195`,{p0:o,p1:a?.ch??``,p2:s}),`crit`,o):n===`warn`?cf(d(`townView.k1knv89d196`,{p0:o,p1:a?.ch??``,p2:s}),`warn`,o):t!==`ok`&&n===`ok`&&cf(d(`townView.ksjancw197`,{p0:o,p1:a?.ch??``}),`info`,o)}p(()=>J.nodes.map(e=>`${e.id}:${e.state}`).join(`|`),()=>{for(let e of J.nodes){let t=bu.get(e.id);bu.set(e.id,e.state),!(!t||t===e.state)&&xu(e.id,t,e.state,e.value)}});function Su(e){return Math.max(0,Math.ceil((Date.parse(e.expiresAt)-Date.now())/1e3))}let Cu=()=>{let e=document.cookie.match(/(?:^|;\s*)token=([^;]+)/)?.[1]??``;return{"content-type":`application/json`,authorization:`Bearer ${decodeURIComponent(e)}`}},wu=S([]),Tu=S(`dcw`),Eu=S(``),Du=S(`auto`),Ou=S([]),ku=h({}),Au=null;async function ju(){let e=I.value?.id;if(!(I.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/bindings?agentId=${encodeURIComponent(e)}`,{headers:Cu()}).then(e=>e.json());wu.value=t.data?.bindings??[]}catch{}}async function Mu(){let e=I.value?.id;if(!(I.value?.kind!==`agent`||!e))try{let t=await fetch(`/api/workshop/agent-tools/approvals?agentId=${encodeURIComponent(e)}`,{headers:Cu()}).then(e=>e.json());Ou.value=t.data?.approvals??[]}catch{}}async function Nu(){!I.value?.id||!Eu.value||(await fetch(`/api/workshop/agent-tools/bindings`,{method:`POST`,headers:Cu(),body:JSON.stringify({agentId:I.value.id,nodeId:Eu.value,kind:Tu.value,mode:Du.value})}),Eu.value=``,await ju())}async function Pu(e){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`DELETE`,headers:Cu()}),await ju()}async function Fu(e,t){await fetch(`/api/workshop/agent-tools/bindings/${e}`,{method:`PATCH`,headers:Cu(),body:JSON.stringify({mode:t})}),await ju()}async function Iu(e,t){await fetch(`/api/workshop/agent-tools/approvals/${e}/decide`,{method:`POST`,headers:Cu(),body:JSON.stringify({approved:t,comment:ku[e]??``})}),Reflect.deleteProperty(ku,e),await Mu()}p(()=>I.value?.id,e=>{Au&&=(clearInterval(Au),null),I.value?.kind===`agent`&&e&&(ju(),Mu(),Au=ce(()=>{Mu()},1e3))},{immediate:!0}),t(()=>{Au&&clearInterval(Au)});function Lu(e){return e.kind===`dcw`?Y.nodeById(e.nodeId)?.name??e.nodeId:J.nodeById(e.nodeId)?.name??e.nodeId}let Ru=e=>J.nodeById(e)?.deviceBindingId??null,zu=e=>e?J.nodes.filter(t=>t.deviceBindingId===e).map(e=>e.id):[];function Bu(e,t){J.bindNode(e,t).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}function Vu(e){J.bindNode(e,null).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}let Hu={thermo:`<path d="M10 4a2 2 0 0 1 4 0v9a4 4 0 1 1-4 0V4Z"/><circle cx="12" cy="16.5" r="1.6"/>`,pressure:`<circle cx="12" cy="12" r="8"/><path d="m12 12 3.5-3.5"/><circle cx="12" cy="12" r="1.2"/>`,tension:`<circle cx="12" cy="10" r="4"/><path d="M4 18.5h16M8 18.5V14M16 18.5V14"/><path d="M2.5 10H8M16 10h5.5"/>`,encoder:`<circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="2"/><path d="M12 4v3M12 17v3M4 12h3M17 12h3"/>`,camera:`<rect x="3" y="7" width="13" height="10" rx="2"/><path d="m16 11 5-3v8l-5-3"/><circle cx="8" cy="12" r="2.5"/>`,gateway:`<rect x="8" y="11" width="8" height="10" rx="1.5"/><circle cx="12" cy="5.5" r="1.5"/><path d="M12 10V7M8.5 8.5a5 5 0 0 1 7 0M6 6a8.5 8.5 0 0 1 12 0"/>`},Uu=e=>Hu[e]??Hu.gateway;function Wu(e,t,n){let r=null,i=n;for(let n of D.twins){if(uu(n)||typeof n.posX!=`number`||typeof n.posZ!=`number`)continue;let a=Math.hypot(n.posX-e,n.posZ-t);a<i&&(i=a,r=n)}return r}let Gu=S(!1),Ku=S(!1),qu=S(420);function Ju(e,t){let n=t.currentTarget,r=n?.closest(`.panel`);if(n&&r){let e=n.getBoundingClientRect().top-r.getBoundingClientRect().top-12;qu.value=Math.max(160,Math.round(e))}e===`daq`?Gu.value=!Gu.value:Ku.value=!Ku.value}let Yu=m(()=>{let e=I.value?.kind===`device`?I.value.id:``,t={};if(!e)return t;for(let n of J.nodes){if(n.deviceBindingId===e)continue;let r=cu(n);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?D.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),Xu=m(()=>Object.values(Yu.value).reduce((e,t)=>e+t.length,0));function Zu(e){let t=I.value?.kind===`device`?I.value.id:``;t&&(Bu(e,t),Gu.value=!1)}let Qu=new Map;function $u(e,t){let n=t;n?Qu.set(e,n):Qu.delete(e)}function ed(){for(let[e,t]of Qu){let n=vu.value.get(e),r=t.getContext(`2d`);if(!n||!r)continue;let i=t.width,a=t.height;r.clearRect(0,0,i,a);let o=n.hist;if(o.length<2)continue;let s=o[0],c=o[0];for(let e of o)e<s&&(s=e),e>c&&(c=e);let l=Math.max(1e-6,c-s);r.strokeStyle=Mf(e),r.lineWidth=1.4,r.beginPath(),o.forEach((e,t)=>{let n=t/(o.length-1)*(i-2)+1,c=a-2-(e-s)/l*(a-4);t?r.lineTo(n,c):r.moveTo(n,c)}),r.stroke()}}p(()=>J.nodes.map(e=>`${e.id}:${e.posX??``}:${e.posZ??``}:${e.enabled}:${e.state}:${e.deviceBindingId??``}`).join(`|`),()=>{P.value&&G(P.value)}),p(()=>Y.nodes.map(e=>`${e.id}:${e.posX??``}:${e.posZ??``}:${e.enabled}:${e.deviceBindingId??``}:${e.value??``}`).join(`|`),()=>{P.value&&G(P.value)}),p(()=>J.nodes.map(e=>`${e.id}:${e.deviceBindingId??``}`).join(`|`),()=>{let e=F.value;!e||!(`syncDaqLinks`in e)||e.syncDaqLinks(J.nodes.filter(e=>e.deviceBindingId).map(e=>({daqId:e.id,deviceId:e.deviceBindingId})))});let td=m(()=>I.value?.kind===`device`&&(nd.value?.modelRef||``).startsWith(`daq-`)),nd=m(()=>I.value?.kind===`device`?Gl(I.value?.id)??null:null),rd=m(()=>{let e=I.value?.id;return e?vu.value.get(e)??null:null}),id=S(``),ad=m(()=>{let e=I.value?.id;return e?zu(e).map(e=>{let t=Gl(e),n=vu.value.get(e),r=n?.tpl??su(t?.modelRef??``);return{daqId:e,name:t?.name??e,ch:r?.ch??t(`townView.k1ef3cls168`),icon:r?.icon??`gateway`,value:n?yu(n):`--`,unit:n?.tpl.unit??r?.unit??``,color:Mf(e)}}):[]}),od=m(()=>{let e=I.value?.id;if(!e)return``;let t=Ru(e);return t?D.twins.find(e=>e.id===t)?.name??t.slice(0,8):``}),sd=e=>e?Y.nodes.filter(t=>t.deviceBindingId===e):[];function cd(e){let t=Y.nodeById(e);if(!t||!t.lineId)return null;let n=Y.lineStateOf(t.lineId);if(!n.active||!n.recipeId)return null;let r=Y.recipes.find(e=>e.id===n.recipeId);return r?r.params.find(t=>t.nodeId===e)??null:null}let ld=m(()=>{let e=I.value?.id;return e?sd(e).map(e=>{let t=e.templateRef.startsWith(`dcw-`)?e.templateRef.slice(4):e.templateRef,n=Y.templates.find(e=>e.key===t),r=cd(e.id);return{dcwId:e.id,name:e.name,ch:n?.ch??t,unit:e.unit,icon:n?.icon??`gateway`,value:e.value,state:e.state,decimals:e.decimals,gMin:e.min,gMax:e.max,rMin:r?.min??null,rMax:r?.max??null}}):[]});function ud(e){let t=cd(e.id);return t&&(t.min!=null||t.max!=null)?{lo:t.min??-1/0,hi:t.max??1/0,src:`recipe`}:{lo:e.min,hi:e.max,src:`global`}}function dd(e){let t=e.rMin??e.gMin,n=e.rMax??e.gMax;return!Number.isFinite(t)||!Number.isFinite(n)||n<=t||e.value==null?50:Math.min(100,Math.max(0,(e.value-t)/(n-t)*100))}let fd=h({}),pd=h({});function md(e){let t=fd[e.id];if(t==null||t===``)return;let n=ud(e);if(Number(t)<n.lo||Number(t)>n.hi){pd[e.id]=d(`townView.kbuyve5198`,{p0:n.src===`recipe`?d(`townView.kb251ac190`):d(`townView.k1iwj796179`),p1:Number.isFinite(n.lo)?n.lo:`-∞`,p2:Number.isFinite(n.hi)?n.hi:`+∞`});return}pd[e.id]=``,Y.write(e.id,Number(t)).then(t=>{t.ok||(pd[e.id]=t.message)}).catch(t=>{pd[e.id]=t instanceof Error?t.message:String(t)})}let hd=e=>{let t=e.startsWith(`dcw-`)?e.slice(4):e;return Yl.find(e=>e.id===t)},gd=m(()=>{let e=I.value?.kind===`device`?I.value.id:``,t={};if(!e)return t;for(let n of Y.nodes){if(n.deviceBindingId===e)continue;let r=hd(n.templateRef);r&&(t[r.id]??=[]).push({id:n.id,name:n.name,tpl:r,devName:n.deviceBindingId?D.byId(n.deviceBindingId)?.name??null:null,placed:typeof n.posX==`number`})}return t}),_d=m(()=>Object.values(gd.value).reduce((e,t)=>e+t.length,0));function vd(e){let t=I.value?.kind===`device`?I.value.id:``;t&&(Y.bindNode(e,t).catch(e=>{L.value=e instanceof Error?e.message:String(e)}),Ku.value=!1)}function yd(e){Y.bindNode(e,null).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}let bd=m(()=>I.value?.kind===`device`&&(Gl(I.value?.id)?.modelRef??``).startsWith(`dcw-`)),Z=m(()=>{let e=I.value?.id;return e?Y.nodeById(e)??null:null}),xd=m(()=>{let e=Z.value;return e?ud(e):null}),Sd=m(()=>{let e=Z.value;return e?.deviceBindingId?D.twins.find(t=>t.id===e.deviceBindingId)?.name??e.deviceBindingId.slice(0,8):``}),Cd=S(``);function wd(){let e=Z.value;!e||!Cd.value||(Y.bindNode(e.id,Cd.value).catch(e=>{L.value=e instanceof Error?e.message:String(e)}),Cd.value=``)}function Td(){let e=Z.value;e&&Y.bindNode(e.id,null).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}function Ed(){let e=Z.value;e&&md(e)}function Dd(e){if(!e)return`--`;let t=ud(e);return`${Number.isFinite(t.lo)?t.lo:`-∞`} ~ ${Number.isFinite(t.hi)?t.hi:`+∞`} ${e.unit}`}function Od(e){if(!e)return``;let t=ud(e);return`${Number.isFinite(t.lo)?t.lo:``} ~ ${Number.isFinite(t.hi)?t.hi:``}`}let Q=m(()=>{let e=I.value?.id;return e?J.nodeById(e)??null:null}),kd=S(null);p(Q,e=>{kd.value=e?e.intervalMs??J.controller.defaultIntervalMs:null},{immediate:!0});function Ad(){let e=Q.value;!e||kd.value==null||J.patchNode(e.id,{intervalMs:Math.max(120,Math.min(6e4,Math.round(kd.value)))}).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}function jd(e,t){let n=Number(t);Number.isFinite(n)&&J.patchNode(Q.value.id,{[e]:(e.startsWith(`warn`),n)}).catch(e=>{L.value=e instanceof Error?e.message:String(e)})}let Md=S(!0);function Nd(e){let t=Ru(e)??e,n=Gl(t);n&&(I.value={kind:`device`,id:t,scale:I.value?.scale??1,rotation:I.value?.rotation??0},nt.value=n.name)}let Pd=S(!1);function Fd(){Pd.value=!Pd.value,F.value?.setAutoOrbit(Pd.value)}function Id(){let e=F.value,t=I.value;if(e){if(!t){L.value=d(`townView.k15tn2fh169`);return}if(t.kind===`device`){let n=e.getDeviceNodes().find(e=>e.twinId===t.id);n&&e.focusTo(n.x,n.z)}else{let n=e.getAgent(t.id);n&&e.focusTo(n.root.position.x,n.root.position.z)}}}let Ld=S({}),Rd=an(`aw.twin.calloutNear`,1150),zd=m(()=>{let e={};for(let t of X.value){let n=vu.value.get(t.id);if(!n)continue;let r={ch:n.tpl.ch,value:yu(n),unit:n.tpl.unit,alarm:n.alarm??!1};(e[t.id]??=[]).push(r);let i=Ru(t.id);i&&(e[i]??=[]).push(r)}return e}),Bd=m(()=>{let e={};for(let t of Y.nodes){if(!t.deviceBindingId)continue;let n=t.templateRef.startsWith(`dcw-`)?t.templateRef.slice(4):t.templateRef,r=Y.templates.find(e=>e.key===n),i=ud(t);(e[t.deviceBindingId]??=[]).push({id:t.id,ch:r?.ch??n,name:t.name,unit:t.unit,value:t.value,decimals:t.decimals,lo:i.lo,hi:i.hi,src:i.src})}return e}),Vd=S({pos:{x:0,y:0,z:0},target:{x:0,z:0},yaw:0,dolly:1}),Hd=m(()=>{if(!Md.value)return[];let e=F.value;if(!e)return[];let t=e.getDeviceNodes(),n=qd.value?.clientWidth??1600,r=[];for(let e of X.value){let n=vu.value.get(e.id);if(!n)continue;let i=Ru(e.id),a=i?t.find(e=>e.twinId===i):t.find(t=>t.twinId===e.id);if(!a)continue;let o=Ld.value[e.id];o&&r.push({t:e,st:n,anchor:a,pos:o})}let i=new Map(r.map(e=>[e.anchor.twinId,e.anchor.topY])),a=new Map;for(let e of r){let t=a.get(e.anchor.twinId)??[];t.push(e),a.set(e.anchor.twinId,t)}let o=[];for(let e of a.values()){e.sort((e,t)=>e.t.id<t.t.id?-1:1);let t=e[0],r=Math.hypot(Vd.value.pos.x-t.anchor.x,Vd.value.pos.y-(i.get(t.anchor.twinId)??60),Vd.value.pos.z-t.anchor.z)<Rd.value,a=Math.min(n-96,Math.max(96,t.pos.x));e.forEach((e,n)=>{let{lo:i,hi:s}=yf(e.st.tpl.min,e.st.tpl.max);o.push({id:e.t.id,x:a,y:t.pos.y-n*Ml,label:`${e.st.tpl.ch} · ${e.anchor.name||e.t.name}`,value:yu(e.st),unit:e.st.tpl.unit,lo:i,hi:s,warn:e.st.alarm??!1,near:r,leader:n===0})})}return o}),Ud=null,Wd=m(()=>D.twins.length),Gd=m(()=>D.twins.filter(e=>e.state===`running`).length),Kd=ue(),qd=S(null),Jd=S(`std`);function Yd(e){Jd.value=e.target.value,F.value?.setViewPreset(Jd.value)}function Xd(){document.fullscreenElement?document.exitFullscreen():qd.value?.requestFullscreen?.()}let Zd=m(()=>D.twins.filter(e=>e.state===`idle`).length),Qd=m(()=>D.twins.filter(e=>e.state===`alarm`).length),$d=m(()=>D.twins.filter(e=>e.state===`offline`).length),ef=m(()=>{let e=D.twins.length;if(!e)return 100;let t=Gd.value+Zd.value;return Math.round(t/e*100)}),tf=m(()=>ef.value>=90?`#35e0a0`:ef.value>=60?`#f6c453`:`#ff6b6b`),nf=S(null);function rf(){let e=nf.value;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let n=D.twins.length||1,r=[{n:Gd.value,color:`#35e0a0`},{n:Zd.value,color:`#f6c453`},{n:Qd.value,color:`#ff6b6b`},{n:$d.value,color:`#3a4a63`}];t.clearRect(0,0,118,118),t.lineWidth=12;let i=-Math.PI/2;for(let e of r){if(!e.n)continue;let r=e.n/n*Math.PI*2;t.beginPath(),t.strokeStyle=e.color,t.arc(59,59,48,i,i+r),t.stroke(),i+=r}}p(ef,()=>rf()),p(()=>D.twins.length,()=>rf()),ne(()=>rf());let af=S([]),of=0,sf=[d(`townView.k3ng94k170`),d(`townView.k3mi2n0171`),d(`townView.k3ncnxl172`)];function cf(e,t=`warn`,n=`SYSTEM`){let r=new Date,i=[r.getHours(),r.getMinutes(),r.getSeconds()].map(e=>String(e).padStart(2,`0`)).join(`:`);af.value.unshift({id:++of,txt:e,src:n,time:i,state:0,level:t}),af.value.length>30&&af.value.pop()}let lf=m(()=>af.value.filter(e=>e.state<2).length);function uf(e){let t=af.value.find(t=>t.id===e);t&&(t.state=Math.min(2,t.state+1))}function df(){af.value=af.value.map(e=>({...e,state:2}))}let ff=S(100),pf=an(`aw.twin.fpsCap`,`60`),mf=[{v:`60`,label:`60`},{v:`120`,label:`120`},{v:`0`,label:`∞`}];function hf(e){pf.value=e,F.value?.setFpsCap(Number(e))}let gf=an(`aw.twin.quality`,`auto`),_f=[{v:`auto`,label:`townView.qualityAuto`},{v:`normal`,label:`townView.qualityNormal`},{v:`hd`,label:`townView.qualityHD`},{v:`ultra`,label:`townView.qualityUltra`}];function vf(e){gf.value=e,F.value?.setQualityMode(e)}function yf(e,t){let n=ff.value/100,r=(e+t)/2;return{lo:r-(r-e)*n,hi:r+(t-r)*n}}let bf=S(!1);function xf(){bf.value=!bf.value,cf(bf.value?d(`townView.kb157zk173`):d(`townView.k1s9qzr9174`),bf.value?`crit`:`info`,`SYSTEM`)}let Sf=S(1.12),Cf=S(1);function wf(e,t,n){return`${Math.min(100,Math.max(0,(e-t)/(n-t)*100)).toFixed(1)}%`}function Tf(e){Sf.value=Number(e.target.value)/100,F.value?.setExposure(Sf.value)}function Ef(e){Cf.value=Number(e.target.value)/100,F.value?.setTerritoryOpacity(Cf.value)}function Df(){F.value?.resetView(),Sf.value=1.12,Cf.value=1,F.value?.setExposure(1.12),F.value?.setTerritoryOpacity(1)}function Of(e){Af.value={...Af.value,[e]:!Af.value[e]}}let kf=S(null),Af=S({}),jf=[`#35e0a0`,`#41c8f4`,`#f6c453`,`#a78bfa`,`#ff6b6b`,`#4dd0e1`],Mf=e=>jf[Math.abs(e.split(``).reduce((e,t)=>e*31+t.charCodeAt(0),7))%jf.length]??`#35e0a0`;function Nf(e,t){let n=Af.value[e];return n==null?(t??X.value.findIndex(t=>t.id===e))<Nl:!n}let Pf=S(!1),Ff=m(()=>Math.max(X.value.length-Nl,0)),If=m(()=>Pf.value?X.value:X.value.slice(0,Nl));function Lf(){let e=kf.value;if(!e)return;let t=Math.min(window.devicePixelRatio,2),n=e.clientWidth,r=e.clientHeight;(e.width!==n*t||e.height!==r*t)&&(e.width=n*t,e.height=r*t);let i=e.getContext(`2d`);if(i){i.setTransform(t,0,0,t,0,0),i.clearRect(0,0,n,r),i.strokeStyle=`rgba(29, 42, 66, 0.6)`,i.lineWidth=1;for(let e=1;e<4;e++){let t=r/4*e;i.beginPath(),i.moveTo(0,t),i.lineTo(n,t),i.stroke()}X.value.forEach((e,t)=>{if(!Nf(e.id,t))return;let a=vu.value.get(e.id);if(!a)return;let o=pu.get(e.id)??a.hist;if(o.length<2)return;let s=a.tpl.min,c=a.tpl.max;i.strokeStyle=Mf(e.id),i.lineWidth=1.6,i.beginPath(),o.forEach((e,t)=>{let a=t/119*n,o=r-(e-s)/(c-s)*(r-8)-4;t===0?i.moveTo(a,o):i.lineTo(a,o)}),i.stroke()})}}let Rf=null,zf=null,Bf=null,Vf=null,Hf=S(null),Uf=m(()=>Math.min(5,Math.max(.4,Vd.value.dolly))),$=null;function Wf(e){let t=e.clientWidth||220,n=e.clientHeight||148;return{s:t/(Pl*Uf.value),w:t,h:n}}function Gf(){let e=Hf.value,t=Wt.value,n=F.value;if(!e)return;let r=Math.min(window.devicePixelRatio||1,2),i=Wf(e);(e.width!==Math.round(i.w*r)||e.height!==Math.round(i.h*r))&&(e.width=Math.round(i.w*r),e.height=Math.round(i.h*r));let a=e.getContext(`2d`);if(!a)return;a.setTransform(r,0,0,r,0,0),a.fillStyle=`#060b13`,a.fillRect(0,0,i.w,i.h);let o=n?.getCameraPose(),s=o?o.target.x:Dl/2,c=o?o.target.z:Ol/2,l=i.w/2/i.s,u=i.h/2/i.s,d=(e,t)=>({x:i.w/2+(e-s)*i.s,y:i.h/2+(t-c)*i.s}),f=(e,t,n=60)=>e>s-l-n&&e<s+l+n&&t>c-u-n&&t<c+u+n;a.fillStyle=`rgba(65,200,244,.10)`;for(let e=Math.floor((s-l)/250)*250;e<=s+l;e+=250)for(let t=Math.floor((c-u)/250)*250;t<=c+u;t+=250){let n=d(e,t);a.fillRect(n.x-1,n.y-1,1.6,1.6)}let p=d(0,0),m=d(Dl,Ol);a.strokeStyle=`rgba(53,224,160,.35)`,a.lineWidth=1,a.strokeRect(p.x,p.y,m.x-p.x,m.y-p.y);for(let e of t?.blocks??[]){let t=e.x*Dl,n=e.y*Ol;if(!f(t,n,400))continue;let r=d(t,n),o=Math.max(4,(e.rx??.03)*Dl*i.s),s=Math.max(3,(e.rz??.03)*Ol*i.s);a.strokeStyle=Gt(e.color),a.globalAlpha=.6,a.lineWidth=1,a.beginPath(),a.ellipse(r.x,r.y,o,s,0,0,Math.PI*2),a.stroke(),a.globalAlpha=.08,a.fillStyle=Gt(e.color),a.fill(),a.globalAlpha=1}a.strokeStyle=`rgba(65,200,244,.28)`;let h=new Set(J.nodes.filter(e=>e.deviceBindingId).map(e=>e.id));for(let[e,n]of J.nodes.filter(e=>e.deviceBindingId).map(e=>[e.id,e.deviceBindingId])){let r=(t?.devices??[]).find(t=>t.twinId===e),i=(t?.devices??[]).find(e=>e.twinId===n);if(!r||!i)continue;let o=d(r.x*Dl,r.y*Ol),s=d(i.x*Dl,i.y*Ol);a.beginPath(),a.moveTo(o.x,o.y),a.lineTo(s.x,s.y),a.stroke()}let g=e=>e.x>=7&&e.x<=i.w-7&&e.y>=7&&e.y<=i.h-7?{...e,edge:!1}:{x:Math.min(i.w-7,Math.max(7,e.x)),y:Math.min(i.h-7,Math.max(7,e.y)),edge:!0};for(let e of t?.devices??[]){let t=g(d(e.x*Dl,e.y*Ol));if(e.daq)a.globalAlpha=t.edge?.4:1,a.fillStyle=`#35e0a0`,a.beginPath(),a.arc(t.x,t.y,t.edge?1.8:2.4,0,7),a.fill(),!t.edge&&e.twinId&&h.has(e.twinId)&&(a.strokeStyle=`rgba(53,224,160,.5)`,a.beginPath(),a.arc(t.x,t.y,4.4,0,7),a.stroke());else{a.globalAlpha=t.edge?.4:1,a.fillStyle=Gt(e.color);let n=t.edge?3.6:5.2;a.fillRect(t.x-n/2,t.y-n/2,n,n)}a.globalAlpha=1}for(let e of t?.agents??[]){let t=g(d(e.x*Dl,e.y*Ol));a.globalAlpha=t.edge?.35:1,a.fillStyle=Gt(e.color),a.beginPath(),a.arc(t.x,t.y,t.edge?1.6:2.2,0,7),a.fill(),a.globalAlpha=1}if(o){let e=Math.atan2(-Math.cos(o.yaw),-Math.sin(o.yaw)),t=Math.min(i.w,i.h)*.36;a.fillStyle=`rgba(65,200,244,.14)`,a.strokeStyle=`rgba(65,200,244,.5)`,a.lineWidth=1,a.beginPath(),a.moveTo(i.w/2,i.h/2),a.arc(i.w/2,i.h/2,t,e-.4,e+.4),a.closePath(),a.fill(),a.stroke();let n=d(o.pos.x,o.pos.z);n.x>4&&n.x<i.w-4&&n.y>4&&n.y<i.h-4&&(a.fillStyle=`rgba(255,255,255,.85)`,a.beginPath(),a.arc(n.x,n.y,2.4,0,7),a.fill())}a.fillStyle=`#fff`,a.beginPath(),a.arc(i.w/2,i.h/2,3,0,7),a.fill(),a.strokeStyle=`rgba(255,255,255,.4)`,a.beginPath(),a.arc(i.w/2,i.h/2,5.5,0,7),a.stroke()}function Kf(e){F.value?.zoomBy(e.deltaY>0?.14:-.12)}function qf(e){$={lx:e.clientX,ly:e.clientY,moved:!1};try{e.target.setPointerCapture?.(e.pointerId)}catch{}}function Jf(e){let t=Hf.value,n=F.value;if(!$||!t||!n)return;let r=Wf(t),i=e.clientX-$.lx,a=e.clientY-$.ly;Math.abs(i)+Math.abs(a)>3&&($.moved=!0);let o=i/r.s,s=a/r.s;$.lx=e.clientX,$.ly=e.clientY,n.panWorldBy(o,s)}function Yf(e){let t=Hf.value,n=F.value;if($&&!$.moved&&t&&n){let r=t.getBoundingClientRect(),i=Wf(t),a=n.getCameraPose(),o=a.target.x+(e.clientX-r.left-r.width/2)/i.s,s=a.target.z+(e.clientY-r.top-r.height/2)/i.s;n.focusTo(o,s)}$=null}function Xf(){let e=P.value;e?.getMinimapState&&(Wt.value=e.getMinimapState()),Gf();let t=F.value;if(t&&(Vd.value=t.getCameraPose(),Md.value)){let e=t.getDeviceNodes(),n=qd.value?.getBoundingClientRect(),r={};for(let i of X.value){let a=Ru(i.id),o=a?e.find(e=>e.twinId===a):e.find(e=>e.twinId===i.id);if(!o)continue;let s=t.worldToScreen(o.x,(o.topY??92)+26,o.z);s&&n&&(r[i.id]={x:s.x-n.left,y:s.y-n.top})}Ld.value=r}}function Zf(){if(document.hidden){Rf&&=(clearInterval(Rf),null),Vf&&=(clearInterval(Vf),null),zf&&=(clearInterval(zf),null);return}Rf||=ce(Xf,150),Vf||=ce(()=>{J.nodes.length&&(Lf(),ed())},200),zf||=ce(()=>{let e=P.value;e?.getRecentActivity&&(Jl.value=e.getRecentActivity())},400)}return ne(()=>{window.addEventListener(`keydown`,Re),document.addEventListener(`visibilitychange`,Zf),J.ensureWsFeed(),J.load(),mu=Ce().subscribe(e=>{e.type===`daq.reading`&&_u(e.payload)}),Y.ensureWsFeed(),Y.load(),Rf=ce(Xf,150),Vf=ce(()=>{J.nodes.length&&(Lf(),ed())},200),zf=ce(()=>{let e=P.value;e?.getRecentActivity&&(Jl.value=e.getRecentActivity())},400)}),t(()=>{window.removeEventListener(`keydown`,Re);for(let e of kt)try{e()}catch{}kt.length=0,document.removeEventListener(`visibilitychange`,Zf),Rf&&clearInterval(Rf),Vf&&clearInterval(Vf),zf&&clearInterval(zf),Bf&&clearInterval(Bf),Ud&&clearInterval(Ud),Rf=null,Vf=null,zf=null,Bf=null,Ud=null}),ne(()=>{wt();let e=W();e.length>0&&P.value&&P.value.rebuild(e)}),t(()=>{mu?.();let e=P._off;e?.(),F.value?.dispose(),F.value=null,me.value?.destroy(!0),me.value=null,P.value=null}),(e,t)=>{let a=tt,d=At;return r(),g(`div`,on,[w(`header`,sn,[w(`div`,cn,[t[52]||=A(`<svg class="brand-glyph" viewBox="0 0 32 32" fill="none" aria-hidden="true" data-v-771c2c29><path d="M16 2.5 27.5 9v14L16 29.5 4.5 23V9L16 2.5Z" stroke="#35e0a0" stroke-width="1.6" data-v-771c2c29></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-771c2c29></path><circle cx="16" cy="16" r="2.4" fill="#35e0a0" data-v-771c2c29></circle><circle cx="25.5" cy="7.5" r="1.6" fill="#41c8f4" data-v-771c2c29></circle></svg>`,1),w(`div`,null,[t[51]||=w(`div`,{class:`brand-name`},[u(` DIGITAL `),w(`em`,null,`TWIN`)],-1),w(`div`,ln,` AGENTWORKSHOP · `+c(e.$t(`townView.klyi8yg127`)),1)])]),w(`nav`,{class:`nav-tabs`,"aria-label":e.$t(`townView.k1c9jyta001`)},[w(`div`,dn,[w(`button`,{class:i({on:o(R)===`browse`}),onClick:t[0]||=e=>o(R)===`edit`&&Fe()},c(e.$t(`townView.k48dwh027`)),3),w(`button`,{class:i({on:o(R)===`edit`}),onClick:t[1]||=e=>o(R)===`browse`&&Fe()},c(e.$t(`townView.k45eb0028`)),3)]),w(`button`,{class:`nav-action`,disabled:o(R)!==`edit`,title:o(R)===`edit`?`把全部设备的位置/朝向/缩放写入数据库`:`运行模式只读`,onClick:He},c(e.$t(`townView.k1b3bk8t029`)),9,fn),o(z)&&o(z).state!==`idle`?(r(),g(`span`,{key:0,class:i([`save-chip`,`s-${o(z).state}`])},c(o(Pe)),3)):v(``,!0)],8,un),w(`div`,pn,[w(`span`,{class:i([`nav-chip mono`,{"nav-bell-warn":o(lf)>0}]),title:e.$t(`townView.k1fsi3ir002`)},`◉ `+c(o(lf)),11,mn),w(`span`,hn,c(o(ve))+` FPS`,1),w(`div`,{class:`avatar-chip`,title:e.$t(`townView.k1demf38003`)},[w(`div`,_n,c((o(Kd).user?.name??`OP`).slice(0,2).toUpperCase()),1),w(`span`,null,c(o(Kd).user?.name||e.$t(`townView.k1pub99m139`)),1)],8,gn)])]),w(`div`,vn,[w(`aside`,yn,[w(`section`,bn,[w(`div`,xn,[w(`h3`,null,c(e.$t(`townView.k1k75lzy030`)),1),w(`span`,Sn,c(o(et).length),1)]),k(a,{class:`lib-embed`})]),w(`section`,Cn,[w(`div`,wn,[w(`h3`,null,c(e.$t(`townView.k2gwyas031`)),1),w(`span`,Tn,c(o(X).length),1)]),w(`div`,En,[w(`button`,{class:i([`daq-ctl-btn`,{on:o(J).controller.running}]),title:o(J).controller.running?`暂停全部采集:停止所有启用节点的采样(节点级启停独立)`:`恢复全部采集:仅启用节点恢复采集(手动停用的保持停用)`,onClick:t[2]||=e=>o(J).controllerAction(o(J).controller.running?`pause`:`resume`)},c(o(J).controller.running?e.$t(`townView.k3w3j8f140`):e.$t(`townView.k3n93ed175`)),11,Dn),w(`label`,{class:`daq-ctl-cycle mono`,title:e.$t(`townView.khzlyf5004`)},[u(c(e.$t(`townView.k3xg3w032`))+` `,1),w(`input`,{type:`number`,min:`200`,max:`60000`,step:`100`,value:o(J).controller.defaultIntervalMs,onChange:t[3]||=e=>o(J).controllerAction(`config`,Number(e.target.value))},null,40,kn),t[53]||=u(`ms `,-1)],8,On)]),w(`div`,An,[(r(!0),g(l,null,n(o(ou),a=>(r(),g(`div`,{key:a.id,class:`daq-group`},[w(`div`,{class:i([`daq-card tpl`,{open:!!o(Xl)[`daq:${a.id}`]}]),role:`button`,tabindex:`0`,title:e.$t(`townView.k2tplxp0001`,{p0:a.name,p1:a.ch,p2:a.min,p3:a.max,p4:a.unit}),onClick:e=>Zl(`daq:${a.id}`),onKeydown:ae(j(e=>Zl(`daq:${a.id}`),[`prevent`]),[`enter`])},[t[54]||=w(`span`,{class:`daq-caret`},`▶`,-1),w(`span`,Mn,[(r(),g(`svg`,{class:`daq-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(a.icon)},null,8,Nn))]),w(`div`,Pn,[w(`span`,Fn,c(a.name),1),w(`span`,In,c(a.code),1)]),o(R)===`edit`?(r(),g(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:a.name}),onClick:j(e=>eu(a),[`stop`])},` + `,8,Ln)):v(``,!0),w(`span`,Rn,`×`+c(o(Ql).get(a.id)?.length??0),1)],42,jn),o(Xl)[`daq:${a.id}`]?(r(),g(`div`,zn,[(r(!0),g(l,null,n(o(Ql).get(a.id)??[],t=>(r(),g(`div`,{key:t.id,class:i([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:o(R)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>nu(e,t),onClick:e=>typeof t.posX==`number`&&Rt({id:t.id,posX:t.posX,posZ:t.posZ})},[w(`span`,{class:i([`node-dot`,iu(t)])},null,2),w(`div`,Vn,[w(`span`,Hn,c(t.name),1),w(`span`,Un,[w(`span`,Wn,c(t.value==null?`--`:`${t.value.toFixed(a.decimals)} ${a.unit}`),1),w(`span`,Gn,c(t.deviceBindingId?o(D).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(r(),g(`span`,Kn,`✓`)):v(``,!0)],42,Bn))),128)),o(Ql).get(a.id)?.length?v(``,!0):(r(),g(`div`,qn,c(e.$t(`townView.k2tplxp0003`)),1))])):v(``,!0)]))),128))])]),w(`section`,Jn,[w(`div`,Yn,[w(`h3`,null,c(e.$t(`townView.km7ayhi033`)),1),w(`span`,Xn,c(o(Y).nodes.length),1)]),w(`div`,Zn,[(r(!0),g(l,null,n(o(Yl),a=>(r(),g(`div`,{key:a.id,class:`daq-group`},[w(`div`,{class:i([`daq-card tpl`,{open:!!o(Xl)[`dcw:${a.id}`]}]),role:`button`,tabindex:`0`,title:e.$t(`townView.k2tplxp0001`,{p0:a.name,p1:a.ch,p2:a.min,p3:a.max,p4:a.unit}),onClick:e=>Zl(`dcw:${a.id}`),onKeydown:ae(j(e=>Zl(`dcw:${a.id}`),[`prevent`]),[`enter`])},[t[55]||=w(`span`,{class:`daq-caret`},`▶`,-1),w(`span`,$n,[(r(),g(`svg`,{class:`daq-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(a.icon)},null,8,er))]),w(`div`,tr,[w(`span`,nr,c(a.name),1),w(`span`,rr,c(a.code),1)]),o(R)===`edit`?(r(),g(`button`,{key:0,class:`daq-add`,title:e.$t(`townView.k2tplxp0002`,{p0:a.name}),onClick:j(e=>tu(a),[`stop`])},` + `,8,ir)):v(``,!0),w(`span`,ar,`×`+c(o($l).get(a.id)?.length??0),1)],42,Qn),o(Xl)[`dcw:${a.id}`]?(r(),g(`div`,or,[(r(!0),g(l,null,n(o($l).get(a.id)??[],t=>(r(),g(`div`,{key:t.id,class:i([`daq-node`,{placed:typeof t.posX==`number`}]),draggable:o(R)===`edit`,title:typeof t.posX==`number`?e.$t(`townView.k2tplxp0005`):e.$t(`townView.k2tplxp0006`),onDragstart:e=>ru(e,t),onClick:e=>typeof t.posX==`number`&&Rt({id:t.id,posX:t.posX,posZ:t.posZ})},[w(`span`,{class:i([`node-dot`,au(t)])},null,2),w(`div`,cr,[w(`span`,lr,c(t.name),1),w(`span`,ur,[w(`span`,dr,c(t.value==null?`--`:`${t.value.toFixed(a.decimals)} ${a.unit}`),1),w(`span`,fr,c(t.deviceBindingId?o(D).byId(t.deviceBindingId)?.name??e.$t(`townView.k3own4q148`):e.$t(`townView.k3own4q148`)),1)])]),typeof t.posX==`number`?(r(),g(`span`,pr,`✓`)):v(``,!0)],42,sr))),128)),o($l).get(a.id)?.length?v(``,!0):(r(),g(`div`,mr,c(e.$t(`townView.k2tplxp0003`)),1))])):v(``,!0)]))),128))])]),w(`section`,hr,[w(`div`,gr,[w(`h3`,null,c(e.$t(`townView.k1c9n911034`)),1),w(`span`,_r,c(o(vt).length),1)]),w(`div`,vr,[(r(!0),g(l,null,n(o(vt),t=>(r(),g(`div`,{key:t.channelId,class:i([`scene-row`,{active:t.placed}]),draggable:!t.placed&&o(R)===`edit`,"data-channel-id":t.channelId,title:t.placed?`已在场景中,点击定位`:`拖拽到场景放置`,onDragstart:e=>t.placed?void 0:St(e,t.channelId),onClick:e=>Ze(t)},[w(`span`,{class:`scene-ico`,style:s({"--ch":t.color})},null,4),w(`div`,br,[w(`span`,xr,c(t.name),1),w(`span`,Sr,c(t.agentCount)+` `+c(e.$t(`townView.k1brss7t128`))+` `+c(t.placed?e.$t(`townView.k3n94g3141`):e.$t(`townView.k3os7i3176`)),1)]),t.placed?(r(),g(`span`,Cr,`✓`)):(r(),g(`span`,wr,`+`))],42,yr))),128)),o(Xe)?(r(),g(`div`,Tr,c(o(Xe)),1)):v(``,!0)])])]),w(`main`,Er,[w(`div`,{ref_key:`stageRef`,ref:qd,class:`stage`},[w(`div`,{id:`town-host`,ref_key:`hostRef`,ref:pe,class:`town-host`},null,512),t[71]||=w(`div`,{class:`stage-vignette`},null,-1),w(`div`,Dr,[w(`div`,Or,[w(`h2`,null,c(e.$t(`townView.k1b0z4vr035`)),1),w(`span`,kr,`CH · `+c(o(je)||e.$t(`townView.k3lkuz3142`)),1)]),w(`div`,Ar,[w(`button`,{class:`vp-tool`,title:e.$t(`townView.k18d6wnb005`),onClick:Id},[...t[56]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`12`,cy:`12`,r:`7`}),w(`path`,{d:`M12 2v4M12 18v4M2 12h4M18 12h4`})],-1)]],8,jr),w(`button`,{class:i([`vp-tool`,{on:o(Pd)}]),title:e.$t(`townView.k1io51dn006`),onClick:Fd},[...t[57]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`12`,cy:`12`,r:`3.2`}),w(`path`,{d:`M20.5 9a10 10 0 0 1 .3 4.5M3.5 15a10 10 0 0 1-.3-4.5`})],-1)]],10,Mr),w(`button`,{class:i([`vp-tool`,{on:o(Md)}]),title:e.$t(`townView.k1sgjlq8007`),onClick:t[4]||=e=>Md.value=!o(Md)},[...t[58]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M4 8h12l4 4-4 4H4z`}),w(`circle`,{cx:`8.5`,cy:`12`,r:`1.4`})],-1)]],10,Nr),w(`button`,{class:`vp-tool`,title:e.$t(`townView.k3wuf0008`),onClick:Xd},[...t[59]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5`})],-1)]],8,Pr)])]),w(`div`,Fr,[w(`select`,{value:o(Jd),"aria-label":e.$t(`townView.k1k4j5i7009`),onChange:t[5]||=e=>Yd(e)},[w(`option`,Lr,c(e.$t(`townView.kv72860036`)),1),t[60]||=w(`option`,{value:`top`},` 俯视 · TOP `,-1),t[61]||=w(`option`,{value:`front`},` 前视 · FRONT `,-1),t[62]||=w(`option`,{value:`side`},` 侧视 · SIDE `,-1)],40,Ir)]),o(Md)?(r(),g(l,{key:0},[(r(),g(`svg`,Rr,[(r(!0),g(l,null,n(o(Hd),e=>T((r(),g(`g`,{key:`ld-${e.id}`,class:i({near:e.near})},[w(`path`,{d:`M ${e.x} ${e.y-8} L ${e.x} ${e.y-2}`,stroke:e.warn?`rgba(246,196,83,.8)`:`rgba(65,200,244,.55)`,"stroke-width":`1.3`,fill:`none`},null,8,zr),w(`circle`,{cx:e.x,cy:e.y,r:`2.6`,fill:e.warn?`#f6c453`:`#41c8f4`},null,8,Br)],2)),[[re,e.leader]])),128))])),w(`div`,Vr,[(r(!0),g(l,null,n(o(Hd),n=>(r(),g(`div`,{key:n.id,class:i([`callout`,{warn:n.warn,near:n.near}]),style:s({left:n.x+`px`,top:n.y+`px`}),title:e.$t(`townView.k1ejxiwp010`),onClick:e=>Nd(n.id)},[w(`div`,Ur,[t[63]||=w(`span`,{class:`co-dot`},null,-1),u(c(n.label),1)]),w(`div`,Wr,[u(c(n.value),1),w(`small`,null,c(n.unit),1)]),w(`div`,Gr,c(e.$t(`townView.k1faqmjb073`))+` `+c(n.lo.toFixed(Math.min(2,(String(n.lo).split(`.`)[1]??``).length+1)))+` – `+c(n.hi.toFixed(Math.min(2,(String(n.hi).split(`.`)[1]??``).length+1))),1)],14,Hr))),128))])],64)):v(``,!0),w(`div`,Kr,[w(`div`,qr,[t[64]||=w(`span`,{class:`kpi-ico c1`},[w(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M4 8.5 12 4l8 4.5v7L12 20l-8-4.5v-7Z`}),w(`path`,{d:`M4 8.5l8 4.5 8-4.5M12 13v7`})])],-1),w(`div`,Jr,[w(`div`,Yr,c(e.$t(`townView.k1k6xemt037`)),1),w(`div`,Xr,[u(c(o(Wd)),1),w(`small`,null,c(e.$t(`townView.k49lh038`)),1)])])]),w(`div`,Zr,[t[65]||=w(`span`,{class:`kpi-ico c2`},[w(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`m5 12.5 4.5 4.5L19 7.5`})])],-1),w(`div`,Qr,[w(`div`,$r,c(e.$t(`townView.k1l1a9t2039`)),1),w(`div`,ei,[u(c(o(Gd)),1),w(`small`,null,c(e.$t(`townView.k49lh038`)),1)])])]),w(`div`,ti,[t[66]||=w(`span`,{class:`kpi-ico c3`},[w(`svg`,{class:`kpi-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M12 3 22 20H2L12 3Z`}),w(`path`,{d:`M12 10v4M12 17v.2`})])],-1),w(`div`,ni,[w(`div`,ri,c(e.$t(`townView.k1fsi3ir002`)),1),w(`div`,ii,[u(c(o(lf)),1),w(`small`,null,c(e.$t(`townView.k4dfq040`)),1)])])]),w(`div`,ai,[t[67]||=A(`<span class="kpi-ico c4" data-v-771c2c29><svg class="kpi-svg" viewBox="0 0 24 24" data-v-771c2c29><path d="M9.5 14.5 14.5 9.5" data-v-771c2c29></path><path d="M11 6.5 12.8 4.7a4 4 0 0 1 5.6 5.6L16.5 12" data-v-771c2c29></path><path d="m13 17.5-1.8 1.8a4 4 0 0 1-5.6-5.6L7.5 12" data-v-771c2c29></path></svg></span>`,1),w(`div`,oi,[w(`div`,si,c(e.$t(`townView.k1emsai1041`)),1),w(`div`,ci,[u(c(o(X).length),1),w(`small`,null,c(e.$t(`townView.k4l1w042`)),1)])])]),w(`div`,li,[t[69]||=A(`<span class="kpi-ico c5" data-v-771c2c29><svg class="kpi-svg" viewBox="0 0 24 24" data-v-771c2c29><path d="M5 19a9 9 0 1 1 14 0" data-v-771c2c29></path><path d="M12 13l3.5-3.5" data-v-771c2c29></path><circle cx="12" cy="13" r="1.4" data-v-771c2c29></circle></svg></span>`,1),w(`div`,ui,[w(`div`,di,c(e.$t(`townView.kbrxdq1043`)),1),w(`div`,fi,[u(c(o(ef)),1),t[68]||=w(`small`,null,`%`,-1)])])])]),o(Kl)?(r(),g(`div`,pi,[w(`b`,null,c(e.$t(`townView.k3rwxjc044`)),1),w(`span`,null,c(e.$t(`townView.k1sa1eaj045`)),1)])):v(``,!0),o(B)&&o(V)?(r(),g(`div`,{key:2,class:`boundary-panel drag-panel`,style:s(o(zt).boundary?{left:o(zt).boundary.x+`px`,top:o(zt).boundary.y+`px`,bottom:`auto`,transform:`none`}:void 0)},[w(`div`,{class:`bp-title drag-grip`,title:e.$t(`townView.k1d0rl5z011`),onPointerdown:t[8]||=e=>Ut(e,`boundary`)},[w(`span`,hi,c(o(y).channels[o(B)]?.name??o(B).slice(0,8)),1),w(`span`,gi,c(e.$t(`townView.k1mehlxs046`)),1),w(`div`,_i,[w(`button`,{class:i([`bp-tab`,{on:o(pt)===`boundary`}]),onClick:t[6]||=e=>gt(`boundary`)},c(e.$t(`townView.k489ka047`)),3),w(`button`,{class:i([`bp-tab`,{on:o(pt)===`members`}]),onClick:t[7]||=e=>gt(`members`)},c(e.$t(`townView.k3ztf1129`))+` `+c(o(mt).length),3)])],40,mi),o(pt)===`boundary`?(r(),g(l,{key:0},[w(`div`,vi,[w(`span`,yi,c(e.$t(`townView.k3zhy5048`)),1),w(`div`,bi,[w(`button`,{class:i([`seg-btn`,{on:o(V).shape===`ellipse`}]),onClick:t[9]||=e=>{o(V).shape=`ellipse`,Ye()}},c(e.$t(`townView.k414bc049`)),3),w(`button`,{class:i([`seg-btn`,{on:o(V).shape===`rect`}]),onClick:t[10]||=e=>{o(V).shape=`rect`,Ye()}},c(e.$t(`townView.k43u0g050`)),3)])]),w(`div`,xi,[w(`span`,Si,c(e.$t(`townView.k1fbz4s1051`)),1),T(w(`input`,{"onUpdate:modelValue":t[11]||=e=>o(V).radiusX=e,class:`bp-range`,type:`range`,min:`80`,max:`4000`,step:`8`,style:s({"--fill":wf(o(V).radiusX,80,4e3)}),onChange:Ye},null,36),[[N,o(V).radiusX,void 0,{number:!0}]]),w(`span`,Ci,c(Math.round(o(V).radiusX)),1)]),w(`div`,wi,[w(`span`,Ti,c(e.$t(`townView.k1ighwgs052`)),1),T(w(`input`,{"onUpdate:modelValue":t[12]||=e=>o(V).radiusZ=e,class:`bp-range`,type:`range`,min:`60`,max:`4000`,step:`8`,style:s({"--fill":wf(o(V).radiusZ,60,4e3)}),onChange:Ye},null,36),[[N,o(V).radiusZ,void 0,{number:!0}]]),w(`span`,Ei,c(Math.round(o(V).radiusZ)),1)]),w(`div`,Di,[w(`span`,Oi,c(e.$t(`townView.k40qab053`)),1),T(w(`input`,{"onUpdate:modelValue":t[13]||=e=>o(V).rotationY=e,class:`bp-range`,type:`range`,min:`0`,max:`360`,step:`5`,style:s({"--fill":wf(o(V).rotationY??0,0,360)}),onChange:Ye},null,36),[[N,o(V).rotationY,void 0,{number:!0}]]),w(`span`,ki,c(Math.round(o(V).rotationY??0))+`°`,1)])],64)):(r(),g(l,{key:1},[w(`div`,Ai,c(e.$t(`townView.kimxls2054`)),1),w(`div`,ji,[(r(!0),g(l,null,n(o(mt),e=>(r(),g(`div`,{key:e.agentId,class:`member-row`},[w(`span`,{class:`member-ava`,style:s({color:xt(o(B))})},c(e.name.charAt(0).toUpperCase()),5),w(`div`,Mi,[w(`span`,Ni,c(e.name),1),w(`span`,{class:i([`member-role`,e.role===`lead`?`r-lead`:`r-worker`])},c(e.role===`lead`?`Leader`:`Worker`),3)]),w(`select`,{class:`member-select`,value:(e.modelRef??``)||`hero-3d`,onChange:t=>ht(e.agentId,t.target.value)},[(r(!0),g(l,null,n(o($e),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Fi))),128))],40,Pi)]))),128)),o(mt).length===0?(r(),g(`div`,Ii,c(e.$t(`townView.k419rbs055`)),1)):v(``,!0)])],64)),w(`div`,Li,[o(pt)===`boundary`?(r(),g(`button`,{key:0,class:`bp-btn save`,onClick:qe},c(e.$t(`townView.k1b3kp8f056`)),1)):v(``,!0),w(`button`,{class:`bp-btn danger`,onClick:Je},c(e.$t(`townView.k1hs45qg057`)),1),w(`button`,{class:`bp-btn`,onClick:t[14]||=e=>Ke(null)},c(e.$t(`townView.k3x62t058`)),1)])],4)):v(``,!0),o(qt)?(r(),g(`div`,Ri,c(o(qt)),1)):v(``,!0),o(L)?(r(),g(`div`,zi,c(o(L)),1)):v(``,!0),o(ge)?v(``,!0):(r(),g(`div`,Bi,[t[70]||=w(`div`,{class:`loading-spinner`},null,-1),w(`span`,Vi,c(e.$t(`townView.kvjdqfg059`)),1)]))],512),w(`div`,Hi,[w(`section`,Ui,[w(`div`,Wi,[w(`h3`,null,c(e.$t(`townView.k1c9iq23060`)),1),w(`span`,Gi,c(o(R)===`edit`?e.$t(`townView.k1iipfcs143`):e.$t(`townView.k1l147w1177`)),1)]),w(`p`,Ki,c(e.$t(`townView.secRender`)),1),w(`div`,qi,[w(`span`,{class:`ctl-name`,title:e.$t(`townView.qualityTip`)},c(e.$t(`townView.qualityLabel`)),9,Ji),w(`div`,Yi,[(r(),g(l,null,n(_f,t=>w(`button`,{key:t.v,class:i({on:o(gf)===t.v}),onClick:e=>vf(t.v)},c(e.$t(t.label)),11,Xi)),64))]),t[72]||=w(`span`,{class:`ctl-val`},null,-1)]),w(`div`,Zi,[w(`span`,{class:`ctl-name`,title:e.$t(`townView.fpsCapTip`)},c(e.$t(`townView.fpsCapLabel`)),9,Qi),w(`div`,$i,[(r(),g(l,null,n(mf,e=>w(`button`,{key:e.v,class:i({on:o(pf)===e.v}),onClick:t=>hf(e.v)},c(e.label),11,ea)),64))]),t[73]||=w(`span`,{class:`ctl-val`},null,-1)]),w(`p`,ta,c(e.$t(`townView.secEnv`)),1),w(`div`,na,[w(`span`,ra,c(e.$t(`townView.k1gizopz061`)),1),w(`input`,{class:`ctl-range`,type:`range`,min:`30`,max:`220`,value:Math.round(o(Sf)*100),style:s({"--fill":wf(Math.round(o(Sf)*100),30,220)}),onInput:t[15]||=e=>Tf(e)},null,44,ia),w(`span`,aa,c(Math.round(o(Sf)*100))+`%`,1)]),w(`div`,oa,[w(`span`,sa,c(e.$t(`townView.k1bcpqto062`)),1),w(`input`,{class:`ctl-range`,type:`range`,min:`10`,max:`100`,value:Math.round(o(Cf)*100),style:s({"--fill":wf(Math.round(o(Cf)*100),10,100)}),onInput:t[16]||=e=>Ef(e)},null,44,ca),w(`span`,la,c(Math.round(o(Cf)*100))+`%`,1)]),w(`div`,ua,[w(`span`,da,c(e.$t(`townView.k1bztha1063`)),1),w(`input`,{class:`ctl-range`,type:`range`,min:`60`,max:`120`,value:o(ff),style:s({"--fill":wf(o(ff),60,120)}),onInput:t[17]||=e=>ff.value=Number(e.target.value)},null,44,fa),w(`span`,pa,c(o(ff))+`%`,1)]),w(`div`,ma,[w(`span`,{class:`ctl-name`,title:e.$t(`townView.kz71l1f012`)},c(e.$t(`townView.ka4i1s9064`)),9,ha),w(`input`,{class:`ctl-range`,type:`range`,min:`0`,max:`3000`,step:`50`,value:o(Rd),style:s({"--fill":wf(o(Rd),0,3e3)}),onInput:t[18]||=e=>Rd.value=Number(e.target.value)},null,44,ga),w(`span`,_a,c(o(Rd)===0?e.$t(`townView.k493s144`):`${o(Rd)}`),1)]),w(`p`,va,c(e.$t(`townView.secOps`)),1),w(`div`,ya,[w(`span`,ba,c(e.$t(`townView.k1idc6pa065`)),1),w(`button`,{class:i([`snap-toggle`,{on:o(Ne)}]),onClick:ze},c(o(Ne)?e.$t(`townView.k4bs5145`):e.$t(`townView.k493s144`)),3),t[74]||=w(`span`,{class:`ctl-val`},null,-1)]),w(`div`,xa,[w(`button`,{class:`btn btn-primary`,onClick:Df},c(e.$t(`townView.k1lap9bs024`)),1),w(`button`,{class:`btn btn-ghost`,disabled:o(R)!==`edit`,title:o(R)===`edit`?e.$t(`townView.ksavetip181`):e.$t(`townView.krotip182`),onClick:He},c(e.$t(`townView.k1b3bk8t029`)),9,Sa),w(`button`,{class:i([`btn btn-danger`,{armed:o(bf)}]),onClick:xf},c(e.$t(`townView.k1i046wf066`)),3)])]),w(`section`,Ca,[w(`div`,wa,[w(`h3`,null,c(e.$t(`townView.k1kfoef9067`)),1),w(`span`,Ta,c(o(X).length),1),w(`div`,{class:i([`trend-legend`,{expanded:o(Pf)}])},[(r(!0),g(l,null,n(o(If),e=>(r(),g(`button`,{key:e.id,class:i([`lg-chip`,{off:!Nf(e.id)}]),onClick:t=>Of(e.id)},[w(`span`,{class:`lg-dot`,style:s({background:Mf(e.id)})},null,4),u(c(e.name),1)],10,Ea))),128)),o(Ff)>0?(r(),g(`button`,{key:0,class:`lg-chip lg-more mono`,title:o(Pf)?e.$t(`townView.trendCollapse`):e.$t(`townView.trendExpandAll`,{p0:o(X).length}),onClick:t[19]||=e=>Pf.value=!o(Pf)},c(o(Pf)?e.$t(`townView.trendCollapse`):`+${o(Ff)}`),9,Da)):v(``,!0)],2)]),w(`div`,Oa,[w(`canvas`,{ref_key:`trendCanvas`,ref:kf,class:`trend-cv`},null,512),o(X).length?v(``,!0):(r(),g(`span`,ka,c(e.$t(`townView.k1uht2uv068`)),1))])])])]),w(`aside`,Aa,[k(ie,{name:`ins`},{default:ee(()=>[o(I)?(r(),g(`section`,ja,[w(`div`,Ma,[w(`h3`,null,c(o(I).kind===`device`?o(bd)?e.$t(`townView.k1ekqxlt146`):o(td)?e.$t(`townView.k1empnnb178`):e.$t(`townView.k1k6wg8j185`):o(Xt)),1),w(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bsckft013`),onClick:Ge},` ✕ `,8,Na)]),w(`div`,Pa,[w(`span`,Fa,c(o(I).id.slice(0,8)),1),o(I).kind===`device`&&o(td)?(r(),g(`span`,Ia,`DAQ`)):o(I).kind===`device`&&o(bd)?(r(),g(`span`,La,`DCW`)):v(``,!0)]),o(I).kind===`device`?(r(),g(l,{key:0},[o(bd)?(r(),g(`div`,Ra,[w(`div`,za,[w(`span`,null,c(e.$t(`townView.k1deqh0d069`)),1),w(`b`,Ba,c(o(Z)?.value==null?`--`:o(Z).value.toFixed(o(Z).decimals))+` `+c(o(Z)?.unit),1)]),w(`div`,Va,[w(`span`,null,c(o(xd)?.src===`recipe`?e.$t(`townView.kq2jssk147`):e.$t(`townView.k1iwj796179`)),1),w(`b`,{class:i({amber:o(xd)?.src===`recipe`})},c(Dd(o(Z))),3)]),w(`div`,Ha,[w(`span`,null,c(e.$t(`townView.k1i8rtqt070`)),1),w(`b`,null,c(o(Sd)||e.$t(`townView.k3own4q148`)),1)]),w(`div`,Ua,[T(w(`input`,{"onUpdate:modelValue":t[20]||=e=>o(fd)[o(I).id]=e,type:`number`,class:`bind-select`,step:10**-(o(Z)?.decimals??2),placeholder:Od(o(Z)),onKeydown:ae(Ed,[`enter`])},null,40,Wa),[[N,o(fd)[o(I).id],void 0,{number:!0}]]),w(`button`,{class:`bind-add-btn`,disabled:o(fd)[o(I).id]==null||o(fd)[o(I).id]===``,onClick:Ed},c(e.$t(`townView.kwrbtn180`)),9,Ga)]),o(pd)[o(I).id]?(r(),g(`p`,Ka,c(o(pd)[o(I).id]),1)):v(``,!0),o(R)===`edit`?(r(),g(`div`,qa,[T(w(`select`,{"onUpdate:modelValue":t[21]||=e=>b(Cd)?Cd.value=e:null,class:`bind-select`},[w(`option`,Ja,c(e.$t(`townView.kjo6ekr071`)),1),(r(!0),g(l,null,n(o(D).twins.filter(e=>!uu(e)&&e.id!==(o(I)?.id??``)),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Ya))),128))],512),[[M,o(Cd)]]),w(`button`,{class:`bind-add-btn`,disabled:!o(Sd)&&!o(Cd),onClick:t[22]||=e=>o(Sd)?Td():wd()},c(o(Sd)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,Xa)])):v(``,!0)])):o(td)?(r(),g(`div`,Za,[w(`div`,Qa,[w(`span`,null,c(e.$t(`townView.k3mv305072`)),1),w(`b`,$a,c(o(rd)?yu(o(rd)):`--`)+` `+c(o(rd)?.tpl.unit),1)]),w(`div`,eo,[w(`span`,null,c(e.$t(`townView.k1faqmjb073`)),1),w(`b`,null,c(o(rd)?.tpl.min)+` ~ `+c(o(rd)?.tpl.max),1)]),w(`div`,to,[w(`span`,null,c(e.$t(`townView.k1i8rtqt070`)),1),w(`b`,null,c(o(od)||e.$t(`townView.k3own4q148`)),1)]),o(R)===`edit`?(r(),g(`div`,no,[T(w(`select`,{"onUpdate:modelValue":t[23]||=e=>b(id)?id.value=e:null,class:`bind-select`},[w(`option`,ro,c(e.$t(`townView.kjo6ekr071`)),1),(r(!0),g(l,null,n(o(D).twins.filter(e=>!uu(e)&&e.id!==(o(I)?.id??``)),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,io))),128))],512),[[M,o(id)]]),w(`button`,{class:`bind-add-btn`,disabled:!o(od)&&!o(id),onClick:t[24]||=e=>{o(od)?Vu(o(I).id):Bu(o(I).id,o(id)),id.value=``}},c(o(od)?e.$t(`townView.k479eh149`):e.$t(`townView.k452a8102`)),9,ao)])):v(``,!0),o(R)===`edit`&&o(Q)?(r(),g(`div`,oo,[w(`div`,so,[w(`span`,null,c(e.$t(`townView.k1l6g2ga074`)),1),w(`span`,co,[T(w(`input`,{"onUpdate:modelValue":t[25]||=e=>b(kd)?kd.value=e:null,type:`number`,min:`200`,max:`60000`,step:`100`,class:`daq-num`,onChange:Ad},null,544),[[N,o(kd),void 0,{number:!0}]]),w(`small`,null,c(e.$t(`townView.k1or92b075`)),1)])]),w(`div`,lo,[w(`span`,null,c(e.$t(`townView.k3x5tpx076`)),1),w(`span`,uo,[w(`input`,{value:o(Q).warnLow,type:`number`,step:`any`,class:`daq-num`,onChange:t[26]||=e=>jd(`warnLow`,e.target.value)},null,40,fo),t[75]||=u(` ~ `,-1),w(`input`,{value:o(Q).warnHigh,type:`number`,step:`any`,class:`daq-num`,onChange:t[27]||=e=>jd(`warnHigh`,e.target.value)},null,40,po)])]),w(`div`,mo,[w(`span`,null,c(e.$t(`townView.k1hjj0jf077`)),1),w(`span`,ho,[w(`input`,{value:o(Q).min,type:`number`,step:`any`,class:`daq-num`,onChange:t[28]||=e=>jd(`min`,e.target.value)},null,40,go),t[76]||=u(` ~ `,-1),w(`input`,{value:o(Q).max,type:`number`,step:`any`,class:`daq-num`,onChange:t[29]||=e=>jd(`max`,e.target.value)},null,40,_o)])]),w(`div`,vo,[w(`span`,null,c(e.$t(`townView.k48tki078`)),1),w(`button`,{class:i([`bind-add-btn`,{warn:o(Q).enabled}]),onClick:t[30]||=e=>o(J).patchNode(o(I).id,{enabled:!o(Q).enabled})},c(o(Q).enabled?e.$t(`townView.k1wv0nyo150`):e.$t(`townView.kh1586b180`)),3)]),w(`div`,yo,[w(`span`,null,c(e.$t(`townView.k3xakp079`)),1),w(`button`,{class:`bind-add-btn danger`,title:e.$t(`townView.kpwutri014`),onClick:t[31]||=e=>ft()},c(e.$t(`townView.k1bpp30k080`)),9,bo)])])):(r(),g(`div`,xo,c(e.$t(`townView.kzk5dfx081`)),1))])):(r(),g(l,{key:2},[w(`div`,So,[w(`span`,Co,c(e.$t(`townView.k3xhia082`)),1),T(w(`input`,{"onUpdate:modelValue":t[32]||=e=>b(nt)?nt.value=e:null,class:`obj-input`,placeholder:e.$t(`townView.k1k6vbaf015`),disabled:o(R)!==`edit`,title:o(R)===`edit`?`设备名称`:`运行模式只读`,onChange:ct,onKeydown:ae(ct,[`enter`])},null,40,wo),[[N,o(nt)]])]),w(`div`,To,[w(`span`,Eo,c(e.$t(`townView.k41amp083`)),1),w(`select`,{class:`obj-select`,value:o(F)?.getDeviceModelRef?.(o(I).id)??``,disabled:o(R)!==`edit`,onChange:t[33]||=e=>ut(e.target.value)},[(r(!0),g(l,null,n(o(et),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Oo))),128))],40,Do)]),w(`div`,ko,c(e.$t(`townView.k1vtyk05130`))+` `+c(o(ad).length)+` `+c(e.$t(`townView.k3vfpz5138`)),1),(r(!0),g(l,null,n(o(ad),t=>(r(),g(`div`,{key:t.daqId,class:`bind-row`},[w(`span`,Ao,[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.icon)},null,8,jo))]),w(`span`,Mo,[w(`span`,No,c(t.ch),1),w(`span`,Po,[w(`b`,null,c(t.value),1),u(` `+c(t.unit)+` · `+c(t.name),1)])]),w(`canvas`,{ref_for:!0,ref:e=>$u(t.daqId,e),class:`bind-spark`,width:`56`,height:`20`},null,512),o(R)===`edit`?(r(),g(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Vu(t.daqId)},` ✕ `,8,Fo)):v(``,!0)]))),128)),o(ad).length?v(``,!0):(r(),g(`div`,Io,c(e.$t(`townView.kgpuqhb084`)),1)),o(R)===`edit`?(r(),g(`div`,Lo,[w(`button`,{class:`bind-add`,onClick:t[34]||=e=>Ju(`daq`,e)},c(e.$t(`townView.kvm0lin085`)),1),o(Gu)?(r(),g(`div`,{key:0,class:`bind-pop`,style:s({maxHeight:`${o(qu)}px`})},[(r(!0),g(l,null,n(o(ou),t=>(r(),g(l,{key:t.id},[o(Yu)[t.id]?.length?(r(),g(`div`,Ro,[w(`span`,zo,c(t.name)+` · `+c(t.ch),1),(r(!0),g(l,null,n(o(Yu)[t.id],t=>(r(),g(`button`,{key:t.id,"data-node-id":t.id,title:t.devName?e.$t(`townView.k2bindr0007`,{p0:t.devName}):e.$t(`townView.k2bindr0008`),onClick:e=>Zu(t.id)},[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.tpl.icon)},null,8,Vo)),w(`span`,null,[u(c(t.name),1),t.devName?(r(),g(`i`,Ho,`→ `+c(t.devName),1)):t.placed?v(``,!0):(r(),g(`i`,Uo,c(e.$t(`townView.k2bindr0009`)),1))])],8,Bo))),128))])):v(``,!0)],64))),128)),o(Xu)?v(``,!0):(r(),g(`div`,Wo,c(e.$t(`townView.k2bindr0010`)),1))],4)):v(``,!0)])):v(``,!0),w(`div`,Go,c(e.$t(`townView.ktzir2t131`))+` `+c(o(ld).length)+` `+c(e.$t(`townView.k4l1w042`)),1),(r(!0),g(l,null,n(o(ld),t=>(r(),g(`div`,{key:t.dcwId,class:`dcw-row`},[w(`div`,Ko,[w(`span`,qo,[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.icon)},null,8,Jo))]),w(`span`,Yo,[w(`span`,Xo,[u(c(t.ch),1),t.rMin!=null||t.rMax!=null?(r(),g(`i`,Zo,c(e.$t(`townView.k48grv086`)),1)):v(``,!0)]),w(`span`,Qo,c(t.name),1)]),w(`span`,$o,[w(`b`,null,c(t.value==null?`--`:t.value.toFixed(t.decimals)),1),w(`i`,null,c(t.unit),1)]),o(R)===`edit`?(r(),g(`button`,{key:0,class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>yd(t.dcwId)},` ✕ `,8,es)):v(``,!0)]),w(`div`,{class:i([`dcw-win`,{recipe:t.rMin!=null||t.rMax!=null}])},[w(`em`,null,c(t.rMin!=null||t.rMax!=null?e.$t(`townView.k1l3m0hx151`):e.$t(`townView.k1bc6rqf181`)),1),w(`span`,ts,c(t.rMin??`-∞`),1),w(`span`,ns,[w(`i`,{style:s({left:`${dd(t)}%`})},null,4)]),w(`span`,rs,c(t.rMax??`+∞`),1)],2),w(`div`,is,[T(w(`input`,{"onUpdate:modelValue":e=>o(fd)[t.dcwId]=e,type:`number`,step:10**-t.decimals,placeholder:`${t.rMin??t.gMin} ~ ${t.rMax??t.gMax}`,onKeydown:ae(e=>md(o(Y).nodeById(t.dcwId)),[`enter`])},null,40,as),[[N,o(fd)[t.dcwId],void 0,{number:!0}]]),w(`button`,{class:`dcw-send`,disabled:o(fd)[t.dcwId]==null||o(fd)[t.dcwId]===``,title:e.$t(`townView.k15t7izc017`),onClick:e=>md(o(Y).nodeById(t.dcwId))},` write `,8,os)]),o(pd)[t.dcwId]?(r(),g(`small`,ss,c(o(pd)[t.dcwId]),1)):v(``,!0)]))),128)),o(ld).length?v(``,!0):(r(),g(`div`,cs,c(e.$t(`townView.k10smf24087`)),1)),o(R)===`edit`?(r(),g(`div`,ls,[w(`button`,{class:`bind-add`,onClick:t[35]||=e=>Ju(`dcw`,e)},c(e.$t(`townView.kvk1vh5088`)),1),o(Ku)?(r(),g(`div`,{key:0,class:`bind-pop`,style:s({maxHeight:`${o(qu)}px`})},[(r(!0),g(l,null,n(o(Yl),t=>(r(),g(l,{key:t.id},[o(gd)[t.id]?.length?(r(),g(`div`,us,[w(`span`,ds,c(t.name)+` · `+c(t.ch),1),(r(!0),g(l,null,n(o(gd)[t.id],t=>(r(),g(`button`,{key:t.id,"data-node-id":t.id,title:t.devName?e.$t(`townView.k2bindr0007`,{p0:t.devName}):e.$t(`townView.k2bindr0008`),onClick:e=>vd(t.id)},[(r(),g(`svg`,{class:`bind-svg`,viewBox:`0 0 24 24`,innerHTML:Uu(t.tpl.icon)},null,8,ps)),w(`span`,null,[u(c(t.name),1),t.devName?(r(),g(`i`,ms,`→ `+c(t.devName),1)):t.placed?v(``,!0):(r(),g(`i`,hs,c(e.$t(`townView.k2bindr0009`)),1))])],8,fs))),128))])):v(``,!0)],64))),128)),o(_d)?v(``,!0):(r(),g(`div`,gs,c(e.$t(`townView.k2bindr0010`)),1))],4)):v(``,!0)])):v(``,!0),o(R)===`edit`?(r(),g(l,{key:4},[t[79]||=w(`div`,{class:`sect-hd`},` 变换 · BLENDER `,-1),w(`div`,_s,[w(`button`,{class:i([`seg-btn`,{on:o(Ie)===`translate`}]),onClick:t[36]||=e=>Le(`translate`)},c(e.$t(`townView.k1hg3167089`)),3),w(`button`,{class:i([`seg-btn`,{on:o(Ie)===`rotate`}]),onClick:t[37]||=e=>Le(`rotate`)},c(e.$t(`townView.k1enlg7i090`)),3),w(`button`,{class:i([`seg-btn`,{on:o(Ie)===`scale`}]),onClick:t[38]||=e=>Le(`scale`)},c(e.$t(`townView.k1ibjg3j091`)),3)]),w(`div`,vs,[t[77]||=w(`span`,{class:`scale-min`},`0.2×`,-1),w(`input`,{class:`scale-range`,type:`range`,min:`0.2`,max:`5`,step:`0.05`,value:o(I).scale,onInput:t[39]||=e=>Ue(Number(e.target.value)),onChange:t[40]||=e=>We(Number(e.target.value))},null,40,ys),t[78]||=w(`span`,{class:`scale-max`},`5×`,-1)]),w(`div`,bs,c(Math.round(o(I).scale*100))+`% `,1),w(`div`,xs,[w(`button`,{class:i([`btn btn-danger ins-del`,{armed:o(dt)===o(I).id}]),onClick:ft},c(o(dt)===o(I).id?e.$t(`townView.k1w10xa5152`):e.$t(`townView.k121kfef182`)),3)])],64)):(r(),g(`div`,Ss,c(e.$t(`townView.kt0i3y2092`)),1))],64))],64)):o(I).kind===`agent`?(r(),g(l,{key:1},[w(`div`,Cs,[w(`span`,{class:`chat-badge`,style:s({"--p-acc":o(zl)})},c(o(Yt).slice(0,1).toUpperCase()),5),w(`div`,ws,[w(`span`,Ts,c(o(Yt)),1),w(`span`,Es,[w(`span`,{class:i([`chat-role`,o(K)?.role===`lead`?`r-lead`:`r-worker`])},c(o(Zt)),3),w(`span`,{class:i([`chat-state`,`s-${o(K)?.state??`idle`}`])},c(o(Qt)),3),o(K)?.harness?(r(),g(`span`,Ds,c(o(K).harness.toUpperCase()),1)):v(``,!0),w(`span`,Os,c(o(q).length+o(Jt).length)+` `+c(e.$t(`townView.k4dfq040`)),1)])])]),w(`div`,ks,[w(`span`,As,c(e.$t(`townView.k41amp083`)),1),w(`select`,{class:`obj-select`,value:(o(F)?.getAgentModel?.(o(I).id)??``)||`hero-3d`,disabled:o(R)!==`edit`,onChange:t[41]||=e=>lt(e.target.value)},[(r(!0),g(l,null,n(o($e),e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Ms))),128))],40,js)]),t[83]||=w(`div`,{class:`obj-sep`},null,-1),w(`div`,Ns,[w(`span`,Ps,c(e.$t(`townView.k1fix3hb093`)),1),w(`span`,Fs,c(o(rt)),1),o(R)===`edit`?(r(),g(`button`,{key:0,class:i([`obj-mini`,{on:o(U)}]),title:e.$t(`townView.k13enoy3018`),onClick:it},c(o(U)?e.$t(`townView.k3slzhc153`):e.$t(`townView.k1f1xmci183`)),11,Is)):v(``,!0)]),t[84]||=w(`div`,{class:`obj-sep`},null,-1),w(`div`,Ls,c(e.$t(`townView.k1p7nru2094`)),1),(r(!0),g(l,null,n(o(wu),t=>(r(),g(`div`,{key:t.id,class:`bind-row`},[w(`span`,{class:i([`ins-chip`,t.kind===`dcw`?`accent`:``]),style:{flex:`none`}},c(t.kind===`dcw`?e.$t(`townView.k40ifw097`):e.$t(`townView.k40rjw098`)),3),w(`span`,Rs,[w(`span`,zs,c(Lu(t)),1),w(`select`,{class:`bind-select`,style:{"margin-top":`3px`},value:t.mode,title:e.$t(`townView.khqvwix019`),onChange:e=>Fu(t.id,e.target.value)},[w(`option`,Vs,c(e.$t(`townView.k1io1ylm095`)),1),w(`option`,Hs,c(e.$t(`townView.k1duyr8q096`)),1)],40,Bs)]),w(`button`,{class:`bind-x`,title:e.$t(`townView.k1k73omv016`),onClick:e=>Pu(t.id)},` ✕ `,8,Us)]))),128)),o(wu).length?v(``,!0):(r(),g(`div`,Ws,` 未绑定工业节点 —— 绑定后 Agent 可用 dcw_control / daq_query 工具 `)),o(R)===`edit`?(r(),g(`div`,Gs,[T(w(`select`,{"onUpdate:modelValue":t[42]||=e=>b(Tu)?Tu.value=e:null,class:`bind-select`,style:{flex:`none`,width:`62px`}},[w(`option`,Ks,c(e.$t(`townView.k40ifw097`)),1),w(`option`,qs,c(e.$t(`townView.k40rjw098`)),1)],512),[[M,o(Tu)]]),T(w(`select`,{"onUpdate:modelValue":t[43]||=e=>b(Eu)?Eu.value=e:null,class:`bind-select`},[w(`option`,Js,c(e.$t(`townView.kurjldk099`)),1),o(Tu)===`dcw`?(r(!0),g(l,{key:0},n(o(Y).nodes,e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Ys))),128)):(r(!0),g(l,{key:1},n(o(J).nodes,e=>(r(),g(`option`,{key:e.id,value:e.id},c(e.name),9,Xs))),128))],512),[[M,o(Eu)]]),T(w(`select`,{"onUpdate:modelValue":t[44]||=e=>b(Du)?Du.value=e:null,class:`bind-select`,style:{flex:`none`,width:`76px`}},[w(`option`,Zs,c(e.$t(`townView.k45kpj100`)),1),w(`option`,Qs,c(e.$t(`townView.k3zul4101`)),1)],512),[[M,o(Du)]]),w(`button`,{class:`bind-add-btn`,disabled:!o(Eu),onClick:Nu},c(e.$t(`townView.k452a8102`)),9,$s)])):v(``,!0),o(Ou).length?(r(),g(l,{key:2},[w(`div`,ec,c(e.$t(`townView.k1gk2jg7132`))+` `+c(o(Ou).length),1),(r(!0),g(l,null,n(o(Ou),t=>(r(),g(`div`,{key:t.id,class:`approval-card`},[w(`div`,tc,c(t.detail),1),w(`div`,{class:i([`approval-ttl`,{urgent:Su(t)<=30}])},` ⏱ `+c(Su(t))+`s `+c(e.$t(`townView.hitlAutoReject`)),3),T(w(`input`,{"onUpdate:modelValue":e=>o(ku)[t.id]=e,class:`dcw-write input-inline`,style:{width:`100%`,"margin-top":`5px`},placeholder:e.$t(`townView.keztqrn020`)},null,8,nc),[[N,o(ku)[t.id]]]),w(`div`,rc,[w(`button`,{class:`bind-add-btn`,onClick:e=>Iu(t.id,!0)},c(e.$t(`townView.kslcozu103`)),9,ic),w(`button`,{class:`bind-add-btn danger`,onClick:e=>Iu(t.id,!1)},c(e.$t(`townView.k14gu3rd104`)),9,ac)])]))),128))],64)):v(``,!0),o(H)&&o(R)===`edit`?(r(),g(l,{key:3},[w(`div`,oc,[w(`span`,sc,c(e.$t(`townView.k3zhy5048`)),1),w(`div`,cc,[w(`button`,{class:i([`seg-btn`,{on:o(H).shape===`ellipse`}]),onClick:t[45]||=e=>{o(H).shape=`ellipse`,at()}},c(e.$t(`townView.k414bc049`)),3),w(`button`,{class:i([`seg-btn`,{on:o(H).shape===`rect`}]),onClick:t[46]||=e=>{o(H).shape=`rect`,at()}},c(e.$t(`townView.k43u0g050`)),3)])]),w(`div`,lc,[w(`span`,uc,c(e.$t(`townView.k41lwj105`)),1),T(w(`input`,{"onUpdate:modelValue":t[47]||=e=>o(H).radiusX=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:at,onChange:ot},null,544),[[N,o(H).radiusX,void 0,{number:!0}]]),w(`span`,dc,c(Math.round(o(H).radiusX)),1)]),w(`div`,fc,[w(`span`,pc,c(e.$t(`townView.k45bta106`)),1),T(w(`input`,{"onUpdate:modelValue":t[48]||=e=>o(H).radiusZ=e,class:`obj-range`,type:`range`,min:`40`,max:`4000`,step:`8`,onInput:at,onChange:ot},null,544),[[N,o(H).radiusZ,void 0,{number:!0}]]),w(`span`,mc,c(Math.round(o(H).radiusZ)),1)]),w(`button`,{class:`obj-mini danger`,onClick:st},c(e.$t(`townView.k1w45mzc107`)),1)],64)):(r(),g(`div`,hc,c(e.$t(`townView.k14s8urm108`)),1)),t[85]||=w(`div`,{class:`obj-sep`},null,-1),w(`div`,gc,[u(c(e.$t(`townView.k1ghjbfc133`))+` `+c(o(Yt))+` `,1),w(`button`,{class:`mini-btn chat-refresh`,title:e.$t(`townView.k15avt7g021`),onClick:Rl},c(o($t)?`…`:`↻`),9,_c)]),w(`div`,{ref_key:`chatScroll`,ref:tn,class:`rpg-lines chat-embed`},[o($t)?(r(),g(`div`,vc,c(e.$t(`townView.kkhlx5h109`)),1)):v(``,!0),o(q).length?(r(),g(l,{key:1},[w(`div`,yc,c(e.$t(`townView.k768cnt134`))+` `+c(o(q).length),1),(r(!0),g(l,null,n(o(q),e=>(r(),g(`div`,{key:e.id,class:`rpg-line hist`},[w(`span`,bc,c(Vl(e.at)),1),w(`div`,xc,[Bl(e.kind)?(r(),g(`span`,{key:0,class:i([`rpg-kind`,`k-${e.kind}`])},c(Bl(e.kind)),3)):v(``,!0),w(`span`,Sc,c(e.text),1)])]))),128))],64)):v(``,!0),o(Jt).length?(r(),g(`div`,Cc,c(e.$t(`townView.k1cwz73k135`))+` `+c(o(Jt).length),1)):v(``,!0),(r(!0),g(l,null,n(o(Jt),e=>(r(),g(`div`,{key:e.id,class:`rpg-line live`},[w(`span`,wc,c(Vl(e.at)),1),w(`div`,Tc,[w(`span`,Ec,c(e.text),1)])]))),128)),o(K)?.state===`busy`?(r(),g(`div`,Dc,[t[80]||=w(`span`,{class:`ty-dot`},null,-1),t[81]||=w(`span`,{class:`ty-dot`},null,-1),t[82]||=w(`span`,{class:`ty-dot`},null,-1),w(`span`,Oc,c(e.$t(`townView.k3o5tz9110`)),1)])):v(``,!0),!o($t)&&!o(q).length&&!o(Jt).length?(r(),g(`div`,kc,c(e.$t(`townView.k1qkqld7111`)),1)):v(``,!0)],512)],64)):v(``,!0)])):v(``,!0)]),_:1}),w(`section`,Ac,[w(`div`,jc,[w(`h3`,null,c(e.$t(`townView.k17dkhgd112`)),1)]),w(`div`,Mc,[w(`div`,Nc,[w(`canvas`,{ref_key:`donutCanvas`,ref:nf,width:`118`,height:`118`},null,512),w(`div`,Pc,[w(`b`,{style:s({color:o(tf)})},c(o(ef))+`%`,5),w(`span`,null,c(e.$t(`townView.k7h1nxo113`)),1)])]),w(`div`,Fc,[w(`div`,Ic,[t[86]||=w(`span`,{class:`hl-dot`,style:{background:`var(--hud-accent)`}},null,-1),u(` `+c(e.$t(`townView.k3vp67i114`))+` `,1),w(`span`,Lc,c(o(Gd)),1)]),w(`div`,Rc,[t[87]||=w(`span`,{class:`hl-dot`,style:{background:`var(--hud-amber)`}},null,-1),u(` `+c(e.$t(`townView.k3zcvb115`))+` `,1),w(`span`,zc,c(o(Zd)),1)]),w(`div`,Bc,[t[88]||=w(`span`,{class:`hl-dot`,style:{background:`var(--hud-danger)`}},null,-1),u(` `+c(e.$t(`townView.k3xmid116`))+` `,1),w(`span`,Vc,c(o(Qd)),1)]),w(`div`,Hc,[t[89]||=w(`span`,{class:`hl-dot`,style:{background:`#3a4a63`}},null,-1),u(` `+c(e.$t(`townView.statesOffline`))+` `,1),w(`span`,Uc,c(o($d)),1)])])])]),w(`section`,Wc,[w(`div`,Gc,[w(`h3`,null,c(e.$t(`townView.k1q247fn117`)),1),w(`span`,Kc,c(o(D).twins.length),1)]),k(d,{class:`kd-embed`,"daq-live":o(zd),"dcw-live":o(Bd),onFocusDevice:Rt},null,8,[`daq-live`,`dcw-live`])]),w(`section`,qc,[w(`div`,Jc,[w(`h3`,null,c(e.$t(`townView.k1cxf749118`)),1),w(`span`,Yc,c(o(lf))+` `+c(e.$t(`townView.k4dfq040`)),1),w(`button`,{class:`mini-btn`,title:e.$t(`townView.k1bkswpz022`),onClick:df},` ✓ `,8,Xc)]),w(`div`,Zc,[(r(!0),g(l,null,n(o(af).slice(0,8),e=>(r(),g(`div`,{key:e.id,class:`al-row`},[w(`span`,{class:i([`al-ico`,e.state===2?`info`:e.state===1?`warn`:`crit`])},[...t[90]||=[w(`svg`,{class:`al-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M12 3 22 20H2L12 3Z`}),w(`path`,{d:`M12 10v4M12 17v.2`})],-1)]],2),w(`div`,Qc,[w(`div`,$c,c(e.txt),1),w(`div`,el,c(e.src)+` · `+c(e.time),1)]),w(`button`,{class:i([`al-state`,`s${e.state}`]),onClick:t=>uf(e.id)},c(sf[e.state]),11,tl)]))),128)),o(af).length?v(``,!0):(r(),g(`div`,nl,[t[91]||=w(`svg`,{class:`re-ico`,viewBox:`0 0 24 24`},[w(`path`,{d:`M12 3l7 3v5c0 4.6-3 8.2-7 10-4-1.8-7-5.4-7-10V6l7-3Z`}),w(`path`,{d:`m9.2 12.2 2 2 3.6-4`})],-1),w(`span`,null,c(e.$t(`townView.kjz544r119`)),1)]))])]),w(`section`,rl,[w(`div`,il,[w(`h3`,null,c(e.$t(`townView.k1cxdtq2120`)),1),w(`span`,al,c(o(Jl).length),1)]),w(`div`,ol,[(r(!0),g(l,null,n([...o(Jl)].reverse(),(e,t)=>(r(),g(`div`,{key:`${e.at}-${t}`,class:`event-row`},[w(`span`,sl,c(Vl(e.at)),1),w(`span`,{class:`ev-name`,title:e.agentName},c(e.agentName),9,cl),w(`span`,{class:`ev-text`,title:e.text},c(e.text),9,ll)]))),128)),o(Jl).length?v(``,!0):(r(),g(`div`,ul,[t[92]||=w(`svg`,{class:`re-ico`,viewBox:`0 0 24 24`},[w(`path`,{d:`M3 12h3l2.5-6 4 12L15 12h6`})],-1),w(`span`,null,c(e.$t(`townView.k2uk6ua121`)),1)]))])]),w(`section`,dl,[w(`div`,fl,[w(`h3`,null,c(e.$t(`townView.kjug2jq122`)),1)]),w(`div`,pl,[w(`div`,{class:`mm-wrap`,title:e.$t(`townView.klfwiqg023`)},[w(`canvas`,{ref_key:`navCanvas`,ref:Hf,class:`nav-cv`,onPointerdown:qf,onPointermove:Jf,onPointerup:Yf,onPointercancel:Yf,onWheel:j(Kf,[`prevent`])},null,544)],8,ml),w(`div`,hl,[w(`button`,{class:`vp-tool`,title:e.$t(`townView.k1lap9bs024`),onClick:Df},[...t[93]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`path`,{d:`M3 12a9 9 0 1 0 3-6.7M3 4v5h5`})],-1)]],8,gl),w(`button`,{class:`vp-tool`,title:e.$t(`townView.kav8a8k025`),onClick:t[49]||=e=>o(F)?.zoomBy(.22)},[...t[94]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),w(`path`,{d:`m16 16 4.5 4.5M8.5 11h5`})],-1)]],8,_l),w(`button`,{class:`vp-tool`,title:e.$t(`townView.k1u7uce9026`),onClick:t[50]||=e=>o(F)?.zoomBy(-.18)},[...t[95]||=[w(`svg`,{class:`vp-svg`,viewBox:`0 0 24 24`},[w(`circle`,{cx:`11`,cy:`11`,r:`6.5`}),w(`path`,{d:`m16 16 4.5 4.5M8.5 11h5M11 8.5v5`})],-1)]],8,vl)])]),w(`div`,yl,c(e.$t(`townView.k1gaaodq136`))+c(o(Uf).toFixed(1))+` · `+c(o(Wt)?.devices?.length??0)+` `+c(e.$t(`townView.k47e16126`)),1)])])]),w(`footer`,bl,[w(`span`,null,[w(`span`,{class:i([`sb-dot`,{red:o(C).state!==`open`}])},null,2),u(c(e.$t(`townView.k1i4g246123`))+` `,1),w(`b`,null,c(o(C).state===`open`?e.$t(`townView.k41k5c154`):o(Ae)?e.$t(`townView.k3lmtk3184`):e.$t(`townView.k44c2n186`)),1)]),w(`span`,xl,[u(c(e.$t(`townView.k4a0jt124`))+` `,1),w(`b`,null,c(o(be)),1),t[96]||=w(`i`,null,`·`,-1),u(c(e.$t(`townView.k3xdvm125`))+` `,1),w(`b`,null,c(o(ye)),1),t[97]||=w(`i`,null,`·`,-1),u(c(e.$t(`townView.k47e16126`))+` `,1),w(`b`,null,c(o(Wd)),1)]),w(`span`,Sl,c(o(ve))+` FPS `,1),w(`span`,Cl,` © 2026 ABO · DIGITAL TWIN · `+c(e.$t(`townView.k1h5gxpf137`)),1)]),o(ge)?v(``,!0):(r(),g(`div`,wl,[t[98]||=w(`div`,{class:`loading-spinner`},null,-1),w(`span`,Tl,c(e.$t(`townView.kvjdqfg059`)),1)]))])}}}),[[`__scopeId`,`data-v-771c2c29`]]),{__name:`WorkshopTownView`});export{an as n,Fl as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,C as t,G as n,H as r,Ht as i,St as a,Ut as ee,Wt as o,a as s,b as c,f as l,ft as u,g as d,h as f,mt as p,nt as te,p as m,rt as h,t as g,x as ne}from"./BSCpFtzG.js";import{B as _,F as re,I as v,L as y}from"./2LwEn9gX.js";import{a as ie}from"./Bi6AiCuP.js";import{t as ae}from"./ubPfs9mQ.js";import{n as oe}from"./BeIfu4N3.js";import{t as se}from"./C9f8QMp12.js";import{n as ce,t as le}from"./B0haAGoq.js";import{t as ue}from"./CwS_UHeH.js";import{t as de}from"./ClptO7LA.js";var fe={key:0,class:`page`},pe={class:`banner bad`},me={key:1,class:`page`},he={class:`aw-page-head`},ge={class:`aw-kicker`},_e={class:`sub`},ve={class:`badges mono`},ye={class:`badge`},be={class:`badge`},xe={class:`badge`},Se={class:`aw-tile ctrl-card`},Ce={class:`ctrl-left`},we=[`title`],Te={class:`ctrl-right`},Ee={class:`ctrl-metrics mono`},De=[`title`],Oe=[`title`],ke=[`title`],Ae={key:1,class:`aw-tile adopt-card`},je={class:`adopt-title`},Me={class:`adopt-list`},Ne=[`onClick`],Pe=[`onClick`],Fe={class:`aw-tile line-card`},Ie={class:`line-status`},Le={class:`line-info`},Re={key:0,class:`mono dim`},ze={key:1,class:`dim`},Be={class:`line-ctl`},Ve={class:`ctl-sel`},He={value:``},Ue=[`value`],We={class:`ctl-sel`},Ge=[`disabled`],Ke={value:``},qe=[`value`,`disabled`],Je=[`disabled`,`title`],Ye=[`disabled`],Xe={key:0,class:`banner bad`,style:{"margin-top":`10px`}},Ze={key:1,class:`banner good`,style:{"margin-top":`10px`}},Qe={class:`modal`},$e={class:`m-title`},et={class:`dim mono`},tt={class:`dim tpl-hint`},nt={class:`tpl-chips`},rt=[`title`],it={class:`mono`},at={class:`sec-label`},ot={class:`f-grid tpl-form`},st={class:`f`},ct=[`placeholder`],lt={class:`f`},ut=[`placeholder`],dt={class:`f`},ft={class:`f`},pt={class:`f`},mt=[`placeholder`],ht={class:`f`},gt=[`placeholder`],_t={class:`f`},vt={class:`f`},yt=[`value`],bt={class:`f`},xt=[`placeholder`],St={key:0,class:`banner good`,style:{"margin-top":`10px`}},Ct={key:1,class:`m-err`},wt={class:`m-actions`},Tt=[`disabled`],Et={class:`modal`},Dt={class:`m-title`},Ot={class:`seg-row`},kt={class:`f-grid`},At={class:`f`},jt=[`value`],Mt={class:`f`},Nt=[`placeholder`],Pt={class:`f`},Ft=[`placeholder`],It={class:`f-grid cal-form`},Lt={class:`f`},Rt={value:`none`},zt={class:`f`},Bt={style:{display:`flex`,gap:`6px`}},Vt=[`disabled`],Ht=[`disabled`],Ut={class:`f-grid`},Wt={class:`f`},Gt=[`value`],Kt={key:0,class:`f-grid driver-form`},qt={key:0,style:{color:`var(--tone-danger-dot)`,"font-style":`normal`}},Jt=[`onUpdate:modelValue`],Yt=[`value`],Xt=[`onUpdate:modelValue`,`type`,`placeholder`],Zt={key:2,class:`hint`},Qt={class:`test-row`},$t=[`disabled`],en={class:`f`},tn=[`placeholder`],nn={key:1,class:`m-err`},rn={class:`m-actions`},an=[`disabled`],on={class:`aw-tile table-card`},sn={class:`nodes-table`},cn={class:`right`},ln={class:`mono dim`},un={class:`mono ch`},dn=[`disabled`,`title`,`onClick`],fn={key:0,class:`st-pill paused`},pn={class:`mono val`},mn={key:0,class:`dim`},hn={class:`write-row`},gn=[`onUpdate:modelValue`,`placeholder`,`min`,`max`,`step`,`disabled`,`title`],_n=[`disabled`,`title`,`onClick`],vn={class:`mono dim`},yn={class:`mono`},bn={class:`right`},xn=[`onClick`],Sn={key:0},Cn={colspan:`9`},wn={class:`pane-empty`,style:{"min-height":`120px`}},Tn={class:`pe-sub`},En={class:`aw-tile recipe-card`},Dn={class:`recipe-hd`},On={class:`panel-tag mono`},kn={class:`recipe-sub`},An={key:0,class:`product-row`},jn=[`title`,`onClick`],Mn=[`title`,`onClick`],Nn={key:1,class:`dim`,style:{margin:`6px 0 12px`,"font-size":`12px`}},Pn={class:`recipe-grid`},Fn={class:`recipe-name`},In={class:`dim`},Ln={class:`mono dim`},Rn={key:0,class:`dim desc`},zn={class:`recipe-params mono`},Bn=[`title`],Vn={class:`recipe-actions`},Hn=[`onClick`],Un=[`onClick`],Wn=[`onClick`],Gn={key:0,class:`pane-empty`,style:{"grid-column":`1 / -1`}},Kn={key:2,class:`banner good`},qn=[`disabled`],Jn={key:3,class:`runs`},Yn={class:`sec-label`},Xn={class:`nodes-table`},Zn={class:`right`},Qn={class:`mono`},$n={class:`mono dim`},er={class:`right`},tr=[`disabled`,`onClick`],nr=[`onClick`],rr={class:`modal`},ir={class:`m-title`},ar={class:`sec-label`},or={class:`nodes-table`},sr={class:`mono dim`},cr={class:`mono`},lr={class:`mono`},ur={class:`mono dim`},dr={class:`mono dim`},fr={key:0},pr={colspan:`6`,class:`dim`,style:{"text-align":`center`,padding:`12px`}},mr={class:`sec-label`},hr={class:`nodes-table`},gr={class:`mono`},_r={class:`mono dim`},vr={class:`mono dim`},yr={key:0},br={colspan:`6`,class:`dim`,style:{"text-align":`center`,padding:`12px`}},xr={class:`m-actions`},Sr={class:`modal`},Cr={class:`m-title`},wr={class:`f-grid`},Tr={class:`f`},Er=[`value`],Dr={class:`f`},Or=[`placeholder`],kr={class:`f`},Ar=[`placeholder`],jr={class:`sec-label`},Mr={class:`f`},Nr=[`onUpdate:modelValue`],Pr=[`value`],Fr={class:`f`},Ir=[`onUpdate:modelValue`],Lr={class:`f`},Rr=[`onUpdate:modelValue`,`placeholder`],zr={class:`f`},Br=[`onUpdate:modelValue`,`placeholder`],Vr=[`onClick`],Hr={class:`sec-label`},Ur={class:`f`},Wr=[`onUpdate:modelValue`],Gr=[`value`],Kr={class:`f`},qr=[`onUpdate:modelValue`],Jr={class:`f`},Yr=[`onUpdate:modelValue`],Xr=[`onClick`],Zr=[`disabled`,`title`],Qr={key:0,class:`m-err`},$r={class:`m-actions`},ei=[`disabled`],ti={class:`aw-tile query-card`},ni={class:`sec-label`},ri={class:`q-grid`},ii={class:`f`},ai={value:``},oi=[`value`],si={class:`f`},ci=[`disabled`],li={value:``},ui=[`value`],di={class:`f`},fi={value:``},pi=[`value`],mi={class:`f`},hi={value:``},gi=[`value`],_i={class:`f`},vi={class:`f`},yi={class:`f q-actions`},bi=[`disabled`],xi={key:0,class:`banner bad`,style:{"margin-top":`8px`}},Si={key:1,class:`q-result`},Ci={class:`nodes-table`},wi={class:`mono dim`},Ti={class:`mono`},Ei={class:`mono`},Di={class:`mono`},Oi={class:`mono dim`},ki={key:5,class:`aw-tile table-card`},Ai={class:`sec-label`},ji={class:`nodes-table`},Mi={class:`mono dim`},Ni={class:`mono`},Pi={class:`mono dim`},Fi={class:`dim`},Ii={class:`modal`},Li={class:`m-title`},Ri={class:`f-grid`},zi={class:`f`},Bi=[`placeholder`],Vi={class:`f`},Hi=[`placeholder`],Ui={key:0,class:`m-err`},Wi={class:`m-actions`},Gi=[`disabled`],Ki={key:7,class:`err`},qi={class:`aw-tile ledger-card`},Ji={class:`ledger-head`},Yi={value:``},Xi=[`value`],Zi={class:`ledger-tri`},Qi={class:`tri-cell`},$i={class:`mono`},ea={class:`tri-cell`},ta={class:`mono`},na={class:`tri-cell`},ra={class:`mono`},ia={class:`ledger-cols`},aa={class:`ledger-col`},oa={class:`sec-t`},sa={class:`ledger-list mono`},ca={class:`ledger-col`},la={class:`sec-t`},ua={class:`ledger-list`},da={class:`mono`},fa=g(t({__name:`[id]`,setup(t){let{t:g}=oe(),fa=ie(),b=le(),pa=ue(),ma=de();pa.load();let x=l(()=>String(fa.params.id??``)),S=l(()=>b.lines.find(e=>e.id===x.value)),C=l(()=>b.lineStateOf(x.value));b.load();let ha=b.ensureWsFeed();e(()=>ha());let ga=e=>e?ma.twins.find(t=>t.id===e)?.name??e:g(`dcwDetail.k3own4q121`),_a={idle:g(`dcwDetail.k3zgkk122`),writing:g(`dcwDetail.k3l3h80123`),ok:`已 ACK`,error:g(`dcwDetail.k40reu124`),offline:g(`dcwDetail.k44c2n125`)};function va(e){let t=e??``;return b.templates.find(e=>e.key===(t.startsWith(`dcw-`)?t.slice(4):t))?.ch??t}function ya(e){return b.nodeById(e)?.min}function ba(e){return b.nodeById(e)?.max}let w=l(()=>pa.nodes.filter(e=>e.lineId===x.value)),T=p(``),E=p(null),xa=p(!1);async function Sa(){if(T.value){xa.value=!0;try{E.value=await b.fetchLedger(T.value)}finally{xa.value=!1}}}async function Ca(){T.value&&(await b.rollbackNode(T.value),await Sa())}function wa(e){return pa.nodeById(e)?.name??e}let D=l(()=>b.nodes.filter(e=>e.lineId===x.value)),O=l(()=>b.products.filter(e=>e.lineId===x.value)),Ta=l(()=>b.recipes.filter(e=>e.lineId===x.value)),Ea=l(()=>b.runs.filter(e=>e.lineId===x.value)),Da=l(()=>{let e=new Set(D.value.map(e=>e.id));return b.history.filter(t=>e.has(t.nodeId))}),Oa=l(()=>b.nodes.filter(e=>!e.lineId)),ka=l(()=>b.products.filter(e=>!e.lineId));async function Aa(e){await b.patchNode(e,{lineId:x.value});let t=b.nodeById(e);t&&(t.lineId=x.value)}async function ja(e){await b.updateProduct(e,{lineId:x.value}),await b.load()}let k=u({}),Ma=p(``),A=p(``),Na=p(``);async function Pa(e,t){Ma.value=e,A.value=``,Na.value=``;try{let n=await b.write(e,t);n.ok?(Na.value=g(`dcwDetail.k1alcbyu182`,{p0:b.nodeById(e)?.name??e,p1:n.message}),k[e]=``):A.value=g(`dcwDetail.kl1e9x9183`,{p0:b.nodeById(e)?.name??e,p1:n.message})}catch(e){A.value=e instanceof Error?e.message:String(e)}finally{Ma.value=``}}let Fa=p(``);async function Ia(e,t){Fa.value=e,A.value=``;try{await b.patchNode(e,{enabled:t});let n=b.nodeById(e);n&&(n.enabled=t,t?n.state===`offline`&&(n.state=`idle`):n.state=`offline`)}catch(e){A.value=e instanceof Error?e.message:String(e)}finally{Fa.value=``}}let j=p(!1),M=p(`mock`),La=p(b.templates[0]?.key??``),N=p(`mock`),Ra=p(``),za=p(null),P=p({}),F=u({kind:`none`,scale:1,offset:0}),Ba=p(``),Va=p(!1),I=p(null),Ha=p(!1),Ua=p(``),Wa=l(()=>ce.find(e=>e.kind===N.value)),Ga=l(()=>Wa.value?.configFields??[]);function Ka(){let e={};for(let t of Ga.value)t.default!==void 0&&(e[t.key]=t.default);P.value=e,I.value=null}Ka();async function qa(){Va.value=!0,I.value=null;try{I.value=await b.testDriver(N.value,P.value)}catch(e){I.value={ok:!1,message:e instanceof Error?e.message:String(e)}}finally{Va.value=!1}}async function Ja(){Ha.value=!0,Ua.value=``;try{for(let e of Ga.value)if(e.required&&(P.value[e.key]===void 0||P.value[e.key]===``))throw Error(g(`dcwDetail.k8x1un1184`,{p0:e.label}));let e=F.kind===`linear`?{kind:`linear`,scale:Number(F.scale),offset:Number(F.offset)}:void 0;await b.createFromTemplate(`dcw-${La.value}`,{name:Ra.value.trim()||void 0,driver:N.value,driverConfig:{...P.value},transform:e,holdIntervalMs:za.value,lineId:x.value,semantics:Ba.value.trim()||void 0}),j.value=!1,Ra.value=``,Ba.value=``}catch(e){Ua.value=e instanceof Error?e.message:String(e)}finally{Ha.value=!1}}let Ya=p(!1),Xa=p(!1),L=p(``),R=p(``);function Za(){Ya.value=!0,L.value=``,R.value=``}let z=u({name:``,ch:``,code:``,unit:``,min:``,max:``,decimals:1,icon:`gateway`,semantics:``}),Qa=[{key:`thermo`,label:g(`dcwDetail.k422b8126`)},{key:`pressure`,label:g(`dcwDetail.k3x6ff127`)},{key:`tension`,label:g(`dcwDetail.k3z9xc128`)},{key:`encoder`,label:g(`dcwDetail.kjb3vhs129`)},{key:`camera`,label:g(`dcwDetail.k47atw130`)},{key:`gateway`,label:g(`dcwDetail.k48c07131`)}];async function $a(){Xa.value=!0,L.value=``,R.value=``;try{if(!z.name.trim())throw Error(g(`dcwDetail.k6ugbw2132`));if(z.unit.trim()===``)throw Error(g(`dcwDetail.kx3pg59133`));if(z.min===``||z.max===``)throw Error(g(`dcwDetail.k13awowo134`));let e=await b.createTemplate({name:z.name.trim(),ch:z.ch.trim()||z.name.trim(),code:z.code.trim()||`CUSTOM`,unit:z.unit.trim(),min:Number(z.min),max:Number(z.max),decimals:Number(z.decimals)||0,icon:z.icon,semantics:z.semantics.trim()||void 0});La.value=e.key,R.value=g(`dcwDetail.ky4e1tr185`,{p0:e.name}),z.name=``,z.ch=``,z.code=``,z.unit=``,z.min=``,z.max=``,z.semantics=``}catch(e){L.value=e instanceof Error?e.message:String(e)}finally{Xa.value=!1}}let B=p(``),V=p(``),H=p(!1),U=p(``),W=p(``),eo=l(()=>Ta.value.filter(e=>e.productId===B.value));async function to(){H.value=!0,U.value=``,W.value=``;try{if(!V.value)throw Error(g(`dcwDetail.k1b6qe0r135`));await b.startLine(x.value,V.value),U.value=g(`dcwDetail.k17jteb9186`,{p0:C.value.productName,p1:C.value.recipeName,p2:C.value.runId})}catch(e){W.value=e instanceof Error?e.message:String(e)}finally{H.value=!1}}async function no(){H.value=!0,U.value=``,W.value=``;try{let e=`${C.value.productName??``} · ${C.value.recipeName??``}`;await b.stopLine(x.value),U.value=g(`dcwDetail.kzl49pd187`,{p0:e})}catch(e){W.value=e instanceof Error?e.message:String(e)}finally{H.value=!1}}let ro=p(!1),io=p(!1),ao=p(``),G=u({name:``,description:``}),K=p(``);async function oo(){io.value=!0,ao.value=``;try{let e=await b.createProduct({name:G.name.trim(),description:G.description.trim(),lineId:x.value});B.value=e.id,K.value=e.id,ro.value=!1,G.name=``,G.description=``}catch(e){ao.value=e instanceof Error?e.message:String(e)}finally{io.value=!1}}let so=l(()=>K.value?Ta.value.filter(e=>e.productId===K.value):Ta.value),co=e=>b.products.find(t=>t.id===e)?.name??e,q=u({productId:``,recipeId:``,paramKey:``,nodeId:``,lastMin:30,bucketMs:0}),lo=p(null),uo=p(!1),fo=p(``);async function po(){uo.value=!0,fo.value=``,lo.value=null;try{lo.value=await b.queryLine({lineId:x.value,productId:q.productId||void 0,recipeId:q.recipeId||void 0,paramKey:q.paramKey||void 0,nodeId:q.nodeId||void 0,fromMs:Date.now()-q.lastMin*6e4,toMs:Date.now(),bucketMs:q.bucketMs>0?q.bucketMs:void 0,limit:2e3}),lo.value.channels.length===0&&(fo.value=g(`dcwDetail.kszv5sq136`))}catch(e){fo.value=e instanceof Error?e.message:String(e)}finally{uo.value=!1}}let mo=l(()=>b.templates.map(e=>e.key)),J=p(!1),ho=p(null),go=p(!1),Y=p(``),X=u({productId:``,name:``,description:``,params:[],daqWindows:[]}),Z=p(null),Q=p(null),$=p(!1);function _o(){ho.value=null,Y.value=``,X.productId=K.value||B.value||O.value[0]?.id||``,X.name=``,X.description=``,X.params=[{nodeId:D.value[0]?.id??``,value:``,min:``,max:``}],X.daqWindows=[],J.value=!0}function vo(e){let t=b.recipes.find(t=>t.id===e);t&&(ho.value=e,Y.value=``,X.productId=t.productId,X.name=t.name,X.description=t.description,X.params=t.params.map(e=>({nodeId:e.nodeId,value:e.value,min:e.min??``,max:e.max??``})),X.daqWindows=(t.daqWindows??[]).map(e=>({nodeId:e.nodeId,min:e.min??``,max:e.max??``})),J.value=!0)}async function yo(){go.value=!0,Y.value=``;try{let e={productId:X.productId,name:X.name.trim(),description:X.description.trim(),params:X.params.filter(e=>e.nodeId&&e.value!==``&&Number.isFinite(Number(e.value))).map(e=>({nodeId:e.nodeId,value:Number(e.value),...e.min!==``&&Number.isFinite(Number(e.min))?{min:Number(e.min)}:{},...e.max!==``&&Number.isFinite(Number(e.max))?{max:Number(e.max)}:{}})),daqWindows:X.daqWindows.filter(e=>e.nodeId&&(e.min!==``||e.max!==``)).map(e=>({nodeId:e.nodeId,...e.min!==``&&Number.isFinite(Number(e.min))?{min:Number(e.min)}:{},...e.max!==``&&Number.isFinite(Number(e.max))?{max:Number(e.max)}:{}}))};ho.value?await b.updateRecipe(ho.value,e):await b.createRecipe(e),J.value=!1}catch(e){Y.value=e instanceof Error?e.message:String(e)}finally{go.value=!1}}async function bo(e){Z.value=null,A.value=``;try{let t=await b.applyRecipe(e),n=t.results.filter(e=>e.ok).length;Z.value={runId:t.id,ok:n,total:t.results.length},n<t.results.length&&(A.value=g(`dcwDetail.ks7szkt188`,{p0:t.results.filter(e=>!e.ok).map(e=>e.message).join(`;`)}))}catch(e){A.value=e instanceof Error?e.message:String(e)}}async function xo(e){$.value=!0;try{let t=await b.runData(e);Q.value={runId:e,data:t}}catch(e){A.value=e instanceof Error?e.message:String(e)}finally{$.value=!1}}function So(e){let t=e?.value??e?.avg;return t==null?`--`:String(Math.round(t*1e3)/1e3)}return(e,t)=>{let l=ae,u=se;return a(b).loaded&&!S.value?(r(),d(`div`,fe,[m(`p`,pe,o(e.$t(`dcwDetail.k19337yp018`)),1),ne(l,{class:`pill-btn`,to:`/dcw`},{default:te(()=>[c(o(e.$t(`dcwDetail.kllwu1c019`)),1)]),_:1})])):(r(),d(`div`,me,[m(`div`,he,[m(`div`,null,[m(`p`,ge,[m(`span`,{class:`line-chip`,style:ee({background:S.value?.color??`#3aa0ff`})},null,4),c(`AGENTWORKSHOP / LINE / `+o(S.value?.name??x.value),1)]),m(`h1`,null,o(S.value?.name??e.$t(`dcwDetail.k1b2snna151`))+` · `+o(e.$t(`dcwDetail.k1l0iow1137`)),1),m(`p`,_e,o(S.value?.description||e.$t(`dcwDetail.kzcbfki152`)),1)]),m(`div`,ve,[m(`span`,ye,o(e.$t(`dcwDetail.k45uio082`))+` `+o(D.value.length),1),m(`span`,be,o(e.$t(`dcwDetail.k3waz1025`))+` `+o(O.value.length),1),m(`span`,xe,o(e.$t(`dcwDetail.k48grv027`))+` `+o(Ta.value.length),1)])]),m(`section`,Se,[m(`div`,Ce,[m(`button`,{class:i([`aw-pill`,{running:a(b).controller.running}]),title:e.$t(`dcwDetail.k1snap154`),onClick:t[0]||=e=>a(b).startStop(a(b).controller.running?`pause`:`resume`)},[m(`span`,{class:i(a(b).controller.running?`i-tabler-player-pause`:`i-tabler-player-play`)},null,2),c(` `+o(a(b).controller.running?e.$t(`dcwDetail.kplrsg153`):e.$t(`dcwDetail.knxgni9169`)),1)],10,we)]),m(`div`,Te,[m(`span`,Ee,[m(`span`,null,o(e.$t(`dcwDetail.k45uio082`))+` `+o(a(b).controller.nodesOnline)+`/`+o(a(b).controller.nodesTotal),1),t[52]||=m(`span`,{class:`sep`},`·`,-1),m(`span`,{title:e.$t(`dcwDetail.kd3ygmn001`)},o(e.$t(`dcwDetail.k3wtib138`))+` `+o(a(b).controller.writesTotal),9,De),t[53]||=m(`span`,{class:`sep`},`·`,-1),m(`span`,{class:i({warn:a(b).controller.writesFailed>0}),title:e.$t(`dcwDetail.kd3znl0002`)},o(e.$t(`dcwDetail.k3yit7139`))+` `+o(a(b).controller.writesFailed),11,Oe)]),m(`button`,{class:`aw-pill outline`,title:e.$t(`dcwDetail.kc4ixly003`),onClick:Za},[t[54]||=m(`span`,{class:`i-tabler-template`},null,-1),c(` `+o(e.$t(`dcwDetail.k1972dx9020`)),1)],8,ke),m(`button`,{class:`aw-pill add-btn`,onClick:t[1]||=e=>j.value=!0},[t[55]||=m(`span`,{class:`i-tabler-plus`},null,-1),c(` `+o(e.$t(`dcwDetail.k1976uns021`)),1)])])]),A.value||Na.value?(r(),d(`p`,{key:0,class:i([`banner`,A.value?`bad`:`good`])},o(A.value||Na.value),3)):f(``,!0),Oa.value.length||ka.value.length?(r(),d(`section`,Ae,[m(`b`,je,o(e.$t(`dcwDetail.kaebkky022`)),1),m(`div`,Me,[(r(!0),d(s,null,n(Oa.value,t=>(r(),d(`span`,{key:t.id,class:`adopt-chip`},[c(o(t.name)+` `,1),m(`button`,{class:`mini-btn`,onClick:e=>Aa(t.id)},o(e.$t(`dcwDetail.kyjp9fg023`)),9,Ne)]))),128)),(r(!0),d(s,null,n(ka.value,t=>(r(),d(`span`,{key:t.id,class:`adopt-chip`},[c(o(t.name)+`(`+o(e.$t(`dcwDetail.k3km252140`)),1),m(`button`,{class:`mini-btn`,onClick:e=>ja(t.id)},o(e.$t(`dcwDetail.kyjp9fg023`)),9,Pe)]))),128))])])):f(``,!0),m(`section`,Fe,[m(`div`,Ie,[m(`span`,{class:i([`line-dot`,{on:C.value.active}])},null,2),m(`div`,Le,[m(`b`,null,o(C.value.active?e.$t(`dcwDetail.k1pxrhx0154`):e.$t(`dcwDetail.k1b2hxmx170`)),1),C.value.active?(r(),d(`small`,Re,o(C.value.productName)+` · `+o(C.value.recipeName)+` · `+o(e.$t(`dcwDetail.k400lb075`))+` `+o(C.value.runId)+` · `+o(e.$t(`dcwDetail.k3zkt2166`))+` `+o(C.value.startedAt?.slice(11,19))+` `+o(e.$t(`dcwDetail.k69vag8168`))+` `+o(C.value.taggedSamples)+` `+o(e.$t(`dcwDetail.k4118o085`)),1)):(r(),d(`small`,ze,o(e.$t(`dcwDetail.k19pof14024`)),1))])]),m(`div`,Be,[m(`label`,Ve,[m(`span`,null,o(e.$t(`dcwDetail.k3waz1025`)),1),h(m(`select`,{"onUpdate:modelValue":t[2]||=e=>B.value=e,class:`inp`,onChange:t[3]||=e=>V.value=``},[m(`option`,He,o(e.$t(`dcwDetail.kuisodh026`)),1),(r(!0),d(s,null,n(O.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,Ue))),128))],544),[[v,B.value]])]),m(`label`,We,[m(`span`,null,o(e.$t(`dcwDetail.k48grv027`)),1),h(m(`select`,{"onUpdate:modelValue":t[4]||=e=>V.value=e,class:`inp`,disabled:!B.value},[m(`option`,Ke,o(e.$t(`dcwDetail.kutxzsz028`)),1),(r(!0),d(s,null,n(eo.value,t=>(r(),d(`option`,{key:t.id,value:t.id,disabled:t.params.length===0},o(t.name)+o(t.params.length===0?e.$t(`dcwDetail.k1hicmch155`):e.$t(`dcwDetail.k1lzfi4g180`,{p0:t.params.length})),9,qe))),128))],8,Ge),[[v,V.value]])]),C.value.active?(r(),d(`button`,{key:1,class:`pill-btn stop`,disabled:H.value,onClick:no},o(e.$t(`dcwDetail.k1xyhd2y030`)),9,Ye)):(r(),d(`button`,{key:0,class:`pill-btn`,disabled:H.value||!V.value,title:V.value?`下发配方参数并开始打标数据采集`:`开跑前必须先设定配方`,onClick:to},o(e.$t(`dcwDetail.kfb8vml029`)),9,Je))]),W.value?(r(),d(`p`,Xe,o(W.value),1)):f(``,!0),U.value?(r(),d(`p`,Ze,o(U.value),1)):f(``,!0)]),Ya.value?(r(),d(`div`,{key:2,class:`modal-mask`,onClick:t[15]||=_(e=>Ya.value=!1,[`self`])},[m(`div`,Qe,[m(`h3`,$e,[c(o(e.$t(`dcwDetail.k1x4vam0031`))+` `,1),m(`small`,et,o(e.$t(`dcwDetail.k3x23c141`))+` `+o(a(b).templates.filter(e=>e.builtin).length)+` · `+o(e.$t(`dcwDetail.k3t616a142`))+` `+o(a(b).templates.filter(e=>!e.builtin).length),1)]),m(`p`,tt,o(e.$t(`dcwDetail.ke1iyud032`)),1),m(`div`,nt,[(r(!0),d(s,null,n(a(b).templates,t=>(r(),d(`span`,{key:t.key,class:`tpl-chip`,title:`${t.code} · ${t.min}~${t.max} ${t.unit}${t.semantics?` · ${t.semantics}`:``}`},[c(o(t.name)+` `,1),m(`small`,it,o(t.min)+`~`+o(t.max)+o(t.unit),1),m(`em`,{class:i([`tpl-tag`,{builtin:t.builtin}])},o(t.builtin?e.$t(`dcwDetail.k3x23c141`):e.$t(`dcwDetail.k3t616a142`)),3)],8,rt))),128))]),m(`p`,at,o(e.$t(`dcwDetail.k169eb4s033`)),1),m(`div`,ot,[m(`label`,st,[m(`span`,null,[c(o(e.$t(`dcwDetail.k1f55q76034`)),1),t[56]||=m(`em`,null,`*`,-1)]),h(m(`input`,{"onUpdate:modelValue":t[5]||=e=>z.name=e,class:`inp`,placeholder:e.$t(`dcwDetail.k1tooi3o004`)},null,8,ct),[[y,z.name]])]),m(`label`,lt,[m(`span`,null,o(e.$t(`dcwDetail.k1bqk219035`)),1),h(m(`input`,{"onUpdate:modelValue":t[6]||=e=>z.ch=e,class:`inp`,placeholder:e.$t(`dcwDetail.k698qz0005`)},null,8,ut),[[y,z.ch]])]),m(`label`,dt,[m(`span`,null,o(e.$t(`dcwDetail.k1ayxrqb036`)),1),h(m(`input`,{"onUpdate:modelValue":t[7]||=e=>z.code=e,class:`inp`,placeholder:`如 MOTOR · I`},null,512),[[y,z.code]])]),m(`label`,ft,[m(`span`,null,[c(o(e.$t(`dcwDetail.k3x4ef037`)),1),t[57]||=m(`em`,null,`*`,-1)]),h(m(`input`,{"onUpdate:modelValue":t[8]||=e=>z.unit=e,class:`inp`,placeholder:`如 A`},null,512),[[y,z.unit]])]),m(`label`,pt,[m(`span`,null,[c(o(e.$t(`dcwDetail.k1l9jv5m038`)),1),t[58]||=m(`em`,null,`*`,-1)]),h(m(`input`,{"onUpdate:modelValue":t[9]||=e=>z.min=e,type:`number`,class:`inp`,placeholder:e.$t(`dcwDetail.kxz9174006`)},null,8,mt),[[y,z.min,void 0,{number:!0}]])]),m(`label`,ht,[m(`span`,null,[c(o(e.$t(`dcwDetail.k1l9jv4p039`)),1),t[59]||=m(`em`,null,`*`,-1)]),h(m(`input`,{"onUpdate:modelValue":t[10]||=e=>z.max=e,type:`number`,class:`inp`,placeholder:e.$t(`dcwDetail.kxz9167007`)},null,8,gt),[[y,z.max,void 0,{number:!0}]])]),m(`label`,_t,[m(`span`,null,o(e.$t(`dcwDetail.k3mxmcx040`)),1),h(m(`input`,{"onUpdate:modelValue":t[11]||=e=>z.decimals=e,type:`number`,min:`0`,max:`4`,class:`inp`},null,512),[[y,z.decimals,void 0,{number:!0}]])]),m(`label`,vt,[m(`span`,null,o(e.$t(`dcwDetail.k3xx56041`)),1),h(m(`select`,{"onUpdate:modelValue":t[12]||=e=>z.icon=e,class:`inp`},[(r(),d(s,null,n(Qa,e=>m(`option`,{key:e.key,value:e.key},o(e.label),9,yt)),64))],512),[[v,z.icon]])])]),m(`label`,bt,[m(`span`,null,o(e.$t(`dcwDetail.knjmyfr042`)),1),h(m(`textarea`,{"onUpdate:modelValue":t[13]||=e=>z.semantics=e,class:`inp`,rows:`2`,placeholder:e.$t(`dcwDetail.k1qdnfzc008`)},null,8,xt),[[y,z.semantics]])]),R.value?(r(),d(`p`,St,o(R.value),1)):f(``,!0),L.value?(r(),d(`p`,Ct,o(L.value),1)):f(``,!0),m(`div`,wt,[m(`button`,{class:`aw-pill outline`,onClick:t[14]||=e=>Ya.value=!1},o(e.$t(`dcwDetail.k3x62t043`)),1),m(`button`,{class:`pill-btn`,disabled:Xa.value||!z.name.trim()||z.unit.trim()===``||z.min===``||z.max===``,onClick:$a},o(Xa.value?e.$t(`dcwDetail.k1bg4759156`):e.$t(`dcwDetail.k1bg9nga171`)),9,Tt)])])])):f(``,!0),j.value?(r(),d(`div`,{key:3,class:`modal-mask`,onClick:t[27]||=_(e=>j.value=!1,[`self`])},[m(`div`,Et,[m(`h3`,Dt,o(e.$t(`dcwDetail.k1976uns021`)),1),m(`div`,Ot,[m(`button`,{class:i([`seg`,{on:M.value===`mock`}]),onClick:t[16]||=e=>M.value=`mock`},` Mock 模拟 PLC `,2),m(`button`,{class:i([`seg`,{on:M.value===`real`}]),onClick:t[17]||=e=>M.value=`real`},o(e.$t(`dcwDetail.kyj8fen044`)),3)]),m(`div`,kt,[m(`label`,At,[m(`span`,null,o(e.$t(`dcwDetail.k1ejzwqp045`)),1),h(m(`select`,{"onUpdate:modelValue":t[18]||=e=>La.value=e,class:`inp`},[(r(!0),d(s,null,n(a(b).templates,t=>(r(),d(`option`,{key:t.key,value:t.key},o(t.name)+` · `+o(t.ch)+`(`+o(t.min)+`~`+o(t.max)+` `+o(t.unit)+`)`+o(t.builtin?``:e.$t(`dcwDetail.kr45rk9157`)),9,jt))),128))],512),[[v,La.value]])]),m(`label`,Mt,[m(`span`,null,o(e.$t(`dcwDetail.k1ce2k1y046`)),1),h(m(`input`,{"onUpdate:modelValue":t[19]||=e=>Ra.value=e,class:`inp`,placeholder:e.$t(`dcwDetail.kgpxzy3009`)},null,8,Nt),[[y,Ra.value]])]),m(`label`,Pt,[m(`span`,null,o(e.$t(`dcwDetail.k1vyb8im047`)),1),h(m(`input`,{"onUpdate:modelValue":t[20]||=e=>za.value=e,type:`number`,min:`0`,max:`3600000`,step:`500`,class:`inp`,placeholder:e.$t(`dcwDetail.kb1srz0010`)},null,8,Ft),[[y,za.value,void 0,{number:!0}]])])]),m(`div`,It,[m(`label`,Lt,[m(`span`,null,o(e.$t(`dcwDetail.kiune1f048`)),1),h(m(`select`,{"onUpdate:modelValue":t[21]||=e=>F.kind=e,class:`inp`},[m(`option`,Rt,o(e.$t(`dcwDetail.kkzy0k049`)),1),t[60]||=m(`option`,{value:`linear`},` 线性标定:PLC值 = (物理值 - offset) / scale `,-1)],512),[[v,F.kind]])]),m(`label`,zt,[t[61]||=m(`span`,null,`scale / offset`,-1),m(`div`,Bt,[h(m(`input`,{"onUpdate:modelValue":t[22]||=e=>F.scale=e,type:`number`,step:`0.1`,class:`inp`,disabled:F.kind!==`linear`,title:`decoder 斜率(≠0):物理值 = scale × PLC值 + offset;下发时自动取逆`},null,8,Vt),[[y,F.scale,void 0,{number:!0}]]),h(m(`input`,{"onUpdate:modelValue":t[23]||=e=>F.offset=e,type:`number`,step:`0.1`,class:`inp`,disabled:F.kind!==`linear`,title:`decoder 截距`},null,8,Ht),[[y,F.offset,void 0,{number:!0}]])])])]),M.value===`real`?(r(),d(s,{key:0},[m(`div`,Ut,[m(`label`,Wt,[m(`span`,null,o(e.$t(`dcwDetail.k1kt87rx050`)),1),h(m(`select`,{"onUpdate:modelValue":t[24]||=e=>N.value=e,class:`inp`},[(r(!0),d(s,null,n(a(ce).filter(e=>e.status!==`builtin`),e=>(r(),d(`option`,{key:e.kind,value:e.kind},o(e.label),9,Gt))),128))],512),[[v,N.value]])])]),Ga.value.length?(r(),d(`div`,Kt,[(r(!0),d(s,null,n(Ga.value,e=>(r(),d(`label`,{key:e.key,class:`f`},[m(`span`,null,[c(o(e.label),1),e.required?(r(),d(`em`,qt,`*`)):f(``,!0)]),e.type===`select`?h((r(),d(`select`,{key:0,"onUpdate:modelValue":t=>P.value[e.key]=t,class:`inp`},[(r(!0),d(s,null,n(e.options,e=>(r(),d(`option`,{key:e.value,value:e.value},o(e.label),9,Yt))),128))],8,Jt)),[[v,P.value[e.key]]]):h((r(),d(`input`,{key:1,"onUpdate:modelValue":t=>P.value[e.key]=t,type:e.type===`number`?`number`:`text`,placeholder:e.placeholder,class:`inp`},null,8,Xt)),[[re,P.value[e.key]]]),e.hint?(r(),d(`small`,Zt,o(e.hint),1)):f(``,!0)]))),128))])):f(``,!0),m(`div`,Qt,[m(`button`,{class:`pill-btn outline`,disabled:Va.value,onClick:qa},o(Va.value?e.$t(`dcwDetail.k1fsh720158`):e.$t(`dcwDetail.k1fstglk172`)),9,$t),I.value?(r(),d(`span`,{key:0,class:i([`test-result`,I.value.ok?`good`:`bad`])},o(I.value.ok?`✓`:`✗`)+` `+o(I.value.message),3)):f(``,!0)])],64)):f(``,!0),m(`label`,en,[m(`span`,null,o(e.$t(`dcwDetail.k1hgizn7051`)),1),h(m(`textarea`,{"onUpdate:modelValue":t[25]||=e=>Ba.value=e,class:`inp`,rows:`2`,placeholder:e.$t(`dcwDetail.k12bnyt9011`)},null,8,tn),[[y,Ba.value]])]),Ua.value?(r(),d(`p`,nn,o(Ua.value),1)):f(``,!0),m(`div`,rn,[m(`button`,{class:`aw-pill outline`,onClick:t[26]||=e=>j.value=!1},o(e.$t(`dcwDetail.k3xdnn052`)),1),m(`button`,{class:`aw-pill`,disabled:Ha.value,onClick:Ja},o(Ha.value?e.$t(`dcwDetail.k1bg4759156`):e.$t(`dcwDetail.k1bge46t173`)),9,an)])])])):f(``,!0),ne(u,{spinning:!a(b).loaded&&!a(b).error},{default:te(()=>[m(`section`,on,[m(`table`,sn,[m(`thead`,null,[m(`tr`,null,[m(`th`,null,o(e.$t(`dcwDetail.k1e2dtkt053`)),1),m(`th`,null,o(e.$t(`dcwDetail.k403cy054`)),1),m(`th`,null,o(e.$t(`dcwDetail.k42w8s055`)),1),m(`th`,null,o(e.$t(`dcwDetail.k1deqh0d056`)),1),m(`th`,null,o(e.$t(`dcwDetail.k1k79ec9057`)),1),m(`th`,null,o(e.$t(`dcwDetail.k1dexou6058`)),1),m(`th`,null,o(e.$t(`dcwDetail.k1b1nnaa059`)),1),m(`th`,null,o(e.$t(`dcwDetail.k1i8rtqt060`)),1),m(`th`,cn,o(e.$t(`dcwDetail.k40aa6061`)),1)])]),m(`tbody`,null,[(r(!0),d(s,null,n(D.value,n=>(r(),d(`tr`,{key:n.id,class:i({"node-paused":!n.enabled})},[m(`td`,null,[m(`span`,ln,o(n.id.slice(0,8)),1),m(`b`,null,o(n.name),1),m(`small`,un,o(va(n.templateRef)),1)]),m(`td`,null,[m(`button`,{class:i([`ctrl-toggle`,{on:n.enabled}]),disabled:Fa.value===n.id,title:n.enabled?`暂停该节点控制:下发将被拒绝`:`开启该节点控制:恢复可下发`,onClick:e=>Ia(n.id,!n.enabled)},[t[62]||=m(`span`,{class:`ct-dot`},null,-1),c(` `+o(n.enabled?e.$t(`dcwDetail.k3o3ib3159`):e.$t(`dcwDetail.k3n93ed062`)),1)],10,dn)]),m(`td`,null,[n.enabled?(r(),d(`span`,{key:1,class:i([`st-pill`,n.state])},o(_a[n.state]??n.state),3)):(r(),d(`span`,fn,o(e.$t(`dcwDetail.k3n93ed062`)),1))]),m(`td`,pn,[c(o(n.value==null?`--`:n.value.toFixed(n.decimals))+` `,1),m(`small`,null,o(n.unit),1),n.lastAckAt?(r(),d(`small`,mn,` · `+o(n.lastAckAt.slice(11,19)),1)):f(``,!0)]),m(`td`,null,[m(`div`,hn,[h(m(`input`,{"onUpdate:modelValue":e=>k[n.id]=e,type:`number`,class:`inp write-inp mono`,placeholder:`${n.min}~${n.max}`,min:n.min,max:n.max,step:10**-n.decimals,disabled:!n.enabled,title:n.enabled?``:`当前节点暂停:开启控制后方可设定`},null,8,gn),[[y,k[n.id],void 0,{number:!0}]]),m(`button`,{class:`mini-btn write-btn`,disabled:!n.enabled||Ma.value===n.id||k[n.id]==null||k[n.id]===``,title:n.enabled?`下发设定值`:`当前节点暂停:开启控制后方可设定`,onClick:e=>Pa(n.id,Number(k[n.id]))},o(Ma.value===n.id?e.$t(`dcwDetail.k3l3h80123`):e.$t(`dcwDetail.k3w6td174`)),9,_n)])]),m(`td`,vn,o(n.min)+` ~ `+o(n.max)+` `+o(n.unit),1),m(`td`,yn,o(n.holdIntervalMs==null?e.$t(`dcwDetail.k3zul4160`):`${n.holdIntervalMs}ms`),1),m(`td`,null,o(ga(n.deviceBindingId)),1),m(`td`,bn,[m(`button`,{class:`mini-btn danger`,onClick:e=>a(b).removeNode(n.id)},o(e.$t(`dcwDetail.k3xakp063`)),9,xn)])],2))),128)),a(b).loaded&&D.value.length===0?(r(),d(`tr`,Sn,[m(`td`,Cn,[m(`div`,wn,[m(`p`,Tn,o(e.$t(`dcwDetail.k1wtecyw064`)),1)])])])):f(``,!0)])])])]),_:1},8,[`spinning`]),m(`section`,En,[m(`div`,Dn,[m(`h3`,null,o(e.$t(`dcwDetail.k1j8w3hd065`)),1),m(`span`,On,o(O.value.length)+` `+o(e.$t(`dcwDetail.k1av3wgs143`))+` `+o(so.value.length)+` `+o(e.$t(`dcwDetail.k48grv027`)),1),m(`button`,{class:`pill-btn`,style:{"margin-left":`auto`},onClick:_o},o(e.$t(`dcwDetail.k1akm6dc066`)),1),m(`button`,{class:`mini-btn`,onClick:t[28]||=e=>ro.value=!0},o(e.$t(`dcwDetail.k1aka0ki067`)),1)]),m(`p`,kn,o(e.$t(`dcwDetail.k6bl2q8068`)),1),O.value.length?(r(),d(`div`,An,[m(`button`,{class:i([`prod-chip`,{on:K.value===``}]),onClick:t[29]||=e=>K.value=``},o(e.$t(`dcwDetail.k3x4t1069`)),3),(r(!0),d(s,null,n(O.value,t=>(r(),d(`button`,{key:t.id,class:i([`prod-chip`,{on:K.value===t.id}]),title:t.description,onClick:e=>K.value=t.id},[c(o(t.name)+` `,1),m(`span`,{class:`prod-del`,title:e.$t(`dcwDetail.k1bpfjgx012`),onClick:_(e=>a(b).removeProduct(t.id),[`stop`])},`×`,8,Mn)],10,jn))),128))])):(r(),d(`p`,Nn,o(e.$t(`dcwDetail.knov3zg070`)),1)),m(`div`,Pn,[(r(!0),d(s,null,n(so.value,t=>(r(),d(`div`,{key:t.id,class:`recipe-item`},[m(`div`,Fn,[m(`b`,null,o(t.name),1),m(`small`,In,o(co(t.productId)),1),m(`small`,Ln,o(t.id),1)]),t.description?(r(),d(`p`,Rn,o(t.description),1)):f(``,!0),m(`div`,zn,[(r(!0),d(s,null,n(t.params,(e,t)=>(r(),d(`span`,{key:t,class:`param-chip`},o(a(b).templates.find(t=>t.key===(e.templateRef??``).replace(`dcw-`,``))?.ch??e.templateRef)+` = `+o(e.value),1))),128)),(r(!0),d(s,null,n(t.daqWindows,(t,n)=>(r(),d(`span`,{key:`w-${n}`,class:`param-chip daqwin`,title:e.$t(`dcwDetail.k1l11api013`)},` ◎ `+o(wa(t.nodeId))+` ∈ [`+o(t.min??`-∞`)+`, `+o(t.max??`+∞`)+`] `,9,Bn))),128))]),m(`div`,Vn,[m(`button`,{class:`pill-btn`,onClick:e=>bo(t.id)},o(e.$t(`dcwDetail.k1497qvr071`)),9,Hn),m(`button`,{class:`mini-btn`,onClick:e=>vo(t.id)},o(e.$t(`dcwDetail.k45eb0072`)),9,Un),m(`button`,{class:`mini-btn danger`,onClick:e=>a(b).removeRecipe(t.id)},o(e.$t(`dcwDetail.k3xakp063`)),9,Wn)])]))),128)),so.value.length===0?(r(),d(`div`,Gn,o(e.$t(`dcwDetail.keko1xy073`)),1)):f(``,!0)]),Z.value?(r(),d(`div`,Kn,[c(o(e.$t(`dcwDetail.k1l3hrvp144`))+` `+o(Z.value.runId)+` `+o(e.$t(`dcwDetail.k1g3lh2v167`))+o(Z.value.ok)+`/`+o(Z.value.total)+` `+o(e.$t(`dcwDetail.k1bqci06149`))+` `,1),m(`button`,{class:`mini-btn`,style:{"margin-left":`10px`},disabled:$.value,onClick:t[30]||=e=>xo(Z.value.runId)},o($.value?e.$t(`dcwDetail.k1br0ij9161`):e.$t(`dcwDetail.kxwei5175`)),9,qn)])):f(``,!0),Ea.value.length?(r(),d(`div`,Jn,[m(`p`,Yn,o(e.$t(`dcwDetail.k1rjer8d074`)),1),m(`table`,Xn,[m(`thead`,null,[m(`tr`,null,[m(`th`,null,o(e.$t(`dcwDetail.k400lb075`)),1),m(`th`,null,o(e.$t(`dcwDetail.k48grv027`)),1),m(`th`,null,o(e.$t(`dcwDetail.k4497j076`)),1),m(`th`,null,o(e.$t(`dcwDetail.k1bqhtmu077`)),1),m(`th`,Zn,o(e.$t(`dcwDetail.k40aa6061`)),1)])]),m(`tbody`,null,[(r(!0),d(s,null,n([...Ea.value].reverse().slice(0,8),t=>(r(),d(`tr`,{key:t.id},[m(`td`,Qn,o(t.id),1),m(`td`,null,o(t.recipeName),1),m(`td`,$n,o(t.startedAt.slice(5,19))+` ~ `+o(t.endedAt?t.endedAt.slice(5,19):e.$t(`dcwDetail.k3vpfg9162`)),1),m(`td`,null,[m(`span`,{class:i([`st-pill`,t.results.every(e=>e.ok)?`ok`:`warn`])},o(t.results.filter(e=>e.ok).length)+`/`+o(t.results.length),3)]),m(`td`,er,[m(`button`,{class:`mini-btn`,disabled:$.value,onClick:e=>xo(t.id)},o(e.$t(`dcwDetail.k1dzwrdp078`)),9,tr),t.endedAt?f(``,!0):(r(),d(`button`,{key:0,class:`mini-btn`,onClick:e=>a(b).closeRun(t.id)},o(e.$t(`dcwDetail.k1blr7y7079`)),9,nr))])]))),128))])])])):f(``,!0),Q.value?(r(),d(`div`,{key:4,class:`modal-mask`,onClick:t[32]||=_(e=>Q.value=null,[`self`])},[m(`div`,rr,[m(`h3`,ir,o(e.$t(`dcwDetail.k11lq94k145`))+` `+o(Q.value.data.run.recipeName)+`(`+o(Q.value.runId)+`) `,1),m(`p`,ar,o(e.$t(`dcwDetail.k1me41w8080`)),1),m(`table`,or,[m(`thead`,null,[m(`tr`,null,[m(`th`,null,o(e.$t(`dcwDetail.k48hde081`)),1),m(`th`,null,o(e.$t(`dcwDetail.k45uio082`)),1),m(`th`,null,o(e.$t(`dcwDetail.k40t11083`)),1),m(`th`,null,o(e.$t(`dcwDetail.k3xuaw084`)),1),t[63]||=m(`th`,null,`min ~ max`,-1),m(`th`,null,o(e.$t(`dcwDetail.k4118o085`)),1)])]),m(`tbody`,null,[(r(!0),d(s,null,n(Q.value.data.daq,e=>(r(),d(`tr`,{key:e.nodeId},[m(`td`,null,[c(o(e.ch),1),m(`small`,sr,o(e.unit),1)]),m(`td`,null,o(e.nodeName),1),m(`td`,cr,o(e.latest),1),m(`td`,lr,o(e.avg),1),m(`td`,ur,o(e.min)+` ~ `+o(e.max),1),m(`td`,dr,o(e.cnt),1)]))),128)),Q.value.data.daq.length===0?(r(),d(`tr`,fr,[m(`td`,pr,o(e.$t(`dcwDetail.kd457ry086`)),1)])):f(``,!0)])]),m(`p`,mr,o(e.$t(`dcwDetail.k12b7cxs087`)),1),m(`table`,hr,[m(`thead`,null,[m(`tr`,null,[m(`th`,null,o(e.$t(`dcwDetail.k3xbjr088`)),1),m(`th`,null,o(e.$t(`dcwDetail.k45uio082`)),1),m(`th`,null,o(e.$t(`dcwDetail.k3ncbsh089`)),1),m(`th`,null,o(e.$t(`dcwDetail.k3lh3mz090`)),1),m(`th`,null,o(e.$t(`dcwDetail.k454pg091`)),1),m(`th`,null,o(e.$t(`dcwDetail.k40ieu092`)),1)])]),m(`tbody`,null,[(r(!0),d(s,null,n(Q.value.data.writes,(t,n)=>(r(),d(`tr`,{key:n},[m(`td`,null,o(t.param),1),m(`td`,null,o(t.nodeName),1),m(`td`,gr,o(t.eng),1),m(`td`,_r,o(t.raw),1),m(`td`,null,[m(`span`,{class:i([`st-pill`,t.ok?`ok`:`alarm`])},o(t.ok?`ACK`:e.$t(`dcwDetail.k3yit7139`)),3)]),m(`td`,vr,o(t.at.slice(5,19)),1)]))),128)),Q.value.data.writes.length===0?(r(),d(`tr`,yr,[m(`td`,br,o(e.$t(`dcwDetail.knzcp8i093`)),1)])):f(``,!0)])]),m(`div`,xr,[m(`button`,{class:`aw-pill outline`,onClick:t[31]||=e=>Q.value=null},o(e.$t(`dcwDetail.k3x62t043`)),1)])])])):f(``,!0)]),J.value?(r(),d(`div`,{key:4,class:`modal-mask`,onClick:t[39]||=_(e=>J.value=!1,[`self`])},[m(`div`,Sr,[m(`h3`,Cr,o(ho.value?e.$t(`dcwDetail.k1iiwk0i163`):e.$t(`dcwDetail.k1efq0r9176`)),1),m(`div`,wr,[m(`label`,Tr,[m(`span`,null,[c(o(e.$t(`dcwDetail.k1dw4fzf094`)),1),t[64]||=m(`em`,null,`*`,-1)]),h(m(`select`,{"onUpdate:modelValue":t[33]||=e=>X.productId=e,class:`inp`},[(r(!0),d(s,null,n(O.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,Er))),128))],512),[[v,X.productId]])]),m(`label`,Dr,[m(`span`,null,[c(o(e.$t(`dcwDetail.k1l3f8so095`)),1),t[65]||=m(`em`,null,`*`,-1)]),h(m(`input`,{"onUpdate:modelValue":t[34]||=e=>X.name=e,class:`inp`,placeholder:e.$t(`dcwDetail.k12c11vm014`)},null,8,Or),[[y,X.name]])]),m(`label`,kr,[m(`span`,null,o(e.$t(`dcwDetail.k40gkk096`)),1),h(m(`input`,{"onUpdate:modelValue":t[35]||=e=>X.description=e,class:`inp`,placeholder:e.$t(`dcwDetail.k1hxx8hy015`)},null,8,Ar),[[y,X.description]])])]),m(`p`,jr,o(e.$t(`dcwDetail.ka1kfgh097`)),1),(r(!0),d(s,null,n(X.params,(i,a)=>(r(),d(`div`,{key:a,class:`param-row`},[m(`label`,Mr,[m(`span`,null,o(e.$t(`dcwDetail.k1e2dtkt053`)),1),h(m(`select`,{"onUpdate:modelValue":e=>i.nodeId=e,class:`inp`},[(r(!0),d(s,null,n(D.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name)+`(`+o(va(e.templateRef))+` · `+o(e.min)+`~`+o(e.max)+` `+o(e.unit)+`) `,9,Pr))),128))],8,Nr),[[v,i.nodeId]])]),m(`label`,Fr,[m(`span`,null,[c(o(e.$t(`dcwDetail.k3renp2098`)),1),t[66]||=m(`em`,null,`*`,-1)]),h(m(`input`,{"onUpdate:modelValue":e=>i.value=e,type:`number`,class:`inp`,step:.1},null,8,Ir),[[y,i.value,void 0,{number:!0}]])]),m(`label`,Lr,[m(`span`,null,o(e.$t(`dcwDetail.k134rw3b146`))+o(ya(i.nodeId)??`-`)+`)`,1),h(m(`input`,{"onUpdate:modelValue":e=>i.min=e,type:`number`,class:`inp`,step:.1,placeholder:e.$t(`dcwDetail.k5vew9z016`)},null,8,Rr),[[y,i.min,void 0,{number:!0}]])]),m(`label`,zr,[m(`span`,null,o(e.$t(`dcwDetail.khrv911147`))+o(ba(i.nodeId)??`-`)+`)`,1),h(m(`input`,{"onUpdate:modelValue":e=>i.max=e,type:`number`,class:`inp`,step:.1,placeholder:e.$t(`dcwDetail.kzoh5pr017`)},null,8,Br),[[y,i.max,void 0,{number:!0}]])]),m(`button`,{class:`mini-btn danger param-del`,onClick:e=>X.params.splice(a,1)},o(e.$t(`dcwDetail.k44idg099`)),9,Vr)]))),128)),m(`button`,{class:`mini-btn`,onClick:t[36]||=e=>X.params.push({nodeId:D.value[0]?.id??``,value:``,min:``,max:``})},o(e.$t(`dcwDetail.k1broh7h100`)),1),m(`p`,Hr,o(e.$t(`dcwDetail.k1h5gues101`)),1),(r(!0),d(s,null,n(X.daqWindows,(t,i)=>(r(),d(`div`,{key:`dw-${i}`,class:`param-row`},[m(`label`,Ur,[m(`span`,null,o(e.$t(`dcwDetail.k1empnnb102`)),1),h(m(`select`,{"onUpdate:modelValue":e=>t.nodeId=e,class:`inp`},[(r(!0),d(s,null,n(w.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name)+`(`+o(e.min)+`~`+o(e.max)+` `+o(e.unit)+`) `,9,Gr))),128))],8,Wr),[[v,t.nodeId]])]),m(`label`,Kr,[m(`span`,null,o(e.$t(`dcwDetail.kqm08ap103`)),1),h(m(`input`,{"onUpdate:modelValue":e=>t.min=e,type:`number`,class:`inp`,step:.1},null,8,qr),[[y,t.min,void 0,{number:!0}]])]),m(`label`,Jr,[m(`span`,null,o(e.$t(`dcwDetail.kpypf8g104`)),1),h(m(`input`,{"onUpdate:modelValue":e=>t.max=e,type:`number`,class:`inp`,step:.1},null,8,Yr),[[y,t.max,void 0,{number:!0}]])]),m(`button`,{class:`mini-btn danger param-del`,onClick:e=>X.daqWindows.splice(i,1)},o(e.$t(`dcwDetail.k44idg099`)),9,Xr)]))),128)),m(`button`,{class:`mini-btn`,disabled:w.value.length===0,title:w.value.length===0?`本产线暂无数采节点`:``,onClick:t[37]||=e=>X.daqWindows.push({nodeId:w.value[0]?.id??``,min:``,max:``})},o(e.$t(`dcwDetail.kv1de1p105`)),9,Zr),Y.value?(r(),d(`p`,Qr,o(Y.value),1)):f(``,!0),m(`div`,$r,[m(`button`,{class:`aw-pill outline`,onClick:t[38]||=e=>J.value=!1},o(e.$t(`dcwDetail.k3xdnn052`)),1),m(`button`,{class:`pill-btn`,disabled:go.value,onClick:yo},o(go.value?e.$t(`dcwDetail.k1b38d59164`):e.$t(`dcwDetail.k1b3kwg0177`)),9,ei)])])])):f(``,!0),m(`section`,ti,[m(`p`,ni,o(e.$t(`dcwDetail.k1us3jse106`)),1),m(`div`,ri,[m(`label`,ii,[m(`span`,null,o(e.$t(`dcwDetail.k3waz1025`)),1),h(m(`select`,{"onUpdate:modelValue":t[40]||=e=>q.productId=e,class:`inp`,onChange:t[41]||=e=>q.recipeId=``},[m(`option`,ai,o(e.$t(`dcwDetail.k1bkl1jx107`)),1),(r(!0),d(s,null,n(O.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,oi))),128))],544),[[v,q.productId]])]),m(`label`,si,[m(`span`,null,o(e.$t(`dcwDetail.k48grv027`)),1),h(m(`select`,{"onUpdate:modelValue":t[42]||=e=>q.recipeId=e,class:`inp`,disabled:!q.productId},[m(`option`,li,o(e.$t(`dcwDetail.k1bkx7cr108`)),1),(r(!0),d(s,null,n(so.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,ui))),128))],8,ci),[[v,q.recipeId]])]),m(`label`,di,[m(`span`,null,o(e.$t(`dcwDetail.k1demcae109`)),1),h(m(`select`,{"onUpdate:modelValue":t[43]||=e=>q.paramKey=e,class:`inp`},[m(`option`,fi,o(e.$t(`dcwDetail.k1bkx7ya110`)),1),(r(!0),d(s,null,n(mo.value,e=>(r(),d(`option`,{key:e,value:e},o(e),9,pi))),128))],512),[[v,q.paramKey]])]),m(`label`,mi,[m(`span`,null,o(e.$t(`dcwDetail.k45uio082`)),1),h(m(`select`,{"onUpdate:modelValue":t[44]||=e=>q.nodeId=e,class:`inp`},[m(`option`,hi,o(e.$t(`dcwDetail.k1bkul3k111`)),1),(r(!0),d(s,null,n(w.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,gi))),128))],512),[[v,q.nodeId]])]),m(`label`,_i,[m(`span`,null,o(e.$t(`dcwDetail.kx2ojn0112`)),1),h(m(`input`,{"onUpdate:modelValue":t[45]||=e=>q.lastMin=e,type:`number`,min:`1`,max:`10080`,class:`inp`},null,512),[[y,q.lastMin,void 0,{number:!0}]])]),m(`label`,vi,[m(`span`,null,o(e.$t(`dcwDetail.kjvnvn4113`)),1),h(m(`input`,{"onUpdate:modelValue":t[46]||=e=>q.bucketMs=e,type:`number`,min:`0`,step:`100`,class:`inp`},null,512),[[y,q.bucketMs,void 0,{number:!0}]])]),m(`div`,yi,[m(`button`,{class:`pill-btn`,disabled:uo.value,onClick:po},o(uo.value?e.$t(`dcwDetail.k1eyx09r165`):e.$t(`dcwDetail.k416ek178`)),9,bi)])]),fo.value?(r(),d(`p`,xi,o(fo.value),1)):f(``,!0),lo.value?(r(),d(`div`,Si,[m(`table`,Ci,[m(`thead`,null,[m(`tr`,null,[m(`th`,null,o(e.$t(`dcwDetail.k48hde081`)),1),m(`th`,null,o(e.$t(`dcwDetail.k45uio082`)),1),m(`th`,null,o(e.$t(`dcwDetail.k42kcu114`)),1),m(`th`,null,o(e.$t(`dcwDetail.k49ujb115`)),1),m(`th`,null,o(e.$t(`dcwDetail.k40pvw116`)),1),m(`th`,null,o(e.$t(`dcwDetail.k3xho3117`)),1)])]),m(`tbody`,null,[(r(!0),d(s,null,n(lo.value.channels,e=>(r(),d(`tr`,{key:e.nodeId},[m(`td`,null,[c(o(e.ch),1),m(`small`,wi,o(e.unit),1)]),m(`td`,null,o(e.nodeName),1),m(`td`,Ti,o(e.points.length),1),m(`td`,Ei,o(So(e.points[0])),1),m(`td`,Di,o(So(e.points[e.points.length-1])),1),m(`td`,Oi,o(new Date(e.points[0]?.at??0).toLocaleTimeString())+` ~ `+o(new Date(e.points[e.points.length-1]?.at??0).toLocaleTimeString()),1)]))),128))])])])):f(``,!0)]),Da.value.length?(r(),d(`section`,ki,[m(`p`,Ai,o(e.$t(`dcwDetail.kw7ym9b148`))+` `+o(Da.value.length)+` `+o(e.$t(`dcwDetail.k40bfz150`)),1),m(`table`,ji,[m(`tbody`,null,[(r(!0),d(s,null,n(Da.value.slice(0,12),t=>(r(),d(`tr`,{key:t.id},[m(`td`,Mi,o(t.at.slice(5,19)),1),m(`td`,null,o(t.param),1),m(`td`,null,o(t.nodeName),1),m(`td`,Ni,o(t.eng),1),m(`td`,Pi,` raw `+o(t.raw??`-`),1),m(`td`,null,[m(`span`,{class:i([`st-pill`,t.ok?`ok`:`alarm`])},o(t.ok?`ACK`:e.$t(`dcwDetail.k3yit7139`)),3)]),m(`td`,Fi,o(t.recipeRunId?e.$t(`dcwDetail.k6vgks7181`,{p0:t.recipeRunId}):`手动`),1)]))),128))])])])):f(``,!0),ro.value?(r(),d(`div`,{key:6,class:`modal-mask`,onClick:t[50]||=_(e=>ro.value=!1,[`self`])},[m(`div`,Ii,[m(`h3`,Li,o(e.$t(`dcwDetail.k1efduyf118`)),1),m(`div`,Ri,[m(`label`,zi,[m(`span`,null,[c(o(e.$t(`dcwDetail.k1avjrl6119`)),1),t[67]||=m(`em`,null,`*`,-1)]),h(m(`input`,{"onUpdate:modelValue":t[47]||=e=>G.name=e,class:`inp`,placeholder:e.$t(`dcwDetail.k12c11vm014`)},null,8,Bi),[[y,G.name]])]),m(`label`,Vi,[m(`span`,null,o(e.$t(`dcwDetail.k40gkk096`)),1),h(m(`input`,{"onUpdate:modelValue":t[48]||=e=>G.description=e,class:`inp`,placeholder:e.$t(`dcwDetail.k1hxx8hy015`)},null,8,Hi),[[y,G.description]])])]),ao.value?(r(),d(`p`,Ui,o(ao.value),1)):f(``,!0),m(`div`,Wi,[m(`button`,{class:`aw-pill outline`,onClick:t[49]||=e=>ro.value=!1},o(e.$t(`dcwDetail.k3xdnn052`)),1),m(`button`,{class:`pill-btn`,disabled:io.value,onClick:oo},o(io.value?e.$t(`dcwDetail.k1bg4759156`):e.$t(`dcwDetail.k1bg4kn6179`)),9,Gi)])])])):f(``,!0),a(b).error?(r(),d(`p`,Ki,[c(o(a(b).error)+`(`,1),ne(l,{to:`/workshop`},{default:te(()=>[c(o(e.$t(`dcwDetail.k1bhhheq120`)),1)]),_:1}),t[68]||=c(`) `,-1)])):f(``,!0),m(`section`,qi,[m(`div`,Ji,[m(`b`,null,o(e.$t(`dcwDetail.k1ledgt001`)),1),h(m(`select`,{"onUpdate:modelValue":t[51]||=e=>T.value=e,class:`inp`,onChange:Sa},[m(`option`,Yi,o(e.$t(`dcwDetail.k1ledgs001`)),1),(r(!0),d(s,null,n(D.value,e=>(r(),d(`option`,{key:e.id,value:e.id},o(e.name),9,Xi))),128))],544),[[v,T.value]])]),E.value?(r(),d(s,{key:0},[m(`div`,Zi,[m(`div`,Qi,[m(`small`,null,o(e.$t(`dcwDetail.k1ledgv001`)),1),m(`b`,$i,o(E.value.current??`--`),1)]),m(`div`,ea,[m(`small`,null,o(e.$t(`dcwDetail.k1ledgv002`)),1),m(`b`,ta,o(E.value.recipeTarget??`--`),1)]),m(`div`,na,[m(`small`,null,o(e.$t(`dcwDetail.k1ledgv003`)),1),m(`b`,ra,o(E.value.lastGood??`--`),1)]),m(`button`,{class:`mini-btn`,onClick:Sa},o(e.$t(`dcwDetail.k1ledga001`)),1),m(`button`,{class:`mini-btn danger`,onClick:Ca},o(e.$t(`dcwDetail.k1ledga002`)),1)]),m(`div`,ia,[m(`div`,aa,[m(`small`,oa,o(e.$t(`dcwDetail.k1ledgh001`)),1),m(`ul`,sa,[(r(!0),d(s,null,n(E.value.journal,e=>(r(),d(`li`,{key:e.id},o(e.at.slice(5,16).replace(`T`,` `))+` [`+o(e.source)+`] `+o(e.prevValue??`?`)+` → `+o(e.newValue),1))),128))])]),m(`div`,ca,[m(`small`,la,o(e.$t(`dcwDetail.k1ledgr001`)),1),m(`ul`,ua,[(r(!0),d(s,null,n(E.value.records,e=>(r(),d(`li`,{key:e.id,class:`ledger-rec`},[m(`span`,{class:i([`rec-st`,e.status])},o(e.status),3),m(`span`,da,o(e.params[0]?.from??`?`)+` → `+o(e.params[0]?.to),1),m(`small`,null,o(e.judge?`${e.judge.verdict}(${e.judge.by})`:e.status===`open`?`open`:e.closedBy??``),1)]))),128))])])])],64)):f(``,!0)])]))}}}),[[`__scopeId`,`data-v-050cee18`]]);export{fa as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.model-preview-3d[data-v-b29ffdbe]{border:1px solid var(--hud-line,#263340);background:radial-gradient(120% 90% at 50% 20%,#41c8f41f,#0000 62%),linear-gradient(#0b121b,#0e141d);border-radius:2px;width:100%;min-height:40px;position:relative;overflow:hidden}.mp-loading[data-v-b29ffdbe]{place-items:center;display:grid;position:absolute;inset:0}.mp-spin[data-v-b29ffdbe]{border:2px solid #41c8f440;border-top-color:#41c8f4;border-radius:50%;width:14px;height:14px;animation:.8s linear infinite mp-spin-b29ffdbe}@keyframes mp-spin-b29ffdbe{to{transform:rotate(1turn)}}.mp-failed[data-v-b29ffdbe]{font-family:var(--font-mono);letter-spacing:.12em;color:var(--hud-dim,#7f919e);place-items:center;font-size:9px;display:grid;position:absolute;inset:0}.asset-lib[data-v-c83e9503]{width:184px;font-family:var(--font-body);flex-direction:column;flex:none;gap:8px;padding:0 0 10px;display:flex}.lib-head[data-v-c83e9503]{border-bottom:1px solid #26334073;align-items:center;gap:7px;padding:10px 12px 6px;display:flex}.head-title[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.16em;color:var(--hud-text,#d9e4ee);white-space:nowrap;font-size:10px;font-weight:600}.head-hint[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-faint,#5b6c7b);white-space:nowrap;margin-left:auto;font-size:8.5px}.upload-box[data-v-c83e9503]{transition:border-color .16s var(--hud-ease,ease), background .16s var(--hud-ease,ease);background:#0b101866;border:1px dashed #263340cc;border-radius:2px;flex-direction:column;gap:7px;margin:8px 10px 0;padding:7px;display:flex}.upload-box.drop[data-v-c83e9503]{border-color:var(--hud-accent,#4da3ff);background:#4da3ff14}.upload-row[data-v-c83e9503]{cursor:pointer;align-items:center;gap:6px;min-height:26px;display:flex}.file-input[data-v-c83e9503]{display:none}.upload-name[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;font-size:10px;display:inline-flex;overflow:hidden}.upload-ico[data-v-c83e9503]{color:var(--hud-accent,#4da3ff);font-size:13px}.drop-hint[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-accent,#4da3ff);align-items:center;gap:5px;padding:2px 0 4px;font-size:10px;display:inline-flex}.upload-file-tag[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);border:1px solid var(--hud-line,#263340);border-radius:2px;padding:3px 6px;font-size:9.5px}.upload-actions[data-v-c83e9503]{align-items:center;gap:6px;display:flex}.upload-btn[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-text,#d9e4ee);background:var(--hud-panel-raised,#141b26);border:1px solid var(--hud-line,#263340);cursor:pointer;transition:border-color .14s var(--hud-ease,ease), color .14s var(--hud-ease,ease);border-radius:2px;padding:5px 10px;font-size:10px;font-weight:600}.upload-btn[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-accent,#4da3ff);color:var(--hud-accent,#4da3ff)}.upload-btn[data-v-c83e9503]:disabled{opacity:.45;cursor:default}.upload-btn.go[data-v-c83e9503]{color:var(--hud-amber,#f5a742);background:#f5a74214;border-color:#f5a7428c}.upload-btn.go[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-amber,#f5a742);color:var(--hud-amber,#f5a742);background:#f5a74229}.mini-err[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-danger,#ff6b5c);font-size:9.5px}.mini-err[data-v-c83e9503],.mini-msg[data-v-c83e9503]{font-size:10px}.mini-msg[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-dim,#8496a5);padding:0 10px}.lib-grid[data-v-c83e9503]{flex-direction:column;gap:4px;max-height:42vh;padding:6px 10px 2px;display:flex;overflow:hidden auto}.model-card[data-v-c83e9503]{cursor:grab;transition:background .14s var(--hud-ease,ease);background:#141b26a6;border:0;border-radius:2px;flex-direction:column;align-items:stretch;gap:4px;padding:6px;display:flex;position:relative}.model-card[data-v-c83e9503]:hover{background:var(--hud-panel-hover,#1a2432)}.model-card[data-v-c83e9503]:active{cursor:grabbing}.model-card .model-preview-3d[data-v-c83e9503]{margin-bottom:2px}.model-name[data-v-c83e9503]{color:var(--hud-text,#d9e4ee);text-align:left;text-overflow:ellipsis;white-space:nowrap;padding:0 2px;font-size:11px;font-weight:600;overflow:hidden}.model-badge[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint,#5b6c7b);text-align:left;padding:0 2px;font-size:8.5px}.card-actions[data-v-c83e9503]{justify-content:flex-end;gap:4px;display:flex}.card-btn[data-v-c83e9503]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-text,#d9e4ee);border:1px solid var(--hud-line,#263340);cursor:pointer;transition:border-color .14s var(--hud-ease,ease), color .14s var(--hud-ease,ease);background:0 0;border-radius:2px;padding:2px 8px;font-size:10px;font-weight:600}.card-btn[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-accent,#4da3ff);color:var(--hud-accent,#4da3ff)}.card-btn.danger[data-v-c83e9503]{color:var(--hud-danger,#ff6b5c)}.card-btn.danger[data-v-c83e9503]:hover:not(:disabled){border-color:var(--hud-danger,#ff6b5c);color:var(--hud-danger,#ff6b5c)}.card-btn[data-v-c83e9503]:disabled{opacity:.45;cursor:default}.model-img[data-v-c83e9503]{-o-object-fit:contain;object-fit:contain;pointer-events:none;width:46px;height:68px}.model-img.glb[data-v-c83e9503]{background:var(--hud-input,#0b1018);border:1px dashed var(--hud-line,#263340);border-radius:2px;justify-content:center;align-items:center;width:100%;height:44px;display:inline-flex}.glb-cube[data-v-c83e9503]{color:var(--hud-faint,#5b6c7b);font-size:24px;line-height:1}.lib-note[data-v-c83e9503]{font-family:var(--font-mono);color:var(--hud-faint,#5b6c7b);align-items:center;gap:7px;padding:8px 2px;font-size:9.5px;display:flex}.loading-dot[data-v-c83e9503]{border:2px solid var(--hud-line,#263340);border-top-color:var(--hud-accent,#4da3ff);border-radius:50%;width:12px;height:12px;animation:.8s linear infinite spin-c83e9503}@keyframes spin-c83e9503{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.loading-dot[data-v-c83e9503]{animation:none}}.twin-panel[data-v-9a00109c]{width:auto;box-shadow:none;background:0 0;border:0;border-radius:0;flex-direction:column;flex:none;gap:8px;padding:0;display:flex}.twin-head[data-v-9a00109c]{border-bottom:1px solid #26334073;align-items:center;gap:8px;padding:10px 12px 6px;display:flex}.twin-error[data-v-9a00109c]{color:#ffb4b4;word-break:break-all;background:#ff6b6b1a;border:1px solid #ff6b6b59;border-radius:8px;padding:7px 10px;font-size:11px;line-height:1.5}.twin-kicker[data-v-9a00109c]{font-family:var(--font-mono);letter-spacing:.16em;color:var(--hud-text,#d9e4ee);font-size:10px;font-weight:600}.twin-count[data-v-9a00109c]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-dim,#8496a5);margin-left:auto;font-size:10px}.twin-empty[data-v-9a00109c]{padding:10px}.twin-empty-frame[data-v-9a00109c]{border:1px dashed var(--hud-line);flex-direction:column;gap:4px;padding:12px 10px;display:flex}.twin-empty-title[data-v-9a00109c]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-text);font-size:11px}.twin-empty-sub[data-v-9a00109c]{color:var(--hud-dim);font-size:10px;line-height:1.6}.twin-list[data-v-9a00109c]{flex-direction:column;gap:4px;max-height:46vh;padding:4px 0 10px;display:flex;overflow:hidden auto}.twin-card[data-v-9a00109c]{text-align:left;cursor:pointer;background:#141b26a6;border:0;border-radius:2px;flex-direction:column;gap:6px;margin:0 10px;padding:8px 9px;transition:background .16s;display:flex}.twin-card[data-v-9a00109c]:hover{background:var(--hud-panel-hover)}.twin-card[data-v-9a00109c]:active{background:var(--hud-panel-raised)}.twin-card:hover .twin-name[data-v-9a00109c]{color:#e8f1f8}.twin-card.daq[data-v-9a00109c]{background:#35e0a00f;border:1px solid #35e0a052}.twin-card.daq[data-v-9a00109c]:hover{background:#35e0a01c;border-color:#35e0a080}.twin-card.daq .twin-code[data-v-9a00109c],.twin-card.daq .twin-model-tag[data-v-9a00109c]{color:var(--hud-accent,#35e0a0)}.twin-row[data-v-9a00109c]{align-items:center;gap:8px;min-width:0;display:flex}.twin-model-tag[data-v-9a00109c]{min-width:30px;font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint);flex:none;font-size:9px;font-weight:600}.twin-idbar[data-v-9a00109c]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.twin-name[data-v-9a00109c]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;font-weight:600;overflow:hidden}.twin-code[data-v-9a00109c]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-dim);font-size:9px}.twin-del[data-v-9a00109c]{width:18px;height:18px;font-family:var(--font-mono);color:var(--hud-dim,#8496a5);border:1px solid var(--hud-line,#263340);cursor:pointer;background:0 0;border-radius:2px;flex:none;font-size:9px;line-height:1;transition:border-color .14s,color .14s,background .14s}.twin-del[data-v-9a00109c]:hover:not(:disabled){border-color:var(--hud-danger,#ff6b5c);color:var(--hud-danger,#ff6b5c)}.twin-del.armed[data-v-9a00109c]{color:#1a0d0a;background:var(--hud-danger,#ff6b5c);border-color:var(--hud-danger,#ff6b5c);width:auto;padding:0 5px}.twin-del[data-v-9a00109c]:disabled{opacity:.4;cursor:default}.twin-state[data-v-9a00109c]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-dim);border:1px solid var(--hud-line);border-radius:2px;flex:none;align-items:center;gap:5px;padding:2px 5px;font-size:8.5px;display:inline-flex}.twin-state.s-alarm[data-v-9a00109c]{color:var(--hud-danger);border-color:#ff6b5c80}.twin-state.s-running[data-v-9a00109c]{color:var(--hud-ok);border-color:#7fd4a066}.twin-state-dot[data-v-9a00109c]{border-radius:50%;width:5px;height:5px}.twin-tele[data-v-9a00109c]{border-top:1px dashed var(--hud-line);grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 10px;margin:0 0 2px;padding-top:6px;display:grid}.tele-item[data-v-9a00109c]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-dim);justify-content:space-between;gap:6px;min-width:0;font-size:9.5px;display:flex}.tele-item em[data-v-9a00109c]{text-overflow:ellipsis;font-style:normal;overflow:hidden}.tele-item b[data-v-9a00109c]{color:var(--hud-text);font-weight:500}.twin-daq[data-v-9a00109c]{border-top:1px dashed #35e0a04d;flex-direction:column;gap:2px;margin:0 0 2px;padding-top:6px;display:flex}.daq-item[data-v-9a00109c]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-accent,#35e0a0);justify-content:space-between;align-items:baseline;gap:6px;min-width:0;font-size:9.5px;display:flex}.daq-item em[data-v-9a00109c]{text-overflow:ellipsis;white-space:nowrap;opacity:.85;font-style:normal;overflow:hidden}.daq-item b[data-v-9a00109c]{white-space:nowrap;font-size:10.5px;font-weight:700}.daq-item b i[data-v-9a00109c]{opacity:.75;margin-left:2px;font-size:8.5px;font-style:normal;font-weight:500}.daq-item.alarm[data-v-9a00109c]{color:var(--hud-amber,#f6c453)}.twin-dcw[data-v-9a00109c]{border-top:1px dashed #f0a04c59;flex-direction:column;gap:6px;margin:0 0 2px;padding-top:6px;display:flex}.dcw-item[data-v-9a00109c]{flex-direction:column;gap:3px;display:flex}.dcw-head[data-v-9a00109c]{font-family:var(--font-mono);color:var(--hud-dim);justify-content:space-between;align-items:baseline;gap:6px;font-size:9.5px;display:flex}.dcw-head em[data-v-9a00109c]{text-overflow:ellipsis;white-space:nowrap;font-style:normal;overflow:hidden}.dcw-src[data-v-9a00109c]{color:var(--hud-amber,#f6c453);border:1px solid #f0a04c80;border-radius:2px;margin-left:4px;padding:0 3px;font-size:8px;font-style:normal}.dcw-set[data-v-9a00109c]{font-variant-numeric:tabular-nums;color:var(--hud-amber,#f6c453);white-space:nowrap;font-size:12px;font-weight:700}.dcw-set i[data-v-9a00109c]{opacity:.75;margin-left:2px;font-size:8.5px;font-style:normal;font-weight:500}.dcw-win[data-v-9a00109c]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);letter-spacing:.04em;font-size:8.5px}.dcw-win span[data-v-9a00109c]{border-bottom:1px dotted var(--hud-line);padding-bottom:1px}.dcw-ctrl[data-v-9a00109c]{align-items:center;gap:4px;display:flex}.dcw-ctrl .ctrl-input[data-v-9a00109c]{flex:1;width:auto;min-width:0}.dcw-send[data-v-9a00109c]{color:var(--hud-amber,#f6c453);border-color:#f0a04c80;flex:none}.dcw-send[data-v-9a00109c]:hover:not(:disabled){color:var(--hud-amber,#f6c453);border-color:var(--hud-amber,#f6c453);background:#f0a04c1f}.dcw-err[data-v-9a00109c]{font-family:var(--font-mono);color:var(--hud-danger,#ff6b5c);font-size:8.5px}.ctrl-btn[data-v-9a00109c]{letter-spacing:.06em;font-size:9px;font-weight:600;font-family:var(--font-mono);color:var(--hud-text);border:1px solid var(--hud-line);cursor:pointer;background:0 0;border-radius:2px;padding:3px 7px;transition:border-color .14s,color .14s,background .14s}.ctrl-btn[data-v-9a00109c]:hover:not(:disabled){border-color:var(--hud-accent);color:var(--hud-accent)}.ctrl-btn[data-v-9a00109c]:disabled{opacity:.45;cursor:default}.ctrl-input[data-v-9a00109c]{width:48px;font-family:var(--font-mono);border:1px solid var(--hud-line);background:var(--hud-input);color:var(--hud-text);font-variant-numeric:tabular-nums;border-radius:2px;padding:3px 6px;font-size:10px}.ctrl-input[data-v-9a00109c]:focus{border-color:var(--hud-accent);outline:none}.twin-err[data-v-9a00109c]{color:var(--hud-danger);padding:0 10px 8px;font-size:9.5px}.town-view[data-v-771c2c29]{--hud-bg:#070b13;--hud-panel:#0d1420;--hud-panel-2:#111a2b;--hud-panel-raised:#152034;--hud-panel-hover:#16233a;--hud-line:#1d2a42;--hud-line-soft:#16202f;--hud-line-hi:#2c4568;--hud-input:#0a111d;--hud-text:#e8eef8;--hud-dim:#8fa0b5;--hud-faint:#5f6e84;--hud-accent:#35e0a0;--hud-accent-dim:#1f9e6e;--hud-cyan:#41c8f4;--hud-amber:#f6c453;--hud-ok:#35e0a0;--hud-danger:#ff6b6b;--hud-shadow:0 16px 40px #0000008c;--hud-ease:cubic-bezier(.22, .68, .36, 1);--hud-r-sm:8px;--hud-r-md:10px;--hud-r-lg:12px;background:var(--hud-bg);height:100%;min-height:0;color:var(--hud-text);font-family:var(--font-body);flex-direction:column;font-size:13px;display:flex}.topnav[data-v-771c2c29]{border-bottom:1px solid var(--hud-line-soft);z-index:60;background:linear-gradient(#0c1320,#0a101b);flex:none;align-items:center;gap:14px;height:50px;padding:0 16px;display:flex;position:relative}.topnav[data-v-771c2c29]:after{content:"";pointer-events:none;background:linear-gradient(90deg,#0000 4%,#35e0a059 50%,#0000 96%);height:1px;position:absolute;bottom:-1px;left:0;right:0}.brand[data-v-771c2c29]{align-items:center;gap:10px;min-width:230px;display:flex}.brand-glyph[data-v-771c2c29]{flex:none;width:26px;height:26px}.brand-name[data-v-771c2c29]{letter-spacing:.06em;font-size:14.5px;font-weight:800}.brand-name em[data-v-771c2c29]{color:var(--hud-accent);font-style:normal}.brand-sub[data-v-771c2c29]{color:var(--hud-faint);letter-spacing:.18em;margin-top:2px;font-size:10px}.nav-tabs[data-v-771c2c29]{align-items:center;gap:10px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.nav-action[data-v-771c2c29]{border-radius:var(--hud-r-sm);height:32px;color:var(--hud-text);transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease);background:0 0;border:1px solid #27395c;padding:0 14px;font-size:12px;font-weight:600}.nav-action[data-v-771c2c29]:hover{background:#14203a;border-color:#33507c}.save-chip[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.08em;border:1px solid var(--hud-line);color:var(--hud-dim);white-space:nowrap;border-radius:6px;padding:3px 9px;font-size:10px}.save-chip.s-dirty[data-v-771c2c29]{color:var(--hud-amber);border-color:#f6c45366}.save-chip.s-saving[data-v-771c2c29]{color:var(--hud-dim)}.save-chip.s-saved[data-v-771c2c29]{color:var(--hud-accent);border-color:#35e0a066}.save-chip.s-error[data-v-771c2c29]{color:var(--hud-danger);border-color:#ff6b6b66}.nav-right[data-v-771c2c29]{align-items:center;gap:10px;margin-left:auto;display:flex}.nav-chip[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-dim);border:1px solid var(--hud-line);font-variant-numeric:tabular-nums;border-radius:6px;padding:2px 8px;font-size:10.5px}.avatar-chip[data-v-771c2c29]{border:1px solid var(--hud-line-soft);background:#0e1626;border-radius:999px;align-items:center;gap:8px;padding:4px 10px 4px 4px;display:flex}.avatar-chip span[data-v-771c2c29]{color:var(--hud-text);font-size:12px}.avatar-fallback[data-v-771c2c29]{color:#04120c;background:linear-gradient(135deg,#1f9e6e,#41c8f4);border-radius:50%;place-items:center;width:24px;height:24px;font-size:10px;font-weight:700;display:grid}.seg[data-v-771c2c29]{border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);background:#0a111d;padding:2px;display:inline-flex}.seg button[data-v-771c2c29]{color:var(--hud-dim);transition:background .15s var(--hud-ease), color .15s var(--hud-ease);border-radius:6px;padding:4px 16px;font-size:11.5px;font-weight:600}.seg button.on[data-v-771c2c29]{background:var(--hud-accent);color:#04120c;box-shadow:0 0 12px #35e0a059}.app[data-v-771c2c29]{flex:1;grid-template-columns:250px minmax(540px,1fr) 342px;min-height:0;display:grid}.rail[data-v-771c2c29]{background:linear-gradient(#0a101c,#080d16);flex-direction:column;gap:10px;min-height:0;padding:10px;display:flex;overflow:hidden auto}.rail-left[data-v-771c2c29]{border-right:1px solid var(--hud-line-soft)}.rail-right[data-v-771c2c29]{border-left:1px solid var(--hud-line-soft)}.rail[data-v-771c2c29]::-webkit-scrollbar{width:8px}.rail[data-v-771c2c29]::-webkit-scrollbar-thumb{background:#1c2942;border:2px solid #080d16;border-radius:4px}.rail[data-v-771c2c29]::-webkit-scrollbar-track{background:0 0}.ins-enter-active[data-v-771c2c29]{transition:opacity .2s var(--hud-ease), transform .2s var(--hud-ease)}.ins-leave-active[data-v-771c2c29]{transition:opacity .12s}.ins-enter-from[data-v-771c2c29]{opacity:0;transform:translate(12px)}.ins-leave-to[data-v-771c2c29]{opacity:0}.panel[data-v-771c2c29]{border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);background:linear-gradient(#101827,#0d1420);flex:none;padding:12px;position:relative;box-shadow:inset 0 1px #8fb0dc12,0 10px 28px #03070e73}.panel[data-v-771c2c29]:before{content:"";border-radius:var(--hud-r-lg) var(--hud-r-lg) 0 0;pointer-events:none;background:linear-gradient(#78a5dc0e,#0000);height:44px;position:absolute;inset:0 0 auto}.panel-hd[data-v-771c2c29]{align-items:center;gap:8px;margin-bottom:10px;display:flex}.panel-hd h3[data-v-771c2c29]{letter-spacing:.02em;flex:1;margin:0;padding-left:11px;font-size:12.5px;font-weight:700;position:relative}.panel-hd h3[data-v-771c2c29]:before{content:"";background:var(--hud-accent);width:3px;height:12px;box-shadow:0 0 8px color-mix(in srgb, var(--hud-accent) 45%, transparent);border-radius:2px;position:absolute;top:50%;left:0;transform:translateY(-50%)}.panel-tag[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-cyan);background:#41c8f41a;border:1px solid #41c8f440;border-radius:6px;padding:0 6px;font-size:9.5px;line-height:15px}.lib-embed[data-v-771c2c29]{margin:-4px 0 0}.daq-list[data-v-771c2c29],.scene-list[data-v-771c2c29]{flex-direction:column;gap:4px;display:flex}.daq-card[data-v-771c2c29]{border-radius:var(--hud-r-md);background:var(--hud-panel-2);cursor:grab;transition:transform .15s var(--hud-ease), border-color .15s var(--hud-ease), background .15s var(--hud-ease);border:1px solid #1f4a3a8c;align-items:center;gap:10px;margin-bottom:4px;padding:8px 9px;display:flex}.daq-card[data-v-771c2c29]:hover{background:#12291f;border-color:#35e0a080;transform:translateY(-1px)}.daq-card[data-v-771c2c29]:active{cursor:grabbing}.daq-ico[data-v-771c2c29]{width:34px;height:34px;color:var(--hud-accent);background:linear-gradient(160deg,#12291f,#0e1a24);border:1px solid #1f4a3aa6;border-radius:9px;flex:none;place-items:center;display:grid}.daq-svg[data-v-771c2c29]{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.daq-meta[data-v-771c2c29]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.daq-name[data-v-771c2c29]{color:var(--hud-text);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.daq-code[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-faint);font-size:9px}.daq-count[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-accent);background:#35e0a01a;border:1px solid #35e0a047;border-radius:6px;flex:none;padding:0 6px;font-size:9px;line-height:15px}.daq-group[data-v-771c2c29]{flex-direction:column;display:flex}.daq-card.tpl[data-v-771c2c29]{cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:0}.daq-card.tpl[data-v-771c2c29]:active{cursor:pointer}.daq-card.tpl[data-v-771c2c29]:focus-visible{outline:1px solid var(--hud-accent);outline-offset:1px}.daq-caret[data-v-771c2c29]{color:var(--hud-faint);transition:transform .15s var(--hud-ease);flex:none;font-size:8px}.daq-card.tpl.open .daq-caret[data-v-771c2c29]{transform:rotate(90deg)}.daq-card.tpl[data-v-771c2c29]:hover{transform:none}.daq-add[data-v-771c2c29]{width:18px;height:18px;color:var(--hud-faint);cursor:pointer;opacity:0;transition:opacity .15s var(--hud-ease), color .15s var(--hud-ease), border-color .15s var(--hud-ease), transform .16s cubic-bezier(.22, 1, .36, 1);background:0 0;border:1px solid #2c4568b3;border-radius:6px;flex:none;place-items:center;font-size:12px;line-height:1;display:grid}.daq-card.tpl:focus-within .daq-add[data-v-771c2c29],.daq-card.tpl:hover .daq-add[data-v-771c2c29]{opacity:1}@media (hover:none){.daq-add[data-v-771c2c29]{opacity:1}}.daq-add[data-v-771c2c29]:hover{color:var(--hud-accent);border-color:#35e0a080}.daq-add[data-v-771c2c29]:active{transform:scale(.9)}.daq-children[data-v-771c2c29]{animation:daq-tree-in-771c2c29 .16s var(--hud-ease);flex-direction:column;gap:2px;margin:2px 0 6px;padding-left:16px;display:flex}@keyframes daq-tree-in-771c2c29{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.daq-node[data-v-771c2c29]{cursor:default;transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease), transform .16s cubic-bezier(.22, 1, .36, 1);border:1px solid #0000;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.daq-node[data-v-771c2c29]:hover{background:#111b2c;border-color:#2c456899}.daq-node[draggable=true][data-v-771c2c29]{cursor:grab}.daq-node[draggable=true][data-v-771c2c29]:active{cursor:grabbing;transform:scale(.98)}.daq-node.placed[data-v-771c2c29]{cursor:pointer}.daq-node.placed[draggable=true][data-v-771c2c29]{cursor:grab}.node-dot[data-v-771c2c29]{background:var(--hud-ok);width:7px;height:7px;box-shadow:0 0 6px color-mix(in srgb, var(--hud-ok) 50%, transparent);border-radius:50%;flex:none}.node-dot.offline[data-v-771c2c29]{border:1px solid var(--hud-faint);box-shadow:none;background:0 0}.node-dot.warn[data-v-771c2c29]{background:var(--hud-amber);box-shadow:0 0 6px color-mix(in srgb, var(--hud-amber) 50%, transparent)}.node-dot.alarm[data-v-771c2c29]{background:var(--hud-danger);box-shadow:0 0 6px color-mix(in srgb, var(--hud-danger) 60%, transparent)}.daq-node .daq-name[data-v-771c2c29]{font-size:11.5px;font-weight:500}.daq-node-sub[data-v-771c2c29]{align-items:baseline;gap:7px;min-width:0;display:flex}.node-val[data-v-771c2c29]{color:var(--hud-cyan);flex:none;font-size:10px}.node-dev[data-v-771c2c29]{color:var(--hud-faint);white-space:nowrap;text-overflow:ellipsis;max-width:104px;font-size:9.5px;overflow:hidden}.daq-empty-hint[data-v-771c2c29]{color:var(--hud-faint);padding:4px 8px 6px 10px;font-size:10px}.scene-row[data-v-771c2c29]{border-radius:var(--hud-r-md);cursor:grab;transition:background .15s var(--hud-ease), border-color .15s var(--hud-ease);border:1px solid #0000;align-items:center;gap:10px;margin-bottom:4px;padding:8px 9px;display:flex}.scene-row[data-v-771c2c29]:hover{background:#111b2c}.scene-row.active[data-v-771c2c29]{background:#35e0a00f;border-color:#35e0a059}.scene-row[data-v-771c2c29]:active{cursor:grabbing}.scene-ico[data-v-771c2c29]{background:color-mix(in srgb, var(--ch,var(--hud-accent)) 16%, #101a2c);border:1px solid color-mix(in srgb, var(--ch,var(--hud-accent)) 45%, transparent);border-radius:8px;flex:none;width:30px;height:30px}.scene-row.active .scene-ico[data-v-771c2c29]{box-shadow:0 0 10px color-mix(in srgb, var(--ch,var(--hud-accent)) 40%, transparent)}.scene-meta-wrap[data-v-771c2c29]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.scene-name[data-v-771c2c29]{color:var(--hud-text);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}.scene-meta[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);font-size:9px}.scene-add[data-v-771c2c29],.scene-cur[data-v-771c2c29]{border-radius:6px;flex:none;margin-left:auto;padding:1px 7px;font-size:10px}.scene-cur[data-v-771c2c29]{color:var(--hud-accent);border:1px solid #35e0a066}.scene-add[data-v-771c2c29]{color:var(--hud-dim);border:1px solid var(--hud-line)}.scene-hint[data-v-771c2c29]{color:var(--hud-amber);padding:6px 4px 0;font-size:10px;line-height:1.5}.stage-col[data-v-771c2c29]{flex-direction:column;min-width:0;min-height:0;display:flex}.stage[data-v-771c2c29]{background:#060a11;flex:1;min-height:320px;position:relative;overflow:hidden}.stage[data-v-771c2c29]:fullscreen{border-radius:0}.town-host[data-v-771c2c29]{position:absolute;inset:0}.town-host canvas[data-v-771c2c29]{image-rendering:auto;display:block}.stage-vignette[data-v-771c2c29]{pointer-events:none;z-index:3;background:radial-gradient(120% 90% at 50% 38%,#0000 52%,#02040980 100%),linear-gradient(#080d1852,#0000 18%),repeating-linear-gradient(0deg,#ffffff03 0 1px,#0000 1px 3px);position:absolute;inset:0}.stage-top[data-v-771c2c29]{z-index:6;pointer-events:none;justify-content:space-between;align-items:flex-start;padding:14px 16px;display:flex;position:absolute;top:0;left:0;right:0}.stage-top[data-v-771c2c29]>*{pointer-events:auto}.vp-title[data-v-771c2c29]{border-radius:var(--hud-r-md);-webkit-backdrop-filter:blur(8px);background:#090e18b8;border:1px solid #1c2942;align-items:center;gap:10px;padding:8px 12px;display:flex}.vp-title h2[data-v-771c2c29]{letter-spacing:.02em;margin:0;font-size:15px;font-weight:700}.vp-id[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.04em;color:var(--hud-dim);white-space:nowrap;background:#0a111d99;border:1px solid #223050;border-radius:6px;padding:1px 8px;font-size:10px}.vp-tools[data-v-771c2c29]{align-items:center;gap:8px;display:flex}.vp-tool[data-v-771c2c29]{width:34px;height:34px;color:var(--hud-dim);-webkit-backdrop-filter:blur(8px);transition:color .15s var(--hud-ease), border-color .15s var(--hud-ease), background .15s var(--hud-ease);background:#0d1420d9;border:1px solid #223050;border-radius:50%;place-items:center;font-size:12px;font-weight:600;display:grid}.vp-tool[data-v-771c2c29]:hover{color:var(--hud-text);border-color:#33507c}.vp-tool.on[data-v-771c2c29]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent);box-shadow:0 0 12px #35e0a04d}.vp-svg[data-v-771c2c29]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.leaders[data-v-771c2c29]{z-index:7;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.angle-chip[data-v-771c2c29]{z-index:6;border-radius:var(--hud-r-sm);-webkit-backdrop-filter:blur(8px);color:var(--hud-dim);background:#090e18c7;border:1px solid #1c2942;align-items:center;gap:6px;padding:5px 8px;font-size:11.5px;display:flex;position:absolute;top:64px;left:16px}.angle-chip select[data-v-771c2c29]{color:var(--hud-text);cursor:pointer;background:0 0;border:0;font-size:11.5px;font-weight:600}.angle-chip select option[data-v-771c2c29]{background:#0e1626}.callout-layer[data-v-771c2c29]{z-index:7;pointer-events:none;position:absolute;inset:0;overflow:hidden}.callout[data-v-771c2c29]{opacity:0;pointer-events:none;border-radius:var(--hud-r-md);min-width:150px;box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);transition:opacity .22s var(--hud-ease), transform .22s var(--hud-ease), border-color .15s var(--hud-ease);background:linear-gradient(#101a2bf0,#0a101cf0);border:1px solid #41c8f466;padding:9px 12px 8px;position:absolute;transform:translate(-50%,-112%)translateY(5px)}.callout.near[data-v-771c2c29]{opacity:1;pointer-events:auto;transform:translate(-50%,-112%)}.leaders g[data-v-771c2c29]{opacity:0;transition:opacity .22s var(--hud-ease)}.leaders g.near[data-v-771c2c29]{opacity:1}.callout.warn[data-v-771c2c29]{border-color:#f6c45399}.co-label[data-v-771c2c29]{color:var(--hud-dim);white-space:nowrap;align-items:center;gap:6px;font-size:10.5px;display:flex}.co-dot[data-v-771c2c29]{background:var(--hud-cyan);border-radius:50%;flex:none;width:6px;height:6px;box-shadow:0 0 8px #41c8f4e6}.callout.warn .co-dot[data-v-771c2c29]{background:var(--hud-amber);box-shadow:0 0 8px #f6c453e6}.co-val[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:-.01em;color:var(--hud-text);font-variant-numeric:tabular-nums;margin-top:2px;font-size:21px;font-weight:700}.co-val small[data-v-771c2c29]{color:var(--hud-dim);margin-left:3px;font-size:10.5px;font-weight:500}.co-range[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);margin-top:1px;font-size:9.5px}.callout.warn .co-range[data-v-771c2c29]{color:var(--hud-amber)}.kpi-strip[data-v-771c2c29]{z-index:6;pointer-events:none;flex-wrap:wrap;justify-content:center;gap:10px;padding:0 16px;display:flex;position:absolute;bottom:12px;left:0;right:0}.kpi[data-v-771c2c29]{pointer-events:auto;border-radius:var(--hud-r-md);-webkit-backdrop-filter:blur(8px);transition:border-color .2s var(--hud-ease), transform .2s var(--hud-ease), box-shadow .2s var(--hud-ease);background:linear-gradient(#141e30eb,#0c1320e6);border:1px solid #1e2c46;align-items:center;gap:10px;padding:8px 14px;display:flex;box-shadow:inset 0 1px #8fb0dc14,0 8px 20px #03070e66}.kpi[data-v-771c2c29]:hover{border-color:#2c4568;transform:translateY(-1px);box-shadow:inset 0 1px #8fb0dc1a,0 12px 26px #03070e80}.kpi-ico[data-v-771c2c29]{border-radius:8px;flex:none;place-items:center;width:30px;height:30px;font-size:12px;font-weight:700;display:grid}.kpi-ico.c1[data-v-771c2c29]{color:var(--hud-cyan);background:#41c8f41f}.kpi-ico.c2[data-v-771c2c29]{color:var(--hud-accent);background:#35e0a01f}.kpi-ico.c3[data-v-771c2c29]{color:var(--hud-amber);background:#f6c4531f}.kpi-ico.c4[data-v-771c2c29]{color:#a78bfa;background:#a78bfa24}.kpi-ico.c5[data-v-771c2c29]{color:var(--hud-danger);background:#ff6b6b1f}.kpi-svg[data-v-771c2c29]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:15px;height:15px}.kpi-meta[data-v-771c2c29]{line-height:1.25}.kpi-label[data-v-771c2c29]{color:var(--hud-dim);letter-spacing:.08em;text-transform:uppercase;font-size:10px}.kpi-val[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:19px;font-weight:700}.kpi-val small[data-v-771c2c29]{color:var(--hud-faint);margin-left:2px;font-size:10px;font-weight:500}.empty-hint[data-v-771c2c29]{z-index:4;text-align:center;color:var(--hud-dim);pointer-events:none;position:absolute;top:44%;left:50%;transform:translate(-50%,-50%)}.empty-hint b[data-v-771c2c29]{color:var(--hud-text);margin-bottom:4px;font-size:14px;display:block}.empty-hint span[data-v-771c2c29]{font-size:12px}@media (prefers-reduced-motion:no-preference){.dock[data-v-771c2c29],.rail-left[data-v-771c2c29],.rail-right[data-v-771c2c29]{animation:.52s cubic-bezier(.22,.68,.36,1) backwards hud-boot-771c2c29}.rail-left[data-v-771c2c29]{animation-delay:40ms}.rail-right[data-v-771c2c29]{animation-delay:.15s}.dock[data-v-771c2c29]{animation-delay:.26s}}@keyframes hud-boot-771c2c29{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.dock[data-v-771c2c29]{border-top:1px solid var(--hud-line-soft);background:#080d16;flex:none;grid-template-columns:308px 1fr;gap:10px;padding:10px;display:grid}.dock-card[data-v-771c2c29]{border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);background:linear-gradient(#101827,#0d1420);flex-direction:column;min-height:178px;padding:12px 14px;display:flex}.dock-hd[data-v-771c2c29]{align-items:center;gap:8px;margin-bottom:10px;display:flex}.dock-hd h3[data-v-771c2c29]{flex:none;margin:0;font-size:12.5px;font-weight:700}.dock-count[data-v-771c2c29]{letter-spacing:.08em;color:var(--hud-dim);border:1px solid var(--hud-line-soft);border-radius:6px;flex:none;padding:1px 7px;font-size:9.5px}.dock-mode[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-faint);border:1px solid var(--hud-line);border-radius:6px;margin-left:auto;padding:1px 7px;font-size:9px}.ctl-row[data-v-771c2c29]{align-items:center;gap:10px;margin-bottom:9px;display:flex}.ctl-sec[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--hud-faint);border-top:1px solid var(--hud-line-soft);margin:2px 0 7px;padding-top:7px;font-size:8.5px;font-weight:600}.ctl-sec[data-v-771c2c29]:first-of-type{border-top:0;margin-top:0;padding-top:0}.ctl-name[data-v-771c2c29]{color:var(--hud-dim);flex:none;width:64px;font-size:11.5px}.ctl-val[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-text);text-align:right;font-variant-numeric:tabular-nums;flex:none;width:38px;font-size:11px}.ctl-range[data-v-771c2c29]{appearance:none;background:linear-gradient(90deg, var(--hud-accent-dim) var(--fill,50%), #1d2a42 var(--fill,50%));cursor:pointer;border-radius:2px;flex:1;height:4px}.ctl-range[data-v-771c2c29]::-webkit-slider-thumb{-webkit-appearance:none;border:2.5px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#fff;border-radius:50%;box-shadow:0 1px 4px #00000080}.ctl-range[data-v-771c2c29]:hover::-webkit-slider-thumb{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a01f,0 1px 4px #00000080}.ctl-range[data-v-771c2c29]:active::-webkit-slider-thumb{transform:scale(1.05)}.bp-range[data-v-771c2c29]{accent-color:var(--hud-accent)}.snap-toggle[data-v-771c2c29]{height:22px;color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:6px;flex:1;font-size:10.5px;font-weight:600}.snap-toggle.on[data-v-771c2c29]{color:var(--hud-accent);background:#35e0a014;border-color:#35e0a066}.fps-seg[data-v-771c2c29]{flex:1;gap:4px;display:flex}.fps-seg button[data-v-771c2c29]{height:22px;font-family:var(--font-mono);color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), background .14s var(--hud-ease);border-radius:6px;flex:1;font-size:10.5px;font-weight:600}.fps-seg button[data-v-771c2c29]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.fps-seg button.on[data-v-771c2c29]{color:var(--hud-accent);background:#35e0a014;border-color:#35e0a066}.ctl-btns[data-v-771c2c29]{gap:8px;margin-top:auto;display:flex}.btn[data-v-771c2c29]{border-radius:var(--hud-r-sm);white-space:nowrap;cursor:pointer;height:32px;transition:filter .15s var(--hud-ease), background .15s var(--hud-ease), border-color .15s var(--hud-ease);background:0 0;flex:1;justify-content:center;align-items:center;gap:6px;padding:0 10px;font-size:12px;font-weight:600;display:inline-flex}.btn-primary[data-v-771c2c29]{background:var(--hud-accent-dim);color:#04120c}.btn-primary[data-v-771c2c29]:hover{background:#25b57e}.btn-ghost[data-v-771c2c29]{color:var(--hud-text);border:1px solid #27395c}.btn-ghost[data-v-771c2c29]:hover{background:#14203a;border-color:#33507c}.btn-danger[data-v-771c2c29]{color:#fff;background:#b3273a}.btn-danger[data-v-771c2c29]:hover{background:#d1304a}.btn[data-v-771c2c29]:not(:disabled):active{transform:translateY(1px)}.bind-select[data-v-771c2c29]:disabled,.btn[data-v-771c2c29]:disabled,.nav-action[data-v-771c2c29]:disabled,.obj-input[data-v-771c2c29]:disabled,.obj-mini[data-v-771c2c29]:disabled,.obj-select[data-v-771c2c29]:disabled{opacity:.38;cursor:not-allowed;filter:saturate(.4)}.btn[data-v-771c2c29]:disabled:hover,.nav-action[data-v-771c2c29]:disabled:hover{background:inherit}.trend-legend[data-v-771c2c29]{scrollbar-width:thin;scrollbar-color:#1c2942 transparent;flex-wrap:wrap;flex:auto;align-content:flex-start;gap:5px;min-width:0;max-height:47px;margin-left:6px;transition:max-height .24s cubic-bezier(.22,.68,.36,1);display:flex;overflow-y:auto}.trend-legend.expanded[data-v-771c2c29]{max-height:100px}.trend-legend[data-v-771c2c29]::-webkit-scrollbar{width:6px}.trend-legend[data-v-771c2c29]::-webkit-scrollbar-thumb{background:#1c2942;border-radius:3px}.trend-legend[data-v-771c2c29]::-webkit-scrollbar-track{background:0 0}.lg-chip[data-v-771c2c29]{color:var(--hud-dim);border:1px solid var(--hud-line-soft);cursor:pointer;transition:opacity .15s var(--hud-ease), border-color .15s var(--hud-ease), color .15s var(--hud-ease);background:#0d142099;border-radius:6px;align-items:center;gap:5px;padding:2px 8px;font-size:10.5px;display:flex}.lg-chip[data-v-771c2c29]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.lg-chip.off[data-v-771c2c29]{opacity:.32}.lg-more[data-v-771c2c29]{letter-spacing:.04em;color:var(--hud-faint);border-style:dashed;font-size:10px}.lg-more[data-v-771c2c29]:hover{color:var(--hud-accent);border-color:#35e0a066}.lg-dot[data-v-771c2c29]{border-radius:2px;width:7px;height:7px}.trend-wrap[data-v-771c2c29]{flex:1;min-height:0;position:relative}.trend-cv[data-v-771c2c29]{width:100%;height:100%;position:absolute;inset:0}.trend-empty[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);place-content:center;font-size:10.5px;display:grid;position:absolute;inset:0}.inspector[data-v-771c2c29]{animation:rise-771c2c29 .18s var(--hud-ease)}@keyframes rise-771c2c29{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.ins-chip-row[data-v-771c2c29]{flex-wrap:wrap;gap:6px;margin-bottom:10px;display:flex}.ins-chip[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-dim);border:1px solid #26354a;border-radius:6px;padding:1.5px 7px;font-size:9.5px}.ins-chip.accent[data-v-771c2c29]{color:var(--hud-accent);border-color:#35e0a066}.sect-hd[data-v-771c2c29]{color:var(--hud-faint);letter-spacing:.16em;align-items:center;gap:6px;margin:10px 0 7px;font-size:10px;font-weight:700;display:flex}.sect-hd[data-v-771c2c29]:before{content:"";background:var(--hud-accent);opacity:.55;border-radius:1px;width:3px;height:9px}.obj-row[data-v-771c2c29]{align-items:center;gap:8px;margin-bottom:8px;display:flex}.obj-label[data-v-771c2c29]{width:52px;color:var(--hud-dim);flex:none;font-size:10.5px}.obj-input[data-v-771c2c29],.obj-select[data-v-771c2c29]{min-width:0;color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);transition:border-color .15s var(--hud-ease);border-radius:7px;flex:1;padding:5px 8px;font-size:11.5px}.obj-input[data-v-771c2c29]:focus,.obj-select[data-v-771c2c29]:focus{border-color:var(--hud-accent);outline:none}.obj-sep[data-v-771c2c29]{background:var(--hud-line-soft);height:1px;margin:8px 0}.range-status[data-v-771c2c29]{min-width:0;color:var(--hud-faint);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:10px;overflow:hidden}.obj-mini[data-v-771c2c29]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:7px;flex:none;padding:4px 10px;font-size:10.5px;font-weight:600}.obj-mini.on[data-v-771c2c29]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.obj-mini.danger[data-v-771c2c29]{color:var(--hud-danger);width:100%;margin-top:4px}.obj-range[data-v-771c2c29]{accent-color:var(--hud-accent);flex:1}.bp-val[data-v-771c2c29]{text-align:right;width:40px;font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;flex:none;font-size:10.5px}.bp-seg[data-v-771c2c29]{gap:4px;display:flex}.seg-btn[data-v-771c2c29]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), background .14s var(--hud-ease);border-radius:7px;padding:4px 12px;font-size:10.5px;font-weight:600}.seg-btn[data-v-771c2c29]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.seg-btn.on[data-v-771c2c29]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.xz-seg[data-v-771c2c29]{gap:6px;margin-bottom:8px;display:flex}.xz-seg .seg-btn[data-v-771c2c29]{flex:1}.scale-row[data-v-771c2c29]{align-items:center;gap:8px;display:flex}.scale-max[data-v-771c2c29],.scale-min[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);font-size:9px}.scale-range[data-v-771c2c29]{accent-color:var(--hud-accent);flex:1}.scale-val[data-v-771c2c29]{text-align:center;font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;margin-bottom:4px;font-size:11px}.ins-foot[data-v-771c2c29]{gap:8px;margin-top:12px;display:flex}.ins-del[data-v-771c2c29]{color:var(--hud-danger);background:#ff6b6b1a;border:1px solid #ff6b6b66}.ins-del.armed[data-v-771c2c29]{background:var(--hud-danger);color:#fff}.ins-empty[data-v-771c2c29]{color:var(--hud-faint);text-align:center;padding:8px 0 6px;font-size:11px}.health-body[data-v-771c2c29]{align-items:center;gap:14px;display:flex}.donut-wrap[data-v-771c2c29]{flex:none;width:118px;height:118px;position:relative}.donut-wrap canvas[data-v-771c2c29]{width:118px;height:118px}.donut-center[data-v-771c2c29]{text-align:center;place-content:center;display:grid;position:absolute;inset:0}.donut-center b[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-accent);font-size:21px;font-weight:700}.donut-center span[data-v-771c2c29]{color:var(--hud-faint);font-size:9.5px}.health-legend[data-v-771c2c29]{flex-direction:column;flex:1;gap:8px;display:flex}.hl-row[data-v-771c2c29]{align-items:center;gap:7px;font-size:11.5px;display:flex}.hl-dot[data-v-771c2c29]{border-radius:50%;flex:none;width:7px;height:7px}.hl-row .n[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-text);margin-left:auto;font-size:13px;font-weight:700}.event-list[data-v-771c2c29]{flex-direction:column;flex:1;min-height:0;max-height:200px;display:flex;overflow:hidden auto}.event-row[data-v-771c2c29]{transition:background .13s var(--hud-ease);border-radius:7px;align-items:center;gap:7px;padding:4px 6px;display:flex}.event-row[data-v-771c2c29]:hover{background:#35e0a00d}.ev-time[data-v-771c2c29]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);flex:none;font-size:9px}.ev-name[data-v-771c2c29]{text-overflow:ellipsis;white-space:nowrap;max-width:70px;font-family:var(--font-mono);color:var(--hud-text);flex:none;font-size:10px;font-weight:600;overflow:hidden}.ev-text[data-v-771c2c29]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--hud-dim);flex:1;font-size:10.5px;overflow:hidden}.event-empty[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);text-align:center;padding:12px;font-size:9.5px}.rail-empty[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-faint);text-align:center;flex-direction:column;align-items:center;gap:7px;padding:16px 10px 13px;font-size:9.5px;display:flex}.rail-empty .re-ico[data-v-771c2c29]{fill:none;width:19px;height:19px;stroke:var(--hud-faint);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;opacity:.85}.mm-body[data-v-771c2c29]{align-items:stretch;gap:8px;display:flex}.mm-wrap[data-v-771c2c29]{border-radius:var(--hud-r-md);background:#060b13;border:1px solid #223050;flex:1;min-height:148px;position:relative;overflow:hidden}.mini-svg[data-v-771c2c29]{cursor:crosshair;width:100%;height:100%;position:absolute;inset:0}.nav-cv[data-v-771c2c29]{cursor:crosshair;touch-action:none;width:100%;height:100%;position:absolute;inset:0}.alarm-list[data-v-771c2c29]{flex-direction:column;display:flex}.al-row[data-v-771c2c29]{border-radius:var(--hud-r-md);align-items:flex-start;gap:9px;padding:9px 8px;transition:background .15s;display:flex}.al-row[data-v-771c2c29]:hover{background:#101a2c}.al-ico[data-v-771c2c29]{border-radius:8px;flex:none;place-items:center;width:28px;height:28px;display:grid}.al-ico.crit[data-v-771c2c29]{color:var(--hud-danger);background:#ff6b6b1f}.al-ico.warn[data-v-771c2c29]{color:var(--hud-amber);background:#f6c4531f}.al-ico.info[data-v-771c2c29]{color:var(--hud-cyan);background:#41c8f41f}.al-svg[data-v-771c2c29]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.al-body[data-v-771c2c29]{flex:1;min-width:0}.al-txt[data-v-771c2c29]{color:var(--hud-text);font-size:12px;font-weight:500;line-height:1.35}.al-src[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);margin-top:2px;font-size:9.5px}.al-state[data-v-771c2c29]{cursor:pointer;background:0 0;border:1px solid;border-radius:6px;flex:none;margin-top:2px;padding:2px 7px;font-size:9.5px;font-weight:600}.al-state.s0[data-v-771c2c29]{color:var(--hud-danger);background:#ff6b6b1a;border-color:#ff6b6b66}.al-state.s1[data-v-771c2c29]{color:var(--hud-amber);background:#f6c4531a;border-color:#f6c45359}.al-state.s2[data-v-771c2c29]{color:var(--hud-dim);background:#8fa0b514;border-color:#8fa0b54d}.nav-bell-warn[data-v-771c2c29]{color:var(--hud-danger);border-color:#ff6b6b80}.mm-col[data-v-771c2c29]{flex-direction:column;gap:6px;display:flex}.mm-col .vp-tool[data-v-771c2c29]{border-radius:8px;width:30px;height:30px}.mm-meta[data-v-771c2c29]{color:var(--hud-faint);letter-spacing:.08em;text-align:center;margin-top:8px;font-size:9.5px}.rpg-lines.chat-embed[data-v-771c2c29]{border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);background:#0f172680;max-height:268px;padding:2px 0 4px}.chat-sect[data-v-771c2c29]{align-items:center;gap:8px;display:flex}.chat-sect .chat-refresh[data-v-771c2c29]{margin-left:auto}.chat-id-row[data-v-771c2c29]{align-items:center;gap:10px;margin-bottom:4px;display:flex}.chat-badge[data-v-771c2c29]{--p-acc:var(--hud-accent);width:34px;height:34px;font-family:var(--font-mono);color:var(--p-acc);background:color-mix(in srgb, var(--p-acc) 10%, transparent);border:1px solid color-mix(in srgb, var(--p-acc) 45%, transparent);border-radius:var(--hud-r-sm);flex:none;place-items:center;font-size:15px;font-weight:700;display:grid}.chat-nameplate[data-v-771c2c29]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.chat-name[data-v-771c2c29]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:650;overflow:hidden}.chat-meta[data-v-771c2c29]{align-items:center;gap:6px;display:flex}.chat-state[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-dim);border:1px solid var(--hud-line);border-radius:6px;padding:1px 6px;font-size:8.5px}.chat-role[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.12em;border-radius:6px;padding:1px 7px;font-size:8.5px;font-weight:700}.chat-role.r-lead[data-v-771c2c29]{color:var(--hud-amber);background:#f6c4531a;border:1px solid #f6c45373}.chat-role.r-worker[data-v-771c2c29]{color:var(--hud-cyan);background:#41c8f41a;border:1px solid #41c8f466}.chat-state.s-busy[data-v-771c2c29]{color:var(--hud-amber);border-color:#f6c45380}.chat-state.s-stopped[data-v-771c2c29]{color:var(--hud-danger);border-color:#ff6b6b80}.chat-harness[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.1em;color:var(--hud-faint);font-size:8.5px}.chat-count[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);font-size:8.5px}.chat-refresh[data-v-771c2c29]{width:22px;height:22px;font-family:var(--font-mono);color:var(--hud-dim);border:1px solid var(--hud-line);cursor:pointer;transition:border-color .14s var(--hud-ease), color .14s var(--hud-ease), transform .32s var(--hud-ease);background:0 0;border-radius:6px;flex:none;font-size:11px}.chat-refresh[data-v-771c2c29]:hover{border-color:var(--hud-accent);color:var(--hud-accent)}.chat-refresh[data-v-771c2c29]:active{transform:rotate(180deg)}.rpg-lines[data-v-771c2c29]{flex-direction:column;flex:1;gap:7px;min-height:0;padding:10px 12px 12px;display:flex;overflow:hidden auto}.rpg-divider[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.2em;color:var(--hud-faint);margin:4px 0 2px;font-size:8.5px}.rpg-divider.live[data-v-771c2c29]{color:var(--hud-amber)}.rpg-line[data-v-771c2c29]{align-items:flex-start;gap:8px;display:flex}.rpg-time[data-v-771c2c29]{text-align:right;width:52px;font-family:var(--font-mono);font-variant-numeric:tabular-nums;color:var(--hud-faint);flex:none;margin-top:5px;font-size:9px}.rpg-bubble[data-v-771c2c29]{background:var(--hud-panel-2);border:1px solid var(--hud-line);border-radius:var(--hud-r-md);flex-direction:column;flex:1;gap:2px;min-width:0;padding:7px 11px;display:flex}.rpg-line.hist[data-v-771c2c29]{opacity:.62}.rpg-line.live .rpg-bubble[data-v-771c2c29]{animation:rise-771c2c29 .26s var(--hud-ease) both;border-color:var(--hud-line-hi);background:#14213a}.rpg-kind[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.14em;color:var(--hud-faint);align-self:flex-start;font-size:8px}.rpg-kind.k-artifact[data-v-771c2c29]{color:var(--hud-accent)}.rpg-kind.k-error[data-v-771c2c29]{color:var(--hud-danger)}.rpg-text[data-v-771c2c29]{color:var(--hud-text);word-break:break-word;text-wrap:pretty;font-size:13px;line-height:1.6}.rpg-line.live .rpg-text[data-v-771c2c29]{color:#edf4fa}.rpg-typing[data-v-771c2c29]{align-items:center;gap:4px;padding:5px 2px;display:flex}.ty-dot[data-v-771c2c29]{background:var(--hud-amber);width:5px;height:5px;animation:ty-bounce-771c2c29 1.15s var(--hud-ease) infinite;border-radius:50%}.ty-dot[data-v-771c2c29]:nth-child(2){animation-delay:.15s}.ty-dot[data-v-771c2c29]:nth-child(3){animation-delay:.3s}.ty-label[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-faint);margin-left:5px;font-size:9px}.rpg-note[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-dim);text-align:center;padding:14px 0;font-size:10px}.boundary-panel[data-v-771c2c29]{z-index:9;border:1px solid var(--hud-line);border-radius:var(--hud-r-lg);width:302px;box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);pointer-events:auto;background:linear-gradient(#101827f7,#0d1420f7);flex-direction:column;gap:7px;padding:12px 14px;display:flex;position:absolute;top:84px;left:16px}.bp-title[data-v-771c2c29]{border-bottom:1px solid var(--hud-line);cursor:grab;touch-action:none;align-items:center;gap:8px;padding-bottom:8px;display:flex}.bp-title[data-v-771c2c29]:active{cursor:grabbing}.bp-name[data-v-771c2c29]{color:var(--hud-text);font-size:13px;font-weight:700}.bp-sub[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.12em;color:var(--hud-faint);font-size:8.5px}.bp-tabs[data-v-771c2c29]{gap:4px;margin-left:auto;display:flex}.bp-tab[data-v-771c2c29]{color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);cursor:pointer;border-radius:6px;padding:3px 10px;font-size:10px;font-weight:600}.bp-tab.on[data-v-771c2c29]{color:#04120c;background:var(--hud-accent);border-color:var(--hud-accent)}.bp-row[data-v-771c2c29]{align-items:center;gap:8px;display:flex}.bp-label[data-v-771c2c29]{width:52px;color:var(--hud-dim);flex:none;font-size:10.5px}.bp-range[data-v-771c2c29]{appearance:none;background:linear-gradient(90deg, var(--hud-accent-dim) var(--fill,50%), #1d2a42 var(--fill,50%));cursor:pointer;border-radius:2px;flex:1;height:4px}.bp-range[data-v-771c2c29]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:12px;height:12px;-webkit-transition:transform .15s var(--hud-ease);transition:transform .15s var(--hud-ease);background:#fff;border-radius:50%}.bp-range[data-v-771c2c29]:hover::-webkit-slider-thumb{transform:scale(1.15)}.bp-hint[data-v-771c2c29]{color:var(--hud-faint);font-size:10px;line-height:1.6}.bp-actions[data-v-771c2c29]{gap:6px;margin-top:4px;display:flex}.bp-btn[data-v-771c2c29]{color:var(--hud-text);border-radius:var(--hud-r-sm);cursor:pointer;background:0 0;border:1px solid #27395c;flex:1;padding:6px 10px;font-size:11px;font-weight:600}.bp-btn[data-v-771c2c29]:hover{background:#14203a;border-color:#33507c}.bp-btn.save[data-v-771c2c29]{color:#04120c;background:var(--hud-accent-dim);border-color:var(--hud-accent-dim)}.bp-btn.save[data-v-771c2c29]:hover{background:#25b57e}.bp-btn.danger[data-v-771c2c29]{color:var(--hud-danger);border-color:#ff6b6b66}.bp-btn.danger[data-v-771c2c29]:hover{background:#ff6b6b1a}.member-list[data-v-771c2c29]{flex-direction:column;gap:5px;max-height:220px;display:flex;overflow:hidden auto}.member-row[data-v-771c2c29]{background:var(--hud-panel-2);border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);align-items:center;gap:8px;padding:6px 8px;display:flex}.member-ava[data-v-771c2c29]{width:24px;height:24px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-panel-raised);border:1px solid var(--hud-line);border-radius:7px;flex:none;justify-content:center;align-items:center;font-size:10px;font-weight:700;display:inline-flex}.member-info[data-v-771c2c29]{flex-direction:column;flex:1;min-width:0;display:flex}.member-name[data-v-771c2c29]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.member-role[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.06em;color:var(--hud-faint);font-size:8.5px}.member-role.r-lead[data-v-771c2c29]{color:var(--hud-amber)}.member-role.r-worker[data-v-771c2c29]{color:var(--hud-cyan)}.member-select[data-v-771c2c29]{min-width:0;color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:6px;flex:1;padding:3px 6px;font-size:10px}.drop-chip[data-v-771c2c29],.error-chip[data-v-771c2c29]{z-index:20;border-radius:var(--hud-r-md);box-shadow:var(--hud-shadow);-webkit-backdrop-filter:blur(8px);text-overflow:ellipsis;white-space:nowrap;background:#0e1626f5;border:1px solid #2a3d63;align-items:center;gap:8px;max-width:70%;padding:8px 14px;font-size:11.5px;display:flex;position:absolute;top:64px;left:50%;overflow:hidden;transform:translate(-50%)}.drop-chip[data-v-771c2c29]{color:var(--hud-accent)}.error-chip[data-v-771c2c29]{color:var(--hud-danger);border-color:#ff6b6b66}.bind-row[data-v-771c2c29]{border:1px solid var(--hud-line-soft);border-radius:var(--hud-r-md);background:#0f1726;align-items:center;gap:8px;margin-bottom:6px;padding:7px 9px;display:flex}.bind-ico[data-v-771c2c29]{width:26px;height:26px;color:var(--hud-accent);background:#0d1a26;border-radius:7px;flex:none;place-items:center;display:grid}.bind-svg[data-v-771c2c29]{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:14px;height:14px}.bind-meta[data-v-771c2c29]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.bind-label[data-v-771c2c29]{color:var(--hud-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.bind-val[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-cyan);font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.bind-val b[data-v-771c2c29]{font-size:11px;font-weight:700}.bind-spark[data-v-771c2c29]{flex:none;width:56px;height:20px}.bind-x[data-v-771c2c29]{width:22px;height:22px;color:var(--hud-faint);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none}.bind-x[data-v-771c2c29]:hover{color:var(--hud-danger);background:#ff6b6b1f}.bind-add-wrap[data-v-771c2c29]{position:relative}.bind-add[data-v-771c2c29]{width:100%;height:30px;color:var(--hud-dim);border-radius:var(--hud-r-sm);cursor:pointer;background:0 0;border:1px dashed #274064;font-size:11px;transition:border-color .15s,color .15s}.bind-add[data-v-771c2c29]:hover{border-color:var(--hud-accent-dim);color:var(--hud-accent)}.bind-pop[data-v-771c2c29]{z-index:30;overscroll-behavior:contain;border-radius:var(--hud-r-md);max-height:min(46vh,420px);box-shadow:var(--hud-shadow-pop,0 16px 40px #0000008c);background:#0e1626;border:1px solid #27395c;position:absolute;bottom:calc(100% + 4px);left:0;right:0;overflow:hidden auto}.bind-pop[data-v-771c2c29]::-webkit-scrollbar{width:8px}.bind-pop[data-v-771c2c29]::-webkit-scrollbar-thumb{background:#2c4568 padding-box content-box;border:2px solid #0000;border-radius:9999px}.bind-pop[data-v-771c2c29]::-webkit-scrollbar-thumb:hover{background:#3d5a85 padding-box content-box}.bind-pop button[data-v-771c2c29]{width:100%;color:var(--hud-dim);cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;font-size:11.5px;display:flex}.bind-pop button[data-v-771c2c29]:hover{color:var(--hud-text);background:#12203a}.bind-pop .bind-svg[data-v-771c2c29]{color:var(--hud-accent)}.bind-pop button>span[data-v-771c2c29]{white-space:nowrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;overflow:hidden}.bp-group[data-v-771c2c29]{flex-direction:column;display:flex}.bp-group+.bp-group[data-v-771c2c29]{border-top:1px solid #27395c8c}.bp-tpl[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--hud-faint);padding:6px 10px 3px;font-size:9px}.bp-cur[data-v-771c2c29]{color:var(--hud-faint);white-space:nowrap;text-overflow:ellipsis;max-width:96px;margin-left:auto;font-size:9.5px;font-style:normal;overflow:hidden}.bp-empty[data-v-771c2c29]{color:var(--hud-faint);padding:10px;font-size:10.5px}.dcw-row[data-v-771c2c29]{border:1px solid var(--hud-line);border-radius:var(--hud-r-md);transition:border-color .18s var(--hud-ease), box-shadow .18s var(--hud-ease);background:linear-gradient(#111a2b,#0e1522);flex-direction:column;gap:8px;margin-bottom:7px;padding:9px 10px 10px;display:flex}.dcw-row[data-v-771c2c29]:hover{border-color:var(--hud-line-hi);box-shadow:0 6px 18px #03070e66}.dcw-top[data-v-771c2c29]{align-items:center;gap:8px;display:flex}.dcw-id[data-v-771c2c29]{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.dcw-name[data-v-771c2c29]{color:var(--hud-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.dcw-tag[data-v-771c2c29]{font-style:normal;font-family:var(--font-mono);letter-spacing:.08em;color:var(--hud-amber);vertical-align:1px;background:#f6c4531a;border:1px solid #f6c45352;border-radius:4px;margin-left:5px;padding:0 5px;font-size:8.5px;font-weight:700;display:inline-block}.dcw-cur[data-v-771c2c29]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;flex:none;align-items:baseline;gap:3px;display:flex}.dcw-cur b[data-v-771c2c29]{color:var(--hud-cyan);text-shadow:0 0 14px #41c8f447;font-size:16px;font-weight:700}.dcw-cur i[data-v-771c2c29]{color:var(--hud-faint);font-size:9.5px;font-style:normal}.dcw-win[data-v-771c2c29]{border:1px solid var(--hud-line-soft);background:#0a111db8;border-radius:7px;align-items:center;gap:7px;padding:4px 8px;display:flex}.dcw-win em[data-v-771c2c29]{letter-spacing:.14em;color:var(--hud-faint);flex:none;font-size:8.5px;font-style:normal;font-weight:700}.dcw-win-num[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-dim);font-variant-numeric:tabular-nums;flex:none;font-size:9.5px}.dcw-win-track[data-v-771c2c29]{background:#1a2740;border-radius:999px;flex:1;height:4px;position:relative}.dcw-win-track[data-v-771c2c29]:before{content:"";border-radius:inherit;background:linear-gradient(90deg,#5a82af66,#5a82af24);position:absolute;inset:0}.dcw-win-track i[data-v-771c2c29]{border:2px solid var(--hud-cyan);width:9px;height:9px;transition:left .3s var(--hud-ease);background:#dfeef8;border-radius:50%;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 8px #41c8f48c}.dcw-win.recipe em[data-v-771c2c29]{color:var(--hud-amber)}.dcw-win.recipe .dcw-win-track[data-v-771c2c29]:before{background:linear-gradient(90deg,#f6c45380,#f6c45329)}.dcw-win.recipe .dcw-win-track i[data-v-771c2c29]{border-color:var(--hud-amber);box-shadow:0 0 8px #f6c4538c}.dcw-write[data-v-771c2c29]{gap:6px;display:flex}.dcw-write input[data-v-771c2c29]{min-width:0;height:27px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);transition:border-color .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border-radius:7px;flex:1;padding:0 9px;font-size:11.5px}.dcw-write input[data-v-771c2c29]::placeholder{color:var(--hud-faint);font-size:10px}.dcw-write input[data-v-771c2c29]:focus{border-color:var(--hud-accent);outline:none;box-shadow:0 0 0 3px #35e0a021}.dcw-send[data-v-771c2c29]{height:27px;font-family:var(--font-mono);letter-spacing:.1em;color:#04120c;background:var(--hud-accent-dim);cursor:pointer;transition:background .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border:0;border-radius:7px;flex:none;padding:0 14px;font-size:10.5px;font-weight:700}.dcw-send[data-v-771c2c29]:hover:not(:disabled){background:var(--hud-accent);box-shadow:0 0 14px #35e0a059}.dcw-send[data-v-771c2c29]:disabled{opacity:.38;cursor:default}.dcw-err[data-v-771c2c29]{color:var(--hud-danger);background:#ff6b6b14;border:1px solid #ff6b6b47;border-radius:6px;padding:4px 8px;font-size:10px;display:block}.bind-select[data-v-771c2c29]:hover,.daq-ctl-cycle input[data-v-771c2c29]:hover,.daq-num[data-v-771c2c29]:hover,.obj-input[data-v-771c2c29]:hover,.obj-select[data-v-771c2c29]:hover{border-color:var(--hud-line-hi)}.bind-select[data-v-771c2c29]:focus,.daq-ctl-cycle input[data-v-771c2c29]:focus,.daq-num[data-v-771c2c29]:focus,.obj-input[data-v-771c2c29]:focus,.obj-select[data-v-771c2c29]:focus{border-color:var(--hud-accent);outline:none;box-shadow:0 0 0 3px #35e0a021}input[type=number][data-v-771c2c29]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-771c2c29]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number][data-v-771c2c29]{appearance:textfield}.obj-range[data-v-771c2c29],.scale-range[data-v-771c2c29]{appearance:none;cursor:pointer;background:#1a2740;border-radius:999px;outline:none;height:4px}.obj-range[data-v-771c2c29]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#e8f6ef;border-radius:50%;box-shadow:0 0 0 3px #35e0a026,0 2px 6px #03070e80}.scale-range[data-v-771c2c29]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--hud-accent);width:13px;height:13px;-webkit-transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);transition:transform .15s var(--hud-ease), box-shadow .15s var(--hud-ease);background:#e8f6ef;border-radius:50%;box-shadow:0 0 0 3px #35e0a026,0 2px 6px #03070e80}.obj-range[data-v-771c2c29]::-webkit-slider-thumb:hover{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a033,0 2px 8px #03070e8c}.scale-range[data-v-771c2c29]::-webkit-slider-thumb:hover{transform:scale(1.18);box-shadow:0 0 0 5px #35e0a033,0 2px 8px #03070e8c}.obj-range[data-v-771c2c29]::-moz-range-thumb{border:2px solid var(--hud-accent);background:#e8f6ef;border-radius:50%;width:13px;height:13px;box-shadow:0 0 0 3px #35e0a026}.scale-range[data-v-771c2c29]::-moz-range-thumb{border:2px solid var(--hud-accent);background:#e8f6ef;border-radius:50%;width:13px;height:13px;box-shadow:0 0 0 3px #35e0a026}.obj-range[data-v-771c2c29]::-moz-range-track{background:#1a2740;border-radius:999px;height:4px}.scale-range[data-v-771c2c29]::-moz-range-track{background:#1a2740;border-radius:999px;height:4px}.bind-row[data-v-771c2c29]{transition:border-color .18s var(--hud-ease), box-shadow .18s var(--hud-ease)}.bind-row[data-v-771c2c29]:hover{border-color:var(--hud-line-hi);box-shadow:0 6px 18px #03070e66}.bind-add[data-v-771c2c29]:hover{background:#35e0a00d;border-style:solid}.daq-bind-bar[data-v-771c2c29]{gap:6px;display:flex}.bind-select[data-v-771c2c29]{min-width:0;height:28px;color:var(--hud-dim);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);transition:border-color .15s var(--hud-ease), box-shadow .15s var(--hud-ease), color .15s var(--hud-ease);flex:1;padding:0 8px;font-size:10.5px}.bind-select[data-v-771c2c29]:hover{border-color:var(--hud-line-hi);color:var(--hud-text)}.bind-select[data-v-771c2c29]:focus{border-color:var(--hud-accent);color:var(--hud-text);outline:none;box-shadow:0 0 0 3px #35e0a021}.bind-add-btn[data-v-771c2c29]{color:#04120c;background:var(--hud-accent-dim);border-radius:var(--hud-r-sm);cursor:pointer;height:28px;transition:background .15s var(--hud-ease), box-shadow .15s var(--hud-ease);border:0;flex:none;padding:0 12px;font-size:10.5px;font-weight:600}.bind-add-btn[data-v-771c2c29]:hover:not(:disabled){background:var(--hud-accent);box-shadow:0 0 14px #35e0a059}.bind-add-btn[data-v-771c2c29]:disabled{opacity:.4;cursor:default}.daq-info-row[data-v-771c2c29]{color:var(--hud-dim);justify-content:space-between;gap:8px;padding:3px 0;font-size:11px;display:flex}.daq-info-row b[data-v-771c2c29]{font-family:var(--font-mono);color:var(--hud-text);font-variant-numeric:tabular-nums;font-weight:600}.daq-info-row b.cy[data-v-771c2c29]{color:var(--hud-cyan);font-size:13px}.daq-ctrl[data-v-771c2c29]{background:var(--hud-panel);border:1px solid var(--hud-line);border-radius:var(--hud-r-sm);justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;padding:8px 10px;display:flex}.daq-ctl-btn[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.05em;color:var(--hud-dim);cursor:pointer;border:1px solid var(--hud-line-hi);border-radius:var(--hud-r-sm);background:0 0;padding:4px 12px;font-size:11px}.daq-ctl-btn.on[data-v-771c2c29]{color:var(--hud-accent);border-color:#35e0a073}.daq-ctl-cycle[data-v-771c2c29]{color:var(--hud-faint);align-items:center;gap:5px;font-size:10.5px;display:inline-flex}.daq-ctl-cycle input[data-v-771c2c29],.daq-num[data-v-771c2c29]{width:64px;font-family:var(--font-mono);color:var(--hud-text);background:var(--hud-input);border:1px solid var(--hud-line);border-radius:6px;padding:2px 6px;font-size:11px}.daq-th-inputs[data-v-771c2c29]{color:var(--hud-faint);align-items:center;gap:4px;font-size:10px;display:inline-flex}.bind-add-btn.warn[data-v-771c2c29]:not(:disabled){color:var(--hud-amber);box-shadow:none;background:#f6c4531f}.bind-add-btn.warn[data-v-771c2c29]:hover:not(:disabled){background:#f6c45333;box-shadow:0 0 14px #f6c45340}.bind-add-btn.danger[data-v-771c2c29]:not(:disabled){color:var(--hud-danger);box-shadow:none;background:#ff6b6b1a}.bind-add-btn.danger[data-v-771c2c29]:hover:not(:disabled){background:#ff6b6b2e;box-shadow:0 0 14px #ff6b6b40}.statusbar[data-v-771c2c29]{border-top:1px solid var(--hud-line-soft);height:30px;color:var(--hud-dim);z-index:60;background:#0a101b;flex:none;align-items:center;gap:18px;padding:0 14px;font-size:11px;display:flex;position:relative}.statusbar b[data-v-771c2c29]{color:var(--hud-accent);font-weight:600}.statusbar .sb-stats[data-v-771c2c29]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:.02em;align-items:center;gap:7px;display:inline-flex}.sb-stats b[data-v-771c2c29]{color:var(--hud-text);font-weight:600}.sb-stats i[data-v-771c2c29]{color:var(--hud-line-hi);font-style:normal}.sb-dot[data-v-771c2c29]{background:var(--hud-accent);width:7px;height:7px;box-shadow:0 0 6px var(--hud-accent);vertical-align:1px;border-radius:50%;margin-right:6px;display:inline-block}.sb-dot.red[data-v-771c2c29]{background:var(--hud-danger);box-shadow:0 0 6px var(--hud-danger)}.sb-dot[data-v-771c2c29]:not(.red){animation:sb-pulse-771c2c29 2.4s var(--hud-ease) infinite}@keyframes sb-pulse-771c2c29{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){.sb-dot[data-v-771c2c29]:not(.red){animation:none}}.sb-lat[data-v-771c2c29]{font-family:var(--font-mono);font-variant-numeric:tabular-nums;position:absolute;left:50%;transform:translate(-50%)}.statusbar .copy[data-v-771c2c29]{color:var(--hud-faint);font-family:var(--font-mono);margin-left:auto;font-size:10px}.loading-mask[data-v-771c2c29]{z-index:90;background:var(--hud-bg);flex-direction:column;justify-content:center;align-items:center;gap:14px;display:flex;position:fixed;inset:0}.loading-spinner[data-v-771c2c29]{border:2.5px solid var(--hud-line);border-top-color:var(--hud-accent);border-radius:50%;width:30px;height:30px;animation:.9s linear infinite spin-771c2c29}.loading-text[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.24em;color:var(--hud-dim);font-size:11px}@keyframes spin-771c2c29{to{transform:rotate(1turn)}}@keyframes ty-bounce-771c2c29{0%,60%,to{opacity:.5;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.drag-grip[data-v-771c2c29]{cursor:grab;touch-action:none}.drag-grip[data-v-771c2c29]:active{cursor:grabbing}.drag-panel[data-v-771c2c29]{will-change:left, top}.town-view[data-v-771c2c29] ::-webkit-scrollbar{width:8px;height:8px}.town-view[data-v-771c2c29] ::-webkit-scrollbar-track{background:0 0}.town-view[data-v-771c2c29] ::-webkit-scrollbar-thumb{background:#1c2942;border:2px solid #080d16;border-radius:4px}.town-view[data-v-771c2c29] ::-webkit-scrollbar-thumb:hover{background:#2c4568}.al-state[data-v-771c2c29]:active,.bind-add[data-v-771c2c29]:active,.bind-x[data-v-771c2c29]:active,.bp-btn[data-v-771c2c29]:active,.btn[data-v-771c2c29]:active,.lg-chip[data-v-771c2c29]:active,.mini-btn[data-v-771c2c29]:active,.obj-mini[data-v-771c2c29]:active,.snap-toggle[data-v-771c2c29]:active,.vp-tool[data-v-771c2c29]:active{transform:scale(.96)}.al-state[data-v-771c2c29],.bind-add[data-v-771c2c29],.bp-btn[data-v-771c2c29],.btn[data-v-771c2c29],.lg-chip[data-v-771c2c29],.mini-btn[data-v-771c2c29],.obj-mini[data-v-771c2c29],.snap-toggle[data-v-771c2c29],.vp-tool[data-v-771c2c29]{transition-property:filter,background,border-color,color,transform,opacity;transition-duration:.15s;transition-timing-function:var(--hud-ease)}.town-view button[data-v-771c2c29]:focus-visible,.town-view input[data-v-771c2c29]:focus-visible,.town-view select[data-v-771c2c29]:focus-visible{box-shadow:0 0 0 2px var(--hud-bg), 0 0 0 4px #41c8f473;border-radius:6px;outline:none}.vp-title h2[data-v-771c2c29]{color:var(--hud-text)}@keyframes estop-pulse-771c2c29{50%{filter:brightness(1.35)}}.btn-danger.armed[data-v-771c2c29]{animation:1s ease-in-out infinite estop-pulse-771c2c29}@media (prefers-reduced-motion:reduce){.callout[data-v-771c2c29],.inspector[data-v-771c2c29],.btn-danger.armed[data-v-771c2c29],.loading-spinner[data-v-771c2c29],.rpg-line.live .rpg-bubble[data-v-771c2c29],.ty-dot[data-v-771c2c29]{animation:none}}@media (width<=1180px){.app[data-v-771c2c29]{grid-template-columns:0 1fr 0}.rail[data-v-771c2c29]{z-index:70;width:288px;transition:transform .22s var(--hud-ease);box-shadow:var(--hud-shadow);background:#0a101b;position:fixed;top:50px;bottom:30px}.rail-left[data-v-771c2c29]{left:0;transform:translate(-104%)}.rail-right[data-v-771c2c29]{right:0;transform:translate(104%)}.dock[data-v-771c2c29],.stage-dock[data-v-771c2c29]{grid-template-columns:1fr}}.approval-card[data-v-771c2c29]{border-radius:var(--hud-r-md);background:#f6c4530f;border:1px solid #f6c4534d;margin-bottom:7px;padding:8px 9px}.approval-detail[data-v-771c2c29]{color:var(--hud-text);font-size:11px}.approval-ttl[data-v-771c2c29]{font-family:var(--font-mono);letter-spacing:.05em;color:var(--hud-amber);margin-top:5px;font-size:9.5px}.approval-ttl.urgent[data-v-771c2c29]{color:var(--hud-danger)}
|