@shawnstack/quickforge 1.6.7 → 1.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/assets/{AgentProfilesPage-XJdWmkQb.js → AgentProfilesPage-R7N7eDq5.js} +1 -1
- package/dist/assets/{ChatPanelHost-BrUHIzBw.js → ChatPanelHost-C4orgd5l.js} +2 -2
- package/dist/assets/{PluginsPage-DDxjlhiK.js → PluginsPage-3pZG7D7e.js} +1 -1
- package/dist/assets/{ScheduledTasksPage-Bw-pSpbv.js → ScheduledTasksPage-BAqoK4xk.js} +1 -1
- package/dist/assets/{SettingsWorkspacePage-B_7o3noo.js → SettingsWorkspacePage-DWkPyGP_.js} +3 -3
- package/dist/assets/{SharedConversationPage-B5DPQla3.js → SharedConversationPage-C-1n_MmB.js} +1 -1
- package/dist/assets/{TerminalDock-CVObjSM6.js → TerminalDock-B6KAXkIU.js} +1 -1
- package/dist/assets/{WorkspaceInspector-Dk5887WR.js → WorkspaceInspector-CkXyD_k4.js} +1 -1
- package/dist/assets/{WorkspaceReaderDialog-D-_BBvud.js → WorkspaceReaderDialog-Dp2QAwBo.js} +1 -1
- package/dist/assets/{diff-line-counts-DagL0jQr.js → diff-line-counts-Dm5kKQOo.js} +1 -1
- package/dist/assets/index-CZb_mGGF.js +63 -0
- package/dist/assets/{mcp-servers-dialog-CJ4HKWVZ.js → mcp-servers-dialog-VbGvNekJ.js} +1 -1
- package/dist/assets/otel-DQf3c6v2.js +3 -0
- package/dist/assets/pi-ai-DjJwSQBQ.js +131 -0
- package/dist/assets/pi-web-ui-DqxtBlZL.js +2803 -0
- package/dist/assets/{skills-dialog-CmCLl7K_.js → skills-dialog-B0jNVGZW.js} +1 -1
- package/dist/assets/{useAppTheme-BwZ5OEf3.js → useAppTheme-DsabFF9D.js} +1 -1
- package/dist/index.html +5 -5
- package/package.json +3 -3
- package/server/ai-http-logger.mjs +1 -1
- package/server/routes/agent-profiles.mjs +1 -1
- package/server/routes/models.mjs +1 -1
- package/server/routes/scheduled-tasks.mjs +1 -1
- package/server/routes/workspace.mjs +1 -1
- package/server/session-utils.mjs +1 -1
- package/server/utils/platform.mjs +25 -2
- package/dist/assets/index-DeUvsbzW.js +0 -63
- package/dist/assets/pi-ai-Cx633yhb.js +0 -134
- package/dist/assets/pi-web-ui-DFNE2m5b.js +0 -2770
- /package/dist/assets/{monaco-FCb94ino.js → monaco-CzxeAjEw.js} +0 -0
- /package/dist/assets/{plugin-api-UKg_cgSG.js → plugin-api-Ds5xGIL7.js} +0 -0
- /package/dist/assets/{xterm-BtSXYfUR.js → xterm-aPHkK8RR.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{L as t,M as n,Ot as r,Rt as i,S as a,c as o,n as s,z as c}from"./icons-DHoaB5uq.js";import{n as l}from"./react-vendor-BR9MG2D-.js";import{D as u,nt as d,rt as f,st as p,w as m}from"./index-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{L as t,M as n,Ot as r,Rt as i,S as a,c as o,n as s,z as c}from"./icons-DHoaB5uq.js";import{n as l}from"./react-vendor-BR9MG2D-.js";import{D as u,nt as d,rt as f,st as p,w as m}from"./index-CZb_mGGF.js";import{n as ee,t as te}from"./xterm-aPHkK8RR.js";import{t as h}from"./useAppTheme-DsabFF9D.js";var g=e(i(),1);async function _(e,t){let n=await fetch(e,{cache:`no-store`,...t}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error||`Request failed: ${n.status}`);return r}function v(){return _(`/api/terminal/capabilities`)}function y(e){return _(`/api/terminal/sessions${e?`?projectId=${encodeURIComponent(e)}`:``}`)}function b(e){return _(`/api/terminal/sessions`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)})}function x(e){return _(`/api/terminal/sessions/${encodeURIComponent(e)}`,{method:`DELETE`})}function S(e,t){return _(`/api/terminal/sessions/${encodeURIComponent(e)}/input`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({data:t})})}function C(){return``}function ne(){let e=C();if(e){let t=new URL(e);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.toString().replace(/\/$/,``)}return`${location.protocol===`https:`?`wss:`:`ws:`}//${location.host}`}var w=l(),T={light:{background:`#ffffff`,foreground:`#1f2937`,cursor:`#1f2937`,selectionBackground:`#dbeafe`},dark:{background:`#171717`,foreground:`#e5e7eb`,cursor:`#e5e7eb`,selectionBackground:`#3f3f46`}};function E({session:e,active:t,height:n,onReady:r,onExited:i,onConnectionError:a}){let o=h(),s=T[o],c=(0,g.useRef)(null),l=(0,g.useRef)(null),d=(0,g.useRef)(null),f=(0,g.useRef)(null),_=(0,g.useRef)(null),v=(0,g.useRef)(null);return(0,g.useEffect)(()=>{let t=c.current;if(!t)return;let n=!1,o=!1,h=!1,g=!1,y=t=>{n||h||g||(g=!0,a(e.id,t))},b=u(),x=new ee({cursorBlink:!0,convertEol:!1,fontFamily:getComputedStyle(document.documentElement).getPropertyValue(`--font-mono`).trim()||`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`,fontSize:b.fontSize,lineHeight:b.lineHeight,scrollback:5e3,theme:s}),S=new te;x.loadAddon(S),x.open(t),x.writeln(`\x1b[2mConnected to ${e.cwd}\x1b[0m`),l.current=x,d.current=S;let C=()=>{if(t.isConnected)try{S.fit();let{cols:e,rows:t}=x,n=f.current;n?.readyState===WebSocket.OPEN&&n.send(JSON.stringify({type:`resize`,cols:e,rows:t}))}catch{}},w=new WebSocket(`${ne()}/api/terminal/sessions/${encodeURIComponent(e.id)}/ws`);f.current=w,w.addEventListener(`open`,()=>{o=!0,g=!1,a(e.id,void 0),_.current=x.onData(e=>{w.readyState===WebSocket.OPEN&&w.send(JSON.stringify({type:`input`,data:e}))}),window.setTimeout(C,0)}),w.addEventListener(`message`,t=>{try{let n=JSON.parse(String(t.data));n.type===`ready`?r(e.id):n.type===`output`?x.write(n.data):n.type===`exit`?(h=!0,x.writeln(``),x.writeln(`\x1b[33m[process exited with code ${n.exitCode??`unknown`}]\x1b[0m`),i(e.id)):n.type===`error`&&x.writeln(`\x1b[31m${n.message}\x1b[0m`)}catch{}}),w.addEventListener(`error`,()=>{y(p(o?`terminalConnectionClosedUnexpectedly`:`terminalConnectionFailed`))}),w.addEventListener(`close`,e=>{_.current?.dispose(),_.current=null,!(n||h)&&(!e.wasClean||e.code!==1e3)&&y(p(o?`terminalConnectionClosedUnexpectedly`:`terminalConnectionFailed`))});let T=new ResizeObserver(()=>C());T.observe(t),v.current=T;let E=()=>{let e=u();x.options.fontSize=e.fontSize,x.options.lineHeight=e.lineHeight,window.setTimeout(C,0)};return window.addEventListener(m,E),window.setTimeout(C,50),()=>{n=!0,window.removeEventListener(m,E),T.disconnect(),v.current=null,_.current?.dispose(),_.current=null,w.close(),f.current=null,x.dispose(),l.current=null,d.current=null}},[o,a,i,r,e.cwd,e.id,s]),(0,g.useEffect)(()=>{if(!t)return;let e=d.current,n=l.current;window.setTimeout(()=>{try{e?.fit(),n?.focus()}catch{}},0)},[t,n]),(0,w.jsx)(`div`,{className:t?`h-full min-h-0 w-full pl-2 md:pl-3`:`hidden`,"aria-hidden":!t,children:(0,w.jsx)(`div`,{ref:c,className:`h-full min-h-0 w-full`})})}var re=180,ie=.7,ae=320;function D(e,t){let n=t?t.name:`Terminal`,r=new Set(e.map(e=>e.name));if(n!==`Terminal`&&!r.has(n))return n;let i=1;for(;r.has(`${n} ${i}`);)i+=1;return`${n} ${i}`}function O(e,t){let n=e?.terminalShellProfiles||[],r=t||e?.defaultTerminalShellProfileId||``;return n.find(e=>e.id===r)||n[0]}function k({project:e,onCollapse:i,pendingCommand:l,onPendingCommandHandled:u,variant:m=`dock`,singleSession:ee=!1,panelInstanceId:te,panelSessionId:h,onPanelSessionReady:_}){let[C,ne]=(0,g.useState)(null),[T,k]=(0,g.useState)([]),[A,j]=(0,g.useState)(),[M,oe]=(0,g.useState)(ae),[N,se]=(0,g.useState)(!0),[P,ce]=(0,g.useState)(!1),[le,F]=(0,g.useState)(),[ue,I]=(0,g.useState)({}),[L,R]=(0,g.useState)(!1),[z,de]=(0,g.useState)(!1),B=(0,g.useRef)(!1),V=(0,g.useRef)(!1),H=(0,g.useRef)(new Set),fe=(0,g.useRef)(l),U=(0,g.useRef)(new Set),W=(0,g.useRef)(new Set),G=(0,g.useRef)(new Map),K=(0,g.useRef)(!0),pe=(0,g.useRef)(_),[me,he]=(0,g.useState)(()=>new Set),q=(0,g.useRef)(null),ge=(0,g.useRef)(null),J=e?.id,Y=m===`panel`&&!!te,X=(0,g.useMemo)(()=>T.find(e=>e.id===A)??T[0],[A,T]);(0,g.useEffect)(()=>{fe.current=l},[l]),(0,g.useEffect)(()=>{pe.current=_},[_]),(0,g.useEffect)(()=>()=>{K.current=!1},[]);let _e=(0,g.useCallback)(async()=>{let e=await y(J);return k(e.sessions),j(t=>t&&e.sessions.some(e=>e.id===t)?t:e.sessions[0]?.id),e.sessions},[J]),ve=(0,g.useCallback)(async(e,t)=>{if(B.current)return;let n=O(C,t);B.current=!0,ce(!0),F(void 0),I({});try{let t=await b({projectId:J,name:D(e,n),cols:120,rows:30,shellProfileId:n?.id,shellProfileName:n?.name});k(e=>[...e,t]),j(t.id)}catch(e){F(e instanceof Error?e.message:p(`terminalCreateFailed`))}finally{B.current=!1,ce(!1)}},[C,J]);(0,g.useEffect)(()=>{let e=!1;return(async()=>{se(!0),F(void 0);try{let[t,n]=await Promise.all([v(),y(J)]);if(e)return;if(ne(t),t.enabled&&Y&&h&&n.sessions.some(e=>e.id===h)){V.current=!0,k(n.sessions),j(h);return}if(t.enabled&&Y&&!V.current){V.current=!0;let r=O(t);try{let t=await b({projectId:J,name:D(n.sessions,r),cols:120,rows:30,shellProfileId:r?.id,shellProfileName:r?.name});if(e){x(t.id).catch(()=>{});return}k([...n.sessions,t]),j(t.id),pe.current?.(t.id);return}catch(t){e||F(t instanceof Error?t.message:p(`terminalCreateFailed`))}}if(k(n.sessions),j(n.sessions[0]?.id),t.enabled&&n.sessions.length===0&&!fe.current){let n=O(t);b({projectId:J,name:D([],n),cols:120,rows:30,shellProfileId:n?.id,shellProfileName:n?.name}).then(t=>{if(e){x(t.id).catch(()=>{});return}k([t]),j(t.id)}).catch(t=>{e||F(t instanceof Error?t.message:p(`terminalCreateFailed`))})}}catch(t){e||F(t instanceof Error?t.message:p(`terminalUnavailable`))}finally{e||se(!1)}})(),()=>{e=!0}},[Y,h,J]),(0,g.useEffect)(()=>{if(!L)return;let e=e=>{ge.current?.contains(e.target)||R(!1)},t=e=>{e.key===`Escape`&&R(!1)};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[L]),(0,g.useEffect)(()=>{if(!z)return;let e=e=>{e.key===`Escape`&&de(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[z]),(0,g.useEffect)(()=>{if(!l||H.current.has(l.id)||G.current.has(l.id)||U.current.has(l.id)||N||P||!C)return;if(!C.enabled){H.current.add(l.id),window.setTimeout(()=>{F(C.reason||p(`terminalUnavailable`)),u?.(l.id)},0);return}let e=X&&!X.exited?X:T.find(e=>!e.exited);if(e){G.current.set(l.id,e.id),window.setTimeout(()=>{K.current&&j(e.id)},0);return}U.current.add(l.id),window.setTimeout(()=>{K.current&&F(void 0)},0);let t=O(C);b({projectId:J,name:D(T,t),cols:120,rows:30,shellProfileId:t?.id,shellProfileName:t?.name}).then(e=>{if(!K.current){x(e.id).catch(()=>{});return}G.current.set(l.id,e.id),k(t=>t.some(t=>t.id===e.id)?t:[...t,e]),j(e.id)}).catch(e=>{K.current&&(F(e instanceof Error?e.message:p(`terminalCommandExecuteFailed`)),H.current.add(l.id),u?.(l.id))}).finally(()=>{U.current.delete(l.id)})},[X,C,P,N,u,l,J,T]),(0,g.useEffect)(()=>{if(!l||H.current.has(l.id)||W.current.has(l.id))return;let e=G.current.get(l.id),t=e?T.find(t=>t.id===e):X&&!X.exited?X:T.find(e=>!e.exited);!t||t.exited||!me.has(t.id)||(W.current.add(l.id),window.setTimeout(()=>{K.current&&(j(t.id),F(void 0))},0),(async()=>{try{if(l.execute){let e=l.command.split(`
|
|
2
2
|
`),n=e.flatMap((t,n)=>n<e.length-1?[t,`\r`]:[t]);n.push(`\r`),await S(t.id,n.join(``))}else await S(t.id,l.command)}catch(e){K.current&&F(e instanceof Error?e.message:p(`terminalCommandExecuteFailed`))}finally{H.current.add(l.id),W.current.delete(l.id),G.current.delete(l.id),K.current&&u?.(l.id)}})())},[X,u,l,me,T]);let ye=async e=>{F(void 0),I(t=>{if(!t[e])return t;let n={...t};return delete n[e],n});let t=T.filter(t=>t.id!==e);k(t),A===e&&j(t[0]?.id);try{await x(e)}catch(e){F(e instanceof Error?e.message:p(`terminalCloseFailed`)),_e().catch(()=>{})}},be=(0,g.useCallback)(e=>{k(t=>t.map(t=>t.id===e?{...t,exited:!0}:t)),he(t=>{if(!t.has(e))return t;let n=new Set(t);return n.delete(e),n})},[]),xe=(0,g.useCallback)(e=>{he(t=>{if(t.has(e))return t;let n=new Set(t);return n.add(e),n})},[]),Se=(0,g.useCallback)((e,t)=>{I(n=>{if(!t){if(!n[e])return n;let t={...n};return delete t[e],t}return n[e]===t?n:{...n,[e]:t}})},[]),Ce=e=>{q.current={startY:e.clientY,startHeight:M},e.currentTarget.setPointerCapture(e.pointerId)},we=e=>{let t=q.current;if(!t)return;let n=Math.max(re,Math.floor(window.innerHeight*ie));oe(Math.min(n,Math.max(re,t.startHeight+t.startY-e.clientY)))},Te=e=>{q.current=null;try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}},Z=C?.terminalShellProfiles||[],Ee=C?.defaultTerminalShellProfileId||``,De=Z.find(e=>e.id===Ee)||Z[0],Oe=!!(C&&T.length>=C.maxSessions),ke=P||Oe,Ae=X?ue[X.id]:void 0,je=Y&&X?[X]:T,Q=le??Ae,$=m===`panel`,Me=$&&ee,Ne=$?void 0:z?Q?`calc(100% - 4.25rem)`:`calc(100% - 2.25rem)`:Q?M-72:M-45;return(0,w.jsxs)(`div`,{className:f($?`flex min-h-0 flex-1 flex-col bg-background`:`shrink-0 border-t border-border bg-background`,z&&`quickforge-terminal-fullscreen z-40 flex flex-col border-t-0`),style:z||$?void 0:{height:M},children:[!z&&!$?(0,w.jsx)(`div`,{className:`h-1 cursor-row-resize bg-transparent hover:bg-border`,onPointerDown:Ce,onPointerMove:we,onPointerUp:Te,onPointerCancel:Te}):null,(0,w.jsxs)(`div`,{className:`flex h-9 items-center gap-1 border-b border-border px-2`,children:[(0,w.jsx)(o,{className:`size-4 shrink-0 text-muted-foreground/60`}),(0,w.jsx)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1 overflow-x-auto`,children:je.map(e=>{let t=f(`flex max-w-44 shrink-0 items-center gap-1 rounded-md px-2 py-1 text-xs text-muted-foreground/72`,X?.id===e.id&&`bg-muted/28 text-foreground/90`);return Me?(0,w.jsxs)(`div`,{className:t,title:`${e.name} — ${e.cwd}`,children:[(0,w.jsx)(`span`,{className:f(`size-1.5 rounded-full`,e.exited?`bg-muted-foreground/40`:`bg-emerald-500/80`)}),(0,w.jsx)(`span`,{className:`truncate`,children:e.name})]},e.id):(0,w.jsxs)(`button`,{type:`button`,className:f(t,`hover:bg-muted/20 hover:text-foreground/85`),onClick:()=>j(e.id),title:`${e.name} — ${e.cwd}`,children:[(0,w.jsx)(`span`,{className:f(`size-1.5 rounded-full`,e.exited?`bg-muted-foreground/40`:`bg-emerald-500/80`)}),(0,w.jsx)(`span`,{className:`truncate`,children:e.name}),(0,w.jsx)(`span`,{role:`button`,tabIndex:0,className:`ml-1 rounded-sm p-0.5 opacity-60 hover:bg-background hover:opacity-100`,onClick:t=>{t.stopPropagation(),ye(e.id)},onKeyDown:t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),t.stopPropagation(),ye(e.id))},"aria-label":p(`terminalCloseSession`,{name:e.name}),children:(0,w.jsx)(s,{className:`size-3`})})]},e.id)})}),Me?null:(0,w.jsxs)(`div`,{className:`relative shrink-0`,ref:ge,children:[(0,w.jsxs)(`div`,{className:`flex items-center overflow-hidden rounded-md border border-border bg-background`,children:[(0,w.jsx)(`button`,{type:`button`,className:`inline-flex h-7 w-7 items-center justify-center text-foreground/85 transition-colors hover:bg-muted/20 disabled:pointer-events-none disabled:opacity-50`,onClick:()=>void ve(T),disabled:ke,title:De?p(`terminalNewWithProfile`,{name:De.name}):p(`terminalNew`),"aria-label":p(`terminalNew`),children:P?(0,w.jsx)(c,{className:`size-3.5 animate-spin`}):(0,w.jsx)(a,{className:`size-3.5`})}),Z.length>0?(0,w.jsx)(`button`,{type:`button`,className:`inline-flex h-7 w-7 items-center justify-center border-l border-border text-muted-foreground/72 transition-colors hover:bg-muted/20 hover:text-foreground/85 disabled:pointer-events-none disabled:opacity-50`,onClick:()=>R(e=>!e),disabled:ke,title:p(`terminalSelectShell`),"aria-label":p(`terminalSelectShell`),"aria-expanded":L,children:(0,w.jsx)(r,{className:`size-3.5`})}):null]}),L?(0,w.jsxs)(`div`,{className:f(`absolute right-0 z-30 w-64 overflow-hidden rounded-lg border border-border bg-background p-1.5 shadow-[0_16px_38px_-22px_rgb(15_23_42_/_0.65)]`,$?`top-9`:`bottom-9`),children:[(0,w.jsx)(`div`,{className:`px-2 pb-1.5 pt-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60`,children:p(`terminalNewWith`)}),Z.map(e=>(0,w.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs text-muted-foreground/80 hover:bg-muted/20 hover:text-foreground/90`,onClick:()=>{R(!1),ve(T,e.id)},children:[(0,w.jsx)(`span`,{className:`inline-flex size-5 shrink-0 items-center justify-center rounded bg-muted/20 text-[10px] text-muted-foreground/70`,children:e.name.slice(0,1).toUpperCase()}),(0,w.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,w.jsx)(`span`,{className:`block truncate font-medium`,children:e.name}),(0,w.jsx)(`span`,{className:`block truncate font-mono text-[11px] text-muted-foreground/55`,children:e.command})]})]},e.id))]}):null]}),Me?null:(0,w.jsx)(d,{variant:`ghost`,size:`icon`,className:`size-7`,onClick:()=>de(e=>!e),title:p(z?`terminalExitFullscreen`:`terminalFullscreen`),"aria-label":p(z?`terminalExitFullscreen`:`terminalFullscreen`),children:z?(0,w.jsx)(n,{className:`size-3.5`}):(0,w.jsx)(t,{className:`size-3.5`})}),(0,w.jsx)(d,{variant:`ghost`,size:`icon`,className:f(`size-7`,$&&`hidden`),onClick:i,title:p(`terminalCollapse`),"aria-label":p(`terminalCollapse`),children:(0,w.jsx)(r,{className:`size-3.5`})})]}),Q?(0,w.jsx)(`div`,{className:`border-b border-border px-3 py-1.5 text-xs text-destructive`,children:Q}):null,(0,w.jsx)(`div`,{className:f(`min-h-0 bg-background`,$&&`flex-1`),style:Ne===void 0?void 0:{height:Ne},children:N?(0,w.jsxs)(`div`,{className:`flex h-full items-center justify-center gap-2 text-xs text-muted-foreground/60`,children:[(0,w.jsx)(c,{className:`size-4 animate-spin`}),` `,p(`terminalStarting`)]}):C&&!C.enabled?(0,w.jsx)(`div`,{className:`flex h-full items-center justify-center px-4 text-center text-xs text-muted-foreground/60`,children:C.reason||p(`terminalUnavailable`)}):T.length===0?(0,w.jsx)(`div`,{className:`flex h-full items-center justify-center text-xs text-muted-foreground/60`,children:p(`terminalNoSessions`)}):T.map(e=>(0,w.jsx)(E,{session:e,active:e.id===X?.id,height:z?window.innerHeight-36:$?0:M,onReady:xe,onExited:be,onConnectionError:Se},e.id))})]})}export{k as TerminalDock};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{$ as t,Et as n,Ft as r,G as i,H as a,L as o,M as s,N as c,Ot as l,Pt as u,Q as d,Rt as f,S as p,U as m,X as h,Y as g,Z as _,_ as ee,at as v,b as y,c as te,ct as ne,dt as re,et as b,ft as ie,ht as ae,it as x,j as oe,kt as S,mt as se,n as ce,o as le,ot as ue,pt as de,q as fe,rt as C,st as w,tt as T,ut as E,v as D,wt as pe}from"./icons-DHoaB5uq.js";import{n as O}from"./react-vendor-BR9MG2D-.js";import{a as me,d as he,f as ge,i as k,n as _e,nt as A,o as j,p as ve,r as ye,rt as M,st as N,t as be,u as xe}from"./index-DeUvsbzW.js";import{TerminalDock as Se}from"./TerminalDock-CVObjSM6.js";import{i as Ce,n as we,r as Te,t as P}from"./diff-line-counts-DagL0jQr.js";var F=e(f(),1),I=O();function Ee(e){let t=e.trim();if(!t.startsWith(`/api/workspace/preview/`))return!1;try{let e=new URL(t,window.location.origin);return e.origin===window.location.origin&&e.pathname.startsWith(`/api/workspace/preview/`)}catch{return!1}}function L(e){let t=e.trim().replace(/\\/g,`/`);return t.startsWith(`/`)||/^[a-zA-Z]:\//.test(t)}function De(e,t){let n=e.trim();if(!t||!Ee(n))return n;try{let e=new URL(n,window.location.origin),r=`/api/workspace/preview/${encodeURIComponent(t)}/`;return e.pathname.startsWith(r)?e.pathname.slice(r.length).split(`/`).map(e=>decodeURIComponent(e)).join(`/`):n}catch{return n}}function Oe(e,t){let n=e.trim();if(!n)return{url:``,displayUrl:``,error:``};if(Ee(n)){let e=new URL(n,window.location.origin);return{url:`${e.pathname}${e.search}${e.hash}`,displayUrl:De(n,t),error:``}}if(t&&L(n))return{url:j(t,n),displayUrl:n,error:``};let r=/^https?:\/\//i.test(n)?n:`http://${n}`;try{let e=new URL(r);return e.protocol!==`http:`&&e.protocol!==`https:`?{url:``,displayUrl:n,error:N(`invalidPreviewUrl`)}:{url:e.toString(),displayUrl:e.toString(),error:``}}catch{return{url:``,displayUrl:n,error:N(`invalidPreviewUrl`)}}}function ke({url:e,onUrlChange:t,projectId:n}){let i=(0,F.useMemo)(()=>Oe(e,n),[n,e]),[a,o]=(0,F.useState)({sourceUrl:e,value:i.displayUrl}),[s,c]=(0,F.useState)(``),[l,u]=(0,F.useState)(0),[d,f]=(0,F.useState)(!1),[h,g]=(0,F.useState)(100),_=(0,F.useRef)(null),ee=(0,F.useRef)(null),v=i.url,te=v.startsWith(`/api/workspace/preview/`)?`allow-scripts allow-same-origin allow-forms`:`allow-scripts allow-same-origin allow-forms allow-popups allow-downloads allow-modals allow-pointer-lock`,re=a.sourceUrl===e?a.value:i.displayUrl;(0,F.useEffect)(()=>{if(!d)return;function e(e){_.current?.contains(e.target)||f(!1)}return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]);function b(){try{ee.current?.contentWindow?.history.back()}catch{}}function ie(e=re){let r=Oe(e,n);if(r.error){c(r.error);return}c(``),o({sourceUrl:r.displayUrl,value:r.displayUrl}),t(r.displayUrl),r.url&&u(e=>e+1)}function ae(){v&&u(e=>e+1)}function x(){v&&window.open(v,`_blank`,`noopener,noreferrer`)}return(0,I.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,I.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-2 border-b border-border p-3`,children:[(0,I.jsxs)(`form`,{className:`flex items-center gap-2`,onSubmit:e=>{e.preventDefault(),ie()},children:[(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:b,disabled:!v,"aria-label":N(`back`),title:N(`back`),children:(0,I.jsx)(r,{className:`size-4`})}),(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:ae,disabled:!v,"aria-label":N(`refreshPreview`),title:N(`refreshPreview`),children:(0,I.jsx)(y,{className:`size-4`})}),(0,I.jsxs)(`label`,{className:`mx-auto flex h-9 min-w-0 max-w-xl flex-1 items-center rounded-full border border-[color-mix(in_oklab,var(--border)_42%,transparent)] bg-muted/30 px-3 text-sm text-muted-foreground/65 focus-within:bg-background focus-within:text-foreground/85`,children:[(0,I.jsx)(`span`,{className:`sr-only`,children:N(`previewUrl`)}),(0,I.jsx)(`input`,{value:re,onChange:t=>{o({sourceUrl:e,value:t.target.value}),s&&c(``)},placeholder:N(`previewUrlPlaceholder`),className:`min-w-0 flex-1 bg-transparent text-center text-sm text-foreground/85 outline-none placeholder:text-muted-foreground/55`})]}),(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:x,disabled:!v,"aria-label":N(`openInBrowser`),title:N(`openInBrowser`),children:(0,I.jsx)(ne,{className:`size-4`})}),(0,I.jsxs)(`div`,{ref:_,className:`relative shrink-0`,children:[(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:()=>f(e=>!e),"aria-label":N(`more`),title:N(`more`),"aria-haspopup":`menu`,"aria-expanded":d,children:(0,I.jsx)(E,{className:`size-4`})}),d?(0,I.jsxs)(`div`,{className:`absolute right-0 top-10 z-30 w-48 rounded-2xl border border-[color-mix(in_oklab,var(--border)_34%,transparent)] bg-popover p-2 shadow-quickforge`,role:`menu`,children:[(0,I.jsx)(`div`,{className:`px-2 py-1.5 text-xs font-medium text-muted-foreground`,children:N(`zoom`)}),(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-xl px-1 py-1.5`,children:[(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,className:`size-8`,onClick:()=>g(e=>Math.max(50,e-10)),"aria-label":N(`zoomOut`),title:N(`zoomOut`),children:(0,I.jsx)(oe,{className:`size-4`})}),(0,I.jsxs)(`button`,{type:`button`,className:`min-w-14 rounded-lg px-2 py-1 text-sm font-medium text-foreground/85 hover:bg-muted/50`,onClick:()=>g(100),title:N(`resetZoom`),children:[h,`%`]}),(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,className:`size-8`,onClick:()=>g(e=>Math.min(200,e+10)),"aria-label":N(`zoomIn`),title:N(`zoomIn`),children:(0,I.jsx)(p,{className:`size-4`})})]})]}):null]})]}),s?(0,I.jsx)(`div`,{className:`text-xs text-destructive`,children:s}):null]}),(0,I.jsx)(`div`,{className:`min-h-0 flex-1 bg-muted/10`,children:v?(0,I.jsx)(`div`,{className:`h-full w-full overflow-auto bg-background`,children:(0,I.jsx)(`iframe`,{ref:ee,title:N(`webPreview`),src:v,sandbox:te,className:`origin-top-left border-0 bg-background`,style:{width:`${1e4/h}%`,height:`${1e4/h}%`,transform:`scale(${h/100})`}},`${v}:${l}`)}):(0,I.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-8 text-center`,children:[(0,I.jsx)(m,{className:`size-20 stroke-[1.55] text-muted-foreground/75`}),(0,I.jsx)(`div`,{className:`mt-8 text-xl font-semibold tracking-tight text-foreground/88`,children:N(`noPreviewUrlTitle`)}),(0,I.jsx)(`div`,{className:`mt-4 max-w-xs text-base leading-6 text-muted-foreground/82`,children:N(`noPreviewUrlDescription`)})]})})]})}var Ae={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,json:`json`,jsonc:`json`,css:`css`,scss:`scss`,less:`less`,html:`html`,htm:`html`,md:`markdown`,markdown:`markdown`,py:`python`,rb:`ruby`,go:`go`,rs:`rust`,java:`java`,c:`c`,h:`c`,cpp:`cpp`,cc:`cpp`,cxx:`cpp`,hpp:`cpp`,cs:`csharp`,php:`php`,swift:`swift`,kt:`kotlin`,kts:`kotlin`,sh:`shell`,bash:`shell`,zsh:`shell`,ps1:`powershell`,yml:`yaml`,yaml:`yaml`,xml:`xml`,sql:`sql`,dockerfile:`dockerfile`,toml:`toml`,ini:`ini`,env:`ini`};function R(e){let t=e.split(`/`).pop()?.toLowerCase()??``;return t===`dockerfile`||t.endsWith(`.dockerfile`)?`dockerfile`:Ae[t.includes(`.`)?t.split(`.`).pop()??``:t]??`plaintext`}function je(e){return e.slice(e.lastIndexOf(`/`)+1)}function Me(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(t+1):``}var z={typescript:{Icon:x,className:`text-sky-500 dark:text-sky-400`},javascript:{Icon:x,className:`text-amber-500 dark:text-amber-400`},python:{Icon:x,className:`text-blue-600 dark:text-blue-400`},go:{Icon:x,className:`text-cyan-600 dark:text-cyan-400`},rust:{Icon:x,className:`text-orange-600 dark:text-orange-400`},java:{Icon:x,className:`text-red-500 dark:text-red-400`},c:{Icon:x,className:`text-blue-500 dark:text-blue-400`},cpp:{Icon:x,className:`text-indigo-500 dark:text-indigo-400`},csharp:{Icon:x,className:`text-violet-500 dark:text-violet-400`},php:{Icon:x,className:`text-indigo-500 dark:text-indigo-400`},ruby:{Icon:x,className:`text-rose-500 dark:text-rose-400`},swift:{Icon:x,className:`text-orange-500 dark:text-orange-400`},kotlin:{Icon:x,className:`text-violet-500 dark:text-violet-400`},shell:{Icon:x,className:`text-green-600 dark:text-green-400`},powershell:{Icon:x,className:`text-blue-600 dark:text-blue-400`},json:{Icon:v,className:`text-amber-600 dark:text-amber-400`},css:{Icon:a,className:`text-sky-500 dark:text-sky-400`},scss:{Icon:a,className:`text-pink-500 dark:text-pink-400`},less:{Icon:a,className:`text-sky-500 dark:text-sky-400`},html:{Icon:re,className:`text-orange-500 dark:text-orange-400`},markdown:{Icon:d,className:`text-slate-500 dark:text-slate-400`},yaml:{Icon:C,className:`text-slate-500 dark:text-slate-400`},toml:{Icon:C,className:`text-slate-500 dark:text-slate-400`},ini:{Icon:C,className:`text-slate-500 dark:text-slate-400`},xml:{Icon:x,className:`text-slate-500 dark:text-slate-400`},sql:{Icon:ie,className:`text-indigo-500 dark:text-indigo-400`},dockerfile:{Icon:se,className:`text-sky-600 dark:text-sky-400`},plaintext:{Icon:d,className:`text-slate-500 dark:text-slate-400`}},B=new Set([`png`,`jpg`,`jpeg`,`gif`,`svg`,`ico`,`webp`,`bmp`,`avif`]),Ne=new Set([`zip`,`tar`,`gz`,`tgz`,`rar`,`7z`,`bz2`,`xz`]),Pe=new Set([`csv`,`tsv`,`xls`,`xlsx`]);function V(e){if(e===`readme`||e.startsWith(`readme.`))return{Icon:u,className:`text-sky-500 dark:text-sky-400`};if(e===`license`||e.startsWith(`license.`)||e===`licence`||e.startsWith(`licence.`)||e===`copying`||e.startsWith(`copying.`))return{Icon:D,className:`text-slate-500 dark:text-slate-400`};if(e===`makefile`||e.startsWith(`makefile.`))return{Icon:le,className:`text-slate-500 dark:text-slate-400`};if(e.startsWith(`docker-compose`))return{Icon:se,className:`text-sky-600 dark:text-sky-400`};if(e===`.gitignore`||e===`.gitattributes`||e===`.gitmodules`)return{Icon:D,className:`text-orange-500 dark:text-orange-400`};if(e===`.env`||e.startsWith(`.env.`))return{Icon:C,className:`text-slate-500 dark:text-slate-400`};if(e.endsWith(`.lock`)||e.endsWith(`-lock.json`)||e.endsWith(`-lock.yaml`))return{Icon:b,className:`text-slate-500 dark:text-slate-400`}}function H(e){let n=je(e).toLowerCase(),r=V(n);if(r)return r;let i=Me(n);return B.has(i)?{Icon:T,className:`text-purple-500 dark:text-purple-400`}:Ne.has(i)?{Icon:ue,className:`text-slate-500 dark:text-slate-400`}:Pe.has(i)?{Icon:t,className:`text-green-600 dark:text-green-400`}:z[R(e)]||{Icon:_,className:`text-slate-500 dark:text-slate-400`}}function U(e,t){let n=e.toLowerCase();return n===`.git`||n===`.svn`||n===`.hg`?{Icon:h,className:`text-orange-500 dark:text-orange-400`}:{Icon:t?g:fe,className:`text-slate-500 dark:text-slate-400`}}function W({path:e,className:t=`size-3.5`}){let{Icon:n,className:r}=H(e);return(0,I.jsx)(n,{className:`${r} ${t}`})}function G({name:e,open:t,className:n=`size-3.5`}){let{Icon:r,className:i}=U(e,t);return(0,I.jsx)(r,{className:`${i} ${n}`})}function Fe(e){return e===`added`?{label:`A`,text:N(`workspaceStatusAdded`),className:`text-emerald-600 dark:text-emerald-500`}:e===`deleted`?{label:`D`,text:N(`workspaceStatusDeleted`),className:`text-red-600 dark:text-red-500`}:e===`renamed`?{label:`R`,text:N(`workspaceStatusRenamed`),className:`text-blue-600 dark:text-blue-500`}:e===`untracked`?{label:`U`,text:N(`workspaceStatusUntracked`),className:`text-amber-600 dark:text-amber-500`}:e===`conflicted`?{label:`!`,text:N(`workspaceStatusConflict`),className:`text-red-600 dark:text-red-500`}:{label:`M`,text:N(`workspaceStatusModified`),className:`text-emerald-600 dark:text-emerald-500`}}function Ie({files:e,selectedPath:t,onSelectFile:n,emptyMessage:r=N(`workspaceNoWorkingTreeChanges`)}){return e.length===0?(0,I.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground/70`,children:r}):(0,I.jsx)(`div`,{className:`space-y-0.5`,children:e.map(e=>{let r=Fe(e.status);return(0,I.jsxs)(`button`,{type:`button`,className:`flex h-7 w-full items-center gap-2 rounded-md px-2 text-left text-xs transition-colors ${t===e.path?`bg-muted/28 text-foreground/90`:`text-muted-foreground/72 hover:bg-muted/20 hover:text-foreground/85`}`,onClick:()=>n(e.path),title:e.oldPath?`${e.oldPath} → ${e.path}`:e.path,children:[(0,I.jsx)(`span`,{className:`w-4 shrink-0 font-mono text-[0.68rem] font-semibold ${r.className}`,children:r.label}),(0,I.jsx)(W,{path:e.path,className:`size-3.5 shrink-0`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.path}),typeof e.additions==`number`&&typeof e.deletions==`number`?(0,I.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px] font-medium`,children:[(0,I.jsxs)(`span`,{className:`text-emerald-600 dark:text-emerald-500`,children:[`+`,e.additions]}),(0,I.jsxs)(`span`,{className:`ml-1 text-red-600 dark:text-red-500`,children:[`-`,e.deletions]})]}):null,(0,I.jsx)(`span`,{className:`shrink-0 text-[0.68rem] text-muted-foreground/55`,children:r.text})]},`${e.status}:${e.oldPath??``}:${e.path}`)})})}function Le(e){return e?e.status===`added`?`A`:e.status===`deleted`?`D`:e.status===`renamed`?`R`:e.status===`untracked`?`U`:`M`:``}function Re({projectId:e,path:t}){let[n,r]=(0,F.useState)(!1);return n?(0,I.jsx)(W,{path:t,className:`size-3.5 shrink-0`}):(0,I.jsx)(`img`,{src:j(e,t),alt:``,"aria-hidden":!0,loading:`lazy`,decoding:`async`,onError:()=>r(!0),className:`size-3.5 shrink-0 rounded-[3px] object-cover ring-1 ring-black/5 dark:ring-white/10`})}function ze({node:e,depth:t,selectedPath:r,gitStatuses:i,onSelectFile:a,onPreviewFile:o,projectId:s}){let[c,l]=(0,F.useState)(t<1),u=e.type===`directory`,d=r===e.path,f=Le(i[e.path]),p=(u?void 0:_e(e.path))===`image`,m=!!s&&p,h=!!o&&(p||k(e.path));function g(){o?.(e.path)}return(0,I.jsxs)(`div`,{children:[(0,I.jsxs)(`button`,{type:`button`,className:`group flex h-7 w-full items-center gap-1.5 rounded-md px-2 text-left text-xs transition-colors ${d?`bg-muted/28 text-foreground/90`:`text-muted-foreground/72 hover:bg-muted/20 hover:text-foreground/85`}`,style:{paddingLeft:`${.5+t*.75}rem`},onClick:()=>{u?l(e=>!e):p&&o?g():a(e.path)},title:e.path,children:[u?(0,I.jsx)(n,{className:`size-3 shrink-0 transition-transform ${c?`rotate-90`:``}`}):(0,I.jsx)(`span`,{className:`w-3 shrink-0`}),u?(0,I.jsx)(G,{name:e.name,open:c,className:`size-3.5 shrink-0`}):m?(0,I.jsx)(Re,{projectId:s,path:e.path}):(0,I.jsx)(W,{path:e.path,className:`size-3.5 shrink-0`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name}),f?(0,I.jsx)(`span`,{className:`shrink-0 font-mono text-[0.68rem] text-emerald-600 dark:text-emerald-500`,children:f}):null,h?(0,I.jsx)(`span`,{role:`button`,tabIndex:0,"aria-label":N(`openPreview`),title:N(`openPreview`),className:`-mr-1 shrink-0 rounded p-0.5 text-muted-foreground/60 opacity-0 transition-opacity hover:bg-muted/40 hover:text-foreground/85 focus-visible:opacity-100 focus-visible:text-foreground/85 focus-visible:outline-none group-hover:opacity-100`,onClick:e=>{e.stopPropagation(),g()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),g())},children:(0,I.jsx)(w,{className:`size-3.5`})}):null]}),u&&c?(0,I.jsx)(`div`,{children:(e.children??[]).map(e=>(0,I.jsx)(ze,{node:e,depth:t+1,selectedPath:r,gitStatuses:i,onSelectFile:a,onPreviewFile:o,projectId:s},e.path))}):null]})}function Be({tree:e,selectedPath:t,gitStatuses:n={},onSelectFile:r,onPreviewFile:i,projectId:a}){return e.length===0?(0,I.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground/70`,children:N(`workspaceNoFilesToDisplay`)}):(0,I.jsx)(`div`,{className:`space-y-0.5`,children:e.map(e=>(0,I.jsx)(ze,{node:e,depth:0,selectedPath:t,gitStatuses:n,onSelectFile:r,onPreviewFile:i,projectId:a},e.path))})}function Ve(){if(typeof window>`u`)return 0;let e=window.getComputedStyle(document.body).getPropertyValue(`--quickforge-desktop-titlebar-height`).trim();if(!e)return 0;let t=Number.parseFloat(e);return Number.isFinite(t)?t:0}function He(e,t){return e===`browser`?`browser`:`${e}:${t}`}var Ue=[{kind:`files`,label:N(`rightPanelFiles`),description:N(`rightPanelFilesDesc`),icon:fe},{kind:`review`,label:N(`rightPanelReview`),description:N(`rightPanelReviewDesc`),icon:i},{kind:`terminal`,label:N(`rightPanelTerminal`),description:N(`rightPanelTerminalDesc`),icon:te},{kind:`browser`,label:N(`rightPanelBrowser`),description:N(`rightPanelBrowserDesc`),icon:m}],We=Object.fromEntries(Ue.map(e=>[e.kind,e]));function Ge(e){return e===`review`||e===`changes`?`review`:e}function K(e){return e===`review`?`changes`:e}function Ke(e){let t=e.trim();if(!t)return`about:blank`;try{let e=new URL(t);return e.protocol===`about:`?t:e.host||t}catch{return t.split(/[\\/]/).pop()||t}}function qe(e,t){if(e.kind===`terminal`)return t||N(`rightPanelTerminal`);if(e.kind===`browser`)return Ke(e.url||``);if(e.kind===`reader`){let t=e.readerTabs?.find(t=>t.id===e.activeReaderTabId)??e.readerTabs?.[0];return t?be(t.path):N(`rightPanelFiles`)}return We[e.kind].label}var Je=340,q=380,J=640,Ye=`quickforge_workspaceInspectorWidth_v2`,Y=`quickforge:workspace-inspector-tabs:v1:`,Xe=140,Ze=200,Qe=400;function $e(e){return`${Y}${e}`}function X(e){return e===`files`||e===`review`||e===`terminal`||e===`browser`||e===`reader`}function et(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){if(!r||typeof r!=`object`)continue;let e=r;if(!(typeof e.id!=`string`||!e.id||!X(e.kind))){if(e.kind===`review`){if(t.has(e.kind))continue;t.add(e.kind)}if(e.kind===`reader`){let t=e.reader;if(!t||t.mode!==`file`||typeof t.path!=`string`||!t.path)continue;let r=He(t.mode,t.path);n.push({id:e.id,kind:e.kind,readerTabs:[{id:r,mode:t.mode,path:t.path,loading:!0}],activeReaderTabId:r});continue}n.push({id:e.id,kind:e.kind,...e.kind===`browser`&&typeof e.url==`string`?{url:e.url}:{},...e.kind===`terminal`&&typeof e.terminalSessionId==`string`?{terminalSessionId:e.terminalSessionId}:{},...e.kind===`files`||e.kind===`review`?{readerTabs:[],activeReaderTabId:void 0}:{}})}}return n}function tt(e){if(typeof window>`u`)return{tabs:[]};try{let t=window.localStorage.getItem($e(e));if(!t)return{tabs:[]};let n=JSON.parse(t),r=et(n.tabs),i=typeof n.activePanelTabId==`string`&&r.some(e=>e.id===n.activePanelTabId)?n.activePanelTabId:r[0]?.id;return i?{tabs:r,activePanelTabId:i}:{tabs:r}}catch{return{tabs:[]}}}function nt(e,t){let n=e.flatMap(e=>{if(e.kind===`reader`){let t=e.readerTabs?.find(t=>t.id===e.activeReaderTabId)??e.readerTabs?.[0];return!t||t.mode!==`file`?[]:[{id:e.id,kind:e.kind,reader:{mode:t.mode,path:t.path}}]}return[{id:e.id,kind:e.kind,...e.kind===`browser`?{url:e.url||``}:{},...e.kind===`terminal`&&e.terminalSessionId?{terminalSessionId:e.terminalSessionId}:{}}]});return{tabs:n,activePanelTabId:t&&n.some(e=>e.id===t)?t:n[0]?.id}}function rt(e){return e.reduce((e,t)=>{let n=t.id.match(/-(\d+)$/);if(!n)return e;let r=Number(n[1]);return Number.isFinite(r)?Math.max(e,r):e},0)+1}function it(){if(typeof window>`u`)return q;try{let e=window.localStorage.getItem(Ye);if(!e)return q;let t=Number(e);return Number.isFinite(t)?Math.min(J,Math.max(Je,t)):q}catch{return q}}function at(e,t){let n=t.trim().toLowerCase();return n?e.flatMap(e=>{let t=e.children?at(e.children,n):void 0;return!(e.name.toLowerCase().includes(n)||e.path.toLowerCase().includes(n))&&(!t||t.length===0)?[]:[{...e,...t?{children:t}:{}}]}):e}function ot(e){return N(`workspaceReviewPrompt`,{list:e.map(e=>`- ${e.status}: ${e.oldPath?`${e.oldPath} -> `:``}${e.path}`).join(`
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{$ as t,Et as n,Ft as r,G as i,H as a,L as o,M as s,N as c,Ot as l,Pt as u,Q as d,Rt as f,S as p,U as m,X as h,Y as g,Z as _,_ as ee,at as v,b as y,c as te,ct as ne,dt as re,et as b,ft as ie,ht as ae,it as x,j as oe,kt as S,mt as se,n as ce,o as le,ot as ue,pt as de,q as fe,rt as C,st as w,tt as T,ut as E,v as D,wt as pe}from"./icons-DHoaB5uq.js";import{n as O}from"./react-vendor-BR9MG2D-.js";import{a as me,d as he,f as ge,i as k,n as _e,nt as A,o as j,p as ve,r as ye,rt as M,st as N,t as be,u as xe}from"./index-CZb_mGGF.js";import{TerminalDock as Se}from"./TerminalDock-B6KAXkIU.js";import{i as Ce,n as we,r as Te,t as P}from"./diff-line-counts-Dm5kKQOo.js";var F=e(f(),1),I=O();function Ee(e){let t=e.trim();if(!t.startsWith(`/api/workspace/preview/`))return!1;try{let e=new URL(t,window.location.origin);return e.origin===window.location.origin&&e.pathname.startsWith(`/api/workspace/preview/`)}catch{return!1}}function L(e){let t=e.trim().replace(/\\/g,`/`);return t.startsWith(`/`)||/^[a-zA-Z]:\//.test(t)}function De(e,t){let n=e.trim();if(!t||!Ee(n))return n;try{let e=new URL(n,window.location.origin),r=`/api/workspace/preview/${encodeURIComponent(t)}/`;return e.pathname.startsWith(r)?e.pathname.slice(r.length).split(`/`).map(e=>decodeURIComponent(e)).join(`/`):n}catch{return n}}function Oe(e,t){let n=e.trim();if(!n)return{url:``,displayUrl:``,error:``};if(Ee(n)){let e=new URL(n,window.location.origin);return{url:`${e.pathname}${e.search}${e.hash}`,displayUrl:De(n,t),error:``}}if(t&&L(n))return{url:j(t,n),displayUrl:n,error:``};let r=/^https?:\/\//i.test(n)?n:`http://${n}`;try{let e=new URL(r);return e.protocol!==`http:`&&e.protocol!==`https:`?{url:``,displayUrl:n,error:N(`invalidPreviewUrl`)}:{url:e.toString(),displayUrl:e.toString(),error:``}}catch{return{url:``,displayUrl:n,error:N(`invalidPreviewUrl`)}}}function ke({url:e,onUrlChange:t,projectId:n}){let i=(0,F.useMemo)(()=>Oe(e,n),[n,e]),[a,o]=(0,F.useState)({sourceUrl:e,value:i.displayUrl}),[s,c]=(0,F.useState)(``),[l,u]=(0,F.useState)(0),[d,f]=(0,F.useState)(!1),[h,g]=(0,F.useState)(100),_=(0,F.useRef)(null),ee=(0,F.useRef)(null),v=i.url,te=v.startsWith(`/api/workspace/preview/`)?`allow-scripts allow-same-origin allow-forms`:`allow-scripts allow-same-origin allow-forms allow-popups allow-downloads allow-modals allow-pointer-lock`,re=a.sourceUrl===e?a.value:i.displayUrl;(0,F.useEffect)(()=>{if(!d)return;function e(e){_.current?.contains(e.target)||f(!1)}return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]);function b(){try{ee.current?.contentWindow?.history.back()}catch{}}function ie(e=re){let r=Oe(e,n);if(r.error){c(r.error);return}c(``),o({sourceUrl:r.displayUrl,value:r.displayUrl}),t(r.displayUrl),r.url&&u(e=>e+1)}function ae(){v&&u(e=>e+1)}function x(){v&&window.open(v,`_blank`,`noopener,noreferrer`)}return(0,I.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,I.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-2 border-b border-border p-3`,children:[(0,I.jsxs)(`form`,{className:`flex items-center gap-2`,onSubmit:e=>{e.preventDefault(),ie()},children:[(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:b,disabled:!v,"aria-label":N(`back`),title:N(`back`),children:(0,I.jsx)(r,{className:`size-4`})}),(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:ae,disabled:!v,"aria-label":N(`refreshPreview`),title:N(`refreshPreview`),children:(0,I.jsx)(y,{className:`size-4`})}),(0,I.jsxs)(`label`,{className:`mx-auto flex h-9 min-w-0 max-w-xl flex-1 items-center rounded-full border border-[color-mix(in_oklab,var(--border)_42%,transparent)] bg-muted/30 px-3 text-sm text-muted-foreground/65 focus-within:bg-background focus-within:text-foreground/85`,children:[(0,I.jsx)(`span`,{className:`sr-only`,children:N(`previewUrl`)}),(0,I.jsx)(`input`,{value:re,onChange:t=>{o({sourceUrl:e,value:t.target.value}),s&&c(``)},placeholder:N(`previewUrlPlaceholder`),className:`min-w-0 flex-1 bg-transparent text-center text-sm text-foreground/85 outline-none placeholder:text-muted-foreground/55`})]}),(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:x,disabled:!v,"aria-label":N(`openInBrowser`),title:N(`openInBrowser`),children:(0,I.jsx)(ne,{className:`size-4`})}),(0,I.jsxs)(`div`,{ref:_,className:`relative shrink-0`,children:[(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,onClick:()=>f(e=>!e),"aria-label":N(`more`),title:N(`more`),"aria-haspopup":`menu`,"aria-expanded":d,children:(0,I.jsx)(E,{className:`size-4`})}),d?(0,I.jsxs)(`div`,{className:`absolute right-0 top-10 z-30 w-48 rounded-2xl border border-[color-mix(in_oklab,var(--border)_34%,transparent)] bg-popover p-2 shadow-quickforge`,role:`menu`,children:[(0,I.jsx)(`div`,{className:`px-2 py-1.5 text-xs font-medium text-muted-foreground`,children:N(`zoom`)}),(0,I.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-xl px-1 py-1.5`,children:[(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,className:`size-8`,onClick:()=>g(e=>Math.max(50,e-10)),"aria-label":N(`zoomOut`),title:N(`zoomOut`),children:(0,I.jsx)(oe,{className:`size-4`})}),(0,I.jsxs)(`button`,{type:`button`,className:`min-w-14 rounded-lg px-2 py-1 text-sm font-medium text-foreground/85 hover:bg-muted/50`,onClick:()=>g(100),title:N(`resetZoom`),children:[h,`%`]}),(0,I.jsx)(A,{type:`button`,variant:`ghost`,size:`icon`,className:`size-8`,onClick:()=>g(e=>Math.min(200,e+10)),"aria-label":N(`zoomIn`),title:N(`zoomIn`),children:(0,I.jsx)(p,{className:`size-4`})})]})]}):null]})]}),s?(0,I.jsx)(`div`,{className:`text-xs text-destructive`,children:s}):null]}),(0,I.jsx)(`div`,{className:`min-h-0 flex-1 bg-muted/10`,children:v?(0,I.jsx)(`div`,{className:`h-full w-full overflow-auto bg-background`,children:(0,I.jsx)(`iframe`,{ref:ee,title:N(`webPreview`),src:v,sandbox:te,className:`origin-top-left border-0 bg-background`,style:{width:`${1e4/h}%`,height:`${1e4/h}%`,transform:`scale(${h/100})`}},`${v}:${l}`)}):(0,I.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center px-8 text-center`,children:[(0,I.jsx)(m,{className:`size-20 stroke-[1.55] text-muted-foreground/75`}),(0,I.jsx)(`div`,{className:`mt-8 text-xl font-semibold tracking-tight text-foreground/88`,children:N(`noPreviewUrlTitle`)}),(0,I.jsx)(`div`,{className:`mt-4 max-w-xs text-base leading-6 text-muted-foreground/82`,children:N(`noPreviewUrlDescription`)})]})})]})}var Ae={ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,json:`json`,jsonc:`json`,css:`css`,scss:`scss`,less:`less`,html:`html`,htm:`html`,md:`markdown`,markdown:`markdown`,py:`python`,rb:`ruby`,go:`go`,rs:`rust`,java:`java`,c:`c`,h:`c`,cpp:`cpp`,cc:`cpp`,cxx:`cpp`,hpp:`cpp`,cs:`csharp`,php:`php`,swift:`swift`,kt:`kotlin`,kts:`kotlin`,sh:`shell`,bash:`shell`,zsh:`shell`,ps1:`powershell`,yml:`yaml`,yaml:`yaml`,xml:`xml`,sql:`sql`,dockerfile:`dockerfile`,toml:`toml`,ini:`ini`,env:`ini`};function R(e){let t=e.split(`/`).pop()?.toLowerCase()??``;return t===`dockerfile`||t.endsWith(`.dockerfile`)?`dockerfile`:Ae[t.includes(`.`)?t.split(`.`).pop()??``:t]??`plaintext`}function je(e){return e.slice(e.lastIndexOf(`/`)+1)}function Me(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(t+1):``}var z={typescript:{Icon:x,className:`text-sky-500 dark:text-sky-400`},javascript:{Icon:x,className:`text-amber-500 dark:text-amber-400`},python:{Icon:x,className:`text-blue-600 dark:text-blue-400`},go:{Icon:x,className:`text-cyan-600 dark:text-cyan-400`},rust:{Icon:x,className:`text-orange-600 dark:text-orange-400`},java:{Icon:x,className:`text-red-500 dark:text-red-400`},c:{Icon:x,className:`text-blue-500 dark:text-blue-400`},cpp:{Icon:x,className:`text-indigo-500 dark:text-indigo-400`},csharp:{Icon:x,className:`text-violet-500 dark:text-violet-400`},php:{Icon:x,className:`text-indigo-500 dark:text-indigo-400`},ruby:{Icon:x,className:`text-rose-500 dark:text-rose-400`},swift:{Icon:x,className:`text-orange-500 dark:text-orange-400`},kotlin:{Icon:x,className:`text-violet-500 dark:text-violet-400`},shell:{Icon:x,className:`text-green-600 dark:text-green-400`},powershell:{Icon:x,className:`text-blue-600 dark:text-blue-400`},json:{Icon:v,className:`text-amber-600 dark:text-amber-400`},css:{Icon:a,className:`text-sky-500 dark:text-sky-400`},scss:{Icon:a,className:`text-pink-500 dark:text-pink-400`},less:{Icon:a,className:`text-sky-500 dark:text-sky-400`},html:{Icon:re,className:`text-orange-500 dark:text-orange-400`},markdown:{Icon:d,className:`text-slate-500 dark:text-slate-400`},yaml:{Icon:C,className:`text-slate-500 dark:text-slate-400`},toml:{Icon:C,className:`text-slate-500 dark:text-slate-400`},ini:{Icon:C,className:`text-slate-500 dark:text-slate-400`},xml:{Icon:x,className:`text-slate-500 dark:text-slate-400`},sql:{Icon:ie,className:`text-indigo-500 dark:text-indigo-400`},dockerfile:{Icon:se,className:`text-sky-600 dark:text-sky-400`},plaintext:{Icon:d,className:`text-slate-500 dark:text-slate-400`}},B=new Set([`png`,`jpg`,`jpeg`,`gif`,`svg`,`ico`,`webp`,`bmp`,`avif`]),Ne=new Set([`zip`,`tar`,`gz`,`tgz`,`rar`,`7z`,`bz2`,`xz`]),Pe=new Set([`csv`,`tsv`,`xls`,`xlsx`]);function V(e){if(e===`readme`||e.startsWith(`readme.`))return{Icon:u,className:`text-sky-500 dark:text-sky-400`};if(e===`license`||e.startsWith(`license.`)||e===`licence`||e.startsWith(`licence.`)||e===`copying`||e.startsWith(`copying.`))return{Icon:D,className:`text-slate-500 dark:text-slate-400`};if(e===`makefile`||e.startsWith(`makefile.`))return{Icon:le,className:`text-slate-500 dark:text-slate-400`};if(e.startsWith(`docker-compose`))return{Icon:se,className:`text-sky-600 dark:text-sky-400`};if(e===`.gitignore`||e===`.gitattributes`||e===`.gitmodules`)return{Icon:D,className:`text-orange-500 dark:text-orange-400`};if(e===`.env`||e.startsWith(`.env.`))return{Icon:C,className:`text-slate-500 dark:text-slate-400`};if(e.endsWith(`.lock`)||e.endsWith(`-lock.json`)||e.endsWith(`-lock.yaml`))return{Icon:b,className:`text-slate-500 dark:text-slate-400`}}function H(e){let n=je(e).toLowerCase(),r=V(n);if(r)return r;let i=Me(n);return B.has(i)?{Icon:T,className:`text-purple-500 dark:text-purple-400`}:Ne.has(i)?{Icon:ue,className:`text-slate-500 dark:text-slate-400`}:Pe.has(i)?{Icon:t,className:`text-green-600 dark:text-green-400`}:z[R(e)]||{Icon:_,className:`text-slate-500 dark:text-slate-400`}}function U(e,t){let n=e.toLowerCase();return n===`.git`||n===`.svn`||n===`.hg`?{Icon:h,className:`text-orange-500 dark:text-orange-400`}:{Icon:t?g:fe,className:`text-slate-500 dark:text-slate-400`}}function W({path:e,className:t=`size-3.5`}){let{Icon:n,className:r}=H(e);return(0,I.jsx)(n,{className:`${r} ${t}`})}function G({name:e,open:t,className:n=`size-3.5`}){let{Icon:r,className:i}=U(e,t);return(0,I.jsx)(r,{className:`${i} ${n}`})}function Fe(e){return e===`added`?{label:`A`,text:N(`workspaceStatusAdded`),className:`text-emerald-600 dark:text-emerald-500`}:e===`deleted`?{label:`D`,text:N(`workspaceStatusDeleted`),className:`text-red-600 dark:text-red-500`}:e===`renamed`?{label:`R`,text:N(`workspaceStatusRenamed`),className:`text-blue-600 dark:text-blue-500`}:e===`untracked`?{label:`U`,text:N(`workspaceStatusUntracked`),className:`text-amber-600 dark:text-amber-500`}:e===`conflicted`?{label:`!`,text:N(`workspaceStatusConflict`),className:`text-red-600 dark:text-red-500`}:{label:`M`,text:N(`workspaceStatusModified`),className:`text-emerald-600 dark:text-emerald-500`}}function Ie({files:e,selectedPath:t,onSelectFile:n,emptyMessage:r=N(`workspaceNoWorkingTreeChanges`)}){return e.length===0?(0,I.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground/70`,children:r}):(0,I.jsx)(`div`,{className:`space-y-0.5`,children:e.map(e=>{let r=Fe(e.status);return(0,I.jsxs)(`button`,{type:`button`,className:`flex h-7 w-full items-center gap-2 rounded-md px-2 text-left text-xs transition-colors ${t===e.path?`bg-muted/28 text-foreground/90`:`text-muted-foreground/72 hover:bg-muted/20 hover:text-foreground/85`}`,onClick:()=>n(e.path),title:e.oldPath?`${e.oldPath} → ${e.path}`:e.path,children:[(0,I.jsx)(`span`,{className:`w-4 shrink-0 font-mono text-[0.68rem] font-semibold ${r.className}`,children:r.label}),(0,I.jsx)(W,{path:e.path,className:`size-3.5 shrink-0`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.path}),typeof e.additions==`number`&&typeof e.deletions==`number`?(0,I.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px] font-medium`,children:[(0,I.jsxs)(`span`,{className:`text-emerald-600 dark:text-emerald-500`,children:[`+`,e.additions]}),(0,I.jsxs)(`span`,{className:`ml-1 text-red-600 dark:text-red-500`,children:[`-`,e.deletions]})]}):null,(0,I.jsx)(`span`,{className:`shrink-0 text-[0.68rem] text-muted-foreground/55`,children:r.text})]},`${e.status}:${e.oldPath??``}:${e.path}`)})})}function Le(e){return e?e.status===`added`?`A`:e.status===`deleted`?`D`:e.status===`renamed`?`R`:e.status===`untracked`?`U`:`M`:``}function Re({projectId:e,path:t}){let[n,r]=(0,F.useState)(!1);return n?(0,I.jsx)(W,{path:t,className:`size-3.5 shrink-0`}):(0,I.jsx)(`img`,{src:j(e,t),alt:``,"aria-hidden":!0,loading:`lazy`,decoding:`async`,onError:()=>r(!0),className:`size-3.5 shrink-0 rounded-[3px] object-cover ring-1 ring-black/5 dark:ring-white/10`})}function ze({node:e,depth:t,selectedPath:r,gitStatuses:i,onSelectFile:a,onPreviewFile:o,projectId:s}){let[c,l]=(0,F.useState)(t<1),u=e.type===`directory`,d=r===e.path,f=Le(i[e.path]),p=(u?void 0:_e(e.path))===`image`,m=!!s&&p,h=!!o&&(p||k(e.path));function g(){o?.(e.path)}return(0,I.jsxs)(`div`,{children:[(0,I.jsxs)(`button`,{type:`button`,className:`group flex h-7 w-full items-center gap-1.5 rounded-md px-2 text-left text-xs transition-colors ${d?`bg-muted/28 text-foreground/90`:`text-muted-foreground/72 hover:bg-muted/20 hover:text-foreground/85`}`,style:{paddingLeft:`${.5+t*.75}rem`},onClick:()=>{u?l(e=>!e):p&&o?g():a(e.path)},title:e.path,children:[u?(0,I.jsx)(n,{className:`size-3 shrink-0 transition-transform ${c?`rotate-90`:``}`}):(0,I.jsx)(`span`,{className:`w-3 shrink-0`}),u?(0,I.jsx)(G,{name:e.name,open:c,className:`size-3.5 shrink-0`}):m?(0,I.jsx)(Re,{projectId:s,path:e.path}):(0,I.jsx)(W,{path:e.path,className:`size-3.5 shrink-0`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.name}),f?(0,I.jsx)(`span`,{className:`shrink-0 font-mono text-[0.68rem] text-emerald-600 dark:text-emerald-500`,children:f}):null,h?(0,I.jsx)(`span`,{role:`button`,tabIndex:0,"aria-label":N(`openPreview`),title:N(`openPreview`),className:`-mr-1 shrink-0 rounded p-0.5 text-muted-foreground/60 opacity-0 transition-opacity hover:bg-muted/40 hover:text-foreground/85 focus-visible:opacity-100 focus-visible:text-foreground/85 focus-visible:outline-none group-hover:opacity-100`,onClick:e=>{e.stopPropagation(),g()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),g())},children:(0,I.jsx)(w,{className:`size-3.5`})}):null]}),u&&c?(0,I.jsx)(`div`,{children:(e.children??[]).map(e=>(0,I.jsx)(ze,{node:e,depth:t+1,selectedPath:r,gitStatuses:i,onSelectFile:a,onPreviewFile:o,projectId:s},e.path))}):null]})}function Be({tree:e,selectedPath:t,gitStatuses:n={},onSelectFile:r,onPreviewFile:i,projectId:a}){return e.length===0?(0,I.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground/70`,children:N(`workspaceNoFilesToDisplay`)}):(0,I.jsx)(`div`,{className:`space-y-0.5`,children:e.map(e=>(0,I.jsx)(ze,{node:e,depth:0,selectedPath:t,gitStatuses:n,onSelectFile:r,onPreviewFile:i,projectId:a},e.path))})}function Ve(){if(typeof window>`u`)return 0;let e=window.getComputedStyle(document.body).getPropertyValue(`--quickforge-desktop-titlebar-height`).trim();if(!e)return 0;let t=Number.parseFloat(e);return Number.isFinite(t)?t:0}function He(e,t){return e===`browser`?`browser`:`${e}:${t}`}var Ue=[{kind:`files`,label:N(`rightPanelFiles`),description:N(`rightPanelFilesDesc`),icon:fe},{kind:`review`,label:N(`rightPanelReview`),description:N(`rightPanelReviewDesc`),icon:i},{kind:`terminal`,label:N(`rightPanelTerminal`),description:N(`rightPanelTerminalDesc`),icon:te},{kind:`browser`,label:N(`rightPanelBrowser`),description:N(`rightPanelBrowserDesc`),icon:m}],We=Object.fromEntries(Ue.map(e=>[e.kind,e]));function Ge(e){return e===`review`||e===`changes`?`review`:e}function K(e){return e===`review`?`changes`:e}function Ke(e){let t=e.trim();if(!t)return`about:blank`;try{let e=new URL(t);return e.protocol===`about:`?t:e.host||t}catch{return t.split(/[\\/]/).pop()||t}}function qe(e,t){if(e.kind===`terminal`)return t||N(`rightPanelTerminal`);if(e.kind===`browser`)return Ke(e.url||``);if(e.kind===`reader`){let t=e.readerTabs?.find(t=>t.id===e.activeReaderTabId)??e.readerTabs?.[0];return t?be(t.path):N(`rightPanelFiles`)}return We[e.kind].label}var Je=340,q=380,J=640,Ye=`quickforge_workspaceInspectorWidth_v2`,Y=`quickforge:workspace-inspector-tabs:v1:`,Xe=140,Ze=200,Qe=400;function $e(e){return`${Y}${e}`}function X(e){return e===`files`||e===`review`||e===`terminal`||e===`browser`||e===`reader`}function et(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e){if(!r||typeof r!=`object`)continue;let e=r;if(!(typeof e.id!=`string`||!e.id||!X(e.kind))){if(e.kind===`review`){if(t.has(e.kind))continue;t.add(e.kind)}if(e.kind===`reader`){let t=e.reader;if(!t||t.mode!==`file`||typeof t.path!=`string`||!t.path)continue;let r=He(t.mode,t.path);n.push({id:e.id,kind:e.kind,readerTabs:[{id:r,mode:t.mode,path:t.path,loading:!0}],activeReaderTabId:r});continue}n.push({id:e.id,kind:e.kind,...e.kind===`browser`&&typeof e.url==`string`?{url:e.url}:{},...e.kind===`terminal`&&typeof e.terminalSessionId==`string`?{terminalSessionId:e.terminalSessionId}:{},...e.kind===`files`||e.kind===`review`?{readerTabs:[],activeReaderTabId:void 0}:{}})}}return n}function tt(e){if(typeof window>`u`)return{tabs:[]};try{let t=window.localStorage.getItem($e(e));if(!t)return{tabs:[]};let n=JSON.parse(t),r=et(n.tabs),i=typeof n.activePanelTabId==`string`&&r.some(e=>e.id===n.activePanelTabId)?n.activePanelTabId:r[0]?.id;return i?{tabs:r,activePanelTabId:i}:{tabs:r}}catch{return{tabs:[]}}}function nt(e,t){let n=e.flatMap(e=>{if(e.kind===`reader`){let t=e.readerTabs?.find(t=>t.id===e.activeReaderTabId)??e.readerTabs?.[0];return!t||t.mode!==`file`?[]:[{id:e.id,kind:e.kind,reader:{mode:t.mode,path:t.path}}]}return[{id:e.id,kind:e.kind,...e.kind===`browser`?{url:e.url||``}:{},...e.kind===`terminal`&&e.terminalSessionId?{terminalSessionId:e.terminalSessionId}:{}}]});return{tabs:n,activePanelTabId:t&&n.some(e=>e.id===t)?t:n[0]?.id}}function rt(e){return e.reduce((e,t)=>{let n=t.id.match(/-(\d+)$/);if(!n)return e;let r=Number(n[1]);return Number.isFinite(r)?Math.max(e,r):e},0)+1}function it(){if(typeof window>`u`)return q;try{let e=window.localStorage.getItem(Ye);if(!e)return q;let t=Number(e);return Number.isFinite(t)?Math.min(J,Math.max(Je,t)):q}catch{return q}}function at(e,t){let n=t.trim().toLowerCase();return n?e.flatMap(e=>{let t=e.children?at(e.children,n):void 0;return!(e.name.toLowerCase().includes(n)||e.path.toLowerCase().includes(n))&&(!t||t.length===0)?[]:[{...e,...t?{children:t}:{}}]}):e}function ot(e){return N(`workspaceReviewPrompt`,{list:e.map(e=>`- ${e.status}: ${e.oldPath?`${e.oldPath} -> `:``}${e.path}`).join(`
|
|
2
2
|
`)})}function st(e){return N(`workspaceCommitMessagePrompt`,{list:e.map(e=>`- ${e.status}: ${e.oldPath?`${e.oldPath} -> `:``}${e.path}`).join(`
|
|
3
3
|
`)})}function ct(e,t){let n=[`${N(`workspaceCurrentBranch`)}: ${e||N(`unknown`)}`];return t?.total&&n.push(`${t.total} ${N(`workspaceChangeCount`)}`),n.join(` · `)}function lt({title:e,files:t,selectedPath:n,onSelectFile:r}){return t.length===0?null:(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsxs)(`div`,{className:`px-2 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60`,children:[e,` `,t.length]}),(0,I.jsx)(Ie,{files:t,selectedPath:n,onSelectFile:r})]})}function ut(e){return e?e.language===`markdown`||/\.(md|markdown)$/i.test(e.path):!1}function Z(e,t=!1){return N(t?`readerFileMarkdownPrompt`:`readerFilePrompt`,{path:e})}function dt(e){return N(`readerDiffPrompt`,{path:e})}function ft(e){return`Diff for ${e.oldPath?`${e.oldPath} -> ${e.path}`:e.path}\n\n--- OLD\n${e.oldContent}\n\n--- NEW\n${e.newContent}`}function pt({mode:e,file:t,diff:n,loading:r,error:i,onClose:a,onDraftRequest:o}){let[s,l]=(0,F.useState)(),[u,d]=(0,F.useState)(`preview`);async function f(e,t){t&&(await navigator.clipboard.writeText(t),l(e),window.setTimeout(()=>l(void 0),1200))}let p=e===`file`?t?.path:n?.path,m=e===`file`&&ut(t),h=e===`file`?t?.content:n?ft(n):void 0,g=e===`file`&&t?Z(t.path,m):e===`diff`&&n?dt(n.path):void 0,_=(0,F.useMemo)(()=>e===`diff`&&n?P(n.oldContent,n.newContent):void 0,[e,n]);return(0,I.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,I.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center gap-2 border-b border-border px-3`,children:[m?(0,I.jsx)(`div`,{className:`inline-flex rounded-full bg-muted/25 p-1 text-xs`,children:[`preview`,`source`].map(e=>(0,I.jsx)(`button`,{type:`button`,className:e===u?`rounded-full bg-background px-3 py-1 font-medium text-foreground/90 shadow-[0_8px_20px_-16px_rgb(15_23_42_/_0.42)]`:`rounded-full px-3 py-1 text-muted-foreground/70 hover:text-foreground/85`,onClick:()=>d(e),children:N(e===`preview`?`markdownPreview`:`markdownSource`)},e))}):null,_?(0,I.jsxs)(`span`,{className:`shrink-0 font-mono text-[11px] font-medium`,children:[(0,I.jsxs)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:[`+`,_.added]}),(0,I.jsxs)(`span`,{className:`ml-1.5 text-red-600 dark:text-red-400`,children:[`-`,_.removed]})]}):null,(0,I.jsx)(`div`,{className:`flex-1`}),(0,I.jsx)(A,{variant:`ghost`,size:`icon`,className:`size-7`,onClick:()=>void f(`path`,p),disabled:!p,"aria-label":N(`copyPath`),title:N(`copyPath`),children:s===`path`?(0,I.jsx)(S,{className:`size-3.5`}):(0,I.jsx)(de,{className:`size-3.5`})}),(0,I.jsx)(A,{variant:`ghost`,size:`icon`,className:`size-7`,onClick:()=>void f(`content`,h),disabled:!h,"aria-label":N(`copyContent`),title:N(e===`file`?`copyContent`:`copyDiffContent`),children:s===`content`?(0,I.jsx)(S,{className:`size-3.5`}):(0,I.jsx)(de,{className:`size-3.5`})}),(0,I.jsx)(A,{variant:`ghost`,size:`icon`,className:`size-7`,onClick:()=>g&&o?.(g),disabled:!g||!o,"aria-label":N(`askAiAboutThis`),title:N(`askAiAboutThis`),children:(0,I.jsx)(c,{className:`size-3.5`})}),(0,I.jsx)(A,{variant:`ghost`,size:`icon`,className:`size-7`,onClick:a,"aria-label":N(`close`),title:N(`close`),children:(0,I.jsx)(ce,{className:`size-3.5`})})]}),(0,I.jsxs)(`div`,{className:`min-h-0 flex-1 bg-background`,children:[r?(0,I.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground/70`,children:N(`openingReader`)}):null,!r&&i?(0,I.jsx)(`div`,{className:`p-4 text-sm text-destructive`,children:i}):null,!r&&!i&&e===`file`&&t?m?(0,I.jsx)(Te,{path:t.path,content:t.content,language:t.language,mode:u},t.path):(0,I.jsx)(Ce,{path:t.path,content:t.content,language:t.language}):null,!r&&!i&&e===`diff`&&n?(0,I.jsx)(we,{path:n.path,oldContent:n.oldContent,newContent:n.newContent,language:n.language,status:n.status}):null]})]})}function mt({project:e,artifacts:t,changesCount:n,changedPaths:r,isGitRepository:i,gitBranch:a,onSelectFile:o,onSelectDiff:s,onPreviewFile:c}){let[u,d]=(0,F.useState)(!1),[f,p]=(0,F.useState)(()=>new Set),m=me(t),h=t.filter(e=>e.command);function g(e){p(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}return(0,I.jsxs)(`div`,{className:`space-y-3 p-2`,children:[(0,I.jsxs)(`div`,{className:`rounded-lg border border-border bg-background px-3 py-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 text-xs font-semibold text-foreground/90`,children:[(0,I.jsx)(ae,{className:`size-3.5 text-emerald-600 dark:text-emerald-500`}),N(`workspaceCurrentArtifacts`)]}),t.length===0?(0,I.jsx)(`div`,{className:`mt-2 text-xs leading-5 text-muted-foreground/70`,children:N(`workspaceNoArtifacts`)}):(0,I.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[m.length?(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsxs)(`div`,{className:`text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60`,children:[N(`workspaceFiles`),` `,m.length]}),m.slice(0,8).map(e=>{let t=e.path,n=ye(t),i=r.has(t),a=typeof e.addedLines==`number`||typeof e.removedLines==`number`;return(0,I.jsxs)(`div`,{className:`group flex min-w-0 items-center gap-2 rounded-md px-2 py-1.5 text-xs text-foreground/85 transition-colors hover:bg-muted/20`,children:[(0,I.jsx)(`button`,{type:`button`,className:`min-w-0 flex-1 truncate text-left font-medium`,onClick:()=>n?c(t):i?s(t):o(t),title:t,children:e.title||be(t)}),a?(0,I.jsxs)(`span`,{className:`shrink-0 font-mono text-[10px] font-medium`,children:[(0,I.jsxs)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:[`+`,e.addedLines??0]}),(0,I.jsxs)(`span`,{className:`ml-1 text-red-600 dark:text-red-400`,children:[`-`,e.removedLines??0]})]}):null,(0,I.jsx)(`span`,{className:`shrink-0 rounded-full bg-muted/30 px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground/70`,children:e.kind}),n?(0,I.jsx)(`button`,{type:`button`,className:`shrink-0 inline-flex size-5 items-center justify-center text-blue-600 opacity-0 transition-opacity hover:bg-blue-500/10 hover:text-blue-700 group-hover:opacity-100 dark:text-blue-400`,onClick:()=>c(t),"aria-label":N(`previewArtifact`),title:N(`previewArtifact`),children:(0,I.jsx)(w,{className:`size-3.5`})}):null,(0,I.jsx)(`button`,{type:`button`,className:`shrink-0 rounded-md px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground/70 opacity-0 transition-opacity hover:bg-muted/25 group-hover:opacity-100`,onClick:()=>i?s(t):o(t),children:N(i?`workspaceViewDiff`:`artifactPreviewViewSource`)})]},e.id)}),m.length>8?(0,I.jsxs)(`div`,{className:`px-2 text-[11px] text-muted-foreground/60`,children:[`+`,m.length-8]}):null]}):null,h.length?(0,I.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,I.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 rounded-md px-1 py-1 text-left text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60 transition-colors hover:bg-muted/15 hover:text-foreground/75`,onClick:()=>d(e=>!e),"aria-expanded":u,children:[(0,I.jsx)(l,{className:M(`size-3.5 transition-transform`,u?``:`-rotate-90`)}),(0,I.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[N(`workspaceCommands`),` `,h.length]})]}),u?(0,I.jsx)(`div`,{className:`space-y-1`,children:h.map((e,t)=>{let n=f.has(e.id);return(0,I.jsxs)(`div`,{className:`rounded-md bg-muted/15 text-[11px] text-muted-foreground/80`,children:[(0,I.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 px-2 py-1.5 text-left transition-colors hover:bg-muted/20`,onClick:()=>g(e.id),"aria-expanded":n,children:[(0,I.jsx)(l,{className:M(`size-3 shrink-0 transition-transform`,n?``:`-rotate-90`)}),(0,I.jsxs)(`span`,{className:`shrink-0 font-medium text-muted-foreground/65`,children:[`#`,t+1]}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono`,children:e.command})]}),n?(0,I.jsxs)(`div`,{className:`space-y-1 px-2 pb-2 pt-1.5`,children:[(0,I.jsx)(`pre`,{className:`whitespace-pre-wrap break-words font-mono text-[11px] leading-5 text-foreground/80`,children:e.command}),e.outputFile?(0,I.jsxs)(`div`,{className:`text-[10px] text-muted-foreground/65`,children:[N(`workspaceCommandOutput`),`: `,(0,I.jsx)(`span`,{className:`font-mono`,children:e.outputFile})]}):null]}):null]},e.id)})}):null]}):null]})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border border-border bg-muted/10 px-3 py-3`,children:[(0,I.jsx)(`div`,{className:`text-xs font-medium text-foreground/85`,children:e?.name??N(`noProjectSelected`)}),(0,I.jsx)(`div`,{className:`mt-1 text-[11px] text-muted-foreground/65`,children:i?`${N(`workspaceCurrentBranch`)}: ${a||N(`unknown`)} · ${n} ${N(`workspaceChangeCount`)}`:N(`workspaceNotGitRepository`)})]})]})}function ht({project:e,open:t,onOpenChange:n,view:r,onViewChange:i,onPreviewArtifact:a,onDraftRequest:u,focusTarget:d,previewUrl:f,artifacts:m=[],pendingTerminalCommand:h,onPendingTerminalCommandHandled:g}){let[_,v]=(0,F.useState)([]),[y,te]=(0,F.useState)([]),[ne,re]=(0,F.useState)(),[b,ie]=(0,F.useState)(),[x,oe]=(0,F.useState)(!1),[S,se]=(0,F.useState)(!1),[le,ue]=(0,F.useState)(),[de,fe]=(0,F.useState)(``),C=(0,F.useRef)(void 0);C.current||=e?.id?tt(e.id):{tabs:[]};let[w,T]=(0,F.useState)(()=>C.current?.tabs??[]),[E,D]=(0,F.useState)(()=>C.current?.activePanelTabId),[O,me]=(0,F.useState)(!1),[k,_e]=(0,F.useState)(!1),[j,ye]=(0,F.useState)(Ze),[be,Ce]=(0,F.useState)(!1),[we,Te]=(0,F.useState)(t),[P,Ee]=(0,F.useState)(!1),[L,De]=(0,F.useState)(it),[Oe,Ae]=(0,F.useState)(!1),[R,je]=(0,F.useState)(!1),[Me,z]=(0,F.useState)(!1),B=(0,F.useRef)(null),Ne=(0,F.useRef)(null),Pe=(0,F.useRef)(null),V=(0,F.useRef)(null),H=(0,F.useRef)(null),U=(0,F.useRef)(null),W=(0,F.useRef)(null),G=(0,F.useRef)(null),Fe=(0,F.useRef)(null),Ie=(0,F.useRef)(rt(C.current?.tabs??[])),Le=(0,F.useRef)(f),Re=(0,F.useRef)(void 0),ze=(0,F.useRef)(e?.id),Ke=(0,F.useRef)(!1),q=(0,F.useRef)(new Set),Y=e?.id,X=(0,F.useMemo)(()=>w.find(e=>e.id===E),[E,w]),et=X?.activeReaderTabId,ut=(0,F.useMemo)(()=>X?.readerTabs||[],[X?.readerTabs]),Z=(0,F.useMemo)(()=>ut.find(e=>e.id===et),[et,ut]),dt=!!(Z&&Z.mode!==`browser`&&(X?.kind===`reader`||X?.kind===`files`||X?.kind===`review`&&Z.mode===`diff`)),ft=X?.kind===`review`?r===`changes`?`changes`:`overview`:`files`,ht=(0,F.useMemo)(()=>{let e={};for(let t of y)e[t.path]=t;return e},[y]),gt=(0,F.useMemo)(()=>{let e=new Set;for(let t of y)e.add(t.path),t.oldPath&&e.add(t.oldPath);return e},[y]),_t=(0,F.useMemo)(()=>at(_,de),[de,_]),vt=(0,F.useMemo)(()=>({conflicts:y.filter(e=>e.conflict||e.status===`conflicted`),staged:y.filter(e=>!e.conflict&&e.status!==`untracked`&&e.staged),unstaged:y.filter(e=>!e.conflict&&e.status!==`untracked`&&e.unstaged),untracked:y.filter(e=>!e.conflict&&e.status===`untracked`)}),[y]);(0,F.useEffect)(()=>{if(t){let e=!1;return queueMicrotask(()=>{e||(Te(!0),window.requestAnimationFrame(()=>{e||Ee(!0)}))}),()=>{e=!0}}let e=!1;queueMicrotask(()=>{e||Ee(!1)});let n=window.setTimeout(()=>Te(!1),180);return()=>{e=!0,window.clearTimeout(n)}},[t]),(0,F.useEffect)(()=>{if(!O&&!k)return;let e=e=>{let t=e.target;O&&!Ne.current?.contains(t)&&me(!1),k&&!Pe.current?.contains(t)&&_e(!1)},t=e=>{e.key===`Escape`&&(me(!1),_e(!1))};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[O,k]),(0,F.useEffect)(()=>{let e=!1;return!t||!d||queueMicrotask(()=>{e||(d.tab===`git`?$(`review`,`changes`):i(`files`),d.filePath&&Re.current?.(d.filePath))}),()=>{e=!0}},[d,i,t]),(0,F.useEffect)(()=>{if(!t)return;let e=Ge(r);if(e===`review`){r===`changes`&&$(`review`,`changes`);return}if(e===`browser`){if(f===Le.current&&X?.kind===`browser`)return;Le.current=f,$(`browser`,`browser`,{url:f});return}e!==X?.kind&&$(e,K(e))},[r,t,f]),(0,F.useEffect)(()=>{try{window.localStorage.setItem(Ye,String(L))}catch{}},[L]);let yt=(0,F.useCallback)(()=>{De(e=>e<J?J:e)},[]);(0,F.useEffect)(()=>{!P||R||(X?.kind===`browser`||X?.kind===`terminal`||et)&&yt()},[X?.kind,et,P,R,yt]),(0,F.useEffect)(()=>{let e=!1;if(!(!Y||!t))return queueMicrotask(()=>{e||(se(!0),ue(void 0),Promise.all([ve(Y),he(Y)]).then(([t,n])=>{e||(v(t.tree),te(n.files),re(n.branch),ie(n.counts),oe(n.isGitRepository))}).catch(t=>{e||ue(t instanceof Error?t.message:N(`workspaceLoadFailed`))}).finally(()=>{e||se(!1)}))}),()=>{e=!0}},[t,Y]),(0,F.useEffect)(()=>{if(!Y){Ke.current=!0,ze.current=void 0,T([]),D(void 0);return}if(ze.current===Y)return;let e=tt(Y);Ke.current=!0,ze.current=Y,Ie.current=rt(e.tabs),T(e.tabs),D(e.activePanelTabId);let t=e.tabs.find(t=>t.id===e.activePanelTabId)??e.tabs[0];t&&t.kind!==`reader`&&i(K(t.kind))},[i,Y]),(0,F.useEffect)(()=>{if(Y){if(Ke.current){Ke.current=!1;return}try{window.localStorage.setItem($e(Y),JSON.stringify(nt(w,E)))}catch{}}},[E,w,Y]),(0,F.useEffect)(()=>{!E||w.some(e=>e.id===E)||D(w[0]?.id)},[E,w]),(0,F.useEffect)(()=>{if(!Y)return;let e=w.flatMap(e=>e.kind===`reader`?(e.readerTabs||[]).filter(e=>e.loading&&e.mode===`file`).map(t=>({panelTabId:e.id,reader:t})):[]);for(let{panelTabId:t,reader:n}of e){let e=`${Y}:${n.id}`;q.current.has(e)||(q.current.add(e),ge(Y,n.path).then(e=>({file:e})).then(e=>{Q(t,t=>({...t,readerTabs:(t.readerTabs||[]).map(t=>t.id===n.id?{...t,...e,loading:!1,error:void 0}:t)}))}).catch(e=>{Q(t,t=>({...t,readerTabs:(t.readerTabs||[]).map(t=>t.id===n.id?{...t,loading:!1,error:e instanceof Error?e.message:N(`workspaceOpenFileFailed`)}:t)}))}).finally(()=>{q.current.delete(e)}))}},[w,Y]);function bt(e,t){let n=`${e}-${Ie.current++}`;return e===`browser`?{id:n,kind:e,url:t?.url||f||``}:e===`reader`||e===`files`||e===`review`?{id:n,kind:e,readerTabs:t?.readerTab?[t.readerTab]:[],activeReaderTabId:t?.readerTab?.id}:{id:n,kind:e}}function xt(e){return bt(`reader`,{readerTab:e})}function Q(e,t){T(n=>n.map(n=>n.id===e?t(n):n))}function $(e,t=K(e),n){let r=e===`review`?w.find(e=>e.kind===`review`):void 0,a=r||bt(e,n);return r||T(e=>[...e,a]),D(a.id),i(t),me(!1),a}function St(e){D(e.id),e.kind!==`reader`&&i(K(e.kind))}function Ct(e){T(t=>{let r=t.findIndex(t=>t.id===e),a=t.filter(t=>t.id!==e);if(a.length===0)return D(void 0),i(`review`),n(!1),a;if(E===e){let e=a[r]??a[r-1];D(e?.id),e?e.kind!==`reader`&&i(K(e.kind)):i(`review`)}return a})}function wt(e){if(a){a(e);return}Tt(e)}async function Tt(e){if(!Y)return;let t=He(`file`,e),n=w.find(e=>e.kind===`reader`&&e.readerTabs?.some(e=>e.id===t));if(n){D(n.id),Q(n.id,e=>({...e,activeReaderTabId:t}));return}let r=xt({id:t,mode:`file`,path:e,loading:!0});T(e=>[...e,r]),D(r.id);try{let n=await ge(Y,e);Q(r.id,e=>({...e,readerTabs:(e.readerTabs||[]).map(e=>e.id===t?{...e,file:n,loading:!1,error:void 0}:e)}))}catch(e){Q(r.id,n=>({...n,readerTabs:(n.readerTabs||[]).map(n=>n.id===t?{...n,loading:!1,error:e instanceof Error?e.message:N(`workspaceOpenFileFailed`)}:n)}))}}Re.current=Tt;async function Et(e,t){if(!Y)return;let n=w.find(e=>e.kind===`review`)||$(`review`,t?`changes`:`review`);D(n.id),t&&i(`changes`);let r=He(`diff`,e);if(n.readerTabs?.some(e=>e.id===r)){Q(n.id,e=>({...e,activeReaderTabId:r}));return}let a={id:r,mode:`diff`,path:e,loading:!0};Q(n.id,e=>({...e,readerTabs:[...e.readerTabs||[],a],activeReaderTabId:r}));try{let t=await xe(Y,e);Q(n.id,e=>({...e,readerTabs:(e.readerTabs||[]).map(e=>e.id===r?{...e,diff:t,loading:!1,error:void 0}:e)}))}catch(e){Q(n.id,t=>({...t,readerTabs:(t.readerTabs||[]).map(t=>t.id===r?{...t,loading:!1,error:e instanceof Error?e.message:N(`workspaceOpenDiffFailed`)}:t)}))}}function Dt(e){X&&Q(X.id,t=>{let n=t.readerTabs||[],r=n.findIndex(t=>t.id===e),i=n.filter(t=>t.id!==e),a=t.activeReaderTabId===e?(i[r]??i[r-1])?.id:t.activeReaderTabId;return{...t,readerTabs:i,activeReaderTabId:a}})}async function Ot(e){await Et(e,!0)}async function kt(e){await Et(e,!1)}function At(e){U.current={startX:e.clientX,startWidth:L,currentWidth:L},Fe.current={cursor:document.body.style.cursor,userSelect:document.body.style.userSelect},document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,Ae(!0),e.preventDefault();try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}}function jt(e){let t=U.current,n=B.current;!t||!n||(t.currentWidth=Math.min(J,Math.max(Je,t.startWidth+t.startX-e.clientX)),W.current===null&&(W.current=window.requestAnimationFrame(()=>{W.current=null;let e=U.current;!e||!B.current||(B.current.style.width=`${e.currentWidth}px`)})))}function Mt(e){let t=U.current?.currentWidth;U.current=null,W.current!==null&&(window.cancelAnimationFrame(W.current),W.current=null),typeof t==`number`&&(B.current&&(B.current.style.width=`${t}px`),De(t));let n=Fe.current;n&&(document.body.style.cursor=n.cursor,document.body.style.userSelect=n.userSelect,Fe.current=null),Ae(!1);try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}}function Nt(e){V.current={startX:e.clientX,startWidth:j,currentWidth:j},document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,Ce(!0),e.preventDefault();try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}}function Pt(e){let t=V.current;t&&(t.currentWidth=Math.min(Qe,Math.max(Xe,t.startWidth+e.clientX-t.startX)),H.current===null&&(H.current=window.requestAnimationFrame(()=>{H.current=null;let e=V.current;e&&ye(e.currentWidth)})))}function Ft(e){let t=V.current?.currentWidth;V.current=null,H.current!==null&&(window.cancelAnimationFrame(H.current),H.current=null),typeof t==`number`&&ye(t),document.body.style.cursor=``,document.body.style.userSelect=``,Ce(!1);try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}}let It=(0,F.useCallback)(()=>{let e=B.current;if(!e){je(e=>!e);return}G.current?.cancel();let t=e.getBoundingClientRect(),n=window.innerWidth,r=Ve(),i=window.innerHeight-r,a=`${r}px`,o=`${i}px`,s=`cubic-bezier(0.22, 1, 0.36, 1)`;if(z(!0),!R){window.requestAnimationFrame(()=>{let e=B.current;if(!e)return;Object.assign(e.style,{position:`fixed`,left:`${t.left}px`,top:`${t.top}px`,right:`auto`,bottom:`auto`,width:`${t.width}px`,height:`${t.height}px`,minWidth:`0px`,maxWidth:`none`,zIndex:`40`});let r=e.animate([{left:`${t.left}px`,top:`${t.top}px`,width:`${t.width}px`,height:`${t.height}px`},{left:`0px`,top:a,width:`${n}px`,height:o}],{duration:240,easing:s,fill:`forwards`});G.current=r,r.onfinish=()=>{G.current=null,je(!0),window.requestAnimationFrame(()=>{r.cancel(),e.removeAttribute(`style`),window.requestAnimationFrame(()=>z(!1))})},r.oncancel=()=>{G.current=null,z(!1)}});return}window.requestAnimationFrame(()=>{let e=B.current;if(!e)return;Object.assign(e.style,{position:`fixed`,left:`0px`,top:a,right:`auto`,bottom:`auto`,width:`${t.width}px`,height:o,zIndex:`40`});let r=n-L,i=e.animate([{left:`0px`,top:a,width:`${t.width}px`,height:o},{left:`${r}px`,top:a,width:`${L}px`,height:o}],{duration:240,easing:s,fill:`forwards`});G.current=i,i.onfinish=()=>{G.current=null,je(!1),window.requestAnimationFrame(()=>{i.cancel(),e.style.position=``,e.style.left=``,e.style.top=``,e.style.right=``,e.style.bottom=``,e.style.height=``,e.style.zIndex=``,e.style.width=`${L}px`,e.style.minWidth=`${Je}px`,e.style.maxWidth=`${J}px`,window.requestAnimationFrame(()=>z(!1))})},i.oncancel=()=>{G.current=null,z(!1)}})},[R,L]);return(0,F.useEffect)(()=>{if(!R)return;let e=e=>{e.key===`Escape`&&je(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[R]),(0,F.useEffect)(()=>()=>{W.current!==null&&window.cancelAnimationFrame(W.current),H.current!==null&&window.cancelAnimationFrame(H.current),G.current?.cancel(),B.current&&B.current.removeAttribute(`style`);let e=Fe.current;e&&(document.body.style.cursor=e.cursor,document.body.style.userSelect=e.userSelect)},[]),we?(0,I.jsx)(I.Fragment,{children:(0,I.jsxs)(`aside`,{ref:B,className:M(`relative hidden shrink-0 overflow-hidden flex-col bg-background transition-[width,min-width,max-width,opacity,transform] duration-200 ease-out will-change-[width,opacity,transform] lg:flex`,P?`translate-x-0 opacity-100`:`w-0 min-w-0 max-w-0 translate-x-4 opacity-0`,Oe?`transition-none`:``,R?`quickforge-workspace-inspector-fullscreen z-40 rounded-none border-l-0`:`lg:rounded-l-2xl`),style:P?R?void 0:{width:L,minWidth:Je,maxWidth:J}:void 0,children:[P&&!R?(0,I.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-valuemin":Je,"aria-valuemax":J,"aria-valuenow":L,className:M(`group absolute inset-y-0 -left-2 z-20 flex w-4 cursor-col-resize items-center justify-center bg-transparent transition-colors hover:bg-border/40`,Oe?`bg-border/45`:``),onPointerDown:At,onPointerMove:jt,onPointerUp:Mt,onPointerCancel:Mt,children:(0,I.jsx)(`div`,{className:M(`flex h-10 w-3 items-center justify-center rounded-full border border-border bg-background text-muted-foreground/60 opacity-0 shadow-sm transition-opacity`,Oe?`opacity-100`:`group-hover:opacity-100`),children:(0,I.jsx)(pe,{className:`size-3`})})}):null,(0,I.jsxs)(`div`,{className:M(`flex h-14 shrink-0 items-center gap-2 border-b-[0.5px] border-[color-mix(in_oklab,var(--border)_34%,transparent)] bg-background px-3 pr-20 transition-opacity duration-150`,Me?`opacity-0`:`opacity-100`),children:[w.length>0?(0,I.jsxs)(`div`,{ref:Pe,className:`relative shrink-0`,children:[(0,I.jsx)(`button`,{type:`button`,className:`flex size-9 items-center justify-center rounded-2xl bg-transparent text-muted-foreground/85 transition-colors hover:bg-muted/45 hover:text-foreground/90`,onClick:()=>_e(e=>!e),"aria-label":N(`rightPanelOpenTabsTitle`),title:N(`rightPanelOpenTabsTitle`),"aria-haspopup":`menu`,"aria-expanded":k,children:(0,I.jsx)(l,{className:M(`size-4 transition-transform`,k&&`rotate-180`)})}),k?(0,I.jsx)(`div`,{className:`absolute left-0 top-12 z-40 w-72 max-w-[calc(100vw-2rem)] rounded-2xl border border-[color-mix(in_oklab,var(--border)_34%,transparent)] bg-popover p-2 shadow-quickforge`,role:`menu`,children:w.map(t=>{let n=(t.kind===`reader`?void 0:We[t.kind])?.icon??ae,r=t.id===E,i=qe(t,e?.name);return(0,I.jsxs)(`div`,{className:M(`group flex h-10 w-full items-center gap-2 rounded-xl px-2 transition-colors`,r?`bg-muted/55 text-foreground`:`text-foreground/86 hover:bg-muted/34 hover:text-foreground`),role:`none`,children:[(0,I.jsxs)(`button`,{type:`button`,className:`flex min-w-0 flex-1 items-center gap-2 text-left text-sm font-medium`,onClick:()=>{St(t),_e(!1)},role:`menuitem`,title:i,children:[(0,I.jsx)(n,{className:`size-4 shrink-0 text-muted-foreground/80`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:i})]}),(0,I.jsx)(`button`,{type:`button`,className:`inline-flex size-7 shrink-0 items-center justify-center rounded-full text-muted-foreground/70 opacity-70 transition-colors hover:bg-destructive/10 hover:text-destructive group-hover:opacity-100`,onClick:e=>{e.stopPropagation(),Ct(t.id)},"aria-label":N(`close`),children:(0,I.jsx)(ce,{className:`size-3.5`})})]},t.id)})}):null]}):null,(0,I.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-1 overflow-hidden`,children:[w.map((t,n)=>{let r=(t.kind===`reader`?void 0:We[t.kind])?.icon??ae,i=t.id===E,a=qe(t,e?.name);return(0,I.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[n>0?(0,I.jsx)(`span`,{"aria-hidden":`true`,className:`mx-0.5 h-3.5 w-px bg-[color-mix(in_oklab,var(--muted-foreground)_18%,transparent)]`}):null,(0,I.jsxs)(`button`,{type:`button`,className:M(`group flex h-10 max-w-40 items-center gap-2 rounded-2xl px-3 text-[13px] font-medium transition-colors`,i?`bg-[color-mix(in_oklab,var(--muted)_86%,transparent)] text-foreground/82 hover:bg-[color-mix(in_oklab,var(--muted)_86%,transparent)]`:`text-muted-foreground/45 hover:bg-[color-mix(in_oklab,var(--muted)_72%,transparent)] hover:text-muted-foreground/72`),onClick:()=>St(t),title:a,children:[(0,I.jsx)(r,{className:M(`size-4 shrink-0`,i?`text-foreground/74`:`text-muted-foreground/45 group-hover:text-muted-foreground/72`)}),(0,I.jsx)(`span`,{className:`min-w-0 truncate`,children:a}),(0,I.jsx)(`span`,{role:`button`,tabIndex:0,className:M(`ml-0.5 inline-flex size-5 shrink-0 items-center justify-center rounded-full opacity-0 transition-all hover:bg-black hover:text-white group-hover:opacity-100`,i&&`opacity-100`),onClick:e=>{e.stopPropagation(),Ct(t.id)},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),Ct(t.id))},"aria-label":N(`close`),children:(0,I.jsx)(ce,{className:`size-3.5`})})]})]},t.id)}),w.length===0?(0,I.jsx)(`div`,{className:`min-w-0 flex-1`}):null]}),w.length>0?(0,I.jsxs)(`div`,{ref:Ne,className:`relative shrink-0`,children:[(0,I.jsx)(`button`,{type:`button`,className:`flex size-9 items-center justify-center rounded-2xl bg-transparent text-muted-foreground/85 transition-colors hover:bg-muted/45 hover:text-foreground/90`,onClick:()=>me(e=>!e),"aria-label":N(`rightPanelAddTab`),title:N(`rightPanelAddTab`),"aria-haspopup":`menu`,"aria-expanded":O,children:(0,I.jsx)(p,{className:`size-4 stroke-[1.9]`})}),O?(0,I.jsx)(`div`,{className:`absolute right-0 top-12 z-40 w-64 rounded-2xl border border-[color-mix(in_oklab,var(--border)_34%,transparent)] bg-popover p-2 shadow-quickforge`,role:`menu`,children:Ue.map(e=>{let t=e.icon;return(0,I.jsxs)(`button`,{type:`button`,className:M(`flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left text-[15px] font-medium transition-colors`,e.kind===X?.kind?`bg-muted/55 text-foreground`:`text-foreground/86 hover:bg-muted/34 hover:text-foreground`),onClick:()=>$(e.kind,K(e.kind)),role:`menuitem`,children:[(0,I.jsx)(t,{className:`size-4 shrink-0 text-muted-foreground/80`}),(0,I.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:e.label})]},e.kind)})}):null]}):null,(0,I.jsx)(A,{variant:`ghost`,size:`icon`,className:`shrink-0`,onClick:It,"aria-label":N(R?`workspaceExitFullscreen`:`workspaceFullscreen`),title:N(R?`workspaceExitFullscreen`:`workspaceFullscreen`),children:R?(0,I.jsx)(s,{className:`size-4`}):(0,I.jsx)(o,{className:`size-4`})})]}),(0,I.jsx)(`div`,{className:M(`flex min-h-0 flex-1 transition-opacity duration-150`,Me?`opacity-0`:`opacity-100`),children:e?.id?X?X.kind===`browser`?(0,I.jsx)(ke,{url:X.url||``,onUrlChange:e=>{Q(X.id,t=>({...t,url:e}))},projectId:e.id}):X.kind===`terminal`?(0,I.jsx)(Se,{project:e,pendingCommand:h,onPendingCommandHandled:g,onCollapse:()=>Ct(X.id),variant:`panel`,singleSession:!0,panelInstanceId:X.id,panelSessionId:X.terminalSessionId,onPanelSessionReady:e=>Q(X.id,t=>({...t,terminalSessionId:e}))},X.id):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{className:M(`flex min-h-0 flex-col bg-muted/20`,dt?`shrink-0 border-r-[0.5px] border-[color-mix(in_oklab,var(--border)_34%,transparent)]`:`flex-1`),style:dt?{width:j,minWidth:Xe,maxWidth:Qe}:void 0,children:le?(0,I.jsx)(`div`,{className:`p-4 text-sm text-destructive`,children:le}):(0,I.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-auto p-2`,children:[S?(0,I.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground/70`,children:N(`workspaceLoading`)}):null,!S&&ft===`overview`?(0,I.jsx)(mt,{project:e,artifacts:m,changesCount:y.length,changedPaths:gt,isGitRepository:x,gitBranch:ne,onSelectFile:Tt,onSelectDiff:kt,onPreviewFile:wt}):null,!S&&ft===`files`?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsxs)(`label`,{className:`mb-2 flex items-center gap-2 rounded-md border-[0.5px] border-[color-mix(in_oklab,var(--border)_34%,transparent)] bg-background px-2 py-1.5 text-xs text-muted-foreground/65 focus-within:text-foreground/85`,children:[(0,I.jsx)(ee,{className:`size-3.5 shrink-0`}),(0,I.jsx)(`input`,{value:de,onChange:e=>fe(e.target.value),placeholder:N(`workspaceFilterFiles`),className:`min-w-0 flex-1 bg-transparent text-xs text-foreground/85 outline-none placeholder:text-muted-foreground/50`})]}),(0,I.jsx)(Be,{tree:_t,selectedPath:Z?.mode===`file`?Z.path:void 0,gitStatuses:ht,onSelectFile:Tt,onPreviewFile:wt,projectId:Y})]}):null,!S&&ft===`changes`?x?(0,I.jsxs)(`div`,{className:`space-y-3`,children:[y.length===0?(0,I.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground/70`,children:N(`workspaceNoWorkingTreeChanges`)}):(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(lt,{title:N(`workspaceConflicts`),files:vt.conflicts,selectedPath:void 0,onSelectFile:Ot}),(0,I.jsx)(lt,{title:N(`workspaceStagedChanges`),files:vt.staged,selectedPath:void 0,onSelectFile:Ot}),(0,I.jsx)(lt,{title:N(`workspaceChanges`),files:vt.unstaged,selectedPath:void 0,onSelectFile:Ot}),(0,I.jsx)(lt,{title:N(`workspaceUntracked`),files:vt.untracked,selectedPath:void 0,onSelectFile:Ot})]}),(0,I.jsxs)(`div`,{className:`rounded-lg border border-border bg-muted/10 px-3 py-2`,children:[(0,I.jsx)(`div`,{className:`truncate text-xs font-medium text-foreground/85`,children:ct(ne,b)}),(0,I.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground/60`,children:[(0,I.jsxs)(`span`,{children:[N(`workspaceStaged`),` `,b?.staged??0]}),(0,I.jsxs)(`span`,{children:[N(`workspaceChanges`),` `,b?.unstaged??0]}),(0,I.jsxs)(`span`,{children:[N(`workspaceUntracked`),` `,b?.untracked??0]}),b?.conflicts?(0,I.jsxs)(`span`,{className:`text-red-600 dark:text-red-500`,children:[N(`workspaceConflicts`),` `,b.conflicts]}):null]}),y.length>0&&u?(0,I.jsxs)(`div`,{className:`mt-2 flex gap-1.5`,children:[(0,I.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] font-medium text-muted-foreground/72 transition-colors hover:bg-muted/20 hover:text-foreground/85`,onClick:()=>u(ot(y)),children:[(0,I.jsx)(c,{className:`size-3`}),N(`workspaceReview`)]}),(0,I.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] font-medium text-muted-foreground/72 transition-colors hover:bg-muted/20 hover:text-foreground/85`,onClick:()=>u(st(y)),children:[(0,I.jsx)(c,{className:`size-3`}),N(`workspaceCommitMessage`)]})]}):null]})]}):(0,I.jsx)(`div`,{className:`px-2 py-3 text-xs text-muted-foreground/70`,children:N(`workspaceNotGitRepository`)}):null]})}),dt?(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-valuemin":Xe,"aria-valuemax":Qe,"aria-valuenow":j,className:M(`group relative z-10 w-1.5 shrink-0 cursor-col-resize bg-transparent transition-colors`,be?`bg-primary/30`:`hover:bg-[color-mix(in_oklab,var(--border)_52%,transparent)]`),onPointerDown:Nt,onPointerMove:Pt,onPointerUp:Ft,onPointerCancel:Ft}),(0,I.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col bg-background`,children:Z?(0,I.jsx)(pt,{mode:Z.mode,file:Z.file,diff:Z.diff,loading:Z.loading,error:Z.error,onClose:()=>X.kind===`reader`?Ct(X.id):Dt(Z.id),onDraftRequest:u}):null})]}):null]}):(0,I.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center px-5`,children:(0,I.jsxs)(`div`,{className:`w-full max-w-[26rem] space-y-4`,children:[(0,I.jsxs)(`div`,{className:`text-center font-sans`,children:[(0,I.jsx)(`div`,{className:`text-lg font-semibold leading-tight tracking-[-0.01em] text-foreground/90`,children:N(`rightPanelOpenTabsTitle`)}),(0,I.jsx)(`div`,{className:`mt-2 text-sm leading-5 text-muted-foreground/70`,children:N(`rightPanelOpenTabsDescription`)})]}),(0,I.jsx)(`div`,{className:`space-y-2`,children:Ue.map(e=>{let t=e.icon;return(0,I.jsxs)(`button`,{type:`button`,className:`flex w-full cursor-pointer items-center gap-3 rounded-xl border border-[color-mix(in_oklab,var(--border)_34%,transparent)] bg-muted/60 px-4 py-3 text-left transition-colors hover:bg-muted/72 active:bg-muted/82`,onClick:()=>$(e.kind,K(e.kind)),children:[(0,I.jsx)(t,{className:`size-4 shrink-0 text-muted-foreground/78`}),(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsx)(`div`,{className:`text-sm font-medium text-foreground/90`,children:e.label}),(0,I.jsx)(`div`,{className:`mt-0.5 text-xs leading-4 text-muted-foreground/60`,children:e.description})]})]},e.kind)})})]})}):(0,I.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground/70`,children:N(`workspaceSelectProject`)})})]})}):null}export{ht as WorkspaceInspector};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{N as t,Rt as n,kt as r,n as i,pt as a}from"./icons-DHoaB5uq.js";import{i as o,n as s}from"./react-vendor-BR9MG2D-.js";import{nt as c,st as l}from"./index-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{N as t,Rt as n,kt as r,n as i,pt as a}from"./icons-DHoaB5uq.js";import{i as o,n as s}from"./react-vendor-BR9MG2D-.js";import{nt as c,st as l}from"./index-CZb_mGGF.js";import{i as u,n as d,r as f,t as p}from"./diff-line-counts-Dm5kKQOo.js";var m=e(n(),1),h=o(),g=s();function _(e){return Number.isFinite(e)?e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`:``}function v(e){return e?e.status===`added`?l(`workspaceStatusAdded`):e.status===`deleted`?l(`workspaceStatusDeleted`):e.status===`renamed`?l(`workspaceStatusRenamed`):e.status===`untracked`?l(`workspaceStatusUntracked`):l(`workspaceStatusModified`):``}function y(e){return e?e.language===`markdown`||/\.(md|markdown)$/i.test(e.path):!1}function b(e,t=!1){return l(t?`readerFileMarkdownPrompt`:`readerFilePrompt`,{path:e})}function x(e){return l(`readerDiffPrompt`,{path:e})}function S(e){return`Diff for ${e.oldPath?`${e.oldPath} -> ${e.path}`:e.path}\n\n--- OLD\n${e.oldContent}\n\n--- NEW\n${e.newContent}`}function C({open:e,mode:n,file:o,diff:s,loading:C,error:w,onOpenChange:T,onDraftRequest:E}){let[D,O]=(0,m.useState)(),[k,A]=(0,m.useState)(`preview`);async function j(e,t){t&&(await navigator.clipboard.writeText(t),O(e),window.setTimeout(()=>O(void 0),1200))}(0,m.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&T(!1)};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[T,e]);let M=(0,m.useMemo)(()=>n===`diff`&&s?p(s.oldContent,s.newContent):void 0,[n,s]);if(!e)return null;let N=n===`file`?o?.path:s?.path,P=n===`file`&&y(o),F=n===`file`?o?.content:s?S(s):void 0,I=n===`file`&&o?b(o.path,P):n===`diff`&&s?x(s.path):void 0,L=n===`file`&&o?`${o.language} · ${_(o.size)}`:n===`diff`&&s?`${v(s)} · ${s.language}`:``;return(0,h.createPortal)((0,g.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-background/65 px-4 py-6 backdrop-blur-sm`,role:`dialog`,"aria-modal":`true`,children:[(0,g.jsx)(`button`,{type:`button`,className:`absolute inset-0 cursor-default`,"aria-label":l(`close`),onClick:()=>T(!1)}),(0,g.jsxs)(`div`,{className:`relative flex h-[min(88vh,900px)] w-[min(92vw,1280px)] min-w-0 flex-col overflow-hidden rounded-2xl border border-border bg-background shadow-quickforge`,children:[(0,g.jsxs)(`header`,{className:`flex h-14 shrink-0 items-center gap-3 border-b border-border px-4`,children:[(0,g.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,g.jsx)(`div`,{className:`truncate text-sm font-semibold text-foreground/90`,children:N??(n===`file`?`Code reader`:`Diff reader`)}),L?(0,g.jsx)(`div`,{className:`truncate text-xs text-muted-foreground/65`,children:L}):null]}),P?(0,g.jsx)(`div`,{className:`inline-flex shrink-0 rounded-full bg-muted/25 p-1 text-xs`,children:[`preview`,`source`].map(e=>(0,g.jsx)(`button`,{type:`button`,className:e===k?`rounded-full bg-background px-3 py-1 font-medium text-foreground/90 shadow-[0_8px_20px_-16px_rgb(15_23_42_/_0.42)]`:`rounded-full px-3 py-1 text-muted-foreground/70 hover:text-foreground/85`,onClick:()=>A(e),children:l(e===`preview`?`markdownPreview`:`markdownSource`)},e))}):null,M?(0,g.jsxs)(`span`,{className:`shrink-0 font-mono text-xs font-medium`,children:[(0,g.jsxs)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:[`+`,M.added]}),(0,g.jsxs)(`span`,{className:`ml-1.5 text-red-600 dark:text-red-400`,children:[`-`,M.removed]})]}):null,(0,g.jsx)(c,{variant:`ghost`,size:`icon`,onClick:()=>void j(`path`,N),disabled:!N,"aria-label":l(`copyPath`),title:l(`copyPath`),children:D===`path`?(0,g.jsx)(r,{className:`size-4`}):(0,g.jsx)(a,{className:`size-4`})}),(0,g.jsx)(c,{variant:`ghost`,size:`icon`,onClick:()=>void j(`content`,F),disabled:!F,"aria-label":l(`copyContent`),title:l(n===`file`?`copyContent`:`copyDiffContent`),children:D===`content`?(0,g.jsx)(r,{className:`size-4`}):(0,g.jsx)(a,{className:`size-4`})}),(0,g.jsx)(c,{variant:`ghost`,size:`icon`,onClick:()=>I&&E?.(I),disabled:!I||!E,"aria-label":l(`askAiAboutThis`),title:l(`askAiAboutThis`),children:(0,g.jsx)(t,{className:`size-4`})}),(0,g.jsx)(c,{variant:`ghost`,size:`icon`,onClick:()=>T(!1),"aria-label":l(`close`),title:l(`close`),children:(0,g.jsx)(i,{className:`size-4`})})]}),(0,g.jsxs)(`div`,{className:`min-h-0 flex-1 bg-background`,children:[C?(0,g.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground/70`,children:l(`openingReader`)}):null,!C&&w?(0,g.jsx)(`div`,{className:`p-4 text-sm text-destructive`,children:w}):null,!C&&!w&&n===`file`&&o?P?(0,g.jsx)(f,{path:o.path,content:o.content,language:o.language,mode:k},o.path):(0,g.jsx)(u,{path:o.path,content:o.content,language:o.language}):null,!C&&!w&&n===`diff`&&s?(0,g.jsx)(d,{path:s.path,oldContent:s.oldContent,newContent:s.newContent,language:s.language,status:s.status}):null]})]})]}),document.body)}export{C as WorkspaceReaderDialog};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Rt as t}from"./icons-DHoaB5uq.js";import{n}from"./react-vendor-BR9MG2D-.js";import{E as r,w as i}from"./index-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Rt as t}from"./icons-DHoaB5uq.js";import{n}from"./react-vendor-BR9MG2D-.js";import{E as r,w as i}from"./index-CZb_mGGF.js";import{t as a}from"./useAppTheme-DsabFF9D.js";import{n as o,t as s}from"./monaco-CzxeAjEw.js";var c=e(t(),1);function l(){let[e,t]=(0,c.useState)(()=>r());return(0,c.useEffect)(()=>{if(typeof window>`u`)return;let e=()=>t(r());return window.addEventListener(i,e),()=>window.removeEventListener(i,e)},[]),e}var u=n();function d({path:e,content:t,language:n}){let r=a(),i=l();return(0,u.jsx)(s,{value:t,language:n,theme:r===`dark`?`vs-dark`:`vs`,options:{readOnly:!0,contextmenu:!1,automaticLayout:!0,minimap:{enabled:!1},fontFamily:getComputedStyle(document.documentElement).getPropertyValue(`--font-mono`).trim()||`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`,fontSize:i.fontSize,lineHeight:i.lineHeight,lineNumbers:`on`,scrollBeyondLastLine:!1,wordWrap:`off`,renderLineHighlight:`line`,folding:!1,glyphMargin:!1,scrollbar:{verticalScrollbarSize:8,horizontalScrollbarSize:8}}},e)}function f(e){let t=e.trim();if(t&&!/^(javascript|data|vbscript):/i.test(t)&&/^(https?:|mailto:|#|\/|\.\.?\/)/i.test(t))return t}function p(e,t){let n=[],r=/`([^`]+)`|\[([^\]]+)\]\(([^)\s]+)(?:\s+"[^"]*")?\)|\*\*([^*]+)\*\*|__([^_]+)__|\*([^*\n]+)\*|_([^_\n]+)_/g,i=0,a=0,o;for(;o=r.exec(e);){o.index>i&&n.push(e.slice(i,o.index));let s=`${t}-inline-${a++}`;if(o[1])n.push((0,u.jsx)(`code`,{className:`rounded bg-muted/35 px-1 py-0.5 font-mono text-[0.85em] text-foreground/90`,children:o[1]},s));else if(o[2]&&o[3]){let e=f(o[3]);n.push(e?(0,u.jsx)(`a`,{className:`text-primary underline-offset-4 hover:underline`,href:e,target:e.startsWith(`http`)?`_blank`:void 0,rel:`noreferrer`,children:o[2]},s):`[${o[2]}](${o[3]})`)}else o[4]||o[5]?n.push((0,u.jsx)(`strong`,{className:`font-semibold text-foreground/95`,children:o[4]||o[5]},s)):(o[6]||o[7])&&n.push((0,u.jsx)(`em`,{className:`italic`,children:o[6]||o[7]},s));i=r.lastIndex}return i<e.length&&n.push(e.slice(i)),n.length?n:[e]}function m(e,t){return e.split(`
|
|
2
2
|
`).flatMap((e,n)=>{let r=p(e,`${t}-line-${n}`);return n===0?r:[(0,u.jsx)(`br`,{},`${t}-br-${n}`),...r]})}function h(e){return/^\s*(```|~~~)/.test(e)}function g(e){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(e)}function _(e,t){return!!(e[t]?.includes(`|`)&&e[t+1]&&g(e[t+1]))}function v(e,t){let n=e[t]??``;return h(n)||_(e,t)||/^\s{0,3}#{1,6}\s+/.test(n)||/^\s{0,3}([-*_])(?:\s*\1){2,}\s*$/.test(n)||/^\s{0,3}>\s?/.test(n)||/^\s{0,3}[-*+]\s+/.test(n)||/^\s{0,3}\d+[.)]\s+/.test(n)}function y(e){return e.trim().replace(/^\|/,``).replace(/\|$/,``).split(`|`).map(e=>e.trim())}function b(e){let t=e.replace(/\r\n?/g,`
|
|
3
3
|
`).split(`
|
|
4
4
|
`),n=[],r=0,i=0;for(;r<t.length;){let e=t[r],a=`markdown-block-${i++}`;if(!e.trim()){r+=1;continue}if(h(e)){let i=e.match(/^\s*(```|~~~)\s*([^`]*)$/),o=i?.[1]??"```",s=i?.[2]?.trim(),c=[];for(r+=1;r<t.length&&!t[r].trimStart().startsWith(o);)c.push(t[r]),r+=1;r<t.length&&(r+=1),n.push((0,u.jsxs)(`figure`,{className:`my-5 overflow-hidden rounded-xl border border-border bg-muted/20`,children:[s?(0,u.jsx)(`figcaption`,{className:`border-b border-border px-3 py-1.5 font-mono text-[11px] text-muted-foreground/65`,children:s}):null,(0,u.jsx)(`pre`,{className:`overflow-auto p-4 text-[12px] leading-5`,children:(0,u.jsx)(`code`,{children:c.join(`
|