yo-moss-ai 0.0.39 → 0.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/bin/runtime-manifest.json +1 -1
  2. package/dist/assets/AppCredits-Dg50-zpy.js +1 -0
  3. package/dist/assets/AppLayout-BXWHAvwP.js +1 -0
  4. package/dist/assets/AppLayout-DlORLMbD.css +1 -0
  5. package/dist/assets/Camera-DGEBs37L.js +1 -0
  6. package/dist/assets/Devices-CJywmXWL.css +1 -0
  7. package/dist/assets/Devices-DCYUMJhv.js +1 -0
  8. package/dist/assets/FindMoss-DVh_nc9w.js +1 -0
  9. package/dist/assets/{FindMoss-C34s2ATr.css → FindMoss-H8-5tRYv.css} +1 -1
  10. package/dist/assets/{Flash-C2I_k6ua.js → Flash-DG-XKRyJ.js} +3 -3
  11. package/dist/assets/Gamepad-DXNYsOkq.js +1 -0
  12. package/dist/assets/{Hardware-BZ1NgtO7.js → Hardware-rQDbIbzS.js} +1 -1
  13. package/dist/assets/{Hotkeys-Y3sQJHWU.js → Hotkeys-CViGmD1m.js} +1 -1
  14. package/dist/assets/{McpHub-CPAYJ3Dy.js → McpHub-B2-IDDbe.js} +1 -1
  15. package/dist/assets/{MiHome-DFiaGJrw.js → MiHome-CqaG1_6z.js} +1 -1
  16. package/dist/assets/{PhBell.vue-CTc18bBH.js → PhBell.vue-DKd5NFa_.js} +1 -1
  17. package/dist/assets/{PhKeyboard.vue-CH1rRfnX.js → PhKeyboard.vue-BvVNycVx.js} +1 -1
  18. package/dist/assets/{PhLightbulb.vue-DKm3O2_g.js → PhLightbulb.vue-bEYgMSj5.js} +1 -1
  19. package/dist/assets/{PhLightning.vue-8KTznipy.js → PhLightning.vue-CUCL5hv2.js} +1 -1
  20. package/dist/assets/PhPlugs.vue-HOkG-pI_.js +1 -0
  21. package/dist/assets/{PhPlus.vue-DNOmeEir.js → PhPlus.vue-rQNjmBgw.js} +1 -1
  22. package/dist/assets/{PhSpeakerHigh.vue--Ok2VlQq.js → PhSpeakerHigh.vue-C2-YNjTk.js} +1 -1
  23. package/dist/assets/{PhTelevisionSimple.vue-Cj_jHeEo.js → PhTelevisionSimple.vue-QAdriyTv.js} +1 -1
  24. package/dist/assets/{Remotes-BC_94mt4.js → Remotes-D68tG2O6.js} +1 -1
  25. package/dist/assets/{Terminal-B7yPurz3.js → Terminal-DjXoYSUh.js} +3 -3
  26. package/dist/assets/{Yunxiangji-C-7ECXSJ.js → Yunxiangji-DwDC-cfb.js} +1 -1
  27. package/dist/assets/{index-CMMVyrw-.js → index-BLut91yI.js} +25 -25
  28. package/dist/assets/{index-CECvQISA.css → index-CphI8TFo.css} +1 -1
  29. package/dist/assets/useDeviceQuickPopup-CcURkKS3.js +1 -0
  30. package/dist/assets/{usePtzControl-B37Lef3z.js → usePtzControl-5dF4y7fi.js} +1 -1
  31. package/dist/index.html +2 -2
  32. package/dist-server/board-presets.mjs +1 -1
  33. package/dist-server/camera-discover.mjs +1 -1
  34. package/dist-server/camera.mjs +1 -1
  35. package/dist-server/dev-ui.mjs +1 -1
  36. package/dist-server/device-chat-sync.mjs +1 -1
  37. package/dist-server/device-config-view.mjs +1 -1
  38. package/dist-server/device-focus.mjs +1 -1
  39. package/dist-server/device-http.mjs +1 -1
  40. package/dist-server/device-identity.mjs +1 -1
  41. package/dist-server/device-presence.mjs +1 -1
  42. package/dist-server/device-probe.mjs +1 -1
  43. package/dist-server/device-registry.mjs +1 -1
  44. package/dist-server/device-routes.mjs +1 -1
  45. package/dist-server/device-runtime.mjs +1 -1
  46. package/dist-server/device-session.mjs +1 -1
  47. package/dist-server/ffmpeg.mjs +1 -1
  48. package/dist-server/gimbal-control.mjs +1 -1
  49. package/dist-server/home-path.mjs +1 -1
  50. package/dist-server/http-header.mjs +1 -1
  51. package/dist-server/index.mjs +1 -1
  52. package/dist-server/ir-import-validate.mjs +1 -1
  53. package/dist-server/known-scan-device.mjs +1 -1
  54. package/dist-server/lan-discover.mjs +1 -1
  55. package/dist-server/listen-port.mjs +1 -1
  56. package/dist-server/mcp/backoff.mjs +1 -1
  57. package/dist-server/mcp/bridge-manager.mjs +1 -1
  58. package/dist-server/mcp/builtin-tools.mjs +1 -1
  59. package/dist-server/mcp/dedupe-servers.mjs +1 -1
  60. package/dist-server/mcp/doctor.mjs +1 -1
  61. package/dist-server/mcp/fixtures/echo-mcp.mjs +1 -1
  62. package/dist-server/mcp/fixtures/hotkey-mcp.mjs +1 -1
  63. package/dist-server/mcp/fixtures/mihome-mcp.mjs +1 -1
  64. package/dist-server/mcp/fixtures/onvif-mcp.mjs +1 -1
  65. package/dist-server/mcp/fixtures/shell-mcp.mjs +1 -1
  66. package/dist-server/mcp/fixtures/yunxiangji-mcp.mjs +1 -1
  67. package/dist-server/mcp/hotkey-agent-docs.mjs +1 -1
  68. package/dist-server/mcp/hotkey-driver.mjs +1 -1
  69. package/dist-server/mcp/hotkey-handlers.mjs +1 -1
  70. package/dist-server/mcp/hotkey-import-validate.mjs +1 -1
  71. package/dist-server/mcp/hotkey-store.mjs +1 -1
  72. package/dist-server/mcp/http-client.mjs +1 -1
  73. package/dist-server/mcp/http-pipe.mjs +1 -1
  74. package/dist-server/mcp/local-probe.mjs +1 -1
  75. package/dist-server/mcp/marketplace.mjs +1 -1
  76. package/dist-server/mcp/onvif-handlers.mjs +1 -1
  77. package/dist-server/mcp/parse-server-json.mjs +1 -1
  78. package/dist-server/mcp/paths.mjs +1 -1
  79. package/dist-server/mcp/routes.mjs +1 -1
  80. package/dist-server/mcp/schema.mjs +1 -1
  81. package/dist-server/mcp/settings.mjs +1 -1
  82. package/dist-server/mcp/shell-approval.mjs +1 -1
  83. package/dist-server/mcp/shell-policy.mjs +1 -1
  84. package/dist-server/mcp/shell-trash.mjs +1 -1
  85. package/dist-server/mcp/stdio-pipe.mjs +1 -1
  86. package/dist-server/mcp/store.mjs +1 -1
  87. package/dist-server/mcp/task-notify.mjs +1 -1
  88. package/dist-server/mcp/ws-connect.mjs +1 -1
  89. package/dist-server/mcp/yunxiangji.mjs +1 -1
  90. package/dist-server/media-cache.mjs +1 -1
  91. package/dist-server/mihome/cloud.mjs +1 -1
  92. package/dist-server/mihome/devices.mjs +1 -1
  93. package/dist-server/mihome/local.mjs +1 -1
  94. package/dist-server/mihome/mcp-desc.mjs +1 -1
  95. package/dist-server/mihome/queue.mjs +1 -1
  96. package/dist-server/mihome/rc4.mjs +1 -1
  97. package/dist-server/mihome/routes.mjs +1 -1
  98. package/dist-server/mihome/service.mjs +1 -1
  99. package/dist-server/mihome/sign.mjs +1 -1
  100. package/dist-server/mihome/spec.mjs +1 -1
  101. package/dist-server/mihome/store.mjs +1 -1
  102. package/dist-server/onboard-preview.mjs +1 -1
  103. package/dist-server/onvif-ws-discover.mjs +1 -1
  104. package/dist-server/spa-fallback.mjs +1 -1
  105. package/dist-server/tab-focus.mjs +1 -1
  106. package/dist-server/voice-wake.mjs +1 -1
  107. package/package.json +1 -1
  108. package/dist/assets/AppCredits-cV9khBSC.js +0 -1
  109. package/dist/assets/AppLayout-Cxc77hoF.css +0 -1
  110. package/dist/assets/AppLayout-Dlztl-Rp.js +0 -1
  111. package/dist/assets/Camera-DrT-c03p.js +0 -1
  112. package/dist/assets/FindMoss-DNRc18Un.js +0 -1
  113. package/dist/assets/Gamepad-COFDbNC2.js +0 -1
  114. package/dist/assets/PhPlugs.vue-Dqy5L0KC.js +0 -1
@@ -1 +1 @@
1
- import{d as D,v as p,o,m as i,n as U,p as V,q as I,s as u,b as e,a as T0,z as E0,O as j0,t as f,A as z,e as v,g as A,w as W,c as Y,F as e0,B as c0,h as k,U as D0,L as E,j as $,r as N,P as F0,f as j,H as U0}from"./index-CMMVyrw-.js";import{H as I0,I as q0}from"./PhPlugs.vue-Dqy5L0KC.js";import{H as G0}from"./PhLightning.vue-8KTznipy.js";import{I as J0}from"./PhPlus.vue-DNOmeEir.js";import{G as K0}from"./PhSpeakerHigh.vue--Ok2VlQq.js";import{_ as Q0}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.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=D({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(o(),i("g",X0,ee)):r.value==="duotone"?(o(),i("g",ae,le)):r.value==="fill"?(o(),i("g",oe,ie)):r.value==="light"?(o(),i("g",re,ue)):r.value==="regular"?(o(),i("g",ce,ve)):r.value==="thin"?(o(),i("g",he,ge)):V("",!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),Ce=[He],Se={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},Pe=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),Oe=[Pe],Be={key:5},Ne=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),We=[Ne],Te={name:"PhInfo"},Ee=D({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(o(),i("g",ye,be)):r.value==="duotone"?(o(),i("g",Ae,Ve)):r.value==="fill"?(o(),i("g",Me,Ce)):r.value==="light"?(o(),i("g",Se,Le)):r.value==="regular"?(o(),i("g",ze,Oe)):r.value==="thin"?(o(),i("g",Be,We)):V("",!0)],16,_e))}}),je=["width","height","fill","transform"],De={key:0},Fe=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=[Fe],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=D({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(o(),i("g",De,Ue)):r.value==="duotone"?(o(),i("g",Ie,Je)):r.value==="fill"?(o(),i("g",Ke,Re)):r.value==="light"?(o(),i("g",Xe,e1)):r.value==="regular"?(o(),i("g",a1,t1)):r.value==="thin"?(o(),i("g",l1,n1)):V("",!0)],16,je))}}),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],C1={name:"PhMicrophone"},m0=D({...C1,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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(o(),i("g",u1,m1)):r.value==="duotone"?(o(),i("g",v1,g1)):r.value==="fill"?(o(),i("g",f1,_1)):r.value==="light"?(o(),i("g",y1,b1)):r.value==="regular"?(o(),i("g",A1,$1)):r.value==="thin"?(o(),i("g",V1,H1)):V("",!0)],16,d1))}}),S1=["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],P1={key:1},O1=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),B1=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),N1=[O1,B1],W1={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],j1={key:3},D1=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),F1=[D1],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=D({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",I({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[U(_.$slots,"default"),r.value==="bold"?(o(),i("g",x1,z1)):r.value==="duotone"?(o(),i("g",P1,N1)):r.value==="fill"?(o(),i("g",W1,E1)):r.value==="light"?(o(),i("g",j1,F1)):r.value==="regular"?(o(),i("g",U1,q1)):r.value==="thin"?(o(),i("g",G1,K1)):V("",!0)],16,S1))}});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"},Ca={class:"phrase-index"},Sa={class:"wake-save-bar"},xa={class:"setting-item inline"},La={class:"setting-action wide"},za={class:"setting-value"},Pa={class:"hw-side"},Oa={class:"panel panel-voice"},Ba={class:"panel-hd"},Na={class:"panel-bd"},Wa={class:"voice-box"},Ta={class:"voice-status-row"},Ea={class:"voice-status-text"},ja={class:"voice-seg",role:"group","aria-label":"语音链路控制"},Da=["disabled"],Fa=["disabled"],Ua={class:"panel"},Ia={class:"panel-hd"},qa={class:"panel-bd"},Ga={class:"periph-list"},Ja=["disabled","onClick"],Ka={class:"periph-body"},Qa={key:0,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=D({__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),M=k(!1),H=k(!1),_=k(!1),Z=k(!1),P=k(!1),O=k(!1),K=k(!1),Q=k(!1),a0=k(!1),s0=k(!1),n=D0(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:"未知"})[n.wake_word.engine]||n.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(()=>{const l=[{key:"eye",label:"眼灯",on:t.hw.eye,icon:q0},{key:"bar",label:"流水灯",on:t.hw.bar,icon:R1}];return t.hasPanel&&l.push({key:"panel",label:"面板灯",on:t.hw.panel,icon:r1}),t.hasBottom&&l.push({key:"bottom",label:"底灯",on:t.hw.bottom,icon:we}),l});function o0(l){const a=Y1(n,l);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 l=await E("/api/device/config");o0(l),h.value=!0,t.mossOnline&&await z0()}catch(l){y.value=!0,$.error(l instanceof Error?l.message:"读取设备配置失败")}finally{c.value=!1}}async function T(l,a,g){if(!(!b.value||g.value)){g.value=!0;try{const S=await E("/api/device/config",{method:"PUT",body:JSON.stringify(l)});o0(S),$.success(`${a}已保存`)}catch(S){$.error(S instanceof Error?S.message:`${a}保存失败`),await n0()}finally{g.value=!1}}}function A0(){return T({audio:{volume:n.audio.volume}},"音量",w)}function Z0(){return T({audio:{press_to_talk:n.audio.press_to_talk}},"按住说话",w)}function i0(){const l={};if(K.value&&(l.theme=n.screen.theme),Q.value&&(l.brightness=n.screen.brightness),!!Object.keys(l).length)return T({screen:l},"显示设置",M)}function $0(){n.wake_word.commands.length>=J||n.wake_word.commands.push({command:"",display:""})}function V0(l){n.wake_word.commands.length<=1||n.wake_word.commands.splice(l,1)}function r0(l){return l.toLowerCase().replace(/[^a-z ]/g,"").replace(/^ +/,"").replace(/ {2,}/g," ")}function M0(l,a){n.wake_word.commands[l].command=r0(a)}function H0(l){return r0(l.trim()).replace(/\s+/g," ")}function C0(){const l=n.wake_word.commands;if(!l.length)return{ok:!1,message:"至少保留一个唤醒词"};const a=[],g=new Set,S=new Set;for(let B=0;B<l.length;B++){const x=H0(l[B].command),L=l[B].display.trim(),C=B+1;if(!x&&!L)return{ok:!1,message:`第 ${C} 条唤醒词不能为空`};if(!x||!L)return{ok:!1,message:`第 ${C} 条不完整,拼音和显示名均需填写`};if(x.length>h0)return{ok:!1,message:`第 ${C} 条拼音过长(最多 ${h0} 字符)`};if(L.length>p0)return{ok:!1,message:`第 ${C} 条显示名过长(最多 ${p0} 字符)`};if(!s.test(x))return{ok:!1,message:`第 ${C} 条拼音格式错误,请使用小写拼音并以空格分音节,如 mo si`};if(g.has(x))return{ok:!1,message:`拼音「${x}」重复,请修改第 ${C} 条`};if(S.has(L))return{ok:!1,message:`显示名「${L}」重复,请修改第 ${C} 条`};g.add(x),S.add(L),a.push({command:x,display:L})}return a.length>J?{ok:!1,message:`最多支持 ${J} 个唤醒词`}:n.wake_word.threshold<1||n.wake_word.threshold>99?{ok:!1,message:"灵敏度需在 1–99 之间"}:{ok:!0,commands:a}}function S0(){const l=C0();if(!l.ok){$.warning(l.message);return}return T({wake_word:{commands:l.commands,threshold:n.wake_word.threshold}},"唤醒词",r)}function x0(){return T({hardware:{default_motor_speed:n.hardware.default_motor_speed}},"默认电机速度",H)}function L0(){return T({hardware:{local_aec:n.hardware.local_aec}},"本地 AEC",_)}async function z0(){try{const l=await E("/api/hw/status",{method:"POST"});t.applyHw(l)}catch{}}async function d0(l,a){if(!(Z.value||!t.mossOnline)){Z.value=!0;try{const g=await E("/api/hw",{method:"POST",body:JSON.stringify({device:l,action:a,speed:n.hardware.default_motor_speed})});t.applyHw(g)}catch(g){$.error(g instanceof Error?g.message:"外设控制失败")}finally{Z.value=!1}}}function P0(l){const a=t.hw[l];return d0(l,a?"off":"on")}function X(l){return d0("motor",l)}async function O0(){var l;if(!(P.value||O.value||!t0.value)){P.value=!0;try{const a=await E("/api/chat/wake",{method:"POST"});String(((l=a==null?void 0:a.payload)==null?void 0:l.message)||"")==="toggling"?(t.mossChatState="idle",$.warning("语音链路已在进行中")):(t.mossChatState="connecting",$.success("MOSS 已唤醒,请对着设备说话"))}catch(a){$.error(a instanceof Error?a.message:"唤醒失败")}finally{P.value=!1}}}async function B0(){var l;if(!(P.value||O.value||!l0.value)){if(q.value&&!R.value){t.mossChatState=v0({voice:t.mossChatState}),$.success("已取消接通");return}O.value=!0;try{const a=await E("/api/chat/wake",{method:"POST"});v0({voice:t.mossChatState,ackMessage:(l=a==null?void 0:a.payload)==null?void 0:l.message})==="idle"?(t.mossChatState="idle",$.success("语音链路已关闭")):$.warning("当前未处于语音会话中")}catch(a){$.error(a instanceof Error?a.message:"取消唤醒失败")}finally{O.value=!1}}}return E0(n0),(l,a)=>{const g=N("el-slider"),S=N("el-switch"),B=N("el-radio-button"),x=N("el-radio-group"),L=N("el-tag"),C=N("el-button"),u0=N("el-input"),N0=N("el-alert"),W0=F0("loading");return j0((o(),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)])]),n.device.version?(o(),i("code",oa,f(n.device.version),1)):V("",!0)],2),e("div",na,[e("div",ia,[e("section",ra,[e("div",da,[v(A(K0),{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:n.audio.volume,"onUpdate:modelValue":a[0]||(a[0]=m=>n.audio.volume=m),min:0,max:100,disabled:!b.value,onChange:A0},null,8,["modelValue","disabled"]),e("span",ha,f(n.audio.volume)+"%",1)])]),a0.value?(o(),i("li",pa,[a[13]||(a[13]=e("div",{class:"setting-text"},[e("strong",null,"本地 AEC"),e("p",null,"开启:全双工,播报时仍可插话打断(设备端消回声);关闭:半双工,播报期间关闭麦克风,不会被自己的声音误打断")],-1)),v(S,{modelValue:n.hardware.local_aec,"onUpdate:modelValue":a[1]||(a[1]=m=>n.hardware.local_aec=m),disabled:!b.value,onChange:L0},null,8,["modelValue","disabled"])])):V("",!0),s0.value?(o(),i("li",ga,[a[14]||(a[14]=e("div",{class:"setting-text"},[e("strong",null,"按住说话"),e("p",null,"开启后需要按住才采集语音;关闭则唤醒后持续聆听")],-1)),v(S,{modelValue:n.audio.press_to_talk,"onUpdate:modelValue":a[2]||(a[2]=m=>n.audio.press_to_talk=m),disabled:!b.value,onChange:Z0},null,8,["modelValue","disabled"])])):V("",!0),Q.value?(o(),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:n.screen.brightness,"onUpdate:modelValue":a[3]||(a[3]=m=>n.screen.brightness=m),min:1,max:100,disabled:!b.value,onChange:i0},null,8,["modelValue","disabled"]),e("span",_a,f(n.screen.brightness)+"%",1)])])):V("",!0),K.value?(o(),i("li",ya,[a[18]||(a[18]=e("div",{class:"setting-text"},[e("strong",null,"界面主题"),e("p",null,"设备屏幕浅色 / 深色模式")],-1)),v(x,{modelValue:n.screen.theme,"onUpdate:modelValue":a[4]||(a[4]=m=>n.screen.theme=m),disabled:!b.value,onChange:i0},{default:W(()=>[v(B,{value:"light"},{default:W(()=>[...a[16]||(a[16]=[j("浅色",-1)])]),_:1}),v(B,{value:"dark"},{default:W(()=>[...a[17]||(a[17]=[j("深色",-1)])]),_:1})]),_:1},8,["modelValue","disabled"])])):V("",!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:W(()=>[j(f(w0.value),1)]),_:1})]),e("div",Za,[n.wake_word.custom_supported?(o(),Y(C,{key:0,size:"small",type:"primary",disabled:!b.value||n.wake_word.commands.length>=J,onClick:$0},{default:W(()=>[v(A(J0),{size:14,weight:"bold"}),a[20]||(a[20]=j(" 添加 ",-1))]),_:1},8,["disabled"])):V("",!0)])]),e("div",$a,[n.wake_word.custom_supported?(o(),i(e0,{key:0},[e("div",Va,[e("div",Ma,[(o(!0),i(e0,null,c0(n.wake_word.commands,(m,F)=>(o(),i("article",{key:F,class:"phrase-card"},[e("header",Ha,[e("span",Ca,f(F+1),1),v(C,{link:"",type:"danger",size:"small",disabled:!b.value||n.wake_word.commands.length<=1,onClick:G=>V0(F)},{default:W(()=>[...a[21]||(a[21]=[j(" 删除 ",-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(F,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",Sa,[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:n.wake_word.threshold,"onUpdate:modelValue":a[5]||(a[5]=m=>n.wake_word.threshold=m),min:1,max:99,disabled:!b.value},null,8,["modelValue","disabled"]),e("span",za,f(n.wake_word.threshold),1)])]),v(C,{type:"primary",disabled:!b.value||r.value,loading:r.value,onClick:S0},{default:W(()=>[...a[26]||(a[26]=[j(" 保存唤醒词 ",-1)])]),_:1},8,["disabled","loading"])])],64)):(o(),Y(N0,{key:1,type:"info",closable:!1,"show-icon":"",title:"当前固件不支持在线修改唤醒词,请烧录 MultiNet 自定义唤醒词固件。"}))])])]),e("aside",Pa,[e("section",Oa,[e("div",Ba,[v(A(m0),{size:18,weight:"duotone"}),a[27]||(a[27]=e("span",null,"远程语音",-1))]),e("div",Na,[e("div",Wa,[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",ja,[e("button",{type:"button",class:z(["seg-btn voice-wake",{loading:P.value}]),disabled:!t0.value||P.value||O.value,onClick:O0},f(P.value?"接通中":"唤醒"),11,Da),e("button",{type:"button",class:z(["seg-btn voice-end",{loading:O.value,active:R.value}]),disabled:!l0.value||P.value||O.value,onClick:B0},f(O.value?"关闭中":"取消唤醒"),11,Fa)])])])]),e("section",Ua,[e("div",Ia,[v(A(I0),{size:18,weight:"duotone"}),a[28]||(a[28]=e("span",null,"外设试控",-1))]),e("div",qa,[e("div",Ga,[(o(!0),i(e0,null,c0(b0.value,m=>(o(),i("button",{key:m.key,type:"button",class:z(["periph-card",{on:m.on}]),disabled:Z.value||!A(t).mossOnline,onClick:F=>P0(m.key)},[e("div",{class:z(["periph-icon",m.key])},[(o(),Y(U0(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))]),A(t).hasMotor?(o(),i("div",Qa,[e("div",Ra,[v(A(G0),{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:n.hardware.default_motor_speed,"onUpdate:modelValue":a[9]||(a[9]=m=>n.hardware.default_motor_speed=m),min:1,max:100,disabled:!b.value,onChange:x0},null,8,["modelValue","disabled"]),e("span",ts,f(n.hardware.default_motor_speed)+"%",1)])])):V("",!0)])]),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(n.device.version||"—"),1)])]),e("div",ds,[a[33]||(a[33]=e("dt",null,"IP 地址",-1)),e("dd",null,[e("code",null,f(n.device.ip||"—"),1)])]),e("div",us,[a[34]||(a[34]=e("dt",null,"Wi-Fi",-1)),e("dd",null,[e("code",null,f(n.device.ssid||"—"),1)])])])])])])])])),[[W0,c.value]])}}}),_s=Q0(cs,[["__scopeId","data-v-05a04dbf"]]);export{_s as default};
1
+ import{d as j,v as p,o,g as i,l as I,i as V,x as U,b as u,f as e,u as T0,z as E0,M as D0,t as f,n as z,j as v,a as A,w as W,c as Y,F as e0,h as c0,r as k,S as j0,I as E,E as $,e as B,N as F0,k as D,D as I0}from"./index-BLut91yI.js";import{H as U0,I as q0}from"./PhPlugs.vue-HOkG-pI_.js";import{H as G0}from"./PhLightning.vue-CUCL5hv2.js";import{I as J0}from"./PhPlus.vue-rQNjmBgw.js";import{G as K0}from"./PhSpeakerHigh.vue-C2-YNjTk.js";import{_ as Q0}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.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=j({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",U({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[I(_.$slots,"default"),r.value==="bold"?(o(),i("g",X0,ee)):r.value==="duotone"?(o(),i("g",ae,le)):r.value==="fill"?(o(),i("g",oe,ie)):r.value==="light"?(o(),i("g",re,ue)):r.value==="regular"?(o(),i("g",ce,ve)):r.value==="thin"?(o(),i("g",he,ge)):V("",!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},Pe=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),Oe=[Pe],Ne={key:5},Be=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),We=[Be],Te={name:"PhInfo"},Ee=j({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",U({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[I(_.$slots,"default"),r.value==="bold"?(o(),i("g",ye,be)):r.value==="duotone"?(o(),i("g",Ae,Ve)):r.value==="fill"?(o(),i("g",Me,Se)):r.value==="light"?(o(),i("g",Ce,Le)):r.value==="regular"?(o(),i("g",ze,Oe)):r.value==="thin"?(o(),i("g",Ne,We)):V("",!0)],16,_e))}}),De=["width","height","fill","transform"],je={key:0},Fe=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),Ie=[Fe],Ue={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=j({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",U({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[I(_.$slots,"default"),r.value==="bold"?(o(),i("g",je,Ie)):r.value==="duotone"?(o(),i("g",Ue,Je)):r.value==="fill"?(o(),i("g",Ke,Re)):r.value==="light"?(o(),i("g",Xe,e1)):r.value==="regular"?(o(),i("g",a1,t1)):r.value==="thin"?(o(),i("g",l1,n1)):V("",!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=j({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",U({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[I(_.$slots,"default"),r.value==="bold"?(o(),i("g",u1,m1)):r.value==="duotone"?(o(),i("g",v1,g1)):r.value==="fill"?(o(),i("g",f1,_1)):r.value==="light"?(o(),i("g",y1,b1)):r.value==="regular"?(o(),i("g",A1,$1)):r.value==="thin"?(o(),i("g",V1,H1)):V("",!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],P1={key:1},O1=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),B1=[O1,N1],W1={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},j1=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),F1=[j1],I1={key:4},U1=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=[U1],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=j({...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),M=u(()=>s.color??h),H=u(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:y?"scale(-1, 1)":void 0);return(_,Z)=>(o(),i("svg",U({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:w.value,height:w.value,fill:M.value,transform:H.value},_.$attrs),[I(_.$slots,"default"),r.value==="bold"?(o(),i("g",x1,z1)):r.value==="duotone"?(o(),i("g",P1,B1)):r.value==="fill"?(o(),i("g",W1,E1)):r.value==="light"?(o(),i("g",D1,F1)):r.value==="regular"?(o(),i("g",I1,q1)):r.value==="thin"?(o(),i("g",G1,K1)):V("",!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"},Pa={class:"hw-side"},Oa={class:"panel panel-voice"},Na={class:"panel-hd"},Ba={class:"panel-bd"},Wa={class:"voice-box"},Ta={class:"voice-status-row"},Ea={class:"voice-status-text"},Da={class:"voice-seg",role:"group","aria-label":"语音链路控制"},ja=["disabled"],Fa=["disabled"],Ia={class:"panel"},Ua={class:"panel-hd"},qa={class:"panel-bd"},Ga={class:"periph-list"},Ja=["disabled","onClick"],Ka={class:"periph-body"},Qa={key:0,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=j({__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),M=k(!1),H=k(!1),_=k(!1),Z=k(!1),P=k(!1),O=k(!1),K=k(!1),Q=k(!1),a0=k(!1),s0=k(!1),n=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:"未知"})[n.wake_word.engine]||n.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(()=>{const l=[{key:"eye",label:"眼灯",on:t.hw.eye,icon:q0},{key:"bar",label:"流水灯",on:t.hw.bar,icon:R1}];return t.hasPanel&&l.push({key:"panel",label:"面板灯",on:t.hw.panel,icon:r1}),t.hasBottom&&l.push({key:"bottom",label:"底灯",on:t.hw.bottom,icon:we}),l});function o0(l){const a=Y1(n,l);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 l=await E("/api/device/config");o0(l),h.value=!0,t.mossOnline&&await z0()}catch(l){y.value=!0,$.error(l instanceof Error?l.message:"读取设备配置失败")}finally{c.value=!1}}async function T(l,a,g){if(!(!b.value||g.value)){g.value=!0;try{const C=await E("/api/device/config",{method:"PUT",body:JSON.stringify(l)});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:n.audio.volume}},"音量",w)}function Z0(){return T({audio:{press_to_talk:n.audio.press_to_talk}},"按住说话",w)}function i0(){const l={};if(K.value&&(l.theme=n.screen.theme),Q.value&&(l.brightness=n.screen.brightness),!!Object.keys(l).length)return T({screen:l},"显示设置",M)}function $0(){n.wake_word.commands.length>=J||n.wake_word.commands.push({command:"",display:""})}function V0(l){n.wake_word.commands.length<=1||n.wake_word.commands.splice(l,1)}function r0(l){return l.toLowerCase().replace(/[^a-z ]/g,"").replace(/^ +/,"").replace(/ {2,}/g," ")}function M0(l,a){n.wake_word.commands[l].command=r0(a)}function H0(l){return r0(l.trim()).replace(/\s+/g," ")}function S0(){const l=n.wake_word.commands;if(!l.length)return{ok:!1,message:"至少保留一个唤醒词"};const a=[],g=new Set,C=new Set;for(let N=0;N<l.length;N++){const x=H0(l[N].command),L=l[N].display.trim(),S=N+1;if(!x&&!L)return{ok:!1,message:`第 ${S} 条唤醒词不能为空`};if(!x||!L)return{ok:!1,message:`第 ${S} 条不完整,拼音和显示名均需填写`};if(x.length>h0)return{ok:!1,message:`第 ${S} 条拼音过长(最多 ${h0} 字符)`};if(L.length>p0)return{ok:!1,message:`第 ${S} 条显示名过长(最多 ${p0} 字符)`};if(!s.test(x))return{ok:!1,message:`第 ${S} 条拼音格式错误,请使用小写拼音并以空格分音节,如 mo si`};if(g.has(x))return{ok:!1,message:`拼音「${x}」重复,请修改第 ${S} 条`};if(C.has(L))return{ok:!1,message:`显示名「${L}」重复,请修改第 ${S} 条`};g.add(x),C.add(L),a.push({command:x,display:L})}return a.length>J?{ok:!1,message:`最多支持 ${J} 个唤醒词`}:n.wake_word.threshold<1||n.wake_word.threshold>99?{ok:!1,message:"灵敏度需在 1–99 之间"}:{ok:!0,commands:a}}function C0(){const l=S0();if(!l.ok){$.warning(l.message);return}return T({wake_word:{commands:l.commands,threshold:n.wake_word.threshold}},"唤醒词",r)}function x0(){return T({hardware:{default_motor_speed:n.hardware.default_motor_speed}},"默认电机速度",H)}function L0(){return T({hardware:{local_aec:n.hardware.local_aec}},"本地 AEC",_)}async function z0(){try{const l=await E("/api/hw/status",{method:"POST"});t.applyHw(l)}catch{}}async function d0(l,a){if(!(Z.value||!t.mossOnline)){Z.value=!0;try{const g=await E("/api/hw",{method:"POST",body:JSON.stringify({device:l,action:a,speed:n.hardware.default_motor_speed})});t.applyHw(g)}catch(g){$.error(g instanceof Error?g.message:"外设控制失败")}finally{Z.value=!1}}}function P0(l){const a=t.hw[l];return d0(l,a?"off":"on")}function X(l){return d0("motor",l)}async function O0(){var l;if(!(P.value||O.value||!t0.value)){P.value=!0;try{const a=await E("/api/chat/wake",{method:"POST"});String(((l=a==null?void 0:a.payload)==null?void 0:l.message)||"")==="toggling"?(t.mossChatState="idle",$.warning("语音链路已在进行中")):(t.mossChatState="connecting",$.success("MOSS 已唤醒,请对着设备说话"))}catch(a){$.error(a instanceof Error?a.message:"唤醒失败")}finally{P.value=!1}}}async function N0(){var l;if(!(P.value||O.value||!l0.value)){if(q.value&&!R.value){t.mossChatState=v0({voice:t.mossChatState}),$.success("已取消接通");return}O.value=!0;try{const a=await E("/api/chat/wake",{method:"POST"});v0({voice:t.mossChatState,ackMessage:(l=a==null?void 0:a.payload)==null?void 0:l.message})==="idle"?(t.mossChatState="idle",$.success("语音链路已关闭")):$.warning("当前未处于语音会话中")}catch(a){$.error(a instanceof Error?a.message:"取消唤醒失败")}finally{O.value=!1}}}return E0(n0),(l,a)=>{const g=B("el-slider"),C=B("el-switch"),N=B("el-radio-button"),x=B("el-radio-group"),L=B("el-tag"),S=B("el-button"),u0=B("el-input"),B0=B("el-alert"),W0=F0("loading");return D0((o(),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)])]),n.device.version?(o(),i("code",oa,f(n.device.version),1)):V("",!0)],2),e("div",na,[e("div",ia,[e("section",ra,[e("div",da,[v(A(K0),{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:n.audio.volume,"onUpdate:modelValue":a[0]||(a[0]=m=>n.audio.volume=m),min:0,max:100,disabled:!b.value,onChange:A0},null,8,["modelValue","disabled"]),e("span",ha,f(n.audio.volume)+"%",1)])]),a0.value?(o(),i("li",pa,[a[13]||(a[13]=e("div",{class:"setting-text"},[e("strong",null,"本地 AEC"),e("p",null,"开启:全双工,播报时仍可插话打断(设备端消回声);关闭:半双工,播报期间关闭麦克风,不会被自己的声音误打断")],-1)),v(C,{modelValue:n.hardware.local_aec,"onUpdate:modelValue":a[1]||(a[1]=m=>n.hardware.local_aec=m),disabled:!b.value,onChange:L0},null,8,["modelValue","disabled"])])):V("",!0),s0.value?(o(),i("li",ga,[a[14]||(a[14]=e("div",{class:"setting-text"},[e("strong",null,"按住说话"),e("p",null,"开启后需要按住才采集语音;关闭则唤醒后持续聆听")],-1)),v(C,{modelValue:n.audio.press_to_talk,"onUpdate:modelValue":a[2]||(a[2]=m=>n.audio.press_to_talk=m),disabled:!b.value,onChange:Z0},null,8,["modelValue","disabled"])])):V("",!0),Q.value?(o(),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:n.screen.brightness,"onUpdate:modelValue":a[3]||(a[3]=m=>n.screen.brightness=m),min:1,max:100,disabled:!b.value,onChange:i0},null,8,["modelValue","disabled"]),e("span",_a,f(n.screen.brightness)+"%",1)])])):V("",!0),K.value?(o(),i("li",ya,[a[18]||(a[18]=e("div",{class:"setting-text"},[e("strong",null,"界面主题"),e("p",null,"设备屏幕浅色 / 深色模式")],-1)),v(x,{modelValue:n.screen.theme,"onUpdate:modelValue":a[4]||(a[4]=m=>n.screen.theme=m),disabled:!b.value,onChange:i0},{default:W(()=>[v(N,{value:"light"},{default:W(()=>[...a[16]||(a[16]=[D("浅色",-1)])]),_:1}),v(N,{value:"dark"},{default:W(()=>[...a[17]||(a[17]=[D("深色",-1)])]),_:1})]),_:1},8,["modelValue","disabled"])])):V("",!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:W(()=>[D(f(w0.value),1)]),_:1})]),e("div",Za,[n.wake_word.custom_supported?(o(),Y(S,{key:0,size:"small",type:"primary",disabled:!b.value||n.wake_word.commands.length>=J,onClick:$0},{default:W(()=>[v(A(J0),{size:14,weight:"bold"}),a[20]||(a[20]=D(" 添加 ",-1))]),_:1},8,["disabled"])):V("",!0)])]),e("div",$a,[n.wake_word.custom_supported?(o(),i(e0,{key:0},[e("div",Va,[e("div",Ma,[(o(!0),i(e0,null,c0(n.wake_word.commands,(m,F)=>(o(),i("article",{key:F,class:"phrase-card"},[e("header",Ha,[e("span",Sa,f(F+1),1),v(S,{link:"",type:"danger",size:"small",disabled:!b.value||n.wake_word.commands.length<=1,onClick:G=>V0(F)},{default:W(()=>[...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(F,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:n.wake_word.threshold,"onUpdate:modelValue":a[5]||(a[5]=m=>n.wake_word.threshold=m),min:1,max:99,disabled:!b.value},null,8,["modelValue","disabled"]),e("span",za,f(n.wake_word.threshold),1)])]),v(S,{type:"primary",disabled:!b.value||r.value,loading:r.value,onClick:C0},{default:W(()=>[...a[26]||(a[26]=[D(" 保存唤醒词 ",-1)])]),_:1},8,["disabled","loading"])])],64)):(o(),Y(B0,{key:1,type:"info",closable:!1,"show-icon":"",title:"当前固件不支持在线修改唤醒词,请烧录 MultiNet 自定义唤醒词固件。"}))])])]),e("aside",Pa,[e("section",Oa,[e("div",Na,[v(A(m0),{size:18,weight:"duotone"}),a[27]||(a[27]=e("span",null,"远程语音",-1))]),e("div",Ba,[e("div",Wa,[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:P.value}]),disabled:!t0.value||P.value||O.value,onClick:O0},f(P.value?"接通中":"唤醒"),11,ja),e("button",{type:"button",class:z(["seg-btn voice-end",{loading:O.value,active:R.value}]),disabled:!l0.value||P.value||O.value,onClick:N0},f(O.value?"关闭中":"取消唤醒"),11,Fa)])])])]),e("section",Ia,[e("div",Ua,[v(A(U0),{size:18,weight:"duotone"}),a[28]||(a[28]=e("span",null,"外设试控",-1))]),e("div",qa,[e("div",Ga,[(o(!0),i(e0,null,c0(b0.value,m=>(o(),i("button",{key:m.key,type:"button",class:z(["periph-card",{on:m.on}]),disabled:Z.value||!A(t).mossOnline,onClick:F=>P0(m.key)},[e("div",{class:z(["periph-icon",m.key])},[(o(),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))]),A(t).hasMotor?(o(),i("div",Qa,[e("div",Ra,[v(A(G0),{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:n.hardware.default_motor_speed,"onUpdate:modelValue":a[9]||(a[9]=m=>n.hardware.default_motor_speed=m),min:1,max:100,disabled:!b.value,onChange:x0},null,8,["modelValue","disabled"]),e("span",ts,f(n.hardware.default_motor_speed)+"%",1)])])):V("",!0)])]),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(n.device.version||"—"),1)])]),e("div",ds,[a[33]||(a[33]=e("dt",null,"IP 地址",-1)),e("dd",null,[e("code",null,f(n.device.ip||"—"),1)])]),e("div",us,[a[34]||(a[34]=e("dt",null,"Wi-Fi",-1)),e("dd",null,[e("code",null,f(n.device.ssid||"—"),1)])])])])])])])])),[[W0,c.value]])}}}),_s=Q0(cs,[["__scopeId","data-v-05a04dbf"]]);export{_s as default};
@@ -1 +1 @@
1
- import{d as ne,o as i,m as u,n as me,p as B,q as fe,s as A,b as a,v as O,z as Ke,A as oe,t as $,e as m,w as g,c as Y,O as Be,f as _,g as F,F as R,B as Q,W as ze,h as M,L as b,j as k,E as le,r as K,P as je,U as Pe,M as De}from"./index-CMMVyrw-.js";import{G as Le}from"./PhKeyboard.vue-CH1rRfnX.js";import{I as Ie}from"./PhPlus.vue-DNOmeEir.js";import{_ as Ue}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.js";const Fe=["width","height","fill","transform"],Re={key:0},We=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),Je=[We],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),Ge=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),Ye=[Xe,Ge],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"),E=O("mirrored",!1),p=A(()=>s.weight??r),y=A(()=>s.size??l),c=A(()=>s.color??S),f=A(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:E?"scale(-1, 1)":void 0);return(h,x)=>(i(),u("svg",fe({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:y.value,height:y.value,fill:c.value,transform:f.value},h.$attrs),[me(h.$slots,"default"),p.value==="bold"?(i(),u("g",Re,Je)):p.value==="duotone"?(i(),u("g",qe,Ye)):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,Fe))}}),mt=["width","height","fill","transform"],ft={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},At=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),Vt=[At],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},Et=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),Ct=[Et],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"),E=O("mirrored",!1),p=A(()=>s.weight??r),y=A(()=>s.size??l),c=A(()=>s.color??S),f=A(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:E?"scale(-1, 1)":void 0);return(h,x)=>(i(),u("svg",fe({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:y.value,height:y.value,fill:c.value,transform:f.value},h.$attrs),[me(h.$slots,"default"),p.value==="bold"?(i(),u("g",ft,vt)):p.value==="duotone"?(i(),u("g",yt,kt)):p.value==="fill"?(i(),u("g",_t,Vt)):p.value==="light"?(i(),u("g",Ht,Mt)):p.value==="regular"?(i(),u("g",St,Ct)):p.value==="thin"?(i(),u("g",Zt,xt)):B("",!0)],16,mt))}}),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 Pt(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 Dt(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 f=l.hiddenApps[c];if(typeof f!="string")throw new Error(`hiddenApps 第 ${c+1} 项必须是字符串`);const h=f.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 E=Object.entries(l.apps);if(E.length>re)throw new Error(`应用数量 ${E.length} 超过上限 ${re}`);const p={};for(const[y,c]of E){const f=String(y).trim();if(!ee(f))throw new Error(`应用名称「${f||"(空)"}」不合法`);if(!c||typeof c!="object"||Array.isArray(c))throw new Error(`应用「${f}」格式错误`);const h=c;if(h.builtin===!0)throw new Error(`应用「${f}」不能标记为内置预设`);if(!h.actions||typeof h.actions!="object"||Array.isArray(h.actions))throw new Error(`应用「${f}」缺少 actions 对象`);const x=Object.entries(h.actions);if(x.length===0)throw new Error(`应用「${f}」至少需要一个动作`);if(x.length>ie)throw new Error(`应用「${f}」动作数量超过上限 ${ie}`);const I=new Set,T={};for(const[z,V]of x){const C=String(z).trim();if(!ee(C))throw new Error(`应用「${f}」动作名称「${C||"(空)"}」不合法`);if(I.has(C))throw new Error(`应用「${f}」动作名称「${C}」重复`);I.add(C),T[C]=Pt(V,`应用「${f}」动作「${C}」`)}p[f]={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 Ut={class:"hotkeys-page uxp-page-stack"},Ft={class:"status-card-main"},Rt={class:"status-copy"},Wt={class:"status-card-actions"},Jt={class:"hotkeys-layout"},qt={class:"panel presets-panel"},Xt={class:"panel-hd panel-hd-row"},Gt={class:"head-actions"},Yt=["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"},ma={class:"panel-bd"},fa={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"},Aa={class:"action-card-top"},Va={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),E=M(!1),p=M(!0),y=M(!1),c=M(!1),f=M(!1),h=M(""),x=M(null),I=A(()=>y.value?"正在导出快捷键预设…":c.value?"正在导入快捷键预设…":"正在加载应用预设…"),T=M(!1),z=M("add"),V=Pe({name:"",actions:[]}),C=A(()=>r.value.platform||s.value.platform||""),D=A(()=>C.value==="darwin"),j=A(()=>C.value==="win32"),U=A(()=>D.value?"macOS":j.value?"Windows":C.value||"当前系统"),W=A(()=>j.value?"winText":"macText"),he=A(()=>D.value?"mac":j.value?"win":"all"),ve=A(()=>D.value?"cmd+shift+p":j.value?"ctrl+shift+p":"cmd+s 或 ctrl+s"),ye=A(()=>D.value?"例如 cmd+alt+1":j.value?"例如 ctrl+shift+p":"例如 cmd+s 或 ctrl+s"),J=A(()=>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):D.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 G(t){if(t){z.value="edit",V.name=t.name;const e=s.value.apps[t.name]||{};V.actions=Object.entries(e).map(([o,d])=>({name:o,macText:N(d.mac||[]),winText:N(d.win||[])}))}else z.value="add",V.name="",V.actions=[{name:"",macText:"",winText:""}];T.value=!0}function Ae(){V.actions.push({name:"",macText:"",winText:""})}function Ve(){V.name="",V.actions=[]}function He(){const t={};for(const e of V.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=V.name.trim();if(!t){k.warning("请填写应用名称");return}const e=He();if(!Object.keys(e.actions).length){k.warning("至少添加一个有效动作");return}E.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{E.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 Ee(){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 Ce(){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=Dt(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(!f.value){f.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{f.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=je("loading");return i(),u(R,null,[a("div",Ut,[a("section",{class:oe(["status-card",r.value.ready?"is-ready":"is-pending"])},[a("div",Ft,[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,$(U.value)+" · "+$(r.value.ready?"Agent 可通过 moss-hotkey 向应用发送快捷键":"需完成系统授权后才能试发"),1)])]),a("div",Wt,[m(o,{link:"",type:"primary",loading:l.value,onClick:se},{default:g(()=>[...e[7]||(e[7]=[_("重新检测",-1)])]),_:1},8,["loading"]),r.value.guide?(i(),Y(o,{key:0,link:"",type:"primary",onClick:_e},{default:g(()=>[...e[8]||(e[8]=[_("打开系统设置",-1)])]),_:1})):B("",!0)])],2),a("div",Jt,[a("section",qt,[a("div",Xt,[e[13]||(e[13]=a("span",null,"应用预设",-1)),a("div",Gt,[m(d,{class:"head-actions-backup"},{default:g(()=>[m(o,{size:"small",plain:"",loading:y.value,disabled:p.value||c.value||y.value,onClick:Ee},{default:g(()=>[...e[9]||(e[9]=[_("导出",-1)])]),_:1},8,["loading","disabled"]),m(o,{size:"small",plain:"",loading:c.value,disabled:p.value||c.value||y.value,onClick:Ce},{default:g(()=>[...e[10]||(e[10]=[_("导入",-1)])]),_:1},8,["loading","disabled"])]),_:1}),m(o,{size:"small",plain:"",disabled:p.value||c.value||y.value||f.value,loading:f.value,onClick:be},{default:g(()=>[...e[11]||(e[11]=[_("恢复内置",-1)])]),_:1},8,["disabled","loading"]),m(o,{size:"small",type:"primary",disabled:p.value||c.value||y.value,onClick:e[0]||(e[0]=v=>G())},{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,$(U.value),1)]),!p.value&&!J.value.length?(i(),u("div",ea,[a("div",ta,[m(F(dt),{size:24})]),e[16]||(e[16]=a("p",null,"还没有应用预设。添加后 MOSS 才能向对应应用发送快捷键。",-1)),m(o,{type:"primary",onClick:e[1]||(e[1]=v=>G())},{default:g(()=>[...e[15]||(e[15]=[_("添加应用",-1)])]),_:1})])):J.value.length?(i(),u("div",aa,[(i(!0),u(R,null,Q(J.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(),Y(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(),Y(o,{key:0,link:"",type:"primary",size:"small",onClick:Z=>G(v)},{default:g(()=>[...e[18]||(e[18]=[_("编辑",-1)])]),_:1},8,["onClick"])),m(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,Yt)),[[Ne,p.value||c.value||y.value]])]),a("section",pa,[a("div",da,[m(F(Le),{size:18,weight:"duotone"}),e[20]||(e[20]=a("span",null,"试发快捷键",-1))]),a("div",ma,[e[23]||(e[23]=a("p",{class:"panel-desc"},"点击输入框后按下组合键即可录制,用于验证权限与映射是否生效。",-1)),a("div",fa,[m(w,{modelValue:h.value,"onUpdate:modelValue":e[2]||(e[2]=v=>h.value=v),placeholder:ye.value,onKeydownCapture:we},ze({_:2},[h.value?{name:"suffix",fn:g(()=>[m(o,{link:"",type:"primary",onClick:X},{default:g(()=>[...e[21]||(e[21]=[_("清空",-1)])]),_:1})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),m(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)]),m(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:Ve},{header:g(()=>[a("div",ha,[a("h3",null,$(z.value==="add"?"添加应用":"编辑应用"),1),a("p",null,"为 "+$(U.value)+" 配置动作快捷键。应用名需与系统中显示的名称一致。",1)])]),footer:g(()=>[m(o,{onClick:e[4]||(e[4]=v=>T.value=!1),disabled:E.value},{default:g(()=>[...e[30]||(e[30]=[_("取消",-1)])]),_:1},8,["disabled"]),m(o,{type:"primary",loading:E.value,onClick:$e},{default:g(()=>[...e[31]||(e[31]=[_("保存",-1)])]),_:1},8,["loading"])]),default:g(()=>[a("div",va,[m(Te,{"label-position":"top"},{default:g(()=>[m(xe,{label:"应用名称"},{default:g(()=>[m(w,{modelValue:V.name,"onUpdate:modelValue":e[3]||(e[3]=v=>V.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,$(V.actions.length)+" 项",1)]),m(o,{type:"primary",link:"",onClick:Ae},{default:g(()=>[m(F(Ie),{size:14,weight:"bold"}),e[26]||(e[26]=_(" 添加动作 ",-1))]),_:1})]),V.actions.length?B("",!0):(i(),u("div",_a,[...e[27]||(e[27]=[a("p",null,"还没有动作,点击上方「添加动作」。",-1)])])),(i(!0),u(R,null,Q(V.actions,(v,Z)=>(i(),u("div",{key:Z,class:"dialog-action-card"},[a("div",Aa,[a("span",Va,$(Z+1),1),m(w,{modelValue:v.name,"onUpdate:modelValue":P=>v.name=P,class:"action-name-input",placeholder:"动作名称,如 刷新"},null,8,["modelValue","onUpdate:modelValue"]),m(o,{link:"",type:"warning",onClick:P=>V.actions.splice(Z,1)},{default:g(()=>[m(F(Ot),{size:16})]),_:1},8,["onClick"])]),a("div",Ha,[a("div",$a,[a("label",Ma,[a("span",{class:oe(["platform-badge",he.value])},$(U.value),3),e[28]||(e[28]=_(" 组合键 ",-1))]),m(w,{modelValue:v[W.value],"onUpdate:modelValue":P=>v[W.value]=P,placeholder:ve.value,onKeydownCapture:De(P=>ke(P,v,W.value),["prevent"])},null,8,["modelValue","onUpdate:modelValue","placeholder","onKeydownCapture"])])]),e[29]||(e[29]=a("p",{class:"field-hint"},"聚焦组合键输入框后按键即可录制。",-1))]))),128))])])]),_:1},8,["modelValue"])],64)}}}),Ta=Ue(Sa,[["__scopeId","data-v-3499f2c8"]]);export{Ta as default};
1
+ import{d as ne,o as i,g as u,l as me,i as B,x as fe,b as V,f as a,v as N,z as Ke,n as oe,t as $,j as m,w as g,c as Y,M as Be,k as _,a as F,F as J,h as Q,U as ze,r as M,I as b,E as k,L as le,e as K,N as je,S as De,J as Pe}from"./index-BLut91yI.js";import{G as Ie}from"./PhKeyboard.vue-BvVNycVx.js";import{I as Le}from"./PhPlus.vue-rQNjmBgw.js";import{_ as Ue}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.js";const Fe=["width","height","fill","transform"],Je={key:0},Re=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=[Re],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),Ge=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),Ye=[Xe,Ge],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=N("weight","regular"),l=N("size","1em"),S=N("color","currentColor"),E=N("mirrored",!1),p=V(()=>s.weight??r),y=V(()=>s.size??l),c=V(()=>s.color??S),f=V(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:E?"scale(-1, 1)":void 0);return(h,x)=>(i(),u("svg",fe({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:y.value,height:y.value,fill:c.value,transform:f.value},h.$attrs),[me(h.$slots,"default"),p.value==="bold"?(i(),u("g",Je,We)):p.value==="duotone"?(i(),u("g",qe,Ye)):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,Fe))}}),mt=["width","height","fill","transform"],ft={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},Et=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),Ct=[Et],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"},Nt=ne({...Tt,props:{weight:{type:String},size:{type:[String,Number]},color:{type:String},mirrored:{type:Boolean}},setup(n){const s=n,r=N("weight","regular"),l=N("size","1em"),S=N("color","currentColor"),E=N("mirrored",!1),p=V(()=>s.weight??r),y=V(()=>s.size??l),c=V(()=>s.color??S),f=V(()=>s.mirrored!==void 0?s.mirrored?"scale(-1, 1)":void 0:E?"scale(-1, 1)":void 0);return(h,x)=>(i(),u("svg",fe({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 256",width:y.value,height:y.value,fill:c.value,transform:f.value},h.$attrs),[me(h.$slots,"default"),p.value==="bold"?(i(),u("g",ft,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,Ct)):p.value==="thin"?(i(),u("g",Zt,xt)):B("",!0)],16,mt))}}),re=64,ie=64,Ot=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>Ot)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 f=l.hiddenApps[c];if(typeof f!="string")throw new Error(`hiddenApps 第 ${c+1} 项必须是字符串`);const h=f.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 E=Object.entries(l.apps);if(E.length>re)throw new Error(`应用数量 ${E.length} 超过上限 ${re}`);const p={};for(const[y,c]of E){const f=String(y).trim();if(!ee(f))throw new Error(`应用名称「${f||"(空)"}」不合法`);if(!c||typeof c!="object"||Array.isArray(c))throw new Error(`应用「${f}」格式错误`);const h=c;if(h.builtin===!0)throw new Error(`应用「${f}」不能标记为内置预设`);if(!h.actions||typeof h.actions!="object"||Array.isArray(h.actions))throw new Error(`应用「${f}」缺少 actions 对象`);const x=Object.entries(h.actions);if(x.length===0)throw new Error(`应用「${f}」至少需要一个动作`);if(x.length>ie)throw new Error(`应用「${f}」动作数量超过上限 ${ie}`);const L=new Set,T={};for(const[z,A]of x){const C=String(z).trim();if(!ee(C))throw new Error(`应用「${f}」动作名称「${C||"(空)"}」不合法`);if(L.has(C))throw new Error(`应用「${f}」动作名称「${C}」重复`);L.add(C),T[C]=Dt(A,`应用「${f}」动作「${C}」`)}p[f]={actions:T}}return{version:1,hiddenApps:S,apps:p}}const ae=new Set(["Meta","Control","Alt","Shift"]),It=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 Lt(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=Lt(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=>!It.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 Ut={class:"hotkeys-page uxp-page-stack"},Ft={class:"status-card-main"},Jt={class:"status-copy"},Rt={class:"status-card-actions"},Wt={class:"hotkeys-layout"},qt={class:"panel presets-panel"},Xt={class:"panel-hd panel-hd-row"},Gt={class:"head-actions"},Yt=["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"},ma={class:"panel-bd"},fa={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),E=M(!1),p=M(!0),y=M(!1),c=M(!1),f=M(!1),h=M(""),x=M(null),L=V(()=>y.value?"正在导出快捷键预设…":c.value?"正在导入快捷键预设…":"正在加载应用预设…"),T=M(!1),z=M("add"),A=De({name:"",actions:[]}),C=V(()=>r.value.platform||s.value.platform||""),P=V(()=>C.value==="darwin"),j=V(()=>C.value==="win32"),U=V(()=>P.value?"macOS":j.value?"Windows":C.value||"当前系统"),R=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 O(t){return t.join("+")}function ge(t){var e,o,d,H,w;return(e=t.keys)!=null&&e.length?O(t.keys):P.value&&((o=t.mac)!=null&&o.length)?O(t.mac):j.value&&((d=t.win)!=null&&d.length)?O(t.win):(H=t.mac)!=null&&H.length?O(t.mac):(w=t.win)!=null&&w.length?O(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 I(){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 G(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:O(d.mac||[]),winText:O(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}E.value=!0;try{await b("/api/mcp/hotkey/apps",{method:"POST",body:JSON.stringify({name:t,entry:e})}),T.value=!1,await I(),k.success("已保存")}catch(o){k.error((o==null?void 0:o.message)||"保存失败")}finally{E.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 I(),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 Ee(){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 Ce(){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 I(),k.success("导入成功")}catch(w){k.error((w==null?void 0:w.message)||"导入失败")}finally{c.value=!1}}async function be(){if(!f.value){f.value=!0;try{await b("/api/mcp/hotkey/presets",{method:"PUT",body:JSON.stringify({hiddenApps:[]})}),await I(),k.success("已恢复全部内置预设")}catch(t){k.error((t==null?void 0:t.message)||"恢复失败")}finally{f.value=!1}}}return Ke(async()=>{await Promise.all([I(),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"),Ne=K("el-dialog"),Oe=je("loading");return i(),u(J,null,[a("div",Ut,[a("section",{class:oe(["status-card",r.value.ready?"is-ready":"is-pending"])},[a("div",Ft,[e[6]||(e[6]=a("span",{class:"status-dot","aria-hidden":"true"},null,-1)),a("div",Jt,[a("strong",null,$(r.value.message||"正在检测权限…"),1),a("p",null,$(U.value)+" · "+$(r.value.ready?"Agent 可通过 moss-hotkey 向应用发送快捷键":"需完成系统授权后才能试发"),1)])]),a("div",Rt,[m(o,{link:"",type:"primary",loading:l.value,onClick:se},{default:g(()=>[...e[7]||(e[7]=[_("重新检测",-1)])]),_:1},8,["loading"]),r.value.guide?(i(),Y(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",Gt,[m(d,{class:"head-actions-backup"},{default:g(()=>[m(o,{size:"small",plain:"",loading:y.value,disabled:p.value||c.value||y.value,onClick:Ee},{default:g(()=>[...e[9]||(e[9]=[_("导出",-1)])]),_:1},8,["loading","disabled"]),m(o,{size:"small",plain:"",loading:c.value,disabled:p.value||c.value||y.value,onClick:Ce},{default:g(()=>[...e[10]||(e[10]=[_("导入",-1)])]),_:1},8,["loading","disabled"])]),_:1}),m(o,{size:"small",plain:"",disabled:p.value||c.value||y.value||f.value,loading:f.value,onClick:be},{default:g(()=>[...e[11]||(e[11]=[_("恢复内置",-1)])]),_:1},8,["disabled","loading"]),m(o,{size:"small",type:"primary",disabled:p.value||c.value||y.value,onClick:e[0]||(e[0]=v=>G())},{default:g(()=>[...e[12]||(e[12]=[_("添加应用",-1)])]),_:1},8,["disabled"])])]),Be((i(),u("div",{class:"panel-bd","element-loading-text":L.value},[a("p",Qt,[e[14]||(e[14]=_("内置 Chrome 常用映射;其余应用可在本页添加。当前系统:",-1)),a("strong",null,$(U.value),1)]),!p.value&&!W.value.length?(i(),u("div",ea,[a("div",ta,[m(F(dt),{size:24})]),e[16]||(e[16]=a("p",null,"还没有应用预设。添加后 MOSS 才能向对应应用发送快捷键。",-1)),m(o,{type:"primary",onClick:e[1]||(e[1]=v=>G())},{default:g(()=>[...e[15]||(e[15]=[_("添加应用",-1)])]),_:1})])):W.value.length?(i(),u("div",aa,[(i(!0),u(J,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(),Y(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(),Y(o,{key:0,link:"",type:"primary",size:"small",onClick:Z=>G(v)},{default:g(()=>[...e[18]||(e[18]=[_("编辑",-1)])]),_:1},8,["onClick"])),m(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(J,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,Yt)),[[Oe,p.value||c.value||y.value]])]),a("section",pa,[a("div",da,[m(F(Ie),{size:18,weight:"duotone"}),e[20]||(e[20]=a("span",null,"试发快捷键",-1))]),a("div",ma,[e[23]||(e[23]=a("p",{class:"panel-desc"},"点击输入框后按下组合键即可录制,用于验证权限与映射是否生效。",-1)),a("div",fa,[m(w,{modelValue:h.value,"onUpdate:modelValue":e[2]||(e[2]=v=>h.value=v),placeholder:ye.value,onKeydownCapture:we},ze({_:2},[h.value?{name:"suffix",fn:g(()=>[m(o,{link:"",type:"primary",onClick:X},{default:g(()=>[...e[21]||(e[21]=[_("清空",-1)])]),_:1})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),m(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)]),m(Ne,{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,"为 "+$(U.value)+" 配置动作快捷键。应用名需与系统中显示的名称一致。",1)])]),footer:g(()=>[m(o,{onClick:e[4]||(e[4]=v=>T.value=!1),disabled:E.value},{default:g(()=>[...e[30]||(e[30]=[_("取消",-1)])]),_:1},8,["disabled"]),m(o,{type:"primary",loading:E.value,onClick:$e},{default:g(()=>[...e[31]||(e[31]=[_("保存",-1)])]),_:1},8,["loading"])]),default:g(()=>[a("div",va,[m(Te,{"label-position":"top"},{default:g(()=>[m(xe,{label:"应用名称"},{default:g(()=>[m(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)]),m(o,{type:"primary",link:"",onClick:Ve},{default:g(()=>[m(F(Le),{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(J,null,Q(A.actions,(v,Z)=>(i(),u("div",{key:Z,class:"dialog-action-card"},[a("div",Va,[a("span",Aa,$(Z+1),1),m(w,{modelValue:v.name,"onUpdate:modelValue":D=>v.name=D,class:"action-name-input",placeholder:"动作名称,如 刷新"},null,8,["modelValue","onUpdate:modelValue"]),m(o,{link:"",type:"warning",onClick:D=>A.actions.splice(Z,1)},{default:g(()=>[m(F(Nt),{size:16})]),_:1},8,["onClick"])]),a("div",Ha,[a("div",$a,[a("label",Ma,[a("span",{class:oe(["platform-badge",he.value])},$(U.value),3),e[28]||(e[28]=_(" 组合键 ",-1))]),m(w,{modelValue:v[R.value],"onUpdate:modelValue":D=>v[R.value]=D,placeholder:ve.value,onKeydownCapture:Pe(D=>ke(D,v,R.value),["prevent"])},null,8,["modelValue","onUpdate:modelValue","placeholder","onKeydownCapture"])])]),e[29]||(e[29]=a("p",{class:"field-hint"},"聚焦组合键输入框后按键即可录制。",-1))]))),128))])])]),_:1},8,["modelValue"])],64)}}}),Ta=Ue(Sa,[["__scopeId","data-v-3499f2c8"]]);export{Ta as default};
@@ -1,4 +1,4 @@
1
- import{d as Ie,U as oe,o as r,m as f,b as s,F as q,B as ie,A as ae,t as m,p as M,f as k,c as $,w as i,e as o,h as w,r as T,j as g,L as I,z as Ke,a as It,I as Pt,O as jt,V as Nt,g as Fe,s as pe,k as Ut,E as We,l as At}from"./index-CMMVyrw-.js";import{_ as Pe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.js";function Me(u){return u?Object.fromEntries(Object.entries(u).map(([p,b])=>[String(p),String(b)]).sort(([p],[b])=>p.localeCompare(b))):{}}function Et(u){return u.trim().replace(/\/+$/,"")}function Ze(u){const p=(u.type||"stdio").toLowerCase();return JSON.stringify(p==="stdio"?{type:"stdio",command:(u.command||"").trim(),args:Array.isArray(u.args)?u.args.map(String):[],env:Me(u.env)}:{type:p,url:Et(u.url||""),headers:Me(u.headers),env:Me(u.env)})}function zt(u,p,b){const d=Ze(p);for(const[v,_]of Object.entries(u))if(!(b&&v===b)&&!(!_||_.builtin)&&Ze(_)===d)return v;return null}const Jt=new Set(["stdio","sse","http","streamablehttp"]),Qe=`{
1
+ import{d as Ie,S as oe,o as r,g as f,f as s,F as q,h as ie,n as ae,t as m,i as M,k,c as $,w as i,j as o,r as w,e as T,E as g,I,z as Ke,u as It,G as Pt,M as jt,T as Nt,a as Fe,b as pe,p as Ut,L as We,q as At}from"./index-BLut91yI.js";import{_ as Pe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./esp-flasher-CeAm6Ct9.js";function Me(u){return u?Object.fromEntries(Object.entries(u).map(([p,b])=>[String(p),String(b)]).sort(([p],[b])=>p.localeCompare(b))):{}}function Et(u){return u.trim().replace(/\/+$/,"")}function Ze(u){const p=(u.type||"stdio").toLowerCase();return JSON.stringify(p==="stdio"?{type:"stdio",command:(u.command||"").trim(),args:Array.isArray(u.args)?u.args.map(String):[],env:Me(u.env)}:{type:p,url:Et(u.url||""),headers:Me(u.headers),env:Me(u.env)})}function zt(u,p,b){const d=Ze(p);for(const[v,_]of Object.entries(u))if(!(b&&v===b)&&!(!_||_.builtin)&&Ze(_)===d)return v;return null}const Jt=new Set(["stdio","sse","http","streamablehttp"]),Qe=`{
2
2
  "mcpServers": {
3
3
  "memory": {
4
4
  "command": "npx",