zen-gitsync 2.13.30 → 2.13.32

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 (52) hide show
  1. package/package.json +3 -1
  2. package/src/cli/cleanup.js +179 -0
  3. package/src/cli/cleanup.test.js +269 -0
  4. package/src/cli/customCommand.js +94 -0
  5. package/src/cli/customCommand.test.js +143 -0
  6. package/src/cli/ui.js +59 -0
  7. package/src/cli/ui.test.js +115 -0
  8. package/src/config.js +62 -17
  9. package/src/gitCommit.js +73 -25
  10. package/src/ui/public/assets/{AppVersionBadge-CFkZrkhd.js → AppVersionBadge-Ci_-H7TK.js} +2 -2
  11. package/src/ui/public/assets/AppVersionBadge-Dj6H729N.css +1 -0
  12. package/src/ui/public/assets/BranchSelector-BIGlKQme.js +1 -0
  13. package/src/ui/public/assets/{CommandConsole-DKwcJRbO.js → CommandConsole-DUu75Lvw.js} +8 -8
  14. package/src/ui/public/assets/CommandConsole-Da3j09oc.css +1 -0
  15. package/src/ui/public/assets/{CommitForm-w_CCHowb.js → CommitForm-asrs-955.js} +2 -2
  16. package/src/ui/public/assets/{CustomCommandManager-C81Su49z.js → CustomCommandManager-BBnTU2pp.js} +1 -1
  17. package/src/ui/public/assets/EditorView-BYuHlMbn.js +0 -0
  18. package/src/ui/public/assets/{EditorView-Do_aRkqm.css → EditorView-BcZ8ToAk.css} +1 -1
  19. package/src/ui/public/assets/{FileDiffViewer-ASPmnTdG.css → FileDiffViewer-CLvy7mIG.css} +1 -1
  20. package/src/ui/public/assets/FileDiffViewer-vOvrYF89.js +13 -0
  21. package/src/ui/public/assets/{FlowExecutionViewer-Bhcnqca8.js → FlowExecutionViewer-DgQs18Ym.js} +1 -1
  22. package/src/ui/public/assets/{FlowOrchestrationWorkspace-Cb6C2RyD.js → FlowOrchestrationWorkspace-CEM_0XAJ.js} +2 -2
  23. package/src/ui/public/assets/{GitStatus-D90r1nV4.js → GitStatus-DedZ2a63.js} +2 -2
  24. package/src/ui/public/assets/{ImagePreview-kHYBPYW5.js → ImagePreview-XjBK0T26.js} +1 -1
  25. package/src/ui/public/assets/{LogList-D6nSWEwN.js → LogList-CUn9TvU1.js} +3 -3
  26. package/src/ui/public/assets/{ProjectStartupButton-BliaT11B.js → ProjectStartupButton-DWfKVcJo.js} +1 -1
  27. package/src/ui/public/assets/{RemoteRepoCard-CUs9RQZg.js → RemoteRepoCard-BVRJ8eAD.js} +1 -1
  28. package/src/ui/public/assets/{ResetToRemoteButton-BBsIG2FU.js → ResetToRemoteButton-CDhmy9Qj.js} +1 -1
  29. package/src/ui/public/assets/SourceMapView-CUq_XXYS.js +3 -0
  30. package/src/ui/public/assets/SourceMapView-DjYKJZLj.css +1 -0
  31. package/src/ui/public/assets/{TemplateManager-Clov9VqY.js → TemplateManager-CogQCagT.js} +1 -1
  32. package/src/ui/public/assets/{UserInputNode-yVqO69ll.js → UserInputNode-BcIaDC-e.js} +1 -1
  33. package/src/ui/public/assets/WorkbenchView-CGclOlIQ.js +12 -0
  34. package/src/ui/public/assets/WorkbenchView-ir769eTr.css +1 -0
  35. package/src/ui/public/assets/{_plugin-vue_export-helper-CpTW8798.js → _plugin-vue_export-helper-BWJlNHzL.js} +3 -3
  36. package/src/ui/public/assets/index-BkpNzYyv.js +7 -0
  37. package/src/ui/public/assets/index-CNhCnXkD.css +1 -0
  38. package/src/ui/public/index.html +3 -3
  39. package/src/utils/index.js +42 -10
  40. package/src/utils/parseCwdArg.test.js +89 -0
  41. package/src/utils/utils.test.js +200 -0
  42. package/src/ui/public/assets/AppVersionBadge-KZ64lrZQ.css +0 -1
  43. package/src/ui/public/assets/BranchSelector-BzaBCj1X.js +0 -1
  44. package/src/ui/public/assets/CommandConsole-60KxfUE3.css +0 -1
  45. package/src/ui/public/assets/EditorView-Do6ivdLH.js +0 -0
  46. package/src/ui/public/assets/FileDiffViewer-CXMo-Rez.js +0 -13
  47. package/src/ui/public/assets/SourceMapView-Cvp-7LtP.js +0 -3
  48. package/src/ui/public/assets/SourceMapView-DTsSdcgG.css +0 -1
  49. package/src/ui/public/assets/WorkbenchView-BDYbbkM1.js +0 -12
  50. package/src/ui/public/assets/WorkbenchView-zUE7sv6z.css +0 -1
  51. package/src/ui/public/assets/index-B666KMk3.js +0 -7
  52. package/src/ui/public/assets/index-BYAxMGne.css +0 -1
@@ -1,6 +1,6 @@
1
- import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,D as t,E as n,Fn as r,G as i,Gn as a,H as o,In as s,It as c,J as l,Jn as u,Jt as d,K as f,L as p,N as m,Nt as h,Ot as g,P as _,Pn as v,Pt as y,Q as b,R as x,Rn as S,Rt as C,S as w,Sn as T,St as E,Tt as D,Vt as O,W as k,X as A,Y as j,_n as M,a as N,at as ee,cn as te,ct as P,dn as ne,dr as F,en as re,gn as I,hn as L,ht as ie,i as R,ir as z,ln as B,lt as ae,mn as V,mr as H,mt as U,nr as oe,nt as se,o as ce,on as le,ot as ue,pn as W,pr as de,q as G,qn as K,st as fe,tt as pe,ur as q,v as me,wn as J,xn as Y,z as he,zt as ge}from"./element-plus-CRTdimvR.js";import{c as _e}from"./vendor-BxotT5qN.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-CpTW8798.js";import{a as Q,c as ve,l as ye,r as be,s as xe}from"./index-B666KMk3.js";import{t as Se}from"./TemplateManager-Clov9VqY.js";import{a as Ce,i as we,n as Te,o as Ee,r as De,s as Oe,t as ke}from"./ResetToRemoteButton-BBsIG2FU.js";var Ae={key:0},je={key:1},Me=Z(J({__name:`StageButton`,props:{from:{default:`form`}},emits:[`click`],setup(t,{emit:n}){let r=n,a=Q(),o=xe();function c(e){let t=e.replace(/\\/g,`/`);return o.lockedFiles.some(e=>t===e.replace(/\\/g,`/`))}function l(){return o.lockedFiles.length===0?!1:a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)?c(e.path):!1)}let u=W(()=>a.fileList.filter(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!c(e.path)).length),d=W(()=>a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!c(e.path))),f=W(()=>a.isSelectionMode&&a.hasSelectableFiles),p=W(()=>a.selectedUnstagedPaths.length),m=W(()=>a.isSelectionMode?p.value===0:!d.value),g=W(()=>f.value?`${X(`@29974:暂存所选 `)}${p.value}${X(`@29974: 个文件`)}`:d.value?l()?`${X(`@29974:暂存`)}${u.value}${X(`@29974:个未暂存文件(逐个添加)`)}`:`${X(`@29974:暂存所有更改(git add .)`)}`:X(`@29974:没有需要暂存的更改`));async function _(){r(`click`);try{if(f.value){await a.stageFiles(a.selectedUnstagedPaths);return}if(a.isSelectionMode)return;l()?await a.addToStage():await a.addAllToStage()}catch(e){console.error(`添加文件失败:`,e)}}return(n,r)=>{let o=e,c=i;return s(),L(c,{content:g.value,placement:`top`},{default:K(()=>[T(o,{type:`primary`,icon:q(h),onClick:_,loading:q(a).isAddingFiles,disabled:m.value,class:F([`stage-button`,`from-${t.from}`,{"is-selective":f.value}])},{default:K(()=>[Y(H(f.value?q(X)(`@29974:暂存所选`):q(X)(`@29974:暂存`))+` `,1),f.value?(s(),M(`span`,Ae,`(`+H(p.value)+`)`,1)):u.value>0?(s(),M(`span`,je,`(`+H(u.value)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`class`])]),_:1},8,[`content`])}}}),[[`__scopeId`,`data-v-22060f7f`]]),Ne={key:0},Pe=Z(J({__name:`CommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`click`,`beforeCommit`,`afterCommit`],setup(t,{emit:n}){let r=t,a=n,o=Q(),c=xe(),l=W(()=>o.fileList.filter(e=>e.type===`added`&&!Ee(e.path,c.lockedFiles)).length),u=W(()=>l.value>0),d=W(()=>o.hasConflictedFiles||o.isCommiting?!0:o.isMergeInProgress?!r.hasUserCommitMessage:!u.value||!r.hasUserCommitMessage),f=W(()=>o.isCommiting?X(`@76A11:正在提交中…`):o.hasConflictedFiles?X(`@76A11:存在冲突文件,请先解决冲突`):o.isMergeInProgress?r.hasUserCommitMessage?X(`@76A11:提交并完成合并`):X(`@76A11:请输入提交信息`):u.value?r.hasUserCommitMessage?`${X(`@76A11:提交`)}${l.value}${X(`@76A11:个已暂存文件`)}`:X(`@76A11:请输入提交信息`):X(`@76A11:没有已暂存的更改`)),p=W(()=>o.isCommiting?X(`@76A11:提交中…`):X(`@76A11:提交`));async function m(){if(r.finalCommitMessage.trim()){a(`beforeCommit`),a(`click`);try{a(`afterCommit`,await o.commitChanges(r.finalCommitMessage,r.skipHooks))}catch(e){console.error(`提交失败:`,e),a(`afterCommit`,!1)}}}return(n,r)=>{let a=e,c=i;return s(),L(c,{content:f.value,placement:`top`,disabled:q(o).isCommiting},{default:K(()=>[T(a,{type:`primary`,onClick:m,icon:q(o).isCommiting?q(D):q(pe),loading:q(o).isCommiting,disabled:d.value,"aria-busy":q(o).isCommiting?`true`:void 0,"aria-label":q(o).isCommiting?q(X)(`@76A11:正在提交中…`):void 0,class:F([`commit-button`,`from-${t.from}`,{"is-committing":q(o).isCommiting}])},{default:K(()=>[Y(H(p.value)+` `,1),l.value>0&&!q(o).isCommiting?(s(),M(`span`,Ne,`(`+H(l.value)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`aria-busy`,`aria-label`,`class`])]),_:1},8,[`content`,`disabled`])}}}),[[`__scopeId`,`data-v-6bd86c7e`]]),Fe={class:`push-progress-container`},Ie={key:0,class:`pulling-section`},Le={class:`pulling-text-wrap`},Re={class:`pulling-title`},ze={class:`pulling-sub`},Be={class:`stage-header`},Ve={class:`stage-icon`},He={class:`stage-info`},Ue={class:`stage-label`},We={key:0,class:`stage-percent`},Ge={key:0,class:`stage-progress`},Ke={key:2,class:`error-section`},qe={class:`error-header`},Je={class:`error-title`},Ye={class:`error-content`},Xe={key:0,class:`error-suggestion`},Ze={key:3,class:`messages-section`},Qe={class:`messages-title`},$e=Z(J({__name:`PushProgressModal`,props:{modelValue:{type:Boolean}},emits:[`update:modelValue`,`complete`,`pull-requested`],setup(n,{expose:r,emit:i}){let{t:a}=_e(),o=n,c=i,l=xe(),u=Q(),d=z(`progress`),f=z([]),p=z(``),m=z(!1),h=W(()=>p.value.includes(`non-fast-forward`)||p.value.includes(`rejected`)&&p.value.includes(`fetch first`)),g=z(!1);async function _(){g.value=!0;try{(await u.gitPull()).success&&(x.value=!1,c(`pull-requested`))}finally{g.value=!1}}let v=oe([{name:`counting`,label:a(`@PUSH:计数对象`),status:`wait`,percent:0},{name:`compressing`,label:a(`@PUSH:压缩对象`),status:`wait`,percent:0},{name:`writing`,label:a(`@PUSH:写入对象`),status:`wait`,percent:0},{name:`resolving`,label:a(`@PUSH:解析增量`),status:`wait`,percent:0}]),y=z(0),b=z(null),x=W({get:()=>o.modelValue,set:e=>c(`update:modelValue`,e)}),C=W(()=>{if(m.value)return a(`@PUSH:正在拉取远程更新`);switch(d.value){case`progress`:return a(`@PUSH:正在推送`);case`success`:return a(`@PUSH:推送成功`);case`error`:return a(`@PUSH:推送失败`);default:return``}});function w(e){switch(e.type){case`progress`:e.message&&(f.value.push(e.message),setTimeout(()=>{b.value&&(b.value.scrollTop=b.value.scrollHeight)},0));break;case`stage-progress`:if(e.stage&&typeof e.percent==`number`){let t=v.findIndex(t=>t.name===e.stage);t!==-1&&(v[t].percent=e.percent,v[t].status=e.percent===100?`finish`:`process`,y.value=t,e.percent===100&&t<v.length-1&&(v[t+1].status=`wait`))}break;case`complete`:e.success?(d.value=`success`,v.forEach(e=>{(e.status===`process`||e.status===`wait`)&&(e.status=`finish`,e.percent=100)}),y.value=-1,l.autoClosePushModal?setTimeout(()=>{x.value=!1,c(`complete`,!0)},2e3):c(`complete`,!0)):(d.value=`error`,p.value=e.error||`未知错误`,y.value<v.length&&(v[y.value].status=`error`),y.value=-1,c(`complete`,!1));break}}function E(){d.value=`progress`,f.value=[],p.value=``,y.value=0,m.value=!1,v.forEach(e=>{e.status=`wait`,e.percent=0})}function O(e){m.value=e}return r({handleProgress:w,reset:E,setPulling:O}),(n,r)=>{let i=e;return s(),L(q(t),{modelValue:x.value,"onUpdate:modelValue":r[0]||=e=>x.value=e,title:C.value,width:`650px`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":d.value!==`progress`,"append-to-body":!0,"lock-scroll":!1,"destroy-on-close":``,class:F([`push-progress-dialog`,`status-${d.value}`])},{default:K(()=>[V(`div`,Fe,[m.value?(s(),M(`div`,Ie,[r[1]||=V(`div`,{class:`pulling-icon-wrap`},[V(`svg`,{class:`pulling-spinner`,viewBox:`0 0 50 50`},[V(`circle`,{class:`pulling-spinner-track`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`}),V(`circle`,{class:`pulling-spinner-arc`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`})])],-1),V(`div`,Le,[V(`div`,Re,H(q(a)(`@PUSH:正在拉取远程更新`)),1),V(`div`,ze,H(q(a)(`@PUSH:拉取完成后自动继续推送`)),1)])])):(s(),M(`div`,{key:1,class:F([`stages-section`,{"is-loading":d.value===`progress`,"is-success":d.value===`success`}])},[(s(!0),M(B,null,S(v,(e,t)=>(s(),M(`div`,{key:e.name,class:F([`stage-item`,{active:y.value===t,finished:e.status===`finish`,error:e.status===`error`}])},[V(`div`,Be,[V(`div`,Ve,[e.status===`finish`?(s(),L(q(j),{key:0,class:`icon-finish`},{default:K(()=>[T(q(se))]),_:1})):e.status===`error`?(s(),L(q(j),{key:1,class:`icon-error`},{default:K(()=>[T(q(ue))]),_:1})):e.status===`process`?(s(),L(q(j),{key:2,class:`icon-process rotating`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(q(j),{key:3,class:`icon-wait`},{default:K(()=>[T(q(D))]),_:1}))]),V(`div`,He,[V(`div`,Ue,H(e.label),1),e.status===`process`||e.status===`finish`?(s(),M(`div`,We,H(e.percent)+`% `,1)):I(``,!0)])]),e.status===`process`||e.status===`finish`?(s(),M(`div`,Ge,[T(q(me),{percentage:e.percent,"stroke-width":6,"show-text":!1,color:e.status===`finish`?`var(--color-success)`:`var(--color-primary)`},null,8,[`percentage`,`color`])])):I(``,!0)],2))),128))],2)),d.value===`error`&&p.value?(s(),M(`div`,Ke,[V(`div`,qe,[V(`div`,Je,H(q(a)(`@PUSH:错误详情`))+`:`,1),h.value?(s(),L(i,{key:0,type:`primary`,size:`small`,loading:g.value,onClick:_,class:`pull-button`},{default:K(()=>[T(q(j),null,{default:K(()=>[T(q(U))]),_:1}),Y(` `+H(q(a)(`@PUSH:先拉取更新`)),1)]),_:1},8,[`loading`])):I(``,!0)]),V(`div`,Ye,H(p.value),1),h.value?(s(),M(`div`,Xe,H(q(a)(`@PUSH:检测到远程有新提交,请先拉取更新后再推送。`)),1)):I(``,!0)])):I(``,!0),f.value.length>0?(s(),M(`div`,Ze,[V(`div`,Qe,H(q(a)(`@PUSH:详细信息`))+`:`,1),V(`div`,{ref_key:`messagesContainerRef`,ref:b,class:`progress-messages`},[(s(!0),M(B,null,S(f.value,(e,t)=>(s(),M(`div`,{key:t,class:`message-item`},H(e),1))),128))],512)])):I(``,!0)])]),_:1},8,[`modelValue`,`title`,`show-close`,`class`])}}}),[[`__scopeId`,`data-v-e8766d98`]]),et={key:0},tt=Z(J({__name:`PushButton`,props:{from:{default:`form`}},emits:[`click`,`beforePush`,`afterPush`],setup(t,{emit:n}){let r=n,a=Q(),o=z(!1),c=z(null),l=W(()=>a.branchAhead>0),u=W(()=>a.fileList.some(e=>e.type===`added`)),f=W(()=>a.hasConflictedFiles?!1:a.hasUpstream&&l.value&&!u.value),p=W(()=>!f.value),m=W(()=>a.hasConflictedFiles?X(`@F4137:存在冲突文件,请先解决冲突`):a.hasUpstream?l.value?u.value?X(`@F4137:有未提交的暂存更改,请先提交`):`${X(`@F4137:推送`)}${a.branchAhead}${X(`@F4137:个本地提交`)}`:X(`@F4137:没有需要推送的提交`):X(`@F4137:当前分支没有上游分支`)),h=W(()=>f.value?{backgroundColor:`var(--color-success)`,borderColor:`var(--color-success)`}:{});async function g(){r(`beforePush`),r(`click`);try{o.value=!0,c.value&&c.value.reset();let e=await a.pushToRemoteWithProgress(e=>{c.value&&c.value.handleProgress(e)});e&&await new Promise(e=>setTimeout(e,200)),r(`afterPush`,e)}catch(e){console.error(`推送失败:`,e),r(`afterPush`,!1)}}function _(e){}return(n,r)=>{let u=e,f=i;return s(),M(`div`,null,[T(f,{content:m.value,placement:`top`},{default:K(()=>[T(u,{type:`primary`,icon:q(d),onClick:g,loading:q(a).isPushing,disabled:p.value,style:de(h.value),class:F([`push-button`,`from-${t.from}`])},{default:K(()=>[Y(H(q(X)(`@F4137:推送`))+` `,1),l.value?(s(),M(`span`,et,`(`+H(q(a).branchAhead)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`,`class`])]),_:1},8,[`content`]),T($e,{ref_key:`progressModalRef`,ref:c,modelValue:o.value,"onUpdate:modelValue":r[0]||=e=>o.value=e,onComplete:_},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-a0e22137`]]),nt={class:`one-push-content`},rt={class:`one-push-text`},it={class:`one-push-title`},at={key:0,class:`one-push-desc`},ot=Z(J({__name:`QuickPushButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforePush`,`pushStart`,`afterPush`,`clearFields`],setup(t,{expose:n,emit:r}){let a=Q(),o=xe(),c=z(!1),l=z(null),u=t,d=r,f=W(()=>a.fileList.some(e=>!Ee(e.path,o.lockedFiles))),p=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),m=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!p.value||!u.hasUserCommitMessage||!a.hasUpstream:!f.value&&a.branchAhead===0||!u.hasUserCommitMessage||!a.hasUpstream),h=W(()=>a.isAddingFiles||a.isCommiting||a.isPushing),g=W(()=>{if(a.hasConflictedFiles)return X(`@2E184:存在冲突文件,请先解决冲突`);if(a.isSelectionMode)return a.selectedFiles.size===0?X(`@2E184:请先勾选要推送的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):u.hasUserCommitMessage?a.hasUpstream?X(`@2E184:一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`);let e=a.branchAhead>0;return!f.value&&!e?X(`@2E184:没有需要提交或推送的更改`):u.hasUserCommitMessage?a.hasUpstream?f.value?X(`@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库`):X(`@2E184:本地已提交,一键推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`)}),_=W(()=>a.isSelectionMode&&p.value?X(`@2E184:一键推送所选`):X(`@2E184:一键推送所有`)),v=W(()=>u.from===`form`?a.isSelectionMode&&p.value?X(`@2E184:暂存所选 + 提交 + 推送`):X(`@2E184:暂存 + 提交 + 推送`):``);async function b(){d(`beforePush`);try{let e=a.isSelectionMode&&p.value;if((e||f.value)&&!(e?await a.stageSelectedAndCommit(u.finalCommitMessage,u.skipHooks):await a.addAndCommit(u.finalCommitMessage,u.skipHooks))){d(`afterPush`,!1);return}if(d(`pushStart`),c.value=!0,o.pullBeforePush){l.value?.setPulling(!0);let e=await a.gitPull();if(l.value?.setPulling(!1),!e.success){N.error(X(`@2E184:拉取远程更新失败,已停止推送`)),c.value=!1,a.fetchStatus(),a.getBranchStatus(!0),d(`afterPush`,!1);return}}l.value&&l.value.reset();let t=await a.pushToRemoteWithProgress(e=>{l.value&&l.value.handleProgress(e)});if(t){try{window.dispatchEvent(new CustomEvent(`zen-gitsync:after-quick-push-success`))}catch{}d(`clearFields`)}d(`afterPush`,t)}catch(e){console.error(`一键推送失败:`,e),d(`afterPush`,!1)}}n({triggerQuickPush:b});function x(e){}return(n,r)=>{let a=j,o=e;return s(),M(`div`,null,[T(q(i),{content:g.value,placement:`top`,"show-after":200},{default:K(()=>[T(o,{type:`primary`,onClick:b,loading:h.value,disabled:m.value,class:F([t.from,`one-push-button`])},{default:K(()=>[V(`div`,nt,[T(a,{class:`one-push-icon`},{default:K(()=>[T(q(y))]),_:1}),V(`div`,rt,[V(`span`,it,H(_.value),1),t.from===`form`?(s(),M(`span`,at,H(v.value),1)):I(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`]),T($e,{ref_key:`progressModalRef`,ref:l,modelValue:c.value,"onUpdate:modelValue":r[0]||=e=>c.value=e,onComplete:x,onPullRequested:b},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-9f003c37`]]),st={class:`create-tag-button`},ct={class:`tag-dialog-content`},lt={class:`tag-info-card`},ut={class:`info-icon`},dt={class:`info-content`},ft={class:`form-tip`},pt={class:`form-tip`},mt={class:`form-tip`},ht=Z(J({__name:`CreateTagButton`,props:{variant:{default:`icon`}},setup(t){let n=t,r=Q(),a=z(!1),o=z(``),c=z(``),l=z(`lightweight`),u=z(``),d=z(!1);function p(){o.value=``,c.value=``,l.value=`lightweight`,u.value=``,a.value=!0}async function h(){if(!o.value.trim()){N.warning(X(`@TAG01:请输入标签名称`));return}if(!/^[a-zA-Z0-9._\/-]+$/.test(o.value)){N.warning(X(`@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符`));return}try{d.value=!0;let e=await(await fetch(`/api/create-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:o.value.trim(),message:c.value.trim(),type:l.value,commit:u.value.trim()})})).json();e.success?(N.success(X(`@TAG01:标签创建成功`)),a.value=!1):N.error(e.error||X(`@TAG01:创建标签失败`))}catch(e){console.error(`创建标签失败:`,e),N.error(X(`@TAG01:创建标签失败`))}finally{d.value=!1}}let g=W(()=>l.value===`lightweight`?X(`@TAG01:轻量标签是指向提交对象的引用,不包含额外信息`):X(`@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名`));return(t,v)=>{let y=j,b=e,x=i,S=k,C=G,w=m,D=_,A=f;return s(),M(`div`,st,[T(x,{content:q(X)(`@TAG01:为当前提交创建标签`),placement:`top`,"show-after":200,disabled:n.variant===`text`},{default:K(()=>[T(b,{type:`success`,onClick:p,disabled:!q(r).isGitRepo,circle:n.variant===`icon`,size:n.variant===`icon`?`small`:`default`,class:F(n.variant===`text`?`action-button`:``)},{default:K(()=>[n.variant===`icon`?(s(),L(y,{key:0},{default:K(()=>[T(q(O))]),_:1})):(s(),M(B,{key:1},[Y(H(q(X)(`@TAG01:创建标签`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),T(ye,{modelValue:a.value,"onUpdate:modelValue":v[4]||=e=>a.value=e,title:q(X)(`@TAG01:创建 Git 标签`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":q(X)(`@TAG01:创建`),"cancel-text":q(X)(`@TAG01:取消`),"confirm-loading":d.value,"custom-class":`tag-dialog`,onConfirm:h},{default:K(()=>[V(`div`,ct,[V(`div`,lt,[V(`div`,ut,[T(y,null,{default:K(()=>[T(q(O))]),_:1})]),V(`div`,dt,[V(`h4`,null,H(q(X)(`@TAG01:Git 标签`)),1),V(`p`,null,H(q(X)(`@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0`)),1)])]),T(A,{"label-position":`top`,class:`tag-form`},{default:K(()=>[T(C,{label:q(X)(`@TAG01:标签名称`),required:``},{default:K(()=>[T(S,{modelValue:o.value,"onUpdate:modelValue":v[0]||=e=>o.value=e,placeholder:q(X)(`@TAG01:例如: v1.0.0 或 release-2024`),clearable:``,maxlength:`100`},{prefix:K(()=>[T(y,null,{default:K(()=>[T(q(O))]),_:1})]),_:1},8,[`modelValue`,`placeholder`]),V(`div`,ft,[T(y,null,{default:K(()=>[T(q(E))]),_:1}),V(`span`,null,H(q(X)(`@TAG01:建议使用语义化版本号,如 v1.0.0`)),1)])]),_:1},8,[`label`]),T(C,{label:q(X)(`@TAG01:标签类型`)},{default:K(()=>[T(D,{modelValue:l.value,"onUpdate:modelValue":v[1]||=e=>l.value=e,size:`default`},{default:K(()=>[T(w,{value:`lightweight`},{default:K(()=>[Y(H(q(X)(`@TAG01:轻量标签`)),1)]),_:1}),T(w,{value:`annotated`},{default:K(()=>[Y(H(q(X)(`@TAG01:附注标签`)),1)]),_:1})]),_:1},8,[`modelValue`]),V(`div`,pt,[T(y,null,{default:K(()=>[T(q(E))]),_:1}),V(`span`,null,H(g.value),1)])]),_:1},8,[`label`]),l.value===`annotated`?(s(),L(C,{key:0,label:q(X)(`@TAG01:标签说明`),required:l.value===`annotated`},{default:K(()=>[T(S,{modelValue:c.value,"onUpdate:modelValue":v[2]||=e=>c.value=e,placeholder:q(X)(`@TAG01:为此标签添加说明信息`),clearable:``,rows:3,type:`textarea`,resize:`none`,maxlength:`500`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`required`])):I(``,!0),T(C,{label:q(X)(`@TAG01:目标提交(可选)`)},{default:K(()=>[T(S,{modelValue:u.value,"onUpdate:modelValue":v[3]||=e=>u.value=e,placeholder:q(X)(`@TAG01:留空则为当前HEAD,或输入commit SHA`),clearable:``,maxlength:`40`},{prefix:K(()=>[...v[5]||=[V(`span`,{class:`commit-prefix`},`commit:`,-1)]]),_:1},8,[`modelValue`,`placeholder`]),V(`div`,mt,[T(y,null,{default:K(()=>[T(q(E))]),_:1}),V(`span`,null,H(q(X)(`@TAG01:默认为当前HEAD提交,也可以指定历史提交`)),1)])]),_:1},8,[`label`])]),_:1})])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])])}}}),[[`__scopeId`,`data-v-cbbcdcda`]]),gt={class:`tag-list-button`},_t={class:`tag-list-content`},vt={key:0,class:`tag-header`},yt={class:`tag-stats`},bt={class:`stat-item`},xt={class:`stat-number`},St={class:`stat-label`},Ct={class:`tag-actions-header`},wt={class:`tag-list-container`},Tt={key:0,class:`empty-state`},Et={class:`empty-text`},Dt={class:`empty-hint`},Ot={key:1,class:`tag-cards`},kt={class:`tag-card-content`},At={class:`tag-info`},jt={class:`tag-main-info`},Mt={class:`tag-name-badge`},Nt={class:`tag-name-text`},Pt={class:`tag-meta`},Ft={class:`tag-commit`},It={class:`tag-date`},Lt={key:0,class:`tag-message`},Rt={class:`tag-card-actions`},zt={key:0,class:`tag-detail-content`},Bt={class:`detail-row`},Vt={class:`detail-label`},Ht={class:`detail-value`},Ut={class:`detail-row`},Wt={class:`detail-label`},Gt={class:`detail-value`},Kt={class:`detail-row`},qt={class:`detail-label`},Jt={class:`detail-value`},Yt={class:`detail-row`},Xt={class:`detail-label`},Zt={key:0,class:`detail-row detail-message`},Qt={class:`detail-label`},$t={class:`message-content`},en=Z(J({__name:`TagListButton`,props:{variant:{default:`icon`}},setup(t){let n=t,r=Q(),a=z(!1),o=z([]),l=z(!1),f=z(!1),p=z(!1),m=z(!1),h=z(null);async function g(){a.value=!0,await _()}async function _(){try{l.value=!0;let e=await(await fetch(`/api/list-tags`)).json();e.success?o.value=e.tags||[]:N.error(e.error||X(`@TAG01:获取标签列表失败`))}catch(e){console.error(`获取标签列表失败:`,e),N.error(X(`@TAG01:获取标签列表失败`))}finally{l.value=!1}}function v(e){h.value=e,m.value=!0}async function y(e){R.confirm(X(`@TAG01:确定要推送此标签到远程仓库吗?`),X(`@TAG01:推送标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{p.value=!0;let t=await(await fetch(`/api/push-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?N.success(X(`@TAG01:标签推送成功`)):N.error(t.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),N.error(X(`@TAG01:推送标签失败`))}finally{p.value=!1}}).catch(()=>{})}async function b(){R.confirm(X(`@TAG01:确定要推送所有标签到远程仓库吗?`),X(`@TAG01:推送所有标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{p.value=!0;let e=await(await fetch(`/api/push-all-tags`,{method:`POST`})).json();e.success?N.success(X(`@TAG01:所有标签推送成功`)):N.error(e.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),N.error(X(`@TAG01:推送标签失败`))}finally{p.value=!1}}).catch(()=>{})}async function x(e){R.confirm(X(`@TAG01:确定要删除此标签吗?此操作不可恢复。`),X(`@TAG01:删除标签`),{confirmButtonText:X(`@TAG01:删除`),cancelButtonText:X(`@TAG01:取消`),type:`warning`}).then(async()=>{await C(e)}).catch(()=>{})}async function C(e){try{f.value=!0;let t=await(await fetch(`/api/delete-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?(N.success(X(`@TAG01:标签删除成功`)),await _()):N.error(t.error||X(`@TAG01:删除标签失败`))}catch(e){console.error(`删除标签失败:`,e),N.error(X(`@TAG01:删除标签失败`))}finally{f.value=!1}}function D(e){if(!e)return`-`;try{return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}catch{return e}}return(t,C)=>{let k=j,A=e,N=i,ee=w,te=he,P=ce;return s(),M(`div`,gt,[T(N,{content:q(X)(`@TAG01:查看和管理所有标签`),placement:`top`,"show-after":200,disabled:n.variant===`text`},{default:K(()=>[T(A,{type:`info`,onClick:g,disabled:!q(r).isGitRepo,circle:n.variant===`icon`,size:n.variant===`icon`?`small`:`default`,class:F(n.variant===`text`?`action-button`:``)},{default:K(()=>[n.variant===`icon`?(s(),L(k,{key:0},{default:K(()=>[T(q(O))]),_:1})):(s(),M(B,{key:1},[Y(H(q(X)(`@TAG01:标签列表`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),T(ye,{modelValue:a.value,"onUpdate:modelValue":C[0]||=e=>a.value=e,title:q(X)(`@TAG01:Git 标签列表`),size:`large`,"show-footer":!1,"custom-class":`tag-list-dialog`},{default:K(()=>[V(`div`,_t,[l.value?I(``,!0):(s(),M(`div`,vt,[V(`div`,yt,[V(`div`,bt,[T(k,{class:`stat-icon`},{default:K(()=>[T(q(O))]),_:1}),V(`span`,xt,H(o.value.length),1),V(`span`,St,H(q(X)(`@TAG01:个标签`)),1)])]),V(`div`,Ct,[T(A,{type:`primary`,size:`small`,icon:q(c),onClick:_,loading:l.value,class:`refresh-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:刷新`)),1)]),_:1},8,[`icon`,`loading`]),o.value.length>0?(s(),L(A,{key:0,type:`success`,size:`small`,icon:q(d),onClick:b,loading:p.value,class:`push-all-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:推送所有标签`)),1)]),_:1},8,[`icon`,`loading`])):I(``,!0)])])),u((s(),M(`div`,wt,[o.value.length===0&&!l.value?(s(),M(`div`,Tt,[T(ee,{description:q(X)(`@TAG01:暂无标签`),"image-size":120},{image:K(()=>[T(k,{class:`empty-icon`},{default:K(()=>[T(q(O))]),_:1})]),description:K(()=>[V(`p`,Et,H(q(X)(`@TAG01:还没有创建任何标签`)),1),V(`p`,Dt,H(q(X)(`@TAG01:使用创建标签功能为项目添加版本标记`)),1)]),_:1},8,[`description`])])):(s(),M(`div`,Ot,[(s(!0),M(B,null,S(o.value,e=>(s(),M(`div`,{key:e.name,class:`tag-card`},[V(`div`,kt,[V(`div`,At,[V(`div`,jt,[V(`div`,Mt,[T(k,{class:`badge-icon`},{default:K(()=>[T(q(O))]),_:1}),V(`span`,Nt,H(e.name),1),T(te,{size:`small`,type:e.type===`annotated`?`warning`:`info`,class:`type-tag`},{default:K(()=>[Y(H(e.type===`annotated`?q(X)(`@TAG01:附注`):q(X)(`@TAG01:轻量`)),1)]),_:2},1032,[`type`])]),V(`div`,Pt,[V(`span`,Ft,[T(k,null,{default:K(()=>[T(q(E))]),_:1}),Y(` `+H(e.commit.substring(0,8)),1)]),V(`span`,It,H(D(e.date)),1)]),e.message?(s(),M(`div`,Lt,H(e.message),1)):I(``,!0)])]),V(`div`,Rt,[e.message?(s(),L(A,{key:0,size:`small`,type:`info`,onClick:t=>v(e),class:`action-btn view-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:查看`)),1)]),_:1},8,[`onClick`])):I(``,!0),T(A,{size:`small`,type:`success`,icon:q(d),onClick:t=>y(e.name),loading:p.value,class:`action-btn push-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:推送`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),T(A,{size:`small`,type:`danger`,icon:q(ae),onClick:t=>x(e.name),loading:f.value,class:`action-btn delete-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`])])])]))),128))]))])),[[P,l.value]])])]),_:1},8,[`modelValue`,`title`]),T(ye,{modelValue:m.value,"onUpdate:modelValue":C[1]||=e=>m.value=e,title:q(X)(`@TAG01:标签详情`),size:`medium`,"show-footer":!1,"custom-class":`tag-detail-dialog`},{default:K(()=>[h.value?(s(),M(`div`,zt,[V(`div`,Bt,[V(`span`,Vt,H(q(X)(`@TAG01:标签名称:`)),1),V(`code`,Ht,H(h.value.name),1)]),V(`div`,Ut,[V(`span`,Wt,H(q(X)(`@TAG01:提交SHA:`)),1),V(`code`,Gt,H(h.value.commit),1)]),V(`div`,Kt,[V(`span`,qt,H(q(X)(`@TAG01:创建时间:`)),1),V(`span`,Jt,H(D(h.value.date)),1)]),V(`div`,Yt,[V(`span`,Xt,H(q(X)(`@TAG01:类型:`)),1),T(te,{type:h.value.type===`annotated`?`warning`:`info`,size:`small`},{default:K(()=>[Y(H(h.value.type===`annotated`?q(X)(`@TAG01:附注标签`):q(X)(`@TAG01:轻量标签`)),1)]),_:1},8,[`type`])]),h.value.message?(s(),M(`div`,Zt,[V(`span`,Qt,H(q(X)(`@TAG01:标签说明:`)),1),V(`div`,$t,H(h.value.message),1)])):I(``,!0)])):I(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-fc8d7e86`]]),tn={class:`git-operations-button`},nn={class:`actions-section`},rn={class:`action-groups`},an={class:`action-group`},on={class:`group-title`},sn={class:`group-buttons`},cn={key:0},ln={class:`action-group`},un={class:`group-title`},dn={class:`group-buttons`},fn={class:`action-group`},pn={class:`group-title`},mn={class:`group-buttons`},hn={key:0},gn={class:`action-group`},_n={class:`group-title`},vn={class:`group-buttons`},yn={class:`action-group`},bn={class:`group-title`},xn={class:`group-buttons`},Sn={class:`action-group`},Cn={class:`group-title`},wn={class:`group-buttons`},Tn={class:`pull-error-content`},En={key:0},Dn={key:1},On={class:`pull-error-detail`},kn={class:`pull-error-label`},An={class:`pull-error-pre`},jn=Z(J({__name:`GitOperationsButton`,props:{variant:{default:`icon`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`afterCommit`,`afterPush`,`beforePush`,`clearFields`],setup(t,{expose:r,emit:a}){let o=t,c=a,l=Q(),u=z(!1),d=z(!1),f=z({needsMerge:!1,error:``,fullError:``,pullOutput:``});function p(){u.value=!0}let m=W(()=>l.fileList.filter(e=>e.type===`added`).length),h=W(()=>l.branchBehind>0),_=W(()=>l.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)));async function v(){try{let e=await l.gitPull();e.success?(await l.fetchStatus(),await l.fetchLog(!1)):(f.value={needsMerge:e.needsMerge,error:e.error,fullError:e.fullError,pullOutput:e.pullOutput},d.value=!0)}catch(e){console.error(`拉取失败:`,e)}}async function y(){try{await l.gitFetchAll(),await l.fetchStatus(),await l.fetchLog(!1)}catch(e){console.error(`获取远程分支失败:`,e)}}async function b(){if(o.hasUserCommitMessage)try{await l.addAndCommit(o.finalCommitMessage,o.skipHooks),l.fetchStatus(),l.fetchLog(),c(`afterCommit`,!0),c(`clearFields`)}catch(e){console.error(`暂存并提交失败:`,e)}}function x(){c(`beforePush`)}function S(e){c(`afterPush`,e)}function w(){c(`clearFields`)}return r({openGitOperationsDrawer:p}),(r,a)=>{let D=j,O=e,k=i,A=n;return s(),M(`div`,tn,[o.variant===`icon`?(s(),L(be,{key:0,tooltip:q(X)(`@F13B4:Git 操作`),size:`large`,"custom-class":`btn-rotate-on-hover`,onClick:p},{default:K(()=>[T(D,null,{default:K(()=>[T(q(g))]),_:1})]),_:1},8,[`tooltip`])):(s(),L(O,{key:1,type:`primary`,class:`action-button`,onClick:p},{default:K(()=>[Y(H(q(X)(`@F13B4:Git 操作`)),1)]),_:1})),T(A,{modelValue:u.value,"onUpdate:modelValue":a[2]||=e=>u.value=e,title:q(X)(`@76872:Git 操作`),direction:`rtl`,size:`362px`,"with-header":!0,"show-close":!0,"destroy-on-close":!1,"append-to-body":!0,class:`git-operations-drawer`},{default:K(()=>[V(`div`,nn,[V(`div`,rn,[V(`div`,an,[V(`div`,on,H(q(X)(`@76872:基础操作`)),1),V(`div`,sn,[T(Me,{onClick:()=>{},from:`drawer`}),T(Oe,{onClick:()=>{},from:`drawer`}),T(Pe,{"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforeCommit:()=>{},onAfterCommit:a[0]||=e=>c(`afterCommit`,e),onClick:()=>{},from:`drawer`},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),T(tt,{onBeforePush:()=>{},onAfterPush:a[1]||=e=>c(`afterPush`,e),onClick:()=>{},from:`drawer`}),T(k,{content:q(l).hasConflictedFiles?q(X)(`@76872:存在冲突文件,请先解决冲突`):h.value?`${q(X)(`@76872:拉取`)}${q(l).branchBehind}${q(X)(`@76872:个远程提交`)}`:`git pull`,placement:`top`},{default:K(()=>[T(O,{type:`primary`,icon:q(U),onClick:v,loading:q(l).isGitPulling,disabled:!q(l).hasUpstream||q(l).hasConflictedFiles,class:`action-button`,style:de(q(l).hasUpstream&&!q(l).hasConflictedFiles?{color:`white`,backgroundColor:`#1e90ff`,borderColor:`#1e90ff`}:{})},{default:K(()=>[Y(H(q(X)(`@76872:拉取`))+` `,1),h.value?(s(),M(`span`,cn,`(`+H(q(l).branchBehind)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`])]),_:1},8,[`content`]),T(k,{content:`git fetch --all`,placement:`top`},{default:K(()=>[T(O,{type:`info`,icon:q(fe),onClick:y,loading:q(l).isGitFetching,class:`action-button`,style:{color:`white`,"background-color":`#1e90ff`,"border-color":`#1e90ff`}},{default:K(()=>[Y(H(q(X)(`@76872:获取所有远程分支`)),1)]),_:1},8,[`icon`,`loading`])]),_:1})])]),V(`div`,ln,[V(`div`,un,H(q(X)(`@76872:组合操作`)),1),V(`div`,dn,[T(k,{content:q(l).hasConflictedFiles?q(X)(`@76872:存在冲突文件,请先解决冲突`):`git add + git commit`,placement:`top`},{default:K(()=>[T(O,{type:`primary`,icon:q(ie),onClick:b,loading:q(l).isAddingFiles||q(l).isCommiting,disabled:!_.value||!t.hasUserCommitMessage||q(l).hasConflictedFiles,class:`action-button`},{default:K(()=>[Y(H(q(X)(`@76872:暂存并提交`)),1)]),_:1},8,[`icon`,`loading`,`disabled`])]),_:1},8,[`content`]),T(ot,{from:`drawer`,"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforePush:x,onAfterPush:S,onClearFields:w},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])]),V(`div`,fn,[V(`div`,pn,H(q(X)(`@76872:重置操作`)),1),V(`div`,mn,[T(k,{content:m.value>0?`${q(X)(`@76872:撤销`)}${m.value}${q(X)(`@76872:个已暂存文件`)}`:`git reset HEAD`,placement:`top`},{default:K(()=>[T(O,{type:`warning`,icon:q(C),onClick:q(l).resetHead,loading:q(l).isResetting,disabled:m.value===0||q(l).hasConflictedFiles,class:`action-button reset-button`},{default:K(()=>[Y(H(q(X)(`@76872:重置暂存区`))+` `,1),m.value>0?(s(),M(`span`,hn,`(`+H(m.value)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`onClick`,`loading`,`disabled`])]),_:1},8,[`content`]),T(ke,{variant:`text`})])]),V(`div`,gn,[V(`div`,_n,H(q(X)(`@76872:分支操作`)),1),V(`div`,vn,[T(we,{variant:`text`})])]),V(`div`,yn,[V(`div`,bn,H(q(X)(`@76872:储藏操作`)),1),V(`div`,xn,[T(De,{variant:`text`}),T(Te,{variant:`text`})])]),V(`div`,Sn,[V(`div`,Cn,H(q(X)(`@TAG01:标签操作`)),1),V(`div`,wn,[T(ht,{variant:`text`}),T(en,{variant:`text`})])])])])]),_:1},8,[`modelValue`,`title`]),T(ye,{modelValue:d.value,"onUpdate:modelValue":a[3]||=e=>d.value=e,title:f.value.needsMerge?q(X)(`@76872:需要合并更改`):q(X)(`@76872:拉取失败`),size:`medium`,"show-footer":!0,"show-cancel":!1,"confirm-text":q(X)(`@76872:我知道了`),"append-to-body":!0,onConfirm:a[4]||=e=>d.value=!1},{default:K(()=>[V(`div`,Tn,[V(`div`,{class:F([`pull-error-type`,f.value.needsMerge?`is-warning`:`is-error`])},[T(D,{class:`pull-error-icon`},{default:K(()=>[T(q(E))]),_:1}),f.value.needsMerge?(s(),M(`span`,En,H(q(X)(`@76872:本地存在未提交的更改,与远程内容冲突,请先处理本地更改后再拉取。`)),1)):(s(),M(`span`,Dn,H(q(X)(`@76872:执行 git pull 时发生错误,请查看详细信息。`)),1))],2),V(`div`,On,[V(`div`,kn,H(q(X)(`@76872:错误详情`))+`:`,1),V(`pre`,An,H(f.value.fullError||f.value.error),1)])])]),_:1},8,[`modelValue`,`title`,`confirm-text`])])}}}),[[`__scopeId`,`data-v-58350746`]]),Mn={class:`loading-container`},Nn={class:`loading-text`},Pn={key:0,class:`loading-progress`},Fn=Z(J({__name:`GlobalLoading`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@2AEBA:加载中...`)},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(e){return(t,n)=>(s(),L(ne,{to:`body`},[T(re,{name:`loading-fade`},{default:K(()=>[e.visible||e.mock?(s(),M(`div`,{key:0,class:`global-loading-overlay`,onClick:n[0]||=te(()=>{},[`stop`])},[V(`div`,Mn,[n[1]||=V(`div`,{class:`loading-spinner`},[V(`div`,{class:`spinner-ring`}),V(`div`,{class:`spinner-ring`}),V(`div`,{class:`spinner-ring`})],-1),V(`div`,Nn,H(e.text),1),e.showProgress||e.mock?(s(),M(`div`,Pn,[V(`div`,{class:F([`progress-bar`,{"is-mock":e.mock&&!e.showProgress}]),style:de(e.showProgress?{width:e.progress+`%`}:void 0)},null,6)])):I(``,!0)])])):I(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-6d13a220`]]),In={class:`success-container`},Ln={class:`success-text`},Rn={key:0,class:`success-description`},zn=Z(J({__name:`SuccessModal`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@71545:操作成功!`)},description:{default:``}},setup(e){return(t,n)=>(s(),L(ne,{to:`body`},[T(re,{name:`success-fade`},{default:K(()=>[e.visible?(s(),M(`div`,{key:0,class:`success-overlay`,onClick:n[0]||=te(()=>{},[`stop`])},[V(`div`,In,[n[1]||=V(`div`,{class:`success-icon`},[V(`svg`,{viewBox:`0 0 52 52`,class:`success-svg`},[V(`circle`,{class:`success-circle`,cx:`26`,cy:`26`,r:`25`,fill:`none`}),V(`path`,{class:`success-check`,fill:`none`,d:`m14.1 27.2l7.1 7.2 16.7-16.8`})])],-1),V(`div`,Ln,H(e.text),1),e.description?(s(),M(`div`,Rn,H(e.description),1)):I(``,!0)])])):I(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-c10f43b3`]]),$=oe({visible:!1,text:X(`@F2A3A:加载中...`),showProgress:!1,progress:0});function Bn(){return{loadingState:$,show:e=>{$.visible=!0,$.text=e?.text||X(`@F2A3A:加载中...`),$.showProgress=e?.showProgress||!1,$.progress=e?.progress||0},hide:()=>{$.visible=!1},updateProgress:e=>{$.progress=Math.max(0,Math.min(100,e))},updateText:e=>{$.text=e},setText:e=>{$.visible&&($.text=e)}}}var Vn=oe({visible:!1,text:X(`@B8591:操作成功!`),description:``});function Hn(){let e=e=>{Vn.visible=!0,Vn.text=e?.text||X(`@B8591:操作成功!`),Vn.description=e?.description||``;let n=e?.duration||2e3;setTimeout(()=>{t()},n)},t=()=>{Vn.visible=!1};return{successState:Vn,show:e,hide:t}}var Un={class:`one-commit-content`},Wn={class:`one-commit-text`},Gn={class:`one-commit-title`},Kn={key:0,class:`one-commit-desc`},qn=Z(J({__name:`QuickCommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforeCommit`,`afterCommit`,`clearFields`],setup(t,{expose:n,emit:r}){let a=Q(),o=xe(),c=t,l=r,u=W(()=>a.fileList.some(e=>!Ee(e.path,o.lockedFiles))),d=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),f=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!d.value||!c.hasUserCommitMessage:!u.value||!c.hasUserCommitMessage),p=W(()=>a.isAddingFiles||a.isCommiting),m=W(()=>a.hasConflictedFiles?X(`@2E184:存在冲突文件,请先解决冲突`):a.isSelectionMode?a.selectedFiles.size===0?X(`@2E184:请先勾选要提交的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):c.hasUserCommitMessage?X(`@2E184:一键完成:仅暂存所选文件 → 提交`):X(`@2E184:请输入提交信息`):u.value?c.hasUserCommitMessage?X(`@2E184:一键完成:暂存所有更改 → 提交`):X(`@2E184:请输入提交信息`):X(`@2E184:没有需要提交的更改`)),h=W(()=>a.isSelectionMode&&d.value?X(`@2E184:一键提交所选`):X(`@2E184:一键提交`)),g=W(()=>c.from===`form`?a.isSelectionMode&&d.value?X(`@2E184:暂存所选 + 提交`):X(`@2E184:暂存 + 提交`):``);async function _(){l(`beforeCommit`);try{let e=await a.stageSelectedAndCommit(c.finalCommitMessage,c.skipHooks);e&&l(`clearFields`),l(`afterCommit`,e)}catch(e){console.error(`一键提交失败:`,e),l(`afterCommit`,!1)}}return n({triggerQuickCommit:_}),(n,r)=>{let a=j,o=e;return s(),M(`div`,null,[T(q(i),{content:m.value,placement:`top`,"show-after":200},{default:K(()=>[T(o,{type:`primary`,onClick:_,loading:p.value,disabled:f.value,class:F([t.from,`one-commit-button`])},{default:K(()=>[V(`div`,Un,[T(a,{class:`one-commit-icon`},{default:K(()=>[T(q(ie))]),_:1}),V(`div`,Wn,[V(`span`,Gn,H(h.value),1),t.from===`form`?(s(),M(`span`,Kn,H(g.value),1)):I(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}}}),[[`__scopeId`,`data-v-0bcf5e9d`]]),Jn={class:`form-bottom-actions`},Yn={class:`actions-flex-container`},Xn={class:`left-actions`},Zn={class:`button-grid`},Qn={class:`right-actions`},$n=Z(J({__name:`GitActionButtons`,props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1},from:{default:`form`}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`],setup(e,{expose:t,emit:n}){let r=n,i=z(null);function a(e){r(`afterCommit`,e)}function o(e){r(`afterPush`,e)}function c(){r(`beforePush`)}function l(){r(`pushStart`)}function u(){r(`clearFields`)}async function d(){return i.value?.triggerQuickPush()}return t({triggerQuickPush:d}),(t,n)=>(s(),M(`div`,Jn,[V(`div`,Yn,[V(`div`,Xn,[V(`div`,Zn,[T(Me,{onClick:()=>{},from:e.from},null,8,[`from`]),T(Pe,{"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforeCommit:()=>{},onAfterCommit:a,onClick:()=>{},from:e.from},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`,`from`]),T(tt,{onBeforePush:()=>{},onAfterPush:o,onClick:()=>{},from:e.from},null,8,[`from`])])]),V(`div`,Qn,[T(qn,{from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onAfterCommit:a,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),T(ot,{ref_key:`quickPushRef`,ref:i,from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforePush:c,onPushStart:l,onAfterPush:o,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])])]))}}),[[`__scopeId`,`data-v-2f7ac0a2`]]),er={class:`dialog-toolbar`},tr={class:`filter-controls`},nr={class:`toolbar-actions`},rr=[`disabled`],ir={class:`btn-text`},ar=[`disabled`],or={class:`btn-text`},sr=[`disabled`],cr={class:`btn-text`},lr={class:`history-scroll`},ur={key:0,class:`loading-state`},dr={class:`loading-text`},fr={key:3,class:`history-list`},pr=[`onClick`],mr={class:`command-info`},hr={class:`command-text`},gr={class:`command-meta`},_r={class:`timestamp`},vr={class:`duration`},yr={class:`item-actions`},br={key:0,class:`item-details`},xr={key:0,class:`output-section`},Sr={class:`output-header`},Cr=[`onClick`],wr={class:`output-content`},Tr={key:0,class:`truncation-notice`},Er={class:`output-header`},Dr={class:`output-content`},Or={key:0,class:`truncation-notice`},kr={key:2,class:`output-section error`},Ar={class:`output-header`},jr={class:`output-content`},Mr=Z(J({__name:`CommandHistory`,setup(e){let t=Q(),n=z([]),a=z(!1);function o(e){return Array.isArray(e)?e.join(` `):e==null?``:String(e)}let c=z(!1),u=z(!1),d=z(!1),f=z(new Set),m=z(!1),h=z(!1),g=z(`all`),_=z(`all`),y=z(``),C=W(()=>{let e=n.value;if(g.value!==`all`&&(e=e.filter(e=>g.value===`success`?e.success:!e.success)),_.value!==`all`&&(e=e.filter(e=>{let t=o(e.command).startsWith(`git `);return _.value===`git`?t:!t})),y.value.trim()){let t=y.value.toLowerCase();e=e.filter(e=>o(e.command).toLowerCase().includes(t)||e.stdout&&e.stdout.toLowerCase().includes(t)||e.stderr&&e.stderr.toLowerCase().includes(t)||e.error&&e.error.toLowerCase().includes(t))}return e}),E=W(()=>n.value.filter(e=>e.success).length),O=W(()=>n.value.filter(e=>!e.success).length),ne=W(()=>n.value.filter(e=>o(e.command).startsWith(`git `)).length),re=W(()=>n.value.filter(e=>!o(e.command).startsWith(`git `)).length);function ie(){h.value=!0,n.value.length===0&&U()}async function U(){try{if(a.value=!0,t.socket&&t.socket.connected)t.socket.emit(`request_full_history`);else{let e=await(await fetch(`/api/command-history`)).json();e.success?n.value=e.history:N.error(`${X(`@81F0F:加载命令历史失败: `)}${e.error}`)}}catch(e){N.error(`${X(`@81F0F:加载命令历史失败: `)}${e.message}`)}finally{a.value=!1}}async function oe(){if(C.value.length===0){N.warning(X(`@81F0F:没有可复制的命令历史`));return}try{u.value=!0;let e=C.value.map(e=>{let t=`# ${le(e.timestamp)}${X(`@81F0F: (耗时: `)}${ue(e.executionTime)}) - ${e.success?X(`@81F0F:成功`):X(`@81F0F:失败`)}\n`;if(t+=`${o(e.command)}\n`,e.stdout&&(t+=`\n# 输出:\n${e.stdout}\n`),e.stderr){let n=me(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`\n# ${n}:\n${e.stderr}\n`}return e.error&&(t+=`\n# 错误信息:\n${e.error}\n`),t}).join(`
1
+ import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,D as t,E as n,Fn as r,G as i,Gn as a,H as o,In as s,It as c,J as l,Jn as u,Jt as d,K as f,L as p,N as m,Nt as h,Ot as g,P as _,Pn as v,Pt as y,Q as b,R as x,Rn as S,Rt as C,S as w,Sn as T,St as E,Tt as D,Vt as O,W as k,X as A,Y as j,_n as M,a as N,at as ee,cn as te,ct as P,dn as ne,dr as F,en as re,gn as I,hn as L,ht as ie,i as R,ir as z,ln as B,lt as ae,mn as V,mr as H,mt as U,nr as oe,nt as se,o as ce,on as le,ot as ue,pn as W,pr as de,q as G,qn as K,st as fe,tt as pe,ur as q,v as me,wn as J,xn as Y,z as he,zt as ge}from"./element-plus-CRTdimvR.js";import{c as _e}from"./vendor-BxotT5qN.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-BWJlNHzL.js";import{c as ve,i as ye,l as be,o as Q,u as xe}from"./index-BkpNzYyv.js";import{t as Se}from"./TemplateManager-CogQCagT.js";import{a as Ce,i as we,n as Te,o as Ee,r as De,s as Oe,t as ke}from"./ResetToRemoteButton-CDhmy9Qj.js";var Ae={key:0},je={key:1},Me=Z(J({__name:`StageButton`,props:{from:{default:`form`}},emits:[`click`],setup(t,{emit:n}){let r=n,a=Q(),o=ve();function c(e){let t=e.replace(/\\/g,`/`);return o.lockedFiles.some(e=>t===e.replace(/\\/g,`/`))}function l(){return o.lockedFiles.length===0?!1:a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)?c(e.path):!1)}let u=W(()=>a.fileList.filter(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!c(e.path)).length),d=W(()=>a.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!c(e.path))),f=W(()=>a.isSelectionMode&&a.hasSelectableFiles),p=W(()=>a.selectedUnstagedPaths.length),m=W(()=>a.isSelectionMode?p.value===0:!d.value),g=W(()=>f.value?`${X(`@29974:暂存所选 `)}${p.value}${X(`@29974: 个文件`)}`:d.value?l()?`${X(`@29974:暂存`)}${u.value}${X(`@29974:个未暂存文件(逐个添加)`)}`:`${X(`@29974:暂存所有更改(git add .)`)}`:X(`@29974:没有需要暂存的更改`));async function _(){r(`click`);try{if(f.value){await a.stageFiles(a.selectedUnstagedPaths);return}if(a.isSelectionMode)return;l()?await a.addToStage():await a.addAllToStage()}catch(e){console.error(`添加文件失败:`,e)}}return(n,r)=>{let o=e,c=i;return s(),L(c,{content:g.value,placement:`top`},{default:K(()=>[T(o,{type:`primary`,icon:q(h),onClick:_,loading:q(a).isAddingFiles,disabled:m.value,class:F([`stage-button`,`from-${t.from}`,{"is-selective":f.value}])},{default:K(()=>[Y(H(f.value?q(X)(`@29974:暂存所选`):q(X)(`@29974:暂存`))+` `,1),f.value?(s(),M(`span`,Ae,`(`+H(p.value)+`)`,1)):u.value>0?(s(),M(`span`,je,`(`+H(u.value)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`class`])]),_:1},8,[`content`])}}}),[[`__scopeId`,`data-v-22060f7f`]]),Ne={key:0},Pe=Z(J({__name:`CommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`click`,`beforeCommit`,`afterCommit`],setup(t,{emit:n}){let r=t,a=n,o=Q(),c=ve(),l=W(()=>o.fileList.filter(e=>e.type===`added`&&!Ee(e.path,c.lockedFiles)).length),u=W(()=>l.value>0),d=W(()=>o.hasConflictedFiles||o.isCommiting?!0:o.isMergeInProgress?!r.hasUserCommitMessage:!u.value||!r.hasUserCommitMessage),f=W(()=>o.isCommiting?X(`@76A11:正在提交中…`):o.hasConflictedFiles?X(`@76A11:存在冲突文件,请先解决冲突`):o.isMergeInProgress?r.hasUserCommitMessage?X(`@76A11:提交并完成合并`):X(`@76A11:请输入提交信息`):u.value?r.hasUserCommitMessage?`${X(`@76A11:提交`)}${l.value}${X(`@76A11:个已暂存文件`)}`:X(`@76A11:请输入提交信息`):X(`@76A11:没有已暂存的更改`)),p=W(()=>o.isCommiting?X(`@76A11:提交中…`):X(`@76A11:提交`));async function m(){if(r.finalCommitMessage.trim()){a(`beforeCommit`),a(`click`);try{a(`afterCommit`,await o.commitChanges(r.finalCommitMessage,r.skipHooks))}catch(e){console.error(`提交失败:`,e),a(`afterCommit`,!1)}}}return(n,r)=>{let a=e,c=i;return s(),L(c,{content:f.value,placement:`top`,disabled:q(o).isCommiting},{default:K(()=>[T(a,{type:`primary`,onClick:m,icon:q(o).isCommiting?q(D):q(pe),loading:q(o).isCommiting,disabled:d.value,"aria-busy":q(o).isCommiting?`true`:void 0,"aria-label":q(o).isCommiting?q(X)(`@76A11:正在提交中…`):void 0,class:F([`commit-button`,`from-${t.from}`,{"is-committing":q(o).isCommiting}])},{default:K(()=>[Y(H(p.value)+` `,1),l.value>0&&!q(o).isCommiting?(s(),M(`span`,Ne,`(`+H(l.value)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`aria-busy`,`aria-label`,`class`])]),_:1},8,[`content`,`disabled`])}}}),[[`__scopeId`,`data-v-6bd86c7e`]]),Fe={class:`push-progress-container`},Ie={key:0,class:`pulling-section`},Le={class:`pulling-text-wrap`},Re={class:`pulling-title`},ze={class:`pulling-sub`},Be={class:`stage-header`},Ve={class:`stage-icon`},He={class:`stage-info`},Ue={class:`stage-label`},We={key:0,class:`stage-percent`},Ge={key:0,class:`stage-progress`},Ke={key:2,class:`error-section`},qe={class:`error-header`},Je={class:`error-title`},Ye={class:`error-content`},Xe={key:0,class:`error-suggestion`},Ze={key:3,class:`messages-section`},Qe={class:`messages-title`},$e=Z(J({__name:`PushProgressModal`,props:{modelValue:{type:Boolean}},emits:[`update:modelValue`,`complete`,`pull-requested`],setup(n,{expose:r,emit:i}){let{t:a}=_e(),o=n,c=i,l=ve(),u=Q(),d=z(`progress`),f=z([]),p=z(``),m=z(!1),h=W(()=>p.value.includes(`non-fast-forward`)||p.value.includes(`rejected`)&&p.value.includes(`fetch first`)),g=z(!1);async function _(){g.value=!0;try{(await u.gitPull()).success&&(x.value=!1,c(`pull-requested`))}finally{g.value=!1}}let v=oe([{name:`counting`,label:a(`@PUSH:计数对象`),status:`wait`,percent:0},{name:`compressing`,label:a(`@PUSH:压缩对象`),status:`wait`,percent:0},{name:`writing`,label:a(`@PUSH:写入对象`),status:`wait`,percent:0},{name:`resolving`,label:a(`@PUSH:解析增量`),status:`wait`,percent:0}]),y=z(0),b=z(null),x=W({get:()=>o.modelValue,set:e=>c(`update:modelValue`,e)}),C=W(()=>{if(m.value)return a(`@PUSH:正在拉取远程更新`);switch(d.value){case`progress`:return a(`@PUSH:正在推送`);case`success`:return a(`@PUSH:推送成功`);case`error`:return a(`@PUSH:推送失败`);default:return``}});function w(e){switch(e.type){case`progress`:e.message&&(f.value.push(e.message),setTimeout(()=>{b.value&&(b.value.scrollTop=b.value.scrollHeight)},0));break;case`stage-progress`:if(e.stage&&typeof e.percent==`number`){let t=v.findIndex(t=>t.name===e.stage);t!==-1&&(v[t].percent=e.percent,v[t].status=e.percent===100?`finish`:`process`,y.value=t,e.percent===100&&t<v.length-1&&(v[t+1].status=`wait`))}break;case`complete`:e.success?(d.value=`success`,v.forEach(e=>{(e.status===`process`||e.status===`wait`)&&(e.status=`finish`,e.percent=100)}),y.value=-1,l.autoClosePushModal?setTimeout(()=>{x.value=!1,c(`complete`,!0)},2e3):c(`complete`,!0)):(d.value=`error`,p.value=e.error||`未知错误`,y.value<v.length&&(v[y.value].status=`error`),y.value=-1,c(`complete`,!1));break}}function E(){d.value=`progress`,f.value=[],p.value=``,y.value=0,m.value=!1,v.forEach(e=>{e.status=`wait`,e.percent=0})}function O(e){m.value=e}return r({handleProgress:w,reset:E,setPulling:O}),(n,r)=>{let i=e;return s(),L(q(t),{modelValue:x.value,"onUpdate:modelValue":r[0]||=e=>x.value=e,title:C.value,width:`650px`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":d.value!==`progress`,"append-to-body":!0,"lock-scroll":!1,"destroy-on-close":``,class:F([`push-progress-dialog`,`status-${d.value}`])},{default:K(()=>[V(`div`,Fe,[m.value?(s(),M(`div`,Ie,[r[1]||=V(`div`,{class:`pulling-icon-wrap`},[V(`svg`,{class:`pulling-spinner`,viewBox:`0 0 50 50`},[V(`circle`,{class:`pulling-spinner-track`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`}),V(`circle`,{class:`pulling-spinner-arc`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`})])],-1),V(`div`,Le,[V(`div`,Re,H(q(a)(`@PUSH:正在拉取远程更新`)),1),V(`div`,ze,H(q(a)(`@PUSH:拉取完成后自动继续推送`)),1)])])):(s(),M(`div`,{key:1,class:F([`stages-section`,{"is-loading":d.value===`progress`,"is-success":d.value===`success`}])},[(s(!0),M(B,null,S(v,(e,t)=>(s(),M(`div`,{key:e.name,class:F([`stage-item`,{active:y.value===t,finished:e.status===`finish`,error:e.status===`error`}])},[V(`div`,Be,[V(`div`,Ve,[e.status===`finish`?(s(),L(q(j),{key:0,class:`icon-finish`},{default:K(()=>[T(q(se))]),_:1})):e.status===`error`?(s(),L(q(j),{key:1,class:`icon-error`},{default:K(()=>[T(q(ue))]),_:1})):e.status===`process`?(s(),L(q(j),{key:2,class:`icon-process rotating`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(q(j),{key:3,class:`icon-wait`},{default:K(()=>[T(q(D))]),_:1}))]),V(`div`,He,[V(`div`,Ue,H(e.label),1),e.status===`process`||e.status===`finish`?(s(),M(`div`,We,H(e.percent)+`% `,1)):I(``,!0)])]),e.status===`process`||e.status===`finish`?(s(),M(`div`,Ge,[T(q(me),{percentage:e.percent,"stroke-width":6,"show-text":!1,color:e.status===`finish`?`var(--color-success)`:`var(--color-primary)`},null,8,[`percentage`,`color`])])):I(``,!0)],2))),128))],2)),d.value===`error`&&p.value?(s(),M(`div`,Ke,[V(`div`,qe,[V(`div`,Je,H(q(a)(`@PUSH:错误详情`))+`:`,1),h.value?(s(),L(i,{key:0,type:`primary`,size:`small`,loading:g.value,onClick:_,class:`pull-button`},{default:K(()=>[T(q(j),null,{default:K(()=>[T(q(U))]),_:1}),Y(` `+H(q(a)(`@PUSH:先拉取更新`)),1)]),_:1},8,[`loading`])):I(``,!0)]),V(`div`,Ye,H(p.value),1),h.value?(s(),M(`div`,Xe,H(q(a)(`@PUSH:检测到远程有新提交,请先拉取更新后再推送。`)),1)):I(``,!0)])):I(``,!0),f.value.length>0?(s(),M(`div`,Ze,[V(`div`,Qe,H(q(a)(`@PUSH:详细信息`))+`:`,1),V(`div`,{ref_key:`messagesContainerRef`,ref:b,class:`progress-messages`},[(s(!0),M(B,null,S(f.value,(e,t)=>(s(),M(`div`,{key:t,class:`message-item`},H(e),1))),128))],512)])):I(``,!0)])]),_:1},8,[`modelValue`,`title`,`show-close`,`class`])}}}),[[`__scopeId`,`data-v-e8766d98`]]),et={key:0},tt=Z(J({__name:`PushButton`,props:{from:{default:`form`}},emits:[`click`,`beforePush`,`afterPush`],setup(t,{emit:n}){let r=n,a=Q(),o=z(!1),c=z(null),l=W(()=>a.branchAhead>0),u=W(()=>a.fileList.some(e=>e.type===`added`)),f=W(()=>a.hasConflictedFiles?!1:a.hasUpstream&&l.value&&!u.value),p=W(()=>!f.value),m=W(()=>a.hasConflictedFiles?X(`@F4137:存在冲突文件,请先解决冲突`):a.hasUpstream?l.value?u.value?X(`@F4137:有未提交的暂存更改,请先提交`):`${X(`@F4137:推送`)}${a.branchAhead}${X(`@F4137:个本地提交`)}`:X(`@F4137:没有需要推送的提交`):X(`@F4137:当前分支没有上游分支`)),h=W(()=>f.value?{backgroundColor:`var(--color-success)`,borderColor:`var(--color-success)`}:{});async function g(){r(`beforePush`),r(`click`);try{o.value=!0,c.value&&c.value.reset();let e=await a.pushToRemoteWithProgress(e=>{c.value&&c.value.handleProgress(e)});e&&await new Promise(e=>setTimeout(e,200)),r(`afterPush`,e)}catch(e){console.error(`推送失败:`,e),r(`afterPush`,!1)}}function _(e){}return(n,r)=>{let u=e,f=i;return s(),M(`div`,null,[T(f,{content:m.value,placement:`top`},{default:K(()=>[T(u,{type:`primary`,icon:q(d),onClick:g,loading:q(a).isPushing,disabled:p.value,style:de(h.value),class:F([`push-button`,`from-${t.from}`])},{default:K(()=>[Y(H(q(X)(`@F4137:推送`))+` `,1),l.value?(s(),M(`span`,et,`(`+H(q(a).branchAhead)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`,`class`])]),_:1},8,[`content`]),T($e,{ref_key:`progressModalRef`,ref:c,modelValue:o.value,"onUpdate:modelValue":r[0]||=e=>o.value=e,onComplete:_},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-a0e22137`]]),nt={class:`one-push-content`},rt={class:`one-push-text`},it={class:`one-push-title`},at={key:0,class:`one-push-desc`},ot=Z(J({__name:`QuickPushButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforePush`,`pushStart`,`afterPush`,`clearFields`],setup(t,{expose:n,emit:r}){let a=Q(),o=ve(),c=z(!1),l=z(null),u=t,d=r,f=W(()=>a.fileList.some(e=>!Ee(e.path,o.lockedFiles))),p=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),m=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!p.value||!u.hasUserCommitMessage||!a.hasUpstream:!f.value&&a.branchAhead===0||!u.hasUserCommitMessage||!a.hasUpstream),h=W(()=>a.isAddingFiles||a.isCommiting||a.isPushing),g=W(()=>{if(a.hasConflictedFiles)return X(`@2E184:存在冲突文件,请先解决冲突`);if(a.isSelectionMode)return a.selectedFiles.size===0?X(`@2E184:请先勾选要推送的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):u.hasUserCommitMessage?a.hasUpstream?X(`@2E184:一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`);let e=a.branchAhead>0;return!f.value&&!e?X(`@2E184:没有需要提交或推送的更改`):u.hasUserCommitMessage?a.hasUpstream?f.value?X(`@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库`):X(`@2E184:本地已提交,一键推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`)}),_=W(()=>a.isSelectionMode&&p.value?X(`@2E184:一键推送所选`):X(`@2E184:一键推送所有`)),v=W(()=>u.from===`form`?a.isSelectionMode&&p.value?X(`@2E184:暂存所选 + 提交 + 推送`):X(`@2E184:暂存 + 提交 + 推送`):``);async function b(){d(`beforePush`);try{let e=a.isSelectionMode&&p.value;if((e||f.value)&&!(e?await a.stageSelectedAndCommit(u.finalCommitMessage,u.skipHooks):await a.addAndCommit(u.finalCommitMessage,u.skipHooks))){d(`afterPush`,!1);return}if(d(`pushStart`),c.value=!0,o.pullBeforePush){l.value?.setPulling(!0);let e=await a.gitPull();if(l.value?.setPulling(!1),!e.success){N.error(X(`@2E184:拉取远程更新失败,已停止推送`)),c.value=!1,a.fetchStatus(),a.getBranchStatus(!0),d(`afterPush`,!1);return}}l.value&&l.value.reset();let t=await a.pushToRemoteWithProgress(e=>{l.value&&l.value.handleProgress(e)});if(t){try{window.dispatchEvent(new CustomEvent(`zen-gitsync:after-quick-push-success`))}catch{}d(`clearFields`)}d(`afterPush`,t)}catch(e){console.error(`一键推送失败:`,e),d(`afterPush`,!1)}}n({triggerQuickPush:b});function x(e){}return(n,r)=>{let a=j,o=e;return s(),M(`div`,null,[T(q(i),{content:g.value,placement:`top`,"show-after":200},{default:K(()=>[T(o,{type:`primary`,onClick:b,loading:h.value,disabled:m.value,class:F([t.from,`one-push-button`])},{default:K(()=>[V(`div`,nt,[T(a,{class:`one-push-icon`},{default:K(()=>[T(q(y))]),_:1}),V(`div`,rt,[V(`span`,it,H(_.value),1),t.from===`form`?(s(),M(`span`,at,H(v.value),1)):I(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`]),T($e,{ref_key:`progressModalRef`,ref:l,modelValue:c.value,"onUpdate:modelValue":r[0]||=e=>c.value=e,onComplete:x,onPullRequested:b},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-9f003c37`]]),st={class:`create-tag-button`},ct={class:`tag-dialog-content`},lt={class:`tag-info-card`},ut={class:`info-icon`},dt={class:`info-content`},ft={class:`form-tip`},pt={class:`form-tip`},mt={class:`form-tip`},ht=Z(J({__name:`CreateTagButton`,props:{variant:{default:`icon`}},setup(t){let n=t,r=Q(),a=z(!1),o=z(``),c=z(``),l=z(`lightweight`),u=z(``),d=z(!1);function p(){o.value=``,c.value=``,l.value=`lightweight`,u.value=``,a.value=!0}async function h(){if(!o.value.trim()){N.warning(X(`@TAG01:请输入标签名称`));return}if(!/^[a-zA-Z0-9._\/-]+$/.test(o.value)){N.warning(X(`@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符`));return}try{d.value=!0;let e=await(await fetch(`/api/create-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:o.value.trim(),message:c.value.trim(),type:l.value,commit:u.value.trim()})})).json();e.success?(N.success(X(`@TAG01:标签创建成功`)),a.value=!1):N.error(e.error||X(`@TAG01:创建标签失败`))}catch(e){console.error(`创建标签失败:`,e),N.error(X(`@TAG01:创建标签失败`))}finally{d.value=!1}}let g=W(()=>l.value===`lightweight`?X(`@TAG01:轻量标签是指向提交对象的引用,不包含额外信息`):X(`@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名`));return(t,v)=>{let y=j,b=e,x=i,S=k,C=G,w=m,D=_,A=f;return s(),M(`div`,st,[T(x,{content:q(X)(`@TAG01:为当前提交创建标签`),placement:`top`,"show-after":200,disabled:n.variant===`text`},{default:K(()=>[T(b,{type:`success`,onClick:p,disabled:!q(r).isGitRepo,circle:n.variant===`icon`,size:n.variant===`icon`?`small`:`default`,class:F(n.variant===`text`?`action-button`:``)},{default:K(()=>[n.variant===`icon`?(s(),L(y,{key:0},{default:K(()=>[T(q(O))]),_:1})):(s(),M(B,{key:1},[Y(H(q(X)(`@TAG01:创建标签`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),T(xe,{modelValue:a.value,"onUpdate:modelValue":v[4]||=e=>a.value=e,title:q(X)(`@TAG01:创建 Git 标签`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":q(X)(`@TAG01:创建`),"cancel-text":q(X)(`@TAG01:取消`),"confirm-loading":d.value,"custom-class":`tag-dialog`,onConfirm:h},{default:K(()=>[V(`div`,ct,[V(`div`,lt,[V(`div`,ut,[T(y,null,{default:K(()=>[T(q(O))]),_:1})]),V(`div`,dt,[V(`h4`,null,H(q(X)(`@TAG01:Git 标签`)),1),V(`p`,null,H(q(X)(`@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0`)),1)])]),T(A,{"label-position":`top`,class:`tag-form`},{default:K(()=>[T(C,{label:q(X)(`@TAG01:标签名称`),required:``},{default:K(()=>[T(S,{modelValue:o.value,"onUpdate:modelValue":v[0]||=e=>o.value=e,placeholder:q(X)(`@TAG01:例如: v1.0.0 或 release-2024`),clearable:``,maxlength:`100`},{prefix:K(()=>[T(y,null,{default:K(()=>[T(q(O))]),_:1})]),_:1},8,[`modelValue`,`placeholder`]),V(`div`,ft,[T(y,null,{default:K(()=>[T(q(E))]),_:1}),V(`span`,null,H(q(X)(`@TAG01:建议使用语义化版本号,如 v1.0.0`)),1)])]),_:1},8,[`label`]),T(C,{label:q(X)(`@TAG01:标签类型`)},{default:K(()=>[T(D,{modelValue:l.value,"onUpdate:modelValue":v[1]||=e=>l.value=e,size:`default`},{default:K(()=>[T(w,{value:`lightweight`},{default:K(()=>[Y(H(q(X)(`@TAG01:轻量标签`)),1)]),_:1}),T(w,{value:`annotated`},{default:K(()=>[Y(H(q(X)(`@TAG01:附注标签`)),1)]),_:1})]),_:1},8,[`modelValue`]),V(`div`,pt,[T(y,null,{default:K(()=>[T(q(E))]),_:1}),V(`span`,null,H(g.value),1)])]),_:1},8,[`label`]),l.value===`annotated`?(s(),L(C,{key:0,label:q(X)(`@TAG01:标签说明`),required:l.value===`annotated`},{default:K(()=>[T(S,{modelValue:c.value,"onUpdate:modelValue":v[2]||=e=>c.value=e,placeholder:q(X)(`@TAG01:为此标签添加说明信息`),clearable:``,rows:3,type:`textarea`,resize:`none`,maxlength:`500`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`required`])):I(``,!0),T(C,{label:q(X)(`@TAG01:目标提交(可选)`)},{default:K(()=>[T(S,{modelValue:u.value,"onUpdate:modelValue":v[3]||=e=>u.value=e,placeholder:q(X)(`@TAG01:留空则为当前HEAD,或输入commit SHA`),clearable:``,maxlength:`40`},{prefix:K(()=>[...v[5]||=[V(`span`,{class:`commit-prefix`},`commit:`,-1)]]),_:1},8,[`modelValue`,`placeholder`]),V(`div`,mt,[T(y,null,{default:K(()=>[T(q(E))]),_:1}),V(`span`,null,H(q(X)(`@TAG01:默认为当前HEAD提交,也可以指定历史提交`)),1)])]),_:1},8,[`label`])]),_:1})])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])])}}}),[[`__scopeId`,`data-v-cbbcdcda`]]),gt={class:`tag-list-button`},_t={class:`tag-list-content`},vt={key:0,class:`tag-header`},yt={class:`tag-stats`},bt={class:`stat-item`},xt={class:`stat-number`},St={class:`stat-label`},Ct={class:`tag-actions-header`},wt={class:`tag-list-container`},Tt={key:0,class:`empty-state`},Et={class:`empty-text`},Dt={class:`empty-hint`},Ot={key:1,class:`tag-cards`},kt={class:`tag-card-content`},At={class:`tag-info`},jt={class:`tag-main-info`},Mt={class:`tag-name-badge`},Nt={class:`tag-name-text`},Pt={class:`tag-meta`},Ft={class:`tag-commit`},It={class:`tag-date`},Lt={key:0,class:`tag-message`},Rt={class:`tag-card-actions`},zt={key:0,class:`tag-detail-content`},Bt={class:`detail-row`},Vt={class:`detail-label`},Ht={class:`detail-value`},Ut={class:`detail-row`},Wt={class:`detail-label`},Gt={class:`detail-value`},Kt={class:`detail-row`},qt={class:`detail-label`},Jt={class:`detail-value`},Yt={class:`detail-row`},Xt={class:`detail-label`},Zt={key:0,class:`detail-row detail-message`},Qt={class:`detail-label`},$t={class:`message-content`},en=Z(J({__name:`TagListButton`,props:{variant:{default:`icon`}},setup(t){let n=t,r=Q(),a=z(!1),o=z([]),l=z(!1),f=z(!1),p=z(!1),m=z(!1),h=z(null);async function g(){a.value=!0,await _()}async function _(){try{l.value=!0;let e=await(await fetch(`/api/list-tags`)).json();e.success?o.value=e.tags||[]:N.error(e.error||X(`@TAG01:获取标签列表失败`))}catch(e){console.error(`获取标签列表失败:`,e),N.error(X(`@TAG01:获取标签列表失败`))}finally{l.value=!1}}function v(e){h.value=e,m.value=!0}async function y(e){R.confirm(X(`@TAG01:确定要推送此标签到远程仓库吗?`),X(`@TAG01:推送标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{p.value=!0;let t=await(await fetch(`/api/push-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?N.success(X(`@TAG01:标签推送成功`)):N.error(t.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),N.error(X(`@TAG01:推送标签失败`))}finally{p.value=!1}}).catch(()=>{})}async function b(){R.confirm(X(`@TAG01:确定要推送所有标签到远程仓库吗?`),X(`@TAG01:推送所有标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{p.value=!0;let e=await(await fetch(`/api/push-all-tags`,{method:`POST`})).json();e.success?N.success(X(`@TAG01:所有标签推送成功`)):N.error(e.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),N.error(X(`@TAG01:推送标签失败`))}finally{p.value=!1}}).catch(()=>{})}async function x(e){R.confirm(X(`@TAG01:确定要删除此标签吗?此操作不可恢复。`),X(`@TAG01:删除标签`),{confirmButtonText:X(`@TAG01:删除`),cancelButtonText:X(`@TAG01:取消`),type:`warning`}).then(async()=>{await C(e)}).catch(()=>{})}async function C(e){try{f.value=!0;let t=await(await fetch(`/api/delete-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?(N.success(X(`@TAG01:标签删除成功`)),await _()):N.error(t.error||X(`@TAG01:删除标签失败`))}catch(e){console.error(`删除标签失败:`,e),N.error(X(`@TAG01:删除标签失败`))}finally{f.value=!1}}function D(e){if(!e)return`-`;try{return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}catch{return e}}return(t,C)=>{let k=j,A=e,N=i,ee=w,te=he,P=ce;return s(),M(`div`,gt,[T(N,{content:q(X)(`@TAG01:查看和管理所有标签`),placement:`top`,"show-after":200,disabled:n.variant===`text`},{default:K(()=>[T(A,{type:`info`,onClick:g,disabled:!q(r).isGitRepo,circle:n.variant===`icon`,size:n.variant===`icon`?`small`:`default`,class:F(n.variant===`text`?`action-button`:``)},{default:K(()=>[n.variant===`icon`?(s(),L(k,{key:0},{default:K(()=>[T(q(O))]),_:1})):(s(),M(B,{key:1},[Y(H(q(X)(`@TAG01:标签列表`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),T(xe,{modelValue:a.value,"onUpdate:modelValue":C[0]||=e=>a.value=e,title:q(X)(`@TAG01:Git 标签列表`),size:`large`,"show-footer":!1,"custom-class":`tag-list-dialog`},{default:K(()=>[V(`div`,_t,[l.value?I(``,!0):(s(),M(`div`,vt,[V(`div`,yt,[V(`div`,bt,[T(k,{class:`stat-icon`},{default:K(()=>[T(q(O))]),_:1}),V(`span`,xt,H(o.value.length),1),V(`span`,St,H(q(X)(`@TAG01:个标签`)),1)])]),V(`div`,Ct,[T(A,{type:`primary`,size:`small`,icon:q(c),onClick:_,loading:l.value,class:`refresh-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:刷新`)),1)]),_:1},8,[`icon`,`loading`]),o.value.length>0?(s(),L(A,{key:0,type:`success`,size:`small`,icon:q(d),onClick:b,loading:p.value,class:`push-all-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:推送所有标签`)),1)]),_:1},8,[`icon`,`loading`])):I(``,!0)])])),u((s(),M(`div`,wt,[o.value.length===0&&!l.value?(s(),M(`div`,Tt,[T(ee,{description:q(X)(`@TAG01:暂无标签`),"image-size":120},{image:K(()=>[T(k,{class:`empty-icon`},{default:K(()=>[T(q(O))]),_:1})]),description:K(()=>[V(`p`,Et,H(q(X)(`@TAG01:还没有创建任何标签`)),1),V(`p`,Dt,H(q(X)(`@TAG01:使用创建标签功能为项目添加版本标记`)),1)]),_:1},8,[`description`])])):(s(),M(`div`,Ot,[(s(!0),M(B,null,S(o.value,e=>(s(),M(`div`,{key:e.name,class:`tag-card`},[V(`div`,kt,[V(`div`,At,[V(`div`,jt,[V(`div`,Mt,[T(k,{class:`badge-icon`},{default:K(()=>[T(q(O))]),_:1}),V(`span`,Nt,H(e.name),1),T(te,{size:`small`,type:e.type===`annotated`?`warning`:`info`,class:`type-tag`},{default:K(()=>[Y(H(e.type===`annotated`?q(X)(`@TAG01:附注`):q(X)(`@TAG01:轻量`)),1)]),_:2},1032,[`type`])]),V(`div`,Pt,[V(`span`,Ft,[T(k,null,{default:K(()=>[T(q(E))]),_:1}),Y(` `+H(e.commit.substring(0,8)),1)]),V(`span`,It,H(D(e.date)),1)]),e.message?(s(),M(`div`,Lt,H(e.message),1)):I(``,!0)])]),V(`div`,Rt,[e.message?(s(),L(A,{key:0,size:`small`,type:`info`,onClick:t=>v(e),class:`action-btn view-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:查看`)),1)]),_:1},8,[`onClick`])):I(``,!0),T(A,{size:`small`,type:`success`,icon:q(d),onClick:t=>y(e.name),loading:p.value,class:`action-btn push-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:推送`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),T(A,{size:`small`,type:`danger`,icon:q(ae),onClick:t=>x(e.name),loading:f.value,class:`action-btn delete-btn`},{default:K(()=>[Y(H(q(X)(`@TAG01:删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`])])])]))),128))]))])),[[P,l.value]])])]),_:1},8,[`modelValue`,`title`]),T(xe,{modelValue:m.value,"onUpdate:modelValue":C[1]||=e=>m.value=e,title:q(X)(`@TAG01:标签详情`),size:`medium`,"show-footer":!1,"custom-class":`tag-detail-dialog`},{default:K(()=>[h.value?(s(),M(`div`,zt,[V(`div`,Bt,[V(`span`,Vt,H(q(X)(`@TAG01:标签名称:`)),1),V(`code`,Ht,H(h.value.name),1)]),V(`div`,Ut,[V(`span`,Wt,H(q(X)(`@TAG01:提交SHA:`)),1),V(`code`,Gt,H(h.value.commit),1)]),V(`div`,Kt,[V(`span`,qt,H(q(X)(`@TAG01:创建时间:`)),1),V(`span`,Jt,H(D(h.value.date)),1)]),V(`div`,Yt,[V(`span`,Xt,H(q(X)(`@TAG01:类型:`)),1),T(te,{type:h.value.type===`annotated`?`warning`:`info`,size:`small`},{default:K(()=>[Y(H(h.value.type===`annotated`?q(X)(`@TAG01:附注标签`):q(X)(`@TAG01:轻量标签`)),1)]),_:1},8,[`type`])]),h.value.message?(s(),M(`div`,Zt,[V(`span`,Qt,H(q(X)(`@TAG01:标签说明:`)),1),V(`div`,$t,H(h.value.message),1)])):I(``,!0)])):I(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-fc8d7e86`]]),tn={class:`git-operations-button`},nn={class:`actions-section`},rn={class:`action-groups`},an={class:`action-group`},on={class:`group-title`},sn={class:`group-buttons`},cn={key:0},ln={class:`action-group`},un={class:`group-title`},dn={class:`group-buttons`},fn={class:`action-group`},pn={class:`group-title`},mn={class:`group-buttons`},hn={key:0},gn={class:`action-group`},_n={class:`group-title`},vn={class:`group-buttons`},yn={class:`action-group`},bn={class:`group-title`},xn={class:`group-buttons`},Sn={class:`action-group`},Cn={class:`group-title`},wn={class:`group-buttons`},Tn={class:`pull-error-content`},En={key:0},Dn={key:1},On={class:`pull-error-detail`},kn={class:`pull-error-label`},An={class:`pull-error-pre`},jn=Z(J({__name:`GitOperationsButton`,props:{variant:{default:`icon`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`afterCommit`,`afterPush`,`beforePush`,`clearFields`],setup(t,{expose:r,emit:a}){let o=t,c=a,l=Q(),u=z(!1),d=z(!1),f=z({needsMerge:!1,error:``,fullError:``,pullOutput:``});function p(){u.value=!0}let m=W(()=>l.fileList.filter(e=>e.type===`added`).length),h=W(()=>l.branchBehind>0),_=W(()=>l.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)));async function v(){try{let e=await l.gitPull();e.success?(await l.fetchStatus(),await l.fetchLog(!1)):(f.value={needsMerge:e.needsMerge,error:e.error,fullError:e.fullError,pullOutput:e.pullOutput},d.value=!0)}catch(e){console.error(`拉取失败:`,e)}}async function y(){try{await l.gitFetchAll(),await l.fetchStatus(),await l.fetchLog(!1)}catch(e){console.error(`获取远程分支失败:`,e)}}async function b(){if(o.hasUserCommitMessage)try{await l.addAndCommit(o.finalCommitMessage,o.skipHooks),l.fetchStatus(),l.fetchLog(),c(`afterCommit`,!0),c(`clearFields`)}catch(e){console.error(`暂存并提交失败:`,e)}}function x(){c(`beforePush`)}function S(e){c(`afterPush`,e)}function w(){c(`clearFields`)}return r({openGitOperationsDrawer:p}),(r,a)=>{let D=j,O=e,k=i,A=n;return s(),M(`div`,tn,[o.variant===`icon`?(s(),L(ye,{key:0,tooltip:q(X)(`@F13B4:Git 操作`),size:`large`,"custom-class":`btn-rotate-on-hover`,onClick:p},{default:K(()=>[T(D,null,{default:K(()=>[T(q(g))]),_:1})]),_:1},8,[`tooltip`])):(s(),L(O,{key:1,type:`primary`,class:`action-button`,onClick:p},{default:K(()=>[Y(H(q(X)(`@F13B4:Git 操作`)),1)]),_:1})),T(A,{modelValue:u.value,"onUpdate:modelValue":a[2]||=e=>u.value=e,title:q(X)(`@76872:Git 操作`),direction:`rtl`,size:`362px`,"with-header":!0,"show-close":!0,"destroy-on-close":!1,"append-to-body":!0,class:`git-operations-drawer`},{default:K(()=>[V(`div`,nn,[V(`div`,rn,[V(`div`,an,[V(`div`,on,H(q(X)(`@76872:基础操作`)),1),V(`div`,sn,[T(Me,{onClick:()=>{},from:`drawer`}),T(Oe,{onClick:()=>{},from:`drawer`}),T(Pe,{"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforeCommit:()=>{},onAfterCommit:a[0]||=e=>c(`afterCommit`,e),onClick:()=>{},from:`drawer`},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),T(tt,{onBeforePush:()=>{},onAfterPush:a[1]||=e=>c(`afterPush`,e),onClick:()=>{},from:`drawer`}),T(k,{content:q(l).hasConflictedFiles?q(X)(`@76872:存在冲突文件,请先解决冲突`):h.value?`${q(X)(`@76872:拉取`)}${q(l).branchBehind}${q(X)(`@76872:个远程提交`)}`:`git pull`,placement:`top`},{default:K(()=>[T(O,{type:`primary`,icon:q(U),onClick:v,loading:q(l).isGitPulling,disabled:!q(l).hasUpstream||q(l).hasConflictedFiles,class:`action-button`,style:de(q(l).hasUpstream&&!q(l).hasConflictedFiles?{color:`white`,backgroundColor:`#1e90ff`,borderColor:`#1e90ff`}:{})},{default:K(()=>[Y(H(q(X)(`@76872:拉取`))+` `,1),h.value?(s(),M(`span`,cn,`(`+H(q(l).branchBehind)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`])]),_:1},8,[`content`]),T(k,{content:`git fetch --all`,placement:`top`},{default:K(()=>[T(O,{type:`info`,icon:q(fe),onClick:y,loading:q(l).isGitFetching,class:`action-button`,style:{color:`white`,"background-color":`#1e90ff`,"border-color":`#1e90ff`}},{default:K(()=>[Y(H(q(X)(`@76872:获取所有远程分支`)),1)]),_:1},8,[`icon`,`loading`])]),_:1})])]),V(`div`,ln,[V(`div`,un,H(q(X)(`@76872:组合操作`)),1),V(`div`,dn,[T(k,{content:q(l).hasConflictedFiles?q(X)(`@76872:存在冲突文件,请先解决冲突`):`git add + git commit`,placement:`top`},{default:K(()=>[T(O,{type:`primary`,icon:q(ie),onClick:b,loading:q(l).isAddingFiles||q(l).isCommiting,disabled:!_.value||!t.hasUserCommitMessage||q(l).hasConflictedFiles,class:`action-button`},{default:K(()=>[Y(H(q(X)(`@76872:暂存并提交`)),1)]),_:1},8,[`icon`,`loading`,`disabled`])]),_:1},8,[`content`]),T(ot,{from:`drawer`,"has-user-commit-message":t.hasUserCommitMessage,"final-commit-message":t.finalCommitMessage,"skip-hooks":t.skipHooks,onBeforePush:x,onAfterPush:S,onClearFields:w},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])]),V(`div`,fn,[V(`div`,pn,H(q(X)(`@76872:重置操作`)),1),V(`div`,mn,[T(k,{content:m.value>0?`${q(X)(`@76872:撤销`)}${m.value}${q(X)(`@76872:个已暂存文件`)}`:`git reset HEAD`,placement:`top`},{default:K(()=>[T(O,{type:`warning`,icon:q(C),onClick:q(l).resetHead,loading:q(l).isResetting,disabled:m.value===0||q(l).hasConflictedFiles,class:`action-button reset-button`},{default:K(()=>[Y(H(q(X)(`@76872:重置暂存区`))+` `,1),m.value>0?(s(),M(`span`,hn,`(`+H(m.value)+`)`,1)):I(``,!0)]),_:1},8,[`icon`,`onClick`,`loading`,`disabled`])]),_:1},8,[`content`]),T(ke,{variant:`text`})])]),V(`div`,gn,[V(`div`,_n,H(q(X)(`@76872:分支操作`)),1),V(`div`,vn,[T(we,{variant:`text`})])]),V(`div`,yn,[V(`div`,bn,H(q(X)(`@76872:储藏操作`)),1),V(`div`,xn,[T(De,{variant:`text`}),T(Te,{variant:`text`})])]),V(`div`,Sn,[V(`div`,Cn,H(q(X)(`@TAG01:标签操作`)),1),V(`div`,wn,[T(ht,{variant:`text`}),T(en,{variant:`text`})])])])])]),_:1},8,[`modelValue`,`title`]),T(xe,{modelValue:d.value,"onUpdate:modelValue":a[3]||=e=>d.value=e,title:f.value.needsMerge?q(X)(`@76872:需要合并更改`):q(X)(`@76872:拉取失败`),size:`medium`,"show-footer":!0,"show-cancel":!1,"confirm-text":q(X)(`@76872:我知道了`),"append-to-body":!0,onConfirm:a[4]||=e=>d.value=!1},{default:K(()=>[V(`div`,Tn,[V(`div`,{class:F([`pull-error-type`,f.value.needsMerge?`is-warning`:`is-error`])},[T(D,{class:`pull-error-icon`},{default:K(()=>[T(q(E))]),_:1}),f.value.needsMerge?(s(),M(`span`,En,H(q(X)(`@76872:本地存在未提交的更改,与远程内容冲突,请先处理本地更改后再拉取。`)),1)):(s(),M(`span`,Dn,H(q(X)(`@76872:执行 git pull 时发生错误,请查看详细信息。`)),1))],2),V(`div`,On,[V(`div`,kn,H(q(X)(`@76872:错误详情`))+`:`,1),V(`pre`,An,H(f.value.fullError||f.value.error),1)])])]),_:1},8,[`modelValue`,`title`,`confirm-text`])])}}}),[[`__scopeId`,`data-v-58350746`]]),Mn={class:`loading-container`},Nn={class:`loading-text`},Pn={key:0,class:`loading-progress`},Fn=Z(J({__name:`GlobalLoading`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@2AEBA:加载中...`)},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(e){return(t,n)=>(s(),L(ne,{to:`body`},[T(re,{name:`loading-fade`},{default:K(()=>[e.visible||e.mock?(s(),M(`div`,{key:0,class:`global-loading-overlay`,onClick:n[0]||=te(()=>{},[`stop`])},[V(`div`,Mn,[n[1]||=V(`div`,{class:`loading-spinner`},[V(`div`,{class:`spinner-ring`}),V(`div`,{class:`spinner-ring`}),V(`div`,{class:`spinner-ring`})],-1),V(`div`,Nn,H(e.text),1),e.showProgress||e.mock?(s(),M(`div`,Pn,[V(`div`,{class:F([`progress-bar`,{"is-mock":e.mock&&!e.showProgress}]),style:de(e.showProgress?{width:e.progress+`%`}:void 0)},null,6)])):I(``,!0)])])):I(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-6d13a220`]]),In={class:`success-container`},Ln={class:`success-text`},Rn={key:0,class:`success-description`},zn=Z(J({__name:`SuccessModal`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@71545:操作成功!`)},description:{default:``}},setup(e){return(t,n)=>(s(),L(ne,{to:`body`},[T(re,{name:`success-fade`},{default:K(()=>[e.visible?(s(),M(`div`,{key:0,class:`success-overlay`,onClick:n[0]||=te(()=>{},[`stop`])},[V(`div`,In,[n[1]||=V(`div`,{class:`success-icon`},[V(`svg`,{viewBox:`0 0 52 52`,class:`success-svg`},[V(`circle`,{class:`success-circle`,cx:`26`,cy:`26`,r:`25`,fill:`none`}),V(`path`,{class:`success-check`,fill:`none`,d:`m14.1 27.2l7.1 7.2 16.7-16.8`})])],-1),V(`div`,Ln,H(e.text),1),e.description?(s(),M(`div`,Rn,H(e.description),1)):I(``,!0)])])):I(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-c10f43b3`]]),$=oe({visible:!1,text:X(`@F2A3A:加载中...`),showProgress:!1,progress:0});function Bn(){return{loadingState:$,show:e=>{$.visible=!0,$.text=e?.text||X(`@F2A3A:加载中...`),$.showProgress=e?.showProgress||!1,$.progress=e?.progress||0},hide:()=>{$.visible=!1},updateProgress:e=>{$.progress=Math.max(0,Math.min(100,e))},updateText:e=>{$.text=e},setText:e=>{$.visible&&($.text=e)}}}var Vn=oe({visible:!1,text:X(`@B8591:操作成功!`),description:``});function Hn(){let e=e=>{Vn.visible=!0,Vn.text=e?.text||X(`@B8591:操作成功!`),Vn.description=e?.description||``;let n=e?.duration||2e3;setTimeout(()=>{t()},n)},t=()=>{Vn.visible=!1};return{successState:Vn,show:e,hide:t}}var Un={class:`one-commit-content`},Wn={class:`one-commit-text`},Gn={class:`one-commit-title`},Kn={key:0,class:`one-commit-desc`},qn=Z(J({__name:`QuickCommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforeCommit`,`afterCommit`,`clearFields`],setup(t,{expose:n,emit:r}){let a=Q(),o=ve(),c=t,l=r,u=W(()=>a.fileList.some(e=>!Ee(e.path,o.lockedFiles))),d=W(()=>a.isSelectionMode&&a.selectedFiles.size>0&&a.selectedUnstagedPaths.length>0),f=W(()=>a.hasConflictedFiles?!0:a.isSelectionMode?!d.value||!c.hasUserCommitMessage:!u.value||!c.hasUserCommitMessage),p=W(()=>a.isAddingFiles||a.isCommiting),m=W(()=>a.hasConflictedFiles?X(`@2E184:存在冲突文件,请先解决冲突`):a.isSelectionMode?a.selectedFiles.size===0?X(`@2E184:请先勾选要提交的文件`):a.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):c.hasUserCommitMessage?X(`@2E184:一键完成:仅暂存所选文件 → 提交`):X(`@2E184:请输入提交信息`):u.value?c.hasUserCommitMessage?X(`@2E184:一键完成:暂存所有更改 → 提交`):X(`@2E184:请输入提交信息`):X(`@2E184:没有需要提交的更改`)),h=W(()=>a.isSelectionMode&&d.value?X(`@2E184:一键提交所选`):X(`@2E184:一键提交`)),g=W(()=>c.from===`form`?a.isSelectionMode&&d.value?X(`@2E184:暂存所选 + 提交`):X(`@2E184:暂存 + 提交`):``);async function _(){l(`beforeCommit`);try{let e=await a.stageSelectedAndCommit(c.finalCommitMessage,c.skipHooks);e&&l(`clearFields`),l(`afterCommit`,e)}catch(e){console.error(`一键提交失败:`,e),l(`afterCommit`,!1)}}return n({triggerQuickCommit:_}),(n,r)=>{let a=j,o=e;return s(),M(`div`,null,[T(q(i),{content:m.value,placement:`top`,"show-after":200},{default:K(()=>[T(o,{type:`primary`,onClick:_,loading:p.value,disabled:f.value,class:F([t.from,`one-commit-button`])},{default:K(()=>[V(`div`,Un,[T(a,{class:`one-commit-icon`},{default:K(()=>[T(q(ie))]),_:1}),V(`div`,Wn,[V(`span`,Gn,H(h.value),1),t.from===`form`?(s(),M(`span`,Kn,H(g.value),1)):I(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}}}),[[`__scopeId`,`data-v-0bcf5e9d`]]),Jn={class:`form-bottom-actions`},Yn={class:`actions-flex-container`},Xn={class:`left-actions`},Zn={class:`button-grid`},Qn={class:`right-actions`},$n=Z(J({__name:`GitActionButtons`,props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1},from:{default:`form`}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`],setup(e,{expose:t,emit:n}){let r=n,i=z(null);function a(e){r(`afterCommit`,e)}function o(e){r(`afterPush`,e)}function c(){r(`beforePush`)}function l(){r(`pushStart`)}function u(){r(`clearFields`)}async function d(){return i.value?.triggerQuickPush()}return t({triggerQuickPush:d}),(t,n)=>(s(),M(`div`,Jn,[V(`div`,Yn,[V(`div`,Xn,[V(`div`,Zn,[T(Me,{onClick:()=>{},from:e.from},null,8,[`from`]),T(Pe,{"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforeCommit:()=>{},onAfterCommit:a,onClick:()=>{},from:e.from},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`,`from`]),T(tt,{onBeforePush:()=>{},onAfterPush:o,onClick:()=>{},from:e.from},null,8,[`from`])])]),V(`div`,Qn,[T(qn,{from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onAfterCommit:a,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),T(ot,{ref_key:`quickPushRef`,ref:i,from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforePush:c,onPushStart:l,onAfterPush:o,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])])]))}}),[[`__scopeId`,`data-v-2f7ac0a2`]]),er={class:`dialog-toolbar`},tr={class:`filter-controls`},nr={class:`toolbar-actions`},rr=[`disabled`],ir={class:`btn-text`},ar=[`disabled`],or={class:`btn-text`},sr=[`disabled`],cr={class:`btn-text`},lr={class:`history-scroll`},ur={key:0,class:`loading-state`},dr={class:`loading-text`},fr={key:3,class:`history-list`},pr=[`onClick`],mr={class:`command-info`},hr={class:`command-text`},gr={class:`command-meta`},_r={class:`timestamp`},vr={class:`duration`},yr={class:`item-actions`},br={key:0,class:`item-details`},xr={key:0,class:`output-section`},Sr={class:`output-header`},Cr=[`onClick`],wr={class:`output-content`},Tr={key:0,class:`truncation-notice`},Er={class:`output-header`},Dr={class:`output-content`},Or={key:0,class:`truncation-notice`},kr={key:2,class:`output-section error`},Ar={class:`output-header`},jr={class:`output-content`},Mr=Z(J({__name:`CommandHistory`,setup(e){let t=Q(),n=z([]),a=z(!1);function o(e){return Array.isArray(e)?e.join(` `):e==null?``:String(e)}let c=z(!1),u=z(!1),d=z(!1),f=z(new Set),m=z(!1),h=z(!1),g=z(`all`),_=z(`all`),y=z(``),C=W(()=>{let e=n.value;if(g.value!==`all`&&(e=e.filter(e=>g.value===`success`?e.success:!e.success)),_.value!==`all`&&(e=e.filter(e=>{let t=o(e.command).startsWith(`git `);return _.value===`git`?t:!t})),y.value.trim()){let t=y.value.toLowerCase();e=e.filter(e=>o(e.command).toLowerCase().includes(t)||e.stdout&&e.stdout.toLowerCase().includes(t)||e.stderr&&e.stderr.toLowerCase().includes(t)||e.error&&e.error.toLowerCase().includes(t))}return e}),E=W(()=>n.value.filter(e=>e.success).length),O=W(()=>n.value.filter(e=>!e.success).length),ne=W(()=>n.value.filter(e=>o(e.command).startsWith(`git `)).length),re=W(()=>n.value.filter(e=>!o(e.command).startsWith(`git `)).length);function ie(){h.value=!0,n.value.length===0&&U()}async function U(){try{if(a.value=!0,t.socket&&t.socket.connected)t.socket.emit(`request_full_history`);else{let e=await(await fetch(`/api/command-history`)).json();e.success?n.value=e.history:N.error(`${X(`@81F0F:加载命令历史失败: `)}${e.error}`)}}catch(e){N.error(`${X(`@81F0F:加载命令历史失败: `)}${e.message}`)}finally{a.value=!1}}async function oe(){if(C.value.length===0){N.warning(X(`@81F0F:没有可复制的命令历史`));return}try{u.value=!0;let e=C.value.map(e=>{let t=`# ${le(e.timestamp)}${X(`@81F0F: (耗时: `)}${ue(e.executionTime)}) - ${e.success?X(`@81F0F:成功`):X(`@81F0F:失败`)}\n`;if(t+=`${o(e.command)}\n`,e.stdout&&(t+=`\n# 输出:\n${e.stdout}\n`),e.stderr){let n=me(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`\n# ${n}:\n${e.stderr}\n`}return e.error&&(t+=`\n# 错误信息:\n${e.error}\n`),t}).join(`
2
2
  ---
3
3
 
4
4
  `);await navigator.clipboard.writeText(e),N({message:X(`@81F0F:命令历史已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){N.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}finally{u.value=!1}}async function se(){if(C.value.length===0){N.warning(X(`@81F0F:没有可复制的命令`));return}try{m.value=!0;let e=C.value.map(e=>o(e.command)).join(`
5
- `);await navigator.clipboard.writeText(e),N({message:X(`@81F0F:命令列表已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){N.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}finally{m.value=!1}}async function ce(){try{if(await R.confirm(X(`@81F0F:确定要清空所有命令历史记录吗?此操作不可恢复。`),X(`@81F0F:清空命令历史`),{confirmButtonText:X(`@81F0F:确定`),cancelButtonText:X(`@81F0F:取消`),type:`warning`}),c.value=!0,t.socket&&t.socket.connected)t.socket.emit(`clear_command_history`);else{let e=await(await fetch(`/api/clear-command-history`,{method:`POST`,headers:{"Content-Type":`application/json`}})).json();e.success?(n.value=[],N.success(X(`@81F0F:命令历史已清空`))):N.error(`${X(`@81F0F:清空命令历史失败: `)}${e.error}`)}}catch(e){e!==`cancel`&&e.toString()!==`Error: cancel`&&N.error(`${X(`@81F0F:清空命令历史失败: `)}${e.message}`)}finally{c.value=!1}}function le(e){return new Date(e).toLocaleString()}function ue(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}function de(e){f.value.has(e)?f.value.delete(e):f.value.add(e)}function G(e){return f.value.has(e)}async function fe(e){try{await navigator.clipboard.writeText(e),N({message:X(`@81F0F:命令已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){N.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}}function pe(e){return e.includes(`git push`)||e.includes(`git-push`)}function me(e){return!!pe(o(e))}async function J(e){try{let t=``;if(e.stdout&&(t+=`标准输出:\n${e.stdout}\n\n`),e.stderr){let n=me(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`${n}:\n${e.stderr}\n\n`}e.error&&(t+=`错误信息:\n${e.error}`),await navigator.clipboard.writeText(t.trim()),N({message:X(`@81F0F:输出已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){N.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}}function _e(){if(!t.socket){console.error(X(`@81F0F:Socket实例不可用`));return}t.socket.on(`initial_command_history`,e=>{n.value=e.history,d.value=!0}),t.socket.on(`command_history_update`,e=>{n.value.unshift(e.newCommand),n.value.length>100&&n.value.pop(),d.value=!0}),t.socket.on(`full_command_history`,e=>{n.value=e.history,a.value=!1,d.value=!0}),t.socket.on(`command_history_cleared`,e=>{e.success&&(n.value=[],N.success(X(`@81F0F:命令历史已清空`))),c.value=!1}),t.socket.on(`connect`,()=>{d.value=!0,N.success(X(`@81F0F:已连接到实时命令历史`))}),t.socket.on(`disconnect`,()=>{d.value=!1,N.warning(X(`@81F0F:实时命令历史连接已断开`))})}function Z(){t.socket&&(t.socket.off(`initial_command_history`),t.socket.off(`command_history_update`),t.socket.off(`full_command_history`),t.socket.off(`command_history_cleared`))}return v(()=>{_e(),t.socket||(console.log(X(`@81F0F:尝试初始化Socket连接`)),t.initSocketConnection())}),r(()=>{Z()}),(e,t)=>{let r=j,f=he,v=p,N=x,R=k,z=i,U=w,W=l;return s(),M(B,null,[T(be,{tooltip:q(X)(`@81F0F:查看Git命令历史`),size:`large`,onClick:ie},{default:K(()=>[T(r,null,{default:K(()=>[T(q(ee))]),_:1})]),_:1},8,[`tooltip`]),T(ye,{modelValue:h.value,"onUpdate:modelValue":t[3]||=e=>h.value=e,title:q(X)(`@81F0F:Git 命令历史`),"destroy-on-close":``,"custom-class":`command-history-dialog`,"append-to-body":!0},{default:K(()=>[V(`div`,er,[T(f,{type:d.value?`success`:`danger`,size:`small`,effect:`dark`,class:`socket-status`},{default:K(()=>[Y(H(d.value?q(X)(`@81F0F:实时更新`):q(X)(`@81F0F:未连接`)),1)]),_:1},8,[`type`]),V(`div`,tr,[T(N,{modelValue:g.value,"onUpdate:modelValue":t[0]||=e=>g.value=e,size:`small`,class:`filter-select`},{default:K(()=>[T(v,{label:`全部状态`,value:`all`}),T(v,{label:`成功 (${E.value})`,value:`success`},null,8,[`label`]),T(v,{label:`失败 (${O.value})`,value:`error`},null,8,[`label`])]),_:1},8,[`modelValue`]),T(N,{modelValue:_.value,"onUpdate:modelValue":t[1]||=e=>_.value=e,size:`small`,class:`filter-select`},{default:K(()=>[T(v,{label:`全部命令`,value:`all`}),T(v,{label:`Git 命令 (${ne.value})`,value:`git`},null,8,[`label`]),T(v,{label:`其他命令 (${re.value})`,value:`other`},null,8,[`label`])]),_:1},8,[`modelValue`]),T(R,{modelValue:y.value,"onUpdate:modelValue":t[2]||=e=>y.value=e,size:`small`,placeholder:`搜索命令或输出...`,clearable:``,class:`search-input`},{prefix:K(()=>[T(r,null,{default:K(()=>[T(q(ge))]),_:1})]),_:1},8,[`modelValue`])]),V(`div`,nr,[T(z,{content:q(X)(`@81F0F:只复制命令列表(不含输出)`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn copy-commands-button enhanced-btn`,onClick:se,disabled:C.value.length===0||m.value},[m.value?(s(),L(r,{key:1,class:`btn-icon is-loading`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(r,{key:0,class:`btn-icon`},{default:K(()=>[T(q(P))]),_:1})),V(`span`,ir,H(q(X)(`@81F0F:命令`)),1)],8,rr)]),_:1},8,[`content`]),T(z,{content:q(X)(`@81F0F:复制完整命令历史(含输出)`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn copy-all-button enhanced-btn`,onClick:oe,disabled:C.value.length===0||u.value},[u.value?(s(),L(r,{key:1,class:`btn-icon is-loading`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(r,{key:0,class:`btn-icon`},{default:K(()=>[T(q(P))]),_:1})),V(`span`,or,H(q(X)(`@81F0F:全部`)),1)],8,ar)]),_:1},8,[`content`]),T(z,{content:q(X)(`@81F0F:清空命令历史`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn clear-button enhanced-btn danger-btn`,onClick:ce,disabled:n.value.length===0||c.value},[c.value?(s(),L(r,{key:1,class:`btn-icon is-loading`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(r,{key:0,class:`btn-icon`},{default:K(()=>[T(q(ae))]),_:1})),V(`span`,cr,H(q(X)(`@81F0F:清空`)),1)],8,sr)]),_:1},8,[`content`])])]),V(`div`,lr,[a.value&&n.value.length===0?(s(),M(`div`,ur,[T(r,{class:`loading-icon is-loading`},{default:K(()=>[T(q(D))]),_:1}),V(`div`,dr,H(q(X)(`@81F0F:加载命令历史...`)),1)])):n.value.length===0?(s(),L(U,{key:1,description:q(X)(`@81F0F:暂无命令历史`)},null,8,[`description`])):C.value.length===0?(s(),L(U,{key:2,description:q(X)(`@81F0F:没有匹配的命令`)},null,8,[`description`])):(s(),M(`div`,fr,[(s(!0),M(B,null,S(C.value,(e,t)=>(s(),M(`div`,{key:t,class:F([`history-item`,{"is-error":!e.success}])},[V(`div`,{class:`item-header`,onClick:e=>de(t)},[V(`div`,mr,[V(`div`,hr,[T(f,{size:`small`,type:e.success?`success`:`danger`,effect:`dark`,class:`status-tag`},{default:K(()=>[Y(H(e.success?q(X)(`@81F0F:成功`):q(X)(`@81F0F:失败`)),1)]),_:2},1032,[`type`]),V(`code`,null,H(o(e.command)),1)]),V(`div`,gr,[V(`span`,_r,H(le(e.timestamp)),1),V(`span`,vr,H(q(X)(`@81F0F:耗时: `))+H(ue(e.executionTime)),1)])]),V(`div`,yr,[T(be,{tooltip:q(X)(`@81F0F:复制命令`),"custom-class":`item-copy-button`,onClick:te(t=>fe(o(e.command)),[`stop`])},{default:K(()=>[T(r,null,{default:K(()=>[T(q(P))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),V(`div`,{class:F([`expand-button`,{"is-expanded":G(t)}])},[T(r,{class:`btn-icon`},{default:K(()=>[G(t)?(s(),L(q(b),{key:0})):(s(),L(q(A),{key:1}))]),_:2},1024)],2)])],8,pr),G(t)?(s(),M(`div`,br,[e.stdout?(s(),M(`div`,xr,[V(`div`,Sr,[V(`h4`,null,H(q(X)(`@81F0F:标准输出`)),1),T(z,{content:q(X)(`@81F0F:复制输出`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn output-copy-button enhanced-btn`,onClick:t=>J(e)},[T(r,{class:`btn-icon`},{default:K(()=>[T(q(P))]),_:1})],8,Cr)]),_:2},1032,[`content`])]),V(`pre`,wr,H(e.stdout),1),e.isStdoutTruncated?(s(),M(`div`,Tr,[T(W,{type:`info`,closable:!1,"show-icon":``},{default:K(()=>[Y(H(q(X)(`@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出`)),1)]),_:1})])):I(``,!0)])):I(``,!0),e.stderr?(s(),M(`div`,{key:1,class:F([`output-section`,me(e.command)?``:`error`])},[V(`div`,Er,[V(`h4`,null,H(me(e.command)?q(X)(`@81F0F:输出信息`):q(X)(`@81F0F:错误输出`)),1)]),V(`pre`,Dr,H(e.stderr),1),e.isStderrTruncated?(s(),M(`div`,Or,[T(W,{type:`info`,closable:!1,"show-icon":``},{default:K(()=>[Y(H(me(e.command)?q(X)(`@81F0F:输出信息`):q(X)(`@81F0F:错误输出`))+H(q(X)(`@81F0F:内容过长已被截断,请直接执行命令查看完整输出`)),1)]),_:2},1024)])):I(``,!0)],2)):I(``,!0),e.error?(s(),M(`div`,kr,[V(`div`,Ar,[V(`h4`,null,H(q(X)(`@81F0F:错误信息`)),1)]),V(`pre`,jr,H(e.error),1)])):I(``,!0)])):I(``,!0)],2))),128))]))])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-03e1a58f`]]),Nr={class:`card-header app-card-header`},Pr={class:`header-left`},Fr={class:`header-right`},Ir={class:`card-content app-card-content`},Lr={class:`layout-container`},Rr={key:0,class:`git-config-warning`},zr={key:0,class:`merge-in-progress-banner`},Br={class:`commit-section`},Vr={key:0,class:`commit-form`},Hr={class:`description-container`},Ur={key:1,class:`standard-commit-form`},Wr={class:`standard-commit-header`},Gr={class:`type-scope-container`},Kr={class:`scope-wrapper`},qr={class:`description-container description-inline`},Jr={class:`advanced-fields`},Yr={key:0,class:`status-updating-indicator`},Xr={key:0,class:`status-updating-indicator`},Zr=Z(J({__name:`CommitForm`,setup(e){let t=z(!1);async function n(){if(!t.value){t.value=!0;try{let e=r.isSelectionMode&&r.selectedFiles.size>0?[...r.selectedFiles]:[],t=ve(),n=await(await fetch(`/api/config/generate-commit-message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({selectedPaths:e,locale:t.currentLocale})})).json();if(!n.success){let e=n.code,t=n.error||X(`@76872:AI生成失败`),r=e?{TIMEOUT:`@76872:AI生成超时,请重试或检查模型响应速度`,NO_MODEL:`@76872:未配置AI模型,请先在通用设置中添加模型`,NO_JSON:`@76872:AI未返回有效结果,请重试`,PARSE_FAILED:`@76872:AI返回格式无法解析,请重试`,GENERATE_FAILED:`@76872:AI生成失败`,HTTP_ERR:`@76872:AI生成失败`}[e]:null;N.error(r?X(r):t);return}let i=[`feat`,`fix`,`docs`,`style`,`refactor`,`test`,`chore`];if(b.value)n.type&&i.includes(n.type)&&(C.value=n.type),n.scope!==void 0&&(w.value=n.scope),n.description&&(E.value=n.description);else{let e=n.type&&n.description?n.scope?`${n.type}(${n.scope}): ${n.description}`:`${n.type}: ${n.description}`:n.description||``;e&&(c.value=e)}N.success(X(`@76872:AI已生成提交信息`))}catch(e){N.error(`${X(`@76872:AI生成失败`)}: ${e.message}`)}finally{t.value=!1}}}let r=Q(),i=xe(),c=z(``),{loadingState:d,show:f,hide:m,setText:h}=Bn(),{successState:g}=Hn(),_=z(!1),y=z(``),b=W({get:()=>i.isStandardCommit,set:e=>{i.isStandardCommit=e}}),C=z(`feat`),w=z(``),E=z(``),O=z(``),ee=z(``),te=z([]),P=z(!1),ne=z([]),ie=z(!1),R=z(!1),ae=W({get:()=>i.skipHooks,set:e=>{i.skipHooks=e}}),U=W({get:()=>i.autoQuickPushOnEnter,set:e=>{i.autoQuickPushOnEnter=e}}),oe=z(null),se=z(!1),ce=W(()=>[{value:`feat`,label:`feat: ${X(`@76872:新功能`)}`},{value:`fix`,label:`fix: ${X(`@76872:修复bug`)}`},{value:`docs`,label:`docs: ${X(`@76872:文档修改`)}`},{value:`style`,label:`style: ${X(`@76872:样式修改`)}`},{value:`refactor`,label:`refactor: ${X(`@76872:代码重构`)}`},{value:`test`,label:`test: ${X(`@76872:测试代码`)}`},{value:`chore`,label:`chore: ${X(`@76872:构建/工具修改`)}`}]),ue=z([]),de=W(()=>{if(!b.value)return c.value||y.value;let e=`${C.value||``}`;return w.value&&(e+=`(${w.value})`),e+=`: ${E.value}`,O.value&&(e+=`\n\n${O.value}`),ee.value&&(e+=`\n\n${ee.value}`),e}),G=W(()=>b.value?(r.isMergeInProgress||(C.value||``).trim()!==``)&&(E.value||``).trim()!==``:c.value.trim()!==``),fe=W(()=>r.hasConflictedFiles?!0:r.isMergeInProgress?!G.value:!r.fileList.some(e=>!Ee(e.path,i.lockedFiles))||!G.value),pe=W(()=>{let e=`${X(`@76872:输入提交信息 (默认: `)}${y.value})`;return U.value?`${e}${X(`@76872:(按回车一键推送)`)}`:e}),me=W(()=>{let e=X(`@76872:简短描述(必填)`);return U.value?X(`@76872:简短描述(必填,按回车一键推送)`):e}),J=W(()=>{let e=`git commit -m "${de.value}"`;return ae.value&&(e+=` --no-verify`),e});function Y(){let e=i.config;e&&(y.value=e.defaultCommitMessage||``,e.descriptionTemplates&&Array.isArray(e.descriptionTemplates)&&(te.value=e.descriptionTemplates),e.scopeTemplates&&Array.isArray(e.scopeTemplates)&&(ne.value=e.scopeTemplates),e.messageTemplates&&Array.isArray(e.messageTemplates)&&(ue.value=e.messageTemplates))}function he(e){E.value=e,P.value=!1}function ge(e){w.value=e,ie.value=!1}function _e(){P.value=!0}function Z(){ie.value=!0}function ye(){c.value=``,E.value=``,O.value=``,ee.value=``,C.value=`feat`,i.autoSetDefaultMessage&&i.defaultCommitMessage&&(b.value?E.value=i.defaultCommitMessage:c.value=i.defaultCommitMessage)}function we(){f({text:X(`@76872:正在暂存文件...`),showProgress:!1})}function Te(){m()}function De(e){if(m(),e){_.value=!0;try{setTimeout(async()=>{try{console.log(X(`@76872:推送成功,状态已更新`))}catch(e){console.error(`一键推送后处理失败:`,e)}finally{_.value=!1}},1e3)}catch(e){console.error(`一键推送后处理失败:`,e),_.value=!1}}}function Oe(e){c.value=e,R.value=!1}async function ke(e){if(!U.value||!G.value)return;let t=r.fileList.some(e=>!Ee(e.path,i.lockedFiles)),n=r.hasConflictedFiles;if(!(!t||!G.value||!r.hasUpstream||n)&&e.key===`Enter`&&!e.shiftKey){e.preventDefault();try{await oe.value?.triggerQuickPush()}catch(e){console.error(`回车自动一键提交失败:`,e)}}}async function Ae(e){try{await i.saveDefaultMessage(e)&&N.success(X(`@76872:默认提交信息设置成功`))}catch(e){N.error(`${X(`@76872:设置默认提交信息失败: `)}${e.message}`)}}a(()=>r.pendingMergeMessage,e=>{e&&(b.value?(C.value=``,E.value=e):c.value=e,r.pendingMergeMessage=``,N.info(X(`@76872:已自动填充合并提交信息`)))}),a(()=>r.isAddingFiles,e=>{e&&d.visible&&h(X(`@76872:正在暂存文件...`))}),a(()=>r.isCommiting,e=>{e&&d.visible&&h(X(`@76872:正在提交更改...`))}),a(()=>r.isPushing,e=>{e&&d.visible&&m()}),v(async()=>{a(()=>i.config,Y,{immediate:!0}),i.config||await i.loadConfig(),i.autoSetDefaultMessage&&i.defaultCommitMessage&&(b.value?E.value||=i.defaultCommitMessage:c.value||=i.defaultCommitMessage),r.pendingMergeMessage&&(b.value?(C.value=``,E.value=r.pendingMergeMessage):c.value=r.pendingMergeMessage,r.pendingMergeMessage=``,N.info(X(`@76872:已自动填充合并提交信息`)))});function je(e,t){t([...e?te.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):te.value.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function Me(e,t){t([...e?ne.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):ne.value.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function Ne(e){e.isSettings?(_e(),E.value=``):E.value=e.value}function Pe(e){e.isSettings?(Z(),w.value=``):w.value=e.value}function Fe(e,t){t([...e?ue.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):ue.value.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function Ie(e){e.isSettings?(R.value=!0,c.value=``):c.value=e.value}return(e,i)=>{let a=j,f=jn,m=l,h=o,v=p,y=x,N=k;return s(),M(B,null,[V(`div`,{class:F([`card app-card`,{"is-pushing":q(r).isPushing}])},[V(`div`,Nr,[V(`div`,Pr,[q(r).userName!==``&&q(r).userEmail!==``?(s(),L($n,{key:0,ref_key:`gitActionButtonsRef`,ref:oe,"has-user-commit-message":G.value,"final-commit-message":de.value,"skip-hooks":ae.value,onAfterCommit:i[0]||=e=>{e&&ye()},onAfterPush:De,onBeforePush:we,onPushStart:Te,onClearFields:ye},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])):I(``,!0)]),V(`div`,Fr,[T(be,{tooltip:q(X)(`@76872:AI生成提交信息`),"icon-class":t.value?``:`ai-commit`,size:`medium`,disabled:t.value,onClick:n},{default:K(()=>[t.value?(s(),L(a,{key:0,class:`is-loading`},{default:K(()=>[T(q(D))]),_:1})):I(``,!0)]),_:1},8,[`tooltip`,`icon-class`,`disabled`]),T(Mr),T(f,{class:`ml-auto`,variant:`icon`})])]),V(`div`,Ir,[V(`div`,Lr,[q(r).userName===``||q(r).userEmail===``?(s(),M(`div`,Rr,[T(m,{title:q(X)(`@76872:Git用户信息未配置`),type:`warning`,closable:!1,"show-icon":``},{default:K(()=>[V(`p`,null,H(q(X)(`@76872:您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:`)),1),i[11]||=V(`pre`,{class:`config-command`},`git config --global user.name "Your Name"
5
+ `);await navigator.clipboard.writeText(e),N({message:X(`@81F0F:命令列表已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){N.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}finally{m.value=!1}}async function ce(){try{if(await R.confirm(X(`@81F0F:确定要清空所有命令历史记录吗?此操作不可恢复。`),X(`@81F0F:清空命令历史`),{confirmButtonText:X(`@81F0F:确定`),cancelButtonText:X(`@81F0F:取消`),type:`warning`}),c.value=!0,t.socket&&t.socket.connected)t.socket.emit(`clear_command_history`);else{let e=await(await fetch(`/api/clear-command-history`,{method:`POST`,headers:{"Content-Type":`application/json`}})).json();e.success?(n.value=[],N.success(X(`@81F0F:命令历史已清空`))):N.error(`${X(`@81F0F:清空命令历史失败: `)}${e.error}`)}}catch(e){e!==`cancel`&&e.toString()!==`Error: cancel`&&N.error(`${X(`@81F0F:清空命令历史失败: `)}${e.message}`)}finally{c.value=!1}}function le(e){return new Date(e).toLocaleString()}function ue(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}function de(e){f.value.has(e)?f.value.delete(e):f.value.add(e)}function G(e){return f.value.has(e)}async function fe(e){try{await navigator.clipboard.writeText(e),N({message:X(`@81F0F:命令已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){N.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}}function pe(e){return e.includes(`git push`)||e.includes(`git-push`)}function me(e){return!!pe(o(e))}async function J(e){try{let t=``;if(e.stdout&&(t+=`标准输出:\n${e.stdout}\n\n`),e.stderr){let n=me(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`${n}:\n${e.stderr}\n\n`}e.error&&(t+=`错误信息:\n${e.error}`),await navigator.clipboard.writeText(t.trim()),N({message:X(`@81F0F:输出已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){N.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}}function _e(){if(!t.socket){console.error(X(`@81F0F:Socket实例不可用`));return}t.socket.on(`initial_command_history`,e=>{n.value=e.history,d.value=!0}),t.socket.on(`command_history_update`,e=>{n.value.unshift(e.newCommand),n.value.length>100&&n.value.pop(),d.value=!0}),t.socket.on(`full_command_history`,e=>{n.value=e.history,a.value=!1,d.value=!0}),t.socket.on(`command_history_cleared`,e=>{e.success&&(n.value=[],N.success(X(`@81F0F:命令历史已清空`))),c.value=!1}),t.socket.on(`connect`,()=>{d.value=!0,N.success(X(`@81F0F:已连接到实时命令历史`))}),t.socket.on(`disconnect`,()=>{d.value=!1,N.warning(X(`@81F0F:实时命令历史连接已断开`))})}function Z(){t.socket&&(t.socket.off(`initial_command_history`),t.socket.off(`command_history_update`),t.socket.off(`full_command_history`),t.socket.off(`command_history_cleared`))}return v(()=>{_e(),t.socket||(console.log(X(`@81F0F:尝试初始化Socket连接`)),t.initSocketConnection())}),r(()=>{Z()}),(e,t)=>{let r=j,f=he,v=p,N=x,R=k,z=i,U=w,W=l;return s(),M(B,null,[T(ye,{tooltip:q(X)(`@81F0F:查看Git命令历史`),size:`large`,onClick:ie},{default:K(()=>[T(r,null,{default:K(()=>[T(q(ee))]),_:1})]),_:1},8,[`tooltip`]),T(xe,{modelValue:h.value,"onUpdate:modelValue":t[3]||=e=>h.value=e,title:q(X)(`@81F0F:Git 命令历史`),"destroy-on-close":``,"custom-class":`command-history-dialog`,"append-to-body":!0},{default:K(()=>[V(`div`,er,[T(f,{type:d.value?`success`:`danger`,size:`small`,effect:`dark`,class:`socket-status`},{default:K(()=>[Y(H(d.value?q(X)(`@81F0F:实时更新`):q(X)(`@81F0F:未连接`)),1)]),_:1},8,[`type`]),V(`div`,tr,[T(N,{modelValue:g.value,"onUpdate:modelValue":t[0]||=e=>g.value=e,size:`small`,class:`filter-select`},{default:K(()=>[T(v,{label:`全部状态`,value:`all`}),T(v,{label:`成功 (${E.value})`,value:`success`},null,8,[`label`]),T(v,{label:`失败 (${O.value})`,value:`error`},null,8,[`label`])]),_:1},8,[`modelValue`]),T(N,{modelValue:_.value,"onUpdate:modelValue":t[1]||=e=>_.value=e,size:`small`,class:`filter-select`},{default:K(()=>[T(v,{label:`全部命令`,value:`all`}),T(v,{label:`Git 命令 (${ne.value})`,value:`git`},null,8,[`label`]),T(v,{label:`其他命令 (${re.value})`,value:`other`},null,8,[`label`])]),_:1},8,[`modelValue`]),T(R,{modelValue:y.value,"onUpdate:modelValue":t[2]||=e=>y.value=e,size:`small`,placeholder:`搜索命令或输出...`,clearable:``,class:`search-input`},{prefix:K(()=>[T(r,null,{default:K(()=>[T(q(ge))]),_:1})]),_:1},8,[`modelValue`])]),V(`div`,nr,[T(z,{content:q(X)(`@81F0F:只复制命令列表(不含输出)`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn copy-commands-button enhanced-btn`,onClick:se,disabled:C.value.length===0||m.value},[m.value?(s(),L(r,{key:1,class:`btn-icon is-loading`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(r,{key:0,class:`btn-icon`},{default:K(()=>[T(q(P))]),_:1})),V(`span`,ir,H(q(X)(`@81F0F:命令`)),1)],8,rr)]),_:1},8,[`content`]),T(z,{content:q(X)(`@81F0F:复制完整命令历史(含输出)`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn copy-all-button enhanced-btn`,onClick:oe,disabled:C.value.length===0||u.value},[u.value?(s(),L(r,{key:1,class:`btn-icon is-loading`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(r,{key:0,class:`btn-icon`},{default:K(()=>[T(q(P))]),_:1})),V(`span`,or,H(q(X)(`@81F0F:全部`)),1)],8,ar)]),_:1},8,[`content`]),T(z,{content:q(X)(`@81F0F:清空命令历史`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn clear-button enhanced-btn danger-btn`,onClick:ce,disabled:n.value.length===0||c.value},[c.value?(s(),L(r,{key:1,class:`btn-icon is-loading`},{default:K(()=>[T(q(D))]),_:1})):(s(),L(r,{key:0,class:`btn-icon`},{default:K(()=>[T(q(ae))]),_:1})),V(`span`,cr,H(q(X)(`@81F0F:清空`)),1)],8,sr)]),_:1},8,[`content`])])]),V(`div`,lr,[a.value&&n.value.length===0?(s(),M(`div`,ur,[T(r,{class:`loading-icon is-loading`},{default:K(()=>[T(q(D))]),_:1}),V(`div`,dr,H(q(X)(`@81F0F:加载命令历史...`)),1)])):n.value.length===0?(s(),L(U,{key:1,description:q(X)(`@81F0F:暂无命令历史`)},null,8,[`description`])):C.value.length===0?(s(),L(U,{key:2,description:q(X)(`@81F0F:没有匹配的命令`)},null,8,[`description`])):(s(),M(`div`,fr,[(s(!0),M(B,null,S(C.value,(e,t)=>(s(),M(`div`,{key:t,class:F([`history-item`,{"is-error":!e.success}])},[V(`div`,{class:`item-header`,onClick:e=>de(t)},[V(`div`,mr,[V(`div`,hr,[T(f,{size:`small`,type:e.success?`success`:`danger`,effect:`dark`,class:`status-tag`},{default:K(()=>[Y(H(e.success?q(X)(`@81F0F:成功`):q(X)(`@81F0F:失败`)),1)]),_:2},1032,[`type`]),V(`code`,null,H(o(e.command)),1)]),V(`div`,gr,[V(`span`,_r,H(le(e.timestamp)),1),V(`span`,vr,H(q(X)(`@81F0F:耗时: `))+H(ue(e.executionTime)),1)])]),V(`div`,yr,[T(ye,{tooltip:q(X)(`@81F0F:复制命令`),"custom-class":`item-copy-button`,onClick:te(t=>fe(o(e.command)),[`stop`])},{default:K(()=>[T(r,null,{default:K(()=>[T(q(P))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),V(`div`,{class:F([`expand-button`,{"is-expanded":G(t)}])},[T(r,{class:`btn-icon`},{default:K(()=>[G(t)?(s(),L(q(b),{key:0})):(s(),L(q(A),{key:1}))]),_:2},1024)],2)])],8,pr),G(t)?(s(),M(`div`,br,[e.stdout?(s(),M(`div`,xr,[V(`div`,Sr,[V(`h4`,null,H(q(X)(`@81F0F:标准输出`)),1),T(z,{content:q(X)(`@81F0F:复制输出`),placement:`bottom`,effect:`dark`,"show-after":200},{default:K(()=>[V(`button`,{class:`modern-btn output-copy-button enhanced-btn`,onClick:t=>J(e)},[T(r,{class:`btn-icon`},{default:K(()=>[T(q(P))]),_:1})],8,Cr)]),_:2},1032,[`content`])]),V(`pre`,wr,H(e.stdout),1),e.isStdoutTruncated?(s(),M(`div`,Tr,[T(W,{type:`info`,closable:!1,"show-icon":``},{default:K(()=>[Y(H(q(X)(`@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出`)),1)]),_:1})])):I(``,!0)])):I(``,!0),e.stderr?(s(),M(`div`,{key:1,class:F([`output-section`,me(e.command)?``:`error`])},[V(`div`,Er,[V(`h4`,null,H(me(e.command)?q(X)(`@81F0F:输出信息`):q(X)(`@81F0F:错误输出`)),1)]),V(`pre`,Dr,H(e.stderr),1),e.isStderrTruncated?(s(),M(`div`,Or,[T(W,{type:`info`,closable:!1,"show-icon":``},{default:K(()=>[Y(H(me(e.command)?q(X)(`@81F0F:输出信息`):q(X)(`@81F0F:错误输出`))+H(q(X)(`@81F0F:内容过长已被截断,请直接执行命令查看完整输出`)),1)]),_:2},1024)])):I(``,!0)],2)):I(``,!0),e.error?(s(),M(`div`,kr,[V(`div`,Ar,[V(`h4`,null,H(q(X)(`@81F0F:错误信息`)),1)]),V(`pre`,jr,H(e.error),1)])):I(``,!0)])):I(``,!0)],2))),128))]))])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-03e1a58f`]]),Nr={class:`card-header app-card-header`},Pr={class:`header-left`},Fr={class:`header-right`},Ir={class:`card-content app-card-content`},Lr={class:`layout-container`},Rr={key:0,class:`git-config-warning`},zr={key:0,class:`merge-in-progress-banner`},Br={class:`commit-section`},Vr={key:0,class:`commit-form`},Hr={class:`description-container`},Ur={key:1,class:`standard-commit-form`},Wr={class:`standard-commit-header`},Gr={class:`type-scope-container`},Kr={class:`scope-wrapper`},qr={class:`description-container description-inline`},Jr={class:`advanced-fields`},Yr={key:0,class:`status-updating-indicator`},Xr={key:0,class:`status-updating-indicator`},Zr=Z(J({__name:`CommitForm`,setup(e){let t=z(!1);async function n(){if(!t.value){t.value=!0;try{let e=r.isSelectionMode&&r.selectedFiles.size>0?[...r.selectedFiles]:[],t=be(),n=await(await fetch(`/api/config/generate-commit-message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({selectedPaths:e,locale:t.currentLocale})})).json();if(!n.success){let e=n.code,t=n.error||X(`@76872:AI生成失败`),r=e?{TIMEOUT:`@76872:AI生成超时,请重试或检查模型响应速度`,NO_MODEL:`@76872:未配置AI模型,请先在通用设置中添加模型`,NO_JSON:`@76872:AI未返回有效结果,请重试`,PARSE_FAILED:`@76872:AI返回格式无法解析,请重试`,GENERATE_FAILED:`@76872:AI生成失败`,HTTP_ERR:`@76872:AI生成失败`}[e]:null;N.error(r?X(r):t);return}let i=[`feat`,`fix`,`docs`,`style`,`refactor`,`test`,`chore`];if(b.value)n.type&&i.includes(n.type)&&(C.value=n.type),n.scope!==void 0&&(w.value=n.scope),n.description&&(E.value=n.description);else{let e=n.type&&n.description?n.scope?`${n.type}(${n.scope}): ${n.description}`:`${n.type}: ${n.description}`:n.description||``;e&&(c.value=e)}N.success(X(`@76872:AI已生成提交信息`))}catch(e){N.error(`${X(`@76872:AI生成失败`)}: ${e.message}`)}finally{t.value=!1}}}let r=Q(),i=ve(),c=z(``),{loadingState:d,show:f,hide:m,setText:h}=Bn(),{successState:g}=Hn(),_=z(!1),y=z(``),b=W({get:()=>i.isStandardCommit,set:e=>{i.isStandardCommit=e}}),C=z(`feat`),w=z(``),E=z(``),O=z(``),ee=z(``),te=z([]),P=z(!1),ne=z([]),ie=z(!1),R=z(!1),ae=W({get:()=>i.skipHooks,set:e=>{i.skipHooks=e}}),U=W({get:()=>i.autoQuickPushOnEnter,set:e=>{i.autoQuickPushOnEnter=e}}),oe=z(null),se=z(!1),ce=W(()=>[{value:`feat`,label:`feat: ${X(`@76872:新功能`)}`},{value:`fix`,label:`fix: ${X(`@76872:修复bug`)}`},{value:`docs`,label:`docs: ${X(`@76872:文档修改`)}`},{value:`style`,label:`style: ${X(`@76872:样式修改`)}`},{value:`refactor`,label:`refactor: ${X(`@76872:代码重构`)}`},{value:`test`,label:`test: ${X(`@76872:测试代码`)}`},{value:`chore`,label:`chore: ${X(`@76872:构建/工具修改`)}`}]),ue=z([]),de=W(()=>{if(!b.value)return c.value||y.value;let e=`${C.value||``}`;return w.value&&(e+=`(${w.value})`),e+=`: ${E.value}`,O.value&&(e+=`\n\n${O.value}`),ee.value&&(e+=`\n\n${ee.value}`),e}),G=W(()=>b.value?(r.isMergeInProgress||(C.value||``).trim()!==``)&&(E.value||``).trim()!==``:c.value.trim()!==``),fe=W(()=>r.hasConflictedFiles?!0:r.isMergeInProgress?!G.value:!r.fileList.some(e=>!Ee(e.path,i.lockedFiles))||!G.value),pe=W(()=>{let e=`${X(`@76872:输入提交信息 (默认: `)}${y.value})`;return U.value?`${e}${X(`@76872:(按回车一键推送)`)}`:e}),me=W(()=>{let e=X(`@76872:简短描述(必填)`);return U.value?X(`@76872:简短描述(必填,按回车一键推送)`):e}),J=W(()=>{let e=`git commit -m "${de.value}"`;return ae.value&&(e+=` --no-verify`),e});function Y(){let e=i.config;e&&(y.value=e.defaultCommitMessage||``,e.descriptionTemplates&&Array.isArray(e.descriptionTemplates)&&(te.value=e.descriptionTemplates),e.scopeTemplates&&Array.isArray(e.scopeTemplates)&&(ne.value=e.scopeTemplates),e.messageTemplates&&Array.isArray(e.messageTemplates)&&(ue.value=e.messageTemplates))}function he(e){E.value=e,P.value=!1}function ge(e){w.value=e,ie.value=!1}function _e(){P.value=!0}function Z(){ie.value=!0}function xe(){c.value=``,E.value=``,O.value=``,ee.value=``,C.value=`feat`,i.autoSetDefaultMessage&&i.defaultCommitMessage&&(b.value?E.value=i.defaultCommitMessage:c.value=i.defaultCommitMessage)}function we(){f({text:X(`@76872:正在暂存文件...`),showProgress:!1})}function Te(){m()}function De(e){if(m(),e){_.value=!0;try{setTimeout(async()=>{try{console.log(X(`@76872:推送成功,状态已更新`))}catch(e){console.error(`一键推送后处理失败:`,e)}finally{_.value=!1}},1e3)}catch(e){console.error(`一键推送后处理失败:`,e),_.value=!1}}}function Oe(e){c.value=e,R.value=!1}async function ke(e){if(!U.value||!G.value)return;let t=r.fileList.some(e=>!Ee(e.path,i.lockedFiles)),n=r.hasConflictedFiles;if(!(!t||!G.value||!r.hasUpstream||n)&&e.key===`Enter`&&!e.shiftKey){e.preventDefault();try{await oe.value?.triggerQuickPush()}catch(e){console.error(`回车自动一键提交失败:`,e)}}}async function Ae(e){try{await i.saveDefaultMessage(e)&&N.success(X(`@76872:默认提交信息设置成功`))}catch(e){N.error(`${X(`@76872:设置默认提交信息失败: `)}${e.message}`)}}a(()=>r.pendingMergeMessage,e=>{e&&(b.value?(C.value=``,E.value=e):c.value=e,r.pendingMergeMessage=``,N.info(X(`@76872:已自动填充合并提交信息`)))}),a(()=>r.isAddingFiles,e=>{e&&d.visible&&h(X(`@76872:正在暂存文件...`))}),a(()=>r.isCommiting,e=>{e&&d.visible&&h(X(`@76872:正在提交更改...`))}),a(()=>r.isPushing,e=>{e&&d.visible&&m()}),v(async()=>{a(()=>i.config,Y,{immediate:!0}),i.config||await i.loadConfig(),i.autoSetDefaultMessage&&i.defaultCommitMessage&&(b.value?E.value||=i.defaultCommitMessage:c.value||=i.defaultCommitMessage),r.pendingMergeMessage&&(b.value?(C.value=``,E.value=r.pendingMergeMessage):c.value=r.pendingMergeMessage,r.pendingMergeMessage=``,N.info(X(`@76872:已自动填充合并提交信息`)))});function je(e,t){t([...e?te.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):te.value.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function Me(e,t){t([...e?ne.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):ne.value.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function Ne(e){e.isSettings?(_e(),E.value=``):E.value=e.value}function Pe(e){e.isSettings?(Z(),w.value=``):w.value=e.value}function Fe(e,t){t([...e?ue.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):ue.value.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function Ie(e){e.isSettings?(R.value=!0,c.value=``):c.value=e.value}return(e,i)=>{let a=j,f=jn,m=l,h=o,v=p,y=x,N=k;return s(),M(B,null,[V(`div`,{class:F([`card app-card`,{"is-pushing":q(r).isPushing}])},[V(`div`,Nr,[V(`div`,Pr,[q(r).userName!==``&&q(r).userEmail!==``?(s(),L($n,{key:0,ref_key:`gitActionButtonsRef`,ref:oe,"has-user-commit-message":G.value,"final-commit-message":de.value,"skip-hooks":ae.value,onAfterCommit:i[0]||=e=>{e&&xe()},onAfterPush:De,onBeforePush:we,onPushStart:Te,onClearFields:xe},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])):I(``,!0)]),V(`div`,Fr,[T(ye,{tooltip:q(X)(`@76872:AI生成提交信息`),"icon-class":t.value?``:`ai-commit`,size:`medium`,disabled:t.value,onClick:n},{default:K(()=>[t.value?(s(),L(a,{key:0,class:`is-loading`},{default:K(()=>[T(q(D))]),_:1})):I(``,!0)]),_:1},8,[`tooltip`,`icon-class`,`disabled`]),T(Mr),T(f,{class:`ml-auto`,variant:`icon`})])]),V(`div`,Ir,[V(`div`,Lr,[q(r).userName===``||q(r).userEmail===``?(s(),M(`div`,Rr,[T(m,{title:q(X)(`@76872:Git用户信息未配置`),type:`warning`,closable:!1,"show-icon":``},{default:K(()=>[V(`p`,null,H(q(X)(`@76872:您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:`)),1),i[11]||=V(`pre`,{class:`config-command`},`git config --global user.name "Your Name"
6
6
  git config --global user.email "your.email@example.com"`,-1)]),_:1},8,[`title`])])):(s(),M(B,{key:1},[q(r).isMergeInProgress?(s(),M(`div`,zr,[T(m,{title:q(X)(`@76872:合并进行中`),type:`warning`,closable:!1,"show-icon":``},{default:K(()=>[V(`span`,null,H(q(X)(`@76872:分支合并尚未完成,请输入提交信息后点击「提交」按钮完成合并。`)),1)]),_:1},8,[`title`])])):I(``,!0),V(`div`,Br,[b.value?(s(),M(`div`,Ur,[V(`div`,Wr,[V(`div`,Gr,[T(y,{modelValue:C.value,"onUpdate:modelValue":i[2]||=e=>C.value=e,placeholder:q(X)(`@76872:提交类型`),class:`type-select`,clearable:``},{default:K(()=>[(s(!0),M(B,null,S(ce.value,e=>(s(),L(v,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),V(`div`,Kr,[T(h,{modelValue:w.value,"onUpdate:modelValue":i[3]||=e=>w.value=e,"fetch-suggestions":Me,placeholder:q(X)(`@76872:作用域(可选)`),class:`scope-input`,clearable:``,onSelect:Pe},null,8,[`modelValue`,`placeholder`])]),V(`div`,qr,[T(h,{modelValue:E.value,"onUpdate:modelValue":i[4]||=e=>E.value=e,"fetch-suggestions":je,placeholder:me.value,class:`description-input`,clearable:``,onSelect:Ne,onKeydown:ke},null,8,[`modelValue`,`placeholder`])])])]),V(`div`,{class:`advanced-options-toggle`,onClick:i[5]||=e=>se.value=!se.value},[V(`span`,null,H(se.value?q(X)(`@76872:收起`):q(X)(`@76872:正文及页脚`)),1),T(a,{class:F([`toggle-icon`,{"is-active":se.value}])},{default:K(()=>[T(q(A))]),_:1},8,[`class`])]),u(V(`div`,Jr,[T(N,{modelValue:O.value,"onUpdate:modelValue":i[6]||=e=>O.value=e,type:`textarea`,rows:4,placeholder:q(X)(`@76872:正文(可选):详细描述本次提交的内容和原因`),class:`body-input`,clearable:``},null,8,[`modelValue`,`placeholder`]),T(N,{modelValue:ee.value,"onUpdate:modelValue":i[7]||=e=>ee.value=e,placeholder:q(X)(`@76872:页脚(可选):如 Closes #123`),class:`footer-input`,clearable:``},null,8,[`modelValue`,`placeholder`])],512),[[le,se.value]])])):(s(),M(`div`,Vr,[V(`div`,Hr,[T(h,{modelValue:c.value,"onUpdate:modelValue":i[1]||=e=>c.value=e,"fetch-suggestions":Fe,placeholder:pe.value,type:`textarea`,rows:3,resize:`none`,class:`commit-message-input`,onSelect:Ie,onKeydown:ke},null,8,[`modelValue`,`placeholder`])])])),fe.value?I(``,!0):(s(),L(Ce,{key:2,command:J.value,title:q(X)(`@76872:提交命令预览:`),placeholder:`git commit -m "<提交信息>"`},null,8,[`command`,`title`]))])],64))])])],2),T(Se,{visible:P.value,"onUpdate:visible":i[8]||=e=>P.value=e,type:`description`,title:q(X)(`@76872:简短描述模板设置`),placeholder:q(X)(`@76872:输入新模板内容`),"edit-placeholder":q(X)(`@76872:编辑模板内容`),"empty-description":q(X)(`@76872:暂无保存的模板`),onUseTemplate:he},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),T(Se,{visible:ie.value,"onUpdate:visible":i[9]||=e=>ie.value=e,type:`scope`,title:q(X)(`@76872:作用域模板设置`),placeholder:q(X)(`@76872:输入新作用域模板`),"edit-placeholder":q(X)(`@76872:编辑作用域模板内容`),"empty-description":q(X)(`@76872:暂无保存的作用域`),onUseTemplate:ge},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),T(Se,{visible:R.value,"onUpdate:visible":i[10]||=e=>R.value=e,type:`message`,title:q(X)(`@76872:默认提交信息设置`),placeholder:q(X)(`@76872:输入新模板内容`),"edit-placeholder":q(X)(`@76872:编辑模板内容`),"empty-description":q(X)(`@76872:暂无保存的模板`),"show-default-section":!0,"show-help-text":!0,onUseTemplate:Oe,onSetDefault:Ae},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),T(re,{name:`el-fade-in-linear`},{default:K(()=>[_.value?(s(),M(`div`,Yr,[T(a,{class:`is-loading`},{default:K(()=>[T(q(D))]),_:1}),V(`span`,null,H(q(X)(`@76872:更新状态中...`)),1)])):I(``,!0)]),_:1}),T(Fn,{visible:q(d).visible,text:q(d).text,"show-progress":q(d).showProgress,progress:q(d).progress},null,8,[`visible`,`text`,`show-progress`,`progress`]),T(zn,{visible:q(g).visible,text:q(g).text,description:q(g).description},null,8,[`visible`,`text`,`description`]),T(re,{name:`el-fade-in-linear`},{default:K(()=>[_.value?(s(),M(`div`,Xr,[T(a,{class:`is-loading`},{default:K(()=>[T(q(D))]),_:1}),V(`span`,null,H(q(X)(`@76872:更新状态中...`)),1)])):I(``,!0)]),_:1})],64)}}}),[[`__scopeId`,`data-v-4d221088`]]);export{Zr as default};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-CMxvf4Kt.js";import{B as t,D as n,En as r,Gn as i,H as a,In as o,Jn as s,Kt as c,S as ee,Sn as l,W as u,Y as te,Yt as ne,_n as d,a as f,ct as re,g as ie,gn as p,h as ae,hn as m,ht as oe,i as h,ir as g,ln as se,lt as ce,m as le,mn as _,mr as v,nr as y,o as ue,pn as b,qn as x,sn as de,ur as S,vt as fe,wn as C,xn as w,z as pe}from"./element-plus-CRTdimvR.js";import{d as T,o as me}from"./vendor-BxotT5qN.js";import{n as E,t as D}from"./_plugin-vue_export-helper-CpTW8798.js";import{c as O,r as k,s as A}from"./index-B666KMk3.js";import{t as he}from"./TemplateManager-Clov9VqY.js";var ge={class:`command-container`},_e={class:`left-panel`},ve={class:`command-form`},ye={class:`form-header`},be={class:`left-title`},xe={class:`form-content`},Se={class:`form-row`},Ce={class:`form-field`},we={class:`required`},Te={class:`form-row`},Ee={class:`form-field`},De={class:`form-row`},Oe={class:`form-field`},ke={class:`directory-input-group`},Ae={class:`form-row`},je={class:`form-field`},Me={class:`required`},Ne={key:0,class:`command-params`},Pe={class:`params-title`},Fe={class:`form-actions`},Ie={class:`right-panel`},Le={class:`command-list`},Re={class:`list-header`},ze={class:`list-header-left`},Be={class:`list-title`},Ve={key:0,class:`selection-count`},He={class:`list-header-actions`},Ue={class:`list-content`},We={key:1,class:`command-list-scroll`},Ge={class:`name-cell`},Ke={class:`name-text`},qe={key:0,class:`description-text`},Je={class:`command-text`},Ye={class:`directory-text`},Xe={class:`action-buttons`},Ze={class:`npm-dialog-body`},Qe={class:`command-text`},$e={class:`npm-dialog-footer`},et={class:`npm-selected-count`},j=C({__name:`CustomCommandManager`,props:{visible:{type:Boolean},fullscreen:{type:Boolean}},emits:[`update:visible`,`execute-command`],setup(e,{expose:D,emit:j}){function tt(e){let t=`${e}(copy)`,n=Array.isArray(U.value)?U.value:[],r=e=>n.some(t=>String(t?.name||``)===e);if(!r(t))return t;let i=2;for(;i<1e3;){let t=`${e}(copy${i})`;if(!r(t))return t;i++}return`${t}-${Date.now()}`}async function M(e){try{let t=R(e),n={name:tt(String(e?.name||``).trim()||E(`@CMD01:命令名称`)),description:String(e?.description||``),directory:String(e?.directory||``),command:String(e?.command||``),params:JSON.parse(JSON.stringify(t||[]))};(!n.directory||!n.directory.trim())&&(n.directory=P.currentDirectory||``),await P.saveCustomCommand(n)}catch(e){f.error(`${E(`@CMD01:保存命令失败: `)}${e.message}`)}}let nt=e,N=j,P=A(),{currentLocale:rt}=T(O()),F=b(()=>P.commandTemplates||[]),I=g(!1);function it(e,t){let n=Array.isArray(F.value)?F.value:[];t([...e?n.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):n.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function at(e){if(e.isSettings){I.value=!0,z.value.command=``;return}z.value.command=e.value}function L(e){let t=[],n=/{{\s*([a-zA-Z0-9_]+)\s*}}/g,r;for(;r=n.exec(e);){let e=String(r[1]||``).trim();e&&!t.includes(e)&&t.push(e)}return t}function ot(e,t){return e.replace(/{{\s*([a-zA-Z0-9_]+)\s*}}/g,(e,n)=>{let r=String(n||``).trim();return Object.prototype.hasOwnProperty.call(t,r)?String(t[r]??``):``})}let st=C({name:`CmdParamForm`,props:{vars:{type:Array,required:!0},values:{type:Object,required:!0},params:{type:Array,required:!1}},setup(e){function t(t){let n=(Array.isArray(e.params)?e.params:[]).find(e=>String(e?.name||``)===t);return n?String(n?.description||``).trim():``}return()=>r(`div`,{class:`cmd-param-form`},e.vars.map(n=>r(`div`,{class:`cmd-param-row`},[r(`div`,{class:`cmd-param-label`},n),r(u,{modelValue:e.values[n],"onUpdate:modelValue":t=>{e.values[n]=String(t??``)},placeholder:E(`@CMD01:请输入变量值`,{var:n}),clearable:!0}),t(n)?r(`div`,{class:`cmd-param-desc`},t(n)):null])))}});function R(e){let t=L(String(e?.command||``)),n=Array.isArray(e?.params)?e.params:[],r=new Map;for(let e of n){let t=String(e?.name||``).trim();t&&r.set(t,{name:t,defaultValue:String(e?.defaultValue??``),required:!!e?.required,description:String(e?.description??``)})}return t.map(e=>r.has(e)?r.get(e):{name:e,defaultValue:``,required:!1,description:``})}let z=g({name:``,description:``,directory:``,command:``,params:[]}),B=g(!1),V=g(``),H=g(!1),U=b(()=>P.customCommands||[]),W=b({get:()=>nt.visible,set:e=>N(`update:visible`,e)});i(W,e=>{e||G()});function G(){z.value={name:``,description:``,directory:``,command:``,params:[]},B.value=!1,V.value=``}i(()=>z.value.command,e=>{let t=L(String(e||``));if(!t.length){z.value.params=[];return}let n=Array.isArray(z.value.params)?z.value.params:[],r=new Map(n.map(e=>[String(e?.name||``),e]));z.value.params=t.map(e=>{let t=r.get(e);return{name:e,defaultValue:t?String(t.defaultValue??``):``,required:t?!!t.required:!1,description:t?String(t.description??``):``}})},{immediate:!0});async function K(){if(!z.value.name.trim()){f.warning(E(`@CMD01:命令名称不能为空`));return}if(!z.value.command.trim()){f.warning(E(`@CMD01:命令内容不能为空`));return}try{H.value=!0,B.value?await P.updateCustomCommand(V.value,z.value)&&G():((!z.value.directory||!z.value.directory.trim())&&(z.value.directory=P.currentDirectory||``),await P.saveCustomCommand(z.value)&&G())}catch(e){f.error(`${E(`@CMD01:命令保存失败: `)}${e.message}`)}finally{H.value=!1}}function ct(e){B.value=!0,V.value=e.id||``,z.value={name:e.name,description:e.description||``,directory:e.directory,command:e.command,params:R(e)}}function lt(){G()}async function ut(e){try{await h.confirm(E(`@CMD01:确定要删除这个自定义命令吗?`),E(`@CMD01:删除确认`),{confirmButtonText:E(`@CMD01:确定`),cancelButtonText:E(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`}),await P.deleteCustomCommand(e)}catch{}}async function dt(e){await P.pinCustomCommand(e)}async function ft(e){let t=String(e?.command||``),n=L(t);if(!n.length){N(`execute-command`,e);return}let i=y({});try{let a=R(e),o=new Map(a.map(e=>[String(e.name),e]));for(let e of n){let t=o.get(e);i[e]=t?String(t.defaultValue??``):``}await h({title:E(`@CMD01:执行参数`),message:r(st,{vars:n,values:i,params:a}),showCancelButton:!0,confirmButtonText:E(`@CMD01:确定`),cancelButtonText:E(`@CMD01:取消`),closeOnClickModal:!1,customClass:`cmd-param-message-box`});let s=(Array.isArray(e?.params)?e.params:[]).map(e=>({name:String(e?.name||``).trim(),required:!!e?.required})).filter(e=>e.name);for(let e of s){if(!e.required)continue;let t=i[e.name];if(t==null||String(t).trim()===``){f.warning(E(`@CMD01:请输入必填变量: `,{var:e.name}));return}}let c=ot(t,i);N(`execute-command`,{...e,command:c})}catch{}}let q=g(!1);function pt(){q.value=!0}function mt(e){z.value.directory=e}function ht(){z.value.directory=P.currentDirectory||``}let gt=g(null),J=g([]);function _t(e){J.value=e}async function vt(){let e=[...J.value],t=e.length;if(t)try{await h.confirm(E(`@CMD01:确定要删除所选命令吗`,{count:t}),E(`@CMD01:删除确认`),{confirmButtonText:E(`@CMD01:确定`),cancelButtonText:E(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`});let n=0;for(let t of e)t.id&&(await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t.id})})).json()).success&&n++;await P.loadConfig(!0),J.value=[],f.success(E(`@CMD01:批量删除成功`,{count:n}))}catch{}}let Y=g(!1),X=g([]),Z=g([]),yt=g(null),Q=g(!1),$=g(!1);async function bt(){try{Q.value=!0,Y.value=!0,X.value=[],Z.value=[];let e=await(await fetch(`/api/scan-npm-scripts`)).json();if(!e.success){f.error(`${E(`@CMD01:NPM命令同步失败: `)}${e.error||``}`),Y.value=!1;return}let t=e.packages||[];if(t.length===0){f.warning(E(`@CMD01:未找到任何NPM脚本`)),Y.value=!1;return}let n=new Set((Array.isArray(U.value)?U.value:[]).map(e=>String(e?.name||``).trim())),r=[];for(let e of t){let t=e.scripts||{};for(let i of Object.keys(t)){let t=`${e.name}: ${i}`;r.push({key:t,label:t,packageName:e.name,packagePath:e.path,scriptName:i,isDuplicate:n.has(t)})}}X.value=r}catch(e){f.error(`${E(`@CMD01:NPM命令同步失败: `)}${e.message}`),Y.value=!1}finally{Q.value=!1}}function xt(e){Z.value=e}async function St(){if(!Z.value.length){f.warning(E(`@CMD01:请至少选择一项`));return}try{$.value=!0;let e=new Set((Array.isArray(U.value)?U.value:[]).map(e=>String(e?.name||``).trim())),t=0,n=0;for(let r of Z.value){if(e.has(r.key)){n++;continue}await P.saveCustomCommand({name:r.key,description:`npm run ${r.scriptName}`,directory:r.packagePath,command:`npm run ${r.scriptName}`})&&(e.add(r.key),t++)}f.success(E(`@CMD01:NPM命令同步完成2`,{count:t,skip:n})),Y.value=!1,Z.value=[]}catch(e){f.error(`${E(`@CMD01:NPM命令同步失败: `)}${e.message}`)}finally{$.value=!1}}return D({resetForm:G}),(r,i)=>{let f=t,h=te,g=a,y=ae,b=ie,C=le,T=ee,D=n,O=pe,A=ue;return o(),d(se,null,[l(D,{modelValue:W.value,"onUpdate:modelValue":i[4]||=e=>W.value=e,title:S(E)(`@CMD01:自定义命令管理`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,fullscreen:!!e.fullscreen,width:e.fullscreen?`100vw`:`90%`,top:e.fullscreen?`0`:`50px`,"z-index":3e6,"modal-class":`custom-command-overlay`,class:`custom-command-dialog`},{default:x(()=>[_(`div`,ge,[_(`div`,_e,[_(`div`,ve,[_(`div`,ye,[_(`div`,be,v(B.value?S(E)(`@CMD01:编辑命令`):S(E)(`@CMD01:添加命令`)),1)]),_(`div`,xe,[_(`div`,Se,[_(`div`,Ce,[_(`label`,we,v(S(E)(`@CMD01:命令名称`)),1),l(S(u),{modelValue:z.value.name,"onUpdate:modelValue":i[0]||=e=>z.value.name=e,placeholder:S(E)(`@CMD01:输入命令名称,例如: 拉取代码`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),_(`div`,Te,[_(`div`,Ee,[_(`label`,null,v(S(E)(`@CMD01:描述`)),1),l(S(u),{modelValue:z.value.description,"onUpdate:modelValue":i[1]||=e=>z.value.description=e,placeholder:S(E)(`@CMD01:可选,简要描述命令用途`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),_(`div`,De,[_(`div`,Oe,[_(`label`,null,v(S(E)(`@CMD01:执行目录`)),1),_(`div`,ke,[l(S(u),{modelValue:z.value.directory,"onUpdate:modelValue":i[2]||=e=>z.value.directory=e,placeholder:S(E)(`@CMD01:留空使用当前目录`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`]),l(f,{onClick:ht,type:`primary`,plain:``,size:`default`},{default:x(()=>[w(v(S(E)(`@CMD01:使用当前目录`)),1)]),_:1}),l(f,{onClick:pt,type:`info`,plain:``,size:`default`},{default:x(()=>[l(h,null,{default:x(()=>[l(S(fe))]),_:1}),w(` `+v(S(E)(`@CMD01:选择目录`)),1)]),_:1})])])]),_(`div`,Ae,[_(`div`,je,[_(`label`,Me,v(S(E)(`@CMD01:命令`)),1),l(g,{modelValue:z.value.command,"onUpdate:modelValue":i[3]||=e=>z.value.command=e,"fetch-suggestions":it,placeholder:S(E)(`@CMD01:输入要执行的命令,例如: npm run build`),clearable:``,size:`large`,"trigger-on-focus":``,"popper-class":`custom-command-popper`,onSelect:at,onKeyup:de(K,[`enter`]),style:{width:`100%`}},null,8,[`modelValue`,`placeholder`]),z.value.params&&z.value.params.length>0?(o(),d(`div`,Ne,[_(`div`,Pe,v(S(E)(`@CMD01:变量配置`)),1),l(C,{data:z.value.params,style:{width:`100%`},size:`small`,stripe:``},{default:x(()=>[l(y,{prop:`name`,label:S(E)(`@CMD01:变量名`),width:`160`},null,8,[`label`]),l(y,{label:S(E)(`@CMD01:默认值`),"min-width":`180`},{default:x(e=>[l(S(u),{modelValue:e.row.defaultValue,"onUpdate:modelValue":t=>e.row.defaultValue=t,size:`small`,clearable:``,placeholder:S(E)(`@CMD01:默认值`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:必填`),width:`90`,align:`center`},{default:x(e=>[l(b,{modelValue:e.row.required,"onUpdate:modelValue":t=>e.row.required=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:描述`),"min-width":`220`},{default:x(e=>[l(S(u),{modelValue:e.row.description,"onUpdate:modelValue":t=>e.row.description=t,size:`small`,clearable:``,placeholder:S(E)(`@CMD01:描述`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`data`])])):p(``,!0)])]),_(`div`,Fe,[B.value?(o(),m(f,{key:0,onClick:lt,size:`large`},{default:x(()=>[w(v(S(E)(`@CMD01:取消`)),1)]),_:1})):p(``,!0),l(f,{type:`primary`,onClick:K,disabled:!z.value.name.trim()||!z.value.command.trim()||H.value,loading:H.value,size:`large`,class:`save-btn`},{default:x(()=>[w(v(B.value?S(E)(`@CMD01:更新命令`):S(E)(`@CMD01:添加命令`)),1)]),_:1},8,[`disabled`,`loading`])])])])]),_(`div`,Ie,[_(`div`,Le,[_(`div`,Re,[_(`div`,ze,[_(`h3`,Be,v(S(E)(`@CMD01:已保存的命令`)),1),J.value.length>0?(o(),d(`span`,Ve,v(S(E)(`@CMD01:已选择`,{count:J.value.length})),1)):p(``,!0)]),_(`div`,He,[J.value.length>0?(o(),m(f,{key:0,type:`danger`,plain:``,size:`small`,onClick:vt},{default:x(()=>[w(v(S(E)(`@CMD01:批量删除`)),1)]),_:1})):p(``,!0),l(f,{type:`primary`,plain:``,size:`small`,loading:Q.value,onClick:bt},{default:x(()=>[w(v(S(E)(`@CMD01:同步NPM命令`)),1)]),_:1},8,[`loading`])])]),_(`div`,Ue,[U.value.length===0?(o(),m(T,{key:0,description:S(E)(`@CMD01:暂无保存的命令`)},null,8,[`description`])):(o(),d(`div`,We,[l(C,{ref_key:`commandTableRef`,ref:gt,data:U.value,style:{width:`100%`,height:`100%`},stripe:``,onSelectionChange:_t},{default:x(()=>[l(y,{type:`selection`,width:`40`}),l(y,{prop:`name`,label:S(E)(`@CMD01:命令名称`),"min-width":`80`},{default:x(e=>[_(`div`,Ge,[_(`span`,Ke,v(e.row.name),1),e.row.description?(o(),d(`span`,qe,v(e.row.description),1)):p(``,!0)])]),_:1},8,[`label`]),l(y,{prop:`command`,label:S(E)(`@CMD01:命令`),"min-width":`200`},{default:x(e=>[_(`code`,Je,v(e.row.command),1)]),_:1},8,[`label`]),l(y,{prop:`directory`,label:S(E)(`@CMD01:执行目录`),"min-width":`200`},{default:x(e=>[_(`span`,Ye,v(e.row.directory),1)]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:操作`),width:`138`,fixed:`right`},{default:x(e=>[_(`div`,Xe,[l(k,{tooltip:S(E)(`@CMD01:置顶`),size:`small`,"hover-color":`var(--color-info)`,onClick:t=>dt(e.row.id)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(c))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:执行命令`),size:`small`,"hover-color":`var(--color-success)`,onClick:t=>ft(e.row)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(ne))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:编辑`),size:`small`,"hover-color":`var(--color-primary)`,onClick:t=>ct(e.row)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(oe))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:复制命令`),size:`small`,"hover-color":`var(--color-warning)`,onClick:t=>M(e.row)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(re))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:t=>ut(e.row.id)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(ce))]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]),_:1},8,[`label`])]),_:1},8,[`data`])]))])])])])]),_:1},8,[`modelValue`,`title`,`fullscreen`,`width`,`top`]),l(he,{visible:I.value,"onUpdate:visible":i[5]||=e=>I.value=e,type:`command`,title:S(E)(`@CMD01:命令模板管理`),placeholder:S(E)(`@CMD01:输入命令模板,例如: npm run build`),"edit-placeholder":S(E)(`@CMD01:编辑命令模板`),"empty-description":S(E)(`@CMD01:暂无保存的命令模板`)},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),l(S(me),{visible:q.value,locale:S(rt),onClose:i[6]||=e=>q.value=!1,onConfirm:i[7]||=e=>{mt(e[0]),q.value=!1}},null,8,[`visible`,`locale`]),l(D,{modelValue:Y.value,"onUpdate:modelValue":i[9]||=e=>Y.value=e,title:S(E)(`@CMD01:选择NPM命令`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,width:`680px`,"z-index":3000010,"modal-class":`npm-sync-overlay`,class:`npm-sync-dialog`},{footer:x(()=>[_(`div`,$e,[_(`span`,et,v(S(E)(`@CMD01:已选择`,{count:Z.value.length})),1),l(f,{onClick:i[8]||=e=>Y.value=!1},{default:x(()=>[w(v(S(E)(`@CMD01:取消`)),1)]),_:1}),l(f,{type:`primary`,loading:$.value,disabled:Z.value.length===0,onClick:St},{default:x(()=>[w(v(S(E)(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:x(()=>[s((o(),d(`div`,Ze,[l(C,{ref_key:`npmTableRef`,ref:yt,data:X.value,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:xt},{default:x(()=>[l(y,{type:`selection`,width:`44`,selectable:()=>!0}),l(y,{prop:`packageName`,label:S(E)(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),l(y,{prop:`scriptName`,label:S(E)(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),l(y,{prop:`scriptName`,label:S(E)(`@CMD01:命令`),"min-width":`160`},{default:x(e=>[_(`code`,Qe,`npm run `+v(e.row.scriptName),1)]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:状态`),width:`80`,align:`center`},{default:x(e=>[e.row.isDuplicate?(o(),m(O,{key:0,type:`warning`,size:`small`},{default:x(()=>[w(v(S(E)(`@CMD01:已存在`)),1)]),_:1})):(o(),m(O,{key:1,type:`success`,size:`small`},{default:x(()=>[w(v(S(E)(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[A,Q.value]])]),_:1},8,[`modelValue`,`title`])],64)}}}),tt=e({default:()=>M}),M=D(j,[[`__scopeId`,`data-v-d46577c6`]]);export{tt as n,M as t};
1
+ import{r as e}from"./rolldown-runtime-CMxvf4Kt.js";import{B as t,D as n,En as r,Gn as i,H as a,In as o,Jn as s,Kt as c,S as ee,Sn as l,W as u,Y as te,Yt as ne,_n as d,a as f,ct as re,g as ie,gn as p,h as ae,hn as m,ht as oe,i as h,ir as g,ln as se,lt as ce,m as le,mn as _,mr as v,nr as y,o as ue,pn as b,qn as x,sn as de,ur as S,vt as fe,wn as C,xn as w,z as pe}from"./element-plus-CRTdimvR.js";import{d as T,o as me}from"./vendor-BxotT5qN.js";import{n as E,t as D}from"./_plugin-vue_export-helper-BWJlNHzL.js";import{c as O,i as k,l as A}from"./index-BkpNzYyv.js";import{t as he}from"./TemplateManager-CogQCagT.js";var ge={class:`command-container`},_e={class:`left-panel`},ve={class:`command-form`},ye={class:`form-header`},be={class:`left-title`},xe={class:`form-content`},Se={class:`form-row`},Ce={class:`form-field`},we={class:`required`},Te={class:`form-row`},Ee={class:`form-field`},De={class:`form-row`},Oe={class:`form-field`},ke={class:`directory-input-group`},Ae={class:`form-row`},je={class:`form-field`},Me={class:`required`},Ne={key:0,class:`command-params`},Pe={class:`params-title`},Fe={class:`form-actions`},Ie={class:`right-panel`},Le={class:`command-list`},Re={class:`list-header`},ze={class:`list-header-left`},Be={class:`list-title`},Ve={key:0,class:`selection-count`},He={class:`list-header-actions`},Ue={class:`list-content`},We={key:1,class:`command-list-scroll`},Ge={class:`name-cell`},Ke={class:`name-text`},qe={key:0,class:`description-text`},Je={class:`command-text`},Ye={class:`directory-text`},Xe={class:`action-buttons`},Ze={class:`npm-dialog-body`},Qe={class:`command-text`},$e={class:`npm-dialog-footer`},et={class:`npm-selected-count`},j=C({__name:`CustomCommandManager`,props:{visible:{type:Boolean},fullscreen:{type:Boolean}},emits:[`update:visible`,`execute-command`],setup(e,{expose:D,emit:j}){function tt(e){let t=`${e}(copy)`,n=Array.isArray(U.value)?U.value:[],r=e=>n.some(t=>String(t?.name||``)===e);if(!r(t))return t;let i=2;for(;i<1e3;){let t=`${e}(copy${i})`;if(!r(t))return t;i++}return`${t}-${Date.now()}`}async function M(e){try{let t=R(e),n={name:tt(String(e?.name||``).trim()||E(`@CMD01:命令名称`)),description:String(e?.description||``),directory:String(e?.directory||``),command:String(e?.command||``),params:JSON.parse(JSON.stringify(t||[]))};(!n.directory||!n.directory.trim())&&(n.directory=P.currentDirectory||``),await P.saveCustomCommand(n)}catch(e){f.error(`${E(`@CMD01:保存命令失败: `)}${e.message}`)}}let nt=e,N=j,P=O(),{currentLocale:rt}=T(A()),F=b(()=>P.commandTemplates||[]),I=g(!1);function it(e,t){let n=Array.isArray(F.value)?F.value:[];t([...e?n.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):n.map(e=>({value:e})),{value:`⚙️ 管理模板...`,isSettings:!0}])}function at(e){if(e.isSettings){I.value=!0,z.value.command=``;return}z.value.command=e.value}function L(e){let t=[],n=/{{\s*([a-zA-Z0-9_]+)\s*}}/g,r;for(;r=n.exec(e);){let e=String(r[1]||``).trim();e&&!t.includes(e)&&t.push(e)}return t}function ot(e,t){return e.replace(/{{\s*([a-zA-Z0-9_]+)\s*}}/g,(e,n)=>{let r=String(n||``).trim();return Object.prototype.hasOwnProperty.call(t,r)?String(t[r]??``):``})}let st=C({name:`CmdParamForm`,props:{vars:{type:Array,required:!0},values:{type:Object,required:!0},params:{type:Array,required:!1}},setup(e){function t(t){let n=(Array.isArray(e.params)?e.params:[]).find(e=>String(e?.name||``)===t);return n?String(n?.description||``).trim():``}return()=>r(`div`,{class:`cmd-param-form`},e.vars.map(n=>r(`div`,{class:`cmd-param-row`},[r(`div`,{class:`cmd-param-label`},n),r(u,{modelValue:e.values[n],"onUpdate:modelValue":t=>{e.values[n]=String(t??``)},placeholder:E(`@CMD01:请输入变量值`,{var:n}),clearable:!0}),t(n)?r(`div`,{class:`cmd-param-desc`},t(n)):null])))}});function R(e){let t=L(String(e?.command||``)),n=Array.isArray(e?.params)?e.params:[],r=new Map;for(let e of n){let t=String(e?.name||``).trim();t&&r.set(t,{name:t,defaultValue:String(e?.defaultValue??``),required:!!e?.required,description:String(e?.description??``)})}return t.map(e=>r.has(e)?r.get(e):{name:e,defaultValue:``,required:!1,description:``})}let z=g({name:``,description:``,directory:``,command:``,params:[]}),B=g(!1),V=g(``),H=g(!1),U=b(()=>P.customCommands||[]),W=b({get:()=>nt.visible,set:e=>N(`update:visible`,e)});i(W,e=>{e||G()});function G(){z.value={name:``,description:``,directory:``,command:``,params:[]},B.value=!1,V.value=``}i(()=>z.value.command,e=>{let t=L(String(e||``));if(!t.length){z.value.params=[];return}let n=Array.isArray(z.value.params)?z.value.params:[],r=new Map(n.map(e=>[String(e?.name||``),e]));z.value.params=t.map(e=>{let t=r.get(e);return{name:e,defaultValue:t?String(t.defaultValue??``):``,required:t?!!t.required:!1,description:t?String(t.description??``):``}})},{immediate:!0});async function K(){if(!z.value.name.trim()){f.warning(E(`@CMD01:命令名称不能为空`));return}if(!z.value.command.trim()){f.warning(E(`@CMD01:命令内容不能为空`));return}try{H.value=!0,B.value?await P.updateCustomCommand(V.value,z.value)&&G():((!z.value.directory||!z.value.directory.trim())&&(z.value.directory=P.currentDirectory||``),await P.saveCustomCommand(z.value)&&G())}catch(e){f.error(`${E(`@CMD01:命令保存失败: `)}${e.message}`)}finally{H.value=!1}}function ct(e){B.value=!0,V.value=e.id||``,z.value={name:e.name,description:e.description||``,directory:e.directory,command:e.command,params:R(e)}}function lt(){G()}async function ut(e){try{await h.confirm(E(`@CMD01:确定要删除这个自定义命令吗?`),E(`@CMD01:删除确认`),{confirmButtonText:E(`@CMD01:确定`),cancelButtonText:E(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`}),await P.deleteCustomCommand(e)}catch{}}async function dt(e){await P.pinCustomCommand(e)}async function ft(e){let t=String(e?.command||``),n=L(t);if(!n.length){N(`execute-command`,e);return}let i=y({});try{let a=R(e),o=new Map(a.map(e=>[String(e.name),e]));for(let e of n){let t=o.get(e);i[e]=t?String(t.defaultValue??``):``}await h({title:E(`@CMD01:执行参数`),message:r(st,{vars:n,values:i,params:a}),showCancelButton:!0,confirmButtonText:E(`@CMD01:确定`),cancelButtonText:E(`@CMD01:取消`),closeOnClickModal:!1,customClass:`cmd-param-message-box`});let s=(Array.isArray(e?.params)?e.params:[]).map(e=>({name:String(e?.name||``).trim(),required:!!e?.required})).filter(e=>e.name);for(let e of s){if(!e.required)continue;let t=i[e.name];if(t==null||String(t).trim()===``){f.warning(E(`@CMD01:请输入必填变量: `,{var:e.name}));return}}let c=ot(t,i);N(`execute-command`,{...e,command:c})}catch{}}let q=g(!1);function pt(){q.value=!0}function mt(e){z.value.directory=e}function ht(){z.value.directory=P.currentDirectory||``}let gt=g(null),J=g([]);function _t(e){J.value=e}async function vt(){let e=[...J.value],t=e.length;if(t)try{await h.confirm(E(`@CMD01:确定要删除所选命令吗`,{count:t}),E(`@CMD01:删除确认`),{confirmButtonText:E(`@CMD01:确定`),cancelButtonText:E(`@CMD01:取消`),type:`warning`,customClass:`cmd-confirm-box`});let n=0;for(let t of e)t.id&&(await(await fetch(`/api/config/delete-custom-command`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t.id})})).json()).success&&n++;await P.loadConfig(!0),J.value=[],f.success(E(`@CMD01:批量删除成功`,{count:n}))}catch{}}let Y=g(!1),X=g([]),Z=g([]),yt=g(null),Q=g(!1),$=g(!1);async function bt(){try{Q.value=!0,Y.value=!0,X.value=[],Z.value=[];let e=await(await fetch(`/api/scan-npm-scripts`)).json();if(!e.success){f.error(`${E(`@CMD01:NPM命令同步失败: `)}${e.error||``}`),Y.value=!1;return}let t=e.packages||[];if(t.length===0){f.warning(E(`@CMD01:未找到任何NPM脚本`)),Y.value=!1;return}let n=new Set((Array.isArray(U.value)?U.value:[]).map(e=>String(e?.name||``).trim())),r=[];for(let e of t){let t=e.scripts||{};for(let i of Object.keys(t)){let t=`${e.name}: ${i}`;r.push({key:t,label:t,packageName:e.name,packagePath:e.path,scriptName:i,isDuplicate:n.has(t)})}}X.value=r}catch(e){f.error(`${E(`@CMD01:NPM命令同步失败: `)}${e.message}`),Y.value=!1}finally{Q.value=!1}}function xt(e){Z.value=e}async function St(){if(!Z.value.length){f.warning(E(`@CMD01:请至少选择一项`));return}try{$.value=!0;let e=new Set((Array.isArray(U.value)?U.value:[]).map(e=>String(e?.name||``).trim())),t=0,n=0;for(let r of Z.value){if(e.has(r.key)){n++;continue}await P.saveCustomCommand({name:r.key,description:`npm run ${r.scriptName}`,directory:r.packagePath,command:`npm run ${r.scriptName}`})&&(e.add(r.key),t++)}f.success(E(`@CMD01:NPM命令同步完成2`,{count:t,skip:n})),Y.value=!1,Z.value=[]}catch(e){f.error(`${E(`@CMD01:NPM命令同步失败: `)}${e.message}`)}finally{$.value=!1}}return D({resetForm:G}),(r,i)=>{let f=t,h=te,g=a,y=ae,b=ie,C=le,T=ee,D=n,O=pe,A=ue;return o(),d(se,null,[l(D,{modelValue:W.value,"onUpdate:modelValue":i[4]||=e=>W.value=e,title:S(E)(`@CMD01:自定义命令管理`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,fullscreen:!!e.fullscreen,width:e.fullscreen?`100vw`:`90%`,top:e.fullscreen?`0`:`50px`,"z-index":3e6,"modal-class":`custom-command-overlay`,class:`custom-command-dialog`},{default:x(()=>[_(`div`,ge,[_(`div`,_e,[_(`div`,ve,[_(`div`,ye,[_(`div`,be,v(B.value?S(E)(`@CMD01:编辑命令`):S(E)(`@CMD01:添加命令`)),1)]),_(`div`,xe,[_(`div`,Se,[_(`div`,Ce,[_(`label`,we,v(S(E)(`@CMD01:命令名称`)),1),l(S(u),{modelValue:z.value.name,"onUpdate:modelValue":i[0]||=e=>z.value.name=e,placeholder:S(E)(`@CMD01:输入命令名称,例如: 拉取代码`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),_(`div`,Te,[_(`div`,Ee,[_(`label`,null,v(S(E)(`@CMD01:描述`)),1),l(S(u),{modelValue:z.value.description,"onUpdate:modelValue":i[1]||=e=>z.value.description=e,placeholder:S(E)(`@CMD01:可选,简要描述命令用途`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`])])]),_(`div`,De,[_(`div`,Oe,[_(`label`,null,v(S(E)(`@CMD01:执行目录`)),1),_(`div`,ke,[l(S(u),{modelValue:z.value.directory,"onUpdate:modelValue":i[2]||=e=>z.value.directory=e,placeholder:S(E)(`@CMD01:留空使用当前目录`),clearable:``,size:`large`},null,8,[`modelValue`,`placeholder`]),l(f,{onClick:ht,type:`primary`,plain:``,size:`default`},{default:x(()=>[w(v(S(E)(`@CMD01:使用当前目录`)),1)]),_:1}),l(f,{onClick:pt,type:`info`,plain:``,size:`default`},{default:x(()=>[l(h,null,{default:x(()=>[l(S(fe))]),_:1}),w(` `+v(S(E)(`@CMD01:选择目录`)),1)]),_:1})])])]),_(`div`,Ae,[_(`div`,je,[_(`label`,Me,v(S(E)(`@CMD01:命令`)),1),l(g,{modelValue:z.value.command,"onUpdate:modelValue":i[3]||=e=>z.value.command=e,"fetch-suggestions":it,placeholder:S(E)(`@CMD01:输入要执行的命令,例如: npm run build`),clearable:``,size:`large`,"trigger-on-focus":``,"popper-class":`custom-command-popper`,onSelect:at,onKeyup:de(K,[`enter`]),style:{width:`100%`}},null,8,[`modelValue`,`placeholder`]),z.value.params&&z.value.params.length>0?(o(),d(`div`,Ne,[_(`div`,Pe,v(S(E)(`@CMD01:变量配置`)),1),l(C,{data:z.value.params,style:{width:`100%`},size:`small`,stripe:``},{default:x(()=>[l(y,{prop:`name`,label:S(E)(`@CMD01:变量名`),width:`160`},null,8,[`label`]),l(y,{label:S(E)(`@CMD01:默认值`),"min-width":`180`},{default:x(e=>[l(S(u),{modelValue:e.row.defaultValue,"onUpdate:modelValue":t=>e.row.defaultValue=t,size:`small`,clearable:``,placeholder:S(E)(`@CMD01:默认值`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:必填`),width:`90`,align:`center`},{default:x(e=>[l(b,{modelValue:e.row.required,"onUpdate:modelValue":t=>e.row.required=t},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:描述`),"min-width":`220`},{default:x(e=>[l(S(u),{modelValue:e.row.description,"onUpdate:modelValue":t=>e.row.description=t,size:`small`,clearable:``,placeholder:S(E)(`@CMD01:描述`)},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1},8,[`data`])])):p(``,!0)])]),_(`div`,Fe,[B.value?(o(),m(f,{key:0,onClick:lt,size:`large`},{default:x(()=>[w(v(S(E)(`@CMD01:取消`)),1)]),_:1})):p(``,!0),l(f,{type:`primary`,onClick:K,disabled:!z.value.name.trim()||!z.value.command.trim()||H.value,loading:H.value,size:`large`,class:`save-btn`},{default:x(()=>[w(v(B.value?S(E)(`@CMD01:更新命令`):S(E)(`@CMD01:添加命令`)),1)]),_:1},8,[`disabled`,`loading`])])])])]),_(`div`,Ie,[_(`div`,Le,[_(`div`,Re,[_(`div`,ze,[_(`h3`,Be,v(S(E)(`@CMD01:已保存的命令`)),1),J.value.length>0?(o(),d(`span`,Ve,v(S(E)(`@CMD01:已选择`,{count:J.value.length})),1)):p(``,!0)]),_(`div`,He,[J.value.length>0?(o(),m(f,{key:0,type:`danger`,plain:``,size:`small`,onClick:vt},{default:x(()=>[w(v(S(E)(`@CMD01:批量删除`)),1)]),_:1})):p(``,!0),l(f,{type:`primary`,plain:``,size:`small`,loading:Q.value,onClick:bt},{default:x(()=>[w(v(S(E)(`@CMD01:同步NPM命令`)),1)]),_:1},8,[`loading`])])]),_(`div`,Ue,[U.value.length===0?(o(),m(T,{key:0,description:S(E)(`@CMD01:暂无保存的命令`)},null,8,[`description`])):(o(),d(`div`,We,[l(C,{ref_key:`commandTableRef`,ref:gt,data:U.value,style:{width:`100%`,height:`100%`},stripe:``,onSelectionChange:_t},{default:x(()=>[l(y,{type:`selection`,width:`40`}),l(y,{prop:`name`,label:S(E)(`@CMD01:命令名称`),"min-width":`80`},{default:x(e=>[_(`div`,Ge,[_(`span`,Ke,v(e.row.name),1),e.row.description?(o(),d(`span`,qe,v(e.row.description),1)):p(``,!0)])]),_:1},8,[`label`]),l(y,{prop:`command`,label:S(E)(`@CMD01:命令`),"min-width":`200`},{default:x(e=>[_(`code`,Je,v(e.row.command),1)]),_:1},8,[`label`]),l(y,{prop:`directory`,label:S(E)(`@CMD01:执行目录`),"min-width":`200`},{default:x(e=>[_(`span`,Ye,v(e.row.directory),1)]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:操作`),width:`138`,fixed:`right`},{default:x(e=>[_(`div`,Xe,[l(k,{tooltip:S(E)(`@CMD01:置顶`),size:`small`,"hover-color":`var(--color-info)`,onClick:t=>dt(e.row.id)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(c))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:执行命令`),size:`small`,"hover-color":`var(--color-success)`,onClick:t=>ft(e.row)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(ne))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:编辑`),size:`small`,"hover-color":`var(--color-primary)`,onClick:t=>ct(e.row)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(oe))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:复制命令`),size:`small`,"hover-color":`var(--color-warning)`,onClick:t=>M(e.row)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(re))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),l(k,{tooltip:S(E)(`@CMD01:删除`),size:`small`,"hover-color":`var(--color-danger)`,onClick:t=>ut(e.row.id)},{default:x(()=>[l(h,null,{default:x(()=>[l(S(ce))]),_:1})]),_:1},8,[`tooltip`,`onClick`])])]),_:1},8,[`label`])]),_:1},8,[`data`])]))])])])])]),_:1},8,[`modelValue`,`title`,`fullscreen`,`width`,`top`]),l(he,{visible:I.value,"onUpdate:visible":i[5]||=e=>I.value=e,type:`command`,title:S(E)(`@CMD01:命令模板管理`),placeholder:S(E)(`@CMD01:输入命令模板,例如: npm run build`),"edit-placeholder":S(E)(`@CMD01:编辑命令模板`),"empty-description":S(E)(`@CMD01:暂无保存的命令模板`)},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),l(S(me),{visible:q.value,locale:S(rt),onClose:i[6]||=e=>q.value=!1,onConfirm:i[7]||=e=>{mt(e[0]),q.value=!1}},null,8,[`visible`,`locale`]),l(D,{modelValue:Y.value,"onUpdate:modelValue":i[9]||=e=>Y.value=e,title:S(E)(`@CMD01:选择NPM命令`),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,width:`680px`,"z-index":3000010,"modal-class":`npm-sync-overlay`,class:`npm-sync-dialog`},{footer:x(()=>[_(`div`,$e,[_(`span`,et,v(S(E)(`@CMD01:已选择`,{count:Z.value.length})),1),l(f,{onClick:i[8]||=e=>Y.value=!1},{default:x(()=>[w(v(S(E)(`@CMD01:取消`)),1)]),_:1}),l(f,{type:`primary`,loading:$.value,disabled:Z.value.length===0,onClick:St},{default:x(()=>[w(v(S(E)(`@CMD01:开始同步`)),1)]),_:1},8,[`loading`,`disabled`])])]),default:x(()=>[s((o(),d(`div`,Ze,[l(C,{ref_key:`npmTableRef`,ref:yt,data:X.value,style:{width:`100%`},"max-height":`420`,stripe:``,onSelectionChange:xt},{default:x(()=>[l(y,{type:`selection`,width:`44`,selectable:()=>!0}),l(y,{prop:`packageName`,label:S(E)(`@CMD01:包名`),"min-width":`140`},null,8,[`label`]),l(y,{prop:`scriptName`,label:S(E)(`@CMD01:脚本名`),"min-width":`120`},null,8,[`label`]),l(y,{prop:`scriptName`,label:S(E)(`@CMD01:命令`),"min-width":`160`},{default:x(e=>[_(`code`,Qe,`npm run `+v(e.row.scriptName),1)]),_:1},8,[`label`]),l(y,{label:S(E)(`@CMD01:状态`),width:`80`,align:`center`},{default:x(e=>[e.row.isDuplicate?(o(),m(O,{key:0,type:`warning`,size:`small`},{default:x(()=>[w(v(S(E)(`@CMD01:已存在`)),1)]),_:1})):(o(),m(O,{key:1,type:`success`,size:`small`},{default:x(()=>[w(v(S(E)(`@CMD01:新增`)),1)]),_:1}))]),_:1},8,[`label`])]),_:1},8,[`data`])])),[[A,Q.value]])]),_:1},8,[`modelValue`,`title`])],64)}}}),tt=e({default:()=>M}),M=D(j,[[`__scopeId`,`data-v-d46577c6`]]);export{tt as n,M as t};
@@ -1 +1 @@
1
- .md-preview[data-v-4d55e4f6]{color:inherit;word-break:break-word;padding:20px 24px;font-size:14px;line-height:1.6}.md-preview[data-v-4d55e4f6] h1,.md-preview[data-v-4d55e4f6] h2,.md-preview[data-v-4d55e4f6] h3,.md-preview[data-v-4d55e4f6] h4,.md-preview[data-v-4d55e4f6] h5,.md-preview[data-v-4d55e4f6] h6{border-bottom:1px solid var(--border-color,#d0d7de);margin-top:24px;margin-bottom:16px;padding-bottom:.3em;font-weight:600}.md-preview[data-v-4d55e4f6] h1{font-size:1.8em}.md-preview[data-v-4d55e4f6] h2{font-size:1.4em}.md-preview[data-v-4d55e4f6] h3{font-size:1.2em}.md-preview[data-v-4d55e4f6] p{margin:0 0 14px}.md-preview[data-v-4d55e4f6] a{color:var(--link-color,#0969da);text-decoration:none}.md-preview[data-v-4d55e4f6] a:hover{text-decoration:underline}.md-preview[data-v-4d55e4f6] code{background:var(--code-bg,#f6f8fa);border-radius:4px;padding:2px 5px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:87%}.md-preview[data-v-4d55e4f6] pre{background:var(--code-bg,#f6f8fa);border-radius:6px;margin:0 0 16px;padding:14px 16px;overflow:auto}.md-preview[data-v-4d55e4f6] pre code{background:0 0;padding:0;font-size:100%}.md-preview[data-v-4d55e4f6] blockquote{border-left:3px solid var(--border-color,#d0d7de);color:var(--text-secondary,#656d76);margin:0 0 16px;padding:0 16px}.md-preview[data-v-4d55e4f6] img{border-radius:4px;max-width:100%}.md-preview[data-v-4d55e4f6] hr{border:none;border-top:1px solid var(--border-color,#d0d7de);margin:24px 0}.md-preview[data-v-4d55e4f6] table{border-collapse:collapse;width:100%;margin-bottom:16px}.md-preview[data-v-4d55e4f6] th,.md-preview[data-v-4d55e4f6] td{border:1px solid var(--border-color,#d0d7de);padding:6px 13px}.md-preview[data-v-4d55e4f6] thead tr{background:var(--code-bg,#f6f8fa)}.md-preview[data-v-4d55e4f6] ul,.md-preview[data-v-4d55e4f6] ol{margin-bottom:16px;padding-left:2em}.md-preview[data-v-4d55e4f6] li{margin:4px 0}.md-segment[data-v-4d55e4f6]{display:block}.md-mindmap[data-v-4d55e4f6]{border:1px solid var(--border-color,#d0d7de);background:var(--bg-panel,#fff);border-radius:8px;margin:18px 0 28px;overflow:hidden}.md-mindmap-title[data-v-4d55e4f6]{color:var(--text-secondary,#656d76);background:var(--code-bg,#f6f8fa);letter-spacing:.5px;padding:8px 12px;font-size:12px;font-weight:600}.md-mindmap-canvas[data-v-4d55e4f6]{width:100%;height:480px;display:block}.mindmap-preview[data-v-6929f46f]{background:var(--bg-container,#fff);flex-direction:column;width:100%;height:100%;display:flex}.mindmap-preview-header[data-v-6929f46f]{background:var(--bg-panel,#f6f8fa);align-items:center;gap:12px;padding:8px 14px;font-size:12px;display:flex}.mindmap-preview-title[data-v-6929f46f]{color:var(--text-primary,#1f2328);letter-spacing:.5px;font-weight:600}.mindmap-preview-hint[data-v-6929f46f]{color:var(--text-secondary,#656d76);font-size:11px}.mindmap-preview-canvas[data-v-6929f46f]{flex:1;width:100%;min-height:0}.mindmap-preview-canvas[data-v-6929f46f] .zm-mindmap,.mindmap-preview-canvas[data-v-6929f46f]>*{width:100%;height:100%}.editor-view[data-v-4296fce0]{background:var(--bg-container);width:100%;height:100%;box-shadow:var(--shadow-sm);border-radius:0;display:flex;overflow:hidden}.editor-sidebar[data-v-4296fce0]{background:var(--bg-panel);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.sidebar-header[data-v-4296fce0]{flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 10px 6px;display:flex}.sidebar-title[data-v-4296fce0]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.sidebar-action-btn[data-v-4296fce0]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;display:flex}.sidebar-action-btn[data-v-4296fce0]:hover{color:var(--text-primary);background:var(--bg-hover)}.sidebar-search[data-v-4296fce0]{flex-shrink:0;align-items:center;padding:6px 10px;display:flex;position:relative}.sidebar-search-icon[data-v-4296fce0]{color:var(--text-tertiary);pointer-events:none;position:absolute;left:18px}.sidebar-search-input[data-v-4296fce0]{min-width:0;height:26px;color:var(--text-primary);background:var(--bg-input,#ffffff0a);border:1px solid var(--border-color);border-radius:var(--radius-base);outline:none;flex:1;padding:0 24px 0 26px;font-size:12px;transition:border-color .12s,background .12s}.sidebar-search-input[data-v-4296fce0]::placeholder{color:var(--text-tertiary)}.sidebar-search-input[data-v-4296fce0]:hover{border-color:var(--text-tertiary)}.sidebar-search-input[data-v-4296fce0]:focus{border-color:var(--accent-color,#3b82f6);background:var(--bg-panel)}.sidebar-search-clear[data-v-4296fce0]{cursor:pointer;width:18px;height:18px;color:var(--text-tertiary);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:flex;position:absolute;right:14px}.sidebar-search-clear[data-v-4296fce0]:hover{background:var(--bg-hover);color:var(--text-primary)}.tree-name-hit[data-v-4296fce0]{color:var(--accent-color,#f59e0b);background:#f59e0b26;border-radius:2px;padding:0 1px}.sidebar-tree[data-v-4296fce0]{flex:1;padding:4px 0;overflow:hidden auto}.tree-node[data-v-4296fce0]{cursor:pointer;-webkit-user-select:none;user-select:none;height:24px;color:var(--text-primary);white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding-right:8px;font-size:13px;transition:background .1s;display:flex;overflow:hidden}.tree-node[data-v-4296fce0]:hover{background:var(--bg-hover)}.tree-node--active[data-v-4296fce0]{color:var(--color-primary);background:#3b82f61f}.tree-node--selected[data-v-4296fce0]{outline-offset:-1px;background:#63b3ed26;outline:1px solid #63b3ed59}.tree-arrow[data-v-4296fce0]{color:var(--text-tertiary);flex-shrink:0;align-items:center;width:12px;transition:transform .15s;display:flex}.tree-arrow.expanded[data-v-4296fce0]{transform:rotate(90deg)}.tree-arrow-spacer[data-v-4296fce0]{flex-shrink:0;width:12px}.tree-icon[data-v-4296fce0]{flex-shrink:0;align-items:center;font-size:14px;line-height:1;display:flex}.tree-icon.mit-icon[data-v-4296fce0]{fill:currentColor;vertical-align:middle;width:14px;height:14px;display:inline-block}.tree-icon--dir[data-v-4296fce0]{color:#e8b84b}.tree-name[data-v-4296fce0]{text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;overflow:hidden}.tree-loading[data-v-4296fce0]{border:1.5px solid var(--color-primary);border-top-color:#0000;border-radius:50%;flex-shrink:0;width:10px;height:10px;animation:.8s linear infinite spin-4296fce0;display:inline-block}.tree-empty[data-v-4296fce0]{color:var(--text-tertiary);text-align:center;padding:24px 12px;font-size:12px}.sidebar-loading[data-v-4296fce0]{flex:1;justify-content:center;align-items:center;display:flex}.spin-icon[data-v-4296fce0]{border:2px solid var(--color-primary);border-top-color:#0000;border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-4296fce0;display:inline-block}@keyframes spin-4296fce0{to{transform:rotate(360deg)}}.editor-resizer[data-v-4296fce0]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;width:6px;transition:background .15s;position:relative}.editor-resizer[data-v-4296fce0]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.editor-resizer[data-v-4296fce0]:hover{background:#3b82f60f}.editor-resizer[data-v-4296fce0]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.editor-main[data-v-4296fce0]{flex-direction:column;flex:1;display:flex;overflow:hidden}.editor-tabs[data-v-4296fce0]{background:var(--bg-panel);scrollbar-width:none;flex-shrink:0;display:flex;overflow:auto hidden}.editor-tabs[data-v-4296fce0]::-webkit-scrollbar{display:none}.editor-tab[data-v-4296fce0]{cursor:pointer;height:34px;color:var(--text-secondary);-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:6px;min-width:80px;max-width:200px;padding:0 12px;font-size:12.5px;transition:background .1s,color .1s;display:flex}.editor-tab[data-v-4296fce0]:hover{background:var(--bg-hover);color:var(--text-primary)}.editor-tab.active[data-v-4296fce0]{background:var(--bg-container);color:var(--text-primary);border-bottom:2px solid var(--color-primary)}.tab-name[data-v-4296fce0]{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tab-dirty-dot[data-v-4296fce0]{background:var(--color-warning);border-radius:50%;flex-shrink:0;width:6px;height:6px}.tab-close[data-v-4296fce0]{cursor:pointer;color:var(--text-tertiary);opacity:0;background:0 0;border:none;border-radius:3px;flex-shrink:0;align-items:center;padding:2px;transition:opacity .1s,background .1s;display:flex}.editor-tab:hover .tab-close[data-v-4296fce0],.editor-tab.active .tab-close[data-v-4296fce0]{opacity:1}.tab-close[data-v-4296fce0]:hover{background:var(--bg-hover);color:var(--color-danger)}.editor-empty[data-v-4296fce0]{color:var(--text-tertiary);-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.editor-empty p[data-v-4296fce0]{margin:0}.editor-empty-hint[data-v-4296fce0]{opacity:.6;font-size:11px}.monaco-container[data-v-4296fce0]{flex:1;min-width:0;overflow:hidden}.monaco-container.hidden[data-v-4296fce0]{display:none}.image-tab-placeholder[data-v-4296fce0]{justify-content:center;align-items:center;gap:var(--spacing-sm);color:var(--text-secondary);background:var(--bg-container);text-align:center;padding:var(--spacing-lg);flex-direction:column;flex:1;display:flex}.image-tab-placeholder-title[data-v-4296fce0]{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--text-primary);word-break:break-all;margin:0}.image-tab-placeholder-hint[data-v-4296fce0]{font-size:var(--font-size-sm);color:var(--text-tertiary);margin:0}.editor-body[data-v-4296fce0]{flex:1;min-height:0;display:flex;overflow:hidden}.preview-resizer[data-v-4296fce0]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;order:99;width:6px;margin-left:auto;transition:background .15s;position:relative}.preview-resizer[data-v-4296fce0]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.preview-resizer[data-v-4296fce0]:hover{background:#3b82f60f}.preview-resizer[data-v-4296fce0]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.preview-panel[data-v-4296fce0]{background:var(--bg-panel);flex-direction:column;flex:1 1 0;min-width:200px;display:flex;overflow:hidden}.preview-header[data-v-4296fce0]{background:var(--bg-panel);flex-shrink:0;align-items:center;gap:6px;height:34px;padding:0 10px;display:flex}.preview-title[data-v-4296fce0]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.preview-ext-badge[data-v-4296fce0]{color:var(--color-primary);letter-spacing:.04em;background:#3b82f626;border-radius:3px;padding:1px 5px;font-size:10px;font-weight:600}.preview-header-spacer[data-v-4296fce0]{flex:1}.preview-close-btn[data-v-4296fce0]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;transition:color .1s,background .1s;display:flex}.preview-close-btn[data-v-4296fce0]:hover{color:var(--color-danger);background:var(--bg-hover)}.preview-body[data-v-4296fce0]{flex-direction:column;flex:1;display:flex;overflow:hidden}.preview-iframe[data-v-4296fce0]{background:0 0;border:none;flex:1;width:100%;height:100%}.preview-markdown[data-v-4296fce0]{background:var(--bg-container,#fff);width:100%;height:100%;color:var(--text-primary,#1f2328);flex:1;overflow:auto}.preview-mindmap[data-v-4296fce0]{background:var(--bg-container,#fff);flex-direction:column;flex:1;width:100%;height:100%;display:flex;overflow:hidden}.mindmap-toggle-btn.disabled[data-v-4296fce0]{opacity:.45;cursor:not-allowed}.mindmap-toggle-btn.active[data-v-4296fce0]{color:#fff;background:linear-gradient(#6366f1 0%,#4f46e5 100%);border-color:#4f46e5}.preview-image-wrap[data-v-4296fce0]{background:var(--bg-container);flex:1;justify-content:center;align-items:center;padding:16px;display:flex;overflow:auto}.preview-image-wrap img[data-v-4296fce0]{object-fit:contain;border-radius:4px;max-width:100%;max-height:100%;box-shadow:0 2px 12px #0003}.editor-tabs-spacer[data-v-4296fce0]{flex:1}.preview-toggle-btn[data-v-4296fce0]{cursor:pointer;height:34px;color:var(--text-secondary);white-space:nowrap;background:0 0;border:none;flex-shrink:0;align-items:center;gap:5px;padding:0 10px;font-size:12px;transition:background .1s,color .1s;display:flex}.preview-toggle-btn[data-v-4296fce0]:hover{background:var(--bg-hover);color:var(--text-primary)}.preview-toggle-btn.active[data-v-4296fce0]{color:var(--color-primary);background:#3b82f614}.sidebar-actions[data-v-4296fce0]{align-items:center;gap:2px;display:flex}.tree-inline-input-row[data-v-4296fce0]{cursor:default;background:var(--bg-hover)}.tree-inline-input[data-v-4296fce0]{background:var(--bg-container);border:1px solid var(--color-primary);min-width:0;height:20px;color:var(--text-primary);border-radius:3px;outline:none;flex:1;padding:0 5px;font-family:inherit;font-size:12.5px}.ctx-menu[data-v-4296fce0]{z-index:9999;background:var(--bg-panel);border:1px solid var(--border-color);-webkit-user-select:none;user-select:none;border-radius:6px;min-width:160px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000040}.ctx-menu-item[data-v-4296fce0]{cursor:pointer;width:100%;color:var(--text-primary);text-align:left;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;padding:6px 10px;font-size:12.5px;transition:background .1s;display:flex}.ctx-menu-item[data-v-4296fce0]:hover{background:var(--bg-hover)}.ctx-menu-item--danger[data-v-4296fce0]{color:var(--color-danger)}.ctx-menu-item--danger[data-v-4296fce0]:hover{background:#ef44441a}.ctx-menu-sep[data-v-4296fce0]{background:var(--border-color);height:1px;margin:4px 2px}
1
+ .md-preview[data-v-4d55e4f6]{color:inherit;word-break:break-word;padding:20px 24px;font-size:14px;line-height:1.6}.md-preview[data-v-4d55e4f6] h1,.md-preview[data-v-4d55e4f6] h2,.md-preview[data-v-4d55e4f6] h3,.md-preview[data-v-4d55e4f6] h4,.md-preview[data-v-4d55e4f6] h5,.md-preview[data-v-4d55e4f6] h6{border-bottom:1px solid var(--border-color,#d0d7de);margin-top:24px;margin-bottom:16px;padding-bottom:.3em;font-weight:600}.md-preview[data-v-4d55e4f6] h1{font-size:1.8em}.md-preview[data-v-4d55e4f6] h2{font-size:1.4em}.md-preview[data-v-4d55e4f6] h3{font-size:1.2em}.md-preview[data-v-4d55e4f6] p{margin:0 0 14px}.md-preview[data-v-4d55e4f6] a{color:var(--link-color,#0969da);text-decoration:none}.md-preview[data-v-4d55e4f6] a:hover{text-decoration:underline}.md-preview[data-v-4d55e4f6] code{background:var(--code-bg,#f6f8fa);border-radius:4px;padding:2px 5px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:87%}.md-preview[data-v-4d55e4f6] pre{background:var(--code-bg,#f6f8fa);border-radius:6px;margin:0 0 16px;padding:14px 16px;overflow:auto}.md-preview[data-v-4d55e4f6] pre code{background:0 0;padding:0;font-size:100%}.md-preview[data-v-4d55e4f6] blockquote{border-left:3px solid var(--border-color,#d0d7de);color:var(--text-secondary,#656d76);margin:0 0 16px;padding:0 16px}.md-preview[data-v-4d55e4f6] img{border-radius:4px;max-width:100%}.md-preview[data-v-4d55e4f6] hr{border:none;border-top:1px solid var(--border-color,#d0d7de);margin:24px 0}.md-preview[data-v-4d55e4f6] table{border-collapse:collapse;width:100%;margin-bottom:16px}.md-preview[data-v-4d55e4f6] th,.md-preview[data-v-4d55e4f6] td{border:1px solid var(--border-color,#d0d7de);padding:6px 13px}.md-preview[data-v-4d55e4f6] thead tr{background:var(--code-bg,#f6f8fa)}.md-preview[data-v-4d55e4f6] ul,.md-preview[data-v-4d55e4f6] ol{margin-bottom:16px;padding-left:2em}.md-preview[data-v-4d55e4f6] li{margin:4px 0}.md-segment[data-v-4d55e4f6]{display:block}.md-mindmap[data-v-4d55e4f6]{border:1px solid var(--border-color,#d0d7de);background:var(--bg-panel,#fff);border-radius:8px;margin:18px 0 28px;overflow:hidden}.md-mindmap-title[data-v-4d55e4f6]{color:var(--text-secondary,#656d76);background:var(--code-bg,#f6f8fa);letter-spacing:.5px;padding:8px 12px;font-size:12px;font-weight:600}.md-mindmap-canvas[data-v-4d55e4f6]{width:100%;height:480px;display:block}.mindmap-preview[data-v-6929f46f]{background:var(--bg-container,#fff);flex-direction:column;width:100%;height:100%;display:flex}.mindmap-preview-header[data-v-6929f46f]{background:var(--bg-panel,#f6f8fa);align-items:center;gap:12px;padding:8px 14px;font-size:12px;display:flex}.mindmap-preview-title[data-v-6929f46f]{color:var(--text-primary,#1f2328);letter-spacing:.5px;font-weight:600}.mindmap-preview-hint[data-v-6929f46f]{color:var(--text-secondary,#656d76);font-size:11px}.mindmap-preview-canvas[data-v-6929f46f]{flex:1;width:100%;min-height:0}.mindmap-preview-canvas[data-v-6929f46f] .zm-mindmap,.mindmap-preview-canvas[data-v-6929f46f]>*{width:100%;height:100%}.editor-view[data-v-ad09c146]{background:var(--bg-container);width:100%;height:100%;box-shadow:var(--shadow-sm);border-radius:0;display:flex;overflow:hidden}.editor-sidebar[data-v-ad09c146]{background:var(--bg-panel);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.sidebar-header[data-v-ad09c146]{flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 10px 6px;display:flex}.sidebar-title[data-v-ad09c146]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.sidebar-action-btn[data-v-ad09c146]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;display:flex}.sidebar-action-btn[data-v-ad09c146]:hover{color:var(--text-primary);background:var(--bg-hover)}.sidebar-search[data-v-ad09c146]{flex-shrink:0;align-items:center;padding:6px 10px;display:flex;position:relative}.sidebar-search-icon[data-v-ad09c146]{color:var(--text-tertiary);pointer-events:none;position:absolute;left:18px}.sidebar-search-input[data-v-ad09c146]{min-width:0;height:26px;color:var(--text-primary);background:var(--bg-input,#ffffff0a);border:1px solid var(--border-color);border-radius:var(--radius-base);outline:none;flex:1;padding:0 24px 0 26px;font-size:12px;transition:border-color .12s,background .12s}.sidebar-search-input[data-v-ad09c146]::placeholder{color:var(--text-tertiary)}.sidebar-search-input[data-v-ad09c146]:hover{border-color:var(--text-tertiary)}.sidebar-search-input[data-v-ad09c146]:focus{border-color:var(--accent-color,#3b82f6);background:var(--bg-panel)}.sidebar-search-clear[data-v-ad09c146]{cursor:pointer;width:18px;height:18px;color:var(--text-tertiary);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:background .12s,color .12s;display:flex;position:absolute;right:14px}.sidebar-search-clear[data-v-ad09c146]:hover{background:var(--bg-hover);color:var(--text-primary)}.tree-name-hit[data-v-ad09c146]{color:var(--accent-color,#f59e0b);background:#f59e0b26;border-radius:2px;padding:0 1px}.sidebar-tree[data-v-ad09c146]{flex:1;padding:4px 0;overflow:hidden auto}.tree-node[data-v-ad09c146]{cursor:pointer;-webkit-user-select:none;user-select:none;height:24px;color:var(--text-primary);white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding-right:8px;font-size:13px;transition:background .1s;display:flex;overflow:hidden}.tree-node[data-v-ad09c146]:hover{background:var(--bg-hover)}.tree-node--active[data-v-ad09c146]{color:var(--color-primary);background:#3b82f61f}.tree-node--selected[data-v-ad09c146]{outline-offset:-1px;background:#63b3ed26;outline:1px solid #63b3ed59}.tree-arrow[data-v-ad09c146]{color:var(--text-tertiary);flex-shrink:0;align-items:center;width:12px;transition:transform .15s;display:flex}.tree-arrow.expanded[data-v-ad09c146]{transform:rotate(90deg)}.tree-arrow-spacer[data-v-ad09c146]{flex-shrink:0;width:12px}.tree-icon[data-v-ad09c146]{flex-shrink:0;align-items:center;font-size:14px;line-height:1;display:flex}.tree-icon.mit-icon[data-v-ad09c146]{fill:currentColor;vertical-align:middle;width:14px;height:14px;display:inline-block}.tree-icon--dir[data-v-ad09c146]{color:#e8b84b}.tree-name[data-v-ad09c146]{text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;overflow:hidden}.tree-loading[data-v-ad09c146]{border:1.5px solid var(--color-primary);border-top-color:#0000;border-radius:50%;flex-shrink:0;width:10px;height:10px;animation:.8s linear infinite spin-ad09c146;display:inline-block}.tree-empty[data-v-ad09c146]{color:var(--text-tertiary);text-align:center;padding:24px 12px;font-size:12px}.sidebar-loading[data-v-ad09c146]{flex:1;justify-content:center;align-items:center;display:flex}.spin-icon[data-v-ad09c146]{border:2px solid var(--color-primary);border-top-color:#0000;border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-ad09c146;display:inline-block}@keyframes spin-ad09c146{to{transform:rotate(360deg)}}.editor-resizer[data-v-ad09c146]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;width:6px;transition:background .15s;position:relative}.editor-resizer[data-v-ad09c146]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.editor-resizer[data-v-ad09c146]:hover{background:#3b82f60f}.editor-resizer[data-v-ad09c146]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.editor-main[data-v-ad09c146]{flex-direction:column;flex:1;display:flex;overflow:hidden}.editor-tabs[data-v-ad09c146]{background:var(--bg-panel);scrollbar-width:none;flex-shrink:0;display:flex;overflow:auto hidden}.editor-tabs[data-v-ad09c146]::-webkit-scrollbar{display:none}.editor-tab[data-v-ad09c146]{cursor:pointer;height:34px;color:var(--text-secondary);-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:6px;min-width:80px;max-width:200px;padding:0 12px;font-size:12.5px;transition:background .1s,color .1s;display:flex}.editor-tab[data-v-ad09c146]:hover{background:var(--bg-hover);color:var(--text-primary)}.editor-tab.active[data-v-ad09c146]{background:var(--bg-container);color:var(--text-primary);border-bottom:2px solid var(--color-primary)}.tab-name[data-v-ad09c146]{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tab-dirty-dot[data-v-ad09c146]{background:var(--color-warning);border-radius:50%;flex-shrink:0;width:6px;height:6px}.tab-close[data-v-ad09c146]{cursor:pointer;color:var(--text-tertiary);opacity:0;background:0 0;border:none;border-radius:3px;flex-shrink:0;align-items:center;padding:2px;transition:opacity .1s,background .1s;display:flex}.editor-tab:hover .tab-close[data-v-ad09c146],.editor-tab.active .tab-close[data-v-ad09c146]{opacity:1}.tab-close[data-v-ad09c146]:hover{background:var(--bg-hover);color:var(--color-danger)}.editor-empty[data-v-ad09c146]{color:var(--text-tertiary);-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.editor-empty p[data-v-ad09c146]{margin:0}.editor-empty-hint[data-v-ad09c146]{opacity:.6;font-size:11px}.monaco-container[data-v-ad09c146]{flex:1;min-width:0;overflow:hidden}.monaco-container.hidden[data-v-ad09c146]{display:none}.image-tab-placeholder[data-v-ad09c146]{justify-content:center;align-items:center;gap:var(--spacing-sm);color:var(--text-secondary);background:var(--bg-container);text-align:center;padding:var(--spacing-lg);flex-direction:column;flex:1;display:flex}.image-tab-placeholder-title[data-v-ad09c146]{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--text-primary);word-break:break-all;margin:0}.image-tab-placeholder-hint[data-v-ad09c146]{font-size:var(--font-size-sm);color:var(--text-tertiary);margin:0}.editor-body[data-v-ad09c146]{flex:1;min-height:0;display:flex;overflow:hidden}.preview-resizer[data-v-ad09c146]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;order:99;width:6px;margin-left:auto;transition:background .15s;position:relative}.preview-resizer[data-v-ad09c146]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.preview-resizer[data-v-ad09c146]:hover{background:#3b82f60f}.preview-resizer[data-v-ad09c146]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.preview-panel[data-v-ad09c146]{background:var(--bg-panel);flex-direction:column;flex:1 1 0;min-width:200px;display:flex;overflow:hidden}.preview-header[data-v-ad09c146]{background:var(--bg-panel);flex-shrink:0;align-items:center;gap:6px;height:34px;padding:0 10px;display:flex}.preview-title[data-v-ad09c146]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.preview-ext-badge[data-v-ad09c146]{color:var(--color-primary);letter-spacing:.04em;background:#3b82f626;border-radius:3px;padding:1px 5px;font-size:10px;font-weight:600}.preview-header-spacer[data-v-ad09c146]{flex:1}.preview-close-btn[data-v-ad09c146]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;transition:color .1s,background .1s;display:flex}.preview-close-btn[data-v-ad09c146]:hover{color:var(--color-danger);background:var(--bg-hover)}.preview-body[data-v-ad09c146]{flex-direction:column;flex:1;display:flex;overflow:hidden}.preview-iframe[data-v-ad09c146]{background:0 0;border:none;flex:1;width:100%;height:100%}.preview-markdown[data-v-ad09c146]{background:var(--bg-container,#fff);width:100%;height:100%;color:var(--text-primary,#1f2328);flex:1;overflow:auto}.preview-mindmap[data-v-ad09c146]{background:var(--bg-container,#fff);flex-direction:column;flex:1;width:100%;height:100%;display:flex;overflow:hidden}.mindmap-toggle-btn.disabled[data-v-ad09c146]{opacity:.45;cursor:not-allowed}.mindmap-toggle-btn.active[data-v-ad09c146]{color:#fff;background:linear-gradient(#6366f1 0%,#4f46e5 100%);border-color:#4f46e5}.preview-image-wrap[data-v-ad09c146]{background:var(--bg-container);flex:1;justify-content:center;align-items:center;padding:16px;display:flex;overflow:auto}.preview-image-wrap img[data-v-ad09c146]{object-fit:contain;border-radius:4px;max-width:100%;max-height:100%;box-shadow:0 2px 12px #0003}.editor-tabs-spacer[data-v-ad09c146]{flex:1}.preview-toggle-btn[data-v-ad09c146]{cursor:pointer;height:34px;color:var(--text-secondary);white-space:nowrap;background:0 0;border:none;flex-shrink:0;align-items:center;gap:5px;padding:0 10px;font-size:12px;transition:background .1s,color .1s;display:flex}.preview-toggle-btn[data-v-ad09c146]:hover{background:var(--bg-hover);color:var(--text-primary)}.preview-toggle-btn.active[data-v-ad09c146]{color:var(--color-primary);background:#3b82f614}.sidebar-actions[data-v-ad09c146]{align-items:center;gap:2px;display:flex}.tree-inline-input-row[data-v-ad09c146]{cursor:default;background:var(--bg-hover)}.tree-inline-input[data-v-ad09c146]{background:var(--bg-container);border:1px solid var(--color-primary);min-width:0;height:20px;color:var(--text-primary);border-radius:3px;outline:none;flex:1;padding:0 5px;font-family:inherit;font-size:12.5px}.ctx-menu[data-v-ad09c146]{z-index:9999;background:var(--bg-panel);border:1px solid var(--border-color);-webkit-user-select:none;user-select:none;border-radius:6px;min-width:160px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000040}.ctx-menu-item[data-v-ad09c146]{cursor:pointer;width:100%;color:var(--text-primary);text-align:left;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;padding:6px 10px;font-size:12.5px;transition:background .1s;display:flex}.ctx-menu-item[data-v-ad09c146]:hover{background:var(--bg-hover)}.ctx-menu-item--danger[data-v-ad09c146]{color:var(--color-danger)}.ctx-menu-item--danger[data-v-ad09c146]:hover{background:#ef44441a}.ctx-menu-sep[data-v-ad09c146]{background:var(--border-color);height:1px;margin:4px 2px}
@@ -1 +1 @@
1
- .file-action-buttons[data-v-50559605]{justify-content:center;align-items:center;margin-left:auto;display:flex}.file-action-btn[data-v-50559605]{padding:var(--spacing-sm);min-width:24px;height:24px}.tree-node-wrapper[data-v-0f783b58]{width:100%}.tree-node[data-v-0f783b58]{align-items:center;gap:var(--spacing-sm);padding:6px var(--spacing-md);cursor:pointer;transition:var(--transition-all);background:0 0;border-bottom:1px solid #ffffff1a;min-height:32px;display:flex;position:relative}.tree-node[data-v-0f783b58]:before{content:"";width:3px;height:100%;transition:var(--transition-all);background:0 0;position:absolute;top:0;left:0}.tree-node[data-v-0f783b58]:hover{background:var(--bg-panel)}.tree-node[data-v-0f783b58]:hover:before{background:var(--color-primary)}.tree-node.is-selected[data-v-0f783b58]{color:#1890ff;background:#e6f7ff;border-left:3px solid #1890ff}.tree-node.is-selected[data-v-0f783b58]:before{background:#1890ff;width:4px}.tree-node.is-selected .node-icon[data-v-0f783b58]{color:#1890ff}[data-theme=dark] .tree-node.is-selected[data-v-0f783b58]{color:var(--color-primary);border-left-color:var(--color-primary);background:#1890ff26}[data-theme=dark] .tree-node.is-selected[data-v-0f783b58]:before{background:var(--color-primary)}[data-theme=dark] .tree-node.is-selected .node-icon[data-v-0f783b58]{color:var(--color-primary)}.tree-node.is-directory[data-v-0f783b58]{font-weight:var(--font-weight-medium)}.tree-node.is-directory[data-v-0f783b58]:hover{background:var(--bg-icon-hover)}.tree-node.file-type-added[data-v-0f783b58]:before{background:var(--git-status-added)}.tree-node.file-type-added[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#10b9811a 0%,#fffc 100%)}.tree-node.file-type-added[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-added);width:4px}.tree-node.file-type-modified[data-v-0f783b58]:before{background:var(--git-status-modified)}.tree-node.file-type-modified[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#f59e0b1a 0%,#fffc 100%)}.tree-node.file-type-modified[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-modified);width:4px}.tree-node.file-type-deleted[data-v-0f783b58]:before{background:var(--git-status-deleted)}.tree-node.file-type-deleted[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#ef44441a 0%,#fffc 100%)}.tree-node.file-type-deleted[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-deleted);width:4px}.tree-node.file-type-untracked[data-v-0f783b58]:before{background:var(--git-status-untracked)}.tree-node.file-type-untracked[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#8b5cf61a 0%,#fffc 100%)}.tree-node.file-type-untracked[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-untracked);width:4px}.node-icon[data-v-0f783b58]{font-size:var(--font-size-md);margin-right:var(--spacing-xs);flex-shrink:0;line-height:1}.node-icon.folder-icon[data-v-0f783b58]{color:#faad14}.mit-icon[data-v-0f783b58]{fill:currentColor;vertical-align:middle;width:16px;height:16px;display:inline-block}.node-name[data-v-0f783b58]{text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--text-primary);transition:var(--transition-color);flex:1;min-width:40px;overflow:hidden}.is-selected .node-name[data-v-0f783b58]{color:#1890ff;font-weight:var(--font-weight-semibold)}[data-theme=dark] .is-selected .node-name[data-v-0f783b58]{color:var(--color-primary)}.is-directory .node-name[data-v-0f783b58]{font-weight:var(--font-weight-semibold)}.file-type-tag[data-v-0f783b58]{font-size:var(--font-size-xs);padding:var(--spacing-xs) var(--spacing-base);border-radius:var(--radius-sm);background:var(--bg-panel);color:var(--text-tertiary);flex-shrink:0}.lock-icon[data-v-0f783b58]{opacity:.9;flex-shrink:0;margin-left:auto}.file-actions[data-v-0f783b58]{align-items:center;gap:var(--spacing-xs);border-radius:var(--radius-base);background:var(--bg-container);box-shadow:var(--shadow-sm);border:1px solid var(--border-color-light);display:none;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.tree-node:hover .file-actions[data-v-0f783b58]{display:flex}.tree-children[data-v-0f783b58]{width:100%}.file-tree-view[data-v-267015cf]{width:100%;height:100%;overflow:hidden auto}.monaco-diff-container[data-v-edc8f052]{height:100%;min-height:320px}.monaco-editor-container[data-v-c3f70549]{width:100%;height:100%}.monaco-editor-container[data-v-c3f70549] .merge-highlight-current{background:#3b82f629}.monaco-editor-container[data-v-c3f70549] .merge-highlight-current-dim{background:#3b82f612}.monaco-editor-container[data-v-c3f70549] .merge-highlight-incoming{background:#22c55e29}.monaco-editor-container[data-v-c3f70549] .merge-highlight-incoming-dim{background:#22c55e12}.monaco-editor-container[data-v-c3f70549] .merge-highlight-merged{background:#f59e0b24}.monaco-editor-container[data-v-c3f70549] .merge-highlight-merged-dim{background:#f59e0b0f}.monaco-editor-container[data-v-c3f70549] .merge-glyph-current{cursor:pointer}.monaco-editor-container[data-v-c3f70549] .merge-glyph-current:before{content:"→";text-align:center;color:#3b82f6f2;width:100%;font-weight:700;display:inline-block}.monaco-editor-container[data-v-c3f70549] .merge-glyph-incoming{cursor:pointer}.monaco-editor-container[data-v-c3f70549] .merge-glyph-incoming:before{content:"←";text-align:center;color:#22c55ef2;width:100%;font-weight:700;display:inline-block}.monaco-editor-container[data-v-c3f70549] .merge-right-actions{pointer-events:none;z-index:5;position:absolute;inset:0}.monaco-editor-container[data-v-c3f70549] .merge-right-action-wrapper{pointer-events:auto;flex-direction:row;width:44px;display:flex;position:absolute}.monaco-editor-container[data-v-c3f70549] .merge-right-action{text-align:center;cursor:pointer;pointer-events:auto;-webkit-user-select:none;user-select:none;border-radius:4px;justify-content:center;align-items:center;width:22px;font-weight:700;display:flex}.monaco-editor-container[data-v-c3f70549] .merge-right-action:hover{background:#0000000f}.monaco-editor-container[data-v-c3f70549] .merge-right-action-current{color:#3b82f6f2}.monaco-editor-container[data-v-c3f70549] .merge-right-action-incoming{color:#22c55ef2}.monaco-editor-container[data-v-c3f70549] .merge-right-action-close{color:#ef4444d9}.monaco-editor-container[data-v-c3f70549] .merge-right-action-close:hover{color:#ef4444;background:#ef44441a}.monaco-editor-container[data-v-c3f70549] .merge-right-action.is-applied{font-weight:700;color:#22c55e!important;background:#22c55e26!important}.monaco-editor-container[data-v-c3f70549] .merge-right-action.is-discarded{font-weight:700;color:#ef4444!important;background:#ef444426!important}.monaco-editor-container[data-v-c3f70549] .merge-glyph-current.is-applied:before,.monaco-editor-container[data-v-c3f70549] .merge-glyph-incoming.is-applied:before{content:"✓";color:#22c55ef2}.file-diff-viewer[data-v-f7b34abf]{border:1px solid var(--border-color);border-radius:var(--radius-lg);background-color:var(--bg-container);height:100%;min-height:0;box-shadow:var(--shadow-base);transition:var(--transition-all);flex:1;display:flex;overflow:hidden}.plain-text[data-v-f7b34abf]{white-space:pre;word-break:break-word}.compare-view[data-v-f7b34abf]{flex:1;height:100%;min-height:320px}[data-v-f7b34abf] .el-splitter{width:100%;height:100%}[data-v-f7b34abf] .el-splitter__panel{flex:none;overflow:hidden}[data-v-f7b34abf] .el-splitter__panel:first-child{min-width:250px}[data-v-f7b34abf] .el-splitter__panel:last-child{min-width:360px}.files-panel[data-v-f7b34abf]{background:var(--bg-icon);flex-direction:column;width:100%;display:flex}.diff-panel[data-v-f7b34abf]{background:var(--bg-container);flex-direction:column;flex:1;min-width:0;height:100%;display:flex}.diff-panel.full-width[data-v-f7b34abf]{width:100%}.diff-panel.is-locked .lock-icon[data-v-f7b34abf]{opacity:1}.panel-header[data-v-f7b34abf]{padding:var(--spacing-md) var(--spacing-lg);background:var(--bg-container);box-shadow:var(--shadow-sm);justify-content:space-between;align-items:center;display:flex}.panel-header h4[data-v-f7b34abf]{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);margin:0}.header-left[data-v-f7b34abf]{align-items:center;gap:var(--spacing-sm);display:flex}.view-mode-toggle[data-v-f7b34abf]{gap:var(--spacing-xs);padding:var(--spacing-xs);background:var(--bg-panel);border-radius:var(--radius-sm);border:1px solid var(--border-card);display:flex}.header-right[data-v-f7b34abf]{align-items:center;gap:var(--spacing-sm);display:flex}.action-buttons[data-v-f7b34abf]{align-items:center;gap:var(--spacing-xs);display:flex}.file-count[data-v-f7b34abf]{font-size:var(--font-size-xs);color:var(--text-secondary);font-weight:var(--font-weight-medium);background:var(--bg-panel);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-full);border:1px solid var(--border-card)}.search-box[data-v-f7b34abf]{padding:var(--spacing-sm) 0;background:var(--bg-container)}.search-box[data-v-f7b34abf] .el-input .el-input__wrapper{background:var(--bg-input);border:1px solid var(--border-input);border-radius:var(--radius-sm);transition:var(--transition-all)}.search-box[data-v-f7b34abf] .el-input .el-input__wrapper:hover{background:var(--bg-input-hover);border-color:var(--color-primary)}.search-box[data-v-f7b34abf] .el-input .el-input__wrapper.is-focus{background:var(--bg-input);border-color:var(--color-primary);box-shadow:0 0 0 2px #409eff1a}.search-box[data-v-f7b34abf] .el-input .el-input__inner{color:var(--text-primary)}.search-box[data-v-f7b34abf] .el-input .el-input__inner::placeholder{color:var(--text-tertiary)}.search-box[data-v-f7b34abf] .el-input .el-input__prefix,.search-box[data-v-f7b34abf] .el-input .el-input__suffix .el-input__clear{color:var(--text-secondary)}.search-box[data-v-f7b34abf] .el-input .el-input__suffix .el-input__clear:hover{color:var(--color-primary)}.selected-file[data-v-f7b34abf]{font-size:var(--font-size-sm);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;background:var(--bg-icon);max-width:360px;padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);align-items:center;gap:var(--spacing-xs);font-family:var(--font-mono);border:1px solid #d9d9d9;display:inline-flex;overflow:hidden}.path-dir[data-v-f7b34abf]{color:var(--text-tertiary)}.path-name[data-v-f7b34abf]{font-weight:var(--font-weight-semibold)}.diff-stats-badge[data-v-f7b34abf]{align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-base);border-radius:var(--radius-sm);background:var(--bg-container);border:1px solid var(--border-color);font-size:var(--font-size-sm);font-family:var(--font-mono);font-weight:500;display:inline-flex}.stats-added[data-v-f7b34abf]{color:#52c41a}.stats-deleted[data-v-f7b34abf]{color:#ff4d4f}.files-list[data-v-f7b34abf]{background:var(--bg-container);flex:1;min-height:0;overflow:hidden}.file-item[data-v-f7b34abf]{align-items:center;gap:var(--spacing-sm);width:100%;padding:var(--spacing-base) var(--spacing-md);cursor:pointer;transition:var(--transition-all);background:0 0;border-bottom:1px solid #ffffff1a;display:flex;position:relative}.file-item .conflict-marker[data-v-f7b34abf]{color:var(--git-status-conflicted);font-size:var(--font-size-md);margin-left:-4px;margin-right:var(--spacing-xs);animation:2s ease-in-out infinite pulse-f7b34abf}.file-item[data-v-f7b34abf]:before{content:"";width:3px;height:100%;transition:var(--transition-all);background:0 0;position:absolute;top:0;left:0}.file-item[data-v-f7b34abf]:hover{background:var(--bg-panel)}.file-item[data-v-f7b34abf]:hover:before{background:var(--color-primary)}.file-item.file-type-added[data-v-f7b34abf]:before{background:var(--git-status-added)}.file-item.file-type-added[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-added.active[data-v-f7b34abf]{background:linear-gradient(90deg,#10b9811a 0%,#fffc 100%)}.file-item.file-type-added[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-added.active[data-v-f7b34abf]:before{background:var(--git-status-added);width:4px}.file-item.file-type-modified[data-v-f7b34abf]:before{background:var(--git-status-modified)}.file-item.file-type-modified[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-modified.active[data-v-f7b34abf]{background:linear-gradient(90deg,#f59e0b1a 0%,#fffc 100%)}.file-item.file-type-modified[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-modified.active[data-v-f7b34abf]:before{background:var(--git-status-modified);width:4px}.file-item.file-type-deleted[data-v-f7b34abf]:before{background:var(--git-status-deleted)}.file-item.file-type-deleted[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-deleted.active[data-v-f7b34abf]{background:linear-gradient(90deg,#ef44441a 0%,#fffc 100%)}.file-item.file-type-deleted[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-deleted.active[data-v-f7b34abf]:before{background:var(--git-status-deleted);width:4px}.file-item.file-type-untracked[data-v-f7b34abf]:before{background:var(--git-status-untracked)}.file-item.file-type-untracked[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-untracked.active[data-v-f7b34abf]{background:linear-gradient(90deg,#8b5cf61a 0%,#fffc 100%)}.file-item.file-type-untracked[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-untracked.active[data-v-f7b34abf]:before{background:var(--git-status-untracked);width:4px}.file-item.file-type-conflicted[data-v-f7b34abf]{background-color:#f9731614!important}.file-item.file-type-conflicted .file-icon[data-v-f7b34abf]{color:var(--git-status-conflicted)}.file-item.file-type-conflicted[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-conflicted.active[data-v-f7b34abf]{border-left-color:var(--git-status-conflicted);box-shadow:0 0 0 1px #f9731633;background:linear-gradient(90deg,#f9731626 0%,#f9731614 100%)!important}.file-item.file-type-conflicted[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-conflicted.active[data-v-f7b34abf]:before{background:var(--git-status-conflicted)}.file-item.is-locked[data-v-f7b34abf]{opacity:.5}.file-item.is-locked[data-v-f7b34abf]:hover{opacity:.65}.file-icon[data-v-f7b34abf]{margin-right:var(--spacing-base);font-size:var(--font-size-md);flex-shrink:0;line-height:1;display:inline-block}.file-icon.mit-icon[data-v-f7b34abf]{fill:currentColor;vertical-align:middle;width:16px;height:16px}.file-name[data-v-f7b34abf]{text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--text-primary);transition:var(--transition-color);min-width:40px;overflow:hidden}.active .file-name[data-v-f7b34abf]{color:#1890ff;font-weight:var(--font-weight-semibold)}.file-path-section[data-v-f7b34abf]{min-width:0;overflow:hidden}.file-path-section[data-v-f7b34abf] .el-tooltip__trigger{width:100%;display:block;overflow:hidden}.path-badge[data-v-f7b34abf]{text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-xs);color:var(--text-tertiary);background:var(--bg-file-path);padding:1px var(--spacing-sm);border-radius:var(--radius-sm);margin-left:var(--spacing-sm);box-sizing:border-box;overflow:hidden}.file-item:hover .path-badge[data-v-f7b34abf]{background:var(--bg-file-path-hover);color:var(--color-file-path-hover)}.file-actions[data-v-f7b34abf]{align-items:center;gap:var(--spacing-xs);border-radius:var(--radius-base);background:var(--bg-container);box-shadow:var(--shadow-sm);border:1px solid var(--border-color-light);display:none;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.file-item:hover .file-actions[data-v-f7b34abf]{display:flex}.conflict-resolution-container[data-v-f7b34abf],.conflict-resolved-container[data-v-f7b34abf]{background:var(--bg-container);flex-direction:column;flex:1;display:flex;overflow:hidden}.conflict-resolved-container .resolved-notice[data-v-f7b34abf]{padding:var(--spacing-lg) var(--spacing-xl);border-bottom:2px solid var(--color-success);align-items:center;gap:var(--spacing-md);background:linear-gradient(135deg,#67c23a1a 0%,#67c23a0d 100%);display:flex}.conflict-resolved-container .resolved-notice .success-icon[data-v-f7b34abf]{flex-shrink:0}.conflict-resolved-container .resolved-notice .notice-text[data-v-f7b34abf]{color:var(--text-primary);flex:1;font-weight:500}.conflict-resolved-container .resolved-notice .el-button[data-v-f7b34abf]{flex-shrink:0}.conflict-resolved-container .diff-content[data-v-f7b34abf]{flex:1;overflow-y:auto}.resolution-mode-switch[data-v-f7b34abf]{padding:var(--spacing-sm) var(--spacing-lg);background:var(--bg-elevated);gap:var(--spacing-base);flex-shrink:0;justify-content:center;display:flex}.resolution-mode-switch .el-button[data-v-f7b34abf]{min-width:100px}.block-conflict-resolution[data-v-f7b34abf]{gap:var(--spacing-sm);flex-direction:column;flex:1;min-height:0;display:flex}.merge-three-pane[data-v-f7b34abf]{gap:var(--spacing-sm);flex:1;grid-template-columns:1fr 1.2fr 1fr;min-height:0;display:grid;overflow:hidden}.pane[data-v-f7b34abf]{border:1px solid var(--border-component);border-radius:var(--radius-lg);background:var(--bg-container);flex-direction:column;min-width:0;max-height:100%;display:flex;overflow:hidden}.pane-header[data-v-f7b34abf]{justify-content:space-between;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-panel);flex-shrink:0;display:flex}.pane-subhint[data-v-f7b34abf]{padding:var(--spacing-xs) var(--spacing-md);color:var(--text-secondary);background:var(--bg-container);box-sizing:border-box;flex-shrink:0;height:20px;font-size:11px;line-height:20px}.pane-subhint.placeholder[data-v-f7b34abf]{visibility:hidden}.pane-title[data-v-f7b34abf]{color:var(--text-title);font-weight:600}.pane-hint[data-v-f7b34abf]{color:var(--text-secondary);font-size:12px}.pane-body[data-v-f7b34abf]{padding:var(--spacing-sm);background:var(--bg-container);flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.save-resolution-bar[data-v-f7b34abf]{padding:var(--spacing-sm) var(--spacing-lg);background:var(--bg-elevated);flex-shrink:0;justify-content:center;display:flex;box-shadow:0 -2px 8px #0000000d}.save-resolution-bar .el-button[data-v-f7b34abf]{min-width:160px}.global-conflict-wrapper[data-v-f7b34abf]{flex-direction:column;flex:1;display:flex;overflow:hidden}.global-conflict-resolution[data-v-f7b34abf]{padding:var(--spacing-md) var(--spacing-lg);border-left:4px solid var(--git-status-conflicted);justify-content:space-between;align-items:center;gap:var(--spacing-lg);background:#f973161a;border-bottom:1px solid #f9731633;flex-wrap:wrap;flex-shrink:0;display:flex}.conflict-warning[data-v-f7b34abf]{align-items:center;gap:var(--spacing-base);color:var(--git-status-conflicted);font-weight:var(--font-weight-medium);flex:1;min-width:200px;display:flex}.warning-icon[data-v-f7b34abf]{font-size:var(--font-size-lg);color:var(--git-status-conflicted)}.conflict-buttons[data-v-f7b34abf]{gap:var(--spacing-base);flex-wrap:wrap;display:flex}.diff-content[data-v-f7b34abf]{padding:var(--spacing-lg);background:var(--bg-container);flex:1;min-height:0;position:relative;overflow:auto}.diff-content .diff-text[data-v-f7b34abf]{font-family:var(--font-mono);font-size:var(--font-size-sm);line-height:var(--line-height-normal);white-space:pre-wrap;word-break:break-all;padding:var(--spacing-md);background:var(--bg-code);border-radius:var(--radius-base);border:1px solid var(--border-color-light)}[data-v-f7b34abf] .el-scrollbar__view{height:100%}[data-v-f7b34abf] .el-scrollbar__bar .el-scrollbar__thumb{background-color:var(--scrollbar-thumb)}[data-v-f7b34abf] .el-scrollbar__bar .el-scrollbar__thumb:hover{background-color:var(--scrollbar-thumb-hover)}@keyframes pulse-f7b34abf{0%,to{opacity:1}50%{opacity:.5}}.diff-text[data-v-f7b34abf]{border-radius:var(--radius-base);background:var(--bg-code);border:1px solid var(--border-color-light)}
1
+ .file-action-buttons[data-v-50559605]{justify-content:center;align-items:center;margin-left:auto;display:flex}.file-action-btn[data-v-50559605]{padding:var(--spacing-sm);min-width:24px;height:24px}.tree-node-wrapper[data-v-0f783b58]{width:100%}.tree-node[data-v-0f783b58]{align-items:center;gap:var(--spacing-sm);padding:6px var(--spacing-md);cursor:pointer;transition:var(--transition-all);background:0 0;border-bottom:1px solid #ffffff1a;min-height:32px;display:flex;position:relative}.tree-node[data-v-0f783b58]:before{content:"";width:3px;height:100%;transition:var(--transition-all);background:0 0;position:absolute;top:0;left:0}.tree-node[data-v-0f783b58]:hover{background:var(--bg-panel)}.tree-node[data-v-0f783b58]:hover:before{background:var(--color-primary)}.tree-node.is-selected[data-v-0f783b58]{color:#1890ff;background:#e6f7ff;border-left:3px solid #1890ff}.tree-node.is-selected[data-v-0f783b58]:before{background:#1890ff;width:4px}.tree-node.is-selected .node-icon[data-v-0f783b58]{color:#1890ff}[data-theme=dark] .tree-node.is-selected[data-v-0f783b58]{color:var(--color-primary);border-left-color:var(--color-primary);background:#1890ff26}[data-theme=dark] .tree-node.is-selected[data-v-0f783b58]:before{background:var(--color-primary)}[data-theme=dark] .tree-node.is-selected .node-icon[data-v-0f783b58]{color:var(--color-primary)}.tree-node.is-directory[data-v-0f783b58]{font-weight:var(--font-weight-medium)}.tree-node.is-directory[data-v-0f783b58]:hover{background:var(--bg-icon-hover)}.tree-node.file-type-added[data-v-0f783b58]:before{background:var(--git-status-added)}.tree-node.file-type-added[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#10b9811a 0%,#fffc 100%)}.tree-node.file-type-added[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-added);width:4px}.tree-node.file-type-modified[data-v-0f783b58]:before{background:var(--git-status-modified)}.tree-node.file-type-modified[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#f59e0b1a 0%,#fffc 100%)}.tree-node.file-type-modified[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-modified);width:4px}.tree-node.file-type-deleted[data-v-0f783b58]:before{background:var(--git-status-deleted)}.tree-node.file-type-deleted[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#ef44441a 0%,#fffc 100%)}.tree-node.file-type-deleted[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-deleted);width:4px}.tree-node.file-type-untracked[data-v-0f783b58]:before{background:var(--git-status-untracked)}.tree-node.file-type-untracked[data-v-0f783b58]:not(.is-selected):hover{background:linear-gradient(90deg,#8b5cf61a 0%,#fffc 100%)}.tree-node.file-type-untracked[data-v-0f783b58]:not(.is-selected):hover:before{background:var(--git-status-untracked);width:4px}.node-icon[data-v-0f783b58]{font-size:var(--font-size-md);margin-right:var(--spacing-xs);flex-shrink:0;line-height:1}.node-icon.folder-icon[data-v-0f783b58]{color:#faad14}.mit-icon[data-v-0f783b58]{fill:currentColor;vertical-align:middle;width:16px;height:16px;display:inline-block}.node-name[data-v-0f783b58]{text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--text-primary);transition:var(--transition-color);flex:1;min-width:40px;overflow:hidden}.is-selected .node-name[data-v-0f783b58]{color:#1890ff;font-weight:var(--font-weight-semibold)}[data-theme=dark] .is-selected .node-name[data-v-0f783b58]{color:var(--color-primary)}.is-directory .node-name[data-v-0f783b58]{font-weight:var(--font-weight-semibold)}.file-type-tag[data-v-0f783b58]{font-size:var(--font-size-xs);padding:var(--spacing-xs) var(--spacing-base);border-radius:var(--radius-sm);background:var(--bg-panel);color:var(--text-tertiary);flex-shrink:0}.lock-icon[data-v-0f783b58]{opacity:.9;flex-shrink:0;margin-left:auto}.file-actions[data-v-0f783b58]{align-items:center;gap:var(--spacing-xs);border-radius:var(--radius-base);background:var(--bg-container);box-shadow:var(--shadow-sm);border:1px solid var(--border-color-light);display:none;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.tree-node:hover .file-actions[data-v-0f783b58]{display:flex}.tree-children[data-v-0f783b58]{width:100%}.file-tree-view[data-v-267015cf]{width:100%;height:100%;overflow:hidden auto}.monaco-diff-container[data-v-0c23e676]{height:100%;min-height:320px}.monaco-editor-container[data-v-27ef306d]{width:100%;height:100%}.monaco-editor-container[data-v-27ef306d] .merge-highlight-current{background:#3b82f629}.monaco-editor-container[data-v-27ef306d] .merge-highlight-current-dim{background:#3b82f612}.monaco-editor-container[data-v-27ef306d] .merge-highlight-incoming{background:#22c55e29}.monaco-editor-container[data-v-27ef306d] .merge-highlight-incoming-dim{background:#22c55e12}.monaco-editor-container[data-v-27ef306d] .merge-highlight-merged{background:#f59e0b24}.monaco-editor-container[data-v-27ef306d] .merge-highlight-merged-dim{background:#f59e0b0f}.monaco-editor-container[data-v-27ef306d] .merge-glyph-current{cursor:pointer}.monaco-editor-container[data-v-27ef306d] .merge-glyph-current:before{content:"→";text-align:center;color:#3b82f6f2;width:100%;font-weight:700;display:inline-block}.monaco-editor-container[data-v-27ef306d] .merge-glyph-incoming{cursor:pointer}.monaco-editor-container[data-v-27ef306d] .merge-glyph-incoming:before{content:"←";text-align:center;color:#22c55ef2;width:100%;font-weight:700;display:inline-block}.monaco-editor-container[data-v-27ef306d] .merge-right-actions{pointer-events:none;z-index:5;position:absolute;inset:0}.monaco-editor-container[data-v-27ef306d] .merge-right-action-wrapper{pointer-events:auto;flex-direction:row;width:44px;display:flex;position:absolute}.monaco-editor-container[data-v-27ef306d] .merge-right-action{text-align:center;cursor:pointer;pointer-events:auto;-webkit-user-select:none;user-select:none;border-radius:4px;justify-content:center;align-items:center;width:22px;font-weight:700;display:flex}.monaco-editor-container[data-v-27ef306d] .merge-right-action:hover{background:#0000000f}.monaco-editor-container[data-v-27ef306d] .merge-right-action-current{color:#3b82f6f2}.monaco-editor-container[data-v-27ef306d] .merge-right-action-incoming{color:#22c55ef2}.monaco-editor-container[data-v-27ef306d] .merge-right-action-close{color:#ef4444d9}.monaco-editor-container[data-v-27ef306d] .merge-right-action-close:hover{color:#ef4444;background:#ef44441a}.monaco-editor-container[data-v-27ef306d] .merge-right-action.is-applied{font-weight:700;color:#22c55e!important;background:#22c55e26!important}.monaco-editor-container[data-v-27ef306d] .merge-right-action.is-discarded{font-weight:700;color:#ef4444!important;background:#ef444426!important}.monaco-editor-container[data-v-27ef306d] .merge-glyph-current.is-applied:before,.monaco-editor-container[data-v-27ef306d] .merge-glyph-incoming.is-applied:before{content:"✓";color:#22c55ef2}.file-diff-viewer[data-v-f7b34abf]{border:1px solid var(--border-color);border-radius:var(--radius-lg);background-color:var(--bg-container);height:100%;min-height:0;box-shadow:var(--shadow-base);transition:var(--transition-all);flex:1;display:flex;overflow:hidden}.plain-text[data-v-f7b34abf]{white-space:pre;word-break:break-word}.compare-view[data-v-f7b34abf]{flex:1;height:100%;min-height:320px}[data-v-f7b34abf] .el-splitter{width:100%;height:100%}[data-v-f7b34abf] .el-splitter__panel{flex:none;overflow:hidden}[data-v-f7b34abf] .el-splitter__panel:first-child{min-width:250px}[data-v-f7b34abf] .el-splitter__panel:last-child{min-width:360px}.files-panel[data-v-f7b34abf]{background:var(--bg-icon);flex-direction:column;width:100%;display:flex}.diff-panel[data-v-f7b34abf]{background:var(--bg-container);flex-direction:column;flex:1;min-width:0;height:100%;display:flex}.diff-panel.full-width[data-v-f7b34abf]{width:100%}.diff-panel.is-locked .lock-icon[data-v-f7b34abf]{opacity:1}.panel-header[data-v-f7b34abf]{padding:var(--spacing-md) var(--spacing-lg);background:var(--bg-container);box-shadow:var(--shadow-sm);justify-content:space-between;align-items:center;display:flex}.panel-header h4[data-v-f7b34abf]{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);margin:0}.header-left[data-v-f7b34abf]{align-items:center;gap:var(--spacing-sm);display:flex}.view-mode-toggle[data-v-f7b34abf]{gap:var(--spacing-xs);padding:var(--spacing-xs);background:var(--bg-panel);border-radius:var(--radius-sm);border:1px solid var(--border-card);display:flex}.header-right[data-v-f7b34abf]{align-items:center;gap:var(--spacing-sm);display:flex}.action-buttons[data-v-f7b34abf]{align-items:center;gap:var(--spacing-xs);display:flex}.file-count[data-v-f7b34abf]{font-size:var(--font-size-xs);color:var(--text-secondary);font-weight:var(--font-weight-medium);background:var(--bg-panel);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-full);border:1px solid var(--border-card)}.search-box[data-v-f7b34abf]{padding:var(--spacing-sm) 0;background:var(--bg-container)}.search-box[data-v-f7b34abf] .el-input .el-input__wrapper{background:var(--bg-input);border:1px solid var(--border-input);border-radius:var(--radius-sm);transition:var(--transition-all)}.search-box[data-v-f7b34abf] .el-input .el-input__wrapper:hover{background:var(--bg-input-hover);border-color:var(--color-primary)}.search-box[data-v-f7b34abf] .el-input .el-input__wrapper.is-focus{background:var(--bg-input);border-color:var(--color-primary);box-shadow:0 0 0 2px #409eff1a}.search-box[data-v-f7b34abf] .el-input .el-input__inner{color:var(--text-primary)}.search-box[data-v-f7b34abf] .el-input .el-input__inner::placeholder{color:var(--text-tertiary)}.search-box[data-v-f7b34abf] .el-input .el-input__prefix,.search-box[data-v-f7b34abf] .el-input .el-input__suffix .el-input__clear{color:var(--text-secondary)}.search-box[data-v-f7b34abf] .el-input .el-input__suffix .el-input__clear:hover{color:var(--color-primary)}.selected-file[data-v-f7b34abf]{font-size:var(--font-size-sm);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;background:var(--bg-icon);max-width:360px;padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--radius-sm);align-items:center;gap:var(--spacing-xs);font-family:var(--font-mono);border:1px solid #d9d9d9;display:inline-flex;overflow:hidden}.path-dir[data-v-f7b34abf]{color:var(--text-tertiary)}.path-name[data-v-f7b34abf]{font-weight:var(--font-weight-semibold)}.diff-stats-badge[data-v-f7b34abf]{align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-base);border-radius:var(--radius-sm);background:var(--bg-container);border:1px solid var(--border-color);font-size:var(--font-size-sm);font-family:var(--font-mono);font-weight:500;display:inline-flex}.stats-added[data-v-f7b34abf]{color:#52c41a}.stats-deleted[data-v-f7b34abf]{color:#ff4d4f}.files-list[data-v-f7b34abf]{background:var(--bg-container);flex:1;min-height:0;overflow:hidden}.file-item[data-v-f7b34abf]{align-items:center;gap:var(--spacing-sm);width:100%;padding:var(--spacing-base) var(--spacing-md);cursor:pointer;transition:var(--transition-all);background:0 0;border-bottom:1px solid #ffffff1a;display:flex;position:relative}.file-item .conflict-marker[data-v-f7b34abf]{color:var(--git-status-conflicted);font-size:var(--font-size-md);margin-left:-4px;margin-right:var(--spacing-xs);animation:2s ease-in-out infinite pulse-f7b34abf}.file-item[data-v-f7b34abf]:before{content:"";width:3px;height:100%;transition:var(--transition-all);background:0 0;position:absolute;top:0;left:0}.file-item[data-v-f7b34abf]:hover{background:var(--bg-panel)}.file-item[data-v-f7b34abf]:hover:before{background:var(--color-primary)}.file-item.file-type-added[data-v-f7b34abf]:before{background:var(--git-status-added)}.file-item.file-type-added[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-added.active[data-v-f7b34abf]{background:linear-gradient(90deg,#10b9811a 0%,#fffc 100%)}.file-item.file-type-added[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-added.active[data-v-f7b34abf]:before{background:var(--git-status-added);width:4px}.file-item.file-type-modified[data-v-f7b34abf]:before{background:var(--git-status-modified)}.file-item.file-type-modified[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-modified.active[data-v-f7b34abf]{background:linear-gradient(90deg,#f59e0b1a 0%,#fffc 100%)}.file-item.file-type-modified[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-modified.active[data-v-f7b34abf]:before{background:var(--git-status-modified);width:4px}.file-item.file-type-deleted[data-v-f7b34abf]:before{background:var(--git-status-deleted)}.file-item.file-type-deleted[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-deleted.active[data-v-f7b34abf]{background:linear-gradient(90deg,#ef44441a 0%,#fffc 100%)}.file-item.file-type-deleted[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-deleted.active[data-v-f7b34abf]:before{background:var(--git-status-deleted);width:4px}.file-item.file-type-untracked[data-v-f7b34abf]:before{background:var(--git-status-untracked)}.file-item.file-type-untracked[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-untracked.active[data-v-f7b34abf]{background:linear-gradient(90deg,#8b5cf61a 0%,#fffc 100%)}.file-item.file-type-untracked[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-untracked.active[data-v-f7b34abf]:before{background:var(--git-status-untracked);width:4px}.file-item.file-type-conflicted[data-v-f7b34abf]{background-color:#f9731614!important}.file-item.file-type-conflicted .file-icon[data-v-f7b34abf]{color:var(--git-status-conflicted)}.file-item.file-type-conflicted[data-v-f7b34abf]:not(.active):hover,.file-item.file-type-conflicted.active[data-v-f7b34abf]{border-left-color:var(--git-status-conflicted);box-shadow:0 0 0 1px #f9731633;background:linear-gradient(90deg,#f9731626 0%,#f9731614 100%)!important}.file-item.file-type-conflicted[data-v-f7b34abf]:not(.active):hover:before,.file-item.file-type-conflicted.active[data-v-f7b34abf]:before{background:var(--git-status-conflicted)}.file-item.is-locked[data-v-f7b34abf]{opacity:.5}.file-item.is-locked[data-v-f7b34abf]:hover{opacity:.65}.file-icon[data-v-f7b34abf]{margin-right:var(--spacing-base);font-size:var(--font-size-md);flex-shrink:0;line-height:1;display:inline-block}.file-icon.mit-icon[data-v-f7b34abf]{fill:currentColor;vertical-align:middle;width:16px;height:16px}.file-name[data-v-f7b34abf]{text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--text-primary);transition:var(--transition-color);min-width:40px;overflow:hidden}.active .file-name[data-v-f7b34abf]{color:#1890ff;font-weight:var(--font-weight-semibold)}.file-path-section[data-v-f7b34abf]{min-width:0;overflow:hidden}.file-path-section[data-v-f7b34abf] .el-tooltip__trigger{width:100%;display:block;overflow:hidden}.path-badge[data-v-f7b34abf]{text-overflow:ellipsis;white-space:nowrap;font-size:var(--font-size-xs);color:var(--text-tertiary);background:var(--bg-file-path);padding:1px var(--spacing-sm);border-radius:var(--radius-sm);margin-left:var(--spacing-sm);box-sizing:border-box;overflow:hidden}.file-item:hover .path-badge[data-v-f7b34abf]{background:var(--bg-file-path-hover);color:var(--color-file-path-hover)}.file-actions[data-v-f7b34abf]{align-items:center;gap:var(--spacing-xs);border-radius:var(--radius-base);background:var(--bg-container);box-shadow:var(--shadow-sm);border:1px solid var(--border-color-light);display:none;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.file-item:hover .file-actions[data-v-f7b34abf]{display:flex}.conflict-resolution-container[data-v-f7b34abf],.conflict-resolved-container[data-v-f7b34abf]{background:var(--bg-container);flex-direction:column;flex:1;display:flex;overflow:hidden}.conflict-resolved-container .resolved-notice[data-v-f7b34abf]{padding:var(--spacing-lg) var(--spacing-xl);border-bottom:2px solid var(--color-success);align-items:center;gap:var(--spacing-md);background:linear-gradient(135deg,#67c23a1a 0%,#67c23a0d 100%);display:flex}.conflict-resolved-container .resolved-notice .success-icon[data-v-f7b34abf]{flex-shrink:0}.conflict-resolved-container .resolved-notice .notice-text[data-v-f7b34abf]{color:var(--text-primary);flex:1;font-weight:500}.conflict-resolved-container .resolved-notice .el-button[data-v-f7b34abf]{flex-shrink:0}.conflict-resolved-container .diff-content[data-v-f7b34abf]{flex:1;overflow-y:auto}.resolution-mode-switch[data-v-f7b34abf]{padding:var(--spacing-sm) var(--spacing-lg);background:var(--bg-elevated);gap:var(--spacing-base);flex-shrink:0;justify-content:center;display:flex}.resolution-mode-switch .el-button[data-v-f7b34abf]{min-width:100px}.block-conflict-resolution[data-v-f7b34abf]{gap:var(--spacing-sm);flex-direction:column;flex:1;min-height:0;display:flex}.merge-three-pane[data-v-f7b34abf]{gap:var(--spacing-sm);flex:1;grid-template-columns:1fr 1.2fr 1fr;min-height:0;display:grid;overflow:hidden}.pane[data-v-f7b34abf]{border:1px solid var(--border-component);border-radius:var(--radius-lg);background:var(--bg-container);flex-direction:column;min-width:0;max-height:100%;display:flex;overflow:hidden}.pane-header[data-v-f7b34abf]{justify-content:space-between;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-panel);flex-shrink:0;display:flex}.pane-subhint[data-v-f7b34abf]{padding:var(--spacing-xs) var(--spacing-md);color:var(--text-secondary);background:var(--bg-container);box-sizing:border-box;flex-shrink:0;height:20px;font-size:11px;line-height:20px}.pane-subhint.placeholder[data-v-f7b34abf]{visibility:hidden}.pane-title[data-v-f7b34abf]{color:var(--text-title);font-weight:600}.pane-hint[data-v-f7b34abf]{color:var(--text-secondary);font-size:12px}.pane-body[data-v-f7b34abf]{padding:var(--spacing-sm);background:var(--bg-container);flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.save-resolution-bar[data-v-f7b34abf]{padding:var(--spacing-sm) var(--spacing-lg);background:var(--bg-elevated);flex-shrink:0;justify-content:center;display:flex;box-shadow:0 -2px 8px #0000000d}.save-resolution-bar .el-button[data-v-f7b34abf]{min-width:160px}.global-conflict-wrapper[data-v-f7b34abf]{flex-direction:column;flex:1;display:flex;overflow:hidden}.global-conflict-resolution[data-v-f7b34abf]{padding:var(--spacing-md) var(--spacing-lg);border-left:4px solid var(--git-status-conflicted);justify-content:space-between;align-items:center;gap:var(--spacing-lg);background:#f973161a;border-bottom:1px solid #f9731633;flex-wrap:wrap;flex-shrink:0;display:flex}.conflict-warning[data-v-f7b34abf]{align-items:center;gap:var(--spacing-base);color:var(--git-status-conflicted);font-weight:var(--font-weight-medium);flex:1;min-width:200px;display:flex}.warning-icon[data-v-f7b34abf]{font-size:var(--font-size-lg);color:var(--git-status-conflicted)}.conflict-buttons[data-v-f7b34abf]{gap:var(--spacing-base);flex-wrap:wrap;display:flex}.diff-content[data-v-f7b34abf]{padding:var(--spacing-lg);background:var(--bg-container);flex:1;min-height:0;position:relative;overflow:auto}.diff-content .diff-text[data-v-f7b34abf]{font-family:var(--font-mono);font-size:var(--font-size-sm);line-height:var(--line-height-normal);white-space:pre-wrap;word-break:break-all;padding:var(--spacing-md);background:var(--bg-code);border-radius:var(--radius-base);border:1px solid var(--border-color-light)}[data-v-f7b34abf] .el-scrollbar__view{height:100%}[data-v-f7b34abf] .el-scrollbar__bar .el-scrollbar__thumb{background-color:var(--scrollbar-thumb)}[data-v-f7b34abf] .el-scrollbar__bar .el-scrollbar__thumb:hover{background-color:var(--scrollbar-thumb-hover)}@keyframes pulse-f7b34abf{0%,to{opacity:1}50%{opacity:.5}}.diff-text[data-v-f7b34abf]{border-radius:var(--radius-base);background:var(--bg-code);border:1px solid var(--border-color-light)}