@ironmussa/funny 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -6
- package/bin/funny.js +88 -26
- package/package.json +3 -1
- package/packages/client/dist/assets/{AcceptInvitePage-BjMGmkD4.js → AcceptInvitePage-rU3bsShb.js} +1 -1
- package/packages/client/dist/assets/{ActivityPane-Cl-bUP3W.js → ActivityPane-_esdCTUa.js} +1 -1
- package/packages/client/dist/assets/{AddProjectView-DZuks8BQ.js → AddProjectView-DbYb4Fj3.js} +1 -1
- package/packages/client/dist/assets/{AllThreadsView-DdT3QdFb.js → AllThreadsView-BydYhYmA.js} +1 -1
- package/packages/client/dist/assets/{AnalyticsView-b_BZhrh1.js → AnalyticsView-BB2Ry67l.js} +1 -1
- package/packages/client/dist/assets/{App-CY9kuarV.js → App-DUg9Ibif.js} +3 -3
- package/packages/client/dist/assets/{AutomationInboxView-BQfGidRk.js → AutomationInboxView-BwTXxoaj.js} +1 -1
- package/packages/client/dist/assets/{BrowserPanel-CY_wB1AB.js → BrowserPanel-DQ8qgIKh.js} +1 -1
- package/packages/client/dist/assets/{BrowserPreview-2gdJqMpN.js → BrowserPreview-CYbez9uL.js} +1 -1
- package/packages/client/dist/assets/{CircuitBreakerDialog-B6kP1aCS.js → CircuitBreakerDialog-DWNXYG6L.js} +1 -1
- package/packages/client/dist/assets/{CommandPalette-DeBQCdqo.js → CommandPalette-Xtu8FVFI.js} +1 -1
- package/packages/client/dist/assets/{CommentsPane-JY0CN5R2.js → CommentsPane-BbeD18iG.js} +1 -1
- package/packages/client/dist/assets/{CsvTable-CaJ4BQ4d.js → CsvTable-CRwHp6ct.js} +1 -1
- package/packages/client/dist/assets/{FileSearchDialog-C2RhpM7Z.js → FileSearchDialog-BHaSfVdS.js} +1 -1
- package/packages/client/dist/assets/{FileTree-Bl25zGAE.js → FileTree-Dnh5srh4.js} +1 -1
- package/packages/client/dist/assets/{FolderPicker-CpXi_ZrF.js → FolderPicker-BBAhdFeF.js} +1 -1
- package/packages/client/dist/assets/{GeneralSettingsView-f8pBncJY.js → GeneralSettingsView-Q-zEISEg.js} +2 -2
- package/packages/client/dist/assets/{GitProgressModal-CJG5MsSI.js → GitProgressModal-2BUdcYw_.js} +1 -1
- package/packages/client/dist/assets/{LiveColumnsView-DwUkXA8m.js → LiveColumnsView-CWo09zTG.js} +1 -1
- package/packages/client/dist/assets/{LoginPage-CkgRw9Ji.js → LoginPage-BPM6y1Yj.js} +1 -1
- package/packages/client/dist/assets/{MediaPreview-DmMe4hGN.js → MediaPreview-JO18IhtD.js} +1 -1
- package/packages/client/dist/assets/{MediaPreviewDialog-DHIv3gai.js → MediaPreviewDialog-HOtpKIQD.js} +1 -1
- package/packages/client/dist/assets/{MermaidBlock-BZLj2TmL.js → MermaidBlock-DxJPnpCS.js} +1 -1
- package/packages/client/dist/assets/{MobilePage-BRWC2SVo.js → MobilePage-B9LixzUJ.js} +2 -2
- package/packages/client/dist/assets/{MonacoEditorDialog-CTUQ5NFr.js → MonacoEditorDialog-BGuOUdlF.js} +1 -1
- package/packages/client/dist/assets/{OrchestratorView-wTF6Ae0A.js → OrchestratorView-BiNJtR8P.js} +1 -1
- package/packages/client/dist/assets/{PreferencesPanel-CpIL485D.js → PreferencesPanel-DEJ3B3Mx.js} +1 -1
- package/packages/client/dist/assets/{PreviewBrowser-CEXO1tHq.js → PreviewBrowser-pI5xiPAQ.js} +1 -1
- package/packages/client/dist/assets/{ProjectFilesPane-02_p9zry.js → ProjectFilesPane-H9zl1XxW.js} +1 -1
- package/packages/client/dist/assets/{ProjectHeader-TWkvwAxm.js → ProjectHeader-CewLbcv6.js} +1 -1
- package/packages/client/dist/assets/{ProjectHooksSettings-CIaY32WM.js → ProjectHooksSettings-Dz9pRWek.js} +1 -1
- package/packages/client/dist/assets/{ReviewPane-DHTvq8t1.js → ReviewPane-CdspHwl1.js} +1 -1
- package/packages/client/dist/assets/{SearchablePicker-BJnuJVEi.js → SearchablePicker-BlagKlJZ.js} +1 -1
- package/packages/client/dist/assets/{SettingsDetailView-eBDvn5cS.js → SettingsDetailView-DdyYDZde.js} +1 -1
- package/packages/client/dist/assets/{SettingsPageContent-CiHRUvG3.js → SettingsPageContent-ChL9gIzA.js} +3 -3
- package/packages/client/dist/assets/{SetupWizard-B8rFRPma.js → SetupWizard-B3KuWJkX.js} +1 -1
- package/packages/client/dist/assets/{Sidebar-CPU0yoaQ.js → Sidebar-Cp0Ic-cc.js} +1 -1
- package/packages/client/dist/assets/{StashTab-BswTfOlb.js → StashTab-CAqDgV-y.js} +1 -1
- package/packages/client/dist/assets/{TestRunnerPane-DZXDbHCu.js → TestRunnerPane-RwW_FDpa.js} +1 -1
- package/packages/client/dist/assets/{TextSearchDialog-BUMBp448.js → TextSearchDialog-Q9Pvzolm.js} +1 -1
- package/packages/client/dist/assets/{ThreadPowerline-CSegubLW.js → ThreadPowerline-DVWTyxRC.js} +1 -1
- package/packages/client/dist/assets/{ThreadStatusPin-DhrEC0n-.js → ThreadStatusPin-CsUuwM1e.js} +1 -1
- package/packages/client/dist/assets/{ThreadView-hYXeM23q.js → ThreadView-PbhTHc_b.js} +1 -1
- package/packages/client/dist/assets/{app-store-DKW9sVHv.js → app-store-DjqdXPml.js} +1 -1
- package/packages/client/dist/assets/{automation-store-C8v9UlHX.js → automation-store-CN7G1rmj.js} +1 -1
- package/packages/client/dist/assets/{browser-panel-store-CSx5jc7O.js → browser-panel-store-BrY0M-3u.js} +2 -2
- package/packages/client/dist/assets/{button-B9Ypx1uQ.js → button-DqIT3IPY.js} +1 -1
- package/packages/client/dist/assets/{combine-CIrCcf3o.js → combine-DMf_Pe7m.js} +1 -1
- package/packages/client/dist/assets/{comment-store-BfRTY3FY.js → comment-store-BLJA7qy5.js} +1 -1
- package/packages/client/dist/assets/{diff-parse-DgLol0S6.js → diff-parse-DoxsYsvR.js} +1 -1
- package/packages/client/dist/assets/{element-yfBHMYal.js → element-CWNkjFyh.js} +1 -1
- package/packages/client/dist/assets/{go-to-thread-DD0G5vFp.js → go-to-thread-1QCGvOr9.js} +1 -1
- package/packages/client/dist/assets/{index-DNxUSLe_.js → index-CmX0PQ41.js} +2 -2
- package/packages/client/dist/assets/{input-CJ3TsT2L.js → input-Bi-kCBn4.js} +1 -1
- package/packages/client/dist/assets/{items-7qqySF-X.js → items-z89mbR0g.js} +1 -1
- package/packages/client/dist/assets/{job-store-0PeOgBpX.js → job-store-C6L3TZ6m.js} +1 -1
- package/packages/client/dist/assets/{kbd-d4Wzagpn.js → kbd-CYltzHK-.js} +1 -1
- package/packages/client/dist/assets/{loading-state-yLj5fYb6.js → loading-state-CuNSmah_.js} +1 -1
- package/packages/client/dist/assets/{markdown-components-DxMKBjnh.js → markdown-components-CDAAlOfJ.js} +1 -1
- package/packages/client/dist/assets/{native-git-store-CCenGgLt.js → native-git-store-BRK3QIOm.js} +1 -1
- package/packages/client/dist/assets/{orchestrator-store-DP8UohlO.js → orchestrator-store-CpN46D7d.js} +1 -1
- package/packages/client/dist/assets/{pipeline-approval-store-BiH1mYlB.js → pipeline-approval-store-L_CnXcgU.js} +1 -1
- package/packages/client/dist/assets/{pr-detail-store-DHF0exs_.js → pr-detail-store-9Jf4dkle.js} +1 -1
- package/packages/client/dist/assets/{providers-Dd9yhyUY.js → providers-CDWMbzb0.js} +1 -1
- package/packages/client/dist/assets/{sidebar-Dzb_F1kj.js → sidebar-thesisNh.js} +1 -1
- package/packages/client/dist/assets/{tabs-Cu3cWMHb.js → tabs-D2Tzh6Ge.js} +1 -1
- package/packages/client/dist/assets/{test-store-D72ZqWH2.js → test-store-BIzIn_1p.js} +1 -1
- package/packages/client/dist/assets/{tooltip-icon-button-8C1wJ-l9.js → tooltip-icon-button-pAxgBlHP.js} +1 -1
- package/packages/client/dist/assets/use-active-thread-id-BBsLXIrt.js +1 -0
- package/packages/client/dist/assets/{use-branch-switch-C45m2mx7.js → use-branch-switch-Z5J9CKxB.js} +1 -1
- package/packages/client/dist/assets/{use-image-lightbox-CsMDwY1v.js → use-image-lightbox-Bu7huixI.js} +1 -1
- package/packages/client/dist/assets/{use-stable-navigate-Cz_jWBHP.js → use-stable-navigate-D0phYEEB.js} +1 -1
- package/packages/client/dist/assets/{use-terminal-scope-BX8zAMzc.js → use-terminal-scope-CWqnHWM0.js} +1 -1
- package/packages/client/dist/assets/{use-thread-creation-DSLV7F8I.js → use-thread-creation-d4X0pWGi.js} +1 -1
- package/packages/client/dist/assets/{use-thread-search-CXsiNqRR.js → use-thread-search-BGPGuqA-.js} +1 -1
- package/packages/client/dist/assets/{use-todo-panel-DjPuehjq.js → use-todo-panel-Dh6mAnT6.js} +1 -1
- package/packages/client/dist/assets/{use-unified-prompt-model-groups-wdA26Vnd.js → use-unified-prompt-model-groups-DK1DksUz.js} +1 -1
- package/packages/client/dist/assets/{use-ws-AWIhcFYo.js → use-ws-Dne_mRf6.js} +3 -3
- package/packages/client/dist/assets/{visualizer-loader-oxC04P38.js → visualizer-loader-Di5LNXnx.js} +1 -1
- package/packages/client/dist/assets/{watcher-store-gym76Ag_.js → watcher-store-CwGkvZwT.js} +1 -1
- package/packages/client/dist/index.html +1 -1
- package/packages/runtime/dist/index.js +2 -2
- package/packages/runtime/dist/index.js.map +1 -1
- package/packages/runtime/dist/pty-daemon.ts +508 -0
- package/packages/client/dist/assets/use-active-thread-id-ZlJtsqq4.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{L as t,Xt as n,pr as r,yr as i,zr as a}from"./icons-sqwAEN28.js";import{o}from"./markdown-DBtwZWLP.js";import{_t as s,lt as c}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{L as t,Xt as n,pr as r,yr as i,zr as a}from"./icons-sqwAEN28.js";import{o}from"./markdown-DBtwZWLP.js";import{_t as s,lt as c}from"./index-CmX0PQ41.js";import{t as l}from"./button-DqIT3IPY.js";import{$ as u,An as d,Dr as f,Lt as p,Mn as m,Rt as h,Z as g,at as _,et as v,in as y,jn as b,m as x,mn as S,nt as C,rt as w,tt as T,yr as E}from"./items-z89mbR0g.js";import{t as D}from"./go-to-thread-1QCGvOr9.js";import{n as O}from"./automation-store-CN7G1rmj.js";var k=e(a(),1),A=e(o(),1);function j(){let e=s(),a=f(e=>e.projects),o=O(e=>e.inbox),j=O(e=>e.inboxCount),M=O(e=>e.loadInbox),N=O(e=>e.triageRun),P=E(e=>e.setAutomationInboxOpen),F=p(e=>e.selectThread),I=p(e=>e.selectedThreadId),[L,R]=(0,k.useState)(null),[z,B]=(0,k.useState)(!1),V=(0,k.useId)(),[H,U]=(0,k.useState)(`pending`),[W,G]=(0,k.useState)(``),[K,q]=(0,k.useState)(!1),J=(0,k.useRef)(M);J.current=M,(0,k.useEffect)(()=>{J.current()},[]);let Y=(0,k.useMemo)(()=>{let e=o;if(H!==`all`&&(e=e.filter(e=>e.run.triageStatus===H)),L&&(e=e.filter(e=>e.thread.projectId===L)),W.trim())if(K)e=e.filter(e=>e.automation.name.includes(W)||e.thread.title.includes(W)||!!e.run.summary?.includes(W));else{let t=W.toLowerCase();e=e.filter(e=>e.automation.name.toLowerCase().includes(t)||e.thread.title.toLowerCase().includes(t)||e.run.summary?.toLowerCase().includes(t))}return e},[o,H,L,W,K]),X=(0,k.useMemo)(()=>{let e=new Set(o.map(e=>e.thread.projectId));return a.filter(t=>e.has(t.id))},[o,a]),Z=e=>{F(e)};return(0,A.jsxs)(`div`,{className:`flex flex-1 flex-col overflow-hidden`,children:[(0,A.jsxs)(`div`,{className:`border-border flex items-center justify-between border-b px-6 py-4`,children:[(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,A.jsx)(n,{className:`icon-base text-muted-foreground`}),(0,A.jsx)(`h2`,{className:`text-sm font-medium`,children:`Automation Inbox`}),j>0&&(0,A.jsx)(_,{variant:`secondary`,className:`h-5 min-w-5 px-1 leading-none`,children:j})]}),(0,A.jsxs)(l,{variant:`ghost`,size:`sm`,className:`text-muted-foreground h-7 gap-1.5 text-xs`,"data-testid":`inbox-manage-automations`,onClick:()=>{P(!1),e(h(L?`/projects/${L}/settings/automations`:`/settings/automations`))},children:[(0,A.jsx)(t,{className:`icon-sm`}),`Manage Automations`]})]}),(0,A.jsx)(`div`,{className:`border-border/40 flex items-center gap-0 border-b px-6`,children:[`all`,`pending`,`reviewed`,`dismissed`].map(e=>{let t=H===e,n=e===`all`?o.length:o.filter(t=>t.run.triageStatus===e).length;return(0,A.jsxs)(`button`,{"data-testid":`inbox-tab-${e}`,onClick:()=>U(e),className:c(`px-4 py-2 text-xs font-medium transition-colors relative border-b-2`,t?`text-foreground border-primary`:`text-muted-foreground border-transparent hover:text-foreground/80`),children:[e===`all`?`All`:e.charAt(0).toUpperCase()+e.slice(1),n>0&&(0,A.jsx)(`span`,{className:c(`ml-1.5 text-xs px-1.5 py-0.5 rounded-full`,t?`bg-primary/10 text-primary`:`bg-muted text-muted-foreground`),children:n})]},e)})}),(0,A.jsx)(`div`,{className:`border-border border-b px-6 py-2`,children:(0,A.jsx)(S,{query:W,onQueryChange:G,placeholder:`Search by automation name, thread title, or summary...`,totalMatches:Y.length,resultLabel:W?`${Y.length}/${o.length}`:``,caseSensitive:K,onCaseSensitiveChange:q,onClose:W?()=>G(``):void 0,autoFocus:!1,testIdPrefix:`inbox-search`})}),X.length>1&&(0,A.jsx)(`div`,{className:`border-border flex items-center gap-2 border-b px-6 py-2`,children:(0,A.jsxs)(d,{open:z,onOpenChange:B,children:[(0,A.jsx)(m,{asChild:!0,children:(0,A.jsxs)(l,{variant:`outline`,role:`combobox`,"aria-expanded":z,"aria-controls":V,"data-testid":`inbox-project-filter`,className:`h-7 w-[200px] justify-between text-xs font-normal`,children:[L?X.find(e=>e.id===L)?.name:`All projects`,(0,A.jsx)(r,{className:`icon-xs ml-2 shrink-0 opacity-50`})]})}),(0,A.jsx)(b,{className:`w-[200px] p-0`,align:`start`,children:(0,A.jsxs)(g,{children:[(0,A.jsx)(T,{placeholder:`Search project...`,className:`h-8 text-xs`}),(0,A.jsxs)(w,{id:V,children:[(0,A.jsx)(u,{className:`py-3 text-xs`,children:`No project found.`}),(0,A.jsxs)(v,{children:[(0,A.jsxs)(C,{value:`all`,onSelect:()=>{R(null),B(!1)},className:`text-xs`,children:[(0,A.jsx)(i,{className:c(`mr-2 icon-xs`,L?`opacity-0`:`opacity-100`)}),`All projects`]}),X.map(e=>(0,A.jsxs)(C,{value:e.name,onSelect:()=>{R(e.id),B(!1)},className:`text-xs`,children:[(0,A.jsx)(i,{className:c(`mr-2 icon-xs`,L===e.id?`opacity-100`:`opacity-0`)}),e.name]},e.id))]})]})]})})]})}),(0,A.jsx)(y,{className:`flex-1`,children:(0,A.jsx)(`div`,{className:`p-6`,children:Y.length===0?(0,A.jsxs)(`div`,{className:`text-muted-foreground flex h-full flex-col items-center justify-center`,children:[(0,A.jsx)(n,{className:`mb-3 size-8 opacity-50`}),(0,A.jsx)(`p`,{className:`text-sm`,children:`No pending reviews.`}),(0,A.jsx)(`p`,{className:`mt-1 text-xs`,children:`Automation results that need review will appear here.`})]}):(0,A.jsx)(`div`,{className:`mx-auto max-w-2xl space-y-3`,children:Y.map(({run:t,automation:n,thread:r})=>{let i=a.find(e=>e.id===r.projectId);return(0,A.jsxs)(`div`,{className:c(`rounded-lg border bg-card p-4 space-y-3 cursor-pointer transition-colors`,I===r.id?`border-primary/50 bg-accent/30`:`border-border/50 hover:border-border`),onClick:()=>Z(r.id),children:[(0,A.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`p`,{className:`truncate text-sm font-medium`,children:n.name}),(0,A.jsxs)(`p`,{className:`text-muted-foreground truncate text-xs`,children:[i&&(0,A.jsxs)(`span`,{className:`font-medium`,children:[i.name,` · `]}),(0,A.jsx)(x,{as:`span`,title:r.title,className:`text-xs`,containerClassName:`inline-flex max-w-full align-bottom`})]})]}),(0,A.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,A.jsx)(`span`,{className:c(`text-xs px-1.5 py-0.5 rounded-full`,t.hasFindings?`bg-status-warning/10 text-status-warning/80`:`bg-muted text-muted-foreground`),children:t.hasFindings?`Has findings`:`No findings`}),(0,A.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:t.completedAt?new Date(t.completedAt).toLocaleString():``})]})]}),t.summary&&(0,A.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:t.summary}),(0,A.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,A.jsx)(l,{variant:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:t=>{t.stopPropagation(),P(!1),D(e,r)},children:`View Thread`}),t.triageStatus===`pending`&&(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(l,{variant:`ghost`,size:`sm`,className:`h-7 text-xs`,onClick:e=>{e.stopPropagation(),N(t.id,`dismissed`)},children:`Dismiss`}),(0,A.jsx)(l,{variant:`outline`,size:`sm`,className:`h-7 text-xs`,onClick:e=>{e.stopPropagation(),N(t.id,`reviewed`)},children:`Mark Reviewed`})]})]})]},t.id)})})})})]})}export{j as AutomationInboxView};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{D as t,H as n,Ln as r,Mr as i,Mt as a,Rn as o,Sr as s,T as c,U as l,b as u,ct as d,en as f,et as p,jr as m,ot as h,rr as g,xt as _,z as v,zn as y,zr as b}from"./icons-sqwAEN28.js";import{At as ee}from"./mermaid-DOtnPRYX.js";import{o as te}from"./markdown-DBtwZWLP.js";import{n as ne,t as x}from"./telemetry-BE4cJhqj.js";import{F as S,G as C,W as w,c as T,f as E,j as D,lt as O,q as k,s as A}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{D as t,H as n,Ln as r,Mr as i,Mt as a,Rn as o,Sr as s,T as c,U as l,b as u,ct as d,en as f,et as p,jr as m,ot as h,rr as g,xt as _,z as v,zn as y,zr as b}from"./icons-sqwAEN28.js";import{At as ee}from"./mermaid-DOtnPRYX.js";import{o as te}from"./markdown-DBtwZWLP.js";import{n as ne,t as x}from"./telemetry-BE4cJhqj.js";import{F as S,G as C,W as w,c as T,f as E,j as D,lt as O,q as k,s as A}from"./index-CmX0PQ41.js";import{t as j}from"./button-DqIT3IPY.js";import{$r as re,An as M,D as N,Dr as P,E as F,Gr as ie,Jr as ae,Mn as I,T as oe,Ur as L,Wr as R,Xr as se,Yr as ce,ct as z,i as B,in as V,jn as H,mt as U,pt as W,qr as le,st as G,ut as K,w as ue}from"./items-z89mbR0g.js";import{t as de}from"./input-Bi-kCBn4.js";import{r as q}from"./use-ws-Dne_mRf6.js";import{t as fe}from"./use-stable-navigate-D0phYEEB.js";import{DRAW_COLORS as pe,useBrowserPanelStore as J}from"./browser-panel-store-BrY0M-3u.js";var Y=e(te(),1),me=60;function he(e){switch(e.kind){case`pin`:return`(${e.x}, ${e.y})`;case`region`:return`(${e.x}, ${e.y}, ${e.w}×${e.h})`;case`draw`:return`drawing`}}function ge(e){switch(e){case`pin`:return a;case`region`:return t;case`draw`:return h}}function _e(e,t){return e.length<=t?e:`${e.slice(0,t-1)}…`}function ve(){let e=J(e=>e.annotations),t=J(e=>e.removeAnnotation),n=E(e=>e.fontSize),r={fontSize:A[n],lineHeight:`${T[n]}px`};return e.length===0?(0,Y.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center px-3 py-2`,style:r,"data-testid":`browser-panel-annotation-list-empty`,children:`No annotations yet. Pick a tool and start marking up the page.`}):(0,Y.jsx)(V,{className:`h-full`,children:(0,Y.jsx)(`ul`,{"data-testid":`browser-panel-annotation-list`,className:`divide-border flex flex-col divide-y`,style:r,children:e.map((e,n)=>{let r=ge(e.kind),i=_e(e.note.trim(),me);return(0,Y.jsxs)(`li`,{className:`flex items-start gap-2 px-3 py-2`,"data-testid":`browser-panel-annotation-${n+1}`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`bg-muted text-foreground mt-0.5 inline-flex size-5 shrink-0 items-center justify-center rounded-full text-xs font-semibold`,children:n+1}),(0,Y.jsx)(r,{className:`text-muted-foreground mt-1 size-3.5 shrink-0`,"aria-label":e.kind}),(0,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:he(e)}),i&&(0,Y.jsx)(`span`,{className:`truncate`,children:i})]}),(0,Y.jsx)(j,{variant:`ghost`,size:`icon-sm`,tabIndex:-1,"data-testid":`browser-panel-annotation-remove-${e.id}`,"aria-label":`Remove annotation ${n+1}`,onClick:()=>t(e.id),className:`text-muted-foreground hover:text-destructive shrink-0`,children:(0,Y.jsx)(u,{className:`icon-base`})})]},e.id)})})})}var X=e(b(),1),ye=!!window.__TAURI_INTERNALS__;function be(){return ye}async function xe(e){if(!ye)throw Error(`Annotator requires the Tauri desktop app`);let{invoke:t}=await ee(async()=>{let{invoke:e}=await import(`./core-0_kFspMt.js`);return{invoke:e}},[]);await t(`open_annotator`,{url:e})}var Se=/^https?:\/\//i;function Ce(e){let t=e.trim();if(!t)return null;let n=Se.test(t)?t:`http://${t}`;try{let e=new URL(n);return e.protocol!==`http:`&&e.protocol!==`https:`||!e.hostname?null:{url:e.toString(),protocol:e.protocol.replace(`:`,``)}}catch{return null}}function we(){let e=J(e=>e.url),t=J(e=>e.loadedUrl),n=J(e=>e.loadError),r=J(e=>e.setUrl),a=J(e=>e.openBrowserSession),o=J(e=>e.sessionId),s=J(e=>e.sessionError),c=E(e=>e.fontSize),[u,d]=(0,X.useState)(null),f=t=>{t.preventDefault();let n=Ce(e);if(!n){d(`Enter a URL.`);return}d(null),a(n.url),x(`browser_panel.url_loaded`,1,{type:`sum`,attributes:{protocol:n.protocol}})},p=!!t&&!!o,h=()=>{p&&q.nav(o,`back`).catch(()=>{})},g=()=>{p&&q.nav(o,`forward`).catch(()=>{})},_=()=>{p&&q.nav(o,`reload`).catch(()=>{})},v={fontSize:A[c],lineHeight:`${T[c]}px`},b=be();return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1 px-3 py-2`,children:[(0,Y.jsxs)(`form`,{onSubmit:f,className:`flex items-center gap-1`,children:[(0,Y.jsxs)(w,{children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(j,{type:`button`,variant:`ghost`,size:`icon-sm`,tabIndex:-1,"data-testid":`browser-panel-back`,disabled:!p,onClick:h,className:`text-muted-foreground`,children:(0,Y.jsx)(i,{className:`icon-base`})})}),(0,Y.jsx)(C,{side:`bottom`,children:`Back`})]}),(0,Y.jsxs)(w,{children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(j,{type:`button`,variant:`ghost`,size:`icon-sm`,tabIndex:-1,"data-testid":`browser-panel-forward`,disabled:!p,onClick:g,className:`text-muted-foreground`,children:(0,Y.jsx)(m,{className:`icon-base`})})}),(0,Y.jsx)(C,{side:`bottom`,children:`Forward`})]}),(0,Y.jsxs)(w,{children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(j,{type:`button`,variant:`ghost`,size:`icon-sm`,tabIndex:-1,"data-testid":`browser-panel-reload`,disabled:!p,onClick:_,className:`text-muted-foreground`,children:(0,Y.jsx)(l,{className:`icon-base`})})}),(0,Y.jsx)(C,{side:`bottom`,children:`Reload`})]}),(0,Y.jsx)(de,{"data-testid":`browser-panel-url-input`,type:`text`,inputMode:`url`,autoComplete:`off`,spellCheck:!1,placeholder:`http://localhost:5173`,value:e,onChange:e=>r(e.target.value),className:`h-8 flex-1`,style:v}),(0,Y.jsx)(j,{type:`submit`,"data-testid":`browser-panel-url-go`,size:`sm`,className:`h-8 px-3`,style:v,children:`Go`}),b&&(0,Y.jsxs)(w,{children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(j,{type:`button`,variant:`ghost`,size:`icon-sm`,tabIndex:-1,"data-testid":`browser-panel-open-annotator`,onClick:async()=>{let n=Ce(e||t||``);if(!n){d(`Enter a URL first.`);return}d(null);try{await xe(n.url)}catch(e){let t=e instanceof Error?e.message:String(e);L.error(`Annotator failed: ${t}`)}},className:`text-muted-foreground`,children:(0,Y.jsx)(y,{className:`icon-base`})})}),(0,Y.jsx)(C,{side:`bottom`,children:`Open in annotator window (any origin)`})]})]}),(n||u||s)&&(0,Y.jsx)(`div`,{role:`alert`,"data-testid":`browser-panel-url-error`,className:`text-destructive`,style:v,children:n??u??s})]})}function Te({canvasRef:e}){let t=J(e=>e.sessionId),n=J(e=>e.sessionStatus),r=(0,X.useRef)(null);return(0,X.useEffect)(()=>(r.current=new Image,()=>{r.current=null}),[]),(0,X.useEffect)(()=>{if(!t)return;let n=e.current;if(!n)return;n.width=N,n.height=F;let i=n.getContext(`2d`);if(!i)return;let a=ue(t,e=>{let t=r.current;t&&(t.onload=()=>{i.drawImage(t,0,0,n.width,n.height)},t.src=`data:image/jpeg;base64,${e}`)});return()=>{a()}},[t,e]),(0,Y.jsx)(`canvas`,{ref:e,"data-testid":`browser-panel-canvas`,"data-session-status":n,className:`bg-background block h-full w-full`,style:{imageRendering:`auto`}})}var Ee=100,De=D(`browser-session`);function Oe({overlayRef:e,canvasRef:t}){let n=J(e=>e.inspectActive),r=J(e=>e.tool),i=J(e=>e.sessionId),a=J(e=>e.toggleInspectActive),o=n||r===`pin`,[s,c]=(0,X.useState)(null),l=(0,X.useRef)(0);if((0,X.useEffect)(()=>{if(!o){c(null);return}if(!n)return;let e=e=>{e.key===`Escape`&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[o,n,a]),(0,X.useEffect)(()=>{if(!o||!i)return;let n=e.current;if(!n)return;let r=e=>{let r=Date.now();if(r-l.current<Ee)return;l.current=r;let a=n.getBoundingClientRect(),o=e.clientX-a.left,s=e.clientY-a.top,u=t.current?.getBoundingClientRect();if(!u||u.width===0||u.height===0)return;let d=Math.round((e.clientX-u.left)/u.width*N),f=Math.round((e.clientY-u.top)/u.height*F);q.inspectAt(i,d,f).then(e=>{c(e&&typeof e==`object`?{cx:o,cy:s,info:e}:null)}).catch(e=>{De.debug(`inspect mousemove failed`,{error:String(e)})})};return n.addEventListener(`mousemove`,r),()=>n.removeEventListener(`mousemove`,r)},[o,i,e,t]),!o||!s)return null;let u=e.current?.getBoundingClientRect();if(!u)return null;let d=s.info.boundingBox,f=d.x/N*u.width,p=d.y/F*u.height,m=d.w/N*u.width,h=d.h/F*u.height,g=s.cx+320+16>u.width?s.cx-320-8:s.cx+12,_=s.cy+12;return(0,Y.jsxs)(`div`,{"data-testid":`browser-panel-inspect-overlay`,className:`pointer-events-none absolute inset-0`,children:[(0,Y.jsx)(`div`,{className:`border-primary bg-primary/10 absolute border-2`,style:{left:f,top:p,width:m,height:h}}),(0,Y.jsxs)(`div`,{"data-testid":`browser-panel-inspect-tooltip`,className:`border-border bg-card absolute max-w-[320px] rounded-md border p-2 text-xs shadow-md`,style:{left:g,top:_},children:[(0,Y.jsxs)(`div`,{className:`text-foreground font-mono`,children:[s.info.tagName.toLowerCase(),s.info.classes.length>0&&(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[`.`,s.info.classes.slice(0,3).join(`.`)]})]}),s.info.testid&&(0,Y.jsxs)(`div`,{className:`text-muted-foreground mt-1`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:`data-testid`}),`="`,s.info.testid,`"`]}),s.info.componentName&&(0,Y.jsxs)(`div`,{className:`text-muted-foreground mt-1`,children:[`component: `,(0,Y.jsx)(`span`,{className:`font-mono`,children:s.info.componentName})]}),(0,Y.jsxs)(`div`,{className:`text-muted-foreground mt-1`,children:[Math.round(d.w),` × `,Math.round(d.h)]})]})]})}var ke=2e3,Ae=D(`browser-session`),je=`(() => {
|
|
2
2
|
const out = [];
|
|
3
3
|
const els = document.querySelectorAll('[data-testid]');
|
|
4
4
|
for (const el of els) {
|
package/packages/client/dist/assets/{BrowserPreview-2gdJqMpN.js → BrowserPreview-CYbez9uL.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{D as t,E as n,Lt as r,Mn as i,St as a,V as o,Wn as s,ar as c,at as l,bt as u,et as d,gr as f,hr as ee,ir as p,jt as te,lr as m,lt as h,n as ne,on as g,st as _,t as re,vt as v,w as y,y as b,zr as x}from"./icons-sqwAEN28.js";import{o as S}from"./markdown-DBtwZWLP.js";import{G as ie,P as C,W as ae,lt as w,q as oe}from"./index-DNxUSLe_.js";import{at as T,cn as E,fn as D,in as O,mn as k,x as A}from"./items-7qqySF-X.js";import{t as j}from"./loading-state-yLj5fYb6.js";import{i as M,n as N,r as P,t as se}from"./tabs-Cu3cWMHb.js";import{t as F}from"./tooltip-icon-button-8C1wJ-l9.js";import{useTestStore as I}from"./test-store-D72ZqWH2.js";var L=e(x(),1),R=e(S(),1);function ce({action:e}){let t=`h-3.5 w-3.5 shrink-0`;if(e.error)return(0,R.jsx)(c,{className:w(t,`text-destructive`)});if(e.category===`expect`)return e.endTime?(0,R.jsx)(m,{className:w(t,`text-green-500`)}):(0,R.jsx)(r,{className:w(t,`animate-spin text-muted-foreground`)});let n=e.title.toLowerCase();return n.includes(`goto`)||n.includes(`navigate`)?(0,R.jsx)(v,{className:w(t,`text-blue-400`)}):n.includes(`fill`)||n.includes(`type`)||n.includes(`press`)?(0,R.jsx)(_,{className:w(t,`text-amber-400`)}):n.includes(`click`)||n.includes(`tap`)||n.includes(`check`)||n.includes(`uncheck`)?(0,R.jsx)(u,{className:w(t,`text-purple-400`)}):e.endTime?(0,R.jsx)(p,{className:w(t,`text-muted-foreground`)}):(0,R.jsx)(r,{className:w(t,`animate-spin text-muted-foreground`)})}function le(e){return e==null?``:e<1?`<1ms`:e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function ue(e){return e.length<=60?e:e.slice(0,57)+`...`}function de({actions:e,hoveredIndex:t,selectedIndex:n,onHover:r,onSelect:i}){let a=(0,L.useRef)(null),o=(0,L.useRef)(!1),s=t>=0?t:n,c=e.filter(e=>e.category===`pw:api`||e.category===`expect`||e.category===`test.step`);return(0,L.useEffect)(()=>{!a.current||o.current||n>=0||(a.current.scrollTop=a.current.scrollHeight)},[c.length,n]),c.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center px-2 text-center text-xs`,children:`Actions will appear here during test execution…`}):(0,R.jsx)(O,{viewportRef:a,viewportProps:{onScroll:()=>{if(!a.current)return;let{scrollTop:e,scrollHeight:t,clientHeight:n}=a.current;o.current=t-e-n>40}},className:`h-full text-xs`,"data-testid":`action-list`,children:c.map(t=>{let a=e.indexOf(t),o=a===s;return(0,R.jsxs)(`div`,{className:w(`flex cursor-pointer items-start gap-2 border-b border-border/20 px-2 py-1.5 transition-colors`,o&&`bg-primary/10`,!o&&`hover:bg-muted/40`,t.error&&`bg-destructive/5`),onMouseEnter:()=>r(a),onMouseLeave:()=>r(-1),onClick:()=>i(a===n?-1:a),"data-testid":`action-item-${t.id}`,children:[(0,R.jsx)(`div`,{className:`mt-0.5`,children:(0,R.jsx)(ce,{action:t})}),(0,R.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,R.jsx)(`div`,{className:w(`truncate font-mono`,t.error?`text-destructive`:`text-foreground`),title:t.title,children:ue(t.title)}),t.duration!=null&&(0,R.jsx)(`div`,{className:`text-muted-foreground mt-0.5`,children:le(t.duration)})]})]},t.id)})})}var fe={"pw:api":`bg-blue-400`,expect:`bg-green-500`,"test.step":`bg-purple-400`,hook:`bg-gray-400`,fixture:`bg-gray-400`};function z(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function B({actions:e,hoveredIndex:t,selectedIndex:n,onHover:r,onSelect:i}){let a=t>=0?t:n,o=(0,L.useMemo)(()=>e.filter(e=>e.category===`pw:api`||e.category===`expect`||e.category===`test.step`),[e]),{testStart:s,totalDuration:c}=(0,L.useMemo)(()=>{if(o.length===0)return{testStart:0,totalDuration:0};let e=o.flatMap(e=>e.startTime?[e.startTime]:[]),t=o.flatMap(e=>{let t=(e.endTime??e.startTime)+(e.duration??0);return t?[t]:[]}),n=Math.min(...e);return{testStart:n,totalDuration:Math.max(...t,n+1)-n}},[o]);return o.length===0||c===0?null:(0,R.jsxs)(`div`,{className:`bg-muted/20 relative flex h-6 items-center border-b px-1`,"data-testid":`action-timeline`,children:[(0,R.jsxs)(`div`,{className:`bg-muted/40 relative h-3 w-full rounded-sm`,children:[o.map(t=>{let o=e.indexOf(t),l=(t.startTime-s)/c*100,u=t.duration??0,d=Math.max(u/c*100,.5),f=o===a;return(0,R.jsx)(`div`,{className:w(`absolute top-0 h-full cursor-pointer rounded-[1px] transition-opacity`,t.error?`bg-destructive`:fe[t.category]??`bg-gray-400`,f?`opacity-100 ring-1 ring-foreground/40`:`opacity-60 hover:opacity-90`),style:{left:`${Math.min(l,99.5)}%`,width:`${Math.max(d,.5)}%`},onMouseEnter:()=>r(o),onMouseLeave:()=>r(-1),onClick:()=>i(o===n?-1:o),title:`${t.title} (${z(u)})`,"data-testid":`timeline-marker-${t.id}`},t.id)}),a>=0&&a<e.length&&(0,R.jsx)(`div`,{className:`bg-foreground/70 absolute top-0 h-full w-px`,style:{left:`${Math.min((e[a].startTime-s)/c*100,100)}%`}})]}),(0,R.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-1 top-0 flex h-full items-center justify-between`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground/60 text-[9px]`,children:`0s`}),(0,R.jsx)(`span`,{className:`text-muted-foreground/60 text-[9px]`,children:z(c)})]})]})}function V({code:e,language:t,startLine:n=1,maxHeight:r=`320px`,className:i}){let[a,o]=(0,L.useState)(null);return(0,L.useEffect)(()=>{if(!e)return;let n=!1;return E(t).then(()=>{n||o(D(e,t))}),()=>{n=!0}},[e,t]),(0,R.jsx)(`div`,{className:w(`overflow-x-auto overflow-y-auto`,i),style:{maxHeight:r},children:a?(0,R.jsx)(`div`,{className:`hljs code-viewer font-mono text-xs leading-relaxed`,style:{counterReset:`line ${n-1}`},dangerouslySetInnerHTML:{__html:a}}):(0,R.jsx)(`pre`,{className:`text-foreground/80 px-10 py-2 font-mono text-xs leading-relaxed whitespace-pre`,children:e})})}function H(e){let t=getComputedStyle(document.documentElement).getPropertyValue(e).trim();return t?`hsl(${t})`:`#1b1b1b`}function U(e){return e==null?`-`:e<1?`<1ms`:e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(2)}s`}function W(e){return e==null?`-`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function G(e){try{let t=new URL(e);return t.pathname+t.search}catch{return e}}var pe={error:`text-red-500`,warn:`text-yellow-500`,info:`text-blue-400`,debug:`text-muted-foreground`,trace:`text-muted-foreground`,log:``},me={error:`x`,warn:`!`,info:`i`,debug:`d`,log:`>`,trace:`t`};function he({outputLines:e}){let t=(0,L.useRef)(null),n=(0,L.useRef)(!1),[r,i]=(0,L.useState)(()=>document.documentElement.className);(0,L.useEffect)(()=>{let e=new MutationObserver(()=>{i(document.documentElement.className)});return e.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),()=>e.disconnect()},[]);let a=(0,L.useMemo)(()=>A({fg:H(`--foreground`),bg:H(`--background`),newline:!1}),[r]);return(0,L.useEffect)(()=>{!t.current||n.current||(t.current.scrollTop=t.current.scrollHeight)},[e.length]),(0,R.jsx)(O,{viewportRef:t,viewportProps:{onScroll:()=>{if(!t.current)return;let{scrollTop:e,scrollHeight:r,clientHeight:i}=t.current;n.current=r-e-i>40}},className:`h-full font-mono text-xs`,children:e.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:`Test output will appear here…`}):(0,R.jsx)(`pre`,{className:`text-foreground px-3 py-1 leading-relaxed wrap-break-word whitespace-pre-wrap`,children:e.map((e,t)=>(0,R.jsx)(`div`,{className:w(e.stream===`stderr`?`text-destructive`:``),dangerouslySetInnerHTML:{__html:a.toHtml(e.line)}},t))})})}function ge({entries:e}){let t=(0,L.useRef)(null),n=(0,L.useRef)(!1);return(0,L.useEffect)(()=>{!t.current||n.current||(t.current.scrollTop=t.current.scrollHeight)},[e.length]),(0,R.jsx)(O,{viewportRef:t,viewportProps:{onScroll:()=>{if(!t.current)return;let{scrollTop:e,scrollHeight:r,clientHeight:i}=t.current;n.current=r-e-i>40}},className:`h-full font-mono text-xs`,children:e.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:`Browser console messages will appear here…`}):(0,R.jsx)(`div`,{children:e.map((e,t)=>(0,R.jsxs)(`div`,{className:w(`flex items-start gap-2 border-b border-border/30 px-3 py-1`,pe[e.level]??``),children:[(0,R.jsx)(`span`,{className:`mt-0.5 w-3 shrink-0 text-center font-bold opacity-60`,children:me[e.level]??`>`}),(0,R.jsx)(`span`,{className:`min-w-0 flex-1 break-all whitespace-pre-wrap`,children:e.text}),e.url&&(0,R.jsxs)(`span`,{className:`text-muted-foreground shrink-0`,title:e.url,children:[G(e.url),e.line==null?``:`:${e.line}`]})]},t))})})}function _e({entries:e}){return(0,R.jsx)(O,{className:`h-full font-mono text-xs`,children:e.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:`No errors captured`}):(0,R.jsx)(`div`,{children:e.map((e,t)=>(0,R.jsxs)(`div`,{className:`border-border/30 border-b px-3 py-2`,children:[(0,R.jsxs)(`div`,{className:`flex items-start gap-2 text-red-500`,children:[(0,R.jsx)(b,{className:`mt-0.5 size-3 shrink-0`}),(0,R.jsx)(`span`,{className:`break-all whitespace-pre-wrap`,children:e.message})]}),e.source&&(0,R.jsxs)(`div`,{className:`text-muted-foreground mt-1 ml-5`,children:[e.source,e.line==null?``:`:${e.line}`,e.column==null?``:`:${e.column}`]}),e.stack&&(0,R.jsx)(`pre`,{className:`text-muted-foreground/80 mt-1 ml-5 whitespace-pre-wrap`,children:e.stack})]},t))})})}var ve=[`All`,`Fetch`,`HTML`,`JS`,`CSS`,`Font`,`Image`];function ye(e,t){if(t===`All`)return!0;let n=(e.resourceType??``).toLowerCase(),r=(e.mimeType??``).toLowerCase(),i=e.url.toLowerCase();switch(t){case`Fetch`:return n===`fetch`||n===`xhr`||n===`xmlhttprequest`;case`HTML`:return n===`document`||r.includes(`html`);case`JS`:return n===`script`||r.includes(`javascript`);case`CSS`:return n===`stylesheet`||r.includes(`css`);case`Font`:return n===`font`||r.includes(`font`)||/\.(woff2?|ttf|otf|eot)/.test(i);case`Image`:return n===`image`||r.includes(`image`);default:return!0}}function be({entries:e}){let[t,n]=(0,L.useState)(`All`),[r,i]=(0,L.useState)(``),[a,o]=(0,L.useState)(!1),[s,c]=(0,L.useState)(null),l=(0,L.useMemo)(()=>{let n=e;if(t!==`All`&&(n=n.filter(e=>ye(e,t))),r)if(a)n=n.filter(e=>e.url.includes(r));else{let e=r.toLowerCase();n=n.filter(t=>t.url.toLowerCase().includes(e))}return n},[e,t,r,a]),u=(0,L.useMemo)(()=>s?e.find(e=>e.id===s)??null:null,[e,s]);return(0,R.jsxs)(`div`,{className:`flex h-full flex-col text-xs`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1 border-b px-2 py-1`,children:[(0,R.jsx)(k,{query:r,onQueryChange:i,placeholder:`Filter network`,totalMatches:l.length,resultLabel:r?`${l.length}/${e.length}`:``,caseSensitive:a,onCaseSensitiveChange:o,onClose:r?()=>i(``):void 0,autoFocus:!1,testIdPrefix:`network-filter`,className:`mr-2 w-72`}),ve.map(e=>(0,R.jsx)(`button`,{onClick:()=>n(e),className:w(`rounded px-2 py-0.5 text-xs transition-colors`,t===e?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`),"data-testid":`network-filter-${e.toLowerCase()}`,children:e},e))]}),(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,R.jsx)(O,{className:w(`min-h-0 border-r`,u?`w-[280px] shrink-0`:`flex-1`),children:l.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:e.length===0?`Network requests will appear here...`:`No matching requests`}):u?(0,R.jsxs)(`div`,{className:`font-mono`,children:[(0,R.jsx)(`div`,{className:`bg-muted/80 text-muted-foreground sticky top-0 border-b px-3 py-1 font-medium`,children:`Name`}),l.map(e=>(0,R.jsx)(`div`,{onClick:()=>c(e.id),className:w(`cursor-pointer truncate border-b border-border/20 px-3 py-1 hover:bg-muted/30`,e.id===s&&`bg-primary/10 text-primary`,e.failed&&`text-red-500`,e.status&&e.status>=400&&`text-red-500`),title:e.url,"data-testid":`network-row-${e.id}`,children:xe(e.url)},e.id))]}):(0,R.jsxs)(`table`,{className:`w-full font-mono`,children:[(0,R.jsx)(`thead`,{className:`bg-muted/80 text-muted-foreground sticky top-0 text-left`,children:(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`Status`}),(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`Method`}),(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`URL`}),(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`Type`}),(0,R.jsx)(`th`,{className:`px-3 py-1 text-right font-medium`,children:`Size`}),(0,R.jsx)(`th`,{className:`px-3 py-1 text-right font-medium`,children:`Time`})]})}),(0,R.jsx)(`tbody`,{children:l.map(e=>(0,R.jsxs)(`tr`,{onClick:()=>c(e.id),className:w(`cursor-pointer border-b border-border/20 hover:bg-muted/30`,e.failed&&`text-red-500`,e.status&&e.status>=400&&`text-red-500`),"data-testid":`network-row-${e.id}`,children:[(0,R.jsx)(`td`,{className:`px-3 py-1`,children:(0,R.jsx)(Se,{status:e.status,failed:e.failed,errorText:e.errorText})}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1`,children:e.method}),(0,R.jsx)(`td`,{className:`max-w-[300px] truncate px-3 py-1`,title:e.url,children:G(e.url)}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1`,children:e.resourceType??`-`}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1 text-right`,children:W(e.size)}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1 text-right`,children:U(e.duration)})]},e.id))})]})}),u&&(0,R.jsx)(Ce,{entry:u,onClose:()=>c(null)})]})]})}function xe(e){try{let t=new URL(e),n=t.pathname.split(`/`).filter(Boolean);return n[n.length-1]||t.hostname}catch{return e.split(`/`).pop()||e}}function Se({status:e,failed:t,errorText:n}){return t?(0,R.jsx)(`span`,{title:n,children:`ERR`}):e?(0,R.jsx)(`span`,{className:w(e>=200&&e<300&&`text-green-500`,e>=300&&e<400&&`text-yellow-500`,e>=400&&`text-red-500`),children:e}):(0,R.jsx)(`span`,{className:`text-muted-foreground`,children:`...`})}function Ce({entry:e,onClose:t}){let[n,r]=(0,L.useState)(`headers`);return(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,"data-testid":`network-detail-panel`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between border-b px-2 py-1`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,R.jsx)(`button`,{onClick:t,className:`text-muted-foreground hover:bg-muted hover:text-foreground mr-1 rounded p-0.5`,"data-testid":`network-detail-close`,children:`×`}),[`headers`,`payload`,`response`].map(e=>(0,R.jsx)(`button`,{onClick:()=>r(e),className:w(`rounded px-2 py-0.5 capitalize transition-colors`,n===e?`font-medium text-foreground`:`text-muted-foreground hover:text-foreground`),"data-testid":`network-detail-tab-${e}`,children:e},e))]}),(0,R.jsx)(`button`,{onClick:()=>{let t=`curl '${e.url}'${e.method===`GET`?``:` -X ${e.method}`}${e.requestHeaders?Object.entries(e.requestHeaders).map(([e,t])=>` -H '${e}: ${t}'`).join(``):``}${e.postData?` --data-raw '${e.postData}'`:``}`;navigator.clipboard.writeText(t).catch(()=>{})},className:`text-muted-foreground hover:bg-muted hover:text-foreground flex items-center gap-1 rounded px-2 py-0.5`,"data-testid":`network-copy-request`,children:`Copy request`})]}),(0,R.jsx)(O,{className:`min-h-0 flex-1 font-mono`,children:(0,R.jsxs)(`div`,{className:`px-4 py-2`,children:[n===`headers`&&(0,R.jsx)(we,{entry:e}),n===`payload`&&(0,R.jsx)(De,{entry:e}),n===`response`&&(0,R.jsx)(Oe,{entry:e})]})})]})}function we({entry:e}){let[t,n]=(0,L.useState)(!0),[r,i]=(0,L.useState)(!1),[a,o]=(0,L.useState)(!1),s=e.requestHeaders?Object.entries(e.requestHeaders):[],c=e.responseHeaders?Object.entries(e.responseHeaders):[];return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[(0,R.jsxs)(K,{title:`General`,open:t,onToggle:()=>n(!t),children:[(0,R.jsx)(q,{label:`URL`,value:e.url}),(0,R.jsx)(q,{label:`Method`,value:e.method}),(0,R.jsx)(q,{label:`Status Code`,value:e.failed?`Failed`:e.status?`${e.status} ${e.statusText??``}`:`Pending`,statusDot:e.status}),(0,R.jsx)(q,{label:`Start`,value:Te(e.startTime)}),(0,R.jsx)(q,{label:`Duration`,value:U(e.duration)})]}),(0,R.jsx)(K,{title:`Request Headers${s.length>0?` \u00d7 ${s.length}`:``}`,open:r,onToggle:()=>i(!r),children:s.length>0?s.map(([e,t])=>(0,R.jsx)(q,{label:e,value:t},e)):(0,R.jsx)(`div`,{className:`text-muted-foreground py-1`,children:`No request headers captured`})}),(0,R.jsx)(K,{title:`Response Headers${c.length>0?` \u00d7 ${c.length}`:``}`,open:a,onToggle:()=>o(!a),children:c.length>0?c.map(([e,t])=>(0,R.jsx)(q,{label:e,value:t},e)):(0,R.jsx)(`div`,{className:`text-muted-foreground py-1`,children:`No response headers captured`})})]})}function Te(e){if(!e)return`-`;let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}:${t.getSeconds().toString().padStart(2,`0`)}.${t.getMilliseconds().toString().padStart(3,`0`)}`}function Ee(e){try{let t=new URL(e);return Array.from(t.searchParams.entries())}catch{return[]}}function De({entry:e}){let[t,n]=(0,L.useState)(!0),[r,i]=(0,L.useState)(!0),a=(0,L.useMemo)(()=>Ee(e.url),[e.url]),o=!!e.postData,s=(0,L.useMemo)(()=>{if(!e.postData)return[];let t=e.postData;try{t=JSON.stringify(JSON.parse(e.postData),null,2)}catch{}return t.split(`
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{D as t,E as n,Lt as r,Mn as i,St as a,V as o,Wn as s,ar as c,at as l,bt as u,et as d,gr as f,hr as ee,ir as p,jt as te,lr as m,lt as h,n as ne,on as g,st as _,t as re,vt as v,w as y,y as b,zr as x}from"./icons-sqwAEN28.js";import{o as S}from"./markdown-DBtwZWLP.js";import{G as ie,P as C,W as ae,lt as w,q as oe}from"./index-CmX0PQ41.js";import{at as T,cn as E,fn as D,in as O,mn as k,x as A}from"./items-z89mbR0g.js";import{t as j}from"./loading-state-CuNSmah_.js";import{i as M,n as N,r as P,t as se}from"./tabs-D2Tzh6Ge.js";import{t as F}from"./tooltip-icon-button-pAxgBlHP.js";import{useTestStore as I}from"./test-store-BIzIn_1p.js";var L=e(x(),1),R=e(S(),1);function ce({action:e}){let t=`h-3.5 w-3.5 shrink-0`;if(e.error)return(0,R.jsx)(c,{className:w(t,`text-destructive`)});if(e.category===`expect`)return e.endTime?(0,R.jsx)(m,{className:w(t,`text-green-500`)}):(0,R.jsx)(r,{className:w(t,`animate-spin text-muted-foreground`)});let n=e.title.toLowerCase();return n.includes(`goto`)||n.includes(`navigate`)?(0,R.jsx)(v,{className:w(t,`text-blue-400`)}):n.includes(`fill`)||n.includes(`type`)||n.includes(`press`)?(0,R.jsx)(_,{className:w(t,`text-amber-400`)}):n.includes(`click`)||n.includes(`tap`)||n.includes(`check`)||n.includes(`uncheck`)?(0,R.jsx)(u,{className:w(t,`text-purple-400`)}):e.endTime?(0,R.jsx)(p,{className:w(t,`text-muted-foreground`)}):(0,R.jsx)(r,{className:w(t,`animate-spin text-muted-foreground`)})}function le(e){return e==null?``:e<1?`<1ms`:e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function ue(e){return e.length<=60?e:e.slice(0,57)+`...`}function de({actions:e,hoveredIndex:t,selectedIndex:n,onHover:r,onSelect:i}){let a=(0,L.useRef)(null),o=(0,L.useRef)(!1),s=t>=0?t:n,c=e.filter(e=>e.category===`pw:api`||e.category===`expect`||e.category===`test.step`);return(0,L.useEffect)(()=>{!a.current||o.current||n>=0||(a.current.scrollTop=a.current.scrollHeight)},[c.length,n]),c.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center px-2 text-center text-xs`,children:`Actions will appear here during test execution…`}):(0,R.jsx)(O,{viewportRef:a,viewportProps:{onScroll:()=>{if(!a.current)return;let{scrollTop:e,scrollHeight:t,clientHeight:n}=a.current;o.current=t-e-n>40}},className:`h-full text-xs`,"data-testid":`action-list`,children:c.map(t=>{let a=e.indexOf(t),o=a===s;return(0,R.jsxs)(`div`,{className:w(`flex cursor-pointer items-start gap-2 border-b border-border/20 px-2 py-1.5 transition-colors`,o&&`bg-primary/10`,!o&&`hover:bg-muted/40`,t.error&&`bg-destructive/5`),onMouseEnter:()=>r(a),onMouseLeave:()=>r(-1),onClick:()=>i(a===n?-1:a),"data-testid":`action-item-${t.id}`,children:[(0,R.jsx)(`div`,{className:`mt-0.5`,children:(0,R.jsx)(ce,{action:t})}),(0,R.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,R.jsx)(`div`,{className:w(`truncate font-mono`,t.error?`text-destructive`:`text-foreground`),title:t.title,children:ue(t.title)}),t.duration!=null&&(0,R.jsx)(`div`,{className:`text-muted-foreground mt-0.5`,children:le(t.duration)})]})]},t.id)})})}var fe={"pw:api":`bg-blue-400`,expect:`bg-green-500`,"test.step":`bg-purple-400`,hook:`bg-gray-400`,fixture:`bg-gray-400`};function z(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function B({actions:e,hoveredIndex:t,selectedIndex:n,onHover:r,onSelect:i}){let a=t>=0?t:n,o=(0,L.useMemo)(()=>e.filter(e=>e.category===`pw:api`||e.category===`expect`||e.category===`test.step`),[e]),{testStart:s,totalDuration:c}=(0,L.useMemo)(()=>{if(o.length===0)return{testStart:0,totalDuration:0};let e=o.flatMap(e=>e.startTime?[e.startTime]:[]),t=o.flatMap(e=>{let t=(e.endTime??e.startTime)+(e.duration??0);return t?[t]:[]}),n=Math.min(...e);return{testStart:n,totalDuration:Math.max(...t,n+1)-n}},[o]);return o.length===0||c===0?null:(0,R.jsxs)(`div`,{className:`bg-muted/20 relative flex h-6 items-center border-b px-1`,"data-testid":`action-timeline`,children:[(0,R.jsxs)(`div`,{className:`bg-muted/40 relative h-3 w-full rounded-sm`,children:[o.map(t=>{let o=e.indexOf(t),l=(t.startTime-s)/c*100,u=t.duration??0,d=Math.max(u/c*100,.5),f=o===a;return(0,R.jsx)(`div`,{className:w(`absolute top-0 h-full cursor-pointer rounded-[1px] transition-opacity`,t.error?`bg-destructive`:fe[t.category]??`bg-gray-400`,f?`opacity-100 ring-1 ring-foreground/40`:`opacity-60 hover:opacity-90`),style:{left:`${Math.min(l,99.5)}%`,width:`${Math.max(d,.5)}%`},onMouseEnter:()=>r(o),onMouseLeave:()=>r(-1),onClick:()=>i(o===n?-1:o),title:`${t.title} (${z(u)})`,"data-testid":`timeline-marker-${t.id}`},t.id)}),a>=0&&a<e.length&&(0,R.jsx)(`div`,{className:`bg-foreground/70 absolute top-0 h-full w-px`,style:{left:`${Math.min((e[a].startTime-s)/c*100,100)}%`}})]}),(0,R.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-1 top-0 flex h-full items-center justify-between`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground/60 text-[9px]`,children:`0s`}),(0,R.jsx)(`span`,{className:`text-muted-foreground/60 text-[9px]`,children:z(c)})]})]})}function V({code:e,language:t,startLine:n=1,maxHeight:r=`320px`,className:i}){let[a,o]=(0,L.useState)(null);return(0,L.useEffect)(()=>{if(!e)return;let n=!1;return E(t).then(()=>{n||o(D(e,t))}),()=>{n=!0}},[e,t]),(0,R.jsx)(`div`,{className:w(`overflow-x-auto overflow-y-auto`,i),style:{maxHeight:r},children:a?(0,R.jsx)(`div`,{className:`hljs code-viewer font-mono text-xs leading-relaxed`,style:{counterReset:`line ${n-1}`},dangerouslySetInnerHTML:{__html:a}}):(0,R.jsx)(`pre`,{className:`text-foreground/80 px-10 py-2 font-mono text-xs leading-relaxed whitespace-pre`,children:e})})}function H(e){let t=getComputedStyle(document.documentElement).getPropertyValue(e).trim();return t?`hsl(${t})`:`#1b1b1b`}function U(e){return e==null?`-`:e<1?`<1ms`:e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(2)}s`}function W(e){return e==null?`-`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function G(e){try{let t=new URL(e);return t.pathname+t.search}catch{return e}}var pe={error:`text-red-500`,warn:`text-yellow-500`,info:`text-blue-400`,debug:`text-muted-foreground`,trace:`text-muted-foreground`,log:``},me={error:`x`,warn:`!`,info:`i`,debug:`d`,log:`>`,trace:`t`};function he({outputLines:e}){let t=(0,L.useRef)(null),n=(0,L.useRef)(!1),[r,i]=(0,L.useState)(()=>document.documentElement.className);(0,L.useEffect)(()=>{let e=new MutationObserver(()=>{i(document.documentElement.className)});return e.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),()=>e.disconnect()},[]);let a=(0,L.useMemo)(()=>A({fg:H(`--foreground`),bg:H(`--background`),newline:!1}),[r]);return(0,L.useEffect)(()=>{!t.current||n.current||(t.current.scrollTop=t.current.scrollHeight)},[e.length]),(0,R.jsx)(O,{viewportRef:t,viewportProps:{onScroll:()=>{if(!t.current)return;let{scrollTop:e,scrollHeight:r,clientHeight:i}=t.current;n.current=r-e-i>40}},className:`h-full font-mono text-xs`,children:e.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:`Test output will appear here…`}):(0,R.jsx)(`pre`,{className:`text-foreground px-3 py-1 leading-relaxed wrap-break-word whitespace-pre-wrap`,children:e.map((e,t)=>(0,R.jsx)(`div`,{className:w(e.stream===`stderr`?`text-destructive`:``),dangerouslySetInnerHTML:{__html:a.toHtml(e.line)}},t))})})}function ge({entries:e}){let t=(0,L.useRef)(null),n=(0,L.useRef)(!1);return(0,L.useEffect)(()=>{!t.current||n.current||(t.current.scrollTop=t.current.scrollHeight)},[e.length]),(0,R.jsx)(O,{viewportRef:t,viewportProps:{onScroll:()=>{if(!t.current)return;let{scrollTop:e,scrollHeight:r,clientHeight:i}=t.current;n.current=r-e-i>40}},className:`h-full font-mono text-xs`,children:e.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:`Browser console messages will appear here…`}):(0,R.jsx)(`div`,{children:e.map((e,t)=>(0,R.jsxs)(`div`,{className:w(`flex items-start gap-2 border-b border-border/30 px-3 py-1`,pe[e.level]??``),children:[(0,R.jsx)(`span`,{className:`mt-0.5 w-3 shrink-0 text-center font-bold opacity-60`,children:me[e.level]??`>`}),(0,R.jsx)(`span`,{className:`min-w-0 flex-1 break-all whitespace-pre-wrap`,children:e.text}),e.url&&(0,R.jsxs)(`span`,{className:`text-muted-foreground shrink-0`,title:e.url,children:[G(e.url),e.line==null?``:`:${e.line}`]})]},t))})})}function _e({entries:e}){return(0,R.jsx)(O,{className:`h-full font-mono text-xs`,children:e.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:`No errors captured`}):(0,R.jsx)(`div`,{children:e.map((e,t)=>(0,R.jsxs)(`div`,{className:`border-border/30 border-b px-3 py-2`,children:[(0,R.jsxs)(`div`,{className:`flex items-start gap-2 text-red-500`,children:[(0,R.jsx)(b,{className:`mt-0.5 size-3 shrink-0`}),(0,R.jsx)(`span`,{className:`break-all whitespace-pre-wrap`,children:e.message})]}),e.source&&(0,R.jsxs)(`div`,{className:`text-muted-foreground mt-1 ml-5`,children:[e.source,e.line==null?``:`:${e.line}`,e.column==null?``:`:${e.column}`]}),e.stack&&(0,R.jsx)(`pre`,{className:`text-muted-foreground/80 mt-1 ml-5 whitespace-pre-wrap`,children:e.stack})]},t))})})}var ve=[`All`,`Fetch`,`HTML`,`JS`,`CSS`,`Font`,`Image`];function ye(e,t){if(t===`All`)return!0;let n=(e.resourceType??``).toLowerCase(),r=(e.mimeType??``).toLowerCase(),i=e.url.toLowerCase();switch(t){case`Fetch`:return n===`fetch`||n===`xhr`||n===`xmlhttprequest`;case`HTML`:return n===`document`||r.includes(`html`);case`JS`:return n===`script`||r.includes(`javascript`);case`CSS`:return n===`stylesheet`||r.includes(`css`);case`Font`:return n===`font`||r.includes(`font`)||/\.(woff2?|ttf|otf|eot)/.test(i);case`Image`:return n===`image`||r.includes(`image`);default:return!0}}function be({entries:e}){let[t,n]=(0,L.useState)(`All`),[r,i]=(0,L.useState)(``),[a,o]=(0,L.useState)(!1),[s,c]=(0,L.useState)(null),l=(0,L.useMemo)(()=>{let n=e;if(t!==`All`&&(n=n.filter(e=>ye(e,t))),r)if(a)n=n.filter(e=>e.url.includes(r));else{let e=r.toLowerCase();n=n.filter(t=>t.url.toLowerCase().includes(e))}return n},[e,t,r,a]),u=(0,L.useMemo)(()=>s?e.find(e=>e.id===s)??null:null,[e,s]);return(0,R.jsxs)(`div`,{className:`flex h-full flex-col text-xs`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1 border-b px-2 py-1`,children:[(0,R.jsx)(k,{query:r,onQueryChange:i,placeholder:`Filter network`,totalMatches:l.length,resultLabel:r?`${l.length}/${e.length}`:``,caseSensitive:a,onCaseSensitiveChange:o,onClose:r?()=>i(``):void 0,autoFocus:!1,testIdPrefix:`network-filter`,className:`mr-2 w-72`}),ve.map(e=>(0,R.jsx)(`button`,{onClick:()=>n(e),className:w(`rounded px-2 py-0.5 text-xs transition-colors`,t===e?`bg-primary text-primary-foreground`:`text-muted-foreground hover:bg-muted hover:text-foreground`),"data-testid":`network-filter-${e.toLowerCase()}`,children:e},e))]}),(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,R.jsx)(O,{className:w(`min-h-0 border-r`,u?`w-[280px] shrink-0`:`flex-1`),children:l.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:e.length===0?`Network requests will appear here...`:`No matching requests`}):u?(0,R.jsxs)(`div`,{className:`font-mono`,children:[(0,R.jsx)(`div`,{className:`bg-muted/80 text-muted-foreground sticky top-0 border-b px-3 py-1 font-medium`,children:`Name`}),l.map(e=>(0,R.jsx)(`div`,{onClick:()=>c(e.id),className:w(`cursor-pointer truncate border-b border-border/20 px-3 py-1 hover:bg-muted/30`,e.id===s&&`bg-primary/10 text-primary`,e.failed&&`text-red-500`,e.status&&e.status>=400&&`text-red-500`),title:e.url,"data-testid":`network-row-${e.id}`,children:xe(e.url)},e.id))]}):(0,R.jsxs)(`table`,{className:`w-full font-mono`,children:[(0,R.jsx)(`thead`,{className:`bg-muted/80 text-muted-foreground sticky top-0 text-left`,children:(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`Status`}),(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`Method`}),(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`URL`}),(0,R.jsx)(`th`,{className:`px-3 py-1 font-medium`,children:`Type`}),(0,R.jsx)(`th`,{className:`px-3 py-1 text-right font-medium`,children:`Size`}),(0,R.jsx)(`th`,{className:`px-3 py-1 text-right font-medium`,children:`Time`})]})}),(0,R.jsx)(`tbody`,{children:l.map(e=>(0,R.jsxs)(`tr`,{onClick:()=>c(e.id),className:w(`cursor-pointer border-b border-border/20 hover:bg-muted/30`,e.failed&&`text-red-500`,e.status&&e.status>=400&&`text-red-500`),"data-testid":`network-row-${e.id}`,children:[(0,R.jsx)(`td`,{className:`px-3 py-1`,children:(0,R.jsx)(Se,{status:e.status,failed:e.failed,errorText:e.errorText})}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1`,children:e.method}),(0,R.jsx)(`td`,{className:`max-w-[300px] truncate px-3 py-1`,title:e.url,children:G(e.url)}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1`,children:e.resourceType??`-`}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1 text-right`,children:W(e.size)}),(0,R.jsx)(`td`,{className:`text-muted-foreground px-3 py-1 text-right`,children:U(e.duration)})]},e.id))})]})}),u&&(0,R.jsx)(Ce,{entry:u,onClose:()=>c(null)})]})]})}function xe(e){try{let t=new URL(e),n=t.pathname.split(`/`).filter(Boolean);return n[n.length-1]||t.hostname}catch{return e.split(`/`).pop()||e}}function Se({status:e,failed:t,errorText:n}){return t?(0,R.jsx)(`span`,{title:n,children:`ERR`}):e?(0,R.jsx)(`span`,{className:w(e>=200&&e<300&&`text-green-500`,e>=300&&e<400&&`text-yellow-500`,e>=400&&`text-red-500`),children:e}):(0,R.jsx)(`span`,{className:`text-muted-foreground`,children:`...`})}function Ce({entry:e,onClose:t}){let[n,r]=(0,L.useState)(`headers`);return(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,"data-testid":`network-detail-panel`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between border-b px-2 py-1`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,R.jsx)(`button`,{onClick:t,className:`text-muted-foreground hover:bg-muted hover:text-foreground mr-1 rounded p-0.5`,"data-testid":`network-detail-close`,children:`×`}),[`headers`,`payload`,`response`].map(e=>(0,R.jsx)(`button`,{onClick:()=>r(e),className:w(`rounded px-2 py-0.5 capitalize transition-colors`,n===e?`font-medium text-foreground`:`text-muted-foreground hover:text-foreground`),"data-testid":`network-detail-tab-${e}`,children:e},e))]}),(0,R.jsx)(`button`,{onClick:()=>{let t=`curl '${e.url}'${e.method===`GET`?``:` -X ${e.method}`}${e.requestHeaders?Object.entries(e.requestHeaders).map(([e,t])=>` -H '${e}: ${t}'`).join(``):``}${e.postData?` --data-raw '${e.postData}'`:``}`;navigator.clipboard.writeText(t).catch(()=>{})},className:`text-muted-foreground hover:bg-muted hover:text-foreground flex items-center gap-1 rounded px-2 py-0.5`,"data-testid":`network-copy-request`,children:`Copy request`})]}),(0,R.jsx)(O,{className:`min-h-0 flex-1 font-mono`,children:(0,R.jsxs)(`div`,{className:`px-4 py-2`,children:[n===`headers`&&(0,R.jsx)(we,{entry:e}),n===`payload`&&(0,R.jsx)(De,{entry:e}),n===`response`&&(0,R.jsx)(Oe,{entry:e})]})})]})}function we({entry:e}){let[t,n]=(0,L.useState)(!0),[r,i]=(0,L.useState)(!1),[a,o]=(0,L.useState)(!1),s=e.requestHeaders?Object.entries(e.requestHeaders):[],c=e.responseHeaders?Object.entries(e.responseHeaders):[];return(0,R.jsxs)(`div`,{className:`space-y-1`,children:[(0,R.jsxs)(K,{title:`General`,open:t,onToggle:()=>n(!t),children:[(0,R.jsx)(q,{label:`URL`,value:e.url}),(0,R.jsx)(q,{label:`Method`,value:e.method}),(0,R.jsx)(q,{label:`Status Code`,value:e.failed?`Failed`:e.status?`${e.status} ${e.statusText??``}`:`Pending`,statusDot:e.status}),(0,R.jsx)(q,{label:`Start`,value:Te(e.startTime)}),(0,R.jsx)(q,{label:`Duration`,value:U(e.duration)})]}),(0,R.jsx)(K,{title:`Request Headers${s.length>0?` \u00d7 ${s.length}`:``}`,open:r,onToggle:()=>i(!r),children:s.length>0?s.map(([e,t])=>(0,R.jsx)(q,{label:e,value:t},e)):(0,R.jsx)(`div`,{className:`text-muted-foreground py-1`,children:`No request headers captured`})}),(0,R.jsx)(K,{title:`Response Headers${c.length>0?` \u00d7 ${c.length}`:``}`,open:a,onToggle:()=>o(!a),children:c.length>0?c.map(([e,t])=>(0,R.jsx)(q,{label:e,value:t},e)):(0,R.jsx)(`div`,{className:`text-muted-foreground py-1`,children:`No response headers captured`})})]})}function Te(e){if(!e)return`-`;let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}:${t.getSeconds().toString().padStart(2,`0`)}.${t.getMilliseconds().toString().padStart(3,`0`)}`}function Ee(e){try{let t=new URL(e);return Array.from(t.searchParams.entries())}catch{return[]}}function De({entry:e}){let[t,n]=(0,L.useState)(!0),[r,i]=(0,L.useState)(!0),a=(0,L.useMemo)(()=>Ee(e.url),[e.url]),o=!!e.postData,s=(0,L.useMemo)(()=>{if(!e.postData)return[];let t=e.postData;try{t=JSON.stringify(JSON.parse(e.postData),null,2)}catch{}return t.split(`
|
|
2
2
|
`)},[e.postData]);return a.length===0&&!o?(0,R.jsx)(`div`,{className:`text-muted-foreground py-4 text-center`,children:`No payload data`}):(0,R.jsxs)(`div`,{className:`space-y-1`,children:[a.length>0&&(0,R.jsx)(K,{title:`Query String Parameters \u00d7 ${a.length}`,open:t,onToggle:()=>n(!t),children:a.map(([e,t],n)=>(0,R.jsx)(q,{label:e,value:t},`${e}-${n}`))}),o&&(0,R.jsx)(K,{title:`Request Body`,open:r,onToggle:()=>i(!r),children:(0,R.jsx)(`div`,{className:`bg-muted/30 overflow-x-auto rounded`,children:(0,R.jsx)(`pre`,{className:`text-xs whitespace-pre`,children:s.map((e,t)=>(0,R.jsxs)(`div`,{className:`flex`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground/50 w-8 shrink-0 pr-2 text-right select-none`,children:t+1}),(0,R.jsx)(`span`,{className:`break-all`,children:e})]},t))})})})]})}function Oe({entry:e}){let{isJson:t,lines:n}=(0,L.useMemo)(()=>{if(!e.responseBody||e.responseBodyBase64)return{formatted:``,isJson:!1,lines:[]};try{let t=JSON.stringify(JSON.parse(e.responseBody),null,2);return{formatted:t,isJson:!0,lines:t.split(`
|
|
3
3
|
`)}}catch{return{formatted:e.responseBody,isJson:!1,lines:e.responseBody.split(`
|
|
4
4
|
`)}}},[e.responseBody,e.responseBodyBase64]);return e.responseBody?e.responseBodyBase64?e.mimeType?.startsWith(`image/`)?(0,R.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-4`,children:[(0,R.jsx)(`img`,{src:`data:${e.mimeType};base64,${e.responseBody}`,alt:`Response preview`,className:`max-h-[400px] max-w-full rounded border object-contain`}),(0,R.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.mimeType,` - `,W(e.size)]})]}):(0,R.jsxs)(`div`,{className:`text-muted-foreground py-4 text-center`,children:[`Binary response (`,e.mimeType??`unknown type`,` - `,W(e.size),`)`]}):(0,R.jsx)(`div`,{className:`bg-muted/30 overflow-x-auto rounded`,children:(0,R.jsx)(`pre`,{className:`text-xs whitespace-pre`,children:n.map((e,n)=>(0,R.jsxs)(`div`,{className:`flex`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground/50 w-8 shrink-0 pr-2 text-right select-none`,children:n+1}),(0,R.jsx)(`span`,{className:w(`break-all`,t&&`text-foreground`),children:e})]},n))})}):(0,R.jsx)(`div`,{className:`text-muted-foreground py-4 text-center`,children:e.status?`Response body not captured`:`Waiting for response...`})}function K({title:e,open:t,onToggle:n,children:r}){return(0,R.jsxs)(`div`,{children:[(0,R.jsxs)(`button`,{onClick:n,className:`bg-muted/50 text-foreground hover:bg-muted flex w-full items-center gap-1 rounded-sm px-2 py-1.5 font-semibold`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground w-4 text-center`,children:t?`▾`:`▸`}),e]}),t&&(0,R.jsx)(`div`,{className:`px-3 py-2`,children:r})]})}function q({label:e,value:t,statusDot:n}){return(0,R.jsxs)(`div`,{className:`flex gap-4 py-0.5`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground w-[160px] shrink-0`,children:e}),(0,R.jsxs)(`span`,{className:`min-w-0 break-all`,children:[n!=null&&(0,R.jsx)(`span`,{className:w(`mr-1.5 inline-block size-2 rounded-full`,n>=200&&n<300&&`bg-green-500`,n>=300&&n<400&&`bg-yellow-500`,n>=400&&`bg-red-500`,!n&&`bg-muted-foreground`)}),t]})]})}function ke({activeFile:e,projectPath:t}){let[n,r]=(0,L.useState)(null),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(null),c=(0,L.useRef)(null);(0,L.useEffect)(()=>{if(!e||!t){r(null),s(null),c.current=null;return}let n=`${t}/${e}`;c.current!==n&&(c.current=n,a(!0),s(null),C.readFile(n).then(e=>{e.isOk()?r(e.value.content):s(`Failed to load file`),a(!1)}))},[e,t]);let l=(0,L.useMemo)(()=>{if(!e)return`typescript`;let t=e.split(`.`).pop()??``;return t===`ts`||t===`tsx`?`typescript`:t===`js`||t===`jsx`?`javascript`:`typescript`},[e]);return e?i?(0,R.jsx)(j,{testId:`test-detail-source-loading`,label:`Loading…`}):o?(0,R.jsx)(`div`,{className:`text-destructive flex h-full items-center justify-center text-xs`,children:o}):n?(0,R.jsxs)(`div`,{className:`h-full overflow-auto`,children:[(0,R.jsx)(`div`,{className:`text-muted-foreground border-b px-3 py-1 text-xs`,children:e}),(0,R.jsx)(V,{code:n,language:l,maxHeight:`none`,className:`h-full`})]}):(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center text-xs`,children:`No source available`}):(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center text-xs`,children:`Run a test to view its source`})}var Ae=[`page.goto`,`page.click`,`page.fill`,`page.type`,`page.press`,`page.waitFor`,`locator.`,`expect(`,`navigating to`,`waiting for`],je=/^(\s*)(\d+\s+\|)?\s*(page\.|locator\.|expect\(|await\s+(?:page|locator|expect))/,Me=/^(\s*)(›|→|⮕|➤|\d+\))\s+(.+)/;function J({outputLines:e,structuredActions:t}){let n=(0,L.useRef)(null),r=(0,L.useRef)(!1),i=t&&t.length>0,a=(0,L.useMemo)(()=>{if(i)return[];let t=[];for(let n of e){let e=n.line.trim();e&&(je.test(e)||Me.test(e)||Ae.some(t=>e.includes(t))||/^\s*\d+\s*\|/.test(e))&&t.push({text:e,timestamp:n.timestamp,isError:n.stream===`stderr`})}return t},[e,i]),o=i?t.length:a.length;return(0,L.useEffect)(()=>{!n.current||r.current||(n.current.scrollTop=n.current.scrollHeight)},[o]),o===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center text-xs`,children:`Playwright actions will appear here during test execution…`}):(0,R.jsx)(O,{viewportRef:n,viewportProps:{onScroll:()=>{if(!n.current)return;let{scrollTop:e,scrollHeight:t,clientHeight:i}=n.current;r.current=t-e-i>40}},className:`h-full font-mono text-xs`,children:i?(0,R.jsx)(`div`,{children:t.map(e=>(0,R.jsxs)(`div`,{className:w(`border-b border-border/20 px-3 py-1`,e.error&&`text-destructive`),"data-testid":`call-action-${e.id}`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground`,children:e.category===`expect`?`✓ `:`● `}),e.title,e.duration!=null&&(0,R.jsx)(`span`,{className:`text-muted-foreground ml-2`,children:e.duration<1e3?`${Math.round(e.duration)}ms`:`${(e.duration/1e3).toFixed(1)}s`})]},e.id))}):(0,R.jsx)(`div`,{children:a.map((e,t)=>(0,R.jsx)(`div`,{className:w(`border-b border-border/20 px-3 py-1`,e.isError&&`text-destructive`),children:e.text},t))})})}function Ne({outputLines:e}){let t=(0,L.useMemo)(()=>{let t=[],n=new Set;for(let r of e){let e=r.line.trim(),i=e.matchAll(/@(\w+)(?:\s*[:(]\s*(.+?)\s*[):]?)?/g);for(let e of i){let r=`${e[1]}:${e[2]??``}`;n.has(r)||(n.add(r),t.push({type:e[1],description:e[2]??``}))}let a=e.match(/^\s*(?:annotation|tag)\s*:\s*(.+)/i);if(a){let e=`anno:${a[1]}`;n.has(e)||(n.add(e),t.push({type:`annotation`,description:a[1]}))}}return t},[e]);return(0,R.jsx)(O,{className:`h-full text-xs`,children:t.length===0?(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center`,children:`No annotations found`}):(0,R.jsx)(`div`,{children:t.map((e,t)=>(0,R.jsxs)(`div`,{className:`border-border/30 flex items-start gap-2 border-b px-3 py-1.5`,children:[(0,R.jsxs)(T,{variant:`outline`,className:`shrink-0 text-[10px]`,children:[`@`,e.type]}),e.description&&(0,R.jsx)(`span`,{className:`text-muted-foreground`,children:e.description})]},t))})})}function Y({label:e}){return(0,R.jsx)(`div`,{className:`text-muted-foreground flex h-full items-center justify-center text-xs`,children:e})}function Pe({outputLines:e,consoleEntries:t,networkEntries:r,errorEntries:a,actions:c,activeFile:u,projectPath:d}){return(0,R.jsxs)(se,{defaultValue:`log`,className:`flex h-full flex-col`,children:[(0,R.jsxs)(P,{className:`h-auto w-full justify-start gap-0 rounded-none border-b bg-transparent p-0`,"data-testid":`test-detail-tabs`,children:[(0,R.jsx)(X,{value:`locator`,icon:(0,R.jsx)(s,{className:`size-3.5`}),label:`Locator`}),(0,R.jsx)(X,{value:`source`,icon:(0,R.jsx)(i,{className:`size-3.5`}),label:`Source`}),(0,R.jsx)(X,{value:`call`,icon:(0,R.jsx)(l,{className:`size-3.5`}),label:`Call`}),(0,R.jsx)(X,{value:`log`,icon:(0,R.jsx)(o,{className:`size-3.5`}),label:`Log`}),(0,R.jsx)(X,{value:`errors`,icon:(0,R.jsx)(b,{className:`size-3.5`}),label:`Errors`,count:a.length}),(0,R.jsx)(X,{value:`console`,icon:(0,R.jsx)(y,{className:`size-3.5`}),label:`Console`,count:t.length}),(0,R.jsx)(X,{value:`network`,icon:(0,R.jsx)(g,{className:`size-3.5`}),label:`Network`,count:r.length}),(0,R.jsx)(X,{value:`attachments`,icon:(0,R.jsx)(h,{className:`size-3.5`}),label:`Attachments`}),(0,R.jsx)(X,{value:`annotations`,icon:(0,R.jsx)(n,{className:`size-3.5`}),label:`Annotations`})]}),(0,R.jsxs)(`div`,{className:`min-h-0 flex-1`,children:[(0,R.jsx)(N,{value:`locator`,className:`mt-0 h-full`,children:(0,R.jsx)(Y,{label:`Locator`})}),(0,R.jsx)(N,{value:`source`,className:`mt-0 h-full`,children:(0,R.jsx)(ke,{activeFile:u,projectPath:d})}),(0,R.jsx)(N,{value:`call`,className:`mt-0 h-full`,children:(0,R.jsx)(J,{outputLines:e,structuredActions:c})}),(0,R.jsx)(N,{value:`log`,className:`mt-0 h-full`,children:(0,R.jsx)(he,{outputLines:e})}),(0,R.jsx)(N,{value:`errors`,className:`mt-0 h-full`,children:(0,R.jsx)(_e,{entries:a})}),(0,R.jsx)(N,{value:`console`,className:`mt-0 h-full`,children:(0,R.jsx)(ge,{entries:t})}),(0,R.jsx)(N,{value:`network`,className:`mt-0 h-full`,children:(0,R.jsx)(be,{entries:r})}),(0,R.jsx)(N,{value:`attachments`,className:`mt-0 h-full`,children:(0,R.jsx)(Y,{label:`Attachments`})}),(0,R.jsx)(N,{value:`annotations`,className:`mt-0 h-full`,children:(0,R.jsx)(Ne,{outputLines:e})})]})]})}function X({value:e,icon:t,label:n,count:r}){return(0,R.jsxs)(M,{value:e,className:`data-[state=active]:border-primary gap-1.5 rounded-none border-b-2 border-transparent px-3 py-1.5 data-[state=active]:bg-transparent data-[state=active]:shadow-none`,"data-testid":`test-detail-tab-${e}`,children:[t,n,r!=null&&r>0&&(0,R.jsx)(T,{variant:`secondary`,className:`ml-1 h-4 min-w-[16px] px-1 text-[10px]`,children:r})]})}var Z=[.5,.75,1,1.25,1.5,2],Fe=1280,Ie=720,Q=null;function Le(e){Q=e,window.dispatchEvent(new CustomEvent(`test:frame`))}function Re(e,t){let n=e.getContext(`2d`);if(!n)return;let r=e.width/Fe,i=e.height/Ie,a=t.x*r,o=t.y*i,s=t.width*r,c=t.height*i;n.strokeStyle=`rgba(232, 68, 133, 0.9)`,n.lineWidth=2,n.strokeRect(a,o,s,c),n.fillStyle=`rgba(232, 68, 133, 0.12)`,n.fillRect(a,o,s,c)}function ze(e,t){if(e.length===0)return null;let n=e[0],r=Math.abs(n.timestamp-t);for(let i=1;i<e.length;i++){let a=Math.abs(e[i].timestamp-t);a<r&&(n=e[i],r=a)}return n}function $(e,t,n){let r=e.getContext(`2d`);if(!r)return;let i=new Image;i.onload=()=>{e.width=i.width,e.height=i.height,r.drawImage(i,0,0),n&&Re(e,n)},i.src=`data:image/jpeg;base64,${t}`}function Be({isRunning:e,isStreaming:n,outputLines:r,consoleEntries:i,networkEntries:o,errorEntries:s,activeFile:c,projectPath:l,onStop:u}){let p=(0,L.useRef)(null),[m,h]=(0,L.useState)(1),[g,_]=(0,L.useState)(!1),v=(0,L.useRef)(null),y=I(e=>e.actions),b=I(e=>e.hoveredActionIndex),x=I(e=>e.selectedActionIndex),S=I(e=>e.frameHistory),C=I(e=>e.setHoveredActionIndex),T=I(e=>e.setSelectedActionIndex),E=y.length>0,D=b>=0?b:x,O=D>=0,k=(0,L.useCallback)(()=>{h(e=>{let t=Z.indexOf(e);return t<Z.length-1?Z[t+1]:e})},[]),A=(0,L.useCallback)(()=>{h(e=>{let t=Z.indexOf(e);return t>0?Z[t-1]:e})},[]),M=(0,L.useCallback)(()=>{v.current&&(document.fullscreenElement?(document.exitFullscreen().catch(()=>{}),_(!1)):(v.current.requestFullscreen().catch(()=>{}),_(!0)))},[]),N=(0,L.useCallback)(()=>{let e=x>=0?x:y.length;e>0&&T(e-1)},[x,y.length,T]),P=(0,L.useCallback)(()=>{let e=x;e<y.length-1?T(e+1):T(-1)},[x,y.length,T]);return(0,L.useEffect)(()=>{let e=()=>_(!!document.fullscreenElement);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]),(0,L.useEffect)(()=>{let e=p.current;if(!e)return;let t=e.getContext(`2d`);if(!t)return;let n=()=>{let n=I.getState();if((n.hoveredActionIndex>=0?n.hoveredActionIndex:n.selectedActionIndex)>=0||!Q)return;let r=new Image;r.onload=()=>{e.width=r.width,e.height=r.height,t.drawImage(r,0,0),n.setStreaming(!0)},r.src=`data:image/jpeg;base64,${Q}`};return window.addEventListener(`test:frame`,n),()=>window.removeEventListener(`test:frame`,n)},[]),(0,L.useEffect)(()=>{let e=p.current;if(!e||D<0)return;let t=y[D];if(!t)return;let n=ze(S,t.frameTimestamp??t.startTime/1e3);n?$(e,n.data,t.boundingBox):Q&&t.boundingBox&&$(e,Q,t.boundingBox)},[D,y,S]),(0,L.useEffect)(()=>{if(D>=0)return;let e=p.current;!e||!Q||$(e,Q)},[D]),(0,R.jsxs)(`div`,{ref:v,className:`flex h-full flex-col overflow-hidden`,children:[(0,R.jsxs)(`div`,{className:`bg-muted/30 flex items-center justify-between border-b px-2 py-1`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,R.jsx)(F,{"data-testid":`browser-prev-action`,tooltip:`Previous action`,disabled:!E,size:`icon-sm`,onClick:N,children:(0,R.jsx)(f,{className:`icon-base`})}),e?(0,R.jsx)(F,{"data-testid":`browser-stop`,tooltip:`Stop`,size:`icon-sm`,onClick:u,className:`text-destructive hover:text-destructive`,children:(0,R.jsx)(t,{className:`icon-base fill-current`})}):(0,R.jsx)(F,{"data-testid":`browser-play`,tooltip:`Play`,disabled:!n,size:`icon-sm`,children:(0,R.jsx)(d,{className:`icon-base`})}),(0,R.jsx)(F,{"data-testid":`browser-next-action`,tooltip:`Next action`,disabled:!E,size:`icon-sm`,onClick:P,children:(0,R.jsx)(ee,{className:`icon-base`})}),E&&(0,R.jsxs)(`span`,{className:`text-muted-foreground ml-1 text-[10px] tabular-nums`,children:[D>=0?D+1:`-`,` / `,y.length]}),O&&(0,R.jsx)(`button`,{className:`bg-muted text-muted-foreground hover:bg-muted/80 ml-2 rounded px-1.5 py-0.5 text-[10px] font-medium`,onClick:()=>{T(-1),C(-1)},"data-testid":`browser-go-live`,children:`Go Live`})]}),(0,R.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,R.jsx)(F,{"data-testid":`browser-zoom-out`,tooltip:`Zoom out`,size:`icon-sm`,disabled:m<=Z[0],onClick:A,children:(0,R.jsx)(re,{className:`icon-base`})}),(0,R.jsxs)(ae,{children:[(0,R.jsx)(oe,{asChild:!0,children:(0,R.jsx)(`button`,{"data-testid":`browser-zoom-level`,className:`text-muted-foreground hover:bg-muted min-w-[32px] rounded px-1 text-center text-xs tabular-nums`,onClick:()=>h(1),"aria-label":`Reset zoom`,children:m===1?`1x`:`${m}x`})}),(0,R.jsx)(ie,{children:`Reset zoom`})]}),(0,R.jsx)(F,{"data-testid":`browser-zoom-in`,tooltip:`Zoom in`,size:`icon-sm`,disabled:m>=Z[Z.length-1],onClick:k,children:(0,R.jsx)(ne,{className:`icon-base`})}),(0,R.jsx)(F,{"data-testid":`browser-fullscreen`,tooltip:g?`Exit fullscreen`:`Fullscreen`,size:`icon-sm`,onClick:M,children:(0,R.jsx)(te,{className:`icon-base`})})]})]}),E&&(0,R.jsx)(B,{actions:y,hoveredIndex:b,selectedIndex:x,onHover:C,onSelect:T}),(0,R.jsxs)(`div`,{className:`flex min-h-0 flex-2 border-b`,children:[E&&(0,R.jsx)(`div`,{className:`w-[220px] shrink-0 overflow-hidden border-r`,children:(0,R.jsx)(de,{actions:y,hoveredIndex:b,selectedIndex:x,onHover:C,onSelect:T})}),(0,R.jsxs)(`div`,{className:`relative flex min-h-0 min-w-0 flex-1 items-center justify-center overflow-auto bg-black/5`,children:[!e&&!n?(0,R.jsxs)(`div`,{className:`text-muted-foreground flex flex-col items-center gap-2`,children:[(0,R.jsx)(a,{className:`size-8`}),(0,R.jsx)(`span`,{className:`text-sm`,children:`No test running`})]}):e&&!n?(0,R.jsx)(j,{fill:!1,testId:`browser-preview-connecting`,label:`Connecting to browser…`}):null,(0,R.jsx)(`canvas`,{ref:p,className:w(`max-h-full max-w-full object-contain`,!n&&`hidden`),style:{transform:`scale(${m})`,transformOrigin:`center center`}})]})]}),(0,R.jsx)(`div`,{className:`bg-background min-h-0 flex-2`,children:(0,R.jsx)(Pe,{outputLines:r,consoleEntries:i,networkEntries:o,errorEntries:s,actions:y,activeFile:c,projectPath:l})})]})}export{Be as BrowserPreview,Le as renderFrame};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Lt as t,Y as n,s as r}from"./icons-sqwAEN28.js";import{o as i}from"./markdown-DBtwZWLP.js";import{t as a}from"./useTranslation-DAPPK3Hy.js";import{t as o}from"./circuit-breaker-store-DR3Dx8rQ.js";import{t as s}from"./button-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Lt as t,Y as n,s as r}from"./icons-sqwAEN28.js";import{o as i}from"./markdown-DBtwZWLP.js";import{t as a}from"./useTranslation-DAPPK3Hy.js";import{t as o}from"./circuit-breaker-store-DR3Dx8rQ.js";import{t as s}from"./button-DqIT3IPY.js";var c=e(i(),1);function l(){let{t:e}=a(),i=o(e=>e.state),l=o(e=>e.retryNow);if(i===`closed`)return null;let u=i===`half-open`;return(0,c.jsx)(`div`,{className:`bg-background fixed inset-0 z-100 flex items-center justify-center`,children:(0,c.jsxs)(`div`,{className:`flex max-w-md flex-col items-center gap-6 px-6 text-center`,children:[(0,c.jsx)(`div`,{className:`bg-destructive/10 flex size-16 items-center justify-center rounded-full`,children:(0,c.jsx)(r,{className:`text-destructive size-8`})}),(0,c.jsxs)(`div`,{className:`space-y-2`,children:[(0,c.jsx)(`h2`,{className:`text-xl font-semibold`,children:e(`circuitBreaker.title`)}),(0,c.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:e(`circuitBreaker.description`)})]}),u?(0,c.jsxs)(`p`,{className:`text-muted-foreground flex items-center gap-2 text-sm`,children:[(0,c.jsx)(t,{className:`icon-base animate-spin`}),e(`circuitBreaker.attemptingReconnect`)]}):(0,c.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:e(`circuitBreaker.willRetryAutomatically`)}),!u&&(0,c.jsxs)(s,{onClick:l,size:`lg`,children:[(0,c.jsx)(n,{className:`icon-base mr-2`}),e(`circuitBreaker.retryNow`)]})]})})}export{l as CircuitBreakerDialog};
|
package/packages/client/dist/assets/{CommandPalette-DeBQCdqo.js → CommandPalette-Xtu8FVFI.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{yn as t,zr as n}from"./icons-sqwAEN28.js";import{o as r}from"./markdown-DBtwZWLP.js";import{t as i}from"./useTranslation-DAPPK3Hy.js";import{t as a}from"./telemetry-BE4cJhqj.js";import{_t as o,j as s}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{yn as t,zr as n}from"./icons-sqwAEN28.js";import{o as r}from"./markdown-DBtwZWLP.js";import{t as i}from"./useTranslation-DAPPK3Hy.js";import{t as a}from"./telemetry-BE4cJhqj.js";import{_t as o,j as s}from"./index-CmX0PQ41.js";import{Dr as c,Q as l,Rt as u,Un as d,et as f,it as p,n as m,nt as h,r as g,rt as _,tt as v,yr as y}from"./items-z89mbR0g.js";var b=e(n(),1),x=e(r(),1),S=s(`command-palette`);function C({open:e,onOpenChange:t}){return(0,x.jsx)(E,{open:e,onOpenChange:t})}function w(e,t,n,r){let i=t.toLowerCase(),a=(0,b.useMemo)(()=>{if(!i)return e.slice(0,50);let t=[];for(let n of e){let e=n.name.toLowerCase().indexOf(i),r=n.path.toLowerCase().indexOf(i);if(e===-1&&r===-1)continue;let a=+(e===-1),o=e===-1?r:e;t.push({p:n,rank:a,pos:o})}return t.sort((e,t)=>e.rank-t.rank||e.pos-t.pos),t.slice(0,50).map(e=>e.p)},[e,i]),o=(0,b.useMemo)(()=>r?i?m.filter(e=>{let t=e.label.toLowerCase(),r=n(g[e.id]??e.label).toLowerCase();return t.includes(i)||r.includes(i)}):m:[],[i,n,r]);return{displayProjects:a,displaySettings:o,hasNoResults:!!i&&a.length===0&&o.length===0,searchLower:i}}function T(e,t){(0,b.useEffect)(()=>{if(!e)return;let n=window,r=n.__paletteOpenTs;if(r==null)return;let i=performance.now()-r;requestAnimationFrame(()=>{let e=performance.now()-r;S.info(`palette.open_timing`,{commit_ms:Math.round(i),paint_ms:Math.round(e),project_count:t,settings_count:m.length}),a(`palette.open.commit_ms`,Math.round(i),{type:`gauge`}),a(`palette.open.paint_ms`,Math.round(e),{type:`gauge`}),n.__paletteOpenTs=void 0})},[e,t])}function E({open:e,onOpenChange:n}){let{t:r}=i(),a=o(),s=c(e=>e.projects),m=c(e=>e.selectedProjectId),S=y(e=>e.startNewThread),C=(0,b.useRef)(!1),E=(0,b.useRef)(null),[D,O]=(0,b.useState)(``),{displayProjects:k,displaySettings:A,hasNoResults:j,searchLower:M}=w(s,D,r,!!m);(0,b.useEffect)(()=>{E.current?.scrollTo({top:0})},[D]),T(e,s.length);let N=e=>{C.current=!0,n(!1),setTimeout(()=>{S(e),d.getState().fetchForProject(e),a(u(`/projects/${e}`)),c.getState().selectProject(e,{revealIntent:`start`})},150)},P=(0,b.useCallback)(e=>{if(O(``),C.current){e.preventDefault(),C.current=!1;let t=()=>{document.querySelector(`[data-testid="prompt-editor"]`)?.focus()};requestAnimationFrame(t),setTimeout(t,50),setTimeout(t,150)}},[]),F=e=>{m&&(C.current=!0,n(!1),setTimeout(()=>{a(u(`/projects/${m}/settings/${e}`))},150))};return(0,x.jsxs)(l,{open:e,onOpenChange:n,onCloseAutoFocus:P,shouldFilter:!1,children:[(0,x.jsx)(v,{"data-testid":`command-palette-search`,placeholder:r(`commandPalette.searchPlaceholder`),value:D,onValueChange:O}),(0,x.jsxs)(_,{ref:E,children:[j&&(0,x.jsx)(`div`,{className:`text-muted-foreground py-6 text-center text-sm`,children:r(`commandPalette.noResults`)}),k.length>0&&(0,x.jsx)(f,{heading:r(`commandPalette.projects`),children:k.map(e=>(0,x.jsxs)(h,{"data-testid":`command-palette-project-${e.id}`,value:`${e.name} ${e.path}`,onSelect:()=>N(e.id),children:[(0,x.jsx)(t,{className:`icon-base shrink-0`}),(0,x.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,x.jsx)(`span`,{className:`truncate`,children:e.name}),(0,x.jsx)(`span`,{className:`text-muted-foreground truncate text-xs`,children:e.path})]})]},e.id))}),!M&&k.length===0&&(0,x.jsx)(`div`,{className:`text-muted-foreground px-2 py-6 text-center text-sm`,children:r(`commandPalette.noProjects`)}),k.length>0&&A.length>0&&(0,x.jsx)(p,{}),A.length>0&&(0,x.jsx)(f,{heading:r(`commandPalette.settings`),children:A.map(e=>{let t=e.icon;return(0,x.jsxs)(h,{"data-testid":`command-palette-settings-${e.id}`,value:e.label,onSelect:()=>F(e.id),children:[(0,x.jsx)(t,{className:`icon-base`}),(0,x.jsx)(`span`,{children:r(g[e.id]??e.label)})]},e.id)})})]})]})}export{C as CommandPalette};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Ot as t,b as n,z as r,zr as i}from"./icons-sqwAEN28.js";import{o as a}from"./markdown-DBtwZWLP.js";import{t as o}from"./useTranslation-DAPPK3Hy.js";import{k as s}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Ot as t,b as n,z as r,zr as i}from"./icons-sqwAEN28.js";import{o as a}from"./markdown-DBtwZWLP.js";import{t as o}from"./useTranslation-DAPPK3Hy.js";import{k as s}from"./index-CmX0PQ41.js";import{t as c}from"./button-DqIT3IPY.js";import{Dn as l,Et as u,On as d,Pt as f,Wr as p,in as m,kn as h,kr as g,rn as _}from"./items-z89mbR0g.js";import{_ as v}from"./StashTab-CAqDgV-y.js";import{useCommentStore as y}from"./comment-store-BLJA7qy5.js";var b=e(i(),1),x=e(a(),1);function S(){let{t:e}=o(),i=v(),a=u(e=>e),S=f(i),C=a?.id===i?a:S,w=C?.userId??null,T=s(e=>e.user?.id??null),E=!!T&&w===T,D=g(C,T),O=y(e=>i?e.byThread[i]??null:null),k=y(e=>i?!!e.loadingByThread[i]:!1),A=y(e=>e.fetch),j=y(e=>e.post),M=y(e=>e.remove),[N,P]=(0,b.useState)(``),[F,I]=(0,b.useState)(!1),L=(0,b.useRef)(null);(0,b.useEffect)(()=>{i&&A(i)},[i,A]);let R=O?.length??0;(0,b.useEffect)(()=>{L.current?.scrollIntoView({block:`end`})},[R]);let z=N.trim().length>0&&!F&&!!i,B=async()=>{if(!z||!i)return;I(!0);let e=await j(i,N);I(!1),e&&P(``)},V=(0,b.useMemo)(()=>(0,x.jsxs)(`div`,{className:`border-border flex h-10 shrink-0 items-center gap-2 border-b px-3`,children:[(0,x.jsx)(t,{className:`text-muted-foreground h-4 w-4`}),(0,x.jsx)(`span`,{className:`text-sm font-medium`,children:e(`comments.title`,`Comments`)}),R>0&&(0,x.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:R})]}),[e,R]);return i?(0,x.jsxs)(`div`,{className:`bg-sidebar flex h-full w-full flex-col`,"data-testid":`comments-pane`,children:[V,(0,x.jsx)(m,{className:`min-h-0 flex-1`,children:(0,x.jsxs)(`div`,{className:`flex flex-col gap-3 p-3`,"data-testid":`comments-list`,children:[k&&R===0?(0,x.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:e(`comments.loading`,`Loading…`)}):R===0?(0,x.jsxs)(`div`,{className:`text-muted-foreground flex flex-col items-center gap-1 py-10 text-center text-sm`,children:[(0,x.jsx)(t,{className:`h-6 w-6 opacity-50`}),(0,x.jsx)(`p`,{children:e(`comments.empty`,`No comments yet`)}),(0,x.jsx)(`p`,{className:`text-xs`,children:e(`comments.emptyHint`,`Leave the first note below.`)})]}):O.map(t=>{let r=t.user?.name??t.user?.username??t.userId,a=t.userId===T;return(0,x.jsxs)(`div`,{className:`group flex gap-2`,"data-testid":`comment-row-${t.id}`,children:[(0,x.jsxs)(l,{className:`mt-0.5 h-7 w-7 shrink-0`,children:[t.user?.image&&(0,x.jsx)(h,{src:t.user.image,alt:r}),(0,x.jsx)(d,{name:r,className:`text-xs`,children:r.charAt(0).toUpperCase()})]}),(0,x.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,x.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,x.jsx)(`span`,{className:`truncate text-sm font-medium`,children:a?e(`comments.you`,`{{name}} (you)`,{name:r}):r}),(0,x.jsx)(`span`,{className:`text-muted-foreground shrink-0 text-xs`,children:_(t.createdAt,e)}),E&&(0,x.jsx)(c,{variant:`ghost`,size:`icon-sm`,className:`text-muted-foreground hover:text-status-danger ml-auto h-6 w-6 shrink-0 opacity-0 group-hover:opacity-100`,onClick:()=>void M(i,t.id),"data-testid":`comment-delete-${t.id}`,"aria-label":e(`comments.delete`,`Delete comment`),children:(0,x.jsx)(n,{className:`h-3.5 w-3.5`})})]}),(0,x.jsx)(`p`,{className:`text-sm break-words whitespace-pre-wrap`,children:t.content})]})]},t.id)}),(0,x.jsx)(`div`,{ref:L})]})}),D?(0,x.jsxs)(`div`,{className:`border-border flex shrink-0 items-end gap-2 border-t p-3`,children:[(0,x.jsx)(p,{value:N,onChange:e=>P(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),B())},placeholder:e(`comments.placeholder`,`Write a comment…`),className:`max-h-32 min-h-9 resize-none text-sm`,rows:1,"data-testid":`comment-input`}),(0,x.jsx)(c,{size:`icon`,disabled:!z,onClick:()=>void B(),"data-testid":`comment-send`,"aria-label":e(`comments.send`,`Send comment`),children:(0,x.jsx)(r,{className:`h-4 w-4`})})]}):(0,x.jsx)(`div`,{className:`border-border text-muted-foreground shrink-0 border-t p-3 text-center text-xs`,"data-testid":`comment-readonly-notice`,children:e(`comments.viewOnly`,`You have view-only access — you can read comments but not post.`)})]}):(0,x.jsxs)(`div`,{className:`bg-sidebar flex h-full w-full flex-col`,"data-testid":`comments-pane`,children:[V,(0,x.jsx)(`div`,{className:`text-muted-foreground flex flex-1 items-center justify-center text-sm`,children:e(`comments.noThread`,`No thread selected`)})]})}export{S as CommentsPane};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{zr as t}from"./icons-sqwAEN28.js";import{o as n}from"./markdown-DBtwZWLP.js";import{lt as r}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{zr as t}from"./icons-sqwAEN28.js";import{o as n}from"./markdown-DBtwZWLP.js";import{lt as r}from"./index-CmX0PQ41.js";var i=e(t(),1),a=e(n(),1);function o(e){let t=[],n=[],r=``,i=!1,a=e.replace(/\r\n/g,`
|
|
2
2
|
`).replace(/\r/g,`
|
|
3
3
|
`);for(let e=0;e<a.length;e++){let o=a[e];i?o===`"`?a[e+1]===`"`?(r+=`"`,e++):i=!1:r+=o:o===`"`?i=!0:o===`,`?(n.push(r),r=``):o===`
|
|
4
4
|
`?(n.push(r),t.push(n),n=[],r=``):r+=o}return(r.length>0||n.length>0)&&(n.push(r),t.push(n)),t.filter(e=>e.length>1||e.length===1&&e[0]!==``)}function s({source:e,fill:t}){let n=(0,i.useMemo)(()=>o(e),[e]);if(n.length===0)return(0,a.jsx)(`div`,{className:`text-muted-foreground text-sm`,children:`Empty CSV`});let[s,...c]=n;return(0,a.jsx)(`div`,{className:r(`overflow-auto`,t&&`h-full`),"data-testid":`csv-table`,children:(0,a.jsxs)(`table`,{className:`border-collapse text-(length:--diff-font-size,13px)`,children:[(0,a.jsx)(`thead`,{children:(0,a.jsx)(`tr`,{children:s.map((e,t)=>(0,a.jsx)(`th`,{className:`border-border bg-muted/50 border px-2 py-1 text-left font-medium`,children:e},t))})}),(0,a.jsx)(`tbody`,{children:c.map((e,t)=>(0,a.jsx)(`tr`,{children:e.map((e,t)=>(0,a.jsx)(`td`,{className:`border-border border px-2 py-1 align-top`,children:e},t))},t))})]})})}export{s as CsvTable};
|
package/packages/client/dist/assets/{FileSearchDialog-C2RhpM7Z.js → FileSearchDialog-BHaSfVdS.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{B as t,zr as n}from"./icons-sqwAEN28.js";import{o as r}from"./markdown-DBtwZWLP.js";import{t as i}from"./useTranslation-DAPPK3Hy.js";import{t as a}from"./react-B8mHUpgK.js";import{P as o,j as s,lt as ee}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{B as t,zr as n}from"./icons-sqwAEN28.js";import{o as r}from"./markdown-DBtwZWLP.js";import{t as i}from"./useTranslation-DAPPK3Hy.js";import{t as a}from"./react-B8mHUpgK.js";import{P as o,j as s,lt as ee}from"./index-CmX0PQ41.js";import{$r as te,Dr as c,Gr as l,Nn as u,Ot as ne,Qr as re,Rr as ie,Zr as d,ri as f,vr as p,xt as m,yn as h,zr as ae}from"./items-z89mbR0g.js";import{t as g}from"./loading-state-CuNSmah_.js";var _=e(n(),1);function v(e){return new Worker(`/assets/file-search.worker-CqjbLlNC.js`,{name:e?.name})}var y=class{worker;nextRequestId=1;pendingResolve=null;pendingRequestId=0;indexedKey=null;constructor(){this.worker=new v,this.worker.addEventListener(`message`,this.onMessage)}setIndex(e,t,n=[]){this.indexedKey,this.indexedKey=e,this.worker.postMessage({type:`setIndex`,files:t,recents:n})}search(e,t=100){let n=++this.nextRequestId;if(this.pendingResolve){let e=this.pendingResolve;this.pendingResolve=null,e({matches:[],truncated:!1,total:0})}return new Promise(r=>{this.pendingResolve=r,this.pendingRequestId=n,this.worker.postMessage({type:`search`,requestId:n,query:e,limit:t})})}onMessage=e=>{let t=e.data;if(t.type!==`searchResult`||t.requestId!==this.pendingRequestId)return;let n=this.pendingResolve;this.pendingResolve=null,n&&n({matches:t.matches,truncated:t.truncated,total:t.total})};dispose(){this.worker.removeEventListener(`message`,this.onMessage),this.worker.terminate(),this.pendingResolve=null}},b=`funny-file-index`,x=1,S=`indexes`,C=null;function w(){return C||(C=new Promise((e,t)=>{if(typeof indexedDB>`u`){t(Error(`IndexedDB not available`));return}let n=indexedDB.open(b,x);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(S)||e.createObjectStore(S,{keyPath:`basePath`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),C)}async function T(e){try{let t=await w();return await new Promise((n,r)=>{let i=t.transaction(S,`readonly`).objectStore(S).get(e);i.onsuccess=()=>{let e=i.result;n(e?{files:e.files,version:e.version,cachedAt:e.cachedAt}:null)},i.onerror=()=>r(i.error)})}catch{return null}}async function E(e,t,n){try{let r=await w();await new Promise((i,a)=>{let o=r.transaction(S,`readwrite`),s={basePath:e,files:t,version:n,cachedAt:Date.now()};o.objectStore(S).put(s),o.oncomplete=()=>i(),o.onerror=()=>a(o.error),o.onabort=()=>a(o.error)})}catch{}}var D=s(`file-index-store`);async function O(e,t){let n=`path`in e?{path:e.path,since:t}:{threadId:e.threadId,since:t},r=await o.getFileIndex(n);return r.isErr()?(D.warn(`file-index fetch failed`,{target:e,error:r.error.message}),null):`unchanged`in r.value&&r.value.unchanged?r.value.basePath?{basePath:r.value.basePath}:{}:`files`in r.value?{files:r.value.files,version:r.value.version,basePath:r.value.basePath}:null}function k(e){return`path`in e?e.path:`thread:${e.threadId}`}var A=a((e,t)=>({byPath:{},inflight:{},ensureIndex:async n=>{let r=`path`in n?n.path:void 0,i=t();if(r){let e=i.byPath[r];if(e&&!e.stale)return{entry:e,basePath:r}}let a=k(n),o=i.inflight[a];if(o)return o;let s=(async()=>{let i=null;if(r){let t=await T(r);t&&(i={files:t.files,version:t.version,stale:!0},e(e=>({byPath:{...e.byPath,[r]:i}})))}let a=await O(n,i?.version),o=a&&`basePath`in a&&a.basePath?a.basePath:r??null;if(a&&`files`in a&&a.files){let t={files:a.files,version:a.version,stale:!1};return o&&(e(e=>({byPath:{...e.byPath,[o]:t}})),E(o,a.files,a.version)),{entry:t,basePath:o}}if(i&&r){let t={...i,stale:!1};return e(e=>({byPath:{...e.byPath,[r]:t}})),{entry:t,basePath:r}}return o?{entry:t().byPath[o]??null,basePath:o}:{entry:null,basePath:null}})().finally(()=>{e(e=>{let t={...e.inflight};return delete t[a],{inflight:t}})});return e(e=>({inflight:{...e.inflight,[a]:s}})),s},refresh:async n=>{if(`path`in n){let t=n.path;e(e=>e.byPath[t]?{byPath:{...e.byPath,[t]:{...e.byPath[t],stale:!0}}}:e)}return t().ensureIndex(n)}})),j=e(r(),1),oe=s(`file-search-dialog`),M=200,se=32,ce=360;function N({open:e,onOpenChange:t}){return e?(0,j.jsx)(P,{open:e,onOpenChange:t}):null}function P({open:e,onOpenChange:n}){let{t:r}=i(),a=c(e=>e.selectedProjectId),o=c(e=>e.projects).find(e=>e.id===a),s=ne(),g=m(),v=ie(g),[b,x]=(0,_.useState)(void 0),[S,C]=(0,_.useState)(null),w=s||o?.path,T=v?b:w,E=(0,_.useMemo)(()=>v?g?{threadId:g.id}:null:w?{path:w}:null,[v,g,w]),D=A(e=>e.ensureIndex),O=A(e=>T?e.byPath[T]:void 0),[k,N]=(0,_.useState)(``),[P,L]=(0,_.useState)([]),[R,z]=(0,_.useState)(!1),[B,V]=(0,_.useState)(!1),[H,U]=(0,_.useState)(0),W=(0,_.useRef)(null),G=(0,_.useRef)(null),K=(0,_.useRef)(null),q=(0,_.useCallback)(()=>(!K.current&&typeof window<`u`&&(K.current=new y,T&&O&&K.current.setIndex(`${T}:${O.version}`,O.files)),K.current),[T,O]);(0,_.useEffect)(()=>()=>{K.current?.dispose(),K.current=null},[]),(0,_.useEffect)(()=>{!e||!E||(C(null),D(E).then(e=>{v&&e.basePath&&x(e.basePath),!e.entry&&!e.basePath&&C(`Could not load file index`)}).catch(e=>{oe.warn(`failed to load file index`,{target:E,error:String(e)}),C(String(e?.message??e))}))},[e,E,v,D]),(0,_.useEffect)(()=>{if(!T||!O)return;let e=q();e&&e.setIndex(`${T}:${O.version}`,O.files)},[T,O,q]);let J=(0,_.useCallback)(async e=>{let t=q();if(!t||!O){L([]),z(!1);return}V(!0);let n=await t.search(e,M);L(n.matches),z(n.truncated),V(!1),U(0)},[O]);(0,_.useEffect)(()=>{e&&J(k)},[k,e,J]),(0,_.useEffect)(()=>{e||(N(``),L([]),z(!1),U(0),C(null))},[e]);let Y=(0,_.useCallback)(e=>{if(!T)return;n(!1);let t=`${T}/${e}`;ae.getState().openFile(t)},[n,T]),X=(0,_.useMemo)(()=>P.map(e=>{let t=e.path.lastIndexOf(`/`),n=t===-1?e.path:e.path.slice(t+1),r=t+1;return{match:e,filename:n,filenameIndices:e.indices.filter(e=>e>=r).map(e=>e-r)}}),[P]),Z=p({count:X.length,getScrollElement:()=>G.current,estimateSize:()=>se,getItemKey:e=>X[e]?.match.path??e,overscan:8});(0,_.useEffect)(()=>{X.length!==0&&Z.scrollToIndex(H,{align:`auto`})},[H,X.length,Z]);let le=(0,_.useCallback)(e=>{if(X.length!==0){if(e.key===`ArrowDown`)e.preventDefault(),U(e=>(e+1)%X.length);else if(e.key===`ArrowUp`)e.preventDefault(),U(e=>(e-1+X.length)%X.length);else if(e.key===`Home`)e.preventDefault(),U(0);else if(e.key===`End`)e.preventDefault(),U(X.length-1);else if(e.key===`PageDown`)e.preventDefault(),U(e=>Math.min(e+10,X.length-1));else if(e.key===`PageUp`)e.preventDefault(),U(e=>Math.max(e-10,0));else if(e.key===`Enter`){e.preventDefault();let t=X[H];t&&Y(t.match.path)}}},[X,H,Y]),Q=!!E,$=Q&&!S&&(!T||!O),ue=Q&&!$&&!S&&!B&&X.length===0;return(0,j.jsx)(l,{open:e,onOpenChange:n,children:(0,j.jsxs)(re,{children:[(0,j.jsx)(d,{}),(0,j.jsxs)(f,{"aria-describedby":void 0,className:`bg-card data-[state=closed]:animate-fade-out data-[state=open]:animate-fade-in fixed top-[20%] left-[50%] z-50 w-full max-w-3xl translate-x-[-50%] overflow-hidden rounded-lg border p-0 shadow-xl`,onOpenAutoFocus:e=>{e.preventDefault(),W.current?.focus()},children:[(0,j.jsx)(te,{className:`sr-only`,children:r(`fileSearch.title`,`Search files`)}),(0,j.jsxs)(`div`,{className:`flex h-12 items-center border-b px-3`,children:[(0,j.jsx)(t,{className:`mr-2 size-5 shrink-0 opacity-50`}),(0,j.jsx)(`input`,{ref:W,"data-testid":`file-search-input`,placeholder:r(`fileSearch.placeholder`,`Search files by name...`),value:k,onChange:e=>N(e.target.value),onKeyDown:le,className:`placeholder:text-muted-foreground flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1})]}),(0,j.jsxs)(`div`,{ref:G,className:`overflow-y-auto`,style:{maxHeight:ce},children:[Q?S?(0,j.jsx)(F,{text:r(`fileSearch.loadError`,`Could not load file index`)}):$?(0,j.jsx)(I,{text:r(`fileSearch.indexing`,`Indexing files...`)}):ue?(0,j.jsx)(F,{text:r(`fileSearch.noResults`,`No files found`)}):X.length>0?(0,j.jsx)(`div`,{style:{height:Z.getTotalSize(),width:`100%`,position:`relative`},children:Z.getVirtualItems().map(e=>{let t=X[e.index];if(!t)return null;let n=e.index===H;return(0,j.jsxs)(`div`,{"data-testid":`file-search-item-${t.match.path}`,role:`option`,"aria-selected":n,className:ee(`absolute left-0 top-0 flex w-full cursor-pointer items-center gap-2 px-3`,n&&`bg-accent text-accent-foreground`),style:{height:e.size,transform:`translateY(${e.start}px)`},onMouseEnter:()=>U(e.index),onClick:()=>Y(t.match.path),children:[(0,j.jsx)(h,{filePath:t.match.path,className:`icon-base shrink-0`}),(0,j.jsx)(u,{text:t.filename,query:k,indices:t.filenameIndices,className:`truncate text-xs`}),(0,j.jsx)(`span`,{className:`text-muted-foreground ml-auto truncate text-xs`,children:t.match.path})]},e.key)})}):null:(0,j.jsx)(F,{text:r(`fileSearch.noProject`,`Select a project first`)}),R&&X.length>0&&(0,j.jsx)(`div`,{className:`text-muted-foreground border-t px-3 py-1.5 text-center text-xs`,children:r(`fileSearch.truncated`,`Showing first {{count}} results — refine your search`,{count:M})})]})]})]})})}function F({text:e}){return(0,j.jsx)(`div`,{className:`text-muted-foreground px-3 py-6 text-center text-sm`,children:e})}function I({text:e}){return(0,j.jsx)(g,{fill:!1,layout:`inline`,size:`compact`,className:`px-3 py-6`,testId:`file-search-loading`,label:e})}export{N as FileSearchDialog};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Kn as t,Mn as n,Rn as r,Vn as i,bn as a,gn as o,hn as s,hr as c,pn as l,rr as u,v as d,yn as f,yr as ee,zn as te,zr as p}from"./icons-sqwAEN28.js";import{o as m}from"./markdown-DBtwZWLP.js";import{t as ne}from"./useTranslation-DAPPK3Hy.js";import{G as re,V as h,W as ie,j as g,lt as _,q as ae}from"./index-DNxUSLe_.js";import{$n as oe,Cn as se,Gn as v,Jn as y,Kn as b,Nn as x,Qn as ce,Ur as S,Zn as C,bn as le,er as ue,hn as w,tr as de,vn as fe,vr as pe,wn as me,yn as he}from"./items-7qqySF-X.js";var T=e(p(),1),E=e(m(),1),D=g(`file-tree`),O=12,k=24;function A(e,t,n,r,i){let a={children:new Map,files:[]};for(let t of e){let e=t.path.split(`/`);e.pop();let n=a;for(let t of e)n.children.has(t)||n.children.set(t,{children:new Map,files:[]}),n=n.children.get(t);n.files.push(t)}function o(e){let t=e.files.length,n=e.files.reduce((e,t)=>e+(t.additions??0),0),r=e.files.reduce((e,t)=>e+(t.deletions??0),0);for(let i of e.children.values()){let e=o(i);t+=e.fileCount,n+=e.additions,r+=e.deletions}return{fileCount:t,additions:n,deletions:r}}let s=[];function c(e,i){let a=n?.get(e.path),o=r?.get(e.path);if(a&&a.length>0){let o=A(a.map(t=>({...t,path:`${e.path}/${t.path}`})),t,n,r);for(let e of o)s.push({...e,depth:e.depth+i+1})}else o&&s.push({kind:`submodule-status`,submodulePath:e.path,depth:i+1,state:o.state,message:o.message})}function l(e,n,r){let a=Array.from(e.children.entries()).toSorted(([e],[t])=>e.localeCompare(t));for(let[e,i]of a){let a=e,c=i,u=r?`${r}/${e}`:e;for(;c.files.length===0&&c.children.size===1;){let[e,t]=[...c.children.entries()][0];a+=`/${e}`,u+=`/${e}`,c=t}let d=u,f=o(c);s.push({kind:`folder`,path:d,label:a,depth:n,fileCount:f.fileCount,additions:f.additions,deletions:f.deletions}),t.has(d)||l(c,n+1,u)}for(let t of e.files.sort((e,t)=>e.path.localeCompare(t.path)))s.push({kind:`file`,file:t,depth:n}),t.kind===`submodule`&&i?.has(t.path)&&c(t,n)}return l(a,0,``),s}function ge(e){let t=e.split(`/`),n=[];for(let e=t.length-1;e>0;e--)n.push(`/`+t.slice(0,e).join(`/`));return n}function _e(e){let t=e.lastIndexOf(`.`);return t===-1||t===e.length-1?null:e.substring(t)}function ve(e){switch(e){case`added`:return`hsl(142 40% 45%)`;case`modified`:return`hsl(30 90% 55%)`;case`deleted`:return`hsl(0 45% 55%)`;default:return`hsl(200 80% 60%)`}}function ye(e){switch(e){case`added`:return`A`;case`modified`:return`M`;case`deleted`:return`D`;default:return`R`}}function j(e){let t=A(e,new Set),n=new Set;for(let e of t)e.kind===`folder`&&n.add(e.path);return n}function M({files:e,selectedFile:p,onFileClick:m,checkedFiles:g,onToggleFile:j,onRevertFile:M,revertLabel:be,onIgnore:N,basePath:P,diffStatsSize:F=`xs`,fontSize:I=`text-xs`,activeClass:xe=`bg-sidebar-accent text-sidebar-accent-foreground`,hoverClass:L=`hover:bg-sidebar-accent/50 text-muted-foreground`,testIdPrefix:R=`filetree`,rowStyle:z,virtualize:B=!1,searchQuery:V,hideStatus:H=!1,hideDiffStats:U=!1,collapsedFolders:W,onCollapsedFoldersChange:G,onToggleSubmodule:K,submoduleExpansions:Se,submoduleStates:q,expandedSubmodules:J}){let{t:Y}=ne(),[Ce,we]=(0,T.useState)(new Set),X=W??Ce,Z=(0,T.useRef)(0),Te=(0,T.useRef)(null),Q=(0,T.useMemo)(()=>A(e,X,Se,q,J),[e,X,Se,q,J]),Ee=pe({count:B?Q.length:0,getScrollElement:()=>Te.current,estimateSize:()=>k,getItemKey:e=>{let t=Q[e];return t.kind===`folder`?`d:${t.path}`:t.kind===`submodule-status`?`s:${t.submodulePath}:${t.state}`:`f:${t.file.path}`},overscan:15,enabled:B}),De=(0,T.useCallback)(e=>{if(W&&G){let t=new Set(W);t.has(e)?t.delete(e):t.add(e),G(t);return}we(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[W,G]),$=(0,T.useCallback)((e,t)=>{let n=t?e:`/${e}`;navigator.clipboard.writeText(n),S.success(Y(`review.pathCopied`))},[Y]),Oe=(0,T.useCallback)(async(e,t)=>{if(!P)return;let n=t?e.includes(`/`)?e.slice(0,e.lastIndexOf(`/`)):``:e,r=n?`${P}/${n}`:P,i=await h.openDirectory({path:r});i.isErr()&&(D.error(`Failed to open directory`,{path:r,error:String(i.error)}),S.error(Y(`review.openDirectoryError`,`Failed to open directory`)))},[P,Y]),ke=(e,ne,h)=>{if(e.kind===`submodule-status`){let t=e.state===`loading`?Y(`review.submoduleLoading`,{defaultValue:`Loading submodule files…`}):e.state===`error`?e.message??Y(`review.submoduleError`,{defaultValue:`Failed to load submodule`}):Y(`review.submoduleEmpty`,{defaultValue:`No changes inside submodule`});return(0,E.jsx)(`div`,{className:_(`flex h-[24px] select-none items-center gap-1.5 overflow-hidden pr-1 italic`,I,`text-muted-foreground/80`),style:{...h,paddingLeft:`${8+e.depth*O}px`},"data-testid":`${R}-submodule-status-${e.submodulePath}`,children:(0,E.jsx)(`span`,{className:`truncate`,children:t})},`submodule-status-${e.submodulePath}-${e.state}`)}if(e.kind===`folder`){let n=X.has(e.path);return(0,E.jsxs)(`div`,{className:_(`group flex h-[24px] cursor-pointer select-none items-center gap-1.5 overflow-hidden pr-1`,I,`text-muted-foreground transition-colors`,L),style:{...h,paddingLeft:`${8+e.depth*O}px`},onClick:()=>De(e.path),draggable:!0,onDragStart:t=>{fe(t.dataTransfer,{path:e.path,fileType:`folder`})},"data-testid":`${R}-folder-${e.path}`,children:[(0,E.jsx)(c,{className:_(`icon-sm shrink-0 transition-transform`,!n&&`rotate-90`)}),n?(0,E.jsx)(s,{className:`icon-base text-muted-foreground/70 shrink-0`}):(0,E.jsx)(f,{className:`icon-base text-muted-foreground/70 shrink-0`}),V?(0,E.jsx)(x,{text:e.label,query:V,className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I)}):(0,E.jsx)(`span`,{className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I),children:e.label}),!U&&(0,E.jsx)(w,{linesAdded:e.additions,linesDeleted:e.deletions,size:F}),!H&&(0,E.jsx)(`span`,{className:_(`invisible shrink-0 font-medium`,I),children:`M`}),P?(0,E.jsxs)(v,{onOpenChange:e=>{e||(Z.current=Date.now())},children:[(0,E.jsx)(de,{asChild:!0,children:(0,E.jsx)(`button`,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),"aria-label":Y(`review.moreActions`,`More actions`),className:`text-muted-foreground hover:bg-sidebar-accent hover:text-foreground flex size-6 shrink-0 items-center justify-center rounded opacity-0 transition-all group-hover:opacity-100 data-[state=open]:opacity-100`,"data-testid":`${R}-folder-menu-${e.path}`,children:(0,E.jsx)(i,{className:`icon-sm`})})}),(0,E.jsxs)(b,{align:`end`,className:`min-w-[220px]`,onCloseAutoFocus:e=>e.preventDefault(),children:[(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),Oe(e.path,!1)},"data-testid":`${R}-folder-open-directory-${e.path}`,children:[(0,E.jsx)(a,{}),Y(`sidebar.openDirectory`)]}),(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),$(e.path,!1)},children:[(0,E.jsx)(t,{}),Y(`review.copyFilePath`)]}),(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),$(e.path,!0)},children:[(0,E.jsx)(u,{}),Y(`review.copyRelativePath`)]})]})]}):(0,E.jsx)(`span`,{className:`size-6 shrink-0`})]},`folder-${e.path}`)}let S=e.file,pe=S.path===p,T=g?.has(S.path)??!1,D=S.path.split(`/`).pop()||S.path,k=S.kind===`submodule`,A=k&&!!K,z=A&&!!J?.has(S.path),B=S.nestedDirty;return(0,E.jsxs)(`div`,{className:_(`group flex h-[24px] items-center gap-1.5 cursor-pointer transition-colors overflow-hidden pr-1`,I,pe?xe:L),style:{...h,paddingLeft:`${8+e.depth*O}px`},onClick:()=>{Date.now()-Z.current<400||m(S.path)},draggable:!0,onDragStart:e=>{fe(e.dataTransfer,{path:S.path,fileType:`file`})},"data-testid":`${R}-file-${S.path}`,children:[g&&j&&(0,E.jsx)(`button`,{role:`checkbox`,"aria-checked":T,"aria-label":Y(`review.selectFile`,{file:S.path,defaultValue:`Select ${S.path}`}),onClick:e=>{e.stopPropagation(),j(S.path)},className:_(`flex items-center justify-center size-3.5 rounded border transition-colors shrink-0`,T?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/40`),"data-testid":`${R}-check-${S.path}`,children:T&&(0,E.jsx)(ee,{className:`icon-2xs`})}),A&&(0,E.jsx)(`button`,{onClick:e=>{e.stopPropagation(),K?.(S.path)},"aria-label":z?Y(`review.collapseSubmodule`,{defaultValue:`Collapse submodule`}):Y(`review.expandSubmodule`,{defaultValue:`Expand submodule`}),className:`text-muted-foreground hover:text-foreground flex size-4 shrink-0 items-center justify-center rounded`,"data-testid":`${R}-submodule-toggle-${S.path}`,children:(0,E.jsx)(c,{className:_(`icon-sm transition-transform`,z&&`rotate-90`)})}),k?(0,E.jsx)(l,{className:`size-4 shrink-0 text-purple-500 dark:text-purple-400`,"data-testid":`${R}-submodule-icon-${S.path}`}):(0,E.jsx)(he,{filePath:S.path,className:`text-muted-foreground/80 size-4 shrink-0`}),V?(0,E.jsx)(x,{text:D,query:V,className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I)}):(0,E.jsx)(`span`,{className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I),children:D}),k&&(0,E.jsxs)(ie,{children:[(0,E.jsx)(ae,{asChild:!0,children:(0,E.jsx)(`span`,{className:_(`shrink-0 rounded-sm border border-purple-500/40 bg-purple-500/10 px-1 text-[10px] uppercase tracking-wide text-purple-600 dark:text-purple-300`),"data-testid":`${R}-submodule-badge-${S.path}`,children:B&&B.dirtyFileCount>0?Y(`review.submoduleDirtyCount`,{count:B.dirtyFileCount,defaultValue:`submodule · {{count}}`}):Y(`review.submodule`,{defaultValue:`submodule`})})}),(0,E.jsxs)(re,{side:`top`,className:`max-w-xs text-xs`,children:[(0,E.jsx)(`div`,{className:`font-medium`,children:Y(`review.submoduleTooltip`,{defaultValue:`Nested git repository (gitlink)`})}),B&&(0,E.jsxs)(`div`,{className:`mt-1 space-y-0.5 font-mono`,children:[B.pointerMoved&&(0,E.jsx)(`div`,{children:Y(`review.submodulePointerMoved`,{defaultValue:`Gitlink pointer moved (parent-visible change).`})}),(0,E.jsx)(`div`,{children:Y(`review.submoduleDirtyLine`,{count:B.dirtyFileCount,defaultValue:`{{count}} file(s) dirty inside`})}),(B.linesAdded>0||B.linesDeleted>0)&&(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`span`,{className:`text-diff-added`,children:[`+`,B.linesAdded]}),` `,(0,E.jsxs)(`span`,{className:`text-diff-removed`,children:[`-`,B.linesDeleted]}),` `,(0,E.jsx)(`span`,{className:`text-muted-foreground`,children:Y(`review.submoduleLines`,{defaultValue:`lines`})})]})]}),A&&(0,E.jsx)(`div`,{className:`text-muted-foreground mt-1`,children:Y(`review.submoduleExpandHint`,{defaultValue:`Click the arrow to expand inner files.`})})]})]}),!U&&(0,E.jsx)(w,{linesAdded:k&&B?B.linesAdded:S.additions??0,linesDeleted:k&&B?B.linesDeleted:S.deletions??0,size:F}),!H&&(0,E.jsx)(`span`,{className:_(`shrink-0 font-medium`,I),style:{color:ve(S.status)},children:ye(S.status)}),(0,E.jsxs)(v,{onOpenChange:e=>{e||(Z.current=Date.now())},children:[(0,E.jsx)(de,{asChild:!0,children:(0,E.jsx)(`button`,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),"aria-label":Y(`review.moreActions`,`More actions`),className:`text-muted-foreground hover:bg-sidebar-accent hover:text-foreground flex size-6 shrink-0 items-center justify-center rounded opacity-0 transition-all group-hover:opacity-100 data-[state=open]:opacity-100`,"data-testid":`${R}-menu-${S.path}`,children:(0,E.jsx)(i,{className:`icon-sm`})})}),(0,E.jsxs)(b,{align:`end`,className:`min-w-[220px]`,onCloseAutoFocus:e=>e.preventDefault(),children:[(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),se(P?`${P}/${S.path}`:S.path)},children:[(0,E.jsx)(te,{}),Y(`review.openInEditor`,{editor:le()})]}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),me(P?`${P}/${S.path}`:S.path)},"data-testid":`file-tree-open-internal-editor-${S.path}`,children:[(0,E.jsx)(n,{}),Y(`review.openInInternalEditor`)]}),P&&(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),Oe(S.path,!0)},"data-testid":`${R}-file-open-directory-${S.path}`,children:[(0,E.jsx)(a,{}),Y(`sidebar.openDirectory`)]}),M&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),M(S.path)},className:`text-destructive focus:text-destructive`,children:[(0,E.jsx)(d,{}),be??Y(`review.discardChanges`)]})]}),N&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),N(S.path)},children:[(0,E.jsx)(r,{}),Y(`review.ignoreFile`)]}),(()=>{let e=ge(S.path);return e.length===0?null:e.length===1?(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),N(e[0])},children:[(0,E.jsx)(o,{}),Y(`review.ignoreFolder`)]}):(0,E.jsxs)(ce,{children:[(0,E.jsxs)(ue,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),children:[(0,E.jsx)(o,{}),Y(`review.ignoreFolder`)]}),(0,E.jsx)(oe,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),children:e.map(e=>(0,E.jsx)(y,{onClick:t=>{t.stopPropagation(),N(e)},children:e},e))})]})})(),(()=>{let e=_e(S.path);return e?(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),N(`*${e}`)},children:[(0,E.jsx)(r,{}),Y(`review.ignoreExtension`,{ext:e})]}):null})()]}),(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),$(S.path,!1)},children:[(0,E.jsx)(t,{}),Y(`review.copyFilePath`)]}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),$(S.path,!0)},children:[(0,E.jsx)(u,{}),Y(`review.copyRelativePath`)]})]})]})]},S.path)};return B?(0,E.jsx)(`div`,{ref:Te,style:{overflow:`auto`,height:`100%`},children:(0,E.jsx)(`div`,{style:{height:`${Ee.getTotalSize()}px`,width:`100%`,position:`relative`},children:Ee.getVirtualItems().map(e=>{let t=Q[e.index];return(0,E.jsx)(`div`,{style:{position:`absolute`,top:0,left:0,width:`100%`,height:`${e.size}px`,transform:`translateY(${e.start}px)`},children:ke(t,e.index)},e.key)})})}):(0,E.jsx)(E.Fragment,{children:Q.map((e,t)=>{let n=z?.(e,t);return ke(e,t,n)})})}export{A as n,j as r,M as t};
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{Kn as t,Mn as n,Rn as r,Vn as i,bn as a,gn as o,hn as s,hr as c,pn as l,rr as u,v as d,yn as f,yr as ee,zn as te,zr as p}from"./icons-sqwAEN28.js";import{o as m}from"./markdown-DBtwZWLP.js";import{t as ne}from"./useTranslation-DAPPK3Hy.js";import{G as re,V as h,W as ie,j as g,lt as _,q as ae}from"./index-CmX0PQ41.js";import{$n as oe,Cn as se,Gn as v,Jn as y,Kn as b,Nn as x,Qn as ce,Ur as S,Zn as C,bn as le,er as ue,hn as w,tr as de,vn as fe,vr as pe,wn as me,yn as he}from"./items-z89mbR0g.js";var T=e(p(),1),E=e(m(),1),D=g(`file-tree`),O=12,k=24;function A(e,t,n,r,i){let a={children:new Map,files:[]};for(let t of e){let e=t.path.split(`/`);e.pop();let n=a;for(let t of e)n.children.has(t)||n.children.set(t,{children:new Map,files:[]}),n=n.children.get(t);n.files.push(t)}function o(e){let t=e.files.length,n=e.files.reduce((e,t)=>e+(t.additions??0),0),r=e.files.reduce((e,t)=>e+(t.deletions??0),0);for(let i of e.children.values()){let e=o(i);t+=e.fileCount,n+=e.additions,r+=e.deletions}return{fileCount:t,additions:n,deletions:r}}let s=[];function c(e,i){let a=n?.get(e.path),o=r?.get(e.path);if(a&&a.length>0){let o=A(a.map(t=>({...t,path:`${e.path}/${t.path}`})),t,n,r);for(let e of o)s.push({...e,depth:e.depth+i+1})}else o&&s.push({kind:`submodule-status`,submodulePath:e.path,depth:i+1,state:o.state,message:o.message})}function l(e,n,r){let a=Array.from(e.children.entries()).toSorted(([e],[t])=>e.localeCompare(t));for(let[e,i]of a){let a=e,c=i,u=r?`${r}/${e}`:e;for(;c.files.length===0&&c.children.size===1;){let[e,t]=[...c.children.entries()][0];a+=`/${e}`,u+=`/${e}`,c=t}let d=u,f=o(c);s.push({kind:`folder`,path:d,label:a,depth:n,fileCount:f.fileCount,additions:f.additions,deletions:f.deletions}),t.has(d)||l(c,n+1,u)}for(let t of e.files.sort((e,t)=>e.path.localeCompare(t.path)))s.push({kind:`file`,file:t,depth:n}),t.kind===`submodule`&&i?.has(t.path)&&c(t,n)}return l(a,0,``),s}function ge(e){let t=e.split(`/`),n=[];for(let e=t.length-1;e>0;e--)n.push(`/`+t.slice(0,e).join(`/`));return n}function _e(e){let t=e.lastIndexOf(`.`);return t===-1||t===e.length-1?null:e.substring(t)}function ve(e){switch(e){case`added`:return`hsl(142 40% 45%)`;case`modified`:return`hsl(30 90% 55%)`;case`deleted`:return`hsl(0 45% 55%)`;default:return`hsl(200 80% 60%)`}}function ye(e){switch(e){case`added`:return`A`;case`modified`:return`M`;case`deleted`:return`D`;default:return`R`}}function j(e){let t=A(e,new Set),n=new Set;for(let e of t)e.kind===`folder`&&n.add(e.path);return n}function M({files:e,selectedFile:p,onFileClick:m,checkedFiles:g,onToggleFile:j,onRevertFile:M,revertLabel:be,onIgnore:N,basePath:P,diffStatsSize:F=`xs`,fontSize:I=`text-xs`,activeClass:xe=`bg-sidebar-accent text-sidebar-accent-foreground`,hoverClass:L=`hover:bg-sidebar-accent/50 text-muted-foreground`,testIdPrefix:R=`filetree`,rowStyle:z,virtualize:B=!1,searchQuery:V,hideStatus:H=!1,hideDiffStats:U=!1,collapsedFolders:W,onCollapsedFoldersChange:G,onToggleSubmodule:K,submoduleExpansions:Se,submoduleStates:q,expandedSubmodules:J}){let{t:Y}=ne(),[Ce,we]=(0,T.useState)(new Set),X=W??Ce,Z=(0,T.useRef)(0),Te=(0,T.useRef)(null),Q=(0,T.useMemo)(()=>A(e,X,Se,q,J),[e,X,Se,q,J]),Ee=pe({count:B?Q.length:0,getScrollElement:()=>Te.current,estimateSize:()=>k,getItemKey:e=>{let t=Q[e];return t.kind===`folder`?`d:${t.path}`:t.kind===`submodule-status`?`s:${t.submodulePath}:${t.state}`:`f:${t.file.path}`},overscan:15,enabled:B}),De=(0,T.useCallback)(e=>{if(W&&G){let t=new Set(W);t.has(e)?t.delete(e):t.add(e),G(t);return}we(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[W,G]),$=(0,T.useCallback)((e,t)=>{let n=t?e:`/${e}`;navigator.clipboard.writeText(n),S.success(Y(`review.pathCopied`))},[Y]),Oe=(0,T.useCallback)(async(e,t)=>{if(!P)return;let n=t?e.includes(`/`)?e.slice(0,e.lastIndexOf(`/`)):``:e,r=n?`${P}/${n}`:P,i=await h.openDirectory({path:r});i.isErr()&&(D.error(`Failed to open directory`,{path:r,error:String(i.error)}),S.error(Y(`review.openDirectoryError`,`Failed to open directory`)))},[P,Y]),ke=(e,ne,h)=>{if(e.kind===`submodule-status`){let t=e.state===`loading`?Y(`review.submoduleLoading`,{defaultValue:`Loading submodule files…`}):e.state===`error`?e.message??Y(`review.submoduleError`,{defaultValue:`Failed to load submodule`}):Y(`review.submoduleEmpty`,{defaultValue:`No changes inside submodule`});return(0,E.jsx)(`div`,{className:_(`flex h-[24px] select-none items-center gap-1.5 overflow-hidden pr-1 italic`,I,`text-muted-foreground/80`),style:{...h,paddingLeft:`${8+e.depth*O}px`},"data-testid":`${R}-submodule-status-${e.submodulePath}`,children:(0,E.jsx)(`span`,{className:`truncate`,children:t})},`submodule-status-${e.submodulePath}-${e.state}`)}if(e.kind===`folder`){let n=X.has(e.path);return(0,E.jsxs)(`div`,{className:_(`group flex h-[24px] cursor-pointer select-none items-center gap-1.5 overflow-hidden pr-1`,I,`text-muted-foreground transition-colors`,L),style:{...h,paddingLeft:`${8+e.depth*O}px`},onClick:()=>De(e.path),draggable:!0,onDragStart:t=>{fe(t.dataTransfer,{path:e.path,fileType:`folder`})},"data-testid":`${R}-folder-${e.path}`,children:[(0,E.jsx)(c,{className:_(`icon-sm shrink-0 transition-transform`,!n&&`rotate-90`)}),n?(0,E.jsx)(s,{className:`icon-base text-muted-foreground/70 shrink-0`}):(0,E.jsx)(f,{className:`icon-base text-muted-foreground/70 shrink-0`}),V?(0,E.jsx)(x,{text:e.label,query:V,className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I)}):(0,E.jsx)(`span`,{className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I),children:e.label}),!U&&(0,E.jsx)(w,{linesAdded:e.additions,linesDeleted:e.deletions,size:F}),!H&&(0,E.jsx)(`span`,{className:_(`invisible shrink-0 font-medium`,I),children:`M`}),P?(0,E.jsxs)(v,{onOpenChange:e=>{e||(Z.current=Date.now())},children:[(0,E.jsx)(de,{asChild:!0,children:(0,E.jsx)(`button`,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),"aria-label":Y(`review.moreActions`,`More actions`),className:`text-muted-foreground hover:bg-sidebar-accent hover:text-foreground flex size-6 shrink-0 items-center justify-center rounded opacity-0 transition-all group-hover:opacity-100 data-[state=open]:opacity-100`,"data-testid":`${R}-folder-menu-${e.path}`,children:(0,E.jsx)(i,{className:`icon-sm`})})}),(0,E.jsxs)(b,{align:`end`,className:`min-w-[220px]`,onCloseAutoFocus:e=>e.preventDefault(),children:[(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),Oe(e.path,!1)},"data-testid":`${R}-folder-open-directory-${e.path}`,children:[(0,E.jsx)(a,{}),Y(`sidebar.openDirectory`)]}),(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),$(e.path,!1)},children:[(0,E.jsx)(t,{}),Y(`review.copyFilePath`)]}),(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),$(e.path,!0)},children:[(0,E.jsx)(u,{}),Y(`review.copyRelativePath`)]})]})]}):(0,E.jsx)(`span`,{className:`size-6 shrink-0`})]},`folder-${e.path}`)}let S=e.file,pe=S.path===p,T=g?.has(S.path)??!1,D=S.path.split(`/`).pop()||S.path,k=S.kind===`submodule`,A=k&&!!K,z=A&&!!J?.has(S.path),B=S.nestedDirty;return(0,E.jsxs)(`div`,{className:_(`group flex h-[24px] items-center gap-1.5 cursor-pointer transition-colors overflow-hidden pr-1`,I,pe?xe:L),style:{...h,paddingLeft:`${8+e.depth*O}px`},onClick:()=>{Date.now()-Z.current<400||m(S.path)},draggable:!0,onDragStart:e=>{fe(e.dataTransfer,{path:S.path,fileType:`file`})},"data-testid":`${R}-file-${S.path}`,children:[g&&j&&(0,E.jsx)(`button`,{role:`checkbox`,"aria-checked":T,"aria-label":Y(`review.selectFile`,{file:S.path,defaultValue:`Select ${S.path}`}),onClick:e=>{e.stopPropagation(),j(S.path)},className:_(`flex items-center justify-center size-3.5 rounded border transition-colors shrink-0`,T?`bg-primary border-primary text-primary-foreground`:`border-muted-foreground/40`),"data-testid":`${R}-check-${S.path}`,children:T&&(0,E.jsx)(ee,{className:`icon-2xs`})}),A&&(0,E.jsx)(`button`,{onClick:e=>{e.stopPropagation(),K?.(S.path)},"aria-label":z?Y(`review.collapseSubmodule`,{defaultValue:`Collapse submodule`}):Y(`review.expandSubmodule`,{defaultValue:`Expand submodule`}),className:`text-muted-foreground hover:text-foreground flex size-4 shrink-0 items-center justify-center rounded`,"data-testid":`${R}-submodule-toggle-${S.path}`,children:(0,E.jsx)(c,{className:_(`icon-sm transition-transform`,z&&`rotate-90`)})}),k?(0,E.jsx)(l,{className:`size-4 shrink-0 text-purple-500 dark:text-purple-400`,"data-testid":`${R}-submodule-icon-${S.path}`}):(0,E.jsx)(he,{filePath:S.path,className:`text-muted-foreground/80 size-4 shrink-0`}),V?(0,E.jsx)(x,{text:D,query:V,className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I)}):(0,E.jsx)(`span`,{className:_(`min-w-0 flex-1 truncate font-mono-explorer`,I),children:D}),k&&(0,E.jsxs)(ie,{children:[(0,E.jsx)(ae,{asChild:!0,children:(0,E.jsx)(`span`,{className:_(`shrink-0 rounded-sm border border-purple-500/40 bg-purple-500/10 px-1 text-[10px] uppercase tracking-wide text-purple-600 dark:text-purple-300`),"data-testid":`${R}-submodule-badge-${S.path}`,children:B&&B.dirtyFileCount>0?Y(`review.submoduleDirtyCount`,{count:B.dirtyFileCount,defaultValue:`submodule · {{count}}`}):Y(`review.submodule`,{defaultValue:`submodule`})})}),(0,E.jsxs)(re,{side:`top`,className:`max-w-xs text-xs`,children:[(0,E.jsx)(`div`,{className:`font-medium`,children:Y(`review.submoduleTooltip`,{defaultValue:`Nested git repository (gitlink)`})}),B&&(0,E.jsxs)(`div`,{className:`mt-1 space-y-0.5 font-mono`,children:[B.pointerMoved&&(0,E.jsx)(`div`,{children:Y(`review.submodulePointerMoved`,{defaultValue:`Gitlink pointer moved (parent-visible change).`})}),(0,E.jsx)(`div`,{children:Y(`review.submoduleDirtyLine`,{count:B.dirtyFileCount,defaultValue:`{{count}} file(s) dirty inside`})}),(B.linesAdded>0||B.linesDeleted>0)&&(0,E.jsxs)(`div`,{children:[(0,E.jsxs)(`span`,{className:`text-diff-added`,children:[`+`,B.linesAdded]}),` `,(0,E.jsxs)(`span`,{className:`text-diff-removed`,children:[`-`,B.linesDeleted]}),` `,(0,E.jsx)(`span`,{className:`text-muted-foreground`,children:Y(`review.submoduleLines`,{defaultValue:`lines`})})]})]}),A&&(0,E.jsx)(`div`,{className:`text-muted-foreground mt-1`,children:Y(`review.submoduleExpandHint`,{defaultValue:`Click the arrow to expand inner files.`})})]})]}),!U&&(0,E.jsx)(w,{linesAdded:k&&B?B.linesAdded:S.additions??0,linesDeleted:k&&B?B.linesDeleted:S.deletions??0,size:F}),!H&&(0,E.jsx)(`span`,{className:_(`shrink-0 font-medium`,I),style:{color:ve(S.status)},children:ye(S.status)}),(0,E.jsxs)(v,{onOpenChange:e=>{e||(Z.current=Date.now())},children:[(0,E.jsx)(de,{asChild:!0,children:(0,E.jsx)(`button`,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),"aria-label":Y(`review.moreActions`,`More actions`),className:`text-muted-foreground hover:bg-sidebar-accent hover:text-foreground flex size-6 shrink-0 items-center justify-center rounded opacity-0 transition-all group-hover:opacity-100 data-[state=open]:opacity-100`,"data-testid":`${R}-menu-${S.path}`,children:(0,E.jsx)(i,{className:`icon-sm`})})}),(0,E.jsxs)(b,{align:`end`,className:`min-w-[220px]`,onCloseAutoFocus:e=>e.preventDefault(),children:[(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),se(P?`${P}/${S.path}`:S.path)},children:[(0,E.jsx)(te,{}),Y(`review.openInEditor`,{editor:le()})]}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),me(P?`${P}/${S.path}`:S.path)},"data-testid":`file-tree-open-internal-editor-${S.path}`,children:[(0,E.jsx)(n,{}),Y(`review.openInInternalEditor`)]}),P&&(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),Oe(S.path,!0)},"data-testid":`${R}-file-open-directory-${S.path}`,children:[(0,E.jsx)(a,{}),Y(`sidebar.openDirectory`)]}),M&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),M(S.path)},className:`text-destructive focus:text-destructive`,children:[(0,E.jsx)(d,{}),be??Y(`review.discardChanges`)]})]}),N&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),N(S.path)},children:[(0,E.jsx)(r,{}),Y(`review.ignoreFile`)]}),(()=>{let e=ge(S.path);return e.length===0?null:e.length===1?(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),N(e[0])},children:[(0,E.jsx)(o,{}),Y(`review.ignoreFolder`)]}):(0,E.jsxs)(ce,{children:[(0,E.jsxs)(ue,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),children:[(0,E.jsx)(o,{}),Y(`review.ignoreFolder`)]}),(0,E.jsx)(oe,{onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),children:e.map(e=>(0,E.jsx)(y,{onClick:t=>{t.stopPropagation(),N(e)},children:e},e))})]})})(),(()=>{let e=_e(S.path);return e?(0,E.jsxs)(y,{onClick:t=>{t.stopPropagation(),N(`*${e}`)},children:[(0,E.jsx)(r,{}),Y(`review.ignoreExtension`,{ext:e})]}):null})()]}),(0,E.jsx)(C,{}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),$(S.path,!1)},children:[(0,E.jsx)(t,{}),Y(`review.copyFilePath`)]}),(0,E.jsxs)(y,{onClick:e=>{e.stopPropagation(),$(S.path,!0)},children:[(0,E.jsx)(u,{}),Y(`review.copyRelativePath`)]})]})]})]},S.path)};return B?(0,E.jsx)(`div`,{ref:Te,style:{overflow:`auto`,height:`100%`},children:(0,E.jsx)(`div`,{style:{height:`${Ee.getTotalSize()}px`,width:`100%`,position:`relative`},children:Ee.getVirtualItems().map(e=>{let t=Q[e.index];return(0,E.jsx)(`div`,{style:{position:`absolute`,top:0,left:0,width:`100%`,height:`${e.size}px`,transform:`translateY(${e.start}px)`},children:ke(t,e.index)},e.key)})})}):(0,E.jsx)(E.Fragment,{children:Q.map((e,t)=>{let n=z?.(e,t);return ke(e,t,n)})})}export{A as n,j as r,M as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{B as t,Mr as n,hn as r,hr as i,i as a,jr as o,nn as ee,vn as s,yr as c,zr as l}from"./icons-sqwAEN28.js";import{o as u}from"./markdown-DBtwZWLP.js";import{t as d}from"./useTranslation-DAPPK3Hy.js";import{P as f}from"./index-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{B as t,Mr as n,hn as r,hr as i,i as a,jr as o,nn as ee,vn as s,yr as c,zr as l}from"./icons-sqwAEN28.js";import{o as u}from"./markdown-DBtwZWLP.js";import{t as d}from"./useTranslation-DAPPK3Hy.js";import{P as f}from"./index-CmX0PQ41.js";import{t as p}from"./button-DqIT3IPY.js";import{$r as m,Gr as te,Ur as h,Xr as ne,Yr as g,in as _,qr as v}from"./items-z89mbR0g.js";import{t as y}from"./input-Bi-kCBn4.js";import{t as b}from"./tooltip-icon-button-pAxgBlHP.js";var x=e(l(),1),S=e(u(),1);function re(e){if(!e)return[];let t=/^[A-Za-z]:\\/.test(e),n=t?`\\`:`/`,r=e.split(n).filter(Boolean),i=[];if(t){i.push({label:r[0],path:r[0]+`\\`});for(let e=1;e<r.length;e++)i.push({label:r[e],path:r.slice(0,e+1).join(n)+(r.length-1,``)})}else{i.push({label:`/`,path:`/`});for(let e=0;e<r.length;e++)i.push({label:r[e],path:`/`+r.slice(0,e+1).join(n)})}return i}function C({onSelect:e,onClose:l}){let{t:u}=d(),[C,w]=(0,x.useState)(``),[ie,T]=(0,x.useState)(null),[E,D]=(0,x.useState)([]),[O,k]=(0,x.useState)([]),[A,j]=(0,x.useState)(!0),[M,N]=(0,x.useState)(``),[P,F]=(0,x.useState)(``),[I,L]=(0,x.useState)(!1),[R,z]=(0,x.useState)(``),[B,V]=(0,x.useState)(``),H=(0,x.useRef)(null),U=(0,x.useRef)([]),W=(0,x.useRef)(-1),[G,K]=(0,x.useState)(-1),q=(0,x.useRef)(!1),ae=G>0,oe=G<U.current.length-1;(0,x.useEffect)(()=>{(async()=>{let e=await f.browseRoots();if(e.isErr()){N(e.error.message),j(!1);return}let t=e.value;k(t.roots||[]);let n=localStorage.getItem(`funny:last-browse-path`);if(n&&n!==t.home){let e=await f.browseList(n);e.isErr()||e.value.error?(localStorage.removeItem(`funny:last-browse-path`),X(t.home)):(w(e.value.path),T(e.value.parent),D(e.value.dirs),Y(e.value.path),j(!1))}else X(t.home)})()},[]);let J=(0,x.useMemo)(()=>{if(!P.trim())return E;let e=P.toLowerCase();return E.filter(t=>t.name.toLowerCase().includes(e)).sort((t,n)=>{let r=t.name.toLowerCase(),i=n.name.toLowerCase(),a=+!r.startsWith(e),o=+!i.startsWith(e);return a===o?r.length-i.length||r.localeCompare(i):a-o})},[E,P]),Y=(0,x.useCallback)(e=>{if(q.current){q.current=!1;return}let t=W.current;U.current=U.current.slice(0,t+1),U.current.push(e),W.current=U.current.length-1,K(W.current)},[]),X=async e=>{j(!0),N(``);let t=await f.browseList(e);if(t.isErr()){j(!1),h.error(t.error.message);return}let n=t.value;if(n.error){j(!1),h.error(n.error);return}n.path&&w(n.path),n.parent!==void 0&&T(n.parent),n.dirs&&D(n.dirs),F(``),Y(n.path),localStorage.setItem(`funny:last-browse-path`,n.path),j(!1)},se=(0,x.useCallback)(()=>{W.current<=0||(W.current--,K(W.current),q.current=!0,X(U.current[W.current]))},[]),ce=(0,x.useCallback)(()=>{W.current>=U.current.length-1||(W.current++,K(W.current),q.current=!0,X(U.current[W.current]))},[]),Z=async()=>{let e=R.trim();if(!e)return;V(``);let t=await f.createDirectory(C,e);if(t.isErr()){V(t.error.message);return}L(!1),z(``),X(t.value.path)},Q=()=>{L(!1),z(``),V(``)};(0,x.useEffect)(()=>{I&&H.current&&H.current.focus()},[I]);let $=(0,x.useMemo)(()=>re(C),[C]);return(0,S.jsx)(te,{open:!0,onOpenChange:e=>!e&&l(),children:(0,S.jsxs)(v,{className:`flex flex-col gap-0 p-0`,style:{maxWidth:`60vw`,height:`70vh`},children:[(0,S.jsx)(ne,{className:`p-4 pb-2`,children:(0,S.jsx)(m,{className:`text-sm`,children:u(`folderPicker.title`)})}),(0,S.jsxs)(`div`,{className:`border-border bg-muted/30 flex items-center gap-1 border-b px-4 py-2`,children:[(0,S.jsx)(b,{size:`icon`,onClick:se,disabled:!ae,className:`size-6 shrink-0`,tooltip:u(`folderPicker.back`),children:(0,S.jsx)(n,{className:`icon-sm`})}),(0,S.jsx)(b,{size:`icon`,onClick:ce,disabled:!oe,className:`size-6 shrink-0`,tooltip:u(`folderPicker.forward`),children:(0,S.jsx)(o,{className:`icon-sm`})}),(0,S.jsxs)(`div`,{className:`no-scrollbar flex min-w-0 flex-1 items-center gap-0.5 overflow-x-auto`,children:[$.length===0&&(0,S.jsx)(`span`,{className:`text-muted-foreground text-xs`,children:u(`folderPicker.loading`)}),$.map((e,t)=>(0,S.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5`,children:[t>0&&(0,S.jsx)(i,{className:`icon-xs text-muted-foreground/50 shrink-0`}),(0,S.jsx)(`button`,{onClick:()=>X(e.path),className:`hover:bg-accent hover:text-foreground max-w-[120px] truncate rounded px-1 py-0.5 text-xs transition-colors ${t===$.length-1?`text-foreground font-medium`:`text-muted-foreground`}`,title:e.path,children:e.label})]},e.path))]}),(0,S.jsxs)(p,{variant:`ghost`,size:`sm`,onClick:()=>{L(!0),z(``),V(``)},disabled:!C||A,className:`text-muted-foreground ml-1 h-6 shrink-0 px-2 text-xs`,"data-testid":`folder-picker-new-folder`,children:[(0,S.jsx)(s,{className:`icon-xs mr-1`}),u(`folderPicker.newFolder`)]})]}),O.length>0&&(0,S.jsx)(`div`,{className:`border-border flex gap-1 border-b px-4 py-1.5`,children:O.map(e=>(0,S.jsxs)(p,{variant:`ghost`,size:`sm`,onClick:()=>X(e),className:`text-muted-foreground h-6 px-2 text-xs`,title:e,children:[(0,S.jsx)(ee,{className:`icon-xs mr-1`}),e.replace(`:\\`,``)]},e))}),E.length>0&&(0,S.jsx)(`div`,{className:`border-border border-b px-4 py-2`,children:(0,S.jsxs)(`div`,{className:`relative`,children:[(0,S.jsx)(t,{className:`icon-xs text-muted-foreground absolute top-1/2 left-2 -translate-y-1/2`}),(0,S.jsx)(y,{type:`text`,value:P,onChange:e=>F(e.target.value),placeholder:u(`folderPicker.searchPlaceholder`),className:`h-7 pr-2 pl-7 text-xs`,autoFocus:!1})]})}),(0,S.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col p-2`,children:[I&&(0,S.jsxs)(`div`,{className:`bg-accent/50 mb-1 flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,S.jsx)(s,{className:`icon-sm text-status-info shrink-0`}),(0,S.jsx)(y,{ref:H,type:`text`,value:R,onChange:e=>{z(e.target.value),V(``)},onKeyDown:e=>{e.key===`Enter`&&Z(),e.key===`Escape`&&Q()},placeholder:u(`folderPicker.newFolderPlaceholder`),className:`font-mono-explorer h-6 flex-1 text-xs`,"data-testid":`folder-picker-new-folder-input`}),(0,S.jsx)(b,{size:`icon`,onClick:Z,disabled:!R.trim(),className:`size-6 shrink-0`,tooltip:u(`folderPicker.create`),"data-testid":`folder-picker-new-folder-confirm`,children:(0,S.jsx)(c,{className:`icon-xs`})}),(0,S.jsx)(b,{size:`icon`,onClick:Q,className:`size-6 shrink-0`,tooltip:u(`folderPicker.cancel`),"data-testid":`folder-picker-new-folder-cancel`,children:(0,S.jsx)(a,{className:`icon-xs`})})]}),B&&(0,S.jsx)(`p`,{className:`text-status-error mb-1 px-2 text-xs`,children:B}),M?(0,S.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,S.jsx)(`p`,{className:`text-status-error px-2 text-center text-xs`,children:M})}):A?(0,S.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,S.jsx)(`p`,{className:`text-muted-foreground px-2 text-center text-xs`,children:u(`folderPicker.loading`)})}):E.length===0?(0,S.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,S.jsx)(`p`,{className:`text-muted-foreground px-2 text-center text-xs`,children:u(`folderPicker.noSubdirs`)})}):J.length===0?(0,S.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,S.jsx)(`p`,{className:`text-muted-foreground px-2 text-center text-xs`,children:u(`folderPicker.noResults`)})}):(0,S.jsx)(_,{className:`-mx-2 min-h-0 flex-1 px-2`,children:J.map(e=>(0,S.jsxs)(`button`,{onClick:()=>X(e.path),className:`text-muted-foreground hover:bg-accent hover:text-foreground flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors`,children:[(0,S.jsx)(r,{className:`icon-sm text-status-info shrink-0`}),(0,S.jsx)(`span`,{className:`font-mono-explorer truncate`,children:e.name}),(0,S.jsx)(i,{className:`icon-xs ml-auto shrink-0 opacity-40`})]},e.path))})]}),(0,S.jsxs)(g,{className:`border-border border-t p-4`,children:[(0,S.jsx)(p,{variant:`outline`,size:`sm`,onClick:l,children:u(`folderPicker.cancel`)}),(0,S.jsx)(p,{size:`sm`,onClick:()=>e(C),disabled:!C,children:u(`folderPicker.selectFolder`)})]})]})})}export{C as t};
|