yo-moss-ai 0.0.25 → 0.0.26
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/Camera-CEWHXLRY.js +1 -0
- package/dist/assets/FindMoss-8z3VYlpj.css +1 -0
- package/dist/assets/FindMoss-BsgTW7sA.js +1 -0
- package/dist/assets/Flash-BYqIQkJJ.css +1 -0
- package/dist/assets/Flash-C9yXzJqP.js +3 -0
- package/dist/assets/Gamepad-BLsH_xPM.js +1 -0
- package/dist/assets/Gamepad-C_tQwGIW.css +1 -0
- package/dist/assets/Hardware-BeuMlPF9.css +1 -0
- package/dist/assets/Hardware-CLi6HgdV.js +1 -0
- package/dist/assets/Hotkeys-7qBE2_p0.css +1 -0
- package/dist/assets/Hotkeys-C874jYEW.js +1 -0
- package/dist/assets/McpHub-CC17BjHc.css +1 -0
- package/dist/assets/McpHub-CbzysJHs.js +30 -0
- package/dist/assets/MiHome-CStQN-KE.js +1 -0
- package/dist/assets/MiHome-CrfRQedH.css +1 -0
- package/dist/assets/PhLightbulb.vue--mAiYvLw.js +1 -0
- package/dist/assets/PhLightning.vue-CGapFt6a.js +1 -0
- package/dist/assets/PhPlus.vue-C5oKtsK_.js +1 -0
- package/dist/assets/PhSpeakerHigh.vue-Ap9TeeHp.js +1 -0
- package/dist/assets/Remotes-DojSlnSG.css +1 -0
- package/dist/assets/Remotes-vmgwZzXp.js +1 -0
- package/dist/assets/Terminal-BAQJIC6d.js +568 -0
- package/dist/assets/Terminal-CaalakCh.css +1 -0
- package/dist/assets/Yunxiangji-CdkPpeaL.js +1 -0
- package/dist/assets/Yunxiangji-VBaFwdh4.css +1 -0
- package/dist/assets/{engine-3d-DoxdUZhy.js → engine-3d-D4oEyAF6.js} +21 -21
- package/dist/assets/esp-flasher-Dm2UeoOa.js +27 -0
- package/dist/assets/gamepadRuntime-6Jv7MQBO.js +1 -0
- package/dist/assets/{index-CzQKR67c.css → index-C8QVgBXn.css} +1 -1
- package/dist/assets/index-CMys3a7t.js +93 -0
- package/dist/assets/mpegts-D4BrshwP.js +3 -0
- package/dist/assets/ptzCommand-DnF6Q4IY.js +1 -0
- package/dist/assets/useGamepadMonitor-C7ccme3i.js +1 -0
- package/dist/assets/useMossWake-BJE6BeTI.js +1 -0
- package/dist/assets/usePtzControl-beaomAgt.js +1 -0
- package/dist/index.html +18 -5
- package/dist-server/board-presets.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/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/tab-focus.mjs +1 -1
- package/dist-server/voice-wake.mjs +1 -1
- package/package.json +1 -1
- package/dist/assets/esp-flasher-CLKzE7JE.js +0 -2
- package/dist/assets/index-C1bPuFAs.js +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as $e,u as Me,e as Pe,o as xe,f as c,g as s,h as d,i as m,F as Oe,s as je,v as V,t as C,K as Ae,x as Ue,y as Fe,A as K,B as q,l as U,r as o,c as F,a as G,L as T,n as Ne,D as r,q as J,p as Re,J as N}from"./index-CMys3a7t.js";import{m as Q}from"./mpegts-D4BrshwP.js";import{u as We}from"./usePtzControl-beaomAgt.js";import"./esp-flasher-Dm2UeoOa.js";import"./ptzCommand-DnF6Q4IY.js";const Ie={class:"camera-layout"},Ke={class:"panel camera-side"},qe={class:"panel-bd camera-side-bd"},Ge={class:"camera-side-main"},Je={key:0,class:"hint"},Qe={key:1,class:"hint"},Xe={class:"actions"},Ye={key:2,class:"device-list"},Ze=["onClick"],He={class:"hint",style:{margin:"4px 0 0"}},et={key:0},tt={key:3,class:"hint"},at={key:4,class:"hint danger"},nt={key:5,class:"hint success"},lt={class:"actions camera-side-actions"},st={class:"panel camera-preview"},ot={class:"panel-bd camera-preview-bd"},ut={class:"camera-stage"},rt=["src"],it={key:1,class:"camera-placeholder"},ct={class:"ptz-pad"},dt=["disabled"],vt=["disabled"],pt=["disabled"],ft=["disabled"],mt=["disabled"],ht={key:0,class:"hint"},yt={key:1,class:"hint"},St=$e({__name:"Camera",setup(_t){const X=o(!1),ue=o(!1),R=o(!1),u=o(!1),re=Me(),Y=F(()=>re.hasOnboardCamera),Z=F(()=>re.hasGimbal),h=o(""),g=o(""),S=o(!1),H=o(!1),w=o([]),ie=o(""),p=o(""),x=o(""),i=o(""),ee=o(""),B=o(null),O=o(!1),l=o({hostname:"",port:80,username:"admin",password:"",path:"/onvif/device_service"}),E=F(()=>Z.value||O.value),_e=o(!0),z=We(E,_e),ge=F(()=>!i.value||i.value==="mpegts"&&(!S.value||!!g.value)||i.value==="mjpeg"&&!p.value),we=F(()=>u.value?g.value||"正在读取画面…":Y.value?"板载画面暂不支持":"连接后在这里显示画面");let L=null,v=!1,y=0,$=0,te=!1,M=0,W=0,ae=0,ne=0,b=0,P=!1;function j(){var e;M=Date.now(),W=((e=B.value)==null?void 0:e.currentTime)||W}function le(){window.clearTimeout(ne),ne=0}function se(){window.clearInterval(ae),ae=0}function be(){se(),j(),ae=window.setInterval(()=>{if(!v||document.hidden||i.value!=="mpegts"||!M)return;const e=B.value;if(!e)return;if(e.paused){const t=e.play();t&&typeof t.catch=="function"&&t.catch(()=>{})}const a=e.currentTime||0;if(a>W+.04){W=a,M=Date.now();return}Date.now()-M>8e3&&(console.warn("[mpegts] stall, reconnect"),me())},1e3)}function ke(){var a;const e=B.value;return(a=e==null?void 0:e.buffered)!=null&&a.length?e.buffered.end(e.buffered.length-1)-e.currentTime:0}function Ve(){if(i.value!=="mjpeg"||!p.value)return;const e=p.value.replace(/([?&])t=\d+/,`$1t=${Date.now()}`);p.value=e.includes("t=")?e:`${p.value}${p.value.includes("?")?"&":"?"}t=${Date.now()}`}function Ce(e){!v||!u.value||i.value!=="mpegts"||(console.warn("[mpegts]",e),window.clearTimeout(y),y=0,$=0,P=!1,_(),A(te))}function oe(){if(!v)return;if(document.hidden){b=Date.now(),i.value==="mpegts"&&(P=!0,_());return}const e=b?Date.now()-b:0;if(b=0,Ve(),i.value!=="mpegts")return;if(P||e>400||ke()>.7){Ce("tab visible, resync live");return}const a=B.value;if(a!=null&&a.paused){const t=a.play();t&&typeof t.catch=="function"&&t.catch(()=>{})}j()}function ce(e){e.persisted&&oe()}function de(){!v||i.value!=="mpegts"||(b=b||Date.now(),P=!0,_())}function ve(){return window.location.origin}function pe(e){return`${e.hostname}:${e.port}${e.path}`}function fe(e){ie.value=pe(e),l.value.hostname=e.hostname,l.value.port=e.port,l.value.path=e.path||"/onvif/device_service"}async function Se(){X.value=!0,h.value="";try{const e=await G("/api/camera/discover",{method:"POST"});w.value=e.devices||[],ue.value=!0,w.value.length===1&&fe(w.value[0]),N[w.value.length?"success":"warning"](w.value.length?`找到 ${w.value.length} 路视频源`:"没有扫到设备")}catch(e){h.value=e instanceof Error?e.message:"扫描失败",N.error(h.value)}finally{X.value=!1}}async function Be(){var e,a;try{const t=await G("/api/camera/status");if(H.value=!!((e=t.saved)!=null&&e.password_set),(a=t.saved)!=null&&a.hostname){const f=!!t.connected;l.value.hostname=f&&t.hostname||t.saved.hostname,l.value.port=Number(f&&t.port||t.saved.port||80),l.value.path=f&&t.path||t.saved.path||"/onvif/device_service",l.value.username=f&&t.username||t.saved.username||"admin"}u.value=!!t.connected,O.value=!!t.ptz||!!t.gimbalAvailable,ee.value=t.encoding||"",t.info&&(x.value=[t.info.manufacturer,t.info.model].filter(Boolean).join(" ")),t.connected&&he(t)}catch{}}function De(e){u.value=!0,O.value=!!e.ptz||!!e.gimbalAvailable,ee.value=e.encoding||"",x.value=e.info?[e.info.manufacturer,e.info.model].filter(Boolean).join(" "):"",H.value=!0,he(e)}async function Te(){if(!l.value.hostname.trim()||l.value.hostname.trim()==="onboard"){N.warning(Y.value?"板载画面暂不支持,请填写 Onvif 地址":"请填写摄像头地址");return}if(!R.value){R.value=!0,h.value="";try{const e=await G("/api/camera/connect",{method:"POST",body:JSON.stringify(l.value),timeoutMs:75e3});De(e),h.value="",N.success(e.ptz?"已连接,可用方向键转云台":"已连接。这台设备没有云台")}catch(e){h.value=e instanceof Error?e.message:"连接失败",N.error(h.value)}finally{R.value=!1}}}async function Ee(){ye(),z.release();try{await G("/api/camera/disconnect",{method:"POST"})}catch{}u.value=!1,O.value=!1,x.value="",g.value=""}function A(e){te=e,i.value="mpegts",Ne(()=>{if(!v)return;if(!B.value){g.value="画面组件未就绪";return}if(!Q.isSupported()){g.value="当前浏览器不支持直播预览";return}_(),S.value=!1;const a=e?"&codec=h264":"",t=Q.createPlayer({type:"mpegts",isLive:!0,cors:!0,url:`${ve()}/api/camera/stream?t=${Date.now()}${a}`,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});L=t,j(),t.attachMediaElement(B.value),t.load(),(()=>{const k=t.play();k&&typeof k.catch=="function"&&k.catch(()=>{})})();const D=()=>{L!==t||!v||S.value||(le(),$=0,g.value="",S.value=!0,j(),be())};le(),ne=window.setTimeout(()=>{if(!(L!==t||!v)){if(!e&&!S.value){console.warn("[mpegts] no media in time, transcode"),_(),A(!0);return}D()}},e?6e3:8e3),t.on(Q.Events.MEDIA_INFO,D),t.on(Q.Events.ERROR,(k,I)=>{if(!(L!==t||!v)){if(console.warn("[mpegts]",k,I),!e&&/hevc|h265|codec/i.test(`${k} ${I}`)){_(),A(!0);return}Date.now()-M<4e3&&M||me()}})})}function me(){if(!v||!u.value||y)return;j(),_();const e=Math.min(200*2**$,1600);$+=1,g.value=$>1?"画面中断,正在重连…":"正在同步画面…",y=window.setTimeout(()=>{y=0,!(!v||!u.value)&&A(te)},e)}function _(){le();const e=L;if(L=null,!!e){try{e.pause()}catch{}try{e.unload()}catch{}try{e.detachMediaElement()}catch{}try{e.destroy()}catch{}}}function he(e){window.clearTimeout(y),y=0,P=!1,b=0,se(),_(),v=!0,$=0,g.value="",S.value=!1;const a=e.playMode||(e.liveDirect?"mjpeg":"mpegts");if(a==="mpegts"){const t=/hevc|h265/.test(e.encoding||ee.value);A(t);return}i.value=a==="snapshot"?"mjpeg":a,p.value=e.liveDirect||`${ve()}/api/camera/stream?t=${Date.now()}`}function ye(){v=!1,window.clearTimeout(y),y=0,P=!1,b=0,se(),_(),p.value="",i.value="",S.value=!1}return Pe(()=>{Be(),document.addEventListener("visibilitychange",oe),document.addEventListener("freeze",de),window.addEventListener("pageshow",ce)}),xe(()=>{document.removeEventListener("visibilitychange",oe),document.removeEventListener("freeze",de),window.removeEventListener("pageshow",ce),ye()}),(e,a)=>{const t=T("el-button"),f=T("el-input"),D=T("el-form-item"),k=T("el-input-number"),I=T("el-collapse-item"),ze=T("el-collapse"),Le=T("el-form");return r(),c("div",Ie,[s("section",Ke,[a[9]||(a[9]=s("div",{class:"panel-hd"},"视觉源",-1)),s("div",qe,[s("div",Ge,[Y.value?(r(),c("p",Je,"板载画面暂不支持。云台方向键仍可用。")):(r(),c("p",Qe,"扫描或填写 Onvif 地址后连接。画面在右侧预览。")),s("div",Xe,[d(t,{type:"primary",loading:X.value,onClick:Se},{default:m(()=>[...a[6]||(a[6]=[J("扫描局域网",-1)])]),_:1},8,["loading"])]),w.value.length?(r(),c("div",Ye,[(r(!0),c(Oe,null,je(w.value,n=>(r(),c("div",{key:n.hostname+":"+n.port+n.path,class:Re(["device-item",{active:ie.value===pe(n)}]),onClick:gt=>fe(n)},[s("strong",null,C(n.name||n.hostname),1),s("div",He,[J(C(n.hostname)+":"+C(n.port)+" ",1),n.hardware?(r(),c("span",et," · "+C(n.hardware),1)):V("",!0)])],10,Ze))),128))])):ue.value?(r(),c("p",tt,"这一轮没有扫到 Onvif 设备,可以在下面手动填写 IP。")):V("",!0),d(Le,{"label-position":"top",class:"config-form",style:{"margin-top":"12px"}},{default:m(()=>[d(D,{label:"地址"},{default:m(()=>[d(f,{modelValue:l.value.hostname,"onUpdate:modelValue":a[0]||(a[0]=n=>l.value.hostname=n),placeholder:"例如 192.168.1.64"},null,8,["modelValue"])]),_:1}),d(D,{label:"端口"},{default:m(()=>[d(k,{modelValue:l.value.port,"onUpdate:modelValue":a[1]||(a[1]=n=>l.value.port=n),min:1,max:65535},null,8,["modelValue"]),a[7]||(a[7]=s("div",{class:"hint"},"常见是 80。海康有时是 80 或 8000。",-1))]),_:1}),d(D,{label:"账号"},{default:m(()=>[d(f,{modelValue:l.value.username,"onUpdate:modelValue":a[2]||(a[2]=n=>l.value.username=n),placeholder:"常见是 admin"},null,8,["modelValue"])]),_:1}),d(D,{label:"密码"},{default:m(()=>[d(f,{modelValue:l.value.password,"onUpdate:modelValue":a[3]||(a[3]=n=>l.value.password=n),type:"password","show-password":"",placeholder:H.value?"已保存,不改可留空":""},null,8,["modelValue","placeholder"])]),_:1}),d(ze,{class:"soft-collapse"},{default:m(()=>[d(I,{title:"高级:Onvif 路径"},{default:m(()=>[d(f,{modelValue:l.value.path,"onUpdate:modelValue":a[4]||(a[4]=n=>l.value.path=n),placeholder:"/onvif/device_service"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),h.value?(r(),c("p",at,C(h.value),1)):V("",!0),u.value&&x.value?(r(),c("p",nt,C(x.value),1)):V("",!0)]),s("div",lt,[u.value?(r(),Ae(t,{key:0,onClick:Ee},{default:m(()=>[...a[8]||(a[8]=[J("断开",-1)])]),_:1})):V("",!0),d(t,{type:"primary",loading:R.value,onClick:Te},{default:m(()=>[J(C(u.value?"重新连接":"连接摄像头"),1)]),_:1},8,["loading"])])])]),s("section",st,[a[10]||(a[10]=s("div",{class:"panel-hd"},"画面与云台",-1)),s("div",ot,[s("div",ut,[Ue(s("video",{ref_key:"videoEl",ref:B,class:"camera-frame",muted:"",autoplay:"",playsinline:""},null,512),[[Fe,u.value&&i.value==="mpegts"]]),u.value&&i.value==="mjpeg"&&p.value?(r(),c("img",{key:0,class:"camera-frame",src:p.value,alt:"摄像头画面"},null,8,rt)):V("",!0),!u.value||ge.value?(r(),c("div",it,C(we.value),1)):V("",!0),s("div",ct,[s("button",K({class:"ptz-btn",type:"button",disabled:!E.value},q(U(z).pointerBind("up"),!0)),"上",16,dt),s("button",K({class:"ptz-btn",type:"button",disabled:!E.value},q(U(z).pointerBind("left"),!0)),"左",16,vt),s("button",{class:"ptz-btn stop",type:"button",disabled:!E.value,onClick:a[5]||(a[5]=n=>U(z).send("stop"))},"停",8,pt),s("button",K({class:"ptz-btn",type:"button",disabled:!E.value},q(U(z).pointerBind("right"),!0)),"右",16,ft),s("button",K({class:"ptz-btn",type:"button",disabled:!E.value},q(U(z).pointerBind("down"),!0)),"下",16,mt)])]),Z.value&&!u.value?(r(),c("p",ht,"板载云台由步进电机驱动,语音/人脸跟踪时会互让。")):u.value&&!O.value&&!Z.value?(r(),c("p",yt,"已连上,但没有云台。画面仍可看。")):V("",!0)])])])}}});export{St as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.moss-wire[data-v-08430a60]{--bg: #070b10;--line: #5b4cdb;--muted: rgb(244 245 250 / .48);--text: #f4f5fa;--ok: #c8c4f5;position:relative;width:100%;height:100%;min-height:240px;overflow:hidden;background:#02050a;touch-action:none;cursor:grab;font-family:DIN Alternate,Arial Narrow,PingFang SC,Noto Sans SC,sans-serif}.moss-wire[data-v-08430a60]:active{cursor:grabbing}.moss-gl[data-v-08430a60]{position:absolute;top:0;right:0;bottom:52px;left:0}.moss-gl[data-v-08430a60] canvas{display:block;width:100%;height:100%}.hud[data-v-08430a60]{position:absolute;top:0;right:0;bottom:52px;left:0;pointer-events:none;z-index:2;color:var(--text)}.hud-corner[data-v-08430a60]{position:absolute;width:22px;height:22px;border:1.5px solid rgb(91 76 219 / .9)}.hud-corner.tl[data-v-08430a60]{top:10px;left:10px;border-right:0;border-bottom:0}.hud-corner.tr[data-v-08430a60]{top:10px;right:10px;border-left:0;border-bottom:0}.hud-corner.bl[data-v-08430a60]{bottom:10px;left:10px;border-right:0;border-top:0}.hud-corner.br[data-v-08430a60]{bottom:10px;right:10px;border-left:0;border-top:0}.hud-grid[data-v-08430a60]{position:absolute;top:16px;right:16px;bottom:16px;left:16px;background-image:linear-gradient(rgb(91 76 219 / .22) 1px,transparent 1px),linear-gradient(90deg,rgb(91 76 219 / .22) 1px,transparent 1px);background-size:48px 48px;-webkit-mask-image:radial-gradient(ellipse at center,#000 18%,transparent 78%);mask-image:radial-gradient(ellipse at center,#000 18%,transparent 78%)}.crt[data-v-08430a60]{position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(to bottom,transparent 0 3px,rgb(0 0 0 / .08) 3px 4px);opacity:.18}.heading[data-v-08430a60]{position:absolute;right:8%;top:16%;text-align:right;color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.heading small[data-v-08430a60]{display:block;letter-spacing:.22em;font-size:10px;color:var(--muted)}.heading b[data-v-08430a60]{display:block;margin-top:4px;letter-spacing:.16em;font-size:13px}.scene-tag[data-v-08430a60]{position:absolute;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--text);border-left:2px solid var(--line);padding:4px 0 4px 10px;background:linear-gradient(90deg,rgb(91 76 219 / .18),transparent)}.scene-tag small[data-v-08430a60],.scene-tag em[data-v-08430a60]{display:block;letter-spacing:.18em;font-size:9px;color:var(--muted);font-style:normal}.scene-tag b[data-v-08430a60]{display:block;margin:2px 0 3px;letter-spacing:.14em;font-size:13px;color:var(--text)}.tag-a[data-v-08430a60]{left:7%;top:20%}.tag-b[data-v-08430a60]{left:7%;bottom:14%}.propel-strip[data-v-08430a60]{position:absolute;left:0;right:0;bottom:0;z-index:2;display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:#5b4cdb8c;pointer-events:none;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.propel-strip div[data-v-08430a60]{background:#0c141c;padding:8px 10px}.propel-strip span[data-v-08430a60]{display:block;color:var(--muted);font-size:10px;letter-spacing:.16em}.propel-strip b[data-v-08430a60]{display:block;margin-top:3px;color:var(--text);font-size:13px;letter-spacing:.08em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.propel-strip b.ok[data-v-08430a60]{color:var(--ok)}.propel-strip b.bad[data-v-08430a60]{color:#c81e1e}.device-page[data-v-2e897d0d]{flex:1;min-height:0;height:100%;display:grid;grid-template-rows:auto minmax(0,1fr);gap:16px}.device-body[data-v-2e897d0d]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) minmax(280px,.95fr);gap:14px;min-height:0}.body-card[data-v-2e897d0d]{display:flex;flex-direction:column;min-height:0;height:100%}.body-card[data-v-2e897d0d] .panel-hd{flex-shrink:0}.body-bd[data-v-2e897d0d]{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px}.scan-bar[data-v-2e897d0d]{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}.scan-list[data-v-2e897d0d]{flex:1;min-height:0;overflow:auto}.actions.foot[data-v-2e897d0d]{margin-top:auto;padding-top:16px}.moss-stage-bd[data-v-2e897d0d]{flex:1;min-height:0;padding:0!important;display:flex;overflow:hidden}.moss-stage-bd[data-v-2e897d0d] .moss-wire{flex:1;min-height:0;border-radius:0 0 var(--radius) var(--radius)}@media(max-width:1100px){.device-body[data-v-2e897d0d]{grid-template-columns:1fr 1fr}.moss-stage-card[data-v-2e897d0d]{grid-column:1 / -1;min-height:360px}}@media(max-width:980px){.device-page[data-v-2e897d0d]{height:auto;min-height:100%;grid-template-rows:none}.device-body[data-v-2e897d0d]{grid-template-columns:1fr}.body-card[data-v-2e897d0d]{height:auto}.moss-stage-card[data-v-2e897d0d]{min-height:320px}}@media(max-width:640px){.scan-bar[data-v-2e897d0d]{grid-template-columns:1fr}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as De,u as Te,e as Ue,o as ze,D as M,f as S,g as a,j as Fe,t as L,l as re,p as Ye,r as g,c as z,_ as ke,a as ue,J as A,h as V,i as ae,v as H,F as Re,s as Xe,K as $e,C as Ge,L as ve,q as ne,M as Ce,N as Ve,O as He,P as Le}from"./index-CMys3a7t.js";import{l as Je,k as Ke,m as Ze,n as qe,S as je,a9 as Qe,r as oe,aa as pe,s as et,V as ie,v as me,ab as fe,L as tt,w as st,x as at,ac as nt,M as ot,D as it,A as rt,a4 as lt,F as ct,ad as dt}from"./engine-3d-D4oEyAF6.js";import"./mpegts-D4BrshwP.js";import"./esp-flasher-Dm2UeoOa.js";const ut={class:"moss-wire"},vt={class:"hud","aria-hidden":"true"},pt={class:"scene-tag tag-b"},mt={class:"propel-strip"},ft="/stl/moss.stl",ht=9344678,gt=.98,_t=.985,yt=1.035,bt=.215,wt=.7,Mt=0,St=.226,xt=.245,Et=.08,Ot=.26,Ct=.0164,Lt=.375,It=.372,Pt=16722468,he=.0022,Ie=14,Pe=.88,Nt=-.9,Dt=.14,Tt=De({__name:"MossWireframe",setup(P){const v=-Math.PI/6,f=Math.PI/6,D=-Math.PI/2,E=Math.PI/2,T=g(null),_=Te(),p=g(0),N=g(Ie),O=z(()=>_.deviceName||"UNNAMED"),U=z(()=>R(p.value)),B=z(()=>R(N.value));let F=()=>{};function R(n){return`${n>0?"+":""}${n}°`}function Y(n,o){const i=n.getAttribute("position");let d=0,m=0,l=0,t=0;for(let e=0;e<i.count;e++){const c=i.getX(e),r=i.getY(e),b=i.getZ(e);o(c,r,b)&&(d+=c,m+=r,l+=b,t+=1)}return t?new ie(d/t,m/t,l/t):(n.computeBoundingBox(),n.boundingBox.getCenter(new ie))}function X(){const n=new oe,o=(l,t)=>new ot({color:l,transparent:t<1,opacity:t,depthWrite:!1,blending:t<1?rt:lt,side:it}),i=new me(new fe(.04,32),o(13114910,.16)),d=new me(new fe(.02,28),o(16726578,.42)),m=new me(new fe(.0075,24),o(Pt,1));return n.add(i,d,m),{group:n,glow:d}}function W(n){const o=new ct;return o.setAttribute("position",new dt(n,3)),o.computeVertexNormals(),o}function J(n){const o=n.getAttribute("position"),i=[],d=[],m=[];for(let l=0;l<o.count;l+=3){const t=[o.getX(l),o.getX(l+1),o.getX(l+2)],e=[o.getY(l),o.getY(l+1),o.getY(l+2)],c=Math.min(...e),r=Math.max(...e),b=Math.max(...t),y=c>gt?i:r>wt||b>=bt&&r>Mt?d:m;for(let I=0;I<3;I++)y.push(o.getX(l+I),o.getY(l+I),o.getZ(l+I))}return{base:W(i),arm:W(d),frame:W(m)}}function K(n){return new tt(new st(n,28),new at({color:ht}))}return Ue(()=>{const n=T.value;if(!n)return;const o=new Je;o.background=new Ke(132362);const i=new Ze(32,1,.1,4e3);i.up.set(0,1,0),i.position.set(0,0,2.6);const d=new qe({antialias:!0,alpha:!1});d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.outputColorSpace=je,n.appendChild(d.domElement);const m=new Qe(i,d.domElement);m.enableDamping=!1,m.enablePan=!1,m.enableRotate=!1,m.enableZoom=!1,m.autoRotate=!1;const l=new oe,t=new oe,e=new oe;e.rotation.x=pe.degToRad(Ie),t.add(e),l.add(t),o.add(l);const c=[];let r=0,b=!1,y=!1,I=0,le=0,Z=1,$=2.6,Q=2.6,ye=.8,be=6,ce=null;const Ae=performance.now();function Be(s){return Math.min(E,Math.max(D,s))}function de(s){const u=pe.degToRad(i.fov),w=2*s*Math.tan(u/2),h=-Pe*w/2;i.up.set(0,1,0),i.position.set(0,h,s),i.near=Math.max(s*.02,.01),i.far=s*40,i.updateProjectionMatrix(),m.target.set(0,h,0),i.lookAt(0,h,0)}function We(s){const u=new nt().setFromObject(s),w=u.getSize(new ie),h=u.getCenter(new ie);s.position.x-=h.x,s.position.z-=h.z,s.position.y-=u.max.y;const x=Math.max(w.y,.01),C=Math.max(w.x,w.z,.01),te=pe.degToRad(i.fov),q=Math.tan(te/2),se=x/((Pe-Nt)*q),G=C/(1.8*q*Math.max(i.aspect,.2)),k=Math.max(se,G);ye=k*.45,be=k*3.2,$=k,Q=k,de($)}function we(){const s=n.clientWidth||1,u=n.clientHeight||1;i.aspect=s/u,i.updateProjectionMatrix(),d.setSize(s,u,!1),de($)}const Me=s=>{y=!0,I=s.clientX,le=s.clientY,n.setPointerCapture(s.pointerId)},Se=s=>{y&&(t.rotation.y+=(s.clientX-I)*.008,e.rotation.x=Be(e.rotation.x+(s.clientY-le)*.008),I=s.clientX,le=s.clientY)},ee=s=>{y=!1,n.hasPointerCapture(s.pointerId)&&n.releasePointerCapture(s.pointerId)},xe=s=>{s.preventDefault();const u=Math.exp(s.deltaY*.0016);Q=Math.min(be,Math.max(ye,Q*u))};n.addEventListener("pointerdown",Me),n.addEventListener("pointermove",Se),n.addEventListener("pointerup",ee),n.addEventListener("pointercancel",ee),n.addEventListener("wheel",xe,{passive:!1});const Ee=new ResizeObserver(we);Ee.observe(n),we(),new et().loadAsync(ft).then(s=>{if(b){s.dispose();return}const{base:u,arm:w,frame:h}=J(s),x=Y(s,(k,j)=>j>=_t&&j<=yt),C=Y(s,(k,j)=>k>=St&&k<=xt&&j>=Et&&j<=Ot);s.dispose(),u.translate(-x.x,-x.y,-x.z),w.translate(-x.x,-x.y,-x.z),h.translate(-C.x,-C.y,-C.z),e.position.copy(C).sub(x);const te=K(u),q=K(w),se=K(h);u.dispose(),w.dispose(),h.dispose(),l.add(te),t.add(q),e.add(se);const G=X();G.group.position.set(Ct-C.x,Lt-C.y,It-C.z),e.add(G.group),ce=G.glow.material,c.push(te,q,se,G.group),We(l)});const Oe=()=>{r=window.requestAnimationFrame(Oe),y||(t.rotation.y>f?(t.rotation.y-=he,t.rotation.y<=f&&(t.rotation.y=f,Z=-1)):t.rotation.y<v?(t.rotation.y+=he,t.rotation.y>=v&&(t.rotation.y=v,Z=1)):(t.rotation.y+=he*Z,t.rotation.y>=f?(t.rotation.y=f,Z=-1):t.rotation.y<=v&&(t.rotation.y=v,Z=1)));const s=Math.round(t.rotation.y*180/Math.PI);s!==p.value&&(p.value=s);const u=Math.round(e.rotation.x*180/Math.PI);if(u!==N.value&&(N.value=u),$+=(Q-$)*Dt,de($),ce){const w=(performance.now()-Ae)/1e3;ce.opacity=.28+Math.sin(w*2.2)*.1}d.render(o,i)};Oe(),F=()=>{b=!0,window.cancelAnimationFrame(r),Ee.disconnect(),n.removeEventListener("pointerdown",Me),n.removeEventListener("pointermove",Se),n.removeEventListener("pointerup",ee),n.removeEventListener("pointercancel",ee),n.removeEventListener("wheel",xe),m.dispose(),c.forEach(s=>{s.traverse(u=>{var x;const w=u;(x=w.geometry)==null||x.dispose();const h=w.material;Array.isArray(h)?h.forEach(C=>C.dispose()):h==null||h.dispose()})}),d.dispose(),d.domElement.remove()}}),ze(()=>{F()}),(n,o)=>(M(),S("div",ut,[a("div",{ref_key:"host",ref:T,class:"moss-gl"},null,512),a("div",vt,[o[1]||(o[1]=Fe('<i class="hud-corner tl" data-v-08430a60></i><i class="hud-corner tr" data-v-08430a60></i><i class="hud-corner bl" data-v-08430a60></i><i class="hud-corner br" data-v-08430a60></i><div class="hud-grid" data-v-08430a60></div><div class="crt" data-v-08430a60></div><div class="scene-tag tag-a" data-v-08430a60><small data-v-08430a60>NEAR UNIT</small><b data-v-08430a60>MOSS</b><em data-v-08430a60>550W CORE · GROUND</em></div><div class="heading" data-v-08430a60><small data-v-08430a60>HEADING</small><b data-v-08430a60>UEG · 550W</b></div>',8)),a("div",pt,[o[0]||(o[0]=a("small",null,"LINK",-1)),a("b",null,L(re(_).mossOnline?"ONLINE":"LOST"),1),a("em",null,L(O.value),1)])]),a("div",mt,[a("div",null,[o[2]||(o[2]=a("span",null,"YAW",-1)),a("b",null,L(U.value),1)]),a("div",null,[o[3]||(o[3]=a("span",null,"PITCH",-1)),a("b",null,L(B.value),1)]),a("div",null,[o[4]||(o[4]=a("span",null,"LINK",-1)),a("b",{class:Ye(re(_).mossOnline?"ok":"bad")},L(re(_).mossOnline?"ONLINE":"LOST"),3)])])]))}}),Ut=ke(Tt,[["__scopeId","data-v-08430a60"]]);function ge(P){const v=String(P||"").toLowerCase().replace(/[^0-9a-f]/g,"");return v.length!==12?"":v.match(/.{2}/g).join(":")}function Ne(P){return String(P||"").trim().replace(/\/$/,"")}function _e(P=[],v={}){const f=Ne(v.baseUrl),D=ge(v.mac);return(P||[]).some(E=>{const T=ge(E.mac)||ge(E.id);if(D&&T)return D===T;if(f&&E.baseUrl&&Ne(E.baseUrl)===f)return!0;const _=String(v.hostname||"").trim().toLowerCase(),p=String(E.hostname||"").trim().toLowerCase();return!!(_&&p&&_===p)})}function Yt(P,v=[]){return(v||[]).filter(f=>!_e(P,f))}const kt={class:"device-page uxp-page-stack"},At={class:"status-strip is-offline"},Bt={class:"status-actions"},Wt={class:"device-body"},zt={class:"panel body-card"},Ft={class:"panel-bd body-bd"},Rt={class:"scan-bar"},Xt={key:0,class:"hint danger"},$t={key:1,class:"device-list scan-list"},Gt=["onClick"],Vt={class:"hint",style:{margin:"4px 0 0"}},Ht={key:2,class:"hint"},Jt={key:3,class:"hint"},Kt={key:4,class:"hint danger"},Zt={key:5,class:"hint success"},qt={class:"actions foot"},jt={class:"panel body-card"},Qt={class:"panel-bd body-bd"},es={key:1,class:"hint"},ts={key:2,class:"hint"},ss={key:3,class:"hint danger"},as={class:"actions foot"},ns={class:"panel body-card moss-stage-card"},os={class:"panel-bd moss-stage-bd"},is=De({__name:"FindMoss",setup(P){const v=Ge(),f=Te(),D=g(!1),E=g(!1),T=g(0),_=g([]),p=g(""),N=g(""),O=g(""),U=g(!1),B=g(!1),F=g(""),R=g(!1),Y=g(""),X=g(""),W=z(()=>({baseUrl:d(p.value||N.value),name:""})),J=z(()=>!!W.value.baseUrl&&_e(f.devices,W.value)),K=z(()=>!!W.value.baseUrl&&!J.value),n=z(()=>U.value&&!J.value);Ue(()=>{i().catch(()=>{})});function o(t){const e=Ce(t.board)!=="MOSS"?Ce(t.board):t.product||"MOSS",c=t.mac||t.baseUrl;return`${e} · ${c}`}async function i(){D.value=!0,O.value="";try{const e=(await ue("/api/discover",{method:"POST",timeoutMs:3e4})).devices||[];_.value=Yt(f.devices,e),T.value=e.length-_.value.length,E.value=!0,p.value&&!_.value.some(c=>c.baseUrl===p.value)&&(p.value="",U.value=!1),!p.value&&_.value.length===1&&(p.value=_.value[0].baseUrl)}catch(t){O.value=t instanceof Error?t.message:"寻找失败",A.error(O.value)}finally{D.value=!1}}function d(t){const e=t.trim();return e?e.startsWith("http")?e.replace(/\/$/,""):e.includes(":")?`http://${e}`:`http://${e}:5500`:""}async function m(){var e,c;const t=d(p.value||N.value);if(!t){O.value="请先选择或填写 MOSS 地址",A.warning("请先选择或填写 MOSS 地址");return}if(_e(f.devices,{baseUrl:t})){A.warning("这台已在设备列表中,请返回选择");return}if(!B.value){B.value=!0,O.value="";try{const r=await ue("/api/device/select",{method:"POST",body:JSON.stringify({baseUrl:t})});U.value=!0,F.value=(e=r.health)!=null&&e.display_name||(c=r.health)!=null&&c.hostname?`:${r.health.display_name||r.health.hostname}`:"",A.success("已连上这台 MOSS,请命名并加入列表")}catch(r){U.value=!1,F.value="",O.value=r instanceof Error?r.message:"连接失败。请确认电脑和 MOSS 在同一 Wi-Fi。",A.error(O.value)}finally{B.value=!1}}}async function l(){var t,e,c;R.value=!0,Y.value="",X.value="正在登记设备…";try{const r=await ue("/api/bind/lan",{method:"POST",body:JSON.stringify({baseUrl:d(p.value||N.value)}),timeoutMs:15e3});if((t=r.device)!=null&&t.id){Ve(r.device.id);try{const{value:b}=await He.prompt("给这台 MOSS 起个名字,方便以后辨认。","命名设备",{confirmButtonText:"保存",cancelButtonText:"稍后再说",customClass:"moss-message-box moss-message-box-narrow",inputPlaceholder:"例如 客厅的 MOSS",inputPattern:/\S+/,inputErrorMessage:"请填写名称"});await f.renameDevice(r.device.id,b.trim())}catch(b){if(b!=="cancel")throw b}}if(await f.refresh().catch(()=>{}),r.mossOnline){A.success("已加入列表,请选择后进入"),v.push({path:"/devices",query:Le((e=r.device)==null?void 0:e.id)});return}A.warning("已加入。若列表里还是离线,稍等几秒再刷新。"),v.push({path:"/devices",query:Le((c=r.device)==null?void 0:c.id)})}catch(r){Y.value=r instanceof Error?r.message:"加入失败。请先扫描并连接局域网里的 MOSS。",X.value="",A.error(Y.value)}finally{R.value=!1}}return(t,e)=>{const c=ve("el-button"),r=ve("el-input"),b=ve("el-alert");return M(),S("div",kt,[a("section",At,[e[3]||(e[3]=a("div",{class:"status-copy"},[a("div",{class:"status-title-row"},[a("strong",{class:"status-title"},"添加一台局域网 MOSS")]),a("p",{class:"status-meta"},"电脑和设备连同一 Wi-Fi。扫到它、连上,再起个名字加入列表。")],-1)),a("div",Bt,[V(c,{onClick:e[0]||(e[0]=y=>re(v).push("/devices"))},{default:ae(()=>[...e[2]||(e[2]=[ne("返回设备列表",-1)])]),_:1})])]),a("div",Wt,[a("section",zt,[e[7]||(e[7]=a("div",{class:"panel-hd"},"1. 扫描并连接",-1)),a("div",Ft,[e[6]||(e[6]=a("p",{class:"hint"},"只列出尚未加入的设备。已在「选择设备」里的不会出现。",-1)),a("div",Rt,[V(c,{type:"primary",loading:D.value,onClick:i},{default:ae(()=>[...e[4]||(e[4]=[ne("扫描局域网",-1)])]),_:1},8,["loading"]),V(r,{modelValue:N.value,"onUpdate:modelValue":e[1]||(e[1]=y=>N.value=y),placeholder:"或填写新设备 IP,例如 192.168.1.32"},null,8,["modelValue"])]),J.value?(M(),S("p",Xt,"这个地址已在设备列表中,请返回列表选择。")):H("",!0),_.value.length?(M(),S("div",$t,[(M(!0),S(Re,null,Xe(_.value,y=>(M(),S("div",{key:y.baseUrl,class:Ye(["device-item",{active:p.value===y.baseUrl}]),onClick:I=>p.value=y.baseUrl},[a("strong",null,L(y.name),1),a("div",Vt,L(o(y)),1)],10,Gt))),128))])):E.value&&T.value?(M(),S("p",Ht,"扫到的都已在列表里,请返回选择,或填一台新设备的 IP。")):E.value?(M(),S("p",Jt,"这一轮没扫到。确认设备和电脑同一网段,或直接填 IP。")):H("",!0),O.value?(M(),S("p",Kt,L(O.value),1)):H("",!0),U.value?(M(),S("p",Zt,"已连上局域网"+L(F.value)+",请在右侧命名并加入列表。",1)):H("",!0),a("div",qt,[V(c,{type:"primary",loading:B.value,disabled:!K.value||B.value,onClick:m},{default:ae(()=>[...e[5]||(e[5]=[ne(" 连接这台 MOSS ",-1)])]),_:1},8,["loading","disabled"])])])]),a("section",jt,[e[9]||(e[9]=a("div",{class:"panel-hd"},"2. 命名并加入",-1)),a("div",Qt,[U.value?(M(),S("p",es,"写入后会请你给这台起个名字,然后回到设备列表。")):(M(),$e(b,{key:0,type:"info",closable:!1,"show-icon":"",title:"先在左侧连上要添加的那台,再命名加入。"})),X.value?(M(),S("p",ts,L(X.value),1)):H("",!0),Y.value?(M(),S("p",ss,L(Y.value),1)):H("",!0),a("div",as,[V(c,{type:"primary",loading:R.value,disabled:!n.value,onClick:l},{default:ae(()=>[...e[8]||(e[8]=[ne(" 加入列表 ",-1)])]),_:1},8,["loading","disabled"])])])]),a("section",ns,[e[10]||(e[10]=a("div",{class:"panel-hd"},"MOSS",-1)),a("div",os,[V(Ut)])])])])}}}),us=ke(is,[["__scopeId","data-v-2e897d0d"]]);export{us as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.flash-page[data-v-fa02be36]{flex:1;min-height:0;height:100%;overflow:hidden;display:grid;grid-template-columns:minmax(300px,380px) minmax(0,1fr);grid-template-rows:minmax(0,1fr);gap:14px;align-items:stretch}.flash-steps[data-v-fa02be36]{display:grid;grid-template-rows:minmax(0,1fr) minmax(0,1fr);gap:14px;min-height:0}.flash-card[data-v-fa02be36],.flash-console[data-v-fa02be36]{display:flex;flex-direction:column;min-height:0;height:100%}.flash-card[data-v-fa02be36] .panel-hd,.flash-console[data-v-fa02be36] .panel-hd{flex-shrink:0}.flash-card-bd[data-v-fa02be36],.flash-console-bd[data-v-fa02be36]{flex:1;min-height:0;display:flex;flex-direction:column}.flash-card-main[data-v-fa02be36]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:10px}.flash-card-main[data-v-fa02be36] .el-alert{margin-bottom:0}.flash-card-main[data-v-fa02be36] .hint{margin:0}.flash-card-main[data-v-fa02be36] .device-list{margin:4px 0 0}.flash-card-main[data-v-fa02be36] .kv-grid{margin-top:4px}.flash-card-bd[data-v-fa02be36] .actions{flex-shrink:0;margin-top:16px}.flash-console[data-v-fa02be36] .panel-hd-row{align-items:flex-start;gap:12px}.flash-hd-actions[data-v-fa02be36]{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-left:auto;flex-wrap:wrap}.flash-hd-actions[data-v-fa02be36] .el-button{margin-left:0}.flash-console-bd[data-v-fa02be36] .hint{flex-shrink:0;margin:0 0 12px}.file-pick[data-v-fa02be36]{display:flex;align-items:center;justify-content:center;flex:1;min-height:88px;padding:16px 18px;border:1px dashed rgb(91 76 219 / .28);border-radius:14px;background:#ffffff52;color:var(--muted);cursor:pointer;text-align:center;line-height:1.5;font-size:14px}.file-pick.ready[data-v-fa02be36]{border-style:solid;border-color:var(--accent);background:var(--accent-soft);color:var(--ink);font-weight:600}.file-pick.disabled[data-v-fa02be36]{opacity:.6;cursor:not-allowed}.file-pick input[data-v-fa02be36]{display:none}.flash-log[data-v-fa02be36]{flex:1;min-height:0;margin:0;overflow:auto;padding:14px 16px;border-radius:10px;background:#12141c;color:#d7dce8;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.6;white-space:pre-wrap;word-break:break-all}@media(max-width:980px){.flash-page[data-v-fa02be36]{height:auto;min-height:100%;overflow:visible;grid-template-columns:1fr;grid-template-rows:auto minmax(320px,1fr)}.flash-steps[data-v-fa02be36]{grid-template-columns:1fr 1fr;grid-template-rows:minmax(260px,auto)}}@media(max-width:720px){.flash-steps[data-v-fa02be36]{grid-template-columns:1fr;grid-template-rows:none}.flash-card[data-v-fa02be36]{height:auto;min-height:240px}}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{e as we,o as ke,r as u,c as H,d as _e,w as be,f as P,g as s,l,K as x,v as V,F as Ce,s as Ee,t as M,h as R,i as F,q as _,p as te,L as X,D as f,J as q,O as Se,n as Be,_ as Pe}from"./index-CMys3a7t.js";import{T as se,E as Fe,C as ne}from"./esp-flasher-Dm2UeoOa.js";import"./mpegts-D4BrshwP.js";const $e={1027:"FTDI",1659:"Prolific",4292:"Silicon Labs CP210x",6790:"WCH CH340/CH9102",12346:"Espressif USB"},De=921600,Te=115200,xe=0;function Y(o){return o<1024?`${o} B`:o<1024*1024?`${(o/1024).toFixed(1)} KB`:`${(o/(1024*1024)).toFixed(2)} MB`}function j(o){return typeof o=="number"?o.toString(16).toUpperCase().padStart(4,"0"):""}function oe(o,e){const c=o.getInfo(),g=c.usbVendorId,w=c.usbProductId,b=g&&$e[g]||"USB 串口";return g&&w?`${b}(${j(g)}:${j(w)})`:`${b} ${e+1}`}function Me(o){const e=Array.from(o,c=>String.fromCharCode(c)).join("");return ne.MD5(ne.enc.Latin1.parse(e)).toString()}function L(o,e){return o instanceof DOMException&&o.name==="NotFoundError"?"已取消选择串口":o instanceof DOMException&&o.name==="SecurityError"?"当前页面不是安全上下文,无法使用串口。请用 localhost 或 HTTPS,并用 Chrome / Edge。":o instanceof Error&&o.message?o.message:e}function Le(){const o=u(!1),e=u([]),c=u(""),g=u(""),w=u(""),b=u(""),N=u(""),C=u(null),t=u(0),p=u([]),i=u(""),T=u(!1),E=u(!1),I=u(!1),A=u(!1),$=u(!1),S=u(!1),r=u("");let y=null,m=null,k=null,O=!0;const re=H(()=>(i.value?[...p.value,i.value]:p.value).join(`
|
|
2
|
+
`)||"等待操作…"),J=H(()=>T.value||E.value||I.value||A.value||$.value),Z=H(()=>e.value.find(a=>a.key===c.value)||null),ie=H(()=>{var a;return S.value&&!J.value&&!!((a=C.value)!=null&&a.length)}),ue=H(()=>C.value?Y(C.value.length):""),ce={clean(){p.value=[],i.value=""},writeLine(a){p.value.push(i.value+a),i.value="",ee()},write(a){i.value+=a}};function ee(){p.value.length>400&&(p.value=p.value.slice(-300))}function v(a){i.value&&(p.value.push(i.value),i.value=""),p.value.push(a),ee()}function D(){return typeof navigator<"u"?navigator.serial:void 0}function ve(a){var n,h;e.value=a.map((d,B)=>{const le=d.getInfo();return{key:`${j(le.usbVendorId)||"port"}-${j(le.usbProductId)||B}-${B}`,port:d,label:oe(d,B)}}),c.value&&!e.value.some(d=>d.key===c.value)?(c.value=((n=e.value[0])==null?void 0:n.key)||"",k=((h=e.value[0])==null?void 0:h.port)||null):!c.value&&e.value.length&&(c.value=e.value[0].key,k=e.value[0].port)}async function W(){const a=D();if(a)try{ve(await a.getPorts()),S.value&&!T.value&&k&&!e.value.some(n=>n.port===k)&&(v("USB 已拔出"),S.value=!1,g.value="",w.value="",b.value="",await U())}catch(n){r.value=L(n,"读取串口失败")}}function z(a){var n;c.value=a,k=((n=e.value.find(h=>h.key===a))==null?void 0:n.port)||null}async function G(){var n;const a=D();if(!a){r.value="当前浏览器不支持串口,请用 Chrome 或 Edge浏览器";return}r.value="";try{const h=await a.requestPort();await W();const d=e.value.find(B=>B.port===h);if(d)z(d.key);else{const B={key:`picked-${Date.now()}`,port:h,label:oe(h,e.value.length)};e.value=[...e.value,B],z(B.key)}v(`已选择:${((n=Z.value)==null?void 0:n.label)||"USB 设备"}`)}catch(h){const d=L(h,"选择串口失败");d!=="已取消选择串口"&&(r.value=d)}}async function de(){if(J.value)return;if($.value&&await Q(),!D()){r.value="当前浏览器不支持串口,请用 Chrome 或 Edge浏览器";return}T.value=!0,r.value="";try{if(!k&&(await G(),!k))return;y=new se(k,!1),m=new Fe({transport:y,baudrate:De,terminal:ce,debugLogging:!1}),g.value=await m.main();try{w.value=await m.chip.getChipDescription(m)}catch{w.value=g.value}try{b.value=await m.chip.readMac(m)}catch{b.value=""}S.value=!0,v(`已识别:${w.value||g.value}`)}catch(n){S.value=!1,r.value=L(n,"没连上。请按住 BOOT 再点一下复位,然后重试。"),v(`连接失败:${r.value}`),await U()}finally{T.value=!1}}async function U(){try{await(y==null?void 0:y.disconnect())}catch{}y=null,m=null}async function ae(){$.value&&await Q(),O=!0,await U(),S.value=!1,g.value="",w.value="",b.value="",t.value=0,v("已断开")}async function fe(){const a=C.value;if(!m||!S.value||E.value||!(a!=null&&a.length)){a!=null&&a.length||(r.value="请先选择固件文件");return}E.value=!0,r.value="",t.value=0;try{v(`开始烧录 ${N.value}(${Y(a.length)})`),await m.writeFlash({fileArray:[{data:a,address:xe}],flashMode:"keep",flashFreq:"keep",flashSize:"detect",eraseAll:!1,compress:!0,reportProgress:(n,h,d)=>{t.value=d?Math.round(h/d*100):0},calculateMD5Hash:Me}),await m.after(),t.value=100,v("烧录完成,设备已重启")}catch(n){r.value=L(n,"烧录失败"),v(`烧录失败:${r.value}`)}finally{E.value=!1}}async function pe(){if(!(!m||!S.value||I.value)){I.value=!0,r.value="";try{v("正在清空芯片…"),await m.eraseFlash(),v("芯片已清空")}catch(a){r.value=L(a,"清空失败"),v(`清空失败:${r.value}`)}finally{I.value=!1}}}async function he(){if(!(!y||A.value)){A.value=!0;try{await y.setDTR(!1),await new Promise(a=>setTimeout(a,100)),await y.setDTR(!0),v("已重启设备")}catch(a){r.value=L(a,"重启失败")}finally{A.value=!1}}}async function ge(){if(!$.value&&(r.value="",S.value&&(await ae(),await new Promise(a=>setTimeout(a,400))),!(!k&&(await G(),!k))))try{y=new se(k,!1),await y.connect(Te),$.value=!0,O=!1,v("已打开运行日志");const a=new TextDecoder;let n="";await y.rawRead(h=>{n+=a.decode(h,{stream:!0}),n=n.replace(/\r/g,"");const d=n.split(`
|
|
3
|
+
`);n=d.pop()||"";for(const B of d)v(B)},()=>O),n&&v(n)}catch(a){r.value=L(a,"打开运行日志失败"),v(`运行日志失败:${r.value}`),await U()}finally{$.value=!1,O=!0}}async function Q(){O=!0,$.value=!1,await U(),v("已关闭运行日志")}async function ye(a){a&&(N.value=a.name,C.value=new Uint8Array(await a.arrayBuffer()),t.value=0,v(`已选择固件 ${a.name}(${Y(C.value.length)})`))}function me(){N.value="",C.value=null,t.value=0}function K(){W()}return we(()=>{var a,n;if(o.value=!!D(),!o.value){r.value="当前浏览器不支持串口,请用 Chrome 或 Edge浏览器";return}W(),(a=D())==null||a.addEventListener("connect",K),(n=D())==null||n.addEventListener("disconnect",K)}),ke(()=>{var a,n;(a=D())==null||a.removeEventListener("connect",K),(n=D())==null||n.removeEventListener("disconnect",K),O=!0,U()}),{serialSupported:o,ports:e,selectedKey:c,selectedPortItem:Z,chipName:g,chipDesc:w,chipMac:b,firmwareName:N,firmwareSize:ue,firmwareProgress:t,logs:p,consoleText:re,connecting:T,flashing:E,erasing:I,resetting:A,monitoring:$,connected:S,busy:J,canFlash:ie,lastError:r,selectPort:z,requestPort:G,connect:de,disconnect:ae,flash:fe,eraseFlash:pe,resetDevice:he,startMonitor:ge,stopMonitor:Q,pickFirmware:ye,clearFirmware:me}}const Ne={class:"flash-page"},Ie={class:"flash-steps"},Oe={class:"panel flash-card"},Ue={class:"panel-bd flash-card-bd"},Ae={class:"flash-card-main"},He={key:1,class:"device-list"},Ve=["onClick"],qe={key:2,class:"hint"},Ke={key:3,class:"kv-grid"},Re={class:"kv"},je={class:"kv-v success"},Je={class:"kv"},We={class:"kv-v"},ze={key:4,class:"hint danger"},Ge={class:"actions"},Qe={class:"panel flash-card"},Xe={class:"panel-bd flash-card-bd"},Ye={class:"flash-card-main"},Ze=["disabled"],ea={key:0},aa={key:1},la={class:"actions"},ta={class:"panel flash-console"},sa={class:"panel-hd panel-hd-row"},na={class:"flash-hd-actions"},oa={class:"panel-bd flash-console-bd"},ra=_e({__name:"Flash",setup(o){const e=Le(),c=u(null);async function g(C){var p;const t=C.target;await e.pickFirmware((p=t.files)==null?void 0:p[0]),t.value=""}async function w(){await e.connect(),e.connected.value?q.success(`已连上 ${e.chipDesc.value||e.chipName.value}`):e.lastError.value&&q.error(e.lastError.value)}async function b(){await e.flash(),!e.lastError.value&&e.firmwareProgress.value>=100?q.success("烧录完成,设备已重启"):e.lastError.value&&q.error(e.lastError.value)}async function N(){try{await Se.confirm("会把芯片里的程序全部清掉,确定吗?","清空芯片",{type:"warning",confirmButtonText:"清空",cancelButtonText:"取消"})}catch{return}await e.eraseFlash(),e.lastError.value||q.success("芯片已清空")}return be(()=>e.consoleText.value,async()=>{await Be(),c.value&&(c.value.scrollTop=c.value.scrollHeight)}),(C,t)=>{const p=X("el-alert"),i=X("el-button"),T=X("el-progress");return f(),P("div",Ne,[s("div",Ie,[s("section",Oe,[t[7]||(t[7]=s("div",{class:"panel-hd"},"1. 连接设备",-1)),s("div",Ue,[s("div",Ae,[l(e).serialSupported.value?V("",!0):(f(),x(p,{key:0,title:"请用 Chrome 或 Edge浏览器 打开本页。Safari、Firefox 选不了 USB 串口。",type:"error","show-icon":"",closable:!1})),t[2]||(t[2]=s("p",{class:"hint"},"用 USB 线把 MOSS 接到电脑,点「选择设备」。弹窗里选那一个串口即可。",-1)),t[3]||(t[3]=s("p",{class:"hint"},"连不上时:按住板上的 BOOT 不放,再按一下复位,然后松开 BOOT,重新连接。",-1)),l(e).ports.value.length?(f(),P("div",He,[(f(!0),P(Ce,null,Ee(l(e).ports.value,E=>(f(),P("div",{key:E.key,class:te(["device-item",{active:l(e).selectedKey.value===E.key}]),onClick:I=>l(e).selectPort(E.key)},[s("strong",null,M(E.label),1)],10,Ve))),128))])):(f(),P("p",qe,"还没选过设备。")),l(e).connected.value?(f(),P("div",Ke,[s("div",Re,[t[0]||(t[0]=s("div",{class:"kv-k"},"芯片",-1)),s("div",je,M(l(e).chipDesc.value||l(e).chipName.value),1)]),s("div",Je,[t[1]||(t[1]=s("div",{class:"kv-k"},"编号",-1)),s("div",We,[s("code",null,M(l(e).chipMac.value||"-"),1)])])])):V("",!0),l(e).lastError.value?(f(),P("p",ze,M(l(e).lastError.value),1)):V("",!0)]),s("div",Ge,[R(i,{disabled:l(e).busy.value,onClick:l(e).requestPort},{default:F(()=>[...t[4]||(t[4]=[_("选择设备",-1)])]),_:1},8,["disabled","onClick"]),l(e).connected.value?(f(),x(i,{key:1,type:"warning",disabled:l(e).busy.value,onClick:l(e).disconnect},{default:F(()=>[...t[6]||(t[6]=[_("断开",-1)])]),_:1},8,["disabled","onClick"])):(f(),x(i,{key:0,type:"primary",loading:l(e).connecting.value,disabled:l(e).busy.value,onClick:w},{default:F(()=>[...t[5]||(t[5]=[_(" 连接 ",-1)])]),_:1},8,["loading","disabled"]))])])]),s("section",Qe,[t[11]||(t[11]=s("div",{class:"panel-hd"},"2. 选择固件",-1)),s("div",Xe,[s("div",Ye,[t[8]||(t[8]=s("p",{class:"hint"},[_("选一份合并好的 "),s("code",null,".bin"),_(" 固件。选好后点下面的「开始烧录」。")],-1)),s("label",{class:te(["file-pick",{ready:l(e).firmwareName.value,disabled:l(e).flashing.value}])},[s("input",{type:"file",accept:".bin",disabled:l(e).flashing.value,onChange:g},null,40,Ze),l(e).firmwareName.value?(f(),P("span",ea,M(l(e).firmwareName.value)+" · "+M(l(e).firmwareSize.value),1)):(f(),P("span",aa,"点击选择固件文件"))],2),l(e).flashing.value||l(e).firmwareProgress.value>0?(f(),x(T,{key:0,percentage:l(e).firmwareProgress.value,status:l(e).firmwareProgress.value>=100&&!l(e).flashing.value?"success":void 0},null,8,["percentage","status"])):V("",!0)]),s("div",la,[R(i,{type:"primary",loading:l(e).flashing.value,disabled:!l(e).canFlash.value,onClick:b},{default:F(()=>[...t[9]||(t[9]=[_(" 开始烧录 ",-1)])]),_:1},8,["loading","disabled"]),l(e).firmwareName.value?(f(),x(i,{key:0,disabled:l(e).flashing.value,onClick:l(e).clearFirmware},{default:F(()=>[...t[10]||(t[10]=[_(" 换一份 ",-1)])]),_:1},8,["disabled","onClick"])):V("",!0)])])])]),s("section",ta,[s("div",sa,[t[16]||(t[16]=s("span",null,"日志",-1)),s("div",na,[l(e).monitoring.value?(f(),x(i,{key:1,type:"warning",onClick:l(e).stopMonitor},{default:F(()=>[...t[13]||(t[13]=[_("停止",-1)])]),_:1},8,["onClick"])):(f(),x(i,{key:0,disabled:l(e).flashing.value||l(e).connecting.value,onClick:l(e).startMonitor},{default:F(()=>[...t[12]||(t[12]=[_(" 查看运行日志 ",-1)])]),_:1},8,["disabled","onClick"])),R(i,{disabled:!l(e).connected.value&&!l(e).monitoring.value||l(e).flashing.value,loading:l(e).resetting.value,onClick:l(e).resetDevice},{default:F(()=>[...t[14]||(t[14]=[_(" 重启设备 ",-1)])]),_:1},8,["disabled","loading","onClick"]),R(i,{disabled:!l(e).connected.value||l(e).busy.value,loading:l(e).erasing.value,onClick:N},{default:F(()=>[...t[15]||(t[15]=[_(" 清空芯片 ",-1)])]),_:1},8,["disabled","loading"])])]),s("div",oa,[t[17]||(t[17]=s("p",{class:"hint"},"烧录过程会显示在这里。烧完后可点「查看运行日志」,看设备有没有正常启动。",-1)),s("pre",{ref_key:"logEl",ref:c,class:"flash-log"},M(l(e).consoleText.value),513)])])])}}}),va=Pe(ra,[["__scopeId","data-v-fa02be36"]]);export{va as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as x,D as i,f as o,R as C,v as w,A as B,c as r,g as l,Q as p,p as c,j as D,q as X,_ as J,u as c0,t as u,h as $,W as z,l as t,F as g0,s as m0,z as T,L as v0}from"./index-CMys3a7t.js";import{H as p0}from"./PhLightning.vue-CGapFt6a.js";import{useGamepadMonitor as h0}from"./useGamepadMonitor-C7ccme3i.js";import{bootstrapGamepadRuntime as A0,loadCameraStatus as f0,deviceVolume as H0,canPtz as Z0,cameraPtz as y0,cameraConnected as V0,hwControlEnabled as $0,voiceControlEnabled as b0,ptzControlEnabled as M0,ptz as L0}from"./gamepadRuntime-6Jv7MQBO.js";import{H as G}from"./useMossWake-BJE6BeTI.js";import"./mpegts-D4BrshwP.js";import"./esp-flasher-Dm2UeoOa.js";import"./ptzCommand-DnF6Q4IY.js";const k0=["width","height","fill","transform"],x0={key:0},w0=l("path",{d:"M232,44H160a43.86,43.86,0,0,0-32,13.85A43.86,43.86,0,0,0,96,44H24A12,12,0,0,0,12,56V200a12,12,0,0,0,12,12H96a20,20,0,0,1,20,20,12,12,0,0,0,24,0,20,20,0,0,1,20-20h72a12,12,0,0,0,12-12V56A12,12,0,0,0,232,44ZM96,188H36V68H96a20,20,0,0,1,20,20V192.81A43.79,43.79,0,0,0,96,188Zm124,0H160a43.71,43.71,0,0,0-20,4.83V88a20,20,0,0,1,20-20h60Z"},null,-1),S0=[w0],z0={key:1},C0=l("path",{d:"M232,56V200H160a32,32,0,0,0-32,32,32,32,0,0,0-32-32H24V56H96a32,32,0,0,1,32,32,32,32,0,0,1,32-32Z",opacity:"0.2"},null,-1),B0=l("path",{d:"M232,48H160a40,40,0,0,0-32,16A40,40,0,0,0,96,48H24a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8H96a24,24,0,0,1,24,24,8,8,0,0,0,16,0,24,24,0,0,1,24-24h72a8,8,0,0,0,8-8V56A8,8,0,0,0,232,48ZM96,192H32V64H96a24,24,0,0,1,24,24V200A39.81,39.81,0,0,0,96,192Zm128,0H160a39.81,39.81,0,0,0-24,8V88a24,24,0,0,1,24-24h64Z"},null,-1),T0=[C0,B0],X0={key:2},Y0=l("path",{d:"M240,56V200a8,8,0,0,1-8,8H160a24,24,0,0,0-24,23.94,7.9,7.9,0,0,1-5.12,7.55A8,8,0,0,1,120,232a24,24,0,0,0-24-24H24a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H88a32,32,0,0,1,32,32v87.73a8.17,8.17,0,0,0,7.47,8.25,8,8,0,0,0,8.53-8V80a32,32,0,0,1,32-32h64A8,8,0,0,1,240,56Z"},null,-1),O0=[Y0],P0={key:3},N0=l("path",{d:"M232,50H160a38,38,0,0,0-32,17.55A38,38,0,0,0,96,50H24a6,6,0,0,0-6,6V200a6,6,0,0,0,6,6H96a26,26,0,0,1,26,26,6,6,0,0,0,12,0,26,26,0,0,1,26-26h72a6,6,0,0,0,6-6V56A6,6,0,0,0,232,50ZM96,194H30V62H96a26,26,0,0,1,26,26V204.31A37.86,37.86,0,0,0,96,194Zm130,0H160a37.87,37.87,0,0,0-26,10.32V88a26,26,0,0,1,26-26h66Z"},null,-1),E0=[N0],R0={key:4},G0=l("path",{d:"M232,48H160a40,40,0,0,0-32,16A40,40,0,0,0,96,48H24a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8H96a24,24,0,0,1,24,24,8,8,0,0,0,16,0,24,24,0,0,1,24-24h72a8,8,0,0,0,8-8V56A8,8,0,0,0,232,48ZM96,192H32V64H96a24,24,0,0,1,24,24V200A39.81,39.81,0,0,0,96,192Zm128,0H160a39.81,39.81,0,0,0-24,8V88a24,24,0,0,1,24-24h64Z"},null,-1),D0=[G0],F0={key:5},U0=l("path",{d:"M232,52H160a36,36,0,0,0-32,19.54A36,36,0,0,0,96,52H24a4,4,0,0,0-4,4V200a4,4,0,0,0,4,4H96a28,28,0,0,1,28,28,4,4,0,0,0,8,0,28,28,0,0,1,28-28h72a4,4,0,0,0,4-4V56A4,4,0,0,0,232,52ZM96,196H28V60H96a28,28,0,0,1,28,28V209.4A35.93,35.93,0,0,0,96,196Zm132,0H160a35.94,35.94,0,0,0-28,13.41V88a28,28,0,0,1,28-28h68Z"},null,-1),j0=[U0],W0={name:"PhBookOpen"},q0=x({...W0,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const e=d,Z=p("weight","regular"),y=p("size","1em"),h=p("color","currentColor"),m=p("mirrored",!1),s=r(()=>e.weight??Z),v=r(()=>e.size??y),A=r(()=>e.color??h),n=r(()=>e.mirrored!==void 0?e.mirrored?"scale(-1, 1)":void 0:m?"scale(-1, 1)":void 0);return(H,M)=>(i(),o("svg",B({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:v.value,height:v.value,fill:A.value,transform:n.value},H.$attrs),[C(H.$slots,"default"),s.value==="bold"?(i(),o("g",x0,S0)):s.value==="duotone"?(i(),o("g",z0,T0)):s.value==="fill"?(i(),o("g",X0,O0)):s.value==="light"?(i(),o("g",P0,E0)):s.value==="regular"?(i(),o("g",R0,D0)):s.value==="thin"?(i(),o("g",F0,j0)):w("",!0)],16,k0))}}),I0=["width","height","fill","transform"],K0={key:0},Q0=l("path",{d:"M208,52H182.42L170,33.34A12,12,0,0,0,160,28H96a12,12,0,0,0-10,5.34L73.57,52H48A28,28,0,0,0,20,80V192a28,28,0,0,0,28,28H208a28,28,0,0,0,28-28V80A28,28,0,0,0,208,52Zm4,140a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V80a4,4,0,0,1,4-4H80a12,12,0,0,0,10-5.34L102.42,52h51.15L166,70.66A12,12,0,0,0,176,76h32a4,4,0,0,1,4,4ZM128,84a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,84Zm0,72a24,24,0,1,1,24-24A24,24,0,0,1,128,156Z"},null,-1),J0=[Q0],_0={key:1},l1=l("path",{d:"M208,64H176L160,40H96L80,64H48A16,16,0,0,0,32,80V192a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V80A16,16,0,0,0,208,64ZM128,168a36,36,0,1,1,36-36A36,36,0,0,1,128,168Z",opacity:"0.2"},null,-1),a1=l("path",{d:"M208,56H180.28L166.65,35.56A8,8,0,0,0,160,32H96a8,8,0,0,0-6.65,3.56L75.71,56H48A24,24,0,0,0,24,80V192a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V80A24,24,0,0,0,208,56Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H80a8,8,0,0,0,6.66-3.56L100.28,48h55.43l13.63,20.44A8,8,0,0,0,176,72h32a8,8,0,0,1,8,8ZM128,88a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,88Zm0,72a28,28,0,1,1,28-28A28,28,0,0,1,128,160Z"},null,-1),t1=[l1,a1],e1={key:2},s1=l("path",{d:"M208,56H180.28L166.65,35.56A8,8,0,0,0,160,32H96a8,8,0,0,0-6.65,3.56L75.71,56H48A24,24,0,0,0,24,80V192a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V80A24,24,0,0,0,208,56Zm-44,76a36,36,0,1,1-36-36A36,36,0,0,1,164,132Z"},null,-1),n1=[s1],i1={key:3},o1=l("path",{d:"M208,58H179.21L165,36.67A6,6,0,0,0,160,34H96a6,6,0,0,0-5,2.67L76.78,58H48A22,22,0,0,0,26,80V192a22,22,0,0,0,22,22H208a22,22,0,0,0,22-22V80A22,22,0,0,0,208,58Zm10,134a10,10,0,0,1-10,10H48a10,10,0,0,1-10-10V80A10,10,0,0,1,48,70H80a6,6,0,0,0,5-2.67L99.21,46h57.57L171,67.33A6,6,0,0,0,176,70h32a10,10,0,0,1,10,10ZM128,90a42,42,0,1,0,42,42A42,42,0,0,0,128,90Zm0,72a30,30,0,1,1,30-30A30,30,0,0,1,128,162Z"},null,-1),r1=[o1],d1={key:4},u1=l("path",{d:"M208,56H180.28L166.65,35.56A8,8,0,0,0,160,32H96a8,8,0,0,0-6.65,3.56L75.71,56H48A24,24,0,0,0,24,80V192a24,24,0,0,0,24,24H208a24,24,0,0,0,24-24V80A24,24,0,0,0,208,56Zm8,136a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V80a8,8,0,0,1,8-8H80a8,8,0,0,0,6.66-3.56L100.28,48h55.43l13.63,20.44A8,8,0,0,0,176,72h32a8,8,0,0,1,8,8ZM128,88a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,88Zm0,72a28,28,0,1,1,28-28A28,28,0,0,1,128,160Z"},null,-1),c1=[u1],g1={key:5},m1=l("path",{d:"M208,60H178.13L163.32,37.78A4,4,0,0,0,160,36H96a4,4,0,0,0-3.32,1.78L77.85,60H48A20,20,0,0,0,28,80V192a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V80A20,20,0,0,0,208,60Zm12,132a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V80A12,12,0,0,1,48,68H80a4,4,0,0,0,3.33-1.78L98.13,44h59.72l14.82,22.22A4,4,0,0,0,176,68h32a12,12,0,0,1,12,12ZM128,92a40,40,0,1,0,40,40A40,40,0,0,0,128,92Zm0,72a32,32,0,1,1,32-32A32,32,0,0,1,128,164Z"},null,-1),v1=[m1],p1={name:"PhCamera"},h1=x({...p1,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const e=d,Z=p("weight","regular"),y=p("size","1em"),h=p("color","currentColor"),m=p("mirrored",!1),s=r(()=>e.weight??Z),v=r(()=>e.size??y),A=r(()=>e.color??h),n=r(()=>e.mirrored!==void 0?e.mirrored?"scale(-1, 1)":void 0:m?"scale(-1, 1)":void 0);return(H,M)=>(i(),o("svg",B({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:v.value,height:v.value,fill:A.value,transform:n.value},H.$attrs),[C(H.$slots,"default"),s.value==="bold"?(i(),o("g",K0,J0)):s.value==="duotone"?(i(),o("g",_0,t1)):s.value==="fill"?(i(),o("g",e1,n1)):s.value==="light"?(i(),o("g",i1,r1)):s.value==="regular"?(i(),o("g",d1,c1)):s.value==="thin"?(i(),o("g",g1,v1)):w("",!0)],16,I0))}}),A1=["width","height","fill","transform"],f1={key:0},H1=l("path",{d:"M232,116h-4.72A100.21,100.21,0,0,0,140,28.72V24a12,12,0,0,0-24,0v4.72A100.21,100.21,0,0,0,28.72,116H24a12,12,0,0,0,0,24h4.72A100.21,100.21,0,0,0,116,227.28V232a12,12,0,0,0,24,0v-4.72A100.21,100.21,0,0,0,227.28,140H232a12,12,0,0,0,0-24Zm-92,87v-3a12,12,0,0,0-24,0v3a76.15,76.15,0,0,1-63-63h3a12,12,0,0,0,0-24H53a76.15,76.15,0,0,1,63-63v3a12,12,0,0,0,24,0V53a76.15,76.15,0,0,1,63,63h-3a12,12,0,0,0,0,24h3A76.15,76.15,0,0,1,140,203ZM128,84a44,44,0,1,0,44,44A44.05,44.05,0,0,0,128,84Zm0,64a20,20,0,1,1,20-20A20,20,0,0,1,128,148Z"},null,-1),Z1=[H1],y1={key:1},V1=l("path",{d:"M160,128a32,32,0,1,1-32-32A32,32,0,0,1,160,128Z",opacity:"0.2"},null,-1),$1=l("path",{d:"M232,120h-8.34A96.14,96.14,0,0,0,136,32.34V24a8,8,0,0,0-16,0v8.34A96.14,96.14,0,0,0,32.34,120H24a8,8,0,0,0,0,16h8.34A96.14,96.14,0,0,0,120,223.66V232a8,8,0,0,0,16,0v-8.34A96.14,96.14,0,0,0,223.66,136H232a8,8,0,0,0,0-16Zm-96,87.6V200a8,8,0,0,0-16,0v7.6A80.15,80.15,0,0,1,48.4,136H56a8,8,0,0,0,0-16H48.4A80.15,80.15,0,0,1,120,48.4V56a8,8,0,0,0,16,0V48.4A80.15,80.15,0,0,1,207.6,120H200a8,8,0,0,0,0,16h7.6A80.15,80.15,0,0,1,136,207.6ZM128,88a40,40,0,1,0,40,40A40,40,0,0,0,128,88Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,128,152Z"},null,-1),b1=[V1,$1],M1={key:2},L1=l("path",{d:"M232,120h-8.34A96.14,96.14,0,0,0,136,32.34V24a8,8,0,0,0-16,0v8.34A96.14,96.14,0,0,0,32.34,120H24a8,8,0,0,0,0,16h8.34A96.14,96.14,0,0,0,120,223.66V232a8,8,0,0,0,16,0v-8.34A96.14,96.14,0,0,0,223.66,136H232a8,8,0,0,0,0-16Zm-32,16h7.6A80.15,80.15,0,0,1,136,207.6V200a8,8,0,0,0-16,0v7.6A80.15,80.15,0,0,1,48.4,136H56a8,8,0,0,0,0-16H48.4A80.15,80.15,0,0,1,120,48.4V56a8,8,0,0,0,16,0V48.4A80.15,80.15,0,0,1,207.6,120H200a8,8,0,0,0,0,16Zm-32-8a40,40,0,1,1-40-40A40,40,0,0,1,168,128Z"},null,-1),k1=[L1],x1={key:3},w1=l("path",{d:"M232,122H221.8A94.13,94.13,0,0,0,134,34.2V24a6,6,0,0,0-12,0V34.2A94.13,94.13,0,0,0,34.2,122H24a6,6,0,0,0,0,12H34.2A94.13,94.13,0,0,0,122,221.8V232a6,6,0,0,0,12,0V221.8A94.13,94.13,0,0,0,221.8,134H232a6,6,0,0,0,0-12Zm-98,87.76V200a6,6,0,0,0-12,0v9.76A82.09,82.09,0,0,1,46.24,134H56a6,6,0,0,0,0-12H46.24A82.09,82.09,0,0,1,122,46.24V56a6,6,0,0,0,12,0V46.24A82.09,82.09,0,0,1,209.76,122H200a6,6,0,0,0,0,12h9.76A82.09,82.09,0,0,1,134,209.76ZM128,90a38,38,0,1,0,38,38A38,38,0,0,0,128,90Zm0,64a26,26,0,1,1,26-26A26,26,0,0,1,128,154Z"},null,-1),S1=[w1],z1={key:4},C1=l("path",{d:"M232,120h-8.34A96.14,96.14,0,0,0,136,32.34V24a8,8,0,0,0-16,0v8.34A96.14,96.14,0,0,0,32.34,120H24a8,8,0,0,0,0,16h8.34A96.14,96.14,0,0,0,120,223.66V232a8,8,0,0,0,16,0v-8.34A96.14,96.14,0,0,0,223.66,136H232a8,8,0,0,0,0-16Zm-96,87.6V200a8,8,0,0,0-16,0v7.6A80.15,80.15,0,0,1,48.4,136H56a8,8,0,0,0,0-16H48.4A80.15,80.15,0,0,1,120,48.4V56a8,8,0,0,0,16,0V48.4A80.15,80.15,0,0,1,207.6,120H200a8,8,0,0,0,0,16h7.6A80.15,80.15,0,0,1,136,207.6ZM128,88a40,40,0,1,0,40,40A40,40,0,0,0,128,88Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,128,152Z"},null,-1),B1=[C1],T1={key:5},X1=l("path",{d:"M232,124H219.91A92.13,92.13,0,0,0,132,36.09V24a4,4,0,0,0-8,0V36.09A92.13,92.13,0,0,0,36.09,124H24a4,4,0,0,0,0,8H36.09A92.13,92.13,0,0,0,124,219.91V232a4,4,0,0,0,8,0V219.91A92.13,92.13,0,0,0,219.91,132H232a4,4,0,0,0,0-8ZM132,211.9V200a4,4,0,0,0-8,0v11.9A84.11,84.11,0,0,1,44.1,132H56a4,4,0,0,0,0-8H44.1A84.11,84.11,0,0,1,124,44.1V56a4,4,0,0,0,8,0V44.1A84.11,84.11,0,0,1,211.9,124H200a4,4,0,0,0,0,8h11.9A84.11,84.11,0,0,1,132,211.9ZM128,92a36,36,0,1,0,36,36A36,36,0,0,0,128,92Zm0,64a28,28,0,1,1,28-28A28,28,0,0,1,128,156Z"},null,-1),Y1=[X1],O1={name:"PhCrosshair"},Q=x({...O1,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const e=d,Z=p("weight","regular"),y=p("size","1em"),h=p("color","currentColor"),m=p("mirrored",!1),s=r(()=>e.weight??Z),v=r(()=>e.size??y),A=r(()=>e.color??h),n=r(()=>e.mirrored!==void 0?e.mirrored?"scale(-1, 1)":void 0:m?"scale(-1, 1)":void 0);return(H,M)=>(i(),o("svg",B({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:v.value,height:v.value,fill:A.value,transform:n.value},H.$attrs),[C(H.$slots,"default"),s.value==="bold"?(i(),o("g",f1,Z1)):s.value==="duotone"?(i(),o("g",y1,b1)):s.value==="fill"?(i(),o("g",M1,k1)):s.value==="light"?(i(),o("g",x1,S1)):s.value==="regular"?(i(),o("g",z1,B1)):s.value==="thin"?(i(),o("g",T1,Y1)):w("",!0)],16,A1))}}),P1=["width","height","fill","transform"],N1={key:0},E1=l("path",{d:"M176,116H152a12,12,0,0,1,0-24h24a12,12,0,0,1,0,24ZM104,92h-4V88a12,12,0,0,0-24,0v4H72a12,12,0,0,0,0,24h4v4a12,12,0,0,0,24,0v-4h4a12,12,0,0,0,0-24ZM244.76,202.94a40,40,0,0,1-61,5.35,7,7,0,0,1-.53-.56L144.67,164H111.33L72.81,207.73c-.17.19-.35.38-.53.56A40,40,0,0,1,4.62,173.05a1.18,1.18,0,0,1,0-.2L21,88.79A63.88,63.88,0,0,1,83.88,36H172a64.08,64.08,0,0,1,62.93,52.48,1.8,1.8,0,0,1,0,.19l16.36,84.17a1.77,1.77,0,0,1,0,.2A39.74,39.74,0,0,1,244.76,202.94ZM172,140a40,40,0,0,0,0-80H83.89A39.9,39.9,0,0,0,44.62,93.06a1.55,1.55,0,0,0,0,.21l-16.34,84a16,16,0,0,0,13,18.44,16.07,16.07,0,0,0,13.86-4.21L96.9,144.07a12,12,0,0,1,9-4.07Zm55.76,37.31-7-35.95a63.84,63.84,0,0,1-44.27,22.46l24.41,27.72a16,16,0,0,0,26.85-14.23Z"},null,-1),R1=[E1],G1={key:1},D1=l("path",{d:"M216.86,207.57a28,28,0,0,1-24.66-7.77L150.09,152H172a51.94,51.94,0,0,0,51.2-61h0l16.36,84.17A28,28,0,0,1,216.86,207.57Z",opacity:"0.2"},null,-1),F1=l("path",{d:"M176,112H152a8,8,0,0,1,0-16h24a8,8,0,0,1,0,16ZM104,96H96V88a8,8,0,0,0-16,0v8H72a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0v-8h8a8,8,0,0,0,0-16ZM241.48,200.65a36,36,0,0,1-54.94,4.81c-.12-.12-.24-.24-.35-.37L146.48,160h-37L69.81,205.09l-.35.37A36.08,36.08,0,0,1,44,216,36,36,0,0,1,8.56,173.75a.68.68,0,0,1,0-.14L24.93,89.52A59.88,59.88,0,0,1,83.89,40H172a60.08,60.08,0,0,1,59,49.25c0,.06,0,.12,0,.18l16.37,84.17a.68.68,0,0,1,0,.14A35.74,35.74,0,0,1,241.48,200.65ZM172,144a44,44,0,0,0,0-88H83.89A43.9,43.9,0,0,0,40.68,92.37l0,.13L24.3,176.59A20,20,0,0,0,58,194.3l41.92-47.59a8,8,0,0,1,6-2.71Zm59.7,32.59-8.74-45A60,60,0,0,1,172,160h-4.2L198,194.31a20.09,20.09,0,0,0,17.46,5.39,20,20,0,0,0,16.23-23.11Z"},null,-1),U1=[D1,F1],j1={key:2},W1=l("path",{d:"M247.44,173.75a.68.68,0,0,0,0-.14L231.05,89.44c0-.06,0-.12,0-.18A60.08,60.08,0,0,0,172,40H83.89a59.88,59.88,0,0,0-59,49.52L8.58,173.61a.68.68,0,0,0,0,.14,36,36,0,0,0,60.9,31.71l.35-.37L109.52,160h37l39.71,45.09c.11.13.23.25.35.37A36.08,36.08,0,0,0,212,216a36,36,0,0,0,35.43-42.25ZM104,112H96v8a8,8,0,0,1-16,0v-8H72a8,8,0,0,1,0-16h8V88a8,8,0,0,1,16,0v8h8a8,8,0,0,1,0,16Zm40-8a8,8,0,0,1,8-8h24a8,8,0,0,1,0,16H152A8,8,0,0,1,144,104Zm84.37,87.47a19.84,19.84,0,0,1-12.9,8.23A20.09,20.09,0,0,1,198,194.31L167.8,160H172a60,60,0,0,0,51-28.38l8.74,45A19.82,19.82,0,0,1,228.37,191.47Z"},null,-1),q1=[W1],I1={key:3},K1=l("path",{d:"M176,110H152a6,6,0,0,1,0-12h24a6,6,0,0,1,0,12ZM104,98H94V88a6,6,0,0,0-12,0V98H72a6,6,0,0,0,0,12H82v10a6,6,0,0,0,12,0V110h10a6,6,0,0,0,0-12ZM239.84,199.5A34,34,0,0,1,212,214,34.11,34.11,0,0,1,188,204.05l-.26-.28L147.38,158H108.62L68.31,203.76,68,204A34,34,0,0,1,44,214a34,34,0,0,1-33.46-39.91s0-.06,0-.1L26.9,89.88A57.89,57.89,0,0,1,83.89,42H172a58.07,58.07,0,0,1,57.05,47.63c0,.07,0,.12,0,.19L245.46,174s0,.07,0,.11A33.75,33.75,0,0,1,239.84,199.5ZM172,146a46,46,0,0,0,0-92H83.89A45.9,45.9,0,0,0,38.71,92a.36.36,0,0,0,0,.1L22.33,176.23a22,22,0,0,0,37.11,19.45l42-47.65a6,6,0,0,1,4.5-2Zm61.67,30.23-9.79-50.35A58.06,58.06,0,0,1,172,158h-8.63l33.19,37.68a22,22,0,0,0,37.11-19.45Z"},null,-1),Q1=[K1],J1={key:4},_1=l("path",{d:"M176,112H152a8,8,0,0,1,0-16h24a8,8,0,0,1,0,16ZM104,96H96V88a8,8,0,0,0-16,0v8H72a8,8,0,0,0,0,16h8v8a8,8,0,0,0,16,0v-8h8a8,8,0,0,0,0-16ZM241.48,200.65a36,36,0,0,1-54.94,4.81c-.12-.12-.24-.24-.35-.37L146.48,160h-37L69.81,205.09l-.35.37A36.08,36.08,0,0,1,44,216,36,36,0,0,1,8.56,173.75a.68.68,0,0,1,0-.14L24.93,89.52A59.88,59.88,0,0,1,83.89,40H172a60.08,60.08,0,0,1,59,49.25c0,.06,0,.12,0,.18l16.37,84.17a.68.68,0,0,1,0,.14A35.74,35.74,0,0,1,241.48,200.65ZM172,144a44,44,0,0,0,0-88H83.89A43.9,43.9,0,0,0,40.68,92.37l0,.13L24.3,176.59A20,20,0,0,0,58,194.3l41.92-47.59a8,8,0,0,1,6-2.71Zm59.7,32.59-8.74-45A60,60,0,0,1,172,160h-4.2L198,194.31a20.09,20.09,0,0,0,17.46,5.39,20,20,0,0,0,16.23-23.11Z"},null,-1),l2=[_1],a2={key:5},t2=l("path",{d:"M176,108H152a4,4,0,0,1,0-8h24a4,4,0,0,1,0,8Zm-72-8H92V88a4,4,0,0,0-8,0v12H72a4,4,0,0,0,0,8H84v12a4,4,0,0,0,8,0V108h12a4,4,0,0,0,0-8Zm134.21,98.36a32,32,0,0,1-48.84,4.27l-.17-.18L148.29,156H107.72L66.81,202.44l-.18.19A32.08,32.08,0,0,1,44,212a32,32,0,0,1-31.5-37.56L28.87,90.21A55.87,55.87,0,0,1,83.89,44H172a56.07,56.07,0,0,1,55.1,46.1.29.29,0,0,1,0,.1l16.37,84.16A31.86,31.86,0,0,1,238.21,198.36ZM172,148a48,48,0,1,0,0-96H83.9A47.9,47.9,0,0,0,36.74,91.67L20.36,175.9a24,24,0,0,0,19.48,27.73,24,24,0,0,0,21-6.58l42-47.69a4,4,0,0,1,3-1.36Zm63.63,27.83-11-56.66A56.09,56.09,0,0,1,172,156H159l36.16,41.06a24,24,0,0,0,40.52-21.23Z"},null,-1),e2=[t2],s2={name:"PhGameController"},n2=x({...s2,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const e=d,Z=p("weight","regular"),y=p("size","1em"),h=p("color","currentColor"),m=p("mirrored",!1),s=r(()=>e.weight??Z),v=r(()=>e.size??y),A=r(()=>e.color??h),n=r(()=>e.mirrored!==void 0?e.mirrored?"scale(-1, 1)":void 0:m?"scale(-1, 1)":void 0);return(H,M)=>(i(),o("svg",B({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:v.value,height:v.value,fill:A.value,transform:n.value},H.$attrs),[C(H.$slots,"default"),s.value==="bold"?(i(),o("g",N1,R1)):s.value==="duotone"?(i(),o("g",G1,U1)):s.value==="fill"?(i(),o("g",j1,q1)):s.value==="light"?(i(),o("g",I1,Q1)):s.value==="regular"?(i(),o("g",J1,l2)):s.value==="thin"?(i(),o("g",a2,e2)):w("",!0)],16,P1))}}),i2=["width","height","fill","transform"],o2={key:0},r2=l("path",{d:"M240.49,15.51a12,12,0,0,0-17,0L173.94,65.09l-2.54-2.55a36.05,36.05,0,0,0-50.91,0L100,83l-3.51-3.52a12,12,0,0,0-17,17L83,100,62.54,120.49a36,36,0,0,0,0,50.91l2.55,2.54L15.51,223.51a12,12,0,0,0,17,17l49.57-49.58,2.54,2.55a36.06,36.06,0,0,0,50.91,0L156,173l3.51,3.52a12,12,0,0,0,17-17L173,156l20.49-20.49a36,36,0,0,0,0-50.91l-2.55-2.54,49.58-49.57A12,12,0,0,0,240.49,15.51Zm-121.95,161a12,12,0,0,1-17,0L79.51,154.43a12,12,0,0,1,0-17L100,117l39,39Zm58-57.95h0L156,139l-39-39,20.49-20.49a12,12,0,0,1,17,0l22.06,22.06a12,12,0,0,1,0,17ZM85.27,33.37a12,12,0,0,1,21.46-10.74l8,16A12,12,0,1,1,93.27,49.37Zm-68,57.26a12,12,0,0,1,16.1-5.36l16,8a12,12,0,1,1-10.74,21.46l-16-8A12,12,0,0,1,17.27,90.63Zm221.46,74.74a12,12,0,0,1-16.1,5.36l-16-8a12,12,0,0,1,10.74-21.46l16,8A12,12,0,0,1,238.73,165.37Zm-68,57.26a12,12,0,1,1-21.46,10.74l-8-16a12,12,0,0,1,21.46-10.74Z"},null,-1),d2=[r2],u2={key:1},c2=l("path",{d:"M185,127,127,185a24,24,0,0,1-33.94,0L71,162.91A24,24,0,0,1,71,129L129,71a24,24,0,0,1,33.94,0L185,93.09A24,24,0,0,1,185,127Z",opacity:"0.2"},null,-1),g2=l("path",{d:"M237.66,18.34a8,8,0,0,0-11.32,0l-52.4,52.41-5.37-5.38a32.05,32.05,0,0,0-45.26,0L100,88.69l-6.34-6.35A8,8,0,0,0,82.34,93.66L88.69,100,65.37,123.31a32,32,0,0,0,0,45.26l5.38,5.37-52.41,52.4a8,8,0,0,0,11.32,11.32l52.4-52.41,5.37,5.38a32.06,32.06,0,0,0,45.26,0L156,167.31l6.34,6.35a8,8,0,0,0,11.32-11.32L167.31,156l23.32-23.31a32,32,0,0,0,0-45.26l-5.38-5.37,52.41-52.4A8,8,0,0,0,237.66,18.34Zm-116.29,161a16,16,0,0,1-22.62,0L76.69,157.25a16,16,0,0,1,0-22.62L100,111.31,144.69,156Zm57.94-57.94h0L156,144.69,111.31,100l23.32-23.31a16,16,0,0,1,22.62,0l22.06,22a16,16,0,0,1,0,22.63ZM88.57,35A8,8,0,0,1,103.43,29l8,20A8,8,0,0,1,96.57,55ZM24.57,93A8,8,0,0,1,35,88.57l20,8A8,8,0,0,1,49,111.43l-20-8A8,8,0,0,1,24.57,93ZM231.43,163a8,8,0,0,1-10.4,4.46l-20-8A8,8,0,1,1,207,144.57l20,8A8,8,0,0,1,231.43,163Zm-64,58.06A8,8,0,0,1,152.57,227l-8-20A8,8,0,0,1,159.43,201Z"},null,-1),m2=[c2,g2],v2={key:2},p2=l("path",{d:"M88.57,35A8,8,0,0,1,103.43,29l8,20A8,8,0,0,1,96.57,55ZM29,103.43l20,8A8,8,0,1,0,55,96.57l-20-8A8,8,0,0,0,29,103.43ZM227,152.57l-20-8A8,8,0,1,0,201,159.43l20,8A8,8,0,0,0,227,152.57ZM159.43,201A8,8,0,0,0,144.57,207l8,20A8,8,0,1,0,167.43,221ZM237.91,18.52a8,8,0,0,0-11.5-.18L174,70.75l-5.38-5.38a32,32,0,0,0-45.28,0L106.14,82.54a4,4,0,0,0,0,5.66l61.7,61.66a4,4,0,0,0,5.66,0l16.74-16.74a32.76,32.76,0,0,0,9.81-22.52,31.82,31.82,0,0,0-9.37-23.17l-5.38-5.37,52.2-52.17A8.22,8.22,0,0,0,237.91,18.52ZM85.64,90.34a8,8,0,0,0-11.49.18,8.22,8.22,0,0,0,.41,11.37L80.67,108,65.34,123.31A31.82,31.82,0,0,0,56,146.47,32.75,32.75,0,0,0,65.77,169l5,4.94L18.49,226.13a8.21,8.21,0,0,0-.61,11.1,8,8,0,0,0,11.72.43L82,185.25l5.37,5.38a32.1,32.1,0,0,0,45.29,0L148,175.31l6.34,6.35a8,8,0,0,0,11.32-11.32Z"},null,-1),h2=[p2],A2={key:3},f2=l("path",{d:"M236.24,19.76a6,6,0,0,0-8.48,0L173.94,73.57l-6.79-6.78a30,30,0,0,0-42.42,0L100,91.51l-7.76-7.75a6,6,0,0,0-8.48,8.48L91.51,100,66.79,124.73a30,30,0,0,0,0,42.42l6.78,6.79L19.76,227.76a6,6,0,1,0,8.48,8.48l53.82-53.81,6.79,6.78a30,30,0,0,0,42.42,0L156,164.49l7.76,7.75a6,6,0,0,0,8.48-8.48L164.49,156l24.72-24.73a30,30,0,0,0,0-42.42l-6.78-6.79,53.81-53.82A6,6,0,0,0,236.24,19.76Zm-113.45,161a18,18,0,0,1-25.46,0L75.27,158.67a18,18,0,0,1,0-25.46L100,108.49,147.51,156Zm57.94-57.94L156,147.51,108.49,100l24.72-24.73a18,18,0,0,1,25.46,0l22.06,22.06a18,18,0,0,1,0,25.46ZM90.43,34.23a6,6,0,0,1,11.14-4.46l8,20a6,6,0,1,1-11.14,4.46Zm-64,59.54a6,6,0,0,1,7.8-3.34l20,8a6,6,0,1,1-4.46,11.14l-20-8A6,6,0,0,1,26.43,93.77Zm203.14,68.46a6,6,0,0,1-7.8,3.34l-20-8a6,6,0,0,1,4.46-11.14l20,8A6,6,0,0,1,229.57,162.23Zm-64,59.54a6,6,0,1,1-11.14,4.46l-8-20a6,6,0,0,1,11.14-4.46Z"},null,-1),H2=[f2],Z2={key:4},y2=l("path",{d:"M237.66,18.34a8,8,0,0,0-11.32,0l-52.4,52.41-5.37-5.38a32.05,32.05,0,0,0-45.26,0L100,88.69l-6.34-6.35A8,8,0,0,0,82.34,93.66L88.69,100,65.37,123.31a32,32,0,0,0,0,45.26l5.38,5.37-52.41,52.4a8,8,0,0,0,11.32,11.32l52.4-52.41,5.37,5.38a32,32,0,0,0,45.26,0L156,167.31l6.34,6.35a8,8,0,0,0,11.32-11.32L167.31,156l23.32-23.31a32,32,0,0,0,0-45.26l-5.38-5.37,52.41-52.4A8,8,0,0,0,237.66,18.34Zm-116.29,161a16,16,0,0,1-22.62,0L76.69,157.25a16,16,0,0,1,0-22.62L100,111.31,144.69,156Zm57.94-57.94L156,144.69,111.31,100l23.32-23.31a16,16,0,0,1,22.62,0l22.06,22A16,16,0,0,1,179.31,121.37ZM88.57,35A8,8,0,0,1,103.43,29l8,20A8,8,0,0,1,96.57,55ZM24.57,93A8,8,0,0,1,35,88.57l20,8A8,8,0,0,1,49,111.43l-20-8A8,8,0,0,1,24.57,93ZM231.43,163a8,8,0,0,1-10.4,4.46l-20-8A8,8,0,1,1,207,144.57l20,8A8,8,0,0,1,231.43,163Zm-64,58.06A8,8,0,0,1,152.57,227l-8-20A8,8,0,0,1,159.43,201Z"},null,-1),V2=[y2],$2={key:5},b2=l("path",{d:"M234.83,21.17a4,4,0,0,0-5.66,0L173.94,76.4l-8.2-8.2a28,28,0,0,0-39.6,0L100,94.34l-9.17-9.17a4,4,0,0,0-5.66,5.66L94.34,100,68.2,126.14a28,28,0,0,0,0,39.6l8.2,8.2L21.17,229.17a4,4,0,0,0,5.66,5.66L82.06,179.6l8.2,8.2a28,28,0,0,0,39.6,0L156,161.66l9.17,9.17a4,4,0,0,0,5.66-5.66L161.66,156l26.14-26.14a28,28,0,0,0,0-39.6l-8.2-8.2,55.23-55.23A4,4,0,0,0,234.83,21.17Zm-110.63,161a20,20,0,0,1-28.28,0L73.86,160.08a20,20,0,0,1,0-28.28L100,105.66,150.34,156Zm57.94-57.94L156,150.34,105.66,100,131.8,73.86a20,20,0,0,1,28.28,0l22.06,22.06A20,20,0,0,1,182.14,124.2ZM92.29,33.49a4,4,0,1,1,7.42-3l8,20a4,4,0,0,1-2.22,5.2A3.91,3.91,0,0,1,104,56a4,4,0,0,1-3.71-2.51Zm-64,61a4,4,0,0,1,5.2-2.22l20,8A4,4,0,0,1,52,108a3.91,3.91,0,0,1-1.49-.29l-20-8A4,4,0,0,1,28.29,94.51Zm199.42,67A4,4,0,0,1,224,164a3.91,3.91,0,0,1-1.49-.29l-20-8a4,4,0,1,1,3-7.42l20,8A4,4,0,0,1,227.71,161.49Zm-64,61a4,4,0,0,1-2.22,5.2A3.91,3.91,0,0,1,160,228a4,4,0,0,1-3.71-2.51l-8-20a4,4,0,0,1,7.42-3Z"},null,-1),M2=[b2],L2={name:"PhPlugsConnected"},k2=x({...L2,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const e=d,Z=p("weight","regular"),y=p("size","1em"),h=p("color","currentColor"),m=p("mirrored",!1),s=r(()=>e.weight??Z),v=r(()=>e.size??y),A=r(()=>e.color??h),n=r(()=>e.mirrored!==void 0?e.mirrored?"scale(-1, 1)":void 0:m?"scale(-1, 1)":void 0);return(H,M)=>(i(),o("svg",B({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:v.value,height:v.value,fill:A.value,transform:n.value},H.$attrs),[C(H.$slots,"default"),s.value==="bold"?(i(),o("g",o2,d2)):s.value==="duotone"?(i(),o("g",u2,m2)):s.value==="fill"?(i(),o("g",v2,h2)):s.value==="light"?(i(),o("g",A2,H2)):s.value==="regular"?(i(),o("g",Z2,V2)):s.value==="thin"?(i(),o("g",$2,M2)):w("",!0)],16,i2))}}),x2=["width","height","fill","transform"],w2={key:0},S2=l("path",{d:"M72,104a16,16,0,1,1,16,16A16,16,0,0,1,72,104Zm96,16a16,16,0,1,0-16-16A16,16,0,0,0,168,120Zm68-40V192a36,36,0,0,1-36,36H56a36,36,0,0,1-36-36V80A36,36,0,0,1,56,44h60V16a12,12,0,0,1,24,0V44h60A36,36,0,0,1,236,80Zm-24,0a12,12,0,0,0-12-12H56A12,12,0,0,0,44,80V192a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12Zm-12,82a30,30,0,0,1-30,30H86a30,30,0,0,1,0-60h84A30,30,0,0,1,200,162Zm-80-6v12h16V156ZM86,168H96V156H86a6,6,0,0,0,0,12Zm90-6a6,6,0,0,0-6-6H160v12h10A6,6,0,0,0,176,162Z"},null,-1),z2=[S2],C2={key:1},B2=l("path",{d:"M200,56H56A24,24,0,0,0,32,80V192a24,24,0,0,0,24,24H200a24,24,0,0,0,24-24V80A24,24,0,0,0,200,56ZM164,184H92a20,20,0,0,1,0-40h72a20,20,0,0,1,0,40Z",opacity:"0.2"},null,-1),T2=l("path",{d:"M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Zm4,28H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24Z"},null,-1),X2=[B2,T2],Y2={key:2},O2=l("path",{d:"M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48ZM172,96a12,12,0,1,1-12,12A12,12,0,0,1,172,96ZM96,184H80a16,16,0,0,1,0-32H96ZM84,120a12,12,0,1,1,12-12A12,12,0,0,1,84,120Zm60,64H112V152h32Zm32,0H160V152h16a16,16,0,0,1,0,32Z"},null,-1),P2=[O2],N2={key:3},E2=l("path",{d:"M200,50H134V16a6,6,0,0,0-12,0V50H56A30,30,0,0,0,26,80V192a30,30,0,0,0,30,30H200a30,30,0,0,0,30-30V80A30,30,0,0,0,200,50Zm18,142a18,18,0,0,1-18,18H56a18,18,0,0,1-18-18V80A18,18,0,0,1,56,62H200a18,18,0,0,1,18,18ZM74,108a10,10,0,1,1,10,10A10,10,0,0,1,74,108Zm88,0a10,10,0,1,1,10,10A10,10,0,0,1,162,108Zm2,30H92a26,26,0,0,0,0,52h72a26,26,0,0,0,0-52Zm-22,12v28H114V150ZM78,164a14,14,0,0,1,14-14h10v28H92A14,14,0,0,1,78,164Zm86,14H154V150h10a14,14,0,0,1,0,28Z"},null,-1),R2=[E2],G2={key:4},D2=l("path",{d:"M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16Zm-52-56H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Z"},null,-1),F2=[D2],U2={key:5},j2=l("path",{d:"M200,52H132V16a4,4,0,0,0-8,0V52H56A28,28,0,0,0,28,80V192a28,28,0,0,0,28,28H200a28,28,0,0,0,28-28V80A28,28,0,0,0,200,52Zm20,140a20,20,0,0,1-20,20H56a20,20,0,0,1-20-20V80A20,20,0,0,1,56,60H200a20,20,0,0,1,20,20ZM76,108a8,8,0,1,1,8,8A8,8,0,0,1,76,108Zm88,0a8,8,0,1,1,8,8A8,8,0,0,1,164,108Zm0,32H92a24,24,0,0,0,0,48h72a24,24,0,0,0,0-48Zm-20,8v32H112V148ZM76,164a16,16,0,0,1,16-16h12v32H92A16,16,0,0,1,76,164Zm88,16H152V148h12a16,16,0,0,1,0,32Z"},null,-1),W2=[j2],q2={name:"PhRobot"},I2=x({...q2,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const e=d,Z=p("weight","regular"),y=p("size","1em"),h=p("color","currentColor"),m=p("mirrored",!1),s=r(()=>e.weight??Z),v=r(()=>e.size??y),A=r(()=>e.color??h),n=r(()=>e.mirrored!==void 0?e.mirrored?"scale(-1, 1)":void 0:m?"scale(-1, 1)":void 0);return(H,M)=>(i(),o("svg",B({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:v.value,height:v.value,fill:A.value,transform:n.value},H.$attrs),[C(H.$slots,"default"),s.value==="bold"?(i(),o("g",w2,z2)):s.value==="duotone"?(i(),o("g",C2,X2)):s.value==="fill"?(i(),o("g",Y2,P2)):s.value==="light"?(i(),o("g",N2,R2)):s.value==="regular"?(i(),o("g",G2,F2)):s.value==="thin"?(i(),o("g",U2,W2)):w("",!0)],16,x2))}}),K2={class:"gp-viz-frame"},Q2={viewBox:"0 0 441 383",class:"gp-viz-svg","aria-hidden":"true"},J2={id:"Controller"},_2=["transform"],l8=["transform"],O=9.5,a8=.12,t8=x({__name:"GamepadVisualizer",props:{buttons:{},leftX:{},leftY:{},rightX:{},rightY:{},leftTrigger:{},rightTrigger:{},compact:{type:Boolean},fill:{type:Boolean}},setup(d){const e=d,Z=r(()=>({cx:113+h(e.leftX)*O,cy:160+h(e.leftY)*O})),y=r(()=>({cx:278+h(e.rightX)*O,cy:238+h(e.rightY)*O}));function h(A){return Math.max(-1,Math.min(1,A))}function m(A){return A?"gp-btn gp-btn--on":"gp-btn"}function s(A=0){return A>.08?"gp-btn gp-btn--on":"gp-btn"}function v(A,n){return Math.hypot(A,n)>a8}return(A,n)=>(i(),o("div",{class:c(["gp-viz",{compact:d.compact,fill:d.fill}])},[l("div",K2,[(i(),o("svg",Q2,[l("g",J2,[n[2]||(n[2]=l("path",{d:"M220.5 294.5C220.5 294.5 195 294.5 150 294.5C105 294.5 81.5 378.5 49.5 378.5C17.5 378.5 4 363.9 4 317.5C4 271.1 43.5 165.5 55 137.5C66.5 109.5 95.5 92.0001 128 92.0001C154 92.0001 200.5 92.0001 220.5 92.0001",class:"gp-body"},null,-1)),n[3]||(n[3]=l("path",{d:"M220 294.5C220 294.5 245.5 294.5 290.5 294.5C335.5 294.5 359 378.5 391 378.5C423 378.5 436.5 363.9 436.5 317.5C436.5 271.1 397 165.5 385.5 137.5C374 109.5 345 92.0001 312.5 92.0001C286.5 92.0001 240 92.0001 220 92.0001",class:"gp-body"},null,-1)),l("path",{d:"m152.5,52.9702c0,4.61877 -3.358,8.36308 -7.5,8.36308l-13,0c-4.142,0 -7.5,-3.74432 -7.5,-8.36308l0,-22.8591c0,-8.62177 6.268,-15.6111 14,-15.6111c7.732,0 14,6.98932 14,15.6111l0,22.8591z",class:c(s(d.leftTrigger))},null,2),l("path",{d:"m316.83334,53.44044c0,4.6352 -3.43795,8.39285 -7.67857,8.39285l-13.30953,0c-4.24062,0 -7.67857,-3.75765 -7.67857,-8.39285l0,-22.94046c0,-8.65246 6.41724,-15.66665 14.33334,-15.66665c7.9161,0 14.33334,7.0142 14.33334,15.66665l0,22.94046l-0.00001,0z",class:c(s(d.rightTrigger))},null,2),l("rect",{x:"116.83332",y:"66.83335",width:"43.33334",height:"17.00004",rx:"6.5",class:c(m(d.buttons[4]))},null,2),n[4]||(n[4]=l("text",{x:"138.5",y:"79","text-anchor":"middle",class:"gp-shoulder-label"},"LB",-1)),l("rect",{x:"281.33334",y:"67",width:"42.66666",height:"17.00003",rx:"6.5",class:c(m(d.buttons[5]))},null,2),n[5]||(n[5]=D('<text x="302.5" y="79" text-anchor="middle" class="gp-shoulder-label" data-v-7d8f9ecf>RB</text><line x1="27.50001" y1="214.49998" x2="126.00001" y2="302.5" class="gp-grip-line" data-v-7d8f9ecf></line><line x1="306.59558" y1="200.43247" x2="410.73581" y2="295.73418" class="gp-grip-line" transform="rotate(89 358.666 248.083)" data-v-7d8f9ecf></line><circle cx="113" cy="160" r="37.5" class="gp-stick-well" data-v-7d8f9ecf></circle><circle cx="278" cy="238" r="37.5" class="gp-stick-well" data-v-7d8f9ecf></circle>',5)),l("g",{transform:`translate(${Z.value.cx-113}, ${Z.value.cy-160})`},[l("circle",{cx:"113",cy:"160",r:"28",class:c(["gp-stick-knob",{"gp-stick-knob--on":d.buttons[10]||v(d.leftX,d.leftY)}])},null,2),n[0]||(n[0]=l("circle",{cx:"113",cy:"160",r:"22",class:"gp-stick-ring-inner"},null,-1))],8,_2),l("g",{transform:`translate(${y.value.cx-278}, ${y.value.cy-238})`},[l("circle",{cx:"278",cy:"238",r:"28",class:c(["gp-stick-knob",{"gp-stick-knob--on":d.buttons[11]||v(d.rightX,d.rightY)}])},null,2),n[1]||(n[1]=l("circle",{cx:"278",cy:"238",r:"22",class:"gp-stick-ring-inner"},null,-1))],8,l8),n[6]||(n[6]=l("circle",{cx:"166",cy:"238",r:"37.5",class:"gp-stick-well"},null,-1)),l("rect",{x:"159",y:"211",width:"14",height:"20",class:c(m(d.buttons[12]))},null,2),l("rect",{x:"159",y:"244",width:"14",height:"20",class:c(m(d.buttons[13]))},null,2),l("rect",{x:"142",y:"228",width:"14",height:"20",transform:"rotate(-90 149 238)",class:c(m(d.buttons[14]))},null,2),l("rect",{x:"176",y:"228",width:"14",height:"20",transform:"rotate(-90 183 238)",class:c(m(d.buttons[15]))},null,2),n[7]||(n[7]=l("rect",{x:"159",y:"228",width:"14",height:"19",class:"gp-btn gp-btn--center"},null,-1)),n[8]||(n[8]=l("circle",{cx:"329",cy:"160",r:"37.5",class:"gp-stick-well"},null,-1)),l("circle",{cx:"329",cy:"140",r:"13",class:c(m(d.buttons[3]))},null,2),n[9]||(n[9]=l("text",{x:"329",y:"144","text-anchor":"middle",class:"gp-face-label"},"Y",-1)),l("circle",{cx:"310",cy:"162",r:"13",class:c(m(d.buttons[2]))},null,2),n[10]||(n[10]=l("text",{x:"310",y:"166","text-anchor":"middle",class:"gp-face-label"},"X",-1)),l("circle",{cx:"348",cy:"161",r:"13",class:c(m(d.buttons[1]))},null,2),n[11]||(n[11]=l("text",{x:"348",y:"165","text-anchor":"middle",class:"gp-face-label"},"B",-1)),l("circle",{cx:"330",cy:"181",r:"13",class:c(m(d.buttons[0]))},null,2),n[12]||(n[12]=l("text",{x:"330",y:"185","text-anchor":"middle",class:"gp-face-label"},"A",-1)),l("circle",{cx:"188",cy:"162",r:"10",class:c(m(d.buttons[8]))},null,2),n[13]||(n[13]=l("rect",{x:"184",y:"159",width:"8",height:"6",rx:"1",class:"gp-back-icon"},null,-1)),l("circle",{cx:"253",cy:"162",r:"10",class:c(m(d.buttons[9]))},null,2),n[14]||(n[14]=D('<g class="gp-menu-icon" pointer-events="none" data-v-7d8f9ecf><line x1="248" y1="158" x2="258" y2="158" data-v-7d8f9ecf></line><line x1="248" y1="162" x2="258" y2="162" data-v-7d8f9ecf></line><line x1="248" y1="166" x2="258" y2="166" data-v-7d8f9ecf></line></g><rect x="211.5" y="153" width="18" height="18" rx="9" class="gp-btn gp-btn--center" data-v-7d8f9ecf></rect><g class="gp-home-icon" pointer-events="none" data-v-7d8f9ecf><path d="M220.5 158 V164 M218 160.5 L220.5 158 L223 160.5 M218 166 H223" data-v-7d8f9ecf></path></g><circle cx="220.5" cy="125" r="14" class="gp-share-ring" data-v-7d8f9ecf></circle><path d="M215.5 125 L220.5 120 L225.5 125 V130 H215.5 Z" class="gp-share-icon" pointer-events="none" data-v-7d8f9ecf></path>',5))])]))]),n[15]||(n[15]=l("div",{class:"gp-legend"},[l("span",null,[l("i",{class:"dot on"}),X("按键按下")]),l("span",null,[l("i",{class:"dot"}),X("等待输入")])],-1))],2))}}),e8=J(t8,[["__scopeId","data-v-7d8f9ecf"]]);function s8(){return A0(),{monitor:h0(),ptz:L0,ptzControlEnabled:M0,voiceControlEnabled:b0,hwControlEnabled:$0,cameraConnected:V0,cameraPtz:y0,canPtz:Z0,deviceVolume:H0,loadCameraStatus:f0}}const n8={class:"gamepad-page uxp-page-stack uxp-page-fit"},i8={class:"status-card-main"},o8={class:"status-copy"},r8={class:"status-card-actions"},d8={class:"stat-strip"},u8={class:"gamepad-layout uxp-page-fit uxp-page-fit-stretch"},c8={class:"gamepad-main uxp-page-fit-stretch"},g8={class:"panel device-panel uxp-page-fit-stretch"},m8={class:"panel-hd panel-hd-row"},v8={class:"gp-slots",role:"tablist","aria-label":"手柄插槽"},p8=["aria-selected","onClick"],h8={key:0,class:"gp-slot-dot","aria-hidden":"true"},A8={class:"panel-bd device-panel-bd uxp-page-fit-stretch"},f8={class:"device-preview"},H8={class:"viz-wrap"},Z8={key:0,class:"device-hint"},y8={key:1,class:"device-meta"},V8={class:"device-mapping"},$8={class:"device-tags"},b8={class:"panel map-panel"},M8={class:"panel-hd"},L8={class:"panel-bd"},k8={class:"map-grid"},x8={class:"map-card"},w8={class:"map-card-hd"},S8={class:"map-card"},z8={class:"map-card-hd"},C8={class:"map-card"},B8={class:"map-card-hd"},T8={class:"map-card"},X8={class:"map-card-hd"},Y8={class:"map-card"},O8={class:"map-card"},P8={class:"map-card-hd"},N8={class:"gamepad-side"},E8={class:"panel link-panel"},R8={class:"panel-hd"},G8={class:"panel-bd"},D8={class:"link-list"},F8={class:"panel input-panel"},U8={class:"panel-hd"},j8={class:"panel-bd input-panel-bd"},W8={class:"metric-block"},q8={class:"stick-grid"},I8={class:"stick-cell"},K8={class:"stick-well"},Q8={class:"stick-cell"},J8={class:"stick-well"},_8={class:"metric-block"},l4={class:"trigger-grid"},a4={class:"trigger-cell"},t4={class:"trigger-bar"},e4={class:"trigger-cell"},s4={class:"trigger-bar is-rt"},n4={class:"metric-block"},i4={class:"drift-row"},o4={class:"drift-well"},r4={class:"drift-meta"},d4={class:"panel guide-panel"},u4={class:"panel-hd"},c4=x({__name:"Gamepad",setup(d){const e=c0(),{monitor:Z,ptz:y,ptzControlEnabled:h,voiceControlEnabled:m,hwControlEnabled:s,cameraConnected:v,cameraPtz:A,canPtz:n,deviceVolume:H}=s8(),M=Z.active,{status:V,input:g,slots:F,selectedSlot:P,selectSlot:_}=Z,l0=Array.from({length:16},()=>!1),S=r(()=>F.some(b=>b.connected)),U=r(()=>({idle:"空闲",listening:"聆听中",speaking:"播报中",connecting:"连接中",activating:"激活中"})[String(e.mossChatState)]||String(e.mossChatState)),a0=r(()=>M.value?V.connected?"手柄已连接 · 全局映射生效中":S.value?"手柄待激活":"等待手柄连接":"手柄监听已暂停"),t0=r(()=>M.value?V.connected?`${V.name} · 离开本页后映射仍后台运行`:S.value?"已检测到手柄,请按任意键完成浏览器激活":"USB 或蓝牙连接手柄后,按任意键激活":"开启后可在任意页面使用语音、灯光、音量与云台映射"),e0=r(()=>v.value&&A.value?"已连接 · 支持云台":v.value?"已连接 · 无云台":"未连接"),s0=r(()=>V.connected?`P${P.value+1} 已激活`:S.value?"待按键激活":"未连接"),n0=r(()=>Math.hypot(g.leftX,g.leftY)),N=r(()=>!V.connected||n0.value<.08),j=r(()=>V.connected?N.value?"中心正常":"检测到偏移":"等待输入"),E=r(()=>G.some(b=>e.hw[b])),i0=r(()=>{const b=G.filter(a=>e.hw[a]).length;return b?`${b} / ${G.length} 路灯亮`:"当前全关"}),Y=r(()=>e.hw.motor||e.hw.motor_dir==="forward"||e.hw.motor_dir==="backward"),W=r(()=>e.mossOnline&&m.value),q=r(()=>e.mossOnline&&s.value),I=r(()=>e.mossOnline?H.value==null?"读取中":`${H.value}%`:"需 MOSS 在线"),o0=r(()=>h.value?n.value?y.moving.value?y.moving.value.replace("_"," ").toUpperCase():"待命":"云台未就绪":"已关闭");function L(b){return b.toFixed(2)}function K(b){return b.toFixed(3)}function R(b,a){const k=Math.max(-1,Math.min(1,b))*38,f=Math.max(-1,Math.min(1,a))*38;return{transform:`translate(calc(-50% + ${k}%), calc(-50% + ${f}%))`}}const r0=r(()=>R(g.leftX,g.leftY)),d0=r(()=>R(g.rightX,g.rightY)),u0=r(()=>R(g.leftX,g.leftY));return(b,a)=>{const k=v0("el-switch");return i(),o("div",n8,[l("section",{class:c(["status-card",t(M)?t(V).connected?"is-ready":(S.value,"is-pending"):"is-pending"])},[l("div",i8,[a[6]||(a[6]=l("span",{class:"status-dot","aria-hidden":"true"},null,-1)),l("div",o8,[l("strong",null,u(a0.value),1),l("p",null,u(t0.value),1)])]),l("div",r8,[$(k,{modelValue:t(M),"onUpdate:modelValue":a[0]||(a[0]=f=>z(M)?M.value=f:null),"inline-prompt":"","active-text":"全局监听","inactive-text":"已暂停"},null,8,["modelValue"])])],2),l("div",d8,[l("article",{class:c(["stat-chip",t(e).mossOnline?"is-on":"is-off"])},[$(t(I2),{size:18,weight:"duotone"}),l("div",null,[a[7]||(a[7]=l("strong",null,"MOSS",-1)),l("p",null,u(t(e).mossOnline?U.value:"离线"),1)])],2),l("article",{class:c(["stat-chip",t(v)?"is-on":"is-off"])},[$(t(h1),{size:18,weight:"duotone"}),l("div",null,[a[8]||(a[8]=l("strong",null,"摄像头",-1)),l("p",null,u(e0.value),1)])],2),l("article",{class:c(["stat-chip",t(V).connected?"is-on":S.value?"is-pending":"is-off"])},[$(t(n2),{size:18,weight:"duotone"}),l("div",null,[a[9]||(a[9]=l("strong",null,"手柄",-1)),l("p",null,u(s0.value),1)])],2),l("article",{class:c(["stat-chip",N.value?"is-on":"is-warn"])},[$(t(Q),{size:18,weight:"duotone"}),l("div",null,[a[10]||(a[10]=l("strong",null,"摇杆中心",-1)),l("p",null,u(j.value),1)])],2)]),l("div",u8,[l("div",c8,[l("section",g8,[l("div",m8,[a[11]||(a[11]=l("span",null,"设备预览",-1)),l("div",v8,[(i(!0),o(g0,null,m0(t(F),f=>(i(),o("button",{key:f.index,type:"button",role:"tab",class:c(["gp-slot",{active:t(P)===f.index,linked:f.connected}]),"aria-selected":t(P)===f.index,onClick:g4=>t(_)(f.index)},[X(" P"+u(f.index+1)+" ",1),f.connected?(i(),o("i",h8)):w("",!0)],10,p8))),128))])]),l("div",A8,[l("div",f8,[l("div",H8,[$(e8,{fill:"",buttons:t(V).connected?t(g).buttons:t(l0),"left-x":t(V).connected?t(g).leftX:0,"left-y":t(V).connected?t(g).leftY:0,"right-x":t(V).connected?t(g).rightX:0,"right-y":t(V).connected?t(g).rightY:0,"left-trigger":t(V).connected?t(g).leftTrigger:0,"right-trigger":t(V).connected?t(g).rightTrigger:0},null,8,["buttons","left-x","left-y","right-x","right-y","left-trigger","right-trigger"])]),t(V).connected?(i(),o("div",y8,[l("p",V8,"映射模式:"+u(t(V).mapping||"标准"),1),l("div",$8,[l("span",null,"左摇杆 "+u(L(t(g).leftX))+", "+u(L(t(g).leftY)),1),l("span",null,"右摇杆 "+u(L(t(g).rightX))+", "+u(L(t(g).rightY)),1),l("span",null,"LT "+u(L(t(g).leftTrigger))+" · RT "+u(L(t(g).rightTrigger)),1)])])):(i(),o("p",Z8,u(S.value?"已检测到手柄,按任意键激活":"USB / 蓝牙连接后,按任意键激活"),1))])])]),l("section",b8,[l("div",M8,[$(t(p0),{size:18,weight:"duotone"}),a[12]||(a[12]=l("span",null,"按键映射",-1))]),l("div",L8,[a[31]||(a[31]=l("p",{class:"panel-desc"},[X("以下映射在"),l("strong",null,"全部页面"),X("后台生效,无需停留本页。可在右侧查看实时输入与联动状态。")],-1)),l("div",k8,[l("article",x8,[l("header",w8,[a[13]||(a[13]=l("span",{class:"key-badge"},"A",-1)),$(k,{modelValue:t(m),"onUpdate:modelValue":a[1]||(a[1]=f=>z(m)?m.value=f:null),disabled:!t(e).mossOnline,size:"small"},null,8,["modelValue","disabled"])]),a[14]||(a[14]=l("h3",null,"语音唤醒 / 挂断",-1)),a[15]||(a[15]=l("p",null,"空闲时唤醒 MOSS;聆听或播报中再次按下挂断。",-1)),l("footer",{class:c(W.value?"ft-on":"ft-off")},u(W.value?"可用":"需 MOSS 在线"),3)]),l("article",S8,[l("header",z8,[a[16]||(a[16]=l("span",{class:"key-badge"},"X",-1)),$(k,{modelValue:t(s),"onUpdate:modelValue":a[2]||(a[2]=f=>z(s)?s.value=f:null),disabled:!t(e).mossOnline,size:"small"},null,8,["modelValue","disabled"])]),a[17]||(a[17]=l("h3",null,"全部灯光",-1)),a[18]||(a[18]=l("p",null,"一键开关眼灯、流水灯、面板灯与底灯。",-1)),l("footer",{class:c(E.value?"ft-on":"ft-muted")},u(i0.value),3)]),l("article",C8,[l("header",B8,[a[19]||(a[19]=l("span",{class:"key-badge"},"B",-1)),$(k,{modelValue:t(s),"onUpdate:modelValue":a[3]||(a[3]=f=>z(s)?s.value=f:null),disabled:!t(e).mossOnline,size:"small"},null,8,["modelValue","disabled"])]),a[20]||(a[20]=l("h3",null,"眼部电机",-1)),a[21]||(a[21]=l("p",null,"启动正转;再次按下停止。",-1)),l("footer",{class:c(Y.value?"ft-on":"ft-muted")},u(Y.value?"运行中":"已停止"),3)]),l("article",T8,[l("header",X8,[a[22]||(a[22]=D('<span class="key-badges" data-v-781b1e70><span class="key-badge" data-v-781b1e70>LB</span><span class="key-badge key-badge--soft" data-v-781b1e70>A</span><span class="key-badge key-badge--soft" data-v-781b1e70>B</span><span class="key-badge key-badge--soft" data-v-781b1e70>X</span><span class="key-badge key-badge--soft" data-v-781b1e70>Y</span></span>',1)),$(k,{modelValue:t(s),"onUpdate:modelValue":a[4]||(a[4]=f=>z(s)?s.value=f:null),disabled:!t(e).mossOnline,size:"small"},null,8,["modelValue","disabled"])]),a[23]||(a[23]=l("h3",null,"灯光分控",-1)),a[24]||(a[24]=l("p",null,"按住 LB,再点 A 眼灯、B 流水灯、X 面板灯、Y 底灯。按住期间不会触发语音、全灯或电机。",-1)),l("footer",{class:c(q.value?"ft-on":"ft-off")},u(q.value?"可用":"需 MOSS 在线且开启灯光控制"),3)]),l("article",Y8,[a[25]||(a[25]=l("header",{class:"map-card-hd"},[l("span",{class:"key-badges"},[l("span",{class:"key-badge"},"LT"),l("span",{class:"key-badge"},"RT")])],-1)),a[26]||(a[26]=l("h3",null,"设备音量",-1)),a[27]||(a[27]=l("p",null,"LT 减、RT 加,每次 5%。按住连续调节,到顶或到底时提示一次。",-1)),l("footer",{class:c(t(e).mossOnline?"ft-on":"ft-off")},u(I.value),3)]),l("article",O8,[l("header",P8,[a[28]||(a[28]=l("span",{class:"key-badge key-badge--soft"},"◎",-1)),$(k,{modelValue:t(h),"onUpdate:modelValue":a[5]||(a[5]=f=>z(h)?h.value=f:null),size:"small"},null,8,["modelValue"])]),a[29]||(a[29]=l("h3",null,"云台控制",-1)),a[30]||(a[30]=l("p",null,"左摇杆或方向键平移。本机摄像头无变焦。",-1)),l("footer",{class:c(t(n)&&t(h)?"ft-on":"ft-off")},u(o0.value),3)])])])])]),l("aside",N8,[l("section",E8,[l("div",R8,[$(t(k2),{size:18,weight:"duotone"}),a[32]||(a[32]=l("span",null,"联动状态",-1))]),l("div",G8,[l("ul",D8,[l("li",null,[a[33]||(a[33]=l("span",null,"语音链路",-1)),l("strong",{class:c(t(e).mossOnline?"ok":"muted")},u(U.value),3)]),l("li",null,[a[34]||(a[34]=l("span",null,"云台",-1)),l("strong",{class:c(t(n)?"ok":"muted")},u(t(n)?"就绪":"不可用"),3)]),l("li",null,[a[35]||(a[35]=l("span",null,"灯光",-1)),l("strong",{class:c(E.value?"ok":"muted")},u(E.value?"部分开启":"全关"),3)]),l("li",null,[a[36]||(a[36]=l("span",null,"电机",-1)),l("strong",{class:c(Y.value?"ok":"muted")},u(Y.value?"运行":"停止"),3)]),l("li",null,[a[37]||(a[37]=l("span",null,"音量",-1)),l("strong",{class:c(t(e).mossOnline?"ok":"muted")},u(I.value),3)])])])]),l("section",F8,[l("div",U8,[$(t(Q),{size:18,weight:"duotone"}),a[38]||(a[38]=l("span",null,"输入检测",-1))]),l("div",j8,[l("div",W8,[a[41]||(a[41]=l("div",{class:"metric-label"},"摇杆",-1)),l("div",q8,[l("div",I8,[a[39]||(a[39]=l("span",null,"左",-1)),l("div",K8,[l("i",{class:"stick-dot",style:T(r0.value)},null,4)]),l("code",null,u(L(t(g).leftX))+", "+u(L(t(g).leftY)),1)]),l("div",Q8,[a[40]||(a[40]=l("span",null,"右",-1)),l("div",J8,[l("i",{class:"stick-dot",style:T(d0.value)},null,4)]),l("code",null,u(L(t(g).rightX))+", "+u(L(t(g).rightY)),1)])])]),l("div",_8,[a[44]||(a[44]=l("div",{class:"metric-label"},"扳机",-1)),l("div",l4,[l("div",a4,[l("div",t4,[l("i",{style:T({height:`${t(g).leftTrigger*100}%`})},null,4)]),l("code",null,u(L(t(g).leftTrigger)),1),a[42]||(a[42]=l("em",null,"LT",-1))]),l("div",e4,[l("div",s4,[l("i",{style:T({height:`${t(g).rightTrigger*100}%`})},null,4)]),l("code",null,u(L(t(g).rightTrigger)),1),a[43]||(a[43]=l("em",null,"RT",-1))])])]),l("div",n4,[a[45]||(a[45]=l("div",{class:"metric-label"},"漂移检测",-1)),l("div",i4,[l("div",o4,[l("i",{class:"drift-dot",style:T(u0.value)},null,4)]),l("div",r4,[l("code",null,"X "+u(K(t(g).leftX)),1),l("code",null,"Y "+u(K(t(g).leftY)),1),l("span",{class:c(N.value?"ok":"warn")},u(j.value),3)])])])])]),l("section",d4,[l("div",u4,[$(t(q0),{size:18,weight:"duotone"}),a[46]||(a[46]=l("span",null,"使用说明",-1))]),a[47]||(a[47]=l("div",{class:"panel-bd"},[l("ol",{class:"guide-list"},[l("li",null,"连接手柄后,在任意页面按一次按键完成浏览器激活。"),l("li",null,"保持顶部「全局监听」开启,即可在其他页面使用映射。"),l("li",null,"按住 LB 再按 A / B / X / Y,可单独开关四盏灯。"),l("li",null,"LT 减音量、RT 加音量;云台用左摇杆或方向键,不再用肩键变焦。"),l("li",null,"若摇杆漂移,可在本页查看中心偏移量并校准手柄。")])],-1))])])])])}}}),y4=J(c4,[["__scopeId","data-v-781b1e70"]]);export{y4 as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.gp-viz[data-v-7d8f9ecf]{display:flex;flex-direction:column;align-items:center;gap:12px;width:auto;flex-shrink:0}.gp-viz-frame[data-v-7d8f9ecf]{position:relative;width:min(100%,420px);max-width:420px;aspect-ratio:441 / 383;display:flex;align-items:center;justify-content:center}.gp-viz.compact .gp-viz-frame[data-v-7d8f9ecf]{width:min(100%,320px);max-width:320px}.gp-viz.fill[data-v-7d8f9ecf]{height:100%;max-height:100%}.gp-viz.fill .gp-viz-frame[data-v-7d8f9ecf]{height:100%;width:auto;max-width:100%;max-height:100%}.gp-viz-svg[data-v-7d8f9ecf]{width:100%;height:100%;filter:drop-shadow(0 10px 24px rgb(0 0 0 / .08))}.gp-body[data-v-7d8f9ecf]{fill:#f5f5f4;stroke:#d6d3d1;stroke-width:3}.gp-btn[data-v-7d8f9ecf]{fill:#e7e5e4;stroke:#d6d3d1;stroke-width:2;transition:fill .15s,stroke .15s}.gp-btn--on[data-v-7d8f9ecf]{fill:#3b82f6;stroke:#2563eb}.gp-btn--center[data-v-7d8f9ecf]{fill:#e7e5e4;stroke:none}.gp-shoulder-label[data-v-7d8f9ecf]{fill:#a8a29e;font-size:10px;font-weight:700;pointer-events:none}.gp-grip-line[data-v-7d8f9ecf]{stroke:#e7e5e4;stroke-width:2}.gp-stick-well[data-v-7d8f9ecf]{fill:#fafaf9;stroke:#e7e5e4;stroke-width:2}.gp-stick-knob[data-v-7d8f9ecf]{fill:#d6d3d1;stroke:#fff;stroke-width:2;transition:fill .1s}.gp-stick-knob--on[data-v-7d8f9ecf]{fill:#3b82f6;stroke:#fff}.gp-stick-ring-inner[data-v-7d8f9ecf]{fill:none;stroke:#0000000d;stroke-width:2}.gp-face-label[data-v-7d8f9ecf]{fill:#fff;font-size:12px;font-weight:900;pointer-events:none}.gp-back-icon[data-v-7d8f9ecf]{fill:none;stroke:#a8a29e;stroke-width:1.5;pointer-events:none}.gp-menu-icon line[data-v-7d8f9ecf]{stroke:#a8a29e;stroke-width:1.5}.gp-home-icon path[data-v-7d8f9ecf]{fill:none;stroke:#a8a29e;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.gp-share-ring[data-v-7d8f9ecf]{fill:#f5f5f4;stroke:#e7e5e4;stroke-width:2}.gp-share-icon[data-v-7d8f9ecf]{fill:none;stroke:#d6d3d1;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.gp-legend[data-v-7d8f9ecf]{display:flex;gap:20px;font-size:12px;color:#909399}.gp-legend span[data-v-7d8f9ecf]{display:inline-flex;align-items:center;gap:6px}.gp-legend .dot[data-v-7d8f9ecf]{width:8px;height:8px;border-radius:50%;background:#d6d3d1}.gp-legend .dot.on[data-v-7d8f9ecf]{background:#3b82f6}.gamepad-page[data-v-781b1e70]{display:flex;flex-direction:column;flex:1 1 auto;min-height:100%;min-width:0;height:auto}.status-card[data-v-781b1e70],.stat-strip[data-v-781b1e70]{flex-shrink:0}.status-card[data-v-781b1e70]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;border-radius:var(--radius);border:1px solid var(--border-color);background:#fff}.status-card.is-ready[data-v-781b1e70]{border-color:#e1f3d8;background:#f6ffed}.status-card.is-pending[data-v-781b1e70]{border-color:#faecd8;background:#fffbf5}.status-card-main[data-v-781b1e70]{display:flex;align-items:flex-start;gap:12px;min-width:0}.status-dot[data-v-781b1e70]{width:8px;height:8px;margin-top:7px;border-radius:50%;flex-shrink:0;background:var(--warn)}.status-card.is-ready .status-dot[data-v-781b1e70]{background:var(--ok)}.status-copy strong[data-v-781b1e70]{display:block;font-size:14px;color:var(--text-primary)}.status-copy p[data-v-781b1e70]{margin:4px 0 0;font-size:13px;color:var(--text-secondary);line-height:1.6}.status-card-actions[data-v-781b1e70]{flex-shrink:0}.stat-strip[data-v-781b1e70]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.stat-chip[data-v-781b1e70]{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:var(--radius);border:1px solid var(--border-color);background:#fff;color:var(--text-secondary)}.stat-chip strong[data-v-781b1e70]{display:block;font-size:13px;color:var(--text-primary)}.stat-chip p[data-v-781b1e70]{margin:2px 0 0;font-size:12px;line-height:1.4}.stat-chip.is-on[data-v-781b1e70]{border-color:#e1f3d8;background:#fafff7;color:var(--ok)}.stat-chip.is-pending[data-v-781b1e70]{border-color:#faecd8;background:#fffbf5;color:var(--warn)}.stat-chip.is-warn[data-v-781b1e70]{border-color:#fde2e2;background:#fff5f5;color:var(--danger)}.stat-chip.is-off[data-v-781b1e70]{color:var(--text-secondary)}.gamepad-layout[data-v-781b1e70]{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;flex:1 1 auto;min-height:auto;align-items:stretch}.gamepad-main[data-v-781b1e70]{display:flex;flex-direction:column;gap:16px;min-height:auto}.device-panel[data-v-781b1e70]{flex:1 1 auto;min-height:280px;display:flex;flex-direction:column}.map-panel[data-v-781b1e70]{flex-shrink:0}.device-panel-bd[data-v-781b1e70]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;padding-top:4px!important}.device-preview[data-v-781b1e70]{display:flex;flex-direction:column;align-items:center;gap:14px;flex:1;min-height:0}.viz-wrap[data-v-781b1e70]{width:100%;flex:1;min-height:0;padding:16px 20px 8px;border-radius:var(--radius);border:1px solid var(--border-color);background:#fafafa;display:flex;align-items:center;justify-content:center}.device-meta[data-v-781b1e70]{width:100%;flex-shrink:0;text-align:center}.device-hint[data-v-781b1e70]{flex-shrink:0}.device-mapping[data-v-781b1e70],.device-hint[data-v-781b1e70]{margin:0;font-size:13px;color:var(--text-secondary);line-height:1.5}.device-tags[data-v-781b1e70]{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:10px}.device-tags span[data-v-781b1e70]{padding:4px 10px;border-radius:6px;background:#f5f7fa;font-size:12px;color:var(--text-regular);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap}.panel-desc[data-v-781b1e70]{margin:0 0 14px;font-size:13px;color:var(--text-secondary);line-height:1.6}.panel-desc strong[data-v-781b1e70]{color:var(--text-primary);font-weight:600}.map-grid[data-v-781b1e70]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.map-card[data-v-781b1e70]{padding:14px;border-radius:var(--radius);border:1px solid var(--border-color);background:#fafafa}.map-card-hd[data-v-781b1e70]{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:10px}.map-card h3[data-v-781b1e70]{margin:0 0 6px;font-size:14px;color:var(--text-primary)}.map-card p[data-v-781b1e70]{margin:0;font-size:12px;color:var(--text-secondary);line-height:1.5}.map-card footer[data-v-781b1e70]{margin-top:12px;font-size:12px;font-weight:600}.map-card footer.ft-on[data-v-781b1e70]{color:var(--ok)}.map-card footer.ft-off[data-v-781b1e70]{color:var(--warn)}.map-card footer.ft-muted[data-v-781b1e70]{color:var(--text-secondary)}.gamepad-side[data-v-781b1e70]{display:flex;flex-direction:column;gap:16px;min-height:auto}.link-panel[data-v-781b1e70],.guide-panel[data-v-781b1e70]{flex-shrink:0}.input-panel[data-v-781b1e70],.input-panel-bd[data-v-781b1e70]{flex:1 1 auto;min-height:auto;display:flex;flex-direction:column}.input-panel-bd .metric-block[data-v-781b1e70]{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:center}.input-panel-bd .metric-block+.metric-block[data-v-781b1e70]{margin-top:0;padding-top:12px;border-top:1px solid #f0f2f5}.input-panel-bd .stick-grid[data-v-781b1e70],.input-panel-bd .trigger-grid[data-v-781b1e70]{flex:1;min-height:0;align-items:center}.input-panel-bd .stick-well[data-v-781b1e70],.input-panel-bd .drift-well[data-v-781b1e70]{height:clamp(72px,100%,120px);width:clamp(72px,40%,120px);max-width:120px}.input-panel-bd .trigger-bar[data-v-781b1e70]{height:clamp(72px,100%,120px);width:clamp(32px,18%,44px)}.input-panel-bd .drift-row[data-v-781b1e70]{flex:1;min-height:0;align-items:center}.gp-slots[data-v-781b1e70]{display:flex;gap:6px}.gp-slot[data-v-781b1e70]{position:relative;min-width:36px;height:28px;padding:0 8px;border:1px solid var(--border-color);border-radius:6px;background:#fff;font-size:12px;font-weight:600;color:var(--text-secondary);cursor:pointer}.gp-slot.linked[data-v-781b1e70]{color:var(--text-primary)}.gp-slot.active[data-v-781b1e70]{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.gp-slot-dot[data-v-781b1e70]{position:absolute;top:3px;right:3px;width:5px;height:5px;border-radius:50%;background:var(--ok)}.key-badge[data-v-781b1e70]{flex-shrink:0;min-width:28px;height:28px;padding:0 6px;border-radius:6px;display:grid;place-items:center;font-size:12px;font-weight:700;color:#fff;background:var(--accent)}.key-badges[data-v-781b1e70]{display:flex;flex-wrap:wrap;gap:4px;min-width:0}.key-badge--soft[data-v-781b1e70]{background:var(--accent-soft);color:var(--accent)}.link-list[data-v-781b1e70]{list-style:none;margin:0;padding:0}.link-list li[data-v-781b1e70]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid #f0f2f5;font-size:13px}.link-list li[data-v-781b1e70]:first-child{border-top:none;padding-top:0}.link-list span[data-v-781b1e70]{color:var(--text-secondary)}.link-list strong[data-v-781b1e70]{font-weight:600}.link-list strong.ok[data-v-781b1e70]{color:var(--ok)}.link-list strong.muted[data-v-781b1e70]{color:var(--text-secondary)}.metric-block+.metric-block[data-v-781b1e70]{margin-top:14px;padding-top:14px;border-top:1px solid #f0f2f5}.metric-label[data-v-781b1e70]{margin-bottom:8px;font-size:12px;font-weight:600;color:var(--text-secondary)}.stick-grid[data-v-781b1e70],.trigger-grid[data-v-781b1e70]{display:grid;grid-template-columns:1fr 1fr;gap:10px}.stick-cell[data-v-781b1e70],.trigger-cell[data-v-781b1e70]{text-align:center}.stick-cell>span[data-v-781b1e70]{display:block;margin-bottom:4px;font-size:12px;color:var(--text-secondary)}.stick-well[data-v-781b1e70],.drift-well[data-v-781b1e70]{position:relative;height:72px;margin:0 auto 4px;max-width:72px;border-radius:50%;border:1px solid #e4e7ed;background:#fff}.stick-well[data-v-781b1e70]:before,.stick-well[data-v-781b1e70]:after,.drift-well[data-v-781b1e70]:before,.drift-well[data-v-781b1e70]:after{content:"";position:absolute;background:#ebeef5;pointer-events:none}.stick-well[data-v-781b1e70]:before,.drift-well[data-v-781b1e70]:before{top:50%;left:14%;right:14%;height:1px;transform:translateY(-50%)}.stick-well[data-v-781b1e70]:after,.drift-well[data-v-781b1e70]:after{left:50%;top:14%;bottom:14%;width:1px;transform:translate(-50%)}.stick-dot[data-v-781b1e70],.drift-dot[data-v-781b1e70]{position:absolute;top:50%;left:50%;width:10px;height:10px;border-radius:50%;background:#3b82f6;transition:transform 40ms linear}.stick-cell code[data-v-781b1e70],.trigger-cell code[data-v-781b1e70]{font-size:11px;color:var(--text-regular)}.trigger-bar[data-v-781b1e70]{width:32px;height:72px;margin:0 auto 4px;border-radius:8px;border:1px solid #e4e7ed;background:#fff;overflow:hidden;position:relative}.trigger-bar i[data-v-781b1e70]{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(180deg,#93d875,#67c23a);transition:height 40ms linear}.trigger-bar.is-rt i[data-v-781b1e70]{background:linear-gradient(180deg,#79bbff,#409eff)}.trigger-cell em[data-v-781b1e70]{font-size:11px;font-style:normal;color:var(--text-secondary)}.drift-row[data-v-781b1e70]{display:flex;align-items:center;gap:12px}.drift-well[data-v-781b1e70]{flex-shrink:0;width:72px;height:72px;margin:0}.drift-meta[data-v-781b1e70]{display:flex;flex-direction:column;gap:4px;font-size:12px}.drift-meta span.ok[data-v-781b1e70]{color:var(--ok);font-weight:600}.drift-meta span.warn[data-v-781b1e70]{color:var(--warn);font-weight:600}.guide-list[data-v-781b1e70]{margin:0;padding-left:18px;font-size:13px;color:var(--text-secondary);line-height:1.7}.guide-list li+li[data-v-781b1e70]{margin-top:6px}@media(max-width:1100px){.stat-strip[data-v-781b1e70]{grid-template-columns:repeat(2,minmax(0,1fr))}.map-grid[data-v-781b1e70]{grid-template-columns:1fr}}@media(max-width:960px){.gamepad-layout[data-v-781b1e70]{grid-template-columns:1fr}.device-panel[data-v-781b1e70],.input-panel[data-v-781b1e70]{flex:none;min-height:320px}}@media(max-width:640px){.status-card[data-v-781b1e70]{flex-direction:column;align-items:stretch}.status-card-actions[data-v-781b1e70]{display:flex;justify-content:flex-end}.stat-strip[data-v-781b1e70]{grid-template-columns:1fr}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.hardware-page[data-v-e2ed0c00]{display:flex;flex-direction:column;flex:none;width:100%;min-height:100%;height:auto;min-width:0}.hardware-page[data-v-e2ed0c00] .panel{overflow:visible}.status-card[data-v-e2ed0c00]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;border-radius:var(--radius);border:1px solid var(--border-color);background:#fff;flex-shrink:0}.status-card.is-ready[data-v-e2ed0c00]{border-color:#e1f3d8;background:#f6ffed}.status-card.is-offline[data-v-e2ed0c00]{border-color:#faecd8;background:#fffbf5}.status-card.is-error[data-v-e2ed0c00]{border-color:#fde2e2;background:#fef0f0}.status-card.is-error .status-dot[data-v-e2ed0c00]{background:var(--danger, #f56c6c)}.status-card-main[data-v-e2ed0c00]{display:flex;align-items:flex-start;gap:12px;min-width:0}.status-dot[data-v-e2ed0c00]{width:8px;height:8px;margin-top:7px;border-radius:50%;flex-shrink:0;background:var(--warn)}.status-card.is-ready .status-dot[data-v-e2ed0c00]{background:var(--ok)}.status-copy strong[data-v-e2ed0c00]{display:block;font-size:14px;color:var(--text-primary)}.status-copy p[data-v-e2ed0c00]{margin:4px 0 0;font-size:13px;color:var(--text-secondary);line-height:1.5}.fw-badge[data-v-e2ed0c00]{flex-shrink:0;padding:4px 10px;border-radius:6px;font-size:12px;color:var(--accent);background:var(--accent-soft)}.hw-layout[data-v-e2ed0c00]{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;flex:none;width:100%;min-height:auto;overflow:visible;align-items:stretch}.hw-main[data-v-e2ed0c00]{display:flex;flex-direction:column;gap:16px;min-width:0;min-height:auto}.panel-audio[data-v-e2ed0c00]{flex-shrink:0}.panel-wake[data-v-e2ed0c00],.wake-panel-bd[data-v-e2ed0c00],.wake-body[data-v-e2ed0c00]{flex:0 1 auto;min-height:auto;display:flex;flex-direction:column}.hw-side[data-v-e2ed0c00]{display:flex;flex-direction:column;gap:16px;min-height:auto}.panel-hd-title[data-v-e2ed0c00]{display:flex;align-items:center;gap:8px}.head-actions[data-v-e2ed0c00]{display:flex;gap:8px;margin-left:auto}.head-actions[data-v-e2ed0c00] .el-button{display:inline-flex;align-items:center;gap:4px}.panel-desc[data-v-e2ed0c00]{margin:0 0 12px;font-size:13px;color:var(--text-secondary);line-height:1.5}.setting-list[data-v-e2ed0c00]{list-style:none;margin:0;padding:0}.setting-item[data-v-e2ed0c00]{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:14px 0;border-bottom:1px solid #f0f2f5}.setting-item[data-v-e2ed0c00]:last-child{border-bottom:none;padding-bottom:0}.setting-item[data-v-e2ed0c00]:first-child{padding-top:0}.setting-item.inline[data-v-e2ed0c00]{flex:1;min-width:0;padding:0;border:none}.setting-text[data-v-e2ed0c00]{min-width:0;flex-shrink:0}.setting-text strong[data-v-e2ed0c00]{display:block;font-size:14px;font-weight:600;color:var(--text-primary)}.setting-text p[data-v-e2ed0c00]{margin:3px 0 0;font-size:12px;color:var(--text-secondary);line-height:1.5}.setting-action[data-v-e2ed0c00]{display:flex;align-items:center;gap:12px;flex-shrink:0}.setting-action.wide[data-v-e2ed0c00]{width:220px}.setting-action.wide[data-v-e2ed0c00] .el-slider{flex:1}.setting-value[data-v-e2ed0c00]{min-width:40px;text-align:right;font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--accent)}.voice-box[data-v-e2ed0c00]{padding:14px;border-radius:8px;border:1px solid var(--border-color);background:#fafafa;display:flex;flex-direction:column;gap:12px}.voice-status-row[data-v-e2ed0c00]{display:flex;align-items:flex-start;gap:12px;min-width:0}.voice-dot[data-v-e2ed0c00]{width:10px;height:10px;margin-top:4px;border-radius:50%;flex-shrink:0;background:#c0c4cc;transition:background .2s,box-shadow .2s}.voice-dot.on[data-v-e2ed0c00]{background:var(--ok);box-shadow:0 0 0 4px #67c23a2e}.voice-dot.pending[data-v-e2ed0c00]{background:var(--warn);box-shadow:0 0 0 4px #e6a23c33;animation:voice-dot-pulse-e2ed0c00 1.2s ease-in-out infinite}@keyframes voice-dot-pulse-e2ed0c00{0%,to{opacity:1}50%{opacity:.45}}.voice-status-text[data-v-e2ed0c00]{display:flex;flex-direction:column;gap:2px;min-width:0}.voice-status-text strong[data-v-e2ed0c00]{font-size:13px;font-weight:600;color:var(--text-primary)}.voice-status-text span[data-v-e2ed0c00]{font-size:12px;color:var(--text-secondary);line-height:1.45}.voice-seg[data-v-e2ed0c00]{display:flex;width:100%;padding:3px;border-radius:8px;background:#eef0f3;gap:2px}.voice-seg .seg-btn[data-v-e2ed0c00]{flex:1;min-width:0;padding:8px 10px;font-size:13px}.voice-seg .seg-btn.voice-end.active[data-v-e2ed0c00]:not(:disabled){background:#fff;color:#c45656;box-shadow:0 1px 3px #00000014}.voice-seg .seg-btn.voice-wake[data-v-e2ed0c00]:not(:disabled):hover{color:var(--accent)}.voice-seg .seg-btn.loading[data-v-e2ed0c00]{opacity:.65;cursor:wait}.phrase-grid[data-v-e2ed0c00]{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-auto-rows:auto;gap:12px}.phrase-card[data-v-e2ed0c00]{display:flex;flex-direction:column;gap:8px;padding:14px 16px;border:1px solid var(--border-color);border-radius:8px;background:#fff;transition:border-color .2s,box-shadow .2s;min-height:auto}.phrase-card[data-v-e2ed0c00]:hover{border-color:#dcd6f7;box-shadow:0 4px 14px #5b4cdb14}.phrase-card-hd[data-v-e2ed0c00]{display:flex;align-items:center;justify-content:space-between}.phrase-index[data-v-e2ed0c00]{display:grid;place-items:center;width:24px;height:24px;border-radius:6px;font-size:12px;font-weight:700;color:var(--accent);background:var(--accent-soft)}.field-label[data-v-e2ed0c00]{font-size:12px;color:var(--text-secondary)}.field-hint[data-v-e2ed0c00]{margin:-4px 0 6px;font-size:11px;color:var(--text-tertiary, #909399)}.wake-save-bar[data-v-e2ed0c00]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:14px;border-top:1px solid #f0f2f5;flex-shrink:0}.periph-list[data-v-e2ed0c00]{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.periph-card[data-v-e2ed0c00]{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border:1px solid var(--border-color);border-radius:8px;background:#fff;cursor:pointer;text-align:left;transition:border-color .2s,background .2s,box-shadow .2s}.periph-card[data-v-e2ed0c00]:hover:not(:disabled){border-color:#dcd6f7;box-shadow:0 2px 8px #5b4cdb0f}.periph-card.on[data-v-e2ed0c00]{border-color:#5b4cdb59;background:var(--accent-soft)}.periph-card[data-v-e2ed0c00]:disabled{opacity:.5;cursor:not-allowed}.periph-icon[data-v-e2ed0c00]{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--accent-soft);color:var(--accent)}.periph-icon.bar[data-v-e2ed0c00]{background:#e8f4ff;color:#2b6cb0}.periph-icon.panel[data-v-e2ed0c00]{background:#fff3e8;color:#c05621}.periph-icon.bottom[data-v-e2ed0c00]{background:#eef2f6;color:#4b5163}.periph-body[data-v-e2ed0c00]{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.periph-body strong[data-v-e2ed0c00]{font-size:14px;color:var(--text-primary)}.periph-body span[data-v-e2ed0c00]{font-size:12px;color:var(--text-secondary)}.periph-card.on .periph-body span[data-v-e2ed0c00]{color:var(--accent)}.periph-dot[data-v-e2ed0c00]{width:8px;height:8px;border-radius:50%;background:#dcdfe6;flex-shrink:0;transition:background .2s,box-shadow .2s}.periph-dot.on[data-v-e2ed0c00]{background:var(--ok);box-shadow:0 0 0 3px #67c23a33}.motor-box[data-v-e2ed0c00]{padding:14px;border-radius:8px;border:1px solid var(--border-color);background:#fafafa;display:flex;flex-direction:column;gap:12px}.motor-box-hd[data-v-e2ed0c00]{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--text-primary)}.motor-seg[data-v-e2ed0c00]{display:flex;padding:3px;border-radius:8px;background:#eef0f3}.seg-btn[data-v-e2ed0c00]{flex:1;padding:7px 0;border:none;border-radius:6px;background:transparent;font-size:13px;font-weight:500;color:var(--text-regular);cursor:pointer;transition:background .15s,color .15s,box-shadow .15s}.seg-btn.active[data-v-e2ed0c00]{background:#fff;color:var(--accent);box-shadow:0 1px 3px #00000014}.seg-btn[data-v-e2ed0c00]:disabled{opacity:.45;cursor:not-allowed}.motor-speed-row[data-v-e2ed0c00]{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;font-size:12px;color:var(--text-secondary)}.motor-speed-row[data-v-e2ed0c00] .el-slider,.meta-list[data-v-e2ed0c00]{margin:0}.meta-row[data-v-e2ed0c00]{display:flex;flex-direction:column;gap:4px;padding:10px 0;border-bottom:1px solid #f0f2f5}.meta-row[data-v-e2ed0c00]:last-child{border-bottom:none;padding-bottom:0}.meta-row[data-v-e2ed0c00]:first-child{padding-top:0}.meta-row dt[data-v-e2ed0c00]{font-size:12px;color:var(--text-secondary)}.meta-row dd[data-v-e2ed0c00]{margin:0}.meta-row code[data-v-e2ed0c00]{font-size:13px;color:var(--text-primary);word-break:break-all}@media(max-width:960px){.hw-layout[data-v-e2ed0c00]{grid-template-columns:1fr;align-items:start}.hw-side[data-v-e2ed0c00]{min-height:auto}.setting-item[data-v-e2ed0c00]{flex-direction:column;align-items:stretch;gap:10px}.setting-action.wide[data-v-e2ed0c00]{width:100%}.wake-save-bar[data-v-e2ed0c00]{flex-direction:column;align-items:stretch}}@media(min-width:961px){.hardware-page[data-v-e2ed0c00]{flex:1 1 auto;min-height:100%;height:100%}.hw-layout[data-v-e2ed0c00]{flex:1 1 auto;min-height:0;overflow:visible}.hw-main[data-v-e2ed0c00]{min-height:0;height:100%}.panel-wake[data-v-e2ed0c00],.wake-panel-bd[data-v-e2ed0c00],.wake-body[data-v-e2ed0c00]{flex:1 1 auto;min-height:0;overflow:hidden}.phrase-grid[data-v-e2ed0c00]{flex:1 1 auto;min-height:0;overflow:auto;grid-auto-rows:minmax(140px,1fr);align-content:stretch}.phrase-card[data-v-e2ed0c00]{min-height:0}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as F,Q as p,D as l,f as i,R as U,v as S,A as I,c as u,g as e,u as T0,e as E0,x as D0,t as f,p as z,h as v,l as A,i as B,K as Y,F as e0,s as c0,Y as F0,r as k,X as j0,a as E,J as $,L as W,V as U0,q as D,S as I0,Z as q0,_ as G0}from"./index-CMys3a7t.js";import{H as J0}from"./PhLightning.vue-CGapFt6a.js";import{I as K0}from"./PhPlus.vue-C5oKtsK_.js";import{G as Q0}from"./PhSpeakerHigh.vue-Ap9TeeHp.js";import"./mpegts-D4BrshwP.js";import"./esp-flasher-Dm2UeoOa.js";const R0=["width","height","fill","transform"],X0={key:0},Y0=e("path",{d:"M204.37,51.6A108.08,108.08,0,1,0,236,128,108.09,108.09,0,0,0,204.37,51.6ZM176,197a83.43,83.43,0,0,1-16,8.75V113l16-16ZM68.6,68.58A84.08,84.08,0,0,1,178.3,60.7L60.72,178.33A84.08,84.08,0,0,1,68.6,68.58ZM96,177v28.69A83.63,83.63,0,0,1,77.7,195.3Zm24,34.62V153l16-16v74.64A84.68,84.68,0,0,1,120,211.62Zm80-40.27V84.65a84.24,84.24,0,0,1,0,86.7Z"},null,-1),ee=[Y0],ae={key:1},se=e("path",{d:"M195.88,195.88a96,96,0,0,1-135.76,0L195.88,60.12A96,96,0,0,1,195.88,195.88Z",opacity:"0.2"},null,-1),te=e("path",{d:"M201.54,54.46A104,104,0,0,0,54.46,201.54,104,104,0,0,0,201.54,54.46ZM65.78,65.77A88.08,88.08,0,0,1,184.3,60.39L60.38,184.31a88,88,0,0,1,5.4-118.54ZM190.22,190.23A88.1,88.1,0,0,1,71.7,195.61L195.62,71.69a88,88,0,0,1-5.4,118.54Z"},null,-1),le=[se,te],oe={key:2},ne=e("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM40,128A88,88,0,0,1,190.2,65.8L65.8,190.2A87.76,87.76,0,0,1,40,128Z"},null,-1),ie=[ne],re={key:3},de=e("path",{d:"M200.12,55.88A102,102,0,1,0,55.88,200.13,102,102,0,1,0,200.12,55.88ZM90,209.62a89.61,89.61,0,0,1-21.23-13.89L90,174.49Zm32,8.16a90,90,0,0,1-20-3.58V162.49l20-20Zm32-3.58a89.8,89.8,0,0,1-20,3.58V130.49l20-20Zm32-17.4a89.45,89.45,0,0,1-20,12.83V98.49l20-20ZM60.27,187.24a90,90,0,0,1,127-127ZM198,184.57V71.43a90,90,0,0,1,0,113.14Z"},null,-1),ue=[de],ce={key:4},me=e("path",{d:"M201.54,54.46A104,104,0,0,0,54.46,201.54,104,104,0,0,0,201.54,54.46ZM184,195.87a87.16,87.16,0,0,1-16,10.5V99.31l16-16Zm-80-32.56,16-16v68.28a88.37,88.37,0,0,1-16-3ZM88,206.37a87,87,0,0,1-16.3-10.76L88,179.31Zm48-75.06,16-16v97.32a88.37,88.37,0,0,1-16,3ZM40,128A88,88,0,0,1,184.3,60.39L60.38,184.31A87.34,87.34,0,0,1,40,128Zm160,50.59V77.41a88,88,0,0,1,0,101.18Z"},null,-1),ve=[me],he={key:5},pe=e("path",{d:"M198.71,57.29A100,100,0,1,0,57.29,198.71,100,100,0,1,0,198.71,57.29ZM188,197.72a91.35,91.35,0,0,1-24,15v-115l24-24Zm-88-36.06,24-24V219.9a91.91,91.91,0,0,1-24-4.24Zm-8,51a91.69,91.69,0,0,1-26.15-16.89L92,169.66Zm40-83,24-24v110a91.76,91.76,0,0,1-24,4.24ZM36,128A92,92,0,0,1,190.16,60.19l-130,130A91.34,91.34,0,0,1,36,128Zm160,62V66A92,92,0,0,1,196,190Z"},null,-1),ge=[pe],fe={name:"PhCircleHalfTilt"},we=F({...fe,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const s=d,t=p("weight","regular"),c=p("size","1em"),h=p("color","currentColor"),y=p("mirrored",!1),r=u(()=>s.weight??t),w=u(()=>s.size??c),V=u(()=>s.color??h),M=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(l(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:V.value,transform:M.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(l(),i("g",X0,ee)):r.value==="duotone"?(l(),i("g",ae,le)):r.value==="fill"?(l(),i("g",oe,ie)):r.value==="light"?(l(),i("g",re,ue)):r.value==="regular"?(l(),i("g",ce,ve)):r.value==="thin"?(l(),i("g",he,ge)):S("",!0)],16,R0))}}),_e=["width","height","fill","transform"],ye={key:0},ke=e("path",{d:"M108,84a16,16,0,1,1,16,16A16,16,0,0,1,108,84Zm128,44A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Zm-72,36.68V132a20,20,0,0,0-20-20,12,12,0,0,0-4,23.32V168a20,20,0,0,0,20,20,12,12,0,0,0,4-23.32Z"},null,-1),be=[ke],Ae={key:1},Ze=e("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"},null,-1),$e=e("path",{d:"M144,176a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176Zm88-48A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM124,96a12,12,0,1,0-12-12A12,12,0,0,0,124,96Z"},null,-1),Ve=[Ze,$e],Me={key:2},He=e("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-4,48a12,12,0,1,1-12,12A12,12,0,0,1,124,72Zm12,112a16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40a8,8,0,0,1,0,16Z"},null,-1),Se=[He],Ce={key:3},xe=e("path",{d:"M142,176a6,6,0,0,1-6,6,14,14,0,0,1-14-14V128a2,2,0,0,0-2-2,6,6,0,0,1,0-12,14,14,0,0,1,14,14v40a2,2,0,0,0,2,2A6,6,0,0,1,142,176ZM124,94a10,10,0,1,0-10-10A10,10,0,0,0,124,94Zm106,34A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z"},null,-1),Le=[xe],ze={key:4},Oe=e("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-40a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176ZM112,84a12,12,0,1,1,12,12A12,12,0,0,1,112,84Z"},null,-1),Pe=[Oe],Ne={key:5},We=e("path",{d:"M140,176a4,4,0,0,1-4,4,12,12,0,0,1-12-12V128a4,4,0,0,0-4-4,4,4,0,0,1,0-8,12,12,0,0,1,12,12v40a4,4,0,0,0,4,4A4,4,0,0,1,140,176ZM124,92a8,8,0,1,0-8-8A8,8,0,0,0,124,92Zm104,36A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z"},null,-1),Be=[We],Te={name:"PhInfo"},Ee=F({...Te,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const s=d,t=p("weight","regular"),c=p("size","1em"),h=p("color","currentColor"),y=p("mirrored",!1),r=u(()=>s.weight??t),w=u(()=>s.size??c),V=u(()=>s.color??h),M=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(l(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:V.value,transform:M.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(l(),i("g",ye,be)):r.value==="duotone"?(l(),i("g",Ae,Ve)):r.value==="fill"?(l(),i("g",Me,Se)):r.value==="light"?(l(),i("g",Ce,Le)):r.value==="regular"?(l(),i("g",ze,Pe)):r.value==="thin"?(l(),i("g",Ne,Be)):S("",!0)],16,_e))}}),De=["width","height","fill","transform"],Fe={key:0},je=e("path",{d:"M180,232a12,12,0,0,1-12,12H88a12,12,0,0,1,0-24h80A12,12,0,0,1,180,232Zm40-128a92.47,92.47,0,0,1-37,73.73,7.81,7.81,0,0,0-3,6.27,20,20,0,0,1-20,20H96a20,20,0,0,1-20-20v-.23a7.76,7.76,0,0,0-3.25-6.2,91.36,91.36,0,0,1-36.75-73C35.73,54.69,76,13.2,125.79,12A92,92,0,0,1,220,104Zm-24,0a68,68,0,0,0-69.65-68C89.56,36.89,59.8,67.56,60,104.39a67.52,67.52,0,0,0,27.18,54h0A32.14,32.14,0,0,1,99.77,180H116V149L87.51,120.49a12,12,0,0,1,17-17L128,127l23.51-23.51a12,12,0,0,1,17,17L140,149v31h16.25a31.89,31.89,0,0,1,12.41-21.49A67.45,67.45,0,0,0,196,104Z"},null,-1),Ue=[je],Ie={key:1},qe=e("path",{d:"M208,104a79.86,79.86,0,0,1-30.59,62.92A24.29,24.29,0,0,0,168,186v6a8,8,0,0,1-8,8H96a8,8,0,0,1-8-8v-6a24.11,24.11,0,0,0-9.3-19A79.87,79.87,0,0,1,48,104.45C47.76,61.09,82.72,25,126.07,24A80,80,0,0,1,208,104Z",opacity:"0.2"},null,-1),Ge=e("path",{d:"M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.5C39.74,56.83,78.26,17.15,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.64,71.64,0,0,0,27.64,56.3h0A32,32,0,0,1,96,186v6h24V147.31L90.34,117.66a8,8,0,0,1,11.32-11.32L128,132.69l26.34-26.35a8,8,0,0,1,11.32,11.32L136,147.31V192h24v-6a32.12,32.12,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Z"},null,-1),Je=[qe,Ge],Ke={key:2},Qe=e("path",{d:"M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-50.34,2.34a8,8,0,0,0-11.32,0L128,132.69l-26.34-26.35a8,8,0,0,0-11.32,11.32L120,147.31V184a8,8,0,0,0,16,0V147.31l29.66-29.65A8,8,0,0,0,165.66,106.34Z"},null,-1),Re=[Qe],Xe={key:3},Ye=e("path",{d:"M174,232a6,6,0,0,1-6,6H88a6,6,0,0,1,0-12h80A6,6,0,0,1,174,232Zm40-128a85.56,85.56,0,0,1-32.88,67.64A18.23,18.23,0,0,0,174,186v6a14,14,0,0,1-14,14H96a14,14,0,0,1-14-14v-6a18,18,0,0,0-7-14.23h0a85.59,85.59,0,0,1-33-67.25C41.74,57.91,79.39,19.12,125.93,18A86,86,0,0,1,214,104Zm-12,0a74,74,0,0,0-75.79-74C86.17,31,53.78,64.34,54,104.42a73.67,73.67,0,0,0,28.4,57.87A29.92,29.92,0,0,1,94,186v6a2,2,0,0,0,2,2h26V146.49L91.76,116.24a6,6,0,0,1,8.48-8.48L128,135.52l27.76-27.76a6,6,0,0,1,8.48,8.48L134,146.49V194h26a2,2,0,0,0,2-2v-6a30.18,30.18,0,0,1,11.7-23.78A73.59,73.59,0,0,0,202,104Z"},null,-1),e1=[Ye],a1={key:4},s1=e("path",{d:"M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.5C39.74,56.83,78.26,17.15,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.64,71.64,0,0,0,27.64,56.3h0A32,32,0,0,1,96,186v6h24V147.31L90.34,117.66a8,8,0,0,1,11.32-11.32L128,132.69l26.34-26.35a8,8,0,0,1,11.32,11.32L136,147.31V192h24v-6a32.12,32.12,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Z"},null,-1),t1=[s1],l1={key:5},o1=e("path",{d:"M172,232a4,4,0,0,1-4,4H88a4,4,0,0,1,0-8h80A4,4,0,0,1,172,232Zm40-128a83.59,83.59,0,0,1-32.11,66.06A20.2,20.2,0,0,0,172,186v6a12,12,0,0,1-12,12H96a12,12,0,0,1-12-12v-6a20,20,0,0,0-7.76-15.81A83.58,83.58,0,0,1,44,104.47C43.75,59,80.52,21.09,126,20a84,84,0,0,1,86,84Zm-8,0a76,76,0,0,0-77.84-76C85,29,51.77,63.27,52,104.43a75.62,75.62,0,0,0,29.17,59.43A28,28,0,0,1,92,186v6a4,4,0,0,0,4,4h28V145.66L93.17,114.83a4,4,0,0,1,5.66-5.66L128,138.34l29.17-29.17a4,4,0,1,1,5.66,5.66L132,145.66V196h28a4,4,0,0,0,4-4v-6a28.14,28.14,0,0,1,10.94-22.2A75.62,75.62,0,0,0,204,104Z"},null,-1),n1=[o1],i1={name:"PhLightbulbFilament"},r1=F({...i1,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const s=d,t=p("weight","regular"),c=p("size","1em"),h=p("color","currentColor"),y=p("mirrored",!1),r=u(()=>s.weight??t),w=u(()=>s.size??c),V=u(()=>s.color??h),M=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(l(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:V.value,transform:M.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(l(),i("g",Fe,Ue)):r.value==="duotone"?(l(),i("g",Ie,Je)):r.value==="fill"?(l(),i("g",Ke,Re)):r.value==="light"?(l(),i("g",Xe,e1)):r.value==="regular"?(l(),i("g",a1,t1)):r.value==="thin"?(l(),i("g",l1,n1)):S("",!0)],16,De))}}),d1=["width","height","fill","transform"],u1={key:0},c1=e("path",{d:"M128,180a52.06,52.06,0,0,0,52-52V64A52,52,0,0,0,76,64v64A52.06,52.06,0,0,0,128,180ZM100,64a28,28,0,0,1,56,0v64a28,28,0,0,1-56,0Zm40,155.22V240a12,12,0,0,1-24,0V219.22A92.14,92.14,0,0,1,36,128a12,12,0,0,1,24,0,68,68,0,0,0,136,0,12,12,0,0,1,24,0A92.14,92.14,0,0,1,140,219.22Z"},null,-1),m1=[c1],v1={key:1},h1=e("path",{d:"M168,64v64a40,40,0,0,1-40,40h0a40,40,0,0,1-40-40V64a40,40,0,0,1,40-40h0A40,40,0,0,1,168,64Z",opacity:"0.2"},null,-1),p1=e("path",{d:"M128,176a48.05,48.05,0,0,0,48-48V64a48,48,0,0,0-96,0v64A48.05,48.05,0,0,0,128,176ZM96,64a32,32,0,0,1,64,0v64a32,32,0,0,1-64,0Zm40,143.6V240a8,8,0,0,1-16,0V207.6A80.11,80.11,0,0,1,48,128a8,8,0,0,1,16,0,64,64,0,0,0,128,0,8,8,0,0,1,16,0A80.11,80.11,0,0,1,136,207.6Z"},null,-1),g1=[h1,p1],f1={key:2},w1=e("path",{d:"M80,128V64a48,48,0,0,1,96,0v64a48,48,0,0,1-96,0Zm128,0a8,8,0,0,0-16,0,64,64,0,0,1-128,0,8,8,0,0,0-16,0,80.11,80.11,0,0,0,72,79.6V240a8,8,0,0,0,16,0V207.6A80.11,80.11,0,0,0,208,128Z"},null,-1),_1=[w1],y1={key:3},k1=e("path",{d:"M128,174a46.06,46.06,0,0,0,46-46V64a46,46,0,0,0-92,0v64A46.06,46.06,0,0,0,128,174ZM94,64a34,34,0,0,1,68,0v64a34,34,0,0,1-68,0Zm40,141.75V240a6,6,0,0,1-12,0V205.75A78.09,78.09,0,0,1,50,128a6,6,0,0,1,12,0,66,66,0,0,0,132,0,6,6,0,0,1,12,0A78.09,78.09,0,0,1,134,205.75Z"},null,-1),b1=[k1],A1={key:4},Z1=e("path",{d:"M128,176a48.05,48.05,0,0,0,48-48V64a48,48,0,0,0-96,0v64A48.05,48.05,0,0,0,128,176ZM96,64a32,32,0,0,1,64,0v64a32,32,0,0,1-64,0Zm40,143.6V240a8,8,0,0,1-16,0V207.6A80.11,80.11,0,0,1,48,128a8,8,0,0,1,16,0,64,64,0,0,0,128,0,8,8,0,0,1,16,0A80.11,80.11,0,0,1,136,207.6Z"},null,-1),$1=[Z1],V1={key:5},M1=e("path",{d:"M128,172a44.05,44.05,0,0,0,44-44V64a44,44,0,0,0-88,0v64A44.05,44.05,0,0,0,128,172ZM92,64a36,36,0,0,1,72,0v64a36,36,0,0,1-72,0Zm40,139.89V240a4,4,0,0,1-8,0V203.89A76.09,76.09,0,0,1,52,128a4,4,0,0,1,8,0,68,68,0,0,0,136,0,4,4,0,0,1,8,0A76.09,76.09,0,0,1,132,203.89Z"},null,-1),H1=[M1],S1={name:"PhMicrophone"},m0=F({...S1,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const s=d,t=p("weight","regular"),c=p("size","1em"),h=p("color","currentColor"),y=p("mirrored",!1),r=u(()=>s.weight??t),w=u(()=>s.size??c),V=u(()=>s.color??h),M=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(l(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:V.value,transform:M.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(l(),i("g",u1,m1)):r.value==="duotone"?(l(),i("g",v1,g1)):r.value==="fill"?(l(),i("g",f1,_1)):r.value==="light"?(l(),i("g",y1,b1)):r.value==="regular"?(l(),i("g",A1,$1)):r.value==="thin"?(l(),i("g",V1,H1)):S("",!0)],16,d1))}}),C1=["width","height","fill","transform"],x1={key:0},L1=e("path",{d:"M208,136H48a20,20,0,0,0-20,20v36a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V156A20,20,0,0,0,208,136Zm-4,52H52V160H204Zm4-144H48A20,20,0,0,0,28,64v36a20,20,0,0,0,20,20H208a20,20,0,0,0,20-20V64A20,20,0,0,0,208,44Zm-4,52H52V68H204Z"},null,-1),z1=[L1],O1={key:1},P1=e("path",{d:"M216,152v40a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V152a8,8,0,0,1,8-8H208A8,8,0,0,1,216,152Zm-8-96H48a8,8,0,0,0-8,8v40a8,8,0,0,0,8,8H208a8,8,0,0,0,8-8V64A8,8,0,0,0,208,56Z",opacity:"0.2"},null,-1),N1=e("path",{d:"M208,136H48a16,16,0,0,0-16,16v40a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V152A16,16,0,0,0,208,136Zm0,56H48V152H208v40Zm0-144H48A16,16,0,0,0,32,64v40a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V64A16,16,0,0,0,208,48Zm0,56H48V64H208v40Z"},null,-1),W1=[P1,N1],B1={key:2},T1=e("path",{d:"M224,152v40a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V152a16,16,0,0,1,16-16H208A16,16,0,0,1,224,152ZM208,48H48A16,16,0,0,0,32,64v40a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V64A16,16,0,0,0,208,48Z"},null,-1),E1=[T1],D1={key:3},F1=e("path",{d:"M208,138H48a14,14,0,0,0-14,14v40a14,14,0,0,0,14,14H208a14,14,0,0,0,14-14V152A14,14,0,0,0,208,138Zm2,54a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V152a2,2,0,0,1,2-2H208a2,2,0,0,1,2,2ZM208,50H48A14,14,0,0,0,34,64v40a14,14,0,0,0,14,14H208a14,14,0,0,0,14-14V64A14,14,0,0,0,208,50Zm2,54a2,2,0,0,1-2,2H48a2,2,0,0,1-2-2V64a2,2,0,0,1,2-2H208a2,2,0,0,1,2,2Z"},null,-1),j1=[F1],U1={key:4},I1=e("path",{d:"M208,136H48a16,16,0,0,0-16,16v40a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V152A16,16,0,0,0,208,136Zm0,56H48V152H208v40Zm0-144H48A16,16,0,0,0,32,64v40a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V64A16,16,0,0,0,208,48Zm0,56H48V64H208v40Z"},null,-1),q1=[I1],G1={key:5},J1=e("path",{d:"M208,140H48a12,12,0,0,0-12,12v40a12,12,0,0,0,12,12H208a12,12,0,0,0,12-12V152A12,12,0,0,0,208,140Zm4,52a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V152a4,4,0,0,1,4-4H208a4,4,0,0,1,4,4ZM208,52H48A12,12,0,0,0,36,64v40a12,12,0,0,0,12,12H208a12,12,0,0,0,12-12V64A12,12,0,0,0,208,52Zm4,52a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V64a4,4,0,0,1,4-4H208a4,4,0,0,1,4,4Z"},null,-1),K1=[J1],Q1={name:"PhRows"},R1=F({...Q1,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(d){const s=d,t=p("weight","regular"),c=p("size","1em"),h=p("color","currentColor"),y=p("mirrored",!1),r=u(()=>s.weight??t),w=u(()=>s.size??c),V=u(()=>s.color??h),M=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(l(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:V.value,transform:M.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(l(),i("g",x1,z1)):r.value==="duotone"?(l(),i("g",O1,W1)):r.value==="fill"?(l(),i("g",B1,E1)):r.value==="light"?(l(),i("g",D1,j1)):r.value==="regular"?(l(),i("g",U1,q1)):r.value==="thin"?(l(),i("g",G1,K1)):S("",!0)],16,C1))}});function X1(){return{audio:{volume:70,press_to_talk:!1},screen:{theme:"light",brightness:75},wake_word:{engine:"none",phrases:[],custom_supported:!1,commands:[{command:"mo si",display:"MOSS"}],threshold:20},hardware:{default_motor_speed:40,local_aec:!0},device:{version:"",ip:"",ssid:""}}}function Y1(d,s={}){const t={hasTheme:!1,hasBrightness:!1,hasLocalAec:!1,hasPressToTalk:!1};if(!d||typeof s!="object"||!s)return t;if(s.audio&&typeof s.audio=="object"&&(typeof s.audio.volume=="number"&&Number.isFinite(s.audio.volume)&&(d.audio.volume=Math.min(100,Math.max(0,s.audio.volume))),typeof s.audio.press_to_talk=="boolean"&&(d.audio.press_to_talk=s.audio.press_to_talk,t.hasPressToTalk=!0)),s.screen&&typeof s.screen=="object"&&(typeof s.screen.theme=="string"&&s.screen.theme.length>0&&(t.hasTheme=!0,d.screen.theme=s.screen.theme),typeof s.screen.brightness=="number"&&Number.isFinite(s.screen.brightness)&&(t.hasBrightness=!0,d.screen.brightness=Math.min(100,Math.max(1,s.screen.brightness)))),s.wake_word&&typeof s.wake_word=="object"){const c=s.wake_word;d.wake_word.engine=c.engine||"none",d.wake_word.phrases=Array.isArray(c.phrases)?c.phrases:[],d.wake_word.custom_supported=c.custom_supported===!0,Array.isArray(c.commands)&&(d.wake_word.commands=c.commands.length?c.commands.map(h=>({command:String((h==null?void 0:h.command)||""),display:String((h==null?void 0:h.display)||"")})):[{command:"mo si",display:"MOSS"}]),typeof c.threshold=="number"&&Number.isFinite(c.threshold)&&(d.wake_word.threshold=c.threshold)}if(s.hardware&&typeof s.hardware=="object"){const c=s.hardware;typeof c.default_motor_speed=="number"&&Number.isFinite(c.default_motor_speed)&&(d.hardware.default_motor_speed=c.default_motor_speed),t.hasLocalAec=c.local_aec_supported===!0,t.hasLocalAec&&typeof c.local_aec=="boolean"&&(d.hardware.local_aec=c.local_aec)}return s.device&&typeof s.device=="object"&&(d.device.version=s.device.version||"",d.device.ip=s.device.ip||"",d.device.ssid=s.device.ssid||""),t}function ea({online:d=!1,voice:s="idle"}={}){return d?s==="idle"||s==="":!1}function aa({online:d=!1,voice:s="idle"}={}){return d?s==="listening"||s==="speaking"||s==="connecting":!1}function v0({voice:d="idle",ackMessage:s=""}={}){return d==="connecting"||d==="activating"||String(s)==="toggling"?"idle":d}const sa={class:"hardware-page uxp-page-stack uxp-page-fit"},ta={class:"status-card-main"},la={class:"status-copy"},oa={key:0,class:"fw-badge"},na={class:"hw-layout uxp-page-fit uxp-page-fit-stretch"},ia={class:"hw-main uxp-page-fit-stretch"},ra={class:"panel panel-audio"},da={class:"panel-hd"},ua={class:"panel-bd"},ca={class:"setting-list"},ma={class:"setting-item"},va={class:"setting-action wide"},ha={class:"setting-value"},pa={key:0,class:"setting-item"},ga={key:1,class:"setting-item"},fa={key:2,class:"setting-item"},wa={class:"setting-action wide"},_a={class:"setting-value"},ya={key:3,class:"setting-item"},ka={class:"panel panel-wake uxp-page-fit-stretch"},ba={class:"panel-hd panel-hd-row"},Aa={class:"panel-hd-title"},Za={class:"head-actions"},$a={class:"panel-bd wake-panel-bd uxp-page-fit-stretch"},Va={class:"wake-body uxp-page-fit-stretch"},Ma={class:"phrase-grid uxp-page-fit-scroll-area"},Ha={class:"phrase-card-hd"},Sa={class:"phrase-index"},Ca={class:"wake-save-bar"},xa={class:"setting-item inline"},La={class:"setting-action wide"},za={class:"setting-value"},Oa={class:"hw-side"},Pa={class:"panel panel-voice"},Na={class:"panel-hd"},Wa={class:"panel-bd"},Ba={class:"voice-box"},Ta={class:"voice-status-row"},Ea={class:"voice-status-text"},Da={class:"voice-seg",role:"group","aria-label":"语音链路控制"},Fa=["disabled"],ja=["disabled"],Ua={class:"panel"},Ia={class:"panel-hd"},qa={class:"panel-bd"},Ga={class:"periph-list"},Ja=["disabled","onClick"],Ka={class:"periph-body"},Qa={class:"motor-box"},Ra={class:"motor-box-hd"},Xa={class:"motor-seg"},Ya=["disabled"],es=["disabled"],as=["disabled"],ss={class:"motor-speed-row"},ts={class:"setting-value"},ls={class:"panel"},os={class:"panel-hd"},ns={class:"panel-bd"},is={class:"meta-list"},rs={class:"meta-row"},ds={class:"meta-row"},us={class:"meta-row"},J=8,h0=64,p0=32,cs=F({__name:"Hardware",setup(d){const s=/^[a-z]+( [a-z]+)*$/,t=T0(),c=k(!0),h=k(!1),y=k(!1),r=k(!1),w=k(!1),V=k(!1),M=k(!1),_=k(!1),Z=k(!1),O=k(!1),P=k(!1),K=k(!1),Q=k(!1),a0=k(!1),s0=k(!1),o=j0(X1()),b=u(()=>h.value&&t.mossOnline),g0=u(()=>y.value?"配置加载失败":t.mossOnline?"设备在线,修改即时生效":"MOSS 离线,暂不可修改"),f0=u(()=>y.value?"无法读取设备配置,请检查连接后刷新页面":t.mossOnline?"配置写入设备 NVS,重启后保留":"请先在设备接入页确认 MOSS 在线"),w0=u(()=>({afe_wakenet:"AFE 唤醒",esp_wakenet:"WakeNet",custom:"MultiNet 自定义",none:"未知"})[o.wake_word.engine]||o.wake_word.engine),R=u(()=>t.mossChatState==="listening"||t.mossChatState==="speaking"),q=u(()=>t.mossChatState==="connecting"||t.mossChatState==="activating"),_0=u(()=>t.mossOnline?q.value?"连接中":t.mossChatState==="listening"?"聆听中":t.mossChatState==="speaking"?"播报中":"待命":"离线"),y0=u(()=>t.mossOnline?q.value?"正在连接语音服务,请稍候":t.mossChatState==="listening"?"正在采集语音指令":t.mossChatState==="speaking"?"正在播报应答":"无需说出唤醒词即可对话":"设备离线,无法建立语音链路"),k0=u(()=>R.value?"on":q.value?"pending":""),t0=u(()=>ea({online:t.mossOnline,voice:t.mossChatState})),l0=u(()=>aa({online:t.mossOnline,voice:t.mossChatState})),b0=u(()=>[{key:"eye",label:"眼灯",on:t.hw.eye,icon:q0},{key:"bar",label:"流水灯",on:t.hw.bar,icon:R1},{key:"panel",label:"面板灯",on:t.hw.panel,icon:r1},{key:"bottom",label:"底灯",on:t.hw.bottom,icon:we}]);function o0(n){const a=Y1(o,n);K.value=a.hasTheme,Q.value=a.hasBrightness,a0.value=a.hasLocalAec,s0.value=!1}async function n0(){c.value=!0,y.value=!1,h.value=!1;try{const n=await E("/api/device/config");o0(n),h.value=!0,t.mossOnline&&await z0()}catch(n){y.value=!0,$.error(n instanceof Error?n.message:"读取设备配置失败")}finally{c.value=!1}}async function T(n,a,g){if(!(!b.value||g.value)){g.value=!0;try{const C=await E("/api/device/config",{method:"PUT",body:JSON.stringify(n)});o0(C),$.success(`${a}已保存`)}catch(C){$.error(C instanceof Error?C.message:`${a}保存失败`),await n0()}finally{g.value=!1}}}function A0(){return T({audio:{volume:o.audio.volume}},"音量",w)}function Z0(){return T({audio:{press_to_talk:o.audio.press_to_talk}},"按住说话",w)}function i0(){const n={};if(K.value&&(n.theme=o.screen.theme),Q.value&&(n.brightness=o.screen.brightness),!!Object.keys(n).length)return T({screen:n},"显示设置",V)}function $0(){o.wake_word.commands.length>=J||o.wake_word.commands.push({command:"",display:""})}function V0(n){o.wake_word.commands.length<=1||o.wake_word.commands.splice(n,1)}function r0(n){return n.toLowerCase().replace(/[^a-z ]/g,"").replace(/^ +/,"").replace(/ {2,}/g," ")}function M0(n,a){o.wake_word.commands[n].command=r0(a)}function H0(n){return r0(n.trim()).replace(/\s+/g," ")}function S0(){const n=o.wake_word.commands;if(!n.length)return{ok:!1,message:"至少保留一个唤醒词"};const a=[],g=new Set,C=new Set;for(let N=0;N<n.length;N++){const x=H0(n[N].command),L=n[N].display.trim(),H=N+1;if(!x&&!L)return{ok:!1,message:`第 ${H} 条唤醒词不能为空`};if(!x||!L)return{ok:!1,message:`第 ${H} 条不完整,拼音和显示名均需填写`};if(x.length>h0)return{ok:!1,message:`第 ${H} 条拼音过长(最多 ${h0} 字符)`};if(L.length>p0)return{ok:!1,message:`第 ${H} 条显示名过长(最多 ${p0} 字符)`};if(!s.test(x))return{ok:!1,message:`第 ${H} 条拼音格式错误,请使用小写拼音并以空格分音节,如 mo si`};if(g.has(x))return{ok:!1,message:`拼音「${x}」重复,请修改第 ${H} 条`};if(C.has(L))return{ok:!1,message:`显示名「${L}」重复,请修改第 ${H} 条`};g.add(x),C.add(L),a.push({command:x,display:L})}return a.length>J?{ok:!1,message:`最多支持 ${J} 个唤醒词`}:o.wake_word.threshold<1||o.wake_word.threshold>99?{ok:!1,message:"灵敏度需在 1–99 之间"}:{ok:!0,commands:a}}function C0(){const n=S0();if(!n.ok){$.warning(n.message);return}return T({wake_word:{commands:n.commands,threshold:o.wake_word.threshold}},"唤醒词",r)}function x0(){return T({hardware:{default_motor_speed:o.hardware.default_motor_speed}},"默认电机速度",M)}function L0(){return T({hardware:{local_aec:o.hardware.local_aec}},"本地 AEC",_)}async function z0(){try{const n=await E("/api/hw/status",{method:"POST"});t.applyHw(n)}catch{}}async function d0(n,a){if(!(Z.value||!t.mossOnline)){Z.value=!0;try{const g=await E("/api/hw",{method:"POST",body:JSON.stringify({device:n,action:a,speed:o.hardware.default_motor_speed})});t.applyHw(g)}catch(g){$.error(g instanceof Error?g.message:"外设控制失败")}finally{Z.value=!1}}}function O0(n){const a=t.hw[n];return d0(n,a?"off":"on")}function X(n){return d0("motor",n)}async function P0(){var n;if(!(O.value||P.value||!t0.value)){O.value=!0;try{const a=await E("/api/chat/wake",{method:"POST"});String(((n=a==null?void 0:a.payload)==null?void 0:n.message)||"")==="toggling"?(t.mossChatState="idle",$.warning("语音链路已在进行中")):(t.mossChatState="connecting",$.success("MOSS 已唤醒,请对着设备说话"))}catch(a){$.error(a instanceof Error?a.message:"唤醒失败")}finally{O.value=!1}}}async function N0(){var n;if(!(O.value||P.value||!l0.value)){if(q.value&&!R.value){t.mossChatState=v0({voice:t.mossChatState}),$.success("已取消接通");return}P.value=!0;try{const a=await E("/api/chat/wake",{method:"POST"});v0({voice:t.mossChatState,ackMessage:(n=a==null?void 0:a.payload)==null?void 0:n.message})==="idle"?(t.mossChatState="idle",$.success("语音链路已关闭")):$.warning("当前未处于语音会话中")}catch(a){$.error(a instanceof Error?a.message:"取消唤醒失败")}finally{P.value=!1}}}return E0(n0),(n,a)=>{const g=W("el-slider"),C=W("el-switch"),N=W("el-radio-button"),x=W("el-radio-group"),L=W("el-tag"),H=W("el-button"),u0=W("el-input"),W0=W("el-alert"),B0=U0("loading");return D0((l(),i("div",sa,[e("section",{class:z(["status-card",b.value?"is-ready":y.value?"is-error":"is-offline"])},[e("div",ta,[a[10]||(a[10]=e("span",{class:"status-dot","aria-hidden":"true"},null,-1)),e("div",la,[e("strong",null,f(g0.value),1),e("p",null,f(f0.value),1)])]),o.device.version?(l(),i("code",oa,f(o.device.version),1)):S("",!0)],2),e("div",na,[e("div",ia,[e("section",ra,[e("div",da,[v(A(Q0),{size:18,weight:"duotone"}),a[11]||(a[11]=e("span",null,"音频",-1))]),e("div",ua,[e("ul",ca,[e("li",ma,[a[12]||(a[12]=e("div",{class:"setting-text"},[e("strong",null,"扬声器音量"),e("p",null,"调节 MOSS 播报与提示音大小")],-1)),e("div",va,[v(g,{modelValue:o.audio.volume,"onUpdate:modelValue":a[0]||(a[0]=m=>o.audio.volume=m),min:0,max:100,disabled:!b.value,onChange:A0},null,8,["modelValue","disabled"]),e("span",ha,f(o.audio.volume)+"%",1)])]),a0.value?(l(),i("li",pa,[a[13]||(a[13]=e("div",{class:"setting-text"},[e("strong",null,"本地 AEC"),e("p",null,"开启:全双工,播报时仍可插话打断(设备端消回声);关闭:半双工,播报期间关闭麦克风,不会被自己的声音误打断")],-1)),v(C,{modelValue:o.hardware.local_aec,"onUpdate:modelValue":a[1]||(a[1]=m=>o.hardware.local_aec=m),disabled:!b.value,onChange:L0},null,8,["modelValue","disabled"])])):S("",!0),s0.value?(l(),i("li",ga,[a[14]||(a[14]=e("div",{class:"setting-text"},[e("strong",null,"按住说话"),e("p",null,"开启后需要按住才采集语音;关闭则唤醒后持续聆听")],-1)),v(C,{modelValue:o.audio.press_to_talk,"onUpdate:modelValue":a[2]||(a[2]=m=>o.audio.press_to_talk=m),disabled:!b.value,onChange:Z0},null,8,["modelValue","disabled"])])):S("",!0),Q.value?(l(),i("li",fa,[a[15]||(a[15]=e("div",{class:"setting-text"},[e("strong",null,"屏幕亮度"),e("p",null,"熄屏待命时仍记住这个亮度,唤醒后恢复")],-1)),e("div",wa,[v(g,{modelValue:o.screen.brightness,"onUpdate:modelValue":a[3]||(a[3]=m=>o.screen.brightness=m),min:1,max:100,disabled:!b.value,onChange:i0},null,8,["modelValue","disabled"]),e("span",_a,f(o.screen.brightness)+"%",1)])])):S("",!0),K.value?(l(),i("li",ya,[a[18]||(a[18]=e("div",{class:"setting-text"},[e("strong",null,"界面主题"),e("p",null,"设备屏幕浅色 / 深色模式")],-1)),v(x,{modelValue:o.screen.theme,"onUpdate:modelValue":a[4]||(a[4]=m=>o.screen.theme=m),disabled:!b.value,onChange:i0},{default:B(()=>[v(N,{value:"light"},{default:B(()=>[...a[16]||(a[16]=[D("浅色",-1)])]),_:1}),v(N,{value:"dark"},{default:B(()=>[...a[17]||(a[17]=[D("深色",-1)])]),_:1})]),_:1},8,["modelValue","disabled"])])):S("",!0)])])]),e("section",ka,[e("div",ba,[e("div",Aa,[v(A(m0),{size:18,weight:"duotone"}),a[19]||(a[19]=e("span",null,"唤醒词",-1)),v(L,{size:"small",type:"info",effect:"plain"},{default:B(()=>[D(f(w0.value),1)]),_:1})]),e("div",Za,[o.wake_word.custom_supported?(l(),Y(H,{key:0,size:"small",type:"primary",disabled:!b.value||o.wake_word.commands.length>=J,onClick:$0},{default:B(()=>[v(A(K0),{size:14,weight:"bold"}),a[20]||(a[20]=D(" 添加 ",-1))]),_:1},8,["disabled"])):S("",!0)])]),e("div",$a,[o.wake_word.custom_supported?(l(),i(e0,{key:0},[e("div",Va,[e("div",Ma,[(l(!0),i(e0,null,c0(o.wake_word.commands,(m,j)=>(l(),i("article",{key:j,class:"phrase-card"},[e("header",Ha,[e("span",Sa,f(j+1),1),v(H,{link:"",type:"danger",size:"small",disabled:!b.value||o.wake_word.commands.length<=1,onClick:G=>V0(j)},{default:B(()=>[...a[21]||(a[21]=[D(" 删除 ",-1)])]),_:1},8,["disabled","onClick"])]),a[22]||(a[22]=e("label",{class:"field-label"},"拼音",-1)),a[23]||(a[23]=e("p",{class:"field-hint"},"仅小写英文字母,空格分音节(如 mo si)",-1)),v(u0,{"model-value":m.command,placeholder:"mo si",disabled:!b.value,maxlength:"64","show-word-limit":"","onUpdate:modelValue":G=>M0(j,G)},null,8,["model-value","disabled","onUpdate:modelValue"]),a[24]||(a[24]=e("label",{class:"field-label"},"显示名",-1)),v(u0,{modelValue:m.display,"onUpdate:modelValue":G=>m.display=G,placeholder:"MOSS",disabled:!b.value,maxlength:"32","show-word-limit":""},null,8,["modelValue","onUpdate:modelValue","disabled"])]))),128))])]),e("div",Ca,[e("div",xa,[a[25]||(a[25]=e("div",{class:"setting-text"},[e("strong",null,"灵敏度"),e("p",null,"数值越小越灵敏,建议 15–30")],-1)),e("div",La,[v(g,{modelValue:o.wake_word.threshold,"onUpdate:modelValue":a[5]||(a[5]=m=>o.wake_word.threshold=m),min:1,max:99,disabled:!b.value},null,8,["modelValue","disabled"]),e("span",za,f(o.wake_word.threshold),1)])]),v(H,{type:"primary",disabled:!b.value||r.value,loading:r.value,onClick:C0},{default:B(()=>[...a[26]||(a[26]=[D(" 保存唤醒词 ",-1)])]),_:1},8,["disabled","loading"])])],64)):(l(),Y(W0,{key:1,type:"info",closable:!1,"show-icon":"",title:"当前固件不支持在线修改唤醒词,请烧录 MultiNet 自定义唤醒词固件。"}))])])]),e("aside",Oa,[e("section",Pa,[e("div",Na,[v(A(m0),{size:18,weight:"duotone"}),a[27]||(a[27]=e("span",null,"远程语音",-1))]),e("div",Wa,[e("div",Ba,[e("div",Ta,[e("span",{class:z(["voice-dot",k0.value]),"aria-hidden":"true"},null,2),e("div",Ea,[e("strong",null,f(_0.value),1),e("span",null,f(y0.value),1)])]),e("div",Da,[e("button",{type:"button",class:z(["seg-btn voice-wake",{loading:O.value}]),disabled:!t0.value||O.value||P.value,onClick:P0},f(O.value?"接通中":"唤醒"),11,Fa),e("button",{type:"button",class:z(["seg-btn voice-end",{loading:P.value,active:R.value}]),disabled:!l0.value||O.value||P.value,onClick:N0},f(P.value?"关闭中":"取消唤醒"),11,ja)])])])]),e("section",Ua,[e("div",Ia,[v(A(F0),{size:18,weight:"duotone"}),a[28]||(a[28]=e("span",null,"外设试控",-1))]),e("div",qa,[e("div",Ga,[(l(!0),i(e0,null,c0(b0.value,m=>(l(),i("button",{key:m.key,type:"button",class:z(["periph-card",{on:m.on}]),disabled:Z.value||!A(t).mossOnline,onClick:j=>O0(m.key)},[e("div",{class:z(["periph-icon",m.key])},[(l(),Y(I0(m.icon),{size:20,weight:"duotone"}))],2),e("div",Ka,[e("strong",null,f(m.label),1),e("span",null,f(m.on?"已开启":"已关闭"),1)]),e("span",{class:z(["periph-dot",{on:m.on}])},null,2)],10,Ja))),128))]),e("div",Qa,[e("div",Ra,[v(A(J0),{size:16,weight:"duotone"}),a[29]||(a[29]=e("strong",null,"电机",-1))]),e("div",Xa,[e("button",{type:"button",class:z(["seg-btn",{active:A(t).hw.motor_dir==="forward"}]),disabled:Z.value||!A(t).mossOnline,onClick:a[6]||(a[6]=m=>X("forward"))}," 正转 ",10,Ya),e("button",{type:"button",class:z(["seg-btn",{active:A(t).hw.motor_dir==="backward"}]),disabled:Z.value||!A(t).mossOnline,onClick:a[7]||(a[7]=m=>X("backward"))}," 反转 ",10,es),e("button",{type:"button",class:"seg-btn",disabled:Z.value||!A(t).mossOnline,onClick:a[8]||(a[8]=m=>X("stop"))}," 停止 ",8,as)]),e("div",ss,[a[30]||(a[30]=e("span",null,"默认速度",-1)),v(g,{modelValue:o.hardware.default_motor_speed,"onUpdate:modelValue":a[9]||(a[9]=m=>o.hardware.default_motor_speed=m),min:1,max:100,disabled:!b.value,onChange:x0},null,8,["modelValue","disabled"]),e("span",ts,f(o.hardware.default_motor_speed)+"%",1)])])])]),e("section",ls,[e("div",os,[v(A(Ee),{size:18,weight:"duotone"}),a[31]||(a[31]=e("span",null,"设备信息",-1))]),e("div",ns,[e("dl",is,[e("div",rs,[a[32]||(a[32]=e("dt",null,"固件版本",-1)),e("dd",null,[e("code",null,f(o.device.version||"—"),1)])]),e("div",ds,[a[33]||(a[33]=e("dt",null,"IP 地址",-1)),e("dd",null,[e("code",null,f(o.device.ip||"—"),1)])]),e("div",us,[a[34]||(a[34]=e("dt",null,"Wi-Fi",-1)),e("dd",null,[e("code",null,f(o.device.ssid||"—"),1)])])])])])])])])),[[B0,c.value]])}}}),ws=G0(cs,[["__scopeId","data-v-e2ed0c00"]]);export{ws as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.hotkeys-page[data-v-3499f2c8]{flex:1;min-height:0}.status-card[data-v-3499f2c8]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;border-radius:var(--radius);border:1px solid var(--border-color);background:#fff}.status-card.is-ready[data-v-3499f2c8]{border-color:#e1f3d8;background:#f6ffed}.status-card.is-pending[data-v-3499f2c8]{border-color:#faecd8;background:#fffbf5}.status-card-main[data-v-3499f2c8]{display:flex;align-items:flex-start;gap:12px;min-width:0}.status-dot[data-v-3499f2c8]{width:8px;height:8px;margin-top:7px;border-radius:50%;flex-shrink:0;background:var(--warn)}.status-card.is-ready .status-dot[data-v-3499f2c8]{background:var(--ok)}.status-copy strong[data-v-3499f2c8]{display:block;font-size:14px;color:var(--text-primary)}.status-copy p[data-v-3499f2c8]{margin:4px 0 0;font-size:13px;color:var(--text-secondary);line-height:1.6}.status-card-actions[data-v-3499f2c8]{display:flex;gap:4px;flex-shrink:0}.hotkeys-layout[data-v-3499f2c8]{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;flex:1;min-height:0}.presets-panel[data-v-3499f2c8]{display:flex;flex-direction:column;min-height:0}.presets-panel[data-v-3499f2c8] .panel-bd{flex:1;min-height:0;overflow:auto}.panel-desc[data-v-3499f2c8]{margin:0 0 16px;font-size:13px;color:var(--text-secondary);line-height:1.6}.panel-desc strong[data-v-3499f2c8]{color:var(--text-primary);font-weight:600}.presets-empty[data-v-3499f2c8]{min-height:280px}.app-grid[data-v-3499f2c8]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.app-card[data-v-3499f2c8]{display:flex;flex-direction:column;gap:12px;padding:14px 16px;border:1px solid var(--border-color);border-radius:8px;background:#fff;transition:border-color .2s,box-shadow .2s}.app-card[data-v-3499f2c8]:hover{border-color:#dcd6f7;box-shadow:0 4px 14px #5b4cdb14}.app-card-hd[data-v-3499f2c8]{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.app-card-title[data-v-3499f2c8]{display:flex;align-items:center;gap:8px;min-width:0}.app-card-title h3[data-v-3499f2c8]{margin:0;font-size:15px;font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app-card-ops[data-v-3499f2c8]{display:flex;gap:2px;flex-shrink:0}.action-list[data-v-3499f2c8]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.action-row[data-v-3499f2c8]{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border-radius:6px;background:#fafafa;border:1px solid #f0f0f0}.action-name[data-v-3499f2c8]{font-size:13px;color:var(--text-regular);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.key-badge[data-v-3499f2c8]{flex-shrink:0;display:inline-block;padding:2px 8px;border-radius:4px;border:1px solid #e4e7ed;background:#fff;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;color:var(--text-regular)}.action-empty[data-v-3499f2c8]{margin:0;font-size:13px;color:var(--text-secondary)}.app-card-ft[data-v-3499f2c8]{margin-top:auto;padding-top:8px;border-top:1px solid #f0f2f5;font-size:12px;color:var(--text-secondary)}.test-panel[data-v-3499f2c8] .panel-hd{gap:8px}.test-panel[data-v-3499f2c8] .panel-bd{display:flex;flex-direction:column;gap:12px}.test-row[data-v-3499f2c8]{display:flex;flex-direction:column;gap:10px}.test-row .el-input[data-v-3499f2c8]{width:100%}.presets-panel[data-v-3499f2c8] .panel-hd-row{justify-content:flex-start}.presets-panel[data-v-3499f2c8] .panel-hd-row .head-actions{margin-left:auto;align-items:center;gap:10px}.head-actions-backup[data-v-3499f2c8] .el-button{--el-button-bg-color: transparent;font-weight:500;color:var(--text-regular, #606266)}.head-actions-backup[data-v-3499f2c8] .el-button:hover,.head-actions-backup[data-v-3499f2c8] .el-button:focus{color:var(--accent)}.head-actions[data-v-3499f2c8] .el-button--primary{min-width:84px}.app-dialog-body[data-v-3499f2c8]{display:flex;flex-direction:column;gap:16px}.actions-section[data-v-3499f2c8]{display:flex;flex-direction:column;gap:10px}.actions-section-head[data-v-3499f2c8]{display:flex;align-items:center;justify-content:space-between;gap:12px}.actions-count[data-v-3499f2c8]{margin-left:6px;font-size:12px;font-weight:400;color:var(--text-secondary)}.actions-empty-inline[data-v-3499f2c8]{padding:24px 16px}.action-card-top[data-v-3499f2c8]{display:flex;align-items:center;gap:8px}.action-card-index[data-v-3499f2c8]{flex-shrink:0;width:24px;height:24px;border-radius:4px;display:grid;place-items:center;font-size:12px;font-weight:600;color:var(--accent);background:var(--accent-soft)}.action-name-input[data-v-3499f2c8]{flex:1}.shortcut-stack[data-v-3499f2c8]{display:flex;flex-direction:column;gap:10px}.shortcut-label[data-v-3499f2c8]{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:13px;font-weight:500;color:var(--text-regular)}@media(max-width:960px){.hotkeys-layout[data-v-3499f2c8]{grid-template-columns:1fr}.status-card[data-v-3499f2c8]{flex-direction:column;align-items:stretch}.status-card-actions[data-v-3499f2c8]{justify-content:flex-end}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as ne,D as i,f as u,R as fe,v as B,A as me,c as V,g as a,Q as O,e as Ke,p as oe,t as $,h as f,i as g,K as G,x as Be,q as _,l as U,F as R,s as Q,$ as ze,a0 as je,r as M,a as b,J as k,O as le,L as K,V as De,X as Pe,k as Le,_ as Ie}from"./index-CMys3a7t.js";import{I as Fe}from"./PhPlus.vue-C5oKtsK_.js";import"./mpegts-D4BrshwP.js";import"./esp-flasher-Dm2UeoOa.js";const Ue=["width","height","fill","transform"],Re={key:0},Je=a("path",{d:"M216,36H40A20,20,0,0,0,20,56V200a20,20,0,0,0,20,20H216a20,20,0,0,0,20-20V56A20,20,0,0,0,216,36Zm-4,160H44V60H212ZM60,92a16,16,0,1,1,16,16A16,16,0,0,1,60,92Zm48,0a16,16,0,1,1,16,16A16,16,0,0,1,108,92Z"},null,-1),We=[Je],qe={key:1},Xe=a("path",{d:"M224,56V200a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H216A8,8,0,0,1,224,56Z",opacity:"0.2"},null,-1),Ye=a("path",{d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,160H40V56H216V200ZM80,84A12,12,0,1,1,68,72,12,12,0,0,1,80,84Zm40,0a12,12,0,1,1-12-12A12,12,0,0,1,120,84Z"},null,-1),Ge=[Xe,Ye],Qe={key:2},et=a("path",{d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40ZM68,96A12,12,0,1,1,80,84,12,12,0,0,1,68,96Zm40,0a12,12,0,1,1,12-12A12,12,0,0,1,108,96Z"},null,-1),tt=[et],at={key:3},nt=a("path",{d:"M216,42H40A14,14,0,0,0,26,56V200a14,14,0,0,0,14,14H216a14,14,0,0,0,14-14V56A14,14,0,0,0,216,42Zm2,158a2,2,0,0,1-2,2H40a2,2,0,0,1-2-2V56a2,2,0,0,1,2-2H216a2,2,0,0,1,2,2ZM78,84A10,10,0,1,1,68,74,10,10,0,0,1,78,84Zm40,0a10,10,0,1,1-10-10A10,10,0,0,1,118,84Z"},null,-1),st=[nt],ot={key:4},lt=a("path",{d:"M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,160H40V56H216V200ZM80,84A12,12,0,1,1,68,72,12,12,0,0,1,80,84Zm40,0a12,12,0,1,1-12-12A12,12,0,0,1,120,84Z"},null,-1),rt=[lt],it={key:5},ut=a("path",{d:"M216,44H40A12,12,0,0,0,28,56V200a12,12,0,0,0,12,12H216a12,12,0,0,0,12-12V56A12,12,0,0,0,216,44Zm4,156a4,4,0,0,1-4,4H40a4,4,0,0,1-4-4V56a4,4,0,0,1,4-4H216a4,4,0,0,1,4,4ZM76,84a8,8,0,1,1-8-8A8,8,0,0,1,76,84Zm40,0a8,8,0,1,1-8-8A8,8,0,0,1,116,84Z"},null,-1),ct=[ut],pt={name:"PhAppWindow"},dt=ne({...pt,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(n){const s=n,r=O("weight","regular"),l=O("size","1em"),S=O("color","currentColor"),C=O("mirrored",!1),p=V(()=>s.weight??r),y=V(()=>s.size??l),c=V(()=>s.color??S),m=V(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:C?"scale(-1, 1)":void 0);return(h,x)=>(i(),u("svg",me({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:y.value,height:y.value,fill:c.value,transform:m.value},h.$attrs),[fe(h.$slots,"default"),p.value==="bold"?(i(),u("g",Re,We)):p.value==="duotone"?(i(),u("g",qe,Ge)):p.value==="fill"?(i(),u("g",Qe,tt)):p.value==="light"?(i(),u("g",at,st)):p.value==="regular"?(i(),u("g",ot,rt)):p.value==="thin"?(i(),u("g",it,ct)):B("",!0)],16,Ue))}}),ft=["width","height","fill","transform"],mt={key:0},ht=a("path",{d:"M216,48H180V36A28,28,0,0,0,152,8H104A28,28,0,0,0,76,36V48H40a12,12,0,0,0,0,24h4V208a20,20,0,0,0,20,20H192a20,20,0,0,0,20-20V72h4a12,12,0,0,0,0-24ZM100,36a4,4,0,0,1,4-4h48a4,4,0,0,1,4,4V48H100Zm88,168H68V72H188ZM116,104v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Zm48,0v64a12,12,0,0,1-24,0V104a12,12,0,0,1,24,0Z"},null,-1),vt=[ht],yt={key:1},gt=a("path",{d:"M200,56V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V56Z",opacity:"0.2"},null,-1),wt=a("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"},null,-1),kt=[gt,wt],_t={key:2},Vt=a("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM112,168a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm0-120H96V40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8Z"},null,-1),At=[Vt],Ht={key:3},$t=a("path",{d:"M216,50H174V40a22,22,0,0,0-22-22H104A22,22,0,0,0,82,40V50H40a6,6,0,0,0,0,12H50V208a14,14,0,0,0,14,14H192a14,14,0,0,0,14-14V62h10a6,6,0,0,0,0-12ZM94,40a10,10,0,0,1,10-10h48a10,10,0,0,1,10,10V50H94ZM194,208a2,2,0,0,1-2,2H64a2,2,0,0,1-2-2V62H194ZM110,104v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Zm48,0v64a6,6,0,0,1-12,0V104a6,6,0,0,1,12,0Z"},null,-1),Mt=[$t],St={key:4},Ct=a("path",{d:"M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"},null,-1),Et=[Ct],Zt={key:5},bt=a("path",{d:"M216,52H172V40a20,20,0,0,0-20-20H104A20,20,0,0,0,84,40V52H40a4,4,0,0,0,0,8H52V208a12,12,0,0,0,12,12H192a12,12,0,0,0,12-12V60h12a4,4,0,0,0,0-8ZM92,40a12,12,0,0,1,12-12h48a12,12,0,0,1,12,12V52H92ZM196,208a4,4,0,0,1-4,4H64a4,4,0,0,1-4-4V60H196ZM108,104v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Zm48,0v64a4,4,0,0,1-8,0V104a4,4,0,0,1,8,0Z"},null,-1),xt=[bt],Tt={name:"PhTrash"},Ot=ne({...Tt,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(n){const s=n,r=O("weight","regular"),l=O("size","1em"),S=O("color","currentColor"),C=O("mirrored",!1),p=V(()=>s.weight??r),y=V(()=>s.size??l),c=V(()=>s.color??S),m=V(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:C?"scale(-1, 1)":void 0);return(h,x)=>(i(),u("svg",me({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:y.value,height:y.value,fill:c.value,transform:m.value},h.$attrs),[fe(h.$slots,"default"),p.value==="bold"?(i(),u("g",mt,vt)):p.value==="duotone"?(i(),u("g",yt,kt)):p.value==="fill"?(i(),u("g",_t,At)):p.value==="light"?(i(),u("g",Ht,Mt)):p.value==="regular"?(i(),u("g",St,Et)):p.value==="thin"?(i(),u("g",Zt,xt)):B("",!0)],16,ft))}}),re=64,ie=64,Nt=8,Kt=64,Bt=512*1024,zt=new Set(["cmd","meta","command","win","super","ctrl","control","alt","option","shift","enter","return","tab","space","escape","esc","backspace","delete","up","down","left","right","`","grave","minus","equal","plus","media_play_pause","media_next","media_previous","media_stop","volume_up","volume_down","volume_mute"]);function ee(n){if(n.length===0||n.length>Kt||n.trim().length===0)return!1;for(let s=0;s<n.length;s+=1)if(n.charCodeAt(s)<32)return!1;return!0}function jt(n){const s=n.trim().toLowerCase();return s?!!(zt.has(s)||s.length===1&&/[a-z0-9]/.test(s)||/^f([1-9]|1[0-2])$/.test(s)):!1}function te(n,s){if(!Array.isArray(n))throw new Error(`${s}必须是数组`);if(n.length===0||n.length>Nt)throw new Error(`${s}按键数量不合法`);const r=[];for(const l of n){if(typeof l!="string"||!jt(l))throw new Error(`${s}包含不支持的按键「${l||"(空)"}」`);r.push(l.trim().toLowerCase())}return r}function Dt(n,s){if(!n||typeof n!="object"||Array.isArray(n))throw new Error(`${s}快捷键格式错误`);const r=n,l={};if(r.mac!=null&&(l.mac=te(r.mac,`${s} macOS`)),r.win!=null&&(l.win=te(r.win,`${s} Windows`)),r.keys!=null&&(l.keys=te(r.keys,`${s} 通用`)),!l.mac&&!l.win&&!l.keys)throw new Error(`${s}至少需要一个有效快捷键`);return l}function Pt(n,s=n.length){if(s>Bt)throw new Error("导入文件过大,请选择 MOSS 导出的 JSON 备份");let r;try{r=JSON.parse(n)}catch{throw new Error("文件不是合法的 JSON")}if(!r||typeof r!="object"||Array.isArray(r))throw new Error("导入文件格式错误:根节点必须是 JSON 对象");const l=r;if(l.version!=null&&l.version!==1)throw new Error("导入文件版本不支持,请使用 MOSS 导出的 moss-hotkeys.json");const S=[];if(l.hiddenApps!=null){if(!Array.isArray(l.hiddenApps))throw new Error("hiddenApps 必须是数组");const y=new Set;for(let c=0;c<l.hiddenApps.length;c+=1){const m=l.hiddenApps[c];if(typeof m!="string")throw new Error(`hiddenApps 第 ${c+1} 项必须是字符串`);const h=m.trim();if(!ee(h))throw new Error(`hiddenApps 第 ${c+1} 项名称不合法`);if(y.has(h))throw new Error(`hiddenApps 中应用名称「${h}」重复`);y.add(h),S.push(h)}}if(l.apps==null||typeof l.apps!="object"||Array.isArray(l.apps))throw new Error("导入文件缺少 apps 对象");const C=Object.entries(l.apps);if(C.length>re)throw new Error(`应用数量 ${C.length} 超过上限 ${re}`);const p={};for(const[y,c]of C){const m=String(y).trim();if(!ee(m))throw new Error(`应用名称「${m||"(空)"}」不合法`);if(!c||typeof c!="object"||Array.isArray(c))throw new Error(`应用「${m}」格式错误`);const h=c;if(h.builtin===!0)throw new Error(`应用「${m}」不能标记为内置预设`);if(!h.actions||typeof h.actions!="object"||Array.isArray(h.actions))throw new Error(`应用「${m}」缺少 actions 对象`);const x=Object.entries(h.actions);if(x.length===0)throw new Error(`应用「${m}」至少需要一个动作`);if(x.length>ie)throw new Error(`应用「${m}」动作数量超过上限 ${ie}`);const I=new Set,T={};for(const[z,A]of x){const E=String(z).trim();if(!ee(E))throw new Error(`应用「${m}」动作名称「${E||"(空)"}」不合法`);if(I.has(E))throw new Error(`应用「${m}」动作名称「${E}」重复`);I.add(E),T[E]=Dt(A,`应用「${m}」动作「${E}」`)}p[m]={actions:T}}return{version:1,hiddenApps:S,apps:p}}const ae=new Set(["Meta","Control","Alt","Shift"]),Lt=new Set(["cmd","ctrl","alt","shift"]),ue={Space:"space",Enter:"enter",NumpadEnter:"enter",Tab:"tab",Backspace:"backspace",Delete:"delete",Escape:"escape",ArrowUp:"up",ArrowDown:"down",ArrowLeft:"left",ArrowRight:"right",Minus:"minus",Equal:"equal",BracketLeft:"[",BracketRight:"]",Semicolon:";",Quote:"'",Comma:",",Period:".",Slash:"/",Backslash:"\\",Backquote:"`"};function It(n){if(!n)return null;if(n.startsWith("Digit"))return n.slice(5).toLowerCase();if(n.startsWith("Key"))return n.slice(3).toLowerCase();if(n.startsWith("Numpad")){const s=n.slice(6);return/^\d$/.test(s)?s:{Add:"plus",Subtract:"minus",Multiply:"*",Divide:"/",Decimal:".",Enter:"enter"}[s]??null}return ue[n]?ue[n]:/^F\d{1,2}$/i.test(n)?n.toLowerCase():null}function ce(n){const s=[];if(n.metaKey&&s.push("cmd"),n.ctrlKey&&s.push("ctrl"),n.altKey&&s.push("alt"),n.shiftKey&&s.push("shift"),ae.has(n.key))return s;const r=It(n.code);if(r)return s.push(r),s;const l=n.key;return l===" "?s.push("space"):l&&s.push((l.length===1,l.toLowerCase())),s}function pe(n){return!n.length||!n.some(r=>!Lt.has(r))?"":n.join("+")}function de(n,{allowSingleKey:s=!1}={}){if(n.key==="Escape")return"clear";if(ae.has(n.key))return!1;const r=n.metaKey||n.ctrlKey||n.altKey,l=ae.has(n.key),S=n.key.length>1&&!l;return!s&&!r&&!S?!1:"capture"}const Ft={class:"hotkeys-page uxp-page-stack"},Ut={class:"status-card-main"},Rt={class:"status-copy"},Jt={class:"status-card-actions"},Wt={class:"hotkeys-layout"},qt={class:"panel presets-panel"},Xt={class:"panel-hd panel-hd-row"},Yt={class:"head-actions"},Gt=["element-loading-text"],Qt={class:"panel-desc"},ea={key:0,class:"uxp-empty presets-empty"},ta={class:"uxp-empty-icon"},aa={key:1,class:"app-grid"},na={class:"app-card-hd"},sa={class:"app-card-title"},oa={class:"app-card-ops"},la={key:0,class:"action-list"},ra={class:"action-name"},ia={class:"key-badge"},ua={key:1,class:"action-empty"},ca={class:"app-card-ft"},pa={class:"panel test-panel"},da={class:"panel-hd"},fa={class:"panel-bd"},ma={class:"test-row"},ha={class:"dialog-head"},va={class:"app-dialog-body"},ya={class:"actions-section"},ga={class:"actions-section-head"},wa={class:"dialog-section-title"},ka={class:"actions-count"},_a={key:0,class:"uxp-empty actions-empty-inline"},Va={class:"action-card-top"},Aa={class:"action-card-index"},Ha={class:"shortcut-stack"},$a={class:"shortcut-field"},Ma={class:"shortcut-label"},Sa=ne({__name:"Hotkeys",setup(n){const s=M({platform:"",apps:{},hiddenApps:[],builtinApps:[]}),r=M({ready:!1,platform:"",message:""}),l=M(!1),S=M(!1),C=M(!1),p=M(!0),y=M(!1),c=M(!1),m=M(!1),h=M(""),x=M(null),I=V(()=>y.value?"正在导出快捷键预设…":c.value?"正在导入快捷键预设…":"正在加载应用预设…"),T=M(!1),z=M("add"),A=Pe({name:"",actions:[]}),E=V(()=>r.value.platform||s.value.platform||""),P=V(()=>E.value==="darwin"),j=V(()=>E.value==="win32"),F=V(()=>P.value?"macOS":j.value?"Windows":E.value||"当前系统"),J=V(()=>j.value?"winText":"macText"),he=V(()=>P.value?"mac":j.value?"win":"all"),ve=V(()=>P.value?"cmd+shift+p":j.value?"ctrl+shift+p":"cmd+s 或 ctrl+s"),ye=V(()=>P.value?"例如 cmd+alt+1":j.value?"例如 ctrl+shift+p":"例如 cmd+s 或 ctrl+s"),W=V(()=>Object.entries(s.value.apps||{}).map(([t,e])=>({name:t,builtin:s.value.builtinApps.includes(t),actions:Object.entries(e).map(([o,d])=>({name:o,keysText:ge(d)}))})));function N(t){return t.join("+")}function ge(t){var e,o,d,H,w;return(e=t.keys)!=null&&e.length?N(t.keys):P.value&&((o=t.mac)!=null&&o.length)?N(t.mac):j.value&&((d=t.win)!=null&&d.length)?N(t.win):(H=t.mac)!=null&&H.length?N(t.mac):(w=t.win)!=null&&w.length?N(t.win):"未设置"}function q(t){return String(t||"").split("+").map(e=>e.trim().toLowerCase()).filter(Boolean)}function X(){h.value=""}function we(t){const e=de(t);if(e===!1)return;if(t.preventDefault(),t.stopPropagation(),e==="clear"){X();return}const o=pe(ce(t));o&&(h.value=o)}function ke(t,e,o){const d=de(t,{allowSingleKey:!0});if(d===!1)return;if(d==="clear"){e[o]="";return}const H=pe(ce(t));H&&(e[o]=H)}async function L(){p.value=!0;try{s.value=await b("/api/mcp/hotkey/catalog")}catch(t){k.error((t==null?void 0:t.message)||"加载预设失败")}finally{p.value=!1}}async function se(){l.value=!0;try{r.value=await b("/api/mcp/hotkey/status")}catch(t){k.error((t==null?void 0:t.message)||"检测失败")}finally{l.value=!1}}async function _e(){try{await b("/api/mcp/hotkey/open-guide",{method:"POST"})}catch(t){k.error((t==null?void 0:t.message)||"无法打开系统设置")}}function Y(t){if(t){z.value="edit",A.name=t.name;const e=s.value.apps[t.name]||{};A.actions=Object.entries(e).map(([o,d])=>({name:o,macText:N(d.mac||[]),winText:N(d.win||[])}))}else z.value="add",A.name="",A.actions=[{name:"",macText:"",winText:""}];T.value=!0}function Ve(){A.actions.push({name:"",macText:"",winText:""})}function Ae(){A.name="",A.actions=[]}function He(){const t={};for(const e of A.actions){const o=e.name.trim();if(!o)continue;const d={},H=q(e.macText),w=q(e.winText);H.length&&(d.mac=H),w.length&&(d.win=w),!(!d.mac&&!d.win)&&(t[o]=d)}return{actions:t}}async function $e(){const t=A.name.trim();if(!t){k.warning("请填写应用名称");return}const e=He();if(!Object.keys(e.actions).length){k.warning("至少添加一个有效动作");return}C.value=!0;try{await b("/api/mcp/hotkey/apps",{method:"POST",body:JSON.stringify({name:t,entry:e})}),T.value=!1,await L(),k.success("已保存")}catch(o){k.error((o==null?void 0:o.message)||"保存失败")}finally{C.value=!1}}async function Me(t){try{await le.confirm(`确定删除「${t}」的预设?内置应用删除后可重新导入内置包恢复。`,"删除预设",{type:"warning"})}catch{return}try{await b(`/api/mcp/hotkey/apps/${encodeURIComponent(t)}`,{method:"DELETE"}),await L(),k.success("已删除")}catch(e){k.error((e==null?void 0:e.message)||"删除失败")}}async function Se(){const t=q(h.value);if(!t.length){k.warning("请先输入或录制快捷键");return}S.value=!0;try{await b("/api/mcp/hotkey/send",{method:"POST",body:JSON.stringify({keys:t})}),k.success("已发送"),X()}catch(e){k.error((e==null?void 0:e.message)||"发送失败")}finally{S.value=!1}}async function Ce(){if(!y.value){y.value=!0;try{const t=await b("/api/mcp/hotkey/export"),e=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),o=URL.createObjectURL(e),d=document.createElement("a");d.href=o,d.download="moss-hotkeys.json",d.click(),URL.revokeObjectURL(o),k.success("已导出快捷键预设")}catch(t){k.error((t==null?void 0:t.message)||"导出失败")}finally{y.value=!1}}}function Ee(){var t;c.value||y.value||(t=x.value)==null||t.click()}async function Ze(t){var H;const e=t.target,o=(H=e.files)==null?void 0:H[0];if(e.value="",!o||c.value||y.value)return;let d;try{const w=await o.text();d=Pt(w,o.size)}catch(w){k.error((w==null?void 0:w.message)||"导入文件校验失败");return}try{await le.confirm("文件格式校验通过。导入将与现有自定义预设合并,同名应用会被覆盖。是否继续?","导入快捷键预设",{type:"warning",confirmButtonText:"确认导入",cancelButtonText:"取消",distinguishCancelAndClose:!0,customClass:"moss-message-box moss-message-box-narrow"})}catch{return}c.value=!0;try{await b("/api/mcp/hotkey/import",{method:"POST",body:JSON.stringify(d)}),await L(),k.success("导入成功")}catch(w){k.error((w==null?void 0:w.message)||"导入失败")}finally{c.value=!1}}async function be(){if(!m.value){m.value=!0;try{await b("/api/mcp/hotkey/presets",{method:"PUT",body:JSON.stringify({hiddenApps:[]})}),await L(),k.success("已恢复全部内置预设")}catch(t){k.error((t==null?void 0:t.message)||"恢复失败")}finally{m.value=!1}}}return Ke(async()=>{await Promise.all([L(),se()])}),(t,e)=>{const o=K("el-button"),d=K("el-button-group"),H=K("el-tag"),w=K("el-input"),xe=K("el-form-item"),Te=K("el-form"),Oe=K("el-dialog"),Ne=De("loading");return i(),u(R,null,[a("div",Ft,[a("section",{class:oe(["status-card",r.value.ready?"is-ready":"is-pending"])},[a("div",Ut,[e[6]||(e[6]=a("span",{class:"status-dot","aria-hidden":"true"},null,-1)),a("div",Rt,[a("strong",null,$(r.value.message||"正在检测权限…"),1),a("p",null,$(F.value)+" · "+$(r.value.ready?"Agent 可通过 moss-hotkey 向应用发送快捷键":"需完成系统授权后才能试发"),1)])]),a("div",Jt,[f(o,{link:"",type:"primary",loading:l.value,onClick:se},{default:g(()=>[...e[7]||(e[7]=[_("重新检测",-1)])]),_:1},8,["loading"]),r.value.guide?(i(),G(o,{key:0,link:"",type:"primary",onClick:_e},{default:g(()=>[...e[8]||(e[8]=[_("打开系统设置",-1)])]),_:1})):B("",!0)])],2),a("div",Wt,[a("section",qt,[a("div",Xt,[e[13]||(e[13]=a("span",null,"应用预设",-1)),a("div",Yt,[f(d,{class:"head-actions-backup"},{default:g(()=>[f(o,{size:"small",plain:"",loading:y.value,disabled:p.value||c.value||y.value,onClick:Ce},{default:g(()=>[...e[9]||(e[9]=[_("导出",-1)])]),_:1},8,["loading","disabled"]),f(o,{size:"small",plain:"",loading:c.value,disabled:p.value||c.value||y.value,onClick:Ee},{default:g(()=>[...e[10]||(e[10]=[_("导入",-1)])]),_:1},8,["loading","disabled"])]),_:1}),f(o,{size:"small",plain:"",disabled:p.value||c.value||y.value||m.value,loading:m.value,onClick:be},{default:g(()=>[...e[11]||(e[11]=[_("恢复内置",-1)])]),_:1},8,["disabled","loading"]),f(o,{size:"small",type:"primary",disabled:p.value||c.value||y.value,onClick:e[0]||(e[0]=v=>Y())},{default:g(()=>[...e[12]||(e[12]=[_("添加应用",-1)])]),_:1},8,["disabled"])])]),Be((i(),u("div",{class:"panel-bd","element-loading-text":I.value},[a("p",Qt,[e[14]||(e[14]=_("内置 Chrome 常用映射;其余应用可在本页添加。当前系统:",-1)),a("strong",null,$(F.value),1)]),!p.value&&!W.value.length?(i(),u("div",ea,[a("div",ta,[f(U(dt),{size:24})]),e[16]||(e[16]=a("p",null,"还没有应用预设。添加后 MOSS 才能向对应应用发送快捷键。",-1)),f(o,{type:"primary",onClick:e[1]||(e[1]=v=>Y())},{default:g(()=>[...e[15]||(e[15]=[_("添加应用",-1)])]),_:1})])):W.value.length?(i(),u("div",aa,[(i(!0),u(R,null,Q(W.value,v=>(i(),u("article",{key:v.name,class:"app-card"},[a("header",na,[a("div",sa,[a("h3",null,$(v.name),1),v.builtin?(i(),G(H,{key:0,size:"small",type:"info"},{default:g(()=>[...e[17]||(e[17]=[_("内置",-1)])]),_:1})):B("",!0)]),a("div",oa,[v.builtin?B("",!0):(i(),G(o,{key:0,link:"",type:"primary",size:"small",onClick:Z=>Y(v)},{default:g(()=>[...e[18]||(e[18]=[_("编辑",-1)])]),_:1},8,["onClick"])),f(o,{link:"",type:"warning",size:"small",onClick:Z=>Me(v.name)},{default:g(()=>[...e[19]||(e[19]=[_("删除",-1)])]),_:1},8,["onClick"])])]),v.actions.length?(i(),u("ul",la,[(i(!0),u(R,null,Q(v.actions,Z=>(i(),u("li",{key:Z.name,class:"action-row"},[a("span",ra,$(Z.name),1),a("kbd",ia,$(Z.keysText),1)]))),128))])):(i(),u("p",ua,"暂无动作")),a("footer",ca,$(v.actions.length)+" 个动作",1)]))),128))])):B("",!0)],8,Gt)),[[Ne,p.value||c.value||y.value]])]),a("section",pa,[a("div",da,[f(U(ze),{size:18,weight:"duotone"}),e[20]||(e[20]=a("span",null,"试发快捷键",-1))]),a("div",fa,[e[23]||(e[23]=a("p",{class:"panel-desc"},"点击输入框后按下组合键即可录制,用于验证权限与映射是否生效。",-1)),a("div",ma,[f(w,{modelValue:h.value,"onUpdate:modelValue":e[2]||(e[2]=v=>h.value=v),placeholder:ye.value,onKeydownCapture:we},je({_:2},[h.value?{name:"suffix",fn:g(()=>[f(o,{link:"",type:"primary",onClick:X},{default:g(()=>[...e[21]||(e[21]=[_("清空",-1)])]),_:1})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),f(o,{type:"primary",loading:S.value,onClick:Se},{default:g(()=>[...e[22]||(e[22]=[_("发送",-1)])]),_:1},8,["loading"])]),e[24]||(e[24]=a("p",{class:"field-hint"},"测试全局快捷键时,请确保目标应用已开启全局快捷键并在后台运行。",-1))])])]),a("input",{ref_key:"importInput",ref:x,type:"file",accept:"application/json,.json",hidden:"",onChange:Ze},null,544)]),f(Oe,{modelValue:T.value,"onUpdate:modelValue":e[5]||(e[5]=v=>T.value=v),class:"moss-dialog hotkey-app-dialog",width:"520px","align-center":"","destroy-on-close":"",onClosed:Ae},{header:g(()=>[a("div",ha,[a("h3",null,$(z.value==="add"?"添加应用":"编辑应用"),1),a("p",null,"为 "+$(F.value)+" 配置动作快捷键。应用名需与系统中显示的名称一致。",1)])]),footer:g(()=>[f(o,{onClick:e[4]||(e[4]=v=>T.value=!1),disabled:C.value},{default:g(()=>[...e[30]||(e[30]=[_("取消",-1)])]),_:1},8,["disabled"]),f(o,{type:"primary",loading:C.value,onClick:$e},{default:g(()=>[...e[31]||(e[31]=[_("保存",-1)])]),_:1},8,["loading"])]),default:g(()=>[a("div",va,[f(Te,{"label-position":"top"},{default:g(()=>[f(xe,{label:"应用名称"},{default:g(()=>[f(w,{modelValue:A.name,"onUpdate:modelValue":e[3]||(e[3]=v=>A.name=v),disabled:z.value==="edit",placeholder:"例如 Chrome"},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a("div",ya,[a("div",ga,[a("span",wa,[e[25]||(e[25]=_(" 动作与快捷键 ",-1)),a("span",ka,$(A.actions.length)+" 项",1)]),f(o,{type:"primary",link:"",onClick:Ve},{default:g(()=>[f(U(Fe),{size:14,weight:"bold"}),e[26]||(e[26]=_(" 添加动作 ",-1))]),_:1})]),A.actions.length?B("",!0):(i(),u("div",_a,[...e[27]||(e[27]=[a("p",null,"还没有动作,点击上方「添加动作」。",-1)])])),(i(!0),u(R,null,Q(A.actions,(v,Z)=>(i(),u("div",{key:Z,class:"dialog-action-card"},[a("div",Va,[a("span",Aa,$(Z+1),1),f(w,{modelValue:v.name,"onUpdate:modelValue":D=>v.name=D,class:"action-name-input",placeholder:"动作名称,如 刷新"},null,8,["modelValue","onUpdate:modelValue"]),f(o,{link:"",type:"warning",onClick:D=>A.actions.splice(Z,1)},{default:g(()=>[f(U(Ot),{size:16})]),_:1},8,["onClick"])]),a("div",Ha,[a("div",$a,[a("label",Ma,[a("span",{class:oe(["platform-badge",he.value])},$(F.value),3),e[28]||(e[28]=_(" 组合键 ",-1))]),f(w,{modelValue:v[J.value],"onUpdate:modelValue":D=>v[J.value]=D,placeholder:ve.value,onKeydownCapture:Le(D=>ke(D,v,J.value),["prevent"])},null,8,["modelValue","onUpdate:modelValue","placeholder","onKeydownCapture"])])]),e[29]||(e[29]=a("p",{class:"field-hint"},"聚焦组合键输入框后按键即可录制。",-1))]))),128))])])]),_:1},8,["modelValue"])],64)}}}),xa=Ie(Sa,[["__scopeId","data-v-3499f2c8"]]);export{xa as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.l4-wizard[data-v-95b5acb9]{height:100%;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px;overflow-y:auto}.l4-page-head[data-v-95b5acb9]{flex:0 0 auto;width:100%;max-width:640px;text-align:center;padding:0 4px}.l4-page-kicker[data-v-95b5acb9]{margin:0 0 6px;font-size:11px;font-weight:650;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}.l4-page-title[data-v-95b5acb9]{margin:0 0 8px;font-size:26px;font-weight:650;letter-spacing:-.04em;line-height:1.2;color:var(--ink)}.l4-page-sub[data-v-95b5acb9]{margin:0;font-size:13px;line-height:1.55;color:var(--muted)}.l4-nav[data-v-95b5acb9]{position:relative;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;flex:0 0 auto;max-width:640px;width:100%;margin:0;padding:0 4px}.l4-nav-item[data-v-95b5acb9]{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:8px;padding:4px 6px 0;border:0;background:transparent;cursor:pointer}.l4-nav-item[data-v-95b5acb9]:not(:last-child):before{content:"";position:absolute;z-index:0;top:18px;left:calc(50% + 17px);width:calc(100% - 34px);height:2px;background:#00000012;border-radius:1px;pointer-events:none}.l4-nav-item.done[data-v-95b5acb9]:not(:last-child):before{background:#5b4cdb61}.l4-nav-num[data-v-95b5acb9]{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;font-size:12px;font-weight:650;color:var(--muted);background:#eef0f5;border:2px solid #f6f7fb;box-shadow:0 1px 4px #0000000f;transition:background .15s ease,color .15s ease,border-color .15s ease,box-shadow .15s ease}.l4-nav-check[data-v-95b5acb9]{width:14px;height:14px}.l4-nav-label[data-v-95b5acb9]{font-size:11px;font-weight:550;color:var(--muted);text-align:center;line-height:1.35;transition:color .15s ease}.l4-nav-item.active .l4-nav-num[data-v-95b5acb9]{background:var(--accent);color:#fff;border-color:#f6f7fb;box-shadow:0 2px 8px #5b4cdb59}.l4-nav-item.active .l4-nav-label[data-v-95b5acb9]{color:var(--accent);font-weight:650}.l4-nav-item.done .l4-nav-num[data-v-95b5acb9]{background:#ebe8f9;color:var(--accent);border-color:#f6f7fb;box-shadow:0 0 0 1px #5b4cdb2e}.l4-nav-item.done .l4-nav-label[data-v-95b5acb9]{color:var(--ink)}.l4-nav-item.done:hover .l4-nav-num[data-v-95b5acb9]{background:#e2ddf5}.l4-stage-wrap[data-v-95b5acb9]{flex:0 0 auto;display:flex;flex-direction:column;gap:20px;max-width:840px;width:100%;margin:0}.l4-stage[data-v-95b5acb9]{display:grid;grid-template-columns:1fr 1fr;height:340px;min-height:340px;border-radius:16px;overflow:hidden;border:1px solid rgb(255 255 255 / .82);background:#ffffffb8;box-shadow:0 16px 40px #5b4cdb1a,0 4px 14px #1b1f2a0f,inset 0 1px #fffffff2}.l4-stage-form[data-v-95b5acb9]{grid-template-columns:1fr;max-width:520px;margin:0 auto;width:100%}.l4-copy[data-v-95b5acb9]{min-height:0;padding:28px 30px;display:flex;flex-direction:column;justify-content:center;overflow-y:auto}.l4-kicker[data-v-95b5acb9]{margin:0 0 8px;font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}.l4-copy h3[data-v-95b5acb9]{margin:0 0 10px;font-size:22px;font-weight:650;letter-spacing:-.03em;line-height:1.3}.l4-desc[data-v-95b5acb9]{margin:0 0 16px;font-size:14px;line-height:1.65;color:var(--muted)}.l4-checklist[data-v-95b5acb9]{margin:0 0 16px;padding:0;list-style:none;display:flex;flex-direction:column;gap:10px}.l4-checklist li[data-v-95b5acb9]{position:relative;padding-left:22px;font-size:13px;line-height:1.5;color:var(--ink)}.l4-checklist li[data-v-95b5acb9]:before{content:"";position:absolute;left:0;top:6px;width:8px;height:8px;border-radius:50%;background:#5b4cdb59;box-shadow:0 0 0 3px #5b4cdb1a}.l4-link[data-v-95b5acb9]{display:inline-flex;align-items:center;gap:4px;font-size:13px;font-weight:550;color:var(--accent);text-decoration:none}.l4-link[data-v-95b5acb9]:hover{text-decoration:underline}.l4-visual[data-v-95b5acb9]{min-height:0;padding:20px;display:flex;align-items:center;justify-content:center;background:radial-gradient(120px 120px at 80% 20%,rgb(91 76 219 / .1),transparent 70%),linear-gradient(160deg,#5b4cdb0d,#ffffff1f);border-left:1px solid rgb(255 255 255 / .55);overflow:auto}.l4-screenshot[data-v-95b5acb9]{width:100%;max-width:300px;margin:0;display:flex;flex-direction:column;align-items:center}.l4-screenshot-img[data-v-95b5acb9]{width:280px;max-width:100%;height:200px;border-radius:10px;border:1px solid rgb(0 0 0 / .08);box-shadow:0 10px 28px #1b1f2a1f;background:#fff;cursor:zoom-in;overflow:hidden}.l4-screenshot-img[data-v-95b5acb9] .el-image__inner{width:100%;height:100%;object-fit:contain}.l4-screenshot-img[data-v-95b5acb9] .el-image__error{font-size:12px}.l4-screenshot figcaption[data-v-95b5acb9]{margin-top:10px;font-size:11px;line-height:1.45;color:var(--muted);text-align:center}.l4-form[data-v-95b5acb9] .el-form-item{margin-bottom:14px}.l4-form[data-v-95b5acb9] .el-form-item__label{font-weight:600;padding-bottom:4px}.l4-actions[data-v-95b5acb9]{flex:0 0 auto;min-height:32px;display:flex;align-items:center;justify-content:center;gap:10px;padding:0 2px}.mono-input[data-v-95b5acb9] .el-input__inner{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}@media(max-width:820px){.l4-stage[data-v-95b5acb9]{grid-template-columns:1fr;height:560px;min-height:560px}.l4-visual[data-v-95b5acb9]{border-left:0;border-top:1px solid rgb(255 255 255 / .55)}}.platform-hub[data-v-4160d686]{flex:1;min-height:0;min-width:0;display:flex;flex-direction:column;overflow:hidden}.platform-intro[data-v-4160d686]{margin:0 0 16px;font-size:13px;color:var(--muted);line-height:1.55;flex-shrink:0}.platform-grid[data-v-4160d686]{flex:1;min-height:0;overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;align-content:start}.platform-card[data-v-4160d686]{border-radius:14px;padding:16px 18px;display:flex;flex-direction:column;min-height:168px}.platform-vendor[data-v-4160d686]{display:block;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);margin-bottom:4px}.platform-card-head h3[data-v-4160d686]{margin:0 0 8px;font-size:15px;font-weight:650;line-height:1.35}.platform-tags[data-v-4160d686]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.platform-desc[data-v-4160d686]{flex:1;margin:0 0 14px;font-size:12px;line-height:1.55;color:var(--muted)}.platform-actions[data-v-4160d686]{display:flex;justify-content:flex-end}.ext-icon[data-v-4160d686]{margin-left:4px;font-size:12px;opacity:.85}.platform-loading[data-v-4160d686]{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;color:var(--muted)}.mcp-hub[data-v-162e9143]{display:flex;flex-direction:column;flex:1;min-height:0;height:100%;min-width:0;max-width:100%;overflow:hidden}.mcp-tabs[data-v-162e9143]{flex:1;min-height:0;display:flex;flex-direction:column}.mcp-tabs[data-v-162e9143] .el-tabs__header{flex-shrink:0;margin-bottom:16px}.mcp-tabs[data-v-162e9143] .el-tabs__content{flex:1;min-height:0;overflow:hidden}.mcp-tabs[data-v-162e9143] .el-tab-pane{height:100%;overflow:hidden;display:flex;flex-direction:column}.tab-pane-body[data-v-162e9143]{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:14px;padding-bottom:2px}.start-tab[data-v-162e9143]{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;border-radius:var(--radius)}.start-canvas[data-v-162e9143]{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;isolation:isolate;border-radius:inherit}.start-canvas[data-v-162e9143]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(ellipse 90% 55% at 50% -8%,rgb(91 76 219 / .2),transparent 58%),radial-gradient(ellipse 45% 38% at 96% 88%,rgb(120 100 255 / .12),transparent 52%),radial-gradient(ellipse 38% 32% at 4% 78%,rgb(91 76 219 / .1),transparent 48%),linear-gradient(168deg,#f2f3fa,#e9ecf6 42%,#eef0f9);pointer-events:none}.start-canvas[data-v-162e9143]:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background-image:radial-gradient(rgb(91 76 219 / .07) 1px,transparent 1px);background-size:22px 22px;mask-image:linear-gradient(to bottom,rgb(0 0 0 / .85) 0%,transparent 92%);-webkit-mask-image:linear-gradient(to bottom,rgb(0 0 0 / .85) 0%,transparent 92%);pointer-events:none}.start-shell[data-v-162e9143]{position:relative;z-index:1;flex:1;min-height:0;display:grid;grid-template-rows:minmax(0,1fr) auto;overflow:hidden}.start-shell[data-v-162e9143] .l4-wizard{padding:32px 28px 24px;min-height:0}.start-status-bar[data-v-162e9143]{display:flex;align-items:center;gap:14px;padding:12px 20px;border-top:1px solid rgb(255 255 255 / .45);background:#ffffff6b;backdrop-filter:blur(16px) saturate(140%);-webkit-backdrop-filter:blur(16px) saturate(140%);min-height:52px;overflow-x:auto}.start-status-bar-head[data-v-162e9143]{display:flex;align-items:center;gap:8px;flex-shrink:0}.start-status-bar-title[data-v-162e9143]{font-size:12px;font-weight:650;color:var(--ink)}.start-status-badge[data-v-162e9143]{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:999px;font-size:11px;font-weight:650}.start-status-badge.ok[data-v-162e9143]{background:#16a34a1f;color:#157a3c}.start-status-badge.warn[data-v-162e9143]{background:#d977061f;color:#9a6700}.start-status-chips[data-v-162e9143]{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.start-status-chip[data-v-162e9143]{flex-shrink:0;padding:5px 10px;border-radius:999px;font-size:11px;line-height:1.3;background:#0000000a;color:var(--muted)}.start-status-chip.ok[data-v-162e9143]{background:#16a34a14;color:#2d6a4f}.start-status-chip.warn[data-v-162e9143]{background:#d9770614;color:#9a6700}.start-status-chip.fail[data-v-162e9143]{background:#dc262614;color:#b42318}.tab-panel[data-v-162e9143]{flex:1;min-height:0;display:flex;flex-direction:column;margin-bottom:0;overflow:hidden}.tab-panel .panel-head[data-v-162e9143]{flex-shrink:0}.tab-panel-scroll[data-v-162e9143]{flex:1;min-height:0;overflow:auto}.tab-panel-empty[data-v-162e9143]{padding:48px 0}.mcp-tabs[data-v-162e9143] .tab-market{flex:1;min-height:0}.mcp-tabs[data-v-162e9143] .el-tabs__item{font-weight:550}.panel.glass[data-v-162e9143]{border:0;margin-bottom:0}.panel[data-v-162e9143]{border:0;border-radius:var(--radius);padding:16px 18px}.panel-head[data-v-162e9143]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.panel-head.compact[data-v-162e9143]{align-items:center;margin-bottom:10px}.panel-head h2[data-v-162e9143]{margin:0;font-size:17px;font-weight:650}.panel-desc[data-v-162e9143]{margin:4px 0 0;font-size:12px;color:var(--muted);line-height:1.5}.head-actions[data-v-162e9143]{display:flex;gap:8px;flex-shrink:0}.endpoints-panel[data-v-162e9143],.tools-panel[data-v-162e9143]{min-width:0}.endpoints-table[data-v-162e9143]{width:100%}.ep-name[data-v-162e9143]{font-weight:600;margin-right:6px}.ep-tag[data-v-162e9143]{vertical-align:middle}.ep-mask[data-v-162e9143]{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--muted)}.bridge-ok[data-v-162e9143]{font-size:12px;color:#2d6a4f}.bridge-idle[data-v-162e9143]{color:var(--muted)}.tools-table[data-v-162e9143]{width:100%;min-width:720px}.tool-name-cell[data-v-162e9143]{display:flex;align-items:center;flex-wrap:wrap;gap:4px 0}.tool-name[data-v-162e9143]{font-weight:600;margin-right:6px}.tool-id[data-v-162e9143]{margin-top:2px;font-size:11px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.tool-desc[data-v-162e9143]{font-size:12px;color:var(--muted);line-height:1.45}.tool-desc-ellipsis[data-v-162e9143]{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.tool-desc-muted[data-v-162e9143]{color:var(--muted)}.tool-dialog-meta[data-v-162e9143]{margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.install-tag[data-v-162e9143]{vertical-align:middle}.tools-table[data-v-162e9143] .row-installing td{background-color:#e6a23c14!important}.install-progress[data-v-162e9143]{min-height:120px;padding:8px 4px 4px;text-align:center}.install-tool-name[data-v-162e9143]{margin:0 0 10px;font-size:15px;font-weight:650}.install-stage[data-v-162e9143]{margin:0 0 6px;font-size:14px;color:var(--text, #303133)}.install-hint[data-v-162e9143]{margin:0 0 18px;font-size:12px;color:var(--muted);line-height:1.55}.cmd-preview[data-v-162e9143]{font-size:11px;color:var(--muted);word-break:break-all}.endpoint-secret-input[data-v-162e9143] .el-input__inner{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}.json-editor-shell[data-v-162e9143]{border-radius:6px;border:1px solid var(--border-color);background:#fafafa;overflow:hidden}.json-editor[data-v-162e9143]{display:block;width:100%;min-height:168px;max-height:220px;resize:vertical;border:0;padding:14px 16px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.6;color:var(--ink);background:transparent;outline:none}.json-editor[data-v-162e9143]::placeholder{color:#9aa3b2}.json-editor-foot[data-v-162e9143]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:10px;min-height:22px}.json-foot-link[data-v-162e9143]{border:0;background:none;padding:0;font-size:12px;color:var(--accent);cursor:pointer}.json-foot-link[data-v-162e9143]:hover{text-decoration:underline;text-underline-offset:2px}.json-preview-ok[data-v-162e9143]{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#157a3c}.json-preview-dot[data-v-162e9143]{width:6px;height:6px;border-radius:50%;background:var(--ok);flex-shrink:0}.json-preview-type[data-v-162e9143]{font-weight:500;color:var(--muted)}.json-inline-error[data-v-162e9143]{margin:8px 0 0;font-size:12px;line-height:1.5;color:var(--danger)}.json-inline-hint[data-v-162e9143]{margin:8px 0 0;font-size:12px;line-height:1.5;color:var(--muted);white-space:pre-line}.tool-dialog-field[data-v-162e9143]{margin-top:12px}.tool-dialog-label[data-v-162e9143]{display:block;margin-bottom:6px;font-size:13px;font-weight:600}.tool-dialog-endpoints[data-v-162e9143]{margin-top:16px;padding-top:14px;border-top:1px solid var(--border-color)}.tool-form[data-v-162e9143] .el-form-item{margin-bottom:12px}.tool-form[data-v-162e9143] .el-form-item__label{font-weight:600;padding-bottom:4px}.tool-dialog-footer[data-v-162e9143]{display:flex;justify-content:flex-end;gap:8px}.settings-tab[data-v-162e9143]{flex:1;min-height:0;overflow-y:auto;display:flex;align-items:flex-start;justify-content:center;padding:28px 24px 32px}.settings-shell[data-v-162e9143]{width:100%;max-width:720px;display:flex;flex-direction:column;gap:16px}.settings-hero[data-v-162e9143]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:0 2px 4px}.settings-kicker[data-v-162e9143]{margin:0 0 6px;font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}.settings-title[data-v-162e9143]{margin:0 0 8px;font-size:22px;font-weight:650;letter-spacing:-.03em;line-height:1.25}.settings-sub[data-v-162e9143]{margin:0;font-size:13px;line-height:1.6;color:var(--muted);max-width:480px}.settings-hero-badge[data-v-162e9143]{flex-shrink:0;display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:999px;font-size:12px;font-weight:650}.settings-hero-badge.ok[data-v-162e9143]{background:#16a34a1f;color:#157a3c}.settings-hero-badge.warn[data-v-162e9143]{background:#d977061f;color:#9a6700}.settings-card[data-v-162e9143]{border-radius:16px;padding:20px 22px;border:1px solid rgb(255 255 255 / .72);background:#ffffff85;box-shadow:inset 0 1px #ffffffd9}.settings-card-icon[data-v-162e9143]{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px}.settings-card-icon svg[data-v-162e9143]{width:18px;height:18px}.settings-card-icon.notify[data-v-162e9143]{background:#5b4cdb1a;color:var(--accent)}.settings-card-icon.doctor[data-v-162e9143]{background:#16a34a1a;color:#157a3c}.settings-notify[data-v-162e9143]{display:flex;gap:16px;align-items:flex-start}.settings-notify-body[data-v-162e9143]{flex:1;min-width:0}.settings-notify-head h3[data-v-162e9143],.settings-doctor-title h3[data-v-162e9143]{margin:0 0 4px;font-size:15px;font-weight:650}.settings-notify-head p[data-v-162e9143],.settings-doctor-title p[data-v-162e9143]{margin:0;font-size:12px;line-height:1.5;color:var(--muted)}.settings-toggle-row[data-v-162e9143]{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:16px;padding:14px 16px;border-radius:12px;background:#00000008;border:1px solid rgb(0 0 0 / .04)}.settings-toggle-copy[data-v-162e9143]{display:flex;flex-direction:column;gap:3px;min-width:0}.settings-toggle-label[data-v-162e9143]{font-size:14px;font-weight:600;color:var(--ink)}.settings-toggle-hint[data-v-162e9143]{font-size:12px;line-height:1.45;color:var(--muted)}.settings-footnote[data-v-162e9143]{margin:12px 0 0;font-size:11px;line-height:1.5;color:var(--muted)}.settings-doctor-head[data-v-162e9143]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:16px}.settings-doctor-title[data-v-162e9143]{display:flex;align-items:flex-start;gap:12px}.doctor-grid[data-v-162e9143]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.doctor-tile[data-v-162e9143]{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:12px;background:#00000006;border:1px solid rgb(0 0 0 / .04)}.doctor-tile-mark[data-v-162e9143]{flex-shrink:0;width:8px;height:8px;margin-top:5px;border-radius:50%;background:currentColor;box-shadow:0 0 0 3px #0000000a}.doctor-tile-body[data-v-162e9143]{flex:1;min-width:0}.doctor-tile-msg[data-v-162e9143]{margin:0;font-size:12px;line-height:1.5}.doctor-tile-action[data-v-162e9143]{margin-top:6px;padding:0;border:0;background:transparent;font-size:12px;font-weight:550;color:var(--accent);cursor:pointer;text-decoration:none}.doctor-tile-action[data-v-162e9143]:hover{text-decoration:underline}.doctor-tile.ok[data-v-162e9143]{color:#2d6a4f;background:#16a34a0f;border-color:#16a34a1f}.doctor-tile.ok .doctor-tile-mark[data-v-162e9143]{box-shadow:0 0 0 3px #16a34a1f}.doctor-tile.warn[data-v-162e9143]{color:#9a6700;background:#d977060f;border-color:#d977061f}.doctor-tile.warn .doctor-tile-mark[data-v-162e9143]{box-shadow:0 0 0 3px #d977061f}.doctor-tile.fail[data-v-162e9143]{color:#b42318;background:#dc26260f;border-color:#dc26261f}.doctor-tile.fail .doctor-tile-mark[data-v-162e9143]{box-shadow:0 0 0 3px #dc26261f}.settings-stats[data-v-162e9143]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.settings-stat[data-v-162e9143]{display:flex;flex-direction:column;align-items:center;gap:2px;padding:14px 12px;border-radius:12px;background:#ffffff61;border:1px solid rgb(255 255 255 / .65)}.settings-stat-val[data-v-162e9143]{font-size:20px;font-weight:650;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}.settings-stat-label[data-v-162e9143]{font-size:11px;color:var(--muted)}@media(max-width:640px){.settings-tab[data-v-162e9143]{padding:20px 16px 24px}.settings-hero[data-v-162e9143]{flex-direction:column;gap:10px}.settings-notify[data-v-162e9143]{flex-direction:column}.settings-toggle-row[data-v-162e9143]{flex-direction:column;align-items:stretch}.doctor-grid[data-v-162e9143],.settings-stats[data-v-162e9143]{grid-template-columns:1fr}}.link[data-v-162e9143]{color:var(--accent);font-size:13px}.mcp-cell-tooltip{max-width:min(420px,90vw);line-height:1.55}.json-example-popover.el-popover.el-popper{border-radius:12px;padding:12px 14px}.json-popover-content{max-height:360px;overflow:auto}.json-popover-title{margin:0 0 6px;font-size:11px;font-weight:650;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.json-popover-title+.json-popover-code{margin-bottom:12px}.json-popover-code{margin:0;padding:10px 12px;border-radius:8px;background:#0000000a;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;white-space:pre;overflow:auto}
|