@astralyn/sash 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +17 -5
- package/THIRD_PARTY_NOTICES.md +9 -0
- package/dist/api.js +14 -45
- package/dist/app-state.js +99 -0
- package/dist/autostart/command.js +24 -0
- package/dist/autostart/context.js +43 -0
- package/dist/autostart/files.js +60 -0
- package/dist/autostart/installation.js +48 -0
- package/dist/autostart/start.js +47 -0
- package/dist/autostart/windows-registry.js +88 -0
- package/dist/autostart/windows.js +59 -0
- package/dist/autostart-contract.js +31 -0
- package/dist/autostart-entry.js +10 -0
- package/dist/autostart.js +69 -0
- package/dist/cli.js +11 -11
- package/dist/commands/auto.js +15 -0
- package/dist/commands/lifecycle.js +5 -15
- package/dist/commands/logs.js +11 -4
- package/dist/commands/shared.js +2 -4
- package/dist/commands/status.js +5 -1
- package/dist/commands/update.js +7 -3
- package/dist/commands/web.js +14 -50
- package/dist/contracts.js +168 -348
- package/dist/core-config-validation.js +22 -38
- package/dist/core-update.js +126 -762
- package/dist/core.js +20 -46
- package/dist/daemon/app.js +129 -117
- package/dist/daemon/context.js +13 -7
- package/dist/daemon/entry.js +21 -38
- package/dist/daemon/errors.js +3 -0
- package/dist/daemon/handlers/autostart.js +18 -0
- package/dist/daemon/handlers/core.js +32 -9
- package/dist/daemon/handlers/daemon.js +17 -6
- package/dist/daemon/handlers/profiles.js +12 -2
- package/dist/daemon/handlers/settings.js +9 -36
- package/dist/daemon/router.js +26 -21
- package/dist/daemon/scheduler.js +3 -1
- package/dist/daemon/server.js +5 -2
- package/dist/daemon-client.js +13 -3
- package/dist/daemon-http.js +6 -0
- package/dist/daemon-lifecycle.js +19 -196
- package/dist/github.js +7 -2
- package/dist/http.js +7 -5
- package/dist/mihomo-config.js +2 -1
- package/dist/paths.js +5 -7
- package/dist/profile-model.js +87 -0
- package/dist/profile-service.js +250 -587
- package/dist/profiles.js +43 -171
- package/dist/runtime-lifecycle.js +112 -194
- package/dist/runtime-owner.js +37 -76
- package/dist/sash-client.js +40 -19
- package/dist/settings-service.js +29 -224
- package/dist/settings.js +61 -289
- package/dist/status.js +24 -16
- package/dist/supervisor.js +1 -14
- package/dist/sysproxy/common.js +5 -45
- package/dist/sysproxy/factory.js +24 -65
- package/dist/sysproxy/snapshot.js +24 -257
- package/dist/sysproxy.js +1 -4
- package/dist/system-proxy-manager.js +37 -35
- package/dist/ui/assets/{ConnectionsView-CfaOG2JV.js → ConnectionsView-BgXQM6Z4.js} +1 -1
- package/dist/ui/assets/{LogsView-BDiRATXN.js → LogsView-2f542P8z.js} +1 -1
- package/dist/ui/assets/{PaginationFooter-DTytr1iu.js → PaginationFooter-cj1tcZej.js} +1 -1
- package/dist/ui/assets/ProfileEditorDialog-C9M8uKZC.css +1 -0
- package/dist/ui/assets/ProfileEditorDialog-DD4y4GBC.js +14 -0
- package/dist/ui/assets/ProfilesView-BXU2DOA7.css +1 -0
- package/dist/ui/assets/ProfilesView-DNnzYIEY.js +7 -0
- package/dist/ui/assets/{RulesView-CjEyCN1A.js → RulesView-CtKvlckZ.js} +1 -1
- package/dist/ui/assets/SettingsView-BaeKFF_N.js +1 -0
- package/dist/ui/assets/SettingsView-CWjIe05v.css +1 -0
- package/dist/ui/assets/index-CBInDvdJ.js +19 -0
- package/dist/ui/assets/index-mOLy7fkB.css +1 -0
- package/dist/ui/assets/{theme-BwDBMsKO.js → theme-D40MF8cQ.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/docs/architecture-proposal.md +109 -0
- package/docs/autostart.md +101 -0
- package/docs/backend.md +92 -224
- package/docs/frontend.md +60 -106
- package/docs/usage.md +92 -164
- package/package.json +3 -3
- package/dist/commands/upgrade.js +0 -43
- package/dist/core-install-transaction.js +0 -114
- package/dist/core-update-coordination.js +0 -105
- package/dist/core-update-service.js +0 -245
- package/dist/managed-state-transaction.js +0 -375
- package/dist/offline-mutation.js +0 -58
- package/dist/profile-migration.js +0 -101
- package/dist/runtime-recovery.js +0 -31
- package/dist/sysproxy/darwin.js +0 -287
- package/dist/sysproxy/gnome.js +0 -181
- package/dist/sysproxy/legacy.js +0 -58
- package/dist/ui/assets/CodeEditorModal-6m0TJWyF.css +0 -1
- package/dist/ui/assets/CodeEditorModal-D1zn-jRS.js +0 -14
- package/dist/ui/assets/ProfileEditorDialog-CyyP6OF1.js +0 -1
- package/dist/ui/assets/ProfilesView-ByqdFNHN.css +0 -1
- package/dist/ui/assets/ProfilesView-hFa7-O72.js +0 -2
- package/dist/ui/assets/SettingsFileDialog-CjBSyH4K.js +0 -1
- package/dist/ui/assets/SettingsView-D5QvJId6.css +0 -1
- package/dist/ui/assets/SettingsView-DsRntRfn.js +0 -2
- package/dist/ui/assets/index-CxQTf_P9.css +0 -1
- package/dist/ui/assets/index-_mb4OfYp.js +0 -19
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as g,C as y,ad as C,z as f,o as h,m as w,u as d,t,p as r,ag as x,y as m}from"./index-_mb4OfYp.js";import{C as B}from"./CodeEditorModal-D1zn-jRS.js";import"./theme-BwDBMsKO.js";const b=g({__name:"ProfileEditorDialog",props:{profileId:{},profileName:{},isRemote:{type:Boolean}},emits:["close"],setup(l,{emit:v}){const n=l,i=v,s=r(""),c=r(!0),a=r(!1),u=r(null);y(async()=>{try{const e=await C.getProfileContent(n.profileId);s.value=e.content}catch(e){u.value=f(e)}finally{c.value=!1}});async function p(e){if(!a.value){a.value=!0;try{await x(n.profileId,e),m.success(t("toast.profileSaved",{name:n.profileName})),i("close")}catch(o){m.error(t("toast.failed",{msg:f(o)}))}finally{a.value=!1}}}return(e,o)=>(h(),w(B,{title:l.profileName,"aria-label":d(t)("editor.title"),hint:l.isRemote?d(t)("editor.remoteWarning"):void 0,content:s.value,language:"yaml",loading:c.value,"load-error":u.value,saving:a.value,onSave:p,onClose:o[0]||(o[0]=E=>i("close"))},null,8,["title","aria-label","hint","content","loading","load-error","saving"]))}});export{b as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.rename-overlay[data-v-67fe66f9]{position:fixed;z-index:var(--z-rename);display:flex;align-items:center;justify-content:center;background:var(--bg-scrim);inset:0}.rename-dialog[data-v-67fe66f9]{width:min(360px,calc(100vw - 32px));padding:18px}.rename-title[data-v-67fe66f9]{margin:0 0 12px;font-size:16px}.rename-label[data-v-67fe66f9]{display:block;margin-bottom:6px;color:var(--text-secondary);font-size:14px}.rename-input[data-v-67fe66f9]{width:100%;margin-bottom:14px}.rename-actions[data-v-67fe66f9]{display:flex;gap:10px;justify-content:flex-end}.profiles-view[data-v-77f96f8d]{min-height:100%}.dl-panel[data-v-77f96f8d]{display:grid;min-height:80px;grid-template-columns:minmax(260px,1fr) auto;align-items:center;gap:8px;margin-bottom:15px;padding:12px 34px;background:var(--bg-app);border-bottom:1px solid var(--border)}.dl-input-wrap[data-v-77f96f8d]{position:relative;min-width:0}.dl-input[data-v-77f96f8d]{width:100%;min-height:46px;padding-right:42px;font-family:var(--font-mono);font-size:16px}.dl-paste[data-v-77f96f8d]{position:absolute;top:50%;right:4px;width:31px;height:30px;transform:translateY(-50%)}.dl-actions[data-v-77f96f8d]{display:flex;align-items:center;gap:7px}.dl-actions .btn[data-v-77f96f8d]{min-height:46px;padding-inline:12px}.hidden-file[data-v-77f96f8d]{display:none}.empty-panel[data-v-77f96f8d]{margin:0 34px;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-md)}.profiles-grid[data-v-77f96f8d]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px 12px;padding:0 34px 44px}.profile-card[data-v-77f96f8d]{position:relative;display:block;min-width:0;min-height:72px;padding:10px 8px 10px 15px;overflow:hidden;cursor:pointer;background:var(--bg-panel);border:1px solid transparent;border-radius:var(--radius-sm);transition:background var(--motion-fast) var(--ease-standard),border-color var(--motion-fast) var(--ease-standard)}.profile-card[data-v-77f96f8d]:before{position:absolute;inset:2px auto 2px 0;width:4px;border-radius:0 var(--radius-full) var(--radius-full) 0;content:"";background:var(--border-strong)}.profile-card[data-v-77f96f8d]:hover{background:var(--bg-hover);border-color:var(--border)}.profile-card.active[data-v-77f96f8d]{cursor:default;background:var(--bg-panel);border-color:transparent}.profile-card.active[data-v-77f96f8d]:before{background:var(--selection)}.profile-card.busy[data-v-77f96f8d]{cursor:wait}.profile-card-main[data-v-77f96f8d]{min-width:0;border-radius:var(--radius-sm);outline:none}.profile-card-main[data-v-77f96f8d]:focus-visible{box-shadow:0 0 0 3px var(--accent-ring)}.profile-name-row[data-v-77f96f8d]{display:flex;align-items:center;gap:8px;min-width:0;margin-right:140px}.profile-name[data-v-77f96f8d]{overflow:hidden;color:var(--text-primary);font-size:16px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.profile-source[data-v-77f96f8d]{margin-top:4px;overflow:hidden;color:var(--text-muted);font-size:14px;text-overflow:ellipsis;white-space:nowrap}.profile-usage[data-v-77f96f8d]{margin-top:7px}.usage-nums[data-v-77f96f8d]{display:flex;justify-content:space-between;gap:10px;color:var(--text-secondary);font-size:14px}.usage-expire[data-v-77f96f8d]{color:var(--text-muted)}.usage-bar[data-v-77f96f8d]{height:4px;margin-top:6px;overflow:hidden;background:var(--border);border-radius:var(--radius-full)}.usage-fill[data-v-77f96f8d]{height:100%;background:var(--selection);border-radius:var(--radius-full);transition:width var(--motion-normal) var(--ease-standard)}.usage-fill-hot[data-v-77f96f8d]{background:var(--danger)}.profile-error[data-v-77f96f8d]{display:flex;align-items:center;gap:6px;min-width:0;margin-top:10px;color:var(--danger);font-size:14px}.profile-error-text[data-v-77f96f8d]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-actions[data-v-77f96f8d]{position:absolute;top:8px;right:8px;display:flex;flex-shrink:0;gap:3px}.profile-actions .icon-btn[data-v-77f96f8d]{width:31px;height:31px}.danger-hover[data-v-77f96f8d]:hover:not(:disabled){color:var(--danger);background:var(--danger-soft)}.spin[data-v-77f96f8d]{animation:rotate .9s linear infinite}@media(max-width:820px){.dl-panel[data-v-77f96f8d]{grid-template-columns:1fr;padding-right:16px;padding-left:16px}.profiles-grid[data-v-77f96f8d]{padding-right:16px;padding-left:16px}.empty-panel[data-v-77f96f8d]{margin-right:16px;margin-left:16px}.dl-actions[data-v-77f96f8d]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.dl-actions .btn[data-v-77f96f8d]{min-width:0}}@media(max-width:760px){.profiles-grid[data-v-77f96f8d]{grid-template-columns:1fr}.profile-name-row[data-v-77f96f8d]{margin-right:172px}.profile-actions .icon-btn[data-v-77f96f8d]{width:40px;height:40px}}@media(max-width:480px){.dl-panel[data-v-77f96f8d]{gap:8px;padding:10px}.dl-actions[data-v-77f96f8d]{grid-template-columns:repeat(2,minmax(0,1fr))}.dl-action-primary[data-v-77f96f8d]{grid-column:1 / -1}.dl-actions .btn[data-v-77f96f8d],.dl-input[data-v-77f96f8d]{min-height:44px}.dl-paste[data-v-77f96f8d]{width:38px;height:38px}.profile-card[data-v-77f96f8d]{padding:14px 8px 14px 15px}.profile-name-row[data-v-77f96f8d]{margin-right:164px}.usage-nums[data-v-77f96f8d]{flex-direction:column;gap:2px}.profile-actions .icon-btn[data-v-77f96f8d]{width:38px;height:38px}}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ProfileEditorDialog-CyyP6OF1.js","./index-_mb4OfYp.js","./index-CxQTf_P9.css","./CodeEditorModal-D1zn-jRS.js","./theme-BwDBMsKO.js","./CodeEditorModal-6m0TJWyF.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{d as R,K as ae,L as te,C as O,M as le,N as se,O as oe,o as u,m as K,T as ie,a as m,b as ne,e as s,Q as P,g as r,u as l,t as e,f as q,R as F,v as H,S as re,p as f,U as de,y as n,z as A,_ as Q,V as ce,c as _,I as h,n as L,E as ue,F as fe,r as me,s as C,h as N,W as pe,i as T,X as ve,Y as be,Z as ye,q as B,k as _e,l as he,$ as ge,a0 as ke,a1 as we,a2 as $e,A as Ce,a3 as Pe,a4 as Ie}from"./index-_mb4OfYp.js";const xe=["disabled","onKeydown"],Ae={class:"rename-actions"},Ee=["disabled"],Te=["disabled"],ze=R({__name:"ProfileRenameDialog",props:{profile:{}},emits:["close"],setup(S,{emit:V}){const b=S,d=V,y=ae(),g=`${y}-title`,I=`${y}-input`,z=f(null),p=f(null),k=b.profile.name,w=f(k),$=f(!1),{open:i,close:U}=te({container:z,initialFocus:()=>(p.value?.select(),p.value),onEscape:()=>d("close")});O(()=>{le(),i()}),se(()=>{U(),oe()});async function D(){const x=w.value.trim();if(!(!x||x===k||$.value)){$.value=!0;try{await de(b.profile.id,x),n.success(e("toast.settingSaved")),d("close")}catch(c){n.error(e("toast.failed",{msg:A(c)}))}finally{$.value=!1}}}return(x,c)=>(u(),K(ie,{to:"body"},[m(re,{name:"fade",appear:""},{default:ne(()=>[s("div",{class:"rename-overlay",onClick:c[2]||(c[2]=P(E=>d("close"),["self"]))},[s("div",{ref_key:"dialogElement",ref:z,class:"rename-dialog card",role:"dialog","aria-modal":"true","aria-labelledby":g},[s("h3",{id:g,class:"rename-title"},r(l(e)("profiles.renameTitle")),1),s("label",{class:"rename-label",for:I},r(l(e)("profiles.nameLabel")),1),q(s("input",{id:I,ref_key:"inputElement",ref:p,"onUpdate:modelValue":c[0]||(c[0]=E=>w.value=E),class:"input rename-input",type:"text",maxlength:"120",disabled:$.value,onKeydown:F(P(D,["prevent"]),["enter"])},null,40,xe),[[H,w.value]]),s("div",Ae,[s("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:$.value,onClick:c[1]||(c[1]=E=>d("close"))},r(l(e)("common.cancel")),9,Ee),s("button",{type:"button",class:"btn btn-primary btn-sm",disabled:$.value||!w.value.trim()||w.value.trim()===l(k),onClick:D},r(l(e)("common.save")),9,Te)])],512)])]),_:1})]))}}),De=Q(ze,[["__scopeId","data-v-67fe66f9"]]),Ue={class:"profiles-view"},Le=["aria-busy"],Fe={class:"dl-input-wrap"},Ve=["placeholder","aria-label","disabled"],Me=["title","aria-label","disabled"],Be={class:"dl-actions"},Ke=["disabled"],Se=["disabled"],Ne=["disabled"],Re=["aria-label"],Oe={key:0,class:"empty-panel"},qe=["aria-busy"],He=["aria-current","aria-disabled","title","onClick","onKeydown"],Qe={class:"profile-name-row"},We=["title"],Xe=["title"],Ye={key:0,class:"profile-usage"},Ze={class:"usage-nums"},je={class:"mono"},Ge={key:0,class:"mono usage-expire"},Je=["aria-label","aria-valuenow"],ea=["title"],aa={class:"profile-error-text"},ta={class:"profile-actions"},la=["title","aria-label","disabled","onClick"],sa=["title","aria-label","disabled","onClick"],oa=["title","aria-label","disabled","onClick"],ia=["title","aria-label","disabled","onClick"],na=R({__name:"ProfilesView",setup(S){const V=be(()=>ye(()=>import("./ProfileEditorDialog-CyyP6OF1.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),b=f(""),d=f(!1),y=f(!1),g=f(!1),I=f(""),z=f(null),p=f(null),k=f(null),w=B(()=>C.profiles),$=B(()=>C.profiles.some(t=>t.url!=="")),i=B(()=>C.operations.profileMutation);function U(t){if(!t.url)return e("profiles.localFile");try{return new URL(t.url).hostname||t.url}catch{return t.url}}function D(t){const o=new Date(t.updatedAt).getTime();return!Number.isFinite(o)||o<=0?e("profiles.neverUpdated"):_e(t.updatedAt,he.value)}function x(t){return(t.subInfo?.upload??0)+(t.subInfo?.download??0)}function c(t){const o=t.subInfo?.total??0;return o<=0?0:Math.min(100,Math.round(x(t)/o*100))}O(()=>{ce().catch(()=>{})});async function E(){const t=b.value.trim();if(!(!t||d.value)){d.value=!0;try{const o=await ge(t);b.value="",o.activated?n.success(e("toast.profileActivated",{name:o.profile.name,n:o.proxyCount??0})):n.success(e("toast.profileAdded",{name:o.profile.name}))}catch(o){n.error(e("toast.failed",{msg:A(o)}))}finally{d.value=!1}}}async function W(t){if(!I.value){I.value=t.id;try{await ke(t.id),n.success(e("toast.profileUpdated",{name:t.name}))}catch(o){n.error(e("toast.failed",{msg:A(o)}))}finally{I.value=""}}}async function X(){if(!y.value){y.value=!0;try{const t=await we();t.failed.length===0?n.success(e("toast.profilesUpdateAllOk",{n:t.updated})):n.error(e("toast.profilesUpdateAllPartial",{n:t.updated,f:t.failed.length}))}catch(t){n.error(e("toast.failed",{msg:A(t)}))}finally{y.value=!1}}}async function M(t){if(!(i.value||t.id===C.activeProfileId))try{const o=await $e(t.id);n.success(e("toast.profileActivated",{name:t.name,n:o.proxyCount}))}catch(o){n.error(e("toast.failed",{msg:A(o)}))}}function Y(t){i.value||(p.value=t)}async function Z(t){if(!(i.value||!await Ce({title:e("profiles.deleteConfirmTitle"),message:e("profiles.deleteConfirmMsg",{name:t.name}),confirmText:e("common.confirm"),cancelText:e("common.cancel"),danger:!0})))try{await Pe(t.id),n.success(e("toast.profileDeleted",{name:t.name}))}catch(a){n.error(e("toast.failed",{msg:A(a)}))}}function j(t){const o=t.target,a=o.files?.[0];o.value="",!(!a||g.value)&&(g.value=!0,(async()=>{try{const v=await a.text(),J=a.name.replace(/\.(ya?ml)$/i,"")||"imported",ee=await Ie(J,v);n.success(e("toast.profileImported",{name:ee.profile.name}))}catch(v){n.error(e("toast.failed",{msg:A(v)}))}finally{g.value=!1}})())}async function G(){try{const t=await navigator.clipboard.readText();t.trim()&&(b.value=t.trim())}catch{n.error(e("toast.pasteFailed"))}}return(t,o)=>(u(),_("div",Ue,[s("div",{class:"dl-panel","aria-busy":d.value||y.value||g.value||i.value},[s("div",Fe,[q(s("input",{"onUpdate:modelValue":o[0]||(o[0]=a=>b.value=a),type:"url",class:"input dl-input",placeholder:l(e)("profiles.downloadPlaceholder"),"aria-label":l(e)("profiles.downloadPlaceholder"),disabled:d.value||i.value,spellcheck:"false",onKeyup:F(E,["enter"])},null,40,Ve),[[H,b.value]]),s("button",{type:"button",class:"icon-btn dl-paste",title:l(e)("profiles.paste"),"aria-label":l(e)("profiles.paste"),disabled:d.value||i.value,onClick:G},[m(h,{name:"clipboard",size:15})],8,Me)]),s("div",Be,[s("button",{type:"button",class:"btn btn-secondary dl-action-primary",disabled:d.value||i.value||!b.value.trim(),onClick:E},[m(h,{name:"download",size:14}),s("span",null,r(d.value?l(e)("profiles.downloading"):l(e)("profiles.download")),1)],8,Ke),s("button",{type:"button",class:"btn btn-secondary",disabled:y.value||i.value||!$.value,onClick:X},[m(h,{name:"refresh",size:14,class:L({spin:y.value})},null,8,["class"]),s("span",null,r(l(e)("profiles.updateAll")),1)],8,Se),s("button",{type:"button",class:"btn btn-secondary",disabled:g.value||i.value,onClick:o[1]||(o[1]=a=>z.value?.click())},[m(h,{name:"upload",size:14}),s("span",null,r(l(e)("profiles.import")),1)],8,Ne)]),s("input",{ref_key:"fileInput",ref:z,type:"file",accept:".yaml,.yml",class:"hidden-file","aria-label":l(e)("profiles.import"),onChange:j},null,40,Re)],8,Le),w.value.length===0?(u(),_("div",Oe,[m(ue,{icon:"layers",title:l(e)("profiles.emptyTitle"),hint:l(e)("profiles.emptyHint")},null,8,["title","hint"])])):(u(),_("div",{key:1,class:"profiles-grid","aria-busy":i.value},[(u(!0),_(fe,null,me(w.value,a=>(u(),_("article",{key:a.id,class:L(["profile-card",{active:a.id===l(C).activeProfileId,busy:i.value}])},[s("div",{class:"profile-card-main",role:"button",tabindex:"0","aria-current":a.id===l(C).activeProfileId?"true":void 0,"aria-disabled":i.value||a.id===l(C).activeProfileId,title:a.id===l(C).activeProfileId?void 0:l(e)("profiles.clickToUse"),onClick:v=>M(a),onKeydown:[F(P(v=>M(a),["prevent"]),["enter"]),F(P(v=>M(a),["prevent"]),["space"])]},[s("div",Qe,[s("span",{class:"profile-name",title:a.name},r(a.name),9,We)]),s("div",{class:"profile-source",title:`${U(a)} · ${D(a)}`},r(U(a))+" · "+r(D(a)),9,Xe),a.subInfo?(u(),_("div",Ye,[s("div",Ze,[s("span",je,r(l(N)(x(a)))+" / "+r(l(N)(a.subInfo.total)),1),a.subInfo.expire?(u(),_("span",Ge,r(l(pe)(a.subInfo.expire)),1)):T("",!0)]),s("div",{class:"usage-bar",role:"progressbar","aria-label":l(e)("profiles.usageLabel"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":c(a)},[s("div",{class:L(["usage-fill",{"usage-fill-hot":c(a)>=90}]),style:ve({width:`${c(a)}%`})},null,6)],8,Je)])):T("",!0),a.lastError?(u(),_("div",{key:1,class:"profile-error",title:a.lastError,role:"status"},[m(h,{name:"alert",size:13}),s("span",aa,r(a.lastError),1)],8,ea)):T("",!0)],40,He),s("div",ta,[s("button",{type:"button",class:"icon-btn",title:l(e)("profiles.rename"),"aria-label":`${l(e)("profiles.rename")}: ${a.name}`,disabled:i.value,onClick:P(v=>k.value=a,["stop"])},[m(h,{name:"pencil",size:14})],8,la),s("button",{type:"button",class:"icon-btn",title:l(e)("profiles.edit"),"aria-label":`${l(e)("profiles.edit")}: ${a.name}`,disabled:i.value,onClick:P(v=>Y(a),["stop"])},[m(h,{name:"code",size:14})],8,sa),a.url?(u(),_("button",{key:0,type:"button",class:"icon-btn",title:l(e)("profiles.update"),"aria-label":`${l(e)("profiles.update")}: ${a.name}`,disabled:i.value,onClick:P(v=>W(a),["stop"])},[m(h,{name:"refresh",size:14,class:L({spin:I.value===a.id})},null,8,["class"])],8,oa)):T("",!0),s("button",{type:"button",class:"icon-btn danger-hover",title:l(e)("profiles.delete"),"aria-label":`${l(e)("profiles.delete")}: ${a.name}`,disabled:i.value,onClick:P(v=>Z(a),["stop"])},[m(h,{name:"trash",size:14})],8,ia)])],2))),128))],8,qe)),k.value?(u(),K(De,{key:2,profile:k.value,onClose:o[2]||(o[2]=a=>k.value=null)},null,8,["profile"])):T("",!0),p.value?(u(),K(l(V),{key:3,"profile-id":p.value.id,"profile-name":p.value.name,"is-remote":p.value.url!=="",onClose:o[3]||(o[3]=a=>p.value=null)},null,8,["profile-id","profile-name","is-remote"])):T("",!0)]))}}),da=Q(na,[["__scopeId","data-v-77f96f8d"]]);export{da as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as m,C as p,ad as c,z as d,o as y,m as S,u as f,t as a,p as n,ah as _,y as o}from"./index-_mb4OfYp.js";import{C as h}from"./CodeEditorModal-D1zn-jRS.js";import"./theme-BwDBMsKO.js";const B=m({__name:"SettingsFileDialog",emits:["close"],setup(C,{emit:v}){const r=v,l=n(""),i=n(!0),s=n(!1),u=n(null);p(async()=>{try{const e=await c.getSettingsFile();l.value=e.content}catch(e){u.value=d(e)}finally{i.value=!1}});async function g(e){if(!s.value){s.value=!0;try{const t=await c.saveSettingsFile(e);await _(),t.restartRequired?o.success(a("toast.settingsSavedRestart")):o.success(a("toast.settingSaved")),r("close")}catch(t){o.error(a("toast.failed",{msg:d(t)}))}finally{s.value=!1}}}return(e,t)=>(y(),S(h,{title:f(a)("settings.fileTitle"),hint:f(a)("settings.fileHint"),content:l.value,language:"json",layout:"constrained",loading:i.value,"load-error":u.value,saving:s.value,onSave:g,onClose:t[0]||(t[0]=w=>r("close"))},null,8,["title","hint","content","loading","load-error","saving"]))}});export{B as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.ui-card[data-v-042826e5]{min-width:0}.ui-card-head[data-v-042826e5]{display:flex;min-height:28px;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:5px}.ui-card-heading[data-v-042826e5]{min-width:0}.ui-card-title[data-v-042826e5]{color:var(--text-primary);font-size:18px;font-weight:400;line-height:1.4}.ui-card-desc[data-v-042826e5]{margin-top:1px;color:var(--text-muted);font-size:14px;line-height:1.35}.ui-card-actions[data-v-042826e5]{display:flex;align-items:center;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;gap:7px}.ui-card-body[data-v-042826e5]{padding:6px 10px;background:var(--bg-panel);border-radius:3px}@media(max-width:520px){.ui-card-head[data-v-042826e5]{flex-wrap:wrap}.ui-card-body[data-v-042826e5]{padding:6px 8px}}.switch[data-v-306af9c5]{position:relative;width:34px;height:20px;flex-shrink:0;padding:0;border:0;border-radius:var(--radius-full);background:var(--switch-off);cursor:pointer;transition:background var(--motion-normal) var(--ease-standard),opacity var(--motion-fast) var(--ease-standard)}.switch[data-v-306af9c5]:hover:not(:disabled){background:color-mix(in srgb,var(--switch-off) 84%,var(--text-primary))}.switch.on[data-v-306af9c5]{background:var(--switch-on)}.switch.on[data-v-306af9c5]:hover:not(:disabled){background:color-mix(in srgb,var(--switch-on) 84%,#000000)}.switch[data-v-306af9c5]:disabled{cursor:not-allowed;opacity:.48}.knob[data-v-306af9c5]{position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:var(--radius-full);background:var(--switch-knob);box-shadow:var(--shadow-switch);transition:background var(--motion-normal) var(--ease-standard),transform var(--motion-normal) var(--ease-spring)}.switch.on .knob[data-v-306af9c5]{transform:translate(14px)}.settings-grid[data-v-80d90b9c]{display:grid;width:min(1046px,100%);grid-template-columns:1fr;gap:12px;margin:0 auto}.settings-card[data-v-80d90b9c]{min-width:0}.preference-control[data-v-80d90b9c]{display:grid;width:min(360px,48%);grid-template-columns:repeat(3,minmax(0,1fr));flex-shrink:0;gap:0}.language-control[data-v-80d90b9c]{grid-template-columns:repeat(2,minmax(0,1fr))}.preference-control .segmented-item[data-v-80d90b9c]{min-height:27px;border:0;border-radius:0;font-size:14px}.preference-control .segmented-item[data-v-80d90b9c]:first-child{border-radius:5px 0 0 5px}.preference-control .segmented-item[data-v-80d90b9c]:last-child{border-radius:0 5px 5px 0}.setting-row[data-v-80d90b9c]{display:flex;min-height:43px;align-items:center;justify-content:space-between;gap:24px;padding:6px 5px;border-bottom:0;transition:background var(--motion-fast) var(--ease-standard)}.setting-row[data-v-80d90b9c]:first-child{margin-top:-2px}.setting-row[data-v-80d90b9c]:last-child{border-bottom:0}.setting-row[data-v-80d90b9c]:hover{background:var(--general-row-hover);border-radius:3px}.danger-row .setting-name[data-v-80d90b9c]{color:var(--danger)}.setting-info[data-v-80d90b9c]{display:flex;min-width:0;flex-direction:column;gap:2px}.setting-name[data-v-80d90b9c]{color:var(--text-primary);font-size:16px;font-weight:400}.setting-desc[data-v-80d90b9c]{max-width:630px;color:var(--text-muted);font-size:14px;line-height:1.35}.setting-action[data-v-80d90b9c]{display:flex;align-items:center;flex-shrink:0;gap:8px}.port-input[data-v-80d90b9c]{width:96px;font-family:var(--font-mono);appearance:textfield;-moz-appearance:textfield}.port-input[data-v-80d90b9c]::-webkit-outer-spin-button,.port-input[data-v-80d90b9c]::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.interrupt-save[data-v-80d90b9c]{color:var(--warning);background:transparent;border-color:var(--warning-border)}.danger-action[data-v-80d90b9c]{color:var(--danger);background:transparent;border-color:var(--danger-border)}.interrupt-save[data-v-80d90b9c]:hover:not(:disabled){background:var(--warning-soft)}.danger-action[data-v-80d90b9c]:hover:not(:disabled){background:var(--danger-soft)}.info-grid[data-v-80d90b9c]{display:grid;grid-template-columns:1fr}.info-item[data-v-80d90b9c]{display:flex;min-width:0;min-height:39px;align-items:center;justify-content:space-between;gap:12px;padding:6px 5px;border-bottom:0}.info-item[data-v-80d90b9c]:last-child{border-bottom:0}.info-item dt[data-v-80d90b9c]{flex-shrink:0;color:var(--text-secondary);font-size:16px}.info-item dd[data-v-80d90b9c]{min-width:0;overflow:hidden;color:var(--text-primary);font-size:16px;font-weight:400;text-overflow:ellipsis;white-space:nowrap}@media(max-width:760px){.preference-control .segmented-item[data-v-80d90b9c],.setting-action .btn[data-v-80d90b9c]{min-height:40px}}@media(max-width:480px){.settings-grid[data-v-80d90b9c]{gap:12px}.preference-control[data-v-80d90b9c]{width:100%}.preference-control .segmented-item[data-v-80d90b9c]{min-height:40px;font-size:14px}.setting-row[data-v-80d90b9c]{min-height:0;align-items:stretch;flex-direction:column;gap:11px;padding:13px 8px}.setting-action[data-v-80d90b9c]{align-self:stretch;justify-content:flex-end}.port-action[data-v-80d90b9c]{display:grid;grid-template-columns:minmax(0,1fr) auto auto}.port-input[data-v-80d90b9c]{width:100%;min-height:44px;text-align:left}.setting-action .btn[data-v-80d90b9c]{min-height:44px}.info-item[data-v-80d90b9c]{min-height:0;align-items:flex-start;flex-direction:column;gap:3px;padding:10px 8px}.info-item dd[data-v-80d90b9c]{width:100%}}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./SettingsFileDialog-CjBSyH4K.js","./index-_mb4OfYp.js","./index-CxQTf_P9.css","./CodeEditorModal-D1zn-jRS.js","./theme-BwDBMsKO.js","./CodeEditorModal-6m0TJWyF.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{d as D,o as g,c as h,e as s,g as a,i as y,a7 as E,_ as S,n as p,u as t,t as e,p as k,s as l,w as q,a8 as H,a as u,b as C,I as P,j as Y,P as Z,m as G,l as $,f as J,v as K,a9 as Q,Y as W,Z as X,aa as tt,q as N,ab as st,ac as et,y as v,ad as A,ae as M,z as x,af as at}from"./index-_mb4OfYp.js";import{t as b,s as it}from"./theme-BwDBMsKO.js";const nt={class:"ui-card"},ot={key:0,class:"ui-card-head"},lt={class:"ui-card-heading"},dt={key:0,class:"ui-card-title"},ct={key:1,class:"ui-card-desc"},rt={key:0,class:"ui-card-actions"},ut={class:"ui-card-body"},gt=D({__name:"UiCard",props:{title:{},desc:{}},setup(o){return(m,r)=>(g(),h("section",nt,[o.title||o.desc||m.$slots.actions?(g(),h("header",ot,[s("div",lt,[o.title?(g(),h("h2",dt,a(o.title),1)):y("",!0),o.desc?(g(),h("p",ct,a(o.desc),1)):y("",!0)]),m.$slots.actions?(g(),h("div",rt,[E(m.$slots,"actions",{},void 0)])):y("",!0)])):y("",!0),s("div",ut,[E(m.$slots,"default",{},void 0)])]))}}),T=S(gt,[["__scopeId","data-v-042826e5"]]),mt=["aria-checked","aria-label","disabled"],_t=D({__name:"UiSwitch",props:{modelValue:{type:Boolean},disabled:{type:Boolean},label:{}},emits:["update:modelValue"],setup(o){return(m,r)=>(g(),h("button",{type:"button",role:"switch","aria-checked":o.modelValue,"aria-label":o.label??t(e)("common.toggle"),class:p(["switch",{on:o.modelValue}]),disabled:o.disabled,onClick:r[0]||(r[0]=f=>m.$emit("update:modelValue",!o.modelValue))},[...r[1]||(r[1]=[s("span",{class:"knob","aria-hidden":"true"},null,-1)])],10,mt))}}),vt=S(_t,[["__scopeId","data-v-306af9c5"]]),pt={class:"settings-grid"},ht={class:"setting-row"},bt={class:"setting-info"},ft={class:"setting-name"},yt={class:"setting-desc"},wt=["aria-label"],kt=["aria-pressed"],Ct=["aria-pressed"],$t=["aria-pressed"],Tt={class:"setting-row"},Vt={class:"setting-info"},Pt={class:"setting-name"},xt={class:"setting-desc"},Dt=["aria-label"],St=["aria-pressed"],Lt=["aria-pressed"],zt={class:"setting-row interrupt-row"},Bt={class:"setting-info"},It={class:"setting-name",for:"mixed-port"},Ut={class:"setting-desc"},Et={class:"setting-action port-action"},Nt=["aria-label","disabled"],At=["disabled"],Mt=["disabled"],Rt={class:"setting-row"},Ft={class:"setting-info"},Ot={class:"setting-name"},jt={class:"setting-desc"},qt={class:"setting-action"},Ht={class:"setting-row danger-row"},Yt={class:"setting-info"},Zt={class:"setting-name"},Gt={class:"setting-desc"},Jt={class:"setting-action"},Kt=["disabled"],Qt={class:"setting-row"},Wt={class:"setting-info"},Xt={class:"setting-name"},ts={class:"setting-desc"},ss={class:"setting-action"},es=["disabled"],as={class:"info-grid"},is={class:"info-item"},ns={class:"mono"},os={class:"info-item"},ls={class:"mono"},ds={class:"info-item"},cs={class:"mono"},rs=D({__name:"SettingsView",setup(o){const m=W(()=>X(()=>import("./SettingsFileDialog-CjBSyH4K.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),r=k(!1),f=k(l.status?.settings.mixedPort??7890),d=k(f.value),_=k(!1),{restarting:L,restartCore:z}=tt(),w=k(!1);q(()=>l.status?.settings.mixedPort,n=>{if(n===void 0)return;const i=f.value;f.value=n,d.value=H(d.value,i,n,_.value)});const B=N(()=>st(d.value,f.value)),I=N(()=>Number.isInteger(d.value)&&d.value>=1&&d.value<=65535&&B.value);function V(n){n!==b.value&&it(n)}function U(n){n!==$.value&&(et(n),v.success(e("toast.langSwitched")))}function R(){d.value=f.value}async function F(){if(!(!I.value||_.value)){_.value=!0;try{const n=await A.patchSettings({mixedPort:d.value});l.status&&(l.status={...l.status,settings:n.settings}),await M(),v.success(e("toast.portSaved"))}catch(n){v.error(e("toast.failed",{msg:x(n)}))}finally{_.value=!1}}}async function O(n){try{await at(n)?v.success(e("toast.settingSaved")):v.info(e("toast.settingSavedUnverified"))}catch(i){v.error(e("toast.failed",{msg:x(i)}))}}async function j(){if(!w.value){w.value=!0;try{const n=await A.reloadCoreConfig();await M(),v.success(e("toast.configReloaded",{n:n.proxyCount}))}catch(n){v.error(e("toast.failed",{msg:x(n)}))}finally{w.value=!1}}}return(n,i)=>(g(),h("div",null,[u(Z,{title:t(e)("page.settings.title"),desc:t(e)("page.settings.desc")},{default:C(()=>[s("button",{type:"button",class:"btn btn-secondary btn-sm",onClick:i[0]||(i[0]=c=>r.value=!0)},[u(P,{name:"code",size:14}),Y(" "+a(t(e)("settings.editFile")),1)])]),_:1},8,["title","desc"]),r.value?(g(),G(t(m),{key:0,onClose:i[1]||(i[1]=c=>r.value=!1)})):y("",!0),s("div",pt,[u(T,{title:t(e)("settings.appearanceTitle"),class:"settings-card"},{default:C(()=>[s("div",ht,[s("div",bt,[s("span",ft,a(t(e)("settings.themeTitle")),1),s("span",yt,a(t(e)("settings.appearanceDesc")),1)]),s("div",{class:"segmented preference-control",role:"group","aria-label":t(e)("settings.appearanceTitle")},[s("button",{type:"button",class:p(["segmented-item",{active:t(b)==="system"}]),"aria-pressed":t(b)==="system",onClick:i[2]||(i[2]=c=>V("system"))},a(t(e)("theme.system")),11,kt),s("button",{type:"button",class:p(["segmented-item",{active:t(b)==="light"}]),"aria-pressed":t(b)==="light",onClick:i[3]||(i[3]=c=>V("light"))},a(t(e)("theme.light")),11,Ct),s("button",{type:"button",class:p(["segmented-item",{active:t(b)==="dark"}]),"aria-pressed":t(b)==="dark",onClick:i[4]||(i[4]=c=>V("dark"))},a(t(e)("theme.dark")),11,$t)],8,wt)]),s("div",Tt,[s("div",Vt,[s("span",Pt,a(t(e)("settings.langTitle")),1),s("span",xt,a(t(e)("settings.langDesc")),1)]),s("div",{class:"segmented preference-control language-control",role:"group","aria-label":t(e)("settings.langTitle")},[s("button",{type:"button",class:p(["segmented-item",{active:t($)==="zh"}]),"aria-pressed":t($)==="zh",onClick:i[5]||(i[5]=c=>U("zh"))}," 中文 ",10,St),s("button",{type:"button",class:p(["segmented-item",{active:t($)==="en"}]),"aria-pressed":t($)==="en",onClick:i[6]||(i[6]=c=>U("en"))}," English ",10,Lt)],8,Dt)])]),_:1},8,["title"]),u(T,{title:t(e)("settings.networkTitle"),class:"settings-card"},{default:C(()=>[s("div",zt,[s("div",Bt,[s("label",It,a(t(e)("settings.mixedPortTitle")),1),s("span",Ut,a(t(e)("settings.mixedPortDesc")),1)]),s("div",Et,[J(s("input",{id:"mixed-port","onUpdate:modelValue":i[7]||(i[7]=c=>d.value=c),type:"number",min:"1",max:"65535",class:"input input-sm port-input","aria-label":t(e)("settings.mixedPortTitle"),disabled:_.value||!t(l).status},null,8,Nt),[[K,d.value,void 0,{number:!0}]]),B.value?(g(),h("button",{key:0,type:"button",class:"btn btn-secondary btn-sm",disabled:_.value||!t(l).status,onClick:R},a(t(e)("common.reset")),9,At)):y("",!0),s("button",{type:"button",class:"btn btn-secondary btn-sm interrupt-save",disabled:_.value||!I.value||!t(l).status,onClick:F},a(_.value?t(e)("common.loading"):t(e)("common.save")),9,Mt)])]),s("div",Rt,[s("div",Ft,[s("span",Ot,a(t(e)("settings.allowLanTitle")),1),s("span",jt,a(t(e)("settings.allowLanDesc")),1)]),s("div",qt,[u(vt,{"model-value":t(l).status?.settings.allowLan??!1,label:t(e)("settings.allowLanTitle"),disabled:t(l).operations.networkSetting||!t(l).status,"onUpdate:modelValue":O},null,8,["model-value","label","disabled"])])])]),_:1},8,["title"]),u(T,{title:t(e)("settings.coreTitle"),class:"settings-card"},{default:C(()=>[s("div",Ht,[s("div",Yt,[s("span",Zt,a(t(e)("settings.restartTitle")),1),s("span",Gt,a(t(e)("settings.restartDesc")),1)]),s("div",Jt,[s("button",{type:"button",class:"btn btn-sm danger-action",disabled:t(L),onClick:i[8]||(i[8]=(...c)=>t(z)&&t(z)(...c))},[u(P,{name:"power",size:13,class:p({spin:t(L)})},null,8,["class"]),s("span",null,a(t(e)("settings.restartBtn")),1)],8,Kt)])]),s("div",Qt,[s("div",Wt,[s("span",Xt,a(t(e)("settings.reloadTitle")),1),s("span",ts,a(t(e)("settings.reloadDesc")),1)]),s("div",ss,[s("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:w.value,onClick:j},[u(P,{name:"refresh",size:13,class:p({spin:w.value})},null,8,["class"]),s("span",null,a(t(e)("settings.reloadBtn")),1)],8,es)])])]),_:1},8,["title"]),u(T,{title:t(e)("settings.aboutTitle"),class:"settings-card runtime-card"},{default:C(()=>[s("dl",as,[s("div",is,[s("dt",null,a(t(e)("overview.daemonPort")),1),s("dd",ns,"127.0.0.1:"+a(t(l).status?.settings.daemonPort??19090),1)]),s("div",os,[s("dt",null,a(t(e)("overview.controller")),1),s("dd",ls,a(t(l).status?.settings.controller||"-"),1)]),s("div",ds,[s("dt",null,a(t(e)("settings.coreVersion")),1),s("dd",cs,a(t(Q)||"-"),1)])])]),_:1},8,["title"])])]))}}),ms=S(rs,[["__scopeId","data-v-80d90b9c"]]);export{ms as default};
|