@vostride/agent-qa-dashboard-ui 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/assets/{arrow-up-down-CN-uHgX9.js → arrow-up-down-DD6yziGv.js} +1 -1
  2. package/dist/assets/{badge-DrW2vGVJ.js → badge-CC1v3nk4.js} +1 -1
  3. package/dist/assets/{batch-action-bar-uEhHVDds.js → batch-action-bar-D1IfTx55.js} +1 -1
  4. package/dist/assets/{circle-alert-BKX0IIz1.js → circle-alert-CULfrrqE.js} +1 -1
  5. package/dist/assets/{circle-x-yPIxYoz1.js → circle-x-B7AOkLOS.js} +1 -1
  6. package/dist/assets/{config-TRu3J-E7.js → config-a9DxCBoP.js} +1 -1
  7. package/dist/assets/{copy-Clw3wvSn.js → copy-CEZJVgtu.js} +1 -1
  8. package/dist/assets/{display-step-NqsJgW_B.js → display-step-CO4k5dQA.js} +1 -1
  9. package/dist/assets/{dist-BPJgj1d0.js → dist-BJdB11cl.js} +1 -1
  10. package/dist/assets/{dist-BPheZrD6.js → dist-DzF0KPMF.js} +1 -1
  11. package/dist/assets/{dist-m_OM4Je_.js → dist-wK15YRiu.js} +1 -1
  12. package/dist/assets/{empty-state-BTvOA5lp.js → empty-state-BfgY0UGA.js} +1 -1
  13. package/dist/assets/{external-link-C_uggQOc.js → external-link-DC-KkLmq.js} +1 -1
  14. package/dist/assets/{eye-CZrufbYE.js → eye-YQHiLgt4.js} +1 -1
  15. package/dist/assets/{file-code-B3iDpJRP.js → file-code-BpwHxsqo.js} +1 -1
  16. package/dist/assets/{file-search-DHHwYVza.js → file-search-LR6NeRNh.js} +1 -1
  17. package/dist/assets/{filename-validation-4sTTEagx.js → filename-validation-S8QXnNdt.js} +1 -1
  18. package/dist/assets/{grip-vertical-A-AANrBM.js → grip-vertical-KfzS75WH.js} +1 -1
  19. package/dist/assets/{hook-editor-yhQoi-Ky.js → hook-editor-tcKRn_gP.js} +1 -1
  20. package/dist/assets/{hook-runtime-JF-0oZpz.js → hook-runtime-CTRviwQE.js} +1 -1
  21. package/dist/assets/{hook-viewer-DIkxp9uJ.js → hook-viewer-eGadGjA0.js} +1 -1
  22. package/dist/assets/{hooks-CDRbjPKv.js → hooks-BM--ZgFe.js} +1 -1
  23. package/dist/assets/{id-badge-NwZYoNfB.js → id-badge-BmmZdbHv.js} +1 -1
  24. package/dist/assets/{index-Bvtm2F6f.js → index-B4FdO6Vk.js} +2 -2
  25. package/dist/assets/index-DzWZqTlZ.css +2 -0
  26. package/dist/assets/{insights-DuYBsUzB.js → insights-C_tn8W_Q.js} +1 -1
  27. package/dist/assets/{insights-line-grid-BKOqA-1W.js → insights-line-grid-DKZyKGcI.js} +1 -1
  28. package/dist/assets/{lib-58FyJI_k.js → lib-B9z0w3j9.js} +1 -1
  29. package/dist/assets/{live-run-ucgeJa3o.js → live-run-EmcKA5cK.js} +1 -1
  30. package/dist/assets/{memory-B7nfWNTH.js → memory-CdMqWelO.js} +1 -1
  31. package/dist/assets/{memory-product-D1u5V75o.js → memory-product-f5AfXXJn.js} +1 -1
  32. package/dist/assets/{monaco-editor-DNT0Mzki.js → monaco-editor-DF4W-NC-.js} +2 -2
  33. package/dist/assets/{monaco-editor-inner-DuCqlGei.js → monaco-editor-inner-I81tD0qz.js} +1 -1
  34. package/dist/assets/{monaco.contribution-LYJB_lCm.js → monaco.contribution-CEeipeu9.js} +2 -2
  35. package/dist/assets/{observation-block-4AqYhL1h.js → observation-block-DC5e2IE9.js} +1 -1
  36. package/dist/assets/{observation-markdown-Dx_5-T0t.js → observation-markdown-DyWjt-yP.js} +1 -1
  37. package/dist/assets/{pencil-DdRoBrsh.js → pencil-CZF_NGi6.js} +1 -1
  38. package/dist/assets/plus-Qf7V331e.js +1 -0
  39. package/dist/assets/{popover-DGZi688D.js → popover-DwYq4QYF.js} +1 -1
  40. package/dist/assets/{refresh-cw-C_0AkMuu.js → refresh-cw-RAow1kax.js} +1 -1
  41. package/dist/assets/{resizable-BGEcNRZO.js → resizable-B2X6KlcC.js} +1 -1
  42. package/dist/assets/run-detail-DZ-1orHT.js +1 -0
  43. package/dist/assets/{runs-CywxkFZ6.js → runs-CTOIdEAQ.js} +1 -1
  44. package/dist/assets/{scroll-area-CnATfQoe.js → scroll-area-BmkJ1y7Q.js} +1 -1
  45. package/dist/assets/{select-CeVjgiKI.js → select-D5oFJNaq.js} +1 -1
  46. package/dist/assets/{shortcut-hints-Bs5o743i.js → shortcut-hints-CtwepXR1.js} +1 -1
  47. package/dist/assets/{split-button-DcY8ames.js → split-button-wGcE-JDx.js} +1 -1
  48. package/dist/assets/square-CgFZz_zK.js +1 -0
  49. package/dist/assets/{step-name-pills-Dta5ZGMZ.js → step-name-pills-VuIw2nNC.js} +1 -1
  50. package/dist/assets/{suite-editor-Bnf6KMna.js → suite-editor-DLu7OCZy.js} +1 -1
  51. package/dist/assets/{suite-navbar-PStktQ6j.js → suite-navbar-B8gZoPMT.js} +1 -1
  52. package/dist/assets/{suite-viewer-BD74MY_X.js → suite-viewer-CPBPmJdG.js} +1 -1
  53. package/dist/assets/{suites-BvfwzFEd.js → suites-wRKqOnN6.js} +1 -1
  54. package/dist/assets/{switch-ByV5GV5L.js → switch-CPd0R3ri.js} +1 -1
  55. package/dist/assets/{tab-console-BQFkZJG_.js → tab-console-BORDNFzI.js} +1 -1
  56. package/dist/assets/{table-D08QBBt4.js → table-QG2rKYu8.js} +1 -1
  57. package/dist/assets/{tabs-DrB_Acb3.js → tabs-DzjvuMEX.js} +1 -1
  58. package/dist/assets/{test-editor-w7ZQPYgH.js → test-editor-BoaHOuai.js} +1 -1
  59. package/dist/assets/{test-navbar-DoHKAy1p.js → test-navbar-C6-h4kbc.js} +1 -1
  60. package/dist/assets/{test-viewer-BwUQNVa4.js → test-viewer-0SziRmsW.js} +1 -1
  61. package/dist/assets/{tests-B5ELKDH2.js → tests-OLyMTO9C.js} +1 -1
  62. package/dist/assets/{tests-suites-table-widths-DNWnkAjA.js → tests-suites-table-widths-D49Zcf1r.js} +1 -1
  63. package/dist/assets/{textarea-DChEVvwQ.js → textarea-CVB6Do1_.js} +1 -1
  64. package/dist/assets/{trash-2-7P1Dp87k.js → trash-2-BhJSaMLG.js} +1 -1
  65. package/dist/assets/{tsMode-DEhRZlmT.js → tsMode-TiV3uQ0t.js} +1 -1
  66. package/dist/assets/{use-hook-run-session-x-d_iodT.js → use-hook-run-session-DH_86Jtn.js} +1 -1
  67. package/dist/assets/{use-keyboard-shortcuts-EAppuiKO.js → use-keyboard-shortcuts-Bal_Cx9w.js} +1 -1
  68. package/dist/assets/{use-page-title-B1t9-5_U.js → use-page-title-B4YPyIzc.js} +1 -1
  69. package/dist/assets/{use-run-status-favicon-D69P46yH.js → use-run-status-favicon-Rjqwuxhd.js} +1 -1
  70. package/dist/assets/{use-selection-queue-BboTDies.js → use-selection-queue-O7K3NZNK.js} +1 -1
  71. package/dist/assets/{viewer-url-state-6mOK5_sY.js → viewer-url-state-ClEUZJMl.js} +1 -1
  72. package/dist/assets/{zap-KFJmkY3Y.js → zap-BYpQfhU4.js} +1 -1
  73. package/dist/index.html +2 -2
  74. package/package.json +2 -2
  75. package/dist/assets/index-CW7tbJhs.css +0 -2
  76. package/dist/assets/plus-pXO98OAE.js +0 -1
  77. package/dist/assets/run-detail-3tlB8sew.js +0 -1
  78. package/dist/assets/square-D71GHEET.js +0 -1
@@ -1,4 +1,4 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{i as t,n,o as r,s as i,t as a}from"./select-CeVjgiKI.js";import{t as o}from"./circle-alert-BKX0IIz1.js";import{C as s,S as c,_ as l,a as u,b as d,c as f,d as p,f as m,g as h,h as g,l as ee,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as w,v as T,w as E,x as D,y as te}from"./id-badge-NwZYoNfB.js";import{n as ne,r as O}from"./monaco-editor-DNT0Mzki.js";import{c as k,t as A}from"./split-button-DcY8ames.js";import{t as re}from"./grip-vertical-A-AANrBM.js";import{n as j,r as M,t as N}from"./shortcut-hints-Bs5o743i.js";import{t as ie}from"./plus-pXO98OAE.js";import{t as P}from"./refresh-cw-C_0AkMuu.js";import{n as F,t as ae}from"./textarea-DChEVvwQ.js";import{t as oe}from"./square-D71GHEET.js";import{a as I,r as L}from"./dist-m_OM4Je_.js";import{n as R,r as z,t as se}from"./popover-DGZi688D.js";import{t as ce}from"./switch-ByV5GV5L.js";import{An as B,Bn as le,Cn as ue,Fn as de,Ht as V,In as fe,Mn as pe,Mt as H,Nn as me,Pn as he,Pt as U,Qn as ge,Rn as _e,Un as W,Ut as G,Wn as ve,Wt as K,an as ye,cn as be,dn as xe,in as Se,jt as q,ln as Ce,nn as we,on as Te,pr as Ee,rn as De,sn as Oe,sr as ke,un as Ae,wn as je,zn as J}from"./index-Bvtm2F6f.js";import{t as Me}from"./badge-DrW2vGVJ.js";var Y=e(Ee(),1),X=ge(),Ne=`AlertDialog`,[Pe,Fe]=je(Ne,[xe]),Z=xe(),Ie=e=>{let{__scopeAlertDialog:t,...n}=e,r=Z(t);return(0,X.jsx)(Oe,{...r,...n,modal:!0})};Ie.displayName=Ne;var Le=`AlertDialogTrigger`,Re=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(Ce,{...i,...r,ref:t})});Re.displayName=Le;var ze=`AlertDialogPortal`,Be=e=>{let{__scopeAlertDialog:t,...n}=e,r=Z(t);return(0,X.jsx)(Te,{...r,...n})};Be.displayName=ze;var Ve=`AlertDialogOverlay`,He=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(ye,{...i,...r,ref:t})});He.displayName=Ve;var Q=`AlertDialogContent`,[Ue,We]=Pe(Q),Ge=B(`AlertDialogContent`),Ke=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...i}=e,a=Z(n),o=Y.useRef(null),s=pe(t,o),c=Y.useRef(null);return(0,X.jsx)(Ae,{contentName:Q,titleName:qe,docsSlug:`alert-dialog`,children:(0,X.jsx)(Ue,{scope:n,cancelRef:c,children:(0,X.jsxs)(De,{role:`alertdialog`,...a,...i,ref:s,onOpenAutoFocus:ue(i.onOpenAutoFocus,e=>{e.preventDefault(),c.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,X.jsx)(Ge,{children:r}),(0,X.jsx)(tt,{contentRef:o})]})})})});Ke.displayName=Q;var qe=`AlertDialogTitle`,Je=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(be,{...i,...r,ref:t})});Je.displayName=qe;var Ye=`AlertDialogDescription`,Xe=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(Se,{...i,...r,ref:t})});Xe.displayName=Ye;var Ze=`AlertDialogAction`,Qe=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(we,{...i,...r,ref:t})});Qe.displayName=Ze;var $e=`AlertDialogCancel`,et=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=We($e,n),a=Z(n),o=pe(t,i);return(0,X.jsx)(we,{...a,...r,ref:o})});et.displayName=$e;var tt=({contentRef:e})=>{let t=`\`${Q}\` requires a description for the component to be accessible for screen reader users.
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{i as t,n,o as r,s as i,t as a}from"./select-D5oFJNaq.js";import{t as o}from"./circle-alert-CULfrrqE.js";import{C as s,S as c,_ as l,a as u,b as d,c as f,d as p,f as m,g as h,h as g,l as ee,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as w,v as T,w as E,x as D,y as te}from"./id-badge-BmmZdbHv.js";import{n as ne,r as O}from"./monaco-editor-DF4W-NC-.js";import{c as k,t as A}from"./split-button-wGcE-JDx.js";import{t as re}from"./grip-vertical-KfzS75WH.js";import{n as j,r as M,t as N}from"./shortcut-hints-CtwepXR1.js";import{t as ie}from"./plus-Qf7V331e.js";import{t as P}from"./refresh-cw-RAow1kax.js";import{n as F,t as ae}from"./textarea-CVB6Do1_.js";import{t as oe}from"./square-CgFZz_zK.js";import{a as I,r as L}from"./dist-wK15YRiu.js";import{n as R,r as z,t as se}from"./popover-DwYq4QYF.js";import{t as ce}from"./switch-CPd0R3ri.js";import{An as B,Bn as le,Cn as ue,Fn as de,Ht as V,In as fe,Mn as pe,Mt as H,Nn as me,Pn as he,Pt as U,Qn as ge,Rn as _e,Un as W,Ut as G,Wn as ve,Wt as K,an as ye,cn as be,dn as xe,in as Se,jt as q,ln as Ce,nn as we,on as Te,pr as Ee,rn as De,sn as Oe,sr as ke,un as Ae,wn as je,zn as J}from"./index-B4FdO6Vk.js";import{t as Me}from"./badge-CC1v3nk4.js";var Y=e(Ee(),1),X=ge(),Ne=`AlertDialog`,[Pe,Fe]=je(Ne,[xe]),Z=xe(),Ie=e=>{let{__scopeAlertDialog:t,...n}=e,r=Z(t);return(0,X.jsx)(Oe,{...r,...n,modal:!0})};Ie.displayName=Ne;var Le=`AlertDialogTrigger`,Re=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(Ce,{...i,...r,ref:t})});Re.displayName=Le;var ze=`AlertDialogPortal`,Be=e=>{let{__scopeAlertDialog:t,...n}=e,r=Z(t);return(0,X.jsx)(Te,{...r,...n})};Be.displayName=ze;var Ve=`AlertDialogOverlay`,He=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(ye,{...i,...r,ref:t})});He.displayName=Ve;var Q=`AlertDialogContent`,[Ue,We]=Pe(Q),Ge=B(`AlertDialogContent`),Ke=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,children:r,...i}=e,a=Z(n),o=Y.useRef(null),s=pe(t,o),c=Y.useRef(null);return(0,X.jsx)(Ae,{contentName:Q,titleName:qe,docsSlug:`alert-dialog`,children:(0,X.jsx)(Ue,{scope:n,cancelRef:c,children:(0,X.jsxs)(De,{role:`alertdialog`,...a,...i,ref:s,onOpenAutoFocus:ue(i.onOpenAutoFocus,e=>{e.preventDefault(),c.current?.focus({preventScroll:!0})}),onPointerDownOutside:e=>e.preventDefault(),onInteractOutside:e=>e.preventDefault(),children:[(0,X.jsx)(Ge,{children:r}),(0,X.jsx)(tt,{contentRef:o})]})})})});Ke.displayName=Q;var qe=`AlertDialogTitle`,Je=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(be,{...i,...r,ref:t})});Je.displayName=qe;var Ye=`AlertDialogDescription`,Xe=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(Se,{...i,...r,ref:t})});Xe.displayName=Ye;var Ze=`AlertDialogAction`,Qe=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,i=Z(n);return(0,X.jsx)(we,{...i,...r,ref:t})});Qe.displayName=Ze;var $e=`AlertDialogCancel`,et=Y.forwardRef((e,t)=>{let{__scopeAlertDialog:n,...r}=e,{cancelRef:i}=We($e,n),a=Z(n),o=pe(t,i);return(0,X.jsx)(we,{...a,...r,ref:o})});et.displayName=$e;var tt=({contentRef:e})=>{let t=`\`${Q}\` requires a description for the component to be accessible for screen reader users.
2
2
 
3
3
  You can add a description to the \`${Q}\` by passing a \`${Ye}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
4
4
 
@@ -1 +1 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{t}from"./monaco-editor-DNT0Mzki.js";import{t as n}from"./file-code-B3iDpJRP.js";import{n as r}from"./split-button-DcY8ames.js";import{t as i}from"./zap-KFJmkY3Y.js";import{t as a}from"./use-page-title-B1t9-5_U.js";import{n as o,t as ee}from"./test-navbar-DoHKAy1p.js";import{a as te,n as s,o as ne,t as c}from"./insights-line-grid-BKOqA-1W.js";import{i as l,n as u,r as d,t as f}from"./tabs-DrB_Acb3.js";import{$n as p,At as m,Gt as h,Jt as g,Kt as _,Mt as v,Nt as re,Pt as y,Qn as b,St as ie,Ut as x,cr as ae,jt as S,lr as oe,lt as se,pr as C,qt as w,r as ce,sr as T,ur as le,ut as ue}from"./index-Bvtm2F6f.js";import{t as E}from"./badge-DrW2vGVJ.js";import{a as D,i as O,n as k,o as A,r as j,t as M}from"./table-D08QBBt4.js";import{t as de}from"./empty-state-BTvOA5lp.js";import{t as fe}from"./use-keyboard-shortcuts-EAppuiKO.js";import{n as N,r as pe,t as me}from"./viewer-url-state-6mOK5_sY.js";var P=e(C(),1),F=b();function he(e){if(!e)return``;let t=new Date(g(e)),n=Date.now()-t.getTime(),r=Math.floor(n/1e3);if(r<60)return`just now`;let i=Math.floor(r/60);if(i<60)return`${i}m ago`;let a=Math.floor(i/60);if(a<24)return`${a}h ago`;let o=Math.floor(a/24);return o<7?`${o}d ago`:h(e)}function I({configured:e,mode:t,scopedCount:n,totalCount:r,onModeChange:i}){return e?(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,F.jsx)(`div`,{className:`inline-flex rounded border border-border p-0.5`,children:[`scoped`,`all`].map(e=>(0,F.jsx)(x,{type:`button`,size:`xs`,variant:t===e?`default`:`ghost`,"aria-pressed":t===e,className:`h-7 rounded-[2px] px-2 text-xs`,onClick:()=>i(e),children:e===`scoped`?`Scoped`:`All runs`},e))}),(0,F.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[n,` scoped / `,r,` total runs`]})]}):(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No analytics scope configured`})}var ge=[`builder`,`yaml`,`memory`];function L({status:e}){switch(e){case`passed`:return(0,F.jsx)(E,{className:`bg-emerald-500/15 text-emerald-500 border-emerald-500/20`,children:`Passed`});case`failed`:return(0,F.jsx)(E,{variant:`destructive`,children:`Failed`});case`healed`:return(0,F.jsx)(E,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Healed`});case`flaky`:return(0,F.jsx)(E,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Flaky`});case`running`:return(0,F.jsx)(E,{className:`bg-blue-500/15 text-blue-500 border-blue-500/20 animate-pulse`,children:`Running`});case`cancelled`:return(0,F.jsx)(E,{className:`bg-muted text-muted-foreground border-border`,children:`Cancelled`});default:return(0,F.jsx)(E,{variant:`outline`,children:e})}}function _e({runs:e}){return e.length===0?(0,F.jsx)(`div`,{className:`flex items-center justify-center h-32 text-sm text-muted-foreground`,children:`No runs yet — click Run to start`}):(0,F.jsxs)(M,{children:[(0,F.jsx)(D,{children:(0,F.jsxs)(A,{children:[(0,F.jsx)(O,{children:`Status`}),(0,F.jsx)(O,{children:`Duration`}),(0,F.jsx)(O,{children:`Date`})]})}),(0,F.jsx)(k,{children:e.map(e=>(0,F.jsxs)(A,{className:`relative cursor-pointer hover:bg-muted/50`,children:[(0,F.jsxs)(j,{children:[(0,F.jsx)(T,{to:p.runDetailOrLive(e.id,e.status),className:`absolute inset-0`,tabIndex:-1}),(0,F.jsx)(L,{status:e.status})]}),(0,F.jsx)(j,{children:e.status===`running`?(0,F.jsx)(`span`,{className:`text-blue-500 text-sm`,children:`In progress...`}):(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:w(e.duration)})}),(0,F.jsx)(j,{children:(0,F.jsxs)(S,{children:[(0,F.jsx)(y,{asChild:!0,children:(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:h(e.createdAt)})}),(0,F.jsx)(v,{children:_(e.createdAt)})]})})]},e.id))})]})}function R(){let{t_id:e}=oe(),h=ae(),{defaultRunMode:g}=r(),[_,v]=le(),y=e??``,b=(0,P.useMemo)(()=>me(_,ge),[_]),x=(0,P.useMemo)(()=>N(b,_),[_,b]),S=b.tab,C=b.view,[R,ve]=(0,P.useState)(``),[ye,be]=(0,P.useState)(``),[xe,z]=(0,P.useState)(!0),[Se,B]=(0,P.useState)(!1),[V,Ce]=(0,P.useState)(null),[H,U]=(0,P.useState)(`all`),[W,G]=(0,P.useState)(!1),[we,Te]=(0,P.useState)(!1),K=(0,P.useMemo)(()=>{let e=R.match(/^name:\s*(.+)$/m);return e?e[1].trim():null},[R]);a(K||`Test`);let q=V?.scope?.configured===!0,J=H===`scoped`&&q&&V?.scopedTrends?V.scopedTrends:V?.trends,Y=H===`scoped`&&q&&V?.scopedFlakyScore!==void 0?V.scopedFlakyScore:V?.flakyScore??0,Ee=H===`scoped`&&q?V?.scopedRuns??[]:V?.runs??[],De=(0,P.useMemo)(()=>J?.daily?J.daily.map(e=>({date:e.date,passRate:e.total>0?Math.round(e.passed/e.total*1e3)/10:0})):[],[J]),Oe=(0,P.useMemo)(()=>V?.trends.daily?V.trends.daily.map(e=>({date:e.date,duration:e.avgDuration})):[],[V]),X=Ee;(0,P.useEffect)(()=>{V&&U(V.scope?.configured?`scoped`:`all`)},[V]),(0,P.useEffect)(()=>{x.toString()!==_.toString()&&v(x,{replace:!0})},[x,_,v]),(0,P.useEffect)(()=>{if(!y){B(!0),z(!1);return}let e=!1;return ue(y).then(t=>{e||(ve(t.content),be(t.path))}).catch(()=>{e||(B(!0),m.error(`Failed to load test file`))}).finally(()=>{e||z(!1)}),()=>{e=!0}},[y]),(0,P.useEffect)(()=>{if(!K)return;let e=!1;return se(K,{limit:50}).then(t=>{e||Ce(t)}).catch(()=>{}),()=>{e=!0}},[K]);let Z=async e=>{if(!W){G(!0);try{let t=await ie({file:ye,local:e});m.success(`Run started`),h(p.runLive(t.runId))}catch(e){m.error(`Failed to start run: ${e instanceof Error?e.message:String(e)}`)}finally{G(!1)}}},Q=p.testEdit(y),$=p.testEditLive(y);fe({e:()=>h(Q),r:()=>{Z(g===`local`)},l:()=>h($)});let ke=e=>{v(N(e,_),{replace:!0})};if(xe)return(0,F.jsx)(ce,{});if(Se)return(0,F.jsx)(de,{icon:n,title:`Test not found`,description:`This test file doesn't exist`,actionLabel:`View All Tests`,onAction:()=>h(p.tests)});let Ae=(0,F.jsx)(o,{content:R,onChange:()=>{},disabled:!0}),je=(0,F.jsx)(t,{value:R,onChange:()=>{},readOnly:!0,className:`h-full`}),Me=V&&(0,F.jsxs)(`aside`,{"data-testid":`test-detail-analytics-sidebar`,className:`flex flex-col gap-0 overflow-y-auto border-t border-border md:border-t-0 md:border-l md:border-border`,children:[(0,F.jsx)(`div`,{className:`border-b border-border px-3 py-2`,children:(0,F.jsx)(I,{configured:q,mode:H,scopedCount:V.scope?.scopedCount??0,totalCount:V.scope?.totalCount??V.total,onModeChange:U})}),(0,F.jsxs)(s,{className:`grid-cols-2 divide-x divide-y-0 border-x-0 border-t-0`,children:[(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Pass Rate`}),(0,F.jsxs)(`span`,{className:`text-xl font-semibold text-foreground`,children:[Math.round((J??V.trends).passRate*100),`%`]})]}),(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Avg Duration`}),(0,F.jsx)(`span`,{className:`text-xl font-semibold text-foreground`,children:w(V.trends.avgDuration)})]}),(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 border-t border-border px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Total Runs`}),(0,F.jsx)(`span`,{className:`text-xl font-semibold text-foreground`,children:V.total.toLocaleString()})]}),(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 border-t border-border px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Flaky Score`}),(0,F.jsxs)(`span`,{className:`text-xl font-semibold text-foreground`,children:[(Y*100).toFixed(0),`%`]})]})]}),(0,F.jsx)(s,{className:`border-x-0 border-y-0`,children:(0,F.jsxs)(c,{className:`flex flex-col gap-2 px-3 py-3`,children:[(0,F.jsxs)(`span`,{className:`text-sm font-medium text-foreground`,children:[H===`scoped`&&q?`Scoped Runs`:`All Runs`,` (`,X.length,`)`]}),X.length===0?(0,F.jsx)(`div`,{className:`flex items-center justify-center h-16 text-sm text-muted-foreground`,children:`No runs yet`}):(0,F.jsxs)(M,{children:[(0,F.jsx)(D,{children:(0,F.jsxs)(A,{children:[(0,F.jsx)(O,{children:`Status`}),(0,F.jsx)(O,{children:`Duration`}),(0,F.jsx)(O,{children:`Date`})]})}),(0,F.jsx)(k,{children:X.slice(0,5).map(e=>(0,F.jsxs)(A,{className:`relative cursor-pointer hover:bg-muted/50`,children:[(0,F.jsxs)(j,{children:[(0,F.jsx)(T,{to:p.runDetailOrLive(e.id,e.status),className:`absolute inset-0`,tabIndex:-1}),(0,F.jsx)(L,{status:e.status})]}),(0,F.jsx)(j,{children:e.status===`running`?(0,F.jsx)(`span`,{className:`text-blue-500 text-sm`,children:`In progress...`}):(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:w(e.duration)})}),(0,F.jsx)(j,{children:(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:he(e.createdAt)})})]},e.id))})]})]})})]});return(0,F.jsx)(re,{children:(0,F.jsxs)(`div`,{className:`flex flex-col h-screen`,children:[(0,F.jsx)(ee,{testName:K||`Test`,testId:y,unsaved:!1,isCreateMode:!1,mode:`view`,testHref:Q,isSaving:!1,isValidating:!1,isRunning:W,hasInvalidFilename:!1,showTestId:!1,onBack:()=>h(p.tests),onSave:()=>{},onValidate:()=>{},onRun:e=>Z(e),onLiveConnect:()=>h($),onSettingsOpen:()=>{},shortcutsOpen:we,onToggleShortcuts:()=>Te(e=>!e)}),(0,F.jsxs)(f,{value:S,onValueChange:e=>ke({tab:e,view:C}),className:`flex-1 min-h-0 flex flex-col`,children:[(0,F.jsx)(`div`,{className:`px-4 border-b border-border`,children:(0,F.jsxs)(d,{variant:`line`,children:[(0,F.jsx)(l,{value:`overview`,children:`Overview`}),(0,F.jsx)(l,{value:`insights`,children:`Insights`})]})}),(0,F.jsxs)(u,{value:`overview`,className:`flex-1 min-h-0 mt-0 grid grid-cols-1 md:grid-cols-[minmax(480px,1fr)_minmax(260px,320px)]`,children:[(0,F.jsx)(`div`,{className:`min-w-0 min-h-0 flex flex-col`,children:(0,F.jsxs)(f,{value:C,onValueChange:e=>ke({tab:S,view:e}),className:`flex-1 min-h-0 flex flex-col`,children:[(0,F.jsx)(`div`,{className:`px-4 border-b border-border`,children:(0,F.jsxs)(d,{variant:`line`,className:`w-full grid grid-cols-3 md:w-fit md:inline-flex`,children:[(0,F.jsx)(l,{value:`builder`,children:`Builder`}),(0,F.jsx)(l,{value:`yaml`,children:`YAML`}),(0,F.jsx)(l,{value:`memory`,children:`Memory`})]})}),(0,F.jsxs)(`div`,{className:`relative flex-1 min-h-0`,children:[(0,F.jsx)(u,{value:`builder`,className:`absolute inset-0 overflow-y-auto data-[state=inactive]:hidden`,children:Ae}),(0,F.jsx)(u,{value:`yaml`,className:`absolute inset-0 data-[state=inactive]:hidden`,children:je}),(0,F.jsx)(u,{value:`memory`,className:`absolute inset-0 overflow-y-auto data-[state=inactive]:hidden`,children:(0,F.jsx)(pe,{scope:`test`,scopeId:y,emptyTitle:`No test memory yet`,emptyDescription:`This test doesn't have cataloged observations in this workspace yet. Run the test with memory enabled, then reopen this tab.`})})]})]})}),Me]}),(0,F.jsx)(u,{value:`insights`,className:`flex-1 overflow-y-auto mt-0`,children:(0,F.jsx)(`div`,{"data-testid":`test-detail-insights`,className:`px-4 py-3`,children:V?(0,F.jsxs)(`div`,{className:`space-y-3`,children:[V.isFlaky&&(0,F.jsxs)(E,{variant:`destructive`,children:[(0,F.jsx)(i,{className:`size-3`}),`Flaky (score: `,V.flakyScore.toFixed(2),`)`]}),(0,F.jsxs)(s,{className:`grid-cols-2 divide-x divide-y-0 md:grid-cols-4`,children:[(0,F.jsx)(c,{className:`border-b border-border md:border-b-0`,children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Total Runs`}),(0,F.jsx)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:V.total.toLocaleString()})]})}),(0,F.jsx)(c,{className:`border-b border-border md:border-b-0 md:border-r`,children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Pass Rate`}),(0,F.jsxs)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:[Math.round((J??V.trends).passRate*100),`%`]})]})}),(0,F.jsx)(c,{children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Avg Duration`}),(0,F.jsx)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:w(V.trends.avgDuration)})]})}),(0,F.jsx)(c,{children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Flaky Score`}),(0,F.jsxs)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:[(Y*100).toFixed(0),`%`]})]})})]}),(0,F.jsx)(s,{children:(0,F.jsx)(c,{className:`px-4 py-3`,children:(0,F.jsx)(I,{configured:q,mode:H,scopedCount:V.scope?.scopedCount??0,totalCount:V.scope?.totalCount??V.total,onModeChange:U})})}),(J?.daily.length??0)>0&&(0,F.jsxs)(s,{className:`md:grid-cols-2 md:divide-x md:divide-y-0`,children:[(0,F.jsxs)(c,{className:`px-4 py-3`,children:[(0,F.jsx)(`p`,{className:`text-sm font-medium mb-2`,children:`Pass Rate`}),(0,F.jsx)(`div`,{className:`h-[160px] overflow-hidden`,children:(0,F.jsx)(ne,{data:De})})]}),(0,F.jsxs)(c,{className:`px-4 py-3`,children:[(0,F.jsx)(`p`,{className:`text-sm font-medium mb-2`,children:`Duration`}),(0,F.jsx)(`div`,{className:`h-[160px] overflow-hidden`,children:(0,F.jsx)(te,{data:Oe})})]})]}),(0,F.jsx)(s,{children:(0,F.jsxs)(c,{className:`px-4 py-3`,children:[(0,F.jsxs)(`p`,{className:`text-sm font-medium mb-2`,children:[H===`scoped`&&q?`Scoped Runs`:`All Runs`,` (`,X.length,`)`]}),(0,F.jsx)(_e,{runs:X})]})})]}):(0,F.jsx)(s,{children:(0,F.jsx)(c,{className:`flex h-32 items-center justify-center text-sm text-muted-foreground`,children:`No analytics data available`})})})})]})]})})}export{R as default};
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{t}from"./monaco-editor-DF4W-NC-.js";import{t as n}from"./file-code-BpwHxsqo.js";import{n as r}from"./split-button-wGcE-JDx.js";import{t as i}from"./zap-BYpQfhU4.js";import{t as a}from"./use-page-title-B4YPyIzc.js";import{n as o,t as ee}from"./test-navbar-C6-h4kbc.js";import{a as te,n as s,o as ne,t as c}from"./insights-line-grid-DKZyKGcI.js";import{i as l,n as u,r as d,t as f}from"./tabs-DzjvuMEX.js";import{$n as p,At as m,Gt as h,Jt as g,Kt as _,Mt as v,Nt as re,Pt as y,Qn as b,St as ie,Ut as x,cr as ae,jt as S,lr as oe,lt as se,pr as C,qt as w,r as ce,sr as T,ur as le,ut as ue}from"./index-B4FdO6Vk.js";import{t as E}from"./badge-CC1v3nk4.js";import{a as D,i as O,n as k,o as A,r as j,t as M}from"./table-QG2rKYu8.js";import{t as de}from"./empty-state-BfgY0UGA.js";import{t as fe}from"./use-keyboard-shortcuts-Bal_Cx9w.js";import{n as N,r as pe,t as me}from"./viewer-url-state-ClEUZJMl.js";var P=e(C(),1),F=b();function he(e){if(!e)return``;let t=new Date(g(e)),n=Date.now()-t.getTime(),r=Math.floor(n/1e3);if(r<60)return`just now`;let i=Math.floor(r/60);if(i<60)return`${i}m ago`;let a=Math.floor(i/60);if(a<24)return`${a}h ago`;let o=Math.floor(a/24);return o<7?`${o}d ago`:h(e)}function I({configured:e,mode:t,scopedCount:n,totalCount:r,onModeChange:i}){return e?(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,F.jsx)(`div`,{className:`inline-flex rounded border border-border p-0.5`,children:[`scoped`,`all`].map(e=>(0,F.jsx)(x,{type:`button`,size:`xs`,variant:t===e?`default`:`ghost`,"aria-pressed":t===e,className:`h-7 rounded-[2px] px-2 text-xs`,onClick:()=>i(e),children:e===`scoped`?`Scoped`:`All runs`},e))}),(0,F.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[n,` scoped / `,r,` total runs`]})]}):(0,F.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No analytics scope configured`})}var ge=[`builder`,`yaml`,`memory`];function L({status:e}){switch(e){case`passed`:return(0,F.jsx)(E,{className:`bg-emerald-500/15 text-emerald-500 border-emerald-500/20`,children:`Passed`});case`failed`:return(0,F.jsx)(E,{variant:`destructive`,children:`Failed`});case`healed`:return(0,F.jsx)(E,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Healed`});case`flaky`:return(0,F.jsx)(E,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Flaky`});case`running`:return(0,F.jsx)(E,{className:`bg-blue-500/15 text-blue-500 border-blue-500/20 animate-pulse`,children:`Running`});case`cancelled`:return(0,F.jsx)(E,{className:`bg-muted text-muted-foreground border-border`,children:`Cancelled`});default:return(0,F.jsx)(E,{variant:`outline`,children:e})}}function _e({runs:e}){return e.length===0?(0,F.jsx)(`div`,{className:`flex items-center justify-center h-32 text-sm text-muted-foreground`,children:`No runs yet — click Run to start`}):(0,F.jsxs)(M,{children:[(0,F.jsx)(D,{children:(0,F.jsxs)(A,{children:[(0,F.jsx)(O,{children:`Status`}),(0,F.jsx)(O,{children:`Duration`}),(0,F.jsx)(O,{children:`Date`})]})}),(0,F.jsx)(k,{children:e.map(e=>(0,F.jsxs)(A,{className:`relative cursor-pointer hover:bg-muted/50`,children:[(0,F.jsxs)(j,{children:[(0,F.jsx)(T,{to:p.runDetailOrLive(e.id,e.status),className:`absolute inset-0`,tabIndex:-1}),(0,F.jsx)(L,{status:e.status})]}),(0,F.jsx)(j,{children:e.status===`running`?(0,F.jsx)(`span`,{className:`text-blue-500 text-sm`,children:`In progress...`}):(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:w(e.duration)})}),(0,F.jsx)(j,{children:(0,F.jsxs)(S,{children:[(0,F.jsx)(y,{asChild:!0,children:(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:h(e.createdAt)})}),(0,F.jsx)(v,{children:_(e.createdAt)})]})})]},e.id))})]})}function R(){let{t_id:e}=oe(),h=ae(),{defaultRunMode:g}=r(),[_,v]=le(),y=e??``,b=(0,P.useMemo)(()=>me(_,ge),[_]),x=(0,P.useMemo)(()=>N(b,_),[_,b]),S=b.tab,C=b.view,[R,ve]=(0,P.useState)(``),[ye,be]=(0,P.useState)(``),[xe,z]=(0,P.useState)(!0),[Se,B]=(0,P.useState)(!1),[V,Ce]=(0,P.useState)(null),[H,U]=(0,P.useState)(`all`),[W,G]=(0,P.useState)(!1),[we,Te]=(0,P.useState)(!1),K=(0,P.useMemo)(()=>{let e=R.match(/^name:\s*(.+)$/m);return e?e[1].trim():null},[R]);a(K||`Test`);let q=V?.scope?.configured===!0,J=H===`scoped`&&q&&V?.scopedTrends?V.scopedTrends:V?.trends,Y=H===`scoped`&&q&&V?.scopedFlakyScore!==void 0?V.scopedFlakyScore:V?.flakyScore??0,Ee=H===`scoped`&&q?V?.scopedRuns??[]:V?.runs??[],De=(0,P.useMemo)(()=>J?.daily?J.daily.map(e=>({date:e.date,passRate:e.total>0?Math.round(e.passed/e.total*1e3)/10:0})):[],[J]),Oe=(0,P.useMemo)(()=>V?.trends.daily?V.trends.daily.map(e=>({date:e.date,duration:e.avgDuration})):[],[V]),X=Ee;(0,P.useEffect)(()=>{V&&U(V.scope?.configured?`scoped`:`all`)},[V]),(0,P.useEffect)(()=>{x.toString()!==_.toString()&&v(x,{replace:!0})},[x,_,v]),(0,P.useEffect)(()=>{if(!y){B(!0),z(!1);return}let e=!1;return ue(y).then(t=>{e||(ve(t.content),be(t.path))}).catch(()=>{e||(B(!0),m.error(`Failed to load test file`))}).finally(()=>{e||z(!1)}),()=>{e=!0}},[y]),(0,P.useEffect)(()=>{if(!K)return;let e=!1;return se(K,{limit:50}).then(t=>{e||Ce(t)}).catch(()=>{}),()=>{e=!0}},[K]);let Z=async e=>{if(!W){G(!0);try{let t=await ie({file:ye,local:e});m.success(`Run started`),h(p.runLive(t.runId))}catch(e){m.error(`Failed to start run: ${e instanceof Error?e.message:String(e)}`)}finally{G(!1)}}},Q=p.testEdit(y),$=p.testEditLive(y);fe({e:()=>h(Q),r:()=>{Z(g===`local`)},l:()=>h($)});let ke=e=>{v(N(e,_),{replace:!0})};if(xe)return(0,F.jsx)(ce,{});if(Se)return(0,F.jsx)(de,{icon:n,title:`Test not found`,description:`This test file doesn't exist`,actionLabel:`View All Tests`,onAction:()=>h(p.tests)});let Ae=(0,F.jsx)(o,{content:R,onChange:()=>{},disabled:!0}),je=(0,F.jsx)(t,{value:R,onChange:()=>{},readOnly:!0,className:`h-full`}),Me=V&&(0,F.jsxs)(`aside`,{"data-testid":`test-detail-analytics-sidebar`,className:`flex flex-col gap-0 overflow-y-auto border-t border-border md:border-t-0 md:border-l md:border-border`,children:[(0,F.jsx)(`div`,{className:`border-b border-border px-3 py-2`,children:(0,F.jsx)(I,{configured:q,mode:H,scopedCount:V.scope?.scopedCount??0,totalCount:V.scope?.totalCount??V.total,onModeChange:U})}),(0,F.jsxs)(s,{className:`grid-cols-2 divide-x divide-y-0 border-x-0 border-t-0`,children:[(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Pass Rate`}),(0,F.jsxs)(`span`,{className:`text-xl font-semibold text-foreground`,children:[Math.round((J??V.trends).passRate*100),`%`]})]}),(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Avg Duration`}),(0,F.jsx)(`span`,{className:`text-xl font-semibold text-foreground`,children:w(V.trends.avgDuration)})]}),(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 border-t border-border px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Total Runs`}),(0,F.jsx)(`span`,{className:`text-xl font-semibold text-foreground`,children:V.total.toLocaleString()})]}),(0,F.jsxs)(c,{className:`flex flex-col gap-0.5 border-t border-border px-3 py-2`,children:[(0,F.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Flaky Score`}),(0,F.jsxs)(`span`,{className:`text-xl font-semibold text-foreground`,children:[(Y*100).toFixed(0),`%`]})]})]}),(0,F.jsx)(s,{className:`border-x-0 border-y-0`,children:(0,F.jsxs)(c,{className:`flex flex-col gap-2 px-3 py-3`,children:[(0,F.jsxs)(`span`,{className:`text-sm font-medium text-foreground`,children:[H===`scoped`&&q?`Scoped Runs`:`All Runs`,` (`,X.length,`)`]}),X.length===0?(0,F.jsx)(`div`,{className:`flex items-center justify-center h-16 text-sm text-muted-foreground`,children:`No runs yet`}):(0,F.jsxs)(M,{children:[(0,F.jsx)(D,{children:(0,F.jsxs)(A,{children:[(0,F.jsx)(O,{children:`Status`}),(0,F.jsx)(O,{children:`Duration`}),(0,F.jsx)(O,{children:`Date`})]})}),(0,F.jsx)(k,{children:X.slice(0,5).map(e=>(0,F.jsxs)(A,{className:`relative cursor-pointer hover:bg-muted/50`,children:[(0,F.jsxs)(j,{children:[(0,F.jsx)(T,{to:p.runDetailOrLive(e.id,e.status),className:`absolute inset-0`,tabIndex:-1}),(0,F.jsx)(L,{status:e.status})]}),(0,F.jsx)(j,{children:e.status===`running`?(0,F.jsx)(`span`,{className:`text-blue-500 text-sm`,children:`In progress...`}):(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:w(e.duration)})}),(0,F.jsx)(j,{children:(0,F.jsx)(`span`,{className:`text-muted-foreground`,children:he(e.createdAt)})})]},e.id))})]})]})})]});return(0,F.jsx)(re,{children:(0,F.jsxs)(`div`,{className:`flex flex-col h-screen`,children:[(0,F.jsx)(ee,{testName:K||`Test`,testId:y,unsaved:!1,isCreateMode:!1,mode:`view`,testHref:Q,isSaving:!1,isValidating:!1,isRunning:W,hasInvalidFilename:!1,showTestId:!1,onBack:()=>h(p.tests),onSave:()=>{},onValidate:()=>{},onRun:e=>Z(e),onLiveConnect:()=>h($),onSettingsOpen:()=>{},shortcutsOpen:we,onToggleShortcuts:()=>Te(e=>!e)}),(0,F.jsxs)(f,{value:S,onValueChange:e=>ke({tab:e,view:C}),className:`flex-1 min-h-0 flex flex-col`,children:[(0,F.jsx)(`div`,{className:`px-4 border-b border-border`,children:(0,F.jsxs)(d,{variant:`line`,children:[(0,F.jsx)(l,{value:`overview`,children:`Overview`}),(0,F.jsx)(l,{value:`insights`,children:`Insights`})]})}),(0,F.jsxs)(u,{value:`overview`,className:`flex-1 min-h-0 mt-0 grid grid-cols-1 md:grid-cols-[minmax(480px,1fr)_minmax(260px,320px)]`,children:[(0,F.jsx)(`div`,{className:`min-w-0 min-h-0 flex flex-col`,children:(0,F.jsxs)(f,{value:C,onValueChange:e=>ke({tab:S,view:e}),className:`flex-1 min-h-0 flex flex-col`,children:[(0,F.jsx)(`div`,{className:`px-4 border-b border-border`,children:(0,F.jsxs)(d,{variant:`line`,className:`w-full grid grid-cols-3 md:w-fit md:inline-flex`,children:[(0,F.jsx)(l,{value:`builder`,children:`Builder`}),(0,F.jsx)(l,{value:`yaml`,children:`YAML`}),(0,F.jsx)(l,{value:`memory`,children:`Memory`})]})}),(0,F.jsxs)(`div`,{className:`relative flex-1 min-h-0`,children:[(0,F.jsx)(u,{value:`builder`,className:`absolute inset-0 overflow-y-auto data-[state=inactive]:hidden`,children:Ae}),(0,F.jsx)(u,{value:`yaml`,className:`absolute inset-0 data-[state=inactive]:hidden`,children:je}),(0,F.jsx)(u,{value:`memory`,className:`absolute inset-0 overflow-y-auto data-[state=inactive]:hidden`,children:(0,F.jsx)(pe,{scope:`test`,scopeId:y,emptyTitle:`No test memory yet`,emptyDescription:`This test doesn't have cataloged observations in this workspace yet. Run the test with memory enabled, then reopen this tab.`})})]})]})}),Me]}),(0,F.jsx)(u,{value:`insights`,className:`flex-1 overflow-y-auto mt-0`,children:(0,F.jsx)(`div`,{"data-testid":`test-detail-insights`,className:`px-4 py-3`,children:V?(0,F.jsxs)(`div`,{className:`space-y-3`,children:[V.isFlaky&&(0,F.jsxs)(E,{variant:`destructive`,children:[(0,F.jsx)(i,{className:`size-3`}),`Flaky (score: `,V.flakyScore.toFixed(2),`)`]}),(0,F.jsxs)(s,{className:`grid-cols-2 divide-x divide-y-0 md:grid-cols-4`,children:[(0,F.jsx)(c,{className:`border-b border-border md:border-b-0`,children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Total Runs`}),(0,F.jsx)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:V.total.toLocaleString()})]})}),(0,F.jsx)(c,{className:`border-b border-border md:border-b-0 md:border-r`,children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Pass Rate`}),(0,F.jsxs)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:[Math.round((J??V.trends).passRate*100),`%`]})]})}),(0,F.jsx)(c,{children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Avg Duration`}),(0,F.jsx)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:w(V.trends.avgDuration)})]})}),(0,F.jsx)(c,{children:(0,F.jsxs)(`div`,{children:[(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Flaky Score`}),(0,F.jsxs)(`p`,{className:`text-2xl font-semibold mt-0.5`,children:[(Y*100).toFixed(0),`%`]})]})})]}),(0,F.jsx)(s,{children:(0,F.jsx)(c,{className:`px-4 py-3`,children:(0,F.jsx)(I,{configured:q,mode:H,scopedCount:V.scope?.scopedCount??0,totalCount:V.scope?.totalCount??V.total,onModeChange:U})})}),(J?.daily.length??0)>0&&(0,F.jsxs)(s,{className:`md:grid-cols-2 md:divide-x md:divide-y-0`,children:[(0,F.jsxs)(c,{className:`px-4 py-3`,children:[(0,F.jsx)(`p`,{className:`text-sm font-medium mb-2`,children:`Pass Rate`}),(0,F.jsx)(`div`,{className:`h-[160px] overflow-hidden`,children:(0,F.jsx)(ne,{data:De})})]}),(0,F.jsxs)(c,{className:`px-4 py-3`,children:[(0,F.jsx)(`p`,{className:`text-sm font-medium mb-2`,children:`Duration`}),(0,F.jsx)(`div`,{className:`h-[160px] overflow-hidden`,children:(0,F.jsx)(te,{data:Oe})})]})]}),(0,F.jsx)(s,{children:(0,F.jsxs)(c,{className:`px-4 py-3`,children:[(0,F.jsxs)(`p`,{className:`text-sm font-medium mb-2`,children:[H===`scoped`&&q?`Scoped Runs`:`All Runs`,` (`,X.length,`)`]}),(0,F.jsx)(_e,{runs:X})]})})]}):(0,F.jsx)(s,{children:(0,F.jsx)(c,{className:`flex h-32 items-center justify-center text-sm text-muted-foreground`,children:`No analytics data available`})})})})]})]})})}export{R as default};
@@ -1 +1 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{t}from"./arrow-up-down-CN-uHgX9.js";import{i as n,n as r,o as i,s as a,t as o}from"./select-CeVjgiKI.js";import{n as s}from"./split-button-DcY8ames.js";import{n as c,r as l}from"./shortcut-hints-Bs5o743i.js";import{t as u}from"./plus-pXO98OAE.js";import{t as d}from"./use-page-title-B1t9-5_U.js";import{t as f}from"./batch-action-bar-uEhHVDds.js";import{n as p,t as m}from"./scroll-area-CnATfQoe.js";import{$n as h,At as g,Gt as _,Hn as ee,Ht as te,Mt as ne,N as re,Nn as ie,Nt as ae,Pt as oe,Qn as se,St as ce,Ut as v,Wt as y,a as le,cr as ue,dt as de,gt as fe,jt as pe,nt as me,pr as b,sr as he,ur as x}from"./index-Bvtm2F6f.js";import{t as S}from"./badge-DrW2vGVJ.js";import{a as ge,n as _e,o as ve,r as ye,t as C}from"./lib-58FyJI_k.js";import{a as be,i as xe,n as Se,o as w,r as Ce,t as we}from"./table-D08QBBt4.js";import{t as Te}from"./empty-state-BTvOA5lp.js";import{t as Ee}from"./use-keyboard-shortcuts-EAppuiKO.js";import{n as De,t as Oe}from"./use-selection-queue-BboTDies.js";import{n as ke,r as Ae,t as je}from"./tests-suites-table-widths-DNWnkAjA.js";var T=e(b(),1),E=new Set([`asc`,`desc`]),D=50;function Me(e){if(!e)return 1;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>1?t:1}function O(e){let t=new URLSearchParams;return e.search&&t.set(`search`,e.search),e.status&&t.set(`status`,e.status),e.platform&&t.set(`platform`,e.platform),e.target&&t.set(`target`,e.target),e.sort&&(t.set(`sort`,e.sort),t.set(`order`,e.order)),e.page>1&&t.set(`page`,String(e.page)),t}function Ne(){let[e,t]=x(),n=e.get(`search`)??``,r=e.get(`status`)??``,i=e.get(`platform`)??``,a=e.get(`target`)??``,o=e.get(`sort`)??``,s=e.get(`order`)??`desc`,c=E.has(s)?s:`desc`,l=Me(e.get(`page`)),u=(0,T.useMemo)(()=>o?[{id:o,desc:c===`desc`}]:[],[o,c]),d=(0,T.useRef)(u);d.current=u;let f=(0,T.useMemo)(()=>({search:n,status:r,platform:i,target:a,sort:o,order:c,page:l}),[n,r,i,a,o,c,l]);(0,T.useEffect)(()=>{let n=O(f);e.toString()!==n.toString()&&t(n,{replace:!0})},[e,t,f]);let p=(0,T.useCallback)((e,n)=>{let r={...f,...e};n?.resetPage&&(r.page=1),t(O(r),{replace:!0})},[t,f]),m=(0,T.useCallback)(e=>{let t=typeof e==`function`?e(d.current):e;t.length>0?p({sort:t[0].id,order:t[0].desc?`desc`:`asc`}):p({sort:``,order:`desc`})},[p]),h=(0,T.useMemo)(()=>({pageIndex:l-1,pageSize:D}),[l]);return{search:n,status:r,platform:i,target:a,sort:o,order:c,page:l,sorting:u,pagination:h,onSortingChange:m,onPaginationChange:(0,T.useCallback)(e=>{p({page:(typeof e==`function`?e(h):e).pageIndex+1})},[h,p]),setSearch:(0,T.useCallback)(e=>p({search:e},{resetPage:!0}),[p]),setStatus:(0,T.useCallback)(e=>p({status:e},{resetPage:!0}),[p]),setPlatform:(0,T.useCallback)(e=>p({platform:e},{resetPage:!0}),[p]),setTarget:(0,T.useCallback)(e=>p({target:e},{resetPage:!0}),[p]),setPage:(0,T.useCallback)(e=>p({page:e}),[p])}}var k=se();function A({status:e}){switch(e){case`passed`:return(0,k.jsx)(S,{className:`bg-emerald-500/15 text-emerald-500 border-emerald-500/20`,children:`Passed`});case`failed`:return(0,k.jsx)(S,{variant:`destructive`,children:`Failed`});case`healed`:return(0,k.jsx)(S,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Healed`});case`flaky`:return(0,k.jsx)(S,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Flaky`});case`running`:return(0,k.jsx)(S,{className:`bg-blue-500/15 text-blue-500 border-blue-500/20 animate-pulse`,children:`Running`});case`cancelled`:return(0,k.jsx)(S,{className:`bg-muted text-muted-foreground border-border`,children:`Cancelled`});default:return(0,k.jsx)(S,{variant:`outline`,children:e})}}var Pe=new Set([`passed`,`healed`]),Fe=new Set([`passed`,`healed`,`failed`,`flaky`,`cancelled`]);function j(e){return e?e===`ios`?`iOS`:e.charAt(0).toUpperCase()+e.slice(1):`—`}function M(e){return e.replace(/\\/g,`/`)}function N(e){let t=M(e).split(`/`).filter(Boolean);return t.length>1?t.slice(1).join(`/`):t[0]??e}function P(e){return e.createdAt||e.startedAt||e.endedAt||``}function Ie(e){return y(`h-10 bg-background text-[13px] font-medium text-foreground/90`,e===`select`?`px-2 text-center`:`px-3`,(e===`passRate`||e===`lastRun`)&&`text-right`)}function Le(e){return y(`py-2 align-top`,e===`select`&&`px-2`,e===`name`&&`max-w-0 px-3`,(e===`target`||e===`targetName`)&&`max-w-0 px-3`,e===`platform`&&`px-3`,e===`passRate`&&`px-3 text-right`,e===`lastRun`&&`max-w-0 px-3 text-right`)}function Re({isActive:e,isBatchSelected:t}){return y(`cursor-pointer outline-none hover:bg-muted/20 focus-visible:bg-primary/10 focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-primary/60`,t&&!e&&`bg-muted/20`,e&&`bg-primary/10 ring-1 ring-inset ring-primary/60`)}var F=[{accessorKey:`name`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Test Name`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>(0,k.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,k.jsx)(`span`,{className:`block whitespace-normal break-words text-sm font-medium leading-snug text-foreground`,children:e.getValue(`name`)}),(0,k.jsx)(`span`,{className:`block whitespace-normal break-all text-xs leading-snug text-muted-foreground`,children:N(e.original.path)})]}),filterFn:(e,t,n)=>{let r=e.getValue(`name`).toLowerCase(),i=e.original.path.toLowerCase(),a=n.toLowerCase();return r.includes(a)||i.includes(a)}},{accessorKey:`targetName`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Target`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>(0,k.jsx)(`span`,{className:`block whitespace-normal break-words text-sm leading-snug text-muted-foreground`,children:e.original.targetName??`No target`})},{accessorKey:`platform`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Platform`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>(0,k.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:j(e.getValue(`platform`))})},{accessorKey:`passRate`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Pass rate`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>e.original.passRate===null?(0,k.jsxs)(`div`,{className:`space-y-0.5 text-right`,children:[(0,k.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:`No runs`}),(0,k.jsx)(`div`,{className:`text-xs tabular-nums text-muted-foreground`,children:`0 completed`})]}):(0,k.jsxs)(`div`,{className:`space-y-0.5 text-right`,children:[(0,k.jsxs)(`div`,{className:`text-sm font-medium tabular-nums text-foreground`,children:[e.original.passRate,`%`]}),(0,k.jsxs)(`div`,{className:`text-xs tabular-nums text-muted-foreground`,children:[e.original.passCount,`/`,e.original.completedRunCount]})]})},{id:`lastRun`,accessorFn:e=>e.lastRun?.createdAt??e.lastRun?.startedAt??e.lastRun?.endedAt??``,header:({column:e})=>(0,k.jsx)(`div`,{className:`flex items-center justify-end`,children:(0,k.jsxs)(v,{variant:`ghost`,className:`h-auto justify-end px-0 text-[13px] font-medium text-foreground/90 hover:bg-transparent`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Last run`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]})}),cell:({row:e})=>e.original.lastRun?(0,k.jsxs)(he,{to:h.runDetail(e.original.lastRun.id),className:`relative z-10 flex w-full flex-col items-end gap-1 rounded-sm text-right focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60`,onClick:e=>e.stopPropagation(),children:[(0,k.jsx)(A,{status:e.original.lastRun.status}),(0,k.jsx)(`span`,{className:`whitespace-normal break-words text-xs leading-snug text-muted-foreground`,children:_(P(e.original.lastRun))})]}):(0,k.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:`No runs`}),sortingFn:(e,t)=>{let n=P(e.original.lastRun??{createdAt:``,startedAt:null,endedAt:null}),r=P(t.original.lastRun??{createdAt:``,startedAt:null,endedAt:null});return n.localeCompare(r)}}];function I(){d(`Tests`);let[e,t]=(0,T.useState)([]),[_,se]=(0,T.useState)([]),[b,he]=(0,T.useState)([]),[x,S]=(0,T.useState)(!0),[E,D]=(0,T.useState)(!1),[Me,O]=(0,T.useState)(!1),[A,j]=(0,T.useState)(!0),[I,ze]=(0,T.useState)(!0),L=ue(),{hasFarm:Be,isLoading:Ve}=s();(0,T.useEffect)(()=>{let e=!1;return Promise.all([de(),me({limit:200})]).then(([n,r])=>{e||(t(n.files),he(n.targets??[]),se(r.runs))}).catch(()=>{e||g.error(`Failed to load test files`)}).finally(()=>{e||S(!1)}),()=>{e=!0}},[]);let{search:R,status:z,platform:B,target:V,page:He,sorting:Ue,pagination:H,onSortingChange:We,onPaginationChange:Ge,setSearch:Ke,setStatus:qe,setPlatform:Je,setTarget:Ye,setPage:Xe}=Ne(),[U,W]=(0,T.useState)(-1),Ze=(0,T.useRef)([]),G=(0,T.useMemo)(()=>{let t=new Map,n=new Map,r=(e,t,n)=>{if(!t)return;let r=e.get(t);r?r.push(n):e.set(t,[n])};for(let e of _){if(!e.filePath)continue;let i=M(e.filePath);r(t,i,e),r(n,N(i),e)}return e.map(e=>{let r=M(e.path),i=[...t.get(r)??n.get(N(r))??[]].sort((e,t)=>P(t).localeCompare(P(e))),a=i.filter(e=>Fe.has(e.status)),o=a.filter(e=>Pe.has(e.status)).length,s=a.length>0?Math.round(o/a.length*100):null,c=i[0]??null;return{path:e.path,name:e.name,testId:e.testId,targetName:e.targetName,platform:e.platform,lastRunStatus:c?.status??null,lastRun:c,passRate:s,passCount:o,completedRunCount:a.length}})},[e,_]),K=(0,T.useMemo)(()=>{let e=G;if(R){let t=R.toLowerCase();e=e.filter(e=>{let n=e.targetName?.toLowerCase()??``;return e.name.toLowerCase().includes(t)||e.path.toLowerCase().includes(t)||n.includes(t)})}return z&&(e=z===`no-runs`?e.filter(e=>!e.lastRunStatus):e.filter(e=>e.lastRunStatus===z)),B&&(e=e.filter(e=>e.platform===B)),V&&(e=e.filter(e=>e.targetName===V)),e},[G,R,z,B,V]),q=Oe({items:G,getId:e=>e.path,visibleIds:K.map(e=>e.path)}),Qe=(0,T.useMemo)(()=>Array.from(new Set([V,...b,...G.map(e=>e.targetName??``)].filter(e=>!!e))),[G,V,b]),$e={id:`select`,header:({table:e})=>(0,k.jsx)(`div`,{className:`flex items-center justify-center`,children:(0,k.jsx)(Ae,{checked:q.getVisibleSelectionState(e.getRowModel().rows.map(e=>e.original.path)),onCheckedChange:t=>q.setItemsSelected(e.getRowModel().rows.map(e=>e.original),t),ariaLabel:`Select all`})}),cell:({row:e})=>(0,k.jsx)(Ae,{checked:q.isSelected(e.original.path),onCheckedChange:t=>q.setItemSelected(e.original,t)}),enableSorting:!1,size:48},J=q.selectedIds,Y=q.selectedItems,et=(0,T.useCallback)(()=>{q.clearSelection(),O(!1),j(!0),ze(!0)},[q]),tt=(0,T.useCallback)(async e=>{if(J.length!==0){D(!0);try{let t=await Promise.allSettled(J.map(t=>ce({file:t,local:e,noCache:!A,noMemory:!I}))),n=t.filter(e=>e.status===`fulfilled`).length,r=t.length-n;r>0?g.error(`${n} runs queued, ${r} failed`):g.success(`${n} runs queued`),O(!1)}finally{D(!1)}}},[J,A,I]),nt=(0,T.useCallback)(async()=>{if(J.length!==0){D(!0);try{let e=await Promise.allSettled(J.map(e=>fe({file:e}))),t=e.filter(e=>e.status===`fulfilled`).length,n=e.filter(e=>e.status===`fulfilled`).reduce((e,t)=>e+t.value.purged,0),r=e.length-t;r>0?g.error(`Purged ${n} plans from ${t} tests, ${r} failed`):g.success(`Purged ${n} cached plan${n===1?``:`s`}`)}finally{D(!1)}}},[J]),rt=(0,T.useCallback)(async()=>{if(Y.length!==0){D(!0);try{let e=await Promise.allSettled(Y.map(e=>e.testId?re(e.testId):Promise.reject(Error(`Missing test id for ${e.path}`)))),n=Y.filter((t,n)=>e[n]?.status===`fulfilled`),r=new Set(n.map(e=>e.path)),i=e.length-n.length;n.length>0&&(q.setItemsSelected(n,!1),t(e=>e.filter(e=>!r.has(e.path))),O(!1)),i>0?g.error(`Deleted ${n.length} test${n.length===1?``:`s`}, ${i} failed`):g.success(`Deleted ${n.length} test${n.length===1?``:`s`}`)}finally{D(!1)}}},[Y,q]),X=_e({data:K,columns:[$e,...F],getCoreRowModel:ye(),getSortedRowModel:ve(),getPaginationRowModel:ge(),onSortingChange:We,onPaginationChange:Ge,getRowId:e=>e.path,state:{sorting:Ue,pagination:H}}),Z=X.getRowModel().rows,Q=q.hiddenCount,it=R;(0,T.useEffect)(()=>{if(x)return;let e=Math.max(1,Math.ceil(K.length/H.pageSize));He>e&&Xe(e)},[K.length,x,He,H.pageSize,Xe]);let at=(0,T.useCallback)(e=>{Ke(e),W(-1)},[Ke]);Ee((0,T.useMemo)(()=>{let e=()=>W(e=>Math.min(e+1,Z.length-1)),t=()=>W(e=>Math.max(e-1,0));return{j:e,arrowdown:e,k:t,arrowup:t,enter:e=>{if(U>=0&&Z[U]){let t=Z[U].original,n=h.testView(t.testId??t.path);e.metaKey||e.ctrlKey?window.open(n,`_blank`):L(n)}}}},[Z,U,L])),(0,T.useEffect)(()=>{if(U<0)return;let e=Ze.current[U];e&&document.activeElement!==e&&e.focus()},[U,Z.length]);let ot=(0,T.useCallback)((e,t)=>{t&&t.preventDefault(),L(h.testView(e.testId??e.path))},[L]);if(x)return(0,k.jsx)(le,{});if(e.length===0)return(0,k.jsx)(Te,{icon:ee,title:`No tests found`,description:`Create your first test file to get started`,actionLabel:`Create Test`,onAction:()=>L(h.testNew)});let $=K.length,st=H.pageIndex,ct=H.pageSize,lt=st*ct+1,ut=Math.min(lt+ct-1,$);return(0,k.jsx)(ae,{children:(0,k.jsxs)(`div`,{className:`space-y-4`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,k.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Tests`}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxs)(pe,{children:[(0,k.jsx)(oe,{asChild:!0,children:(0,k.jsx)(v,{variant:`ghost`,size:`icon-sm`,"aria-label":`Keyboard shortcuts`,children:(0,k.jsx)(l,{className:`h-4 w-4`})})}),(0,k.jsx)(ne,{side:`bottom`,className:`p-3`,children:(0,k.jsx)(c,{hints:[{key:`J / ↓`,label:`Next row`},{key:`K / ↑`,label:`Previous row`},{key:`Enter`,label:`Open test`},{key:`⌘+Enter`,label:`Open in new tab`}]})})]}),(0,k.jsxs)(v,{size:`sm`,onClick:()=>L(h.testNew),children:[(0,k.jsx)(u,{className:`size-4`}),`New Test`]})]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(te,{placeholder:`Search tests...`,value:it,onChange:e=>at(e.target.value),className:`max-w-[220px]`}),(0,k.jsxs)(o,{value:z||`all`,onValueChange:e=>{qe(e===`all`?``:e),W(-1)},children:[(0,k.jsx)(i,{className:`w-[150px]`,children:(0,k.jsx)(a,{placeholder:`All statuses`})}),(0,k.jsxs)(r,{children:[(0,k.jsx)(n,{value:`all`,children:`All statuses`}),(0,k.jsx)(n,{value:`passed`,children:`Passed`}),(0,k.jsx)(n,{value:`failed`,children:`Failed`}),(0,k.jsx)(n,{value:`running`,children:`Running`}),(0,k.jsx)(n,{value:`no-runs`,children:`No runs`})]})]}),(0,k.jsxs)(o,{value:B||`all`,onValueChange:e=>{Je(e===`all`?``:e),W(-1)},children:[(0,k.jsx)(i,{className:`w-[140px]`,children:(0,k.jsx)(a,{placeholder:`All platforms`})}),(0,k.jsxs)(r,{children:[(0,k.jsx)(n,{value:`all`,children:`All platforms`}),(0,k.jsx)(n,{value:`web`,children:`Web`}),(0,k.jsx)(n,{value:`android`,children:`Android`}),(0,k.jsx)(n,{value:`ios`,children:`iOS`})]})]}),(0,k.jsxs)(o,{value:V||`all`,onValueChange:e=>{Ye(e===`all`?``:e),W(-1)},children:[(0,k.jsx)(i,{className:`w-[180px]`,children:(0,k.jsx)(a,{placeholder:`All targets`})}),(0,k.jsxs)(r,{children:[(0,k.jsx)(n,{value:`all`,children:`All targets`}),Qe.map(e=>(0,k.jsx)(n,{value:e,children:e},e))]})]})]}),(0,k.jsxs)(m,{className:`rounded-md border`,children:[(0,k.jsxs)(we,{className:`min-w-full table-fixed`,children:[(0,k.jsx)(`colgroup`,{children:je.map(e=>{let t=ke(e);return(0,k.jsx)(`col`,{"data-column-id":e,style:t?{width:t}:void 0},e)})}),(0,k.jsx)(be,{children:X.getHeaderGroups().map(e=>(0,k.jsx)(w,{className:`hover:bg-transparent`,children:e.headers.map(e=>(0,k.jsx)(xe,{className:Ie(e.column.id),children:e.isPlaceholder?null:C(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,k.jsx)(Se,{children:Z.length?Z.map((e,t)=>{let n=t===U,r=q.isSelected(e.original.path);return(0,k.jsx)(w,{ref:e=>{Ze.current[t]=e},"data-runs-row-surface":e.id,tabIndex:n?0:-1,"aria-selected":n,className:Re({isActive:n,isBatchSelected:r}),onClick:()=>ot(e.original),onFocus:()=>W(t),onKeyDown:t=>{t.key===`Enter`&&ot(e.original,t)},children:e.getVisibleCells().map(e=>{let t=e.column.id===`select`;return(0,k.jsx)(Ce,{className:y(Le(e.column.id),t&&`relative z-10`),children:C(e.column.columnDef.cell,e.getContext())},e.id)})},e.id)}):(0,k.jsx)(w,{children:(0,k.jsx)(Ce,{colSpan:F.length+1,className:`h-24 text-center`,children:`No tests match the current search or filters.`})})})]}),(0,k.jsx)(p,{orientation:`horizontal`})]}),(0,k.jsxs)(`div`,{className:`flex items-center justify-between px-2`,children:[(0,k.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:$>0?`Showing ${lt}-${ut} of ${$}${it||z||B||V?` (${G.length} total)`:``}`:`No tests found`}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(v,{variant:`outline`,size:`sm`,onClick:()=>X.previousPage(),disabled:!X.getCanPreviousPage(),children:`Previous`}),(0,k.jsx)(v,{variant:`outline`,size:`sm`,onClick:()=>X.nextPage(),disabled:!X.getCanNextPage(),children:`Next`})]})]}),(0,k.jsx)(f,{selectedCount:q.selectedCount,summaryMeta:Q>0?`${Q} hidden by filters`:void 0,secondaryIcon:(0,k.jsx)(ie,{className:`size-4`}),secondaryAriaLabel:`Clear queue`,onDelete:rt,actionSlot:(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(De,{selectedCount:q.selectedCount,hiddenCount:Q,useCache:A,useMemory:I,browserStackAvailable:!Ve&&Be,open:Me,onOpenChange:O,onUseCacheChange:j,onUseMemoryChange:ze,onRunLocal:()=>tt(!0),onRunBrowserStack:()=>tt(!1),disabled:E}),(0,k.jsx)(v,{variant:`outline`,size:`sm`,onClick:nt,disabled:E,children:`Purge cache`})]}),onCancel:et,isRunning:E})]})})}export{I as default};
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{t}from"./arrow-up-down-DD6yziGv.js";import{i as n,n as r,o as i,s as a,t as o}from"./select-D5oFJNaq.js";import{n as s}from"./split-button-wGcE-JDx.js";import{n as c,r as l}from"./shortcut-hints-CtwepXR1.js";import{t as u}from"./plus-Qf7V331e.js";import{t as d}from"./use-page-title-B4YPyIzc.js";import{t as f}from"./batch-action-bar-D1IfTx55.js";import{n as p,t as m}from"./scroll-area-BmkJ1y7Q.js";import{$n as h,At as g,Gt as _,Hn as ee,Ht as te,Mt as ne,N as re,Nn as ie,Nt as ae,Pt as oe,Qn as se,St as ce,Ut as v,Wt as y,a as le,cr as ue,dt as de,gt as fe,jt as pe,nt as me,pr as b,sr as he,ur as x}from"./index-B4FdO6Vk.js";import{t as S}from"./badge-CC1v3nk4.js";import{a as ge,n as _e,o as ve,r as ye,t as C}from"./lib-B9z0w3j9.js";import{a as be,i as xe,n as Se,o as w,r as Ce,t as we}from"./table-QG2rKYu8.js";import{t as Te}from"./empty-state-BfgY0UGA.js";import{t as Ee}from"./use-keyboard-shortcuts-Bal_Cx9w.js";import{n as De,t as Oe}from"./use-selection-queue-O7K3NZNK.js";import{n as ke,r as Ae,t as je}from"./tests-suites-table-widths-D49Zcf1r.js";var T=e(b(),1),E=new Set([`asc`,`desc`]),D=50;function Me(e){if(!e)return 1;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>1?t:1}function O(e){let t=new URLSearchParams;return e.search&&t.set(`search`,e.search),e.status&&t.set(`status`,e.status),e.platform&&t.set(`platform`,e.platform),e.target&&t.set(`target`,e.target),e.sort&&(t.set(`sort`,e.sort),t.set(`order`,e.order)),e.page>1&&t.set(`page`,String(e.page)),t}function Ne(){let[e,t]=x(),n=e.get(`search`)??``,r=e.get(`status`)??``,i=e.get(`platform`)??``,a=e.get(`target`)??``,o=e.get(`sort`)??``,s=e.get(`order`)??`desc`,c=E.has(s)?s:`desc`,l=Me(e.get(`page`)),u=(0,T.useMemo)(()=>o?[{id:o,desc:c===`desc`}]:[],[o,c]),d=(0,T.useRef)(u);d.current=u;let f=(0,T.useMemo)(()=>({search:n,status:r,platform:i,target:a,sort:o,order:c,page:l}),[n,r,i,a,o,c,l]);(0,T.useEffect)(()=>{let n=O(f);e.toString()!==n.toString()&&t(n,{replace:!0})},[e,t,f]);let p=(0,T.useCallback)((e,n)=>{let r={...f,...e};n?.resetPage&&(r.page=1),t(O(r),{replace:!0})},[t,f]),m=(0,T.useCallback)(e=>{let t=typeof e==`function`?e(d.current):e;t.length>0?p({sort:t[0].id,order:t[0].desc?`desc`:`asc`}):p({sort:``,order:`desc`})},[p]),h=(0,T.useMemo)(()=>({pageIndex:l-1,pageSize:D}),[l]);return{search:n,status:r,platform:i,target:a,sort:o,order:c,page:l,sorting:u,pagination:h,onSortingChange:m,onPaginationChange:(0,T.useCallback)(e=>{p({page:(typeof e==`function`?e(h):e).pageIndex+1})},[h,p]),setSearch:(0,T.useCallback)(e=>p({search:e},{resetPage:!0}),[p]),setStatus:(0,T.useCallback)(e=>p({status:e},{resetPage:!0}),[p]),setPlatform:(0,T.useCallback)(e=>p({platform:e},{resetPage:!0}),[p]),setTarget:(0,T.useCallback)(e=>p({target:e},{resetPage:!0}),[p]),setPage:(0,T.useCallback)(e=>p({page:e}),[p])}}var k=se();function A({status:e}){switch(e){case`passed`:return(0,k.jsx)(S,{className:`bg-emerald-500/15 text-emerald-500 border-emerald-500/20`,children:`Passed`});case`failed`:return(0,k.jsx)(S,{variant:`destructive`,children:`Failed`});case`healed`:return(0,k.jsx)(S,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Healed`});case`flaky`:return(0,k.jsx)(S,{className:`bg-amber-500/15 text-amber-500 border-amber-500/20`,children:`Flaky`});case`running`:return(0,k.jsx)(S,{className:`bg-blue-500/15 text-blue-500 border-blue-500/20 animate-pulse`,children:`Running`});case`cancelled`:return(0,k.jsx)(S,{className:`bg-muted text-muted-foreground border-border`,children:`Cancelled`});default:return(0,k.jsx)(S,{variant:`outline`,children:e})}}var Pe=new Set([`passed`,`healed`]),Fe=new Set([`passed`,`healed`,`failed`,`flaky`,`cancelled`]);function j(e){return e?e===`ios`?`iOS`:e.charAt(0).toUpperCase()+e.slice(1):`—`}function M(e){return e.replace(/\\/g,`/`)}function N(e){let t=M(e).split(`/`).filter(Boolean);return t.length>1?t.slice(1).join(`/`):t[0]??e}function P(e){return e.createdAt||e.startedAt||e.endedAt||``}function Ie(e){return y(`h-10 bg-background text-[13px] font-medium text-foreground/90`,e===`select`?`px-2 text-center`:`px-3`,(e===`passRate`||e===`lastRun`)&&`text-right`)}function Le(e){return y(`py-2 align-top`,e===`select`&&`px-2`,e===`name`&&`max-w-0 px-3`,(e===`target`||e===`targetName`)&&`max-w-0 px-3`,e===`platform`&&`px-3`,e===`passRate`&&`px-3 text-right`,e===`lastRun`&&`max-w-0 px-3 text-right`)}function Re({isActive:e,isBatchSelected:t}){return y(`cursor-pointer outline-none hover:bg-muted/20 focus-visible:bg-primary/10 focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-primary/60`,t&&!e&&`bg-muted/20`,e&&`bg-primary/10 ring-1 ring-inset ring-primary/60`)}var F=[{accessorKey:`name`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Test Name`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>(0,k.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,k.jsx)(`span`,{className:`block whitespace-normal break-words text-sm font-medium leading-snug text-foreground`,children:e.getValue(`name`)}),(0,k.jsx)(`span`,{className:`block whitespace-normal break-all text-xs leading-snug text-muted-foreground`,children:N(e.original.path)})]}),filterFn:(e,t,n)=>{let r=e.getValue(`name`).toLowerCase(),i=e.original.path.toLowerCase(),a=n.toLowerCase();return r.includes(a)||i.includes(a)}},{accessorKey:`targetName`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Target`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>(0,k.jsx)(`span`,{className:`block whitespace-normal break-words text-sm leading-snug text-muted-foreground`,children:e.original.targetName??`No target`})},{accessorKey:`platform`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Platform`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>(0,k.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:j(e.getValue(`platform`))})},{accessorKey:`passRate`,header:({column:e})=>(0,k.jsxs)(v,{variant:`ghost`,className:`-ml-4`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Pass rate`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]}),cell:({row:e})=>e.original.passRate===null?(0,k.jsxs)(`div`,{className:`space-y-0.5 text-right`,children:[(0,k.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:`No runs`}),(0,k.jsx)(`div`,{className:`text-xs tabular-nums text-muted-foreground`,children:`0 completed`})]}):(0,k.jsxs)(`div`,{className:`space-y-0.5 text-right`,children:[(0,k.jsxs)(`div`,{className:`text-sm font-medium tabular-nums text-foreground`,children:[e.original.passRate,`%`]}),(0,k.jsxs)(`div`,{className:`text-xs tabular-nums text-muted-foreground`,children:[e.original.passCount,`/`,e.original.completedRunCount]})]})},{id:`lastRun`,accessorFn:e=>e.lastRun?.createdAt??e.lastRun?.startedAt??e.lastRun?.endedAt??``,header:({column:e})=>(0,k.jsx)(`div`,{className:`flex items-center justify-end`,children:(0,k.jsxs)(v,{variant:`ghost`,className:`h-auto justify-end px-0 text-[13px] font-medium text-foreground/90 hover:bg-transparent`,onClick:()=>e.toggleSorting(e.getIsSorted()===`asc`),children:[`Last run`,(0,k.jsx)(t,{className:`ml-2 h-4 w-4`})]})}),cell:({row:e})=>e.original.lastRun?(0,k.jsxs)(he,{to:h.runDetail(e.original.lastRun.id),className:`relative z-10 flex w-full flex-col items-end gap-1 rounded-sm text-right focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60`,onClick:e=>e.stopPropagation(),children:[(0,k.jsx)(A,{status:e.original.lastRun.status}),(0,k.jsx)(`span`,{className:`whitespace-normal break-words text-xs leading-snug text-muted-foreground`,children:_(P(e.original.lastRun))})]}):(0,k.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:`No runs`}),sortingFn:(e,t)=>{let n=P(e.original.lastRun??{createdAt:``,startedAt:null,endedAt:null}),r=P(t.original.lastRun??{createdAt:``,startedAt:null,endedAt:null});return n.localeCompare(r)}}];function I(){d(`Tests`);let[e,t]=(0,T.useState)([]),[_,se]=(0,T.useState)([]),[b,he]=(0,T.useState)([]),[x,S]=(0,T.useState)(!0),[E,D]=(0,T.useState)(!1),[Me,O]=(0,T.useState)(!1),[A,j]=(0,T.useState)(!0),[I,ze]=(0,T.useState)(!0),L=ue(),{hasFarm:Be,isLoading:Ve}=s();(0,T.useEffect)(()=>{let e=!1;return Promise.all([de(),me({limit:200})]).then(([n,r])=>{e||(t(n.files),he(n.targets??[]),se(r.runs))}).catch(()=>{e||g.error(`Failed to load test files`)}).finally(()=>{e||S(!1)}),()=>{e=!0}},[]);let{search:R,status:z,platform:B,target:V,page:He,sorting:Ue,pagination:H,onSortingChange:We,onPaginationChange:Ge,setSearch:Ke,setStatus:qe,setPlatform:Je,setTarget:Ye,setPage:Xe}=Ne(),[U,W]=(0,T.useState)(-1),Ze=(0,T.useRef)([]),G=(0,T.useMemo)(()=>{let t=new Map,n=new Map,r=(e,t,n)=>{if(!t)return;let r=e.get(t);r?r.push(n):e.set(t,[n])};for(let e of _){if(!e.filePath)continue;let i=M(e.filePath);r(t,i,e),r(n,N(i),e)}return e.map(e=>{let r=M(e.path),i=[...t.get(r)??n.get(N(r))??[]].sort((e,t)=>P(t).localeCompare(P(e))),a=i.filter(e=>Fe.has(e.status)),o=a.filter(e=>Pe.has(e.status)).length,s=a.length>0?Math.round(o/a.length*100):null,c=i[0]??null;return{path:e.path,name:e.name,testId:e.testId,targetName:e.targetName,platform:e.platform,lastRunStatus:c?.status??null,lastRun:c,passRate:s,passCount:o,completedRunCount:a.length}})},[e,_]),K=(0,T.useMemo)(()=>{let e=G;if(R){let t=R.toLowerCase();e=e.filter(e=>{let n=e.targetName?.toLowerCase()??``;return e.name.toLowerCase().includes(t)||e.path.toLowerCase().includes(t)||n.includes(t)})}return z&&(e=z===`no-runs`?e.filter(e=>!e.lastRunStatus):e.filter(e=>e.lastRunStatus===z)),B&&(e=e.filter(e=>e.platform===B)),V&&(e=e.filter(e=>e.targetName===V)),e},[G,R,z,B,V]),q=Oe({items:G,getId:e=>e.path,visibleIds:K.map(e=>e.path)}),Qe=(0,T.useMemo)(()=>Array.from(new Set([V,...b,...G.map(e=>e.targetName??``)].filter(e=>!!e))),[G,V,b]),$e={id:`select`,header:({table:e})=>(0,k.jsx)(`div`,{className:`flex items-center justify-center`,children:(0,k.jsx)(Ae,{checked:q.getVisibleSelectionState(e.getRowModel().rows.map(e=>e.original.path)),onCheckedChange:t=>q.setItemsSelected(e.getRowModel().rows.map(e=>e.original),t),ariaLabel:`Select all`})}),cell:({row:e})=>(0,k.jsx)(Ae,{checked:q.isSelected(e.original.path),onCheckedChange:t=>q.setItemSelected(e.original,t)}),enableSorting:!1,size:48},J=q.selectedIds,Y=q.selectedItems,et=(0,T.useCallback)(()=>{q.clearSelection(),O(!1),j(!0),ze(!0)},[q]),tt=(0,T.useCallback)(async e=>{if(J.length!==0){D(!0);try{let t=await Promise.allSettled(J.map(t=>ce({file:t,local:e,noCache:!A,noMemory:!I}))),n=t.filter(e=>e.status===`fulfilled`).length,r=t.length-n;r>0?g.error(`${n} runs queued, ${r} failed`):g.success(`${n} runs queued`),O(!1)}finally{D(!1)}}},[J,A,I]),nt=(0,T.useCallback)(async()=>{if(J.length!==0){D(!0);try{let e=await Promise.allSettled(J.map(e=>fe({file:e}))),t=e.filter(e=>e.status===`fulfilled`).length,n=e.filter(e=>e.status===`fulfilled`).reduce((e,t)=>e+t.value.purged,0),r=e.length-t;r>0?g.error(`Purged ${n} plans from ${t} tests, ${r} failed`):g.success(`Purged ${n} cached plan${n===1?``:`s`}`)}finally{D(!1)}}},[J]),rt=(0,T.useCallback)(async()=>{if(Y.length!==0){D(!0);try{let e=await Promise.allSettled(Y.map(e=>e.testId?re(e.testId):Promise.reject(Error(`Missing test id for ${e.path}`)))),n=Y.filter((t,n)=>e[n]?.status===`fulfilled`),r=new Set(n.map(e=>e.path)),i=e.length-n.length;n.length>0&&(q.setItemsSelected(n,!1),t(e=>e.filter(e=>!r.has(e.path))),O(!1)),i>0?g.error(`Deleted ${n.length} test${n.length===1?``:`s`}, ${i} failed`):g.success(`Deleted ${n.length} test${n.length===1?``:`s`}`)}finally{D(!1)}}},[Y,q]),X=_e({data:K,columns:[$e,...F],getCoreRowModel:ye(),getSortedRowModel:ve(),getPaginationRowModel:ge(),onSortingChange:We,onPaginationChange:Ge,getRowId:e=>e.path,state:{sorting:Ue,pagination:H}}),Z=X.getRowModel().rows,Q=q.hiddenCount,it=R;(0,T.useEffect)(()=>{if(x)return;let e=Math.max(1,Math.ceil(K.length/H.pageSize));He>e&&Xe(e)},[K.length,x,He,H.pageSize,Xe]);let at=(0,T.useCallback)(e=>{Ke(e),W(-1)},[Ke]);Ee((0,T.useMemo)(()=>{let e=()=>W(e=>Math.min(e+1,Z.length-1)),t=()=>W(e=>Math.max(e-1,0));return{j:e,arrowdown:e,k:t,arrowup:t,enter:e=>{if(U>=0&&Z[U]){let t=Z[U].original,n=h.testView(t.testId??t.path);e.metaKey||e.ctrlKey?window.open(n,`_blank`):L(n)}}}},[Z,U,L])),(0,T.useEffect)(()=>{if(U<0)return;let e=Ze.current[U];e&&document.activeElement!==e&&e.focus()},[U,Z.length]);let ot=(0,T.useCallback)((e,t)=>{t&&t.preventDefault(),L(h.testView(e.testId??e.path))},[L]);if(x)return(0,k.jsx)(le,{});if(e.length===0)return(0,k.jsx)(Te,{icon:ee,title:`No tests found`,description:`Create your first test file to get started`,actionLabel:`Create Test`,onAction:()=>L(h.testNew)});let $=K.length,st=H.pageIndex,ct=H.pageSize,lt=st*ct+1,ut=Math.min(lt+ct-1,$);return(0,k.jsx)(ae,{children:(0,k.jsxs)(`div`,{className:`space-y-4`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,k.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Tests`}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsxs)(pe,{children:[(0,k.jsx)(oe,{asChild:!0,children:(0,k.jsx)(v,{variant:`ghost`,size:`icon-sm`,"aria-label":`Keyboard shortcuts`,children:(0,k.jsx)(l,{className:`h-4 w-4`})})}),(0,k.jsx)(ne,{side:`bottom`,className:`p-3`,children:(0,k.jsx)(c,{hints:[{key:`J / ↓`,label:`Next row`},{key:`K / ↑`,label:`Previous row`},{key:`Enter`,label:`Open test`},{key:`⌘+Enter`,label:`Open in new tab`}]})})]}),(0,k.jsxs)(v,{size:`sm`,onClick:()=>L(h.testNew),children:[(0,k.jsx)(u,{className:`size-4`}),`New Test`]})]})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,k.jsx)(te,{placeholder:`Search tests...`,value:it,onChange:e=>at(e.target.value),className:`max-w-[220px]`}),(0,k.jsxs)(o,{value:z||`all`,onValueChange:e=>{qe(e===`all`?``:e),W(-1)},children:[(0,k.jsx)(i,{className:`w-[150px]`,children:(0,k.jsx)(a,{placeholder:`All statuses`})}),(0,k.jsxs)(r,{children:[(0,k.jsx)(n,{value:`all`,children:`All statuses`}),(0,k.jsx)(n,{value:`passed`,children:`Passed`}),(0,k.jsx)(n,{value:`failed`,children:`Failed`}),(0,k.jsx)(n,{value:`running`,children:`Running`}),(0,k.jsx)(n,{value:`no-runs`,children:`No runs`})]})]}),(0,k.jsxs)(o,{value:B||`all`,onValueChange:e=>{Je(e===`all`?``:e),W(-1)},children:[(0,k.jsx)(i,{className:`w-[140px]`,children:(0,k.jsx)(a,{placeholder:`All platforms`})}),(0,k.jsxs)(r,{children:[(0,k.jsx)(n,{value:`all`,children:`All platforms`}),(0,k.jsx)(n,{value:`web`,children:`Web`}),(0,k.jsx)(n,{value:`android`,children:`Android`}),(0,k.jsx)(n,{value:`ios`,children:`iOS`})]})]}),(0,k.jsxs)(o,{value:V||`all`,onValueChange:e=>{Ye(e===`all`?``:e),W(-1)},children:[(0,k.jsx)(i,{className:`w-[180px]`,children:(0,k.jsx)(a,{placeholder:`All targets`})}),(0,k.jsxs)(r,{children:[(0,k.jsx)(n,{value:`all`,children:`All targets`}),Qe.map(e=>(0,k.jsx)(n,{value:e,children:e},e))]})]})]}),(0,k.jsxs)(m,{className:`rounded-md border`,children:[(0,k.jsxs)(we,{className:`min-w-full table-fixed`,children:[(0,k.jsx)(`colgroup`,{children:je.map(e=>{let t=ke(e);return(0,k.jsx)(`col`,{"data-column-id":e,style:t?{width:t}:void 0},e)})}),(0,k.jsx)(be,{children:X.getHeaderGroups().map(e=>(0,k.jsx)(w,{className:`hover:bg-transparent`,children:e.headers.map(e=>(0,k.jsx)(xe,{className:Ie(e.column.id),children:e.isPlaceholder?null:C(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),(0,k.jsx)(Se,{children:Z.length?Z.map((e,t)=>{let n=t===U,r=q.isSelected(e.original.path);return(0,k.jsx)(w,{ref:e=>{Ze.current[t]=e},"data-runs-row-surface":e.id,tabIndex:n?0:-1,"aria-selected":n,className:Re({isActive:n,isBatchSelected:r}),onClick:()=>ot(e.original),onFocus:()=>W(t),onKeyDown:t=>{t.key===`Enter`&&ot(e.original,t)},children:e.getVisibleCells().map(e=>{let t=e.column.id===`select`;return(0,k.jsx)(Ce,{className:y(Le(e.column.id),t&&`relative z-10`),children:C(e.column.columnDef.cell,e.getContext())},e.id)})},e.id)}):(0,k.jsx)(w,{children:(0,k.jsx)(Ce,{colSpan:F.length+1,className:`h-24 text-center`,children:`No tests match the current search or filters.`})})})]}),(0,k.jsx)(p,{orientation:`horizontal`})]}),(0,k.jsxs)(`div`,{className:`flex items-center justify-between px-2`,children:[(0,k.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:$>0?`Showing ${lt}-${ut} of ${$}${it||z||B||V?` (${G.length} total)`:``}`:`No tests found`}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(v,{variant:`outline`,size:`sm`,onClick:()=>X.previousPage(),disabled:!X.getCanPreviousPage(),children:`Previous`}),(0,k.jsx)(v,{variant:`outline`,size:`sm`,onClick:()=>X.nextPage(),disabled:!X.getCanNextPage(),children:`Next`})]})]}),(0,k.jsx)(f,{selectedCount:q.selectedCount,summaryMeta:Q>0?`${Q} hidden by filters`:void 0,secondaryIcon:(0,k.jsx)(ie,{className:`size-4`}),secondaryAriaLabel:`Clear queue`,onDelete:rt,actionSlot:(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(De,{selectedCount:q.selectedCount,hiddenCount:Q,useCache:A,useMemory:I,browserStackAvailable:!Ve&&Be,open:Me,onOpenChange:O,onUseCacheChange:j,onUseMemoryChange:ze,onRunLocal:()=>tt(!0),onRunBrowserStack:()=>tt(!1),disabled:E}),(0,k.jsx)(v,{variant:`outline`,size:`sm`,onClick:nt,disabled:E,children:`Purge cache`})]}),onCancel:et,isRunning:E})]})})}export{I as default};
@@ -1 +1 @@
1
- import{n as e}from"./batch-action-bar-uEhHVDds.js";import{Qn as t}from"./index-Bvtm2F6f.js";var n=t();function r({checked:t,onCheckedChange:r,ariaLabel:i}){function a(e){e.stopPropagation(),!(e.target instanceof Element&&e.target.closest(`[data-slot="checkbox"]`))&&r(t!==!0)}function o(e){e.stopPropagation()}return(0,n.jsx)(`div`,{"data-selection-checkbox-hit-area":!0,className:`relative z-10 flex min-h-8 min-w-8 items-center justify-center -my-1 -mx-2 px-2 py-1`,onPointerDown:e=>e.stopPropagation(),onFocus:o,onClick:a,children:(0,n.jsx)(e,{checked:t,onCheckedChange:e=>r(e===!0),onClick:e=>e.stopPropagation(),"aria-label":i??`Select row`})})}var i=[`select`,`name`,`target`,`platform`,`passRate`,`lastRun`],a={select:`2.75rem`,target:`10rem`,platform:`6.25rem`,passRate:`7.25rem`,lastRun:`9rem`};function o(e){return a[e]}export{o as n,r,i as t};
1
+ import{n as e}from"./batch-action-bar-D1IfTx55.js";import{Qn as t}from"./index-B4FdO6Vk.js";var n=t();function r({checked:t,onCheckedChange:r,ariaLabel:i}){function a(e){e.stopPropagation(),!(e.target instanceof Element&&e.target.closest(`[data-slot="checkbox"]`))&&r(t!==!0)}function o(e){e.stopPropagation()}return(0,n.jsx)(`div`,{"data-selection-checkbox-hit-area":!0,className:`relative z-10 flex min-h-8 min-w-8 items-center justify-center -my-1 -mx-2 px-2 py-1`,onPointerDown:e=>e.stopPropagation(),onFocus:o,onClick:a,children:(0,n.jsx)(e,{checked:t,onCheckedChange:e=>r(e===!0),onClick:e=>e.stopPropagation(),"aria-label":i??`Select row`})})}var i=[`select`,`name`,`target`,`platform`,`passRate`,`lastRun`],a={select:`2.75rem`,target:`10rem`,platform:`6.25rem`,passRate:`7.25rem`,lastRun:`9rem`};function o(e){return a[e]}export{o as n,r,i as t};
@@ -1 +1 @@
1
- import"./chunk-CilyBKbf.js";import{Jn as e,Qn as t,Wt as n,pr as r}from"./index-Bvtm2F6f.js";var i=e(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]);r();var a=t();function o({className:e,...t}){return(0,a.jsx)(`textarea`,{"data-slot":`textarea`,className:n(`flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40`,e),...t})}export{i as n,o as t};
1
+ import"./chunk-CilyBKbf.js";import{Jn as e,Qn as t,Wt as n,pr as r}from"./index-B4FdO6Vk.js";var i=e(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]);r();var a=t();function o({className:e,...t}){return(0,a.jsx)(`textarea`,{"data-slot":`textarea`,className:n(`flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40`,e),...t})}export{i as n,o as t};
@@ -1 +1 @@
1
- import{Jn as e}from"./index-Bvtm2F6f.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
1
+ import{Jn as e}from"./index-B4FdO6Vk.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
@@ -1,4 +1,4 @@
1
- import{a as e,c as t,i as n,o as r,s as i,u as a}from"./editor.api2-DEGvZ9jW.js";import{t as o}from"./workers-BbHjH3Kx.js";import{n as s}from"./monaco.contribution-LYJB_lCm.js";var c=class{constructor(e,t){this._modeId=e,this._defaults=t,this._worker=null,this._client=null,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker()),this._updateExtraLibsToken=0,this._extraLibsChangeListener=this._defaults.onDidExtraLibsChange(()=>this._updateExtraLibs())}dispose(){this._configChangeListener.dispose(),this._extraLibsChangeListener.dispose(),this._stopWorker()}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}async _updateExtraLibs(){if(!this._worker)return;let e=++this._updateExtraLibsToken,t=await this._worker.getProxy();this._updateExtraLibsToken===e&&t.updateExtraLibs(this._defaults.getExtraLibs())}_getClient(){return this._client||=(async()=>(this._worker=o({moduleId:`vs/language/typescript/tsWorker`,createWorker:()=>new Worker(new URL(`/assets/ts.worker-METxwbDZ.js`,``+import.meta.url),{type:`module`}),label:this._modeId,keepIdleModels:!0,createData:{compilerOptions:this._defaults.getCompilerOptions(),extraLibs:this._defaults.getExtraLibs(),customWorkerPath:this._defaults.workerOptions.customWorkerPath,inlayHintsOptions:this._defaults.inlayHintsOptions}}),this._defaults.getEagerModelSync()?await this._worker.withSyncedResources(t.getModels().filter(e=>e.getLanguageId()===this._modeId).map(e=>e.uri)):await this._worker.getProxy()))(),this._client}async getLanguageServiceWorker(...e){let t=await this._getClient();return this._worker&&await this._worker.withSyncedResources(e),t}},l={};l[`lib.d.ts`]=!0,l[`lib.decorators.d.ts`]=!0,l[`lib.decorators.legacy.d.ts`]=!0,l[`lib.dom.asynciterable.d.ts`]=!0,l[`lib.dom.d.ts`]=!0,l[`lib.dom.iterable.d.ts`]=!0,l[`lib.es2015.collection.d.ts`]=!0,l[`lib.es2015.core.d.ts`]=!0,l[`lib.es2015.d.ts`]=!0,l[`lib.es2015.generator.d.ts`]=!0,l[`lib.es2015.iterable.d.ts`]=!0,l[`lib.es2015.promise.d.ts`]=!0,l[`lib.es2015.proxy.d.ts`]=!0,l[`lib.es2015.reflect.d.ts`]=!0,l[`lib.es2015.symbol.d.ts`]=!0,l[`lib.es2015.symbol.wellknown.d.ts`]=!0,l[`lib.es2016.array.include.d.ts`]=!0,l[`lib.es2016.d.ts`]=!0,l[`lib.es2016.full.d.ts`]=!0,l[`lib.es2016.intl.d.ts`]=!0,l[`lib.es2017.arraybuffer.d.ts`]=!0,l[`lib.es2017.d.ts`]=!0,l[`lib.es2017.date.d.ts`]=!0,l[`lib.es2017.full.d.ts`]=!0,l[`lib.es2017.intl.d.ts`]=!0,l[`lib.es2017.object.d.ts`]=!0,l[`lib.es2017.sharedmemory.d.ts`]=!0,l[`lib.es2017.string.d.ts`]=!0,l[`lib.es2017.typedarrays.d.ts`]=!0,l[`lib.es2018.asyncgenerator.d.ts`]=!0,l[`lib.es2018.asynciterable.d.ts`]=!0,l[`lib.es2018.d.ts`]=!0,l[`lib.es2018.full.d.ts`]=!0,l[`lib.es2018.intl.d.ts`]=!0,l[`lib.es2018.promise.d.ts`]=!0,l[`lib.es2018.regexp.d.ts`]=!0,l[`lib.es2019.array.d.ts`]=!0,l[`lib.es2019.d.ts`]=!0,l[`lib.es2019.full.d.ts`]=!0,l[`lib.es2019.intl.d.ts`]=!0,l[`lib.es2019.object.d.ts`]=!0,l[`lib.es2019.string.d.ts`]=!0,l[`lib.es2019.symbol.d.ts`]=!0,l[`lib.es2020.bigint.d.ts`]=!0,l[`lib.es2020.d.ts`]=!0,l[`lib.es2020.date.d.ts`]=!0,l[`lib.es2020.full.d.ts`]=!0,l[`lib.es2020.intl.d.ts`]=!0,l[`lib.es2020.number.d.ts`]=!0,l[`lib.es2020.promise.d.ts`]=!0,l[`lib.es2020.sharedmemory.d.ts`]=!0,l[`lib.es2020.string.d.ts`]=!0,l[`lib.es2020.symbol.wellknown.d.ts`]=!0,l[`lib.es2021.d.ts`]=!0,l[`lib.es2021.full.d.ts`]=!0,l[`lib.es2021.intl.d.ts`]=!0,l[`lib.es2021.promise.d.ts`]=!0,l[`lib.es2021.string.d.ts`]=!0,l[`lib.es2021.weakref.d.ts`]=!0,l[`lib.es2022.array.d.ts`]=!0,l[`lib.es2022.d.ts`]=!0,l[`lib.es2022.error.d.ts`]=!0,l[`lib.es2022.full.d.ts`]=!0,l[`lib.es2022.intl.d.ts`]=!0,l[`lib.es2022.object.d.ts`]=!0,l[`lib.es2022.regexp.d.ts`]=!0,l[`lib.es2022.string.d.ts`]=!0,l[`lib.es2023.array.d.ts`]=!0,l[`lib.es2023.collection.d.ts`]=!0,l[`lib.es2023.d.ts`]=!0,l[`lib.es2023.full.d.ts`]=!0,l[`lib.es2023.intl.d.ts`]=!0,l[`lib.es2024.arraybuffer.d.ts`]=!0,l[`lib.es2024.collection.d.ts`]=!0,l[`lib.es2024.d.ts`]=!0,l[`lib.es2024.full.d.ts`]=!0,l[`lib.es2024.object.d.ts`]=!0,l[`lib.es2024.promise.d.ts`]=!0,l[`lib.es2024.regexp.d.ts`]=!0,l[`lib.es2024.sharedmemory.d.ts`]=!0,l[`lib.es2024.string.d.ts`]=!0,l[`lib.es5.d.ts`]=!0,l[`lib.es6.d.ts`]=!0,l[`lib.esnext.array.d.ts`]=!0,l[`lib.esnext.collection.d.ts`]=!0,l[`lib.esnext.d.ts`]=!0,l[`lib.esnext.decorators.d.ts`]=!0,l[`lib.esnext.disposable.d.ts`]=!0,l[`lib.esnext.error.d.ts`]=!0,l[`lib.esnext.float16.d.ts`]=!0,l[`lib.esnext.full.d.ts`]=!0,l[`lib.esnext.intl.d.ts`]=!0,l[`lib.esnext.iterator.d.ts`]=!0,l[`lib.esnext.promise.d.ts`]=!0,l[`lib.esnext.sharedmemory.d.ts`]=!0,l[`lib.scripthost.d.ts`]=!0,l[`lib.webworker.asynciterable.d.ts`]=!0,l[`lib.webworker.d.ts`]=!0,l[`lib.webworker.importscripts.d.ts`]=!0,l[`lib.webworker.iterable.d.ts`]=!0;function u(e,t,n=0){if(typeof e==`string`)return e;if(e===void 0)return``;let r=``;if(n){r+=t;for(let e=0;e<n;e++)r+=` `}if(r+=e.messageText,n++,e.next)for(let i of e.next)r+=u(i,t,n);return r}function d(e){return e?e.map(e=>e.text).join(``):``}var f=class{constructor(e){this._worker=e}_textSpanToRange(e,t){let n=e.getPositionAt(t.start),r=e.getPositionAt(t.start+t.length),{lineNumber:i,column:a}=n,{lineNumber:o,column:s}=r;return{startLineNumber:i,startColumn:a,endLineNumber:o,endColumn:s}}},p=class{constructor(e){this._worker=e,this._libFiles={},this._hasFetchedLibFiles=!1,this._fetchLibFilesPromise=null}isLibFile(e){return e&&e.path.indexOf(`/lib.`)===0?!!l[e.path.slice(1)]:!1}getOrCreateModel(e){let n=i.parse(e),r=t.getModel(n);if(r)return r;if(this.isLibFile(n)&&this._hasFetchedLibFiles)return t.createModel(this._libFiles[n.path.slice(1)],`typescript`,n);let a=s.getExtraLibs()[e];return a?t.createModel(a.content,`typescript`,n):null}_containsLibFile(e){for(let t of e)if(this.isLibFile(t))return!0;return!1}async fetchLibFilesIfNecessary(e){this._containsLibFile(e)&&await this._fetchLibFiles()}_fetchLibFiles(){return this._fetchLibFilesPromise||=this._worker().then(e=>e.getLibFiles()).then(e=>{this._hasFetchedLibFiles=!0,this._libFiles=e}),this._fetchLibFilesPromise}},m=class extends f{constructor(e,n,r,i){super(i),this._libFiles=e,this._defaults=n,this._selector=r,this._disposables=[],this._listener=Object.create(null);let a=e=>{if(e.getLanguageId()!==r)return;let n=()=>{let{onlyVisible:t}=this._defaults.getDiagnosticsOptions();t?e.isAttachedToEditor()&&this._doValidate(e):this._doValidate(e)},i,a=e.onDidChangeContent(()=>{clearTimeout(i),i=window.setTimeout(n,500)}),o=e.onDidChangeAttached(()=>{let{onlyVisible:r}=this._defaults.getDiagnosticsOptions();r&&(e.isAttachedToEditor()?n():t.setModelMarkers(e,this._selector,[]))});this._listener[e.uri.toString()]={dispose(){a.dispose(),o.dispose(),clearTimeout(i)}},n()},o=e=>{t.setModelMarkers(e,this._selector,[]);let n=e.uri.toString();this._listener[n]&&(this._listener[n].dispose(),delete this._listener[n])};this._disposables.push(t.onDidCreateModel(e=>a(e))),this._disposables.push(t.onWillDisposeModel(o)),this._disposables.push(t.onDidChangeModelLanguage(e=>{o(e.model),a(e.model)})),this._disposables.push({dispose(){for(let e of t.getModels())o(e)}});let s=()=>{for(let e of t.getModels())o(e),a(e)};this._disposables.push(this._defaults.onDidChange(s)),this._disposables.push(this._defaults.onDidExtraLibsChange(s)),t.getModels().forEach(e=>a(e))}dispose(){this._disposables.forEach(e=>e&&e.dispose()),this._disposables=[]}async _doValidate(e){let n=await this._worker(e.uri);if(e.isDisposed())return;let r=[],{noSyntaxValidation:a,noSemanticValidation:o,noSuggestionDiagnostics:s}=this._defaults.getDiagnosticsOptions();a||r.push(n.getSyntacticDiagnostics(e.uri.toString())),o||r.push(n.getSemanticDiagnostics(e.uri.toString())),s||r.push(n.getSuggestionDiagnostics(e.uri.toString()));let c=await Promise.all(r);if(!c||e.isDisposed())return;let l=c.reduce((e,t)=>t.concat(e),[]).filter(e=>(this._defaults.getDiagnosticsOptions().diagnosticCodesToIgnore||[]).indexOf(e.code)===-1),u=l.map(e=>e.relatedInformation||[]).reduce((e,t)=>t.concat(e),[]).map(e=>e.file?i.parse(e.file.fileName):null);await this._libFiles.fetchLibFilesIfNecessary(u),!e.isDisposed()&&t.setModelMarkers(e,this._selector,l.map(t=>this._convertDiagnostics(e,t)))}_convertDiagnostics(t,n){let r=n.start||0,i=n.length||1,{lineNumber:a,column:o}=t.getPositionAt(r),{lineNumber:s,column:c}=t.getPositionAt(r+i),l=[];return n.reportsUnnecessary&&l.push(e.Unnecessary),n.reportsDeprecated&&l.push(e.Deprecated),{severity:this._tsDiagnosticCategoryToMarkerSeverity(n.category),startLineNumber:a,startColumn:o,endLineNumber:s,endColumn:c,message:u(n.messageText,`
1
+ import{a as e,c as t,i as n,o as r,s as i,u as a}from"./editor.api2-DEGvZ9jW.js";import{t as o}from"./workers-BbHjH3Kx.js";import{n as s}from"./monaco.contribution-CEeipeu9.js";var c=class{constructor(e,t){this._modeId=e,this._defaults=t,this._worker=null,this._client=null,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker()),this._updateExtraLibsToken=0,this._extraLibsChangeListener=this._defaults.onDidExtraLibsChange(()=>this._updateExtraLibs())}dispose(){this._configChangeListener.dispose(),this._extraLibsChangeListener.dispose(),this._stopWorker()}_stopWorker(){this._worker&&=(this._worker.dispose(),null),this._client=null}async _updateExtraLibs(){if(!this._worker)return;let e=++this._updateExtraLibsToken,t=await this._worker.getProxy();this._updateExtraLibsToken===e&&t.updateExtraLibs(this._defaults.getExtraLibs())}_getClient(){return this._client||=(async()=>(this._worker=o({moduleId:`vs/language/typescript/tsWorker`,createWorker:()=>new Worker(new URL(`/assets/ts.worker-METxwbDZ.js`,``+import.meta.url),{type:`module`}),label:this._modeId,keepIdleModels:!0,createData:{compilerOptions:this._defaults.getCompilerOptions(),extraLibs:this._defaults.getExtraLibs(),customWorkerPath:this._defaults.workerOptions.customWorkerPath,inlayHintsOptions:this._defaults.inlayHintsOptions}}),this._defaults.getEagerModelSync()?await this._worker.withSyncedResources(t.getModels().filter(e=>e.getLanguageId()===this._modeId).map(e=>e.uri)):await this._worker.getProxy()))(),this._client}async getLanguageServiceWorker(...e){let t=await this._getClient();return this._worker&&await this._worker.withSyncedResources(e),t}},l={};l[`lib.d.ts`]=!0,l[`lib.decorators.d.ts`]=!0,l[`lib.decorators.legacy.d.ts`]=!0,l[`lib.dom.asynciterable.d.ts`]=!0,l[`lib.dom.d.ts`]=!0,l[`lib.dom.iterable.d.ts`]=!0,l[`lib.es2015.collection.d.ts`]=!0,l[`lib.es2015.core.d.ts`]=!0,l[`lib.es2015.d.ts`]=!0,l[`lib.es2015.generator.d.ts`]=!0,l[`lib.es2015.iterable.d.ts`]=!0,l[`lib.es2015.promise.d.ts`]=!0,l[`lib.es2015.proxy.d.ts`]=!0,l[`lib.es2015.reflect.d.ts`]=!0,l[`lib.es2015.symbol.d.ts`]=!0,l[`lib.es2015.symbol.wellknown.d.ts`]=!0,l[`lib.es2016.array.include.d.ts`]=!0,l[`lib.es2016.d.ts`]=!0,l[`lib.es2016.full.d.ts`]=!0,l[`lib.es2016.intl.d.ts`]=!0,l[`lib.es2017.arraybuffer.d.ts`]=!0,l[`lib.es2017.d.ts`]=!0,l[`lib.es2017.date.d.ts`]=!0,l[`lib.es2017.full.d.ts`]=!0,l[`lib.es2017.intl.d.ts`]=!0,l[`lib.es2017.object.d.ts`]=!0,l[`lib.es2017.sharedmemory.d.ts`]=!0,l[`lib.es2017.string.d.ts`]=!0,l[`lib.es2017.typedarrays.d.ts`]=!0,l[`lib.es2018.asyncgenerator.d.ts`]=!0,l[`lib.es2018.asynciterable.d.ts`]=!0,l[`lib.es2018.d.ts`]=!0,l[`lib.es2018.full.d.ts`]=!0,l[`lib.es2018.intl.d.ts`]=!0,l[`lib.es2018.promise.d.ts`]=!0,l[`lib.es2018.regexp.d.ts`]=!0,l[`lib.es2019.array.d.ts`]=!0,l[`lib.es2019.d.ts`]=!0,l[`lib.es2019.full.d.ts`]=!0,l[`lib.es2019.intl.d.ts`]=!0,l[`lib.es2019.object.d.ts`]=!0,l[`lib.es2019.string.d.ts`]=!0,l[`lib.es2019.symbol.d.ts`]=!0,l[`lib.es2020.bigint.d.ts`]=!0,l[`lib.es2020.d.ts`]=!0,l[`lib.es2020.date.d.ts`]=!0,l[`lib.es2020.full.d.ts`]=!0,l[`lib.es2020.intl.d.ts`]=!0,l[`lib.es2020.number.d.ts`]=!0,l[`lib.es2020.promise.d.ts`]=!0,l[`lib.es2020.sharedmemory.d.ts`]=!0,l[`lib.es2020.string.d.ts`]=!0,l[`lib.es2020.symbol.wellknown.d.ts`]=!0,l[`lib.es2021.d.ts`]=!0,l[`lib.es2021.full.d.ts`]=!0,l[`lib.es2021.intl.d.ts`]=!0,l[`lib.es2021.promise.d.ts`]=!0,l[`lib.es2021.string.d.ts`]=!0,l[`lib.es2021.weakref.d.ts`]=!0,l[`lib.es2022.array.d.ts`]=!0,l[`lib.es2022.d.ts`]=!0,l[`lib.es2022.error.d.ts`]=!0,l[`lib.es2022.full.d.ts`]=!0,l[`lib.es2022.intl.d.ts`]=!0,l[`lib.es2022.object.d.ts`]=!0,l[`lib.es2022.regexp.d.ts`]=!0,l[`lib.es2022.string.d.ts`]=!0,l[`lib.es2023.array.d.ts`]=!0,l[`lib.es2023.collection.d.ts`]=!0,l[`lib.es2023.d.ts`]=!0,l[`lib.es2023.full.d.ts`]=!0,l[`lib.es2023.intl.d.ts`]=!0,l[`lib.es2024.arraybuffer.d.ts`]=!0,l[`lib.es2024.collection.d.ts`]=!0,l[`lib.es2024.d.ts`]=!0,l[`lib.es2024.full.d.ts`]=!0,l[`lib.es2024.object.d.ts`]=!0,l[`lib.es2024.promise.d.ts`]=!0,l[`lib.es2024.regexp.d.ts`]=!0,l[`lib.es2024.sharedmemory.d.ts`]=!0,l[`lib.es2024.string.d.ts`]=!0,l[`lib.es5.d.ts`]=!0,l[`lib.es6.d.ts`]=!0,l[`lib.esnext.array.d.ts`]=!0,l[`lib.esnext.collection.d.ts`]=!0,l[`lib.esnext.d.ts`]=!0,l[`lib.esnext.decorators.d.ts`]=!0,l[`lib.esnext.disposable.d.ts`]=!0,l[`lib.esnext.error.d.ts`]=!0,l[`lib.esnext.float16.d.ts`]=!0,l[`lib.esnext.full.d.ts`]=!0,l[`lib.esnext.intl.d.ts`]=!0,l[`lib.esnext.iterator.d.ts`]=!0,l[`lib.esnext.promise.d.ts`]=!0,l[`lib.esnext.sharedmemory.d.ts`]=!0,l[`lib.scripthost.d.ts`]=!0,l[`lib.webworker.asynciterable.d.ts`]=!0,l[`lib.webworker.d.ts`]=!0,l[`lib.webworker.importscripts.d.ts`]=!0,l[`lib.webworker.iterable.d.ts`]=!0;function u(e,t,n=0){if(typeof e==`string`)return e;if(e===void 0)return``;let r=``;if(n){r+=t;for(let e=0;e<n;e++)r+=` `}if(r+=e.messageText,n++,e.next)for(let i of e.next)r+=u(i,t,n);return r}function d(e){return e?e.map(e=>e.text).join(``):``}var f=class{constructor(e){this._worker=e}_textSpanToRange(e,t){let n=e.getPositionAt(t.start),r=e.getPositionAt(t.start+t.length),{lineNumber:i,column:a}=n,{lineNumber:o,column:s}=r;return{startLineNumber:i,startColumn:a,endLineNumber:o,endColumn:s}}},p=class{constructor(e){this._worker=e,this._libFiles={},this._hasFetchedLibFiles=!1,this._fetchLibFilesPromise=null}isLibFile(e){return e&&e.path.indexOf(`/lib.`)===0?!!l[e.path.slice(1)]:!1}getOrCreateModel(e){let n=i.parse(e),r=t.getModel(n);if(r)return r;if(this.isLibFile(n)&&this._hasFetchedLibFiles)return t.createModel(this._libFiles[n.path.slice(1)],`typescript`,n);let a=s.getExtraLibs()[e];return a?t.createModel(a.content,`typescript`,n):null}_containsLibFile(e){for(let t of e)if(this.isLibFile(t))return!0;return!1}async fetchLibFilesIfNecessary(e){this._containsLibFile(e)&&await this._fetchLibFiles()}_fetchLibFiles(){return this._fetchLibFilesPromise||=this._worker().then(e=>e.getLibFiles()).then(e=>{this._hasFetchedLibFiles=!0,this._libFiles=e}),this._fetchLibFilesPromise}},m=class extends f{constructor(e,n,r,i){super(i),this._libFiles=e,this._defaults=n,this._selector=r,this._disposables=[],this._listener=Object.create(null);let a=e=>{if(e.getLanguageId()!==r)return;let n=()=>{let{onlyVisible:t}=this._defaults.getDiagnosticsOptions();t?e.isAttachedToEditor()&&this._doValidate(e):this._doValidate(e)},i,a=e.onDidChangeContent(()=>{clearTimeout(i),i=window.setTimeout(n,500)}),o=e.onDidChangeAttached(()=>{let{onlyVisible:r}=this._defaults.getDiagnosticsOptions();r&&(e.isAttachedToEditor()?n():t.setModelMarkers(e,this._selector,[]))});this._listener[e.uri.toString()]={dispose(){a.dispose(),o.dispose(),clearTimeout(i)}},n()},o=e=>{t.setModelMarkers(e,this._selector,[]);let n=e.uri.toString();this._listener[n]&&(this._listener[n].dispose(),delete this._listener[n])};this._disposables.push(t.onDidCreateModel(e=>a(e))),this._disposables.push(t.onWillDisposeModel(o)),this._disposables.push(t.onDidChangeModelLanguage(e=>{o(e.model),a(e.model)})),this._disposables.push({dispose(){for(let e of t.getModels())o(e)}});let s=()=>{for(let e of t.getModels())o(e),a(e)};this._disposables.push(this._defaults.onDidChange(s)),this._disposables.push(this._defaults.onDidExtraLibsChange(s)),t.getModels().forEach(e=>a(e))}dispose(){this._disposables.forEach(e=>e&&e.dispose()),this._disposables=[]}async _doValidate(e){let n=await this._worker(e.uri);if(e.isDisposed())return;let r=[],{noSyntaxValidation:a,noSemanticValidation:o,noSuggestionDiagnostics:s}=this._defaults.getDiagnosticsOptions();a||r.push(n.getSyntacticDiagnostics(e.uri.toString())),o||r.push(n.getSemanticDiagnostics(e.uri.toString())),s||r.push(n.getSuggestionDiagnostics(e.uri.toString()));let c=await Promise.all(r);if(!c||e.isDisposed())return;let l=c.reduce((e,t)=>t.concat(e),[]).filter(e=>(this._defaults.getDiagnosticsOptions().diagnosticCodesToIgnore||[]).indexOf(e.code)===-1),u=l.map(e=>e.relatedInformation||[]).reduce((e,t)=>t.concat(e),[]).map(e=>e.file?i.parse(e.file.fileName):null);await this._libFiles.fetchLibFilesIfNecessary(u),!e.isDisposed()&&t.setModelMarkers(e,this._selector,l.map(t=>this._convertDiagnostics(e,t)))}_convertDiagnostics(t,n){let r=n.start||0,i=n.length||1,{lineNumber:a,column:o}=t.getPositionAt(r),{lineNumber:s,column:c}=t.getPositionAt(r+i),l=[];return n.reportsUnnecessary&&l.push(e.Unnecessary),n.reportsDeprecated&&l.push(e.Deprecated),{severity:this._tsDiagnosticCategoryToMarkerSeverity(n.category),startLineNumber:a,startColumn:o,endLineNumber:s,endColumn:c,message:u(n.messageText,`
2
2
  `),code:n.code.toString(),tags:l,relatedInformation:this._convertRelatedInformation(t,n.relatedInformation)}}_convertRelatedInformation(e,t){if(!t)return[];let n=[];return t.forEach(t=>{let r=e;if(t.file&&(r=this._libFiles.getOrCreateModel(t.file.fileName)),!r)return;let i=t.start||0,a=t.length||1,{lineNumber:o,column:s}=r.getPositionAt(i),{lineNumber:c,column:l}=r.getPositionAt(i+a);n.push({resource:r.uri,startLineNumber:o,startColumn:s,endLineNumber:c,endColumn:l,message:u(t.messageText,`
3
3
  `)})}),n}_tsDiagnosticCategoryToMarkerSeverity(e){switch(e){case 1:return n.Error;case 3:return n.Info;case 0:return n.Warning;case 2:return n.Hint}return n.Info}},h=class e extends f{get triggerCharacters(){return[`.`]}async provideCompletionItems(t,n,i,o){let s=t.getWordUntilPosition(n),c=new r(n.lineNumber,s.startColumn,n.lineNumber,s.endColumn),l=t.uri,u=t.getOffsetAt(n),d=await this._worker(l);if(t.isDisposed())return;let f=await d.getCompletionsAtPosition(l.toString(),u);if(!(!f||t.isDisposed()))return{suggestions:f.entries.map(i=>{let o=c;if(i.replacementSpan){let e=t.getPositionAt(i.replacementSpan.start),n=t.getPositionAt(i.replacementSpan.start+i.replacementSpan.length);o=new r(e.lineNumber,e.column,n.lineNumber,n.column)}let s=[];return i.kindModifiers!==void 0&&i.kindModifiers.indexOf(`deprecated`)!==-1&&s.push(a.CompletionItemTag.Deprecated),{uri:l,position:n,offset:u,range:o,label:i.name,insertText:i.name,sortText:i.sortText,kind:e.convertKind(i.kind),tags:s}})}}async resolveCompletionItem(t,n){let r=t,i=r.uri,a=r.position,o=r.offset,s=await(await this._worker(i)).getCompletionEntryDetails(i.toString(),o,r.label);return s?{uri:i,position:a,label:s.name,kind:e.convertKind(s.kind),detail:d(s.displayParts),documentation:{value:e.createDocumentationString(s)}}:r}static convertKind(e){switch(e){case C.primitiveType:case C.keyword:return a.CompletionItemKind.Keyword;case C.variable:case C.localVariable:return a.CompletionItemKind.Variable;case C.memberVariable:case C.memberGetAccessor:case C.memberSetAccessor:return a.CompletionItemKind.Field;case C.function:case C.memberFunction:case C.constructSignature:case C.callSignature:case C.indexSignature:return a.CompletionItemKind.Function;case C.enum:return a.CompletionItemKind.Enum;case C.module:return a.CompletionItemKind.Module;case C.class:return a.CompletionItemKind.Class;case C.interface:return a.CompletionItemKind.Interface;case C.warning:return a.CompletionItemKind.File}return a.CompletionItemKind.Property}static createDocumentationString(e){let t=d(e.documentation);if(e.tags)for(let n of e.tags)t+=`
4
4
 
@@ -1 +1 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{n as t,r as n}from"./monaco-editor-DNT0Mzki.js";import{n as r,r as i,t as a}from"./shortcut-hints-Bs5o743i.js";import{t as o}from"./pencil-DdRoBrsh.js";import{t as s}from"./plus-pXO98OAE.js";import{t as c}from"./trash-2-7P1Dp87k.js";import{n as l,r as u,t as d}from"./popover-DGZi688D.js";import{t as f}from"./scroll-area-CnATfQoe.js";import{i as p,n as m,r as h,t as g}from"./tabs-DrB_Acb3.js";import{Fn as _,Ht as v,Mt as y,Pt as b,Qn as x,S,Ut as C,Wn as w,Wt as T,_ as E,_t as D,f as O,g as k,h as A,jt as j,m as M,mt as N,p as P,pr as F,qt as I,sr as L}from"./index-Bvtm2F6f.js";import{t as R}from"./badge-DrW2vGVJ.js";import{r as z}from"./hook-runtime-JF-0oZpz.js";import{n as B,r as V,t as H}from"./resizable-BGEcNRZO.js";var U=x();function W({label:e,value:t,mono:n=!1}){return(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:e}),(0,U.jsx)(`div`,{className:n?`font-mono text-xs text-foreground break-all`:`text-sm text-foreground`,children:t})]})}function G({open:e,onOpenChange:t,hook:n,isDeleting:r,deleteError:i,blockedReferences:a,onDelete:o,onForceDelete:s}){let l=z(n.runtime),u=a.length>0;return(0,U.jsx)(O,{open:e,onOpenChange:t,children:(0,U.jsxs)(P,{className:`sm:max-w-xl`,children:[(0,U.jsxs)(k,{children:[(0,U.jsx)(E,{children:u?`Hook is still in use`:`Delete hook?`}),(0,U.jsx)(M,{children:u?`These references will break if you force delete this hook.`:`This removes the hook record from the dashboard. If the hook is still referenced, those references will be shown here before force delete is allowed.`})]}),(0,U.jsxs)(`div`,{className:`grid gap-4 rounded-sm border px-4 py-3 sm:grid-cols-2`,children:[(0,U.jsx)(W,{label:`Hook`,value:n.name}),(0,U.jsx)(W,{label:`Runtime`,value:l.label}),(0,U.jsx)(W,{label:`Hook ID`,value:n.id,mono:!0}),(0,U.jsx)(W,{label:`File`,value:n.file,mono:!0})]}),i?(0,U.jsx)(`div`,{className:`rounded-sm border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-foreground`,children:i}):null,u?(0,U.jsxs)(`div`,{className:`space-y-3`,children:[(0,U.jsxs)(`div`,{className:`flex items-start gap-3 rounded-sm border border-amber-500/30 bg-amber-500/10 px-4 py-3 text-sm`,children:[(0,U.jsx)(_,{className:`mt-0.5 h-4 w-4 shrink-0 text-amber-600`}),(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`div`,{className:`font-medium text-foreground`,children:`Force delete only if you will fix these references immediately.`}),(0,U.jsx)(`div`,{className:`text-muted-foreground`,children:`Remove or replace these hook usages first when possible.`})]})]}),(0,U.jsx)(`div`,{className:`max-h-64 space-y-2 overflow-y-auto pr-1`,children:a.map(e=>(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2`,children:[(0,U.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:e.label}),(0,U.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[e.kind,` · `,e.context]}),(0,U.jsx)(`div`,{className:`font-mono text-xs text-muted-foreground break-all`,children:e.path})]},`${e.kind}-${e.path}-${e.context}`))})]}):null,(0,U.jsxs)(A,{children:[(0,U.jsx)(C,{variant:`outline`,onClick:()=>t(!1),children:u?`Close`:`Cancel`}),(0,U.jsxs)(C,{variant:`destructive`,onClick:u?s:o,disabled:r,children:[(0,U.jsx)(c,{className:`h-4 w-4`}),r?`Deleting...`:u?`Force Delete`:`Delete Hook`]})]})]})})}function K({hookName:e,isCreateMode:s,mode:f=`view`,hookHref:p,editHref:m,unsaved:h=!1,isSaving:g=!1,isRunning:_=!1,isDeleting:v=!1,onSave:x,onRun:S,runDisabled:T=!1,onDelete:E,shortcutsOpen:D=!1,onToggleShortcuts:O}){let k=f===`view`&&!s,A=!s&&!k&&f===`edit`,M=!s&&!!S,N=!s&&!!E;return(0,U.jsxs)(`div`,{className:`flex h-14 shrink-0 items-center justify-between border-b px-4 min-w-0`,children:[(0,U.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,U.jsx)(L,{to:`/hooks`,className:`shrink-0 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:`Hooks`}),(0,U.jsx)(w,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),s?(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:`New Hook`}):p&&!k?(0,U.jsx)(L,{to:p,className:`truncate text-sm font-medium transition-colors hover:text-primary`,children:e}):(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e}),A&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(w,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:`Edit`})]}),h&&(0,U.jsx)(R,{variant:`outline`,className:`text-xs`,children:`Unsaved`})]}),(0,U.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:k?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(C,{variant:`outline`,size:`sm`,asChild:!0,children:(0,U.jsxs)(L,{to:m??p??`/hooks`,children:[(0,U.jsx)(o,{className:`h-3.5 w-3.5`}),`Edit`,(0,U.jsx)(a,{shortcut:`E`})]})}),M?(0,U.jsxs)(C,{size:`sm`,onClick:S,disabled:_||T,children:[(0,U.jsx)(n,{className:`h-3.5 w-3.5`}),_?`Running...`:`Run Hook`,(0,U.jsx)(a,{shortcut:`R`,className:`border-primary-foreground/20 bg-primary-foreground/10 text-primary-foreground`})]}):null,N?(0,U.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:E,disabled:v,className:`text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,children:[(0,U.jsx)(c,{className:`h-3.5 w-3.5`}),v?`Deleting...`:`Delete`]}):null,!s&&O?(0,U.jsxs)(d,{open:D,onOpenChange:e=>{e||O()},children:[(0,U.jsxs)(j,{children:[(0,U.jsx)(b,{asChild:!0,children:(0,U.jsx)(u,{asChild:!0,children:(0,U.jsx)(C,{variant:`ghost`,size:`icon-sm`,onClick:O,"aria-label":`Shortcuts`,children:(0,U.jsx)(i,{className:`h-3.5 w-3.5`})})})}),(0,U.jsx)(y,{children:`Shortcuts`})]}),(0,U.jsx)(l,{align:`end`,sideOffset:8,className:`w-72 p-4`,children:(0,U.jsx)(`div`,{className:`space-y-3`,children:(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h4`,{className:`mb-2 text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Actions`}),(0,U.jsx)(r,{hints:[{key:`E`,label:`Edit`},{key:`R`,label:`Run Hook`},{key:`?`,label:`Toggle shortcuts`}]})]})})})]}):null]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:x,disabled:g||!x,children:[(0,U.jsx)(t,{className:`h-3.5 w-3.5`}),g?`Saving...`:`Save`]}),M?(0,U.jsxs)(C,{size:`sm`,onClick:S,disabled:_||T,children:[(0,U.jsx)(n,{className:`h-3.5 w-3.5`}),_?`Running...`:`Run Hook`]}):null,N?(0,U.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:E,disabled:v,className:`text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,children:[(0,U.jsx)(c,{className:`h-3.5 w-3.5`}),v?`Deleting...`:`Delete`]}):null]})})]})}var q=e(F(),1);function J(e){if(!e)return`just now`;let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/1e3);if(n<60)return`just now`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function Y({status:e}){return e===`passed`?(0,U.jsx)(R,{className:`border-emerald-500/20 bg-emerald-500/15 text-emerald-500`,children:`Passed`}):(0,U.jsx)(R,{variant:`destructive`,children:`Failed`})}function X(){return(0,U.jsx)(`div`,{className:`flex h-full items-center justify-center px-6`,children:(0,U.jsxs)(`div`,{className:`max-w-sm text-center`,children:[(0,U.jsx)(`div`,{className:`text-base font-semibold text-foreground`,children:`No run selected`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-muted-foreground`,children:`Run this hook or pick a recent local result to inspect.`})]})})}function Z({rows:e}){return e.length===0?(0,U.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`None`}):(0,U.jsx)(`div`,{className:`rounded-sm border`,children:(0,U.jsx)(`table`,{className:`w-full text-sm`,children:(0,U.jsx)(`tbody`,{children:e.map(([e,t])=>(0,U.jsxs)(`tr`,{className:`border-b last:border-b-0`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-muted-foreground`,children:e}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:t})]},e))})})})}function Q({selectedRun:e}){let[t,n]=(0,q.useState)(`overview`),r=e?.result??null,i=r?.sandbox.networkLogs??[],a=r?.sandbox.networkLogsAvailable===!0&&i.length>0;if((0,q.useEffect)(()=>{n(`overview`)},[e?.id]),(0,q.useEffect)(()=>{!a&&t===`network`&&n(`overview`)},[t,a]),!e)return(0,U.jsx)(X,{});let o=e.result,s=Object.entries(o.variables),c=Object.entries(e.overrideSnapshot);return(0,U.jsxs)(g,{value:t,onValueChange:e=>n(e),className:`flex h-full min-h-0 flex-col gap-0`,children:[o.status===`failed`?null:(0,U.jsx)(`div`,{className:`border-b px-4 py-3`,children:(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,U.jsx)(Y,{status:o.status}),(0,U.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:`Latest hook result`}),(0,U.jsxs)(`div`,{className:`ml-auto flex items-center gap-3 text-xs text-muted-foreground`,children:[(0,U.jsx)(`span`,{children:I(o.duration)}),(0,U.jsx)(`span`,{children:J(o.executedAt)})]})]})}),(0,U.jsxs)(h,{variant:`line`,className:`h-10 w-full justify-start rounded-none border-b px-4`,children:[(0,U.jsx)(p,{value:`overview`,className:`flex-initial rounded-none text-xs`,children:`Overview`}),(0,U.jsx)(p,{value:`output`,className:`flex-initial rounded-none text-xs`,children:`Output`}),(0,U.jsx)(p,{value:`env`,className:`flex-initial rounded-none text-xs`,children:`Env`}),(0,U.jsx)(p,{value:`sandbox`,className:`flex-initial rounded-none text-xs`,children:`Sandbox`}),a?(0,U.jsx)(p,{value:`network`,className:`flex-initial rounded-none text-xs`,children:`Network`}):null]}),(0,U.jsx)(m,{value:`overview`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Status`}),(0,U.jsx)(`div`,{className:`mt-2`,children:(0,U.jsx)(Y,{status:o.status})})]}),(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Duration`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-foreground`,children:I(o.duration)})]}),(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Executed`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-foreground`,children:new Date(o.executedAt).toLocaleString()})]}),(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Recency`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-foreground`,children:J(o.executedAt)})]})]}),o.status===`failed`?(0,U.jsxs)(`div`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Failure summary`}),(0,U.jsx)(`div`,{className:`rounded-sm border border-destructive/30 bg-destructive/10 px-3 py-2.5 text-sm text-foreground`,children:o.error??o.stderr??`Hook run failed.`})]}):null]})})}),(0,U.jsx)(m,{value:`output`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`stdout`}),(0,U.jsx)(`div`,{className:`rounded-sm border bg-muted/20 p-3 font-mono text-xs text-foreground whitespace-pre-wrap break-all`,children:o.stdout||`No stdout captured.`})]}),(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`stderr`}),(0,U.jsx)(`div`,{className:`rounded-sm border bg-destructive/5 p-3 font-mono text-xs text-foreground whitespace-pre-wrap break-all`,children:o.stderr||`No stderr captured.`})]})]})})}),(0,U.jsx)(m,{value:`env`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Emitted variables`}),(0,U.jsx)(Z,{rows:s})]}),(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Applied override snapshot`}),(0,U.jsx)(Z,{rows:c})]})]})})}),(0,U.jsx)(m,{value:`sandbox`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsx)(`div`,{className:`rounded-sm border`,children:(0,U.jsx)(`table`,{className:`w-full text-sm`,children:(0,U.jsxs)(`tbody`,{children:[(0,U.jsxs)(`tr`,{className:`border-b`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Runtime`}),(0,U.jsx)(`td`,{className:`px-3 py-2 text-sm text-foreground`,children:z(o.sandbox.runtime).label})]}),(0,U.jsxs)(`tr`,{className:`border-b`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Image`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:o.sandbox.image})]}),(0,U.jsxs)(`tr`,{className:`border-b`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Docker version`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:o.sandbox.dockerVersion??`Not available`})]}),(0,U.jsxs)(`tr`,{children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Network`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:o.sandbox.networkMode})]})]})})}),a?null:(0,U.jsx)(`div`,{className:`rounded-sm border bg-muted/20 px-3 py-2.5 text-sm text-muted-foreground`,children:`Network logs aren't available for this runtime yet.`})]})})}),a?(0,U.jsx)(m,{value:`network`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsx)(`div`,{className:`p-4`,children:(0,U.jsx)(`div`,{className:`overflow-hidden rounded-sm border`,children:(0,U.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,U.jsx)(`thead`,{children:(0,U.jsxs)(`tr`,{className:`border-b bg-muted/30`,children:[(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Method`}),(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`URL`}),(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Status`}),(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Duration`})]})}),(0,U.jsx)(`tbody`,{children:i.map(e=>(0,U.jsxs)(`tr`,{className:`border-b last:border-b-0`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:e.method}),(0,U.jsxs)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:[(0,U.jsx)(`div`,{children:e.url}),e.error?(0,U.jsx)(`div`,{className:`mt-1 text-destructive`,children:e.error}):null]}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:e.statusCode??`—`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:e.durationMs==null?`—`:I(e.durationMs)})]},e.id))})]})})})})}):null]})}function $(e){if(!e)return`just now`;let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/1e3);if(n<60)return`just now`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function ee({baselineCount:e,baselineFilePath:t,baselineInfo:n,isBaselineLoading:r,overrideRows:i,overridingRowIds:a,recentRuns:o,selectedRunId:l,isRunning:u,runDisabledReason:d,runError:_,onAddOverride:y,onUpdateOverride:b,onRemoveOverride:x,onRun:S,onSelectRun:w}){return(0,U.jsxs)(g,{defaultValue:`inputs`,className:`flex h-full min-h-0 flex-col overflow-hidden`,children:[(0,U.jsx)(`div`,{className:`border-b px-4 py-1.5`,children:(0,U.jsxs)(h,{variant:`line`,className:`h-7 w-auto justify-start rounded-none p-0`,children:[(0,U.jsx)(p,{value:`inputs`,className:`flex-initial rounded-none px-2.5 text-xs`,children:`Input`}),(0,U.jsx)(p,{value:`logs`,className:`flex-initial rounded-none px-2.5 text-xs`,children:`Run logs`})]})}),(0,U.jsx)(m,{value:`inputs`,className:`min-h-0 flex-1 overflow-hidden`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[d?(0,U.jsxs)(`div`,{className:`rounded-sm border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-sm`,children:[(0,U.jsx)(`div`,{className:`font-medium text-foreground`,children:d===`Save this hook to run the latest changes.`?`Save required`:`Hook couldn't be executed`}),(0,U.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:d})]}):null,(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Workspace env`}),(0,U.jsxs)(`div`,{className:`rounded-sm border bg-muted/20 px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-sm text-foreground`,children:r?`Loading workspace variables...`:t?`${e} variable${e===1?``:`s`} available from ${t}`:`No workspace .env file is configured for this project.`}),n?(0,U.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:n}):(0,U.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:`Inherited workspace variables are included automatically for each run.`})]})]}),(0,U.jsxs)(`section`,{className:`space-y-3`,children:[(0,U.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Runtime variables`}),(0,U.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Variables added for this run only. They override inherited workspace values and can model env handoff between hooks.`})]}),(0,U.jsxs)(C,{variant:`outline`,size:`sm`,onClick:y,children:[(0,U.jsx)(s,{className:`h-3.5 w-3.5`}),`Add variable`]})]}),i.length===0?(0,U.jsx)(`div`,{className:`rounded-sm border border-dashed px-3 py-4 text-sm text-muted-foreground`,children:`No runtime variables yet.`}):(0,U.jsx)(`div`,{className:`space-y-2`,children:i.map(e=>{let t=a.has(e.id);return(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-[minmax(0,0.9fr)_minmax(0,1.1fr)_auto]`,children:[(0,U.jsx)(v,{value:e.key,placeholder:`KEY`,onChange:t=>b(e.id,{key:t.target.value})}),(0,U.jsx)(v,{value:e.value,placeholder:`Value`,onChange:t=>b(e.id,{value:t.target.value})}),(0,U.jsx)(C,{variant:`ghost`,size:`icon-sm`,"aria-label":`Remove variable`,onClick:()=>x(e.id),children:(0,U.jsx)(c,{className:`h-3.5 w-3.5`})})]}),t?(0,U.jsx)(`div`,{className:`mt-2 text-xs text-primary`,children:`Overrides .env`}):null]},e.id)})})]})]})})}),(0,U.jsx)(m,{value:`logs`,className:`min-h-0 flex-1 overflow-hidden`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[_?(0,U.jsxs)(`div`,{className:`rounded-sm border border-destructive/30 bg-destructive/10 px-3 py-2.5 text-sm`,children:[(0,U.jsx)(`div`,{className:`font-medium text-foreground`,children:`Hook couldn't be executed`}),(0,U.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`Review stderr or sandbox details, adjust runtime variables, and run again.`}),(0,U.jsx)(`div`,{className:`mt-3 font-mono text-xs text-foreground`,children:_})]}):null,(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Local runs`}),(0,U.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Recent hook runs stay in this browser and are not added to dashboard history.`}),o.length===0?(0,U.jsx)(`div`,{className:`rounded-sm border border-dashed px-3 py-4 text-sm text-muted-foreground`,children:`No run logs in this browser session yet.`}):(0,U.jsx)(`div`,{className:`space-y-2`,children:o.map(e=>(0,U.jsxs)(`button`,{type:`button`,onClick:()=>w(e.id),className:T(`flex w-full items-center justify-between rounded-sm border px-3 py-2.5 text-left transition-colors`,`hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50`,(l??o[0]?.id)===e.id&&`border-primary/50 bg-primary/10`),children:[(0,U.jsxs)(`div`,{className:`min-w-0`,children:[(0,U.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:e.result.status===`passed`?`Passed`:`Failed`}),(0,U.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:$(e.result.executedAt)})]}),(0,U.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:I(e.result.duration)})]},e.id))})]})]})})})]})}function te({isMobile:e,leftPane:t,rightTopPane:n,rightBottomPane:r,className:i}){return e?(0,U.jsxs)(`div`,{className:T(`flex min-h-0 flex-1 flex-col overflow-auto`,i),children:[(0,U.jsx)(`section`,{"data-slot":`leftPane`,className:`min-h-0`,children:t}),(0,U.jsx)(`section`,{"data-slot":`rightTopPane`,className:`border-t`,children:n}),(0,U.jsx)(`section`,{"data-slot":`rightBottomPane`,className:`min-h-[360px] border-t`,children:r})]}):(0,U.jsxs)(V,{orientation:`horizontal`,className:T(`min-h-0 flex-1`,i),children:[(0,U.jsx)(B,{defaultSize:46,minSize:30,children:(0,U.jsx)(`div`,{"data-slot":`leftPane`,className:`h-full min-h-0 overflow-hidden`,children:t})}),(0,U.jsx)(H,{withHandle:!0}),(0,U.jsx)(B,{defaultSize:54,minSize:30,children:(0,U.jsxs)(V,{orientation:`vertical`,className:`h-full min-h-0`,children:[(0,U.jsx)(B,{defaultSize:42,minSize:24,children:(0,U.jsx)(`div`,{"data-slot":`rightTopPane`,className:`h-full min-h-0 overflow-hidden border-b`,children:n})}),(0,U.jsx)(H,{withHandle:!0}),(0,U.jsx)(B,{defaultSize:58,minSize:28,children:(0,U.jsx)(`div`,{"data-slot":`rightBottomPane`,className:`h-full min-h-0 overflow-hidden`,children:r})})]})})]})}function ne(e={}){return{id:`override-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,key:e.key??``,value:e.value??``}}function re(e){return e.map(e=>({key:e.key.trim(),value:e.value})).filter(e=>e.key.length>0)}function ie({hookId:e}){let[t,n]=(0,q.useState)([]),[r,i]=(0,q.useState)(null),[a,o]=(0,q.useState)(null),[s,c]=(0,q.useState)(!0),[l,u]=(0,q.useState)([]),[d,f]=(0,q.useState)([]),[p,m]=(0,q.useState)(null),[h,g]=(0,q.useState)(!1),[_,v]=(0,q.useState)(null),y=(0,q.useRef)(0);(0,q.useEffect)(()=>{u([]),f([]),m(null),v(null)},[e]),(0,q.useEffect)(()=>{let e=!1;return c(!0),N().then(t=>{e||(n(t.variables),i(t.filePath),o(t.error??null))}).catch(t=>{e||(n([]),i(null),o(t instanceof Error?t.message:`Failed to load workspace variables`))}).finally(()=>{e||c(!1)}),()=>{e=!0}},[e]);let b=(0,q.useMemo)(()=>new Set(t.map(e=>e.key)),[t]),x=(0,q.useMemo)(()=>re(l),[l]),C=(0,q.useMemo)(()=>{let e=new Set;for(let t of l){let n=t.key.trim();n&&b.has(n)&&e.add(t.id)}return e},[b,l]),w=(0,q.useMemo)(()=>d.find(e=>e.id===p)??d[0]??null,[d,p]);function T(e={}){u(t=>[...t,ne(e)])}function E(e,t){u(n=>n.map(n=>n.id===e?{...n,...t}:n))}function O(e){u(t=>t.filter(t=>t.id!==e))}async function k(){if(!e||h)return null;g(!0),v(null);let t=Object.fromEntries(x.map(e=>[e.key,e.value]));try{let n=await D(e,{overrides:x});y.current+=1;let r={id:`hook-run-${y.current}`,result:n,overrideSnapshot:t};return f(e=>[r,...e].slice(0,6)),m(r.id),r}catch(e){return e instanceof S?v(e.message):v(e instanceof Error?e.message:`Hook run failed`),null}finally{g(!1)}}return{baselineVariables:t,baselineFilePath:r,baselineInfo:a,isBaselineLoading:s,overrideRows:l,normalizedOverrides:x,overridingRowIds:C,recentRuns:d,selectedRunId:p,selectedRun:w,isRunning:h,runError:_,addOverrideRow:T,updateOverrideRow:E,removeOverrideRow:O,selectRun:m,clearRunError:()=>v(null),submitRun:k}}export{K as a,Q as i,te as n,G as o,ee as r,ie as t};
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{n as t,r as n}from"./monaco-editor-DF4W-NC-.js";import{n as r,r as i,t as a}from"./shortcut-hints-CtwepXR1.js";import{t as o}from"./pencil-CZF_NGi6.js";import{t as s}from"./plus-Qf7V331e.js";import{t as c}from"./trash-2-BhJSaMLG.js";import{n as l,r as u,t as d}from"./popover-DwYq4QYF.js";import{t as f}from"./scroll-area-BmkJ1y7Q.js";import{i as p,n as m,r as h,t as g}from"./tabs-DzjvuMEX.js";import{Fn as _,Ht as v,Mt as y,Pt as b,Qn as x,S,Ut as C,Wn as w,Wt as T,_ as E,_t as D,f as O,g as k,h as A,jt as j,m as M,mt as N,p as P,pr as F,qt as I,sr as L}from"./index-B4FdO6Vk.js";import{t as R}from"./badge-CC1v3nk4.js";import{r as z}from"./hook-runtime-CTRviwQE.js";import{n as B,r as V,t as H}from"./resizable-B2X6KlcC.js";var U=x();function W({label:e,value:t,mono:n=!1}){return(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:e}),(0,U.jsx)(`div`,{className:n?`font-mono text-xs text-foreground break-all`:`text-sm text-foreground`,children:t})]})}function G({open:e,onOpenChange:t,hook:n,isDeleting:r,deleteError:i,blockedReferences:a,onDelete:o,onForceDelete:s}){let l=z(n.runtime),u=a.length>0;return(0,U.jsx)(O,{open:e,onOpenChange:t,children:(0,U.jsxs)(P,{className:`sm:max-w-xl`,children:[(0,U.jsxs)(k,{children:[(0,U.jsx)(E,{children:u?`Hook is still in use`:`Delete hook?`}),(0,U.jsx)(M,{children:u?`These references will break if you force delete this hook.`:`This removes the hook record from the dashboard. If the hook is still referenced, those references will be shown here before force delete is allowed.`})]}),(0,U.jsxs)(`div`,{className:`grid gap-4 rounded-sm border px-4 py-3 sm:grid-cols-2`,children:[(0,U.jsx)(W,{label:`Hook`,value:n.name}),(0,U.jsx)(W,{label:`Runtime`,value:l.label}),(0,U.jsx)(W,{label:`Hook ID`,value:n.id,mono:!0}),(0,U.jsx)(W,{label:`File`,value:n.file,mono:!0})]}),i?(0,U.jsx)(`div`,{className:`rounded-sm border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-foreground`,children:i}):null,u?(0,U.jsxs)(`div`,{className:`space-y-3`,children:[(0,U.jsxs)(`div`,{className:`flex items-start gap-3 rounded-sm border border-amber-500/30 bg-amber-500/10 px-4 py-3 text-sm`,children:[(0,U.jsx)(_,{className:`mt-0.5 h-4 w-4 shrink-0 text-amber-600`}),(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`div`,{className:`font-medium text-foreground`,children:`Force delete only if you will fix these references immediately.`}),(0,U.jsx)(`div`,{className:`text-muted-foreground`,children:`Remove or replace these hook usages first when possible.`})]})]}),(0,U.jsx)(`div`,{className:`max-h-64 space-y-2 overflow-y-auto pr-1`,children:a.map(e=>(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2`,children:[(0,U.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:e.label}),(0,U.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[e.kind,` · `,e.context]}),(0,U.jsx)(`div`,{className:`font-mono text-xs text-muted-foreground break-all`,children:e.path})]},`${e.kind}-${e.path}-${e.context}`))})]}):null,(0,U.jsxs)(A,{children:[(0,U.jsx)(C,{variant:`outline`,onClick:()=>t(!1),children:u?`Close`:`Cancel`}),(0,U.jsxs)(C,{variant:`destructive`,onClick:u?s:o,disabled:r,children:[(0,U.jsx)(c,{className:`h-4 w-4`}),r?`Deleting...`:u?`Force Delete`:`Delete Hook`]})]})]})})}function K({hookName:e,isCreateMode:s,mode:f=`view`,hookHref:p,editHref:m,unsaved:h=!1,isSaving:g=!1,isRunning:_=!1,isDeleting:v=!1,onSave:x,onRun:S,runDisabled:T=!1,onDelete:E,shortcutsOpen:D=!1,onToggleShortcuts:O}){let k=f===`view`&&!s,A=!s&&!k&&f===`edit`,M=!s&&!!S,N=!s&&!!E;return(0,U.jsxs)(`div`,{className:`flex h-14 shrink-0 items-center justify-between border-b px-4 min-w-0`,children:[(0,U.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,U.jsx)(L,{to:`/hooks`,className:`shrink-0 text-sm text-muted-foreground transition-colors hover:text-foreground`,children:`Hooks`}),(0,U.jsx)(w,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),s?(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:`New Hook`}):p&&!k?(0,U.jsx)(L,{to:p,className:`truncate text-sm font-medium transition-colors hover:text-primary`,children:e}):(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e}),A&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(w,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:`Edit`})]}),h&&(0,U.jsx)(R,{variant:`outline`,className:`text-xs`,children:`Unsaved`})]}),(0,U.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:k?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(C,{variant:`outline`,size:`sm`,asChild:!0,children:(0,U.jsxs)(L,{to:m??p??`/hooks`,children:[(0,U.jsx)(o,{className:`h-3.5 w-3.5`}),`Edit`,(0,U.jsx)(a,{shortcut:`E`})]})}),M?(0,U.jsxs)(C,{size:`sm`,onClick:S,disabled:_||T,children:[(0,U.jsx)(n,{className:`h-3.5 w-3.5`}),_?`Running...`:`Run Hook`,(0,U.jsx)(a,{shortcut:`R`,className:`border-primary-foreground/20 bg-primary-foreground/10 text-primary-foreground`})]}):null,N?(0,U.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:E,disabled:v,className:`text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,children:[(0,U.jsx)(c,{className:`h-3.5 w-3.5`}),v?`Deleting...`:`Delete`]}):null,!s&&O?(0,U.jsxs)(d,{open:D,onOpenChange:e=>{e||O()},children:[(0,U.jsxs)(j,{children:[(0,U.jsx)(b,{asChild:!0,children:(0,U.jsx)(u,{asChild:!0,children:(0,U.jsx)(C,{variant:`ghost`,size:`icon-sm`,onClick:O,"aria-label":`Shortcuts`,children:(0,U.jsx)(i,{className:`h-3.5 w-3.5`})})})}),(0,U.jsx)(y,{children:`Shortcuts`})]}),(0,U.jsx)(l,{align:`end`,sideOffset:8,className:`w-72 p-4`,children:(0,U.jsx)(`div`,{className:`space-y-3`,children:(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h4`,{className:`mb-2 text-[10px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Actions`}),(0,U.jsx)(r,{hints:[{key:`E`,label:`Edit`},{key:`R`,label:`Run Hook`},{key:`?`,label:`Toggle shortcuts`}]})]})})})]}):null]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:x,disabled:g||!x,children:[(0,U.jsx)(t,{className:`h-3.5 w-3.5`}),g?`Saving...`:`Save`]}),M?(0,U.jsxs)(C,{size:`sm`,onClick:S,disabled:_||T,children:[(0,U.jsx)(n,{className:`h-3.5 w-3.5`}),_?`Running...`:`Run Hook`]}):null,N?(0,U.jsxs)(C,{variant:`ghost`,size:`sm`,onClick:E,disabled:v,className:`text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,children:[(0,U.jsx)(c,{className:`h-3.5 w-3.5`}),v?`Deleting...`:`Delete`]}):null]})})]})}var q=e(F(),1);function J(e){if(!e)return`just now`;let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/1e3);if(n<60)return`just now`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function Y({status:e}){return e===`passed`?(0,U.jsx)(R,{className:`border-emerald-500/20 bg-emerald-500/15 text-emerald-500`,children:`Passed`}):(0,U.jsx)(R,{variant:`destructive`,children:`Failed`})}function X(){return(0,U.jsx)(`div`,{className:`flex h-full items-center justify-center px-6`,children:(0,U.jsxs)(`div`,{className:`max-w-sm text-center`,children:[(0,U.jsx)(`div`,{className:`text-base font-semibold text-foreground`,children:`No run selected`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-muted-foreground`,children:`Run this hook or pick a recent local result to inspect.`})]})})}function Z({rows:e}){return e.length===0?(0,U.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`None`}):(0,U.jsx)(`div`,{className:`rounded-sm border`,children:(0,U.jsx)(`table`,{className:`w-full text-sm`,children:(0,U.jsx)(`tbody`,{children:e.map(([e,t])=>(0,U.jsxs)(`tr`,{className:`border-b last:border-b-0`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-muted-foreground`,children:e}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:t})]},e))})})})}function Q({selectedRun:e}){let[t,n]=(0,q.useState)(`overview`),r=e?.result??null,i=r?.sandbox.networkLogs??[],a=r?.sandbox.networkLogsAvailable===!0&&i.length>0;if((0,q.useEffect)(()=>{n(`overview`)},[e?.id]),(0,q.useEffect)(()=>{!a&&t===`network`&&n(`overview`)},[t,a]),!e)return(0,U.jsx)(X,{});let o=e.result,s=Object.entries(o.variables),c=Object.entries(e.overrideSnapshot);return(0,U.jsxs)(g,{value:t,onValueChange:e=>n(e),className:`flex h-full min-h-0 flex-col gap-0`,children:[o.status===`failed`?null:(0,U.jsx)(`div`,{className:`border-b px-4 py-3`,children:(0,U.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,U.jsx)(Y,{status:o.status}),(0,U.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:`Latest hook result`}),(0,U.jsxs)(`div`,{className:`ml-auto flex items-center gap-3 text-xs text-muted-foreground`,children:[(0,U.jsx)(`span`,{children:I(o.duration)}),(0,U.jsx)(`span`,{children:J(o.executedAt)})]})]})}),(0,U.jsxs)(h,{variant:`line`,className:`h-10 w-full justify-start rounded-none border-b px-4`,children:[(0,U.jsx)(p,{value:`overview`,className:`flex-initial rounded-none text-xs`,children:`Overview`}),(0,U.jsx)(p,{value:`output`,className:`flex-initial rounded-none text-xs`,children:`Output`}),(0,U.jsx)(p,{value:`env`,className:`flex-initial rounded-none text-xs`,children:`Env`}),(0,U.jsx)(p,{value:`sandbox`,className:`flex-initial rounded-none text-xs`,children:`Sandbox`}),a?(0,U.jsx)(p,{value:`network`,className:`flex-initial rounded-none text-xs`,children:`Network`}):null]}),(0,U.jsx)(m,{value:`overview`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Status`}),(0,U.jsx)(`div`,{className:`mt-2`,children:(0,U.jsx)(Y,{status:o.status})})]}),(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Duration`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-foreground`,children:I(o.duration)})]}),(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Executed`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-foreground`,children:new Date(o.executedAt).toLocaleString()})]}),(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Recency`}),(0,U.jsx)(`div`,{className:`mt-2 text-sm text-foreground`,children:J(o.executedAt)})]})]}),o.status===`failed`?(0,U.jsxs)(`div`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Failure summary`}),(0,U.jsx)(`div`,{className:`rounded-sm border border-destructive/30 bg-destructive/10 px-3 py-2.5 text-sm text-foreground`,children:o.error??o.stderr??`Hook run failed.`})]}):null]})})}),(0,U.jsx)(m,{value:`output`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`stdout`}),(0,U.jsx)(`div`,{className:`rounded-sm border bg-muted/20 p-3 font-mono text-xs text-foreground whitespace-pre-wrap break-all`,children:o.stdout||`No stdout captured.`})]}),(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`stderr`}),(0,U.jsx)(`div`,{className:`rounded-sm border bg-destructive/5 p-3 font-mono text-xs text-foreground whitespace-pre-wrap break-all`,children:o.stderr||`No stderr captured.`})]})]})})}),(0,U.jsx)(m,{value:`env`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Emitted variables`}),(0,U.jsx)(Z,{rows:s})]}),(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Applied override snapshot`}),(0,U.jsx)(Z,{rows:c})]})]})})}),(0,U.jsx)(m,{value:`sandbox`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,U.jsx)(`div`,{className:`rounded-sm border`,children:(0,U.jsx)(`table`,{className:`w-full text-sm`,children:(0,U.jsxs)(`tbody`,{children:[(0,U.jsxs)(`tr`,{className:`border-b`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Runtime`}),(0,U.jsx)(`td`,{className:`px-3 py-2 text-sm text-foreground`,children:z(o.sandbox.runtime).label})]}),(0,U.jsxs)(`tr`,{className:`border-b`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Image`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:o.sandbox.image})]}),(0,U.jsxs)(`tr`,{className:`border-b`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Docker version`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:o.sandbox.dockerVersion??`Not available`})]}),(0,U.jsxs)(`tr`,{children:[(0,U.jsx)(`td`,{className:`px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Network`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:o.sandbox.networkMode})]})]})})}),a?null:(0,U.jsx)(`div`,{className:`rounded-sm border bg-muted/20 px-3 py-2.5 text-sm text-muted-foreground`,children:`Network logs aren't available for this runtime yet.`})]})})}),a?(0,U.jsx)(m,{value:`network`,className:`min-h-0 flex-1`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsx)(`div`,{className:`p-4`,children:(0,U.jsx)(`div`,{className:`overflow-hidden rounded-sm border`,children:(0,U.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,U.jsx)(`thead`,{children:(0,U.jsxs)(`tr`,{className:`border-b bg-muted/30`,children:[(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Method`}),(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`URL`}),(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Status`}),(0,U.jsx)(`th`,{className:`px-3 py-2 text-left text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Duration`})]})}),(0,U.jsx)(`tbody`,{children:i.map(e=>(0,U.jsxs)(`tr`,{className:`border-b last:border-b-0`,children:[(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:e.method}),(0,U.jsxs)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground break-all`,children:[(0,U.jsx)(`div`,{children:e.url}),e.error?(0,U.jsx)(`div`,{className:`mt-1 text-destructive`,children:e.error}):null]}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:e.statusCode??`—`}),(0,U.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-foreground`,children:e.durationMs==null?`—`:I(e.durationMs)})]},e.id))})]})})})})}):null]})}function $(e){if(!e)return`just now`;let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/1e3);if(n<60)return`just now`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function ee({baselineCount:e,baselineFilePath:t,baselineInfo:n,isBaselineLoading:r,overrideRows:i,overridingRowIds:a,recentRuns:o,selectedRunId:l,isRunning:u,runDisabledReason:d,runError:_,onAddOverride:y,onUpdateOverride:b,onRemoveOverride:x,onRun:S,onSelectRun:w}){return(0,U.jsxs)(g,{defaultValue:`inputs`,className:`flex h-full min-h-0 flex-col overflow-hidden`,children:[(0,U.jsx)(`div`,{className:`border-b px-4 py-1.5`,children:(0,U.jsxs)(h,{variant:`line`,className:`h-7 w-auto justify-start rounded-none p-0`,children:[(0,U.jsx)(p,{value:`inputs`,className:`flex-initial rounded-none px-2.5 text-xs`,children:`Input`}),(0,U.jsx)(p,{value:`logs`,className:`flex-initial rounded-none px-2.5 text-xs`,children:`Run logs`})]})}),(0,U.jsx)(m,{value:`inputs`,className:`min-h-0 flex-1 overflow-hidden`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[d?(0,U.jsxs)(`div`,{className:`rounded-sm border border-amber-500/30 bg-amber-500/10 px-3 py-2.5 text-sm`,children:[(0,U.jsx)(`div`,{className:`font-medium text-foreground`,children:d===`Save this hook to run the latest changes.`?`Save required`:`Hook couldn't be executed`}),(0,U.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:d})]}):null,(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Workspace env`}),(0,U.jsxs)(`div`,{className:`rounded-sm border bg-muted/20 px-3 py-2.5`,children:[(0,U.jsx)(`div`,{className:`text-sm text-foreground`,children:r?`Loading workspace variables...`:t?`${e} variable${e===1?``:`s`} available from ${t}`:`No workspace .env file is configured for this project.`}),n?(0,U.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:n}):(0,U.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:`Inherited workspace variables are included automatically for each run.`})]})]}),(0,U.jsxs)(`section`,{className:`space-y-3`,children:[(0,U.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,U.jsxs)(`div`,{className:`space-y-1`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Runtime variables`}),(0,U.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Variables added for this run only. They override inherited workspace values and can model env handoff between hooks.`})]}),(0,U.jsxs)(C,{variant:`outline`,size:`sm`,onClick:y,children:[(0,U.jsx)(s,{className:`h-3.5 w-3.5`}),`Add variable`]})]}),i.length===0?(0,U.jsx)(`div`,{className:`rounded-sm border border-dashed px-3 py-4 text-sm text-muted-foreground`,children:`No runtime variables yet.`}):(0,U.jsx)(`div`,{className:`space-y-2`,children:i.map(e=>{let t=a.has(e.id);return(0,U.jsxs)(`div`,{className:`rounded-sm border px-3 py-2.5`,children:[(0,U.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-[minmax(0,0.9fr)_minmax(0,1.1fr)_auto]`,children:[(0,U.jsx)(v,{value:e.key,placeholder:`KEY`,onChange:t=>b(e.id,{key:t.target.value})}),(0,U.jsx)(v,{value:e.value,placeholder:`Value`,onChange:t=>b(e.id,{value:t.target.value})}),(0,U.jsx)(C,{variant:`ghost`,size:`icon-sm`,"aria-label":`Remove variable`,onClick:()=>x(e.id),children:(0,U.jsx)(c,{className:`h-3.5 w-3.5`})})]}),t?(0,U.jsx)(`div`,{className:`mt-2 text-xs text-primary`,children:`Overrides .env`}):null]},e.id)})})]})]})})}),(0,U.jsx)(m,{value:`logs`,className:`min-h-0 flex-1 overflow-hidden`,children:(0,U.jsx)(f,{className:`h-full`,children:(0,U.jsxs)(`div`,{className:`space-y-4 p-4`,children:[_?(0,U.jsxs)(`div`,{className:`rounded-sm border border-destructive/30 bg-destructive/10 px-3 py-2.5 text-sm`,children:[(0,U.jsx)(`div`,{className:`font-medium text-foreground`,children:`Hook couldn't be executed`}),(0,U.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`Review stderr or sandbox details, adjust runtime variables, and run again.`}),(0,U.jsx)(`div`,{className:`mt-3 font-mono text-xs text-foreground`,children:_})]}):null,(0,U.jsxs)(`section`,{className:`space-y-2`,children:[(0,U.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:`Local runs`}),(0,U.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:`Recent hook runs stay in this browser and are not added to dashboard history.`}),o.length===0?(0,U.jsx)(`div`,{className:`rounded-sm border border-dashed px-3 py-4 text-sm text-muted-foreground`,children:`No run logs in this browser session yet.`}):(0,U.jsx)(`div`,{className:`space-y-2`,children:o.map(e=>(0,U.jsxs)(`button`,{type:`button`,onClick:()=>w(e.id),className:T(`flex w-full items-center justify-between rounded-sm border px-3 py-2.5 text-left transition-colors`,`hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50`,(l??o[0]?.id)===e.id&&`border-primary/50 bg-primary/10`),children:[(0,U.jsxs)(`div`,{className:`min-w-0`,children:[(0,U.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:e.result.status===`passed`?`Passed`:`Failed`}),(0,U.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:$(e.result.executedAt)})]}),(0,U.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:I(e.result.duration)})]},e.id))})]})]})})})]})}function te({isMobile:e,leftPane:t,rightTopPane:n,rightBottomPane:r,className:i}){return e?(0,U.jsxs)(`div`,{className:T(`flex min-h-0 flex-1 flex-col overflow-auto`,i),children:[(0,U.jsx)(`section`,{"data-slot":`leftPane`,className:`min-h-0`,children:t}),(0,U.jsx)(`section`,{"data-slot":`rightTopPane`,className:`border-t`,children:n}),(0,U.jsx)(`section`,{"data-slot":`rightBottomPane`,className:`min-h-[360px] border-t`,children:r})]}):(0,U.jsxs)(V,{orientation:`horizontal`,className:T(`min-h-0 flex-1`,i),children:[(0,U.jsx)(B,{defaultSize:46,minSize:30,children:(0,U.jsx)(`div`,{"data-slot":`leftPane`,className:`h-full min-h-0 overflow-hidden`,children:t})}),(0,U.jsx)(H,{withHandle:!0}),(0,U.jsx)(B,{defaultSize:54,minSize:30,children:(0,U.jsxs)(V,{orientation:`vertical`,className:`h-full min-h-0`,children:[(0,U.jsx)(B,{defaultSize:42,minSize:24,children:(0,U.jsx)(`div`,{"data-slot":`rightTopPane`,className:`h-full min-h-0 overflow-hidden border-b`,children:n})}),(0,U.jsx)(H,{withHandle:!0}),(0,U.jsx)(B,{defaultSize:58,minSize:28,children:(0,U.jsx)(`div`,{"data-slot":`rightBottomPane`,className:`h-full min-h-0 overflow-hidden`,children:r})})]})})]})}function ne(e={}){return{id:`override-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,key:e.key??``,value:e.value??``}}function re(e){return e.map(e=>({key:e.key.trim(),value:e.value})).filter(e=>e.key.length>0)}function ie({hookId:e}){let[t,n]=(0,q.useState)([]),[r,i]=(0,q.useState)(null),[a,o]=(0,q.useState)(null),[s,c]=(0,q.useState)(!0),[l,u]=(0,q.useState)([]),[d,f]=(0,q.useState)([]),[p,m]=(0,q.useState)(null),[h,g]=(0,q.useState)(!1),[_,v]=(0,q.useState)(null),y=(0,q.useRef)(0);(0,q.useEffect)(()=>{u([]),f([]),m(null),v(null)},[e]),(0,q.useEffect)(()=>{let e=!1;return c(!0),N().then(t=>{e||(n(t.variables),i(t.filePath),o(t.error??null))}).catch(t=>{e||(n([]),i(null),o(t instanceof Error?t.message:`Failed to load workspace variables`))}).finally(()=>{e||c(!1)}),()=>{e=!0}},[e]);let b=(0,q.useMemo)(()=>new Set(t.map(e=>e.key)),[t]),x=(0,q.useMemo)(()=>re(l),[l]),C=(0,q.useMemo)(()=>{let e=new Set;for(let t of l){let n=t.key.trim();n&&b.has(n)&&e.add(t.id)}return e},[b,l]),w=(0,q.useMemo)(()=>d.find(e=>e.id===p)??d[0]??null,[d,p]);function T(e={}){u(t=>[...t,ne(e)])}function E(e,t){u(n=>n.map(n=>n.id===e?{...n,...t}:n))}function O(e){u(t=>t.filter(t=>t.id!==e))}async function k(){if(!e||h)return null;g(!0),v(null);let t=Object.fromEntries(x.map(e=>[e.key,e.value]));try{let n=await D(e,{overrides:x});y.current+=1;let r={id:`hook-run-${y.current}`,result:n,overrideSnapshot:t};return f(e=>[r,...e].slice(0,6)),m(r.id),r}catch(e){return e instanceof S?v(e.message):v(e instanceof Error?e.message:`Hook run failed`),null}finally{g(!1)}}return{baselineVariables:t,baselineFilePath:r,baselineInfo:a,isBaselineLoading:s,overrideRows:l,normalizedOverrides:x,overridingRowIds:C,recentRuns:d,selectedRunId:p,selectedRun:w,isRunning:h,runError:_,addOverrideRow:T,updateOverrideRow:E,removeOverrideRow:O,selectRun:m,clearRunError:()=>v(null),submitRun:k}}export{K as a,Q as i,te as n,G as o,ee as r,ie as t};
@@ -1 +1 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{pr as t}from"./index-Bvtm2F6f.js";var n=e(t(),1);function r(e){let t=(0,n.useRef)(e);(0,n.useLayoutEffect)(()=>{t.current=e},[e]),(0,n.useEffect)(()=>{function e(e){let n=e.target,r=n.tagName;if((r===`INPUT`||r===`TEXTAREA`||r===`SELECT`||n.isContentEditable)&&!(r===`TEXTAREA`&&n.getAttribute(`aria-readonly`)===`true`&&n.closest(`.monaco-editor`))){e.key===`Escape`&&n.blur();return}let i=e.key.toLowerCase();if(e.shiftKey&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let n=`shift+${i}`,r=t.current[n];if(r){e.preventDefault(),r(e);return}}if(e.key!==`Escape`&&(e.ctrlKey||e.metaKey||e.altKey)&&!((e.metaKey||e.ctrlKey)&&i===`enter`)||e.shiftKey&&e.key!==`Escape`)return;let a=t.current[i];a&&(e.preventDefault(),a(e))}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[])}export{r as t};
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{pr as t}from"./index-B4FdO6Vk.js";var n=e(t(),1);function r(e){let t=(0,n.useRef)(e);(0,n.useLayoutEffect)(()=>{t.current=e},[e]),(0,n.useEffect)(()=>{function e(e){let n=e.target,r=n.tagName;if((r===`INPUT`||r===`TEXTAREA`||r===`SELECT`||n.isContentEditable)&&!(r===`TEXTAREA`&&n.getAttribute(`aria-readonly`)===`true`&&n.closest(`.monaco-editor`))){e.key===`Escape`&&n.blur();return}let i=e.key.toLowerCase();if(e.shiftKey&&!e.ctrlKey&&!e.metaKey&&!e.altKey){let n=`shift+${i}`,r=t.current[n];if(r){e.preventDefault(),r(e);return}}if(e.key!==`Escape`&&(e.ctrlKey||e.metaKey||e.altKey)&&!((e.metaKey||e.ctrlKey)&&i===`enter`)||e.shiftKey&&e.key!==`Escape`)return;let a=t.current[i];a&&(e.preventDefault(),a(e))}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[])}export{r as t};
@@ -1 +1 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{Qn as t,pr as n}from"./index-Bvtm2F6f.js";var r=e(n(),1);t();var i=r.createContext(void 0);function a(e){let t=r.useContext(i);return e||t||`ltr`}function o(e,[t,n]){return Math.min(n,Math.max(t,e))}function s(e){return e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`)?e.slice(1,-1):e}function c(e){(0,r.useEffect)(()=>(document.title=`${s(e)} | agent-qa`,()=>{document.title=`agent-qa`}),[e])}export{o as n,a as r,c as t};
1
+ import{r as e}from"./chunk-CilyBKbf.js";import{Qn as t,pr as n}from"./index-B4FdO6Vk.js";var r=e(n(),1);t();var i=r.createContext(void 0);function a(e){let t=r.useContext(i);return e||t||`ltr`}function o(e,[t,n]){return Math.min(n,Math.max(t,e))}function s(e){return e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`)?e.slice(1,-1):e}function c(e){(0,r.useEffect)(()=>(document.title=`${s(e)} | agent-qa`,()=>{document.title=`agent-qa`}),[e])}export{o as n,a as r,c as t};