yo-moss-ai 0.0.39 → 0.0.41
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/bin/runtime-manifest.json +1 -1
- package/dist/assets/AppCredits-Dg50-zpy.js +1 -0
- package/dist/assets/AppLayout-BXWHAvwP.js +1 -0
- package/dist/assets/AppLayout-DlORLMbD.css +1 -0
- package/dist/assets/Camera-DGEBs37L.js +1 -0
- package/dist/assets/Devices-CJywmXWL.css +1 -0
- package/dist/assets/Devices-DCYUMJhv.js +1 -0
- package/dist/assets/FindMoss-DVh_nc9w.js +1 -0
- package/dist/assets/{FindMoss-C34s2ATr.css → FindMoss-H8-5tRYv.css} +1 -1
- package/dist/assets/{Flash-C2I_k6ua.js → Flash-DG-XKRyJ.js} +3 -3
- package/dist/assets/Gamepad-DXNYsOkq.js +1 -0
- package/dist/assets/{Hardware-BZ1NgtO7.js → Hardware-rQDbIbzS.js} +1 -1
- package/dist/assets/{Hotkeys-Y3sQJHWU.js → Hotkeys-CViGmD1m.js} +1 -1
- package/dist/assets/{McpHub-CPAYJ3Dy.js → McpHub-B2-IDDbe.js} +1 -1
- package/dist/assets/{MiHome-DFiaGJrw.js → MiHome-CqaG1_6z.js} +1 -1
- package/dist/assets/{PhBell.vue-CTc18bBH.js → PhBell.vue-DKd5NFa_.js} +1 -1
- package/dist/assets/{PhKeyboard.vue-CH1rRfnX.js → PhKeyboard.vue-BvVNycVx.js} +1 -1
- package/dist/assets/{PhLightbulb.vue-DKm3O2_g.js → PhLightbulb.vue-bEYgMSj5.js} +1 -1
- package/dist/assets/{PhLightning.vue-8KTznipy.js → PhLightning.vue-CUCL5hv2.js} +1 -1
- package/dist/assets/PhPlugs.vue-HOkG-pI_.js +1 -0
- package/dist/assets/{PhPlus.vue-DNOmeEir.js → PhPlus.vue-rQNjmBgw.js} +1 -1
- package/dist/assets/{PhSpeakerHigh.vue--Ok2VlQq.js → PhSpeakerHigh.vue-C2-YNjTk.js} +1 -1
- package/dist/assets/{PhTelevisionSimple.vue-Cj_jHeEo.js → PhTelevisionSimple.vue-QAdriyTv.js} +1 -1
- package/dist/assets/{Remotes-BC_94mt4.js → Remotes-D68tG2O6.js} +1 -1
- package/dist/assets/{Terminal-B7yPurz3.js → Terminal-DjXoYSUh.js} +3 -3
- package/dist/assets/{Yunxiangji-C-7ECXSJ.js → Yunxiangji-DwDC-cfb.js} +1 -1
- package/dist/assets/{index-CMMVyrw-.js → index-BLut91yI.js} +25 -25
- package/dist/assets/{index-CECvQISA.css → index-CphI8TFo.css} +1 -1
- package/dist/assets/useDeviceQuickPopup-CcURkKS3.js +1 -0
- package/dist/assets/{usePtzControl-B37Lef3z.js → usePtzControl-5dF4y7fi.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/board-presets.mjs +1 -1
- package/dist-server/camera-discover.mjs +1 -1
- package/dist-server/camera.mjs +1 -1
- package/dist-server/dev-ui.mjs +1 -1
- package/dist-server/device-chat-sync.mjs +1 -1
- package/dist-server/device-config-view.mjs +1 -1
- package/dist-server/device-focus.mjs +1 -1
- package/dist-server/device-http.mjs +1 -1
- package/dist-server/device-identity.mjs +1 -1
- package/dist-server/device-presence.mjs +1 -1
- package/dist-server/device-probe.mjs +1 -1
- package/dist-server/device-registry.mjs +1 -1
- package/dist-server/device-routes.mjs +1 -1
- package/dist-server/device-runtime.mjs +1 -1
- package/dist-server/device-session.mjs +1 -1
- package/dist-server/ffmpeg.mjs +1 -1
- package/dist-server/gimbal-control.mjs +1 -1
- package/dist-server/home-path.mjs +1 -1
- package/dist-server/http-header.mjs +1 -1
- package/dist-server/index.mjs +1 -1
- package/dist-server/ir-import-validate.mjs +1 -1
- package/dist-server/known-scan-device.mjs +1 -1
- package/dist-server/lan-discover.mjs +1 -1
- package/dist-server/listen-port.mjs +1 -1
- package/dist-server/mcp/backoff.mjs +1 -1
- package/dist-server/mcp/bridge-manager.mjs +1 -1
- package/dist-server/mcp/builtin-tools.mjs +1 -1
- package/dist-server/mcp/dedupe-servers.mjs +1 -1
- package/dist-server/mcp/doctor.mjs +1 -1
- package/dist-server/mcp/fixtures/echo-mcp.mjs +1 -1
- package/dist-server/mcp/fixtures/hotkey-mcp.mjs +1 -1
- package/dist-server/mcp/fixtures/mihome-mcp.mjs +1 -1
- package/dist-server/mcp/fixtures/onvif-mcp.mjs +1 -1
- package/dist-server/mcp/fixtures/shell-mcp.mjs +1 -1
- package/dist-server/mcp/fixtures/yunxiangji-mcp.mjs +1 -1
- package/dist-server/mcp/hotkey-agent-docs.mjs +1 -1
- package/dist-server/mcp/hotkey-driver.mjs +1 -1
- package/dist-server/mcp/hotkey-handlers.mjs +1 -1
- package/dist-server/mcp/hotkey-import-validate.mjs +1 -1
- package/dist-server/mcp/hotkey-store.mjs +1 -1
- package/dist-server/mcp/http-client.mjs +1 -1
- package/dist-server/mcp/http-pipe.mjs +1 -1
- package/dist-server/mcp/local-probe.mjs +1 -1
- package/dist-server/mcp/marketplace.mjs +1 -1
- package/dist-server/mcp/onvif-handlers.mjs +1 -1
- package/dist-server/mcp/parse-server-json.mjs +1 -1
- package/dist-server/mcp/paths.mjs +1 -1
- package/dist-server/mcp/routes.mjs +1 -1
- package/dist-server/mcp/schema.mjs +1 -1
- package/dist-server/mcp/settings.mjs +1 -1
- package/dist-server/mcp/shell-approval.mjs +1 -1
- package/dist-server/mcp/shell-policy.mjs +1 -1
- package/dist-server/mcp/shell-trash.mjs +1 -1
- package/dist-server/mcp/stdio-pipe.mjs +1 -1
- package/dist-server/mcp/store.mjs +1 -1
- package/dist-server/mcp/task-notify.mjs +1 -1
- package/dist-server/mcp/ws-connect.mjs +1 -1
- package/dist-server/mcp/yunxiangji.mjs +1 -1
- package/dist-server/media-cache.mjs +1 -1
- package/dist-server/mihome/cloud.mjs +1 -1
- package/dist-server/mihome/devices.mjs +1 -1
- package/dist-server/mihome/local.mjs +1 -1
- package/dist-server/mihome/mcp-desc.mjs +1 -1
- package/dist-server/mihome/queue.mjs +1 -1
- package/dist-server/mihome/rc4.mjs +1 -1
- package/dist-server/mihome/routes.mjs +1 -1
- package/dist-server/mihome/service.mjs +1 -1
- package/dist-server/mihome/sign.mjs +1 -1
- package/dist-server/mihome/spec.mjs +1 -1
- package/dist-server/mihome/store.mjs +1 -1
- package/dist-server/onboard-preview.mjs +1 -1
- package/dist-server/onvif-ws-discover.mjs +1 -1
- package/dist-server/spa-fallback.mjs +1 -1
- package/dist-server/tab-focus.mjs +1 -1
- package/dist-server/voice-wake.mjs +1 -1
- package/package.json +1 -1
- package/dist/assets/AppCredits-cV9khBSC.js +0 -1
- package/dist/assets/AppLayout-Cxc77hoF.css +0 -1
- package/dist/assets/AppLayout-Dlztl-Rp.js +0 -1
- package/dist/assets/Camera-DrT-c03p.js +0 -1
- package/dist/assets/FindMoss-DNRc18Un.js +0 -1
- package/dist/assets/Gamepad-COFDbNC2.js +0 -1
- package/dist/assets/PhPlugs.vue-Dqy5L0KC.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as R,v as k,o as n,m as i,n as K,p as L,q as ee,s as A,b as t,c as q,H as Oe,z as Be,e as c,w as m,O as Pe,g as ce,F as le,B as ve,h as y,L as x,j as g,r as U,P as Te,f as Z,A as ne,t as b,Q as me,E as W}from"./index-CMMVyrw-.js";import{F as Ie}from"./PhTelevisionSimple.vue-Cj_jHeEo.js";import{G as je}from"./PhLightbulb.vue-DKm3O2_g.js";import{_ as De}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.js";const Je=["width","height","fill","transform"],Ue={key:0},Fe=t("path",{d:"M176,12H80A28,28,0,0,0,52,40V216a28,28,0,0,0,28,28h96a28,28,0,0,0,28-28V40A28,28,0,0,0,176,12ZM76,76H180V180H76Zm4-40h96a4,4,0,0,1,4,4V52H76V40A4,4,0,0,1,80,36Zm96,184H80a4,4,0,0,1-4-4V204H180v12A4,4,0,0,1,176,220Z"},null,-1),Re=[Fe],We={key:1},qe=t("path",{d:"M192,56V200H64V56Z",opacity:"0.2"},null,-1),Xe=t("path",{d:"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z"},null,-1),Ge=[qe,Xe],Ye={key:2},Qe=t("path",{d:"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM80,32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z"},null,-1),Ke=[Qe],e0={key:3},a0=t("path",{d:"M176,18H80A22,22,0,0,0,58,40V216a22,22,0,0,0,22,22h96a22,22,0,0,0,22-22V40A22,22,0,0,0,176,18ZM70,62H186V194H70ZM80,30h96a10,10,0,0,1,10,10V50H70V40A10,10,0,0,1,80,30Zm96,196H80a10,10,0,0,1-10-10V206H186v10A10,10,0,0,1,176,226Z"},null,-1),t0=[a0],l0={key:4},n0=t("path",{d:"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z"},null,-1),r0=[n0],i0={key:5},o0=t("path",{d:"M176,20H80A20,20,0,0,0,60,40V216a20,20,0,0,0,20,20h96a20,20,0,0,0,20-20V40A20,20,0,0,0,176,20ZM68,60H188V196H68ZM80,28h96a12,12,0,0,1,12,12V52H68V40A12,12,0,0,1,80,28Zm96,200H80a12,12,0,0,1-12-12V204H188v12A12,12,0,0,1,176,228Z"},null,-1),s0=[o0],u0={name:"PhDeviceMobile"},d0=R({...u0,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[K($.$slots,"default"),o.value==="bold"?(n(),i("g",Ue,Re)):o.value==="duotone"?(n(),i("g",We,Ge)):o.value==="fill"?(n(),i("g",Ye,Ke)):o.value==="light"?(n(),i("g",e0,t0)):o.value==="regular"?(n(),i("g",l0,r0)):o.value==="thin"?(n(),i("g",i0,s0)):L("",!0)],16,Je))}}),c0=["width","height","fill","transform"],v0={key:0},m0=t("path",{d:"M230.14,70.54,185.46,25.85a20,20,0,0,0-28.29,0L33.86,149.17A19.85,19.85,0,0,0,28,163.31V208a20,20,0,0,0,20,20H92.69a19.86,19.86,0,0,0,14.14-5.86L230.14,98.82a20,20,0,0,0,0-28.28ZM91,204H52V165l84-84,39,39ZM192,103,153,64l18.34-18.34,39,39Z"},null,-1),p0=[m0],f0={key:1},g0=t("path",{d:"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z",opacity:"0.2"},null,-1),y0=t("path",{d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z"},null,-1),h0=[g0,y0],w0={key:2},$0=t("path",{d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM192,108.68,147.31,64l24-24L216,84.68Z"},null,-1),H0=[$0],A0={key:3},V0=t("path",{d:"M225.9,74.78,181.21,30.09a14,14,0,0,0-19.8,0L38.1,153.41a13.94,13.94,0,0,0-4.1,9.9V208a14,14,0,0,0,14,14H92.69a13.94,13.94,0,0,0,9.9-4.1L225.9,94.58a14,14,0,0,0,0-19.8ZM94.1,209.41a2,2,0,0,1-1.41.59H48a2,2,0,0,1-2-2V163.31a2,2,0,0,1,.59-1.41L136,72.48,183.51,120ZM217.41,86.1,192,111.51,144.49,64,169.9,38.58a2,2,0,0,1,2.83,0l44.68,44.69a2,2,0,0,1,0,2.83Z"},null,-1),_0=[V0],Z0={key:4},k0=t("path",{d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z"},null,-1),M0=[k0],b0={key:5},C0=t("path",{d:"M224.49,76.2,179.8,31.51a12,12,0,0,0-17,0L133.17,61.17h0L39.52,154.83A11.9,11.9,0,0,0,36,163.31V208a12,12,0,0,0,12,12H92.69a12,12,0,0,0,8.48-3.51L224.48,93.17a12,12,0,0,0,0-17Zm-129,134.63A4,4,0,0,1,92.69,212H48a4,4,0,0,1-4-4V163.31a4,4,0,0,1,1.17-2.83L136,69.65,186.34,120ZM218.83,87.51,192,114.34,141.66,64l26.82-26.83a4,4,0,0,1,5.66,0l44.69,44.68a4,4,0,0,1,0,5.66Z"},null,-1),S0=[C0],x0={name:"PhPencilSimple"},L0=R({...x0,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[K($.$slots,"default"),o.value==="bold"?(n(),i("g",v0,p0)):o.value==="duotone"?(n(),i("g",f0,h0)):o.value==="fill"?(n(),i("g",w0,H0)):o.value==="light"?(n(),i("g",A0,_0)):o.value==="regular"?(n(),i("g",Z0,M0)):o.value==="thin"?(n(),i("g",b0,S0)):L("",!0)],16,c0))}}),E0=["width","height","fill","transform"],z0={key:0},N0=t("path",{d:"M216,60H157l27.52-27.52a12,12,0,0,0-17-17L128,55,88.49,15.51a12,12,0,0,0-17,17L99,60H40A20,20,0,0,0,20,80V200a20,20,0,0,0,20,20H216a20,20,0,0,0,20-20V80A20,20,0,0,0,216,60ZM44,84h84V196H44ZM212,196H152V84h60Zm-44-80a16,16,0,1,1,16,16A16,16,0,0,1,168,116Zm32,48a16,16,0,1,1-16-16A16,16,0,0,1,200,164Z"},null,-1),O0=[N0],B0={key:1},P0=t("path",{d:"M152,72V208H40a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8Z",opacity:"0.2"},null,-1),T0=t("path",{d:"M216,64H147.31l34.35-34.34a8,8,0,1,0-11.32-11.32L128,60.69,85.66,18.34A8,8,0,0,0,74.34,29.66L108.69,64H40A16,16,0,0,0,24,80V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V80A16,16,0,0,0,216,64ZM40,80H144V200H40ZM216,200H160V80h56V200Zm-16-84a12,12,0,1,1-12-12A12,12,0,0,1,200,116Zm0,48a12,12,0,1,1-12-12A12,12,0,0,1,200,164Z"},null,-1),I0=[P0,T0],j0={key:2},D0=t("path",{d:"M216,64H147.31l34.35-34.34a8,8,0,1,0-11.32-11.32L128,60.69,85.66,18.34A8,8,0,0,0,74.34,29.66L108.69,64H40A16,16,0,0,0,24,80V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V80A16,16,0,0,0,216,64Zm0,136H160V80h56V200Zm-16-84a12,12,0,1,1-12-12A12,12,0,0,1,200,116Zm0,48a12,12,0,1,1-12-12A12,12,0,0,1,200,164Z"},null,-1),J0=[D0],U0={key:3},F0=t("path",{d:"M216,66H142.48l37.76-37.76a6,6,0,0,0-8.48-8.48L128,63.51,84.24,19.76a6,6,0,1,0-8.48,8.48L113.52,66H40A14,14,0,0,0,26,80V200a14,14,0,0,0,14,14H216a14,14,0,0,0,14-14V80A14,14,0,0,0,216,66ZM38,200V80a2,2,0,0,1,2-2H146V202H40A2,2,0,0,1,38,200Zm180,0a2,2,0,0,1-2,2H158V78h58a2,2,0,0,1,2,2Zm-20-84a10,10,0,1,1-10-10A10,10,0,0,1,198,116Zm0,48a10,10,0,1,1-10-10A10,10,0,0,1,198,164Z"},null,-1),R0=[F0],W0={key:4},q0=t("path",{d:"M216,64H147.31l34.35-34.34a8,8,0,1,0-11.32-11.32L128,60.69,85.66,18.34A8,8,0,0,0,74.34,29.66L108.69,64H40A16,16,0,0,0,24,80V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V80A16,16,0,0,0,216,64ZM40,80H144V200H40ZM216,200H160V80h56V200Zm-16-84a12,12,0,1,1-12-12A12,12,0,0,1,200,116Zm0,48a12,12,0,1,1-12-12A12,12,0,0,1,200,164Z"},null,-1),X0=[q0],G0={key:5},Y0=t("path",{d:"M216,68H137.66l41.17-41.17a4,4,0,1,0-5.66-5.66L128,66.34,82.83,21.17a4,4,0,0,0-5.66,5.66L118.34,68H40A12,12,0,0,0,28,80V200a12,12,0,0,0,12,12H216a12,12,0,0,0,12-12V80A12,12,0,0,0,216,68ZM36,200V80a4,4,0,0,1,4-4H148V204H40A4,4,0,0,1,36,200Zm184,0a4,4,0,0,1-4,4H156V76h60a4,4,0,0,1,4,4Zm-24-84a8,8,0,1,1-8-8A8,8,0,0,1,196,116Zm0,48a8,8,0,1,1-8-8A8,8,0,0,1,196,164Z"},null,-1),Q0=[Y0],K0={name:"PhTelevision"},e1=R({...K0,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[K($.$slots,"default"),o.value==="bold"?(n(),i("g",z0,O0)):o.value==="duotone"?(n(),i("g",B0,I0)):o.value==="fill"?(n(),i("g",j0,J0)):o.value==="light"?(n(),i("g",U0,R0)):o.value==="regular"?(n(),i("g",W0,X0)):o.value==="thin"?(n(),i("g",G0,Q0)):L("",!0)],16,E0))}}),a1=["width","height","fill","transform"],t1={key:0},l1=t("path",{d:"M24,104a12,12,0,0,1,0-24h96a12,12,0,0,0,0-24,15.07,15.07,0,0,0-10.26,4.45,12,12,0,0,1-17-16.9A39.34,39.34,0,0,1,120,32a36,36,0,0,1,0,72ZM208,68a39.34,39.34,0,0,0-27.3,11.55,12,12,0,0,0,17,16.9A15.07,15.07,0,0,1,208,92a12,12,0,0,1,0,24H32a12,12,0,0,0,0,24H208a36,36,0,0,0,0-72Zm-56,84H40a12,12,0,0,0,0,24H152a12,12,0,0,1,0,24,15.11,15.11,0,0,1-10.27-4.45,12,12,0,1,0-17,16.9A39.34,39.34,0,0,0,152,224a36,36,0,0,0,0-72Z"},null,-1),n1=[l1],r1={key:1},i1=t("path",{d:"M120,96a24,24,0,1,1,24-24A24,24,0,0,1,120,96Zm88-16a24,24,0,1,0,24,24A24,24,0,0,0,208,80Zm-56,80a24,24,0,1,0,24,24A24,24,0,0,0,152,160Z",opacity:"0.2"},null,-1),o1=t("path",{d:"M184,184a32,32,0,0,1-32,32c-13.7,0-26.95-8.93-31.5-21.22a8,8,0,0,1,15-5.56C137.74,195.27,145,200,152,200a16,16,0,0,0,0-32H40a8,8,0,0,1,0-16H152A32,32,0,0,1,184,184Zm-64-80a32,32,0,0,0,0-64c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C105.74,60.73,113,56,120,56a16,16,0,0,1,0,32H24a8,8,0,0,0,0,16Zm88-32c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C193.74,92.73,201,88,208,88a16,16,0,0,1,0,32H32a8,8,0,0,0,0,16H208a32,32,0,0,0,0-64Z"},null,-1),s1=[i1,o1],u1={key:2},d1=t("path",{d:"M120,104H24a8,8,0,0,1-8-8.53A8.17,8.17,0,0,1,24.27,88H112a8,8,0,0,0,8-8.53A8.17,8.17,0,0,0,111.73,72H92.29a4,4,0,0,1-4-4.58A32,32,0,1,1,120,104Zm119.92-2.29a32,32,0,0,0-63.59-2.29,4,4,0,0,0,4,4.58h19.44a8.17,8.17,0,0,1,8.25,7.47,8,8,0,0,1-8,8.53H32.27A8.17,8.17,0,0,0,24,127.47,8,8,0,0,0,32,136H208A32,32,0,0,0,239.92,101.71ZM152,152H40.27A8.17,8.17,0,0,0,32,159.47,8,8,0,0,0,40,168H143.73a8.17,8.17,0,0,1,8.25,7.47,8,8,0,0,1-8,8.53H124.29a4,4,0,0,0-4,4.58A32,32,0,1,0,152,152Z"},null,-1),c1=[d1],v1={key:3},m1=t("path",{d:"M182,184a30,30,0,0,1-30,30c-12.9,0-25.36-8.38-29.63-19.92a6,6,0,0,1,11.26-4.16C136.13,196.69,144.2,202,152,202a18,18,0,0,0,0-36H40a6,6,0,0,1,0-12H152A30,30,0,0,1,182,184ZM150,72a30,30,0,0,0-30-30c-12.9,0-25.36,8.38-29.63,19.92a6,6,0,1,0,11.26,4.16C104.13,59.31,112.2,54,120,54a18,18,0,0,1,0,36H24a6,6,0,0,0,0,12h96A30,30,0,0,0,150,72Zm58,2c-12.9,0-25.36,8.38-29.63,19.92a6,6,0,1,0,11.26,4.16C192.13,91.31,200.2,86,208,86a18,18,0,0,1,0,36H32a6,6,0,0,0,0,12H208a30,30,0,0,0,0-60Z"},null,-1),p1=[m1],f1={key:4},g1=t("path",{d:"M184,184a32,32,0,0,1-32,32c-13.7,0-26.95-8.93-31.5-21.22a8,8,0,0,1,15-5.56C137.74,195.27,145,200,152,200a16,16,0,0,0,0-32H40a8,8,0,0,1,0-16H152A32,32,0,0,1,184,184Zm-64-80a32,32,0,0,0,0-64c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C105.74,60.73,113,56,120,56a16,16,0,0,1,0,32H24a8,8,0,0,0,0,16Zm88-32c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C193.74,92.73,201,88,208,88a16,16,0,0,1,0,32H32a8,8,0,0,0,0,16H208a32,32,0,0,0,0-64Z"},null,-1),y1=[g1],h1={key:5},w1=t("path",{d:"M180,184a28,28,0,0,1-28,28c-12.09,0-23.76-7.83-27.75-18.61a4,4,0,1,1,7.5-2.78C134.58,198.24,143.28,204,152,204a20,20,0,0,0,0-40H40a4,4,0,0,1,0-8H152A28,28,0,0,1,180,184ZM148,72a28,28,0,0,0-28-28c-12.09,0-23.76,7.83-27.75,18.61a4,4,0,0,0,7.5,2.78C102.58,57.76,111.28,52,120,52a20,20,0,0,1,0,40H24a4,4,0,0,0,0,8h96A28,28,0,0,0,148,72Zm60,4c-12.09,0-23.76,7.83-27.75,18.61a4,4,0,1,0,7.5,2.78C190.58,89.76,199.28,84,208,84a20,20,0,0,1,0,40H32a4,4,0,0,0,0,8H208a28,28,0,0,0,0-56Z"},null,-1),$1=[w1],H1={name:"PhWind"},A1=R({...H1,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[K($.$slots,"default"),o.value==="bold"?(n(),i("g",t1,n1)):o.value==="duotone"?(n(),i("g",r1,s1)):o.value==="fill"?(n(),i("g",u1,c1)):o.value==="light"?(n(),i("g",v1,p1)):o.value==="regular"?(n(),i("g",f1,y1)):o.value==="thin"?(n(),i("g",h1,$1)):L("",!0)],16,a1))}}),pe=16,fe=48,V1=4096,_1=512*1024,Z1=new Set(["light","ac","tv","custom"]);function ge(d){return d.length>0&&d.length<=32&&/^[A-Za-z0-9_-]+$/.test(d)}function ye(d){if(d.length===0||d.length>64||d.trim().length===0)return!1;for(let r=0;r<d.length;r+=1)if(d.charCodeAt(r)<32)return!1;return!0}function k1(d){return Z1.has(d)}function M1(d){if(!d)return!0;if(d.length>V1)return!1;const r=d.replace(/^zf=/i,"").replace(/[\r\n]/g,"").trim();return r.startsWith("xx")?r.length<=8&&/^xx[0-9a-fA-F]{0,6}$/.test(r):/^-?\d+(,-?\d+)*(,len=\d+)?$/.test(r)}function b1(d,r=d.length){if(r>_1)throw new Error("导入文件过大,请选择 MOSS 导出的 JSON 备份");let h;try{h=JSON.parse(d)}catch{throw new Error("文件不是合法的 JSON")}if(!h||typeof h!="object"||Array.isArray(h))throw new Error("导入文件格式错误:根节点必须是 JSON 对象");const p=h;if(p.version!=null&&p.version!==1)throw new Error("导入文件版本不支持,请使用 MOSS 导出的 moss-ir-catalog.json");if(!Array.isArray(p.devices))throw new Error("导入文件缺少 devices 数组");if(p.devices.length>pe)throw new Error(`电器数量 ${p.devices.length} 超过上限 ${pe}`);const V=new Set,l=new Set;for(let o=0;o<p.devices.length;o+=1){const f=p.devices[o],H=`第 ${o+1} 个电器`;if(!f||typeof f!="object"||Array.isArray(f))throw new Error(`${H}格式错误,必须是对象`);const v=f;if(typeof v.id!="string")throw new Error(`${H}缺少 string 类型的 id 字段`);if(typeof v.name!="string")throw new Error(`${H}缺少 string 类型的 name 字段`);if(typeof v.type!="string")throw new Error(`${H}缺少 string 类型的 type 字段`);if(!Array.isArray(v.commands))throw new Error(`电器「${v.name.trim()||v.id.trim()}」缺少 commands 数组`);const $=v.id.trim(),w=v.name.trim(),j=v.type.trim();if(!ge($))throw new Error(`${H} id「${$||"(空)"}」不合法`);if(!ye(w))throw new Error(`${H} name「${w||"(空)"}」不合法`);if(!k1(j))throw new Error(`电器「${w}」type「${j}」不合法`);if(V.has($))throw new Error(`电器 id「${$}」重复`);if(l.has(w))throw new Error(`电器名称「${w}」重复`);if(V.add($),l.add(w),v.commands.length>fe)throw new Error(`电器「${w}」按键数量超过上限 ${fe}`);const E=new Set,D=new Set;for(let B=0;B<v.commands.length;B+=1){const P=v.commands[B],C=`电器「${w}」第 ${B+1} 个按键`;if(!P||typeof P!="object"||Array.isArray(P))throw new Error(`${C}格式错误,必须是对象`);const S=P;if(typeof S.id!="string")throw new Error(`${C}缺少 string 类型的 id 字段`);if(typeof S.name!="string")throw new Error(`${C}缺少 string 类型的 name 字段`);if(S.code!=null&&typeof S.code!="string")throw new Error(`${C} code 必须是字符串`);const T=S.id.trim(),z=S.name.trim(),J=S.code==null?"":S.code;if(!ge(T))throw new Error(`${C} id「${T||"(空)"}」不合法`);if(!ye(z))throw new Error(`${C} name「${z||"(空)"}」不合法`);if(!M1(J))throw new Error(`${C}「${z}」的红外码格式不合法`);if(E.has(T))throw new Error(`电器「${w}」按键 id「${T}」重复`);if(D.has(z))throw new Error(`电器「${w}」按键名称「${z}」重复`);E.add(T),D.add(z)}}return h}const he=R({__name:"ApplianceIcon",props:{type:{},size:{default:22}},setup(d){const r=d,h=A(()=>r.type==="light"?je:r.type==="ac"?A1:r.type==="tv"?e1:d0);return(p,V)=>(n(),q(Oe(h.value),{size:d.size,weight:"regular"},null,8,["size"]))}}),C1={class:"panel remotes-page"},S1={class:"panel-hd panel-hd-row"},x1={class:"head-actions"},L1=["element-loading-text"],E1={key:0,class:"uxp-empty"},z1={class:"uxp-empty-icon"},N1={key:1,class:"appliance-grid"},O1=["onClick"],B1={class:"appliance-body"},P1={class:"appliance-top"},T1={class:"appliance-type"},I1={class:"appliance-meta"},j1={class:"appliance-pct"},D1={class:"appliance-bar"},J1={key:0,class:"cmd-drawer-top"},U1={class:"cmd-drawer-hd"},F1={class:"cmd-drawer-titles"},R1={class:"cmd-drawer-name"},W1=["disabled"],q1={class:"appliance-type"},X1={class:"appliance-meta"},G1={class:"appliance-pct"},Y1={class:"appliance-bar"},Q1={class:"cmd-toolbar"},K1={key:0,class:"cmd-drawer-body"},ea={key:0,class:"empty"},aa={key:1,class:"cmd-list"},ta={class:"cmd-row-main"},la={class:"cmd-row-ops"},na={class:"learn-step"},ra={key:0,class:"hint danger"},ia=R({__name:"Remotes",setup(d){const r=y([]),h=y(!1),p=y({name:"",type:"light"}),V=y(!1),l=y(null),o=y(!1),f=y(1),H=y(""),v=y(""),$=y(!1),w=y(""),j=y(null),E=y(""),D=y(!1),B=y(!1),P=y(!1),C=y(!1),S=y(""),T=y(!1),z=y(!1),J=y(!0),N=y(!1),I=y(!1),re=y(null),we=A(()=>N.value?"正在导出红外配置…":I.value?"正在导入红外配置…":"正在加载电器列表");function M(a,e){return a instanceof Error?a.message:e}function X(a){return a==="cancel"||a==="close"}function ie(a){return{light:"灯",ac:"空调",tv:"电视",custom:"其他"}[a]||a}function ae(a){return a.commands.filter(e=>e.learned).length}function G(a){return a.commands.length?Math.round(ae(a)/a.commands.length*100):0}function oe(a){const e=a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,20),s=Math.random().toString(16).slice(2,8);return`${e||"key"}-${s}`}async function F(a=!1){a||(J.value=!0);try{const e=await x("/api/ir/devices");r.value=e.devices||[],l.value&&(l.value=r.value.find(s=>{var _;return s.id===((_=l.value)==null?void 0:_.id)})||l.value)}catch(e){g.error(M(e,"加载电器列表失败"))}finally{J.value=!1}}Be(F);function $e(a){l.value=a,V.value=!0}async function He(){if(!p.value.name.trim()){g.warning("请填写电器名称");return}if(!D.value){D.value=!0;try{const a=oe(p.value.name);await x("/api/ir/device",{method:"PUT",body:JSON.stringify({id:a,name:p.value.name.trim(),type:p.value.type})}),h.value=!1,p.value={name:"",type:"light"},g.success("已添加电器"),await F(!0)}catch(a){g.error(M(a,"添加失败"))}finally{D.value=!1}}}async function Ae(){if(!(!l.value||B.value))try{const{value:a}=await W.prompt("给这个按键起个名字,例如 开、关机、25度","添加按键",{confirmButtonText:"添加",cancelButtonText:"取消",customClass:"moss-message-box moss-message-box-narrow",inputValidator:_=>!_||!String(_).trim()?"请填写按键名称":!0}),e=String(a).trim(),s=oe(e);B.value=!0,await x("/api/ir/command",{method:"PUT",body:JSON.stringify({device_id:l.value.id,id:s,name:e,code:""})}),g.success("已添加按键"),await F(!0)}catch(a){if(X(a))return;g.error(M(a,"添加按键失败"))}finally{B.value=!1}}async function Ve(){if(!(!l.value||P.value))try{const{value:a}=await W.prompt("新的名称","改名",{inputValue:l.value.name,inputValidator:e=>!e||!String(e).trim()?"请填写名称":!0});P.value=!0,await x("/api/ir/device",{method:"PUT",body:JSON.stringify({id:l.value.id,name:String(a).trim(),type:l.value.type})}),g.success("已改名"),await F(!0)}catch(a){if(X(a))return;g.error(M(a,"改名失败"))}finally{P.value=!1}}async function _e(){if(!l.value||C.value)return;const a=l.value.name;try{await W.confirm(`将删除电器「${a}」及其全部按键。删除后不可恢复。`,"确认删除电器",{type:"warning",confirmButtonText:"确认删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger",distinguishCancelAndClose:!0}),await W.confirm(`请再次确认删除「${a}」。此操作无法撤销。`,"二次确认",{type:"warning",confirmButtonText:"确认删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger",distinguishCancelAndClose:!0})}catch(e){if(X(e))return;g.error(M(e,"删除失败"));return}C.value=!0;try{await x("/api/ir/device/delete",{method:"POST",body:JSON.stringify({id:l.value.id})}),V.value=!1,l.value=null,g.success("已删除电器"),await F(!0)}catch(e){g.error(M(e,"删除失败"))}finally{C.value=!1}}async function Ze(a){if(!(!l.value||E.value)){E.value=a.id;try{await x("/api/ir/command/delete",{method:"POST",body:JSON.stringify({device_id:l.value.id,id:a.id})}),l.value.commands=l.value.commands.filter(s=>s.id!==a.id);const e=r.value.find(s=>{var _;return s.id===((_=l.value)==null?void 0:_.id)});e&&(e.commands=l.value.commands),g.success("已删除按键"),await F(!0)}catch(e){g.error(M(e,"删除失败"))}finally{E.value=""}}}function ke(a){j.value=a,w.value="",f.value=1,v.value="",H.value="对准 MOSS 的红外窗口,拿起遥控器。",o.value=!0}async function se(){if(j.value){$.value=!0,v.value="",f.value=2,H.value="点开始后请按一下要学的键,大约 15 秒。";try{await x("/api/ir/learn",{method:"POST"});const a=await x("/api/ir/learned");if(!a.ir_data){v.value="没有收到信号。请靠近一点再试。",f.value=1,H.value="对准 MOSS 的红外窗口,拿起遥控器。";return}w.value=a.ir_data,f.value=3,H.value="学到信号了。点试发,看电器会不会动。"}catch(a){v.value=M(a,"学习失败"),f.value=1}finally{$.value=!1}}}async function ue(){if(!(!w.value||T.value)){T.value=!0;try{await x("/api/ir/test",{method:"POST",body:JSON.stringify({code:w.value})}),g.success("已试发,看看电器有没有反应")}catch(a){g.error(M(a,"试发失败"))}finally{T.value=!1}}}async function Me(a){var e;if(!(!l.value||S.value)){if(w.value&&((e=j.value)==null?void 0:e.id)===a.id){await ue();return}if(!a.learned){g.info("这个按键还没有学习成功,请先学习。");return}S.value=a.id;try{await x("/api/ir/test",{method:"POST",body:JSON.stringify({device_id:l.value.id,id:a.id})}),g.success("已试发,看看电器有没有反应")}catch(s){g.error(M(s,"试发失败"))}finally{S.value=""}}}async function be(){if(!(!l.value||!j.value||!w.value||z.value)){z.value=!0;try{await x("/api/ir/command",{method:"PUT",body:JSON.stringify({device_id:l.value.id,id:j.value.id,name:j.value.name,code:w.value})}),g.success("已保存。MOSS 以后可以用这个按键。"),o.value=!1,w.value="",await F(!0)}catch(a){g.error(M(a,"保存失败"))}finally{z.value=!1}}}async function Ce(){if(!N.value){N.value=!0;try{const a=await x("/api/ir/export"),e=new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),s=URL.createObjectURL(e),_=document.createElement("a");_.href=s,_.download="moss-ir-catalog.json",_.click(),URL.revokeObjectURL(s),g.success("已导出红外配置")}catch(a){g.error(M(a,"导出失败"))}finally{N.value=!1}}}function Se(){var a;I.value||N.value||(a=re.value)==null||a.click()}async function xe(a){var Y;const e=a.target,s=(Y=e.files)==null?void 0:Y[0];if(e.value="",!s||I.value||N.value)return;let _;try{const O=await s.text();_=b1(O,s.size)}catch(O){g.error(M(O,"导入文件校验失败"));return}try{await W.confirm("文件格式校验通过。导入将覆盖设备上现有的全部红外配置,是否继续?","导入红外配置",{type:"warning",confirmButtonText:"确认导入",cancelButtonText:"取消",distinguishCancelAndClose:!0,customClass:"moss-message-box moss-message-box-narrow"})}catch(O){if(X(O))return;g.error(M(O,"导入失败"));return}I.value=!0;try{await x("/api/ir/import",{method:"POST",body:JSON.stringify({..._,mode:"replace"})}),V.value=!1,l.value=null,await F(!0),g.success("导入成功")}catch(O){g.error(M(O,"导入失败"))}finally{I.value=!1}}return(a,e)=>{const s=U("el-button"),_=U("el-button-group"),Y=U("el-input"),O=U("el-form-item"),Q=U("el-option"),Le=U("el-select"),Ee=U("el-form"),de=U("el-dialog"),ze=U("el-drawer"),Ne=Te("loading");return n(),i(le,null,[t("section",C1,[t("div",S1,[e[12]||(e[12]=t("span",null,"电器列表",-1)),t("div",x1,[c(_,{class:"head-actions-backup"},{default:m(()=>[c(s,{size:"small",plain:"",loading:N.value,disabled:J.value||I.value||N.value,onClick:Ce},{default:m(()=>[...e[9]||(e[9]=[Z("导出",-1)])]),_:1},8,["loading","disabled"]),c(s,{size:"small",plain:"",loading:I.value,disabled:J.value||I.value||N.value,onClick:Se},{default:m(()=>[...e[10]||(e[10]=[Z("导入",-1)])]),_:1},8,["loading","disabled"])]),_:1}),c(s,{type:"primary",size:"small",disabled:J.value||I.value||N.value,onClick:e[0]||(e[0]=u=>h.value=!0)},{default:m(()=>[...e[11]||(e[11]=[Z("添加电器",-1)])]),_:1},8,["disabled"])])]),Pe((n(),i("div",{class:"panel-bd","element-loading-text":we.value},[!J.value&&!r.value.length?(n(),i("div",E1,[t("div",z1,[c(ce(Ie),{size:24})]),e[14]||(e[14]=t("p",null,"还没有电器。添加客厅灯、空调等,让 MOSS 学会遥控器。",-1)),c(s,{type:"primary",onClick:e[1]||(e[1]=u=>h.value=!0)},{default:m(()=>[...e[13]||(e[13]=[Z("添加电器",-1)])]),_:1})])):r.value.length?(n(),i("div",N1,[(n(!0),i(le,null,ve(r.value,u=>(n(),i("button",{class:"appliance-card",key:u.id,type:"button",onClick:te=>$e(u)},[t("div",{class:ne(["appliance-icon",u.type])},[c(he,{type:u.type},null,8,["type"])],2),t("div",B1,[t("div",P1,[t("h3",null,b(u.name),1),t("span",T1,b(ie(u.type)),1)]),t("div",I1,[t("span",null,"已学会 "+b(ae(u))+" / "+b(u.commands.length)+" 个按键",1),t("span",j1,b(G(u))+"%",1)]),t("div",D1,[t("i",{style:me({width:G(u)+"%"})},null,4)])])],8,O1))),128))])):L("",!0)],8,L1)),[[Ne,J.value||I.value||N.value]])]),c(de,{modelValue:h.value,"onUpdate:modelValue":e[5]||(e[5]=u=>h.value=u),class:"moss-dialog",title:"添加电器",width:"420px","align-center":"","close-on-click-modal":!D.value},{footer:m(()=>[c(s,{disabled:D.value,onClick:e[4]||(e[4]=u=>h.value=!1)},{default:m(()=>[...e[15]||(e[15]=[Z("取消",-1)])]),_:1},8,["disabled"]),c(s,{type:"primary",loading:D.value,onClick:He},{default:m(()=>[...e[16]||(e[16]=[Z("添加",-1)])]),_:1},8,["loading"])]),default:m(()=>[c(Ee,{"label-position":"top"},{default:m(()=>[c(O,{label:"名称"},{default:m(()=>[c(Y,{modelValue:p.value.name,"onUpdate:modelValue":e[2]||(e[2]=u=>p.value.name=u),placeholder:"例如 客厅灯"},null,8,["modelValue"])]),_:1}),c(O,{label:"类型"},{default:m(()=>[c(Le,{modelValue:p.value.type,"onUpdate:modelValue":e[3]||(e[3]=u=>p.value.type=u),style:{width:"100%"}},{default:m(()=>[c(Q,{label:"灯",value:"light"}),c(Q,{label:"空调",value:"ac"}),c(Q,{label:"电视",value:"tv"}),c(Q,{label:"其他",value:"custom"})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","close-on-click-modal"]),c(ze,{modelValue:V.value,"onUpdate:modelValue":e[6]||(e[6]=u=>V.value=u),class:"cmd-drawer",size:"460px","append-to-body":"","close-on-click-modal":!B.value&&!P.value&&!C.value&&!E.value},{header:m(()=>[l.value?(n(),i("div",J1,[t("div",U1,[t("div",{class:ne(["appliance-icon",l.value.type])},[c(he,{type:l.value.type},null,8,["type"])],2),t("div",F1,[t("div",R1,[t("h3",null,b(l.value.name),1),t("button",{class:"cmd-rename",type:"button",title:"改名","aria-label":"改名",disabled:P.value,onClick:Ve},[c(ce(L0),{size:16,weight:"regular"})],8,W1),t("span",q1,b(ie(l.value.type)),1)]),t("div",X1,[t("span",null,"已学会 "+b(ae(l.value))+" / "+b(l.value.commands.length)+" 个按键",1),t("span",G1,b(G(l.value))+"%",1)]),t("div",Y1,[t("i",{style:me({width:G(l.value)+"%"})},null,4)])])]),t("div",Q1,[c(s,{type:"primary",loading:B.value,onClick:Ae},{default:m(()=>[...e[17]||(e[17]=[Z("添加按键",-1)])]),_:1},8,["loading"]),c(s,{type:"danger",plain:"",loading:C.value,onClick:_e},{default:m(()=>[...e[18]||(e[18]=[Z("删除电器",-1)])]),_:1},8,["loading"])])])):L("",!0)]),default:m(()=>[l.value?(n(),i("div",K1,[l.value.commands.length?(n(),i("div",aa,[(n(!0),i(le,null,ve(l.value.commands,u=>(n(),i("div",{class:"cmd-row",key:u.id},[t("div",ta,[t("strong",null,b(u.name),1),t("span",{class:ne(["cmd-status",u.learned?"ok":"idle"])},b(u.learned?"已学习":"未学习"),3)]),t("div",la,[c(s,{size:"small",onClick:te=>ke(u)},{default:m(()=>[...e[19]||(e[19]=[Z("学习",-1)])]),_:1},8,["onClick"]),c(s,{size:"small",disabled:!!E.value,loading:S.value===u.id,onClick:te=>Me(u)},{default:m(()=>[...e[20]||(e[20]=[Z("试发",-1)])]),_:1},8,["disabled","loading","onClick"]),c(s,{size:"small",type:"danger",plain:"",loading:E.value===u.id,disabled:!!E.value&&E.value!==u.id,onClick:te=>Ze(u)},{default:m(()=>[...e[21]||(e[21]=[Z("删除",-1)])]),_:1},8,["loading","disabled","onClick"])])]))),128))])):(n(),i("div",ea,"还没有按键。先添加,再学习红外信号。"))])):L("",!0)]),_:1},8,["modelValue","close-on-click-modal"]),c(de,{modelValue:o.value,"onUpdate:modelValue":e[8]||(e[8]=u=>o.value=u),class:"moss-dialog",title:"学习遥控器",width:"480px","align-center":"","close-on-click-modal":!1},{footer:m(()=>[c(s,{onClick:e[7]||(e[7]=u=>o.value=!1)},{default:m(()=>[...e[22]||(e[22]=[Z("关闭",-1)])]),_:1}),f.value===1?(n(),q(s,{key:0,type:"primary",loading:$.value,onClick:se},{default:m(()=>[...e[23]||(e[23]=[Z("开始学习",-1)])]),_:1},8,["loading"])):L("",!0),f.value===3?(n(),q(s,{key:1,loading:T.value,onClick:ue},{default:m(()=>[...e[24]||(e[24]=[Z("试发",-1)])]),_:1},8,["loading"])):L("",!0),f.value===3?(n(),q(s,{key:2,type:"primary",loading:z.value,onClick:be},{default:m(()=>[...e[25]||(e[25]=[Z("学成功了,保存",-1)])]),_:1},8,["loading"])):L("",!0),f.value>=3?(n(),q(s,{key:3,onClick:se},{default:m(()=>[...e[26]||(e[26]=[Z("没反应,重新学",-1)])]),_:1})):L("",!0)]),default:m(()=>[t("div",na,b(H.value),1),v.value?(n(),i("p",ra,b(v.value),1)):L("",!0)]),_:1},8,["modelValue"]),t("input",{ref_key:"importInput",ref:re,type:"file",accept:"application/json,.json",hidden:"",onChange:xe},null,544)],64)}}}),va=De(ia,[["__scopeId","data-v-9cd984b7"]]);export{va as default};
|
|
1
|
+
import{d as R,v as k,o as n,g as i,l as Q,i as L,x as ee,b as A,f as t,c as q,D as Oe,z as Be,j as c,w as m,M as Pe,a as ce,F as le,h as ve,r as y,I as x,E as g,e as U,N as Te,k as Z,n as ne,t as b,O as me,L as W}from"./index-BLut91yI.js";import{F as Ie}from"./PhTelevisionSimple.vue-QAdriyTv.js";import{G as je}from"./PhLightbulb.vue-bEYgMSj5.js";import{_ as De}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.js";const Je=["width","height","fill","transform"],Ue={key:0},Fe=t("path",{d:"M176,12H80A28,28,0,0,0,52,40V216a28,28,0,0,0,28,28h96a28,28,0,0,0,28-28V40A28,28,0,0,0,176,12ZM76,76H180V180H76Zm4-40h96a4,4,0,0,1,4,4V52H76V40A4,4,0,0,1,80,36Zm96,184H80a4,4,0,0,1-4-4V204H180v12A4,4,0,0,1,176,220Z"},null,-1),Re=[Fe],We={key:1},qe=t("path",{d:"M192,56V200H64V56Z",opacity:"0.2"},null,-1),Xe=t("path",{d:"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z"},null,-1),Ge=[qe,Xe],Ye={key:2},Ke=t("path",{d:"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM80,32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z"},null,-1),Qe=[Ke],e0={key:3},a0=t("path",{d:"M176,18H80A22,22,0,0,0,58,40V216a22,22,0,0,0,22,22h96a22,22,0,0,0,22-22V40A22,22,0,0,0,176,18ZM70,62H186V194H70ZM80,30h96a10,10,0,0,1,10,10V50H70V40A10,10,0,0,1,80,30Zm96,196H80a10,10,0,0,1-10-10V206H186v10A10,10,0,0,1,176,226Z"},null,-1),t0=[a0],l0={key:4},n0=t("path",{d:"M176,16H80A24,24,0,0,0,56,40V216a24,24,0,0,0,24,24h96a24,24,0,0,0,24-24V40A24,24,0,0,0,176,16ZM72,64H184V192H72Zm8-32h96a8,8,0,0,1,8,8v8H72V40A8,8,0,0,1,80,32Zm96,192H80a8,8,0,0,1-8-8v-8H184v8A8,8,0,0,1,176,224Z"},null,-1),r0=[n0],i0={key:5},o0=t("path",{d:"M176,20H80A20,20,0,0,0,60,40V216a20,20,0,0,0,20,20h96a20,20,0,0,0,20-20V40A20,20,0,0,0,176,20ZM68,60H188V196H68ZM80,28h96a12,12,0,0,1,12,12V52H68V40A12,12,0,0,1,80,28Zm96,200H80a12,12,0,0,1-12-12V204H188v12A12,12,0,0,1,176,228Z"},null,-1),s0=[o0],u0={name:"PhDeviceMobile"},d0=R({...u0,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[Q($.$slots,"default"),o.value==="bold"?(n(),i("g",Ue,Re)):o.value==="duotone"?(n(),i("g",We,Ge)):o.value==="fill"?(n(),i("g",Ye,Qe)):o.value==="light"?(n(),i("g",e0,t0)):o.value==="regular"?(n(),i("g",l0,r0)):o.value==="thin"?(n(),i("g",i0,s0)):L("",!0)],16,Je))}}),c0=["width","height","fill","transform"],v0={key:0},m0=t("path",{d:"M230.14,70.54,185.46,25.85a20,20,0,0,0-28.29,0L33.86,149.17A19.85,19.85,0,0,0,28,163.31V208a20,20,0,0,0,20,20H92.69a19.86,19.86,0,0,0,14.14-5.86L230.14,98.82a20,20,0,0,0,0-28.28ZM91,204H52V165l84-84,39,39ZM192,103,153,64l18.34-18.34,39,39Z"},null,-1),p0=[m0],f0={key:1},g0=t("path",{d:"M221.66,90.34,192,120,136,64l29.66-29.66a8,8,0,0,1,11.31,0L221.66,79A8,8,0,0,1,221.66,90.34Z",opacity:"0.2"},null,-1),y0=t("path",{d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z"},null,-1),h0=[g0,y0],w0={key:2},$0=t("path",{d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM192,108.68,147.31,64l24-24L216,84.68Z"},null,-1),H0=[$0],A0={key:3},V0=t("path",{d:"M225.9,74.78,181.21,30.09a14,14,0,0,0-19.8,0L38.1,153.41a13.94,13.94,0,0,0-4.1,9.9V208a14,14,0,0,0,14,14H92.69a13.94,13.94,0,0,0,9.9-4.1L225.9,94.58a14,14,0,0,0,0-19.8ZM94.1,209.41a2,2,0,0,1-1.41.59H48a2,2,0,0,1-2-2V163.31a2,2,0,0,1,.59-1.41L136,72.48,183.51,120ZM217.41,86.1,192,111.51,144.49,64,169.9,38.58a2,2,0,0,1,2.83,0l44.68,44.69a2,2,0,0,1,0,2.83Z"},null,-1),_0=[V0],Z0={key:4},k0=t("path",{d:"M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM92.69,208H48V163.31l88-88L180.69,120ZM192,108.68,147.31,64l24-24L216,84.68Z"},null,-1),M0=[k0],b0={key:5},C0=t("path",{d:"M224.49,76.2,179.8,31.51a12,12,0,0,0-17,0L133.17,61.17h0L39.52,154.83A11.9,11.9,0,0,0,36,163.31V208a12,12,0,0,0,12,12H92.69a12,12,0,0,0,8.48-3.51L224.48,93.17a12,12,0,0,0,0-17Zm-129,134.63A4,4,0,0,1,92.69,212H48a4,4,0,0,1-4-4V163.31a4,4,0,0,1,1.17-2.83L136,69.65,186.34,120ZM218.83,87.51,192,114.34,141.66,64l26.82-26.83a4,4,0,0,1,5.66,0l44.69,44.68a4,4,0,0,1,0,5.66Z"},null,-1),S0=[C0],x0={name:"PhPencilSimple"},L0=R({...x0,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[Q($.$slots,"default"),o.value==="bold"?(n(),i("g",v0,p0)):o.value==="duotone"?(n(),i("g",f0,h0)):o.value==="fill"?(n(),i("g",w0,H0)):o.value==="light"?(n(),i("g",A0,_0)):o.value==="regular"?(n(),i("g",Z0,M0)):o.value==="thin"?(n(),i("g",b0,S0)):L("",!0)],16,c0))}}),E0=["width","height","fill","transform"],z0={key:0},N0=t("path",{d:"M216,60H157l27.52-27.52a12,12,0,0,0-17-17L128,55,88.49,15.51a12,12,0,0,0-17,17L99,60H40A20,20,0,0,0,20,80V200a20,20,0,0,0,20,20H216a20,20,0,0,0,20-20V80A20,20,0,0,0,216,60ZM44,84h84V196H44ZM212,196H152V84h60Zm-44-80a16,16,0,1,1,16,16A16,16,0,0,1,168,116Zm32,48a16,16,0,1,1-16-16A16,16,0,0,1,200,164Z"},null,-1),O0=[N0],B0={key:1},P0=t("path",{d:"M152,72V208H40a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8Z",opacity:"0.2"},null,-1),T0=t("path",{d:"M216,64H147.31l34.35-34.34a8,8,0,1,0-11.32-11.32L128,60.69,85.66,18.34A8,8,0,0,0,74.34,29.66L108.69,64H40A16,16,0,0,0,24,80V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V80A16,16,0,0,0,216,64ZM40,80H144V200H40ZM216,200H160V80h56V200Zm-16-84a12,12,0,1,1-12-12A12,12,0,0,1,200,116Zm0,48a12,12,0,1,1-12-12A12,12,0,0,1,200,164Z"},null,-1),I0=[P0,T0],j0={key:2},D0=t("path",{d:"M216,64H147.31l34.35-34.34a8,8,0,1,0-11.32-11.32L128,60.69,85.66,18.34A8,8,0,0,0,74.34,29.66L108.69,64H40A16,16,0,0,0,24,80V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V80A16,16,0,0,0,216,64Zm0,136H160V80h56V200Zm-16-84a12,12,0,1,1-12-12A12,12,0,0,1,200,116Zm0,48a12,12,0,1,1-12-12A12,12,0,0,1,200,164Z"},null,-1),J0=[D0],U0={key:3},F0=t("path",{d:"M216,66H142.48l37.76-37.76a6,6,0,0,0-8.48-8.48L128,63.51,84.24,19.76a6,6,0,1,0-8.48,8.48L113.52,66H40A14,14,0,0,0,26,80V200a14,14,0,0,0,14,14H216a14,14,0,0,0,14-14V80A14,14,0,0,0,216,66ZM38,200V80a2,2,0,0,1,2-2H146V202H40A2,2,0,0,1,38,200Zm180,0a2,2,0,0,1-2,2H158V78h58a2,2,0,0,1,2,2Zm-20-84a10,10,0,1,1-10-10A10,10,0,0,1,198,116Zm0,48a10,10,0,1,1-10-10A10,10,0,0,1,198,164Z"},null,-1),R0=[F0],W0={key:4},q0=t("path",{d:"M216,64H147.31l34.35-34.34a8,8,0,1,0-11.32-11.32L128,60.69,85.66,18.34A8,8,0,0,0,74.34,29.66L108.69,64H40A16,16,0,0,0,24,80V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V80A16,16,0,0,0,216,64ZM40,80H144V200H40ZM216,200H160V80h56V200Zm-16-84a12,12,0,1,1-12-12A12,12,0,0,1,200,116Zm0,48a12,12,0,1,1-12-12A12,12,0,0,1,200,164Z"},null,-1),X0=[q0],G0={key:5},Y0=t("path",{d:"M216,68H137.66l41.17-41.17a4,4,0,1,0-5.66-5.66L128,66.34,82.83,21.17a4,4,0,0,0-5.66,5.66L118.34,68H40A12,12,0,0,0,28,80V200a12,12,0,0,0,12,12H216a12,12,0,0,0,12-12V80A12,12,0,0,0,216,68ZM36,200V80a4,4,0,0,1,4-4H148V204H40A4,4,0,0,1,36,200Zm184,0a4,4,0,0,1-4,4H156V76h60a4,4,0,0,1,4,4Zm-24-84a8,8,0,1,1-8-8A8,8,0,0,1,196,116Zm0,48a8,8,0,1,1-8-8A8,8,0,0,1,196,164Z"},null,-1),K0=[Y0],Q0={name:"PhTelevision"},e1=R({...Q0,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[Q($.$slots,"default"),o.value==="bold"?(n(),i("g",z0,O0)):o.value==="duotone"?(n(),i("g",B0,I0)):o.value==="fill"?(n(),i("g",j0,J0)):o.value==="light"?(n(),i("g",U0,R0)):o.value==="regular"?(n(),i("g",W0,X0)):o.value==="thin"?(n(),i("g",G0,K0)):L("",!0)],16,E0))}}),a1=["width","height","fill","transform"],t1={key:0},l1=t("path",{d:"M24,104a12,12,0,0,1,0-24h96a12,12,0,0,0,0-24,15.07,15.07,0,0,0-10.26,4.45,12,12,0,0,1-17-16.9A39.34,39.34,0,0,1,120,32a36,36,0,0,1,0,72ZM208,68a39.34,39.34,0,0,0-27.3,11.55,12,12,0,0,0,17,16.9A15.07,15.07,0,0,1,208,92a12,12,0,0,1,0,24H32a12,12,0,0,0,0,24H208a36,36,0,0,0,0-72Zm-56,84H40a12,12,0,0,0,0,24H152a12,12,0,0,1,0,24,15.11,15.11,0,0,1-10.27-4.45,12,12,0,1,0-17,16.9A39.34,39.34,0,0,0,152,224a36,36,0,0,0,0-72Z"},null,-1),n1=[l1],r1={key:1},i1=t("path",{d:"M120,96a24,24,0,1,1,24-24A24,24,0,0,1,120,96Zm88-16a24,24,0,1,0,24,24A24,24,0,0,0,208,80Zm-56,80a24,24,0,1,0,24,24A24,24,0,0,0,152,160Z",opacity:"0.2"},null,-1),o1=t("path",{d:"M184,184a32,32,0,0,1-32,32c-13.7,0-26.95-8.93-31.5-21.22a8,8,0,0,1,15-5.56C137.74,195.27,145,200,152,200a16,16,0,0,0,0-32H40a8,8,0,0,1,0-16H152A32,32,0,0,1,184,184Zm-64-80a32,32,0,0,0,0-64c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C105.74,60.73,113,56,120,56a16,16,0,0,1,0,32H24a8,8,0,0,0,0,16Zm88-32c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C193.74,92.73,201,88,208,88a16,16,0,0,1,0,32H32a8,8,0,0,0,0,16H208a32,32,0,0,0,0-64Z"},null,-1),s1=[i1,o1],u1={key:2},d1=t("path",{d:"M120,104H24a8,8,0,0,1-8-8.53A8.17,8.17,0,0,1,24.27,88H112a8,8,0,0,0,8-8.53A8.17,8.17,0,0,0,111.73,72H92.29a4,4,0,0,1-4-4.58A32,32,0,1,1,120,104Zm119.92-2.29a32,32,0,0,0-63.59-2.29,4,4,0,0,0,4,4.58h19.44a8.17,8.17,0,0,1,8.25,7.47,8,8,0,0,1-8,8.53H32.27A8.17,8.17,0,0,0,24,127.47,8,8,0,0,0,32,136H208A32,32,0,0,0,239.92,101.71ZM152,152H40.27A8.17,8.17,0,0,0,32,159.47,8,8,0,0,0,40,168H143.73a8.17,8.17,0,0,1,8.25,7.47,8,8,0,0,1-8,8.53H124.29a4,4,0,0,0-4,4.58A32,32,0,1,0,152,152Z"},null,-1),c1=[d1],v1={key:3},m1=t("path",{d:"M182,184a30,30,0,0,1-30,30c-12.9,0-25.36-8.38-29.63-19.92a6,6,0,0,1,11.26-4.16C136.13,196.69,144.2,202,152,202a18,18,0,0,0,0-36H40a6,6,0,0,1,0-12H152A30,30,0,0,1,182,184ZM150,72a30,30,0,0,0-30-30c-12.9,0-25.36,8.38-29.63,19.92a6,6,0,1,0,11.26,4.16C104.13,59.31,112.2,54,120,54a18,18,0,0,1,0,36H24a6,6,0,0,0,0,12h96A30,30,0,0,0,150,72Zm58,2c-12.9,0-25.36,8.38-29.63,19.92a6,6,0,1,0,11.26,4.16C192.13,91.31,200.2,86,208,86a18,18,0,0,1,0,36H32a6,6,0,0,0,0,12H208a30,30,0,0,0,0-60Z"},null,-1),p1=[m1],f1={key:4},g1=t("path",{d:"M184,184a32,32,0,0,1-32,32c-13.7,0-26.95-8.93-31.5-21.22a8,8,0,0,1,15-5.56C137.74,195.27,145,200,152,200a16,16,0,0,0,0-32H40a8,8,0,0,1,0-16H152A32,32,0,0,1,184,184Zm-64-80a32,32,0,0,0,0-64c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C105.74,60.73,113,56,120,56a16,16,0,0,1,0,32H24a8,8,0,0,0,0,16Zm88-32c-13.7,0-26.95,8.93-31.5,21.22a8,8,0,0,0,15,5.56C193.74,92.73,201,88,208,88a16,16,0,0,1,0,32H32a8,8,0,0,0,0,16H208a32,32,0,0,0,0-64Z"},null,-1),y1=[g1],h1={key:5},w1=t("path",{d:"M180,184a28,28,0,0,1-28,28c-12.09,0-23.76-7.83-27.75-18.61a4,4,0,1,1,7.5-2.78C134.58,198.24,143.28,204,152,204a20,20,0,0,0,0-40H40a4,4,0,0,1,0-8H152A28,28,0,0,1,180,184ZM148,72a28,28,0,0,0-28-28c-12.09,0-23.76,7.83-27.75,18.61a4,4,0,0,0,7.5,2.78C102.58,57.76,111.28,52,120,52a20,20,0,0,1,0,40H24a4,4,0,0,0,0,8h96A28,28,0,0,0,148,72Zm60,4c-12.09,0-23.76,7.83-27.75,18.61a4,4,0,1,0,7.5,2.78C190.58,89.76,199.28,84,208,84a20,20,0,0,1,0,40H32a4,4,0,0,0,0,8H208a28,28,0,0,0,0-56Z"},null,-1),$1=[w1],H1={name:"PhWind"},A1=R({...H1,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const r=d,h=k("weight","regular"),p=k("size","1em"),V=k("color","currentColor"),l=k("mirrored",!1),o=A(()=>r.weight??h),f=A(()=>r.size??p),H=A(()=>r.color??V),v=A(()=>r.mirrored!==void 0?r.mirrored?"scale(-1, 1)":void 0:l?"scale(-1, 1)":void 0);return($,w)=>(n(),i("svg",ee({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:f.value,height:f.value,fill:H.value,transform:v.value},$.$attrs),[Q($.$slots,"default"),o.value==="bold"?(n(),i("g",t1,n1)):o.value==="duotone"?(n(),i("g",r1,s1)):o.value==="fill"?(n(),i("g",u1,c1)):o.value==="light"?(n(),i("g",v1,p1)):o.value==="regular"?(n(),i("g",f1,y1)):o.value==="thin"?(n(),i("g",h1,$1)):L("",!0)],16,a1))}}),pe=16,fe=48,V1=4096,_1=512*1024,Z1=new Set(["light","ac","tv","custom"]);function ge(d){return d.length>0&&d.length<=32&&/^[A-Za-z0-9_-]+$/.test(d)}function ye(d){if(d.length===0||d.length>64||d.trim().length===0)return!1;for(let r=0;r<d.length;r+=1)if(d.charCodeAt(r)<32)return!1;return!0}function k1(d){return Z1.has(d)}function M1(d){if(!d)return!0;if(d.length>V1)return!1;const r=d.replace(/^zf=/i,"").replace(/[\r\n]/g,"").trim();return r.startsWith("xx")?r.length<=8&&/^xx[0-9a-fA-F]{0,6}$/.test(r):/^-?\d+(,-?\d+)*(,len=\d+)?$/.test(r)}function b1(d,r=d.length){if(r>_1)throw new Error("导入文件过大,请选择 MOSS 导出的 JSON 备份");let h;try{h=JSON.parse(d)}catch{throw new Error("文件不是合法的 JSON")}if(!h||typeof h!="object"||Array.isArray(h))throw new Error("导入文件格式错误:根节点必须是 JSON 对象");const p=h;if(p.version!=null&&p.version!==1)throw new Error("导入文件版本不支持,请使用 MOSS 导出的 moss-ir-catalog.json");if(!Array.isArray(p.devices))throw new Error("导入文件缺少 devices 数组");if(p.devices.length>pe)throw new Error(`电器数量 ${p.devices.length} 超过上限 ${pe}`);const V=new Set,l=new Set;for(let o=0;o<p.devices.length;o+=1){const f=p.devices[o],H=`第 ${o+1} 个电器`;if(!f||typeof f!="object"||Array.isArray(f))throw new Error(`${H}格式错误,必须是对象`);const v=f;if(typeof v.id!="string")throw new Error(`${H}缺少 string 类型的 id 字段`);if(typeof v.name!="string")throw new Error(`${H}缺少 string 类型的 name 字段`);if(typeof v.type!="string")throw new Error(`${H}缺少 string 类型的 type 字段`);if(!Array.isArray(v.commands))throw new Error(`电器「${v.name.trim()||v.id.trim()}」缺少 commands 数组`);const $=v.id.trim(),w=v.name.trim(),j=v.type.trim();if(!ge($))throw new Error(`${H} id「${$||"(空)"}」不合法`);if(!ye(w))throw new Error(`${H} name「${w||"(空)"}」不合法`);if(!k1(j))throw new Error(`电器「${w}」type「${j}」不合法`);if(V.has($))throw new Error(`电器 id「${$}」重复`);if(l.has(w))throw new Error(`电器名称「${w}」重复`);if(V.add($),l.add(w),v.commands.length>fe)throw new Error(`电器「${w}」按键数量超过上限 ${fe}`);const E=new Set,D=new Set;for(let B=0;B<v.commands.length;B+=1){const P=v.commands[B],C=`电器「${w}」第 ${B+1} 个按键`;if(!P||typeof P!="object"||Array.isArray(P))throw new Error(`${C}格式错误,必须是对象`);const S=P;if(typeof S.id!="string")throw new Error(`${C}缺少 string 类型的 id 字段`);if(typeof S.name!="string")throw new Error(`${C}缺少 string 类型的 name 字段`);if(S.code!=null&&typeof S.code!="string")throw new Error(`${C} code 必须是字符串`);const T=S.id.trim(),z=S.name.trim(),J=S.code==null?"":S.code;if(!ge(T))throw new Error(`${C} id「${T||"(空)"}」不合法`);if(!ye(z))throw new Error(`${C} name「${z||"(空)"}」不合法`);if(!M1(J))throw new Error(`${C}「${z}」的红外码格式不合法`);if(E.has(T))throw new Error(`电器「${w}」按键 id「${T}」重复`);if(D.has(z))throw new Error(`电器「${w}」按键名称「${z}」重复`);E.add(T),D.add(z)}}return h}const he=R({__name:"ApplianceIcon",props:{type:{},size:{default:22}},setup(d){const r=d,h=A(()=>r.type==="light"?je:r.type==="ac"?A1:r.type==="tv"?e1:d0);return(p,V)=>(n(),q(Oe(h.value),{size:d.size,weight:"regular"},null,8,["size"]))}}),C1={class:"panel remotes-page"},S1={class:"panel-hd panel-hd-row"},x1={class:"head-actions"},L1=["element-loading-text"],E1={key:0,class:"uxp-empty"},z1={class:"uxp-empty-icon"},N1={key:1,class:"appliance-grid"},O1=["onClick"],B1={class:"appliance-body"},P1={class:"appliance-top"},T1={class:"appliance-type"},I1={class:"appliance-meta"},j1={class:"appliance-pct"},D1={class:"appliance-bar"},J1={key:0,class:"cmd-drawer-top"},U1={class:"cmd-drawer-hd"},F1={class:"cmd-drawer-titles"},R1={class:"cmd-drawer-name"},W1=["disabled"],q1={class:"appliance-type"},X1={class:"appliance-meta"},G1={class:"appliance-pct"},Y1={class:"appliance-bar"},K1={class:"cmd-toolbar"},Q1={key:0,class:"cmd-drawer-body"},ea={key:0,class:"empty"},aa={key:1,class:"cmd-list"},ta={class:"cmd-row-main"},la={class:"cmd-row-ops"},na={class:"learn-step"},ra={key:0,class:"hint danger"},ia=R({__name:"Remotes",setup(d){const r=y([]),h=y(!1),p=y({name:"",type:"light"}),V=y(!1),l=y(null),o=y(!1),f=y(1),H=y(""),v=y(""),$=y(!1),w=y(""),j=y(null),E=y(""),D=y(!1),B=y(!1),P=y(!1),C=y(!1),S=y(""),T=y(!1),z=y(!1),J=y(!0),N=y(!1),I=y(!1),re=y(null),we=A(()=>N.value?"正在导出红外配置…":I.value?"正在导入红外配置…":"正在加载电器列表");function M(a,e){return a instanceof Error?a.message:e}function X(a){return a==="cancel"||a==="close"}function ie(a){return{light:"灯",ac:"空调",tv:"电视",custom:"其他"}[a]||a}function ae(a){return a.commands.filter(e=>e.learned).length}function G(a){return a.commands.length?Math.round(ae(a)/a.commands.length*100):0}function oe(a){const e=a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,20),s=Math.random().toString(16).slice(2,8);return`${e||"key"}-${s}`}async function F(a=!1){a||(J.value=!0);try{const e=await x("/api/ir/devices");r.value=e.devices||[],l.value&&(l.value=r.value.find(s=>{var _;return s.id===((_=l.value)==null?void 0:_.id)})||l.value)}catch(e){g.error(M(e,"加载电器列表失败"))}finally{J.value=!1}}Be(F);function $e(a){l.value=a,V.value=!0}async function He(){if(!p.value.name.trim()){g.warning("请填写电器名称");return}if(!D.value){D.value=!0;try{const a=oe(p.value.name);await x("/api/ir/device",{method:"PUT",body:JSON.stringify({id:a,name:p.value.name.trim(),type:p.value.type})}),h.value=!1,p.value={name:"",type:"light"},g.success("已添加电器"),await F(!0)}catch(a){g.error(M(a,"添加失败"))}finally{D.value=!1}}}async function Ae(){if(!(!l.value||B.value))try{const{value:a}=await W.prompt("给这个按键起个名字,例如 开、关机、25度","添加按键",{confirmButtonText:"添加",cancelButtonText:"取消",customClass:"moss-message-box moss-message-box-narrow",inputValidator:_=>!_||!String(_).trim()?"请填写按键名称":!0}),e=String(a).trim(),s=oe(e);B.value=!0,await x("/api/ir/command",{method:"PUT",body:JSON.stringify({device_id:l.value.id,id:s,name:e,code:""})}),g.success("已添加按键"),await F(!0)}catch(a){if(X(a))return;g.error(M(a,"添加按键失败"))}finally{B.value=!1}}async function Ve(){if(!(!l.value||P.value))try{const{value:a}=await W.prompt("新的名称","改名",{inputValue:l.value.name,inputValidator:e=>!e||!String(e).trim()?"请填写名称":!0});P.value=!0,await x("/api/ir/device",{method:"PUT",body:JSON.stringify({id:l.value.id,name:String(a).trim(),type:l.value.type})}),g.success("已改名"),await F(!0)}catch(a){if(X(a))return;g.error(M(a,"改名失败"))}finally{P.value=!1}}async function _e(){if(!l.value||C.value)return;const a=l.value.name;try{await W.confirm(`将删除电器「${a}」及其全部按键。删除后不可恢复。`,"确认删除电器",{type:"warning",confirmButtonText:"确认删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger",distinguishCancelAndClose:!0}),await W.confirm(`请再次确认删除「${a}」。此操作无法撤销。`,"二次确认",{type:"warning",confirmButtonText:"确认删除",cancelButtonText:"取消",confirmButtonClass:"el-button--danger",distinguishCancelAndClose:!0})}catch(e){if(X(e))return;g.error(M(e,"删除失败"));return}C.value=!0;try{await x("/api/ir/device/delete",{method:"POST",body:JSON.stringify({id:l.value.id})}),V.value=!1,l.value=null,g.success("已删除电器"),await F(!0)}catch(e){g.error(M(e,"删除失败"))}finally{C.value=!1}}async function Ze(a){if(!(!l.value||E.value)){E.value=a.id;try{await x("/api/ir/command/delete",{method:"POST",body:JSON.stringify({device_id:l.value.id,id:a.id})}),l.value.commands=l.value.commands.filter(s=>s.id!==a.id);const e=r.value.find(s=>{var _;return s.id===((_=l.value)==null?void 0:_.id)});e&&(e.commands=l.value.commands),g.success("已删除按键"),await F(!0)}catch(e){g.error(M(e,"删除失败"))}finally{E.value=""}}}function ke(a){j.value=a,w.value="",f.value=1,v.value="",H.value="对准 MOSS 的红外窗口,拿起遥控器。",o.value=!0}async function se(){if(j.value){$.value=!0,v.value="",f.value=2,H.value="点开始后请按一下要学的键,大约 15 秒。";try{await x("/api/ir/learn",{method:"POST"});const a=await x("/api/ir/learned");if(!a.ir_data){v.value="没有收到信号。请靠近一点再试。",f.value=1,H.value="对准 MOSS 的红外窗口,拿起遥控器。";return}w.value=a.ir_data,f.value=3,H.value="学到信号了。点试发,看电器会不会动。"}catch(a){v.value=M(a,"学习失败"),f.value=1}finally{$.value=!1}}}async function ue(){if(!(!w.value||T.value)){T.value=!0;try{await x("/api/ir/test",{method:"POST",body:JSON.stringify({code:w.value})}),g.success("已试发,看看电器有没有反应")}catch(a){g.error(M(a,"试发失败"))}finally{T.value=!1}}}async function Me(a){var e;if(!(!l.value||S.value)){if(w.value&&((e=j.value)==null?void 0:e.id)===a.id){await ue();return}if(!a.learned){g.info("这个按键还没有学习成功,请先学习。");return}S.value=a.id;try{await x("/api/ir/test",{method:"POST",body:JSON.stringify({device_id:l.value.id,id:a.id})}),g.success("已试发,看看电器有没有反应")}catch(s){g.error(M(s,"试发失败"))}finally{S.value=""}}}async function be(){if(!(!l.value||!j.value||!w.value||z.value)){z.value=!0;try{await x("/api/ir/command",{method:"PUT",body:JSON.stringify({device_id:l.value.id,id:j.value.id,name:j.value.name,code:w.value})}),g.success("已保存。MOSS 以后可以用这个按键。"),o.value=!1,w.value="",await F(!0)}catch(a){g.error(M(a,"保存失败"))}finally{z.value=!1}}}async function Ce(){if(!N.value){N.value=!0;try{const a=await x("/api/ir/export"),e=new Blob([JSON.stringify(a,null,2)],{type:"application/json"}),s=URL.createObjectURL(e),_=document.createElement("a");_.href=s,_.download="moss-ir-catalog.json",_.click(),URL.revokeObjectURL(s),g.success("已导出红外配置")}catch(a){g.error(M(a,"导出失败"))}finally{N.value=!1}}}function Se(){var a;I.value||N.value||(a=re.value)==null||a.click()}async function xe(a){var Y;const e=a.target,s=(Y=e.files)==null?void 0:Y[0];if(e.value="",!s||I.value||N.value)return;let _;try{const O=await s.text();_=b1(O,s.size)}catch(O){g.error(M(O,"导入文件校验失败"));return}try{await W.confirm("文件格式校验通过。导入将覆盖设备上现有的全部红外配置,是否继续?","导入红外配置",{type:"warning",confirmButtonText:"确认导入",cancelButtonText:"取消",distinguishCancelAndClose:!0,customClass:"moss-message-box moss-message-box-narrow"})}catch(O){if(X(O))return;g.error(M(O,"导入失败"));return}I.value=!0;try{await x("/api/ir/import",{method:"POST",body:JSON.stringify({..._,mode:"replace"})}),V.value=!1,l.value=null,await F(!0),g.success("导入成功")}catch(O){g.error(M(O,"导入失败"))}finally{I.value=!1}}return(a,e)=>{const s=U("el-button"),_=U("el-button-group"),Y=U("el-input"),O=U("el-form-item"),K=U("el-option"),Le=U("el-select"),Ee=U("el-form"),de=U("el-dialog"),ze=U("el-drawer"),Ne=Te("loading");return n(),i(le,null,[t("section",C1,[t("div",S1,[e[12]||(e[12]=t("span",null,"电器列表",-1)),t("div",x1,[c(_,{class:"head-actions-backup"},{default:m(()=>[c(s,{size:"small",plain:"",loading:N.value,disabled:J.value||I.value||N.value,onClick:Ce},{default:m(()=>[...e[9]||(e[9]=[Z("导出",-1)])]),_:1},8,["loading","disabled"]),c(s,{size:"small",plain:"",loading:I.value,disabled:J.value||I.value||N.value,onClick:Se},{default:m(()=>[...e[10]||(e[10]=[Z("导入",-1)])]),_:1},8,["loading","disabled"])]),_:1}),c(s,{type:"primary",size:"small",disabled:J.value||I.value||N.value,onClick:e[0]||(e[0]=u=>h.value=!0)},{default:m(()=>[...e[11]||(e[11]=[Z("添加电器",-1)])]),_:1},8,["disabled"])])]),Pe((n(),i("div",{class:"panel-bd","element-loading-text":we.value},[!J.value&&!r.value.length?(n(),i("div",E1,[t("div",z1,[c(ce(Ie),{size:24})]),e[14]||(e[14]=t("p",null,"还没有电器。添加客厅灯、空调等,让 MOSS 学会遥控器。",-1)),c(s,{type:"primary",onClick:e[1]||(e[1]=u=>h.value=!0)},{default:m(()=>[...e[13]||(e[13]=[Z("添加电器",-1)])]),_:1})])):r.value.length?(n(),i("div",N1,[(n(!0),i(le,null,ve(r.value,u=>(n(),i("button",{class:"appliance-card",key:u.id,type:"button",onClick:te=>$e(u)},[t("div",{class:ne(["appliance-icon",u.type])},[c(he,{type:u.type},null,8,["type"])],2),t("div",B1,[t("div",P1,[t("h3",null,b(u.name),1),t("span",T1,b(ie(u.type)),1)]),t("div",I1,[t("span",null,"已学会 "+b(ae(u))+" / "+b(u.commands.length)+" 个按键",1),t("span",j1,b(G(u))+"%",1)]),t("div",D1,[t("i",{style:me({width:G(u)+"%"})},null,4)])])],8,O1))),128))])):L("",!0)],8,L1)),[[Ne,J.value||I.value||N.value]])]),c(de,{modelValue:h.value,"onUpdate:modelValue":e[5]||(e[5]=u=>h.value=u),class:"moss-dialog",title:"添加电器",width:"420px","align-center":"","close-on-click-modal":!D.value},{footer:m(()=>[c(s,{disabled:D.value,onClick:e[4]||(e[4]=u=>h.value=!1)},{default:m(()=>[...e[15]||(e[15]=[Z("取消",-1)])]),_:1},8,["disabled"]),c(s,{type:"primary",loading:D.value,onClick:He},{default:m(()=>[...e[16]||(e[16]=[Z("添加",-1)])]),_:1},8,["loading"])]),default:m(()=>[c(Ee,{"label-position":"top"},{default:m(()=>[c(O,{label:"名称"},{default:m(()=>[c(Y,{modelValue:p.value.name,"onUpdate:modelValue":e[2]||(e[2]=u=>p.value.name=u),placeholder:"例如 客厅灯"},null,8,["modelValue"])]),_:1}),c(O,{label:"类型"},{default:m(()=>[c(Le,{modelValue:p.value.type,"onUpdate:modelValue":e[3]||(e[3]=u=>p.value.type=u),style:{width:"100%"}},{default:m(()=>[c(K,{label:"灯",value:"light"}),c(K,{label:"空调",value:"ac"}),c(K,{label:"电视",value:"tv"}),c(K,{label:"其他",value:"custom"})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","close-on-click-modal"]),c(ze,{modelValue:V.value,"onUpdate:modelValue":e[6]||(e[6]=u=>V.value=u),class:"cmd-drawer",size:"460px","append-to-body":"","close-on-click-modal":!B.value&&!P.value&&!C.value&&!E.value},{header:m(()=>[l.value?(n(),i("div",J1,[t("div",U1,[t("div",{class:ne(["appliance-icon",l.value.type])},[c(he,{type:l.value.type},null,8,["type"])],2),t("div",F1,[t("div",R1,[t("h3",null,b(l.value.name),1),t("button",{class:"cmd-rename",type:"button",title:"改名","aria-label":"改名",disabled:P.value,onClick:Ve},[c(ce(L0),{size:16,weight:"regular"})],8,W1),t("span",q1,b(ie(l.value.type)),1)]),t("div",X1,[t("span",null,"已学会 "+b(ae(l.value))+" / "+b(l.value.commands.length)+" 个按键",1),t("span",G1,b(G(l.value))+"%",1)]),t("div",Y1,[t("i",{style:me({width:G(l.value)+"%"})},null,4)])])]),t("div",K1,[c(s,{type:"primary",loading:B.value,onClick:Ae},{default:m(()=>[...e[17]||(e[17]=[Z("添加按键",-1)])]),_:1},8,["loading"]),c(s,{type:"danger",plain:"",loading:C.value,onClick:_e},{default:m(()=>[...e[18]||(e[18]=[Z("删除电器",-1)])]),_:1},8,["loading"])])])):L("",!0)]),default:m(()=>[l.value?(n(),i("div",Q1,[l.value.commands.length?(n(),i("div",aa,[(n(!0),i(le,null,ve(l.value.commands,u=>(n(),i("div",{class:"cmd-row",key:u.id},[t("div",ta,[t("strong",null,b(u.name),1),t("span",{class:ne(["cmd-status",u.learned?"ok":"idle"])},b(u.learned?"已学习":"未学习"),3)]),t("div",la,[c(s,{size:"small",onClick:te=>ke(u)},{default:m(()=>[...e[19]||(e[19]=[Z("学习",-1)])]),_:1},8,["onClick"]),c(s,{size:"small",disabled:!!E.value,loading:S.value===u.id,onClick:te=>Me(u)},{default:m(()=>[...e[20]||(e[20]=[Z("试发",-1)])]),_:1},8,["disabled","loading","onClick"]),c(s,{size:"small",type:"danger",plain:"",loading:E.value===u.id,disabled:!!E.value&&E.value!==u.id,onClick:te=>Ze(u)},{default:m(()=>[...e[21]||(e[21]=[Z("删除",-1)])]),_:1},8,["loading","disabled","onClick"])])]))),128))])):(n(),i("div",ea,"还没有按键。先添加,再学习红外信号。"))])):L("",!0)]),_:1},8,["modelValue","close-on-click-modal"]),c(de,{modelValue:o.value,"onUpdate:modelValue":e[8]||(e[8]=u=>o.value=u),class:"moss-dialog",title:"学习遥控器",width:"480px","align-center":"","close-on-click-modal":!1},{footer:m(()=>[c(s,{onClick:e[7]||(e[7]=u=>o.value=!1)},{default:m(()=>[...e[22]||(e[22]=[Z("关闭",-1)])]),_:1}),f.value===1?(n(),q(s,{key:0,type:"primary",loading:$.value,onClick:se},{default:m(()=>[...e[23]||(e[23]=[Z("开始学习",-1)])]),_:1},8,["loading"])):L("",!0),f.value===3?(n(),q(s,{key:1,loading:T.value,onClick:ue},{default:m(()=>[...e[24]||(e[24]=[Z("试发",-1)])]),_:1},8,["loading"])):L("",!0),f.value===3?(n(),q(s,{key:2,type:"primary",loading:z.value,onClick:be},{default:m(()=>[...e[25]||(e[25]=[Z("学成功了,保存",-1)])]),_:1},8,["loading"])):L("",!0),f.value>=3?(n(),q(s,{key:3,onClick:se},{default:m(()=>[...e[26]||(e[26]=[Z("没反应,重新学",-1)])]),_:1})):L("",!0)]),default:m(()=>[t("div",na,b(H.value),1),v.value?(n(),i("p",ra,b(v.value),1)):L("",!0)]),_:1},8,["modelValue"]),t("input",{ref_key:"importInput",ref:re,type:"file",accept:"application/json,.json",hidden:"",onChange:xe},null,544)],64)}}}),va=De(ia,[["__scopeId","data-v-9cd984b7"]]);export{va as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{I as zn,L as ro,s as I,h as L,T as Pn,y as Tt,d as xa,a as Sa,a8 as ka,x as Ca,z as Aa,m as Y,b as t,e as Lo,w as Ea,a9 as Oa,J as to,t as p,M as re,g as s,D as zo,A as z,f as tt,p as ve,F as qt,B as Xt,aa as Fa,O as Sn,R as kn,Q as Zt,q as Et,S as Ot,l as Pa,ab as Ta,o as G,C as No}from"./index-CMMVyrw-.js";import{m as Cn,u as La}from"./usePtzControl-B37Lef3z.js";import{_ as za}from"./esp-flasher-CeAm6Ct9.js";import{h as Na,i as Jo,a as ht,f as Qo,A as je,j as Ia,k as Ua,l as Ba,m as _a,n as Da,o as Ra,T as Wa,p as An,R as $a,q as Va,I as Io,r as ja,s as no,t as oo,u as Ya,V as oe,v as Ga,Q as Ha,C as gt,S as Ka,P as qa,W as Xa,w as Za,x as Ja,y as Qa,U as es,z as Nn,H as ts,G as nt,b as ns,J as os,K as as,c as Oe,L as Uo,E as Bo,e as _o,X as Do,D as st,Y as at,g as Ft,Z as Ee,_ as Pt,$ as Ro,a0 as ss,a1 as ls,a2 as is,a3 as rs,a4 as us,a5 as En,a6 as cs,a7 as Wo,a8 as ds,a9 as Ae,N as vs,aa as In,ab as Un,ac as fs,ad as ms}from"./engine-3d-DoxdUZhy.js";import{A as ps,C as hs,a as gs}from"./AppCredits-cV9khBSC.js";import{_ as ws}from"./_plugin-vue_export-helper-DlAUqK2U.js";function $o(){return window.location.origin}function bs(o){const n=L(!1),l=L(""),v=L(""),a=L(""),c=L(!1),h=L(""),b=L(""),u=L(""),M=L(""),y=L(""),S=L(!1),k=I(()=>!n.value||!l.value||l.value==="mpegts"&&!c.value||l.value==="mjpeg"&&!v.value);let g=null,F=!1,T=0,R=0,se=!1,X=0,fe=0,le=0,H=0,_=0,ie=!1;function he(){var f;X=Date.now(),fe=((f=o.value)==null?void 0:f.currentTime)||fe}function J(){window.clearTimeout(H),H=0}function Z(){window.clearInterval(le),le=0}function Fe(){Z(),he(),le=window.setInterval(()=>{if(!F||document.hidden||l.value!=="mpegts"||!c.value||!X)return;const f=o.value;if(!f||!f.offsetWidth||!f.offsetHeight)return;if(f.paused){const P=f.play();P&&typeof P.catch=="function"&&P.catch(()=>{})}const E=f.currentTime||0;if(E!==fe){fe=E,X=Date.now();return}Date.now()-X>8e3&&(console.warn("[mpegts] stall, reconnect"),ee())},1e3)}function ge(){var E;const f=o.value;return(E=f==null?void 0:f.buffered)!=null&&E.length?f.buffered.end(f.buffered.length-1)-f.currentTime:0}function we(){if(l.value!=="mjpeg"||!v.value)return;const f=v.value.replace(/([?&])t=\d+/,`$1t=${Date.now()}`);v.value=f.includes("t=")?f:`${v.value}${v.value.includes("?")?"&":"?"}t=${Date.now()}`}function Le(f){!F||!n.value||l.value!=="mpegts"||(console.warn("[mpegts]",f),window.clearTimeout(T),T=0,R=0,ie=!1,be(),Pe(se))}function K(){if(!F)return;if(document.hidden){_=Date.now(),l.value==="mpegts"&&(ie=!0,be());return}const f=_?Date.now()-_:0;if(_=0,we(),l.value!=="mpegts")return;if(ie||f>400||ge()>.7){Le("tab visible, resync live");return}const E=o.value;if(E!=null&&E.paused){const P=E.play();P&&typeof P.catch=="function"&&P.catch(()=>{})}he()}function Me(f){f.persisted&&K()}function Ye(){!F||l.value!=="mpegts"||(_=_||Date.now(),ie=!0,be())}function be(){J();const f=g;if(g=null,!!f){try{f.pause()}catch{}try{f.unload()}catch{}try{f.detachMediaElement()}catch{}try{f.destroy()}catch{}}}function De(){return new Promise(f=>{let E=0;const P=()=>{const U=o.value;if(U){f(U);return}if(++E>24){f(null);return}requestAnimationFrame(P)};P()})}function Pe(f){se=f,l.value="mpegts",Pn(async()=>{if(!F)return;const E=await De();if(!F)return;if(!E){c.value||(a.value="画面组件未就绪");return}if(!Cn.isSupported()){a.value="当前浏览器不支持直播预览";return}be();const P=f?"&codec=h264":"",U=Cn.createPlayer({type:"mpegts",isLive:!0,cors:!0,url:`${$o()}/api/camera/stream?t=${Date.now()}${P}`,hasAudio:!1,hasVideo:!0},{enableWorker:!1,enableStashBuffer:!1,liveBufferLatencyChasing:!0,liveBufferLatencyChasingOnPaused:!0,liveBufferLatencyMaxLatency:.5,liveBufferLatencyMinRemain:.12,liveSync:!0,liveSyncMaxLatency:.6,liveSyncTargetLatency:.2,liveSyncPlaybackRate:1.6,autoCleanupSourceBuffer:!0,autoCleanupMaxBackwardDuration:3,autoCleanupMinBackwardDuration:1});g=U,he(),U.attachMediaElement(E),U.load(),(()=>{const me=U.play();me&&typeof me.catch=="function"&&me.catch(()=>{})})();const W=()=>{g!==U||!F||(J(),R=0,a.value="",c.value=!0,he(),Fe())};J(),H=window.setTimeout(()=>{if(!(g!==U||!F)){if(!f&&!c.value){console.warn("[mpegts] no media in time, transcode"),be(),Pe(!0);return}W()}},f?2500:8e3),U.on(Cn.Events.MEDIA_INFO,W),U.on(Cn.Events.ERROR,(me,Ge)=>{if(!(g!==U||!F)){if(console.warn("[mpegts]",me,Ge),!f&&/hevc|h265|codec/i.test(`${me} ${Ge}`)){be(),Pe(!0);return}Date.now()-X<4e3&&X||ee()}})})}function ee(){if(!F||!n.value||T)return;he(),be();const f=Math.min(200*2**R,1600);R+=1,c.value||(a.value=R>1?"画面中断,正在重连…":"正在同步画面…"),T=window.setTimeout(()=>{T=0,!(!F||!n.value)&&Pe(se)},f)}function Te(){F=!1,window.clearTimeout(T),T=0,ie=!1,_=0,Z(),be(),v.value="",l.value="",c.value=!1}function Ne(f){window.clearTimeout(T),T=0,ie=!1,_=0,Z(),be(),F=!0,R=0,a.value="",c.value=!1;const E=f.playMode||(f.liveDirect?"mjpeg":"mpegts");if(E==="mpegts"){const P=/hevc|h265/.test(f.encoding||h.value);Pe(P);return}l.value=E==="snapshot"?"mjpeg":E,v.value=f.liveDirect||`${$o()}/api/camera/stream?t=${Date.now()}`}let ue=null;async function C(f){const E=(f==null?void 0:f.preview)!==!1;try{const P=await ro("/api/camera/status");ue=P,n.value=!!P.connected,S.value=!!P.ptz,h.value=P.encoding||"",u.value=P.hostname||"",M.value=P.source||"",y.value=P.sourceLabel||(P.source==="onboard"?"板载摄像头":""),b.value=P.info?[P.info.manufacturer,P.info.model].filter(Boolean).join(" "):"",E&&P.connected&&Ne(P)}catch{n.value=!1,S.value=!1}}function A(){return ue!=null&&ue.connected?(Ne(ue),!0):!1}return zn(()=>{document.removeEventListener("visibilitychange",K),document.removeEventListener("freeze",Ye),window.removeEventListener("pageshow",Me),Te()}),document.addEventListener("visibilitychange",K),document.addEventListener("freeze",Ye),window.addEventListener("pageshow",Me),{connected:n,playMode:l,streamUrl:v,frameError:a,encoding:h,infoText:b,hostname:u,source:M,sourceLabel:y,ptz:S,showPlaceholder:k,loadStatus:C,openPreview:A,stopPreview:Te}}const ys="/models/mediapipe/wasm",Ms="/models/mediapipe/blaze_face_short_range.tflite",xs="/models/mediapipe/blaze_face_full_range.tflite",Ss=80,ao=.52,ks=.008,Cs=.48,so=10;function On(o,n,l){return o+(n-o)*l}function As(o){return o instanceof HTMLVideoElement?{w:o.videoWidth,h:o.videoHeight}:{w:o.naturalWidth,h:o.naturalHeight}}function Es(o,n,l,v,a){const c=Math.max(v/n,a/l),h=(v-n*c)/2,b=(a-l*c)/2,u=o.width*.06,M=o.height*.1,y=o.height*.06;return{x:((o.x-u)*c+h)/v*100,y:((o.y-M)*c+b)/a*100,w:(o.width+u*2)*c/v*100,h:(o.height+M+y)*c/a*100}}function Os(o,n){const l=Math.max(o.x,n.x),v=Math.max(o.y,n.y),a=Math.min(o.x+o.width,n.x+n.width),c=Math.min(o.y+o.height,n.y+n.height),h=Math.max(0,a-l)*Math.max(0,c-v),b=o.width*o.height+n.width*n.height-h;return b>0?h/b:0}function Vo(o,n,l){const v=o.x>1.5?o.x/n:o.x,a=o.y>1.5?o.y/l:o.y;return{x:v,y:a}}function Fs(o,n,l){const v=o.boundingBox;if(v&&v.width>6&&v.height>6)return{x:v.originX,y:v.originY,width:v.width,height:v.height};const a=(o.keypoints||[]).filter(S=>{if(typeof S.score=="number"&&S.score<.3)return!1;const k=Vo(S,n,l);return k.x>.02&&k.x<.98&&k.y>.02&&k.y<.98});if(a.length<3)return null;let c=1,h=1,b=0,u=0;for(const S of a){const k=Vo(S,n,l);c=Math.min(c,k.x),h=Math.min(h,k.y),b=Math.max(b,k.x),u=Math.max(u,k.y)}const M=Math.max(.04,b-c),y=Math.max(.05,u-h);return{x:(c-M*.12)*n,y:(h-y*.22)*l,width:M*1.24*n,height:y*1.4*l}}function lo(o){var n,l;return((l=(n=o.categories)==null?void 0:n[0])==null?void 0:l.score)??0}function Ps(o,n,l){const v=o.width*o.height/(n*l);if(v<ks||v>Cs)return!1;const a=o.width/Math.max(1,o.height);return a>.5&&a<1.65}function Ts(o,n,l,v){const a=L("idle"),c=L(!1),h=L(!1),b=L(36),u=L(30),M=L(28),y=L(32);let S=null,k=null,g=null,F=null,T=!1,R=0,se=0,X=0,fe=0,le=0,H={x:36,y:30,w:28,h:32},_=!1,ie=null;const he=I(()=>a.value==="focus"||a.value==="track"),J=I(()=>a.value==="focus"?"FOCUSING":a.value==="track"?"TRACK":a.value==="search"?"SEARCH":"NO LOCK"),Z=I(()=>({left:`${b.value}%`,top:`${u.value}%`,width:`${M.value}%`,height:`${y.value}%`})),Fe=I(()=>({left:`${b.value+M.value/2}%`,top:`${u.value+y.value/2}%`,width:`${M.value}%`,height:`${y.value}%`}));function ge(){const C=o.value;if(C&&C.readyState>=2&&C.videoWidth>0)return C;const A=n.value;return A&&A.naturalWidth>0?A:null}async function we(C,A,f){const E={runningMode:"VIDEO",minDetectionConfidence:ao,minSuppressionThreshold:.4};try{return await C.FaceDetector.createFromOptions(A,{...E,baseOptions:{modelAssetPath:f,delegate:"GPU"}})}catch{return C.FaceDetector.createFromOptions(A,{...E,baseOptions:{modelAssetPath:f,delegate:"CPU"}})}}async function Le(){if(h.value&&(S||k))return!0;try{const C=await za(()=>import("./face-detect-BP1Ar9Ko.js"),[]),A=await C.FilesetResolver.forVisionTasks(ys),[f,E]=await Promise.allSettled([we(C,A,xs),we(C,A,Ms)]);if(k=f.status==="fulfilled"?f.value:null,S=E.status==="fulfilled"?E.value:null,!k&&!S)throw new Error("BlazeFace 模型加载失败");return h.value=!0,!0}catch(C){return console.warn("[blazeface]",C),h.value=!1,!1}}function K(C){const{w:A,h:f}=As(C);if(!A||!f)return null;const P=Math.min(1,960/Math.max(A,f)),U=Math.max(2,Math.round(A*P)),xe=Math.max(2,Math.round(f*P));return g||(g=document.createElement("canvas"),F=g.getContext("2d",{willReadFrequently:!0})),F?((g.width!==U||g.height!==xe)&&(g.width=U,g.height=xe),F.filter="contrast(1.28) brightness(1.16)",F.drawImage(C,0,0,U,xe),F.filter="none",{canvas:g,w:U,h:xe}):null}function Me(C,A,f){try{return C.detectForVideo(A,f).detections||[]}catch{return[]}}function Ye(C,A){const E=(k?Me(k,C,A):[]).filter(U=>lo(U)>=ao);return E.length?E:(S?Me(S,C,A+1):[]).filter(U=>lo(U)>=ao)}function be(C,A,f){let E=null;for(const P of C){const U=Fs(P,A,f);if(!U||!Ps(U,A,f))continue;const xe=lo(P),W=ie?Os(U,ie)*.4:0,me=xe+W;(!E||me>E.score)&&(E={box:U,score:me})}return E}function De(){if(!T||!S&&!k)return;const C=ge(),A=l.value,f=C?K(C):null;if(!C||!A||!f){X+=1,X>so&&ee();return}try{const E=Math.max(performance.now(),le+2);le=E;const P=Ye(f.canvas,E),U=A.clientWidth,xe=A.clientHeight,W=be(P,f.w,f.h);if(!W||!U||!xe){X+=1,X>so&&ee();return}X=0,ie=W.box,H=Es(W.box,f.w,f.h,U,xe),_=!0,Pe()}catch(E){console.warn("[blazeface]",E),X+=1,X>so&&ee()}}function Pe(){if(a.value==="track"||a.value==="focus"){if(a.value==="focus")return;a.value="track";return}a.value="focus",c.value=!0,window.clearTimeout(fe),fe=window.setTimeout(()=>{!T||!_||(c.value=!1,a.value="track")},880)}function ee(){_=!1,ie=null,c.value=!1,window.clearTimeout(fe),H={x:36,y:30,w:28,h:32},a.value!=="idle"&&(a.value="search")}function Te(){if(!T)return;const C=_?.38:.12;b.value=On(b.value,H.x,C),u.value=On(u.value,H.y,C),M.value=On(M.value,H.w,C),y.value=On(y.value,H.h,C),se=window.requestAnimationFrame(Te)}async function Ne(){if(T)return;T=!0,a.value="search",X=0,_=!1,ie=null,le=0;const C=await Le();if(T){if(!C){a.value="search";return}Te(),De(),R=window.setInterval(()=>De(),Ss)}}function ue(){T=!1,window.clearInterval(R),window.clearTimeout(fe),window.cancelAnimationFrame(se),R=0,fe=0,se=0,_=!1,ie=null,c.value=!1,a.value="idle",H={x:36,y:30,w:28,h:32},b.value=36,u.value=30,M.value=28,y.value=32,g=null,F=null}return Tt(v,C=>{C?Ne():ue()},{flush:"post"}),zn(ue),{status:a,focusing:c,hasFace:he,ready:h,lockLabel:J,boxStyle:Z,reticleStyle:Fe}}const Ls=new oe(.176,.463,1),zs=new oe(.38,.68,1),Jt=new oe(.98,.99,1),Ns=new oe(0,0,1),jo=new Ha,Yo=new oe,Go=new oe;function ne(o,n,l){return o+(n-o)*l}function Is(){const o=document.createElement("canvas");o.width=128,o.height=32;const n=o.getContext("2d");n.clearRect(0,0,128,32);for(let a=0;a<3;a++){const c=8+a*8+(a-1)*2,h=n.createLinearGradient(0,c,128,c);h.addColorStop(0,"rgba(255,255,255,0)"),h.addColorStop(.12,"rgba(255,255,255,0.55)"),h.addColorStop(.45,"rgba(220,240,255,0.32)"),h.addColorStop(.78,"rgba(180,220,255,0.12)"),h.addColorStop(1,"rgba(255,255,255,0)"),n.fillStyle=h,n.fillRect(0,c-5,128,10)}const l=n.createRadialGradient(64,16,0,64,16,28);l.addColorStop(0,"rgba(255,255,255,0.35)"),l.addColorStop(1,"rgba(255,255,255,0)"),n.globalCompositeOperation="lighter",n.fillStyle=l,n.fillRect(0,0,128,32);const v=new Jo(o);return v.colorSpace=ht,v}function Us(o,n=16){const l=[];for(let v=0;v<n;v++){const a=v/(n-1),c=ne(-o*.9,o*.9,a),h=Math.min(1,Math.abs(c/o)),b=Math.pow(1-h,1.55),u=Math.min(1,Math.pow(h,.92)*.92+(1-b)*.38),M=-Math.sqrt(Math.max(0,o*o-c*c));if(l.push({x:M,y:c,z:0,centerW:b,edgeW:u}),h>.12){const y=o*ne(.035,.13,u);for(const S of[-1,1]){const k=y*S,g=-Math.sqrt(Math.max(0,o*o-c*c-k*k));l.push({x:g,y:c,z:k,centerW:b*ne(.82,.55,u),edgeW:u})}}}return l}function Bs(o){return Go.set(o.x,o.y,o.z).normalize(),Yo.set(-1,0,0).addScaledVector(Go,ne(.1,.22,o.edgeW)),Yo.normalize()}function _s(o,n,l,v){const{centerW:a,edgeW:c}=l,h=o*ne(.22,.58,a)*ne(.62,1,1-c*.28),b=o*ne(.05,.085,a)*ne(.78,1,1-c*.25),u=new Qo({map:n,transparent:!0,depthWrite:!1,depthTest:!1,blending:je,toneMapped:!1,opacity:.92}),M=new Ia({duration:10,looping:!0,prewarm:!0,worldSpace:!0,shape:new ja({radius:o*ne(.006,.022,c),angle:ne(Math.PI/20,Math.PI/6,c),thickness:.85,arc:ne(Math.PI*.55,Math.PI*1.05,1-a*.35)}),emissionOverTime:new An(ne(14,38,a)*ne(.65,1.15,c)),startLife:new Io(ne(1.6,2.2,a)+c*.35,ne(2.4,3.4,a)+c*.55),startSpeed:new An(b),startSize:new Io(o*ne(.0012,.0022,1-a*.4),o*ne(.0024,.0042,1-a*.25)),startColor:new Va(new Ga(Jt.x,Jt.y,Jt.z,ne(.14,.32,a))),material:u,renderMode:$a.Trail,renderOrder:1,rendererEmitterSettings:{startLength:new An(h),followLocalOrigin:!1},behaviors:[new Ua(new no([[new oo(1,.9,.42,.02),0]])),new Ba(new no([[new oo(1,.92,.48,0),0]])),new _a(new Ya([[Jt.clone(),0],[Ls.clone(),.28],[zs.clone(),.62],[Jt.clone(),1]],[[ne(.42,.72,a),0],[ne(.32,.52,a),.25],[ne(.16,.32,a),.58],[0,1]])),new Da(new oe(0,-.08,0),new An(o*ne(.012,.022,c))),new Ra(new no([[new oo(1,.86,.5,.12),0]])),new Wa(new oe(.018,.028,.014),2,new oe(o*ne(.008,.016,c),o*ne(.005,.012,c),o*ne(.006,.014,c)),new oe(.35,.5,.42))]}),y=Bs(l);return jo.setFromUnitVectors(Ns,y),M.emitter.quaternion.copy(jo),M.emitter.position.set(l.x,l.y,l.z),M.play(),M}function Ds(o,n,l,v){const a=new Na;a.frustumCulled=!1,a.renderOrder=1,o.add(a);const c=Is(),h=Us(n,10),b=[];for(const u of h){const M=_s(n,c,u);o.add(M.emitter),a.addSystem(M),b.push(M)}return{batchedRenderer:a,update(u){a.update(u)},dispose(){for(const u of b)u.stop(),u.dispose(),u.emitter.removeFromParent();a.removeFromParent(),c.dispose()}}}const Rs="/stl/planetary_engine.stl",Qt=6211800,Ws=13934615,Ho=.05,$s=2.4,Ko=.68,Vs=.22;function lt(){return`
|
|
1
|
+
import{G as zn,I as ro,b as I,r as L,R as Fn,A as Tt,d as xa,u as Sa,a6 as ka,y as Ca,z as Aa,g as Y,f as t,j as Lo,w as Ea,a7 as Oa,H as to,t as p,J as re,a as s,C as zo,n as z,k as tt,i as ve,F as qt,h as Xt,a8 as Pa,M as Sn,P as kn,O as Zt,x as Et,Q as Ot,q as Fa,a9 as Ta,o as G,B as No}from"./index-BLut91yI.js";import{m as Cn,u as La}from"./usePtzControl-5dF4y7fi.js";import{_ as za}from"./esp-flasher-CeAm6Ct9.js";import{h as Na,i as Jo,a as ht,f as Qo,A as je,j as Ia,k as Ua,l as Ba,m as _a,n as Da,o as Ra,T as Wa,p as An,R as $a,q as Va,I as Io,r as ja,s as no,t as oo,u as Ya,V as oe,v as Ga,Q as Ha,C as gt,S as Ka,P as qa,W as Xa,w as Za,x as Ja,y as Qa,U as es,z as Nn,H as ts,G as nt,b as ns,J as os,K as as,c as Oe,L as Uo,E as Bo,e as _o,X as Do,D as st,Y as at,g as Pt,Z as Ee,_ as Ft,$ as Ro,a0 as ss,a1 as ls,a2 as is,a3 as rs,a4 as us,a5 as En,a6 as cs,a7 as Wo,a8 as ds,a9 as Ae,N as vs,aa as In,ab as Un,ac as fs,ad as ms}from"./engine-3d-DoxdUZhy.js";import{A as ps,C as hs,a as gs}from"./AppCredits-Dg50-zpy.js";import{_ as ws}from"./_plugin-vue_export-helper-DlAUqK2U.js";function $o(){return window.location.origin}function bs(o){const n=L(!1),l=L(""),v=L(""),a=L(""),c=L(!1),h=L(""),b=L(""),u=L(""),M=L(""),y=L(""),S=L(!1),k=I(()=>!n.value||!l.value||l.value==="mpegts"&&!c.value||l.value==="mjpeg"&&!v.value);let g=null,P=!1,T=0,R=0,se=!1,X=0,fe=0,le=0,H=0,_=0,ie=!1;function he(){var f;X=Date.now(),fe=((f=o.value)==null?void 0:f.currentTime)||fe}function J(){window.clearTimeout(H),H=0}function Z(){window.clearInterval(le),le=0}function Pe(){Z(),he(),le=window.setInterval(()=>{if(!P||document.hidden||l.value!=="mpegts"||!c.value||!X)return;const f=o.value;if(!f||!f.offsetWidth||!f.offsetHeight)return;if(f.paused){const F=f.play();F&&typeof F.catch=="function"&&F.catch(()=>{})}const E=f.currentTime||0;if(E!==fe){fe=E,X=Date.now();return}Date.now()-X>8e3&&(console.warn("[mpegts] stall, reconnect"),ee())},1e3)}function ge(){var E;const f=o.value;return(E=f==null?void 0:f.buffered)!=null&&E.length?f.buffered.end(f.buffered.length-1)-f.currentTime:0}function we(){if(l.value!=="mjpeg"||!v.value)return;const f=v.value.replace(/([?&])t=\d+/,`$1t=${Date.now()}`);v.value=f.includes("t=")?f:`${v.value}${v.value.includes("?")?"&":"?"}t=${Date.now()}`}function Le(f){!P||!n.value||l.value!=="mpegts"||(console.warn("[mpegts]",f),window.clearTimeout(T),T=0,R=0,ie=!1,be(),Fe(se))}function K(){if(!P)return;if(document.hidden){_=Date.now(),l.value==="mpegts"&&(ie=!0,be());return}const f=_?Date.now()-_:0;if(_=0,we(),l.value!=="mpegts")return;if(ie||f>400||ge()>.7){Le("tab visible, resync live");return}const E=o.value;if(E!=null&&E.paused){const F=E.play();F&&typeof F.catch=="function"&&F.catch(()=>{})}he()}function Me(f){f.persisted&&K()}function Ye(){!P||l.value!=="mpegts"||(_=_||Date.now(),ie=!0,be())}function be(){J();const f=g;if(g=null,!!f){try{f.pause()}catch{}try{f.unload()}catch{}try{f.detachMediaElement()}catch{}try{f.destroy()}catch{}}}function De(){return new Promise(f=>{let E=0;const F=()=>{const U=o.value;if(U){f(U);return}if(++E>24){f(null);return}requestAnimationFrame(F)};F()})}function Fe(f){se=f,l.value="mpegts",Fn(async()=>{if(!P)return;const E=await De();if(!P)return;if(!E){c.value||(a.value="画面组件未就绪");return}if(!Cn.isSupported()){a.value="当前浏览器不支持直播预览";return}be();const F=f?"&codec=h264":"",U=Cn.createPlayer({type:"mpegts",isLive:!0,cors:!0,url:`${$o()}/api/camera/stream?t=${Date.now()}${F}`,hasAudio:!1,hasVideo:!0},{enableWorker:!1,enableStashBuffer:!1,liveBufferLatencyChasing:!0,liveBufferLatencyChasingOnPaused:!0,liveBufferLatencyMaxLatency:.5,liveBufferLatencyMinRemain:.12,liveSync:!0,liveSyncMaxLatency:.6,liveSyncTargetLatency:.2,liveSyncPlaybackRate:1.6,autoCleanupSourceBuffer:!0,autoCleanupMaxBackwardDuration:3,autoCleanupMinBackwardDuration:1});g=U,he(),U.attachMediaElement(E),U.load(),(()=>{const me=U.play();me&&typeof me.catch=="function"&&me.catch(()=>{})})();const W=()=>{g!==U||!P||(J(),R=0,a.value="",c.value=!0,he(),Pe())};J(),H=window.setTimeout(()=>{if(!(g!==U||!P)){if(!f&&!c.value){console.warn("[mpegts] no media in time, transcode"),be(),Fe(!0);return}W()}},f?2500:8e3),U.on(Cn.Events.MEDIA_INFO,W),U.on(Cn.Events.ERROR,(me,Ge)=>{if(!(g!==U||!P)){if(console.warn("[mpegts]",me,Ge),!f&&/hevc|h265|codec/i.test(`${me} ${Ge}`)){be(),Fe(!0);return}Date.now()-X<4e3&&X||ee()}})})}function ee(){if(!P||!n.value||T)return;he(),be();const f=Math.min(200*2**R,1600);R+=1,c.value||(a.value=R>1?"画面中断,正在重连…":"正在同步画面…"),T=window.setTimeout(()=>{T=0,!(!P||!n.value)&&Fe(se)},f)}function Te(){P=!1,window.clearTimeout(T),T=0,ie=!1,_=0,Z(),be(),v.value="",l.value="",c.value=!1}function Ne(f){window.clearTimeout(T),T=0,ie=!1,_=0,Z(),be(),P=!0,R=0,a.value="",c.value=!1;const E=f.playMode||(f.liveDirect?"mjpeg":"mpegts");if(E==="mpegts"){const F=/hevc|h265/.test(f.encoding||h.value);Fe(F);return}l.value=E==="snapshot"?"mjpeg":E,v.value=f.liveDirect||`${$o()}/api/camera/stream?t=${Date.now()}`}let ue=null;async function C(f){const E=(f==null?void 0:f.preview)!==!1;try{const F=await ro("/api/camera/status");ue=F,n.value=!!F.connected,S.value=!!F.ptz,h.value=F.encoding||"",u.value=F.hostname||"",M.value=F.source||"",y.value=F.sourceLabel||(F.source==="onboard"?"板载摄像头":""),b.value=F.info?[F.info.manufacturer,F.info.model].filter(Boolean).join(" "):"",E&&F.connected&&Ne(F)}catch{n.value=!1,S.value=!1}}function A(){return ue!=null&&ue.connected?(Ne(ue),!0):!1}return zn(()=>{document.removeEventListener("visibilitychange",K),document.removeEventListener("freeze",Ye),window.removeEventListener("pageshow",Me),Te()}),document.addEventListener("visibilitychange",K),document.addEventListener("freeze",Ye),window.addEventListener("pageshow",Me),{connected:n,playMode:l,streamUrl:v,frameError:a,encoding:h,infoText:b,hostname:u,source:M,sourceLabel:y,ptz:S,showPlaceholder:k,loadStatus:C,openPreview:A,stopPreview:Te}}const ys="/models/mediapipe/wasm",Ms="/models/mediapipe/blaze_face_short_range.tflite",xs="/models/mediapipe/blaze_face_full_range.tflite",Ss=80,ao=.52,ks=.008,Cs=.48,so=10;function On(o,n,l){return o+(n-o)*l}function As(o){return o instanceof HTMLVideoElement?{w:o.videoWidth,h:o.videoHeight}:{w:o.naturalWidth,h:o.naturalHeight}}function Es(o,n,l,v,a){const c=Math.max(v/n,a/l),h=(v-n*c)/2,b=(a-l*c)/2,u=o.width*.06,M=o.height*.1,y=o.height*.06;return{x:((o.x-u)*c+h)/v*100,y:((o.y-M)*c+b)/a*100,w:(o.width+u*2)*c/v*100,h:(o.height+M+y)*c/a*100}}function Os(o,n){const l=Math.max(o.x,n.x),v=Math.max(o.y,n.y),a=Math.min(o.x+o.width,n.x+n.width),c=Math.min(o.y+o.height,n.y+n.height),h=Math.max(0,a-l)*Math.max(0,c-v),b=o.width*o.height+n.width*n.height-h;return b>0?h/b:0}function Vo(o,n,l){const v=o.x>1.5?o.x/n:o.x,a=o.y>1.5?o.y/l:o.y;return{x:v,y:a}}function Ps(o,n,l){const v=o.boundingBox;if(v&&v.width>6&&v.height>6)return{x:v.originX,y:v.originY,width:v.width,height:v.height};const a=(o.keypoints||[]).filter(S=>{if(typeof S.score=="number"&&S.score<.3)return!1;const k=Vo(S,n,l);return k.x>.02&&k.x<.98&&k.y>.02&&k.y<.98});if(a.length<3)return null;let c=1,h=1,b=0,u=0;for(const S of a){const k=Vo(S,n,l);c=Math.min(c,k.x),h=Math.min(h,k.y),b=Math.max(b,k.x),u=Math.max(u,k.y)}const M=Math.max(.04,b-c),y=Math.max(.05,u-h);return{x:(c-M*.12)*n,y:(h-y*.22)*l,width:M*1.24*n,height:y*1.4*l}}function lo(o){var n,l;return((l=(n=o.categories)==null?void 0:n[0])==null?void 0:l.score)??0}function Fs(o,n,l){const v=o.width*o.height/(n*l);if(v<ks||v>Cs)return!1;const a=o.width/Math.max(1,o.height);return a>.5&&a<1.65}function Ts(o,n,l,v){const a=L("idle"),c=L(!1),h=L(!1),b=L(36),u=L(30),M=L(28),y=L(32);let S=null,k=null,g=null,P=null,T=!1,R=0,se=0,X=0,fe=0,le=0,H={x:36,y:30,w:28,h:32},_=!1,ie=null;const he=I(()=>a.value==="focus"||a.value==="track"),J=I(()=>a.value==="focus"?"FOCUSING":a.value==="track"?"TRACK":a.value==="search"?"SEARCH":"NO LOCK"),Z=I(()=>({left:`${b.value}%`,top:`${u.value}%`,width:`${M.value}%`,height:`${y.value}%`})),Pe=I(()=>({left:`${b.value+M.value/2}%`,top:`${u.value+y.value/2}%`,width:`${M.value}%`,height:`${y.value}%`}));function ge(){const C=o.value;if(C&&C.readyState>=2&&C.videoWidth>0)return C;const A=n.value;return A&&A.naturalWidth>0?A:null}async function we(C,A,f){const E={runningMode:"VIDEO",minDetectionConfidence:ao,minSuppressionThreshold:.4};try{return await C.FaceDetector.createFromOptions(A,{...E,baseOptions:{modelAssetPath:f,delegate:"GPU"}})}catch{return C.FaceDetector.createFromOptions(A,{...E,baseOptions:{modelAssetPath:f,delegate:"CPU"}})}}async function Le(){if(h.value&&(S||k))return!0;try{const C=await za(()=>import("./face-detect-BP1Ar9Ko.js"),[]),A=await C.FilesetResolver.forVisionTasks(ys),[f,E]=await Promise.allSettled([we(C,A,xs),we(C,A,Ms)]);if(k=f.status==="fulfilled"?f.value:null,S=E.status==="fulfilled"?E.value:null,!k&&!S)throw new Error("BlazeFace 模型加载失败");return h.value=!0,!0}catch(C){return console.warn("[blazeface]",C),h.value=!1,!1}}function K(C){const{w:A,h:f}=As(C);if(!A||!f)return null;const F=Math.min(1,960/Math.max(A,f)),U=Math.max(2,Math.round(A*F)),xe=Math.max(2,Math.round(f*F));return g||(g=document.createElement("canvas"),P=g.getContext("2d",{willReadFrequently:!0})),P?((g.width!==U||g.height!==xe)&&(g.width=U,g.height=xe),P.filter="contrast(1.28) brightness(1.16)",P.drawImage(C,0,0,U,xe),P.filter="none",{canvas:g,w:U,h:xe}):null}function Me(C,A,f){try{return C.detectForVideo(A,f).detections||[]}catch{return[]}}function Ye(C,A){const E=(k?Me(k,C,A):[]).filter(U=>lo(U)>=ao);return E.length?E:(S?Me(S,C,A+1):[]).filter(U=>lo(U)>=ao)}function be(C,A,f){let E=null;for(const F of C){const U=Ps(F,A,f);if(!U||!Fs(U,A,f))continue;const xe=lo(F),W=ie?Os(U,ie)*.4:0,me=xe+W;(!E||me>E.score)&&(E={box:U,score:me})}return E}function De(){if(!T||!S&&!k)return;const C=ge(),A=l.value,f=C?K(C):null;if(!C||!A||!f){X+=1,X>so&&ee();return}try{const E=Math.max(performance.now(),le+2);le=E;const F=Ye(f.canvas,E),U=A.clientWidth,xe=A.clientHeight,W=be(F,f.w,f.h);if(!W||!U||!xe){X+=1,X>so&&ee();return}X=0,ie=W.box,H=Es(W.box,f.w,f.h,U,xe),_=!0,Fe()}catch(E){console.warn("[blazeface]",E),X+=1,X>so&&ee()}}function Fe(){if(a.value==="track"||a.value==="focus"){if(a.value==="focus")return;a.value="track";return}a.value="focus",c.value=!0,window.clearTimeout(fe),fe=window.setTimeout(()=>{!T||!_||(c.value=!1,a.value="track")},880)}function ee(){_=!1,ie=null,c.value=!1,window.clearTimeout(fe),H={x:36,y:30,w:28,h:32},a.value!=="idle"&&(a.value="search")}function Te(){if(!T)return;const C=_?.38:.12;b.value=On(b.value,H.x,C),u.value=On(u.value,H.y,C),M.value=On(M.value,H.w,C),y.value=On(y.value,H.h,C),se=window.requestAnimationFrame(Te)}async function Ne(){if(T)return;T=!0,a.value="search",X=0,_=!1,ie=null,le=0;const C=await Le();if(T){if(!C){a.value="search";return}Te(),De(),R=window.setInterval(()=>De(),Ss)}}function ue(){T=!1,window.clearInterval(R),window.clearTimeout(fe),window.cancelAnimationFrame(se),R=0,fe=0,se=0,_=!1,ie=null,c.value=!1,a.value="idle",H={x:36,y:30,w:28,h:32},b.value=36,u.value=30,M.value=28,y.value=32,g=null,P=null}return Tt(v,C=>{C?Ne():ue()},{flush:"post"}),zn(ue),{status:a,focusing:c,hasFace:he,ready:h,lockLabel:J,boxStyle:Z,reticleStyle:Pe}}const Ls=new oe(.176,.463,1),zs=new oe(.38,.68,1),Jt=new oe(.98,.99,1),Ns=new oe(0,0,1),jo=new Ha,Yo=new oe,Go=new oe;function ne(o,n,l){return o+(n-o)*l}function Is(){const o=document.createElement("canvas");o.width=128,o.height=32;const n=o.getContext("2d");n.clearRect(0,0,128,32);for(let a=0;a<3;a++){const c=8+a*8+(a-1)*2,h=n.createLinearGradient(0,c,128,c);h.addColorStop(0,"rgba(255,255,255,0)"),h.addColorStop(.12,"rgba(255,255,255,0.55)"),h.addColorStop(.45,"rgba(220,240,255,0.32)"),h.addColorStop(.78,"rgba(180,220,255,0.12)"),h.addColorStop(1,"rgba(255,255,255,0)"),n.fillStyle=h,n.fillRect(0,c-5,128,10)}const l=n.createRadialGradient(64,16,0,64,16,28);l.addColorStop(0,"rgba(255,255,255,0.35)"),l.addColorStop(1,"rgba(255,255,255,0)"),n.globalCompositeOperation="lighter",n.fillStyle=l,n.fillRect(0,0,128,32);const v=new Jo(o);return v.colorSpace=ht,v}function Us(o,n=16){const l=[];for(let v=0;v<n;v++){const a=v/(n-1),c=ne(-o*.9,o*.9,a),h=Math.min(1,Math.abs(c/o)),b=Math.pow(1-h,1.55),u=Math.min(1,Math.pow(h,.92)*.92+(1-b)*.38),M=-Math.sqrt(Math.max(0,o*o-c*c));if(l.push({x:M,y:c,z:0,centerW:b,edgeW:u}),h>.12){const y=o*ne(.035,.13,u);for(const S of[-1,1]){const k=y*S,g=-Math.sqrt(Math.max(0,o*o-c*c-k*k));l.push({x:g,y:c,z:k,centerW:b*ne(.82,.55,u),edgeW:u})}}}return l}function Bs(o){return Go.set(o.x,o.y,o.z).normalize(),Yo.set(-1,0,0).addScaledVector(Go,ne(.1,.22,o.edgeW)),Yo.normalize()}function _s(o,n,l,v){const{centerW:a,edgeW:c}=l,h=o*ne(.22,.58,a)*ne(.62,1,1-c*.28),b=o*ne(.05,.085,a)*ne(.78,1,1-c*.25),u=new Qo({map:n,transparent:!0,depthWrite:!1,depthTest:!1,blending:je,toneMapped:!1,opacity:.92}),M=new Ia({duration:10,looping:!0,prewarm:!0,worldSpace:!0,shape:new ja({radius:o*ne(.006,.022,c),angle:ne(Math.PI/20,Math.PI/6,c),thickness:.85,arc:ne(Math.PI*.55,Math.PI*1.05,1-a*.35)}),emissionOverTime:new An(ne(14,38,a)*ne(.65,1.15,c)),startLife:new Io(ne(1.6,2.2,a)+c*.35,ne(2.4,3.4,a)+c*.55),startSpeed:new An(b),startSize:new Io(o*ne(.0012,.0022,1-a*.4),o*ne(.0024,.0042,1-a*.25)),startColor:new Va(new Ga(Jt.x,Jt.y,Jt.z,ne(.14,.32,a))),material:u,renderMode:$a.Trail,renderOrder:1,rendererEmitterSettings:{startLength:new An(h),followLocalOrigin:!1},behaviors:[new Ua(new no([[new oo(1,.9,.42,.02),0]])),new Ba(new no([[new oo(1,.92,.48,0),0]])),new _a(new Ya([[Jt.clone(),0],[Ls.clone(),.28],[zs.clone(),.62],[Jt.clone(),1]],[[ne(.42,.72,a),0],[ne(.32,.52,a),.25],[ne(.16,.32,a),.58],[0,1]])),new Da(new oe(0,-.08,0),new An(o*ne(.012,.022,c))),new Ra(new no([[new oo(1,.86,.5,.12),0]])),new Wa(new oe(.018,.028,.014),2,new oe(o*ne(.008,.016,c),o*ne(.005,.012,c),o*ne(.006,.014,c)),new oe(.35,.5,.42))]}),y=Bs(l);return jo.setFromUnitVectors(Ns,y),M.emitter.quaternion.copy(jo),M.emitter.position.set(l.x,l.y,l.z),M.play(),M}function Ds(o,n,l,v){const a=new Na;a.frustumCulled=!1,a.renderOrder=1,o.add(a);const c=Is(),h=Us(n,10),b=[];for(const u of h){const M=_s(n,c,u);o.add(M.emitter),a.addSystem(M),b.push(M)}return{batchedRenderer:a,update(u){a.update(u)},dispose(){for(const u of b)u.stop(),u.dispose(),u.emitter.removeFromParent();a.removeFromParent(),c.dispose()}}}const Rs="/stl/planetary_engine.stl",Qt=6211800,Ws=13934615,Ho=.05,$s=2.4,Ko=.68,Vs=.22;function lt(){return`
|
|
2
2
|
float hash(vec2 p) {
|
|
3
3
|
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
|
|
4
4
|
}
|
|
@@ -503,7 +503,7 @@ import{I as zn,L as ro,s as I,h as L,T as Pn,y as Tt,d as xa,a as Sa,a8 as ka,x
|
|
|
503
503
|
col = mix(col, cyan, core);
|
|
504
504
|
gl_FragColor = vec4(col, clamp(mask, 0.0, 0.22 * uFade));
|
|
505
505
|
}
|
|
506
|
-
`})}function
|
|
506
|
+
`})}function Pn(o="core"){const n=o==="veil";return new Ae({transparent:!0,blending:je,depthWrite:!1,depthTest:!0,side:st,toneMapped:!1,uniforms:{uTime:{value:0},uBoost:{value:1},uVeil:{value:n?1:0},uFade:{value:1},uMask:{value:null},uUseMask:{value:0},uMaskScale:{value:new Nn(2.8,1.8)},uMaskStrength:{value:1}},vertexShader:`
|
|
507
507
|
varying float vAlong;
|
|
508
508
|
varying float vRad;
|
|
509
509
|
varying vec2 vMaskUv;
|
|
@@ -565,4 +565,4 @@ import{I as zn,L as ro,s as I,h as L,T as Pn,y as Tt,d as xa,a as Sa,a8 as ka,x
|
|
|
565
565
|
col = mix(col, hot, head * hardCore * (1.0 - uVeil));
|
|
566
566
|
gl_FragColor = vec4(col, clamp(mask, 0.0, (uVeil > 0.5 ? 0.42 : 0.78) * uFade));
|
|
567
567
|
}
|
|
568
|
-
`})}function sl(o){const n=[],l=[],v=[],a=[-.06,0,.058],c=26;for(let h=0;h<a.length;h++)for(let b=0;b<c;b++){if(B(h*1.7,b+2)<.1)continue;const u=h*.41+B(b,h+5)*.62,M=(b+u)/c*Math.PI*2+(B(b*1.3,h+9)-.5)*.1,y=a[h]+(B(h,b+11)-.5)*.028,S=o*1.002;n.push(S*Math.sin(y),S*Math.cos(y)*Math.cos(M),S*Math.cos(y)*Math.sin(M)),l.push(1.15+B(b,8)*.45),v.push(B(b+h*3,17)*Math.PI*2)}return{pos:new Float32Array(n),size:new Float32Array(l),phase:new Float32Array(v)}}function ll(o){const n=[],l=[],v=[],a=(u,M,y)=>{const S=Math.hypot(u,y)/o,k=Math.abs(M/o);return S<.5&&k<.78},c=(u,M,y,S,k)=>{a(u,M,y)||(n.push(u,M,y),l.push(S),v.push(k))},h=[-.2,-.28,-.36,-.44,-.52];for(let u=0;u<h.length;u++){const M=40+u*6,y=.1+u*.03;for(let S=0;S<M;S++){if(B(u*2.1,S+4)<y)continue;const k=u*.31+B(S,u+2)*.55,g=(S+k)/M*Math.PI*2+(B(S*1.2,u+11)-.5)*.14,F=h[u]+(B(u,S+21)-.5)*.022,T=o*(1.002+B(S,8)*.005);c(T*Math.sin(F),T*Math.cos(F)*Math.cos(g),T*Math.cos(F)*Math.sin(g),.52+B(S,8)*.32,B(S+u,23)*Math.PI*2)}}const b=[-.62,-.78,-.94];for(let u=0;u<b.length;u++){const M=28+u*3,y=B(u,3)*Math.PI*2,S=.32+B(u,5)*.45;for(let k=0;k<M;k++){if(B(u*2.3,k+7)<.16)continue;const g=u*.35+B(k,u+4)*.62,F=(k+g)/M*Math.PI*2+(B(k*1.1,u+13)-.5)*.18;if(u>=2&&Math.abs((F-y+Math.PI)%(Math.PI*2)-Math.PI)<S*.5)continue;const T=b[u]+(B(u,k+21)-.5)*.028,R=o*(1.002+B(k,47)*.004);c(R*Math.sin(T),R*Math.cos(T)*Math.cos(F),R*Math.cos(T)*Math.sin(F),.46+B(k,8)*.28,B(k+u,29)*Math.PI*2)}}return{pos:new Float32Array(n),size:new Float32Array(l),phase:new Float32Array(v)}}function il(o,n,l){const v=document.createElement("canvas");v.width=512,v.height=128;const a=v.getContext("2d");a.clearRect(0,0,512,128),a.fillStyle="rgba(4, 12, 18, 0.55)",a.fillRect(8,24,496,84),a.strokeStyle="rgba(94, 200, 216, 0.65)",a.lineWidth=2,a.strokeRect(8,24,496,84),a.fillStyle="#d4a017",a.fillRect(8,24,6,84),a.font="600 36px ui-monospace, monospace",a.fillStyle="#7ee0ee",a.fillText(o,28,64),a.font="22px ui-monospace, monospace",a.fillStyle="rgba(170, 196, 210, 0.85)",a.fillText(n,28,94);const c=new Jo(v);c.colorSpace=ht;const h=new fs(new ms({map:c,transparent:!0,depthWrite:!1}));return h.scale.set(l,l*.25,1),h}function rl(o,n,l){const v=L("载入行星发动机…");let a=null,c=null,h=null,b=null,u=null,M=null,y=null,S=null,k=null,g=null,F=null,T=null,R=null,se=null,X=null,fe=null,le=null,H=null,_=null,ie=null,he=null,J=new oe,Z=0,Fe=!1,ge=0,we=.55,Le=0,K=1,Me=new oe,Ye=80,be=.18,De=new oe,Pe=new oe,ee=80,Te=180,Ne=.31,ue=.1,C=0,A=!1,f=!1,E=!0,P=!1,U=0,xe=0,W=null,me=0,Ge=0,Re=0;const Bn=new gt(462872),wt=new gt(0),Ze=[],te=[],Ie=[],Je=[],it=new oe;let rt=null,ut=null,ze=null,Se=null,Ue=null,We=null,Ce=null,He=0,bt=80,ae=null,ce=null,Qe=null;const de=[];function en(){const d=o.value;if(!d||!a||!u)return;const w=Math.max(1,Math.round(d.clientWidth)),O=Math.max(1,Math.round(d.clientHeight));w===Ge&&O===Re||(Ge=w,Re=O,a.setSize(w,O,!1),c==null||c.setSize(w,O),h==null||h.resolution.set(Math.max(1,Math.floor(w*.5)),Math.max(1,Math.floor(O*.5))),u.aspect=w/O,u.updateProjectionMatrix(),Mt())}function yt(){me&&window.cancelAnimationFrame(me),me=window.requestAnimationFrame(()=>{me=0,en()})}function ct(){!h||P||(h.strength=.92,h.radius=.46,h.threshold=.42,P=!0)}function tn(){if(!c||!h||!ae||!ce||!a||!b||!u)return;const d=ae.visible,w=ce.visible;ae.visible=!1,ce.visible=!0,h.enabled=!0,ct(),c.render(),ae.visible=d,ce.visible=w,h.enabled=w}function zt(){if(!(!ae||!ce)){if(!A&&C>=.52&&(A=!0),A&&C<=.48&&(A=!1),A!==f&&(P=!1,A&&(U=2),f=A),ae.visible=!A,ce.visible=A,b&&Qe){const d=!A;d!==E&&(E=d,b.fog=d?Qe:null)}if(a&&a.setClearColor(A?wt:Bn,1),h&&(h.enabled=A),u){const d=A?44:38;u.fov!==d&&(u.fov=d,u.updateProjectionMatrix())}}}function Mt(){if(!u)return;C=el(K),Me.lerpVectors(De,Pe,C),be=Lt(Ne,ue,C);const d=ee/K,w=Te*Math.min(2.6,Math.max(.9,.18/Math.max(K,Ho))),O=Lt(d,w,C);Ye=Lt(ee,Te,C);const r=Math.cos(be);u.position.set(Me.x+Math.sin(we)*O*r,Me.y+Math.sin(be)*O,Me.z+Math.cos(we)*O*r),u.lookAt(Me)}function nn(d,w){if(!T||!R||!se)return;const O=Math.random()*Math.PI*2,r=Math.random()*w*.35;T[d*3]=Math.cos(O)*r,T[d*3+1]=Math.random()*2,T[d*3+2]=Math.sin(O)*r,se[d*3]=(Math.random()-.5)*w*.045,se[d*3+1]=w*(1.1+Math.random()*1.4),se[d*3+2]=(Math.random()-.5)*w*.045,R[d]=.35+Math.random()*.65}function _n(d,w,O){if(!F||!T||!R||!se)return;const r=R.length;for(let i=0;i<r;i++){if(R[i]-=d*(.55+(1-w)*.4),R[i]<=0){nn(i,O);continue}T[i*3]+=se[i*3]*d,T[i*3+1]+=se[i*3+1]*d*(.7+w*.8),T[i*3+2]+=se[i*3+2]*d}const e=F.geometry;e.attributes.position.needsUpdate=!0}function Nt(d,w,O){if(!le||!H||!_||!ie||!he)return;const r=Math.random()*Math.PI*2,e=O*(.7+Math.random()*.9);le[d*3]=w.x+Math.cos(r)*e,le[d*3+1]=w.y+Math.random()*O*.15,le[d*3+2]=w.z+Math.sin(r)*e,H[d*3]=(Math.random()-.5)*O*.18,H[d*3+1]=O*(.08+Math.random()*.14),H[d*3+2]=(Math.random()-.5)*O*.18,he[d]=2.4+Math.random()*2.8,_[d]=he[d],ie[d]=O*(1.6+Math.random()*2.2)}function Dn(d,w,O,r){if(!X||!le||!H||!_||!he||!ie)return;const e=_.length,i=performance.now()/1e3;for(let D=0;D<e;D++){if(_[D]-=d,_[D]<=0){Math.random()<.35+w*.4?Nt(D,r,O):_[D]=.01;continue}const dt=1-_[D]/he[D];H[D*3]+=Math.sin(i*.7+D)*O*.04*d,H[D*3+2]+=Math.cos(i*.55+D*.4)*O*.04*d,H[D*3+1]*=.995,le[D*3]+=H[D*3]*d*(.8+dt),le[D*3+1]+=H[D*3+1]*d*(.85+w*.35),le[D*3+2]+=H[D*3+2]*d*(.8+dt)}const $=X.geometry;$.attributes.position.needsUpdate=!0;const V=$.getAttribute("aLife");for(let D=0;D<e;D++)V.array[D]=_[D]/he[D];V.needsUpdate=!0}function on(d){var w;d.button===0&&(Fe=!0,ge=d.clientX,Le=0,(w=o.value)==null||w.setPointerCapture(d.pointerId))}function an(d){if(!Fe)return;const w=d.clientX-ge;ge=d.clientX,we+=w*.008,Le=w*.008}function xt(d){var w;Fe=!1;try{(w=o.value)==null||w.releasePointerCapture(d.pointerId)}catch{}}function It(d){d.preventDefault();const w=Math.exp(-d.deltaY*.0016);K=Math.min($s,Math.max(Ho,K*w)),Mt()}function Ut(d=0){if(Z=0,!n.value||!a||!b||!u||!M)return;const w=xe?Math.min(.05,(d-xe)/1e3):.016;xe=d;const O=Math.min(1,Math.max(.2,l.value));if(Fe||(A?Le*=.82:(we+=55e-5+Le,Le*=.94)),Mt(),zt(),A){const i=d*.001;Se&&(Se.uniforms.uBoost.value=.72+O*.45,Se.uniforms.uScale.value=1.12,Se.uniforms.uTime.value=i);for(const $ of Ze)$.uniforms.uTime&&($===Se||$===ze||($.uniforms.uTime.value=i,$.uniforms.uBoost&&($.uniforms.uBoost.value=.72+O*.32)));U>0?U-=1:Ue==null||Ue.update(w),c&&(ct(),c.render()),Z=window.requestAnimationFrame(Ut);return}const r=d*.001;y&&S&&u&&(y.getWorldPosition(J),S.position.copy(J),S.rotation.y=Math.atan2(u.position.x-J.x,u.position.z-J.z));for(const i of Ze)i.uniforms.uTime&&(i.uniforms.uTime.value=r),i.uniforms.uBoost&&i!==Se&&(i.uniforms.uBoost.value=.72+O*.32);S&&S.scale.set(1,.94+O*.14,1),k&&y&&(y.getWorldPosition(J),k.uniforms.uPlasmaPos.value.copy(J),k.uniforms.uPlasmaBoost.value=.35+O*.28),g&&(g.uniforms.uBoost.value=.45+O*.3);const e=(y==null?void 0:y.userData.radius)||12;if(_n(w,O,e),y&&X){const i=y.userData.modelRadius||e*10;y.getWorldPosition(J),Dn(w,O,i*.22,J)}if(We&&Ce){const i=Ce.length/3;for(let V=0;V<i;V++)Ce[V*3+1]-=w*(bt-He)*.06,Ce[V*3+1]<He&&(Ce[V*3+1]=bt,Ce[V*3]+=(Math.random()-.5)*4,Ce[V*3+2]+=(Math.random()-.5)*4);const $=We.geometry;$.attributes.position.needsUpdate=!0}if(fe&&(fe.uniforms.uTime.value=r),rt&&(rt.uniforms.uTime.value=r),ut&&(ut.uniforms.uTime.value=r),u){for(const i of Je)i.parent.getWorldPosition(it),it.y+=i.nozzleY,i.group.position.copy(it),i.group.rotation.y=Math.atan2(u.position.x-it.x,u.position.z-it.z);for(const i of Ie)i.rotation.y=Math.atan2(u.position.x-i.position.x,u.position.z-i.position.z)}a&&b&&u&&a.render(b,u),Z=window.requestAnimationFrame(Ut)}function St(){Z&&window.cancelAnimationFrame(Z),Z=0}function sn(){St(),Z=window.requestAnimationFrame(Ut)}function Rn(d){d.traverse(w=>{var e,i,$;const O=w;(i=(e=O.geometry)==null?void 0:e.dispose)==null||i.call(e);const r=O.material;Array.isArray(r)?r.forEach(V=>V.dispose()):($=r==null?void 0:r.dispose)==null||$.call(r)})}function Wn(){St(),me&&window.cancelAnimationFrame(me),me=0,W==null||W.disconnect(),W=null;const d=o.value;d&&(d.removeEventListener("pointerdown",on),d.removeEventListener("pointermove",an),d.removeEventListener("pointerup",xt),d.removeEventListener("pointercancel",xt),d.removeEventListener("wheel",It)),Ue==null||Ue.dispose(),Ue=null;for(const w of te)Rn(w);te.length=0,Ze.length=0,c=null,h=null,a==null||a.dispose(),a==null||a.domElement.remove(),a=null,b=null,u=null,M=null,y=null,S=null,k=null,g=null,F=null,T=null,R=null,se=null,X=null,fe=null,le=null,H=null,_=null,ie=null,he=null,Ie.length=0,Je.length=0,rt=null,ut=null,ze=null,Se=null,We=null,Ce=null,ae=null,ce=null,Qe=null;for(const w of de)w.dispose();de.length=0}async function $n(){const d=o.value;if(!(!d||a)){v.value="载入行星发动机…",A=!1,f=!1,E=!0,P=!1,U=0,xe=0,Ge=0,Re=0,b=new Ka,u=new qa(38,1,.1,8e3),a=new Xa({antialias:!0,alpha:!1,powerPreference:"high-performance",logarithmicDepthBuffer:!0}),a.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),a.setClearColor(462872,1),a.toneMapping=Za,a.toneMappingExposure=.9,a.outputColorSpace=ht,a.domElement.className="engine-canvas",d.appendChild(a.domElement),c=new Ja(a),c.addPass(new Qa(b,u)),h=new es(new Nn(d.clientWidth||1,d.clientHeight||1),.52,.34,.8),c.addPass(h),c.addPass(new ts),d.addEventListener("pointerdown",on),d.addEventListener("pointermove",an),d.addEventListener("pointerup",xt),d.addEventListener("pointercancel",xt),d.addEventListener("wheel",It,{passive:!1}),ae=new nt,ce=new nt,ce.visible=!1,b.add(ae),b.add(ce),M=new nt,ae.add(M);try{let w=await new ns().loadAsync(Rs);if(!ae||!ce||!a||!b||!u||!M)return;w=os(w,.08),w.center(),w.rotateX(-Math.PI/2),w=as(w,Math.PI*.48),w.computeBoundingBox();const O=w.boundingBox,r=new oe;O.getSize(r);const e=Math.max(r.x,r.y,r.z)*.5;k=Ys();const i=new Oe(w,k),$=new Uo(new Bo(w,48),new _o({color:Qt,transparent:!0,opacity:.18}));M.add(i),M.add($),te.push(i,$);const V=O.min.y,D=new Oe(new Do(e*.72,e*.86,64),new Qo({color:Ws,transparent:!0,opacity:.35,side:st}));D.rotation.x=-Math.PI/2,D.position.y=V+.4,M.add(D),te.push(D);const dt=new Uo(new Bo(new Do(e*.9,e*.98,48),1),new _o({color:Qt,transparent:!0,opacity:.35}));dt.rotation.x=-Math.PI/2,dt.position.y=V+.2,M.add(dt),te.push(dt),y=new nt,y.position.y=O.max.y-e*.015,y.userData.radius=e*.1,y.userData.modelRadius=e,y.userData.plumeH=e*1.85,S=new nt;const uo=ot(e*1.12,e*2.85,"halo"),co=ot(e*.48,e*2.7,"mid"),Vn=ot(e*.48,e*2.7,"mid");Vn.rotation.y=Math.PI/2;const vo=ot(e*.16,e*2.8,"core"),fo=ot(e*.78,e*.52,"mist");S.add(uo,co,Vn,vo,fo),ae.add(S),Ze.push(uo.material,co.material,Vn.material,vo.material,fo.material),te.push(S),g=js();const ln=new Oe(new at(e*.38,e*.38),g);ln.rotation.x=-Math.PI/2,ln.renderOrder=35,y.add(ln),te.push(ln);const rn=340;T=new Float32Array(rn*3),se=new Float32Array(rn*3),R=new Float32Array(rn);for(let m=0;m<rn;m++)nn(m,e*.1);const mo=new Ft;mo.setAttribute("position",new Ee(T,3)),F=new Pt(mo,new Ro({color:7259391,size:e*.012,transparent:!0,opacity:.38,blending:je,depthWrite:!1})),F.renderOrder=45,y.add(F),te.push(F),M.add(y);const vt=96;le=new Float32Array(vt*3),H=new Float32Array(vt*3),_=new Float32Array(vt),he=new Float32Array(vt),ie=new Float32Array(vt);const un=new Ft;un.setAttribute("position",new Ee(le,3)),un.setAttribute("aLife",new Ee(new Float32Array(vt),1)),un.setAttribute("aSize",new Ee(ie,1)),fe=Gs(),X=new Pt(un,fe),X.frustumCulled=!1,X.renderOrder=8,ae.add(X),te.push(X),y.getWorldPosition(J),J.y-=e*.08;for(let m=0;m<vt;m++)Nt(m,J,e*.15),_[m]*=Math.random();Qe=new ss(660768,e*9,e*34),b.fog=Qe,u.near=Math.max(.2,e*.02),u.far=e*120,u.updateProjectionMatrix();const po=e*42,Bt=new at(po,po,96,96);Bt.rotateX(-Math.PI/2);const _t=Bt.attributes.position,ho=new Float32Array(_t.count);for(let m=0;m<_t.count;m++){const x=_t.getX(m),N=_t.getZ(m);_t.setY(m,io(x,N,e,V)),ho[m]=Ln(x,N,e)}Bt.setAttribute("aRiver",new Ee(ho,1)),Bt.computeVertexNormals();const go=new Oe(Bt,Xs());ae.add(go),te.push(go);const cn=[{x:-4.8,z:.12,s:.38,id:"PE-3312",sub:"EQ-ROW · 11 km"},{x:5.2,z:-.16,s:.34,id:"",sub:""},{x:-9.1,z:.28,s:.22,id:"",sub:""},{x:9.4,z:-.22,s:.2,id:"",sub:""},{x:-2.5,z:-2.72,s:.28,id:"",sub:""},{x:3.7,z:-2.95,s:.25,id:"",sub:""},{x:-6.9,z:-2.58,s:.18,id:"",sub:""},{x:-2.9,z:2.82,s:.27,id:"",sub:""},{x:4.1,z:3.02,s:.23,id:"",sub:""},{x:7.6,z:2.62,s:.17,id:"",sub:""}],ta=[{x:0,z:0,r:e*1.45},...cn.map(m=>({x:m.x*e,z:m.z*e,r:m.s*e*1.05}))],wo=new ls(1,1,1);wo.translate(0,.5,0);const kt=4200,ft=new is(wo,Zs(),kt),Ke=new rs;let $e=0;const Dt=e*.125,na=(m,x)=>ta.some(N=>Math.hypot(m-N.x,x-N.z)<N.r),oa=56,aa=32,sa=-e*6.6,bo=e*1.38;for(let m=0;m<aa&&$e<kt;m++)for(let x=0;x<oa&&$e<kt;x++){if(x%8===0||m%6===0)continue;const N=sa+(x+.5)*Dt,j=bo+(m+.5)*Dt;if(na(N,j)||Ln(N,j,e)>.16)continue;const q=Math.hypot(N,j),Q=Math.max(Math.abs(N)/(e*6.8),(j-bo)/(e*4.6));if(B(x*1.13,m*2.07)<.05+Q*.32)continue;const ye=Math.floor(x/8),ke=Math.floor(m/6),Be=q<e*2.6?1.35:q<e*4.1?1:.62,Xe=(.055+B(ye*3.1,ke*5.7)*.1)*Be*(.78+B(x,m+9)*.45);Ke.position.set(N,io(N,j,e,V),j),Ke.rotation.y=0,Ke.scale.set(Dt*.74,e*Xe,Dt*.74),Ke.updateMatrix(),ft.setMatrixAt($e,Ke.matrix),$e+=1}for(let m=0;m<cn.length&&$e<kt;m++){const x=cn[m];if(!x)continue;const N=x.x*e,j=x.z*e,q=x.s*e*1.12,Q=x.s*e*4.2,ye=Dt*(.72+x.s*.4),ke=Math.max(6,Math.round(Q*2/ye));for(let Be=0;Be<ke&&$e<kt;Be++)for(let Ve=0;Ve<ke&&$e<kt;Ve++){if(Ve%5===0||Be%4===0)continue;const Xe=N-Q+(Ve+.5)*ye,mt=j-Q+(Be+.5)*ye,_e=Math.hypot(Xe-N,mt-j);if(_e<q||_e>Q||Ln(Xe,mt,e)>.18||B(Ve+m*9,Be+m*3)<.22+_e/Q*.28)continue;const pt=x.s*(.04+B(Ve,Be+m)*.07);Ke.position.set(Xe,io(Xe,mt,e,V),mt),Ke.scale.set(ye*.7,e*pt,ye*.7),Ke.updateMatrix(),ft.setMatrixAt($e,Ke.matrix),$e+=1}}ft.count=$e,ft.instanceMatrix.needsUpdate=!0,ft.frustumCulled=!1,ae.add(ft),te.push(ft);const pe=e*3.15,dn=4200,vn=new Float32Array(dn*3),yo=new Float32Array(dn),Mo=new Float32Array(dn);for(let m=0;m<dn;m++){const x=Math.acos(2*Math.random()-1),N=Math.random()*Math.PI*2,j=pe*(12+Math.random()*20);vn[m*3]=j*Math.sin(x)*Math.sin(N),vn[m*3+1]=j*Math.cos(x),vn[m*3+2]=j*Math.sin(x)*Math.cos(N);const q=Math.pow(Math.random(),3.1);Mo[m]=.1+q*.78,yo[m]=(.22+q*1.35)*pe*.01}const fn=new Ft;fn.setAttribute("position",new Ee(vn,3)),fn.setAttribute("aSize",new Ee(yo,1)),fn.setAttribute("aBright",new Ee(Mo,1));const jn=new Pt(fn,al());jn.frustumCulled=!1,ce.add(jn),te.push(jn),rt=qo("sky");const la=[{x:-e*3.2,y:e*1.55,z:-e*5.4,w:e*6.5,h:e*1.8},{x:e*4.8,y:e*1.9,z:-e*7.2,w:e*7.2,h:e*2.1},{x:e*.6,y:e*2.3,z:-e*9.5,w:e*8.4,h:e*2.4}];for(const m of la){const x=new Oe(new at(m.w,m.h),rt);x.position.set(m.x,m.y,m.z),ae.add(x),te.push(x)}ut=qo("mist");const ia=[{x:0,y:V+e*.18,z:e*.4,w:e*4.8,h:e*1.4,rx:-.08},{x:e*1.6,y:V+e*.22,z:-e*.8,w:e*5.2,h:e*1.5,rx:-.04},{x:-e*1.8,y:V+e*.2,z:e*1.2,w:e*4.4,h:e*1.3,rx:-.06}];for(const m of ia){const x=new Oe(new at(m.w,m.h),ut);x.position.set(m.x,m.y,m.z),x.rotation.x=m.rx,ae.add(x),te.push(x)}He=V,bt=V+e*3.2;const xo=900;Ce=new Float32Array(xo*3);for(let m=0;m<xo;m++){const x=Math.random()*Math.PI*2,N=Math.random()*e*9;Ce[m*3]=Math.cos(x)*N,Ce[m*3+1]=He+Math.random()*(bt-He),Ce[m*3+2]=Math.sin(x)*N}const So=new Ft;So.setAttribute("position",new Ee(Ce,3)),We=new Pt(So,new Ro({color:12966118,size:e*.012,transparent:!0,opacity:.42,depthWrite:!1})),We.frustumCulled=!1,ae.add(We),te.push(We);const ra=Js(),ko=Tn("halo"),Co=Tn("mid"),Ao=Tn("core");Ze.push(ko,Co,Ao);const ua=O.max.y;cn.forEach(m=>{const x=new nt;x.position.set(m.x*e,0,m.z*e),x.scale.setScalar(m.s),x.rotation.y=.15;const N=new Oe(w,ra);x.add(N),ae.add(x),te.push(x);const j=new nt,q=e*m.s;if(j.add(ot(q*1,q*2.5,"halo",ko),ot(q*.42,q*2.4,"mid",Co),ot(q*.14,q*2.55,"core",Ao)),ae.add(j),te.push(j),Je.push({group:j,parent:x,nozzleY:ua*m.s}),m.id){const Q=il(m.id,m.sub,e*.9/m.s);Q.position.set(0,O.max.y*.42,e*.62),x.add(Q),te.push(Q)}}),ze=Qs();const Eo=new at(1,1);Eo.translate(0,.5,0);const ca=[-2.7,-.85,.85,2.7];let mn=0;for(const m of ca)for(let x=0;x<20;x++){const N=e*(-22+x*2.28+x%3*.16);if(Math.abs(N)<e*11)continue;const j=e*(m+Math.sin(N/(e*14))*.35),q=new Oe(Eo,ze);q.position.set(N,V,j),q.scale.set(e*(.14+mn%4*.04),e*(2.2+mn%5*.4),1),q.frustumCulled=!1,q.renderOrder=6+mn%5,ae.add(q),Ie.push(q),te.push(q),mn+=1}const Rt=new us,Wt=await Rt.loadAsync("/textures/earth-night.jpg"),$t=await Rt.loadAsync("/textures/earth-lights.png"),et=await Rt.loadAsync("/textures/earth_clouds.jpg"),pn=await Rt.loadAsync("/textures/moon-base.jpg"),hn=await Rt.loadAsync("/textures/moon-bump.jpg");if(!ae||!ce||!a||!b||!u)return;Wt.colorSpace=ht,$t.colorSpace=ht,et.colorSpace=ht,Wt.anisotropy=8,$t.anisotropy=8,et.anisotropy=8,Wt.wrapS=En,$t.wrapS=En,et.wrapS=En,et.wrapT=En,de.push(Wt,$t,et),pn.colorSpace=ht,hn.colorSpace=cs,pn.anisotropy=8,hn.anisotropy=8,de.push(pn,hn);const Oo=new Oe(new Wo(pe,72,48),tl(Wt,$t,et));ce.add(Oo),te.push(Oo);const da=pe*.272,Yn=new Oe(new Wo(da,48,32),nl(pn,hn));Yn.position.set(-pe*10.8,pe*.38,pe*.72),ce.add(Yn),te.push(Yn);const Vt=sl(pe),va=Vt.pos.length/3,Ct=ll(pe),fa=Ct.pos.length/3;Se=ol();const gn=new Ft;gn.setAttribute("position",new Ee(Vt.pos,3)),gn.setAttribute("aSize",new Ee(Vt.size,1)),gn.setAttribute("aPhase",new Ee(Vt.phase,1));const Gn=new Pt(gn,Se);Gn.renderOrder=3,ce.add(Gn),te.push(Gn);const wn=new Ft;wn.setAttribute("position",new Ee(Ct.pos,3)),wn.setAttribute("aSize",new Ee(Ct.size,1)),wn.setAttribute("aPhase",new Ee(Ct.phase,1));const Hn=new Pt(wn,Se);Hn.renderOrder=3,ce.add(Hn),te.push(Hn);const Kn=Fn("core"),qn=Fn("veil"),Xn=Xo(),Zn=Zo(),Jn=(m,x,N)=>{const j=Fn("core"),q=Fn("veil"),Q=Xo(),ye=Zo();j.uniforms.uFade.value=m,q.uniforms.uFade.value=x,Q.uniforms.uFade.value=N,ye.uniforms.uFade.value=N*.85;for(const ke of[j,q,Q,ye])ke.uniforms.uMask.value=et,ke.uniforms.uUseMask.value=1,ke.uniforms.uMaskStrength.value=.75;return j.uniforms.uMaskScale.value.set(.383,.25),q.uniforms.uMaskScale.value.set(.333,.217),Q.uniforms.uMaskScale.value.set(.317,.317),ye.uniforms.uMaskScale.value.set(.417,.233),{core:j,veil:q,corona:Q,glow:ye}},jt=Jn(.62,.52,.7),Yt=Jn(.42,.34,.48),Gt=Jn(.26,.2,.3);for(const m of[Kn,qn,Xn,Zn])m.uniforms.uMask.value=et;const Qn=new ds(.5,1,18,1,!0);Qn.translate(0,.5,0);const ma=new at(1,1),Fo=new at(1,1,1,24);Fo.translate(0,.5,0);const At=new nt;At.renderOrder=3;const pa=new oe(0,1,0),ha=new oe(0,0,1),qe=new oe,Ht=new oe,Kt=new oe,bn=new oe,Po=(m,x,N,j)=>{const q=N?Math.PI/2:25*Math.PI/180;for(let Q=0;Q<x;Q++){qe.set(m[Q*3],m[Q*3+1],m[Q*3+2]),Ht.copy(qe).normalize(),Kt.set(-1,0,0).addScaledVector(Ht,Ht.x),Kt.lengthSq()<1e-6?Kt.set(0,0,1):Kt.normalize(),N?bn.set(-1,0,0):bn.copy(Ht).multiplyScalar(Math.cos(q)).addScaledVector(Kt,Math.sin(q)).normalize();let ye,ke,Be=Kn,Ve=qn,Xe=Xn,mt=Zn;if(N){const eo=Math.min(1,Math.max(0,-qe.x/pe)),xn=eo<.45?jt:eo<.72?Yt:Gt;Be=xn.core,Ve=xn.veil,Xe=xn.corona,mt=xn.glow;const ba=Math.min(1,Math.abs(qe.y/pe)),ya=Math.pow(1-ba,1.85),Ma=.78+Math.pow(B(Q+j,19),.85)*.42;ye=pe*(.016+ya*.048+eo*.016)*Ma,ke=pe*(.0055+B(Q+j,3)*.004),qe.addScaledVector(Ht,pe*(.002+B(Q+j,31)*.01))}else ye=pe*(.028+B(Q+j,9)*.014),ke=pe*(.016+B(Q+j,3)*.006);const _e=new Oe(Qn,Be);_e.position.copy(qe),_e.quaternion.setFromUnitVectors(pa,bn),_e.scale.set(ke,ye,ke);const pt=new Oe(Qn,Ve);if(pt.position.copy(qe),pt.quaternion.copy(_e.quaternion),pt.scale.set(ke*(N?1.65:1.85),ye*1.08,ke*(N?1.65:1.85)),N){At.add(pt,_e);continue}const yn=new Oe(ma,Xe);yn.position.copy(qe),yn.quaternion.setFromUnitVectors(ha,bn);const To=ke*4;yn.scale.set(To,To,1),At.add(yn,pt,_e);const ga=ke*3.6,wa=ye*1.35,Mn=new Oe(Fo,mt);Mn.position.copy(qe),Mn.quaternion.copy(_e.quaternion),Mn.scale.set(ga,wa,1),At.add(Mn)}};Po(Vt.pos,va,!1,0),Po(Ct.pos,fa,!0,100),ce.add(At),te.push(At),Ue=Ds(ce,pe,Ct.pos,{lite:!0}),Ze.push(Se,Kn,qn,Xn,Zn,jt.core,jt.veil,jt.corona,jt.glow,Yt.core,Yt.veil,Yt.corona,Yt.glow,Gt.core,Gt.veil,Gt.corona,Gt.glow),De.set(0,e*.02,e*.95),Pe.set(-pe*.42,0,0),ee=e*5.4,Te=pe*4.5,Ne=.31,ue=.08,Me.copy(De),Ye=ee,be=Ne,we=.18,K=1,Mt(),zt(),v.value=""}catch(w){console.warn("[engine]",w),v.value="行星发动机模型载入失败"}yt(),W=new ResizeObserver(yt),W.observe(d),n.value&&sn(),window.requestAnimationFrame(()=>tn())}}return Tt(o,d=>{d&&!a&&$n()},{flush:"post",immediate:!0}),Tt(n,d=>{if(!d){St();return}a&&(yt(),sn())}),zn(Wn),{hint:v}}const ul={key:0,class:"boot"},cl={class:"boot-log"},dl={class:"boot-copy"},vl={class:"top"},fl={class:"top-right"},ml={class:"clock-block"},pl={class:"top-actions"},hl=["title"],gl={class:"status-strip"},wl={class:"chip dim"},bl={class:"deck"},yl={class:"left-col"},Ml={class:"sys-block fui-box"},xl={class:"tele"},Sl={class:"mods"},kl={class:"hw-read"},Cl={class:"msn-block fui-box"},Al={class:"msn-obj"},El={class:"msn-checks"},Ol={class:"msn-talk"},Fl={class:"msn-foot"},Pl={class:"cmd-card fui-box"},Tl={class:"cmd-grid"},Ll=["disabled"],zl=["disabled"],Nl=["disabled"],Il=["disabled"],Ul=["disabled"],Bl=["disabled"],_l=["disabled"],Dl=["disabled"],Rl=["disabled"],Wl=["disabled"],$l=["disabled"],Vl={class:"stage"},jl={class:"stage-tools"},Yl=["disabled","title"],Gl={class:"earth-view"},Hl={class:"globe-col"},Kl={class:"globe-wrap"},ql={key:0,class:"engine-hint"},Xl={class:"propel-strip"},Zl={class:"engine-board fui-box"},Jl={class:"optic-frame"},Ql={class:"oss-feed"},ei=["src"],ti={key:0,class:"oss-empty"},ni={class:"optic-hud","aria-hidden":"true"},oi={class:"ret-lock"},ai={key:0},si={class:"hud-tl"},li={class:"hud-tr"},ii={class:"hud-left"},ri={class:"hud-meter"},ui={class:"hud-spec"},ci={class:"hud-right"},di={class:"hud-tag"},vi={class:"hud-compass"},fi={class:"ptz-cross"},mi=["disabled"],pi=["disabled"],hi=["disabled"],gi=["disabled"],wi=["disabled"],bi={key:0,class:"ptz-zoom"},yi=["disabled"],Mi=["disabled"],xi={class:"ptz-status"},Si={class:"optic-strip"},ki={class:"speech"},Ci={class:"speech-k"},Ai=["title"],Ei={class:"panel log-panel fui-box"},Oi={class:"panel-h"},Fi={key:0,class:"log-empty"},Pi={class:"t"},Ti={class:"who"},Li={class:"msg"},zi={class:"ticker"},Ni={class:"ticker-track"},Ii={"aria-hidden":"true"},Ui=xa({__name:"Terminal",setup(o){const n=Sa(),l=Pa(),{hwBusy:v,setHw:a,toggleHw:c,refreshHw:h}=ka({onError:r=>n.pushChat("system",r)}),b=Fa,u=L(null),M=L(null),y=L(null),S=L(null),k=L(null),g=bs(u),F=L("--:--:--"),T=L(""),R=L(!0),{isFullscreen:se}=Ca(),X=L(0),fe=L(0),le=L(!1),H=L("idle"),_=L(!1),ie=I(()=>({transform:`translate3d(${X.value}px, ${fe.value}px, 0)`})),he=I(()=>({on:le.value,act:H.value==="act",dead:H.value==="dead",down:_.value})),J=L(!1),Z=L("engines"),Fe=L(!0),ge=L(localStorage.getItem("moss-face-detect")!=="0"),we=L(localStorage.getItem("moss-ptz-keys")!=="0"),Le=I(()=>n.hasGimbal),K=I(()=>Le.value||g.ptz.value),Me=I(()=>K.value?"READY":"N/A"),Ye=I(()=>g.connected.value&&!g.showPlaceholder.value),be=I(()=>g.connected.value?g.frameError.value||"正在同步画面…":n.hasOnboardCamera?"暂不支持":"天眼系统未接入"),De=I(()=>!g.connected.value&&!n.hasOnboardCamera),Pe=I(()=>we.value&&K.value&&!R.value&&J.value&&Z.value==="optics"),ee=La(K,we,Pe);Tt(we,r=>{localStorage.setItem("moss-ptz-keys",r?"1":"0")}),Tt(ge,r=>{localStorage.setItem("moss-face-detect",r?"1":"0")});const Te=L(0),Ne=["INIT 550W CORE","HANDSHAKE LAN LINK","VOICE PROTOCOL STANDBY","MOSS ONLINE"],ue=L({count:0,learned:0}),C=I(()=>ge.value&&!R.value&&J.value&&Z.value==="optics"&&g.connected.value&&!g.showPlaceholder.value),{focusing:A,hasFace:f,lockLabel:E,boxStyle:P,reticleStyle:U}=Ts(u,M,y,C),xe=I(()=>Ne.slice(0,Te.value)),W=I(()=>String(n.mossChatState||"idle")),me=I(()=>`is-${W.value}`),Ge=I(()=>["listening","speaking","connecting"].includes(W.value)),Re=I(()=>W.value==="listening"||W.value==="speaking"?"ok":W.value==="connecting"?"warn":""),Bn=I(()=>n.mossOnline?Re.value==="ok"?"on":Re.value==="warn"?"warn":"idle":"off"),wt=I(()=>{switch(W.value){case"listening":return"LISTEN";case"speaking":return"TALK";case"connecting":return"SYNC";default:return"STBY"}}),Ze=I(()=>n.mossOnline?W.value==="listening"?"正在采集语音":W.value==="speaking"?"正在合成应答":W.value==="connecting"?"建立音频通道":"按空格唤醒":"设备离线"),te=I(()=>b.value?"接通中":n.mossOnline?Ge.value?"结束语音链路":"建立语音链路":"无法建立语音链路"),Ie=L(!1),Je=L(""),it=I(()=>Ie.value?"重播中":Je.value?"重播失败":"重播提醒"),rt=I(()=>n.mossOnline?Ie.value?"SEND":Je.value?"FAIL":"YUNXIANGJI":"OFFLINE"),ut=I(()=>W.value==="listening"?"MOSS · 聆听中":W.value==="speaking"?"MOSS":W.value==="connecting"?"MOSS · 接通中":"系统待命"),ze=I(()=>{const r=n.chatLines.filter(e=>e.role!=="system");return r.length?r[r.length-1]:null}),Se=I(()=>{const r=[{id:"link",en:"LINK",ok:n.mossOnline,text:n.mossOnline?"READY":"OFF"},{id:"ground",en:"GROUND",ok:n.mossOnline,text:n.mossOnline?"ONLINE":"LOST"},{id:"audio",en:"AUDIO",ok:Re.value==="ok",text:wt.value},{id:"optics",en:"SKY-EYE",ok:g.connected.value,text:g.connected.value?"LIVE":"OFF"},{id:"ptz",en:"PTZ",ok:K.value,text:Me.value},{id:"ir",en:"IR",ok:ue.value.count>0,text:ue.value.count?`${ue.value.count}/${ue.value.learned}`:"—"}].map(V=>({...V,cls:V.ok?"ok":V.id==="audio"&&Re.value==="warn"?"warn":"off"}));let e="语音待命 · 按空格唤醒",i="AWAIT WAKE";n.mossOnline?W.value==="listening"?(e="采集语音指令",i="VOICE CAPTURE"):W.value==="speaking"?(e="合成应答",i="TTS REPLY"):W.value==="connecting"||b.value?(e="建立语音链路",i="OPEN AUDIO"):n.lastError&&(e=n.lastError,i="FAULT"):(e="等待地面终端握手",i="WAIT HEALTH");const $=ze.value;return{checks:r,objective:e,objectiveEn:i,lastWho:$?$.role==="assistant"?"MOSS":"YOU":"COM",lastText:($==null?void 0:$.text)||"无通信记录"}}),Ue=I(()=>{var r,e,i;return((r=ze.value)==null?void 0:r.role)==="assistant"||((e=ze.value)==null?void 0:e.role)==="user"&&W.value==="listening"||((i=ze.value)==null?void 0:i.role)==="user"?ze.value.text:n.mossOnline?"按空格唤醒。MOSS 将使用设备麦克风聆听,并在此同步对话。":"地面终端未与 MOSS 建立握手。"}),We=I(()=>{F.value;const r=n.mossOnline?.991:.812,e=Number(F.value.slice(-2))||0;return[{name:"亚洲",en:"ASIA",total:3120},{name:"欧洲",en:"EUROPE",total:1480},{name:"北美",en:"N.AMERICA",total:1640},{name:"南美",en:"S.AMERICA",total:980},{name:"非洲",en:"AFRICA",total:1260},{name:"大洋洲",en:"OCEANIA",total:720},{name:"南极",en:"ANTARCTICA",total:800}].map(($,V)=>{const D=Math.min($.total,Math.max(0,Math.round($.total*r-V%3+e%2)));return{...$,online:D,pct:Math.round(D/$.total*1e3)/10}})}),Ce=I(()=>We.value.reduce((r,e)=>r+e.online,0)),He=I(()=>(n.mossOnline?98.2+(Number(F.value.slice(-1))||0)*.08:71.4).toFixed(1)),bt=I(()=>(n.mossOnline?16.7:9.2).toFixed(1)),ae=I(()=>!R.value&&Z.value==="engines"),ce=I(()=>Number(He.value)/100),{hint:Qe}=rl(S,ae,ce),de=I(()=>{const r=Number(F.value.slice(-2))||0,e=g.connected.value&&!g.showPlaceholder.value,i=F.value.replace(/:/g,"");return{frame:String((Number(i)*25+r)%1e6).padStart(6,"0"),az:(18.4+r*.037).toFixed(2),el:(-6.2+Math.sin(r/7)*.45).toFixed(2),rng:(42.6+r%11*.08).toFixed(1),sig:e?74+r%9:12+r%4,iris:(2.8+r%5*.1).toFixed(1),gain:(6.4+r%6*.2).toFixed(1),fov:62,mag:A.value?"2.4":(1+r%3*.1).toFixed(1),temp:(31.2+r%4*.1).toFixed(1),hdg:String((86+r)%360).padStart(3,"0"),lock:E.value,mode:ge.value?f.value?"FACE LOCK":e?"PASSIVE SCAN":"STANDBY":"FACE OFF"}}),en=I(()=>`${["UEG 领航员空间站",n.mossOnline?"MOSS ONLINE":"MOSS OFFLINE",`VOICE ${wt.value}`,g.connected.value?`SKY-EYE ${g.hostname.value||"LIVE"}`:"SKY-EYE OFF",`ENGINES ${Ce.value}/10000`,`THRUST ${He.value}%`,"HEADING α CENTAURI","PRIMARY DIRECTIVE · 延续人类文明",hs,gs,"SPACE TO WAKE"].join(" · ")} · `);let yt=0,ct=0;function tn(){const r=new Date;T.value=`${r.getFullYear()}-${String(r.getMonth()+1).padStart(2,"0")}-${String(r.getDate()).padStart(2,"0")}`,F.value=[r.getHours(),r.getMinutes(),r.getSeconds()].map(e=>String(e).padStart(2,"0")).join(":")}function zt(r){const e=r instanceof Element?r.closest('button, a, [role="button"], input, select, textarea, summary, .engine-stage, canvas'):null;return e?e instanceof HTMLButtonElement&&e.disabled||e instanceof HTMLInputElement&&e.disabled||e.getAttribute("aria-disabled")==="true"?"dead":"act":"idle"}function Mt(r){X.value=r.clientX,fe.value=r.clientY,le.value=!0,H.value=zt(r.target)}function nn(){le.value=!1,_.value=!1}function _n(r){r.button===0&&(_.value=!0,H.value=zt(r.target))}function Nt(){_.value=!1}function Dn(){R.value&&(R.value=!1,window.clearInterval(ct))}function on(){l.push(n.mossOnline?"/remotes":"/device")}function an(r){return r==="assistant"?"MOSS":r==="system"?"SYS":"YOU"}function xt(r){const e=new Date(r);return[e.getHours(),e.getMinutes(),e.getSeconds()].map(i=>String(i).padStart(2,"0")).join(":")}async function It(){await Ta()}async function Ut(){var r;if(!(Ie.value||!n.mossOnline)){Ie.value=!0,Je.value="";try{const e=await ro("/api/mcp/yunxiangji/replay",{method:"POST",body:JSON.stringify({})}),i=((r=e.item)==null?void 0:r.title)||"云享记";n.pushChat("system",e.message?`${e.message}:${i}`:`已重播:${i}`)}catch(e){const i=e instanceof Error?e.message:"重播失败";Je.value=i,n.pushChat("system",i)}finally{Ie.value=!1}}}async function St(){if(J.value){J.value=!1,Z.value="engines",g.stopPreview();return}J.value=!0,Z.value="optics",await Pn(),g.openPreview()||await g.loadStatus({preview:!0})}function sn(){Z.value="engines"}async function Rn(){if(!J.value){await St();return}Z.value="optics"}async function Wn(){await h()}async function $n(){if(n.mossOnline)try{const e=(await ro("/api/ir/devices")).devices||[];ue.value={count:e.length,learned:e.reduce((i,$)=>i+($.commands||[]).filter(V=>V.learned).length,0)}}catch{ue.value={count:0,learned:0}}}function d(r){const e=r.target;e&&["INPUT","TEXTAREA"].includes(e.tagName)||r.code!=="Space"&&r.key!==" "||(r.preventDefault(),!(r.repeat||R.value)&&It())}function w(){const r=k.value;r&&(r.scrollTop=r.scrollHeight)}Tt(()=>{const r=n.chatLines,e=r[r.length-1];return e?`${r.length}:${e.id}:${e.text}`:"0"},async()=>{await Pn(),w(),requestAnimationFrame(w)},{flush:"post"});async function O(){await g.loadStatus({preview:!1})}return Aa(async()=>{document.body.classList.add("moss-hud-lock"),tn(),yt=window.setInterval(tn,1e3),n.listenEvents(),await O(),$n(),Wn(),await Pn(),w(),ct=window.setInterval(()=>{if(Te.value<Ne.length){Te.value+=1;return}window.clearInterval(ct),window.setTimeout(()=>{R.value=!1},420)},220),window.addEventListener("keydown",d)}),zn(()=>{document.body.classList.remove("moss-hud-lock"),window.clearInterval(yt),window.clearInterval(ct),window.removeEventListener("keydown",d),g.stopPreview()}),(r,e)=>(G(),Y("div",{class:z(["moss-console",me.value]),onClick:Dn,onPointermove:Mt,onPointerleave:nn,onPointerdown:_n,onPointerup:Nt,onPointercancel:Nt},[e[89]||(e[89]=t("div",{class:"crt","aria-hidden":"true"},null,-1)),Lo(Oa,{name:"boot"},{default:Ea(()=>[R.value?(G(),Y("div",ul,[e[19]||(e[19]=t("div",{class:"boot-org"},"UNITED EARTH GOVERNMENT",-1)),e[20]||(e[20]=t("div",{class:"boot-cn"},"联合政府 · 领航员空间站",-1)),e[21]||(e[21]=t("div",{class:"boot-model"},"550W",-1)),e[22]||(e[22]=t("div",{class:"boot-name"},"MOSS",-1)),t("ul",cl,[(G(!0),Y(qt,null,Xt(xe.value,(i,$)=>(G(),Y("li",{key:$},p(i),1))),128))]),t("div",dl,[Lo(ps,{variant:"hud"})])])):ve("",!0)]),_:1}),t("header",vl,[e[25]||(e[25]=to('<div class="top-left" data-v-b786c45d><span class="org" data-v-b786c45d>UEG</span><div data-v-b786c45d><strong data-v-b786c45d>领航员空间站控制台</strong><small data-v-b786c45d>NAVIGATOR ISS · CN-BJ · CLASSIFIED</small></div></div><div class="top-mid" data-v-b786c45d><span class="mid-k" data-v-b786c45d>CORE</span><b data-v-b786c45d>550W</b><i data-v-b786c45d></i><span class="mid-k" data-v-b786c45d>UNIT</span><b class="mid-moss" data-v-b786c45d>MOSS</b></div>',2)),t("div",fl,[t("div",ml,[t("span",null,p(T.value)+" · UTC+8",1),t("b",null,p(F.value),1)]),t("div",pl,[t("button",{class:z(["hud-btn",{on:s(se)}]),type:"button",title:s(se)?`退出全屏 (${s(zo)})`:`全屏显示 (${s(zo)})`,onClick:e[0]||(e[0]=re((...i)=>s(No)&&s(No)(...i),["stop"]))},[e[23]||(e[23]=t("em",null,"FS",-1)),tt(" "+p(s(se)?"ON":"OFF"),1)],10,hl),t("button",{class:"hud-btn cfg",type:"button",title:"返回配置页",onClick:re(on,["stop"])},[...e[24]||(e[24]=[t("em",null,"CFG",-1),tt(" 返回 ",-1)])])])])]),t("div",gl,[t("span",{class:z(["chip",s(n).mossOnline?"on":"off"])},[e[26]||(e[26]=t("i",null,null,-1)),tt("LINK "+p(s(n).mossOnline?"ONLINE":"LOST"),1)],2),t("span",{class:z(["chip",Bn.value])},[e[27]||(e[27]=t("i",null,null,-1)),tt("VOICE "+p(wt.value),1)],2),t("span",{class:z(["chip",s(g).connected.value?"on":"off"])},[e[28]||(e[28]=t("i",null,null,-1)),tt("SKY-EYE "+p(s(g).connected.value?"LIVE":"OFF"),1)],2),t("span",{class:z(["chip",K.value?"on":"off"])},[e[29]||(e[29]=t("i",null,null,-1)),tt("PTZ "+p(Me.value),1)],2),t("span",{class:"chip",role:"button",tabindex:"0",title:"更换设备",onClick:e[1]||(e[1]=i=>s(l).push("/devices"))}," UNIT "+p(s(n).deviceName||"UNNAMED"),1),t("span",wl,"ID "+p(s(n).activeDeviceId||"NO-ID"),1),e[30]||(e[30]=t("span",{class:"grow"},null,-1)),e[31]||(e[31]=t("span",{class:"chip dim"},"PRI · 延续人类文明",-1))]),t("div",bl,[t("aside",yl,[t("div",Ml,[e[50]||(e[50]=t("div",{class:"panel-h"},[t("span",null,"系统模块"),t("em",null,"SYS-01")],-1)),t("div",xl,[t("div",null,[e[32]||(e[32]=t("span",null,"LINK",-1)),t("b",{class:z(s(n).mossOnline?"ok":"bad")},p(s(n).mossOnline?"ONLINE":"LOST"),3)]),t("div",null,[e[33]||(e[33]=t("span",null,"VOICE",-1)),t("b",null,p(wt.value),1)]),t("div",null,[e[34]||(e[34]=t("span",null,"SKY-EYE",-1)),t("b",{class:z(s(g).connected.value?"ok":"")},p(s(g).connected.value?"LIVE":"OFF"),3)]),t("div",null,[e[35]||(e[35]=t("span",null,"PTZ",-1)),t("b",{class:z(K.value?"ok":"")},p(Me.value),3)]),t("div",null,[e[36]||(e[36]=t("span",null,"IR",-1)),t("b",null,p(ue.value.count?`${ue.value.count}/${ue.value.learned}`:"—"),1)])]),t("ul",Sl,[t("li",{class:z(s(n).mossOnline?"ok":"bad")},[e[38]||(e[38]=t("i",null,null,-1)),t("div",null,[e[37]||(e[37]=t("b",null,"链路 LINK",-1)),t("small",null,p(s(n).mossOnline?"HEALTH OK":"OFFLINE"),1)])],2),t("li",{class:z(s(n).mossOnline?"ok":"bad")},[e[40]||(e[40]=t("i",null,null,-1)),t("div",null,[e[39]||(e[39]=t("b",null,"地面终端 GROUND",-1)),t("small",null,p(s(n).mossOnline?"MOSS 已握手":"等待 bind.ack"),1)])],2),t("li",{class:z(Re.value==="ok"?"ok":Re.value==="warn"?"warn":"idle")},[e[42]||(e[42]=t("i",null,null,-1)),t("div",null,[e[41]||(e[41]=t("b",null,"语音链路 AUDIO",-1)),t("small",null,p(Ze.value),1)])],2),t("li",{class:z(s(g).connected.value?"ok":"idle")},[e[44]||(e[44]=t("i",null,null,-1)),t("div",null,[e[43]||(e[43]=t("b",null,"天眼系统 SKY",-1)),t("small",null,p(s(g).sourceLabel.value||s(g).hostname.value||s(g).infoText.value||"未配置摄像头"),1)])],2)]),t("div",kl,[t("div",{class:z(["bar",{on:s(n).hw.eye}])},[...e[45]||(e[45]=[t("span",null,"EYE",-1),t("i",null,null,-1)])],2),t("div",{class:z(["bar",{on:s(n).hw.bar}])},[...e[46]||(e[46]=[t("span",null,"BAR",-1),t("i",null,null,-1)])],2),s(n).hasPanel?(G(),Y("div",{key:0,class:z(["bar",{on:s(n).hw.panel}])},[...e[47]||(e[47]=[t("span",null,"PNL",-1),t("i",null,null,-1)])],2)):ve("",!0),s(n).hasBottom?(G(),Y("div",{key:1,class:z(["bar",{on:s(n).hw.bottom}])},[...e[48]||(e[48]=[t("span",null,"BTM",-1),t("i",null,null,-1)])],2)):ve("",!0),s(n).hasMotor?(G(),Y("div",{key:2,class:z(["bar",{on:s(n).hw.motor}])},[...e[49]||(e[49]=[t("span",null,"MTR",-1),t("i",null,null,-1)])],2)):ve("",!0)])]),t("div",Cl,[e[54]||(e[54]=t("div",{class:"panel-h"},[t("span",null,"任务简报"),t("em",null,"MSN-02")],-1)),e[55]||(e[55]=t("div",{class:"msn-pri"},[t("small",null,"PRI-01 · STANDING ORDER"),t("b",null,"延续人类文明")],-1)),t("div",Al,[e[51]||(e[51]=t("span",null,"当前目标",-1)),t("strong",null,p(Se.value.objective),1),t("em",null,p(Se.value.objectiveEn),1)]),t("div",El,[(G(!0),Y(qt,null,Xt(Se.value.checks,i=>(G(),Y("div",{key:i.id,class:z(i.cls)},[e[52]||(e[52]=t("i",null,null,-1)),t("span",null,p(i.en),1),t("b",null,p(i.text),1)],2))),128))]),t("div",Ol,[t("span",null,p(Se.value.lastWho),1),t("p",null,p(Se.value.lastText),1)]),t("div",Fl,[t("span",null,p(s(n).deviceName||"UNNAMED"),1),e[53]||(e[53]=t("span",null,"550W CORE",-1))])]),t("div",Pl,[e[56]||(e[56]=t("div",{class:"cmd-h"},[t("span",null,"指令面板"),t("em",null,"CTL-03")],-1)),t("div",Tl,[t("button",{type:"button",class:"span2 hot",disabled:s(v)||!s(n).mossOnline,onClick:e[2]||(e[2]=re(i=>s(a)("all","on"),["stop"]))},"一键开启",8,Ll),t("button",{type:"button",class:"span2",disabled:s(v)||!s(n).mossOnline,onClick:e[3]||(e[3]=re(i=>s(a)("all","off"),["stop"]))},"一键关闭",8,zl),t("button",{type:"button",class:z({on:s(n).hw.eye}),disabled:s(v)||!s(n).mossOnline,onClick:e[4]||(e[4]=re(i=>s(c)("eye"),["stop"]))},"眼灯",10,Nl),t("button",{type:"button",class:z({on:s(n).hw.bar}),disabled:s(v)||!s(n).mossOnline,onClick:e[5]||(e[5]=re(i=>s(c)("bar"),["stop"]))},"流水灯",10,Il),s(n).hasPanel?(G(),Y("button",{key:0,type:"button",class:z({on:s(n).hw.panel}),disabled:s(v)||!s(n).mossOnline,onClick:e[6]||(e[6]=re(i=>s(c)("panel"),["stop"]))},"面板灯",10,Ul)):ve("",!0),s(n).hasBottom?(G(),Y("button",{key:1,type:"button",class:z({on:s(n).hw.bottom}),disabled:s(v)||!s(n).mossOnline,onClick:e[7]||(e[7]=re(i=>s(c)("bottom"),["stop"]))},"底灯",10,Bl)):ve("",!0),s(n).hasMotor?(G(),Y("button",{key:2,type:"button",class:z({on:s(n).hw.motor_dir==="forward"}),disabled:s(v)||!s(n).mossOnline,onClick:e[8]||(e[8]=re(i=>s(a)("motor","forward"),["stop"]))},"电机正转",10,_l)):ve("",!0),s(n).hasMotor?(G(),Y("button",{key:3,type:"button",class:z({on:s(n).hw.motor_dir==="backward"}),disabled:s(v)||!s(n).mossOnline,onClick:e[9]||(e[9]=re(i=>s(a)("motor","backward"),["stop"]))},"电机反转",10,Dl)):ve("",!0),s(n).hasMotor?(G(),Y("button",{key:4,type:"button",class:"span2",disabled:s(v)||!s(n).mossOnline,onClick:e[10]||(e[10]=re(i=>s(a)("motor","stop"),["stop"]))},"电机停止",8,Rl)):ve("",!0),t("button",{type:"button",class:z({on:J.value}),onClick:re(St,["stop"])},p(J.value?"关闭天眼系统":"打开天眼系统"),3),t("button",{type:"button",class:z(["voice",{on:Ge.value}]),disabled:s(b)||!s(n).mossOnline,onClick:re(It,["stop"])},[tt(p(te.value)+" ",1),t("small",null,p(s(n).mossOnline?"SPACE":"OFFLINE"),1)],10,Wl),t("button",{type:"button",class:z(["voice replay",{on:Ie.value}]),disabled:Ie.value||!s(n).mossOnline,title:"立刻重播最近一条云享记,方便听 TTS",onClick:re(Ut,["stop"])},[tt(p(it.value)+" ",1),t("small",null,p(rt.value),1)],10,$l)])])]),t("section",Vl,[t("div",jl,[t("button",{type:"button",class:z({on:Z.value==="engines"}),onClick:re(sn,["stop"])},"行星发动机",2),t("button",{type:"button",class:z({on:Z.value==="optics"}),onClick:re(Rn,["stop"])},"天眼系统",2),Z.value==="optics"?(G(),Y("button",{key:0,type:"button",class:z({on:Fe.value}),onClick:e[11]||(e[11]=re(i=>Fe.value=!Fe.value,["stop"]))},p(Fe.value?"滤镜 ON":"滤镜 OFF"),3)):ve("",!0),Z.value==="optics"&&Ye.value?(G(),Y("button",{key:1,type:"button",class:z({on:ge.value}),title:"打开或关闭人脸检测(叠在预览画面上)",onClick:e[12]||(e[12]=re(i=>ge.value=!ge.value,["stop"]))}," 人脸 "+p(ge.value?"ON":"OFF"),3)):ve("",!0),Z.value==="optics"?(G(),Y("button",{key:2,type:"button",class:z({on:we.value&&K.value}),disabled:!K.value,title:K.value?"方向键 / WASD 转云台,+/- 变焦。空格仍是唤醒。":"本机型没有云台,或 Onvif 未开放 PTZ",onClick:e[13]||(e[13]=re(i=>we.value=!we.value,["stop"]))}," 键盘 "+p(we.value?"ON":"OFF"),11,Yl)):ve("",!0)]),Sn(t("div",Gl,[t("div",Hl,[t("div",Kl,[t("div",{ref_key:"engineHostEl",ref:S,class:"engine-stage"},null,512),s(Qe)?(G(),Y("p",ql,p(s(Qe)),1)):ve("",!0),e[57]||(e[57]=t("div",{class:"heading"},[t("small",null,"HEADING"),t("b",null,"α CENTAURI")],-1)),e[58]||(e[58]=t("div",{class:"scene-tag tag-a"},[t("small",null,"NEAR UNIT"),t("b",null,"PE-3307"),t("em",null,"ASIA ARRAY · 4.2 km")],-1)),e[59]||(e[59]=t("div",{class:"scene-tag tag-b"},[t("small",null,"FIELD"),t("b",null,"移山阵列"),t("em",null,"DENSITY 38 / 100 km²")],-1))]),t("div",Xl,[t("div",null,[e[60]||(e[60]=t("span",null,"THRUST",-1)),t("b",null,p(He.value)+"%",1)]),t("div",null,[e[61]||(e[61]=t("span",null,"ΔV",-1)),t("b",null,p(bt.value)+" km/s",1)]),t("div",null,[e[62]||(e[62]=t("span",null,"ONLINE",-1)),t("b",null,p(Ce.value)+" / 10000",1)])])]),t("div",Zl,[e[63]||(e[63]=t("div",{class:"eb-h"},"全球行星发动机运行状态",-1)),e[64]||(e[64]=t("div",{class:"eb-sub"},"PLANETARY ENGINE ARRAY · 移山计划",-1)),(G(!0),Y(qt,null,Xt(We.value,i=>(G(),Y("div",{key:i.en,class:"eb-row"},[t("span",null,p(i.name),1),t("em",null,p(i.online)+"/"+p(i.total),1),t("i",null,[t("b",{style:Zt({width:i.pct+"%"})},null,4)])]))),128)),e[65]||(e[65]=t("p",{class:"eb-note"},"地球推进中 · 等离子体尾迹稳定",-1))])],512),[[kn,Z.value==="engines"]]),J.value?Sn((G(),Y("div",{key:0,class:z(["optic-view",{filtered:Fe.value,live:s(g).connected.value&&!s(g).showPlaceholder.value,focusing:s(A),tracked:s(f)}])},[t("div",{ref_key:"opticStageEl",ref:y,class:"optic-stage"},[t("div",Jl,[t("div",Ql,[Sn(t("video",{ref_key:"videoEl",ref:u,class:"oss-video",muted:"",autoplay:"",playsinline:""},null,512),[[kn,s(g).playMode.value==="mpegts"]]),Sn(t("img",{ref_key:"opticImgEl",ref:M,class:"oss-video",src:s(g).streamUrl.value,alt:"天眼系统"},null,8,ei),[[kn,s(g).connected.value&&s(g).playMode.value==="mjpeg"&&s(g).streamUrl.value]])]),!s(g).connected.value||s(g).showPlaceholder.value?(G(),Y("div",ti,[t("p",null,p(be.value),1),De.value?(G(),Y("button",{key:0,type:"button",onClick:e[14]||(e[14]=i=>s(l).push("/camera"))},"去配置摄像头")):ve("",!0)])):ve("",!0),e[66]||(e[66]=t("div",{class:"optic-fx","aria-hidden":"true"},null,-1))]),t("div",ni,[e[80]||(e[80]=to('<i class="hud-corner tl" data-v-b786c45d></i><i class="hud-corner tr" data-v-b786c45d></i><i class="hud-corner bl" data-v-b786c45d></i><i class="hud-corner br" data-v-b786c45d></i><div class="hud-grid" data-v-b786c45d></div><div class="hud-scan" data-v-b786c45d></div><div class="hud-floor" data-v-b786c45d></div>',7)),ge.value?(G(),Y("div",{key:0,class:z(["hud-reticle",{locked:s(f)}]),style:Zt(s(U))},[e[67]||(e[67]=t("span",{class:"ret-ring"},null,-1)),e[68]||(e[68]=t("span",{class:"ret-spin"},null,-1)),e[69]||(e[69]=t("span",{class:"ret-h"},null,-1)),e[70]||(e[70]=t("span",{class:"ret-v"},null,-1)),t("b",oi,p(s(E)),1)],6)):ve("",!0),ge.value?(G(),Y("div",{key:1,class:z(["hud-box",{locked:s(f),focusing:s(A)}]),style:Zt(s(P))},[e[71]||(e[71]=t("i",null,null,-1)),e[72]||(e[72]=t("i",null,null,-1)),e[73]||(e[73]=t("i",null,null,-1)),e[74]||(e[74]=t("i",null,null,-1)),s(f)?(G(),Y("em",ai,"FACE 01")):ve("",!0)],6)):ve("",!0),t("div",si,[t("span",{class:z(["hud-rec",{on:s(g).connected.value}])},p(s(g).connected.value?"REC":"STBY"),3),e[75]||(e[75]=t("span",null,"SKY-01",-1)),t("span",null,p(s(g).sourceLabel.value||s(g).hostname.value||"NO FEED"),1),t("span",null,p(s(g).encoding.value||s(g).playMode.value||"SKY-EYE")+" · CH-A",1),t("span",null,p(ge.value?"BLAZEFACE · LOCAL":"BLAZEFACE · OFF"),1)]),t("div",li,[t("span",null,p(T.value)+" · UTC+8",1),t("b",null,p(F.value),1),t("span",null,"FRAME "+p(de.value.frame),1),e[76]||(e[76]=t("span",null,"LAT 39.9042 N",-1)),e[77]||(e[77]=t("span",null,"LON 116.4074 E",-1))]),t("div",ii,[t("span",null,"IRIS F/"+p(de.value.iris),1),t("span",null,"GAIN "+p(de.value.gain)+" dB",1),t("span",null,"FOV "+p(de.value.fov)+"°",1),t("div",ri,[e[78]||(e[78]=t("em",null,"SIG",-1)),t("i",null,[t("b",{style:Zt({height:de.value.sig+"%"})},null,4)]),t("small",null,p(de.value.sig)+"%",1)]),t("div",ui,[(G(),Y(qt,null,Xt(10,i=>t("i",{key:i})),64))])]),t("div",ci,[t("span",null,"AZ "+p(de.value.az)+"°",1),t("span",null,"EL "+p(de.value.el)+"°",1),t("span",null,"RNG "+p(de.value.rng)+" m",1),t("span",null,"MAG "+p(de.value.mag)+"×",1),t("span",null,"TEMP "+p(de.value.temp)+"°C",1),t("span",di,p(de.value.mode),1)]),t("div",vi,[e[79]||(e[79]=t("div",{class:"hud-ticks"},null,-1)),t("b",null,"HDG "+p(de.value.hdg)+"°",1)])]),t("div",{class:"ptz-dock",onClick:e[16]||(e[16]=re(()=>{},["stop"])),onPointerdown:e[17]||(e[17]=re(()=>{},["stop"]))},[t("div",fi,[t("button",Et({type:"button",class:{on:s(ee).moving==="up"},disabled:!K.value},Ot(s(ee).pointerBind("up"),!0)),"▲",16,mi),t("button",Et({type:"button",class:{on:s(ee).moving==="left"},disabled:!K.value},Ot(s(ee).pointerBind("left"),!0)),"◀",16,pi),t("button",{type:"button",class:"stop",disabled:!K.value,onClick:e[15]||(e[15]=i=>s(ee).send("stop"))},"■",8,hi),t("button",Et({type:"button",class:{on:s(ee).moving==="right"},disabled:!K.value},Ot(s(ee).pointerBind("right"),!0)),"▶",16,gi),t("button",Et({type:"button",class:{on:s(ee).moving==="down"},disabled:!K.value},Ot(s(ee).pointerBind("down"),!0)),"▼",16,wi)]),Le.value?ve("",!0):(G(),Y("div",bi,[t("button",Et({type:"button",class:{on:s(ee).moving==="zoom_in"},disabled:!K.value},Ot(s(ee).pointerBind("zoom_in"),!0)),"+",16,yi),t("button",Et({type:"button",class:{on:s(ee).moving==="zoom_out"},disabled:!K.value},Ot(s(ee).pointerBind("zoom_out"),!0)),"-",16,Mi)])),t("div",xi,[t("span",null,p(K.value?"PTZ READY":"PTZ OFF"),1),t("b",{class:z({on:Pe.value})},p(s(ee).hint),3)])],32)],512),t("div",Si,[t("div",null,[e[81]||(e[81]=t("span",null,"LOCK",-1)),t("b",null,p(de.value.lock),1)]),t("div",null,[e[82]||(e[82]=t("span",null,"SIGNAL",-1)),t("b",null,p(de.value.sig)+"%",1)]),t("div",null,[e[83]||(e[83]=t("span",null,"RANGE",-1)),t("b",null,p(de.value.rng)+" m",1)]),t("div",null,[e[84]||(e[84]=t("span",null,"ARRAY",-1)),t("b",null,p(s(g).sourceLabel.value||s(g).hostname.value||"OFFLINE"),1)]),t("div",null,[e[85]||(e[85]=t("span",null,"PTZ",-1)),t("b",null,p(Me.value),1)])])],2)),[[kn,Z.value==="optics"]]):ve("",!0),t("div",ki,[t("div",Ci,p(ut.value),1),t("p",{class:"speech-body",title:Ue.value},p(Ue.value),9,Ai)])]),t("aside",Ei,[t("div",Oi,[e[86]||(e[86]=t("span",null,"通信记录",-1)),e[87]||(e[87]=t("em",null,"COM-02",-1)),t("button",{class:"tiny",type:"button",onClick:e[18]||(e[18]=re(i=>s(n).clearChat(),["stop"]))},"CLR")]),t("div",{ref_key:"logEl",ref:k,class:"log"},[s(n).chatLines.length?ve("",!0):(G(),Y("p",Fi,"无通信。按空格建立语音链路。")),(G(!0),Y(qt,null,Xt(s(n).chatLines,i=>(G(),Y("div",{key:i.id,class:z(["log-row",i.role])},[t("span",Pi,p(xt(i.at)),1),t("span",Ti,p(an(i.role)),1),t("span",Li,p(i.text),1)],2))),128))],512)])]),t("footer",zi,[t("div",Ni,[t("span",null,p(en.value),1),t("span",Ii,p(en.value),1)])]),t("div",{class:z(["moss-aim",he.value]),style:Zt(ie.value),"aria-hidden":"true"},[...e[88]||(e[88]=[to('<span class="aim-dia" data-v-b786c45d></span><span class="aim-box" data-v-b786c45d><i class="tl" data-v-b786c45d></i><i class="tr" data-v-b786c45d></i><i class="bl" data-v-b786c45d></i><i class="br" data-v-b786c45d></i></span><span class="aim-plus" data-v-b786c45d></span><span class="aim-dot" data-v-b786c45d></span>',4)])],6)],34))}}),Vi=ws(Ui,[["__scopeId","data-v-b786c45d"]]);export{Vi as default};
|
|
568
|
+
`})}function sl(o){const n=[],l=[],v=[],a=[-.06,0,.058],c=26;for(let h=0;h<a.length;h++)for(let b=0;b<c;b++){if(B(h*1.7,b+2)<.1)continue;const u=h*.41+B(b,h+5)*.62,M=(b+u)/c*Math.PI*2+(B(b*1.3,h+9)-.5)*.1,y=a[h]+(B(h,b+11)-.5)*.028,S=o*1.002;n.push(S*Math.sin(y),S*Math.cos(y)*Math.cos(M),S*Math.cos(y)*Math.sin(M)),l.push(1.15+B(b,8)*.45),v.push(B(b+h*3,17)*Math.PI*2)}return{pos:new Float32Array(n),size:new Float32Array(l),phase:new Float32Array(v)}}function ll(o){const n=[],l=[],v=[],a=(u,M,y)=>{const S=Math.hypot(u,y)/o,k=Math.abs(M/o);return S<.5&&k<.78},c=(u,M,y,S,k)=>{a(u,M,y)||(n.push(u,M,y),l.push(S),v.push(k))},h=[-.2,-.28,-.36,-.44,-.52];for(let u=0;u<h.length;u++){const M=40+u*6,y=.1+u*.03;for(let S=0;S<M;S++){if(B(u*2.1,S+4)<y)continue;const k=u*.31+B(S,u+2)*.55,g=(S+k)/M*Math.PI*2+(B(S*1.2,u+11)-.5)*.14,P=h[u]+(B(u,S+21)-.5)*.022,T=o*(1.002+B(S,8)*.005);c(T*Math.sin(P),T*Math.cos(P)*Math.cos(g),T*Math.cos(P)*Math.sin(g),.52+B(S,8)*.32,B(S+u,23)*Math.PI*2)}}const b=[-.62,-.78,-.94];for(let u=0;u<b.length;u++){const M=28+u*3,y=B(u,3)*Math.PI*2,S=.32+B(u,5)*.45;for(let k=0;k<M;k++){if(B(u*2.3,k+7)<.16)continue;const g=u*.35+B(k,u+4)*.62,P=(k+g)/M*Math.PI*2+(B(k*1.1,u+13)-.5)*.18;if(u>=2&&Math.abs((P-y+Math.PI)%(Math.PI*2)-Math.PI)<S*.5)continue;const T=b[u]+(B(u,k+21)-.5)*.028,R=o*(1.002+B(k,47)*.004);c(R*Math.sin(T),R*Math.cos(T)*Math.cos(P),R*Math.cos(T)*Math.sin(P),.46+B(k,8)*.28,B(k+u,29)*Math.PI*2)}}return{pos:new Float32Array(n),size:new Float32Array(l),phase:new Float32Array(v)}}function il(o,n,l){const v=document.createElement("canvas");v.width=512,v.height=128;const a=v.getContext("2d");a.clearRect(0,0,512,128),a.fillStyle="rgba(4, 12, 18, 0.55)",a.fillRect(8,24,496,84),a.strokeStyle="rgba(94, 200, 216, 0.65)",a.lineWidth=2,a.strokeRect(8,24,496,84),a.fillStyle="#d4a017",a.fillRect(8,24,6,84),a.font="600 36px ui-monospace, monospace",a.fillStyle="#7ee0ee",a.fillText(o,28,64),a.font="22px ui-monospace, monospace",a.fillStyle="rgba(170, 196, 210, 0.85)",a.fillText(n,28,94);const c=new Jo(v);c.colorSpace=ht;const h=new fs(new ms({map:c,transparent:!0,depthWrite:!1}));return h.scale.set(l,l*.25,1),h}function rl(o,n,l){const v=L("载入行星发动机…");let a=null,c=null,h=null,b=null,u=null,M=null,y=null,S=null,k=null,g=null,P=null,T=null,R=null,se=null,X=null,fe=null,le=null,H=null,_=null,ie=null,he=null,J=new oe,Z=0,Pe=!1,ge=0,we=.55,Le=0,K=1,Me=new oe,Ye=80,be=.18,De=new oe,Fe=new oe,ee=80,Te=180,Ne=.31,ue=.1,C=0,A=!1,f=!1,E=!0,F=!1,U=0,xe=0,W=null,me=0,Ge=0,Re=0;const Bn=new gt(462872),wt=new gt(0),Ze=[],te=[],Ie=[],Je=[],it=new oe;let rt=null,ut=null,ze=null,Se=null,Ue=null,We=null,Ce=null,He=0,bt=80,ae=null,ce=null,Qe=null;const de=[];function en(){const d=o.value;if(!d||!a||!u)return;const w=Math.max(1,Math.round(d.clientWidth)),O=Math.max(1,Math.round(d.clientHeight));w===Ge&&O===Re||(Ge=w,Re=O,a.setSize(w,O,!1),c==null||c.setSize(w,O),h==null||h.resolution.set(Math.max(1,Math.floor(w*.5)),Math.max(1,Math.floor(O*.5))),u.aspect=w/O,u.updateProjectionMatrix(),Mt())}function yt(){me&&window.cancelAnimationFrame(me),me=window.requestAnimationFrame(()=>{me=0,en()})}function ct(){!h||F||(h.strength=.92,h.radius=.46,h.threshold=.42,F=!0)}function tn(){if(!c||!h||!ae||!ce||!a||!b||!u)return;const d=ae.visible,w=ce.visible;ae.visible=!1,ce.visible=!0,h.enabled=!0,ct(),c.render(),ae.visible=d,ce.visible=w,h.enabled=w}function zt(){if(!(!ae||!ce)){if(!A&&C>=.52&&(A=!0),A&&C<=.48&&(A=!1),A!==f&&(F=!1,A&&(U=2),f=A),ae.visible=!A,ce.visible=A,b&&Qe){const d=!A;d!==E&&(E=d,b.fog=d?Qe:null)}if(a&&a.setClearColor(A?wt:Bn,1),h&&(h.enabled=A),u){const d=A?44:38;u.fov!==d&&(u.fov=d,u.updateProjectionMatrix())}}}function Mt(){if(!u)return;C=el(K),Me.lerpVectors(De,Fe,C),be=Lt(Ne,ue,C);const d=ee/K,w=Te*Math.min(2.6,Math.max(.9,.18/Math.max(K,Ho))),O=Lt(d,w,C);Ye=Lt(ee,Te,C);const r=Math.cos(be);u.position.set(Me.x+Math.sin(we)*O*r,Me.y+Math.sin(be)*O,Me.z+Math.cos(we)*O*r),u.lookAt(Me)}function nn(d,w){if(!T||!R||!se)return;const O=Math.random()*Math.PI*2,r=Math.random()*w*.35;T[d*3]=Math.cos(O)*r,T[d*3+1]=Math.random()*2,T[d*3+2]=Math.sin(O)*r,se[d*3]=(Math.random()-.5)*w*.045,se[d*3+1]=w*(1.1+Math.random()*1.4),se[d*3+2]=(Math.random()-.5)*w*.045,R[d]=.35+Math.random()*.65}function _n(d,w,O){if(!P||!T||!R||!se)return;const r=R.length;for(let i=0;i<r;i++){if(R[i]-=d*(.55+(1-w)*.4),R[i]<=0){nn(i,O);continue}T[i*3]+=se[i*3]*d,T[i*3+1]+=se[i*3+1]*d*(.7+w*.8),T[i*3+2]+=se[i*3+2]*d}const e=P.geometry;e.attributes.position.needsUpdate=!0}function Nt(d,w,O){if(!le||!H||!_||!ie||!he)return;const r=Math.random()*Math.PI*2,e=O*(.7+Math.random()*.9);le[d*3]=w.x+Math.cos(r)*e,le[d*3+1]=w.y+Math.random()*O*.15,le[d*3+2]=w.z+Math.sin(r)*e,H[d*3]=(Math.random()-.5)*O*.18,H[d*3+1]=O*(.08+Math.random()*.14),H[d*3+2]=(Math.random()-.5)*O*.18,he[d]=2.4+Math.random()*2.8,_[d]=he[d],ie[d]=O*(1.6+Math.random()*2.2)}function Dn(d,w,O,r){if(!X||!le||!H||!_||!he||!ie)return;const e=_.length,i=performance.now()/1e3;for(let D=0;D<e;D++){if(_[D]-=d,_[D]<=0){Math.random()<.35+w*.4?Nt(D,r,O):_[D]=.01;continue}const dt=1-_[D]/he[D];H[D*3]+=Math.sin(i*.7+D)*O*.04*d,H[D*3+2]+=Math.cos(i*.55+D*.4)*O*.04*d,H[D*3+1]*=.995,le[D*3]+=H[D*3]*d*(.8+dt),le[D*3+1]+=H[D*3+1]*d*(.85+w*.35),le[D*3+2]+=H[D*3+2]*d*(.8+dt)}const $=X.geometry;$.attributes.position.needsUpdate=!0;const V=$.getAttribute("aLife");for(let D=0;D<e;D++)V.array[D]=_[D]/he[D];V.needsUpdate=!0}function on(d){var w;d.button===0&&(Pe=!0,ge=d.clientX,Le=0,(w=o.value)==null||w.setPointerCapture(d.pointerId))}function an(d){if(!Pe)return;const w=d.clientX-ge;ge=d.clientX,we+=w*.008,Le=w*.008}function xt(d){var w;Pe=!1;try{(w=o.value)==null||w.releasePointerCapture(d.pointerId)}catch{}}function It(d){d.preventDefault();const w=Math.exp(-d.deltaY*.0016);K=Math.min($s,Math.max(Ho,K*w)),Mt()}function Ut(d=0){if(Z=0,!n.value||!a||!b||!u||!M)return;const w=xe?Math.min(.05,(d-xe)/1e3):.016;xe=d;const O=Math.min(1,Math.max(.2,l.value));if(Pe||(A?Le*=.82:(we+=55e-5+Le,Le*=.94)),Mt(),zt(),A){const i=d*.001;Se&&(Se.uniforms.uBoost.value=.72+O*.45,Se.uniforms.uScale.value=1.12,Se.uniforms.uTime.value=i);for(const $ of Ze)$.uniforms.uTime&&($===Se||$===ze||($.uniforms.uTime.value=i,$.uniforms.uBoost&&($.uniforms.uBoost.value=.72+O*.32)));U>0?U-=1:Ue==null||Ue.update(w),c&&(ct(),c.render()),Z=window.requestAnimationFrame(Ut);return}const r=d*.001;y&&S&&u&&(y.getWorldPosition(J),S.position.copy(J),S.rotation.y=Math.atan2(u.position.x-J.x,u.position.z-J.z));for(const i of Ze)i.uniforms.uTime&&(i.uniforms.uTime.value=r),i.uniforms.uBoost&&i!==Se&&(i.uniforms.uBoost.value=.72+O*.32);S&&S.scale.set(1,.94+O*.14,1),k&&y&&(y.getWorldPosition(J),k.uniforms.uPlasmaPos.value.copy(J),k.uniforms.uPlasmaBoost.value=.35+O*.28),g&&(g.uniforms.uBoost.value=.45+O*.3);const e=(y==null?void 0:y.userData.radius)||12;if(_n(w,O,e),y&&X){const i=y.userData.modelRadius||e*10;y.getWorldPosition(J),Dn(w,O,i*.22,J)}if(We&&Ce){const i=Ce.length/3;for(let V=0;V<i;V++)Ce[V*3+1]-=w*(bt-He)*.06,Ce[V*3+1]<He&&(Ce[V*3+1]=bt,Ce[V*3]+=(Math.random()-.5)*4,Ce[V*3+2]+=(Math.random()-.5)*4);const $=We.geometry;$.attributes.position.needsUpdate=!0}if(fe&&(fe.uniforms.uTime.value=r),rt&&(rt.uniforms.uTime.value=r),ut&&(ut.uniforms.uTime.value=r),u){for(const i of Je)i.parent.getWorldPosition(it),it.y+=i.nozzleY,i.group.position.copy(it),i.group.rotation.y=Math.atan2(u.position.x-it.x,u.position.z-it.z);for(const i of Ie)i.rotation.y=Math.atan2(u.position.x-i.position.x,u.position.z-i.position.z)}a&&b&&u&&a.render(b,u),Z=window.requestAnimationFrame(Ut)}function St(){Z&&window.cancelAnimationFrame(Z),Z=0}function sn(){St(),Z=window.requestAnimationFrame(Ut)}function Rn(d){d.traverse(w=>{var e,i,$;const O=w;(i=(e=O.geometry)==null?void 0:e.dispose)==null||i.call(e);const r=O.material;Array.isArray(r)?r.forEach(V=>V.dispose()):($=r==null?void 0:r.dispose)==null||$.call(r)})}function Wn(){St(),me&&window.cancelAnimationFrame(me),me=0,W==null||W.disconnect(),W=null;const d=o.value;d&&(d.removeEventListener("pointerdown",on),d.removeEventListener("pointermove",an),d.removeEventListener("pointerup",xt),d.removeEventListener("pointercancel",xt),d.removeEventListener("wheel",It)),Ue==null||Ue.dispose(),Ue=null;for(const w of te)Rn(w);te.length=0,Ze.length=0,c=null,h=null,a==null||a.dispose(),a==null||a.domElement.remove(),a=null,b=null,u=null,M=null,y=null,S=null,k=null,g=null,P=null,T=null,R=null,se=null,X=null,fe=null,le=null,H=null,_=null,ie=null,he=null,Ie.length=0,Je.length=0,rt=null,ut=null,ze=null,Se=null,We=null,Ce=null,ae=null,ce=null,Qe=null;for(const w of de)w.dispose();de.length=0}async function $n(){const d=o.value;if(!(!d||a)){v.value="载入行星发动机…",A=!1,f=!1,E=!0,F=!1,U=0,xe=0,Ge=0,Re=0,b=new Ka,u=new qa(38,1,.1,8e3),a=new Xa({antialias:!0,alpha:!1,powerPreference:"high-performance",logarithmicDepthBuffer:!0}),a.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),a.setClearColor(462872,1),a.toneMapping=Za,a.toneMappingExposure=.9,a.outputColorSpace=ht,a.domElement.className="engine-canvas",d.appendChild(a.domElement),c=new Ja(a),c.addPass(new Qa(b,u)),h=new es(new Nn(d.clientWidth||1,d.clientHeight||1),.52,.34,.8),c.addPass(h),c.addPass(new ts),d.addEventListener("pointerdown",on),d.addEventListener("pointermove",an),d.addEventListener("pointerup",xt),d.addEventListener("pointercancel",xt),d.addEventListener("wheel",It,{passive:!1}),ae=new nt,ce=new nt,ce.visible=!1,b.add(ae),b.add(ce),M=new nt,ae.add(M);try{let w=await new ns().loadAsync(Rs);if(!ae||!ce||!a||!b||!u||!M)return;w=os(w,.08),w.center(),w.rotateX(-Math.PI/2),w=as(w,Math.PI*.48),w.computeBoundingBox();const O=w.boundingBox,r=new oe;O.getSize(r);const e=Math.max(r.x,r.y,r.z)*.5;k=Ys();const i=new Oe(w,k),$=new Uo(new Bo(w,48),new _o({color:Qt,transparent:!0,opacity:.18}));M.add(i),M.add($),te.push(i,$);const V=O.min.y,D=new Oe(new Do(e*.72,e*.86,64),new Qo({color:Ws,transparent:!0,opacity:.35,side:st}));D.rotation.x=-Math.PI/2,D.position.y=V+.4,M.add(D),te.push(D);const dt=new Uo(new Bo(new Do(e*.9,e*.98,48),1),new _o({color:Qt,transparent:!0,opacity:.35}));dt.rotation.x=-Math.PI/2,dt.position.y=V+.2,M.add(dt),te.push(dt),y=new nt,y.position.y=O.max.y-e*.015,y.userData.radius=e*.1,y.userData.modelRadius=e,y.userData.plumeH=e*1.85,S=new nt;const uo=ot(e*1.12,e*2.85,"halo"),co=ot(e*.48,e*2.7,"mid"),Vn=ot(e*.48,e*2.7,"mid");Vn.rotation.y=Math.PI/2;const vo=ot(e*.16,e*2.8,"core"),fo=ot(e*.78,e*.52,"mist");S.add(uo,co,Vn,vo,fo),ae.add(S),Ze.push(uo.material,co.material,Vn.material,vo.material,fo.material),te.push(S),g=js();const ln=new Oe(new at(e*.38,e*.38),g);ln.rotation.x=-Math.PI/2,ln.renderOrder=35,y.add(ln),te.push(ln);const rn=340;T=new Float32Array(rn*3),se=new Float32Array(rn*3),R=new Float32Array(rn);for(let m=0;m<rn;m++)nn(m,e*.1);const mo=new Pt;mo.setAttribute("position",new Ee(T,3)),P=new Ft(mo,new Ro({color:7259391,size:e*.012,transparent:!0,opacity:.38,blending:je,depthWrite:!1})),P.renderOrder=45,y.add(P),te.push(P),M.add(y);const vt=96;le=new Float32Array(vt*3),H=new Float32Array(vt*3),_=new Float32Array(vt),he=new Float32Array(vt),ie=new Float32Array(vt);const un=new Pt;un.setAttribute("position",new Ee(le,3)),un.setAttribute("aLife",new Ee(new Float32Array(vt),1)),un.setAttribute("aSize",new Ee(ie,1)),fe=Gs(),X=new Ft(un,fe),X.frustumCulled=!1,X.renderOrder=8,ae.add(X),te.push(X),y.getWorldPosition(J),J.y-=e*.08;for(let m=0;m<vt;m++)Nt(m,J,e*.15),_[m]*=Math.random();Qe=new ss(660768,e*9,e*34),b.fog=Qe,u.near=Math.max(.2,e*.02),u.far=e*120,u.updateProjectionMatrix();const po=e*42,Bt=new at(po,po,96,96);Bt.rotateX(-Math.PI/2);const _t=Bt.attributes.position,ho=new Float32Array(_t.count);for(let m=0;m<_t.count;m++){const x=_t.getX(m),N=_t.getZ(m);_t.setY(m,io(x,N,e,V)),ho[m]=Ln(x,N,e)}Bt.setAttribute("aRiver",new Ee(ho,1)),Bt.computeVertexNormals();const go=new Oe(Bt,Xs());ae.add(go),te.push(go);const cn=[{x:-4.8,z:.12,s:.38,id:"PE-3312",sub:"EQ-ROW · 11 km"},{x:5.2,z:-.16,s:.34,id:"",sub:""},{x:-9.1,z:.28,s:.22,id:"",sub:""},{x:9.4,z:-.22,s:.2,id:"",sub:""},{x:-2.5,z:-2.72,s:.28,id:"",sub:""},{x:3.7,z:-2.95,s:.25,id:"",sub:""},{x:-6.9,z:-2.58,s:.18,id:"",sub:""},{x:-2.9,z:2.82,s:.27,id:"",sub:""},{x:4.1,z:3.02,s:.23,id:"",sub:""},{x:7.6,z:2.62,s:.17,id:"",sub:""}],ta=[{x:0,z:0,r:e*1.45},...cn.map(m=>({x:m.x*e,z:m.z*e,r:m.s*e*1.05}))],wo=new ls(1,1,1);wo.translate(0,.5,0);const kt=4200,ft=new is(wo,Zs(),kt),Ke=new rs;let $e=0;const Dt=e*.125,na=(m,x)=>ta.some(N=>Math.hypot(m-N.x,x-N.z)<N.r),oa=56,aa=32,sa=-e*6.6,bo=e*1.38;for(let m=0;m<aa&&$e<kt;m++)for(let x=0;x<oa&&$e<kt;x++){if(x%8===0||m%6===0)continue;const N=sa+(x+.5)*Dt,j=bo+(m+.5)*Dt;if(na(N,j)||Ln(N,j,e)>.16)continue;const q=Math.hypot(N,j),Q=Math.max(Math.abs(N)/(e*6.8),(j-bo)/(e*4.6));if(B(x*1.13,m*2.07)<.05+Q*.32)continue;const ye=Math.floor(x/8),ke=Math.floor(m/6),Be=q<e*2.6?1.35:q<e*4.1?1:.62,Xe=(.055+B(ye*3.1,ke*5.7)*.1)*Be*(.78+B(x,m+9)*.45);Ke.position.set(N,io(N,j,e,V),j),Ke.rotation.y=0,Ke.scale.set(Dt*.74,e*Xe,Dt*.74),Ke.updateMatrix(),ft.setMatrixAt($e,Ke.matrix),$e+=1}for(let m=0;m<cn.length&&$e<kt;m++){const x=cn[m];if(!x)continue;const N=x.x*e,j=x.z*e,q=x.s*e*1.12,Q=x.s*e*4.2,ye=Dt*(.72+x.s*.4),ke=Math.max(6,Math.round(Q*2/ye));for(let Be=0;Be<ke&&$e<kt;Be++)for(let Ve=0;Ve<ke&&$e<kt;Ve++){if(Ve%5===0||Be%4===0)continue;const Xe=N-Q+(Ve+.5)*ye,mt=j-Q+(Be+.5)*ye,_e=Math.hypot(Xe-N,mt-j);if(_e<q||_e>Q||Ln(Xe,mt,e)>.18||B(Ve+m*9,Be+m*3)<.22+_e/Q*.28)continue;const pt=x.s*(.04+B(Ve,Be+m)*.07);Ke.position.set(Xe,io(Xe,mt,e,V),mt),Ke.scale.set(ye*.7,e*pt,ye*.7),Ke.updateMatrix(),ft.setMatrixAt($e,Ke.matrix),$e+=1}}ft.count=$e,ft.instanceMatrix.needsUpdate=!0,ft.frustumCulled=!1,ae.add(ft),te.push(ft);const pe=e*3.15,dn=4200,vn=new Float32Array(dn*3),yo=new Float32Array(dn),Mo=new Float32Array(dn);for(let m=0;m<dn;m++){const x=Math.acos(2*Math.random()-1),N=Math.random()*Math.PI*2,j=pe*(12+Math.random()*20);vn[m*3]=j*Math.sin(x)*Math.sin(N),vn[m*3+1]=j*Math.cos(x),vn[m*3+2]=j*Math.sin(x)*Math.cos(N);const q=Math.pow(Math.random(),3.1);Mo[m]=.1+q*.78,yo[m]=(.22+q*1.35)*pe*.01}const fn=new Pt;fn.setAttribute("position",new Ee(vn,3)),fn.setAttribute("aSize",new Ee(yo,1)),fn.setAttribute("aBright",new Ee(Mo,1));const jn=new Ft(fn,al());jn.frustumCulled=!1,ce.add(jn),te.push(jn),rt=qo("sky");const la=[{x:-e*3.2,y:e*1.55,z:-e*5.4,w:e*6.5,h:e*1.8},{x:e*4.8,y:e*1.9,z:-e*7.2,w:e*7.2,h:e*2.1},{x:e*.6,y:e*2.3,z:-e*9.5,w:e*8.4,h:e*2.4}];for(const m of la){const x=new Oe(new at(m.w,m.h),rt);x.position.set(m.x,m.y,m.z),ae.add(x),te.push(x)}ut=qo("mist");const ia=[{x:0,y:V+e*.18,z:e*.4,w:e*4.8,h:e*1.4,rx:-.08},{x:e*1.6,y:V+e*.22,z:-e*.8,w:e*5.2,h:e*1.5,rx:-.04},{x:-e*1.8,y:V+e*.2,z:e*1.2,w:e*4.4,h:e*1.3,rx:-.06}];for(const m of ia){const x=new Oe(new at(m.w,m.h),ut);x.position.set(m.x,m.y,m.z),x.rotation.x=m.rx,ae.add(x),te.push(x)}He=V,bt=V+e*3.2;const xo=900;Ce=new Float32Array(xo*3);for(let m=0;m<xo;m++){const x=Math.random()*Math.PI*2,N=Math.random()*e*9;Ce[m*3]=Math.cos(x)*N,Ce[m*3+1]=He+Math.random()*(bt-He),Ce[m*3+2]=Math.sin(x)*N}const So=new Pt;So.setAttribute("position",new Ee(Ce,3)),We=new Ft(So,new Ro({color:12966118,size:e*.012,transparent:!0,opacity:.42,depthWrite:!1})),We.frustumCulled=!1,ae.add(We),te.push(We);const ra=Js(),ko=Tn("halo"),Co=Tn("mid"),Ao=Tn("core");Ze.push(ko,Co,Ao);const ua=O.max.y;cn.forEach(m=>{const x=new nt;x.position.set(m.x*e,0,m.z*e),x.scale.setScalar(m.s),x.rotation.y=.15;const N=new Oe(w,ra);x.add(N),ae.add(x),te.push(x);const j=new nt,q=e*m.s;if(j.add(ot(q*1,q*2.5,"halo",ko),ot(q*.42,q*2.4,"mid",Co),ot(q*.14,q*2.55,"core",Ao)),ae.add(j),te.push(j),Je.push({group:j,parent:x,nozzleY:ua*m.s}),m.id){const Q=il(m.id,m.sub,e*.9/m.s);Q.position.set(0,O.max.y*.42,e*.62),x.add(Q),te.push(Q)}}),ze=Qs();const Eo=new at(1,1);Eo.translate(0,.5,0);const ca=[-2.7,-.85,.85,2.7];let mn=0;for(const m of ca)for(let x=0;x<20;x++){const N=e*(-22+x*2.28+x%3*.16);if(Math.abs(N)<e*11)continue;const j=e*(m+Math.sin(N/(e*14))*.35),q=new Oe(Eo,ze);q.position.set(N,V,j),q.scale.set(e*(.14+mn%4*.04),e*(2.2+mn%5*.4),1),q.frustumCulled=!1,q.renderOrder=6+mn%5,ae.add(q),Ie.push(q),te.push(q),mn+=1}const Rt=new us,Wt=await Rt.loadAsync("/textures/earth-night.jpg"),$t=await Rt.loadAsync("/textures/earth-lights.png"),et=await Rt.loadAsync("/textures/earth_clouds.jpg"),pn=await Rt.loadAsync("/textures/moon-base.jpg"),hn=await Rt.loadAsync("/textures/moon-bump.jpg");if(!ae||!ce||!a||!b||!u)return;Wt.colorSpace=ht,$t.colorSpace=ht,et.colorSpace=ht,Wt.anisotropy=8,$t.anisotropy=8,et.anisotropy=8,Wt.wrapS=En,$t.wrapS=En,et.wrapS=En,et.wrapT=En,de.push(Wt,$t,et),pn.colorSpace=ht,hn.colorSpace=cs,pn.anisotropy=8,hn.anisotropy=8,de.push(pn,hn);const Oo=new Oe(new Wo(pe,72,48),tl(Wt,$t,et));ce.add(Oo),te.push(Oo);const da=pe*.272,Yn=new Oe(new Wo(da,48,32),nl(pn,hn));Yn.position.set(-pe*10.8,pe*.38,pe*.72),ce.add(Yn),te.push(Yn);const Vt=sl(pe),va=Vt.pos.length/3,Ct=ll(pe),fa=Ct.pos.length/3;Se=ol();const gn=new Pt;gn.setAttribute("position",new Ee(Vt.pos,3)),gn.setAttribute("aSize",new Ee(Vt.size,1)),gn.setAttribute("aPhase",new Ee(Vt.phase,1));const Gn=new Ft(gn,Se);Gn.renderOrder=3,ce.add(Gn),te.push(Gn);const wn=new Pt;wn.setAttribute("position",new Ee(Ct.pos,3)),wn.setAttribute("aSize",new Ee(Ct.size,1)),wn.setAttribute("aPhase",new Ee(Ct.phase,1));const Hn=new Ft(wn,Se);Hn.renderOrder=3,ce.add(Hn),te.push(Hn);const Kn=Pn("core"),qn=Pn("veil"),Xn=Xo(),Zn=Zo(),Jn=(m,x,N)=>{const j=Pn("core"),q=Pn("veil"),Q=Xo(),ye=Zo();j.uniforms.uFade.value=m,q.uniforms.uFade.value=x,Q.uniforms.uFade.value=N,ye.uniforms.uFade.value=N*.85;for(const ke of[j,q,Q,ye])ke.uniforms.uMask.value=et,ke.uniforms.uUseMask.value=1,ke.uniforms.uMaskStrength.value=.75;return j.uniforms.uMaskScale.value.set(.383,.25),q.uniforms.uMaskScale.value.set(.333,.217),Q.uniforms.uMaskScale.value.set(.317,.317),ye.uniforms.uMaskScale.value.set(.417,.233),{core:j,veil:q,corona:Q,glow:ye}},jt=Jn(.62,.52,.7),Yt=Jn(.42,.34,.48),Gt=Jn(.26,.2,.3);for(const m of[Kn,qn,Xn,Zn])m.uniforms.uMask.value=et;const Qn=new ds(.5,1,18,1,!0);Qn.translate(0,.5,0);const ma=new at(1,1),Po=new at(1,1,1,24);Po.translate(0,.5,0);const At=new nt;At.renderOrder=3;const pa=new oe(0,1,0),ha=new oe(0,0,1),qe=new oe,Ht=new oe,Kt=new oe,bn=new oe,Fo=(m,x,N,j)=>{const q=N?Math.PI/2:25*Math.PI/180;for(let Q=0;Q<x;Q++){qe.set(m[Q*3],m[Q*3+1],m[Q*3+2]),Ht.copy(qe).normalize(),Kt.set(-1,0,0).addScaledVector(Ht,Ht.x),Kt.lengthSq()<1e-6?Kt.set(0,0,1):Kt.normalize(),N?bn.set(-1,0,0):bn.copy(Ht).multiplyScalar(Math.cos(q)).addScaledVector(Kt,Math.sin(q)).normalize();let ye,ke,Be=Kn,Ve=qn,Xe=Xn,mt=Zn;if(N){const eo=Math.min(1,Math.max(0,-qe.x/pe)),xn=eo<.45?jt:eo<.72?Yt:Gt;Be=xn.core,Ve=xn.veil,Xe=xn.corona,mt=xn.glow;const ba=Math.min(1,Math.abs(qe.y/pe)),ya=Math.pow(1-ba,1.85),Ma=.78+Math.pow(B(Q+j,19),.85)*.42;ye=pe*(.016+ya*.048+eo*.016)*Ma,ke=pe*(.0055+B(Q+j,3)*.004),qe.addScaledVector(Ht,pe*(.002+B(Q+j,31)*.01))}else ye=pe*(.028+B(Q+j,9)*.014),ke=pe*(.016+B(Q+j,3)*.006);const _e=new Oe(Qn,Be);_e.position.copy(qe),_e.quaternion.setFromUnitVectors(pa,bn),_e.scale.set(ke,ye,ke);const pt=new Oe(Qn,Ve);if(pt.position.copy(qe),pt.quaternion.copy(_e.quaternion),pt.scale.set(ke*(N?1.65:1.85),ye*1.08,ke*(N?1.65:1.85)),N){At.add(pt,_e);continue}const yn=new Oe(ma,Xe);yn.position.copy(qe),yn.quaternion.setFromUnitVectors(ha,bn);const To=ke*4;yn.scale.set(To,To,1),At.add(yn,pt,_e);const ga=ke*3.6,wa=ye*1.35,Mn=new Oe(Po,mt);Mn.position.copy(qe),Mn.quaternion.copy(_e.quaternion),Mn.scale.set(ga,wa,1),At.add(Mn)}};Fo(Vt.pos,va,!1,0),Fo(Ct.pos,fa,!0,100),ce.add(At),te.push(At),Ue=Ds(ce,pe,Ct.pos,{lite:!0}),Ze.push(Se,Kn,qn,Xn,Zn,jt.core,jt.veil,jt.corona,jt.glow,Yt.core,Yt.veil,Yt.corona,Yt.glow,Gt.core,Gt.veil,Gt.corona,Gt.glow),De.set(0,e*.02,e*.95),Fe.set(-pe*.42,0,0),ee=e*5.4,Te=pe*4.5,Ne=.31,ue=.08,Me.copy(De),Ye=ee,be=Ne,we=.18,K=1,Mt(),zt(),v.value=""}catch(w){console.warn("[engine]",w),v.value="行星发动机模型载入失败"}yt(),W=new ResizeObserver(yt),W.observe(d),n.value&&sn(),window.requestAnimationFrame(()=>tn())}}return Tt(o,d=>{d&&!a&&$n()},{flush:"post",immediate:!0}),Tt(n,d=>{if(!d){St();return}a&&(yt(),sn())}),zn(Wn),{hint:v}}const ul={key:0,class:"boot"},cl={class:"boot-log"},dl={class:"boot-copy"},vl={class:"top"},fl={class:"top-right"},ml={class:"clock-block"},pl={class:"top-actions"},hl=["title"],gl={class:"status-strip"},wl={class:"chip dim"},bl={class:"deck"},yl={class:"left-col"},Ml={class:"sys-block fui-box"},xl={class:"tele"},Sl={class:"mods"},kl={class:"hw-read"},Cl={class:"msn-block fui-box"},Al={class:"msn-obj"},El={class:"msn-checks"},Ol={class:"msn-talk"},Pl={class:"msn-foot"},Fl={class:"cmd-card fui-box"},Tl={class:"cmd-grid"},Ll=["disabled"],zl=["disabled"],Nl=["disabled"],Il=["disabled"],Ul=["disabled"],Bl=["disabled"],_l=["disabled"],Dl=["disabled"],Rl=["disabled"],Wl=["disabled"],$l=["disabled"],Vl={class:"stage"},jl={class:"stage-tools"},Yl=["disabled","title"],Gl={class:"earth-view"},Hl={class:"globe-col"},Kl={class:"globe-wrap"},ql={key:0,class:"engine-hint"},Xl={class:"propel-strip"},Zl={class:"engine-board fui-box"},Jl={class:"optic-frame"},Ql={class:"oss-feed"},ei=["src"],ti={key:0,class:"oss-empty"},ni={class:"optic-hud","aria-hidden":"true"},oi={class:"ret-lock"},ai={key:0},si={class:"hud-tl"},li={class:"hud-tr"},ii={class:"hud-left"},ri={class:"hud-meter"},ui={class:"hud-spec"},ci={class:"hud-right"},di={class:"hud-tag"},vi={class:"hud-compass"},fi={class:"ptz-cross"},mi=["disabled"],pi=["disabled"],hi=["disabled"],gi=["disabled"],wi=["disabled"],bi={key:0,class:"ptz-zoom"},yi=["disabled"],Mi=["disabled"],xi={class:"ptz-status"},Si={class:"optic-strip"},ki={class:"speech"},Ci={class:"speech-k"},Ai=["title"],Ei={class:"panel log-panel fui-box"},Oi={class:"panel-h"},Pi={key:0,class:"log-empty"},Fi={class:"t"},Ti={class:"who"},Li={class:"msg"},zi={class:"ticker"},Ni={class:"ticker-track"},Ii={"aria-hidden":"true"},Ui=xa({__name:"Terminal",setup(o){const n=Sa(),l=Fa(),{hwBusy:v,setHw:a,toggleHw:c,refreshHw:h}=ka({onError:r=>n.pushChat("system",r)}),b=Pa,u=L(null),M=L(null),y=L(null),S=L(null),k=L(null),g=bs(u),P=L("--:--:--"),T=L(""),R=L(!0),{isFullscreen:se}=Ca(),X=L(0),fe=L(0),le=L(!1),H=L("idle"),_=L(!1),ie=I(()=>({transform:`translate3d(${X.value}px, ${fe.value}px, 0)`})),he=I(()=>({on:le.value,act:H.value==="act",dead:H.value==="dead",down:_.value})),J=L(!1),Z=L("engines"),Pe=L(!0),ge=L(localStorage.getItem("moss-face-detect")!=="0"),we=L(localStorage.getItem("moss-ptz-keys")!=="0"),Le=I(()=>n.hasGimbal),K=I(()=>Le.value||g.ptz.value),Me=I(()=>K.value?"READY":"N/A"),Ye=I(()=>g.connected.value&&!g.showPlaceholder.value),be=I(()=>g.connected.value?g.frameError.value||"正在同步画面…":n.hasOnboardCamera?"暂不支持":"天眼系统未接入"),De=I(()=>!g.connected.value&&!n.hasOnboardCamera),Fe=I(()=>we.value&&K.value&&!R.value&&J.value&&Z.value==="optics"),ee=La(K,we,Fe);Tt(we,r=>{localStorage.setItem("moss-ptz-keys",r?"1":"0")}),Tt(ge,r=>{localStorage.setItem("moss-face-detect",r?"1":"0")});const Te=L(0),Ne=["INIT 550W CORE","HANDSHAKE LAN LINK","VOICE PROTOCOL STANDBY","MOSS ONLINE"],ue=L({count:0,learned:0}),C=I(()=>ge.value&&!R.value&&J.value&&Z.value==="optics"&&g.connected.value&&!g.showPlaceholder.value),{focusing:A,hasFace:f,lockLabel:E,boxStyle:F,reticleStyle:U}=Ts(u,M,y,C),xe=I(()=>Ne.slice(0,Te.value)),W=I(()=>String(n.mossChatState||"idle")),me=I(()=>`is-${W.value}`),Ge=I(()=>["listening","speaking","connecting"].includes(W.value)),Re=I(()=>W.value==="listening"||W.value==="speaking"?"ok":W.value==="connecting"?"warn":""),Bn=I(()=>n.mossOnline?Re.value==="ok"?"on":Re.value==="warn"?"warn":"idle":"off"),wt=I(()=>{switch(W.value){case"listening":return"LISTEN";case"speaking":return"TALK";case"connecting":return"SYNC";default:return"STBY"}}),Ze=I(()=>n.mossOnline?W.value==="listening"?"正在采集语音":W.value==="speaking"?"正在合成应答":W.value==="connecting"?"建立音频通道":"按空格唤醒":"设备离线"),te=I(()=>b.value?"接通中":n.mossOnline?Ge.value?"结束语音链路":"建立语音链路":"无法建立语音链路"),Ie=L(!1),Je=L(""),it=I(()=>Ie.value?"重播中":Je.value?"重播失败":"重播提醒"),rt=I(()=>n.mossOnline?Ie.value?"SEND":Je.value?"FAIL":"YUNXIANGJI":"OFFLINE"),ut=I(()=>W.value==="listening"?"MOSS · 聆听中":W.value==="speaking"?"MOSS":W.value==="connecting"?"MOSS · 接通中":"系统待命"),ze=I(()=>{const r=n.chatLines.filter(e=>e.role!=="system");return r.length?r[r.length-1]:null}),Se=I(()=>{const r=[{id:"link",en:"LINK",ok:n.mossOnline,text:n.mossOnline?"READY":"OFF"},{id:"ground",en:"GROUND",ok:n.mossOnline,text:n.mossOnline?"ONLINE":"LOST"},{id:"audio",en:"AUDIO",ok:Re.value==="ok",text:wt.value},{id:"optics",en:"SKY-EYE",ok:g.connected.value,text:g.connected.value?"LIVE":"OFF"},{id:"ptz",en:"PTZ",ok:K.value,text:Me.value},{id:"ir",en:"IR",ok:ue.value.count>0,text:ue.value.count?`${ue.value.count}/${ue.value.learned}`:"—"}].map(V=>({...V,cls:V.ok?"ok":V.id==="audio"&&Re.value==="warn"?"warn":"off"}));let e="语音待命 · 按空格唤醒",i="AWAIT WAKE";n.mossOnline?W.value==="listening"?(e="采集语音指令",i="VOICE CAPTURE"):W.value==="speaking"?(e="合成应答",i="TTS REPLY"):W.value==="connecting"||b.value?(e="建立语音链路",i="OPEN AUDIO"):n.lastError&&(e=n.lastError,i="FAULT"):(e="等待地面终端握手",i="WAIT HEALTH");const $=ze.value;return{checks:r,objective:e,objectiveEn:i,lastWho:$?$.role==="assistant"?"MOSS":"YOU":"COM",lastText:($==null?void 0:$.text)||"无通信记录"}}),Ue=I(()=>{var r,e,i;return((r=ze.value)==null?void 0:r.role)==="assistant"||((e=ze.value)==null?void 0:e.role)==="user"&&W.value==="listening"||((i=ze.value)==null?void 0:i.role)==="user"?ze.value.text:n.mossOnline?"按空格唤醒。MOSS 将使用设备麦克风聆听,并在此同步对话。":"地面终端未与 MOSS 建立握手。"}),We=I(()=>{P.value;const r=n.mossOnline?.991:.812,e=Number(P.value.slice(-2))||0;return[{name:"亚洲",en:"ASIA",total:3120},{name:"欧洲",en:"EUROPE",total:1480},{name:"北美",en:"N.AMERICA",total:1640},{name:"南美",en:"S.AMERICA",total:980},{name:"非洲",en:"AFRICA",total:1260},{name:"大洋洲",en:"OCEANIA",total:720},{name:"南极",en:"ANTARCTICA",total:800}].map(($,V)=>{const D=Math.min($.total,Math.max(0,Math.round($.total*r-V%3+e%2)));return{...$,online:D,pct:Math.round(D/$.total*1e3)/10}})}),Ce=I(()=>We.value.reduce((r,e)=>r+e.online,0)),He=I(()=>(n.mossOnline?98.2+(Number(P.value.slice(-1))||0)*.08:71.4).toFixed(1)),bt=I(()=>(n.mossOnline?16.7:9.2).toFixed(1)),ae=I(()=>!R.value&&Z.value==="engines"),ce=I(()=>Number(He.value)/100),{hint:Qe}=rl(S,ae,ce),de=I(()=>{const r=Number(P.value.slice(-2))||0,e=g.connected.value&&!g.showPlaceholder.value,i=P.value.replace(/:/g,"");return{frame:String((Number(i)*25+r)%1e6).padStart(6,"0"),az:(18.4+r*.037).toFixed(2),el:(-6.2+Math.sin(r/7)*.45).toFixed(2),rng:(42.6+r%11*.08).toFixed(1),sig:e?74+r%9:12+r%4,iris:(2.8+r%5*.1).toFixed(1),gain:(6.4+r%6*.2).toFixed(1),fov:62,mag:A.value?"2.4":(1+r%3*.1).toFixed(1),temp:(31.2+r%4*.1).toFixed(1),hdg:String((86+r)%360).padStart(3,"0"),lock:E.value,mode:ge.value?f.value?"FACE LOCK":e?"PASSIVE SCAN":"STANDBY":"FACE OFF"}}),en=I(()=>`${["UEG 领航员空间站",n.mossOnline?"MOSS ONLINE":"MOSS OFFLINE",`VOICE ${wt.value}`,g.connected.value?`SKY-EYE ${g.hostname.value||"LIVE"}`:"SKY-EYE OFF",`ENGINES ${Ce.value}/10000`,`THRUST ${He.value}%`,"HEADING α CENTAURI","PRIMARY DIRECTIVE · 延续人类文明",hs,gs,"SPACE TO WAKE"].join(" · ")} · `);let yt=0,ct=0;function tn(){const r=new Date;T.value=`${r.getFullYear()}-${String(r.getMonth()+1).padStart(2,"0")}-${String(r.getDate()).padStart(2,"0")}`,P.value=[r.getHours(),r.getMinutes(),r.getSeconds()].map(e=>String(e).padStart(2,"0")).join(":")}function zt(r){const e=r instanceof Element?r.closest('button, a, [role="button"], input, select, textarea, summary, .engine-stage, canvas'):null;return e?e instanceof HTMLButtonElement&&e.disabled||e instanceof HTMLInputElement&&e.disabled||e.getAttribute("aria-disabled")==="true"?"dead":"act":"idle"}function Mt(r){X.value=r.clientX,fe.value=r.clientY,le.value=!0,H.value=zt(r.target)}function nn(){le.value=!1,_.value=!1}function _n(r){r.button===0&&(_.value=!0,H.value=zt(r.target))}function Nt(){_.value=!1}function Dn(){R.value&&(R.value=!1,window.clearInterval(ct))}function on(){l.push(n.mossOnline?"/remotes":"/device")}function an(r){return r==="assistant"?"MOSS":r==="system"?"SYS":"YOU"}function xt(r){const e=new Date(r);return[e.getHours(),e.getMinutes(),e.getSeconds()].map(i=>String(i).padStart(2,"0")).join(":")}async function It(){await Ta()}async function Ut(){var r;if(!(Ie.value||!n.mossOnline)){Ie.value=!0,Je.value="";try{const e=await ro("/api/mcp/yunxiangji/replay",{method:"POST",body:JSON.stringify({})}),i=((r=e.item)==null?void 0:r.title)||"云享记";n.pushChat("system",e.message?`${e.message}:${i}`:`已重播:${i}`)}catch(e){const i=e instanceof Error?e.message:"重播失败";Je.value=i,n.pushChat("system",i)}finally{Ie.value=!1}}}async function St(){if(J.value){J.value=!1,Z.value="engines",g.stopPreview();return}J.value=!0,Z.value="optics",await Fn(),g.openPreview()||await g.loadStatus({preview:!0})}function sn(){Z.value="engines"}async function Rn(){if(!J.value){await St();return}Z.value="optics"}async function Wn(){await h()}async function $n(){if(n.mossOnline)try{const e=(await ro("/api/ir/devices")).devices||[];ue.value={count:e.length,learned:e.reduce((i,$)=>i+($.commands||[]).filter(V=>V.learned).length,0)}}catch{ue.value={count:0,learned:0}}}function d(r){const e=r.target;e&&["INPUT","TEXTAREA"].includes(e.tagName)||r.code!=="Space"&&r.key!==" "||(r.preventDefault(),!(r.repeat||R.value)&&It())}function w(){const r=k.value;r&&(r.scrollTop=r.scrollHeight)}Tt(()=>{const r=n.chatLines,e=r[r.length-1];return e?`${r.length}:${e.id}:${e.text}`:"0"},async()=>{await Fn(),w(),requestAnimationFrame(w)},{flush:"post"});async function O(){await g.loadStatus({preview:!1})}return Aa(async()=>{document.body.classList.add("moss-hud-lock"),tn(),yt=window.setInterval(tn,1e3),n.listenEvents(),await O(),$n(),Wn(),await Fn(),w(),ct=window.setInterval(()=>{if(Te.value<Ne.length){Te.value+=1;return}window.clearInterval(ct),window.setTimeout(()=>{R.value=!1},420)},220),window.addEventListener("keydown",d)}),zn(()=>{document.body.classList.remove("moss-hud-lock"),window.clearInterval(yt),window.clearInterval(ct),window.removeEventListener("keydown",d),g.stopPreview()}),(r,e)=>(G(),Y("div",{class:z(["moss-console",me.value]),onClick:Dn,onPointermove:Mt,onPointerleave:nn,onPointerdown:_n,onPointerup:Nt,onPointercancel:Nt},[e[89]||(e[89]=t("div",{class:"crt","aria-hidden":"true"},null,-1)),Lo(Oa,{name:"boot"},{default:Ea(()=>[R.value?(G(),Y("div",ul,[e[19]||(e[19]=t("div",{class:"boot-org"},"UNITED EARTH GOVERNMENT",-1)),e[20]||(e[20]=t("div",{class:"boot-cn"},"联合政府 · 领航员空间站",-1)),e[21]||(e[21]=t("div",{class:"boot-model"},"550W",-1)),e[22]||(e[22]=t("div",{class:"boot-name"},"MOSS",-1)),t("ul",cl,[(G(!0),Y(qt,null,Xt(xe.value,(i,$)=>(G(),Y("li",{key:$},p(i),1))),128))]),t("div",dl,[Lo(ps,{variant:"hud"})])])):ve("",!0)]),_:1}),t("header",vl,[e[25]||(e[25]=to('<div class="top-left" data-v-b786c45d><span class="org" data-v-b786c45d>UEG</span><div data-v-b786c45d><strong data-v-b786c45d>领航员空间站控制台</strong><small data-v-b786c45d>NAVIGATOR ISS · CN-BJ · CLASSIFIED</small></div></div><div class="top-mid" data-v-b786c45d><span class="mid-k" data-v-b786c45d>CORE</span><b data-v-b786c45d>550W</b><i data-v-b786c45d></i><span class="mid-k" data-v-b786c45d>UNIT</span><b class="mid-moss" data-v-b786c45d>MOSS</b></div>',2)),t("div",fl,[t("div",ml,[t("span",null,p(T.value)+" · UTC+8",1),t("b",null,p(P.value),1)]),t("div",pl,[t("button",{class:z(["hud-btn",{on:s(se)}]),type:"button",title:s(se)?`退出全屏 (${s(zo)})`:`全屏显示 (${s(zo)})`,onClick:e[0]||(e[0]=re((...i)=>s(No)&&s(No)(...i),["stop"]))},[e[23]||(e[23]=t("em",null,"FS",-1)),tt(" "+p(s(se)?"ON":"OFF"),1)],10,hl),t("button",{class:"hud-btn cfg",type:"button",title:"返回配置页",onClick:re(on,["stop"])},[...e[24]||(e[24]=[t("em",null,"CFG",-1),tt(" 返回 ",-1)])])])])]),t("div",gl,[t("span",{class:z(["chip",s(n).mossOnline?"on":"off"])},[e[26]||(e[26]=t("i",null,null,-1)),tt("LINK "+p(s(n).mossOnline?"ONLINE":"LOST"),1)],2),t("span",{class:z(["chip",Bn.value])},[e[27]||(e[27]=t("i",null,null,-1)),tt("VOICE "+p(wt.value),1)],2),t("span",{class:z(["chip",s(g).connected.value?"on":"off"])},[e[28]||(e[28]=t("i",null,null,-1)),tt("SKY-EYE "+p(s(g).connected.value?"LIVE":"OFF"),1)],2),t("span",{class:z(["chip",K.value?"on":"off"])},[e[29]||(e[29]=t("i",null,null,-1)),tt("PTZ "+p(Me.value),1)],2),t("span",{class:"chip",role:"button",tabindex:"0",title:"更换设备",onClick:e[1]||(e[1]=i=>s(l).push("/devices"))}," UNIT "+p(s(n).deviceName||"UNNAMED"),1),t("span",wl,"ID "+p(s(n).activeDeviceId||"NO-ID"),1),e[30]||(e[30]=t("span",{class:"grow"},null,-1)),e[31]||(e[31]=t("span",{class:"chip dim"},"PRI · 延续人类文明",-1))]),t("div",bl,[t("aside",yl,[t("div",Ml,[e[50]||(e[50]=t("div",{class:"panel-h"},[t("span",null,"系统模块"),t("em",null,"SYS-01")],-1)),t("div",xl,[t("div",null,[e[32]||(e[32]=t("span",null,"LINK",-1)),t("b",{class:z(s(n).mossOnline?"ok":"bad")},p(s(n).mossOnline?"ONLINE":"LOST"),3)]),t("div",null,[e[33]||(e[33]=t("span",null,"VOICE",-1)),t("b",null,p(wt.value),1)]),t("div",null,[e[34]||(e[34]=t("span",null,"SKY-EYE",-1)),t("b",{class:z(s(g).connected.value?"ok":"")},p(s(g).connected.value?"LIVE":"OFF"),3)]),t("div",null,[e[35]||(e[35]=t("span",null,"PTZ",-1)),t("b",{class:z(K.value?"ok":"")},p(Me.value),3)]),t("div",null,[e[36]||(e[36]=t("span",null,"IR",-1)),t("b",null,p(ue.value.count?`${ue.value.count}/${ue.value.learned}`:"—"),1)])]),t("ul",Sl,[t("li",{class:z(s(n).mossOnline?"ok":"bad")},[e[38]||(e[38]=t("i",null,null,-1)),t("div",null,[e[37]||(e[37]=t("b",null,"链路 LINK",-1)),t("small",null,p(s(n).mossOnline?"HEALTH OK":"OFFLINE"),1)])],2),t("li",{class:z(s(n).mossOnline?"ok":"bad")},[e[40]||(e[40]=t("i",null,null,-1)),t("div",null,[e[39]||(e[39]=t("b",null,"地面终端 GROUND",-1)),t("small",null,p(s(n).mossOnline?"MOSS 已握手":"等待 bind.ack"),1)])],2),t("li",{class:z(Re.value==="ok"?"ok":Re.value==="warn"?"warn":"idle")},[e[42]||(e[42]=t("i",null,null,-1)),t("div",null,[e[41]||(e[41]=t("b",null,"语音链路 AUDIO",-1)),t("small",null,p(Ze.value),1)])],2),t("li",{class:z(s(g).connected.value?"ok":"idle")},[e[44]||(e[44]=t("i",null,null,-1)),t("div",null,[e[43]||(e[43]=t("b",null,"天眼系统 SKY",-1)),t("small",null,p(s(g).sourceLabel.value||s(g).hostname.value||s(g).infoText.value||"未配置摄像头"),1)])],2)]),t("div",kl,[t("div",{class:z(["bar",{on:s(n).hw.eye}])},[...e[45]||(e[45]=[t("span",null,"EYE",-1),t("i",null,null,-1)])],2),t("div",{class:z(["bar",{on:s(n).hw.bar}])},[...e[46]||(e[46]=[t("span",null,"BAR",-1),t("i",null,null,-1)])],2),s(n).hasPanel?(G(),Y("div",{key:0,class:z(["bar",{on:s(n).hw.panel}])},[...e[47]||(e[47]=[t("span",null,"PNL",-1),t("i",null,null,-1)])],2)):ve("",!0),s(n).hasBottom?(G(),Y("div",{key:1,class:z(["bar",{on:s(n).hw.bottom}])},[...e[48]||(e[48]=[t("span",null,"BTM",-1),t("i",null,null,-1)])],2)):ve("",!0),s(n).hasMotor?(G(),Y("div",{key:2,class:z(["bar",{on:s(n).hw.motor}])},[...e[49]||(e[49]=[t("span",null,"MTR",-1),t("i",null,null,-1)])],2)):ve("",!0)])]),t("div",Cl,[e[54]||(e[54]=t("div",{class:"panel-h"},[t("span",null,"任务简报"),t("em",null,"MSN-02")],-1)),e[55]||(e[55]=t("div",{class:"msn-pri"},[t("small",null,"PRI-01 · STANDING ORDER"),t("b",null,"延续人类文明")],-1)),t("div",Al,[e[51]||(e[51]=t("span",null,"当前目标",-1)),t("strong",null,p(Se.value.objective),1),t("em",null,p(Se.value.objectiveEn),1)]),t("div",El,[(G(!0),Y(qt,null,Xt(Se.value.checks,i=>(G(),Y("div",{key:i.id,class:z(i.cls)},[e[52]||(e[52]=t("i",null,null,-1)),t("span",null,p(i.en),1),t("b",null,p(i.text),1)],2))),128))]),t("div",Ol,[t("span",null,p(Se.value.lastWho),1),t("p",null,p(Se.value.lastText),1)]),t("div",Pl,[t("span",null,p(s(n).deviceName||"UNNAMED"),1),e[53]||(e[53]=t("span",null,"550W CORE",-1))])]),t("div",Fl,[e[56]||(e[56]=t("div",{class:"cmd-h"},[t("span",null,"指令面板"),t("em",null,"CTL-03")],-1)),t("div",Tl,[t("button",{type:"button",class:"span2 hot",disabled:s(v)||!s(n).mossOnline,onClick:e[2]||(e[2]=re(i=>s(a)("all","on"),["stop"]))},"一键开启",8,Ll),t("button",{type:"button",class:"span2",disabled:s(v)||!s(n).mossOnline,onClick:e[3]||(e[3]=re(i=>s(a)("all","off"),["stop"]))},"一键关闭",8,zl),t("button",{type:"button",class:z({on:s(n).hw.eye}),disabled:s(v)||!s(n).mossOnline,onClick:e[4]||(e[4]=re(i=>s(c)("eye"),["stop"]))},"眼灯",10,Nl),t("button",{type:"button",class:z({on:s(n).hw.bar}),disabled:s(v)||!s(n).mossOnline,onClick:e[5]||(e[5]=re(i=>s(c)("bar"),["stop"]))},"流水灯",10,Il),s(n).hasPanel?(G(),Y("button",{key:0,type:"button",class:z({on:s(n).hw.panel}),disabled:s(v)||!s(n).mossOnline,onClick:e[6]||(e[6]=re(i=>s(c)("panel"),["stop"]))},"面板灯",10,Ul)):ve("",!0),s(n).hasBottom?(G(),Y("button",{key:1,type:"button",class:z({on:s(n).hw.bottom}),disabled:s(v)||!s(n).mossOnline,onClick:e[7]||(e[7]=re(i=>s(c)("bottom"),["stop"]))},"底灯",10,Bl)):ve("",!0),s(n).hasMotor?(G(),Y("button",{key:2,type:"button",class:z({on:s(n).hw.motor_dir==="forward"}),disabled:s(v)||!s(n).mossOnline,onClick:e[8]||(e[8]=re(i=>s(a)("motor","forward"),["stop"]))},"电机正转",10,_l)):ve("",!0),s(n).hasMotor?(G(),Y("button",{key:3,type:"button",class:z({on:s(n).hw.motor_dir==="backward"}),disabled:s(v)||!s(n).mossOnline,onClick:e[9]||(e[9]=re(i=>s(a)("motor","backward"),["stop"]))},"电机反转",10,Dl)):ve("",!0),s(n).hasMotor?(G(),Y("button",{key:4,type:"button",class:"span2",disabled:s(v)||!s(n).mossOnline,onClick:e[10]||(e[10]=re(i=>s(a)("motor","stop"),["stop"]))},"电机停止",8,Rl)):ve("",!0),t("button",{type:"button",class:z({on:J.value}),onClick:re(St,["stop"])},p(J.value?"关闭天眼系统":"打开天眼系统"),3),t("button",{type:"button",class:z(["voice",{on:Ge.value}]),disabled:s(b)||!s(n).mossOnline,onClick:re(It,["stop"])},[tt(p(te.value)+" ",1),t("small",null,p(s(n).mossOnline?"SPACE":"OFFLINE"),1)],10,Wl),t("button",{type:"button",class:z(["voice replay",{on:Ie.value}]),disabled:Ie.value||!s(n).mossOnline,title:"立刻重播最近一条云享记,方便听 TTS",onClick:re(Ut,["stop"])},[tt(p(it.value)+" ",1),t("small",null,p(rt.value),1)],10,$l)])])]),t("section",Vl,[t("div",jl,[t("button",{type:"button",class:z({on:Z.value==="engines"}),onClick:re(sn,["stop"])},"行星发动机",2),t("button",{type:"button",class:z({on:Z.value==="optics"}),onClick:re(Rn,["stop"])},"天眼系统",2),Z.value==="optics"?(G(),Y("button",{key:0,type:"button",class:z({on:Pe.value}),onClick:e[11]||(e[11]=re(i=>Pe.value=!Pe.value,["stop"]))},p(Pe.value?"滤镜 ON":"滤镜 OFF"),3)):ve("",!0),Z.value==="optics"&&Ye.value?(G(),Y("button",{key:1,type:"button",class:z({on:ge.value}),title:"打开或关闭人脸检测(叠在预览画面上)",onClick:e[12]||(e[12]=re(i=>ge.value=!ge.value,["stop"]))}," 人脸 "+p(ge.value?"ON":"OFF"),3)):ve("",!0),Z.value==="optics"?(G(),Y("button",{key:2,type:"button",class:z({on:we.value&&K.value}),disabled:!K.value,title:K.value?"方向键 / WASD 转云台,+/- 变焦。空格仍是唤醒。":"本机型没有云台,或 Onvif 未开放 PTZ",onClick:e[13]||(e[13]=re(i=>we.value=!we.value,["stop"]))}," 键盘 "+p(we.value?"ON":"OFF"),11,Yl)):ve("",!0)]),Sn(t("div",Gl,[t("div",Hl,[t("div",Kl,[t("div",{ref_key:"engineHostEl",ref:S,class:"engine-stage"},null,512),s(Qe)?(G(),Y("p",ql,p(s(Qe)),1)):ve("",!0),e[57]||(e[57]=t("div",{class:"heading"},[t("small",null,"HEADING"),t("b",null,"α CENTAURI")],-1)),e[58]||(e[58]=t("div",{class:"scene-tag tag-a"},[t("small",null,"NEAR UNIT"),t("b",null,"PE-3307"),t("em",null,"ASIA ARRAY · 4.2 km")],-1)),e[59]||(e[59]=t("div",{class:"scene-tag tag-b"},[t("small",null,"FIELD"),t("b",null,"移山阵列"),t("em",null,"DENSITY 38 / 100 km²")],-1))]),t("div",Xl,[t("div",null,[e[60]||(e[60]=t("span",null,"THRUST",-1)),t("b",null,p(He.value)+"%",1)]),t("div",null,[e[61]||(e[61]=t("span",null,"ΔV",-1)),t("b",null,p(bt.value)+" km/s",1)]),t("div",null,[e[62]||(e[62]=t("span",null,"ONLINE",-1)),t("b",null,p(Ce.value)+" / 10000",1)])])]),t("div",Zl,[e[63]||(e[63]=t("div",{class:"eb-h"},"全球行星发动机运行状态",-1)),e[64]||(e[64]=t("div",{class:"eb-sub"},"PLANETARY ENGINE ARRAY · 移山计划",-1)),(G(!0),Y(qt,null,Xt(We.value,i=>(G(),Y("div",{key:i.en,class:"eb-row"},[t("span",null,p(i.name),1),t("em",null,p(i.online)+"/"+p(i.total),1),t("i",null,[t("b",{style:Zt({width:i.pct+"%"})},null,4)])]))),128)),e[65]||(e[65]=t("p",{class:"eb-note"},"地球推进中 · 等离子体尾迹稳定",-1))])],512),[[kn,Z.value==="engines"]]),J.value?Sn((G(),Y("div",{key:0,class:z(["optic-view",{filtered:Pe.value,live:s(g).connected.value&&!s(g).showPlaceholder.value,focusing:s(A),tracked:s(f)}])},[t("div",{ref_key:"opticStageEl",ref:y,class:"optic-stage"},[t("div",Jl,[t("div",Ql,[Sn(t("video",{ref_key:"videoEl",ref:u,class:"oss-video",muted:"",autoplay:"",playsinline:""},null,512),[[kn,s(g).playMode.value==="mpegts"]]),Sn(t("img",{ref_key:"opticImgEl",ref:M,class:"oss-video",src:s(g).streamUrl.value,alt:"天眼系统"},null,8,ei),[[kn,s(g).connected.value&&s(g).playMode.value==="mjpeg"&&s(g).streamUrl.value]])]),!s(g).connected.value||s(g).showPlaceholder.value?(G(),Y("div",ti,[t("p",null,p(be.value),1),De.value?(G(),Y("button",{key:0,type:"button",onClick:e[14]||(e[14]=i=>s(l).push("/camera"))},"去配置摄像头")):ve("",!0)])):ve("",!0),e[66]||(e[66]=t("div",{class:"optic-fx","aria-hidden":"true"},null,-1))]),t("div",ni,[e[80]||(e[80]=to('<i class="hud-corner tl" data-v-b786c45d></i><i class="hud-corner tr" data-v-b786c45d></i><i class="hud-corner bl" data-v-b786c45d></i><i class="hud-corner br" data-v-b786c45d></i><div class="hud-grid" data-v-b786c45d></div><div class="hud-scan" data-v-b786c45d></div><div class="hud-floor" data-v-b786c45d></div>',7)),ge.value?(G(),Y("div",{key:0,class:z(["hud-reticle",{locked:s(f)}]),style:Zt(s(U))},[e[67]||(e[67]=t("span",{class:"ret-ring"},null,-1)),e[68]||(e[68]=t("span",{class:"ret-spin"},null,-1)),e[69]||(e[69]=t("span",{class:"ret-h"},null,-1)),e[70]||(e[70]=t("span",{class:"ret-v"},null,-1)),t("b",oi,p(s(E)),1)],6)):ve("",!0),ge.value?(G(),Y("div",{key:1,class:z(["hud-box",{locked:s(f),focusing:s(A)}]),style:Zt(s(F))},[e[71]||(e[71]=t("i",null,null,-1)),e[72]||(e[72]=t("i",null,null,-1)),e[73]||(e[73]=t("i",null,null,-1)),e[74]||(e[74]=t("i",null,null,-1)),s(f)?(G(),Y("em",ai,"FACE 01")):ve("",!0)],6)):ve("",!0),t("div",si,[t("span",{class:z(["hud-rec",{on:s(g).connected.value}])},p(s(g).connected.value?"REC":"STBY"),3),e[75]||(e[75]=t("span",null,"SKY-01",-1)),t("span",null,p(s(g).sourceLabel.value||s(g).hostname.value||"NO FEED"),1),t("span",null,p(s(g).encoding.value||s(g).playMode.value||"SKY-EYE")+" · CH-A",1),t("span",null,p(ge.value?"BLAZEFACE · LOCAL":"BLAZEFACE · OFF"),1)]),t("div",li,[t("span",null,p(T.value)+" · UTC+8",1),t("b",null,p(P.value),1),t("span",null,"FRAME "+p(de.value.frame),1),e[76]||(e[76]=t("span",null,"LAT 39.9042 N",-1)),e[77]||(e[77]=t("span",null,"LON 116.4074 E",-1))]),t("div",ii,[t("span",null,"IRIS F/"+p(de.value.iris),1),t("span",null,"GAIN "+p(de.value.gain)+" dB",1),t("span",null,"FOV "+p(de.value.fov)+"°",1),t("div",ri,[e[78]||(e[78]=t("em",null,"SIG",-1)),t("i",null,[t("b",{style:Zt({height:de.value.sig+"%"})},null,4)]),t("small",null,p(de.value.sig)+"%",1)]),t("div",ui,[(G(),Y(qt,null,Xt(10,i=>t("i",{key:i})),64))])]),t("div",ci,[t("span",null,"AZ "+p(de.value.az)+"°",1),t("span",null,"EL "+p(de.value.el)+"°",1),t("span",null,"RNG "+p(de.value.rng)+" m",1),t("span",null,"MAG "+p(de.value.mag)+"×",1),t("span",null,"TEMP "+p(de.value.temp)+"°C",1),t("span",di,p(de.value.mode),1)]),t("div",vi,[e[79]||(e[79]=t("div",{class:"hud-ticks"},null,-1)),t("b",null,"HDG "+p(de.value.hdg)+"°",1)])]),t("div",{class:"ptz-dock",onClick:e[16]||(e[16]=re(()=>{},["stop"])),onPointerdown:e[17]||(e[17]=re(()=>{},["stop"]))},[t("div",fi,[t("button",Et({type:"button",class:{on:s(ee).moving==="up"},disabled:!K.value},Ot(s(ee).pointerBind("up"),!0)),"▲",16,mi),t("button",Et({type:"button",class:{on:s(ee).moving==="left"},disabled:!K.value},Ot(s(ee).pointerBind("left"),!0)),"◀",16,pi),t("button",{type:"button",class:"stop",disabled:!K.value,onClick:e[15]||(e[15]=i=>s(ee).send("stop"))},"■",8,hi),t("button",Et({type:"button",class:{on:s(ee).moving==="right"},disabled:!K.value},Ot(s(ee).pointerBind("right"),!0)),"▶",16,gi),t("button",Et({type:"button",class:{on:s(ee).moving==="down"},disabled:!K.value},Ot(s(ee).pointerBind("down"),!0)),"▼",16,wi)]),Le.value?ve("",!0):(G(),Y("div",bi,[t("button",Et({type:"button",class:{on:s(ee).moving==="zoom_in"},disabled:!K.value},Ot(s(ee).pointerBind("zoom_in"),!0)),"+",16,yi),t("button",Et({type:"button",class:{on:s(ee).moving==="zoom_out"},disabled:!K.value},Ot(s(ee).pointerBind("zoom_out"),!0)),"-",16,Mi)])),t("div",xi,[t("span",null,p(K.value?"PTZ READY":"PTZ OFF"),1),t("b",{class:z({on:Fe.value})},p(s(ee).hint),3)])],32)],512),t("div",Si,[t("div",null,[e[81]||(e[81]=t("span",null,"LOCK",-1)),t("b",null,p(de.value.lock),1)]),t("div",null,[e[82]||(e[82]=t("span",null,"SIGNAL",-1)),t("b",null,p(de.value.sig)+"%",1)]),t("div",null,[e[83]||(e[83]=t("span",null,"RANGE",-1)),t("b",null,p(de.value.rng)+" m",1)]),t("div",null,[e[84]||(e[84]=t("span",null,"ARRAY",-1)),t("b",null,p(s(g).sourceLabel.value||s(g).hostname.value||"OFFLINE"),1)]),t("div",null,[e[85]||(e[85]=t("span",null,"PTZ",-1)),t("b",null,p(Me.value),1)])])],2)),[[kn,Z.value==="optics"]]):ve("",!0),t("div",ki,[t("div",Ci,p(ut.value),1),t("p",{class:"speech-body",title:Ue.value},p(Ue.value),9,Ai)])]),t("aside",Ei,[t("div",Oi,[e[86]||(e[86]=t("span",null,"通信记录",-1)),e[87]||(e[87]=t("em",null,"COM-02",-1)),t("button",{class:"tiny",type:"button",onClick:e[18]||(e[18]=re(i=>s(n).clearChat(),["stop"]))},"CLR")]),t("div",{ref_key:"logEl",ref:k,class:"log"},[s(n).chatLines.length?ve("",!0):(G(),Y("p",Pi,"无通信。按空格建立语音链路。")),(G(!0),Y(qt,null,Xt(s(n).chatLines,i=>(G(),Y("div",{key:i.id,class:z(["log-row",i.role])},[t("span",Fi,p(xt(i.at)),1),t("span",Ti,p(an(i.role)),1),t("span",Li,p(i.text),1)],2))),128))],512)])]),t("footer",zi,[t("div",Ni,[t("span",null,p(en.value),1),t("span",Ii,p(en.value),1)])]),t("div",{class:z(["moss-aim",he.value]),style:Zt(ie.value),"aria-hidden":"true"},[...e[88]||(e[88]=[to('<span class="aim-dia" data-v-b786c45d></span><span class="aim-box" data-v-b786c45d><i class="tl" data-v-b786c45d></i><i class="tr" data-v-b786c45d></i><i class="bl" data-v-b786c45d></i><i class="br" data-v-b786c45d></i></span><span class="aim-plus" data-v-b786c45d></span><span class="aim-dot" data-v-b786c45d></span>',4)])],6)],34))}}),Vi=ws(Ui,[["__scopeId","data-v-b786c45d"]]);export{Vi as default};
|