@hienlh/ppm 0.19.3 → 0.19.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/accounts-settings-section-CCFQV-RB.js +1 -0
- package/dist/web/assets/{ai-resource-editor-BqFT1EUB.js → ai-resource-editor-BTWds-aC.js} +1 -1
- package/dist/web/assets/{ai-settings-section-CY6spbEx.js → ai-settings-section-CmoBsSpY.js} +1 -1
- package/dist/web/assets/{ai-settings-section-Po3K8j-g.js → ai-settings-section-DjbYj4wK.js} +1 -1
- package/dist/web/assets/{appearance-settings-section-L9Z-nej_.js → appearance-settings-section-vLmakLtA.js} +1 -1
- package/dist/web/assets/chat-tab-CLRlS8Jc.js +15 -0
- package/dist/web/assets/code-editor-CCwVu5F5.js +7 -0
- package/dist/web/assets/{conflict-editor-BoRPwL3L.js → conflict-editor-CvWYcbwD.js} +1 -1
- package/dist/web/assets/{csv-preview-BpoJqZQi.js → csv-preview-DzuDuyE_.js} +1 -1
- package/dist/web/assets/{database-viewer-I-9cER1L.js → database-viewer-D4XGEDHm.js} +1 -1
- package/dist/web/assets/{diff-viewer-_xHZsxvr.js → diff-viewer-B5N1X61R.js} +1 -1
- package/dist/web/assets/explorer-body-BxLLjthF.js +2 -0
- package/dist/web/assets/{explorer-window-content-DD6Z15pm.js → explorer-window-content-CL1Cipj3.js} +1 -1
- package/dist/web/assets/{extension-manager-section-Cu9D9Udt.js → extension-manager-section-BpyGq15A.js} +1 -1
- package/dist/web/assets/{extension-webview-Diz2OzVq.js → extension-webview-BM8FXhuN.js} +1 -1
- package/dist/web/assets/{files-settings-section-B1e7BgKQ.js → files-settings-section-B0_aR1nL.js} +1 -1
- package/dist/web/assets/{general-settings-section-DWdHHRDy.js → general-settings-section-C1EJzjhU.js} +1 -1
- package/dist/web/assets/{git-log-panel-CMMsvU64.js → git-log-panel-D1yGTUE_.js} +1 -1
- package/dist/web/assets/{glide-data-grid-pKQuyYFj.js → glide-data-grid-Cu0STKML.js} +11 -11
- package/dist/web/assets/{group-chat-tab-U5u0Loii.js → group-chat-tab-BfcvkRX5.js} +1 -1
- package/dist/web/assets/{index--KWVW-Ga.js → index-B1bzKRjJ.js} +4 -4
- package/dist/web/assets/index-nP3uxXvR.css +2 -0
- package/dist/web/assets/{jira-watcher-section-uA5oyB8s.js → jira-watcher-section-DZh-Z2MK.js} +1 -1
- package/dist/web/assets/{keybindings-store-Ccf0etMJ.js → keybindings-store-CFwgcnpZ.js} +1 -1
- package/dist/web/assets/{keyboard-shortcuts-section-B7IxJHiI.js → keyboard-shortcuts-section-JBtcJGM3.js} +1 -1
- package/dist/web/assets/{markdown-renderer-DDcIGQEd.js → markdown-renderer-Bo8GgGXl.js} +1 -1
- package/dist/web/assets/{markdown-renderer-CY1epGRc.js → markdown-renderer-DY60UZNW.js} +1 -1
- package/dist/web/assets/{mobile-explorer-sheet-CqkwbCRl.js → mobile-explorer-sheet-C59rPw7Z.js} +1 -1
- package/dist/web/assets/{notification-store-BNSYk3E7.js → notification-store-Bd6L0K_Q.js} +1 -1
- package/dist/web/assets/{notifications-settings-section-v_628h4B.js → notifications-settings-section-ARQlF-6E.js} +1 -1
- package/dist/web/assets/{pdf-preview-CI3q1MnH.js → pdf-preview-CRShdbBS.js} +1 -1
- package/dist/web/assets/{postgres-viewer-jaR0FYJ_.js → postgres-viewer-BNT-4yYl.js} +2 -2
- package/dist/web/assets/{ppmbot-settings-section-BET4VmKb.js → ppmbot-settings-section-Bq4YAcFW.js} +1 -1
- package/dist/web/assets/{process-table-D1r-Gupi.js → process-table-CjiXW0rg.js} +1 -1
- package/dist/web/assets/{proxy-settings-section-0DvNh1B-.js → proxy-settings-section-wRbiyQiA.js} +1 -1
- package/dist/web/assets/{query-audit-section-BA5rT6Sh.js → query-audit-section-C5RmhRSu.js} +1 -1
- package/dist/web/assets/{remote-desktop-mobile-sheet-CPa3XElX.js → remote-desktop-mobile-sheet-BF-75_03.js} +2 -2
- package/dist/web/assets/{remote-desktop-mobile-view-De_a4skd.js → remote-desktop-mobile-view-C9KR9I9G.js} +1 -1
- package/dist/web/assets/{remote-desktop-readiness-gate-CPrDIv2d.js → remote-desktop-readiness-gate-BnKJicB2.js} +1 -1
- package/dist/web/assets/{remote-desktop-window-content-CG1StfCE.js → remote-desktop-window-content-awXsNw_R.js} +1 -1
- package/dist/web/assets/{schedules-settings-section-B2f7V7Xr.js → schedules-settings-section-BOecKJzl.js} +1 -1
- package/dist/web/assets/{settings-body-omv04jbb.js → settings-body-DGi5DXY6.js} +2 -2
- package/dist/web/assets/{settings-tab-NdnBTqyj.js → settings-tab-GM9zTRul.js} +1 -1
- package/dist/web/assets/{settings-window-content-Chou1JGa.js → settings-window-content-Dvhxo4_H.js} +1 -1
- package/dist/web/assets/{sql-query-editor-Dk9y3jqy.js → sql-query-editor-BmkGFzcL.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-4xFhkLYy.js → sqlite-viewer-DbziVQXQ.js} +1 -1
- package/dist/web/assets/{system-monitor-body-B_1iMVOI.js → system-monitor-body-CbHW5aYm.js} +2 -2
- package/dist/web/assets/{system-monitor-tab-B2j9mWBW.js → system-monitor-tab-C7EZLMIo.js} +1 -1
- package/dist/web/assets/{system-monitor-window-content-BOjq53uU.js → system-monitor-window-content-C_w4w81e.js} +1 -1
- package/dist/web/assets/{tab-host-window-content-CW_dlYlW.js → tab-host-window-content-BSP1SEXS.js} +1 -1
- package/dist/web/assets/{team-member-sheet-CkR4qO7V.js → team-member-sheet-C9N0iA1-.js} +2 -2
- package/dist/web/assets/{team-member-window-content-CmF5ia3n.js → team-member-window-content-CM2QFv-s.js} +1 -1
- package/dist/web/assets/{terminal-tab-HXZkicIc.js → terminal-tab-jWYELm8y.js} +2 -2
- package/dist/web/assets/{tool-cards-jA1BTLZj.js → tool-cards-jefdOWVJ.js} +4 -4
- package/dist/web/assets/use-accounts-data-MhMl0Y4Z.js +1 -0
- package/dist/web/assets/{use-monaco-theme-BcQqKVbE.js → use-monaco-theme-BbAd7DXr.js} +1 -1
- package/dist/web/assets/{use-remote-desktop-display-choice-DY5BWRTo.js → use-remote-desktop-display-choice-DlfMIWq3.js} +1 -1
- package/dist/web/assets/{use-websocket-DetaY8OI.js → use-websocket-Bq8X_SUI.js} +1 -1
- package/dist/web/assets/{video-preview-C0uH2228.js → video-preview-BGh3B0Lu.js} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/src/services/proxy-agent-anthropic-bridge.ts +93 -0
- package/src/services/proxy-agent-bridge.ts +100 -0
- package/src/services/proxy-agent-turn.ts +161 -0
- package/src/services/proxy-anthropic-format.ts +157 -0
- package/src/services/proxy-openai-format.ts +148 -0
- package/src/web/components/chat/usage-badge.tsx +41 -4
- package/src/web/components/settings/accounts/account-card.tsx +27 -3
- package/src/web/components/settings/accounts/accounts-pane-header.tsx +22 -2
- package/src/web/components/settings/accounts/claude-accounts-section.tsx +4 -3
- package/src/web/components/settings/accounts/codex-accounts-section.tsx +11 -4
- package/dist/web/assets/accounts-settings-section-LtSVxNNp.js +0 -1
- package/dist/web/assets/chat-tab-BIO-VhWT.js +0 -15
- package/dist/web/assets/code-editor-B9lVjElM.js +0 -7
- package/dist/web/assets/explorer-body-DapwsOnp.js +0 -2
- package/dist/web/assets/index-CvGx7wBQ.css +0 -2
- package/dist/web/assets/use-accounts-data-BI_5qNvr.js +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./copy-BewHj66E.js";import{t as a}from"./loader-circle-DPMrnLQ2.js";import{n as o,s}from"./api-client-oY1tC3tM.js";import"./vendor-mermaid-BKWscKt0.js";import{t as c}from"./settings-store-Brjd0QnO.js";import{n as l}from"./utils-C9OjCrou.js";import"./portal-container-context-a399Hd9F.js";import{t as u}from"./panel-store-BRrnDO_i.js";import"./window-store-DGKf9rPG.js";import{r as d,t as f}from"./apply-theme-DxTXOAcV.js";import{t as p}from"./mobile-bottom-sheet-BD5b7KJF.js";import"./use-visual-viewport-rnvuooQZ.js";import{t as m}from"./resolve-theme-DQk_YcsT.js";import{t as h}from"./ws-auth-Dawx17PM.js";import{Cr as g,Gn as _,
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./copy-BewHj66E.js";import{t as a}from"./loader-circle-DPMrnLQ2.js";import{n as o,s}from"./api-client-oY1tC3tM.js";import"./vendor-mermaid-BKWscKt0.js";import{t as c}from"./settings-store-Brjd0QnO.js";import{n as l}from"./utils-C9OjCrou.js";import"./portal-container-context-a399Hd9F.js";import{t as u}from"./panel-store-BRrnDO_i.js";import"./window-store-DGKf9rPG.js";import{r as d,t as f}from"./apply-theme-DxTXOAcV.js";import{t as p}from"./mobile-bottom-sheet-BD5b7KJF.js";import"./use-visual-viewport-rnvuooQZ.js";import{t as m}from"./resolve-theme-DQk_YcsT.js";import{t as h}from"./ws-auth-Dawx17PM.js";import{Cr as g,Gn as _,Tr as v,in as y,rr as b,sr as x,tn as S}from"./index-B1bzKRjJ.js";import{r as C}from"./send-to-chat-S8LCNX7V.js";import{n as w,t as T}from"./run-in-terminal-bKRwuO2z.js";import{i as E,n as D,r as O,t as k}from"./vendor-xterm-BaMOj65g.js";var A=r(`link-2-off`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7`,key:`10o201`}],[`path`,{d:`M15 7h2a5 5 0 0 1 4 8`,key:`1d3206`}],[`line`,{x1:`8`,x2:`12`,y1:`12`,y2:`12`,key:`rvw6j4`}],[`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`,key:`a6p6uj`}]]),j=r(`log-in`,[[`path`,{d:`m10 17 5-5-5-5`,key:`1bsop3`}],[`path`,{d:`M15 12H3`,key:`6jk70r`}],[`path`,{d:`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,key:`u53s6r`}]]),M=r(`text-select`,[[`path`,{d:`M14 21h1`,key:`v9vybs`}],[`path`,{d:`M14 3h1`,key:`1ec4yj`}],[`path`,{d:`M19 3a2 2 0 0 1 2 2`,key:`18rm91`}],[`path`,{d:`M21 14v1`,key:`169vum`}],[`path`,{d:`M21 19a2 2 0 0 1-2 2`,key:`1j7049`}],[`path`,{d:`M21 9v1`,key:`mxsmne`}],[`path`,{d:`M3 14v1`,key:`vnatye`}],[`path`,{d:`M3 9v1`,key:`1r0deq`}],[`path`,{d:`M5 21a2 2 0 0 1-2-2`,key:`sbafld`}],[`path`,{d:`M5 3a2 2 0 0 0-2 2`,key:`y57alp`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}],[`path`,{d:`M7 16h6`,key:`1vyc9m`}],[`path`,{d:`M7 8h8`,key:`1jbsf9`}],[`path`,{d:`M9 21h1`,key:`15o7lz`}],[`path`,{d:`M9 3h1`,key:`1yesri`}]]),N=e(t(),1);function P(e){let t=e.tokens;if(e.terminal){let n=e.terminal.ansi;return{background:t.bgSolid,foreground:t.text,cursor:e.terminal.cursor,cursorAccent:e.terminal.cursorAccent??t.bgSolid,selectionBackground:e.terminal.selection,black:n[0],red:n[1],green:n[2],yellow:n[3],blue:n[4],magenta:n[5],cyan:n[6],white:n[7],brightBlack:n[8],brightRed:n[9],brightGreen:n[10],brightYellow:n[11],brightBlue:n[12],brightMagenta:n[13],brightCyan:n[14],brightWhite:n[15]}}let n=e.mode===`dark`,r=n?`#1b1f2a`:`#2b2f38`,i=n?`#d7dce8`:`#e9edf5`,a=t.text3,o=n?`#f7f9ff`:`#ffffff`;return{background:t.bgSolid,foreground:t.text,cursor:t.accent,cursorAccent:t.bgSolid,selectionBackground:t.accentWash,black:r,red:t.error,green:t.success,yellow:t.warning,blue:t.accent,magenta:t.accent2,cyan:t.info,white:i,brightBlack:a,brightRed:t.error,brightGreen:t.success,brightYellow:t.warning,brightBlue:t.accent,brightMagenta:t.accent2,brightCyan:t.info,brightWhite:o}}function F(){let e=c.getState();return P(d()??m(e.themeStyle,e.themeMode,e.customThemes,e.customThemeId))}var ee=/[).,;:'"\]}>]+$/,te=/\bhttps?:\/\/[^\s<>"'`]+/g,I=5e3,L=100,R=250,z=3e3,B=`RESIZE:`,ne=`PING`,re=`PONG`,ie=15e3,ae=35e3;function V(e){let{sessionId:t,containerRef:n}=e,r=(0,N.useRef)(null),i=(0,N.useRef)(null),a=(0,N.useRef)(null),o=(0,N.useRef)(null),s=(0,N.useRef)(0),c=(0,N.useRef)(!1),l=(0,N.useRef)(Date.now()),[u,d]=(0,N.useState)(!1),[p,m]=(0,N.useState)(!1),[g,_]=(0,N.useState)(!1),[v,b]=(0,N.useState)(!1),x=(0,N.useRef)(null),S=(0,N.useRef)(null),C=e.tabId?`ppm:terminal-session:${e.tabId}`:null,w=(0,N.useRef)((()=>{if(C)try{return localStorage.getItem(C)??t}catch{}return t})()),T=(0,N.useRef)(0),A=(0,N.useRef)(-1),j=(0,N.useCallback)(e=>{let t=a.current;t?.readyState===WebSocket.OPEN&&t.send(e)},[]),M=(0,N.useCallback)(()=>{x.current&&clearTimeout(x.current),x.current=setTimeout(()=>b(!0),R)},[]),P=(0,N.useCallback)(()=>r.current?.getSelection()??``,[]),V=(0,N.useCallback)(()=>{let e=r.current;if(!e)return``;let t=e.buffer.active,n=T.current,i=t.baseY+t.cursorY,a=[];for(let e=n;e<=i;e++){let n=t.getLine(e);n&&a.push(n.translateToString(!0))}for(;a.length>0&&a[a.length-1].trim()===``;)a.pop();return a.join(`
|
|
2
2
|
`)},[]),H=(0,N.useCallback)(()=>{let e=r.current;return!e||A.current<0?``:e.buffer.active.getLine(A.current)?.translateToString(!0).trimEnd()??``},[]),U=(0,N.useCallback)(()=>{let e=r.current;if(!e)return[];let t=e.buffer.active,n=t.baseY+t.cursorY,i=Math.max(0,n-I),a=[],o=``;for(let e=i;e<=n;e++){let n=t.getLine(e);n&&(o+=n.translateToString(!0),!t.getLine(e+1)?.isWrapped&&(a.push(o),o=``))}o&&a.push(o);let s=new Set,c=[];for(let e of a)for(let t of e.match(te)??[]){let e=t.replace(ee,``);!e||s.has(e)||(s.add(e),c.push(e))}return c.reverse()},[]),W=(0,N.useCallback)(()=>{let e=r.current,t=a.current;e&&t?.readyState===WebSocket.OPEN&&t.send(`${B}${e.cols},${e.rows}`)},[]),G=(0,N.useCallback)(()=>{if(o.current&&clearTimeout(o.current),a.current?.close(),a.current=null,w.current=`new`,C)try{localStorage.removeItem(C)}catch{}s.current=0,_(!1),b(!1),d(!1),m(!1),setTimeout(()=>K(),0)},[]),K=(0,N.useCallback)(()=>{o.current&&=(clearTimeout(o.current),null),a.current&&=(a.current.onclose=null,a.current.close(),null);let t=r.current;if(!t)return;let n=window.location.protocol===`https:`?`wss:`:`ws:`,i=e.projectName??``,u=w.current,f=u===`new`&&e.cwd?`?cwd=${encodeURIComponent(e.cwd)}`:``,p=h(`/ws/project/${encodeURIComponent(i)}/terminal/${u}${f}`),g=`${n}//${window.location.host}${p}`,v=new WebSocket(g);a.current=v,v.onopen=()=>{c.current&&r.current&&r.current.clear(),c.current=!0,l.current=Date.now(),d(!0),m(!1),s.current=0,w.current===`new`&&b(!1),S.current&&clearTimeout(S.current),S.current=setTimeout(()=>b(!0),z),W()},v.onmessage=e=>{if(l.current=Date.now(),typeof e.data==`string`){if(e.data===re)return;if(e.data.startsWith(`{`))try{let n=JSON.parse(e.data);if(n.type){if(n.type===`session`&&n.id&&(w.current=n.id,C))try{localStorage.setItem(C,n.id)}catch{}n.type===`error`&&t.write(`\r\n\x1b[31mError: ${n.message}\x1b[0m\r\n`),n.type===`exited`&&_(!0);return}}catch{}M(),t.write(e.data)}},v.onclose=()=>{d(!1),J()},v.onerror=()=>{v.close()}},[W]),q=(0,N.useCallback)(()=>{if(document.visibilityState!==`visible`)return;let e=a.current;if(!e||e.readyState!==WebSocket.OPEN){K();return}if(Date.now()-l.current>ae){K();return}try{e.send(ne)}catch{K()}},[K]);function J(){let e=Math.min(1e3*2**s.current,3e4);s.current++,m(!0),o.current=setTimeout(()=>{K()},e)}return(0,N.useEffect)(()=>{let e=n.current;if(!e)return;let t=new E({cursorBlink:!0,fontSize:13,scrollback:5e4,fontFamily:`Consolas, 'Cascadia Mono', Menlo, 'DejaVu Sans Mono', 'Courier New', monospace`,theme:F()}),s=new O,c=new D;if(t.loadAddon(s),t.loadAddon(c),t.open(e),!(`ontouchstart`in window||navigator.maxTouchPoints>0))try{let e=new k;e.onContextLoss(()=>e.dispose()),t.loadAddon(e)}catch{}s.fit(),r.current=t,i.current=s,t.onData(e=>{if(e.includes(`\r`)||e.includes(`
|
|
3
|
-
`)){let e=t.buffer.active;A.current=e.baseY+e.cursorY,T.current=A.current+1}let n=a.current;n?.readyState===WebSocket.OPEN&&n.send(e)}),K();let l=setInterval(q,ie),u=e.ownerDocument,d=()=>{u.visibilityState===`visible`&&q()};u.addEventListener(`visibilitychange`,d);let p=null,m=new ResizeObserver(e=>{let t=e[0];!t||t.contentRect.width===0||t.contentRect.height===0||(p&&clearTimeout(p),p=setTimeout(()=>{try{s.fit(),W()}catch{}},L))});m.observe(e);let h=y(e,()=>{try{s.fit(),W()}catch{}}),g=()=>{t.options.theme=F()};window.addEventListener(f,g);let _=()=>window.removeEventListener(f,g);return()=>{_(),h(),p&&clearTimeout(p),m.disconnect(),clearInterval(l),u.removeEventListener(`visibilitychange`,d),o.current&&clearTimeout(o.current),x.current&&clearTimeout(x.current),S.current&&clearTimeout(S.current),a.current?.close(),a.current=null,t.dispose(),r.current=null,i.current=null}},[]),{connected:u,reconnecting:p,exited:g,shellReady:v,sendData:j,getSelection:P,getLastCommandOutput:V,getLastCommand:H,getBufferUrls:U,restart:G}}function H(e,t,n){return new MouseEvent(e,{bubbles:!0,cancelable:!0,view:window,clientX:t.clientX,clientY:t.clientY,screenX:t.screenX,screenY:t.screenY,button:0,buttons:n,detail:1})}function U(e,t){(0,N.useEffect)(()=>{let n=e.current;if(!t||!n)return;let r=n.querySelector(`.xterm`);if(!r)return;let i=e=>{let t=e.touches[0];!t||e.touches.length>1||(e.preventDefault(),e.stopPropagation(),r.dispatchEvent(H(`mousedown`,t,1)))},a=e=>{let t=e.touches[0];t&&(e.preventDefault(),e.stopPropagation(),document.dispatchEvent(H(`mousemove`,t,1)))},o=e=>{let t=e.changedTouches[0];t&&(e.preventDefault(),e.stopPropagation(),document.dispatchEvent(H(`mouseup`,t,0)))},s={capture:!0,passive:!1};return n.addEventListener(`touchstart`,i,s),n.addEventListener(`touchmove`,a,s),n.addEventListener(`touchend`,o,s),n.addEventListener(`touchcancel`,o,s),()=>{n.removeEventListener(`touchstart`,i,s),n.removeEventListener(`touchmove`,a,s),n.removeEventListener(`touchend`,o,s),n.removeEventListener(`touchcancel`,o,s)}},[e,t])}var W=40;function G(e){if(!e||typeof e.checkVisibility==`function`&&!e.checkVisibility({visibilityProperty:!0}))return!1;let t=e.getBoundingClientRect();return t.width<W||t.height<W?!1:t.bottom>0&&t.right>0&&t.top<window.innerHeight&&t.left<window.innerWidth}function K({tabId:e,metadata:t,shellReady:n,sendData:r,focusTerminal:i,containerRef:a}){let o=(0,N.useRef)(null),[s,c]=(0,N.useState)(0),l=(0,N.useCallback)(e=>{o.current=e,c(e=>e+1)},[]),d=t?.pendingCommand;(0,N.useEffect)(()=>{if(!(typeof d!=`string`||!d)&&(l(d),e)){let n={...t??{}};delete n.pendingCommand,u.getState().updateTab(e,{metadata:n})}},[d,e,l]),(0,N.useEffect)(()=>{let e=e=>{let t=e.detail;t?.command&&G(a.current)&&(l(t.command),window.dispatchEvent(new Event(T)))};return window.addEventListener(w,e),()=>window.removeEventListener(w,e)},[a,l]),(0,N.useEffect)(()=>{if(!n)return;let e=o.current;e&&(o.current=null,r(e),i())},[n,s,r,i])}var q=n(),J=[{label:`Tab`,value:` `},{label:`Esc`,value:`\x1B`},{label:`Ctrl`,value:null},{label:`↑`,value:`\x1B[A`},{label:`↓`,value:`\x1B[B`},{label:`←`,value:`\x1B[D`},{label:`→`,value:`\x1B[C`},{label:`^C`,value:``}],Y=`flex items-center justify-center shrink-0 min-w-11 min-h-11 rounded text-xs bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`;function oe({ctrlMode:e,onToggleCtrl:t,selectMode:n,onToggleSelect:r,onKey:a,onCopy:o,onPaste:s,onSendToChat:c,onOpenLinks:u}){return(0,q.jsxs)(`div`,{className:`relative shrink-0 bg-surface border-t border-border`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:[(0,q.jsx)(`button`,{onClick:r,"aria-label":`Select text`,"aria-pressed":n,className:l(Y,n&&`bg-primary text-primary-foreground`),children:(0,q.jsx)(M,{size:16})}),(0,q.jsx)(`button`,{onClick:o,"aria-label":`Copy`,className:Y,children:(0,q.jsx)(i,{size:16})}),(0,q.jsx)(`button`,{onClick:s,"aria-label":`Paste`,className:Y,children:(0,q.jsx)(g,{size:16})}),(0,q.jsx)(`button`,{onClick:u,"aria-label":`Links`,className:Y,children:(0,q.jsx)(v,{size:16})}),(0,q.jsx)(`button`,{onClick:c,"aria-label":`Send to Chat`,className:Y,children:(0,q.jsx)(b,{size:16})}),(0,q.jsx)(`div`,{className:`w-px h-6 shrink-0 bg-border mx-0.5`}),J.map(n=>(0,q.jsx)(`button`,{onClick:()=>n.value===null?t():a(n.value),className:l(Y,`font-mono`,n.value===null&&e&&`bg-primary text-primary-foreground`),children:n.label},n.label)),(0,q.jsx)(`div`,{className:`w-6 shrink-0`,"aria-hidden":!0})]}),(0,q.jsx)(`div`,{className:`pointer-events-none absolute inset-y-0 right-0 w-8 bg-gradient-to-l from-surface to-transparent`,"aria-hidden":!0})]})}var se=new Set([`localhost`,`::1`]);function X(e){let t=e.replace(/^\[|\]$/g,``).toLowerCase();return se.has(t)?!0:/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(t)}function Z(e){let t;try{t=new URL(e)}catch{return null}let n=t.searchParams.get(`redirect_uri`)??t.searchParams.get(`redirectUri`);if(!n)return null;try{let e=new URL(n);return X(e.hostname)?e.port||(e.protocol===`https:`?`443`:`80`):null}catch{return null}}function Q(e){try{let t=new URL(e.trim());return(t.protocol===`http:`||t.protocol===`https:`)&&X(t.hostname)}catch{return!1}}function ce({onDone:e}){let[t,n]=(0,N.useState)(``),[r,i]=(0,N.useState)(!1),c=t.trim(),l=!r&&Q(c),u=async()=>{i(!0);try{await o.post(`/api/loopback/callback`,{url:c}),s.success(`Sent to the waiting command`,{duration:2e3}),n(``),e()}catch(e){s.error(e.message,{duration:4e3})}finally{i(!1)}};return(0,q.jsxs)(`div`,{className:`shrink-0 border-t border-border px-3 py-3`,children:[(0,q.jsx)(`p`,{className:`pb-2 text-[11px] leading-snug text-text-secondary`,children:`Finished signing in and landed on a page that would not load? Paste that address here — the machine will deliver it to the command still waiting.`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`input`,{value:t,onChange:e=>n(e.target.value),inputMode:`url`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`http://127.0.0.1:54132/oauth/callback?code=…`,"aria-label":`Callback address`,className:`h-11 min-w-0 flex-1 rounded-lg border border-border bg-surface px-3 font-mono text-xs text-foreground placeholder:text-text-subtle`}),(0,q.jsx)(`button`,{onClick:()=>void u(),disabled:!l,"aria-label":`Finish login`,className:`flex size-11 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground disabled:opacity-40 active:opacity-80 transition-opacity`,children:r?(0,q.jsx)(a,{className:`size-4 animate-spin`}):(0,q.jsx)(j,{className:`size-4`})})]}),c!==``&&!Q(c)&&(0,q.jsx)(`p`,{className:`pt-1.5 text-[11px] text-error`,children:`Needs to be the http://127.0.0.1:… address the sign-in redirected to.`})]})}function le({open:e,onClose:t,urls:n}){let r=async e=>{let n=await x(e);s[n?`success`:`error`](n?`Link copied`:`Could not copy link`,{duration:1500}),t()},a=[...new Set(n.map(Z).filter(e=>!!e))];return(0,q.jsxs)(p,{open:e,onClose:t,zIndex:70,className:`flex flex-col max-h-[70vh]`,children:[(0,q.jsx)(`div`,{className:`shrink-0 px-4 pb-2 text-xs font-medium text-text-secondary`,children:n.length>0?`Links in terminal (${n.length})`:`Links in terminal`}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-2 pb-2`,children:n.length===0?(0,q.jsxs)(`div`,{className:`flex flex-col items-center gap-2 px-4 py-8 text-center text-sm text-text-secondary`,children:[(0,q.jsx)(A,{className:`size-5 text-text-subtle`}),`No links found in the visible scrollback.`]}):n.map(e=>{let n=Z(e);return(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{className:`flex items-stretch gap-1`,children:[(0,q.jsxs)(`a`,{href:e,target:`_blank`,rel:`noreferrer noopener`,onClick:t,className:`flex min-h-11 flex-1 min-w-0 items-center gap-2 rounded-lg px-3 py-2 text-sm text-foreground active:bg-accent transition-colors`,children:[(0,q.jsx)(S,{className:`size-4 shrink-0 text-text-subtle`}),(0,q.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-left font-mono text-xs`,children:e})]}),(0,q.jsx)(`button`,{onClick:()=>void r(e),"aria-label":`Copy ${e}`,className:`flex size-11 shrink-0 items-center justify-center rounded-lg text-text-secondary active:bg-accent transition-colors`,children:(0,q.jsx)(i,{className:`size-4`})})]}),n&&(0,q.jsxs)(`p`,{className:`px-3 pb-2 text-[11px] leading-snug text-text-secondary`,children:[`Signing in here sends you back to port `,n,` `,(0,q.jsx)(`strong`,{children:`on the machine`}),`, not this device — so the terminal keeps waiting. Afterwards, paste the address bar below to finish it.`]})]},e)})}),a.length>0&&(0,q.jsx)(ce,{onDone:t})]})}var $=(0,N.memo)(function({metadata:e,tabId:t}){let n=e?.sessionId??`new`,r=e?.projectName,i=e?.cwd,a=(0,N.useRef)(null),{connected:o,reconnecting:c,exited:u,shellReady:d,sendData:f,getSelection:p,getLastCommandOutput:m,getLastCommand:h,getBufferUrls:g,restart:v}=V({sessionId:n,projectName:r,cwd:i,containerRef:a,tabId:t}),[y,S]=(0,N.useState)(!1),[w,T]=(0,N.useState)(!1),[E,D]=(0,N.useState)(!1);U(a,w);let O=(0,N.useCallback)(()=>{(a.current?.querySelector(`.xterm-helper-textarea`))?.focus()},[]);K({tabId:t,metadata:e,shellReady:d,sendData:f,focusTerminal:O,containerRef:a}),(0,N.useEffect)(()=>{let e=a.current;if(!e||w)return;let t=()=>O();return e.addEventListener(`touchend`,t,{capture:!0}),()=>e.removeEventListener(`touchend`,t,{capture:!0})},[O,w]);let k=(0,N.useCallback)(e=>{if(O(),y&&e.length===1){let t=e.toLowerCase().charCodeAt(0)-96;t>=1&&t<=26&&f(String.fromCharCode(t)),S(!1);return}f(e)},[y,f,O]),A=(0,N.useCallback)(async()=>{let e=p(),t=e||m();if(!t.trim()){s(`Nothing to copy`,{duration:1500});return}let n=await x(t);s[n?`success`:`error`](n?e?`Selection copied`:`Last output copied`:`Could not copy`,{duration:1500})},[p,m]),j=(0,N.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&(f(e),O())}catch{s.error(`Clipboard blocked — paste with the keyboard instead`,{duration:2500})}},[f,O]),M=(0,N.useCallback)(()=>{let e=p(),t=e||m();if(!t.trim())return;let n=e?``:h();C({text:"```bash\n"+(n?`${n}\n${t}`:t)+"\n```",label:e?`Terminal selection`:`Terminal output`,projectName:r}),s.success(`Sent to chat`,{duration:1500})},[p,m,h,r]),P=typeof window<`u`&&`ontouchstart`in window;return(0,q.jsxs)(`div`,{className:`flex flex-col h-full min-h-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1 bg-surface border-b border-border text-xs`,children:[(0,q.jsx)(`span`,{className:l(`size-2 rounded-full`,u?`bg-error`:o?`bg-success`:c?`bg-warning`:`bg-error`)}),(0,q.jsx)(`span`,{className:`text-text-secondary`,children:u?`Process exited`:o?`Connected`:c?`Reconnecting...`:`Disconnected`}),u&&(0,q.jsxs)(`button`,{onClick:v,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors`,children:[(0,q.jsx)(_,{size:10}),`Restart`]}),(0,q.jsxs)(`button`,{onClick:M,title:`Send to Chat`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors ml-auto`,children:[(0,q.jsx)(b,{size:10}),`Chat`]}),(0,q.jsx)(`span`,{className:`text-text-subtle font-mono`,children:n})]}),(0,q.jsx)(`div`,{ref:a,onClick:w?void 0:O,className:l(`flex-1 min-h-0 bg-background p-1`,w&&`touch-none`)}),P&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(oe,{ctrlMode:y,onToggleCtrl:()=>S(!y),selectMode:w,onToggleSelect:()=>T(!w),onKey:k,onCopy:()=>void A(),onPaste:()=>void j(),onSendToChat:M,onOpenLinks:()=>D(!0)}),(0,q.jsx)(le,{open:E,onClose:()=>D(!1),urls:E?g():[]})]})]})});export{$ as TerminalTab};
|
|
3
|
+
`)){let e=t.buffer.active;A.current=e.baseY+e.cursorY,T.current=A.current+1}let n=a.current;n?.readyState===WebSocket.OPEN&&n.send(e)}),K();let l=setInterval(q,ie),u=e.ownerDocument,d=()=>{u.visibilityState===`visible`&&q()};u.addEventListener(`visibilitychange`,d);let p=null,m=new ResizeObserver(e=>{let t=e[0];!t||t.contentRect.width===0||t.contentRect.height===0||(p&&clearTimeout(p),p=setTimeout(()=>{try{s.fit(),W()}catch{}},L))});m.observe(e);let h=y(e,()=>{try{s.fit(),W()}catch{}}),g=()=>{t.options.theme=F()};window.addEventListener(f,g);let _=()=>window.removeEventListener(f,g);return()=>{_(),h(),p&&clearTimeout(p),m.disconnect(),clearInterval(l),u.removeEventListener(`visibilitychange`,d),o.current&&clearTimeout(o.current),x.current&&clearTimeout(x.current),S.current&&clearTimeout(S.current),a.current?.close(),a.current=null,t.dispose(),r.current=null,i.current=null}},[]),{connected:u,reconnecting:p,exited:g,shellReady:v,sendData:j,getSelection:P,getLastCommandOutput:V,getLastCommand:H,getBufferUrls:U,restart:G}}function H(e,t,n){return new MouseEvent(e,{bubbles:!0,cancelable:!0,view:window,clientX:t.clientX,clientY:t.clientY,screenX:t.screenX,screenY:t.screenY,button:0,buttons:n,detail:1})}function U(e,t){(0,N.useEffect)(()=>{let n=e.current;if(!t||!n)return;let r=n.querySelector(`.xterm`);if(!r)return;let i=e=>{let t=e.touches[0];!t||e.touches.length>1||(e.preventDefault(),e.stopPropagation(),r.dispatchEvent(H(`mousedown`,t,1)))},a=e=>{let t=e.touches[0];t&&(e.preventDefault(),e.stopPropagation(),document.dispatchEvent(H(`mousemove`,t,1)))},o=e=>{let t=e.changedTouches[0];t&&(e.preventDefault(),e.stopPropagation(),document.dispatchEvent(H(`mouseup`,t,0)))},s={capture:!0,passive:!1};return n.addEventListener(`touchstart`,i,s),n.addEventListener(`touchmove`,a,s),n.addEventListener(`touchend`,o,s),n.addEventListener(`touchcancel`,o,s),()=>{n.removeEventListener(`touchstart`,i,s),n.removeEventListener(`touchmove`,a,s),n.removeEventListener(`touchend`,o,s),n.removeEventListener(`touchcancel`,o,s)}},[e,t])}var W=40;function G(e){if(!e||typeof e.checkVisibility==`function`&&!e.checkVisibility({visibilityProperty:!0}))return!1;let t=e.getBoundingClientRect();return t.width<W||t.height<W?!1:t.bottom>0&&t.right>0&&t.top<window.innerHeight&&t.left<window.innerWidth}function K({tabId:e,metadata:t,shellReady:n,sendData:r,focusTerminal:i,containerRef:a}){let o=(0,N.useRef)(null),[s,c]=(0,N.useState)(0),l=(0,N.useCallback)(e=>{o.current=e,c(e=>e+1)},[]),d=t?.pendingCommand;(0,N.useEffect)(()=>{if(!(typeof d!=`string`||!d)&&(l(d),e)){let n={...t??{}};delete n.pendingCommand,u.getState().updateTab(e,{metadata:n})}},[d,e,l]),(0,N.useEffect)(()=>{let e=e=>{let t=e.detail;t?.command&&G(a.current)&&(l(t.command),window.dispatchEvent(new Event(T)))};return window.addEventListener(w,e),()=>window.removeEventListener(w,e)},[a,l]),(0,N.useEffect)(()=>{if(!n)return;let e=o.current;e&&(o.current=null,r(e),i())},[n,s,r,i])}var q=n(),J=[{label:`Tab`,value:` `},{label:`Esc`,value:`\x1B`},{label:`Ctrl`,value:null},{label:`↑`,value:`\x1B[A`},{label:`↓`,value:`\x1B[B`},{label:`←`,value:`\x1B[D`},{label:`→`,value:`\x1B[C`},{label:`^C`,value:``}],Y=`flex items-center justify-center shrink-0 min-w-11 min-h-11 rounded text-xs bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`;function oe({ctrlMode:e,onToggleCtrl:t,selectMode:n,onToggleSelect:r,onKey:a,onCopy:o,onPaste:s,onSendToChat:c,onOpenLinks:u}){return(0,q.jsxs)(`div`,{className:`relative shrink-0 bg-surface border-t border-border`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:[(0,q.jsx)(`button`,{onClick:r,"aria-label":`Select text`,"aria-pressed":n,className:l(Y,n&&`bg-primary text-primary-foreground`),children:(0,q.jsx)(M,{size:16})}),(0,q.jsx)(`button`,{onClick:o,"aria-label":`Copy`,className:Y,children:(0,q.jsx)(i,{size:16})}),(0,q.jsx)(`button`,{onClick:s,"aria-label":`Paste`,className:Y,children:(0,q.jsx)(v,{size:16})}),(0,q.jsx)(`button`,{onClick:u,"aria-label":`Links`,className:Y,children:(0,q.jsx)(x,{size:16})}),(0,q.jsx)(`button`,{onClick:c,"aria-label":`Send to Chat`,className:Y,children:(0,q.jsx)(b,{size:16})}),(0,q.jsx)(`div`,{className:`w-px h-6 shrink-0 bg-border mx-0.5`}),J.map(n=>(0,q.jsx)(`button`,{onClick:()=>n.value===null?t():a(n.value),className:l(Y,`font-mono`,n.value===null&&e&&`bg-primary text-primary-foreground`),children:n.label},n.label)),(0,q.jsx)(`div`,{className:`w-6 shrink-0`,"aria-hidden":!0})]}),(0,q.jsx)(`div`,{className:`pointer-events-none absolute inset-y-0 right-0 w-8 bg-gradient-to-l from-surface to-transparent`,"aria-hidden":!0})]})}var se=new Set([`localhost`,`::1`]);function X(e){let t=e.replace(/^\[|\]$/g,``).toLowerCase();return se.has(t)?!0:/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(t)}function Z(e){let t;try{t=new URL(e)}catch{return null}let n=t.searchParams.get(`redirect_uri`)??t.searchParams.get(`redirectUri`);if(!n)return null;try{let e=new URL(n);return X(e.hostname)?e.port||(e.protocol===`https:`?`443`:`80`):null}catch{return null}}function Q(e){try{let t=new URL(e.trim());return(t.protocol===`http:`||t.protocol===`https:`)&&X(t.hostname)}catch{return!1}}function ce({onDone:e}){let[t,n]=(0,N.useState)(``),[r,i]=(0,N.useState)(!1),c=t.trim(),l=!r&&Q(c),u=async()=>{i(!0);try{await o.post(`/api/loopback/callback`,{url:c}),s.success(`Sent to the waiting command`,{duration:2e3}),n(``),e()}catch(e){s.error(e.message,{duration:4e3})}finally{i(!1)}};return(0,q.jsxs)(`div`,{className:`shrink-0 border-t border-border px-3 py-3`,children:[(0,q.jsx)(`p`,{className:`pb-2 text-[11px] leading-snug text-text-secondary`,children:`Finished signing in and landed on a page that would not load? Paste that address here — the machine will deliver it to the command still waiting.`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`input`,{value:t,onChange:e=>n(e.target.value),inputMode:`url`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`http://127.0.0.1:54132/oauth/callback?code=…`,"aria-label":`Callback address`,className:`h-11 min-w-0 flex-1 rounded-lg border border-border bg-surface px-3 font-mono text-xs text-foreground placeholder:text-text-subtle`}),(0,q.jsx)(`button`,{onClick:()=>void u(),disabled:!l,"aria-label":`Finish login`,className:`flex size-11 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground disabled:opacity-40 active:opacity-80 transition-opacity`,children:r?(0,q.jsx)(a,{className:`size-4 animate-spin`}):(0,q.jsx)(j,{className:`size-4`})})]}),c!==``&&!Q(c)&&(0,q.jsx)(`p`,{className:`pt-1.5 text-[11px] text-error`,children:`Needs to be the http://127.0.0.1:… address the sign-in redirected to.`})]})}function le({open:e,onClose:t,urls:n}){let r=async e=>{let n=await S(e);s[n?`success`:`error`](n?`Link copied`:`Could not copy link`,{duration:1500}),t()},a=[...new Set(n.map(Z).filter(e=>!!e))];return(0,q.jsxs)(p,{open:e,onClose:t,zIndex:70,className:`flex flex-col max-h-[70vh]`,children:[(0,q.jsx)(`div`,{className:`shrink-0 px-4 pb-2 text-xs font-medium text-text-secondary`,children:n.length>0?`Links in terminal (${n.length})`:`Links in terminal`}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-2 pb-2`,children:n.length===0?(0,q.jsxs)(`div`,{className:`flex flex-col items-center gap-2 px-4 py-8 text-center text-sm text-text-secondary`,children:[(0,q.jsx)(A,{className:`size-5 text-text-subtle`}),`No links found in the visible scrollback.`]}):n.map(e=>{let n=Z(e);return(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{className:`flex items-stretch gap-1`,children:[(0,q.jsxs)(`a`,{href:e,target:`_blank`,rel:`noreferrer noopener`,onClick:t,className:`flex min-h-11 flex-1 min-w-0 items-center gap-2 rounded-lg px-3 py-2 text-sm text-foreground active:bg-accent transition-colors`,children:[(0,q.jsx)(g,{className:`size-4 shrink-0 text-text-subtle`}),(0,q.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-left font-mono text-xs`,children:e})]}),(0,q.jsx)(`button`,{onClick:()=>void r(e),"aria-label":`Copy ${e}`,className:`flex size-11 shrink-0 items-center justify-center rounded-lg text-text-secondary active:bg-accent transition-colors`,children:(0,q.jsx)(i,{className:`size-4`})})]}),n&&(0,q.jsxs)(`p`,{className:`px-3 pb-2 text-[11px] leading-snug text-text-secondary`,children:[`Signing in here sends you back to port `,n,` `,(0,q.jsx)(`strong`,{children:`on the machine`}),`, not this device — so the terminal keeps waiting. Afterwards, paste the address bar below to finish it.`]})]},e)})}),a.length>0&&(0,q.jsx)(ce,{onDone:t})]})}var $=(0,N.memo)(function({metadata:e,tabId:t}){let n=e?.sessionId??`new`,r=e?.projectName,i=e?.cwd,a=(0,N.useRef)(null),{connected:o,reconnecting:c,exited:u,shellReady:d,sendData:f,getSelection:p,getLastCommandOutput:m,getLastCommand:h,getBufferUrls:g,restart:v}=V({sessionId:n,projectName:r,cwd:i,containerRef:a,tabId:t}),[y,x]=(0,N.useState)(!1),[w,T]=(0,N.useState)(!1),[E,D]=(0,N.useState)(!1);U(a,w);let O=(0,N.useCallback)(()=>{(a.current?.querySelector(`.xterm-helper-textarea`))?.focus()},[]);K({tabId:t,metadata:e,shellReady:d,sendData:f,focusTerminal:O,containerRef:a}),(0,N.useEffect)(()=>{let e=a.current;if(!e||w)return;let t=()=>O();return e.addEventListener(`touchend`,t,{capture:!0}),()=>e.removeEventListener(`touchend`,t,{capture:!0})},[O,w]);let k=(0,N.useCallback)(e=>{if(O(),y&&e.length===1){let t=e.toLowerCase().charCodeAt(0)-96;t>=1&&t<=26&&f(String.fromCharCode(t)),x(!1);return}f(e)},[y,f,O]),A=(0,N.useCallback)(async()=>{let e=p(),t=e||m();if(!t.trim()){s(`Nothing to copy`,{duration:1500});return}let n=await S(t);s[n?`success`:`error`](n?e?`Selection copied`:`Last output copied`:`Could not copy`,{duration:1500})},[p,m]),j=(0,N.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&(f(e),O())}catch{s.error(`Clipboard blocked — paste with the keyboard instead`,{duration:2500})}},[f,O]),M=(0,N.useCallback)(()=>{let e=p(),t=e||m();if(!t.trim())return;let n=e?``:h();C({text:"```bash\n"+(n?`${n}\n${t}`:t)+"\n```",label:e?`Terminal selection`:`Terminal output`,projectName:r}),s.success(`Sent to chat`,{duration:1500})},[p,m,h,r]),P=typeof window<`u`&&`ontouchstart`in window;return(0,q.jsxs)(`div`,{className:`flex flex-col h-full min-h-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1 bg-surface border-b border-border text-xs`,children:[(0,q.jsx)(`span`,{className:l(`size-2 rounded-full`,u?`bg-error`:o?`bg-success`:c?`bg-warning`:`bg-error`)}),(0,q.jsx)(`span`,{className:`text-text-secondary`,children:u?`Process exited`:o?`Connected`:c?`Reconnecting...`:`Disconnected`}),u&&(0,q.jsxs)(`button`,{onClick:v,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors`,children:[(0,q.jsx)(_,{size:10}),`Restart`]}),(0,q.jsxs)(`button`,{onClick:M,title:`Send to Chat`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors ml-auto`,children:[(0,q.jsx)(b,{size:10}),`Chat`]}),(0,q.jsx)(`span`,{className:`text-text-subtle font-mono`,children:n})]}),(0,q.jsx)(`div`,{ref:a,onClick:w?void 0:O,className:l(`flex-1 min-h-0 bg-background p-1`,w&&`touch-none`)}),P&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(oe,{ctrlMode:y,onToggleCtrl:()=>x(!y),selectMode:w,onToggleSelect:()=>T(!w),onKey:k,onCopy:()=>void A(),onPaste:()=>void j(),onSendToChat:M,onOpenLinks:()=>D(!0)}),(0,q.jsx)(le,{open:E,onClose:()=>D(!1),urls:E?g():[]})]})]})});export{$ as TerminalTab};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-
|
|
2
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{n as i,t as a}from"./circle-question-mark-CzR7YRc-.js";import{t as o}from"./bot-D6sx11y0.js";import{t as s}from"./chevron-down-Dp0rpHb8.js";import{t as c}from"./chevron-right-De-Wz5Lz.js";import{t as l}from"./clock-C1CQUQPZ.js";import{t as u}from"./code-DJgYrFzm.js";import{n as d,t as f}from"./sparkles-Dh-_J2Rd.js";import{t as p}from"./loader-circle-DPMrnLQ2.js";import{t as m}from"./send-Bb0jtcR6.js";import{q as h}from"./vendor-mermaid-BKWscKt0.js";import{t as g}from"./utils-C9OjCrou.js";import{t as _}from"./tab-store-PZsP5ZwG.js";import{An as v,
|
|
3
|
-
`).map(e=>e.trim()).find(e=>e.length>0)??``,protocol:r??void 0,kind:o,notifyWhenIdle:e.notify_when_idle===!0,extras:c}}function W(e){if(!e)return null;let t;try{t=JSON.parse(e)}catch{return null}if(Array.isArray(t)){let e=V(t.find(e=>e&&typeof e==`object`&&e.type===`text`)?.text);if(!e)return null;try{t=JSON.parse(e)}catch{return null}}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;if(typeof n.success!=`boolean`)return null;let r=n.pin&&typeof n.pin==`object`?n.pin:null;return{ok:n.success,detail:V(n.message)||V(n.error)||void 0,peer:r&&V(r.name)||void 0,ref:r&&V(r.ref)||void 0}}function ae({kind:e}){if(e===`message`)return null;let t=B[e];return(0,R.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] ${t?.className??`bg-panel-2 text-text-3`}`,children:t?.label??e})}function oe({name:e,input:t}){let n=U(t),r=n.summary||n.firstLine||(n.protocol?n.kind:``),a=r.length>72?`${r.slice(0,72)}…`:r;return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[(0,R.jsx)(i,{className:`size-3 inline`}),` `,n.to||`unknown`,a?` · ${a}`:``]}),n.notifyWhenIdle&&(0,R.jsx)(l,{className:`size-3 inline ml-1 text-text-3`})]})}function se({input:e}){let t=U(e);return(0,R.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,R.jsx)(`span`,{className:`text-text-subtle`,children:`To`}),(0,R.jsx)(`span`,{className:`font-medium text-text-primary`,children:t.to||`unknown`}),(0,R.jsx)(ae,{kind:t.kind}),t.notifyWhenIdle&&(0,R.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:[(0,R.jsx)(l,{className:`size-3`}),` notify when idle`]})]}),!!t.text&&(0,R.jsx)(z,{content:t.text,maxHeight:`max-h-40`}),t.protocol&&(0,R.jsxs)(`div`,{className:`space-y-0.5 text-text-secondary`,children:[t.protocol.approve!=null&&(0,R.jsxs)(`p`,{children:[t.protocol.approve?`Approved`:`Rejected`,t.protocol.request_id?(0,R.jsxs)(`span`,{className:`text-text-subtle font-mono`,children:[` · `,t.protocol.request_id]}):null]}),!!t.protocol.reason&&(0,R.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.reason}),!!t.protocol.feedback&&(0,R.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.feedback})]}),t.extras.length>0&&(0,R.jsx)(`div`,{className:`space-y-0.5`,children:t.extras.map(e=>(0,R.jsxs)(`p`,{className:`text-text-subtle`,children:[(0,R.jsx)(`span`,{className:`font-mono`,children:e.key}),`: `,e.value]},e.key))})]})}function ce({output:e}){let[t,n]=(0,L.useState)(!1),r=W(e);return r?(0,R.jsxs)(`div`,{className:`border-t border-border pt-1.5 space-y-1`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[r.ok?(0,R.jsx)(E,{className:`size-3 text-success shrink-0`}):(0,R.jsx)(A,{className:`size-3 text-error shrink-0`}),(0,R.jsx)(`span`,{className:r.ok?`text-success`:`text-error`,children:r.ok?`Delivered`:`Not delivered`}),!!r.detail&&(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`· `,r.detail]}),!!r.ref&&(0,R.jsxs)(`span`,{className:`text-text-3 font-mono text-[10px]`,children:[`[`,r.ref,`]`]})]}),(0,R.jsxs)(`button`,{type:`button`,onClick:()=>n(!t),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,R.jsx)(u,{className:`size-3`}),t?`Hide`:`Show`,` raw`]}),t&&(0,R.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono max-h-40 whitespace-pre-wrap break-all text-[10px]`,children:e})]}):null}var le=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.bmp`,`.avif`,`.ico`]);function ue(e){let t=e.lastIndexOf(`.`);return t===-1?!1:le.has(e.slice(t).toLowerCase())}var de=/^\[image(?: · [\d.]+(?:B|KB|MB))?\]$/;function fe(e){if(!e.startsWith(`[`))return!1;let t;try{t=JSON.parse(e)}catch{return!1}return Array.isArray(t)?t.some(e=>{let t=e;return t?.type===`text`&&typeof t.text==`string`&&de.test(t.text)}):!1}var pe=`Async agent launched successfully`;function me(e){return!!e&&e.includes(pe)}var he=`text-[var(--img-meta-label)] @max-[470px]:hidden`,ge=[`60%`,`45%`,`80%`];function _e({aspect:e,actions:t}){return(0,R.jsxs)(`div`,{className:`grid grid-cols-[132px_1fr] items-start gap-[14px] overflow-hidden rounded-lg border border-border bg-panel p-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px] @max-[470px]:p-[11px]`,children:[(0,R.jsx)(`div`,{className:`img-skeleton rounded-lg`,style:{aspectRatio:e}}),(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,R.jsx)(`div`,{className:`img-skeleton h-[13px] w-2/5 rounded @max-[470px]:hidden`}),(0,R.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:[`dimensions`,`size`,`path`].map((e,t)=>(0,R.jsxs)(L.Fragment,{children:[(0,R.jsx)(`dt`,{className:he,children:e}),(0,R.jsx)(`dd`,{className:`flex items-center`,children:(0,R.jsx)(`span`,{className:`img-skeleton h-[11px] rounded`,style:{width:ge[t]}})})]},e))}),t]})]})}function ve({code:e,onRetry:t}){return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-panel px-2.5 py-2 font-mono text-[12px] text-text-2`,children:[(0,R.jsx)(y,{className:`size-3 shrink-0`}),(0,R.jsxs)(`span`,{className:`truncate`,children:[`preview unavailable`,e?` · ${e}`:``]}),(0,R.jsx)(`button`,{type:`button`,onClick:t,className:`ml-auto shrink-0 text-accent`,children:`retry`})]})}var ye=.62;function be(e,t){let n=e.w/e.h;if(n>2.4)return{variant:`band`,aspect:n,fit:`contain`};let r=Math.max(ye,n),i=t/r;return e.w<t&&e.h<i?{variant:`split`,aspect:r,fit:`native`}:{variant:`split`,aspect:r,fit:n<.62?`contain`:`cover`}}function xe(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${Math.round(e/1024)} KB`:`${e} B`}function Se(e,t){let n=`${e.w} × ${e.h} px`;return t===`native`?`${n} · shown 1:1`:n}var G=new Map;function Ce(e){return G.get(e)}function we(e,t){G.set(e,t)}var Te=4/5,K=`text-[var(--img-meta-label)] @max-[470px]:hidden`,q=`truncate text-text @max-[470px]:text-text-2`,J=`h-[30px] @max-[470px]:h-[36px] shrink-0 rounded-[7px] px-[9px] font-mono text-[11.5px] text-text-2 bg-[var(--img-ghost)] border border-[var(--img-ghost-border)] backdrop-blur-[6px] transition-colors can-hover:hover:bg-[var(--img-ghost-hover)] can-hover:hover:border-[var(--img-ghost-hover-border)] can-hover:hover:text-text`;function Ee({filePath:e,projectName:t}){let[n,r]=(0,L.useState)(0),{blobUrl:i,blob:a,error:o,errorCode:s}=ee(e,t,void 0,n),[c,l]=(0,L.useState)(()=>Ce(e)),[u,d]=(0,L.useState)(!1),[f,p]=(0,L.useState)(!1),m=w(e=>e.open),{openTab:h}=_(x(e=>({openTab:e.openTab}))),v=g(e);(0,L.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>p(!1),1200);return()=>clearTimeout(e)},[f]);let y=t=>{let n={w:t.naturalWidth,h:t.naturalHeight};if(!n.w||!n.h)return d(!0);we(e,n),l(n)},b=()=>{d(!1),r(e=>e+1)};if(o||u)return(0,R.jsx)(`div`,{className:`border-t border-border pt-1.5`,children:(0,R.jsx)(ve,{code:u?void 0:s??void 0,onRetry:b})});let S=c?be(c,132):null,C=S?.aspect??Te,E=(0,R.jsxs)(`div`,{className:`flex flex-wrap gap-[6px]`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:D,className:J,children:[(0,R.jsx)(`span`,{className:`@max-[470px]:hidden`,children:`open in editor`}),(0,R.jsx)(`span`,{className:`hidden @max-[470px]:inline`,children:`open`})]}),(0,R.jsx)(`button`,{type:`button`,onClick:A,className:J,children:f?`copied`:`copy path`}),(0,R.jsx)(`button`,{type:`button`,onClick:j,className:J,children:`full size`})]});function D(){t&&h({type:`editor`,title:v,metadata:{filePath:e,projectName:t},projectId:t,closable:!0})}function A(){T(e).then(()=>p(!0))}function j(e){i&&m(i,v,O(e.currentTarget))}if(!i||!S||!c)return(0,R.jsxs)(`div`,{className:`@container border-t border-border pt-1.5`,children:[i&&(0,R.jsx)(`img`,{src:i,alt:``,className:`hidden`,onLoad:e=>y(e.currentTarget),onError:()=>d(!0)}),(0,R.jsx)(_e,{aspect:C,actions:E})]});let M=(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`dt`,{className:K,children:`dimensions`}),(0,R.jsx)(`dd`,{className:q,children:Se(c,S.fit)}),a&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`dt`,{className:K,children:`size`}),(0,R.jsxs)(`dd`,{className:q,children:[xe(a.size),a.type?` · ${a.type}`:``]})]}),(0,R.jsx)(`dt`,{className:K,children:`path`}),(0,R.jsx)(`dd`,{dir:`rtl`,className:`${q} text-left`,children:e})]}),N=(0,R.jsx)(`img`,{src:i,alt:v,[k]:``,onLoad:e=>y(e.currentTarget),onError:()=>d(!0),className:S.fit===`cover`?`size-full object-cover`:S.fit===`contain`?`size-full object-contain`:`max-h-full max-w-full`});return(0,R.jsx)(`div`,{className:`@container border-t border-border pt-1.5`,children:(0,R.jsxs)(`div`,{className:`relative overflow-hidden rounded-lg border border-border p-[14px] @max-[470px]:p-[11px]`,children:[(0,R.jsx)(`img`,{"aria-hidden":`true`,alt:``,src:i,className:`absolute inset-0 size-full object-cover`,style:{filter:`var(--img-backdrop)`,transform:`scale(1.3)`}}),(0,R.jsx)(`div`,{className:`absolute inset-0`,style:{background:`var(--img-veil)`}}),S.variant===`band`?(0,R.jsxs)(`div`,{className:`relative grid gap-[11px]`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:j,title:`Open ${v}`,className:`img-checkerboard w-full cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)]`,style:{aspectRatio:S.aspect},children:N}),(0,R.jsx)(`dl`,{className:`grid grid-cols-[auto_auto_1fr] gap-x-[18px] font-mono text-[11.5px] [&_dt]:hidden`,children:M}),E]}):(0,R.jsxs)(`div`,{className:`relative grid grid-cols-[132px_1fr] items-start gap-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px]`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:j,title:`Open ${v}`,className:`cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)] bg-[var(--img-plate)] shadow-[var(--img-plate-shadow)] ${S.fit===`cover`?``:`img-checkerboard flex items-center justify-center`}`,style:{aspectRatio:S.aspect},children:N}),(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,R.jsx)(`p`,{className:`truncate text-[13px] font-semibold text-text @max-[470px]:hidden`,children:v}),(0,R.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:M}),E]})]})]})})}function Y(e,t){if(e!==`Agent`&&e!==`Task`)return null;let n=t.name;return typeof n==`string`&&n.trim()?n.trim():null}function De(e,t,n=!1){if(t&&(e===`Bash`||e===`PowerShell`))return{Icon:b,cls:`bg-error/15 text-error`};if(n)return{Icon:v,cls:`bg-accent-2/15 text-accent-2`};switch(e){case`Read`:case`Glob`:case`LS`:return{Icon:P,cls:`bg-accent-wash text-primary`};case`Grep`:case`Search`:case`WebSearch`:case`ToolSearch`:return{Icon:S,cls:`bg-accent-wash text-primary`};case`WebFetch`:case`Fetch`:return{Icon:C,cls:`bg-info/15 text-info`};case`Edit`:case`MultiEdit`:case`NotebookEdit`:return{Icon:M,cls:`bg-accent-2/15 text-accent-2`};case`Write`:return{Icon:N,cls:`bg-success/15 text-success`};case`Bash`:case`PowerShell`:return{Icon:b,cls:`bg-panel-2 text-text-2`};case`TodoWrite`:return{Icon:te,cls:`bg-warning/15 text-warning`};case`Task`:case`Agent`:return{Icon:o,cls:`bg-accent-wash text-primary`};case`SendMessage`:return{Icon:m,cls:`bg-info/15 text-info`};case`AskUserQuestion`:return{Icon:a,cls:`bg-accent-wash text-primary`};case`ExitPlanMode`:return{Icon:j,cls:`bg-accent-wash text-primary`};case`Skill`:return{Icon:f,cls:`bg-accent-2/15 text-accent-2`};case`ImageGen`:return{Icon:F,cls:`bg-accent-2/15 text-accent-2`};default:return{Icon:u,cls:`bg-panel-2 text-text-2`}}}function Oe(e){let t=e.type===`approval_request`;return{toolName:e.type===`tool_use`?e.tool:t?e.tool??`Tool`:`Tool`,input:e.type===`tool_use`?e.input:t?e.input??{}:{}}}var ke=new Set([`Read`,`ImageGen`]);function X(e){if(e.type!==`tool_use`||!ke.has(e.tool))return null;let t=e.input?.file_path;return typeof t!=`string`||!/^(\/|[A-Za-z]:[/\\])/.test(t)?null:ue(t)?t:null}function Z({tool:e,result:t,completed:n,projectName:r,bashPartialOutput:i}){let[a,o]=(0,L.useState)(()=>{let n=(e.type,e.tool),r=t?.type===`tool_result`&&!!t.isError;return(n===`Edit`||n===`MultiEdit`)&&!r?!0:!!X(e)});if(e.type===`error`)return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 rounded bg-error/10 border border-error/20 px-2 py-1.5 text-xs text-error`,children:[(0,R.jsx)(y,{className:`size-3`}),(0,R.jsx)(`span`,{children:e.message})]});let{toolName:l,input:u}=Oe(e),d=t?.type===`tool_result`,f=d&&!!t.isError,m=l===`AskUserQuestion`&&!!u?.answers,h=e.type===`approval_request`&&e.approved!=null,g=(l===`Agent`||l===`Task`)&&e.type===`tool_use`,_=g?e.children:void 0,v=_&&_.length>0,b=g&&e.type===`tool_use`?e.bgStatus:void 0,x=g&&(b!=null||d&&!f&&me(String(t.output??``)))&&b==null,S=b===`failed`||b===`stopped`,C=x?!1:d||m||h||n,w=[`Edit`,`MultiEdit`,`Write`,`NotebookEdit`].includes(l),T=X(e),D=d&&fe(String(t.output??``)),ee=!!T,O=e.type===`tool_use`?e.toolUseId:void 0,k=(l===`Bash`||l===`PowerShell`)&&!d&&O?i?.current?.get(O):void 0,j=!!k;(0,L.useEffect)(()=>{j&&!a&&o(!0)},[j]);let M=(0,L.useRef)(!1);(0,L.useEffect)(()=>{f&&(l===`Edit`||l===`MultiEdit`)&&!M.current&&(M.current=!0,o(!1))},[f,l]);let{Icon:N,cls:P}=De(l,f,!!Y(l,u)),F=l===`AskUserQuestion`||l===`ExitPlanMode`||g;return(0,R.jsxs)(`div`,{"data-tool-ref":O,className:`rounded-[11px] border overflow-hidden text-xs bg-panel ${F?`border-accent-wash-border`:`border-border`}`,children:[(0,R.jsxs)(`button`,{onClick:()=>o(!a),className:`flex items-center gap-2.5 px-2.5 py-2 w-full text-left hover:bg-panel-2/40 transition-colors min-w-0`,children:[(0,R.jsx)(`span`,{className:`inline-flex items-center justify-center size-6 rounded-[7px] shrink-0 ${P}`,children:(0,R.jsx)(N,{className:`size-3.5`})}),(0,R.jsx)(`span`,{className:`truncate text-text font-medium`,children:(0,R.jsx)(Ae,{name:l,input:u})}),(0,R.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 shrink-0`,children:[j&&(0,R.jsxs)(`span`,{className:`text-[10px] text-warning`,children:[k.lineCount,` line`,k.lineCount===1?``:`s`,` streaming…`]}),v&&!j&&(0,R.jsxs)(`span`,{className:`text-[10px] text-text-3 font-mono`,children:[_.length,` steps`]}),x&&(0,R.jsx)(`span`,{className:`text-[10px] text-primary`,children:`running…`}),f||S?(0,R.jsx)(A,{className:`size-3.5 text-error`}):C?(0,R.jsx)(E,{className:`size-3.5 text-success`}):(0,R.jsx)(p,{className:`size-3.5 text-primary animate-spin`}),a?(0,R.jsx)(s,{className:`size-3 text-text-3`}):(0,R.jsx)(c,{className:`size-3 text-text-3`})]})]}),a&&(0,R.jsxs)(`div`,{className:`px-2 pb-2 space-y-1.5 select-text`,children:[(e.type===`tool_use`||e.type===`approval_request`)&&(0,R.jsx)(je,{name:l,input:u,projectName:r,toolUseId:O}),k&&(0,R.jsx)(Ie,{content:k.content,lineCount:k.lineCount}),v&&(0,R.jsx)(Fe,{events:_,projectName:r}),T&&(0,R.jsx)(Ee,{filePath:T,projectName:r??``}),d&&!(w&&!f)&&!(D&&!f)&&!(ee&&!f)&&(0,R.jsx)(Ne,{toolName:l,output:t.output})]})]})}function Ae({name:e,input:t}){let n=e=>String(e??``);switch(e){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:g(n(t.file_path))})]});case`Bash`:case`PowerShell`:{let r=t.description?n(t.description):n(t.command);return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle${t.description?``:` font-mono`}`,children:$(r,60)})]})}case`Glob`:return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`font-mono text-text-subtle`,children:n(t.pattern)})]});case`Grep`:return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`font-mono text-text-subtle`,children:$(n(t.pattern),40)})]});case`WebSearch`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(S,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`WebFetch`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(C,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.url),50)})]});case`ToolSearch`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(S,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`ImageGen`:{let e=(n(t.prompt).split(`
|
|
4
|
-
`).find(e=>e.trim())??``)||g(n(t.file_path));return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(F,{className:`size-3 inline`}),` Image`,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[` `,$(e,50)]})]})}case`Agent`:case`Task`:{let r=Y(e,t),i=$(n(t.description||t.prompt),r?44:60);return(0,R.jsxs)(R.Fragment,{children:[!r&&(0,R.jsx)(o,{className:`size-3 inline`}),` `,e,` `,r&&(0,R.jsx)(`span`,{className:`text-text-primary font-medium`,children:r}),(0,R.jsx)(`span`,{className:`text-text-subtle`,children:r?` · ${i}`:i})]})}case`SendMessage`:return(0,R.jsx)(oe,{name:e,input:t});case`TodoWrite`:{let n=Array.isArray(t.todos)?t.todos:[],r=n.filter(e=>e.status===`completed`).length;return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[r,`/`,n.length,` done`]})]})}case`AskUserQuestion`:{let n=Array.isArray(t.questions)?t.questions:[],r=!!t.answers;return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[n.length,` question`,n.length===1?``:`s`,r?` ✓`:``]})]})}case`ScheduleWakeup`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(l,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`in `,Be(Number(t.delaySeconds)),t.reason?` — ${$(n(t.reason),50)}`:``]})]});case`TaskCreate`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.subject),60)})]});case`TaskUpdate`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` → `,n(t.status)]})]});case`TaskStop`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` stopped`]})]});default:return(0,R.jsx)(R.Fragment,{children:e})}}function je({name:e,input:t,projectName:n,toolUseId:r}){let i=e=>String(e??``),{openTab:a}=_(
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-DY60UZNW.js","assets/vendor-mermaid-BKWscKt0.js","assets/rolldown-runtime-FhOqtrmT.js","assets/vendor-ui-CaeeFO0B.js","assets/vendor-markdown-Ls5AcU91.js","assets/markdown-renderer-Bo8GgGXl.js","assets/index-B1bzKRjJ.js","assets/button-BZtEJcUv.js","assets/utils-C9OjCrou.js","assets/createLucideIcon-D8pyde1A.js","assets/arrow-left-CyFcsyzD.js","assets/bot-D6sx11y0.js","assets/check-DN75Ucvz.js","assets/chevron-down-Dp0rpHb8.js","assets/chevron-right-De-Wz5Lz.js","assets/chevron-up-8PbsNiJp.js","assets/circle-BCy0AUCo.js","assets/clock-C1CQUQPZ.js","assets/sparkles-Dh-_J2Rd.js","assets/copy-BewHj66E.js","assets/database-Y3ESDK4-.js","assets/download-DG3_9xXy.js","assets/use-coarse-long-press-BmI_GVW5.js","assets/eye-off-GjXVuAOn.js","assets/eye-gWwaF4Lg.js","assets/loader-circle-DPMrnLQ2.js","assets/monitor-C835ucWH.js","assets/x-YDu4m2Iq.js","assets/api-client-oY1tC3tM.js","assets/react-X4jUntEf.js","assets/window-store-DGKf9rPG.js","assets/window-pip-registry-BEN0QNSW.js","assets/panel-store-BRrnDO_i.js","assets/context-menu-C13b1uT3.js","assets/portal-container-context-a399Hd9F.js","assets/mobile-bottom-sheet-BD5b7KJF.js","assets/use-visual-viewport-rnvuooQZ.js","assets/use-is-mobile-CYW3FJFE.js","assets/project-store-BuY7rxn_.js","assets/ws-auth-Dawx17PM.js","assets/settings-store-Brjd0QnO.js","assets/tab-store-PZsP5ZwG.js","assets/apply-theme-DxTXOAcV.js","assets/resolve-theme-DQk_YcsT.js","assets/index-nP3uxXvR.css","assets/image-gallery-Cj8nd4xW.js","assets/run-in-terminal-bKRwuO2z.js","assets/edit-diff-preview-DeHb85DN.js","assets/libesm-DLBE59ul.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{n as i,t as a}from"./circle-question-mark-CzR7YRc-.js";import{t as o}from"./bot-D6sx11y0.js";import{t as s}from"./chevron-down-Dp0rpHb8.js";import{t as c}from"./chevron-right-De-Wz5Lz.js";import{t as l}from"./clock-C1CQUQPZ.js";import{t as u}from"./code-DJgYrFzm.js";import{n as d,t as f}from"./sparkles-Dh-_J2Rd.js";import{t as p}from"./loader-circle-DPMrnLQ2.js";import{t as m}from"./send-Bb0jtcR6.js";import{q as h}from"./vendor-mermaid-BKWscKt0.js";import{t as g}from"./utils-C9OjCrou.js";import{t as _}from"./tab-store-PZsP5ZwG.js";import{An as v,Cr as y,Er as b,Fn as x,Ft as S,Or as C,Un as w,pr as T,r as E,tn as D}from"./index-B1bzKRjJ.js";import{t as ee}from"./use-blob-url-Gfi69PtP.js";import{r as O,t as k}from"./image-gallery-Cj8nd4xW.js";var A=r(`circle-x`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),j=r(`clipboard-list`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`M12 11h4`,key:`1jrz19`}],[`path`,{d:`M12 16h4`,key:`n85exb`}],[`path`,{d:`M8 11h.01`,key:`1dfujw`}],[`path`,{d:`M8 16h.01`,key:`18s6g9`}]]),M=r(`file-pen`,[[`path`,{d:`M12.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v9.34`,key:`o6klzx`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10.378 12.622a1 1 0 0 1 3 3.003L8.36 20.637a2 2 0 0 1-.854.506l-2.867.837a.5.5 0 0 1-.62-.62l.836-2.869a2 2 0 0 1 .506-.853z`,key:`zhnas1`}]]),N=r(`file-plus-corner`,[[`path`,{d:`M11.35 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v5.35`,key:`17jvcc`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M14 19h6`,key:`bvotb8`}],[`path`,{d:`M17 16v6`,key:`18yu1i`}]]),P=r(`file-search`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`circle`,{cx:`11.5`,cy:`14.5`,r:`2.5`,key:`1bq0ko`}],[`path`,{d:`M13.3 16.3 15 18`,key:`2quom7`}]]),F=r(`image-plus`,[[`path`,{d:`M16 5h6`,key:`1vod17`}],[`path`,{d:`M19 2v6`,key:`4bpg5p`}],[`path`,{d:`M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5`,key:`1ue2ih`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}]]),te=r(`list-checks`,[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]),I=r(`list-todo`,[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`rect`,{x:`3`,y:`4`,width:`6`,height:`6`,rx:`1`,key:`cif1o7`}]]),L=e(t(),1),R=n(),ne=(0,L.lazy)(()=>h(()=>import(`./markdown-renderer-DY60UZNW.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function z({content:e,maxHeight:t=`max-h-48`}){return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded`}),children:(0,R.jsx)(ne,{content:e,className:`text-text-secondary overflow-auto ${t}`})})}var B={task_assignment:{label:`task`,className:`bg-primary/20 text-primary`},idle_notification:{label:`idle`,className:`bg-warning/20 text-warning`},completion:{label:`done`,className:`bg-success/20 text-success`},shutdown_request:{label:`shutdown`,className:`bg-error/20 text-error`},shutdown_approved:{label:`shutdown ✓`,className:`bg-text-3/20 text-text-3`},shutdown_response:{label:`shutdown reply`,className:`bg-text-3/20 text-text-3`},plan_approval_request:{label:`plan review`,className:`bg-primary/20 text-primary`},plan_approval_response:{label:`plan reply`,className:`bg-primary/20 text-primary`}},re=new Set([`to`,`message`,`summary`,`notify_when_idle`,`recipient`,`content`,`type`]),V=e=>typeof e==`string`?e:e==null?``:String(e);function H(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;return typeof t.type!=`string`||!t.type?null:{type:t.type,request_id:typeof t.request_id==`string`?t.request_id:void 0,approve:typeof t.approve==`boolean`?t.approve:void 0,reason:typeof t.reason==`string`?t.reason:void 0,feedback:typeof t.feedback==`string`?t.feedback:void 0}}function ie(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return H(JSON.parse(t))}catch{return null}}function U(e){let t=V(e.to)||V(e.recipient),n=e.message??e.content,r=H(n)??ie(V(n)),i=r?``:V(n),a=V(e.type),o=r?.type||(a&&a!==`message`?a:`message`),s=V(e.summary).trim(),c=Object.entries(e).filter(([e])=>!re.has(e)).map(([e,t])=>({key:e,value:typeof t==`string`?t:JSON.stringify(t)??``}));return{to:t,summary:s||void 0,text:i,firstLine:i.split(`
|
|
3
|
+
`).map(e=>e.trim()).find(e=>e.length>0)??``,protocol:r??void 0,kind:o,notifyWhenIdle:e.notify_when_idle===!0,extras:c}}function W(e){if(!e)return null;let t;try{t=JSON.parse(e)}catch{return null}if(Array.isArray(t)){let e=V(t.find(e=>e&&typeof e==`object`&&e.type===`text`)?.text);if(!e)return null;try{t=JSON.parse(e)}catch{return null}}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;if(typeof n.success!=`boolean`)return null;let r=n.pin&&typeof n.pin==`object`?n.pin:null;return{ok:n.success,detail:V(n.message)||V(n.error)||void 0,peer:r&&V(r.name)||void 0,ref:r&&V(r.ref)||void 0}}function ae({kind:e}){if(e===`message`)return null;let t=B[e];return(0,R.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] ${t?.className??`bg-panel-2 text-text-3`}`,children:t?.label??e})}function oe({name:e,input:t}){let n=U(t),r=n.summary||n.firstLine||(n.protocol?n.kind:``),a=r.length>72?`${r.slice(0,72)}…`:r;return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[(0,R.jsx)(i,{className:`size-3 inline`}),` `,n.to||`unknown`,a?` · ${a}`:``]}),n.notifyWhenIdle&&(0,R.jsx)(l,{className:`size-3 inline ml-1 text-text-3`})]})}function se({input:e}){let t=U(e);return(0,R.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,R.jsx)(`span`,{className:`text-text-subtle`,children:`To`}),(0,R.jsx)(`span`,{className:`font-medium text-text-primary`,children:t.to||`unknown`}),(0,R.jsx)(ae,{kind:t.kind}),t.notifyWhenIdle&&(0,R.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:[(0,R.jsx)(l,{className:`size-3`}),` notify when idle`]})]}),!!t.text&&(0,R.jsx)(z,{content:t.text,maxHeight:`max-h-40`}),t.protocol&&(0,R.jsxs)(`div`,{className:`space-y-0.5 text-text-secondary`,children:[t.protocol.approve!=null&&(0,R.jsxs)(`p`,{children:[t.protocol.approve?`Approved`:`Rejected`,t.protocol.request_id?(0,R.jsxs)(`span`,{className:`text-text-subtle font-mono`,children:[` · `,t.protocol.request_id]}):null]}),!!t.protocol.reason&&(0,R.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.reason}),!!t.protocol.feedback&&(0,R.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.feedback})]}),t.extras.length>0&&(0,R.jsx)(`div`,{className:`space-y-0.5`,children:t.extras.map(e=>(0,R.jsxs)(`p`,{className:`text-text-subtle`,children:[(0,R.jsx)(`span`,{className:`font-mono`,children:e.key}),`: `,e.value]},e.key))})]})}function ce({output:e}){let[t,n]=(0,L.useState)(!1),r=W(e);return r?(0,R.jsxs)(`div`,{className:`border-t border-border pt-1.5 space-y-1`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[r.ok?(0,R.jsx)(b,{className:`size-3 text-success shrink-0`}):(0,R.jsx)(A,{className:`size-3 text-error shrink-0`}),(0,R.jsx)(`span`,{className:r.ok?`text-success`:`text-error`,children:r.ok?`Delivered`:`Not delivered`}),!!r.detail&&(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`· `,r.detail]}),!!r.ref&&(0,R.jsxs)(`span`,{className:`text-text-3 font-mono text-[10px]`,children:[`[`,r.ref,`]`]})]}),(0,R.jsxs)(`button`,{type:`button`,onClick:()=>n(!t),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,R.jsx)(u,{className:`size-3`}),t?`Hide`:`Show`,` raw`]}),t&&(0,R.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono max-h-40 whitespace-pre-wrap break-all text-[10px]`,children:e})]}):null}var le=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.bmp`,`.avif`,`.ico`]);function ue(e){let t=e.lastIndexOf(`.`);return t===-1?!1:le.has(e.slice(t).toLowerCase())}var de=/^\[image(?: · [\d.]+(?:B|KB|MB))?\]$/;function fe(e){if(!e.startsWith(`[`))return!1;let t;try{t=JSON.parse(e)}catch{return!1}return Array.isArray(t)?t.some(e=>{let t=e;return t?.type===`text`&&typeof t.text==`string`&&de.test(t.text)}):!1}var pe=`Async agent launched successfully`;function me(e){return!!e&&e.includes(pe)}var he=`text-[var(--img-meta-label)] @max-[470px]:hidden`,ge=[`60%`,`45%`,`80%`];function _e({aspect:e,actions:t}){return(0,R.jsxs)(`div`,{className:`grid grid-cols-[132px_1fr] items-start gap-[14px] overflow-hidden rounded-lg border border-border bg-panel p-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px] @max-[470px]:p-[11px]`,children:[(0,R.jsx)(`div`,{className:`img-skeleton rounded-lg`,style:{aspectRatio:e}}),(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,R.jsx)(`div`,{className:`img-skeleton h-[13px] w-2/5 rounded @max-[470px]:hidden`}),(0,R.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:[`dimensions`,`size`,`path`].map((e,t)=>(0,R.jsxs)(L.Fragment,{children:[(0,R.jsx)(`dt`,{className:he,children:e}),(0,R.jsx)(`dd`,{className:`flex items-center`,children:(0,R.jsx)(`span`,{className:`img-skeleton h-[11px] rounded`,style:{width:ge[t]}})})]},e))}),t]})]})}function ve({code:e,onRetry:t}){return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-panel px-2.5 py-2 font-mono text-[12px] text-text-2`,children:[(0,R.jsx)(C,{className:`size-3 shrink-0`}),(0,R.jsxs)(`span`,{className:`truncate`,children:[`preview unavailable`,e?` · ${e}`:``]}),(0,R.jsx)(`button`,{type:`button`,onClick:t,className:`ml-auto shrink-0 text-accent`,children:`retry`})]})}var ye=.62;function be(e,t){let n=e.w/e.h;if(n>2.4)return{variant:`band`,aspect:n,fit:`contain`};let r=Math.max(ye,n),i=t/r;return e.w<t&&e.h<i?{variant:`split`,aspect:r,fit:`native`}:{variant:`split`,aspect:r,fit:n<.62?`contain`:`cover`}}function xe(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:e>=1024?`${Math.round(e/1024)} KB`:`${e} B`}function Se(e,t){let n=`${e.w} × ${e.h} px`;return t===`native`?`${n} · shown 1:1`:n}var G=new Map;function Ce(e){return G.get(e)}function we(e,t){G.set(e,t)}var Te=4/5,K=`text-[var(--img-meta-label)] @max-[470px]:hidden`,q=`truncate text-text @max-[470px]:text-text-2`,J=`h-[30px] @max-[470px]:h-[36px] shrink-0 rounded-[7px] px-[9px] font-mono text-[11.5px] text-text-2 bg-[var(--img-ghost)] border border-[var(--img-ghost-border)] backdrop-blur-[6px] transition-colors can-hover:hover:bg-[var(--img-ghost-hover)] can-hover:hover:border-[var(--img-ghost-hover-border)] can-hover:hover:text-text`;function Ee({filePath:e,projectName:t}){let[n,r]=(0,L.useState)(0),{blobUrl:i,blob:a,error:o,errorCode:s}=ee(e,t,void 0,n),[c,l]=(0,L.useState)(()=>Ce(e)),[u,d]=(0,L.useState)(!1),[f,p]=(0,L.useState)(!1),m=E(e=>e.open),{openTab:h}=_(S(e=>({openTab:e.openTab}))),v=g(e);(0,L.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>p(!1),1200);return()=>clearTimeout(e)},[f]);let y=t=>{let n={w:t.naturalWidth,h:t.naturalHeight};if(!n.w||!n.h)return d(!0);we(e,n),l(n)},b=()=>{d(!1),r(e=>e+1)};if(o||u)return(0,R.jsx)(`div`,{className:`border-t border-border pt-1.5`,children:(0,R.jsx)(ve,{code:u?void 0:s??void 0,onRetry:b})});let x=c?be(c,132):null,C=x?.aspect??Te,w=(0,R.jsxs)(`div`,{className:`flex flex-wrap gap-[6px]`,children:[(0,R.jsxs)(`button`,{type:`button`,onClick:T,className:J,children:[(0,R.jsx)(`span`,{className:`@max-[470px]:hidden`,children:`open in editor`}),(0,R.jsx)(`span`,{className:`hidden @max-[470px]:inline`,children:`open`})]}),(0,R.jsx)(`button`,{type:`button`,onClick:A,className:J,children:f?`copied`:`copy path`}),(0,R.jsx)(`button`,{type:`button`,onClick:j,className:J,children:`full size`})]});function T(){t&&h({type:`editor`,title:v,metadata:{filePath:e,projectName:t},projectId:t,closable:!0})}function A(){D(e).then(()=>p(!0))}function j(e){i&&m(i,v,O(e.currentTarget))}if(!i||!x||!c)return(0,R.jsxs)(`div`,{className:`@container border-t border-border pt-1.5`,children:[i&&(0,R.jsx)(`img`,{src:i,alt:``,className:`hidden`,onLoad:e=>y(e.currentTarget),onError:()=>d(!0)}),(0,R.jsx)(_e,{aspect:C,actions:w})]});let M=(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`dt`,{className:K,children:`dimensions`}),(0,R.jsx)(`dd`,{className:q,children:Se(c,x.fit)}),a&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`dt`,{className:K,children:`size`}),(0,R.jsxs)(`dd`,{className:q,children:[xe(a.size),a.type?` · ${a.type}`:``]})]}),(0,R.jsx)(`dt`,{className:K,children:`path`}),(0,R.jsx)(`dd`,{dir:`rtl`,className:`${q} text-left`,children:e})]}),N=(0,R.jsx)(`img`,{src:i,alt:v,[k]:``,onLoad:e=>y(e.currentTarget),onError:()=>d(!0),className:x.fit===`cover`?`size-full object-cover`:x.fit===`contain`?`size-full object-contain`:`max-h-full max-w-full`});return(0,R.jsx)(`div`,{className:`@container border-t border-border pt-1.5`,children:(0,R.jsxs)(`div`,{className:`relative overflow-hidden rounded-lg border border-border p-[14px] @max-[470px]:p-[11px]`,children:[(0,R.jsx)(`img`,{"aria-hidden":`true`,alt:``,src:i,className:`absolute inset-0 size-full object-cover`,style:{filter:`var(--img-backdrop)`,transform:`scale(1.3)`}}),(0,R.jsx)(`div`,{className:`absolute inset-0`,style:{background:`var(--img-veil)`}}),x.variant===`band`?(0,R.jsxs)(`div`,{className:`relative grid gap-[11px]`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:j,title:`Open ${v}`,className:`img-checkerboard w-full cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)]`,style:{aspectRatio:x.aspect},children:N}),(0,R.jsx)(`dl`,{className:`grid grid-cols-[auto_auto_1fr] gap-x-[18px] font-mono text-[11.5px] [&_dt]:hidden`,children:M}),w]}):(0,R.jsxs)(`div`,{className:`relative grid grid-cols-[132px_1fr] items-start gap-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px]`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:j,title:`Open ${v}`,className:`cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)] bg-[var(--img-plate)] shadow-[var(--img-plate-shadow)] ${x.fit===`cover`?``:`img-checkerboard flex items-center justify-center`}`,style:{aspectRatio:x.aspect},children:N}),(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,R.jsx)(`p`,{className:`truncate text-[13px] font-semibold text-text @max-[470px]:hidden`,children:v}),(0,R.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:M}),w]})]})]})})}function Y(e,t){if(e!==`Agent`&&e!==`Task`)return null;let n=t.name;return typeof n==`string`&&n.trim()?n.trim():null}function De(e,t,n=!1){if(t&&(e===`Bash`||e===`PowerShell`))return{Icon:x,cls:`bg-error/15 text-error`};if(n)return{Icon:v,cls:`bg-accent-2/15 text-accent-2`};switch(e){case`Read`:case`Glob`:case`LS`:return{Icon:P,cls:`bg-accent-wash text-primary`};case`Grep`:case`Search`:case`WebSearch`:case`ToolSearch`:return{Icon:w,cls:`bg-accent-wash text-primary`};case`WebFetch`:case`Fetch`:return{Icon:T,cls:`bg-info/15 text-info`};case`Edit`:case`MultiEdit`:case`NotebookEdit`:return{Icon:M,cls:`bg-accent-2/15 text-accent-2`};case`Write`:return{Icon:N,cls:`bg-success/15 text-success`};case`Bash`:case`PowerShell`:return{Icon:x,cls:`bg-panel-2 text-text-2`};case`TodoWrite`:return{Icon:te,cls:`bg-warning/15 text-warning`};case`Task`:case`Agent`:return{Icon:o,cls:`bg-accent-wash text-primary`};case`SendMessage`:return{Icon:m,cls:`bg-info/15 text-info`};case`AskUserQuestion`:return{Icon:a,cls:`bg-accent-wash text-primary`};case`ExitPlanMode`:return{Icon:j,cls:`bg-accent-wash text-primary`};case`Skill`:return{Icon:f,cls:`bg-accent-2/15 text-accent-2`};case`ImageGen`:return{Icon:F,cls:`bg-accent-2/15 text-accent-2`};default:return{Icon:u,cls:`bg-panel-2 text-text-2`}}}function Oe(e){let t=e.type===`approval_request`;return{toolName:e.type===`tool_use`?e.tool:t?e.tool??`Tool`:`Tool`,input:e.type===`tool_use`?e.input:t?e.input??{}:{}}}var ke=new Set([`Read`,`ImageGen`]);function X(e){if(e.type!==`tool_use`||!ke.has(e.tool))return null;let t=e.input?.file_path;return typeof t!=`string`||!/^(\/|[A-Za-z]:[/\\])/.test(t)?null:ue(t)?t:null}function Z({tool:e,result:t,completed:n,projectName:r,bashPartialOutput:i}){let[a,o]=(0,L.useState)(()=>{let n=(e.type,e.tool),r=t?.type===`tool_result`&&!!t.isError;return(n===`Edit`||n===`MultiEdit`)&&!r?!0:!!X(e)});if(e.type===`error`)return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 rounded bg-error/10 border border-error/20 px-2 py-1.5 text-xs text-error`,children:[(0,R.jsx)(C,{className:`size-3`}),(0,R.jsx)(`span`,{children:e.message})]});let{toolName:l,input:u}=Oe(e),d=t?.type===`tool_result`,f=d&&!!t.isError,m=l===`AskUserQuestion`&&!!u?.answers,h=e.type===`approval_request`&&e.approved!=null,g=(l===`Agent`||l===`Task`)&&e.type===`tool_use`,_=g?e.children:void 0,v=_&&_.length>0,y=g&&e.type===`tool_use`?e.bgStatus:void 0,x=g&&(y!=null||d&&!f&&me(String(t.output??``)))&&y==null,S=y===`failed`||y===`stopped`,w=x?!1:d||m||h||n,T=[`Edit`,`MultiEdit`,`Write`,`NotebookEdit`].includes(l),E=X(e),D=d&&fe(String(t.output??``)),ee=!!E,O=e.type===`tool_use`?e.toolUseId:void 0,k=(l===`Bash`||l===`PowerShell`)&&!d&&O?i?.current?.get(O):void 0,j=!!k;(0,L.useEffect)(()=>{j&&!a&&o(!0)},[j]);let M=(0,L.useRef)(!1);(0,L.useEffect)(()=>{f&&(l===`Edit`||l===`MultiEdit`)&&!M.current&&(M.current=!0,o(!1))},[f,l]);let{Icon:N,cls:P}=De(l,f,!!Y(l,u)),F=l===`AskUserQuestion`||l===`ExitPlanMode`||g;return(0,R.jsxs)(`div`,{"data-tool-ref":O,className:`rounded-[11px] border overflow-hidden text-xs bg-panel ${F?`border-accent-wash-border`:`border-border`}`,children:[(0,R.jsxs)(`button`,{onClick:()=>o(!a),className:`flex items-center gap-2.5 px-2.5 py-2 w-full text-left hover:bg-panel-2/40 transition-colors min-w-0`,children:[(0,R.jsx)(`span`,{className:`inline-flex items-center justify-center size-6 rounded-[7px] shrink-0 ${P}`,children:(0,R.jsx)(N,{className:`size-3.5`})}),(0,R.jsx)(`span`,{className:`truncate text-text font-medium`,children:(0,R.jsx)(Ae,{name:l,input:u})}),(0,R.jsxs)(`span`,{className:`ml-auto flex items-center gap-2 shrink-0`,children:[j&&(0,R.jsxs)(`span`,{className:`text-[10px] text-warning`,children:[k.lineCount,` line`,k.lineCount===1?``:`s`,` streaming…`]}),v&&!j&&(0,R.jsxs)(`span`,{className:`text-[10px] text-text-3 font-mono`,children:[_.length,` steps`]}),x&&(0,R.jsx)(`span`,{className:`text-[10px] text-primary`,children:`running…`}),f||S?(0,R.jsx)(A,{className:`size-3.5 text-error`}):w?(0,R.jsx)(b,{className:`size-3.5 text-success`}):(0,R.jsx)(p,{className:`size-3.5 text-primary animate-spin`}),a?(0,R.jsx)(s,{className:`size-3 text-text-3`}):(0,R.jsx)(c,{className:`size-3 text-text-3`})]})]}),a&&(0,R.jsxs)(`div`,{className:`px-2 pb-2 space-y-1.5 select-text`,children:[(e.type===`tool_use`||e.type===`approval_request`)&&(0,R.jsx)(je,{name:l,input:u,projectName:r,toolUseId:O}),k&&(0,R.jsx)(Ie,{content:k.content,lineCount:k.lineCount}),v&&(0,R.jsx)(Fe,{events:_,projectName:r}),E&&(0,R.jsx)(Ee,{filePath:E,projectName:r??``}),d&&!(T&&!f)&&!(D&&!f)&&!(ee&&!f)&&(0,R.jsx)(Ne,{toolName:l,output:t.output})]})]})}function Ae({name:e,input:t}){let n=e=>String(e??``);switch(e){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:g(n(t.file_path))})]});case`Bash`:case`PowerShell`:{let r=t.description?n(t.description):n(t.command);return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle${t.description?``:` font-mono`}`,children:$(r,60)})]})}case`Glob`:return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`font-mono text-text-subtle`,children:n(t.pattern)})]});case`Grep`:return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsx)(`span`,{className:`font-mono text-text-subtle`,children:$(n(t.pattern),40)})]});case`WebSearch`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(w,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`WebFetch`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(T,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.url),50)})]});case`ToolSearch`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(w,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.query),50)})]});case`ImageGen`:{let e=(n(t.prompt).split(`
|
|
4
|
+
`).find(e=>e.trim())??``)||g(n(t.file_path));return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(F,{className:`size-3 inline`}),` Image`,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[` `,$(e,50)]})]})}case`Agent`:case`Task`:{let r=Y(e,t),i=$(n(t.description||t.prompt),r?44:60);return(0,R.jsxs)(R.Fragment,{children:[!r&&(0,R.jsx)(o,{className:`size-3 inline`}),` `,e,` `,r&&(0,R.jsx)(`span`,{className:`text-text-primary font-medium`,children:r}),(0,R.jsx)(`span`,{className:`text-text-subtle`,children:r?` · ${i}`:i})]})}case`SendMessage`:return(0,R.jsx)(oe,{name:e,input:t});case`TodoWrite`:{let n=Array.isArray(t.todos)?t.todos:[],r=n.filter(e=>e.status===`completed`).length;return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[r,`/`,n.length,` done`]})]})}case`AskUserQuestion`:{let n=Array.isArray(t.questions)?t.questions:[],r=!!t.answers;return(0,R.jsxs)(R.Fragment,{children:[e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[n.length,` question`,n.length===1?``:`s`,r?` ✓`:``]})]})}case`ScheduleWakeup`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(l,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`in `,Be(Number(t.delaySeconds)),t.reason?` — ${$(n(t.reason),50)}`:``]})]});case`TaskCreate`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsx)(`span`,{className:`text-text-subtle`,children:$(n(t.subject),60)})]});case`TaskUpdate`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` → `,n(t.status)]})]});case`TaskStop`:return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(I,{className:`size-3 inline`}),` `,e,` `,(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[`#`,n(t.taskId),` stopped`]})]});default:return(0,R.jsx)(R.Fragment,{children:e})}}function je({name:e,input:t,projectName:n,toolUseId:r}){let i=e=>String(e??``),{openTab:a}=_(S(e=>({openTab:e.openTab}))),o=e=>{n&&a({type:`editor`,title:g(e),metadata:{filePath:e,projectName:n},projectId:n,closable:!0})},s=(e,t,r)=>{a({type:`git-diff`,title:`Diff ${g(e)}`,metadata:{filePath:e,projectName:n,original:t,modified:r},projectId:n??null,closable:!0})};switch(e){case`Bash`:case`PowerShell`:return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[!!t.description&&(0,R.jsx)(`p`,{className:`text-text-subtle italic`,children:i(t.description)}),(0,R.jsx)(`pre`,{className:`font-mono text-text-secondary overflow-x-auto whitespace-pre-wrap break-all`,children:i(t.command)})]});case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:{let n=i(t.notebook_path||t.file_path),a=e===`Edit`&&(!!t.old_string||!!t.new_string),c=e=>r?`${r}-${e}`:void 0;return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[(0,R.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`font-mono text-text-secondary break-all hover:text-primary hover:underline text-left flex items-center gap-1 min-w-0`,onClick:()=>o(n),title:`Open file in editor`,children:[(0,R.jsx)(y,{className:`size-3 shrink-0`}),n]}),a&&(0,R.jsxs)(`button`,{type:`button`,className:`text-text-subtle hover:text-primary hover:underline flex items-center gap-1 shrink-0 whitespace-nowrap`,onClick:()=>s(n,i(t.old_string),i(t.new_string)),title:`View diff in new tab`,children:[(0,R.jsx)(d,{className:`size-3 shrink-0`}),`View Diff`]})]}),a&&(0,R.jsx)(`div`,{"data-edit-ref":c(0),children:(0,R.jsx)(ze,{oldStr:i(t.old_string),newStr:i(t.new_string),filePath:n})}),e===`MultiEdit`&&Array.isArray(t.edits)&&(0,R.jsx)(`div`,{className:`space-y-1.5`,children:t.edits.map((e,t)=>(0,R.jsxs)(`div`,{"data-edit-ref":c(t),className:`space-y-0.5`,children:[(0,R.jsxs)(`p`,{className:`text-text-subtle text-[10px]`,children:[`Edit `,t+1]}),(0,R.jsx)(ze,{oldStr:i(e.old_string),newStr:i(e.new_string),filePath:n})]},t))}),e===`Write`&&!!t.content&&(0,R.jsx)(`pre`,{"data-edit-ref":c(0),className:`font-mono text-text-subtle overflow-x-auto max-h-32 whitespace-pre-wrap`,children:$(i(t.content),300)})]})}case`Glob`:return(0,R.jsxs)(`p`,{className:`font-mono text-text-secondary`,children:[i(t.pattern),t.path?` in ${i(t.path)}`:``]});case`Grep`:return(0,R.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,R.jsxs)(`p`,{className:`font-mono text-text-secondary`,children:[`/`,i(t.pattern),`/`]}),!!t.path&&(0,R.jsxs)(`p`,{className:`text-text-subtle`,children:[`in `,i(t.path)]})]});case`TodoWrite`:return(0,R.jsx)(Me,{todos:t.todos??[]});case`Agent`:case`Task`:{let n=Y(e,t);return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[!!n&&(0,R.jsxs)(`p`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,R.jsx)(`span`,{className:`text-text-subtle`,children:`Name`}),(0,R.jsx)(`span`,{className:`font-medium text-text-primary`,children:n}),(0,R.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] bg-accent-2/15 text-accent-2`,children:`teammate`}),t.isolation===`worktree`&&(0,R.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:`worktree`})]}),!!t.description&&(0,R.jsx)(`p`,{className:`text-text-secondary font-medium`,children:i(t.description)}),!!t.subagent_type&&(0,R.jsxs)(`p`,{className:`text-text-subtle`,children:[`Type: `,i(t.subagent_type)]}),!!t.prompt&&(0,R.jsx)(z,{content:i(t.prompt),maxHeight:`max-h-48`})]})}case`SendMessage`:return(0,R.jsx)(se,{input:t});case`ToolSearch`:return(0,R.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,R.jsx)(`p`,{className:`font-mono text-text-secondary`,children:i(t.query)}),!!t.max_results&&(0,R.jsxs)(`p`,{className:`text-text-subtle`,children:[`Max results: `,i(t.max_results)]})]});case`WebFetch`:return(0,R.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,R.jsxs)(`a`,{href:i(t.url),target:`_blank`,rel:`noopener noreferrer`,className:`font-mono text-primary hover:underline break-all flex items-center gap-1`,children:[(0,R.jsx)(T,{className:`size-3 shrink-0`}),i(t.url)]}),!!t.prompt&&(0,R.jsx)(`p`,{className:`text-text-subtle`,children:$(i(t.prompt),100)})]});case`AskUserQuestion`:{let e=t.questions??[],n=t.answers??{};return(0,R.jsx)(`div`,{className:`space-y-2`,children:e.map((e,t)=>(0,R.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,R.jsxs)(`p`,{className:`text-text-primary font-medium`,children:[e.header?`${e.header}: `:``,e.question]}),(0,R.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.options.map((t,r)=>(0,R.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-xs border ${(n[e.question]??``).split(`, `).includes(t.label)?`border-primary bg-primary/20 text-text-primary`:`border-border text-text-subtle`}`,children:t.label},r))}),n[e.question]&&(0,R.jsxs)(`p`,{className:`text-foreground text-xs`,children:[`Answer: `,n[e.question]]})]},t))})}case`ScheduleWakeup`:{let e=Number(t.delaySeconds)||0;return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[(0,R.jsxs)(`p`,{className:`text-text-secondary`,children:[(0,R.jsx)(l,{className:`size-3 inline mr-1`}),`Wake in `,(0,R.jsx)(`span`,{className:`font-medium text-text-primary`,children:Be(e)}),(0,R.jsxs)(`span`,{className:`text-text-subtle`,children:[` (`,e,`s)`]})]}),!!t.reason&&(0,R.jsx)(`p`,{className:`text-text-secondary italic`,children:i(t.reason)}),!!t.prompt&&(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`p`,{className:`text-text-subtle text-[10px] mb-0.5`,children:`Prompt on wake`}),(0,R.jsx)(z,{content:i(t.prompt),maxHeight:`max-h-48`})]})]})}case`TaskCreate`:return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[(0,R.jsx)(`p`,{className:`text-text-primary font-medium`,children:i(t.subject)}),!!t.description&&(0,R.jsx)(`p`,{className:`text-text-subtle`,children:i(t.description)}),!!t.activeForm&&(0,R.jsx)(`p`,{className:`text-text-subtle italic`,children:i(t.activeForm)})]});case`TaskUpdate`:return(0,R.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,R.jsxs)(`span`,{className:`font-mono text-text-secondary`,children:[`#`,i(t.taskId)]}),(0,R.jsx)(Q,{status:i(t.status)})]});case`TaskStop`:return(0,R.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,R.jsxs)(`span`,{className:`font-mono text-text-secondary`,children:[`#`,i(t.taskId)]}),(0,R.jsx)(Q,{status:`stopped`})]});case`ImageGen`:return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[!!t.prompt&&(0,R.jsx)(`p`,{className:`text-text-secondary whitespace-pre-wrap`,children:i(t.prompt)}),t.transparentBackground===!0&&(0,R.jsx)(`p`,{className:`text-text-subtle`,children:`Transparent background`})]});default:return(0,R.jsx)(`pre`,{className:`overflow-x-auto text-text-secondary font-mono whitespace-pre-wrap break-all`,children:JSON.stringify(t,null,2)})}}function Q({status:e}){return(0,R.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] border ${e===`completed`?`text-success border-success/30 bg-success/10`:e===`in_progress`?`text-warning border-warning/30 bg-warning/10`:`text-text-subtle border-border bg-surface`}`,children:e})}function Me({todos:e}){return(0,R.jsx)(`div`,{className:`space-y-0.5`,children:e.map((e,t)=>(0,R.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,R.jsx)(`span`,{className:`shrink-0 mt-0.5 ${e.status===`completed`?`text-success`:e.status===`in_progress`?`text-warning`:`text-text-subtle`}`,children:e.status===`completed`?`✓`:e.status===`in_progress`?`▶`:`○`}),(0,R.jsx)(`span`,{className:e.status===`completed`?`line-through text-text-subtle`:`text-text-secondary`,children:e.content})]},t))})}function Ne({toolName:e,output:t}){let[n,r]=(0,L.useState)(!1),i=(0,L.useMemo)(()=>{if(e!==`Agent`&&e!==`Task`)return null;try{let e=JSON.parse(t);if(Array.isArray(e)){let t=e.filter(e=>e.type===`text`&&e.text).map(e=>e.text).join(`
|
|
5
5
|
|
|
6
6
|
`);if(t)return t}if(typeof e==`string`)return e}catch{if(t&&!t.startsWith(`[{`))return t}return null},[e,t]);return e===`SendMessage`&&W(t)?(0,R.jsx)(ce,{output:t}):i?(0,R.jsxs)(`div`,{className:`border-t border-border pt-1.5 space-y-1`,children:[(0,R.jsx)(z,{content:i,maxHeight:`max-h-60`}),(0,R.jsxs)(`button`,{type:`button`,onClick:()=>r(!n),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,R.jsx)(u,{className:`size-3`}),n?`Hide`:`Show`,` raw`]}),n&&(0,R.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono max-h-40 whitespace-pre-wrap break-all text-[10px]`,children:t})]}):(0,R.jsx)(Pe,{output:t})}function Pe({output:e}){let t=e.split(`
|
|
7
7
|
`).length,n=t>3||e.length>200,[r,i]=(0,L.useState)(n);return(0,R.jsxs)(`div`,{className:`border-t border-border pt-1.5`,children:[n&&(0,R.jsxs)(`button`,{type:`button`,onClick:()=>i(!r),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors mb-1`,children:[r?(0,R.jsx)(c,{className:`size-3`}):(0,R.jsx)(s,{className:`size-3`}),`Output (`,t,` lines)`]}),(0,R.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono whitespace-pre-wrap break-all ${r?`max-h-16 overflow-hidden`:`max-h-60`}`,children:e})]})}function Fe({events:e,projectName:t,className:n}){let r=[],i=``;for(let t of e)if(t.type===`text`)i+=t.content;else if(t.type===`tool_use`)i&&=(r.push({kind:`text`,content:i}),``),r.push({kind:`tool`,tool:t});else if(t.type===`tool_result`){let e=t.toolUseId,n=e?r.find(t=>t.kind===`tool`&&t.tool.type===`tool_use`&&t.tool.toolUseId===e&&!t.result):r.findLast(e=>e.kind===`tool`&&!e.result);n&&(n.result=t)}i&&r.push({kind:`text`,content:i});let a=(0,L.useRef)(null),o=(0,L.useRef)(!1);return(0,L.useEffect)(()=>{a.current&&!o.current&&(a.current.scrollTop=a.current.scrollHeight)},[r.length]),(0,R.jsx)(`div`,{ref:a,onScroll:e=>{let t=e.currentTarget;o.current=t.scrollTop+t.clientHeight<t.scrollHeight-20},className:n??`border-l-2 border-accent/20 pl-2 space-y-1 mt-1 max-h-64 md:max-h-96 overflow-y-auto`,children:r.map((e,n)=>e.kind===`text`?(0,R.jsx)(`div`,{className:`text-text-secondary text-[11px]`,children:(0,R.jsx)(z,{content:e.content,maxHeight:`max-h-24`})},`st-${n}`):(0,R.jsx)(Z,{tool:e.tool,result:e.result,completed:!!e.result,projectName:t},`sc-${n}`))})}function Ie({content:e,lineCount:t}){let n=(0,L.useRef)(null),r=(0,L.useRef)(!1);return(0,L.useEffect)(()=>{n.current&&!r.current&&(n.current.scrollTop=n.current.scrollHeight)},[e]),(0,R.jsxs)(`div`,{className:`border-t border-border pt-1.5`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1 text-[10px] text-warning mb-1`,children:[(0,R.jsx)(p,{className:`size-3 animate-spin`}),(0,R.jsxs)(`span`,{children:[`Output (`,t,` line`,t===1?``:`s`,`, streaming...)`]})]}),(0,R.jsx)(`pre`,{ref:n,onScroll:e=>{let t=e.currentTarget;r.current=t.scrollTop+t.clientHeight<t.scrollHeight-20},className:`overflow-x-auto overflow-y-auto max-h-60 text-text-subtle font-mono whitespace-pre-wrap break-all text-[11px]`,children:e.split(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import{t as r}from"./download-DG3_9xXy.js";import{t as i}from"./eye-gWwaF4Lg.js";import{t as a}from"./x-YDu4m2Iq.js";import{t as o}from"./button-BZtEJcUv.js";import{Kn as s,Pn as c,W as l}from"./index-B1bzKRjJ.js";import{getAccounts as u,getActiveAccount as d,getAllAccountUsages as f}from"./api-settings-CTMdz_VF.js";function p(e){return e>=90?`text-error`:e>=70?`text-warning`:`text-success`}function m(e){return e>=90?`bg-error`:e>=70?`bg-warning`:`bg-success`}function h(e){if(!e)return null;let t=null;if(e.resetsInMinutes!=null)t=e.resetsInMinutes;else if(e.resetsInHours!=null)t=Math.round(e.resetsInHours*60);else if(e.resetsAt){let n=new Date(e.resetsAt).getTime()-Date.now();t=n>0?Math.ceil(n/6e4):0}if(t==null)return null;if(t<=0)return`now`;let n=Math.floor(t/1440),r=Math.floor(t%1440/60),i=t%60;return n>0?i>0?`${n}d ${r}h ${i}m`:r>0?`${n}d ${r}h`:`${n}d`:r>0?i>0?`${r}h ${i}m`:`${r}h`:`${i}m`}function g(e){let t=e-Date.now();if(t<=0)return`expired`;let n=Math.ceil(t/6e4),r=Math.floor(n/60),i=Math.floor(r/24);return i>0?`${i}d ${r%24}h`:r>0?`${r}h ${n%60}m`:`${n}m`}function _(e){if(!e)return{label:`unknown`,tip:`No account info available`,color:`text-text-subtle`};if(!e.expiresAt)return{label:`key`,tip:`API key (no expiry)`,color:`text-text-subtle`};let t=e.expiresAt*1e3<Date.now();return t&&e.hasRefreshToken?{label:`expired`,tip:`Token expired but has refresh token — will auto-renew`,color:`text-warning`}:t?{label:`expired`,tip:`Token expired, no refresh token`,color:`text-error`}:e.hasRefreshToken?{label:`long-lived`,tip:`OAuth token with refresh — long-lived`,color:`text-success`}:{label:`temp`,tip:`Temporary token without refresh — will expire`,color:`text-warning`}}function v(e){if(!e)return null;let t=Math.round((Date.now()-e)/1e3);if(t<5)return`just now`;if(t<60)return`${t}s ago`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60),i=n%60;return r<24?i>0?`${r}h ${i}m ago`:`${r}h ago`:`${Math.floor(r/24)}d ago`}var y=n();function b({label:e,pct:t,reset:n}){return(0,y.jsxs)(`div`,{className:`space-y-1`,"data-testid":`account-usage-bar`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,y.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:e}),n&&(0,y.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,title:`Resets in`,children:[`↻ `,n]})]}),(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(`div`,{className:`flex-1 h-2 rounded-full bg-border overflow-hidden`,children:t!=null&&(0,y.jsx)(`div`,{className:`h-full rounded-full transition-all ${m(t)}`,style:{width:`${Math.min(t,100)}%`}})}),(0,y.jsx)(`span`,{className:`text-xs font-medium tabular-nums w-10 text-right ${t==null?`text-text-subtle`:p(t)}`,children:t==null?`—`:`${t}%`})]})]})}function x({label:e,bucket:t}){return t?(0,y.jsx)(b,{label:e,pct:Math.round(t.utilization*100),reset:h(t)}):null}function S({description:e,onRefresh:t,refreshing:n,disabled:r,actions:i}){return(0,y.jsxs)(`section`,{className:`space-y-2`,children:[(0,y.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e}),(0,y.jsx)(o,{variant:`ghost`,size:`icon`,className:`size-8 shrink-0 cursor-pointer`,onClick:t,disabled:r||n,title:`Refresh`,"aria-label":`Refresh accounts`,children:(0,y.jsx)(s,{className:`size-4 ${n?`animate-spin`:``}`})})]}),(0,y.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:i})]})}function C({message:e,onDismiss:t}){return e?(0,y.jsxs)(`div`,{className:`flex items-start gap-2 text-xs p-2 rounded bg-muted`,role:`status`,children:[(0,y.jsx)(`span`,{className:`flex-1`,children:e}),(0,y.jsx)(`button`,{onClick:t,className:`shrink-0 text-muted-foreground hover:text-foreground cursor-pointer`,"aria-label":`Dismiss message`,children:(0,y.jsx)(a,{className:`size-3.5`})})]}):null}function w({children:e}){return(0,y.jsx)(`div`,{className:`flex gap-2 overflow-x-auto pb-1 -mx-1 px-1 snap-x snap-mandatory scrollbar-thin`,children:e})}function T({active:e,flash:t,dense:n,children:r,...i}){return(0,y.jsx)(`div`,{...i,className:[`rounded-md border transition-colors duration-500`,n?`p-2.5 space-y-1.5`:`p-3 space-y-2`,t?`bg-primary/10 border-primary/40`:``,e?`border-primary/30 bg-primary/5`:`border-border/50`,i.className??``].filter(Boolean).join(` `),children:r})}var E={readOnly:`min-w-[220px]`,withActions:`min-w-[300px]`};function D({entry:e,isActive:t,accountInfo:n,onToggle:a,toggling:o,onDelete:s,onExport:u,onViewProfile:d,flash:f,layout:p=`list`}){let{usage:m}=e,h=m.session||m.weekly||m.weeklyOpus||m.weeklySonnet,b=n?.status??e.accountStatus,S=!!(n&&!n.hasRefreshToken&&n.expiresAt&&n.expiresAt<Math.floor(Date.now()/1e3)),C=_(n),w=p===`list`?``:p===`grid`?`flex flex-col justify-evenly overflow-hidden min-h-0`:`shrink-0 snap-start ${a||s||u||d?E.withActions:E.readOnly}`;return(0,y.jsxs)(T,{active:t,flash:f,dense:p!==`list`,className:[w,S?`opacity-50`:``].filter(Boolean).join(` `)||void 0,"data-testid":`account-card`,"data-account-id":e.accountId,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(`span`,{className:`text-sm font-medium truncate flex-1 min-w-0`,children:e.accountLabel??e.accountId.slice(0,8)}),t&&(0,y.jsx)(`span`,{className:`text-[10px] text-primary shrink-0 font-medium`,children:`Active`}),S&&(0,y.jsx)(`span`,{className:`text-[10px] text-error shrink-0 font-medium`,children:`Expired`}),!e.isOAuth&&!S&&(0,y.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0`,children:`API key`}),(0,y.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!S&&d&&n?.profileData&&(0,y.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,onClick:()=>d(n.profileData,e.accountId),title:`View profile`,"aria-label":`View profile`,children:(0,y.jsx)(i,{className:`size-4`})}),!S&&u&&e.isOAuth&&(0,y.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-primary hover:bg-surface-elevated transition-colors`,onClick:()=>u(e.accountId),title:`Export this account`,"aria-label":`Export this account`,children:(0,y.jsx)(r,{className:`size-4`})}),!S&&a&&(0,y.jsx)(l,{checked:b!==`disabled`,onCheckedChange:()=>a(e.accountId,b),disabled:o||b===`cooldown`,"aria-label":b===`disabled`?`Enable account`:`Disable account`,className:`cursor-pointer`}),s&&(0,y.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-error hover:bg-surface-elevated transition-colors`,onClick:()=>s(e.accountId,e.accountLabel??e.accountId.slice(0,8)),title:`Remove account`,"aria-label":`Remove account`,children:(0,y.jsx)(c,{className:`size-4`})})]})]}),h?(0,y.jsxs)(`div`,{className:`space-y-2`,children:[(0,y.jsx)(x,{label:`5-Hour Session`,bucket:m.session}),(0,y.jsx)(x,{label:`Weekly`,bucket:m.weekly}),(0,y.jsx)(x,{label:`Weekly (Opus)`,bucket:m.weeklyOpus}),(0,y.jsx)(x,{label:`Weekly (Sonnet)`,bucket:m.weeklySonnet})]}):(0,y.jsx)(`p`,{className:`text-xs text-text-subtle`,children:e.isOAuth?`No usage data yet`:`Usage tracking not available for API keys`}),(0,y.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] text-text-subtle flex-wrap`,children:[m.lastFetchedAt&&(0,y.jsxs)(`span`,{title:`Last usage data update`,children:[`↻ `,v(new Date(m.lastFetchedAt).getTime())]}),n?.expiresAt&&n.expiresAt*1e3>Date.now()&&(0,y.jsxs)(`span`,{title:`Token expires in`,children:[`⏱ `,g(n.expiresAt*1e3)]}),(0,y.jsxs)(`span`,{className:C.color,title:C.tip,children:[`© `,C.label]})]})]})}var O=e(t(),1);function k(e){let t=e.usage;return[t.session?.utilization,t.weekly?.utilization,t.weeklyOpus?.utilization,t.weeklySonnet?.utilization].join(`|`)}function A(e=!0){let[t,n]=(0,O.useState)([]),[r,i]=(0,O.useState)([]),[a,o]=(0,O.useState)(null),[s,c]=(0,O.useState)(!0),[l,p]=(0,O.useState)(!1),[m,h]=(0,O.useState)(new Set),g=(0,O.useRef)([]),_=(0,O.useRef)(void 0),v=(0,O.useCallback)(async()=>{let e=g.current.length>0;e?p(!0):c(!0);let[t,r,a]=await Promise.allSettled([f(),u(),d()]);if(t.status===`fulfilled`){let r=t.value;if(e){let e=new Map(g.current.map(e=>[e.accountId,k(e)])),t=new Set(r.filter(t=>e.get(t.accountId)!==k(t)).map(e=>e.accountId));t.size>0&&(h(t),clearTimeout(_.current),_.current=setTimeout(()=>h(new Set),1500))}g.current=r,n(r)}r.status===`fulfilled`&&i(r.value),a.status===`fulfilled`&&o(a.value?.id??null),c(!1),p(!1)},[]);return(0,O.useEffect)(()=>(e&&v(),()=>clearTimeout(_.current)),[e,v]),{usages:t,accounts:r,activeAccountId:a,initialLoading:s,refreshing:l,flashIds:m,reload:v}}export{S as a,b as c,T as i,v as l,D as n,C as o,w as r,x as s,A as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t}from"./vendor-markdown-Ls5AcU91.js";import{t as n}from"./settings-store-Brjd0QnO.js";import{r,t as i}from"./apply-theme-DxTXOAcV.js";import{t as a}from"./resolve-theme-DQk_YcsT.js";import{a as o}from"./index
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t}from"./vendor-markdown-Ls5AcU91.js";import{t as n}from"./settings-store-Brjd0QnO.js";import{r,t as i}from"./apply-theme-DxTXOAcV.js";import{t as a}from"./resolve-theme-DQk_YcsT.js";import{a as o}from"./index-B1bzKRjJ.js";var s=e(t(),1);function c(){let e=n(e=>e.themeStyle),t=n(e=>e.themeMode),c=n(e=>e.customThemeId),l=n(e=>e.customThemes),u=()=>o(r()??a(e,t,l,c)),[d,f]=(0,s.useState)(u);return(0,s.useEffect)(()=>{f(u());let e=()=>f(u());return window.addEventListener(i,e),()=>window.removeEventListener(i,e)},[e,t,c,l]),d}export{c as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{n as i}from"./api-client-oY1tC3tM.js";import{t as a}from"./settings-store-Brjd0QnO.js";import{t as o}from"./ws-auth-Dawx17PM.js";import{v as s}from"./index
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{n as i}from"./api-client-oY1tC3tM.js";import{t as a}from"./settings-store-Brjd0QnO.js";import{t as o}from"./ws-auth-Dawx17PM.js";import{v as s}from"./index-B1bzKRjJ.js";var c=r(`gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),l=r(`monitor-x`,[[`path`,{d:`m14.5 12.5-5-5`,key:`1jahn5`}],[`path`,{d:`m9.5 12.5 5-5`,key:`1k2t7b`}],[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`path`,{d:`M12 17v4`,key:`1riwvh`}],[`path`,{d:`M8 21h8`,key:`1ev6f3`}]]);function u(e,t,n=`8081`){let r=o(`/ws/remote-desktop`),i=e.protocol===`https:`?`wss:`:`ws:`;return t&&e.protocol!==`https:`?`ws://${e.hostname}:${n}${r}`:`${i}//${e.host}${r}`}var d=30;function f(e,t=d){return Math.round(e*1e6/t)}var p=e(t(),1);function m(e,t){return t||e}function h(e){let[t,n]=(0,p.useState)(`idle`),[r,i]=(0,p.useState)(null),a=(0,p.useRef)(null),o=(0,p.useRef)(null),s=(0,p.useRef)(!1),c=(0,p.useRef)(0),l=(0,p.useRef)(0),u=(0,p.useRef)(null),d=(0,p.useRef)(!1),h=(0,p.useCallback)(e=>{n(`error`),i(e)},[]),g=(0,p.useCallback)(async t=>{if(u.current=t,typeof VideoDecoder>`u`){n(`unsupported`),i(`This browser has no WebCodecs VideoDecoder — try Chrome, Edge, or Safari 16.4+.`);return}let r={codec:t,optimizeForLatency:!0};try{if(!(await VideoDecoder.isConfigSupported(r)).supported){n(`unsupported`),i(`This browser's decoder does not support ${t}.`);return}}catch(e){h(e.message);return}a.current?.close(),s.current=!1,l.current=0;let f=new VideoDecoder({output:t=>{c.current+=1;let n=e.current;n&&((n.width!==t.displayWidth||n.height!==t.displayHeight)&&(n.width=t.displayWidth,n.height=t.displayHeight),o.current||=n.getContext(`2d`),o.current?.drawImage(t,0,0,n.width,n.height)),t.close()},error:e=>_(e.message)});try{f.configure(r)}catch(e){h(e.message);return}a.current=f,d.current=!0,n(`ready`),i(null)},[e,h]),_=(0,p.useCallback)(e=>{if(!d.current)return;let t=u.current;if(!t){h(e);return}try{a.current?.close()}catch{}a.current=null,g(t)},[g,h]);return{status:t,errorMessage:r,configure:g,decodeAccessUnit:(0,p.useCallback)((e,t)=>{let n=a.current;if(!(!n||n.state!==`configured`)&&m(s.current,t)){t&&(s.current=!0);try{n.decode(new EncodedVideoChunk({type:t?`key`:`delta`,timestamp:f(l.current++),data:e}))}catch(e){_(e.message)}}},[_]),reset:(0,p.useCallback)(()=>{d.current=!1;try{a.current?.close()}catch{}a.current=null,s.current=!1,c.current=0,l.current=0,n(`idle`),i(null)},[]),getFrameCount:(0,p.useCallback)(()=>c.current,[])}}var g=5e3;function _(e,{displayId:t}={}){let n=(0,p.useRef)(null),r=(0,p.useRef)(0),[a,o]=(0,p.useState)(`connecting`),[s,c]=(0,p.useState)(null),[l,d]=(0,p.useState)(0),f=h(e),m=(0,p.useCallback)(e=>{let t=n.current;t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(e))},[]);(0,p.useEffect)(()=>{let e=!1,a=null;o(`connecting`),c(null),r.current=0,f.reset(),(async()=>{let s;try{s=(await i.post(`/api/remote-desktop/session`)).nonce}catch(t){e||(o(`error`),c(t.message));return}if(e)return;let l=u(window.location,!1,void 0),d=new WebSocket(l);d.binaryType=`arraybuffer`,n.current=d,d.onopen=()=>{d.send(JSON.stringify({type:`auth`,nonce:s,...t?{displayId:t}:{}})),a=setInterval(()=>m({type:`ping`}),g)},d.onmessage=t=>{if(typeof t.data==`string`){let n;try{n=JSON.parse(t.data)}catch{return}n.type===`config`&&typeof n.codec==`string`?f.configure(n.codec).then(()=>{e||o(`streaming`)}):n.type===`error`&&(o(`error`),c(typeof n.message==`string`?n.message:`Server error`));return}let n=new Uint8Array(t.data);n.length<1||(r.current+=n.length,f.decodeAccessUnit(n.subarray(1),n[0]===1))},d.onerror=()=>{e||(o(`error`),c(`WebSocket error`))},d.onclose=()=>{e||o(e=>e===`error`?e:`closed`)}})();let s=()=>{if(document.hidden||e)return;let t=n.current;t&&t.readyState===WebSocket.OPEN?t.send(JSON.stringify({type:`ping`})):d(e=>e+1)};return document.addEventListener(`visibilitychange`,s),()=>{e=!0,document.removeEventListener(`visibilitychange`,s),a&&clearInterval(a);try{n.current?.close()}catch{}n.current=null;try{f.reset()}catch{}}},[l,t]);let _=(0,p.useCallback)(()=>d(e=>e+1),[]),v=(0,p.useCallback)(()=>r.current,[]);return{connState:a,errorMessage:s,decoderStatus:f.status,decoderErrorMessage:f.errorMessage,sendMessage:m,reconnect:_,getTotalBytes:v,getFrameCount:f.getFrameCount}}function v(e){return Math.min(Math.max(e,0),1)}function y(e,t,n){let r=n.width>0?(e-n.left)/n.width:0,i=n.height>0?(t-n.top)/n.height:0;return{xFrac:v(r),yFrac:v(i)}}function b(e,t,n,r){let i=r.scale||1,a=n.left+n.width/2,o=n.top+n.height/2;return y(a+(e-a-r.panX)/i,o+(t-o-r.panY)/i,n)}function x(e,t,n){if(t<=0||n<=0||e.width<=0||e.height<=0)return e;let r=e.width/e.height,i=t/n;if(i>r){let t=e.width/i;return{left:e.left,top:e.top+(e.height-t)/2,width:e.width,height:t}}let a=e.height*i;return{left:e.left+(e.width-a)/2,top:e.top,width:a,height:e.height}}var S={fps:0,kbps:0};function C(e,t){let n=t.atMs-e.atMs;if(n<=0)return S;let r=n/1e3,i=Math.max(0,t.frameCount-e.frameCount),a=Math.max(0,t.totalBytes-e.totalBytes);return{fps:i/r,kbps:a/1024/r}}var w=n(),T=500;function E({canvasRef:e,getFrameCount:t,getTotalBytes:n,positionClassName:r=`left-1 top-1`}){let i=a(e=>e.remoteDesktopStatsVisible),[o,s]=(0,p.useState)({fps:0,kbps:0,width:0,height:0}),c=(0,p.useRef)({frameCount:0,totalBytes:0,atMs:0});return(0,p.useEffect)(()=>{if(!i)return;c.current={frameCount:t(),totalBytes:n(),atMs:performance.now()};let r=setInterval(()=>{let r={frameCount:t(),totalBytes:n(),atMs:performance.now()},{fps:i,kbps:a}=C(c.current,r);c.current=r;let o=e.current;s({fps:i,kbps:a,width:o?.width??0,height:o?.height??0})},T);return()=>clearInterval(r)},[i,e,t,n]),i?(0,w.jsxs)(`div`,{className:`pointer-events-none absolute z-40 rounded bg-black/60 px-1.5 py-0.5 font-mono text-[10px] text-white/80 ${r}`,"data-testid":`remote-desktop-stats-overlay`,children:[Math.round(o.fps),` fps · `,Math.round(o.kbps),` KB/s · `,o.width,`×`,o.height]}):null}function D(){let{caps:e}=s(!1),t=e?.displays??[],[n,r]=(0,p.useState)(void 0),i=t.find(e=>e.id===n)??t.find(e=>e.primary)??t[0];return{displays:t,displayId:n,current:i,select:r,next:(0,p.useCallback)(()=>{t.length<2||r(t[(t.findIndex(e=>e.id===i?.id)+1)%t.length]?.id)},[t,i])}}export{x as a,c,b as i,E as n,_ as o,y as r,l as s,D as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t}from"./vendor-markdown-Ls5AcU91.js";import{i as n}from"./index
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t}from"./vendor-markdown-Ls5AcU91.js";import{i as n}from"./index-B1bzKRjJ.js";var r=e(t(),1);function i({url:e,onMessage:t,autoConnect:i=!0}){let a=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let r=new n(e);return a.current=r,t&&r.onMessage(t),i&&r.connect(),()=>{r.disconnect(),a.current=null}},[e,i]),{send:(0,r.useCallback)(e=>{a.current?.send(e)},[]),connect:(0,r.useCallback)(()=>{a.current?.connect()},[]),disconnect:(0,r.useCallback)(()=>{a.current?.disconnect()},[])}}export{i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./download-DG3_9xXy.js";import{t as a}from"./file-exclamation-point-JzhTU2TX.js";import{t as o}from"./loader-circle-DPMrnLQ2.js";import"./api-client-oY1tC3tM.js";import"./portal-container-context-a399Hd9F.js";import{t as s}from"./button-BZtEJcUv.js";import{Bt as c,Gn as l,Ht as u,It as d,Kt as f,Lt as p,Mn as m,Rt as h,Vn as g,Vt as _,Wn as v,Yn as y,zt as b}from"./index--KWVW-Ga.js";import{a as ee,i as te,n as x,r as S,t as C}from"./media-url-VzecHk9g.js";import{o as w}from"./can-open-in-ppm-j3jh7fUo.js";var T=r(`flip-horizontal-2`,[[`path`,{d:`m3 7 5 5-5 5V7`,key:`couhi7`}],[`path`,{d:`m21 7-5 5 5 5V7`,key:`6ouia7`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`M12 14v2`,key:`8jcxud`}],[`path`,{d:`M12 8v2`,key:`1woqiv`}],[`path`,{d:`M12 2v2`,key:`tus03m`}]]),E=r(`flip-vertical-2`,[[`path`,{d:`m17 3-5 5-5-5h10`,key:`1ftt6x`}],[`path`,{d:`m17 21-5-5-5 5h10`,key:`1m0wmu`}],[`path`,{d:`M4 12H2`,key:`rhcxmi`}],[`path`,{d:`M10 12H8`,key:`s88cx1`}],[`path`,{d:`M16 12h-2`,key:`10asgb`}],[`path`,{d:`M22 12h-2`,key:`14jgyd`}]]),D=r(`maximize`,[[`path`,{d:`M8 3H5a2 2 0 0 0-2 2v3`,key:`1dcmit`}],[`path`,{d:`M21 8V5a2 2 0 0 0-2-2h-3`,key:`1e4gt3`}],[`path`,{d:`M3 16v3a2 2 0 0 0 2 2h3`,key:`wsl5sc`}],[`path`,{d:`M16 21h3a2 2 0 0 0 2-2v-3`,key:`18trek`}]]),O=r(`minimize`,[[`path`,{d:`M8 3v3a2 2 0 0 1-2 2H3`,key:`hohbtr`}],[`path`,{d:`M21 8h-3a2 2 0 0 1-2-2V3`,key:`5jw1f3`}],[`path`,{d:`M3 16h3a2 2 0 0 1 2 2v3`,key:`198tvr`}],[`path`,{d:`M16 21v-3a2 2 0 0 1 2-2h3`,key:`ph8mxp`}]]),k=r(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),A=r(`volume-2`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]),j=r(`volume-1`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}]]),M=r(`volume-x`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`line`,{x1:`22`,x2:`16`,y1:`9`,y2:`15`,key:`1ewh16`}],[`line`,{x1:`16`,x2:`22`,y1:`9`,y2:`15`,key:`5ykzw1`}]]),N=e(t(),1),P={rotation:0,flipH:!1,flipV:!1};function F(e){return{...e,rotation:(e.rotation+90)%360}}function I(e){return{...e,rotation:(e.rotation+270)%360}}function L(e){return e.rotation===0&&!e.flipH&&!e.flipV}function R(e){let t=[];return e.rotation&&t.push(`rotate(${e.rotation}deg)`),e.flipH&&t.push(`scaleX(-1)`),e.flipV&&t.push(`scaleY(-1)`),t.length?t.join(` `):`none`}function z(e,t){return e.rotation===90||e.rotation===270?{maxWidth:t.height,maxHeight:t.width}:{maxWidth:t.width,maxHeight:t.height}}var B=[[`Space / K`,`Play / pause`],[`← / →`,`Seek 5s`],[`J / L or Shift+← / →`,`Seek 10s`],[`↑ / ↓`,`Volume`],[`M`,`Mute`],[`F`,`Fullscreen`],[`< / >`,`Speed`],[`R / Shift+R`,`Rotate`]];function ne(e){return(0,N.useCallback)(t=>{let n=t.target;if(n.tagName===`INPUT`||n.tagName===`TEXTAREA`||n.isContentEditable||t.ctrlKey||t.metaKey||t.altKey)return;let r=!0;switch(t.key){case` `:case`k`:case`K`:e.togglePlay();break;case`ArrowLeft`:e.seekBy(t.shiftKey?-10:-5);break;case`ArrowRight`:e.seekBy(t.shiftKey?10:5);break;case`j`:case`J`:e.seekBy(-10);break;case`l`:case`L`:e.seekBy(10);break;case`ArrowUp`:e.volumeBy(.1);break;case`ArrowDown`:e.volumeBy(-.1);break;case`m`:case`M`:e.toggleMute();break;case`f`:case`F`:e.toggleFullscreen();break;case`<`:case`,`:e.speedStep(-1);break;case`>`:case`.`:e.speedStep(1);break;case`r`:e.rotate(1);break;case`R`:e.rotate(-1);break;default:r=!1}r&&t.preventDefault()},[e])}var V=n(),H=[.25,.5,.75,1,1.25,1.5,2,3];function U({speed:e,onSpeed:t,transform:n,onRotate:r,onFlipH:i,onFlipV:a,onResetTransform:o}){return(0,V.jsxs)(d,{children:[(0,V.jsx)(f,{asChild:!0,children:(0,V.jsxs)(s,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0 relative`,"aria-label":`Playback settings`,children:[(0,V.jsx)(g,{className:`size-5`}),e!==1&&(0,V.jsxs)(`span`,{className:`absolute -top-0.5 -right-0.5 text-[10px] leading-none px-1 rounded bg-primary text-primary-foreground tabular-nums`,children:[e,`x`]})]})}),(0,V.jsxs)(p,{align:`end`,className:`w-60 max-h-[70vh] overflow-y-auto`,children:[(0,V.jsx)(b,{children:`Speed`}),(0,V.jsx)(c,{value:String(e),onValueChange:e=>t(Number(e)),children:(0,V.jsx)(`div`,{className:`grid grid-cols-4 gap-1 px-1 pb-1`,children:H.map(e=>(0,V.jsxs)(_,{value:String(e),className:`justify-center pl-2 min-h-11 text-xs tabular-nums data-[state=checked]:bg-accent [&>span:first-child]:hidden`,children:[e,`x`]},e))})}),(0,V.jsx)(u,{}),(0,V.jsx)(b,{children:`Orientation`}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(1)},children:[(0,V.jsx)(v,{className:`size-4`}),` Rotate right `,(0,V.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`R`})]}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(-1)},children:[(0,V.jsx)(l,{className:`size-4`}),` Rotate left `,(0,V.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`⇧R`})]}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),i()},children:[(0,V.jsx)(T,{className:`size-4`}),` Flip horizontal `,n.flipH&&(0,V.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),a()},children:[(0,V.jsx)(E,{className:`size-4`}),` Flip vertical `,n.flipV&&(0,V.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),!L(n)&&(0,V.jsxs)(h,{className:`min-h-11`,onSelect:o,children:[(0,V.jsx)(m,{className:`size-4`}),` Reset orientation`]}),(0,V.jsx)(u,{}),(0,V.jsx)(b,{children:`Keyboard`}),(0,V.jsx)(`div`,{className:`px-2 pb-2 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-xs text-text-secondary`,children:B.map(([e,t])=>(0,V.jsxs)(`div`,{className:`contents`,children:[(0,V.jsx)(`kbd`,{className:`font-mono text-text-subtle whitespace-nowrap`,children:e}),(0,V.jsx)(`span`,{children:t})]},e))})]})]})}function re(e){let t=e.muted||e.volume===0?M:e.volume<.5?j:A,n=t=>e.onSeek(Number(t.target.value));return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-surface border-t border-border`,children:[(0,V.jsx)(s,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onTogglePlay,"aria-label":e.playing?`Pause`:`Play`,children:e.playing?(0,V.jsx)(k,{className:`size-5`}):(0,V.jsx)(y,{className:`size-5`})}),(0,V.jsxs)(`span`,{className:`text-xs tabular-nums text-text-secondary shrink-0 min-w-[4.5rem] text-center`,children:[W(e.position),e.duration?` / ${W(e.duration)}`:``]}),e.duration?(0,V.jsx)(`input`,{type:`range`,min:0,max:e.duration,step:.1,value:Math.min(e.position,e.duration),"aria-label":`Seek`,className:`flex-1 h-11 accent-primary cursor-pointer min-w-0`,onChange:t=>e.onScrub(Number(t.target.value)),onPointerUp:n,onKeyUp:n,onTouchEnd:n}):(0,V.jsx)(`div`,{className:`flex-1`}),(0,V.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(0,V.jsx)(s,{variant:`ghost`,size:`icon`,className:`size-11`,onClick:e.onToggleMute,"aria-label":e.muted?`Unmute`:`Mute`,children:(0,V.jsx)(t,{className:`size-5`})}),(0,V.jsx)(`input`,{type:`range`,min:0,max:1,step:.05,value:e.muted?0:e.volume,"aria-label":`Volume`,className:`hidden sm:block w-20 h-11 accent-primary cursor-pointer`,onChange:t=>e.onVolume(Number(t.target.value))})]}),(0,V.jsx)(U,{speed:e.speed,onSpeed:e.onSpeed,transform:e.transform,onRotate:e.onRotate,onFlipH:e.onFlipH,onFlipV:e.onFlipV,onResetTransform:e.onResetTransform}),(0,V.jsx)(s,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onToggleFullscreen,"aria-label":e.fullscreen?`Exit fullscreen`:`Fullscreen`,children:e.fullscreen?(0,V.jsx)(O,{className:`size-5`}):(0,V.jsx)(D,{className:`size-5`})})]})}function W(e){let t=Math.max(0,Math.floor(Number.isFinite(e)?e:0)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=n?String(r).padStart(2,`0`):String(r);return`${n?`${n}:`:``}${a}:${String(i).padStart(2,`0`)}`}function G({filePath:e,projectName:t,mode:n,probeDuration:r=null,onNativeError:i}){let a=(0,N.useRef)(null),c=(0,N.useRef)(null),l=(0,N.useRef)(null),u=(0,N.useRef)(!0),[d]=(0,N.useState)(C),[f,p]=(0,N.useState)(0),[m,h]=(0,N.useState)(0),[g,_]=(0,N.useState)(null),[v,y]=(0,N.useState)(!1),[b,x]=(0,N.useState)(!0),[w,T]=(0,N.useState)(null),[E,D]=(0,N.useState)(1),[O,k]=(0,N.useState)(!1),[A,j]=(0,N.useState)(1),[M,L]=(0,N.useState)(P),[B,U]=(0,N.useState)(!1),[W,G]=(0,N.useState)({width:0,height:0}),[K,q]=(0,N.useState)(null),J=n===`transcode`,Y=J?ee(e,t,f,d):S(e,t),X=J?r:g,ie=w??(J?f+m:m);(0,N.useEffect)(()=>{h(0),x(!0),q(null)},[Y]),(0,N.useEffect)(()=>{p(0),_(null),L(P)},[e,n]),(0,N.useEffect)(()=>{let e=l.current;e&&(e.volume=E,e.muted=O)},[E,O]),(0,N.useEffect)(()=>{let e=l.current;e&&(e.playbackRate=A)},[A,Y]),(0,N.useEffect)(()=>{let n=l.current,r=()=>{J&&te(e,t,d)};return window.addEventListener(`pagehide`,r),()=>{window.removeEventListener(`pagehide`,r),n&&!n.isConnected&&(n.pause(),n.removeAttribute(`src`),n.load(),r())}},[e,t,J,d]),(0,N.useEffect)(()=>{let e=()=>U(document.fullscreenElement===a.current);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]),(0,N.useEffect)(()=>{let e=c.current;if(!e)return;let t=new ResizeObserver(()=>G({width:e.clientWidth,height:e.clientHeight}));return t.observe(e),()=>t.disconnect()},[]);let Z=(0,N.useCallback)(e=>{let t=l.current,n=Math.max(0,X?Math.min(e,X-.5):e);if(T(null),!J){t&&(t.currentTime=n);return}Math.abs(n-(f+(t?.currentTime??0)))<.5||p(n)},[X,J,f]),Q=(0,N.useMemo)(()=>({togglePlay:()=>{let e=l.current;e&&(u.current=e.paused,e.paused?e.play().catch(()=>{}):e.pause())},seekBy:e=>Z((J?f:0)+(l.current?.currentTime??0)+e),toggleFullscreen:()=>{document.fullscreenElement?document.exitFullscreen():a.current?.requestFullscreen?.()},toggleMute:()=>k(e=>!e),volumeBy:e=>{k(!1),D(t=>Math.min(1,Math.max(0,Math.round((t+e)*100)/100)))},speedStep:e=>j(t=>{let n=H.indexOf(t);return H[Math.min(H.length-1,Math.max(0,(n===-1?3:n)+e))]??1}),rotate:e=>L(t=>e===1?F(t):I(t))}),[Z,J,f]),ae=ne(Q),$=z(M,W),oe=()=>{q(null),p(e=>e+.001)};return(0,V.jsxs)(`div`,{ref:a,"data-testid":`video-player`,tabIndex:0,onKeyDown:ae,className:`flex flex-col h-full bg-black outline-none focus-visible:ring-1 focus-visible:ring-primary/60`,children:[(0,V.jsxs)(`div`,{ref:c,className:`relative flex-1 min-h-0 flex items-center justify-center overflow-hidden`,onClick:e=>{a.current?.focus(),e.detail===1&&Q.togglePlay()},onDoubleClick:Q.toggleFullscreen,children:[(0,V.jsx)(`video`,{ref:l,src:Y,autoPlay:!0,playsInline:!0,preload:J?`auto`:`metadata`,style:{transform:R(M),maxWidth:$.maxWidth||void 0,maxHeight:$.maxHeight||void 0},onLoadedMetadata:e=>{let t=e.currentTarget;t.playbackRate=A,t.volume=E,t.muted=O,!J&&Number.isFinite(t.duration)&&_(t.duration),J&&!u.current&&t.pause()},onPlay:()=>y(!0),onPause:()=>y(!1),onWaiting:()=>x(!0),onPlaying:()=>x(!1),onCanPlay:()=>x(!1),onTimeUpdate:e=>h(e.currentTarget.currentTime),onEnded:()=>{y(!1),u.current=!1},onError:()=>{J?q(`Transcoding failed. ffmpeg may have stopped or the file is corrupt.`):i?.()}}),b&&!K&&(0,V.jsx)(o,{className:`absolute size-8 animate-spin text-white/80 pointer-events-none`}),K&&(0,V.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/85 text-text-secondary p-4 text-center`,onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:[(0,V.jsx)(`p`,{className:`text-sm`,children:K}),(0,V.jsx)(s,{variant:`outline`,size:`sm`,className:`h-11 px-4`,onClick:oe,children:`Retry`})]})]}),(0,V.jsx)(re,{playing:v,position:ie,duration:X,volume:E,muted:O,speed:A,transform:M,fullscreen:B,onTogglePlay:Q.togglePlay,onScrub:T,onSeek:Z,onVolume:e=>{D(e),k(e===0)},onToggleMute:Q.toggleMute,onSpeed:j,onRotate:Q.rotate,onFlipH:()=>L(e=>({...e,flipH:!e.flipH})),onFlipV:()=>L(e=>({...e,flipV:!e.flipV})),onResetTransform:()=>L(P),onToggleFullscreen:Q.toggleFullscreen})]})}var K=new Set([`mp4`,`m4v`,`webm`,`ogg`,`ogv`,`mov`]);function q({filePath:e,projectName:t}){let n=w(e),[r,i]=(0,N.useState)(()=>K.has(n)?{kind:`native`}:{kind:`probing`});return(0,N.useEffect)(()=>{i(K.has(w(e))?{kind:`native`}:{kind:`probing`})},[e]),(0,N.useEffect)(()=>{if(r.kind!==`probing`)return;let n=!1;return x(e,t).then(e=>{n||i(e.transcodable?{kind:`transcode`,probe:e}:{kind:`unsupported`,probe:e})}).catch(()=>{n||i({kind:`unsupported`,probe:null})}),()=>{n=!0}},[r.kind,e,t]),r.kind===`probing`?(0,V.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,V.jsx)(o,{className:`size-5 animate-spin text-text-subtle`})}):r.kind===`transcode`?(0,V.jsx)(G,{filePath:e,projectName:t,mode:`transcode`,probeDuration:r.probe.duration}):r.kind===`unsupported`?(0,V.jsx)(J,{filePath:e,projectName:t,probe:r.probe}):(0,V.jsx)(G,{filePath:e,projectName:t,mode:`native`,onNativeError:()=>i({kind:`probing`})})}function J({filePath:e,projectName:t,probe:n}){let r=[n?.video?.codec,n?.audio?.codec].filter(Boolean).join(` + `);return(0,V.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary p-6 text-center`,children:[(0,V.jsx)(a,{className:`size-10 text-text-subtle`}),(0,V.jsxs)(`p`,{className:`text-sm`,children:[`This video cannot be played in the browser`,r?` (${r})`:``,`.`]}),(0,V.jsxs)(`p`,{className:`text-xs text-text-subtle max-w-sm`,children:[`Install `,(0,V.jsx)(`code`,{children:`ffmpeg`}),` on the PPM server (e.g. `,(0,V.jsx)(`code`,{children:`winget install ffmpeg`}),`, `,(0,V.jsx)(`code`,{children:`brew install ffmpeg`}),`,`,` `,(0,V.jsx)(`code`,{children:`apt install ffmpeg`}),`) and restart PPM to transcode it on the fly.`]}),(0,V.jsx)(s,{asChild:!0,variant:`outline`,size:`sm`,className:`h-11 px-4`,children:(0,V.jsxs)(`a`,{href:`${S(e,t)}&download=true`,download:!0,children:[(0,V.jsx)(i,{className:`size-4 mr-2`}),` Download file`]})})]})}export{q as VideoPreview};
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{S as t,x as n}from"./vendor-markdown-Ls5AcU91.js";import"./vendor-ui-CaeeFO0B.js";import{t as r}from"./createLucideIcon-D8pyde1A.js";import{t as i}from"./download-DG3_9xXy.js";import{t as a}from"./file-exclamation-point-JzhTU2TX.js";import{t as o}from"./loader-circle-DPMrnLQ2.js";import"./api-client-oY1tC3tM.js";import"./portal-container-context-a399Hd9F.js";import{t as s}from"./button-BZtEJcUv.js";import{Bt as c,Gn as l,Ht as u,It as d,Kt as f,Lt as p,Mn as m,Rt as h,Vn as g,Vt as _,Wn as v,Yn as y,zt as b}from"./index-B1bzKRjJ.js";import{a as ee,i as te,n as x,r as S,t as C}from"./media-url-VzecHk9g.js";import{o as w}from"./can-open-in-ppm-j3jh7fUo.js";var T=r(`flip-horizontal-2`,[[`path`,{d:`m3 7 5 5-5 5V7`,key:`couhi7`}],[`path`,{d:`m21 7-5 5 5 5V7`,key:`6ouia7`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`M12 14v2`,key:`8jcxud`}],[`path`,{d:`M12 8v2`,key:`1woqiv`}],[`path`,{d:`M12 2v2`,key:`tus03m`}]]),E=r(`flip-vertical-2`,[[`path`,{d:`m17 3-5 5-5-5h10`,key:`1ftt6x`}],[`path`,{d:`m17 21-5-5-5 5h10`,key:`1m0wmu`}],[`path`,{d:`M4 12H2`,key:`rhcxmi`}],[`path`,{d:`M10 12H8`,key:`s88cx1`}],[`path`,{d:`M16 12h-2`,key:`10asgb`}],[`path`,{d:`M22 12h-2`,key:`14jgyd`}]]),D=r(`maximize`,[[`path`,{d:`M8 3H5a2 2 0 0 0-2 2v3`,key:`1dcmit`}],[`path`,{d:`M21 8V5a2 2 0 0 0-2-2h-3`,key:`1e4gt3`}],[`path`,{d:`M3 16v3a2 2 0 0 0 2 2h3`,key:`wsl5sc`}],[`path`,{d:`M16 21h3a2 2 0 0 0 2-2v-3`,key:`18trek`}]]),O=r(`minimize`,[[`path`,{d:`M8 3v3a2 2 0 0 1-2 2H3`,key:`hohbtr`}],[`path`,{d:`M21 8h-3a2 2 0 0 1-2-2V3`,key:`5jw1f3`}],[`path`,{d:`M3 16h3a2 2 0 0 1 2 2v3`,key:`198tvr`}],[`path`,{d:`M16 21v-3a2 2 0 0 1 2-2h3`,key:`ph8mxp`}]]),k=r(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),A=r(`volume-2`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}],[`path`,{d:`M19.364 18.364a9 9 0 0 0 0-12.728`,key:`ijwkga`}]]),j=r(`volume-1`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`path`,{d:`M16 9a5 5 0 0 1 0 6`,key:`1q6k2b`}]]),M=r(`volume-x`,[[`path`,{d:`M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z`,key:`uqj9uw`}],[`line`,{x1:`22`,x2:`16`,y1:`9`,y2:`15`,key:`1ewh16`}],[`line`,{x1:`16`,x2:`22`,y1:`9`,y2:`15`,key:`5ykzw1`}]]),N=e(t(),1),P={rotation:0,flipH:!1,flipV:!1};function F(e){return{...e,rotation:(e.rotation+90)%360}}function I(e){return{...e,rotation:(e.rotation+270)%360}}function L(e){return e.rotation===0&&!e.flipH&&!e.flipV}function R(e){let t=[];return e.rotation&&t.push(`rotate(${e.rotation}deg)`),e.flipH&&t.push(`scaleX(-1)`),e.flipV&&t.push(`scaleY(-1)`),t.length?t.join(` `):`none`}function z(e,t){return e.rotation===90||e.rotation===270?{maxWidth:t.height,maxHeight:t.width}:{maxWidth:t.width,maxHeight:t.height}}var B=[[`Space / K`,`Play / pause`],[`← / →`,`Seek 5s`],[`J / L or Shift+← / →`,`Seek 10s`],[`↑ / ↓`,`Volume`],[`M`,`Mute`],[`F`,`Fullscreen`],[`< / >`,`Speed`],[`R / Shift+R`,`Rotate`]];function ne(e){return(0,N.useCallback)(t=>{let n=t.target;if(n.tagName===`INPUT`||n.tagName===`TEXTAREA`||n.isContentEditable||t.ctrlKey||t.metaKey||t.altKey)return;let r=!0;switch(t.key){case` `:case`k`:case`K`:e.togglePlay();break;case`ArrowLeft`:e.seekBy(t.shiftKey?-10:-5);break;case`ArrowRight`:e.seekBy(t.shiftKey?10:5);break;case`j`:case`J`:e.seekBy(-10);break;case`l`:case`L`:e.seekBy(10);break;case`ArrowUp`:e.volumeBy(.1);break;case`ArrowDown`:e.volumeBy(-.1);break;case`m`:case`M`:e.toggleMute();break;case`f`:case`F`:e.toggleFullscreen();break;case`<`:case`,`:e.speedStep(-1);break;case`>`:case`.`:e.speedStep(1);break;case`r`:e.rotate(1);break;case`R`:e.rotate(-1);break;default:r=!1}r&&t.preventDefault()},[e])}var V=n(),H=[.25,.5,.75,1,1.25,1.5,2,3];function U({speed:e,onSpeed:t,transform:n,onRotate:r,onFlipH:i,onFlipV:a,onResetTransform:o}){return(0,V.jsxs)(d,{children:[(0,V.jsx)(f,{asChild:!0,children:(0,V.jsxs)(s,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0 relative`,"aria-label":`Playback settings`,children:[(0,V.jsx)(g,{className:`size-5`}),e!==1&&(0,V.jsxs)(`span`,{className:`absolute -top-0.5 -right-0.5 text-[10px] leading-none px-1 rounded bg-primary text-primary-foreground tabular-nums`,children:[e,`x`]})]})}),(0,V.jsxs)(p,{align:`end`,className:`w-60 max-h-[70vh] overflow-y-auto`,children:[(0,V.jsx)(b,{children:`Speed`}),(0,V.jsx)(c,{value:String(e),onValueChange:e=>t(Number(e)),children:(0,V.jsx)(`div`,{className:`grid grid-cols-4 gap-1 px-1 pb-1`,children:H.map(e=>(0,V.jsxs)(_,{value:String(e),className:`justify-center pl-2 min-h-11 text-xs tabular-nums data-[state=checked]:bg-accent [&>span:first-child]:hidden`,children:[e,`x`]},e))})}),(0,V.jsx)(u,{}),(0,V.jsx)(b,{children:`Orientation`}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(1)},children:[(0,V.jsx)(v,{className:`size-4`}),` Rotate right `,(0,V.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`R`})]}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(-1)},children:[(0,V.jsx)(l,{className:`size-4`}),` Rotate left `,(0,V.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`⇧R`})]}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),i()},children:[(0,V.jsx)(T,{className:`size-4`}),` Flip horizontal `,n.flipH&&(0,V.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),(0,V.jsxs)(h,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),a()},children:[(0,V.jsx)(E,{className:`size-4`}),` Flip vertical `,n.flipV&&(0,V.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),!L(n)&&(0,V.jsxs)(h,{className:`min-h-11`,onSelect:o,children:[(0,V.jsx)(m,{className:`size-4`}),` Reset orientation`]}),(0,V.jsx)(u,{}),(0,V.jsx)(b,{children:`Keyboard`}),(0,V.jsx)(`div`,{className:`px-2 pb-2 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-xs text-text-secondary`,children:B.map(([e,t])=>(0,V.jsxs)(`div`,{className:`contents`,children:[(0,V.jsx)(`kbd`,{className:`font-mono text-text-subtle whitespace-nowrap`,children:e}),(0,V.jsx)(`span`,{children:t})]},e))})]})]})}function re(e){let t=e.muted||e.volume===0?M:e.volume<.5?j:A,n=t=>e.onSeek(Number(t.target.value));return(0,V.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-surface border-t border-border`,children:[(0,V.jsx)(s,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onTogglePlay,"aria-label":e.playing?`Pause`:`Play`,children:e.playing?(0,V.jsx)(k,{className:`size-5`}):(0,V.jsx)(y,{className:`size-5`})}),(0,V.jsxs)(`span`,{className:`text-xs tabular-nums text-text-secondary shrink-0 min-w-[4.5rem] text-center`,children:[W(e.position),e.duration?` / ${W(e.duration)}`:``]}),e.duration?(0,V.jsx)(`input`,{type:`range`,min:0,max:e.duration,step:.1,value:Math.min(e.position,e.duration),"aria-label":`Seek`,className:`flex-1 h-11 accent-primary cursor-pointer min-w-0`,onChange:t=>e.onScrub(Number(t.target.value)),onPointerUp:n,onKeyUp:n,onTouchEnd:n}):(0,V.jsx)(`div`,{className:`flex-1`}),(0,V.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(0,V.jsx)(s,{variant:`ghost`,size:`icon`,className:`size-11`,onClick:e.onToggleMute,"aria-label":e.muted?`Unmute`:`Mute`,children:(0,V.jsx)(t,{className:`size-5`})}),(0,V.jsx)(`input`,{type:`range`,min:0,max:1,step:.05,value:e.muted?0:e.volume,"aria-label":`Volume`,className:`hidden sm:block w-20 h-11 accent-primary cursor-pointer`,onChange:t=>e.onVolume(Number(t.target.value))})]}),(0,V.jsx)(U,{speed:e.speed,onSpeed:e.onSpeed,transform:e.transform,onRotate:e.onRotate,onFlipH:e.onFlipH,onFlipV:e.onFlipV,onResetTransform:e.onResetTransform}),(0,V.jsx)(s,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onToggleFullscreen,"aria-label":e.fullscreen?`Exit fullscreen`:`Fullscreen`,children:e.fullscreen?(0,V.jsx)(O,{className:`size-5`}):(0,V.jsx)(D,{className:`size-5`})})]})}function W(e){let t=Math.max(0,Math.floor(Number.isFinite(e)?e:0)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=n?String(r).padStart(2,`0`):String(r);return`${n?`${n}:`:``}${a}:${String(i).padStart(2,`0`)}`}function G({filePath:e,projectName:t,mode:n,probeDuration:r=null,onNativeError:i}){let a=(0,N.useRef)(null),c=(0,N.useRef)(null),l=(0,N.useRef)(null),u=(0,N.useRef)(!0),[d]=(0,N.useState)(C),[f,p]=(0,N.useState)(0),[m,h]=(0,N.useState)(0),[g,_]=(0,N.useState)(null),[v,y]=(0,N.useState)(!1),[b,x]=(0,N.useState)(!0),[w,T]=(0,N.useState)(null),[E,D]=(0,N.useState)(1),[O,k]=(0,N.useState)(!1),[A,j]=(0,N.useState)(1),[M,L]=(0,N.useState)(P),[B,U]=(0,N.useState)(!1),[W,G]=(0,N.useState)({width:0,height:0}),[K,q]=(0,N.useState)(null),J=n===`transcode`,Y=J?ee(e,t,f,d):S(e,t),X=J?r:g,ie=w??(J?f+m:m);(0,N.useEffect)(()=>{h(0),x(!0),q(null)},[Y]),(0,N.useEffect)(()=>{p(0),_(null),L(P)},[e,n]),(0,N.useEffect)(()=>{let e=l.current;e&&(e.volume=E,e.muted=O)},[E,O]),(0,N.useEffect)(()=>{let e=l.current;e&&(e.playbackRate=A)},[A,Y]),(0,N.useEffect)(()=>{let n=l.current,r=()=>{J&&te(e,t,d)};return window.addEventListener(`pagehide`,r),()=>{window.removeEventListener(`pagehide`,r),n&&!n.isConnected&&(n.pause(),n.removeAttribute(`src`),n.load(),r())}},[e,t,J,d]),(0,N.useEffect)(()=>{let e=()=>U(document.fullscreenElement===a.current);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]),(0,N.useEffect)(()=>{let e=c.current;if(!e)return;let t=new ResizeObserver(()=>G({width:e.clientWidth,height:e.clientHeight}));return t.observe(e),()=>t.disconnect()},[]);let Z=(0,N.useCallback)(e=>{let t=l.current,n=Math.max(0,X?Math.min(e,X-.5):e);if(T(null),!J){t&&(t.currentTime=n);return}Math.abs(n-(f+(t?.currentTime??0)))<.5||p(n)},[X,J,f]),Q=(0,N.useMemo)(()=>({togglePlay:()=>{let e=l.current;e&&(u.current=e.paused,e.paused?e.play().catch(()=>{}):e.pause())},seekBy:e=>Z((J?f:0)+(l.current?.currentTime??0)+e),toggleFullscreen:()=>{document.fullscreenElement?document.exitFullscreen():a.current?.requestFullscreen?.()},toggleMute:()=>k(e=>!e),volumeBy:e=>{k(!1),D(t=>Math.min(1,Math.max(0,Math.round((t+e)*100)/100)))},speedStep:e=>j(t=>{let n=H.indexOf(t);return H[Math.min(H.length-1,Math.max(0,(n===-1?3:n)+e))]??1}),rotate:e=>L(t=>e===1?F(t):I(t))}),[Z,J,f]),ae=ne(Q),$=z(M,W),oe=()=>{q(null),p(e=>e+.001)};return(0,V.jsxs)(`div`,{ref:a,"data-testid":`video-player`,tabIndex:0,onKeyDown:ae,className:`flex flex-col h-full bg-black outline-none focus-visible:ring-1 focus-visible:ring-primary/60`,children:[(0,V.jsxs)(`div`,{ref:c,className:`relative flex-1 min-h-0 flex items-center justify-center overflow-hidden`,onClick:e=>{a.current?.focus(),e.detail===1&&Q.togglePlay()},onDoubleClick:Q.toggleFullscreen,children:[(0,V.jsx)(`video`,{ref:l,src:Y,autoPlay:!0,playsInline:!0,preload:J?`auto`:`metadata`,style:{transform:R(M),maxWidth:$.maxWidth||void 0,maxHeight:$.maxHeight||void 0},onLoadedMetadata:e=>{let t=e.currentTarget;t.playbackRate=A,t.volume=E,t.muted=O,!J&&Number.isFinite(t.duration)&&_(t.duration),J&&!u.current&&t.pause()},onPlay:()=>y(!0),onPause:()=>y(!1),onWaiting:()=>x(!0),onPlaying:()=>x(!1),onCanPlay:()=>x(!1),onTimeUpdate:e=>h(e.currentTarget.currentTime),onEnded:()=>{y(!1),u.current=!1},onError:()=>{J?q(`Transcoding failed. ffmpeg may have stopped or the file is corrupt.`):i?.()}}),b&&!K&&(0,V.jsx)(o,{className:`absolute size-8 animate-spin text-white/80 pointer-events-none`}),K&&(0,V.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/85 text-text-secondary p-4 text-center`,onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:[(0,V.jsx)(`p`,{className:`text-sm`,children:K}),(0,V.jsx)(s,{variant:`outline`,size:`sm`,className:`h-11 px-4`,onClick:oe,children:`Retry`})]})]}),(0,V.jsx)(re,{playing:v,position:ie,duration:X,volume:E,muted:O,speed:A,transform:M,fullscreen:B,onTogglePlay:Q.togglePlay,onScrub:T,onSeek:Z,onVolume:e=>{D(e),k(e===0)},onToggleMute:Q.toggleMute,onSpeed:j,onRotate:Q.rotate,onFlipH:()=>L(e=>({...e,flipH:!e.flipH})),onFlipV:()=>L(e=>({...e,flipV:!e.flipV})),onResetTransform:()=>L(P),onToggleFullscreen:Q.toggleFullscreen})]})}var K=new Set([`mp4`,`m4v`,`webm`,`ogg`,`ogv`,`mov`]);function q({filePath:e,projectName:t}){let n=w(e),[r,i]=(0,N.useState)(()=>K.has(n)?{kind:`native`}:{kind:`probing`});return(0,N.useEffect)(()=>{i(K.has(w(e))?{kind:`native`}:{kind:`probing`})},[e]),(0,N.useEffect)(()=>{if(r.kind!==`probing`)return;let n=!1;return x(e,t).then(e=>{n||i(e.transcodable?{kind:`transcode`,probe:e}:{kind:`unsupported`,probe:e})}).catch(()=>{n||i({kind:`unsupported`,probe:null})}),()=>{n=!0}},[r.kind,e,t]),r.kind===`probing`?(0,V.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,V.jsx)(o,{className:`size-5 animate-spin text-text-subtle`})}):r.kind===`transcode`?(0,V.jsx)(G,{filePath:e,projectName:t,mode:`transcode`,probeDuration:r.probe.duration}):r.kind===`unsupported`?(0,V.jsx)(J,{filePath:e,projectName:t,probe:r.probe}):(0,V.jsx)(G,{filePath:e,projectName:t,mode:`native`,onNativeError:()=>i({kind:`probing`})})}function J({filePath:e,projectName:t,probe:n}){let r=[n?.video?.codec,n?.audio?.codec].filter(Boolean).join(` + `);return(0,V.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary p-6 text-center`,children:[(0,V.jsx)(a,{className:`size-10 text-text-subtle`}),(0,V.jsxs)(`p`,{className:`text-sm`,children:[`This video cannot be played in the browser`,r?` (${r})`:``,`.`]}),(0,V.jsxs)(`p`,{className:`text-xs text-text-subtle max-w-sm`,children:[`Install `,(0,V.jsx)(`code`,{children:`ffmpeg`}),` on the PPM server (e.g. `,(0,V.jsx)(`code`,{children:`winget install ffmpeg`}),`, `,(0,V.jsx)(`code`,{children:`brew install ffmpeg`}),`,`,` `,(0,V.jsx)(`code`,{children:`apt install ffmpeg`}),`) and restart PPM to transcode it on the fly.`]}),(0,V.jsx)(s,{asChild:!0,variant:`outline`,size:`sm`,className:`h-11 px-4`,children:(0,V.jsxs)(`a`,{href:`${S(e,t)}&download=true`,download:!0,children:[(0,V.jsx)(i,{className:`size-4 mr-2`}),` Download file`]})})]})}export{q as VideoPreview};
|
package/dist/web/index.html
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
40
40
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
41
41
|
<link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
|
42
|
-
<script type="module" crossorigin src="/assets/index
|
|
42
|
+
<script type="module" crossorigin src="/assets/index-B1bzKRjJ.js"></script>
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-FhOqtrmT.js">
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assets/vendor-mermaid-BKWscKt0.js">
|
|
45
45
|
<link rel="modulepreload" crossorigin href="/assets/vendor-markdown-Ls5AcU91.js">
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
<link rel="modulepreload" crossorigin href="/assets/tab-store-PZsP5ZwG.js">
|
|
82
82
|
<link rel="modulepreload" crossorigin href="/assets/apply-theme-DxTXOAcV.js">
|
|
83
83
|
<link rel="modulepreload" crossorigin href="/assets/resolve-theme-DQk_YcsT.js">
|
|
84
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
84
|
+
<link rel="stylesheet" crossorigin href="/assets/index-nP3uxXvR.css">
|
|
85
85
|
<link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
|
|
86
86
|
<body class="text-text font-sans antialiased" style="background: var(--bg)">
|
|
87
87
|
<!-- FOUC guard: apply the persisted theme mode before first paint.
|